5b251ccc3b
* Add Windows portable launcher scaffold * readme * readme update * fix * star thistory theme changed * feat: responsive layout, parallel setup flow, and window constraints - Enforce 1440×900 minimum window size in tauri.conf.json - Rewrite setup.js: parallel workspace+gpu phase, minDelay() for guaranteed state visibility, IIFE chains, error cleanup on failure - Add setup.css step indicators (pending/active/done/error) with gold spinner, green checkmark, red X - Fix stems-panel overflow into transport footer (align-self + height) - Make transport, appbar, and wave editor fully responsive with clamp() and fr-based grid columns - Remove dead .stem-list span.hidden rule (covered by base.css) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: ignore data/ directory (runtime-generated) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: untrack .docs directory from git * Add Windows portable release workflow * fix(tests): rewrite yoda conditions in test_config.py * ci: set UV_LINK_MODE=copy to suppress hardlink warning * fix: security hardening, reliability fixes, and observability improvements - Enforce MAX_PENDING_JOBS cap on job submissions (503 when queue full) - Add done_callback to pipeline task to log any unhandled exceptions - Add job_id regex validation to DELETE endpoint - Sanitize pipeline error messages sent to clients (full detail stays server-side) - Move sweep_old_jobs to hourly background task via lifespan (not per-submission) - Add demucs stall watchdog: terminate if no stderr output for 30min - Add SSE connection max lifetime (4h) to prevent zombie connections - Replace shutil.rmtree(ignore_errors=True) with logged _rmtree helper - Fix log levels: chroma/key diagnostics downgraded from WARNING to DEBUG - Add bounds clamping for MAX_DURATION_SEC, JOB_TTL_SECONDS, MAX_PENDING_JOBS - Remove filesystem paths from /health endpoint response - Replace innerHTML with safe DOM construction for BPM and confidence in JS * fix(events): use get_running_loop() instead of deprecated get_event_loop() * fix(tests): update assertions to match sanitized error and health response * star history * feat(desktop): Windows portable app — dual CPU/NVIDIA builds, external links, transport colors - Move frontend to desktop/ui/ and fix frontendDist to point there (fixes Tauri build) - Dual portable zip variants: StemDeck-Windows-x64 (CPU) and StemDeck-Windows-x64.NVIDIA - Strip torch .lib static libraries in StripVenv (-623 MB dnnl.lib alone) - Force-reinstall CPU torch after main pip install to prevent CUDA wheel override - Sentinel file data/cpu-only short-circuits GPU detection in ensure_torch_device() - Add open_url Tauri command + JS click interceptor for Help/Tip external links - Rename GPU setup step to "Configuring compute device" (accurate for both variants) - Play button turns green when active, stop button turns red when pressed - Update CI pipeline for dual Windows variants with manual branch trigger support - Update README with Windows desktop app section and download variant guidance Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Fix mixer volume updates getting stuck Clamp per-track mixer output to the browser-safe 0..1 range and isolate volume write failures so one hot fader cannot leave other channels stale. Keep the existing master-volume fallback when no master fader is present. * fix(ui): DAW view — tracks fill window height, icons aligned per row - stem-waveform-layer: top: 0 (waves-column already starts below ruler, previous top: 72px pushed waveforms 72px too far down) - stems-panel: align-self stretch + margin-bottom 6px to match waves-column height exactly, keeping icon rows in sync with waveform rows - ResizeObserver on waveScroll recalculates --wave-playhead-h and multitrack pxPerSec on every container resize - Commit desktop/package-lock.json for reproducible npm ci in CI pipeline * image:local added for windows builds --------- Co-authored-by: Thales <> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
111 lines
2.0 KiB
CSS
111 lines
2.0 KiB
CSS
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
background:
|
|
radial-gradient(circle at 50% 0%, rgba(216, 168, 74, 0.1), transparent 34rem),
|
|
radial-gradient(circle at 0% 45%, rgba(216, 168, 74, 0.055), transparent 28rem),
|
|
radial-gradient(circle at 100% 45%, rgba(216, 168, 74, 0.055), transparent 28rem),
|
|
linear-gradient(180deg, #081016 0%, #050a0f 100%);
|
|
color: var(--ink);
|
|
font-family: var(--font-mono);
|
|
font-size: 14px;
|
|
line-height: 1.5;
|
|
min-height: 100vh;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
.hidden {
|
|
display: none !important;
|
|
}
|
|
|
|
:focus {
|
|
outline: 0;
|
|
}
|
|
:focus-visible {
|
|
outline: 2px solid var(--focus-ring);
|
|
outline-offset: 2px;
|
|
border-radius: var(--radius-xs);
|
|
}
|
|
|
|
.surface-panel {
|
|
border: 1px solid var(--glass-line);
|
|
background:
|
|
linear-gradient(180deg, rgba(28, 39, 48, 0.82), rgba(15, 23, 31, 0.86));
|
|
box-shadow:
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.045),
|
|
var(--shadow-panel);
|
|
}
|
|
|
|
.app {
|
|
max-width: 1640px;
|
|
margin: 0 auto;
|
|
min-height: 100vh;
|
|
padding: 24px 28px 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 16px;
|
|
}
|
|
|
|
.app:not(.is-import) {
|
|
max-width: none;
|
|
width: 100%;
|
|
height: 100vh;
|
|
min-height: 0;
|
|
padding: 16px 29px 0;
|
|
gap: 8px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.app.is-import .now-playing,
|
|
.app.is-import #lanes {
|
|
display: none;
|
|
}
|
|
|
|
.app:not(.is-import) .import-page,
|
|
.app:not(.is-import) .site-footer {
|
|
display: none;
|
|
}
|
|
|
|
.site-footer {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 24px;
|
|
margin-top: auto;
|
|
padding: 18px 14px 22px;
|
|
color: #8d929a;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.site-footer > span {
|
|
margin-right: auto;
|
|
}
|
|
|
|
.site-footer nav {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 26px;
|
|
}
|
|
|
|
.site-footer a {
|
|
color: inherit;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.site-footer a:hover {
|
|
color: var(--ink);
|
|
}
|
|
|
|
.help-btn {
|
|
height: 42px;
|
|
padding: 0 16px;
|
|
border: 1px solid rgba(148, 163, 184, 0.16);
|
|
border-radius: var(--radius);
|
|
background: rgba(18, 26, 34, 0.75);
|
|
color: var(--ink);
|
|
font: inherit;
|
|
}
|