:root{--bg:#080b0f;--bg-1:#0d1117;--panel:#111820;--panel-2:#161f2a;--panel-3:#1c2735;--elevated:#1e2d3d;--text:#e6edf3;--text-2:#b0b8c4;--muted:#6e7a8a;--ghost:#4a5568;--accent:#00d4aa;--accent-soft:#00d4aa14;--accent-dim:#00d4aa26;--ok:#4ade80;--ok-soft:#4ade8014;--warn:#facc15;--warn-soft:#facc1514;--bad:#f87171;--bad-soft:#f8717114;--info:#60a5fa;--info-soft:#60a5fa14;--up:#4ade80;--down:#f87171;--flat:var(--muted);--font-sans:"Inter", system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", "SF Mono", monospace;--fs-10:10px;--fs-11:11px;--fs-12:12px;--fs-13:13px;--fs-14:14px;--fs-16:16px;--fs-18:18px;--fs-24:24px;--fs-32:32px;--fw-normal:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--fw-extrabold:800;--tracking-1:.02em;--tracking-2:.06em;--sp-1:2px;--sp-2:4px;--sp-3:8px;--sp-4:12px;--sp-5:16px;--sp-6:20px;--sp-8:24px;--r-2:2px;--r-3:3px;--r-4:4px;--r-5:6px;--r-6:8px;--bd:1px solid #ffffff0a;--bd-2:1px solid #ffffff14;--bd-accent:1px solid var(--accent-dim);--shadow-1:0 1px 2px #0006;--shadow-2:0 4px 16px #00000080;--t-fast:.12s;--t-base:.2s;--nav-h:48px;--sidebar-w:200px;--drawer-w:480px}[data-theme=light]{--bg:#f6f8fa;--bg-1:#fff;--panel:#fff;--panel-2:#f3f4f6;--panel-3:#e5e7eb;--elevated:#e5e7eb;--text:#111827;--text-2:#4b5563;--muted:#9ca3af;--ghost:#d1d5db}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{background:var(--bg);height:100%;color:var(--text);font-family:var(--font-sans);font-size:var(--fs-13);-webkit-font-smoothing:antialiased;line-height:1.5}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--panel-3);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--ghost)}.app-shell{grid-template-rows:var(--nav-h) 1fr;grid-template-columns:var(--sidebar-w) 1fr;grid-template-areas:"header header""sidebar main";height:100vh;display:grid;overflow:hidden}.app-header{align-items:center;gap:var(--sp-4);padding:0 var(--sp-5);background:var(--bg-1);border-bottom:var(--bd);z-index:100;grid-area:header;display:flex}.app-header .brand{align-items:center;gap:var(--sp-3);font-weight:var(--fw-bold);font-size:var(--fs-14);letter-spacing:var(--tracking-1);display:flex}.app-header .brand-mark{background:var(--accent);border-radius:var(--r-4);width:28px;height:28px;font-weight:var(--fw-extrabold);color:var(--bg);font-size:var(--fs-12);justify-content:center;align-items:center;display:flex}.app-header .market-pill{align-items:center;gap:var(--sp-3);margin-left:auto;display:flex}.app-sidebar{background:var(--bg-1);border-right:var(--bd);padding:var(--sp-3) 0;flex-direction:column;grid-area:sidebar;display:flex;overflow-y:auto}.app-main{padding:var(--sp-5);background:var(--bg);grid-area:main;overflow-y:auto}.nav-item{align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);margin:1px var(--sp-3);border-radius:var(--r-4);color:var(--text-2);font-size:var(--fs-12);font-weight:var(--fw-medium);cursor:pointer;transition:all var(--t-fast);width:calc(100% - var(--sp-6));text-align:left;background:0 0;border:none;display:flex}.nav-item:hover{background:var(--panel-2);color:var(--text)}.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:var(--fw-semibold)}.nav-item .nav-icon{text-align:center;width:20px;font-size:var(--fs-14)}.nav-badge{background:var(--accent-dim);color:var(--accent);font-size:var(--fs-10);font-weight:var(--fw-bold);border-radius:var(--r-3);text-align:center;min-width:18px;margin-left:auto;padding:1px 6px}.card{background:var(--panel);border:var(--bd);border-radius:var(--r-5);overflow:hidden}.card-header{align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:var(--bd);font-weight:var(--fw-semibold);font-size:var(--fs-13);display:flex}.card-header .card-title{align-items:center;gap:var(--sp-3);display:flex}.card-header .card-actions{gap:var(--sp-2);margin-left:auto;display:flex}.card-body{padding:var(--sp-4) var(--sp-5)}.card-body.flush{padding:0}.data-table{border-collapse:collapse;width:100%;font-size:var(--fs-12)}.data-table th{text-align:left;padding:var(--sp-3) var(--sp-4);font-weight:var(--fw-semibold);color:var(--muted);font-size:var(--fs-11);text-transform:uppercase;letter-spacing:var(--tracking-2);border-bottom:var(--bd-2);white-space:nowrap}.data-table td{padding:var(--sp-3) var(--sp-4);border-bottom:var(--bd);vertical-align:middle}.data-table tr:last-child td{border-bottom:none}.data-table tr.clickable{cursor:pointer}.data-table tr.clickable:hover{background:var(--panel-2)}.data-table .num{font-family:var(--font-mono);text-align:right}.data-table .ticker-cell{font-weight:var(--fw-semibold);font-family:var(--font-mono);font-size:var(--fs-13)}.data-table .ticker-cell .sub{font-weight:var(--fw-normal);font-size:var(--fs-11);color:var(--muted);font-family:var(--font-sans);display:block}.data-table-empty{padding:var(--sp-8);text-align:center;color:var(--muted);font-size:var(--fs-13)}.pill{align-items:center;gap:var(--sp-2);border-radius:var(--r-3);font-size:var(--fs-11);font-weight:var(--fw-semibold);letter-spacing:var(--tracking-1);white-space:nowrap;padding:2px 8px;display:inline-flex}.pill:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.pill.ok{color:var(--ok);background:var(--ok-soft)}.pill.warn{color:var(--warn);background:var(--warn-soft)}.pill.bad{color:var(--bad);background:var(--bad-soft)}.pill.accent{color:var(--accent);background:var(--accent-soft)}.pill.info{color:var(--info);background:var(--info-soft)}.pill.ghost{color:var(--ghost);background:var(--panel-2)}.pill.no-dot:before{display:none}.btn{justify-content:center;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-4);font-size:var(--fs-12);font-weight:var(--fw-semibold);cursor:pointer;transition:all var(--t-fast);white-space:nowrap;border:none;display:inline-flex}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--bg)}.btn-primary:hover:not(:disabled){box-shadow:0 0 12px var(--accent-dim);background:#00e6b8}.btn-ghost{color:var(--text-2);border:var(--bd);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--panel-2);color:var(--text)}.btn-danger{background:var(--bad);color:#fff}.btn-sm{padding:var(--sp-2) var(--sp-3);font-size:var(--fs-11)}.btn-lg{padding:var(--sp-4) var(--sp-6);font-size:var(--fs-14)}.form-group{gap:var(--sp-2);flex-direction:column;display:flex}.form-group label{font-size:var(--fs-11);font-weight:var(--fw-semibold);color:var(--text-2);text-transform:uppercase;letter-spacing:var(--tracking-2)}.form-group input,.form-group select,.form-group textarea{background:var(--bg-1);border:var(--bd);border-radius:var(--r-4);color:var(--text);padding:var(--sp-3) var(--sp-4);font-family:var(--font-mono);font-size:var(--fs-13);transition:border-color var(--t-fast);outline:none}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--accent)}.form-group input::placeholder{color:var(--ghost)}.form-row{gap:var(--sp-4);grid-template-columns:1fr 1fr;display:grid}.ticker-tape{gap:var(--sp-5);padding:var(--sp-3) var(--sp-5);background:var(--bg-1);border-bottom:var(--bd);white-space:nowrap;font-size:var(--fs-12);font-family:var(--font-mono);display:flex;overflow-x:auto}.ticker-tape::-webkit-scrollbar{display:none}.tape-item{align-items:center;gap:var(--sp-2);display:flex}.tape-item .sym{font-weight:var(--fw-bold);color:var(--text-2)}.tape-item .price{font-weight:var(--fw-semibold)}.tape-item .chg{font-size:var(--fs-11)}.sparkline{vertical-align:middle;display:inline-block}.sparkline svg{display:block}.sparkline.up .line{stroke:var(--up)}.sparkline.up .area{fill:var(--ok-soft)}.sparkline.down .line{stroke:var(--down)}.sparkline.down .area{fill:var(--bad-soft)}.score-bar{align-items:center;gap:var(--sp-3);display:flex}.score-bar .track{background:var(--panel-3);border-radius:2px;width:60px;height:4px;overflow:hidden}.score-bar .fill{height:100%;transition:width var(--t-base);border-radius:2px}.score-bar .fill.high{background:var(--ok)}.score-bar .fill.mid{background:var(--warn)}.score-bar .fill.low{background:var(--bad)}.conf-dots{align-items:center;gap:var(--sp-1);display:flex}.conf-dots .dot{background:var(--panel-3);width:6px;height:6px;transition:background var(--t-fast);border-radius:50%}.conf-dots .dot.on{background:var(--accent)}.conf-dots .pct{margin-left:var(--sp-2);font-size:var(--fs-11);color:var(--muted);font-family:var(--font-mono)}.drawer-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:200;animation:fadeIn var(--t-base);background:#0009;position:fixed;inset:0}.drawer{width:var(--drawer-w);background:var(--panel);border-left:var(--bd-2);z-index:210;max-width:100vw;height:100vh;animation:slideIn var(--t-base);flex-direction:column;display:flex;position:fixed;top:0;right:0}.drawer-header{align-items:center;gap:var(--sp-4);padding:var(--sp-5);border-bottom:var(--bd);display:flex}.drawer-header .ticker{font-family:var(--font-mono);font-size:var(--fs-18);font-weight:var(--fw-bold)}.drawer-header .company{color:var(--text-2);font-size:var(--fs-13)}.drawer-header .price{font-family:var(--font-mono);font-size:var(--fs-18);font-weight:var(--fw-bold);margin-left:auto}.drawer-body{padding:var(--sp-5);gap:var(--sp-5);flex-direction:column;flex:1;display:flex;overflow-y:auto}.drawer-footer{padding:var(--sp-5);border-top:var(--bd);gap:var(--sp-3);display:flex}.section{gap:var(--sp-3);flex-direction:column;display:flex}.section-title{font-size:var(--fs-11);font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:var(--tracking-2);color:var(--muted)}.kv-grid{gap:var(--sp-3);grid-template-columns:repeat(auto-fill,minmax(140px,1fr));display:grid}.kv-item{gap:var(--sp-1);padding:var(--sp-3);background:var(--bg-1);border-radius:var(--r-4);flex-direction:column;display:flex}.kv-item .kv-key{font-size:var(--fs-11);color:var(--muted);text-transform:uppercase;letter-spacing:var(--tracking-2)}.kv-item .kv-val{font-family:var(--font-mono);font-size:var(--fs-14);font-weight:var(--fw-semibold)}.gate-item{align-items:center;gap:var(--sp-3);padding:var(--sp-3);background:var(--bg-1);border-radius:var(--r-4);display:flex}.gate-item .gate-icon{font-size:var(--fs-14)}.gate-item .gate-icon.pass{color:var(--ok)}.gate-item .gate-icon.fail{color:var(--bad)}.gate-item .gate-name{font-size:var(--fs-12);flex:1}.gate-item .gate-val{font-family:var(--font-mono);font-size:var(--fs-12);color:var(--muted)}.banner{padding:var(--sp-4) var(--sp-5);border-radius:var(--r-4);font-size:var(--fs-13);border:var(--bd)}.banner.ok{background:var(--ok-soft);color:var(--ok);border-color:#4ade8033}.banner.warn{background:var(--warn-soft);color:var(--warn);border-color:#facc1533}.banner.bad{background:var(--bad-soft);color:var(--bad);border-color:#f8717133}.banner.info{background:var(--info-soft);color:var(--info);border-color:#60a5fa33}.toast-container{bottom:var(--sp-5);right:var(--sp-5);z-index:300;gap:var(--sp-3);flex-direction:column;max-width:360px;display:flex;position:fixed}.toast{padding:var(--sp-4) var(--sp-5);border-radius:var(--r-5);background:var(--panel);border:var(--bd);box-shadow:var(--shadow-2);animation:toastIn var(--t-base);gap:var(--sp-1);flex-direction:column;display:flex}.toast .toast-title{font-weight:var(--fw-semibold);font-size:var(--fs-13)}.toast .toast-body{font-size:var(--fs-12);color:var(--text-2)}.toast.ok{border-left:3px solid var(--ok)}.toast.warn{border-left:3px solid var(--warn)}.toast.bad{border-left:3px solid var(--bad)}.toast.accent{border-left:3px solid var(--accent)}.filter-bar{align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--panel);border:var(--bd);border-radius:var(--r-5);display:flex}.filter-bar input,.filter-bar select{background:var(--bg-1);border:var(--bd);border-radius:var(--r-3);color:var(--text);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-12);outline:none}.order-ticket{gap:var(--sp-5);grid-template-columns:1fr 320px;max-width:1200px;display:grid}.ticket-panel{gap:var(--sp-4);flex-direction:column;display:flex}.ticket-summary{background:var(--bg-1);border:var(--bd);border-radius:var(--r-5);padding:var(--sp-5);gap:var(--sp-4);flex-direction:column;display:flex}.ticket-summary .summary-row{padding:var(--sp-2) 0;border-bottom:var(--bd);justify-content:space-between;align-items:center;display:flex}.ticket-summary .summary-row:last-child{border-bottom:none}.blotter{gap:var(--sp-2);flex-direction:column;display:flex}.blotter-row{gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-4);font-size:var(--fs-12);grid-template-columns:2fr 1fr 1fr 1fr 1fr 80px;align-items:center;display:grid}.blotter-row:hover{background:var(--panel-2)}.grid-2{gap:var(--sp-5);grid-template-columns:repeat(2,1fr);display:grid}.grid-3{gap:var(--sp-5);grid-template-columns:repeat(3,1fr);display:grid}.grid-4{gap:var(--sp-5);grid-template-columns:repeat(4,1fr);display:grid}.hero{font-family:var(--font-mono);font-size:var(--fs-32);font-weight:var(--fw-bold);line-height:1.1}.hero-sm{font-family:var(--font-mono);font-size:var(--fs-24);font-weight:var(--fw-bold)}.up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--flat)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes toastIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.custom-scroll{overflow-y:auto}.custom-scroll::-webkit-scrollbar{width:4px}.custom-scroll::-webkit-scrollbar-thumb{background:var(--panel-3);border-radius:2px}@media (width<=1024px){.app-shell{grid-template-columns:1fr;grid-template-areas:"header""main"}.app-sidebar{display:none}.order-ticket{grid-template-columns:1fr}.drawer{width:100vw}}@media (width<=768px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-1{gap:var(--sp-1)}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.gap-5{gap:var(--sp-5)}.flex-1{flex:1}.text-right{text-align:right}.text-center{text-align:center}.mono{font-family:var(--font-mono)}.muted{color:var(--muted)}.small{font-size:var(--fs-11)}.semibold{font-weight:var(--fw-semibold)}.bold{font-weight:var(--fw-bold)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
