:root{--bg: #080b10;--panel: #10161e;--panel-2: #151c26;--line: #243044;--text: #e8eef6;--muted: #8b97a8;--accent: #3dcaa0;--accent-ink: #06231a;--demand: #2ecc8a;--supply: #f07178;--warn: #e8c36a;--shadow: 0 18px 50px rgba(0, 0, 0, .28);--gutter: 14px;--safe-b: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:IBM Plex Sans,sans-serif;-webkit-text-size-adjust:100%}body{overscroll-behavior-y:none}button,input,select{font:inherit}button{-webkit-tap-highlight-color:transparent}.shell{min-height:100dvh;padding:var(--gutter) var(--gutter) calc(24px + var(--safe-b));display:flex;flex-direction:column;gap:10px;max-width:1500px;margin:0 auto}.boot{min-height:100dvh;display:grid;place-content:center;justify-items:center;gap:14px;color:var(--muted);padding:24px}.spinner,.chart-loading:after{width:38px;height:38px;border:3px solid #243044;border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.topbar,.toolbar,.stats,.table-card,.notice,.progress-wrap,.plan{border:1px solid var(--line);background:var(--panel);border-radius:14px}.topbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px}.brand{display:flex;gap:10px;align-items:center;min-width:0}.brand strong{font-size:16px}.brand p{margin:2px 0 0;color:var(--muted);font-size:12px}.mark{width:36px;height:36px;flex:none;display:grid;place-items:center;border-radius:11px;background:var(--accent);color:var(--accent-ink);font-weight:700}.health{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;white-space:nowrap}.health.live{color:var(--accent)}.dot{width:8px;height:8px;border-radius:50%;background:#5a6575;flex:none}.dot.on{background:var(--accent)}.toolbar{display:flex;flex-direction:column;gap:10px;padding:10px}.toolbar-row{display:flex;gap:8px;align-items:center}.pills{display:flex;flex-wrap:wrap;gap:6px}.scroller{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity}.scroller::-webkit-scrollbar{display:none}.scroller>*{scroll-snap-align:start;flex:none}.pill,.ghost,.primary,.search input{border:1px solid var(--line);background:var(--panel-2);color:var(--text);border-radius:10px}.pill,.ghost,.primary{cursor:pointer;padding:9px 13px;min-height:40px;transition:background .15s ease,border-color .15s ease,color .15s ease}.pill.active,.primary{background:var(--accent);color:var(--accent-ink);border-color:transparent;font-weight:650}.primary.scanning{animation:scan-glow 1.2s ease-in-out infinite}.primary:disabled{opacity:.55;cursor:wait}.ghost{background:transparent}.ghost.active{border-color:var(--accent);color:var(--accent)}.search{flex:1 1 auto;min-width:0}.search input{width:100%;padding:10px 12px;outline:none;min-height:40px}.search input:focus{border-color:var(--accent)}.filters{display:none;gap:10px 14px;flex-wrap:wrap}.filters.open{display:flex}.filter-toggle{flex:none}.field{display:flex;flex-direction:column;gap:6px}.field>em{color:var(--muted);font-style:normal;font-size:11px;text-transform:uppercase;letter-spacing:.04em}.more{align-self:center;margin-top:4px}.progress-wrap{padding:10px 12px}.progress-wrap p{margin:8px 0 0;color:var(--muted);font-size:12px}.progress{height:6px;border-radius:99px;overflow:hidden;background:#1a2431}.progress>span{display:block;height:100%;background:linear-gradient(90deg,#2ecc8a,#3dcaa0,#7df0b8,#3dcaa0);background-size:200% 100%;animation:shimmer 1.4s linear infinite;transition:width .3s ease}.notice{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;color:#3b2a00;background:#f3d48a;border-color:#d7b25a;font-size:13px}.notice .ghost{flex:none;padding:6px 12px;min-height:32px;color:#3b2a00;border-color:#b8933f}.stats{display:grid;grid-template-columns:repeat(6,1fr);overflow:hidden}.stats article{padding:10px 12px;border-right:1px solid var(--line)}.stats article:last-child{border-right:0}.stats em{display:block;color:var(--muted);font-style:normal;font-size:11px}.stats strong{font-size:20px;letter-spacing:-.02em}.demand{color:var(--demand)}.supply{color:var(--supply)}.workspace{display:flex;flex-direction:column;gap:10px;flex:1;min-height:0}.table-card{overflow:hidden;box-shadow:var(--shadow)}.table-scroll{max-height:calc(100dvh - 300px);overflow:auto;overscroll-behavior:contain}table{width:100%;border-collapse:collapse;font-size:13px}th{position:sticky;top:0;z-index:1;text-align:left;background:#18212c;color:var(--muted);font-weight:500;padding:10px;white-space:nowrap}td{padding:10px;border-top:1px solid #1b2532;white-space:nowrap}td.dim{color:var(--muted)}tbody tr{cursor:pointer;content-visibility:auto;contain-intrinsic-size:auto 44px}tbody tr:hover,tbody tr:focus-visible{background:#17202b;outline:none}td strong{display:block}td small{color:var(--muted)}.mono{font-family:IBM Plex Mono,monospace}.strong{font-weight:650}.empty{text-align:center;color:var(--muted);padding:40px 16px;cursor:default}.tag{display:inline-flex;padding:3px 8px;border-radius:999px;font-size:11px;font-weight:650;white-space:nowrap}.tag.demand{background:#2ecc8a24;color:var(--demand)}.tag.supply{background:#f0717824;color:var(--supply)}.tag.approach{background:#e8c36a29;color:var(--warn)}.tag.touch{background:#3dcaa029;color:var(--accent)}.tag.wait{background:#223042;color:#c5d0de}.tag.break{background:#f071781f;color:#ff9aa0}.tag.score{background:#1d2836;color:var(--text);font-family:IBM Plex Mono,monospace}.tag.idx{background:#7aa2f729;color:#9db6ff;margin-left:6px;font-size:10px;vertical-align:middle}.tick{color:var(--accent);transition:color .4s ease}.card-list{display:flex;flex-direction:column;gap:8px}.setup-card{display:block;width:100%;text-align:left;border:1px solid var(--line);background:var(--panel);border-radius:14px;padding:12px;color:var(--text);cursor:pointer;content-visibility:auto;contain-intrinsic-size:auto 150px}.setup-card:active{background:var(--panel-2)}.setup-top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.setup-top strong{display:block;font-size:16px}.setup-top small{color:var(--muted);font-size:12px}.setup-price{text-align:right}.setup-price b{display:block;font-family:IBM Plex Mono,monospace;font-size:15px}.setup-price small{color:var(--muted);font-size:11px}.setup-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.setup-plan{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:12px 0 0;padding-top:10px;border-top:1px solid #1b2532}.setup-plan dt{color:var(--muted);font-size:11px}.setup-plan dd{margin:2px 0 0;font-size:13px}.chart-page{gap:8px}.chart-topbar{display:flex;align-items:center;gap:10px;position:sticky;top:0;z-index:5;padding:6px 0;background:var(--bg)}.back{flex:none;padding:8px 12px}.chart-title{flex:1;min-width:0}.chart-title h1{margin:0;font-size:22px;letter-spacing:-.02em}.chart-title p{margin:2px 0 0;color:var(--muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chart-frames{padding-bottom:2px}.chart-body{position:relative;flex:1;min-height:46dvh;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#081018;touch-action:pan-y}.chart-stage,.chart-host,.chart-zones{position:absolute;inset:0}.chart-zones{pointer-events:none}.chart-loading{position:absolute;inset:0;display:grid;place-items:center;color:var(--muted)}.chart-actions{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}.chart-actions::-webkit-scrollbar{display:none}.chart-actions>*{flex:none}.plan{display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}.plan article{padding:9px 10px;border-right:1px solid var(--line)}.plan article:last-child{border-right:0}.plan em{display:block;color:var(--muted);font-style:normal;font-size:11px}.plan strong{font-size:15px}.zone-strip{display:flex;gap:8px;padding-bottom:4px}.zone-chip{min-width:148px;text-align:left;padding:8px 10px;border-radius:10px;border:1px solid var(--line);background:var(--panel-2);color:var(--text);cursor:pointer}.zone-chip b,.zone-chip span{display:block}.zone-chip span{color:var(--muted);font-size:12px}.zone-chip.demand.active{border-color:var(--demand)}.zone-chip.supply.active{border-color:var(--supply)}@keyframes shimmer{0%{background-position:0 0}to{background-position:200% 0}}@keyframes scan-glow{0%,to{box-shadow:0 0 #3dcaa033}50%{box-shadow:0 0 20px 3px #3dcaa042}}@keyframes spin{to{transform:rotate(360deg)}}.gate{min-height:100dvh;display:grid;place-items:center;padding:24px 16px calc(24px + var(--safe-b))}.gate-card{width:100%;max-width:380px;display:flex;flex-direction:column;gap:14px;padding:22px;border:1px solid var(--line);border-radius:16px;background:var(--panel);box-shadow:var(--shadow)}.gate-brand{display:flex;gap:12px;align-items:center}.gate-brand strong{font-size:17px}.gate-brand p{margin:3px 0 0;color:var(--muted);font-size:12.5px}.gate-hint,.muted{margin:0;color:var(--muted);font-size:12.5px;line-height:1.5}.gate-field{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1 1 180px}.gate-field>span{font-size:12px;color:var(--muted)}.gate-field input,.gate-field textarea{width:100%;padding:10px 12px;min-height:40px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2);color:var(--text);outline:none}.gate-field textarea{resize:vertical;font-family:IBM Plex Mono,monospace;font-size:12px;word-break:break-all}.gate-field input:focus,.gate-field textarea:focus{border-color:var(--accent)}.gate-error{margin:0;padding:9px 12px;border-radius:10px;background:#f0717824;color:#ff9aa0;font-size:12.5px}.topbar-right{display:flex;align-items:center;gap:8px}.ghost.icon{padding:0 11px;font-size:16px;line-height:1;flex:none}.ghost.danger{color:var(--supply);border-color:#f0717866}.modal-backdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:16px;background:#04080cb8;backdrop-filter:blur(3px)}.modal{width:100%;max-width:560px;max-height:min(88dvh,780px);display:flex;flex-direction:column;border:1px solid var(--line);border-radius:16px;background:var(--panel);box-shadow:var(--shadow);overflow:hidden}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:16px 16px 12px;border-bottom:1px solid var(--line)}.modal-head h2{margin:0;font-size:16px}.modal-head p{margin:6px 0 0;color:var(--muted);font-size:12px}.modal-expiry{font-style:normal}.modal-tabs{padding:12px 16px 0}.modal-tabs .pill{padding:7px 11px;min-height:34px;font-size:12.5px}.modal-body{padding:16px;overflow-y:auto;overscroll-behavior:contain}.stack{display:flex;flex-direction:column;gap:14px}.row{display:flex;gap:12px;flex-wrap:wrap}.option{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--panel-2)}.option h3{margin:0;font-size:13.5px}.option .primary,.option .ghost{align-self:flex-start}.modal-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.modal-actions a.ghost{text-decoration:none;display:inline-flex;align-items:center}.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:0;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel-2)}.kv dt{color:var(--muted);font-size:11px}.kv dd{margin:3px 0 0;font-size:12.5px;word-break:break-word}.modal-foot{padding:11px 16px;border-top:1px solid var(--line);font-size:12.5px}.modal-foot.ok{background:#3dcaa01f;color:#8cf0c2}.modal-foot.error{background:#f0717824;color:#ff9aa0}code{padding:1px 5px;border-radius:5px;background:#1d2836;font-family:IBM Plex Mono,monospace;font-size:.92em}@media(min-width:821px){:root{--gutter: 20px}.toolbar{flex-direction:row;align-items:center;flex-wrap:wrap}.toolbar-row{flex:1 1 320px}.filters{display:flex;margin-left:auto}.filter-toggle{display:none}.chart-title h1{font-size:26px}.chart-body{min-height:52dvh}}@media(max-width:820px){.stats{grid-template-columns:repeat(3,1fr)}.stats article:nth-child(3){border-right:0}.stats article:nth-child(n+4){border-top:1px solid var(--line)}.plan{grid-template-columns:repeat(3,1fr)}.plan article:nth-child(3){border-right:0}.plan article:nth-child(n+4){border-top:1px solid var(--line)}}@media(max-width:820px){.modal-backdrop{padding:0;align-items:stretch}.modal{max-width:none;max-height:100dvh;border-radius:0;border:0}.modal-body{padding-bottom:calc(16px + var(--safe-b))}.row{flex-direction:column;gap:10px}}@media(max-width:420px){.brand p{display:none}.stats strong{font-size:18px}.health{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
