:root{--portal-success:#15803d;--portal-success-bg:#dcfce7;--portal-success-dark:#86efac}.portal-page,.portal-login-page{flex-direction:column;min-height:100vh;display:flex}.portal-login-box{background:var(--bg-2);border-radius:var(--r-box);padding:clamp(40px,6vw,72px) clamp(32px,5vw,64px);position:relative}.portal-login-cols{grid-template-columns:1fr 1fr;align-items:center;gap:clamp(32px,5vw,64px);display:grid}.portal-login-scene{width:500px;height:500px;position:absolute;top:-40px;right:-80px}.portal-three{min-height:500px}@media (max-width:680px){.portal-login-cols{grid-template-columns:1fr}.portal-login-scene{display:none}}.portal-login-heading{letter-spacing:-.04em;margin-bottom:20px;font-size:clamp(38px,5.5vw,64px);font-weight:900;line-height:.95}.portal-login-form-wrap{max-width:440px}.portal-login-sub{color:var(--fg-muted);max-width:440px;margin-bottom:36px;font-size:clamp(15px,1.4vw,17px);line-height:1.65}.portal-login-form{flex-direction:column;gap:20px;display:flex}.portal-login-btn{justify-content:center;width:100%;margin-top:4px}.portal-project-heading{margin-bottom:16px}.portal-project-meta{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:80px;display:flex}.portal-meta-item{color:var(--fg-muted);font-size:13px}.portal-meta-sep{color:var(--fg-muted);opacity:.3;font-size:13px}.portal-meta-delivered{color:var(--portal-success);font-weight:700}[data-theme=dark] .portal-meta-delivered{color:var(--portal-success-dark)}.portal-status--planning{background:var(--bg-2);color:var(--fg-muted)}.portal-status--in-progress{color:#1d4ed8;background:#dbeafe}.portal-status--review{color:#92400e;background:#fef3c7}.portal-status--delivered{background:var(--portal-success-bg);color:var(--portal-success)}.portal-status--archived{background:var(--bg-2);color:var(--fg-muted);opacity:.6}[data-theme=dark] .portal-status--in-progress{color:#93c5fd;background:#1e3a5f}[data-theme=dark] .portal-status--review{color:#fcd34d;background:#451a03}[data-theme=dark] .portal-status--delivered{color:var(--portal-success-dark);background:#052e16}.portal-projects-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;display:grid}.portal-project-card{color:inherit;min-height:320px;text-decoration:none;transition:opacity .2s}.portal-project-card .pkg-name{min-height:120px}.portal-project-card:hover{opacity:.85}.portal-card-progress{margin-top:6px 0 12px;align-items:center;gap:10px;display:flex}.portal-progress-bar{background:var(--border);border-radius:var(--r-pill);flex:1;height:4px;overflow:hidden}.portal-progress-fill{background:var(--accent);border-radius:var(--r-pill);height:100%}.portal-progress-label{color:var(--fg-muted);white-space:nowrap;font-size:11px}.portal-card-files{color:var(--fg-muted);margin-top:8px;font-size:12px}.ptl-scroll{padding-bottom:4px;overflow-x:auto}.ptl{--ptl-lane-h:26px;min-width:480px}.ptl-axis{height:16px;margin-bottom:8px;position:relative}.ptl-axis-label{letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;color:var(--fg-muted);border-left:1px solid var(--border);padding-left:5px;font-size:10px;font-weight:700;position:absolute;top:0}.ptl-tracks{flex-direction:column;gap:14px;display:flex}.ptl-track{flex-direction:column;gap:6px;display:flex}.ptl-track-head{align-items:center;gap:10px;display:flex}.ptl-track-name{font-size:14px;font-weight:700}.ptl-lane{height:var(--ptl-lane-h);background:var(--bg-2);border-radius:8px;position:relative}.ptl-gridline{background:var(--border);opacity:.6;width:1px;position:absolute;top:0;bottom:0}.ptl-today{background:var(--accent);z-index:3;width:2px;position:absolute;top:-3px;bottom:-3px}.ptl-bar{height:calc(var(--ptl-lane-h) - 10px);z-index:2;border-radius:5px;min-width:6px;position:absolute;top:5px}.ptl-bar--planning{background:#64748b}.ptl-bar--in-progress{background:#2563eb}.ptl-bar--review{background:#b45309}.ptl-bar--delivered{background:#15803d}.ptl-bar--archived{opacity:.5;background:#64748b}.ptl-ms{background:var(--bg);border:1.5px solid var(--fg);z-index:4;width:9px;height:9px;margin-left:-4.5px;position:absolute;top:50%;transform:translateY(-50%)rotate(45deg)}.ptl-ms.done{background:var(--portal-success);border-color:var(--portal-success)}.ptl-legend{color:var(--fg-muted);align-items:center;gap:6px;margin-top:12px;font-size:11px;display:inline-flex}.ptl-today-key{background:var(--accent);width:2px;height:12px;display:inline-block}.portal-grid-after-timeline{margin-top:48px}.portal-section{flex-direction:column;gap:16px;margin-top:48px;display:flex}.portal-section:first-of-type{margin-top:0}.portal-section-row{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.portal-section-heading{letter-spacing:.12em;text-transform:uppercase;color:var(--fg-muted);font-size:11px;font-weight:700}.portal-brief{color:var(--fg-subtle);background:var(--bg-2);border-radius:12px;padding:20px 24px;font-size:15px;line-height:1.7}.portal-milestones{flex-direction:column;gap:3px;list-style:none;display:flex}.portal-milestone{background:var(--bg-2);border-radius:12px;align-items:center;gap:14px;padding:12px 16px;display:flex}.portal-milestone.done{opacity:.65}.portal-milestone-check{border:1.5px solid var(--border);width:22px;height:22px;color:var(--portal-success);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:flex}.portal-milestone.done .portal-milestone-check{background:var(--portal-success-bg);border-color:#bbf7d0}[data-theme=dark] .portal-milestone.done .portal-milestone-check{color:var(--portal-success-dark);background:#052e16;border-color:#166534}.portal-milestone-title{flex:1;font-size:14px;line-height:1.4}.portal-milestone.done .portal-milestone-title{color:var(--fg-muted);text-decoration:line-through}.portal-files-grid{flex-direction:column;gap:8px;display:flex}.portal-file-card{background:var(--bg-2);border:1px solid var(--border);border-radius:12px;align-items:center;gap:16px;padding:16px 20px;display:flex}.portal-file-icon{background:var(--fg);width:46px;height:46px;color:var(--bg);border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.portal-file-type-label{letter-spacing:.06em;font-size:9px;font-weight:900}.portal-file-info{flex:1;min-width:0}.portal-file-name{margin-bottom:2px;font-size:14px;font-weight:700}.portal-file-desc{color:var(--fg-muted);white-space:nowrap;text-overflow:ellipsis;margin-bottom:5px;font-size:12px;overflow:hidden}.portal-file-meta{color:var(--fg-muted);gap:6px;font-size:11px;display:flex}.portal-file-download{padding:9px 18px;font-size:13px}body.pn-lock{overflow:hidden}.pn-backdrop{z-index:9999;justify-content:center;align-items:center;padding:20px;display:flex}.pn-shell{z-index:1;opacity:0;pointer-events:none;width:min(460px,100%);transition:opacity .28s,transform .28s cubic-bezier(.4,0,.2,1);position:relative;transform:translateY(14px)scale(.98)}.pn-shell.open{opacity:1;pointer-events:auto;transform:none}.pn-card{background:var(--bg);border-radius:var(--r-box);outline:none;max-height:calc(100vh - 40px);padding:clamp(28px,4vw,40px);position:relative;overflow-y:auto}.pn-close{width:32px;height:32px;color:var(--fg-muted);transition:color .2s,background .2s;position:absolute;top:14px;right:14px}.pn-close:hover{color:var(--fg);background:var(--bg-2)}.pn-body{flex-direction:column;display:flex}.pn-heading{letter-spacing:-.03em;margin-bottom:12px;padding-right:28px;font-size:clamp(22px,3vw,27px);font-weight:900;line-height:1.1}.pn-text{color:var(--fg-muted);margin-bottom:24px;font-size:15px;line-height:1.6}.pn-text strong{color:var(--fg);font-weight:700}.pn-banner{z-index:190;background:var(--bg);border:1px solid var(--border);border-radius:var(--r-pill);align-items:center;gap:16px;width:min(680px,100vw - 32px);padding:14px 16px 14px 22px;display:flex;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 16px 40px #00000038}.pn-banner-text{color:var(--fg);flex:1;font-size:14px;line-height:1.5}.pn-banner-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.pn-banner-btn{white-space:nowrap;padding:9px 18px;font-size:13px}.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{border-radius:var(--r-box);flex-wrap:wrap;padding:16px}.pn-banner-text{flex-basis:100%}.pn-banner-actions{justify-content:space-between;width:100%}}.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{letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);margin-bottom:10px;font-size:11px;font-weight:700;display:block}.pn-lang-opts{flex-wrap:wrap;gap:8px;display:flex}.pn-lang-btn{border:1px solid var(--border);border-radius:var(--r-pill);min-width:90px;color:var(--fg-muted);cursor:pointer;background:0 0;flex: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{justify-content:center;gap:6px;margin-bottom:28px;display:flex}.pn-star{cursor:pointer;color:var(--border);background:0 0;border:none;padding:4px;line-height:0;transition:color .15s,transform .15s}.pn-star:hover{transform:scale(1.12)}.pn-star.active{color:#f5a623}.pn-actions{flex-direction:column;align-items:center;gap:10px;display:flex}.pn-btn-primary{justify-content:center;width:100%}.pn-btn-primary:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.pn-btn-danger,.pn-btn-danger:hover{color:#fff;background:#dc2626}.pn-btn-danger:hover{background:#b91c1c}.pn-btn-text{cursor:pointer;color:var(--fg-muted);background:0 0;border:none;padding:6px;font-size:14px;font-weight:600;transition:color .2s}.pn-btn-text:disabled{opacity:.5;cursor:not-allowed}.pn-fineprint{color:var(--fg-muted);text-align:center;margin-top:14px;font-size:12px;line-height:1.5}.pn-group-label{margin-bottom:10px;font-size:11px}.pn-links{flex-wrap:wrap;gap:8px;display:flex}.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}}
