.uplot,.uplot *,.uplot :before,.uplot :after{box-sizing:border-box}.uplot{width:min-content;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{-webkit-user-select:none;user-select:none;position:relative}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{width:100%;height:100%;display:block;position:relative}.u-axis{position:absolute}.u-legend{text-align:center;margin:auto;font-size:14px}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{pointer-events:none;background:#00000012;position:absolute}.u-cursor-x,.u-cursor-y{pointer-events:none;will-change:transform;position:absolute;top:0;left:0}.u-hz .u-cursor-x,.u-vt .u-cursor-y{border-right:1px dashed #607d8b;height:100%}.u-hz .u-cursor-y,.u-vt .u-cursor-x{border-bottom:1px dashed #607d8b;width:100%}.u-cursor-pt{pointer-events:none;will-change:transform;border:0 solid;border-radius:50%;position:absolute;top:0;left:0;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}:root{--bg:#070b16;--panel:#0f1526;--panel-2:#151d33;--line:#243050;--text:#dfe5f3;--muted:#8a94ad;--accent:#5b8cff;--live:#e5534b;--radius:8px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);margin:0;font:14px/1.4 system-ui,-apple-system,Segoe UI,sans-serif}button,select,input{font:inherit;color:inherit}button,select,input:not([type=checkbox]){background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:4px 8px}button{cursor:pointer}button:has(>.icon){justify-content:center;align-items:center;padding:5px 8px;display:inline-flex}.icon{display:block}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.4;cursor:default}input[type=date]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}a{color:var(--accent)}code{color:var(--muted);word-break:break-all;margin:4px 0;font-size:12px;display:block}.muted{color:var(--muted)}.small{font-size:12px}.pad{padding:16px}.center{place-items:center;min-height:100vh;display:grid}.link{color:var(--accent);background:0 0;border:none;padding:0 4px}.btn{border:1px solid var(--line);color:var(--text);background:var(--panel-2);border-radius:6px;padding:5px 10px;text-decoration:none;display:inline-block}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.error{color:#ffb4b4;border-radius:var(--radius);background:#3a1418;border:1px solid #7a2a31;justify-content:space-between;gap:8px;margin:8px 12px;padding:8px 12px;display:flex}.app{flex-direction:column;min-height:100vh;display:flex}.topbar{border-bottom:1px solid var(--line);background:var(--panel);z-index:10;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 12px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:6px;font-weight:600;display:flex}.brand img{width:22px;height:22px}.camera-name{font-weight:600}.date-nav{align-items:center;gap:4px;display:flex}.live.on{background:var(--live);border-color:var(--live);color:#fff}.status{margin-left:auto}.layout{grid-template-columns:minmax(0,1fr) 320px;grid-template-areas:"stage side""bottom bottom";gap:12px;padding:12px;display:grid}.stage{flex-direction:column;grid-area:stage;gap:8px;min-width:0;display:flex}.side{flex-direction:column;grid-area:side;gap:12px;min-width:0;display:flex}.bottom{grid-area:bottom;min-width:0}@media (width<=900px){.layout{grid-template-columns:minmax(0,1fr);grid-template-areas:"stage""bottom""side";padding:8px}.status{width:100%;margin-left:0}}.viewer{border-radius:var(--radius);touch-action:none;-webkit-user-select:none;user-select:none;background:#000;height:min(72vh,100vw);min-height:280px;position:relative;overflow:hidden}.viewer:fullscreen{border-radius:0;height:100vh}.viewer-img{object-fit:contain;transform-origin:50%;width:100%;height:100%;display:block}.viewer-empty,.viewer-msg{color:var(--muted);place-items:center;display:grid;position:absolute;inset:0}.viewer-msg{inset:auto 0 40%}.viewer-spinner{border:2px solid #fff4;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.8s linear infinite spin;position:absolute;top:10px;right:10px}@keyframes spin{to{transform:rotate(360deg)}}.overlay{text-shadow:0 1px 2px #000,0 0 6px #000;pointer-events:none;font-variant-numeric:tabular-nums;padding:6px 10px;font-size:13px;position:absolute}.overlay-tl{top:4px;left:4px}.overlay-bl{bottom:4px;left:4px}.overlay-title{font-size:15px;font-weight:600}.viewer-tools{gap:4px;display:flex;position:absolute;bottom:8px;right:8px}.viewer-tools button{background:#000a;min-width:32px}.transport{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.transport .play{background:var(--accent);border-color:var(--accent);color:#fff;min-width:44px}.transport .pos{font-variant-numeric:tabular-nums;margin-left:6px}.transport label{margin-left:auto}.timeline{position:relative}.timeline canvas{cursor:pointer;touch-action:none;display:block}.timeline-hover{background:var(--panel-2);border:1px solid var(--line);pointer-events:none;border-radius:4px;padding:0 4px;font-size:11px;position:absolute;top:-20px;transform:translate(-50%)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}.panel h3{flex-wrap:wrap;align-items:baseline;gap:8px;margin:0 0 8px;font-size:14px;display:flex}.downloads{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}table.meta{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:12px}table.meta th{text-align:left;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:150px;padding:2px 8px 2px 0;font-weight:400;overflow:hidden}table.meta td{text-align:right;word-break:break-all;padding:2px 0}table.meta tr+tr{border-top:1px solid #ffffff08}.side .panel:first-child{max-height:60vh;overflow:auto}.period-chips{flex-wrap:wrap;gap:4px;margin-bottom:8px;display:flex}.period-chip{opacity:.7;align-items:center;gap:4px;font-size:12px;display:inline-flex}.period-chip.on{opacity:1;border-color:var(--accent);background:#5b8cff22}.period-chip i{border-radius:2px;width:10px;height:10px;display:inline-block}.rule{grid-template-columns:1fr 64px 64px auto;gap:4px;margin-bottom:4px;display:grid}.rule input{width:100%}.row{justify-content:space-between;align-items:center;gap:8px;display:flex}.tabs{gap:4px;margin-bottom:8px;display:flex}.tabs button.on{background:var(--accent);border-color:var(--accent);color:#fff}.charts{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:8px}.charts-toolbar{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;display:flex}.chip{background:var(--panel-2);border:1px solid var(--line);border-radius:12px;align-items:center;gap:2px;padding:1px 4px 1px 10px;font-size:12px;display:inline-flex}.chip button{background:0 0;border:none;padding:0 4px}.chart{width:100%;margin-bottom:4px}.chart .u-legend{text-align:left;margin:0;font-size:12px}.chart .u-legend th{font-weight:400}.chart .u-over{cursor:crosshair}.gallery{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:6px;max-height:70vh;padding:2px;display:grid;overflow:auto}.tile{aspect-ratio:1;background:#000;border:2px solid #0000;padding:0;position:relative;overflow:hidden}.tile img{object-fit:cover;width:100%;height:100%;display:block}.tile.current{border-color:var(--accent)}.tile-time{text-align:left;background:#000a;border-left:4px solid;padding:1px 4px;font-size:11px;position:absolute;bottom:0;left:0;right:0}.tile-raw{color:var(--muted)}.start{flex-direction:column;gap:16px;max-width:640px;margin:0 auto;padding:32px 16px;display:flex}.start h1{align-items:center;gap:10px;margin:0;display:flex}.start h1 img{width:36px}.start form{flex-direction:column;gap:10px;display:flex}.start label{color:var(--muted);flex-direction:column;gap:4px;font-size:13px;display:flex}.start label input,.start label select{color:var(--text)}
