rotogod/web/style.css
m3ultra 96bba8e538 feat: browser upload (raw-body, 8g cap) + click-to-download exports
Makes the digalot.fyi/rotogod/ proxy actually usable away from the box:
⬆ uploads land in samples/uploads and open; output list links through
GET /api/download/{name}. nginx side: 8g body cap, request buffering off.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 13:30:49 +10:00

76 lines
3.4 KiB
CSS

* { box-sizing: border-box; margin: 0; }
:root {
--bg: #101014; --panel: #17171d; --line: #26262e;
--fg: #e8e8ee; --dim: #8b8b98; --accent: #7ad0ff;
}
body {
background: var(--bg); color: var(--fg);
font: 14px/1.45 -apple-system, "SF Pro Text", Helvetica, sans-serif;
height: 100vh; display: flex; flex-direction: column; overflow: hidden;
}
h1 { font-size: 17px; letter-spacing: 2px; color: var(--accent); }
h1 span { color: var(--fg); }
h2 { font-size: 11px; text-transform: uppercase; letter-spacing: 1.5px; color: var(--dim); margin-bottom: 8px; }
.dim { color: var(--dim); font-size: 12px; }
.hint { font-size: 11px; }
kbd { background: var(--line); border-radius: 3px; padding: 0 4px; font-size: 10px; }
header {
display: flex; align-items: center; gap: 10px;
padding: 8px 14px; border-bottom: 1px solid var(--line); background: var(--panel);
}
header input#path { flex: 1; }
input, button {
background: #1f1f27; color: var(--fg); border: 1px solid var(--line);
border-radius: 6px; padding: 6px 10px; font-size: 13px;
}
input:focus { outline: 1px solid var(--accent); }
button { cursor: pointer; white-space: nowrap; }
button:hover { border-color: var(--accent); }
button.primary, #startRoto, #track { background: #14303f; border-color: #2b5a75; }
.badge { font-size: 11px; color: var(--dim); border: 1px solid var(--line); border-radius: 10px; padding: 2px 8px; }
#toast { font-size: 12px; color: var(--accent); transition: opacity .4s; }
#toast.err { color: #ff8a80; }
main { flex: 1; display: flex; min-height: 0; }
#stage {
flex: 1; display: flex; align-items: center; justify-content: center;
background: #000; min-width: 0;
}
#cv { max-width: 100%; max-height: 100%; cursor: crosshair; }
aside {
width: 265px; overflow-y: auto; border-left: 1px solid var(--line);
background: var(--panel); padding: 12px;
}
aside section { margin-bottom: 18px; }
.row { display: flex; gap: 6px; align-items: center; margin: 6px 0; }
.row.wrap { flex-wrap: wrap; }
.wide { flex: 1; }
progress { width: 100%; height: 6px; accent-color: var(--accent); }
#feather { width: 56px; }
.obj {
display: flex; align-items: center; gap: 6px; padding: 4px 9px;
border: 1px solid var(--line); border-radius: 14px; cursor: pointer; font-size: 12px;
}
.obj.active { border-color: var(--accent); background: #14303f; }
.obj .swatch { width: 10px; height: 10px; border-radius: 50%; }
#outlist a { display: block; color: var(--accent); text-decoration: none; padding: 3px 0;
border-bottom: 1px dotted var(--line); word-break: break-all; font-size: 11px; }
#outlist a:hover { text-decoration: underline; }
footer { border-top: 1px solid var(--line); background: var(--panel); padding: 6px 14px 10px; }
#transport { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
#transport .gap { width: 18px; }
#frameLabel { margin-left: auto; font-variant-numeric: tabular-nums; }
#timeline { position: relative; height: 44px; margin-bottom: 4px; user-select: none; }
#thumbs { width: 100%; height: 100%; object-fit: fill; border-radius: 4px; opacity: .9; background: #000; }
.shade { position: absolute; top: 0; height: 100%; background: rgba(10,10,14,.72); pointer-events: none; }
#shadeL { left: 0; border-right: 2px solid var(--accent); }
#shadeR { right: 0; border-left: 2px solid var(--accent); }
#playhead { position: absolute; top: -2px; width: 2px; height: calc(100% + 4px); background: #fff; pointer-events: none; }
#scrub { width: 100%; padding: 0; accent-color: var(--accent); }