:root{--bg: #0b0d10;--panel: #14171c;--panel-border: #222831;--text: #e5e7eb;--muted: #9ca3af;--accent: #60a5fa;--good: #34d399;--bad: #f87171;--warn: #fbbf24;--neutral: #9ca3af}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Pretendard,Segoe UI,Roboto,Apple SD Gothic Neo,Noto Sans KR,sans-serif;font-size:14px;line-height:1.4}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.app{min-height:100%;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;gap:24px;padding:12px 20px;background:var(--panel);border-bottom:1px solid var(--panel-border);position:sticky;top:0;z-index:10}.brand{font-weight:700;font-size:16px;letter-spacing:.5px}.app-nav{display:flex;gap:16px}.app-nav a{color:var(--muted);padding:6px 10px;border-radius:6px}.app-nav a.active,.app-nav a:hover{color:var(--text);background:#1f2630;text-decoration:none}.app-main{flex:1;padding:20px;max-width:1280px;margin:0 auto;width:100%}.filter-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:end;padding:12px 16px;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;margin-bottom:16px}.filter-group{display:flex;flex-direction:column;gap:4px}.filter-group label{font-size:11px;color:var(--muted);text-transform:uppercase}.filter-group input,.filter-group select{background:#0f1217;border:1px solid #2a3240;color:var(--text);padding:6px 8px;border-radius:6px;font:inherit}.filter-presets{display:flex;gap:6px;margin-left:auto}.preset-btn{background:transparent;border:1px solid #2a3240;color:var(--muted);padding:6px 10px;border-radius:6px;font:inherit;cursor:pointer}.preset-btn:hover{color:var(--text);border-color:#3a4458}.panel{background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;padding:16px;margin-bottom:16px}.panel h2{margin:0 0 12px;font-size:14px;font-weight:600;color:var(--muted)}.panel-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}@media (max-width: 900px){.panel-grid{grid-template-columns:1fr}}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:16px}.kpi-card{background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;padding:14px 16px;border-left:3px solid var(--neutral)}.kpi-card.kpi-good{border-left-color:var(--good)}.kpi-card.kpi-bad{border-left-color:var(--bad)}.kpi-card.kpi-warn{border-left-color:var(--warn)}.kpi-label{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.kpi-value{font-size:28px;font-weight:700;margin-top:4px}.kpi-sub{color:var(--muted);font-size:12px;margin-top:4px}.chip-bar{display:flex;gap:6px;margin-bottom:12px}.chip{background:transparent;border:1px solid #2a3240;color:var(--muted);padding:6px 12px;border-radius:16px;font:inherit;cursor:pointer}.chip-active{background:var(--accent);color:#0b0d10;border-color:var(--accent)}.session-meta{color:var(--muted);font-size:12px;margin-bottom:8px}.session-table-wrap{overflow-x:auto;border:1px solid var(--panel-border);border-radius:8px}.session-table{width:100%;border-collapse:collapse;background:var(--panel)}.session-table th,.session-table td{padding:10px 12px;text-align:left;font-size:13px;border-bottom:1px solid var(--panel-border)}.session-table thead th{background:#191d24;color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}.session-table thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.session-table thead th.sortable:hover{color:var(--text);background:#1f2530}.session-table thead th.sortable-active{color:var(--accent)}.session-table thead th .sort-arrow{display:inline-block;margin-left:6px;font-size:10px;opacity:.5}.session-table thead th.sortable-active .sort-arrow{opacity:1}.column-filter-bar{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:12px;padding:10px 12px;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px}.column-filter-bar .cf-group{display:flex;flex-direction:column;gap:4px}.column-filter-bar .cf-group label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}.column-filter-bar .cf-group input{background:#11151b;border:1px solid var(--panel-border);color:var(--text);padding:6px 8px;border-radius:4px;font:inherit;width:120px}.column-filter-bar .cf-group input:focus{outline:none;border-color:var(--accent)}.column-filter-bar .cf-reset{background:transparent;border:1px solid var(--panel-border);color:var(--muted);padding:6px 12px;border-radius:4px;font:inherit;cursor:pointer;align-self:flex-end}.column-filter-bar .cf-reset:hover{color:var(--text);border-color:var(--accent)}.session-table tbody tr:hover{background:#181c22}.session-table td.empty{text-align:center;color:var(--muted);padding:24px}.result-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;background:#2a3240;color:var(--text)}.result-player_win{background:#34d39933;color:var(--good)}.result-player_lose{background:#f8717133;color:var(--bad)}.result-cancelled{background:#9ca3af33;color:var(--muted)}.result-in_progress{background:#60a5fa33;color:var(--accent)}.pager{display:flex;gap:8px;justify-content:center;margin-top:16px}.pager button{background:var(--panel);border:1px solid var(--panel-border);color:var(--text);padding:8px 16px;border-radius:6px;cursor:pointer;font:inherit}.pager button:disabled{color:#4b5563;cursor:not-allowed}.detail-header{margin-bottom:12px}.back-link{color:var(--muted)}.session-meta-panel h2{color:var(--text);font-size:18px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.theme-badge{font-size:11px;padding:2px 8px;border-radius:10px;background:#2a3240;color:var(--text)}.meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px 24px;padding:12px 0;border-bottom:1px solid var(--panel-border);margin-bottom:12px}.meta-row{display:flex;justify-content:space-between;font-size:13px}.meta-label{color:var(--muted)}.meta-value{color:var(--text)}.summary-sections{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media (max-width: 600px){.summary-sections{grid-template-columns:1fr}}.summary-section{background:#ffffff05;border:1px solid var(--panel-border);border-left:3px solid var(--panel-border);border-radius:8px;padding:10px 14px}.summary-section.section-danger{border-left-color:#f871718c}.summary-section.section-good{border-left-color:#34d39980}.summary-section-label{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}.stat-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0;border-bottom:1px solid rgba(255,255,255,.04);gap:12px}.stat-row:last-child{border-bottom:none}.stat-label{color:var(--muted);font-size:12px}.stat-value{font-weight:700;font-size:15px;font-variant-numeric:tabular-nums;color:var(--text);flex-shrink:0}.stat-row.tone-good .stat-value{color:var(--good)}.stat-row.tone-danger .stat-value{color:var(--bad)}.stat-row.tone-warn .stat-value{color:var(--warn)}.timeline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.timeline-header h2{margin:0}.toggle{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:6px;cursor:pointer}.toggle .muted{color:var(--muted);font-size:11px}.level-filter-bar{display:flex;gap:5px}.level-chip-btn{background:transparent;border:1px solid #2a3240;color:var(--muted);padding:4px 12px;border-radius:16px;font:inherit;font-size:12px;cursor:pointer;transition:all .12s;display:inline-flex;align-items:center;gap:4px}.level-chip-btn:hover{color:var(--text);border-color:#3a4458}.level-chip-btn.active{background:var(--accent);color:#0b0d10;border-color:var(--accent);font-weight:600}.timeline{list-style:none;padding:0;margin:0}.timeline-item{display:grid;grid-template-columns:80px 24px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid #1a1e25;font-size:13px;align-items:start}.timeline-item .t-time{color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.timeline-item .t-icon{text-align:center;font-size:14px}.timeline-item.level-high .t-label{color:var(--text);font-weight:600}.timeline-item.level-med .t-label{color:var(--text)}.timeline-item.level-low .t-label{color:var(--muted)}.timeline-item.level-low .t-time,.timeline-item.level-low .t-icon,.timeline-item.level-low .t-summary{color:var(--muted);opacity:.7}.timeline-item .t-label{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.timeline-item .t-summary{color:var(--muted);font-size:12px;margin-top:2px}.t-summary-inline{color:var(--muted);font-size:12px}.device-badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:500;background:#60a5fa24;color:var(--accent);border:1px solid rgba(96,165,250,.3)}.device-badge.device-type-escapemachine{background:#d4944a2e;color:#e6b075;border-color:#d4944a66}.device-badge.device-type-duct{background:#f8717126;color:var(--bad);border-color:#f8717159}.device-badge.device-type-generator{background:#6bc48a26;color:var(--good);border-color:#6bc48a59}.device-badge.device-type-alter{background:#c46b852e;color:#e091a8;border-color:#c46b8566}.device-badge.device-type-itembox{background:#7ab3d426;color:#a8cbe2;border-color:#7ab3d459}.device-badge.device-type-revivalmachine{background:#9a7cbf2e;color:#b89dd1;border-color:#9a7cbf66}.device-badge.device-type-tagmachine{background:#c4b05529;color:#d6c270;border-color:#c4b05566}.device-name{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--muted)}.t-state-change{display:flex;align-items:center;gap:8px;font-size:12px;margin-top:3px;font-variant-numeric:tabular-nums}.t-state-change .state-old,.t-state-change .state-arrow{color:var(--muted)}.t-state-change .state-new{color:var(--text);font-weight:600}.alert-error{background:#f871711f;border:1px solid rgba(248,113,113,.4);color:var(--bad);padding:10px 14px;border-radius:6px;margin-bottom:12px}.loading,.empty{color:var(--muted);padding:20px 0;text-align:center}.page{width:100%}.col-actions{text-align:right;white-space:nowrap;width:1%}.col-num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.row-action{background:transparent;border:1px solid #2a3240;color:var(--muted);padding:4px 10px;border-radius:6px;font:inherit;font-size:12px;cursor:pointer;margin-left:4px}.row-action:hover:not(:disabled){color:var(--text);border-color:#3a4458}.row-action:disabled{opacity:.5;cursor:not-allowed}.row-action-danger{color:var(--bad);border-color:#f8717166}.row-action-danger:hover:not(:disabled){color:var(--bad);background:#f871711a;border-color:#f8717199}.row-hidden td{opacity:.5}.hidden-badge{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:8px;font-size:10px;color:var(--muted);background:#2a3240;vertical-align:middle}.toggle-hidden{margin-left:auto}.col-check{width:32px;text-align:center;padding:0 4px}.col-check input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:var(--accent)}.col-check input[type=checkbox]:disabled{cursor:not-allowed}.session-table tbody tr.row-selected{background:#60a5fa14}.session-table tbody tr.row-selected:hover{background:#60a5fa24}.bulk-bar{display:flex;align-items:center;gap:6px;padding:10px 14px;margin-bottom:12px;background:#60a5fa14;border:1px solid rgba(96,165,250,.4);border-radius:8px}.bulk-bar .bulk-count{color:var(--accent);font-weight:600;font-size:13px;margin-right:8px}.bulk-bar .bulk-clear{margin-left:auto}.detail-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.detail-actions{display:flex;gap:4px}.app-main.detail-main{max-width:1600px}.session-detail{display:grid;grid-template-columns:minmax(0,1fr) clamp(260px,24vw,380px);grid-template-rows:auto auto auto;gap:12px}.session-detail .detail-header,.session-meta-panel{grid-column:1 / -1}.device-panel{grid-column:1;grid-row:3;min-height:320px}.glove-panel{grid-column:2;grid-row:3;min-height:320px}.timeline-panel{grid-column:1 / -1}@media (max-width: 900px){.session-detail{grid-template-columns:1fr}.device-panel,.glove-panel{grid-column:1;grid-row:auto}}.scrubber{display:flex;align-items:center;gap:12px;padding:10px 4px;margin-bottom:12px;border-bottom:1px solid var(--panel-border)}.scrubber input[type=range]{flex:1;accent-color:var(--accent)}.scrubber-time{font-variant-numeric:tabular-nums;font-size:13px;color:var(--muted);min-width:80px}.scrubber-reset{background:transparent;color:var(--muted);border:1px solid var(--panel-border);border-radius:6px;padding:4px 8px;cursor:pointer;font-size:12px}.scrubber-reset:hover{color:var(--text);border-color:var(--accent)}.dp-panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.dp-panel-header h2{margin:0}.dp-count{font-weight:400;color:var(--muted);font-size:12px}.dp-view-toggle{display:flex;gap:2px}.dp-view-btn{background:transparent;border:1px solid var(--panel-border);color:var(--muted);padding:3px 8px;border-radius:5px;font:inherit;font-size:11px;cursor:pointer;white-space:nowrap}.dp-view-btn:hover{color:var(--text);border-color:#3a4458}.dp-view-btn.active{background:#1f2630;color:var(--accent);border-color:var(--accent)}.dp-table-wrap{overflow-x:auto;border:1px solid var(--panel-border);border-radius:6px}.dp-table{width:100%;border-collapse:collapse;font-size:12px}.dp-table th{background:#191d24;color:var(--muted);font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.4px;padding:7px 10px;text-align:left;border-bottom:1px solid var(--panel-border);white-space:nowrap}.dp-table td{padding:6px 10px;border-bottom:1px solid #1a1e25;vertical-align:middle}.dp-table tbody tr:hover{background:#ffffff08;cursor:context-menu}.dp-row-selected{background:#60a5fa1a!important}.dp-td-name{font-weight:600;color:var(--text);white-space:nowrap}.dp-td-muted{color:var(--muted);white-space:nowrap}.dp-td-num{color:var(--text);font-variant-numeric:tabular-nums;text-align:right}.dp-state-chip{display:inline-block;padding:1px 7px;border-radius:8px;font-size:11px;background:#1f2630;color:var(--muted)}.dp-state-chip.state-ready{background:#c4606033;color:#fca5a5}.dp-state-chip.state-activate{background:#34d39926;color:var(--good)}.dp-state-chip.state-kill{background:#f871712e;color:var(--bad)}.dp-state-chip.state-repaired{background:#34d3991a;color:var(--good)}.dp-state-chip.state-escape{background:#60a5fa26;color:var(--accent)}.dp-state-chip.state-blink{background:#b266ff26;color:#d6b3ff}.dp-context-menu,.gp-context-menu{background:#1a1f28;border:1px solid #2e3748;border-radius:8px;box-shadow:0 8px 24px #0009;min-width:200px;max-width:280px;font-size:12px;overflow:hidden;-webkit-user-select:none;user-select:none}.dp-ctx-header,.gp-ctx-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px 6px;border-bottom:1px solid #252c38}.dp-ctx-name,.gp-ctx-name{font-weight:700;font-size:13px;color:var(--text)}.dp-ctx-type{font-size:10px;padding:1px 6px;border-radius:8px;background:#2a3240;color:var(--muted)}.dp-ctx-state{display:flex;align-items:center;gap:6px;padding:6px 12px;border-bottom:1px solid #252c38;color:var(--text);font-size:12px}.dp-ctx-state-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0}.dp-ctx-state-dot.state-ready{background:#c46060}.dp-ctx-state-dot.state-activate{background:var(--good)}.dp-ctx-state-dot.state-kill{background:var(--bad)}.dp-ctx-state-dot.state-repaired{background:var(--good)}.dp-ctx-state-dot.state-escape{background:var(--accent)}.dp-ctx-state-dot.state-blink{background:#b266ff}.dp-ctx-game-state{color:var(--muted)}.dp-ctx-fields{padding:6px 0;max-height:280px;overflow-y:auto}.dp-ctx-field{display:flex;justify-content:space-between;gap:12px;padding:3px 12px}.dp-ctx-field-key{color:var(--muted);font-family:ui-monospace,Consolas,monospace;font-size:11px;white-space:nowrap}.dp-ctx-field-val{color:var(--text);font-variant-numeric:tabular-nums;text-align:right;word-break:break-all}.device-type-section{margin-bottom:14px}.device-type-section h3{margin:0 0 6px;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}.device-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px}.device-card{border:1px solid var(--panel-border);border-radius:8px;padding:8px;background:#11151a;display:flex;flex-direction:column;gap:2px;min-height:54px;position:relative}.device-card .dc-name{font-size:12px;font-weight:600;color:var(--text)}.device-card .dc-state{font-size:11px;color:var(--muted)}.device-card[data-state=ready]{border-left:3px solid #c46060}.device-card[data-state=activate]{border-left:3px solid var(--good)}.device-card[data-state=setting]{border-left:3px solid #999}.device-card[data-state=stop]{border-left:3px solid #556;opacity:.7}.device-card[data-state=kill]{border-left:3px solid var(--bad);background:#f8717114}.device-card[data-state=repaired]{border-left:3px solid var(--good);background:#34d3990f}.device-card[data-state=escape]{border-left:3px solid var(--accent)}.device-card .dc-meta{font-size:10px;color:var(--muted);margin-top:2px}.glove-group-section{margin-bottom:12px}.glove-group-section h3{margin:0 0 6px;font-size:12px;color:var(--muted);text-transform:uppercase}.glove-card{border:1px solid var(--panel-border);border-left:3px solid #556;border-radius:8px;padding:8px 10px;margin-bottom:6px;background:#11151a}.glove-card[data-role=tagger]{border-left-color:#b266ff;background:#b266ff0f}.glove-card[data-role=player]{border-left-color:var(--good)}.glove-card[data-role=ghost]{border-left-color:#5fb2e6}.glove-card[data-role=revival]{border-left-color:var(--warn)}.glove-card[data-role=neutral]{opacity:.55}.glove-card-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;flex-wrap:wrap}.glove-name{font-weight:700;font-size:13px}.glove-badge{font-size:10px;padding:1px 6px;border-radius:8px;background:#2a3240;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}.glove-badge.role-tagger{background:#b266ff2e;color:#d6b3ff}.glove-badge.role-player{background:#34d3992e;color:#86efac}.glove-badge.role-ghost{background:#5fb2e62e;color:#93c5fd}.glove-badge.role-revival{background:#fbbf242e;color:#fcd34d}.glove-stats{display:flex;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.glove-stats .hp{color:#fca5a5}.glove-stats .tk{color:#d6b3ff}.glove-stats .bt{color:#fcd34d}.glove-stats .lv{color:#93c5fd}.glove-loc{font-size:11px;color:var(--muted);margin-top:2px}.dp-device-card{cursor:context-menu}.dp-device-card-selected{outline:1px solid var(--accent)}.dc-state{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}.dc-state-dot{width:7px;height:7px;border-radius:50%;background:#556;flex-shrink:0}.dc-state-dot.state-ready{background:#c46060}.dc-state-dot.state-activate{background:var(--good)}.dc-state-dot.state-kill{background:var(--bad)}.dc-state-dot.state-repaired{background:var(--good)}.dc-state-dot.state-escape{background:var(--accent)}.dc-state-dot.state-blink{background:#b266ff}.dc-game-state{color:#4b5563}.gp-group-section{margin-bottom:14px}.gp-group-section h3{margin:0 0 6px;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}.gp-cards-list{display:flex;flex-direction:column;gap:5px}.gp-player-card{border:1px solid var(--panel-border);border-left:3px solid #556;border-radius:8px;padding:8px 10px;background:#11151a;cursor:context-menu;transition:background 80ms}.gp-player-card:hover{background:#14191f}.gp-player-card-selected{outline:1px solid var(--accent)}.gp-neutral-dim{opacity:.5}.gp-player-card.role-player{border-left-color:var(--good)}.gp-player-card.role-tagger{border-left-color:#b266ff;background:#b266ff0d}.gp-player-card.role-ghost{border-left-color:#5fb2e6}.gp-player-card.role-revival{border-left-color:var(--warn)}.gp-card-header{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:5px}.gp-card-name{font-weight:700;font-size:13px;color:var(--text)}.gp-role-badge{font-size:10px;padding:1px 6px;border-radius:8px;background:#2a3240;color:var(--muted);text-transform:uppercase;letter-spacing:.3px}.gp-role-badge.role-player{background:#34d3992e;color:#86efac}.gp-role-badge.role-tagger{background:#b266ff2e;color:#d6b3ff}.gp-role-badge.role-ghost{background:#5fb2e62e;color:#93c5fd}.gp-role-badge.role-revival{background:#fbbf242e;color:#fcd34d}.gp-lv-badge{font-size:10px;padding:1px 6px;border-radius:8px;background:#1f2630;color:var(--muted)}.gp-player-badge{font-size:10px;padding:1px 6px;border-radius:8px;background:#232c3b;color:var(--accent)}.gp-loc-badge{font-size:10px;color:var(--muted);margin-left:auto}.gp-card-body{display:flex;flex-direction:column;gap:5px}.gp-stat-row{display:flex;gap:10px;align-items:center}.gp-stat-label{display:flex;align-items:center}.gp-icons{display:flex;gap:2px}.gp-icon{font-size:13px;line-height:1}.gp-icon.filled.hp{color:#fca5a5}.gp-icon.empty.hp,.gp-icon.empty{color:#2a3040}.gp-icon.filled.bt{color:#fcd34d}.gp-exp-row{display:flex;align-items:center;gap:6px}.gp-exp-bar{flex:1;height:5px;background:#1a1e28;border-radius:3px;overflow:hidden}.gp-exp-fill{height:100%;background:var(--warn);border-radius:3px;transition:width .2s ease}.gp-exp-text{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.gp-ctx-role{font-size:10px;padding:1px 6px;border-radius:8px;background:#2a3240;color:var(--muted)}.gp-ctx-role.role-player{background:#34d3992e;color:#86efac}.gp-ctx-role.role-tagger{background:#b266ff2e;color:#d6b3ff}.gp-ctx-role.role-ghost{background:#5fb2e62e;color:#93c5fd}.gp-ctx-role.role-revival{background:#fbbf242e;color:#fcd34d}.gp-ctx-player{padding:4px 12px;color:var(--accent);font-size:12px;border-bottom:1px solid #252c38}.gp-ctx-stats{padding:6px 0}.gp-ctx-row{display:flex;justify-content:space-between;gap:12px;padding:3px 12px}.gp-ctx-key{color:var(--muted);font-size:11px;white-space:nowrap}.gp-ctx-val{color:var(--text);font-variant-numeric:tabular-nums;font-size:12px}.gp-role-chip{display:inline-block;padding:1px 6px;border-radius:8px;font-size:10px;background:#2a3240;color:var(--muted)}.gp-role-chip.role-player{background:#34d3992e;color:#86efac}.gp-role-chip.role-tagger{background:#b266ff2e;color:#d6b3ff}.gp-role-chip.role-ghost{background:#5fb2e62e;color:#93c5fd}.gp-role-chip.role-revival{background:#fbbf242e;color:#fcd34d}.timeline-panel .timeline-item{cursor:pointer;border-left:2px solid transparent;padding-left:8px}.timeline-panel .timeline-item:hover{background:#60a5fa0f}.timeline-panel .timeline-item.selected{background:#60a5fa24;border-left-color:var(--accent)}.timeline-item .t-caret{display:inline-block;color:var(--muted);font-size:11px;transition:transform .12s ease}.timeline-item .t-caret.open{transform:rotate(90deg)}.timeline-item.expanded{background:#60a5fa14}.event-detail-card{margin-top:8px;padding:10px 12px;background:#ffffff05;border:1px solid #1f2530;border-radius:6px;cursor:default;font-size:12px;line-height:1.5}.event-detail-grid{display:grid;grid-template-columns:72px 1fr;gap:4px 12px;margin:0}.event-detail-grid dt{color:var(--muted);font-weight:500}.event-detail-grid dd{margin:0;color:var(--text);word-break:break-word}.event-detail-grid .muted{color:var(--muted)}.level-chip{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:500;border:1px solid transparent}.level-chip.level-high{background:#60a5fa24;color:var(--accent);border-color:#60a5fa4d}.level-chip.level-med{background:#94a3b824;color:#cbd5e1;border-color:#94a3b84d}.level-chip.level-low{background:#94a3b814;color:var(--muted);border-color:#94a3b833}.event-detail-raw{margin-top:10px;padding-top:8px;border-top:1px dashed #1f2530}.event-detail-raw-head{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}.event-detail-fields{display:grid;grid-template-columns:1fr;gap:2px 0;margin:0}.event-detail-field{display:grid;grid-template-columns:120px 1fr;gap:12px;padding:2px 0}.event-detail-field dt{color:var(--muted);font-family:SF Mono,Consolas,Menlo,monospace;font-size:11px}.event-detail-field dd{margin:0;color:var(--text);font-family:SF Mono,Consolas,Menlo,monospace;font-size:11px;word-break:break-all;white-space:pre-wrap}.event-detail-empty{color:var(--muted);font-size:12px;font-style:italic}.compare-grid{display:grid;grid-template-columns:110px minmax(0,1fr) minmax(0,1fr);gap:8px 12px;align-items:center}.compare-head{display:contents;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}.compare-head-win,.compare-head-lose{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;padding:0 6px}.compare-head-win{color:var(--good)}.compare-head-lose{color:var(--bad)}.compare-row{display:contents}.compare-label{font-size:13px;color:var(--text)}.compare-bar{position:relative;background:#0f1217;border:1px solid var(--panel-border);border-radius:6px;padding:6px 10px;height:30px;display:flex;align-items:center;overflow:hidden}.compare-bar-fill{position:absolute;left:0;top:0;bottom:0;background:#60a5fa2e}.compare-bar-win .compare-bar-fill{background:#34d3992e}.compare-bar-lose .compare-bar-fill{background:#f871712e}.compare-bar.compare-winner.compare-bar-win{border-color:#34d3998c}.compare-bar.compare-winner.compare-bar-win .compare-bar-fill{background:#34d39952}.compare-bar.compare-winner.compare-bar-lose{border-color:#f871718c}.compare-bar.compare-winner.compare-bar-lose .compare-bar-fill{background:#f8717152}.compare-value{position:relative;z-index:1;font-variant-numeric:tabular-nums;font-size:13px;color:var(--text)}.heatmap{display:grid;grid-template-columns:32px repeat(24,minmax(0,1fr));gap:2px}.heatmap-col-head{font-size:10px;color:var(--muted);text-align:center;font-variant-numeric:tabular-nums;padding-bottom:4px}.heatmap-row-head{font-size:11px;color:var(--muted);display:flex;align-items:center;justify-content:center;padding-right:4px}.heatmap-cell{aspect-ratio:1;min-height:14px;border-radius:2px;background:#ffffff05;cursor:default}.heatmap-legend{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:11px;color:var(--muted)}.heatmap-legend-bar{display:inline-block;flex:0 0 160px;height:8px;border-radius:4px;background:linear-gradient(to right,#60a5fa1a,#60a5faf2)}.top-events{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.top-event-row{display:grid;grid-template-columns:60px minmax(120px,180px) minmax(0,1fr) 70px 100px;gap:10px;align-items:center;padding:6px 4px;border-bottom:1px solid #1a1e25;font-size:13px}.top-event-row:last-child{border-bottom:none}.top-event-label{color:var(--text)}.top-event-bar{position:relative;height:10px;background:#0f1217;border-radius:5px;overflow:hidden}.top-event-bar-fill{position:absolute;inset:0 auto 0 0;background:var(--accent);border-radius:5px}.top-event-count{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}.top-event-pergame{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted);font-size:12px}@media (max-width: 700px){.top-event-row{grid-template-columns:50px 1fr 60px}.top-event-bar,.top-event-pergame{display:none}}.insight-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}.insight-card{background:#0f1217;border:1px solid var(--panel-border);border-left:3px solid var(--accent);border-radius:6px;padding:12px 14px;font-size:13px;color:var(--text);line-height:1.5}.insight-card.insight-anomaly_alert{border-left-color:var(--warn)}.insight-card.insight-best_player_count,.insight-card.insight-best_glove_group{border-left-color:var(--good)}.insight-card.insight-peak_hour{border-left-color:#a78bfa}.dst-table{display:flex;flex-direction:column;gap:6px}.dst-type-row{display:flex;align-items:flex-start;gap:8px;min-height:42px}.dst-type-label{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:44px;padding:4px;border-left:3px solid transparent;flex-shrink:0}.dst-type-icon{font-size:16px;line-height:1}.dst-type-name{font-size:9px;color:var(--muted);text-align:center;white-space:nowrap}.dst-cards-strip{display:flex;flex-wrap:wrap;gap:4px;flex:1;align-content:flex-start}.dst-card{border-radius:6px;padding:5px 7px;min-width:70px;max-width:120px;cursor:context-menu;transition:opacity 80ms;border:1px solid rgba(255,255,255,.08)}.dst-card:hover{opacity:.85}.dst-selected{outline:1px solid var(--accent)}.dst-card-line1{display:flex;align-items:center;gap:4px;margin-bottom:2px}.dst-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.dst-card-name{font-size:11px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dst-badge-sm{display:inline-block;font-size:9px;padding:0 4px;border-radius:4px;line-height:1.5;margin-bottom:1px}.dst-badge-state{display:block;font-size:10px;font-weight:600;line-height:1.2}.dst-extra-row{font-size:9px;margin-top:2px}.map-svg-wrap{width:100%;overflow-x:auto}.map-svg{width:100%;height:auto;display:block;border-radius:6px}.map-no-data{color:var(--muted);font-size:13px;text-align:center;padding:40px 0}.ctx-side-wrap{display:flex;align-items:flex-start;gap:6px}.ctx-close-btn{margin-left:auto;background:transparent;border:none;color:var(--muted);font-size:12px;cursor:pointer;padding:0 2px;line-height:1}.ctx-close-btn:hover{color:var(--text)}.ctx-log-pane{background:#1a1f28;border:1px solid #2e3748;border-radius:8px;box-shadow:0 8px 24px #0009;width:220px;max-height:360px;display:flex;flex-direction:column;overflow:hidden;font-size:12px}.ctx-log-pane-head{display:flex;align-items:center;gap:6px;padding:7px 12px 6px;border-bottom:1px solid #252c38;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;flex-shrink:0}.ctx-log-count{display:inline-block;background:#2a3240;color:var(--muted);font-size:10px;padding:0 5px;border-radius:8px;min-width:16px;text-align:center;font-weight:400;text-transform:none;letter-spacing:0}.ctx-log-list{overflow-y:auto;flex:1;padding:4px 0}.ctx-log-empty{color:var(--muted);font-size:11px;text-align:center;padding:20px 0}.ctx-log-row{display:grid;grid-template-columns:58px 16px 1fr;gap:4px;align-items:start;padding:4px 10px;border-bottom:1px solid #1a1e25;font-size:11px}.ctx-log-row:last-child{border-bottom:none}.ctx-log-time{color:#4b5563;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:10px;padding-top:1px}.ctx-log-icon{text-align:center;font-size:12px;line-height:1.3}.ctx-log-body{display:flex;flex-direction:column;gap:1px}.ctx-log-label{color:var(--text);font-weight:500;line-height:1.3}.ctx-log-summary{color:var(--muted);font-size:10px;line-height:1.3}.device-stats-summary{display:flex;flex-wrap:wrap;gap:8px;align-items:center;color:var(--muted);font-size:13px;margin-bottom:12px}.device-stats-summary span{white-space:nowrap}.device-type-filters{display:flex;flex-wrap:wrap;gap:6px}.device-type-filters .preset-btn.active{background:var(--accent);color:#0b0d10;border-color:var(--accent)}.device-stats-table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.device-stats-table th.sortable:hover{color:var(--text)}.device-stats-table th.num,.device-stats-table td.num{text-align:right;font-variant-numeric:tabular-nums}.device-stats-table td.muted{color:var(--muted)}.device-stats-table tbody tr{cursor:pointer}.device-dist-grid{margin-top:16px}.device-dist-sub{display:block;font-size:12px;color:var(--muted);font-weight:400;margin-top:4px;letter-spacing:0;text-transform:none}.device-dist-h3{margin:0 0 10px;font-size:11px;color:var(--muted);font-weight:500;text-transform:uppercase;letter-spacing:.4px}.bar-list{display:flex;flex-direction:column;gap:4px}.bar-row{display:grid;grid-template-columns:56px 1fr 78px;align-items:center;gap:8px;font-size:12px}.bar-label{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.bar-track{background:#1a1f28;border-radius:4px;height:14px;overflow:hidden}.bar-fill{height:100%;border-radius:4px;transition:width .2s ease}.bar-value{text-align:right;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}.bar-subvalue{color:var(--muted);font-size:11px}.phase-line-wrap{position:relative;width:100%}.phase-line{width:100%;height:auto;display:block}.phase-line-tooltip{position:absolute;top:4px;right:8px;background:#141a24eb;border:1px solid #2a3140;border-radius:4px;padding:3px 8px;font-size:11px;font-variant-numeric:tabular-nums;pointer-events:none;color:var(--text)}.phase-line-tooltip .muted{color:var(--muted)}
