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>
76 lines
3.4 KiB
CSS
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); }
|