:root{--bg: #F4F6F9;--surface: #FFFFFF;--sidebar-bg: #2a2927;--sidebar-border: #3a3835;--navy: #2a2927;--navy-light: #3a3835;--text-primary: #2a2927;--text-secondary: #5A6578;--text-tertiary: #9AA3B2;--accent-up: #059669;--accent-down: #DC2626;--accent-neutral: #5A6578;--border: #E8EBF0;--border-hover: #D1D8E3;--row-hover: #F8FAFC;--row-active: #EFF6FF;--row-active-border: #BFDBFE;--sparkline: #2563EB;--font-ui: "Outfit", system-ui, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--shadow-sm: 0 1px 3px rgba(13, 27, 46, .06), 0 1px 2px rgba(13, 27, 46, .04);--shadow-md: 0 4px 12px rgba(13, 27, 46, .08), 0 2px 4px rgba(13, 27, 46, .04);--shadow-lg: 0 16px 48px rgba(13, 27, 46, .12), 0 4px 12px rgba(13, 27, 46, .06)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;overflow:hidden}body{font-family:var(--font-ui);background:var(--bg);color:var(--text-primary);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}.app-shell{display:flex;height:100vh;overflow:hidden}.sidebar{width:168px;flex-shrink:0;background:var(--sidebar-bg);border-right:1px solid var(--sidebar-border);display:flex;flex-direction:column;padding:24px 16px;gap:8px}.signals-label{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#ffffff59;margin-bottom:8px}.signals-label--signals{margin-top:20px}.signal-btn{width:100%;text-align:left;padding:10px 12px;border-radius:var(--radius-sm);border:1.5px solid rgba(255,255,255,.1);background:transparent;color:#fff9;font-family:var(--font-ui);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease;display:flex;align-items:center;gap:8px;position:relative}.signal-btn:hover:not(.active){border-color:#fff3;background:#ffffff12;color:#ffffffe6}.signal-btn.active{background:#ffffff1f;border-color:#ffffff4d;color:#fff}.signal-btn-dot{width:7px;height:7px;border-radius:50%;border:1.5px solid currentColor;flex-shrink:0}.signal-btn.active .signal-btn-dot{background:#fff;border-color:#fff}.sidebar-caption{margin-top:12px;font-size:11px;color:#ffffff4d;line-height:1.5}.main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.top-bar{display:flex;align-items:center;gap:12px;padding:14px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0}.time-filter{display:flex;gap:4px}.time-btn{padding:6px 14px;border-radius:20px;border:1.5px solid var(--border);background:transparent;font-family:var(--font-ui);font-size:13px;font-weight:600;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.time-btn:hover:not(.active){border-color:var(--border-hover);background:var(--row-hover);color:var(--text-primary)}.time-btn.active{background:var(--navy);border-color:var(--navy);color:#fff}.search-wrap{flex:1;position:relative;max-width:480px}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-tertiary);pointer-events:none;display:flex;align-items:center}.search-input{width:100%;padding:8px 12px 8px 36px;border-radius:var(--radius-md);border:1.5px solid var(--border);background:var(--bg);font-family:var(--font-ui);font-size:13.5px;color:var(--text-primary);outline:none;transition:border-color .15s ease,box-shadow .15s ease}.search-input::placeholder{color:var(--text-tertiary)}.search-input:focus{border-color:#93c5fd;background:var(--surface);box-shadow:0 0 0 3px #2563eb14}.top-bar-meta{display:flex;align-items:center;gap:10px;margin-left:auto;flex-shrink:0}.updated-label{font-size:12px;color:var(--text-tertiary);white-space:nowrap}.refresh-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--radius-sm);border:1.5px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.refresh-btn:hover:not(:disabled){border-color:var(--border-hover);background:var(--row-hover);color:var(--text-primary)}.refresh-btn:disabled{opacity:.5;cursor:not-allowed}.content{flex:1;display:flex;overflow:hidden}.list-panel{flex:0 1 40%;display:flex;flex-direction:column;overflow:hidden;min-width:0}.detail-panel{width:60%;min-width:560px;flex-shrink:0;border-left:1px solid var(--border);overflow:hidden;display:flex;flex-direction:column}.list-header{display:flex;align-items:center;justify-content:space-between;padding:18px 24px 12px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}.list-title{font-size:16px;font-weight:600;color:var(--text-primary);display:flex;align-items:center;gap:8px}.list-icon{font-size:18px}.list-sub{font-size:12px;color:var(--text-tertiary);font-weight:500}.ranked-list{flex:1;overflow-y:auto;background:var(--surface)}.ranked-list::-webkit-scrollbar{width:6px}.ranked-list::-webkit-scrollbar-track{background:transparent}.ranked-list::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.show-row{display:flex;align-items:center;padding:14px 24px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .1s ease;gap:12px}.show-row:hover{background:var(--row-hover)}.show-row.active{background:var(--row-active);border-left:3px solid var(--sparkline);padding-left:21px}.show-rank{font-family:var(--font-mono);font-size:13px;font-weight:600;color:var(--text-tertiary);width:26px;flex-shrink:0;text-align:right}.show-info{flex:1;min-width:0}.show-name{font-size:14px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.show-sub{font-size:12px;color:var(--text-secondary);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.show-sparkline{flex-shrink:0;display:flex;align-items:center}.show-rate{font-family:var(--font-mono);font-size:13px;font-weight:600;text-align:right;flex-shrink:0;min-width:100px}.rate-up{color:var(--accent-up)}.rate-down{color:var(--accent-down)}.rate-neutral{color:var(--text-secondary)}.event-detail{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--surface)}.detail-header{padding:18px 20px 16px;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0}.detail-header-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.detail-event-name{font-size:15px;font-weight:700;color:var(--text-primary);line-height:1.3}.detail-performer{font-size:12.5px;color:var(--text-secondary);margin-top:3px}.detail-venue{font-size:12px;color:var(--text-tertiary);margin-top:2px}.close-btn{flex-shrink:0;width:28px;height:28px;border-radius:var(--radius-sm);border:1.5px solid var(--border);background:transparent;color:var(--text-tertiary);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease;line-height:1}.close-btn:hover{border-color:var(--border-hover);color:var(--text-primary);background:var(--row-hover)}.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,170px));gap:10px;justify-content:start}.kpi-item{display:flex;flex-direction:column;gap:3px;min-width:0;padding:12px 14px 11px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm)}.kpi-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#64748b}.kpi-value{font-family:var(--font-mono);font-size:20px;line-height:1.15;font-weight:700;color:var(--text-primary)}.kpi-value.rate-up{color:var(--accent-up)}.kpi-value.rate-down{color:var(--accent-down)}.detail-period-bar{display:flex;gap:4px;padding:12px 20px;border-bottom:1px solid var(--border);flex-shrink:0}.period-btn{padding:4px 12px;border-radius:16px;border:1.5px solid var(--border);background:transparent;font-family:var(--font-ui);font-size:12px;font-weight:600;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.period-btn:hover:not(.active){border-color:var(--border-hover);color:var(--text-primary)}.period-btn.active{background:var(--navy);border-color:var(--navy);color:#fff}.detail-charts{flex:1;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:20px}.detail-charts::-webkit-scrollbar{width:4px}.detail-charts::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.chart-block{display:flex;flex-direction:column;gap:8px}.chart-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text-tertiary)}.loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;color:var(--text-tertiary);font-size:14px}.spinner{width:24px;height:24px;border:2px solid var(--border);border-top-color:var(--navy);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{padding:48px 24px;text-align:center;color:var(--text-tertiary);font-size:14px}.error-banner{padding:10px 24px;background:#fef2f2;border-bottom:1px solid #FECACA;color:var(--accent-down);font-size:13px;flex-shrink:0}.detail-loading{display:flex;align-items:center;justify-content:center;flex:1;gap:10px;color:var(--text-tertiary);font-size:13px}.recharts-cartesian-axis-tick-value{font-family:var(--font-mono);font-size:10px;fill:var(--text-tertiary)}.recharts-tooltip-wrapper{outline:none}.chart-tooltip{background:var(--navy);border-radius:var(--radius-sm);padding:8px 12px;box-shadow:var(--shadow-md)}.chart-tooltip-label{font-family:var(--font-mono);font-size:10px;color:#fff9;margin-bottom:4px}.chart-tooltip-value{font-family:var(--font-mono);font-size:13px;font-weight:600;color:#fff}.chat-fab{position:fixed;bottom:28px;right:28px;z-index:1000;width:52px;height:52px;border-radius:50%;background:var(--navy);border:none;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #0d1b2e52,0 1px 4px #0d1b2e29;transition:transform .18s ease,box-shadow .18s ease,background .18s ease}.chat-fab:hover{background:var(--navy-light);transform:translateY(-2px);box-shadow:0 8px 24px #0d1b2e5c,0 2px 6px #0d1b2e2e}.chat-fab:active{transform:translateY(0)}.chat-fab--open{background:#334155}.chat-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1001;background:#0d1b2e2e;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);animation:fadeIn .22s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.chat-panel{position:fixed;top:0;right:0;height:100vh;width:620px;z-index:1002;display:flex;flex-direction:column;background:var(--surface);box-shadow:-4px 0 32px #0d1b2e24,-1px 0 0 var(--border);transform:translate(100%);transition:transform .24s cubic-bezier(.4,0,.2,1);will-change:transform}.chat-panel--open{transform:translate(0)}.chat-header{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;background:var(--navy);color:#fff;flex-shrink:0;border-bottom:1px solid rgba(255,255,255,.08)}.chat-header-left{display:flex;align-items:center;gap:12px}.chat-header-icon{width:34px;height:34px;border-radius:10px;background:#ffffff1f;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#ffffffe6}.chat-header-title{font-size:14px;font-weight:700;color:#fff;letter-spacing:.01em}.chat-header-sub{font-size:11px;color:#ffffff73;margin-top:1px}.chat-header-actions{display:flex;align-items:center;gap:6px}.chat-close-btn,.chat-clear-btn{width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);border:none;background:#ffffff14;color:#fff9;cursor:pointer;transition:background .15s ease,color .15s ease}.chat-close-btn:hover,.chat-clear-btn:hover{background:#ffffff29;color:#fff}.chat-messages{flex:1;overflow-y:auto;padding:16px 14px;display:flex;flex-direction:column;gap:12px;background:var(--bg)}.chat-messages::-webkit-scrollbar{width:4px}.chat-messages::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.chat-empty{display:flex;flex-direction:column;align-items:center;text-align:center;padding:40px 24px 20px;gap:10px;color:var(--text-secondary)}.chat-empty-icon{color:var(--navy);margin-bottom:4px}.chat-empty-title{font-size:15px;font-weight:700;color:var(--text-primary)}.chat-empty-body{font-size:13px;color:var(--text-secondary);line-height:1.6;max-width:280px}.chat-suggestions{display:flex;flex-direction:column;gap:8px;width:100%;margin-top:12px}.chat-suggestion{width:100%;text-align:left;padding:11px 14px;border-radius:var(--radius-md);border:1.5px solid var(--border);background:var(--surface);font-family:var(--font-ui);font-size:13px;color:var(--text-primary);cursor:pointer;transition:border-color .15s ease,background .15s ease,transform .12s ease;line-height:1.4}.chat-suggestion:hover:not(:disabled){border-color:var(--navy);background:#eff6ff;transform:translateY(-1px)}.chat-suggestion:disabled{opacity:.45;cursor:not-allowed}.chat-message{display:flex;gap:8px;align-items:flex-end}.chat-message--user{flex-direction:row-reverse}.chat-avatar{width:28px;height:28px;border-radius:8px;background:var(--navy);color:#ffffffd9;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-bottom:2px}.chat-bubble{max-width:82%;padding:10px 13px;border-radius:14px;font-size:13.5px;line-height:1.6;word-break:break-word}.chat-bubble--assistant{background:var(--surface);color:var(--text-primary);border:1px solid var(--border);border-bottom-left-radius:4px;box-shadow:var(--shadow-sm)}.chat-bubble--user{background:var(--navy);color:#fff;border-bottom-right-radius:4px}.chat-bubble-text{white-space:pre-wrap}.chat-typing{display:flex;align-items:center;gap:4px;padding:2px 0}.chat-typing-dot{width:6px;height:6px;border-radius:50%;background:var(--text-tertiary);animation:typingBounce 1.2s ease infinite}.chat-typing-dot:nth-child(2){animation-delay:.2s}.chat-typing-dot:nth-child(3){animation-delay:.4s}@keyframes typingBounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-5px);opacity:1}}.chat-input-wrap{display:flex;align-items:flex-end;gap:8px;padding:12px 14px;background:var(--surface);border-top:1px solid var(--border);flex-shrink:0}.chat-input{flex:1;resize:none;padding:9px 12px;border-radius:var(--radius-md);border:1.5px solid var(--border);background:var(--bg);font-family:var(--font-ui);font-size:13.5px;color:var(--text-primary);outline:none;transition:border-color .15s ease,box-shadow .15s ease;line-height:1.5;max-height:120px;overflow-y:auto}.chat-input::placeholder{color:var(--text-tertiary)}.chat-input:focus{border-color:#93c5fd;background:var(--surface);box-shadow:0 0 0 3px #2563eb14}.chat-input:disabled{opacity:.6;cursor:not-allowed}.chat-send-btn{width:38px;height:38px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);border:none;background:var(--navy);color:#fff;cursor:pointer;transition:background .15s ease,transform .12s ease}.chat-send-btn:hover:not(:disabled){background:var(--navy-light);transform:translateY(-1px)}.chat-send-btn:disabled{opacity:.35;cursor:not-allowed;transform:none}.chat-code-block{background:#2a2927;color:#93c5fd;border-radius:var(--radius-sm);padding:10px 12px;margin:6px 0;font-family:var(--font-mono);font-size:11.5px;line-height:1.6;overflow-x:auto;white-space:pre;border:1px solid rgba(147,197,253,.15)}.chat-code-block code{font-family:inherit;font-size:inherit;background:none;padding:0}.all-events-list-panel{flex:1 1 0;min-width:0}.filter-panel{flex-shrink:0;background:var(--surface);border-bottom:1px solid var(--border)}.filter-panel-toggle{display:flex;align-items:center;gap:7px;width:100%;padding:10px 18px;background:transparent;border:none;cursor:pointer;font-family:var(--font-ui);font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-secondary);text-align:left;transition:background .12s ease}.filter-panel-toggle:hover{background:var(--row-hover)}.filter-icon{color:var(--text-tertiary);flex-shrink:0}.filter-panel-title{flex:1}.filter-chevron{transition:transform .18s ease;color:var(--text-tertiary);flex-shrink:0}.filter-chevron.open{transform:rotate(180deg)}.filter-panel-body{padding:10px 18px 14px;display:flex;flex-direction:column;gap:7px;border-top:1px solid var(--border)}.filter-section-label{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-tertiary);margin-top:2px}.filter-section-label--gap{margin-top:10px}.filter-row{display:flex;align-items:center;gap:6px}.filter-select{height:30px;padding:0 8px;border-radius:var(--radius-sm);border:1.5px solid var(--border);background:var(--bg);font-family:var(--font-ui);font-size:12.5px;color:var(--text-primary);cursor:pointer;outline:none;min-width:120px;transition:border-color .12s ease}.filter-select:focus{border-color:#93c5fd}.filter-op{font-size:13px;color:var(--text-tertiary);flex-shrink:0;font-family:var(--font-mono)}.filter-input{height:30px;padding:0 9px;border-radius:var(--radius-sm);border:1.5px solid var(--border);background:var(--bg);font-family:var(--font-ui);font-size:12.5px;color:var(--text-primary);outline:none;transition:border-color .12s ease,box-shadow .12s ease}.filter-input:focus{border-color:#93c5fd;box-shadow:0 0 0 3px #2563eb14}.filter-input--num{width:80px}.filter-input--text{flex:1;min-width:0}.filter-remove{width:24px;height:24px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;border:1.5px solid #FECACA;background:transparent;color:var(--accent-down);font-size:15px;line-height:1;cursor:pointer;transition:background .12s ease}.filter-remove:hover{background:#fef2f2}.filter-add-btn{align-self:flex-start;padding:5px 12px;border-radius:var(--radius-sm);border:1.5px dashed var(--border);background:transparent;font-family:var(--font-ui);font-size:12px;font-weight:600;color:var(--text-secondary);cursor:pointer;transition:border-color .12s ease,color .12s ease,background .12s ease}.filter-add-btn:hover{border-color:var(--navy);color:var(--navy);background:var(--row-hover)}.events-table-wrap{flex:1;overflow:auto;background:var(--surface)}.events-table-wrap::-webkit-scrollbar{width:6px;height:6px}.events-table-wrap::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.events-table{width:100%;border-collapse:collapse;font-size:12.5px;white-space:nowrap}.events-table thead{position:sticky;top:0;z-index:2}.events-table th{padding:10px 14px;text-align:left;font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-tertiary);background:var(--bg);border-bottom:1.5px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:color .12s ease}.events-table th:hover,.events-table th.active{color:var(--text-primary)}.events-table th.num,.events-table td.num{text-align:right}.sort-indicator{font-size:10px;margin-left:3px;opacity:.7}.events-table tbody tr{cursor:pointer;border-bottom:1px solid var(--border);transition:background .1s ease}.events-table tbody tr:hover{background:var(--row-hover)}.events-table tbody tr.active{background:var(--row-active);box-shadow:inset 3px 0 0 var(--sparkline)}.events-table td{padding:10px 14px;color:var(--text-primary);max-width:220px;overflow:hidden;text-overflow:ellipsis}.events-table td:first-child{font-weight:600}.chat-chart{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 4px 6px;margin:6px 0 8px;width:100%;min-width:0;overflow:hidden}.signout-btn{margin-top:auto;background:none;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.75rem;padding:6px 10px;cursor:pointer;width:100%;text-align:center;transition:color .15s,border-color .15s}.signout-btn:hover{color:var(--text-primary);border-color:var(--text-secondary)}.login-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg)}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:48px 40px;text-align:center;max-width:380px;width:100%}.login-card h1{font-size:1.4rem;font-weight:700;color:var(--text-primary);margin:0 0 10px}.login-card p{color:var(--text-secondary);font-size:.875rem;margin:0 0 28px}.login-btn{display:inline-flex;align-items:center;gap:8px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius-sm);padding:10px 24px;font-size:.9rem;font-weight:600;cursor:pointer;transition:opacity .15s}.login-btn:hover{opacity:.88}
