Spaces:
Build error
Build error
Upload 8 files
Browse files- frontend/app.css +130 -149
- frontend/studio.css +130 -249
- frontend/studio.html +29 -24
frontend/app.css
CHANGED
|
@@ -1,23 +1,20 @@
|
|
| 1 |
:root {
|
| 2 |
color-scheme: dark;
|
| 3 |
-
--
|
| 4 |
-
--
|
| 5 |
-
--
|
| 6 |
-
--
|
| 7 |
-
--
|
| 8 |
-
--
|
| 9 |
-
--
|
| 10 |
-
--
|
| 11 |
-
--
|
| 12 |
-
--
|
| 13 |
-
--
|
| 14 |
-
--
|
| 15 |
-
--
|
| 16 |
-
--
|
| 17 |
-
--
|
| 18 |
-
--ms-shadow: 0 28px 80px rgba(0,0,0,.34), inset 0 1px rgba(255,255,255,.025);
|
| 19 |
-
--ms-font: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
| 20 |
-
--ms-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
| 21 |
}
|
| 22 |
|
| 23 |
:host {
|
|
@@ -25,147 +22,131 @@
|
|
| 25 |
min-height: 100vh;
|
| 26 |
color-scheme: dark;
|
| 27 |
background:
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
}
|
| 32 |
|
| 33 |
-
html, body { min-height: 100%; background: var(--
|
| 34 |
-
body { margin: 0; color: var(--
|
| 35 |
-
|
| 36 |
-
position: fixed;
|
| 37 |
-
z-index: -2;
|
| 38 |
-
inset: 0;
|
| 39 |
-
content: "";
|
| 40 |
-
pointer-events: none;
|
| 41 |
-
background:
|
| 42 |
-
radial-gradient(1000px 620px at 10% -10%, rgba(92,75,202,.18), transparent 62%),
|
| 43 |
-
radial-gradient(780px 500px at 96% 8%, rgba(53,103,175,.12), transparent 66%),
|
| 44 |
-
linear-gradient(180deg, #0a0c11 0%, #090b0f 50%, #080a0d 100%);
|
| 45 |
-
}
|
| 46 |
-
body::after {
|
| 47 |
-
position: fixed;
|
| 48 |
-
z-index: -1;
|
| 49 |
-
inset: 0;
|
| 50 |
-
content: "";
|
| 51 |
-
pointer-events: none;
|
| 52 |
-
opacity: .28;
|
| 53 |
-
background-image: linear-gradient(rgba(255,255,255,.012) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.012) 1px, transparent 1px);
|
| 54 |
-
background-size: 32px 32px;
|
| 55 |
-
mask-image: linear-gradient(to bottom, black, transparent 78%);
|
| 56 |
-
}
|
| 57 |
-
|
| 58 |
-
.gradio-container, .gradio-container.dark {
|
| 59 |
-
min-height: 100vh !important;
|
| 60 |
-
max-width: none !important;
|
| 61 |
-
margin: 0 !important;
|
| 62 |
-
padding: 0 !important;
|
| 63 |
-
background: transparent !important;
|
| 64 |
-
color: var(--ms-text) !important;
|
| 65 |
-
font-family: var(--ms-font) !important;
|
| 66 |
-
}
|
| 67 |
.gradio-container .prose, .gradio-container .prose * { color: inherit; }
|
| 68 |
.gradio-container footer { display: none !important; }
|
| 69 |
|
| 70 |
-
#app-shell {
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
.
|
| 82 |
-
|
| 83 |
-
.
|
| 84 |
-
.
|
| 85 |
-
.
|
| 86 |
-
.
|
| 87 |
-
.
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
.
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
.
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
#
|
| 101 |
-
|
| 102 |
-
.
|
| 103 |
-
.
|
| 104 |
-
.
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
}
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
#audio-input { overflow: hidden; min-height:
|
| 120 |
-
#audio-input:hover, #audio-input:focus-within { border-color: rgba(
|
| 121 |
#audio-input .wrap, #audio-input > div, #audio-input .upload-container { border: 0 !important; background: transparent !important; }
|
| 122 |
-
#audio-input .upload-container { min-height:
|
| 123 |
-
#audio-input button, #audio-input .upload-button { border
|
| 124 |
-
#audio-input audio { width: 100%; filter: saturate(.
|
| 125 |
-
|
| 126 |
-
#
|
| 127 |
-
#
|
| 128 |
-
#
|
| 129 |
-
#
|
| 130 |
-
#
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
#transcribe-button {
|
| 134 |
-
#transcribe-button:hover:not(:disabled) { filter: brightness(1.
|
| 135 |
-
#transcribe-button:disabled, #transcribe-button[aria-busy="true"] { cursor: wait; filter:
|
| 136 |
-
.cold-note { display: flex; align-items:
|
| 137 |
-
.cold-note > span { width: 6px; height: 6px; flex: none;
|
| 138 |
-
|
| 139 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
#studio-viewer > .wrap, #studio-viewer > div, #studio-viewer .html-container { min-width: 0; padding: 0 !important; border: 0 !important; background: transparent !important; }
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
#downloads-
|
| 146 |
-
#downloads-row {
|
| 147 |
-
#downloads-row
|
| 148 |
-
|
| 149 |
-
.footnote { display: flex; justify-content: space-between; gap: 16px; padding:
|
| 150 |
-
|
| 151 |
-
@media (max-width:
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
}
|
| 157 |
|
| 158 |
-
@media (max-width:
|
| 159 |
-
#app-shell { width: min(100% -
|
| 160 |
-
|
| 161 |
-
.
|
| 162 |
-
.
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
}
|
| 168 |
|
| 169 |
@media (prefers-reduced-motion: reduce) {
|
| 170 |
-
*, *::before, *::after {
|
| 171 |
}
|
|
|
|
| 1 |
:root {
|
| 2 |
color-scheme: dark;
|
| 3 |
+
--ui-bg: #0b0d0e;
|
| 4 |
+
--ui-surface: #121517;
|
| 5 |
+
--ui-surface-2: #171b1e;
|
| 6 |
+
--ui-surface-3: #1b2023;
|
| 7 |
+
--ui-line: rgba(218, 233, 229, .1);
|
| 8 |
+
--ui-line-strong: rgba(218, 233, 229, .19);
|
| 9 |
+
--ui-text: #eef4f1;
|
| 10 |
+
--ui-soft: #b1bcb8;
|
| 11 |
+
--ui-muted: #727e7a;
|
| 12 |
+
--ui-accent: #45d1b5;
|
| 13 |
+
--ui-accent-dark: #168f7d;
|
| 14 |
+
--ui-warm: #eead68;
|
| 15 |
+
--ui-danger: #fb7185;
|
| 16 |
+
--ui-font: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
| 17 |
+
--ui-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
|
|
|
|
|
|
|
|
| 18 |
}
|
| 19 |
|
| 20 |
:host {
|
|
|
|
| 22 |
min-height: 100vh;
|
| 23 |
color-scheme: dark;
|
| 24 |
background:
|
| 25 |
+
linear-gradient(115deg, rgba(69,209,181,.045) 0 1px, transparent 1px 100%),
|
| 26 |
+
linear-gradient(180deg, #101315 0%, #0b0d0e 34%, #090b0c 100%);
|
| 27 |
+
background-size: 56px 56px, auto;
|
| 28 |
}
|
| 29 |
|
| 30 |
+
html, body { min-height: 100%; background: var(--ui-bg) !important; }
|
| 31 |
+
body { margin: 0; color: var(--ui-text); font-family: var(--ui-font); -webkit-font-smoothing: antialiased; }
|
| 32 |
+
.gradio-container, .gradio-container.dark { min-height: 100vh !important; max-width: none !important; margin: 0 !important; padding: 0 !important; color: var(--ui-text) !important; background: transparent !important; font-family: var(--ui-font) !important; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
.gradio-container .prose, .gradio-container .prose * { color: inherit; }
|
| 34 |
.gradio-container footer { display: none !important; }
|
| 35 |
|
| 36 |
+
#app-shell { width: min(1360px, calc(100% - 44px)); margin: 0 auto; padding: 28px 0 54px; gap: 18px; }
|
| 37 |
+
#masthead, #intro { padding: 0 !important; border: 0 !important; background: transparent !important; }
|
| 38 |
+
|
| 39 |
+
.workbench-nav { display: flex; align-items: center; justify-content: space-between; min-height: 52px; gap: 20px; padding: 0 2px 14px; border-bottom: 1px solid var(--ui-line); }
|
| 40 |
+
.wordmark { display: inline-flex; align-items: center; gap: 11px; color: var(--ui-text) !important; text-decoration: none; }
|
| 41 |
+
.wordmark-glyph { display: grid; width: 35px; height: 35px; border: 1px solid rgba(69,209,181,.3); border-radius: 50%; color: var(--ui-accent); background: #101a18; font: 720 .88rem var(--ui-mono); box-shadow: inset 0 0 0 5px rgba(69,209,181,.045); place-items: center; }
|
| 42 |
+
.wordmark strong, .wordmark small { display: block; }
|
| 43 |
+
.wordmark strong { font-size: .9rem; font-weight: 670; letter-spacing: -.02em; }
|
| 44 |
+
.wordmark small { margin-top: 2px; color: var(--ui-muted); font: .56rem var(--ui-mono); letter-spacing: .055em; text-transform: uppercase; }
|
| 45 |
+
.runtime-status { display: flex; align-items: center; gap: 6px; }
|
| 46 |
+
.runtime-status span { display: inline-flex; align-items: center; min-height: 28px; gap: 7px; padding: 0 9px; border: 1px solid var(--ui-line); border-radius: 6px; color: var(--ui-muted); background: rgba(255,255,255,.018); font: 590 .58rem var(--ui-mono); letter-spacing: .04em; text-transform: uppercase; }
|
| 47 |
+
.runtime-status i { width: 6px; height: 6px; border-radius: 50%; background: var(--ui-accent); box-shadow: 0 0 10px rgba(69,209,181,.65); }
|
| 48 |
+
|
| 49 |
+
.workbench-intro { display: grid; grid-template-columns: minmax(0,1.45fr) minmax(330px,.7fr); align-items: end; gap: clamp(38px,7vw,110px); padding: clamp(44px,7vw,88px) 2px clamp(34px,5vw,62px); }
|
| 50 |
+
.intro-statement { max-width: 790px; }
|
| 51 |
+
.overline { display: inline-block; margin-bottom: 17px; color: var(--ui-accent); font: 620 .62rem var(--ui-mono); letter-spacing: .12em; text-transform: uppercase; }
|
| 52 |
+
.intro-statement h1 { margin: 0; color: var(--ui-text); font-size: clamp(3rem,7.2vw,6.4rem); font-weight: 545; letter-spacing: -.068em; line-height: .88; }
|
| 53 |
+
.intro-statement h1 em { color: var(--ui-warm); font-style: normal; }
|
| 54 |
+
.intro-statement p { max-width: 680px; margin: 25px 0 0; color: var(--ui-soft); font-size: clamp(.94rem,1.6vw,1.08rem); line-height: 1.7; }
|
| 55 |
+
.workflow-map { display: grid; border-top: 1px solid var(--ui-line-strong); }
|
| 56 |
+
.workflow-map > div { display: grid; grid-template-columns: 34px 1fr; align-items: center; gap: 12px; min-height: 67px; border-bottom: 1px solid var(--ui-line); }
|
| 57 |
+
.workflow-map b { color: var(--ui-accent); font: 560 .58rem var(--ui-mono); }
|
| 58 |
+
.workflow-map strong, .workflow-map small { display: block; }
|
| 59 |
+
.workflow-map strong { color: var(--ui-text); font-size: .76rem; font-weight: 620; }
|
| 60 |
+
.workflow-map small { margin-top: 3px; color: var(--ui-muted); font-size: .65rem; }
|
| 61 |
+
|
| 62 |
+
#input-workbench, #transcription-panel { position: relative; min-width: 0; padding: clamp(17px,2.2vw,27px) !important; border: 1px solid var(--ui-line) !important; background: rgba(18,21,23,.94) !important; box-shadow: 0 24px 70px rgba(0,0,0,.23) !important; }
|
| 63 |
+
#input-workbench { border-radius: 18px !important; }
|
| 64 |
+
#input-workbench::before { position: absolute; top: -1px; left: 28px; width: 92px; height: 2px; content: ""; background: var(--ui-accent); }
|
| 65 |
+
#transcription-panel { border-radius: 8px 22px 22px 22px !important; }
|
| 66 |
+
#transcription-panel::before { position: absolute; top: -1px; left: -1px; width: 84px; height: 5px; content: ""; background: linear-gradient(90deg,var(--ui-warm),#d8784f); }
|
| 67 |
+
|
| 68 |
+
.panel-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; padding: 0 1px 18px; border-bottom: 1px solid var(--ui-line); }
|
| 69 |
+
.panel-heading span { display: block; margin-bottom: 5px; color: var(--ui-accent); font: 620 .57rem var(--ui-mono); letter-spacing: .1em; text-transform: uppercase; }
|
| 70 |
+
.studio-heading span { color: var(--ui-warm); }
|
| 71 |
+
.panel-heading h2 { margin: 0; color: var(--ui-text); font-size: 1.02rem; font-weight: 625; letter-spacing: -.025em; }
|
| 72 |
+
.panel-heading p { max-width: 440px; margin: 0; color: var(--ui-muted); font-size: .68rem; line-height: 1.45; text-align: right; }
|
| 73 |
+
|
| 74 |
+
#control-grid { align-items: stretch; gap: 10px; padding-top: 13px; }
|
| 75 |
+
#source-panel, #decode-panel, #notation-panel { min-width: 0; padding: 15px !important; border: 1px solid var(--ui-line) !important; border-radius: 11px !important; background: rgba(7,10,10,.32) !important; box-shadow: none !important; }
|
| 76 |
+
#source-panel { background: linear-gradient(145deg,rgba(69,209,181,.04),rgba(7,10,10,.34)) !important; }
|
| 77 |
+
#notation-panel { background: linear-gradient(145deg,rgba(238,173,104,.035),rgba(7,10,10,.34)) !important; }
|
| 78 |
+
.control-heading { display: flex; align-items: flex-start; gap: 10px; min-height: 46px; padding-bottom: 12px; }
|
| 79 |
+
.control-heading > span { display: grid; width: 24px; height: 24px; flex: none; border: 1px solid var(--ui-line-strong); border-radius: 5px; color: var(--ui-accent); font: 600 .55rem var(--ui-mono); place-items: center; }
|
| 80 |
+
#notation-panel .control-heading > span { color: var(--ui-warm); }
|
| 81 |
+
.control-heading strong, .control-heading small { display: block; }
|
| 82 |
+
.control-heading strong { color: var(--ui-text); font-size: .77rem; font-weight: 620; }
|
| 83 |
+
.control-heading small { margin-top: 4px; color: var(--ui-muted); font-size: .61rem; line-height: 1.45; }
|
| 84 |
+
|
| 85 |
+
#audio-input { overflow: hidden; min-height: 243px; border: 1px dashed rgba(69,209,181,.3) !important; border-radius: 9px !important; background: rgba(5,9,8,.58) !important; }
|
| 86 |
+
#audio-input:hover, #audio-input:focus-within { border-color: rgba(69,209,181,.7) !important; background: rgba(69,209,181,.035) !important; }
|
| 87 |
#audio-input .wrap, #audio-input > div, #audio-input .upload-container { border: 0 !important; background: transparent !important; }
|
| 88 |
+
#audio-input .upload-container { min-height: 215px; }
|
| 89 |
+
#audio-input button, #audio-input .upload-button { border: 1px solid var(--ui-line-strong) !important; border-radius: 7px !important; background: var(--ui-surface-3) !important; color: var(--ui-text) !important; box-shadow: none !important; }
|
| 90 |
+
#audio-input audio { width: 100%; filter: saturate(.72) contrast(.96); }
|
| 91 |
+
|
| 92 |
+
#decode-panel label, #notation-panel label, #downloads-row label { color: var(--ui-soft) !important; font-size: .7rem !important; }
|
| 93 |
+
#decode-panel input, #decode-panel textarea, #decode-panel select, #notation-panel input, #notation-panel textarea, #notation-panel select { border-color: var(--ui-line) !important; border-radius: 7px !important; background: rgba(255,255,255,.03) !important; color: var(--ui-text) !important; }
|
| 94 |
+
#decode-panel input[type="range"], #decode-panel input[type="checkbox"], #notation-panel input[type="range"], #notation-panel input[type="checkbox"] { accent-color: var(--ui-accent); }
|
| 95 |
+
#decoding-sliders, #score-primary-settings { gap: 7px; }
|
| 96 |
+
#decoding-sliders > div, #score-primary-settings > div { min-width: 118px; }
|
| 97 |
+
|
| 98 |
+
#run-row { align-items: center; gap: 14px; padding: 11px 1px 0; }
|
| 99 |
+
#transcribe-button { flex: 0 1 330px !important; min-height: 48px; border: 1px solid rgba(141,255,230,.32) !important; border-radius: 7px !important; background: linear-gradient(112deg,#168f7d,#21aa93) !important; box-shadow: 0 9px 24px rgba(18,132,113,.23), inset 0 1px rgba(255,255,255,.17) !important; color: #f5fffc !important; font-size: .84rem !important; font-weight: 680 !important; letter-spacing: .005em; transition: transform 140ms ease, filter 140ms ease !important; }
|
| 100 |
+
#transcribe-button:hover:not(:disabled) { filter: brightness(1.1); transform: translateY(-1px); }
|
| 101 |
+
#transcribe-button:disabled, #transcribe-button[aria-busy="true"] { cursor: wait; filter: grayscale(.35) brightness(.75); }
|
| 102 |
+
.cold-note { display: flex; align-items: center; gap: 8px; margin: 0 !important; color: var(--ui-muted); font: .59rem/1.5 var(--ui-mono); }
|
| 103 |
+
.cold-note > span { width: 6px; height: 6px; flex: none; border-radius: 50%; background: var(--ui-warm); }
|
| 104 |
+
|
| 105 |
+
#generate-score-button { min-height: 38px; margin-top: 2px; border: 1px solid rgba(238,173,104,.38) !important; border-radius: 7px !important; background: rgba(238,173,104,.1) !important; color: #f5c996 !important; font-weight: 650 !important; }
|
| 106 |
+
#generate-score-button:hover:not(:disabled) { background: rgba(238,173,104,.17) !important; }
|
| 107 |
+
#generate-score-button:disabled { border-color: var(--ui-line) !important; background: rgba(255,255,255,.018) !important; color: var(--ui-muted) !important; }
|
| 108 |
+
|
| 109 |
+
#studio-viewer { min-width: 0; margin: 14px 0 0; padding: 0 !important; border: 0 !important; background: transparent !important; }
|
| 110 |
#studio-viewer > .wrap, #studio-viewer > div, #studio-viewer .html-container { min-width: 0; padding: 0 !important; border: 0 !important; background: transparent !important; }
|
| 111 |
+
.export-heading { display: grid; grid-template-columns: auto 1fr auto; align-items: baseline; gap: 10px; margin-top: 3px; padding: 14px 1px 8px; border-top: 1px solid var(--ui-line); }
|
| 112 |
+
.export-heading span { color: var(--ui-warm); font: 600 .55rem var(--ui-mono); letter-spacing: .08em; text-transform: uppercase; }
|
| 113 |
+
.export-heading strong { color: var(--ui-text); font-size: .76rem; }
|
| 114 |
+
.export-heading small { color: var(--ui-muted); font-size: .61rem; }
|
| 115 |
+
#downloads-row { display: grid !important; grid-template-columns: repeat(5,minmax(0,1fr)); gap: 7px; margin: 0; }
|
| 116 |
+
#downloads-row > div { min-width: 0 !important; overflow: hidden; border: 1px solid var(--ui-line) !important; border-radius: 7px !important; background: rgba(255,255,255,.018) !important; box-shadow: none !important; }
|
| 117 |
+
#downloads-row a, #downloads-row button { color: #bfeee4 !important; }
|
| 118 |
+
|
| 119 |
+
.footnote { display: flex; justify-content: space-between; gap: 16px; padding: 11px 3px 0; color: var(--ui-muted); font: .55rem var(--ui-mono); }
|
| 120 |
+
|
| 121 |
+
@media (max-width: 1080px) {
|
| 122 |
+
.workbench-intro { grid-template-columns: 1fr; gap: 35px; }
|
| 123 |
+
.workflow-map { grid-template-columns: repeat(3,1fr); }
|
| 124 |
+
.workflow-map > div { grid-template-columns: 28px 1fr; border-right: 1px solid var(--ui-line); padding: 0 12px; }
|
| 125 |
+
#control-grid { flex-wrap: wrap !important; }
|
| 126 |
+
#source-panel { width: 100% !important; flex-basis: 100% !important; }
|
| 127 |
+
#decode-panel, #notation-panel { flex: 1 1 calc(50% - 5px) !important; }
|
| 128 |
+
#audio-input { min-height: 190px; }
|
| 129 |
+
#audio-input .upload-container { min-height: 165px; }
|
| 130 |
+
#downloads-row { grid-template-columns: repeat(3,minmax(0,1fr)); }
|
| 131 |
}
|
| 132 |
|
| 133 |
+
@media (max-width: 720px) {
|
| 134 |
+
#app-shell { width: min(100% - 18px,1360px); padding-top: 14px; }
|
| 135 |
+
.workbench-nav, .panel-heading, .footnote { align-items: flex-start; flex-direction: column; }
|
| 136 |
+
.runtime-status { width: 100%; }
|
| 137 |
+
.workbench-intro { padding: 38px 2px 28px; }
|
| 138 |
+
.intro-statement h1 { font-size: clamp(3rem,16vw,4.8rem); }
|
| 139 |
+
.workflow-map { grid-template-columns: 1fr; }
|
| 140 |
+
.workflow-map > div { border-right: 0; }
|
| 141 |
+
#input-workbench, #transcription-panel { padding: 12px !important; border-radius: 11px !important; }
|
| 142 |
+
.panel-heading p { text-align: left; }
|
| 143 |
+
#decode-panel, #notation-panel { width: 100% !important; flex-basis: 100% !important; }
|
| 144 |
+
#run-row { align-items: stretch; flex-direction: column !important; }
|
| 145 |
+
#transcribe-button { width: 100% !important; flex-basis: auto !important; }
|
| 146 |
+
.export-heading { grid-template-columns: 1fr; }
|
| 147 |
+
#downloads-row { grid-template-columns: 1fr; }
|
| 148 |
}
|
| 149 |
|
| 150 |
@media (prefers-reduced-motion: reduce) {
|
| 151 |
+
*, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
|
| 152 |
}
|
frontend/studio.css
CHANGED
|
@@ -1,289 +1,170 @@
|
|
| 1 |
:root {
|
| 2 |
color-scheme: dark;
|
| 3 |
-
--ms-bg: #
|
| 4 |
-
--ms-panel: #
|
| 5 |
-
--ms-
|
| 6 |
-
--ms-line
|
| 7 |
-
--ms-
|
| 8 |
-
--ms-
|
| 9 |
-
--ms-
|
| 10 |
-
--ms-
|
| 11 |
-
--ms-
|
| 12 |
-
--ms-
|
| 13 |
-
--ms-
|
| 14 |
-
--ms-
|
|
|
|
|
|
|
|
|
|
| 15 |
--ms-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
| 16 |
}
|
| 17 |
|
| 18 |
* { box-sizing: border-box; }
|
| 19 |
-
|
| 20 |
-
.ms-root {
|
| 21 |
-
display: grid;
|
| 22 |
-
min-width: 0;
|
| 23 |
-
gap: 14px;
|
| 24 |
-
color: var(--ms-text);
|
| 25 |
-
font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
| 26 |
-
container-type: inline-size;
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
.ms-root [hidden] { display: none !important; }
|
| 30 |
.ms-root button, .ms-root input, .ms-root select { font: inherit; }
|
| 31 |
|
| 32 |
-
.ms-topbar {
|
| 33 |
-
display: flex;
|
| 34 |
-
align-items: flex-start;
|
| 35 |
-
justify-content: space-between;
|
| 36 |
-
gap: 18px;
|
| 37 |
-
min-width: 0;
|
| 38 |
-
padding: 2px 2px 0;
|
| 39 |
-
}
|
| 40 |
-
|
| 41 |
.ms-heading { min-width: 0; }
|
| 42 |
-
.ms-heading h2 {
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
}
|
| 53 |
-
.ms-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
}
|
| 62 |
-
.ms-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
.ms-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
letter-spacing: .09em;
|
| 73 |
-
text-transform: uppercase;
|
| 74 |
-
}
|
| 75 |
-
|
| 76 |
-
.ms-state-dot {
|
| 77 |
-
width: 7px;
|
| 78 |
-
height: 7px;
|
| 79 |
-
flex: none;
|
| 80 |
-
border-radius: 50%;
|
| 81 |
-
background: var(--ms-faint);
|
| 82 |
-
box-shadow: 0 0 0 3px rgba(255,255,255,.035);
|
| 83 |
-
}
|
| 84 |
-
.ms-root[data-state="queued"] .ms-state-dot,
|
| 85 |
-
.ms-root[data-state="loading"] .ms-state-dot,
|
| 86 |
-
.ms-root[data-state="transcribing"] .ms-state-dot {
|
| 87 |
-
background: var(--ms-warning);
|
| 88 |
-
box-shadow: 0 0 0 4px rgba(244,191,117,.1), 0 0 14px rgba(244,191,117,.38);
|
| 89 |
-
animation: ms-pulse 1.7s ease-in-out infinite;
|
| 90 |
-
}
|
| 91 |
-
.ms-root[data-state="complete"] .ms-state-dot,
|
| 92 |
-
.ms-root[data-state="ready"] .ms-state-dot {
|
| 93 |
-
background: var(--ms-success);
|
| 94 |
-
box-shadow: 0 0 0 4px rgba(99,216,162,.09), 0 0 13px rgba(99,216,162,.32);
|
| 95 |
-
}
|
| 96 |
-
.ms-root[data-state="error"] .ms-state-dot,
|
| 97 |
-
.ms-root[data-state="notation_error"] .ms-state-dot { background: var(--ms-danger); }
|
| 98 |
-
|
| 99 |
-
.ms-quick-downloads { display: flex; flex: none; gap: 6px; }
|
| 100 |
-
.ms-quick-downloads a,
|
| 101 |
-
.ms-tracks-heading button,
|
| 102 |
-
.ms-track-controls button,
|
| 103 |
-
.ms-track-controls a {
|
| 104 |
-
display: inline-flex;
|
| 105 |
-
align-items: center;
|
| 106 |
-
justify-content: center;
|
| 107 |
-
border: 1px solid var(--ms-line);
|
| 108 |
-
border-radius: 9px;
|
| 109 |
-
background: rgba(255,255,255,.035);
|
| 110 |
-
color: var(--ms-soft);
|
| 111 |
-
cursor: pointer;
|
| 112 |
-
text-decoration: none;
|
| 113 |
-
transition: color 140ms ease, border-color 140ms ease, background 140ms ease, transform 140ms ease;
|
| 114 |
-
}
|
| 115 |
-
.ms-quick-downloads a { min-height: 33px; padding: 0 10px; font-size: .66rem; font-weight: 620; }
|
| 116 |
-
.ms-quick-downloads a:hover:not([aria-disabled="true"]),
|
| 117 |
-
.ms-tracks-heading button:hover,
|
| 118 |
-
.ms-track-controls button:hover,
|
| 119 |
-
.ms-track-controls a:hover:not([aria-disabled="true"]) {
|
| 120 |
-
border-color: rgba(139,124,255,.38);
|
| 121 |
-
background: rgba(139,124,255,.13);
|
| 122 |
-
color: #e4e1ff;
|
| 123 |
-
transform: translateY(-1px);
|
| 124 |
-
}
|
| 125 |
-
.ms-quick-downloads a[aria-disabled="true"], .ms-track-controls a[aria-disabled="true"] {
|
| 126 |
-
pointer-events: none;
|
| 127 |
-
opacity: .3;
|
| 128 |
-
}
|
| 129 |
-
|
| 130 |
-
.ms-progress {
|
| 131 |
-
display: grid;
|
| 132 |
-
gap: 8px;
|
| 133 |
-
padding: 11px 13px;
|
| 134 |
-
border: 1px solid var(--ms-line);
|
| 135 |
-
border-radius: 11px;
|
| 136 |
-
background: rgba(7,9,13,.45);
|
| 137 |
-
}
|
| 138 |
-
.ms-progress > div { display: flex; justify-content: space-between; gap: 12px; color: var(--ms-soft); font-size: .7rem; }
|
| 139 |
-
.ms-progress b { color: var(--ms-muted); font: 600 .64rem var(--ms-mono); }
|
| 140 |
-
.ms-progress i { display: block; overflow: hidden; height: 4px; border-radius: 99px; background: rgba(255,255,255,.055); }
|
| 141 |
-
.ms-progress i span { display: block; width: 0; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--ms-accent), #6b9bff); box-shadow: 0 0 18px rgba(119,102,255,.45); transition: width 320ms ease; }
|
| 142 |
-
|
| 143 |
-
.ms-empty {
|
| 144 |
-
min-height: 420px;
|
| 145 |
-
display: grid;
|
| 146 |
-
align-content: center;
|
| 147 |
-
justify-items: center;
|
| 148 |
-
padding: 34px 20px;
|
| 149 |
-
border: 1px solid var(--ms-line);
|
| 150 |
-
border-radius: 14px;
|
| 151 |
-
background: radial-gradient(circle at 50% 42%, rgba(139,124,255,.06), transparent 36%), #0a0d12;
|
| 152 |
-
text-align: center;
|
| 153 |
-
}
|
| 154 |
-
.ms-empty-icon { display: grid; width: 44px; height: 44px; border: 1px solid var(--ms-line); border-radius: 12px; background: rgba(255,255,255,.025); color: #aaa1ff; font-size: 20px; place-items: center; }
|
| 155 |
-
.ms-empty h3 { margin: 14px 0 6px; color: var(--ms-soft); font-size: .88rem; }
|
| 156 |
-
.ms-empty p { max-width: 430px; margin: 0; color: var(--ms-faint); font-size: .7rem; line-height: 1.6; }
|
| 157 |
-
|
| 158 |
-
.ms-workspace { display: grid; min-width: 0; gap: 12px; }
|
| 159 |
-
|
| 160 |
-
.ms-stats {
|
| 161 |
-
display: grid;
|
| 162 |
-
grid-template-columns: repeat(4, minmax(0,1fr));
|
| 163 |
-
overflow: hidden;
|
| 164 |
-
border: 1px solid var(--ms-line);
|
| 165 |
-
border-radius: 11px;
|
| 166 |
-
background: rgba(7,9,13,.36);
|
| 167 |
-
}
|
| 168 |
-
.ms-stats > div { min-width: 0; padding: 10px 12px; }
|
| 169 |
.ms-stats > div + div { border-left: 1px solid var(--ms-line); }
|
| 170 |
-
.ms-stats span {
|
| 171 |
-
.ms-stats strong {
|
| 172 |
-
|
| 173 |
-
.ms-transport {
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
}
|
| 181 |
-
.ms-
|
| 182 |
-
.ms-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
height: 34px;
|
| 186 |
-
flex: none;
|
| 187 |
-
border: 1px solid var(--ms-line-strong);
|
| 188 |
-
border-radius: 50%;
|
| 189 |
-
color: #fff;
|
| 190 |
-
background: linear-gradient(135deg, #7a69eb, #5576d7);
|
| 191 |
-
cursor: pointer;
|
| 192 |
-
place-items: center;
|
| 193 |
-
}
|
| 194 |
-
.ms-stop { width: 29px; height: 29px; border-radius: 8px; color: var(--ms-soft); background: rgba(255,255,255,.04); }
|
| 195 |
-
.ms-play:disabled, .ms-stop:disabled { cursor: not-allowed; filter: saturate(.3); opacity: .38; }
|
| 196 |
-
.ms-transport-main > span { min-width: 44px; color: var(--ms-muted); font: 600 .62rem var(--ms-mono); text-align: center; }
|
| 197 |
-
.ms-seek { min-width: 80px; flex: 1; accent-color: var(--ms-accent); }
|
| 198 |
-
.ms-transport-options { flex-wrap: wrap; padding-left: 71px; }
|
| 199 |
-
|
| 200 |
-
.ms-source-mix { display: flex; align-items: center; gap: 5px; min-height: 32px; padding: 3px; border: 1px solid var(--ms-line); border-radius: 9px; background: rgba(255,255,255,.025); }
|
| 201 |
-
.ms-source-mix button { height: 24px; padding: 0 7px; border: 0; border-radius: 6px; color: var(--ms-muted); background: transparent; cursor: pointer; font-size: .58rem; font-weight: 720; }
|
| 202 |
-
.ms-source-mix button[aria-pressed="true"] { color: #fff; background: rgba(139,124,255,.32); }
|
| 203 |
-
.ms-source-mix input { width: 82px; accent-color: var(--ms-accent); }
|
| 204 |
-
.ms-stereo-toggle, .ms-volume { display: flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 8px; border: 1px solid var(--ms-line); border-radius: 9px; color: var(--ms-muted); background: rgba(255,255,255,.025); font-size: .6rem; white-space: nowrap; }
|
| 205 |
.ms-stereo-toggle { cursor: pointer; }
|
| 206 |
-
.ms-stereo-toggle input { accent-color: var(--ms-accent); }
|
| 207 |
-
.ms-stereo-toggle[data-active="true"] { border-color: rgba(
|
| 208 |
-
.ms-volume input { width:
|
| 209 |
-
.ms-synth-state {
|
| 210 |
.ms-synth-state[data-kind="loading"] { color: var(--ms-warning); }
|
| 211 |
.ms-synth-state[data-kind="ready"] { color: var(--ms-success); }
|
| 212 |
.ms-synth-state[data-kind="error"] { color: var(--ms-danger); }
|
| 213 |
|
| 214 |
-
.ms-
|
| 215 |
-
.ms-
|
| 216 |
-
.ms-
|
|
|
|
|
|
|
| 217 |
.ms-tabs button[aria-selected="true"] { border-bottom-color: var(--ms-accent); color: var(--ms-text); }
|
| 218 |
-
.ms-tabs > span { overflow: hidden; margin-left: auto; color: var(--ms-faint); font: .
|
| 219 |
-
.ms-tabs label { display: flex; align-items: center; gap: 5px; color: var(--ms-faint); font-size: .
|
| 220 |
-
.ms-tabs input { width:
|
| 221 |
-
|
| 222 |
-
.ms-roll-view {
|
| 223 |
-
.ms-roll-view canvas { display: block; width: 100%; height:
|
| 224 |
-
.ms-roll-view p { margin:
|
| 225 |
-
.ms-score-view {
|
| 226 |
.ms-score-empty { min-height: 100%; display: grid; align-content: center; justify-items: center; color: var(--ms-muted); text-align: center; }
|
| 227 |
-
.ms-score-empty span { color: var(--ms-
|
| 228 |
-
.ms-score-empty strong { margin-top:
|
| 229 |
-
.ms-score-empty p { max-width:
|
| 230 |
-
.ms-score-paper { min-width: 720px; padding:
|
| 231 |
.ms-score-paper svg { display: block; width: 100%; height: auto; color: #111; }
|
| 232 |
|
| 233 |
-
.ms-
|
| 234 |
-
.ms-
|
| 235 |
-
.ms-notation-info dl { display: flex; flex: 1; gap: 14px; margin: 0; }
|
| 236 |
-
.ms-notation-info dl div { display: flex; gap: 5px; }
|
| 237 |
-
.ms-notation-info dt, .ms-notation-info dd { margin: 0; font-size: .58rem; }
|
| 238 |
-
.ms-notation-info dt { color: var(--ms-faint); }
|
| 239 |
-
.ms-notation-info dd { color: var(--ms-soft); }
|
| 240 |
-
|
| 241 |
-
.ms-tracks-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 4px 2px 0; }
|
| 242 |
.ms-tracks-heading strong, .ms-kicker { display: block; }
|
| 243 |
-
.ms-kicker { color: var(--ms-soft); font-size: .
|
| 244 |
-
.ms-tracks-heading strong { margin-top: 3px; color: var(--ms-faint); font: .
|
| 245 |
-
.ms-tracks-heading button { min-height:
|
| 246 |
-
.ms-track-list { display: grid;
|
| 247 |
-
.ms-track-placeholder {
|
| 248 |
-
.ms-track-row { display: grid; grid-template-columns:
|
| 249 |
-
.ms-track-row:hover {
|
| 250 |
-
.ms-track-row[data-inactive="true"] { opacity: .
|
| 251 |
-
.ms-track-color { width:
|
| 252 |
.ms-track-copy { min-width: 0; overflow: hidden; }
|
| 253 |
.ms-track-copy strong, .ms-track-copy span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
| 254 |
-
.ms-track-copy strong { color: var(--ms-soft); font-size: .
|
| 255 |
-
.ms-track-copy span { margin-top: 4px; color: var(--ms-faint); font: .
|
| 256 |
-
.ms-program-select { width:
|
| 257 |
-
.ms-track-controls { display: flex; gap:
|
| 258 |
-
.ms-track-controls button, .ms-track-controls a { width:
|
| 259 |
-
.ms-track-controls button[aria-pressed="true"] { border-color: color-mix(in srgb,
|
| 260 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 261 |
.ms-announcer { position: absolute; overflow: hidden; width: 1px; height: 1px; clip: rect(0 0 0 0); }
|
| 262 |
|
| 263 |
-
@keyframes ms-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 264 |
|
| 265 |
-
@container (max-width:
|
| 266 |
.ms-topbar { display: grid; }
|
| 267 |
.ms-quick-downloads { width: 100%; }
|
| 268 |
.ms-quick-downloads a { flex: 1; }
|
| 269 |
-
.ms-
|
| 270 |
-
.ms-
|
| 271 |
-
.ms-
|
| 272 |
-
}
|
| 273 |
-
|
| 274 |
-
@container (max-width: 520px) {
|
| 275 |
.ms-stats { grid-template-columns: repeat(2,minmax(0,1fr)); }
|
| 276 |
.ms-stats > div:nth-child(3) { border-top: 1px solid var(--ms-line); border-left: 0; }
|
| 277 |
.ms-stats > div:nth-child(4) { border-top: 1px solid var(--ms-line); }
|
| 278 |
.ms-transport-main { flex-wrap: wrap; }
|
| 279 |
-
.ms-seek { min-width: calc(100% -
|
|
|
|
| 280 |
.ms-source-mix { width: 100%; }
|
| 281 |
.ms-source-mix input { flex: 1; }
|
|
|
|
|
|
|
| 282 |
.ms-tabs > span { display: none; }
|
| 283 |
-
.ms-
|
| 284 |
-
.ms-
|
| 285 |
.ms-notation-info { align-items: flex-start; }
|
| 286 |
-
.ms-notation-info dl { display: grid; grid-template-columns: repeat(2,1fr); gap:
|
| 287 |
}
|
| 288 |
|
| 289 |
@media (prefers-reduced-motion: reduce) {
|
|
|
|
| 1 |
:root {
|
| 2 |
color-scheme: dark;
|
| 3 |
+
--ms-bg: #0b0e0f;
|
| 4 |
+
--ms-panel: #121617;
|
| 5 |
+
--ms-panel-2: #171c1e;
|
| 6 |
+
--ms-line: rgba(218, 233, 229, .1);
|
| 7 |
+
--ms-line-strong: rgba(218, 233, 229, .19);
|
| 8 |
+
--ms-text: #eef4f1;
|
| 9 |
+
--ms-soft: #b1bcb8;
|
| 10 |
+
--ms-muted: #727e7a;
|
| 11 |
+
--ms-faint: #4e5855;
|
| 12 |
+
--ms-accent: #45d1b5;
|
| 13 |
+
--ms-accent-dark: #168f7d;
|
| 14 |
+
--ms-warm: #eead68;
|
| 15 |
+
--ms-success: #66d6a7;
|
| 16 |
+
--ms-warning: #eead68;
|
| 17 |
+
--ms-danger: #fb7185;
|
| 18 |
--ms-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
| 19 |
}
|
| 20 |
|
| 21 |
* { box-sizing: border-box; }
|
| 22 |
+
.ms-root { display: grid; min-width: 0; gap: 12px; color: var(--ms-text); font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; container-type: inline-size; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
.ms-root [hidden] { display: none !important; }
|
| 24 |
.ms-root button, .ms-root input, .ms-root select { font: inherit; }
|
| 25 |
|
| 26 |
+
.ms-topbar { display: flex; align-items: flex-start; justify-content: space-between; min-width: 0; gap: 20px; padding: 2px 3px 12px 13px; border-left: 3px solid var(--ms-warm); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
.ms-heading { min-width: 0; }
|
| 28 |
+
.ms-heading h2 { overflow: hidden; max-width: 760px; margin: 0; color: var(--ms-text); font-size: clamp(1.02rem,2vw,1.3rem); font-weight: 620; letter-spacing: -.03em; text-overflow: ellipsis; white-space: nowrap; }
|
| 29 |
+
.ms-eyebrow { display: flex; align-items: center; gap: 8px; margin: 0 0 7px; color: var(--ms-muted); font: 610 .57rem/1 var(--ms-mono); letter-spacing: .1em; text-transform: uppercase; }
|
| 30 |
+
.ms-state-dot { width: 7px; height: 7px; flex: none; border-radius: 2px; background: var(--ms-faint); transform: rotate(45deg); }
|
| 31 |
+
.ms-root[data-state="queued"] .ms-state-dot, .ms-root[data-state="loading"] .ms-state-dot, .ms-root[data-state="transcribing"] .ms-state-dot { background: var(--ms-warning); box-shadow: 0 0 12px rgba(238,173,104,.55); animation: ms-blink 1.3s ease-in-out infinite; }
|
| 32 |
+
.ms-root[data-state="complete"] .ms-state-dot, .ms-root[data-state="ready"] .ms-state-dot { background: var(--ms-success); box-shadow: 0 0 10px rgba(102,214,167,.42); }
|
| 33 |
+
.ms-root[data-state="error"] .ms-state-dot, .ms-root[data-state="notation_error"] .ms-state-dot { background: var(--ms-danger); }
|
| 34 |
+
.ms-subtitle { display: flex; align-items: center; gap: 8px; margin: 6px 0 0; color: var(--ms-muted); font-size: .7rem; line-height: 1.45; }
|
| 35 |
+
.ms-subtitle b { color: var(--ms-faint); font: 550 .55rem var(--ms-mono); white-space: nowrap; }
|
| 36 |
+
.ms-subtitle b::before { margin-right: 8px; content: "/"; }
|
| 37 |
+
|
| 38 |
+
.ms-quick-downloads { display: flex; flex: none; gap: 5px; }
|
| 39 |
+
.ms-quick-downloads a, .ms-tracks-heading button, .ms-track-controls button, .ms-track-controls a { display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--ms-line); border-radius: 4px; color: var(--ms-soft); background: rgba(255,255,255,.018); cursor: pointer; text-decoration: none; transition: border-color 130ms ease, color 130ms ease, background 130ms ease; }
|
| 40 |
+
.ms-quick-downloads a { min-height: 31px; padding: 0 9px; font: 610 .58rem var(--ms-mono); text-transform: uppercase; }
|
| 41 |
+
.ms-quick-downloads a:hover:not([aria-disabled="true"]), .ms-tracks-heading button:hover, .ms-track-controls button:hover, .ms-track-controls a:hover:not([aria-disabled="true"]) { border-color: rgba(69,209,181,.42); color: #d9fff7; background: rgba(69,209,181,.075); }
|
| 42 |
+
.ms-quick-downloads a[aria-disabled="true"], .ms-track-controls a[aria-disabled="true"] { pointer-events: none; opacity: .28; }
|
| 43 |
+
|
| 44 |
+
.ms-progress { display: grid; grid-template-columns: minmax(0,1fr) minmax(180px,.35fr); align-items: center; gap: 15px; padding: 9px 11px; border-top: 1px solid var(--ms-line); border-bottom: 1px solid var(--ms-line); background: rgba(238,173,104,.025); }
|
| 45 |
+
.ms-progress > div { display: flex; justify-content: space-between; gap: 12px; color: var(--ms-soft); font-size: .65rem; }
|
| 46 |
+
.ms-progress b { color: var(--ms-warning); font: 590 .58rem var(--ms-mono); }
|
| 47 |
+
.ms-progress i { display: block; overflow: hidden; height: 3px; background: rgba(255,255,255,.055); }
|
| 48 |
+
.ms-progress i span { display: block; width: 0; height: 100%; background: linear-gradient(90deg,var(--ms-warm),#d8784f); transition: width 300ms ease; }
|
| 49 |
+
|
| 50 |
+
.ms-empty { min-height: 440px; display: grid; align-content: center; justify-items: center; padding: 35px 20px; border: 1px dashed var(--ms-line-strong); background: repeating-linear-gradient(90deg,transparent 0 79px,rgba(255,255,255,.018) 80px), #0b0f10; text-align: center; }
|
| 51 |
+
.ms-empty-icon { display: grid; width: 46px; height: 46px; border: 1px solid rgba(69,209,181,.27); color: var(--ms-accent); background: rgba(69,209,181,.035); font-size: 20px; place-items: center; }
|
| 52 |
+
.ms-empty h3 { margin: 15px 0 6px; color: var(--ms-soft); font-size: .84rem; font-weight: 610; }
|
| 53 |
+
.ms-empty p { max-width: 480px; margin: 0; color: var(--ms-muted); font-size: .67rem; line-height: 1.6; }
|
| 54 |
+
|
| 55 |
+
.ms-workspace { display: grid; min-width: 0; gap: 10px; }
|
| 56 |
+
.ms-stats { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); border-top: 1px solid var(--ms-line); border-bottom: 1px solid var(--ms-line); }
|
| 57 |
+
.ms-stats > div { display: flex; align-items: baseline; justify-content: space-between; min-width: 0; gap: 9px; padding: 8px 11px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
.ms-stats > div + div { border-left: 1px solid var(--ms-line); }
|
| 59 |
+
.ms-stats span { color: var(--ms-muted); font: 580 .53rem var(--ms-mono); letter-spacing: .07em; text-transform: uppercase; }
|
| 60 |
+
.ms-stats strong { overflow: hidden; color: var(--ms-soft); font-size: .7rem; font-weight: 590; text-overflow: ellipsis; white-space: nowrap; }
|
| 61 |
+
|
| 62 |
+
.ms-transport { display: grid; grid-template-columns: minmax(360px,1fr) auto; align-items: center; gap: 10px; padding: 9px 10px; border: 1px solid var(--ms-line); background: #0e1213; }
|
| 63 |
+
.ms-transport-main, .ms-transport-options { display: flex; align-items: center; min-width: 0; gap: 7px; }
|
| 64 |
+
.ms-play, .ms-stop { display: grid; width: 33px; height: 33px; flex: none; border: 1px solid rgba(69,209,181,.34); border-radius: 50%; color: #effffb; background: var(--ms-accent-dark); cursor: pointer; place-items: center; }
|
| 65 |
+
.ms-stop { width: 28px; height: 28px; border-color: var(--ms-line); border-radius: 4px; color: var(--ms-soft); background: rgba(255,255,255,.025); }
|
| 66 |
+
.ms-play:disabled, .ms-stop:disabled { cursor: not-allowed; filter: grayscale(.5); opacity: .34; }
|
| 67 |
+
.ms-transport-main > span { min-width: 43px; color: var(--ms-muted); font: 580 .58rem var(--ms-mono); text-align: center; }
|
| 68 |
+
.ms-seek { min-width: 90px; flex: 1; accent-color: var(--ms-accent); }
|
| 69 |
+
.ms-source-mix { display: flex; align-items: center; gap: 4px; min-height: 30px; padding: 2px; border: 1px solid var(--ms-line); background: rgba(255,255,255,.018); }
|
| 70 |
+
.ms-source-mix button { height: 24px; padding: 0 6px; border: 0; border-radius: 2px; color: var(--ms-muted); background: transparent; cursor: pointer; font-size: .54rem; font-weight: 700; text-transform: uppercase; }
|
| 71 |
+
.ms-source-mix button[aria-pressed="true"] { color: #e9fff9; background: rgba(69,209,181,.18); }
|
| 72 |
+
.ms-source-mix input { width: 76px; accent-color: var(--ms-accent); }
|
| 73 |
+
.ms-stereo-toggle, .ms-volume { display: flex; align-items: center; gap: 5px; min-height: 30px; padding: 0 7px; border: 1px solid var(--ms-line); color: var(--ms-muted); background: rgba(255,255,255,.018); font-size: .56rem; white-space: nowrap; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
.ms-stereo-toggle { cursor: pointer; }
|
| 75 |
+
.ms-stereo-toggle input, .ms-volume input { accent-color: var(--ms-accent); }
|
| 76 |
+
.ms-stereo-toggle[data-active="true"] { border-color: rgba(69,209,181,.4); color: #d9fff7; background: rgba(69,209,181,.065); }
|
| 77 |
+
.ms-volume input { width: 58px; }
|
| 78 |
+
.ms-synth-state { max-width: 154px; color: var(--ms-faint); font: .52rem/1.25 var(--ms-mono); }
|
| 79 |
.ms-synth-state[data-kind="loading"] { color: var(--ms-warning); }
|
| 80 |
.ms-synth-state[data-kind="ready"] { color: var(--ms-success); }
|
| 81 |
.ms-synth-state[data-kind="error"] { color: var(--ms-danger); }
|
| 82 |
|
| 83 |
+
.ms-studio-grid { display: grid; grid-template-columns: minmax(0,2.05fr) minmax(270px,.72fr); height: 520px; min-width: 0; gap: 9px; }
|
| 84 |
+
.ms-view-shell, .ms-mixer { min-width: 0; min-height: 0; border: 1px solid var(--ms-line); background: #0a0e0f; }
|
| 85 |
+
.ms-view-shell { display: flex; flex-direction: column; overflow: hidden; }
|
| 86 |
+
.ms-tabs { display: flex; align-items: center; min-height: 42px; gap: 18px; padding: 0 12px; border-bottom: 1px solid var(--ms-line); background: #111617; }
|
| 87 |
+
.ms-tabs button { align-self: stretch; padding: 0 1px; border: 0; border-bottom: 2px solid transparent; color: var(--ms-muted); background: transparent; cursor: pointer; font: 650 .58rem var(--ms-mono); letter-spacing: .05em; text-transform: uppercase; }
|
| 88 |
.ms-tabs button[aria-selected="true"] { border-bottom-color: var(--ms-accent); color: var(--ms-text); }
|
| 89 |
+
.ms-tabs > span { overflow: hidden; margin-left: auto; color: var(--ms-faint); font: .54rem var(--ms-mono); text-overflow: ellipsis; white-space: nowrap; }
|
| 90 |
+
.ms-tabs label { display: flex; align-items: center; gap: 5px; color: var(--ms-faint); font-size: .54rem; }
|
| 91 |
+
.ms-tabs input { width: 60px; accent-color: var(--ms-accent); }
|
| 92 |
+
.ms-roll-view, .ms-score-view { min-height: 0; flex: 1; }
|
| 93 |
+
.ms-roll-view { padding: 9px; }
|
| 94 |
+
.ms-roll-view canvas { display: block; width: 100%; height: calc(100% - 23px); background: #090c0d; cursor: crosshair; }
|
| 95 |
+
.ms-roll-view p { margin: 6px 1px 0; color: var(--ms-faint); font-size: .54rem; text-align: right; }
|
| 96 |
+
.ms-score-view { overflow: auto; padding: 13px; background: #15191a; overscroll-behavior: contain; }
|
| 97 |
.ms-score-empty { min-height: 100%; display: grid; align-content: center; justify-items: center; color: var(--ms-muted); text-align: center; }
|
| 98 |
+
.ms-score-empty span { color: var(--ms-warm); font-size: 36px; }
|
| 99 |
+
.ms-score-empty strong { margin-top: 8px; color: var(--ms-soft); font-size: .78rem; }
|
| 100 |
+
.ms-score-empty p { max-width: 410px; margin: 5px 0 0; font-size: .62rem; line-height: 1.5; }
|
| 101 |
+
.ms-score-paper { min-width: 720px; padding: 17px; background: #fffdf7; box-shadow: 0 10px 30px rgba(0,0,0,.3); }
|
| 102 |
.ms-score-paper svg { display: block; width: 100%; height: auto; color: #111; }
|
| 103 |
|
| 104 |
+
.ms-mixer { display: flex; flex-direction: column; overflow: hidden; background: #101415; }
|
| 105 |
+
.ms-tracks-heading { display: flex; align-items: center; justify-content: space-between; flex: none; min-height: 54px; gap: 10px; padding: 8px 10px; border-bottom: 1px solid var(--ms-line); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
.ms-tracks-heading strong, .ms-kicker { display: block; }
|
| 107 |
+
.ms-kicker { color: var(--ms-soft); font-size: .67rem; font-weight: 620; }
|
| 108 |
+
.ms-tracks-heading strong { margin-top: 3px; color: var(--ms-faint); font: .53rem var(--ms-mono); }
|
| 109 |
+
.ms-tracks-heading button { min-height: 27px; padding: 0 7px; font-size: .54rem; }
|
| 110 |
+
.ms-track-list { display: grid; align-content: start; min-height: 0; overflow-y: auto; scrollbar-color: rgba(255,255,255,.14) transparent; }
|
| 111 |
+
.ms-track-placeholder { padding: 18px 12px; color: var(--ms-faint); font-size: .63rem; line-height: 1.5; text-align: center; }
|
| 112 |
+
.ms-track-row { display: grid; grid-template-columns: 5px minmax(0,1fr) auto; align-items: center; min-width: 0; min-height: 76px; gap: 9px; padding: 10px; border-bottom: 1px solid var(--ms-line); background: rgba(255,255,255,.008); transition: opacity 130ms ease, background 130ms ease; }
|
| 113 |
+
.ms-track-row:hover { background: rgba(255,255,255,.025); }
|
| 114 |
+
.ms-track-row[data-inactive="true"] { opacity: .42; }
|
| 115 |
+
.ms-track-color { width: 5px; height: 38px; background: var(--track); box-shadow: 0 0 13px color-mix(in srgb,var(--track) 34%,transparent); }
|
| 116 |
.ms-track-copy { min-width: 0; overflow: hidden; }
|
| 117 |
.ms-track-copy strong, .ms-track-copy span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
| 118 |
+
.ms-track-copy strong { color: var(--ms-soft); font-size: .68rem; font-weight: 600; }
|
| 119 |
+
.ms-track-copy span { margin-top: 4px; color: var(--ms-faint); font: .51rem var(--ms-mono); }
|
| 120 |
+
.ms-program-select { width: 100%; max-width: 142px; margin-top: 6px; padding: 3px 19px 3px 4px; border: 1px solid var(--ms-line); border-radius: 2px; background: #151a1b; color: var(--ms-soft); font-size: .52rem; }
|
| 121 |
+
.ms-track-controls { display: flex; gap: 3px; }
|
| 122 |
+
.ms-track-controls button, .ms-track-controls a { width: 25px; height: 25px; padding: 0; font: 700 .54rem var(--ms-mono); }
|
| 123 |
+
.ms-track-controls button[aria-pressed="true"] { border-color: color-mix(in srgb,var(--track) 56%,transparent); color: #fff; background: color-mix(in srgb,var(--track) 18%,transparent); }
|
| 124 |
+
|
| 125 |
+
.ms-notation-info { display: flex; align-items: center; gap: 12px; padding: 7px 10px; border-left: 2px solid var(--ms-warm); background: rgba(238,173,104,.025); }
|
| 126 |
+
.ms-notation-info > span { color: var(--ms-warm); font: 620 .54rem var(--ms-mono); letter-spacing: .08em; text-transform: uppercase; }
|
| 127 |
+
.ms-notation-info dl { display: flex; flex: 1; gap: 15px; margin: 0; }
|
| 128 |
+
.ms-notation-info dl div { display: flex; gap: 5px; }
|
| 129 |
+
.ms-notation-info dt, .ms-notation-info dd { margin: 0; font-size: .55rem; }
|
| 130 |
+
.ms-notation-info dt { color: var(--ms-faint); }
|
| 131 |
+
.ms-notation-info dd { color: var(--ms-soft); }
|
| 132 |
.ms-announcer { position: absolute; overflow: hidden; width: 1px; height: 1px; clip: rect(0 0 0 0); }
|
| 133 |
|
| 134 |
+
@keyframes ms-blink { 0%,100% { opacity:.35; } 50% { opacity:1; } }
|
| 135 |
+
|
| 136 |
+
@container (max-width: 1030px) {
|
| 137 |
+
.ms-transport { grid-template-columns: 1fr; }
|
| 138 |
+
.ms-transport-options { padding-left: 68px; }
|
| 139 |
+
.ms-studio-grid { grid-template-columns: 1fr; height: auto; }
|
| 140 |
+
.ms-view-shell { height: 440px; }
|
| 141 |
+
.ms-mixer { max-height: 430px; }
|
| 142 |
+
.ms-track-list { grid-template-columns: repeat(2,minmax(0,1fr)); }
|
| 143 |
+
.ms-track-row:nth-child(odd) { border-right: 1px solid var(--ms-line); }
|
| 144 |
+
}
|
| 145 |
|
| 146 |
+
@container (max-width: 650px) {
|
| 147 |
.ms-topbar { display: grid; }
|
| 148 |
.ms-quick-downloads { width: 100%; }
|
| 149 |
.ms-quick-downloads a { flex: 1; }
|
| 150 |
+
.ms-subtitle { align-items: flex-start; flex-direction: column; }
|
| 151 |
+
.ms-subtitle b::before { display: none; }
|
| 152 |
+
.ms-progress { grid-template-columns: 1fr; }
|
|
|
|
|
|
|
|
|
|
| 153 |
.ms-stats { grid-template-columns: repeat(2,minmax(0,1fr)); }
|
| 154 |
.ms-stats > div:nth-child(3) { border-top: 1px solid var(--ms-line); border-left: 0; }
|
| 155 |
.ms-stats > div:nth-child(4) { border-top: 1px solid var(--ms-line); }
|
| 156 |
.ms-transport-main { flex-wrap: wrap; }
|
| 157 |
+
.ms-seek { min-width: calc(100% - 132px); }
|
| 158 |
+
.ms-transport-options { padding-left: 0; flex-wrap: wrap; }
|
| 159 |
.ms-source-mix { width: 100%; }
|
| 160 |
.ms-source-mix input { flex: 1; }
|
| 161 |
+
.ms-synth-state { width: 100%; max-width: none; }
|
| 162 |
+
.ms-view-shell { height: 350px; }
|
| 163 |
.ms-tabs > span { display: none; }
|
| 164 |
+
.ms-track-list { grid-template-columns: 1fr; }
|
| 165 |
+
.ms-track-row:nth-child(odd) { border-right: 0; }
|
| 166 |
.ms-notation-info { align-items: flex-start; }
|
| 167 |
+
.ms-notation-info dl { display: grid; grid-template-columns: repeat(2,1fr); gap: 5px 12px; }
|
| 168 |
}
|
| 169 |
|
| 170 |
@media (prefers-reduced-motion: reduce) {
|
frontend/studio.html
CHANGED
|
@@ -51,28 +51,38 @@
|
|
| 51 |
</div>
|
| 52 |
</div>
|
| 53 |
|
| 54 |
-
<
|
| 55 |
-
<
|
| 56 |
-
<
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
|
|
|
| 61 |
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
|
|
|
|
|
|
| 72 |
</div>
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
|
| 77 |
<div class="ms-notation-info" hidden>
|
| 78 |
<span>Score</span>
|
|
@@ -84,11 +94,6 @@
|
|
| 84 |
</dl>
|
| 85 |
</div>
|
| 86 |
|
| 87 |
-
<div class="ms-tracks-heading">
|
| 88 |
-
<div><span class="ms-kicker">Instrument tracks</span><strong data-field="track-count">No tracks yet</strong></div>
|
| 89 |
-
<button type="button" data-action="reset-mix">Reset mute & solo</button>
|
| 90 |
-
</div>
|
| 91 |
-
<div data-region="tracks" class="ms-track-list" aria-label="Instrument tracks"></div>
|
| 92 |
</section>
|
| 93 |
|
| 94 |
<div class="ms-announcer" aria-live="polite"></div>
|
|
|
|
| 51 |
</div>
|
| 52 |
</div>
|
| 53 |
|
| 54 |
+
<div class="ms-studio-grid">
|
| 55 |
+
<section class="ms-view-shell">
|
| 56 |
+
<nav class="ms-tabs" aria-label="Visualization">
|
| 57 |
+
<button type="button" data-tab="roll" aria-selected="true">Piano roll</button>
|
| 58 |
+
<button type="button" data-tab="score" aria-selected="false">Score</button>
|
| 59 |
+
<span data-field="pitch-range">Waiting for notes</span>
|
| 60 |
+
<label>Zoom <input data-action="zoom" type="range" min="1" max="8" step="1" value="1"></label>
|
| 61 |
+
</nav>
|
| 62 |
|
| 63 |
+
<div data-view="roll" class="ms-roll-view">
|
| 64 |
+
<canvas data-canvas="roll" height="460" aria-label="Color-coded multitrack piano roll"></canvas>
|
| 65 |
+
<p>Click the piano roll to seek. Use zoom to inspect dense passages.</p>
|
| 66 |
+
</div>
|
| 67 |
|
| 68 |
+
<div data-view="score" class="ms-score-view" hidden>
|
| 69 |
+
<div data-region="score-empty" class="ms-score-empty">
|
| 70 |
+
<span aria-hidden="true">♩</span>
|
| 71 |
+
<strong>No score generated yet</strong>
|
| 72 |
+
<p>Use the visible Score controls above the studio to generate it manually.</p>
|
| 73 |
+
</div>
|
| 74 |
+
<div data-region="score" class="ms-score-paper" hidden></div>
|
| 75 |
</div>
|
| 76 |
+
</section>
|
| 77 |
+
|
| 78 |
+
<aside class="ms-mixer" aria-label="Track mixer">
|
| 79 |
+
<div class="ms-tracks-heading">
|
| 80 |
+
<div><span class="ms-kicker">Track mixer</span><strong data-field="track-count">No tracks yet</strong></div>
|
| 81 |
+
<button type="button" data-action="reset-mix">Reset</button>
|
| 82 |
+
</div>
|
| 83 |
+
<div data-region="tracks" class="ms-track-list" aria-label="Instrument tracks"></div>
|
| 84 |
+
</aside>
|
| 85 |
+
</div>
|
| 86 |
|
| 87 |
<div class="ms-notation-info" hidden>
|
| 88 |
<span>Score</span>
|
|
|
|
| 94 |
</dl>
|
| 95 |
</div>
|
| 96 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
</section>
|
| 98 |
|
| 99 |
<div class="ms-announcer" aria-live="polite"></div>
|