@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans+TC:wght@400;500;600&display=swap";:root{--bg:#08090b;--bg-panel:#0a0e12;--bg-panel-alt:#0c1015;--bg-strip:#090c10;--bg-input:#131922;--bg-input-alt:#0f141a;--border:#1d242c;--border-strong:#263039;--border-hover:#3a4653;--text-bright:#f5f8fb;--text-primary:#eef3f8;--text-body:#d8dfe7;--text-muted:#a8b4c2;--text-dim:#96a3b2;--text-faint:#7f8b99;--text-fainter:#62707f;--text-faintest:#56626f;--text-faintest2:#4f5b68;--text-ghost:#5b6774;--accent-link:#5aa9ff}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text-body);margin:0;padding:0}#root{height:100vh}body{font-family:IBM Plex Mono,IBM Plex Sans TC,monospace;font-size:12px}a{color:var(--accent-link);text-decoration:none}a:hover{color:#8fc4ff}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:4px}::-webkit-scrollbar-track{background:#0d1116}button{font-family:inherit}.sid,.pgid{color:var(--text-faintest);background:var(--bg);border:1px solid var(--border);cursor:pointer;-webkit-user-select:all;user-select:all;vertical-align:middle;border-radius:3px;margin-right:5px;padding:1px 4px;font-family:IBM Plex Mono,monospace;font-size:9px;font-weight:800;transition:background .1s,color .1s;display:none}.sid:hover,.pgid:hover{color:var(--accent-link);background:#5aa9ff26}.sid[data-copied]:after,.pgid[data-copied]:after{content:" ✓";color:#46c4b6}.show-ui-ids .sid,.show-ui-ids .pgid{display:inline-flex}.app-shell{background:var(--bg);flex-direction:column;height:100vh;display:flex;overflow:hidden}.header-bar{border-bottom:1px solid var(--border);background:var(--bg-panel-alt);flex-wrap:wrap;flex:none;align-items:center;gap:6px 14px;min-height:52px;padding:6px 14px;display:flex}.header-title-block{border-right:1px solid var(--border);flex-direction:column;flex:none;gap:1px;padding-right:12px;display:flex}.header-title{letter-spacing:.04em;color:var(--text-primary);white-space:nowrap;font-size:12px;font-weight:600}.header-subtitle{color:var(--text-fainter);letter-spacing:.12em;white-space:nowrap;font-size:9px}.header-label{color:var(--text-fainter);letter-spacing:.1em;font-size:9px}.field-group{flex:none;align-items:center;gap:6px;display:flex}.btn-group{border:1px solid var(--border-strong);border-radius:3px;flex:none;display:flex;overflow:hidden}.select-input{background:var(--bg-input);color:var(--text-body);border:1px solid var(--border-strong);border-radius:3px;padding:4px 6px;font-family:inherit;font-size:11px}.btn-group-item{color:var(--text-faint);border:none;border-right:1px solid var(--border-strong);cursor:pointer;letter-spacing:.04em;white-space:nowrap;background:0 0;padding:5px 8px;font-family:inherit;font-size:10px}.btn-group-item:last-child{border-right:none}.btn-group-item:hover{filter:brightness(1.25)}.btn-group-item.active{color:var(--text-bright);background:#1f2a36}.icon-btn{background:var(--bg-input);color:var(--text-muted);border:1px solid var(--border-strong);cursor:pointer;border-radius:3px;width:26px;height:26px;font-family:inherit}.icon-btn:hover{color:var(--text-primary)}.play-btn{color:var(--text-bright);border:1px solid var(--border-strong);cursor:pointer;background:#1f2a36;border-radius:3px;padding:5px 10px;font-family:inherit;font-size:11px;font-weight:600}.play-btn:hover{filter:brightness(1.2)}.playback-controls{border-left:1px solid var(--border);flex:none;align-items:center;gap:8px;padding-left:12px;display:flex}.gran-group{align-items:center;gap:5px;display:flex}.time-slider-row{flex:1;align-items:center;gap:10px;min-width:160px;display:flex}.time-slider-row input[type=range]{min-width:60px;accent-color:var(--text-primary);flex:1;height:4px}.clock{color:var(--text-bright);text-align:right;white-space:nowrap;min-width:68px;font-size:15px;font-weight:600}.stats-strip{border-left:1px solid var(--border);white-space:nowrap;flex:none;gap:16px;padding-left:12px;display:flex}.stat-tile{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.stat-value{color:var(--text-primary);font-size:14px;font-weight:600}.legend-strip{background:var(--bg-strip);border-bottom:1px solid var(--border);color:var(--text-fainter);flex-wrap:wrap;flex:none;align-items:center;gap:4px 14px;padding:4px 14px;font-size:9px;display:flex}.legend-item{white-space:nowrap;flex:none;align-items:center;gap:5px;display:flex}.legend-role{color:var(--text-faint)}.legend-detail{color:var(--text-faintest2)}.main-row{flex:1;min-height:0;display:flex}.main-col{background:var(--border);flex-direction:column;flex:1;gap:1px;min-width:0;display:flex;overflow-y:auto}.panel{background:var(--bg-panel);flex:none}.panel-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:5px 12px;padding:8px 12px 6px;display:flex}.panel-head-left{cursor:pointer;flex:300px;align-items:baseline;gap:8px;min-width:0;display:flex}.panel-title{letter-spacing:.14em;color:#cfd8e2;white-space:nowrap;flex:none;font-size:10px;font-weight:600}.panel-hint{color:var(--text-fainter);font-size:9px}.panel-caret{color:var(--text-faint);font-size:10px;transition:transform .15s}.panel-caret.collapsed{transform:rotate(-90deg)}.info-btn{border:1px solid var(--border-hover);color:var(--text-faint);cursor:pointer;white-space:nowrap;background:0 0;border-radius:2px;flex:none;padding:2px 5px;font-family:inherit;font-size:9px}.heat-row{background:var(--border);flex:none;gap:1px;display:flex}.heat-panel{background:var(--bg-panel);flex-direction:column;flex:1;min-width:0;display:flex}.heat-panel-head{flex-wrap:wrap;align-items:baseline;gap:2px 8px;padding:7px 12px 4px;display:flex}.heat-panel-head-left{cursor:pointer;align-items:baseline;gap:8px;display:flex}.heat-body{height:150px;padding:0 6px 6px}.heat-body canvas{width:100%;height:100%;display:block}.otm-hint{color:var(--text-faintest2);text-align:center;padding:4px 12px 2px;font-family:IBM Plex Sans TC,sans-serif;font-size:9px}.line-body{cursor:grab;-webkit-user-select:none;user-select:none;position:relative;overflow:auto hidden}.line-row{align-items:stretch;height:160px;display:flex;position:relative}.strike-col{cursor:pointer;flex-direction:column;flex:none;align-items:center;width:34px;display:flex;position:relative}.strike-band-wrap{width:100%;height:60px;position:relative}.strike-label{color:var(--text-fainter);white-space:nowrap;margin-top:2px;font-size:8.5px}.side-col{border-left:1px solid var(--border);background:var(--bg-panel-alt);flex-direction:column;flex:none;width:384px;min-height:0;display:flex;overflow-y:auto}.side-block{border-bottom:1px solid var(--border);padding:9px 12px}.side-block-title{letter-spacing:.14em;color:#cfd8e2;font-size:10px;font-weight:600}.mid-proxy-banner{background:repeating-linear-gradient(135deg,#ffd1661a 0 6px,#ffd16605 6px 12px);border:1px dashed #7f6a2a;border-radius:3px;align-items:center;gap:8px;margin-bottom:7px;padding:5px 8px;display:flex}.mid-proxy-label{letter-spacing:.1em;color:#ffd166;white-space:nowrap;font-size:11px;font-weight:600}.mid-proxy-text{color:#b9a678;font-family:IBM Plex Sans TC,sans-serif;font-size:9.5px;line-height:1.35}.stat-grid{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.stat-cell{background:var(--bg-input-alt);flex-direction:column;gap:2px;padding:5px 7px;display:flex}.stat-cell-key{color:var(--text-dim);white-space:nowrap;font-family:IBM Plex Sans TC,sans-serif;font-size:9px}.band-box{background:var(--bg-input-alt);border:1px solid var(--border);height:36px;position:relative}.band-legend{color:var(--text-fainter);justify-content:space-between;margin-top:3px;font-size:9px;display:flex}.orderbook-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.orderbook-col{flex-direction:column;gap:1px;display:flex}.orderbook-head{color:var(--text-fainter);letter-spacing:.08em;justify-content:space-between;padding:0 2px 2px;font-size:8px;display:flex}.orderbook-row{border-radius:2px;justify-content:space-between;padding:2px 4px;font-size:11px;display:flex}.cand-tabs-row{flex-wrap:wrap;justify-content:space-between;align-items:center;row-gap:4px;padding:9px 12px 6px;display:flex}.cand-list{flex:1;min-height:0;padding:0 8px 10px;overflow-y:auto}.cand-card{border:1px solid var(--border-strong);cursor:pointer;border-radius:4px;margin-bottom:6px;padding:7px 9px}.cand-card:hover{border-color:var(--border-hover)}.cand-card-top{align-items:baseline;gap:7px;display:flex}.cand-strike{color:var(--text-primary);font-size:13px;font-weight:600}.cand-meta-row{color:#8b98a7;flex-wrap:wrap;gap:2px 10px;margin-top:4px;font-size:9px;display:flex}.cand-reason{color:var(--text-faint);margin-top:4px;font-family:IBM Plex Sans TC,sans-serif;font-size:9.5px;line-height:1.45}.cand-empty{text-align:center;color:var(--text-faintest);padding:18px 10px;font-family:IBM Plex Sans TC,sans-serif;font-size:10px}.hover-tip{z-index:90;pointer-events:none;background:#0c1015;border:1px solid #2c3742;border-radius:6px;max-width:260px;padding:10px 12px;position:fixed;box-shadow:0 12px 40px #000000b3}.hover-tip-head{align-items:baseline;gap:7px;margin-bottom:5px;display:flex}.hover-tip-grid{grid-template-columns:1fr auto;gap:3px 12px;font-size:10px;display:grid}.hover-tip-key{color:var(--text-dim);white-space:nowrap;font-family:IBM Plex Sans TC,sans-serif;font-size:10.5px}.modal-overlay{z-index:100;background:#0009;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-box{background:#0c1015;border:1px solid #2c3742;border-radius:6px;max-width:520px;max-height:70vh;padding:24px;overflow-y:auto;box-shadow:0 20px 60px #000c}.modal-head{justify-content:space-between;align-items:baseline;margin-bottom:16px;display:flex}.modal-title{color:var(--text-bright);letter-spacing:.06em;margin:0;font-size:16px;font-weight:600}.modal-close{color:var(--text-faint);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:20px;display:flex}.modal-body{color:var(--text-body);white-space:pre-wrap;font-family:IBM Plex Sans TC,sans-serif;font-size:13px;line-height:1.6}.loading-fill,.error-fill{color:var(--text-faint);flex:1;justify-content:center;align-items:center;font-size:12px;display:flex}.error-fill{color:#ef4444}
