*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#1a1a2e;--surface:#16213e;--border:#0f3460;--text:#e0e0e0;--text-dim:#8a8a9a;--accent:#e94560;--green:#4caf50;--cyan:#00bcd4;--purple:#9c27b0;--orange:#ff9800;--yellow:#ffeb3b}body{background:var(--bg);color:var(--text);height:100vh;font-family:system-ui,-apple-system,sans-serif;overflow:hidden}#app{height:100vh;display:flex}.auth-screen{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;width:360px;padding:2rem}.auth-card h1{text-align:center;margin-bottom:1.5rem;font-size:1.5rem}.auth-card input{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);border-radius:6px;margin-bottom:.8rem;padding:.6rem .8rem;font-size:.95rem}.auth-card button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;width:100%;margin-top:.5rem;padding:.7rem;font-size:1rem}.auth-card button:hover{opacity:.9}.auth-card button:disabled{opacity:.5;cursor:not-allowed}.auth-card .secondary-btn{border:1px solid var(--border);color:var(--text-dim);background:0 0}.auth-card .error{color:var(--accent);margin-bottom:.5rem;font-size:.85rem}.auth-card .note{color:var(--text-dim);text-align:center;margin-top:1rem;font-size:.85rem}.sidebar{background:var(--surface);flex-direction:column;flex:none;width:260px;min-width:180px;max-width:640px;display:flex;overflow-y:auto}.splitter{background:var(--border);cursor:col-resize;flex:0 0 5px;transition:background .15s}.splitter:hover,.splitter.dragging{background:var(--accent)}.sidebar-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:1rem;display:flex}.sidebar-header h2{font-size:1rem;font-weight:600}.sidebar-header button{color:var(--text-dim);cursor:pointer;background:0 0;border:none;font-size:.85rem}.filter-bar{border-bottom:1px solid var(--border);max-height:140px;overflow-y:auto}.filter-bar:empty{display:none}.filter-section{flex-wrap:wrap;align-items:center;gap:.3rem;padding:.4rem .8rem;display:flex}.filter-key{text-transform:uppercase;letter-spacing:.03em;margin-right:.2rem;font-size:.7rem;font-weight:600}.filter-chip{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:12px;padding:.15rem .5rem;font-size:.7rem}.filter-chip:hover{opacity:.8}.filter-chip.active{font-weight:600}.video-list{flex:1;list-style:none;overflow-y:auto}.video-list li{cursor:pointer;border-bottom:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;padding:.7rem 1rem;font-size:.85rem;overflow:hidden}.video-list li:hover{background:var(--border)}.video-list li.active{background:var(--border);color:var(--accent)}.video-list .meta{color:var(--text-dim);margin-top:.2rem;font-size:.75rem}.video-tags{flex-wrap:wrap;gap:.25rem;margin-top:.3rem;display:flex}.tag-pill{border:1px solid var(--border);white-space:nowrap;border-radius:10px;align-items:center;gap:.2rem;padding:.05rem .4rem;font-size:.65rem;display:inline-flex}.tag-remove{color:inherit;cursor:pointer;opacity:.6;background:0 0;border:none;padding:0;font-size:.85rem;line-height:1}.tag-remove:hover{opacity:1}.tag-remove:disabled{opacity:.3;cursor:default}.tag-add{align-items:center;display:inline-flex}.tag-add-btn{border:1px dashed var(--text-dim);color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:10px;padding:.05rem .4rem;font-size:.65rem}.tag-add-btn:hover{color:var(--text);border-color:var(--text)}.tag-add-form{flex-wrap:wrap;align-items:center;gap:.2rem;display:inline-flex}.tag-add-form[hidden]{display:none}.tag-add-form input{background:var(--bg);border:1px solid var(--border);width:5.5rem;color:var(--text);border-radius:6px;padding:.1rem .3rem;font-size:.65rem}.tag-add-form input:focus{border-color:var(--accent);outline:none}.tag-add-save{border:1px solid var(--border);color:var(--green);cursor:pointer;background:0 0;border-radius:6px;padding:.1rem .35rem;font-size:.7rem;line-height:1}.tag-add-save:hover{border-color:var(--green)}.tag-add-save:disabled{opacity:.4;cursor:default}.tag-error{width:100%;color:var(--accent);font-size:.65rem}.user-info{border-top:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;padding:.7rem 1rem;font-size:.8rem;display:flex}.user-info button{color:var(--text-dim);cursor:pointer;background:0 0;border:none;text-decoration:underline}.library{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.library-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:.8rem 1.2rem;display:flex}.library-header h2{font-size:1.1rem;font-weight:600}.library-title{align-items:center;gap:.8rem;display:flex}.library-title select{background:var(--bg);border:1px solid var(--border);color:var(--text-dim);cursor:pointer;border-radius:4px;padding:.2rem .3rem;font-size:.75rem}.library-title select:hover{color:var(--text)}.library-actions{color:var(--text-dim);align-items:center;gap:1rem;font-size:.8rem;display:flex}.library-actions button{cursor:pointer;font-size:.8rem}.library-actions #add-videos-btn{border:1px solid var(--border);color:var(--text);background:0 0;border-radius:4px;padding:.3rem .6rem}.library-actions #add-videos-btn:hover{background:var(--border)}.library-actions #logout-btn{color:var(--text-dim);background:0 0;border:none;text-decoration:underline}.video-table{flex:1;grid-template-columns:max-content minmax(180px,3fr) max-content max-content max-content minmax(min-content,1fr) max-content;align-content:start;column-gap:1rem;display:grid;overflow:auto}.video-table:empty{display:none}.video-row{grid-template-columns:subgrid;border-bottom:1px solid var(--border);grid-column:1/-1;align-items:center;padding:.6rem 1.2rem;display:grid}.video-row:hover{background:var(--border)}.video-thumb{background:var(--border);cursor:pointer;border:none;border-radius:4px;width:88px;height:50px;padding:0;display:block;overflow:hidden}.video-thumb img{object-fit:cover;width:100%;height:100%;display:block}.video-thumb:hover{outline:2px solid var(--accent)}.video-name{color:var(--text);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;padding:0;font-size:.9rem;font-weight:500;overflow:hidden}.video-name:hover{color:var(--accent)}.video-meta{color:var(--text-dim);white-space:nowrap;font-size:.75rem}.video-duration{color:var(--text-dim);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:.75rem}.video-date{color:var(--text-dim);white-space:nowrap;font-size:.75rem}.video-date-value{color:inherit;font:inherit;background:0 0;border:none;padding:0}button.video-date-value{cursor:pointer}button.video-date-value:hover{color:var(--text);-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.video-date-value.unset{opacity:.55;font-style:italic}.date-edit-form{align-items:center;gap:.25rem;display:flex}.date-edit-form input{background:var(--bg);border:1px solid var(--border);color:var(--text);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;border-radius:6px;padding:.1rem .2rem;font-size:.7rem}.date-edit-form input:focus{border-color:var(--accent);outline:none}.date-edit-cancel{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:6px;padding:.1rem .35rem;font-size:.7rem;line-height:1}.date-edit-cancel:hover{border-color:var(--text-dim);color:var(--text)}.video-row .video-tags{margin-top:0}.video-open{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:4px;padding:.3rem .9rem;font-size:.8rem}.video-open:hover{background:var(--accent);border-color:var(--accent);color:#fff}.video-actions{align-items:center;gap:.4rem;display:flex}.video-rename{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:4px;padding:.3rem .6rem;font-size:.8rem}.video-rename:hover{border-color:var(--accent);color:var(--text)}.name-edit-form{flex-wrap:wrap;align-items:center;gap:.25rem;min-width:0;display:flex}.name-edit-input{background:var(--bg);border:1px solid var(--border);min-width:0;color:var(--text);border-radius:6px;flex:1;padding:.15rem .4rem;font-size:.85rem}.name-edit-input:focus{border-color:var(--accent);outline:none}.video-remove{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:4px;padding:.3rem .6rem;font-size:.8rem}.video-remove:hover{border-color:var(--accent);color:var(--accent);background:#e9456026}.video-empty{color:var(--text-dim);grid-column:1/-1;padding:2rem 1.2rem;font-size:.9rem}#app.view-editor{flex-direction:column}.editor-bar{background:var(--surface);border-bottom:1px solid var(--border);flex:none;align-items:center;gap:1rem;padding:.5rem 1rem;display:flex}.editor-back{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:4px;padding:.3rem .7rem;font-size:.85rem}.editor-back:hover{background:var(--border)}.editor-title{color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.9rem;font-weight:500;overflow:hidden}.editor-body{flex:1;min-height:0;display:flex}.main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.player-area{background:#000;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;position:relative;overflow:hidden}.player-container{width:100%;height:100%;position:relative}.player-container video{object-fit:contain;width:100%;height:100%;display:block}.player-container canvas{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.no-video{color:var(--text-dim);font-size:1.2rem}.controls{background:var(--surface);border-top:1px solid var(--border);align-items:center;gap:.8rem;padding:.5rem 1rem;font-size:.85rem;display:flex}.controls button{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:4px;padding:.3rem .6rem;font-size:.85rem}.controls button:hover{background:var(--border)}#btn-speed{font-variant-numeric:tabular-nums;min-width:3.6em}#btn-speed.active{border-color:var(--accent);color:var(--accent)}.audio-track-select,.quality-select{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:4px;padding:.3rem .4rem;font-size:.85rem}.audio-sync-status{color:var(--text-dim)}.frame-info{color:var(--text-dim);font-variant-numeric:tabular-nums;min-width:180px}.frame-input{background:var(--bg);border:1px solid var(--border);width:5.5em;color:var(--text);font-variant-numeric:tabular-nums;text-align:right;border-radius:4px;padding:.15rem .3rem;font-size:.85rem}.frame-input:focus{border-color:var(--accent);outline:none}.annotate-toolbar{background:var(--surface);border-top:1px solid var(--border);align-items:center;gap:.5rem;padding:.4rem 1rem;font-size:.85rem;display:flex}.tool-btn{border:1px solid var(--border);color:var(--text);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:.3rem .6rem;font-size:.85rem}.tool-btn:hover{background:var(--border)}.tool-btn.active{border-color:var(--accent);color:var(--accent);background:#ffffff0a}.tool-btn.ghost{color:var(--text-dim)}.tool-hint{color:var(--text-dim);margin-left:.4rem;font-style:italic}.zoom-controls{align-items:center;gap:.25rem;margin-left:auto;display:flex}.zoom-controls #zoom-reset{text-align:center;font-variant-numeric:tabular-nums;min-width:3.5rem}.icon-del{color:var(--text-dim);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0 .3rem;font-size:.85rem}.icon-del:hover{color:var(--danger,#e94560)}.contact-add{padding:.5rem}.ball-tab-hint{color:var(--text-dim);padding:.5rem;font-size:.8rem;font-style:italic}.icon-act{color:var(--text-dim);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0 .3rem;font-size:.85rem}.icon-act:hover{color:#4caf50}.icon-act+.icon-del{margin-left:0}.inplay-controls{border-bottom:1px solid var(--border);flex-direction:column;gap:.5rem;padding:.6rem;display:flex}.inplay-status{color:var(--text-dim);font-size:.85rem}.inplay-status.warn{color:var(--orange);font-weight:600}.inplay-buttons{gap:.5rem;display:flex}.inplay-skip{color:var(--text);cursor:pointer;align-items:center;gap:.4rem;font-size:.85rem;display:flex}.timeline{background:var(--surface);border-top:1px solid var(--border);cursor:pointer;height:36px;position:relative}.timeline-progress{pointer-events:none;background:#e945604d;height:100%;position:absolute;top:0;left:0}.timeline-playhead{background:var(--accent);pointer-events:none;width:2px;height:100%;position:absolute;top:0}.timeline-marker{opacity:.6;width:2px;height:100%;position:absolute;top:0}.timeline-marker.contact{background:var(--orange)}.speech-strip{background:var(--surface);border-top:1px solid var(--border);position:relative;overflow:hidden}.speech-lane{cursor:grab;height:56px;position:relative;overflow:hidden}.speech-lane+.speech-lane{border-top:1px solid var(--border)}.speech-lane:active{cursor:grabbing}.speech-wave{width:100%;height:100%;position:absolute;inset:0}.speech-lane-label{opacity:.7;pointer-events:none;font-size:11px;position:absolute;top:2px;left:4px}.speech-track{will-change:transform;position:absolute;inset:0}.speech-bubble{height:15px;color:var(--text);border:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;background:#0f3460e6;border-radius:7px;padding:0 5px;font-size:10px;line-height:15px;position:absolute;overflow:hidden}.speech-bubble.row-0{top:3px}.speech-bubble.row-1{top:20px}.speech-bubble:hover{background:var(--border);z-index:2;overflow:visible;max-width:none!important}.speech-playhead{background:var(--accent);pointer-events:none;width:2px;height:100%;position:absolute;top:0;left:50%}.speech-voices-btn{z-index:3;border:1px solid var(--border);cursor:pointer;background:#0f3460cc;border-radius:6px;padding:1px 6px;font-size:12px;position:absolute;top:2px;right:4px}.speech-voices-btn:hover{background:var(--border)}.speech-voices-panel{z-index:40;background:var(--surface);border:1px solid var(--border);border-radius:6px 6px 0 0;font-size:11px;position:fixed;overflow-y:auto;box-shadow:0 -4px 16px #0006}.voices-head{background:var(--bg);border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;padding:4px 8px;display:flex;position:sticky;top:0}.voices-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none}.voices-close:hover{color:var(--text)}.voices-row{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:3px 8px;transition:background .3s;display:flex}.voices-row.saved{background:#4caf5040}.voices-stats{color:var(--text-dim);white-space:nowrap;flex:0 0 165px}.voices-name{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:5px;flex:0 0 130px;padding:2px 6px;font-size:11px}.voices-name:focus{border-color:var(--accent);outline:none}.voices-samples{white-space:nowrap;gap:4px;display:flex;overflow-x:auto}.voices-sample{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;text-overflow:ellipsis;background:#0f346099;border-radius:8px;max-width:240px;padding:1px 6px;font-size:10px;overflow:hidden}.voices-sample:hover{color:var(--text);background:var(--border)}.annotation-panel{background:var(--surface);border-left:1px solid var(--border);flex-direction:column;flex:none;width:280px;min-width:240px;display:flex;overflow:hidden}.panel-resizer{cursor:col-resize;background:var(--border);flex:0 0 5px;transition:background .12s}.panel-resizer:hover,.panel-resizer.dragging{background:var(--accent)}body.resizing-panel,body.resizing-panel *{-webkit-user-select:none;user-select:none;cursor:col-resize!important}.annotation-panel h3{border-bottom:1px solid var(--border);padding:.7rem 1rem;font-size:.9rem}.annotation-list{flex:1;list-style:none;overflow-y:auto}.annotation-list li{border-bottom:1px solid var(--border);cursor:pointer;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.8rem;display:flex}.annotation-list li:hover{background:var(--border)}.annotation-list li.current{background:#e9456026}.annotation-list .origin-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.annotation-list .entry-time{color:var(--text-dim);font-variant-numeric:tabular-nums;min-width:60px}.annotation-list .entry-detail{color:var(--text-dim);font-size:.75rem}.annotation-list .person-frame-range{font-variant-numeric:tabular-nums;white-space:nowrap}.annotation-list .person-frame-link{cursor:pointer}.annotation-list .person-frame-link:hover{color:var(--accent);text-decoration:underline}.tab-bar{border-bottom:1px solid var(--border);display:flex}.tab-bar .tab{color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:.5rem .3rem;font-size:.72rem}.tab-bar .tab:hover{color:var(--text)}.tab-bar .tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-content{flex-direction:column;flex:1;display:flex;overflow:hidden}.person-list-container{flex:1;overflow-y:auto}.annotation-list li.selected{border-left:3px solid var(--cyan);background:#00bcd426}.annotation-list .empty-msg{color:var(--text-dim);cursor:default;font-style:italic}.annotation-list .empty-msg:hover{background:0 0}.annotation-list.virtual{position:relative}.annotation-list .virtual-row{position:absolute;left:0;right:0}.annotation-list .virtual-spacer{visibility:hidden;border:none;padding:0}.annotation-list .entry-cutout{object-fit:cover;background:#14142b;border-radius:4px;flex-shrink:0;width:44px;height:44px}.annotation-list .entry-cutout.placeholder{background:repeating-linear-gradient(45deg,#0000,#0000 4px,#ffffff0a 4px 8px),#14142b}.role-badge{color:#1a1a2e;white-space:nowrap;border-radius:8px;padding:.1rem .4rem;font-size:.65rem;font-weight:600;display:inline-block}.person-actions{border-top:1px solid var(--border);padding:.5rem}.person-actions:empty{display:none}.role-buttons{flex-wrap:wrap;gap:.25rem;margin-bottom:.4rem;display:flex}.role-btn{border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:4px;padding:.2rem .4rem;font-size:.65rem}.role-btn:hover{opacity:.8;background:#ffffff0d}.action-buttons{flex-wrap:wrap;gap:.3rem;display:flex}.action-buttons button{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:4px;padding:.25rem .5rem;font-size:.7rem}.action-buttons button:hover{background:var(--border);color:var(--text)}.action-buttons .danger-btn{border-color:var(--accent);color:var(--accent)}.action-buttons .danger-btn:hover{background:#e9456026}.person-toolbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:.5rem;padding:.35rem .5rem;display:flex}.person-toolbar .person-id-count{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:.72rem}.person-label{flex:1;align-items:baseline;gap:.15rem;min-width:60px;display:inline-flex;overflow:hidden}.person-label .person-identity{color:var(--text);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:.8rem;font-weight:600;overflow:hidden}.person-label .person-track-sub{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:.7rem}.person-conf{font-variant-numeric:tabular-nums;color:var(--text-dim);background:#ffffff14;border-radius:7px;margin-left:.35rem;padding:.02rem .28rem;font-size:.62rem;font-weight:600}.person-conf.human{color:#1a1a2e;background:var(--cyan)}.person-conf.human-unknown{color:var(--text-dim);background:#ffffff0f}.person-conf.deduced{color:#ffb74d;background:#ff98001f;border:1px dashed #ff980080}.identity-picker{align-items:center;gap:.4rem;margin-bottom:.4rem;display:flex}.identity-picker .identity-picker-label{color:var(--text-dim);font-size:.7rem}.identity-picker select{flex:1;min-width:0}.identity-picker .identity-new-input{background:var(--bg);border:1px solid var(--border);min-width:0;color:var(--text);border-radius:4px;flex:1;padding:.25rem .4rem;font-size:.75rem}.identity-picker .identity-new-input:focus{border-color:var(--cyan);outline:none}.person-toolbar-actions{align-items:center;gap:.4rem;display:flex}.person-hide-offcourt{color:var(--text-dim);white-space:nowrap;cursor:pointer;align-items:center;gap:.25rem;font-size:.72rem;display:inline-flex}.annotation-list li.offcourt{opacity:.5}.annotation-list li.offcourt.selected{opacity:.85}.offcourt-badge{flex-shrink:0;margin-left:.3rem;font-size:.7rem}.annotation-list li.offcourt-show-more{color:var(--text-dim);cursor:pointer;justify-content:center;font-size:.72rem;font-style:italic}.annotation-list li.offcourt-show-more:hover{color:var(--text)}.timeline-segment{opacity:.3;pointer-events:none;height:100%;position:absolute;top:0}.timeline-rally{background:var(--green);opacity:.25;pointer-events:none;height:100%;position:absolute;top:0}.timeline-playspan{opacity:.32;pointer-events:none;background:#00bcd4;height:100%;position:absolute;top:0}.timeline-touch{background:var(--green);opacity:.9;pointer-events:none;width:2px;height:45%;position:absolute;bottom:0}.timeline-touch.serve{background:var(--yellow);height:70%}.timeline-comment{background:var(--yellow);pointer-events:none;border-radius:50%;width:7px;height:7px;position:absolute;top:-3px;transform:translate(-50%)}.game-tab{flex-direction:column;height:100%;display:flex;overflow:hidden}.game-section{border-bottom:1px solid var(--border);padding:.5rem .7rem}.game-empty{text-align:center;color:var(--text-dim);padding:1.5rem 1rem}.game-empty p{margin-bottom:.8rem;font-size:.85rem}.game-match-selector{align-items:center;gap:.4rem;display:flex}.game-match-selector select{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;flex:1;padding:.3rem .4rem;font-size:.75rem}.game-set-bar{gap:.3rem;display:flex}.game-set-btn{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:4px;flex:1;padding:.3rem 0;font-size:.72rem}.game-set-btn:hover{background:var(--border);color:var(--text)}.game-set-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}.game-score{justify-content:center;align-items:center;gap:.6rem;padding:.6rem .5rem;display:flex}.game-team{text-align:center;flex:1;position:relative}.game-team .team-name{color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;margin-bottom:.15rem;font-size:.65rem;overflow:hidden}.game-team .team-score{font-variant-numeric:tabular-nums;font-size:2rem;font-weight:700;line-height:1}.game-team.serving .team-score{color:var(--yellow)}.serve-dot{background:var(--yellow);border-radius:50%;width:6px;height:6px;margin:.2rem auto 0}.score-sep{color:var(--text-dim);font-size:1.5rem;font-weight:300}.game-first-server{align-items:center;gap:.4rem;font-size:.72rem;display:flex}.game-first-server .label{color:var(--text-dim);white-space:nowrap}.game-prompt{text-align:center;color:var(--text-dim);background:#e9456014;font-size:.78rem;line-height:1.5}.prompt-key{background:var(--border);color:var(--text);border-radius:3px;margin:0 .1rem;padding:0 .35rem;font-family:monospace;font-size:.8rem;font-weight:600;display:inline-block}.game-rally-list{flex:1;padding:0 0 .4rem;overflow-y:auto}.game-rally-list ul{max-height:100%;list-style:none;overflow-y:auto}.rally-item{border-bottom:1px solid var(--border);cursor:pointer;align-items:center;gap:.4rem;padding:.35rem .7rem;font-size:.75rem;display:flex}.rally-item:hover{background:var(--border)}.rally-num{color:var(--text-dim);font-variant-numeric:tabular-nums;min-width:26px}.rally-time{color:var(--text-dim);font-variant-numeric:tabular-nums;min-width:36px}.rally-server{color:var(--yellow);text-align:center;min-width:14px;font-size:.65rem}.rally-scorer{white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.7rem;overflow:hidden}.rally-scorer.left{color:var(--cyan)}.rally-scorer.right{color:var(--orange)}.rally-score{color:var(--text);font-variant-numeric:tabular-nums;text-align:right;min-width:32px;font-weight:600}.rally-touches{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:1;font-size:.7rem}.rally-end{text-align:center;min-width:16px;font-size:.8rem}.rally-end.grounded{color:var(--orange)}.rally-end.fault{color:var(--danger,#e94560)}.rally-edit{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:0 .2rem;font-size:.8rem}.rally-edit:hover,.rally-edit.active{color:var(--accent)}.game-rules{text-align:left;margin:.3rem auto 0;list-style:none;display:inline-block}.game-rules li{padding:.05rem 0}.game-score-buttons{justify-content:center;gap:.4rem;margin-top:.4rem;display:flex}.end-summary{color:var(--text);font-weight:600}.pending-touches{padding:.4rem .7rem}.pending-title{color:var(--text-dim);margin-bottom:.25rem;font-size:.72rem}.touch-list{font-size:.75rem;list-style:none}.touch-list li{align-items:center;gap:.4rem;padding:.15rem 0;display:flex}.touch-list .entry-time{cursor:pointer;min-width:52px}.touch-list .entry-time:hover{color:var(--accent)}.touch-select{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:.1rem .2rem;font-size:.72rem}.touch-select.side{width:44px}.pending-end{color:var(--orange);padding-top:.25rem;font-size:.72rem}li.rally-detail{border-bottom:1px solid var(--border);cursor:default;background:#ffffff08;padding:.35rem .7rem .5rem 1.4rem;font-size:.75rem;display:block}.rally-detail-end{align-items:center;gap:.4rem;margin-top:.35rem;display:flex}.rally-end-frame{min-width:52px;color:var(--text-dim);font-variant-numeric:tabular-nums}.rally-end-frame.seekable{cursor:pointer}.rally-end-frame.seekable:hover{color:var(--accent)}.game-empty-rallies{text-align:center;color:var(--text-dim);padding:1rem;font-size:.8rem;font-style:italic}.game-btn{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:6px;padding:.4rem .8rem;font-size:.85rem}.game-btn:hover{background:var(--border)}.game-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.game-btn.primary:hover{opacity:.9}.game-btn-sm{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:.2rem .5rem;font-size:.7rem}.game-btn-sm:hover{background:var(--border);color:var(--text)}.game-btn-sm.active{background:var(--accent);border-color:var(--accent);color:#fff}.game-btn-sm.danger{border-color:var(--accent);color:var(--accent);text-align:center;width:calc(100% - 1.4rem);margin:.4rem .7rem;display:block}.game-btn-sm.danger:hover{background:#e9456026}.game-form{flex-direction:column;gap:.4rem;display:flex}.game-form label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.03em;font-size:.7rem}.game-form input{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:.4rem .5rem;font-size:.85rem}.game-form-buttons{gap:.4rem;margin-top:.2rem;display:flex}.game-form-buttons button{flex:1}.modal-overlay{z-index:100;background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-direction:column;width:560px;max-width:90vw;max-height:80vh;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:.8rem 1rem;display:flex}.modal-header h2{font-size:1rem;font-weight:600}.modal-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none;font-size:1.3rem;line-height:1}.modal-close:hover{color:var(--text)}.modal-toolbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:.8rem;padding:.6rem 1rem;display:flex}.modal-status{color:var(--text-dim);font-size:.8rem}.add-list{flex:1;list-style:none;overflow-y:auto}.add-list li{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:.6rem;padding:.45rem 1rem;font-size:.8rem;display:flex}.add-list li.done{opacity:.55}.add-name{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.add-date{color:var(--text-dim);white-space:nowrap;flex-shrink:0;font-size:.72rem}.add-one-btn{border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:4px;flex-shrink:0;padding:.2rem .6rem;font-size:.75rem}.add-one-btn:hover:not(:disabled){background:var(--border)}.add-one-btn:disabled{opacity:.5;cursor:default}.add-done{color:var(--green);flex-shrink:0;font-size:.75rem}.add-error{color:var(--accent);flex-basis:100%;font-size:.72rem}.add-assets{color:var(--text-dim);flex-basis:100%;font-size:.72rem}.add-empty{color:var(--text-dim);border-bottom:none;font-style:italic;line-height:1.5}.remove-modal{width:440px}.remove-body{padding:1rem;font-size:.85rem;line-height:1.5}.remove-body .remove-filename{word-break:break-all}.remove-note{color:var(--text-dim);margin-top:.5rem;font-size:.78rem}.remove-error{color:var(--accent);margin-top:.5rem;font-size:.78rem}.remove-actions{border-top:1px solid var(--border);justify-content:flex-end;gap:.6rem;padding:.8rem 1rem;display:flex}#app.view-faces{flex-direction:column;overflow-y:auto}.ball-card .face-thumb{width:64px;height:64px;image-rendering:pixelated}.ball-label{color:var(--text-dim);border:1px solid var(--border);white-space:nowrap;border-radius:9px;margin-left:.3rem;padding:.05rem .4rem;font-size:.72rem;font-weight:500}.ball-label-head,.ball-label-logo{color:var(--orange);border-color:var(--orange)}.ball-label-tag{color:var(--accent);border-color:var(--accent)}.ball-label-pred{border-style:dashed}.ball-tag-select{background:var(--bg);color:var(--text-dim);border:1px solid var(--border);border-radius:6px;max-width:7.5rem;padding:.15rem .2rem;font-size:.72rem}.ball-card .face-card-head{flex-wrap:wrap;row-gap:.3rem}.ball-card .face-card-head .faces-btn{padding:.25rem .45rem;font-size:.78rem}.ball-card .face-name-static{flex:auto;min-width:0}.ball-group-open{grid-column:1/-1}.ball-group-detail{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.6rem;margin-top:.5rem;display:grid}.ball-group-detail .face-card{background:var(--bg)}.ball-trim{flex-direction:column;gap:.5rem;margin-top:.5rem;display:flex}.ball-trim-strip{gap:4px;padding-bottom:.3rem;display:flex;overflow-x:auto}.ball-trim-crop{cursor:pointer;text-align:center;border-radius:6px;flex:none;padding:2px}.ball-trim-crop.ball-trim-sel{outline:2px solid var(--accent)}.ball-trim-crop.ball-trim-inrange{outline:2px dashed var(--orange)}.ball-card.ball-found{outline:3px solid var(--accent);transition:outline .3s}#ball-find{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:.35rem .5rem}.ball-trim-frame{color:var(--text-dim);font-size:.65rem;line-height:1.2}.faces{width:100%;padding:0 1.2rem 2rem}.faces-header{z-index:5;background:var(--bg);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:.8rem 0;display:flex;position:sticky;top:0}.faces-actions{align-items:center;gap:.6rem;display:flex}.faces-hint{color:var(--text-dim);font-size:.85rem}.faces-btn{background:var(--surface);color:var(--text);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:.4rem .7rem;font-size:.85rem}.faces-btn:hover:not(:disabled){border-color:var(--accent)}.faces-btn:disabled{opacity:.45;cursor:default}.faces-btn-reject{color:var(--orange)}.faces-btn-reject:hover:not(:disabled){border-color:var(--orange)}.face-groups{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1rem;padding:1rem 0;display:grid}.face-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:.5rem;padding:.6rem;display:flex}.face-card-noise{opacity:.9;border-style:dashed}.face-card-reject{border-color:var(--orange)}.face-card-head{align-items:center;gap:.5rem;display:flex}.face-name{background:var(--bg);min-width:0;color:var(--text);border:1px solid var(--border);border-radius:6px;flex:1;padding:.35rem .5rem;font-size:.9rem}.face-name:focus{border-color:var(--accent);outline:none}.face-name-static{flex:1;font-weight:600}.face-card-select{cursor:pointer;width:16px;height:16px}.face-thumbs{cursor:pointer;flex-wrap:wrap;gap:3px;display:flex}.face-thumb{object-fit:cover;background:var(--bg);border-radius:5px;width:52px;height:52px}.face-meta{color:var(--text-dim);font-size:.78rem}.face-card-actions{gap:.8rem;display:flex}.face-link{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:0;font-size:.8rem;text-decoration:underline}.face-link:hover{color:var(--text)}.face-link-danger:hover{color:var(--accent)}.face-detail{background:var(--surface);border:1px solid var(--border);border-radius:10px;margin-top:.5rem;padding:.8rem}.face-detail-head{flex-wrap:wrap;align-items:center;gap:.8rem;margin-bottom:.6rem;display:flex}.face-detail-grid{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:5px;max-height:60vh;display:grid;overflow-y:auto}.face-detail-cell{cursor:pointer;border:2px solid #0000;border-radius:6px;line-height:0}.face-detail-cell.selected{border-color:var(--accent)}.face-thumb-lg{aspect-ratio:1;object-fit:cover;background:var(--bg);border-radius:4px;width:100%}.face-video-row{margin:.35rem 0}.face-video-label{color:var(--text-dim);margin-bottom:2px;font-size:.72rem}.app-thumb{object-fit:contain;background:var(--bg);border-radius:5px;width:auto;max-width:104px;height:52px}.face-detail-video{margin-top:.7rem}.app-detail-grid{flex-wrap:wrap;align-content:flex-start;align-items:flex-start;gap:5px;max-height:50vh;margin-top:4px;display:flex;overflow-y:auto}.app-thumb-lg{background:var(--bg);border-radius:4px;width:auto;max-width:100%;height:auto;max-height:240px;display:block}select.faces-btn{appearance:auto}.outfit-strip{border-top:1px dashed var(--border);margin-top:.5rem;padding-top:.3rem}.outfit-head{color:var(--text-dim);align-items:center;gap:.45rem;margin-bottom:3px;font-size:.76rem;display:flex}.outfit-head input{cursor:pointer;width:15px;height:15px}#orient-panel{z-index:30;border:1px solid var(--border);background:#16161af0;border-radius:8px;width:432px;padding:8px;position:absolute;top:10px;right:10px;box-shadow:0 4px 18px #00000080}.orient-head{color:var(--text-dim);align-items:center;gap:6px;margin-bottom:6px;font-size:12px;display:flex}.orient-head #orient-title{white-space:nowrap;flex:1;overflow:hidden}.orient-head select{background:var(--bg);max-width:86px;color:var(--text-dim);border:1px solid var(--border);border-radius:4px;font-size:11px}.orient-x{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:13px}.orient-row{gap:8px;display:flex}#orient-crop{background:#101014;border-radius:6px;width:200px;height:200px;display:block}#orient-gl{touch-action:none;cursor:grab;background:#101014;border-radius:6px;width:200px;height:200px;display:block}#orient-gl:active{cursor:grabbing}.orient-status{color:var(--text-dim);min-height:14px;margin:6px 0;font-size:11.5px}.orient-status.ok{color:#6fcf7c}.orient-status.warn{color:#e8b84a}.orient-status.dim{color:#777}.orient-btns{flex-wrap:wrap;gap:4px;display:flex}.orient-btns button{background:var(--panel,#2a2a31);color:var(--text,#ddd);border:1px solid var(--border,#444);cursor:pointer;border-radius:5px;padding:5px 9px;font-size:12px}.orient-btns button:hover{background:var(--border)}.orient-btns .orient-primary{color:#fff;background:#1d4ed8;border-color:#1d4ed8}#app.view-watch{flex-direction:column}.watch-stage{background:#000;flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.watch-stage .player-area{flex:1}.watch-controls{z-index:2;background:linear-gradient(#0000,#000c);flex-direction:column;gap:.25rem;padding:1.2rem .8rem .4rem;transition:opacity .25s;display:flex;position:absolute;bottom:0;left:0;right:0}.watch-stage.idle .watch-controls{opacity:0;pointer-events:none}.watch-stage.idle{cursor:none}.watch-seek{cursor:pointer;touch-action:none;height:16px;position:relative}.watch-seek-track{background:#ffffff40;border-radius:2px;height:4px;position:absolute;top:6px;left:0;right:0}.watch-seek:hover .watch-seek-track{height:6px;top:5px}.watch-seek-track>*{border-radius:2px;height:100%;position:absolute;top:0}.watch-seek-buffered{background:#ffffff4d;width:0}.watch-seek-spans span{background:#4caf5099;height:100%;position:absolute;top:0}.watch-seek-fill{background:var(--accent);width:0}.watch-buttons{align-items:center;gap:.35rem;font-size:.85rem;display:flex}.watch-buttons button{color:#fff;cursor:pointer;background:0 0;border:none;border-radius:4px;padding:.2rem .5rem;font-size:1rem}.watch-buttons button:hover{background:#ffffff26}.watch-buttons button.active{color:var(--accent)}#watch-play{min-width:2.2em}#watch-speed{font-variant-numeric:tabular-nums;min-width:3.6em;font-size:.85rem}#watch-overlay{font-size:.85rem}.watch-time{color:#fff;font-variant-numeric:tabular-nums;padding:0 .4rem}.watch-spacer{flex:1}.watch-buttons .frame-info{color:#bbb;min-width:0}.watch-scroll{flex:1;min-height:0;display:block;overflow-y:auto}.watch-scroll .watch-stage{height:100%}.watch-seek-comments{pointer-events:none}.watch-seek-comments span{background:var(--yellow);border-radius:50%;width:7px;height:7px;position:absolute;top:-2px;transform:translate(-50%)}.watch-comments{width:100%;max-width:860px;margin:0 auto;padding:1rem 1.2rem 3rem}.watch-comments h3{color:var(--text);margin:0 0 .8rem;font-size:1rem}.comment-composer{margin-bottom:1.2rem;position:relative}.comment-composer textarea{resize:vertical;background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);font:inherit;border-radius:6px;padding:.5rem .7rem;font-size:.9rem}.comment-composer textarea:focus{border-color:var(--accent);outline:none}.comment-composer-row{align-items:center;gap:.8rem;margin-top:.4rem;display:flex}.comment-anchor{color:var(--text-dim);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.4rem;font-size:.85rem;display:inline-flex}.comment-anchor input{accent-color:var(--accent)}#comment-submit{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:5px;padding:.4rem 1rem;font-size:.85rem}#comment-submit:disabled{opacity:.4;cursor:default}.mention-menu{z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:6px;flex-direction:column;display:flex;position:absolute;top:3.1em;left:.5rem;overflow:hidden;box-shadow:0 4px 16px #00000080}.mention-menu button{color:var(--text);text-align:left;cursor:pointer;background:0 0;border:none;padding:.35rem .9rem;font-size:.9rem}.mention-menu button.active,.mention-menu button:hover{background:var(--border)}.comment-list{flex-direction:column;gap:1rem;margin:0;padding:0;list-style:none;display:flex}.comment-head{align-items:baseline;gap:.6rem;margin-bottom:.15rem;display:flex}.comment-author{color:var(--text);font-size:.9rem;font-weight:600}.comment-date{color:var(--text-dim);font-size:.78rem}.comment-del{color:var(--text-dim);cursor:pointer;visibility:hidden;background:0 0;border:none;padding:0 .2rem;font-size:1rem;line-height:1}.comment-list li:hover .comment-del{visibility:visible}.comment-del:hover{color:var(--accent)}.comment-body{color:var(--text);white-space:pre-wrap;word-break:break-word;font-size:.9rem;line-height:1.45}.comment-chip,.comment-cue{color:var(--cyan);font:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-size:.85em}.comment-chip:hover,.comment-cue:hover{text-decoration:underline}.comment-body .mention{color:var(--cyan);font-weight:600}.watch-stage:fullscreen .player-area{aspect-ratio:auto;flex:1;max-height:none}@media (width<=700px){.watch-scroll .watch-stage{height:auto}.watch-stage .player-area{aspect-ratio:var(--video-aspect,16 / 9);flex:none;max-height:70svh}.watch-controls{background:#000;padding:0 .5rem .3rem;position:static}.watch-stage.idle .watch-controls{opacity:1;pointer-events:auto}.watch-stage.idle{cursor:auto}.watch-seek{height:26px}.watch-seek-track{top:11px}.watch-seek:hover .watch-seek-track{height:4px;top:11px}.watch-buttons{flex-wrap:wrap;row-gap:.1rem}.watch-buttons .frame-label{display:none}.watch-buttons .frame-input{width:4.5em}.watch-time{padding:0 .2rem;font-size:.8rem}.watch-comments{padding:.8rem .8rem calc(3rem + env(safe-area-inset-bottom))}}#app.view-comotion{flex-direction:column;overflow-y:auto}.comotion{width:100%;max-width:1200px;margin:0 auto;padding:0 1.2rem 3rem}.comotion-header{z-index:5;background:var(--bg);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:.8rem 0;display:flex;position:sticky;top:0}.comotion-actions{align-items:center;gap:1rem;display:flex}.comotion-actions a,.comotion a{color:var(--text)}.comotion a:hover{color:var(--accent)}.comotion-sub{color:var(--text-dim);font-size:.85rem;line-height:1.5}.comotion-loading,.comotion-error{color:var(--text-dim);padding:2rem 0}.comotion-error{color:var(--accent)}.comotion-section{align-items:baseline;gap:1rem;margin-top:1.6rem;display:flex}.comotion-section h3{margin:0 0 .4rem}.comotion-section select{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:5px;padding:.15rem .3rem}.comotion-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.85rem}.comotion-table th{text-align:left;color:var(--text-dim);border-bottom:1px solid var(--border);background:var(--bg);z-index:4;padding:.35rem .6rem;font-weight:500;position:sticky;top:3.3rem}.comotion-table td{border-bottom:1px solid var(--border);padding:.3rem .6rem}.comotion-table th.num,.comotion-table td.num{text-align:right}.comotion-table .dim{color:var(--text-dim)}.cm-summary{margin:.8rem 0 0}.cm-class{white-space:nowrap;border-radius:9px;padding:.05rem .45rem;font-size:.78rem;display:inline-block}.cm-ambiguous_handoff{color:var(--accent);background:#e945602e}.cm-handoff{color:var(--orange);background:#ff980029}.cm-contact{color:var(--green);background:#4caf5029}.cm-track{white-space:nowrap;margin-right:.35rem}.cm-track i{color:var(--text-dim);font-style:normal}.cm-track i:before{content:"·";margin:0 .2rem}.cm-chip{white-space:nowrap;border-radius:4px;padding:0 .35rem;font-size:.78rem;display:inline-block}.cm-split{background:#e9456033}.cm-cannot{background:#ff980033}.cm-must{background:#4caf5033}.cm-zero{background:var(--surface);color:var(--text-dim)}.cm-error{background:var(--accent);color:#fff}.cm-detail-btn{background:var(--surface);color:var(--text);border:1px solid var(--border);cursor:pointer;border-radius:5px;padding:.1rem .5rem;font-size:.8rem}.cm-detail-btn:hover:not(:disabled){border-color:var(--accent)}.cm-detail-row td{background:var(--surface)}.cm-detail ul{margin:.3rem 0;padding-left:1.2rem}.cm-detail li{margin:.15rem 0}#cm-drop-more{margin:.8rem 0}
