: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}.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-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px}.summary-chip{background:#0f1217;border:1px solid var(--panel-border);border-radius:6px;padding:10px 12px;text-align:center}.summary-chip .s-value{font-size:22px;font-weight:700}.summary-chip .s-label{color:var(--muted);font-size:11px;margin-top:2px}.summary-chip.tone-good{border-color:#34d39966}.summary-chip.tone-good .s-value{color:var(--good)}.summary-chip.tone-warn{border-color:#fbbf2466}.summary-chip.tone-warn .s-value{color:var(--warn)}.summary-chip.tone-danger{border-color:#f8717166}.summary-chip.tone-danger .s-value{color:var(--bad)}.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}.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{opacity:.55}.timeline-item.level-low .t-label{color:var(--muted)}.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}.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%}.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)}.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}.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}
