:root{--bg: #101013;--panel: #17171c;--panel2: #1d1d24;--line: #2a2a33;--text: #f2f1ee;--muted: #9b9aa3;--muted2: #5d5c66;--accent: #d35041;--accent-soft: rgba(211, 80, 65, .14);--good: #4eba7a;--bad: #e0604f;--warn: #d9a13c;--teal: #4f9ea8}:root[data-theme=light]{--bg: #f5f4f0;--panel: #ffffff;--panel2: #efede8;--line: #e0ded6;--text: #1d1c19;--muted: #6d6b63;--muted2: #98968c;--accent: #d35041;--accent-soft: rgba(211, 80, 65, .1);--good: #2e8f5b;--bad: #c94434;--warn: #a9791f;--teal: #3d818a}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,sans-serif;font-size:14px;line-height:1.45}#root{min-height:100vh}button{font-family:inherit;cursor:pointer}input,select{font-family:inherit}code{background:var(--panel2);padding:1px 5px;border-radius:4px;font-size:12px}.app-loading{display:flex;gap:10px;align-items:center;justify-content:center;min-height:60vh;color:var(--muted)}.spinner{width:18px;height:18px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.login-wrap{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}.login-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:36px 32px;width:360px;display:flex;flex-direction:column;gap:12px}.login-logo{font-size:24px;font-weight:800;letter-spacing:.04em}.login-logo span,.logo span{color:var(--accent)}.login-sub{color:var(--muted);margin:-6px 0 10px;font-size:13px}.login-card input{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:9px;padding:11px 13px;font-size:14px}.login-card input:focus{outline:none;border-color:var(--accent)}.login-card button{background:var(--accent);color:#fff;border:0;border-radius:9px;padding:12px;font-weight:600;font-size:14px}.login-card button:disabled{opacity:.6}.login-error{color:var(--bad);font-size:13px}.login-hint{color:var(--muted2);font-size:12px;text-align:center;margin:4px 0 0}.app{max-width:1180px;margin:0 auto;padding:0 20px 90px}.topbar{display:flex;align-items:center;gap:22px;padding:16px 0;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg);z-index:10}.logo{font-size:17px;font-weight:800;letter-spacing:.04em;white-space:nowrap}.tabs{display:flex;gap:4px;flex:1}.tab{background:none;border:0;color:var(--muted);padding:8px 13px;border-radius:8px;font-size:13.5px;font-weight:500;display:flex;gap:7px;align-items:center}.tab .tab-icon{font-size:11px;opacity:.8}.tab:hover{color:var(--text);background:var(--panel)}.tab.active{color:var(--text);background:var(--panel2)}.topbar-right{display:flex;gap:8px;align-items:center}.sync-btn{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:7px 12px;font-size:12.5px}.signout{background:none;border:0;color:var(--muted2);font-size:12.5px}.signout:hover{color:var(--text)}.bottombar{display:none}.page{padding-top:22px}.stack{display:flex;flex-direction:column;gap:18px}.banner{border-radius:10px;padding:12px 16px;font-size:13.5px}.banner.error{background:#e0604f1f;border:1px solid rgba(224,96,79,.4);color:#f1a99f;margin-top:14px}.banner.warn{background:#d9a13c1a;border:1px solid rgba(217,161,60,.35);color:#e8c684;cursor:pointer}.kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.kpi-grid.four{grid-template-columns:repeat(4,1fr)}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:16px 18px}.kpi-label{color:var(--muted);font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:.05em}.kpi-value{font-size:26px;font-weight:700;margin-top:5px;letter-spacing:-.01em}.kpi-value.good{color:var(--good)}.kpi-value.bad{color:var(--bad)}.kpi-delta{font-size:12px;margin-top:3px;font-weight:600}.kpi-delta.good{color:var(--good)}.kpi-delta.bad{color:var(--bad)}.kpi-sub{color:var(--muted2);font-size:12px;margin-top:4px}.progress{height:5px;background:var(--panel2);border-radius:4px;margin-top:9px;overflow:hidden}.progress-fill{height:100%;background:var(--accent);border-radius:4px}.card{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:18px 20px}.card h3{margin:0 0 12px;font-size:14.5px;font-weight:600}.h-sub{color:var(--muted);font-weight:400;font-size:12.5px}.scroll-x{overflow-x:auto}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;color:var(--muted2);font-weight:500;font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;padding:7px 8px;border-bottom:1px solid var(--line);white-space:nowrap}.table td{padding:8px;border-bottom:1px solid rgba(42,42,51,.5);vertical-align:middle}.table tr:last-child td{border-bottom:0}.table .r{text-align:right}.table .wrap{max-width:320px}.muted{color:var(--muted2)}.good{color:var(--good)}.bad{color:var(--bad)}.fine{color:var(--muted2);font-size:12px;margin:10px 0 0}.clickable{cursor:pointer}.clickable:hover,th.sel{color:var(--accent)}.pnl td,.pnl th{white-space:nowrap}.pnl tr.bold td{font-weight:600}.pnl tr.rule td{border-top:1px solid var(--line)}.pnl tr.final td{font-size:14px;padding-top:10px;padding-bottom:10px;background:#d350410a}.pnl .total-col{background:var(--panel2);font-weight:600}.pnl .meta-row td{color:var(--muted2);font-size:12px}.waterfall{display:flex;flex-direction:column;gap:6px}.wf-row{display:grid;grid-template-columns:220px 1fr 90px;gap:12px;align-items:center}.wf-label{font-size:12.5px;color:var(--muted)}.wf-bar-wrap{position:relative;height:14px;background:var(--panel2);border-radius:4px;overflow:hidden}.wf-bar{position:absolute;top:0;height:100%;background:var(--good);border-radius:3px;min-width:1px}.wf-bar.neg{background:var(--bad);opacity:.75}.wf-bar.total{background:var(--accent)}.wf-val{text-align:right;font-size:12.5px;font-variant-numeric:tabular-nums}.wf-val.bad{color:var(--bad)}.wf-row.final{margin-top:6px;padding-top:8px;border-top:1px solid var(--line)}.cost-lines{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}.chart{position:relative}.chart-tip{position:absolute;top:-6px;z-index:5;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:7px 10px;pointer-events:none;display:flex;flex-direction:column;gap:1px;box-shadow:0 6px 18px #00000040;white-space:nowrap}.chart-tip .tip-label{font-size:11px;color:var(--muted2);font-weight:600}.chart-tip .tip-line{font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums}.chart-max{position:absolute;top:0;right:0;font-size:10.5px;color:var(--muted2)}.chart-empty{color:var(--muted2);padding:28px 0;text-align:center;font-size:13px}.chart-labels{display:flex}.chart-labels span{font-size:10px;color:var(--muted2);text-align:center;overflow:visible;white-space:nowrap}.legend{display:flex;gap:18px;margin-top:10px;color:var(--muted);font-size:12.5px;flex-wrap:wrap}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.dot.accent{background:var(--accent)}.dot.muted{background:var(--muted2)}.dot.teal{background:var(--teal)}.donut-row{display:flex;align-items:center;gap:22px}.donut-legend{display:flex;flex-direction:column;gap:6px;font-size:13px}.alerts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.alert{display:flex;gap:12px;background:var(--panel2);border-radius:10px;padding:12px 14px}.alert p{margin:2px 0 0;color:var(--muted);font-size:12.5px}.alert-badge{font-size:13px}.all-clear{color:var(--good);font-size:13.5px;padding:6px 0}.pill{display:inline-block;background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:20px;padding:2px 9px;font-size:11px;margin-right:4px;white-space:nowrap}.pill.sub{color:var(--teal);border-color:#4f9ea866}.pill.aff{color:var(--warn);border-color:#d9a13c66}.pill.bad{color:var(--bad);border-color:#e0604f66}.pill.good{color:var(--good);border-color:#4eba7a66}.pill.oneoff{color:var(--warn)}.pill.new{color:var(--accent);border-color:#d3504166}.pill.ret{color:var(--warn);border-color:#d9a13c66}a.pill{text-decoration:none;cursor:pointer}.range-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.range-note{color:var(--muted2);font-size:12px;margin-left:6px}.kpi-vs{font-size:14px;color:var(--muted);font-weight:500}.section-head{margin:6px 0 -6px;font-size:15px;font-weight:700}.kpi-stack{display:flex;flex-direction:column;gap:16px;justify-content:center}.kpi.bare{background:none;border:0;padding:0}.kpi.accent-card{border-color:var(--accent);background:var(--accent-soft)}.acq-breakdown{display:flex;flex-direction:column;gap:14px;font-size:13px}.acq-head{margin-bottom:4px}.acq-line{color:var(--muted);padding:1px 0}.acq-line .dot{margin-right:7px}.cohort-label{font-size:12.5px;color:var(--muted);font-weight:500;align-self:center}.churn-headline{font-size:14px;margin-bottom:4px}.churn-headline strong{font-size:20px}.excluded-row{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid rgba(42,42,51,.4);font-size:13px}.excluded-row .who{flex:1}.excluded-add{display:flex;gap:8px;margin-top:12px}.excluded-add input{flex:1;max-width:360px;background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 11px;font-size:13px}.tag-row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.tag-row .pill{display:inline-flex;align-items:center}.tag-row .link{padding:0;font-size:12px}.theme-btn{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:7px 11px;font-size:13px}.explorer-controls{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}.search{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:9px 12px;font-size:13px;width:100%;max-width:380px}.search:focus{outline:none;border-color:var(--accent)}.load-more{display:flex;justify-content:center;margin-top:12px}.nowrap{white-space:nowrap}.share-bar{position:relative;background:var(--panel2);border-radius:4px;height:16px;min-width:110px;overflow:hidden}.share-bar>div{position:absolute;left:0;top:0;bottom:0;background:var(--accent-soft);border-right:2px solid var(--accent)}.share-bar span{position:relative;font-size:11px;padding-left:6px;line-height:16px}.chip{background:var(--panel);border:1px solid var(--line);color:var(--muted);border-radius:20px;padding:6px 14px;font-size:12.5px}.chip.active{background:var(--accent-soft);border-color:var(--accent);color:var(--text)}.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.form-grid label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;font-weight:500}.form-grid .hint{color:var(--muted2);font-weight:400;font-size:11.5px}.form-grid input,.add-row input,.add-row select{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 10px;font-size:13px;width:100%}.form-grid input:focus,.add-row input:focus,.add-row select:focus{outline:none;border-color:var(--accent)}.form-actions{display:flex;align-items:flex-end}button.primary{background:var(--accent);color:#fff;border:0;border-radius:8px;padding:9px 16px;font-weight:600;font-size:13px}button.primary.sm{padding:7px 12px;font-size:12px}button.primary:disabled{opacity:.6}button.link{background:none;border:0;color:var(--muted);font-size:12px;text-decoration:underline;padding:2px 4px}button.link.danger{color:var(--bad);text-decoration:none}.row-actions{white-space:nowrap}.add-row td{padding-top:12px}@media (max-width: 760px){body{font-size:13.5px}.app{padding:0 12px 84px}.topbar{gap:10px}.tabs{display:none}.topbar-right{margin-left:auto}.bottombar{display:flex;position:fixed;bottom:0;left:0;right:0;background:var(--panel);border-top:1px solid var(--line);padding:6px 8px calc(6px + env(safe-area-inset-bottom));z-index:20}.btab{flex:1;background:none;border:0;color:var(--muted2);font-size:10.5px;display:flex;flex-direction:column;gap:2px;align-items:center;padding:5px 0}.btab span{font-size:15px}.btab.active{color:var(--accent)}.kpi-grid,.kpi-grid.four{grid-template-columns:1fr 1fr}.grid-2{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr 1fr}.kpi-value{font-size:21px}.wf-row{grid-template-columns:130px 1fr 76px;gap:8px}.card{padding:14px}}
