:root{--bg:#0e141d;--card:#161e2a;--ink:#e7ecf3;--muted:#93a0b0;--line:#273245;--accent:#6aa5e8;--good:#3ecf7a;--bad:#ef6a63;--warn-bg:#33290f;--warn-line:#8a713a;--tint:255,255,255;--bad-bg:#46232a;--note-bg:#121924;--faint:#55637a}[data-theme=light]{--bg:#f7f8fa;--card:#fff;--ink:#16202b;--muted:#5b6875;--line:#e3e7ec;--accent:#1256a0;--good:#067647;--bad:#b3261e;--warn-bg:#fff7e0;--warn-line:#e0c368;--tint:16,24,40;--bad-bg:#fdecea;--note-bg:#fbfcfd;--faint:#b9c1c9}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font:16px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}body,h1{margin:0}h1{font-size:24px}a{color:var(--accent)}button{font:inherit}.shell{min-height:100vh;display:flex;flex-direction:column}.topbar{background:var(--card);border-bottom:1px solid var(--line)}.topbar-inner{max-width:1080px;margin:0 auto;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.brand{font-weight:700;font-size:15px}.brand span{color:var(--muted);font-weight:400}.topbar-right{display:flex;align-items:center;gap:14px}.client-name{font-weight:600}.linkbtn{background:none;border:none;color:var(--accent);cursor:pointer;padding:10px 6px;font-size:15px;text-decoration:underline}.content{flex:1 1;width:100%;max-width:1080px;margin:0 auto;padding:20px 16px 40px}.portal-foot{text-align:center;color:var(--muted);font-size:14px;padding:18px 16px 28px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px}.period-picker{display:inline-flex;align-items:center;gap:8px}.pp-label{color:var(--muted);font-size:15px}.period-picker select{font-size:16px;padding:10px 12px;min-height:44px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink)}.statgrid{grid-gap:12px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.metricgrid,.statgrid{display:grid;gap:12px;margin-bottom:18px}.metricgrid{grid-gap:12px;grid-template-columns:repeat(3,1fr)}.stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px}.statline{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.big{font-size:28px;font-weight:700}.stat .label{color:var(--muted);font-size:14px;margin-top:2px}.delta{font-size:13px;font-weight:600;white-space:nowrap}.d-good{color:var(--good)}.d-bad{color:var(--bad)}.d-flat{color:var(--muted);font-weight:400}.spark{display:block;margin-top:4px}.headline-sentence{margin:0 0 16px;font-size:17px}.ftable-scroll{max-height:72vh;overflow:auto;border:1px solid var(--line);border-radius:12px}.ftable,.ftable-scroll{background:var(--card)}.fhead,.frow{display:grid;align-items:center;border-bottom:1px solid var(--line)}.ftable-full .fhead,.ftable-full .frow{grid-template-columns:minmax(180px,2.2fr) 88px repeat(6,minmax(72px,1fr));min-width:860px}.ftable-leadsonly .fhead,.ftable-leadsonly .frow{grid-template-columns:minmax(180px,2.4fr) 88px repeat(2,minmax(88px,1fr));min-width:0}.frow:last-of-type{border-bottom:none}.fhead{position:-webkit-sticky;position:sticky;top:0;z-index:3;font-size:13px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;background:linear-gradient(rgba(var(--tint),.05),rgba(var(--tint),.05)),var(--card);box-shadow:0 1px 0 var(--line)}.fhead .fcell{padding:8px 14px}.fhead .flabel{position:-webkit-sticky;position:sticky;left:0;z-index:4;background:inherit;flex-direction:row;align-items:center;gap:6px;justify-content:flex-start;text-align:left}.fhead-client .fsort{padding:6px 0}.fhead-actions{margin-left:auto;display:inline-flex;gap:2px}.ficon{min-width:28px;min-height:28px;display:inline-flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;border-radius:6px;color:var(--muted);cursor:pointer;padding:0}.ficon:hover{color:var(--ink);border-color:var(--line)}.fhead-trend{justify-content:center;display:flex}.fcell{padding:12px 14px}.fcell.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.fcell.num .v{font-weight:600}.fcell.num .delta{display:block;font-size:12px;margin-top:2px}.delta-empty{display:block;height:15px;margin-top:2px}.fcell .k{display:none}.frow{--rowbg:transparent;background:linear-gradient(var(--rowbg),var(--rowbg)),var(--card)}.frow.lvl-1{--rowbg:rgba(var(--tint),0.025)}.frow.lvl-2,.frow.lvl-3{--rowbg:rgba(var(--tint),0.05)}.frow.frow-bold{--rowbg:rgba(var(--tint),0.07)}.frow:hover{--rowbg:rgba(var(--tint),0.06)}.frow .flabel{position:-webkit-sticky;position:sticky;left:0;z-index:2;background:linear-gradient(var(--rowbg),var(--rowbg)),var(--card);border-right:1px solid var(--line)}.flabel{flex-direction:column;align-items:flex-start;gap:0}.flabel,.flabel-main{display:flex;min-width:0}.flabel-main{align-items:center;gap:8px}.fexp{background:none;border:none;cursor:pointer;color:var(--ink);padding:6px 4px;min-height:44px;font-size:16px;text-align:left;display:inline-flex;align-items:center;gap:6px}.fleaf-static{cursor:default}.chev{color:var(--muted);font-size:12px;width:12px;display:inline-block}.chev-spacer{visibility:hidden}.lvl-0 .fexp{font-weight:600;font-size:16px}.lvl-2 .fexp,.lvl-3 .fexp{font-size:14px;min-height:36px}.frow-inactive .fcell.num .v,.frow-inactive .fexp{color:var(--muted)}.frow-bold .fcell.num .v,.frow-bold .fleaf-static{font-weight:700}.badge-zero{background:var(--bad-bg);color:var(--bad);font-size:12px;font-weight:600;border-radius:999px;padding:2px 8px;white-space:nowrap}.sales-off .v{color:var(--faint);font-weight:400}.fnote{padding:12px 16px;color:var(--muted);font-size:14px;background:var(--note-bg);border-top:1px solid var(--line)}.tbtn{background:var(--card);border:1px solid var(--line);border-radius:8px;font-size:14px;color:var(--ink);min-height:40px}.fsort,.tbtn{padding:8px 14px;cursor:pointer}.fsort{background:none;border:none;font:inherit;font-size:13px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;display:inline-flex;align-items:center;justify-content:flex-end;gap:4px}.fsort:hover{color:var(--ink)}.fsort-on{color:var(--accent)}.fsort-ind{font-size:12px}.fexp:focus-visible,.ficon:focus-visible,.fsort:focus-visible,.tspark:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}.ftrend{display:flex;justify-content:center}.ftrend,.tspark{align-items:center}.tspark{background:none;border:none;cursor:pointer;padding:2px 4px;display:inline-flex;border-radius:6px}.tspark:hover{background:rgba(var(--tint),.06)}.tspark-none{display:inline-block;width:44px;border-top:1px dashed var(--line)}.ftypeline{color:var(--muted);font-size:12.5px;padding:0 4px 6px 22px;display:flex;flex-wrap:wrap;gap:4px 14px}.ftype-seg{white-space:nowrap}.ftype-seg strong{color:var(--ink);font-weight:600}.ftype-seg .delta{font-size:11px;margin-left:4px;display:inline}.tmodal-overlay{position:fixed;inset:0;background:rgba(10,16,24,.55);z-index:50;display:flex;align-items:center;justify-content:center;padding:16px}.tmodal{background:var(--card);border-radius:14px;border:1px solid var(--line);width:min(820px,100%);max-height:90vh;overflow:auto;padding:18px 20px 16px}.tmodal-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.tmodal-head h2{margin:0;font-size:19px}.tmodal-close{background:none;border:1px solid var(--line);border-radius:8px;min-width:40px;min-height:40px;font-size:15px;cursor:pointer;color:var(--muted)}.tmodal-controls{display:flex;flex-direction:column;gap:10px;margin:12px 0}.tmodal-ranges{display:flex;gap:6px;flex-wrap:wrap}.tbtn-on{border-color:var(--accent);color:var(--accent);font-weight:600}.tmodal-metrics{display:flex;gap:6px;flex-wrap:wrap}.tchip{background:var(--card);border:1px solid var(--line);border-radius:999px;padding:6px 12px;font-size:13px;cursor:pointer;color:var(--muted);display:inline-flex;align-items:center;gap:6px;min-height:36px}.tchip-on{font-weight:600}.tchip-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.tmodal-chart{border:1px solid var(--line);border-radius:10px;padding:8px}.tmodal-note{color:var(--muted);font-size:13px;margin:10px 0 0}.lc-wrap{position:relative}.lc-empty{color:var(--muted);padding:30px;text-align:center}.lc-tip{position:absolute;top:8px;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12.5px;pointer-events:none;box-shadow:0 4px 14px rgba(16,24,32,.12);white-space:nowrap;z-index:5}.lc-tip-date{font-weight:600;margin-bottom:4px}.lc-tip-row{display:flex;align-items:center;gap:6px}.lc-tip-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.footnotes{margin-top:18px;color:var(--muted);font-size:14px}.footnotes p{margin:6px 0}.banner-warn{background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:10px;padding:12px 14px;margin-bottom:14px;font-size:15px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:28px;max-width:420px;width:100%;text-align:center}.login-card h1{margin:10px 0 14px}.login-card p{margin:10px 0}.login-help{color:var(--muted);font-size:15px}.login-alert{background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:8px;padding:10px 12px;font-size:15px}.btn{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:12px 22px;font-size:16px;cursor:pointer;min-height:44px}@media (max-width:640px){.fhead{display:none}.frow{grid-template-columns:1fr 1fr 1fr;padding:10px 12px;gap:4px 8px}.frow .flabel{grid-column:1/-1;padding-left:0!important}.lvl-1 .flabel{padding-left:14px!important}.lvl-2 .flabel,.lvl-3 .flabel{padding-left:28px!important}.fcell{padding:4px 0}.fcell.num{text-align:left}.fcell .k{display:block;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.fcell.num .delta{display:inline;margin-left:6px}.big{font-size:24px}.ftable-full .fhead,.ftable-full .frow,.ftable-leadsonly .fhead,.ftable-leadsonly .frow{grid-template-columns:1fr 1fr 1fr;min-width:0}.frow .flabel{position:static;border-right:none}.fcell.ftrend{grid-column:1/-1;order:1;padding:2px 0 6px;justify-content:flex-start}.fcell.num{order:2}.ftrend svg{width:100%;height:28px}.tspark{width:100%}.tspark-none{display:none}}.theme-toggle{min-width:40px;min-height:40px;display:inline-flex;align-items:center;justify-content:center;background:none;border:1px solid var(--line);border-radius:8px;color:var(--muted);cursor:pointer;padding:0}.theme-toggle:hover{color:var(--ink)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.fctl{gap:10px 14px;margin:0 0 12px;padding:10px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px}.fctl,.fctl-group{display:flex;flex-wrap:wrap;align-items:center}.fctl-group{gap:8px}.fctl-filters{margin-left:auto}.fctl-lbl{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-weight:600}.fctl-select{font:inherit;font-size:14px;font-weight:600;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:7px 10px;min-height:38px;cursor:pointer}.fctl-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.fctl-menu{position:relative}.fctl-btn{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:13px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:7px 10px;min-height:38px;cursor:pointer;white-space:nowrap}.fctl-btn:hover{border-color:var(--accent)}.fctl-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.fctl-btn-on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.fctl-btn-k{color:var(--muted)}.fctl-btn-v{font-weight:600}.fctl-caret{color:var(--muted);font-size:10px}.fctl-pop{position:absolute;top:calc(100% + 6px);right:0;z-index:40;min-width:220px;max-height:320px;overflow-y:auto;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.28);padding:6px}.fctl-list{list-style:none;margin:0;padding:0}.fctl-opt{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;font-size:13px}.fctl-opt:hover{background:var(--bg)}.fctl-opt input{accent-color:var(--accent);width:15px;height:15px}.fctl-opt-l{flex:1 1}.fctl-opt-n{color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:12px}.fctl-clear,.fctl-reset{font:inherit;font-size:12px;color:var(--accent);background:none;border:none;cursor:pointer;padding:6px 8px}.fctl-clear{display:block;width:100%;text-align:left}.fctl-clear:hover,.fctl-reset:hover{text-decoration:underline}@media (max-width:640px){.fctl{gap:8px;padding:10px}.fctl-filters,.fctl-group{margin-left:0;width:100%}.fctl-select{flex:1 1}.fctl-btn{flex:1 1 auto;justify-content:space-between}.fctl-pop{left:0;right:auto;width:100%}}.login-form{gap:14px;margin:18px 0 14px;text-align:left}.login-field,.login-form{display:flex;flex-direction:column}.login-field{gap:6px}.login-field span{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.login-field input{font:inherit;font-size:16px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:11px 12px;min-height:44px;width:100%}.login-field input:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.login-btn{font:inherit;font-size:15px;font-weight:600;color:#fff;background:var(--accent);border:none;border-radius:8px;padding:12px 16px;min-height:46px;cursor:pointer;width:100%}.login-btn:hover{filter:brightness(1.08)}.login-btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.period-wrap{display:flex;flex-direction:column;align-items:flex-end;gap:6px}.pp-basis{font-size:12px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.pp-custom{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px;padding:8px 10px;background:var(--card);border:1px solid var(--line);border-radius:8px}.pp-custom label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.pp-custom input{font:inherit;font-size:14px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:6px 8px;min-height:36px}.pp-custom button{font:inherit;font-size:13px;font-weight:600;color:#fff;background:var(--accent);border:none;border-radius:6px;padding:8px 14px;min-height:36px;cursor:pointer}.pp-custom button:disabled{opacity:.5;cursor:not-allowed}@media (max-width:640px){.period-wrap{align-items:stretch;width:100%}.pp-basis{text-align:left}.pp-custom{width:100%}.pp-custom label{flex:1 1 40%}}