:root{--portal-success:#15803d;--portal-success-bg:#dcfce7;--portal-success-dark:#86efac}.portal-page{min-height:100vh}.portal-login-form,.portal-page{display:flex;flex-direction:column}.portal-login-form{gap:20px}.portal-login-btn{width:100%;justify-content:center;margin-top:4px}.portal-project-heading{margin-bottom:16px}.portal-project-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:80px}.portal-meta-item,.portal-meta-sep{font-size:13px;color:var(--fg-muted)}.portal-meta-sep{opacity:.3}.portal-meta-delivered{color:var(--portal-success);font-weight:700}[data-theme=dark] .portal-meta-delivered{color:var(--portal-success-dark)}.portal-status{color:var(--bg)}.portal-status--pending{background:var(--fg-muted)}.portal-status--planning{background:var(--fg)}.portal-status--review{background:#eb7025}.portal-status--delivered{background:#10b15a}.portal-status--archived{background:var(--fg-muted);opacity:.6}.portal-status--in-progress,.portal-sub-status--active{background:#2563eb}.portal-sub-status--expiring{background:#eb7025}.portal-sub-status--expired{background:var(--danger)}.portal-sub-status--cancelled{background:var(--fg-muted);opacity:.6}.portal-sub-card{display:flex;flex-direction:column;transition:transform .2s;line-height:1.55}.portal-sub-name{margin-top:12px;font-size:17px;font-weight:700;letter-spacing:-.02em}.portal-sub-working{width:12px;height:12px;margin:0 -3px 0 4px;filter:invert(1) brightness(2)}[data-theme=dark] .portal-sub-working{filter:invert(1) brightness(0)}@media (prefers-reduced-motion:reduce){.portal-sub-working{animation:none;border-color:var(--fg-muted)}}.portal-sub-renew{margin-top:6px;font-size:13px;color:var(--fg-muted)}.portal-sub-note{margin-top:16px;font-size:13px;border-radius:var(--r-card);background:var(--bg-3);padding:16px;color:var(--danger)}.portal-sub-includes-label{margin-top:16px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-muted)}.portal-sub-includes{list-style:none;padding:0;margin:12px 0 0;display:grid;gap:8px}.portal-sub-includes li{font-size:11px;padding-left:16px;position:relative}.portal-sub-includes li:before{content:"✓";position:absolute;left:0}.portal-projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}@media (min-width:900px){.portal-projects-grid--wide{grid-template-columns:repeat(auto-fill,minmax(380px,1fr))}}.portal-project-card{text-decoration:none;color:inherit;transition:transform .2s;min-height:320px}.portal-project-card .pkg-name{min-height:120px}.portal-card--lifted,.portal-project-card:hover{transform:translateY(-2px)}.portal-card-progress{display:flex;align-items:center;gap:12px;margin:30px 0 16px}.portal-card-files+.portal-card-progress{margin-top:8px}.portal-progress-bar{flex:1 1;height:4px;background:var(--border);border-radius:var(--r-pill);overflow:hidden}.portal-progress-fill{height:100%;background:var(--accent);border-radius:var(--r-pill)}.portal-progress-label{font-size:11px;color:var(--fg-muted);white-space:nowrap}.portal-card-files{font-size:12px;color:var(--fg-muted);margin-top:8px}.portal-slider-head{display:flex;flex-direction:column;gap:16px;width:100%}.portal-slider-row{align-items:center}.portal-slider-track{margin-top:28px;padding-top:4px}.portal-slider-track .portal-project-card{flex:0 0 300px}@media (max-width:640px){.portal-slider-track .portal-project-card{flex-basis:240px}}.portal-plans-inner{margin-top:80px}.ptl{--ptl-lane-h:26px}.ptl-axis{position:relative;height:16px;margin-bottom:8px}.ptl-axis-label{position:absolute;top:0;padding-left:5px;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;color:var(--fg-muted);border-left:1px solid var(--border)}.ptl-tracks{gap:16px}.ptl-track,.ptl-tracks{display:flex;flex-direction:column}.ptl-track{gap:8px}.ptl-track-head{display:flex;align-items:center;gap:8px}.ptl-track-name{font-size:14px;font-weight:700}.ptl-lane{position:relative;height:var(--ptl-lane-h);background:var(--bg-2);border-radius:8px}.ptl-gridline{position:absolute;top:0;bottom:0;width:1px;background:var(--border);opacity:.6}.ptl-today{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--accent);z-index:3}.ptl-bar{position:absolute;top:5px;height:calc(var(--ptl-lane-h) - 10px);min-width:6px;border-radius:5px;z-index:2}.ptl-bar--pending{background:#94a3b8}.ptl-bar--planning{background:var(--fg)}.ptl-bar--review{background:#eb7025}.ptl-bar--delivered{background:#10b15a}.ptl-bar--archived{background:var(--fg-muted);opacity:.6}.ptl-bar--in-progress,.ptl-bar--sub-active{background:#2563eb}.ptl-bar--sub-expiring{background:#eb7025}.ptl-bar--sub-expired{background:var(--danger)}.ptl-bar--sub-cancelled{background:var(--fg-muted);opacity:.6}.ptl-ms{position:absolute;top:50%;width:9px;height:9px;margin-left:-4.5px;transform:translateY(-50%) rotate(45deg);background:var(--bg);border:1.5px solid var(--fg);z-index:4}.ptl-ms.done{background:var(--accent);border-color:var(--accent)}.ptl-legend{display:inline-flex;align-items:center;gap:6px;margin-top:12px;font-size:11px;color:var(--fg-muted)}.ptl-today-key{display:inline-block;width:2px;height:12px;background:var(--accent)}.portal-grid-after-timeline{margin-top:32px}.portal-section{display:flex;flex-direction:column;gap:16px;margin-top:80px}.portal-section:first-of-type,.portal-slider{margin-top:0}.portal-section-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px}.portal-section-heading{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--fg-muted)}.portal-brief{font-size:15px;line-height:1.7;color:var(--fg-subtle);padding:20px 24px;background:var(--bg-2);border-radius:12px}.portal-milestones{list-style:none;display:flex;flex-direction:column;gap:3px}.portal-milestone{display:flex;align-items:center;gap:16px;padding:12px 16px;border-radius:12px;background:var(--bg-2)}.portal-milestone.done{opacity:.65}.portal-milestone-check{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--portal-success)}.portal-milestone.done .portal-milestone-check{background:var(--portal-success-bg);border-color:#bbf7d0}[data-theme=dark] .portal-milestone.done .portal-milestone-check{background:#052e16;border-color:#166534;color:var(--portal-success-dark)}.portal-milestone-title{flex:1 1;font-size:14px;line-height:1.4}.portal-milestone.done .portal-milestone-title{text-decoration:line-through;color:var(--fg-muted)}.portal-files-grid{display:flex;flex-direction:column;gap:8px}.portal-file-card{display:flex;align-items:center;gap:16px;padding:16px 20px;background:var(--bg-2);border-radius:12px;border:1px solid var(--border)}.portal-file-icon{width:46px;height:46px;border-radius:10px;background:var(--fg);color:var(--bg);display:flex;align-items:center;justify-content:center;flex-shrink:0}.portal-file-type-label{font-size:9px;font-weight:900;letter-spacing:.06em}.portal-file-info{flex:1 1;min-width:0}.portal-file-name{font-size:14px;font-weight:700;margin-bottom:2px}.portal-file-desc{font-size:12px;color:var(--fg-muted);margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.portal-file-meta{display:flex;gap:6px;font-size:11px;color:var(--fg-muted)}.portal-file-download{padding:9px 18px;font-size:13px}body.pn-lock{overflow:hidden}.pn-backdrop{display:flex;align-items:center;justify-content:center;padding:20px;z-index:9999}.pn-shell{position:relative;z-index:1;width:min(460px,100%);opacity:0;transform:translateY(16px) scale(.98);transition:opacity .28s ease,transform .28s cubic-bezier(.4,0,.2,1);pointer-events:none}.pn-shell.open{opacity:1;transform:none;pointer-events:auto}.pn-card{position:relative;background:var(--bg);border-radius:var(--r-box);padding:clamp(28px,4vw,40px);max-height:calc(100vh - 40px);overflow-y:auto;outline:none}.pn-close{position:absolute;top:16px;right:16px;width:32px;height:32px;color:var(--fg-muted);transition:color .2s,background .2s}.pn-close:hover{color:var(--fg);background:var(--bg-2)}.pn-body{display:flex;flex-direction:column}.pn-heading{font-size:clamp(22px,3vw,27px);font-weight:900;letter-spacing:-.03em;line-height:1.1;margin-bottom:12px;padding-right:28px}.pn-text{font-size:15px;line-height:1.6;color:var(--fg-muted);margin-bottom:24px}.pn-text strong{color:var(--fg);font-weight:700}.pn-banner{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:190;width:min(680px,calc(100vw - 32px));display:flex;align-items:center;gap:16px;padding:16px 16px 16px 22px;background:var(--bg);border:1px solid var(--border);border-radius:var(--r-pill);box-shadow:0 16px 40px rgba(0,0,0,.22)}.pn-banner-text{font-size:14px;line-height:1.5;color:var(--fg);flex:1 1}.pn-banner-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.pn-banner-btn{padding:9px 18px;font-size:13px;white-space:nowrap}.pn-banner-close{color:var(--fg-muted);transition:color .2s,background .2s}.pn-banner-close:hover{color:var(--fg);background:var(--bg-2)}@media (max-width:560px){.pn-banner{flex-wrap:wrap;border-radius:var(--r-box);padding:16px}.pn-banner-text{flex-basis:100%}.pn-banner-actions{width:100%;justify-content:space-between}}.pn-divider{border:none;border-top:1px solid var(--border);margin:24px calc(-1 * clamp(28px, 4vw, 40px)) 0}.pn-lang{margin-top:24px}.pn-lang-label{display:block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);margin-bottom:10px}.pn-lang-opts{display:flex;gap:8px;flex-wrap:wrap}.pn-lang-btn{border:1px solid var(--border);border-radius:var(--r-pill);min-width:90px;color:var(--fg-muted);cursor:pointer;background:none;flex:1 1;padding:7px 9px;font-size:12px;font-weight:600;transition:border-color .2s,color .2s,background .2s}.pn-lang-btn:hover{color:var(--fg);border-color:var(--fg-muted)}.pn-lang-btn.active{border-color:var(--fg);color:var(--fg);background:var(--bg-2)}.pn-stars{display:flex;gap:6px;justify-content:center;margin-bottom:28px}.pn-star{background:none;border:none;padding:4px;cursor:pointer;color:var(--border);line-height:0;transition:color .15s ease,transform .15s ease}.pn-star:hover{transform:scale(1.12)}.pn-star.active{color:#f5a623}.pn-actions{display:flex;flex-direction:column;gap:10px;align-items:center}.pn-btn-primary{width:100%;justify-content:center}.pn-btn-primary:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.pn-btn-danger,.pn-btn-danger:hover{background:#dc2626;color:#fff}.pn-btn-danger:hover{background:#b91c1c}.pn-btn-text{background:none;border:none;cursor:pointer;font-size:14px;color:var(--fg-muted);font-weight:600;padding:6px;transition:color .2s}.pn-btn-text:disabled{opacity:.5;cursor:not-allowed}.pn-fineprint{font-size:12px;color:var(--fg-muted);text-align:center;margin-top:16px;line-height:1.5}.pn-group-label{font-size:11px;margin-bottom:10px}.pn-links{display:flex;flex-wrap:wrap;gap:8px}.pn-group-label+.pn-links{margin-bottom:22px}@media (max-width:540px){.portal-projects-grid{grid-template-columns:1fr}.portal-file-card{flex-wrap:wrap}.portal-file-download{margin-left:62px}}