:root{--paper: #f6f4ef;--sidebar: #f0eee7;--surface: #fdfcf9;--surface-2: #eeebe3;--ink: #221f19;--ink-2: #5d574c;--ink-3: #6b6556;--line: #e3ded2;--line-strong: #cfc9ba;--pos: #146a41;--pos-soft: #e6f1ea;--neg: #b93a34;--neg-soft: #f9e9e8;--warn: #8a5a00;--warn-soft: #f7eeda;--info: #2f6da3;--info-soft: #e7eff6;--accent: #54305e;--accent-hover: #45264f;--accent-soft: #efe9f1;--accent-ring: rgba(84, 48, 94, .35);--radius: 7px;--radius-sm: 5px;--hairline: 1px solid var(--line);--sidebar-w: 232px;--font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, "Cascadia Code", "Segoe UI Mono", "SF Mono", Consolas, Menlo, monospace;--chart-1: #54305e;--chart-2: #1a7f4e;--chart-3: #b93a34;--chart-4: #8a5a00;--chart-5: #2f6da3;--chart-6: #a34e78;--chart-7: #5b7f3a;--chart-8: #b05f2c;--chart-9: #43706e;--chart-10: #7a6b3a}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}::selection{background:var(--accent);color:#fff}.app-shell{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}.app-shell>*{min-width:0}.sidebar{background:var(--sidebar);border-right:var(--hairline);padding:16px 12px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh;z-index:30}.brand{font-size:16px;font-weight:700;letter-spacing:-.1px;padding:6px 10px 18px;display:flex;align-items:center;gap:9px;color:var(--ink)}.brand .mark{width:12px;height:12px;border-radius:3px;background:var(--accent);flex:none}.sidebar nav{display:flex;flex-direction:column;gap:2px}.tab-btn{display:flex;align-items:center;gap:10px;text-align:left;background:none;border:none;color:var(--ink-2);font-size:13.5px;font-family:var(--font);font-weight:550;padding:9px 11px;min-height:40px;border-radius:var(--radius-sm);cursor:pointer;transition:background .12s,color .12s}.tab-btn .icon{width:16px;height:16px;flex:none;opacity:.85}.tab-btn:hover{background:var(--surface-2);color:var(--ink)}.tab-btn:active{background:var(--line)}.tab-btn.active{background:var(--accent-soft);color:var(--accent);font-weight:650}.tab-btn.active .icon{opacity:1}.privacy-badge{margin-top:auto;padding:8px 11px;font-size:12px;font-weight:550;color:var(--pos);background:var(--pos-soft);border:1px solid transparent;border-radius:var(--radius-sm);display:flex;align-items:center;gap:8px}.privacy-badge .icon{width:14px;height:14px;flex:none}.topbar{display:none;position:sticky;top:0;z-index:40;align-items:center;gap:10px;padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top));background:#f6f4efeb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:var(--hairline)}.topbar .brand{padding:0;font-size:15px}.topbar-title{font-size:13px;color:var(--ink-2);font-weight:600}.topbar .privacy-pill{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--pos);background:var(--pos-soft);padding:5px 10px;border-radius:999px;white-space:nowrap}.topbar .privacy-pill .icon{width:12px;height:12px}.bottomnav{display:none;position:fixed;bottom:0;left:0;right:0;z-index:50;background:#fdfcf9f5;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:var(--hairline);padding-bottom:env(safe-area-inset-bottom)}.bottomnav .nav-row{display:flex}.nav-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 4px 8px;min-height:56px;background:none;border:none;font-family:var(--font);font-size:10.5px;font-weight:600;color:var(--ink-3);cursor:pointer;border-radius:var(--radius-sm)}.nav-item .icon{width:20px;height:20px}.nav-item.active{color:var(--accent)}.nav-item:active{background:var(--surface-2)}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#221f1959;display:flex;align-items:flex-end;justify-content:center;animation:fade-in .15s ease-out}.more-sheet{width:100%;max-width:560px;background:var(--surface);border:var(--hairline);border-bottom:none;border-radius:14px 14px 0 0;padding:10px 12px calc(16px + env(safe-area-inset-bottom));animation:sheet-up .22s cubic-bezier(.32,.72,0,1)}.more-sheet .sheet-title{font-size:11.5px;font-weight:650;color:var(--ink-3);padding:8px 10px 10px}.more-sheet .sheet-row{width:100%;display:flex;align-items:center;gap:12px;background:none;border:none;font-family:var(--font);font-size:15px;font-weight:550;color:var(--ink);padding:13px 10px;border-radius:var(--radius-sm);cursor:pointer}.more-sheet .sheet-row .icon{width:18px;height:18px;color:var(--ink-2)}.more-sheet .sheet-row.active{color:var(--accent);background:var(--accent-soft)}.more-sheet .sheet-row:active{background:var(--surface-2)}.main{padding:26px 32px 64px;max-width:1280px;width:100%;margin:0 auto}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:20px}.page-header h1{font-size:25px;line-height:1.2;margin:0;font-weight:700;letter-spacing:-.3px}.page-header .sub{color:var(--ink-2);font-size:13.5px;margin-top:3px}.page-header .actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;flex:none}.card{background:var(--surface);border:var(--hairline);border-radius:var(--radius);padding:18px 20px;min-width:0}.card h2{margin:0 0 14px;font-size:13px;font-weight:650;color:var(--ink-2);letter-spacing:.2px}.grid{display:grid;gap:16px}.grid>*,.grid-split>*{min-width:0}.grid-2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.grid-4{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}.grid-split{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.vitals{display:flex;align-items:stretch;margin-bottom:20px}.vitals .stat{flex:1;background:none;border:none;border-left:var(--hairline);border-radius:0;padding:4px 20px}.vitals .stat:first-child{border-left:none;padding-left:2px}.vitals .stat:last-child{padding-right:2px}.stat{background:var(--surface);border:var(--hairline);border-radius:var(--radius);padding:13px 16px}.stat .label{color:var(--ink-2);font-size:11.5px;font-weight:600}.stat .value{font-size:23px;font-weight:700;margin-top:3px;font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.4px;line-height:1.25}.stat .value.up{color:var(--pos)}.stat .value.down{color:var(--neg)}.stat .meta{color:var(--ink-3);font-size:11.5px;margin-top:2px}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}table.data{width:100%;border-collapse:collapse;font-size:13.5px;font-variant-numeric:tabular-nums}table.data th{text-align:left;color:var(--ink-2);font-weight:650;font-size:11.5px;letter-spacing:.2px;padding:9px 12px;border-bottom:1px solid var(--line-strong);white-space:nowrap}table.data td{padding:10px 12px;border-bottom:var(--hairline);white-space:nowrap;vertical-align:top}table.data tbody tr:last-child td{border-bottom:none}table.data tbody tr{transition:background .1s}table.data tbody tr:hover{background:var(--surface-2)}table.data tbody tr.selected{background:var(--accent-soft)}.table-scroll table.data th:first-child,.table-scroll table.data td:first-child{position:sticky;left:0;background:var(--surface)}.table-scroll table.data tbody tr:hover td:first-child{background:var(--surface-2)}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right}.pos{color:var(--pos)}.neg{color:var(--neg)}.muted{color:var(--ink-2)}.faint{color:var(--ink-3)}.badge{display:inline-block;padding:2px 9px;border-radius:var(--radius-sm);font-size:11.5px;font-weight:650;white-space:nowrap;line-height:1.5}.badge.green{background:var(--pos-soft);color:var(--pos)}.badge.yellow{background:var(--warn-soft);color:var(--warn)}.badge.orange{background:#f7e6da;color:#a04e1e}.badge.red{background:var(--neg-soft);color:var(--neg)}.badge.accent{background:var(--accent-soft);color:var(--accent)}.badge.gray{background:var(--surface-2);color:var(--ink-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;background:var(--surface);color:var(--ink);border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:8px 15px;min-height:36px;font-size:13.5px;font-weight:600;font-family:var(--font);cursor:pointer;transition:background .12s,border-color .12s,color .12s;text-decoration:none}.btn .icon{width:15px;height:15px}.btn:hover{background:var(--surface-2);border-color:var(--ink-3)}.btn:active{background:var(--line)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn.primary:active{background:#391f41}.btn.danger{color:var(--neg);border-color:#b93a3473;background:transparent}.btn.danger:hover{background:var(--neg-soft);border-color:var(--neg)}.btn.ghost{background:transparent;border-color:transparent;color:var(--ink-2)}.btn.ghost:hover{background:var(--surface-2);color:var(--ink)}.btn:disabled{opacity:.5;cursor:not-allowed}.dropzone{border:1.5px dashed var(--line-strong);border-radius:var(--radius);padding:40px 22px;text-align:center;color:var(--ink-2);cursor:pointer;transition:border-color .15s,background .15s,color .15s;background:var(--surface)}.dropzone .dz-icon{width:34px;height:34px;color:var(--ink-3);margin:0 auto 10px;transition:color .15s}.dropzone:hover,.dropzone.dragging{border-color:var(--accent);background:var(--accent-soft);color:var(--ink)}.dropzone:hover .dz-icon,.dropzone.dragging .dz-icon{color:var(--accent)}.dropzone .dz-title{font-size:15px;font-weight:650;color:var(--ink)}.dropzone .hint{font-size:12.5px;margin-top:6px;color:var(--ink-3)}.alert{border-radius:var(--radius-sm);padding:10px 14px;font-size:13px;line-height:1.5}.alert.error{background:var(--neg-soft);color:#7c2520}.alert.success{background:var(--pos-soft);color:#145a38}.alert.info{background:var(--info-soft);color:#1e4c74}.alert.warn{background:var(--warn-soft);color:#6b4500}.field{margin-bottom:15px}.field label{display:block;font-size:12.5px;font-weight:600;color:var(--ink-2);margin-bottom:5px}.field input,.field select,.field textarea,.text-input,.topbar input,.topbar select{width:100%;background:#fff;border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--ink);font-family:var(--font);font-size:14.5px;padding:9px 11px;transition:border-color .12s,box-shadow .12s}.field input:focus,.field select:focus,.text-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.field .help{font-size:12px;color:var(--ink-3);margin-top:5px}.field select,.page-header select{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.page-header select{background:#fff;border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--ink);font-family:var(--font);font-size:13.5px;padding:8px 10px;min-height:36px}.page-header select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.toasts{position:fixed;bottom:18px;right:18px;display:flex;flex-direction:column;gap:8px;z-index:100}.toast{background:var(--surface);border:var(--hairline);border-left:3px solid var(--ink-3);border-radius:var(--radius-sm);padding:11px 14px;max-width:380px;font-size:13px;box-shadow:0 8px 24px #221f1924;cursor:pointer;animation:toast-in .18s ease-out}.toast.success{border-left-color:var(--pos)}.toast.error{border-left-color:var(--neg)}.toast.info{border-left-color:var(--accent)}.score{display:inline-flex;flex-direction:column;align-items:center;gap:5px}.score .ring{border-radius:50%;display:flex;align-items:center;justify-content:center}.score .ring-label{font-size:11.5px;font-weight:650;color:var(--ink-2);letter-spacing:.2px}.subscore{display:flex;align-items:center;gap:12px;padding:7px 0;font-size:13px}.subscore .label{min-width:112px;color:var(--ink);font-weight:550}.subscore .bar{flex:1;height:6px;background:var(--surface-2);border-radius:3px;overflow:hidden}.subscore .bar>div{height:100%;border-radius:3px;transition:width .3s ease-out}.subscore .reason{flex-basis:100%;color:var(--ink-2);font-size:12px;margin-top:-3px;padding-bottom:7px;border-bottom:1px dashed var(--line-strong)}.subscore .val{font-family:var(--mono);font-variant-numeric:tabular-nums;min-width:32px;text-align:right;font-weight:650}.list-plain{list-style:none;padding:0;margin:0}.list-plain li{padding:8px 0;border-bottom:var(--hairline);font-size:13.5px}.list-plain li:last-child{border-bottom:none}.divider{height:1px;background:var(--line);margin:16px 0}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spread-between{display:flex;justify-content:space-between;align-items:center;gap:10px}.empty-state{color:var(--ink-2);text-align:center;padding:44px 18px;font-size:14px}.empty-state .big{font-size:30px;margin-bottom:8px}.empty-state .big-icon{width:40px;height:40px;margin:0 auto 12px;color:var(--ink-3)}a{color:var(--accent)}a:hover{color:var(--accent-hover)}@keyframes toast-in{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes sheet-up{0%{transform:translateY(24px);opacity:0}to{transform:translateY(0);opacity:1}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(max-width:1023px){:root{--sidebar-w: 200px}.main{padding:22px 22px 56px}.grid-split{grid-template-columns:1fr}}@media(max-width:767px){.app-shell{display:block}.sidebar{display:none}.topbar{display:flex}.bottomnav{display:block}.main{padding:18px 16px calc(84px + env(safe-area-inset-bottom))}.page-header{flex-direction:column;gap:10px;margin-bottom:16px}.page-header h1{font-size:22px}.page-header .actions{width:100%}.page-header .actions .btn{flex:1}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.grid-2>.card,.grid-3>.card,.grid-4>.card{padding:15px 16px}.vitals{display:grid;grid-template-columns:1fr 1fr;margin-bottom:16px}.vitals .stat{border:none;padding:11px 14px}.vitals .stat:nth-child(2n){border-left:var(--hairline)}.vitals .stat:nth-child(n+3){border-top:var(--hairline)}.vitals .stat:first-child,.vitals .stat:last-child{padding:11px 14px}.stat .value{font-size:20px}.card{padding:16px}.toasts{left:12px;right:12px;bottom:calc(78px + env(safe-area-inset-bottom))}.toast{max-width:none}.field input,.field select,.field textarea,.text-input,.topbar input,.topbar select,.page-header select{font-size:16px}.row .text-input{flex:1 1 100%}}@media(max-width:420px){.topbar-title{display:none}}@media(pointer:coarse){.btn,.tab-btn{min-height:44px}}
