:root{--bg: #15181d;--bg-2: #1d2127;--bg-3: #262b33;--border: #343b45;--text: #e8eaed;--text-dim: #9aa3ad;--accent: #34c759;--accent-2: #32ade6;--danger: #ff453a;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px;overscroll-behavior:none}.app{height:100%;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;gap:20px;padding:8px 16px;background:var(--bg-2);border-bottom:1px solid var(--border);flex-shrink:0}.brand{font-weight:700;font-size:16px;color:var(--text);text-decoration:none}.app-header nav{display:flex;gap:4px}.app-header nav a{color:var(--text-dim);text-decoration:none;padding:6px 12px;border-radius:6px}.app-header nav a.active,.app-header nav a:hover{color:var(--text);background:var(--bg-3)}.app-main{flex:1;min-height:0;display:flex;flex-direction:column}.view{flex:1;min-height:0;display:flex;flex-direction:column;padding:10px;gap:8px}.btn{background:var(--bg-3);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:7px 12px;font-size:15px;cursor:pointer;line-height:1.1}.btn:hover{border-color:var(--text-dim)}.btn.small{padding:5px 9px;font-size:13px}.btn.active{background:var(--accent-2);border-color:var(--accent-2);color:#06222e}.btn.primary{background:var(--accent);border-color:var(--accent);color:#04200d;font-weight:600}.btn.danger:hover{border-color:var(--danger);color:var(--danger)}.btn:disabled{opacity:.45;cursor:default}select,input[type=text],input:not([type]),textarea{background:var(--bg-3);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:7px 10px;font:inherit}.analyze-view{position:relative}.toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;flex-shrink:0}.panel-toggle,.marker-bar.overlay,.toolbar .draw-actions{display:none}.tool-group{display:flex;gap:4px;align-items:center}.icon{display:inline-block;vertical-align:middle}.btn.tool{width:40px;font-size:17px;text-align:center;padding:7px 0}.color-swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}.color-swatch.active{border-color:var(--text);box-shadow:0 0 0 2px var(--bg)}.swing-panel{flex:1;min-height:0;min-width:0;display:flex;flex-direction:column;gap:6px}.stage{position:relative;flex:1;min-height:0;overflow:hidden;background:#000;border:1px solid var(--border);border-radius:10px;touch-action:none;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.stage-ambient{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;filter:blur(2px);transform:scale(1.06);z-index:0;pointer-events:none}.stage-inner{position:relative;transform-origin:0 0;flex-shrink:0;z-index:1}.stage-inner.feathered{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 18px,#000 calc(100% - 18px),transparent);mask-image:linear-gradient(to bottom,transparent,#000 18px,#000 calc(100% - 18px),transparent)}.stage-inner video{width:100%;height:100%;display:block;pointer-events:none}.stage-overlay{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.zoom-badge{position:absolute;top:8px;right:10px;background:#0009;color:var(--text-dim);padding:3px 8px;border-radius:6px;font-size:12px;pointer-events:none}.panel-loading,.panel-error{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text-dim)}.controls{flex-shrink:0;display:flex;flex-direction:column;gap:5px;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:8px 10px}.controls-title{font-weight:600;font-size:13px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.transport{display:flex;align-items:center;gap:6px}.timeline{flex:1;min-width:40px;accent-color:var(--accent)}.rate-control{position:relative;display:inline-flex}.rate-btn{min-width:56px;text-align:center}.rate-menu{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:2px;padding:5px;background:#14161c9e;border:1px solid rgba(255,255,255,.16);border-radius:10px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 8px 24px #0006;z-index:40}.rate-option{background:transparent;border:none;color:var(--text);font:inherit;font-size:17px;padding:9px 22px;border-radius:7px;cursor:pointer;text-align:center}.rate-option:hover{background:var(--bg-3)}.rate-option.active{color:var(--accent);font-weight:600}.rate-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:39}.frame-ruler-wrap{display:none;position:relative;height:80px;transition:opacity .25s ease}.frame-ruler{height:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;touch-action:pan-x;overscroll-behavior-x:contain}.frame-ruler::-webkit-scrollbar{display:none}.ruler-track{height:100%;background-image:repeating-linear-gradient(90deg,var(--text-dim) 0 1.5px,transparent 1.5px 60px),repeating-linear-gradient(90deg,var(--border) 0 1px,transparent 1px 12px);background-repeat:repeat-x,repeat-x;background-position:left center,left center;background-size:100% 75%,100% 45%}.ruler-playhead{position:absolute;top:0;bottom:0;left:50%;width:2px;transform:translate(-50%);background:#ff9f0a99;pointer-events:none;border-radius:2px}.info-row{display:flex;align-items:center;gap:14px;color:var(--text-dim);font-size:12px;font-variant-numeric:tabular-nums}.info-row .spacer{flex:1}.marker-bar{display:flex;gap:4px;align-items:center;flex-wrap:wrap}.p-chips{display:flex;gap:4px;flex-wrap:wrap}.p-chip{background:var(--bg-3);color:var(--text-dim);border:1px solid var(--border);border-radius:6px;padding:4px 7px;font-size:12px;cursor:pointer;font-variant-numeric:tabular-nums}.p-chip.set{color:var(--text);border-color:var(--accent-2)}.p-chip.current{background:var(--accent-2);color:#06222e;font-weight:700}.compare-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex-shrink:0}.opacity-label{display:flex;align-items:center;gap:8px;color:var(--text-dim);font-size:13px}.compare-panels{flex:1;min-height:0;display:flex;gap:10px}.overlay-stage{position:relative;flex:1;min-height:0;display:flex}.overlay-stage .stage{flex:1}.overlay-stage .overlay-top{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;border-color:transparent;pointer-events:none}.overlay-controls{display:flex;gap:10px;flex-shrink:0}.overlay-controls .controls{flex:1;min-width:0}.picker-view{align-items:center;justify-content:center}.picker-row{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.picker-row select{min-width:220px}.library-view{overflow-y:auto;display:block}.library-view.drag-over{outline:3px dashed var(--accent);outline-offset:-8px}.library-header{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:12px}.library-header h2{margin:0;font-size:18px}.library-filters{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1}.filter-pills{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.filter-group,.fpill-group{display:flex;gap:4px;flex-wrap:wrap;padding:3px;border:1px solid var(--border);border-radius:10px}.fpill{--c: var(--text-dim);padding:5px 11px;font-size:13px;font-weight:600;line-height:1;border-radius:20px;cursor:pointer;color:var(--c);border:1px solid color-mix(in srgb,var(--c) 45%,transparent);background:color-mix(in srgb,var(--c) 14%,transparent)}.fpill:hover{background:color-mix(in srgb,var(--c) 26%,transparent)}.fpill.active{background:var(--c);border-color:var(--c);color:#0b0f14}.fpill.all{--c: var(--text-dim)}.fpill.club-driver{--c: #6ea8ff}.fpill.club-wood{--c: #4fd6c4}.fpill.club-iron{--c: #b6e84f}.fpill.club-wedge{--c: #ffae66}.fpill.club-putt{--c: #c89bff}.fpill.view-face-on{--c: #ff8ec4}.fpill.view-down-the-line{--c: #7db4ff}.fpill.view-other{--c: #9fb0c4}.filter-reset{color:var(--text-dim)}.filter-selects{display:none;gap:8px}.filter-select{padding:5px 8px;font-size:13px;border-radius:7px}.banner{padding:8px 12px;border-radius:8px;margin-bottom:8px}.banner.info{background:#0f3a52}.banner.error{background:#4a1614}.empty-state{text-align:center;color:var(--text-dim);padding:60px 20px;line-height:1.7}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.card{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;overflow:hidden}.card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.card-thumb{display:block;position:relative;aspect-ratio:3/4;background:#000}.card-thumb img{width:100%;height:100%;object-fit:cover;display:block}.thumb-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:32px}.card-thumb .badge.fps{position:absolute;bottom:6px;right:6px}.card-body{padding:8px 10px 10px;display:flex;flex-direction:column;gap:6px}.card-title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-meta{display:flex;gap:4px;flex-wrap:wrap}.badge{background:#00000073;border:1px solid var(--border);color:var(--text-dim);font-size:11px;padding:2px 7px;border-radius:20px}.badge.cat-me{border-color:var(--accent);color:var(--accent)}.badge.cat-pro{border-color:#ffd60a;color:#ffd60a}.badge.cat-friend{border-color:var(--accent-2);color:var(--accent-2)}.badge.club,.badge.viewangle{font-weight:600;border-color:transparent}.badge.club-driver{background:#3884ff38;color:#6ea8ff}.badge.club-wood{background:#14b8a638;color:#4fd6c4}.badge.club-hybrid{background:#22c55e38;color:#6ee787}.badge.club-iron{background:#84cc1638;color:#b6e84f}.badge.club-wedge{background:#f9731638;color:#ffae66}.badge.club-chip{background:#eab30838;color:#ffd24a}.badge.club-putt{background:#a855f738;color:#c89bff}.badge.club-other{background:#94a3b838;color:#c2ccdb}.badge.view-face-on{background:#ec489938;color:#ff8ec4}.badge.view-down-the-line{background:#3b82f638;color:#7db4ff}.badge.view-other{background:#94a3b838;color:#c2ccdb}.card-actions{display:flex;align-items:center;gap:4px}.card-actions .card-date{margin-left:auto}.compare-fab{position:fixed;bottom:18px;left:50%;transform:translate(-50%);z-index:20}.storage-footer{margin-top:16px;color:var(--text-dim);font-size:12px;text-align:center}.login-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.login-error{color:var(--danger)}.badge.pending{position:absolute;top:6px;left:6px;border-color:var(--accent-2);color:var(--accent-2)}.badge.missing{position:absolute;top:6px;right:6px;border-color:var(--danger);color:var(--danger)}.card-date{color:var(--text-dim);font-weight:400;font-size:12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}.modal{background:var(--bg-2);border:1px solid var(--border);border-radius:12px;padding:18px;width:100%;max-width:440px;display:flex;flex-direction:column;gap:10px;max-height:90vh;overflow-y:auto}.modal h3{margin:0 0 4px}.modal label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text-dim);flex:1}.form-row{display:flex;gap:10px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:6px}@media(max-width:760px){.view{padding:6px}.filter-pills{display:none}.filter-selects{display:flex}.transport .timeline{display:none}.frame-ruler-wrap{display:block}.analyze-view{padding:0;gap:0}.analyze-view .swing-panel{position:relative}.panel-toggle{display:flex;position:absolute;top:10px;z-index:31;width:48px;height:48px;align-items:center;justify-content:center;border-radius:50%;border:1.5px solid rgba(255,255,255,.5);background:#ffffff24;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);color:#fff;font-size:20px;font-weight:600;cursor:pointer}.panel-toggle.markers{left:10px}.panel-toggle.tools{right:10px}.panel-toggle.undo-fab{right:10px;top:66px;font-size:19px}.analyze-view.tools-open .undo-fab,.analyze-view.markers-open .undo-fab,.analyze-view.tools-open .panel-toggle.markers,.analyze-view.markers-open .panel-toggle.tools{display:none}.analyze-view>.toolbar,.analyze-view>.marker-bar.overlay{display:none}.analyze-view.tools-open>.toolbar,.analyze-view.markers-open>.marker-bar.overlay{display:flex;position:absolute;top:0;left:0;right:0;z-index:30;gap:10px;flex-wrap:wrap;padding:12px;background:#14161ceb;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-bottom:1px solid var(--border)}.analyze-view.tools-open>.toolbar{padding-right:68px}.analyze-view.markers-open>.marker-bar.overlay{padding-left:68px}.analyze-view .marker-bar.in-controls,.analyze-view .controls .info-row{display:none}.analyze-view .toolbar .draw-actions{display:flex}.analyze-view .toolbar .colors,.analyze-view .toolbar .scope,.analyze-view .toolbar .btn.tool.tool-select,.analyze-view .toolbar .btn.tool.tool-pan{display:none}.analyze-view .toolbar .btn.tool,.analyze-view .toolbar .draw-actions .btn{width:48px;height:44px;padding:0;font-size:23px;display:inline-flex;align-items:center;justify-content:center}.analyze-view .toolbar .draw-actions{margin-left:auto}.analyze-view.tools-open .panel-toggle.tools,.analyze-view.markers-open .panel-toggle.markers{top:12px;width:44px;height:44px;font-size:18px}.analyze-view .marker-bar.overlay{position:relative;align-items:flex-start}.analyze-view .marker-bar.overlay .marker-set{position:absolute;left:10px;top:66px;width:48px;height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:19px}.analyze-view .marker-bar.overlay .set-label{display:none}.analyze-view .marker-bar.overlay .p-chips{width:100%;display:grid;grid-template-columns:repeat(5,auto);justify-content:end;gap:8px}.analyze-view .marker-bar.overlay .p-chip{font-size:18px;padding:9px 13px;border-radius:8px;text-align:center}.analyze-view .controls.playing .frame-ruler-wrap,.analyze-view .controls.playing .info-row .live{opacity:0;pointer-events:none}.analyze-view .controls .info-row .live{transition:opacity .25s ease}.analyze-view .controls{position:absolute;left:0;right:0;bottom:0;z-index:20;padding:4px 8px calc(8px + env(safe-area-inset-bottom,0px));background:linear-gradient(to top,rgba(0,0,0,.38),rgba(0,0,0,.08) 65%,transparent);border:none;border-radius:0;gap:2px}.analyze-view .controls .info-row{order:1}.analyze-view .controls .frame-ruler-wrap{order:2}.analyze-view .controls .transport{order:3;justify-content:center;align-items:center;gap:24px;padding:2px 0 6px}.analyze-view .controls .transport .step-10{display:none}.analyze-view .controls .transport .to-start{order:1}.analyze-view .controls .transport .frame-prev{order:2}.analyze-view .controls .transport .play{order:3}.analyze-view .controls .transport .frame-next{order:4}.analyze-view .controls .transport .rate-control{order:5}.analyze-view .controls .transport .btn,.analyze-view .controls .info-row .btn{background:transparent;border-color:transparent;color:#fff;filter:drop-shadow(0 1px 4px rgba(0,0,0,.75))}.analyze-view .controls .transport .btn{font-size:33px;line-height:1;padding:6px;margin:0}.analyze-view .controls .transport .play{display:flex;align-items:center;justify-content:center;font-size:40px;width:72px;height:72px;padding:0;border-radius:50%;background:#ffffff24;border:1.5px solid rgba(255,255,255,.55);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.analyze-view .controls .transport .to-start{opacity:.85}.analyze-view .controls .transport .rate-btn{font-size:21px;padding:8px 12px;min-width:58px}.analyze-view .controls .transport .rate-menu .rate-option{font-size:24px;padding:12px 28px}.analyze-view .controls .transport .rate-btn.slowed{background:#ffffff29;border-color:#fff6}.compare-panels{flex-direction:row}.overlay-controls{flex-direction:column}.info-row{flex-wrap:wrap;gap:8px}.btn.tool{width:36px}}@media(max-width:760px)and (orientation:portrait){.compare-panels{flex-direction:column}}
