@import "tailwindcss"; /* ---- design tokens ----------------------------------------------------- */ /* Exposed to utilities: bg-surface, text-muted, border-line, font-serif, rounded-card, ease-fluid, animate-rise, etc. */ @theme { --color-bg: #0b0c10; --color-surface: #121319; --color-surface-2: #16171f; --color-line: rgba(255, 255, 255, 0.07); --color-line-strong: rgba(255, 255, 255, 0.13); --color-content: #edecf0; --color-muted: #aaacb9; --color-faint: #5a5c68; --color-accent: #ff5b7a; /* echoes the piano-roll playhead */ --color-accent-2: #ff8a5c; --color-accent-soft: rgba(255, 91, 122, 0.13); --color-accent-glow: rgba(255, 91, 122, 0.5); --color-ok: #4ad295; --radius-card: 12px; --ease-fluid: cubic-bezier(0.22, 1, 0.36, 1); --font-serif: "Instrument Serif", Georgia, "Times New Roman", serif; --font-sans: "Hanken Grotesk", system-ui, -apple-system, sans-serif; --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace; --animate-rise: rise 0.7s var(--ease-fluid) both; --animate-drag-glow: drag-glow 1.7s var(--ease-fluid) infinite; @keyframes drag-glow { 0%, 100% { box-shadow: 0 0 0 1px var(--color-accent-soft), 0 0 14px -2px var(--color-accent-glow); } 50% { box-shadow: 0 0 0 1px var(--color-accent), 0 0 40px 2px var(--color-accent-glow); } } @keyframes rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } } @keyframes ping { 0% { box-shadow: 0 0 0 0 var(--color-accent-glow); } 70% { box-shadow: 0 0 0 7px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } } } /* ---- base -------------------------------------------------------------- */ @layer base { html { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } body { font-family: var(--font-sans); min-height: 100vh; color: var(--color-content); background: radial-gradient( 900px 500px at 88% -8%, rgba(255, 91, 122, 0.1), transparent 60% ), /* A very dark grey page base — lifted off the near-black --color-bg (#0b0c10), which is kept for the dark insets inside the cards. */ #1b1c21; background-attachment: fixed; } /* Default button look; specific buttons override via utilities. */ button { font-family: var(--font-sans); font-size: 13px; font-weight: 500; color: var(--color-content); background: var(--color-surface-2); border: 1px solid var(--color-line-strong); padding: 8px 16px; border-radius: 9px; cursor: pointer; transition: background 0.15s var(--ease-fluid), border-color 0.15s var(--ease-fluid), transform 0.08s var(--ease-fluid); } button:hover { background: #20212b; border-color: rgba(255, 255, 255, 0.2); } button:active { transform: translateY(1px); } button:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; } button:disabled { opacity: 0.4; cursor: not-allowed; transform: none; } } /* ---- signature surfaces & buttons -------------------------------------- */ /* The frosted panel look shared by every card-like container. */ @utility card { background: linear-gradient(180deg, rgba(255, 255, 255, 0.025), transparent 120px), var(--color-surface); border: 1px solid var(--color-line); border-radius: var(--radius-card); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset, 0 18px 40px -28px rgba(0, 0, 0, 0.9); } /* The glowing accent gradient used by the primary download / transcribe CTAs. */ @utility btn-primary { background: linear-gradient(180deg, var(--color-accent), #e84668); border-color: transparent; color: #fff; font-weight: 600; box-shadow: 0 0 0 1px rgba(255, 91, 122, 0.4), 0 8px 22px -10px var(--color-accent-glow); &:hover:not(:disabled) { filter: brightness(1.08); background: linear-gradient(180deg, var(--color-accent), #e84668); border-color: transparent; } } /* ---- atmosphere (fixed overlays) --------------------------------------- */ .grain { position: fixed; inset: 0; pointer-events: none; z-index: 100; opacity: 0.035; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); } /* Status dot: colour + ping keyed off the body's transcription state. */ body[data-state="transcribing"] .status-dot { background: var(--color-accent); animation: ping 1.3s var(--ease-fluid) infinite; } body[data-state="done"] .status-dot { background: var(--color-ok); } body[data-state="error"] .status-dot { background: var(--color-accent); } /* Drop overlay fades in via the body.drag class (set outside React). */ body.drag .drop-overlay { opacity: 1; } /* ---- crossfade slider -------------------------------------------------- */ /* Range thumbs need vendor pseudo-elements that utilities can't reach. */ .mix-slider { appearance: none; width: 170px; height: 4px; border-radius: 999px; background: linear-gradient(90deg, var(--color-muted), var(--color-accent)); cursor: pointer; } .mix-slider:disabled { cursor: not-allowed; filter: grayscale(1); } .mix-slider::-webkit-slider-thumb { appearance: none; width: 16px; height: 16px; border-radius: 50%; background: #fff; border: 2px solid var(--color-accent); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); transition: transform 0.1s var(--ease-fluid); } .mix-slider::-webkit-slider-thumb:hover { transform: scale(1.15); } .mix-slider::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: #fff; border: 2px solid var(--color-accent); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } } /* ======================================================================== HENDRIX LISTENING LAB Editorial evidence-board direction for the configurable comparison page. ======================================================================== */ .compare-body { /* colour */ --lab-paper: #f1eee3; --lab-paper-deep: #e3dfd1; --lab-ink: #171714; --lab-ink-soft: #292925; --lab-muted: #6d6b62; --lab-rule: rgba(23, 23, 20, 0.28); --lab-rule-light: rgba(241, 238, 227, 0.2); --lab-signal: #ff573c; --lab-acid: #d9ef4a; --lab-blue: #55c4cf; --lab-focus: #116fdb; --lab-success: #88a829; --lab-warning: #d08a12; --lab-danger: #dc3f2d; /* typography */ --lab-display: "Bodoni Moda", Baskerville, "Times New Roman", serif; --lab-body: "Manrope", "Avenir Next", "Helvetica Neue", sans-serif; --lab-mono: "IBM Plex Mono", "Courier New", monospace; --lab-xs: 0.68rem; --lab-sm: 0.78rem; --lab-base: 0.96rem; --lab-lg: 1.2rem; --lab-xl: clamp(2rem, 4vw, 4.4rem); --lab-2xl: clamp(3.8rem, 9vw, 9.5rem); /* space, edge, depth, motion */ --lab-1: 0.3rem; --lab-2: 0.6rem; --lab-3: 0.9rem; --lab-4: 1.2rem; --lab-6: 1.8rem; --lab-8: 2.4rem; --lab-12: 3.6rem; --lab-radius-sm: 2px; --lab-radius-md: 8px; --lab-shadow: 8px 8px 0 rgba(23, 23, 20, 0.15); --lab-fast: 120ms; --lab-base-duration: 240ms; --lab-slow: 620ms; --lab-ease: cubic-bezier(0.22, 1, 0.36, 1); min-width: 320px; color: var(--lab-ink); background-color: var(--lab-paper); background-image: linear-gradient(rgba(23, 23, 20, 0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(23, 23, 20, 0.018) 1px, transparent 1px); background-size: 28px 28px; background-attachment: fixed; font-family: var(--lab-body); } .compare-body *, .compare-body *::before, .compare-body *::after { box-sizing: border-box; } .compare-body button, .compare-body input { font: inherit; } .compare-body button { min-height: 44px; color: inherit; background: none; border: 0; border-radius: 0; padding: 0; } .compare-body button:hover { background: none; border-color: transparent; } .compare-body button:focus-visible, .compare-body a:focus-visible, .compare-body input:focus-visible { outline: 3px solid var(--lab-focus); outline-offset: 3px; } .compare-body button:active:not(:disabled) { transform: translateY(1px); } .compare-body button:disabled, .compare-body input:disabled { opacity: 0.38; cursor: not-allowed; } .compare-body a { color: inherit; } .compare-app { min-height: 100vh; position: relative; isolation: isolate; } .compare-grain { position: fixed; inset: 0; z-index: 100; pointer-events: none; opacity: 0.055; mix-blend-mode: multiply; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.65'/%3E%3C/svg%3E"); } @keyframes lab-enter { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } } @keyframes signal-travel { 0% { transform: translateX(-16px); opacity: 0; } 40%, 80% { opacity: 1; } 100% { transform: translateX(16px); opacity: 0; } } @keyframes signal-pulse { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--node-accent) 65%, transparent); } 50% { box-shadow: 0 0 0 7px transparent; } } .compare-masthead { width: min(100% - 48px, 1880px); margin: 0 auto; min-height: 430px; display: grid; grid-template-columns: minmax(160px, 0.55fr) minmax(520px, 2fr) minmax(190px, 0.65fr); gap: var(--lab-8); align-items: start; padding: 34px 0 42px; border-bottom: 2px solid var(--lab-ink); animation: lab-enter var(--lab-slow) var(--lab-ease) both; } .compare-wordmark { display: inline-flex; flex-direction: column; align-items: flex-start; width: fit-content; text-decoration: none; } .compare-wordmark > span { font: 700 clamp(1.35rem, 2.4vw, 2.4rem)/0.9 var(--lab-body); letter-spacing: -0.075em; } .compare-wordmark > small, .compare-kicker, .section-index, .preset-label { font: 600 var(--lab-xs)/1.2 var(--lab-mono); letter-spacing: 0.12em; text-transform: uppercase; } .compare-wordmark > small { margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--lab-ink); } .compare-intro { max-width: 1040px; padding-top: 46px; } .compare-kicker { margin: 0 0 var(--lab-4); color: var(--lab-danger); } .compare-intro h1 { max-width: 960px; margin: 0; font: 600 var(--lab-2xl)/0.78 var(--lab-display); letter-spacing: -0.065em; text-wrap: balance; } .compare-intro h1 em { color: var(--lab-signal); font-weight: 600; } .compare-intro > p:last-child { width: min(610px, 75%); margin: 40px 0 0 auto; padding-left: 18px; border-left: 7px solid var(--lab-acid); font-size: var(--lab-base); line-height: 1.65; text-wrap: pretty; } .compare-config-button { justify-self: end; display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 10px; width: 100%; max-width: 240px; padding: 12px 0 !important; border-top: 1px solid var(--lab-ink) !important; border-bottom: 1px solid var(--lab-ink) !important; font-size: var(--lab-sm) !important; text-align: left; transition: padding var(--lab-base-duration) var(--lab-ease), color var(--lab-fast); } .compare-config-button:hover { padding-left: 8px !important; padding-right: 8px !important; color: var(--lab-danger); } .compare-config-button > .config-button-count { display: grid; place-items: center; width: 27px; height: 27px; color: var(--lab-paper); background: var(--lab-ink); font: 500 var(--lab-xs)/1 var(--lab-mono); } .compare-main { width: min(100% - 48px, 1880px); margin: 0 auto; } .preset-strip { max-width: 100%; min-height: 66px; display: flex; align-items: stretch; border-bottom: 1px solid var(--lab-ink); contain: inline-size; animation: lab-enter var(--lab-slow) var(--lab-ease) 80ms both; } .preset-label { display: flex; align-items: center; padding-right: 28px; color: var(--lab-muted); } .preset-button { position: relative; min-width: 132px; padding: 0 20px !important; border-left: 1px solid var(--lab-rule) !important; font-size: var(--lab-sm) !important; font-weight: 600 !important; transition: color var(--lab-fast), background var(--lab-fast) !important; } .preset-button:hover, .preset-button.is-active { color: var(--lab-paper) !important; background: var(--lab-ink) !important; } .preset-button.is-active::after { content: ""; position: absolute; right: 8px; top: 8px; width: 7px; height: 7px; background: var(--lab-acid); } .signal-rail { min-height: 132px; display: grid; grid-template-columns: 115px 1fr 100px; align-items: stretch; color: var(--lab-paper); background: var(--lab-ink); border-bottom: 1px solid var(--lab-ink); overflow: hidden; animation: lab-enter var(--lab-slow) var(--lab-ease) 130ms both; } .signal-origin, .signal-output { display: flex; flex-direction: column; justify-content: center; gap: 5px; padding: 18px; font-family: var(--lab-mono); } .signal-origin { border-right: 1px solid var(--lab-rule-light); } .signal-output { border-left: 1px solid var(--lab-rule-light); text-align: right; } .signal-origin span, .signal-output span { color: rgba(241, 238, 227, 0.55); font-size: 0.6rem; letter-spacing: 0.16em; } .signal-origin strong, .signal-output strong { font-size: 0.88rem; } .signal-track { position: relative; display: grid; grid-template-columns: repeat(var(--rail-count), minmax(125px, 1fr)); align-items: center; gap: 10px; padding: 18px 32px; overflow-x: auto; } .signal-track::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 1px; background: rgba(241, 238, 227, 0.45); } .signal-track::after { content: ""; position: absolute; top: calc(50% - 3px); left: 12px; width: 24px; height: 7px; background: var(--lab-acid); animation: signal-travel 1.8s linear infinite; } .signal-node { --node-accent: var(--lab-signal); position: relative; z-index: 1; min-width: 128px; display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto; column-gap: 9px; align-items: center; padding: 11px 12px; color: var(--lab-paper); background: var(--lab-ink-soft); border: 1px solid rgba(241, 238, 227, 0.3); box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.32); animation: lab-enter 400ms var(--lab-ease) var(--node-delay) both; } .signal-node strong { font-size: 0.78rem; line-height: 1.2; } .signal-node small { grid-column: 2; color: rgba(241, 238, 227, 0.55); font: 400 0.6rem/1.2 var(--lab-mono); text-transform: uppercase; } .signal-light { grid-row: 1 / 3; width: 10px; height: 10px; background: #575751; border: 2px solid var(--lab-ink-soft); outline: 1px solid rgba(241, 238, 227, 0.35); } .signal-light.is-transcribing { background: var(--node-accent); animation: signal-pulse 1.2s ease-out infinite; } .signal-light.is-done { background: var(--lab-acid); } .signal-light.is-error, .signal-light.is-offline { background: var(--lab-danger); } .signal-empty { position: relative; z-index: 1; justify-self: center; padding: 0 18px !important; color: var(--lab-paper) !important; background: var(--lab-ink) !important; border: 1px solid var(--lab-rule-light) !important; font-size: var(--lab-sm) !important; } .source-console, .outputs-section { padding: 76px 0 80px; border-bottom: 2px solid var(--lab-ink); } .source-console-head, .outputs-heading { display: grid; grid-template-columns: minmax(280px, 1fr) minmax(240px, 0.7fr); align-items: end; gap: 40px; margin-bottom: 28px; } .section-index { display: block; margin-bottom: 10px; color: var(--lab-danger); } .source-console-head h2, .outputs-heading h2 { margin: 0; font: 600 var(--lab-xl)/0.95 var(--lab-display); letter-spacing: -0.045em; } .source-console-head > p, .outputs-heading > p { justify-self: end; max-width: 430px; margin: 0; color: var(--lab-muted); font-size: var(--lab-sm); line-height: 1.55; } .source-actions { display: grid; grid-template-columns: minmax(210px, 0.75fr) minmax(300px, 1.6fr) minmax(220px, 0.8fr); border: 2px solid var(--lab-ink); box-shadow: var(--lab-shadow); } .upload-plate, .run-button { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; min-height: 136px; padding: 22px 24px !important; transition: background var(--lab-fast), color var(--lab-fast) !important; } .upload-plate { border-right: 1px solid var(--lab-ink) !important; } .upload-plate svg { margin-bottom: 15px; } .upload-plate > span, .run-button > span { font-size: var(--lab-base); font-weight: 700; } .upload-plate > small, .run-button > small { margin-top: 6px; color: var(--lab-muted); font: 400 0.62rem/1.4 var(--lab-mono); } .upload-plate:hover { color: var(--lab-paper) !important; background: var(--lab-ink) !important; } .upload-plate:hover small { color: rgba(241, 238, 227, 0.6); } .selected-source { min-width: 0; display: flex; flex-direction: column; justify-content: center; padding: 22px 30px; background: rgba(255, 255, 255, 0.24); } .selected-source > span { margin-bottom: 10px; color: var(--lab-muted); font: 600 0.62rem/1.2 var(--lab-mono); letter-spacing: 0.14em; } .selected-source > strong { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 600 clamp(1.25rem, 2.5vw, 2.5rem)/1 var(--lab-display); letter-spacing: -0.035em; } .selected-source > small { margin-top: 10px; color: var(--lab-muted); font-size: var(--lab-sm); } .selected-source.has-file { background: var(--lab-acid); } .selected-source.has-file > span, .selected-source.has-file > small { color: rgba(23, 23, 20, 0.68); } .run-button { color: var(--lab-paper) !important; background: var(--lab-signal) !important; border-left: 1px solid var(--lab-ink) !important; } .run-button small { color: rgba(23, 23, 20, 0.62); } .run-button:hover:not(:disabled) { background: var(--lab-ink) !important; } .run-button:hover:not(:disabled) small { color: rgba(241, 238, 227, 0.6); } .source-error { margin-top: 18px; padding: 14px 18px; color: var(--lab-paper); background: var(--lab-danger); border-left: 8px solid var(--lab-ink); font-size: var(--lab-sm); } .record-crate { margin-top: 42px; } .crate-heading { display: flex; align-items: end; justify-content: space-between; gap: 20px; padding-bottom: 13px; border-bottom: 1px solid var(--lab-ink); } .crate-heading > div { display: flex; align-items: baseline; gap: 18px; } .crate-heading span { color: var(--lab-danger); font: 600 var(--lab-xs)/1.2 var(--lab-mono); letter-spacing: 0.12em; } .crate-heading strong { font: 600 var(--lab-lg)/1 var(--lab-display); } .crate-heading > small { max-width: 520px; color: var(--lab-muted); font-size: var(--lab-xs); text-align: right; } .crate-scroll { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(230px, 1fr); overflow-x: auto; gap: 1px; padding: 1px 0 14px; scrollbar-color: var(--lab-ink) var(--lab-paper-deep); } .record-sleeve { position: relative; min-height: 235px; display: flex; flex-direction: column; align-items: flex-start; padding: 18px !important; text-align: left; background: #dcd7c7 !important; border: 1px solid var(--lab-ink) !important; overflow: hidden; transition: transform var(--lab-base-duration) var(--lab-ease), box-shadow var(--lab-base-duration) var(--lab-ease) !important; } .record-sleeve:nth-child(4n + 1) { background: #e65a41 !important; } .record-sleeve:nth-child(4n + 2) { background: #67bdc8 !important; } .record-sleeve:nth-child(4n + 3) { background: #d5e45a !important; } .record-sleeve:nth-child(4n + 4) { background: #e3b64a !important; } .record-sleeve::after { content: ""; position: absolute; right: -54px; bottom: -54px; width: 150px; height: 150px; border: 28px solid rgba(23, 23, 20, 0.12); border-radius: 50%; } .record-sleeve:hover:not(:disabled) { z-index: 2; transform: translateY(-7px) rotate(-0.4deg); box-shadow: 7px 8px 0 var(--lab-ink); } .record-sleeve:active:not(:disabled) { transform: translateY(-2px); } .record-sleeve.is-loading { background: var(--lab-ink) !important; color: var(--lab-paper); } .sleeve-number { margin-left: auto; font: 500 0.66rem/1 var(--lab-mono); } .sleeve-genre { margin-top: 46px; font: 600 0.62rem/1 var(--lab-mono); letter-spacing: 0.1em; text-transform: uppercase; } .record-sleeve strong { position: relative; z-index: 1; max-width: 94%; margin-top: 9px; font: 600 1.25rem/1.05 var(--lab-display); letter-spacing: -0.025em; } .record-sleeve small { position: relative; z-index: 1; margin-top: auto; padding-top: 18px; font-size: 0.66rem; line-height: 1.35; } .crate-state { min-height: 120px; display: grid; place-items: center; padding: 20px; color: var(--lab-muted); border-bottom: 1px solid var(--lab-rule); font-size: var(--lab-sm); text-align: center; } .crate-state.is-error { color: var(--lab-danger); } .crate-state code { padding: 2px 5px; color: var(--lab-ink); background: var(--lab-paper-deep); font-family: var(--lab-mono); } .transport-console { position: sticky; top: 10px; z-index: 20; min-height: 78px; display: grid; grid-template-columns: 58px 112px minmax(140px, 1fr) minmax(235px, auto) minmax(260px, auto); align-items: center; gap: 18px; margin: 26px 0; padding: 10px 16px 10px 10px; color: var(--lab-paper); background: rgba(23, 23, 20, 0.97); border: 1px solid var(--lab-ink); box-shadow: 6px 7px 0 rgba(23, 23, 20, 0.17); backdrop-filter: blur(12px); } .transport-play { display: grid; place-items: center; width: 56px; height: 56px; min-height: 56px !important; color: var(--lab-ink) !important; background: var(--lab-acid) !important; } .transport-play:hover:not(:disabled) { background: var(--lab-signal) !important; } .transport-play svg { width: 20px; height: 20px; } .transport-clock { font: 500 0.72rem/1 var(--lab-mono); font-variant-numeric: tabular-nums; } .transport-seek, .transport-mix input { appearance: none; height: 3px; background: rgba(241, 238, 227, 0.32); cursor: pointer; } .transport-seek { width: 100%; } .transport-seek::-webkit-slider-thumb, .transport-mix input::-webkit-slider-thumb { appearance: none; width: 15px; height: 15px; background: var(--lab-signal); border: 2px solid var(--lab-ink); outline: 1px solid var(--lab-paper); border-radius: 0; } .transport-seek::-moz-range-thumb, .transport-mix input::-moz-range-thumb { width: 12px; height: 12px; background: var(--lab-signal); border: 2px solid var(--lab-paper); border-radius: 0; } .transport-mix { display: grid; grid-template-columns: auto minmax(90px, 1fr) auto; align-items: center; gap: 8px; color: rgba(241, 238, 227, 0.62); font: 500 0.59rem/1 var(--lab-mono); text-transform: uppercase; } .listen-switch { display: flex; align-items: center; justify-content: flex-end; gap: 4px; overflow-x: auto; } .listen-switch > span { flex: 0 0 auto; margin-right: 5px; color: rgba(241, 238, 227, 0.48); font: 500 0.58rem/1 var(--lab-mono); text-transform: uppercase; } .listen-switch button { flex: 0 0 auto; min-height: 36px !important; padding: 0 10px !important; color: rgba(241, 238, 227, 0.65) !important; border: 1px solid var(--lab-rule-light) !important; font-size: 0.68rem !important; } .listen-switch button:hover:not(:disabled), .listen-switch button.is-active { color: var(--lab-ink) !important; background: var(--model-accent) !important; border-color: var(--model-accent) !important; } .outputs-section { padding-top: 56px; } .model-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 540px), 1fr)); gap: 22px; align-items: start; } .model-panel { --model-accent: var(--lab-signal); min-width: 0; background: var(--lab-ink); border: 2px solid var(--lab-ink); box-shadow: 7px 7px 0 rgba(23, 23, 20, 0.14); animation: lab-enter var(--lab-slow) var(--lab-ease) calc(var(--panel-order) * 65ms) both; } .model-panel.status-transcribing { box-shadow: 7px 7px 0 var(--model-accent); } .model-panel.status-error { border-color: var(--lab-danger); } .model-panel-head { min-height: 114px; display: flex; justify-content: space-between; align-items: flex-start; gap: 18px; padding: 18px 20px; color: var(--lab-paper); border-bottom: 1px solid var(--lab-rule-light); } .model-panel-head > div:first-child > span { color: var(--model-accent); font: 600 0.59rem/1 var(--lab-mono); letter-spacing: 0.12em; text-transform: uppercase; } .model-panel h3 { margin: 5px 0 3px; font: 600 2.1rem/0.95 var(--lab-display); letter-spacing: -0.035em; } .model-panel-head > div:first-child > small { color: rgba(241, 238, 227, 0.5); font-size: 0.66rem; } .model-metrics { display: grid; grid-template-columns: repeat(2, auto); gap: 8px 18px; text-align: right; } .model-state { grid-column: 1 / -1; display: flex; align-items: center; justify-content: flex-end; gap: 7px; color: rgba(241, 238, 227, 0.62); font: 500 0.58rem/1 var(--lab-mono); text-transform: uppercase; } .model-state i { width: 8px; height: 8px; background: #5f5f58; } .status-transcribing .model-state i { background: var(--model-accent); animation: signal-pulse 1.2s ease-out infinite; } .status-done .model-state i { background: var(--lab-acid); } .status-error .model-state i { background: var(--lab-danger); } .model-metrics > strong { font: 500 0.75rem/1.2 var(--lab-mono); } .model-metrics > strong > small { display: block; margin-top: 3px; color: rgba(241, 238, 227, 0.38); font-size: 0.53rem; font-weight: 400; text-transform: uppercase; } .roll-frame { position: relative; min-height: 390px; background: #0b0c10; overflow: hidden; } .roll-frame canvas { display: block; width: 100%; height: 390px; } .roll-state { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 35px; color: rgba(241, 238, 227, 0.58); background: rgba(11, 12, 16, 0.9); text-align: center; } .roll-state > span { font: 600 1.55rem/1 var(--lab-display); color: var(--lab-paper); } .roll-state > small { max-width: 410px; font-size: 0.72rem; line-height: 1.5; } .roll-state.is-error { background: color-mix(in srgb, var(--lab-danger) 18%, rgba(11, 12, 16, 0.96)); } .roll-state button { margin-top: 10px; padding: 0 14px !important; color: var(--lab-paper) !important; border: 1px solid rgba(241, 238, 227, 0.5) !important; font-size: 0.7rem !important; } .roll-state button:hover { color: var(--lab-ink) !important; background: var(--lab-paper) !important; } .panel-progress { position: absolute; left: 0; bottom: 0; height: 4px; background: var(--model-accent); transition: width 360ms var(--lab-ease); } .model-panel-foot { min-height: 57px; display: flex; align-items: center; gap: 12px; padding: 10px 14px; color: var(--lab-paper); border-top: 1px solid var(--lab-rule-light); } .instrument-tape { min-width: 0; flex: 1; display: flex; align-items: center; gap: 8px 12px; overflow-x: auto; scrollbar-width: thin; } .instrument-tape > span { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 5px; color: rgba(241, 238, 227, 0.58); font-size: 0.61rem; } .instrument-tape > span > i { width: 8px; height: 8px; } .midi-download { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 5px; min-height: 34px; padding: 0 10px; color: var(--lab-ink) !important; background: var(--lab-acid); font: 600 0.61rem/34px var(--lab-mono); text-decoration: none; } .midi-download:hover { background: var(--model-accent); } .outputs-empty { width: 100%; min-height: 240px !important; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; border: 2px dashed var(--lab-rule) !important; } .outputs-empty strong { font: 600 1.8rem/1 var(--lab-display); } .outputs-empty span { color: var(--lab-muted); font-size: var(--lab-sm); } .outputs-empty:hover { color: var(--lab-paper) !important; background: var(--lab-ink) !important; border-color: var(--lab-ink) !important; } .compare-footer { width: min(100% - 48px, 1880px); min-height: 180px; margin: 0 auto; display: grid; grid-template-columns: 1fr minmax(280px, 1fr) auto; align-items: center; gap: 30px; font-size: var(--lab-xs); } .compare-footer > span { font: 600 var(--lab-xs)/1.4 var(--lab-mono); letter-spacing: 0.1em; } .compare-footer p { color: var(--lab-muted); line-height: 1.5; } .compare-footer a { padding: 10px 0; border-bottom: 1px solid var(--lab-ink); font-weight: 700; text-decoration: none; } .compare-footer a:hover { color: var(--lab-danger); } .drop-field { position: fixed; inset: 18px; z-index: 80; display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--lab-paper); background: rgba(23, 23, 20, 0.94); border: 4px solid var(--lab-acid); pointer-events: none; backdrop-filter: blur(8px); } .drop-field span { color: var(--lab-acid); font: 600 var(--lab-xs)/1 var(--lab-mono); letter-spacing: 0.16em; } .drop-field strong { margin-top: 12px; font: 600 clamp(2rem, 6vw, 5rem)/0.95 var(--lab-display); } .config-backdrop { position: fixed; inset: 0; z-index: 120; display: flex; justify-content: flex-end; background: rgba(23, 23, 20, 0.62); backdrop-filter: blur(5px); } .config-drawer { width: min(680px, 100%); height: 100%; overflow-y: auto; padding: 34px; color: var(--lab-ink); background: var(--lab-paper); border-left: 2px solid var(--lab-ink); box-shadow: -16px 0 0 rgba(23, 23, 20, 0.13); animation: lab-enter 340ms var(--lab-ease) both; } .config-drawer > header { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; padding-bottom: 22px; border-bottom: 2px solid var(--lab-ink); } .config-drawer > header span { color: var(--lab-danger); font: 600 var(--lab-xs)/1 var(--lab-mono); letter-spacing: 0.12em; } .config-drawer h2 { margin: 8px 0 0; font: 600 clamp(2.4rem, 7vw, 4.4rem)/0.9 var(--lab-display); letter-spacing: -0.05em; } .config-close { width: 48px; min-height: 48px !important; display: grid; place-items: center; border: 1px solid var(--lab-ink) !important; } .config-close:hover { color: var(--lab-paper) !important; background: var(--lab-ink) !important; } .config-lede { max-width: 530px; margin: 22px 0; color: var(--lab-muted); font-size: var(--lab-sm); line-height: 1.6; } .config-presets { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 24px; } .config-presets button { min-height: 36px !important; padding: 0 12px !important; border: 1px solid var(--lab-rule) !important; font-size: 0.68rem !important; } .config-presets button:hover { color: var(--lab-paper) !important; background: var(--lab-ink) !important; } .config-models { display: grid; gap: 10px; } .config-model { --model-accent: var(--lab-signal); position: relative; display: grid; grid-template-columns: 1fr auto; gap: 15px; padding: 16px; background: rgba(255, 255, 255, 0.26); border: 1px solid var(--lab-rule); } .config-model::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 5px; background: transparent; } .config-model.is-enabled::before { background: var(--model-accent); } .config-toggle { grid-column: 1 / -1; display: grid; grid-template-columns: auto auto 1fr auto; align-items: center; gap: 10px; cursor: pointer; } .config-toggle input { position: absolute; opacity: 0; pointer-events: none; } .config-toggle > span { position: relative; width: 38px; height: 21px; background: #bbb7a9; border: 1px solid var(--lab-ink); } .config-toggle > span::after { content: ""; position: absolute; left: 3px; top: 3px; width: 13px; height: 13px; background: var(--lab-paper); border: 1px solid var(--lab-ink); transition: transform var(--lab-fast); } .config-toggle input:checked + span { background: var(--model-accent); } .config-toggle input:checked + span::after { transform: translateX(17px); } .config-toggle input:focus-visible + span { outline: 3px solid var(--lab-focus); outline-offset: 3px; } .config-toggle strong { font: 600 1.18rem/1 var(--lab-display); } .config-toggle small { color: var(--lab-muted); font: 500 0.57rem/1 var(--lab-mono); text-transform: uppercase; } .endpoint-field { min-width: 0; display: grid; gap: 5px; } .endpoint-field > span { color: var(--lab-muted); font: 500 0.55rem/1 var(--lab-mono); text-transform: uppercase; } .endpoint-field input { min-width: 0; width: 100%; height: 37px; padding: 0 9px; color: var(--lab-ink); background: var(--lab-paper); border: 1px solid var(--lab-rule); border-radius: 0; font: 400 0.68rem/1 var(--lab-mono); } .endpoint-health { align-self: end; display: flex; align-items: center; gap: 6px; min-width: 72px; height: 37px; color: var(--lab-muted); font: 500 0.56rem/1 var(--lab-mono); text-transform: uppercase; } .endpoint-health i { width: 7px; height: 7px; background: var(--lab-warning); } .endpoint-health.is-online i { background: var(--lab-success); } .endpoint-health.is-offline i { background: var(--lab-danger); } .config-note { display: grid; grid-template-columns: 130px 1fr; gap: 14px; margin: 22px 0; padding: 15px 0; border-top: 1px solid var(--lab-rule); border-bottom: 1px solid var(--lab-rule); font-size: var(--lab-xs); line-height: 1.5; } .config-note span { color: var(--lab-muted); } .config-note code { color: var(--lab-ink); font-family: var(--lab-mono); } .config-done { width: 100%; min-height: 58px !important; color: var(--lab-paper) !important; background: var(--lab-ink) !important; font-weight: 700 !important; } .config-done:hover:not(:disabled) { color: var(--lab-ink) !important; background: var(--lab-acid) !important; } @media (min-width: 1600px) { .model-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .source-actions { grid-template-columns: 0.65fr 1.8fr 0.7fr; } } @media (max-width: 1180px) { .compare-masthead { min-height: 390px; grid-template-columns: 160px 1fr; } .compare-config-button { grid-column: 1; grid-row: 2; justify-self: start; align-self: end; } .compare-intro { grid-column: 2; grid-row: 1 / 3; } .signal-rail { grid-template-columns: 90px 1fr 80px; } .signal-track { padding-left: 20px; padding-right: 20px; } .source-actions { grid-template-columns: 0.8fr 1.4fr; } .run-button { grid-column: 1 / -1; min-height: 88px; border-top: 1px solid var(--lab-ink) !important; border-left: 0 !important; } .transport-console { grid-template-columns: 58px 105px 1fr minmax(220px, auto); } .listen-switch { grid-column: 1 / -1; justify-content: flex-start; padding: 4px 0; } } @media (max-width: 760px) { .compare-masthead, .compare-main, .compare-footer { width: min(100% - 28px, 1880px); } .compare-masthead { min-height: auto; grid-template-columns: 1fr auto; gap: 24px; padding: 22px 0 32px; } .compare-wordmark { grid-column: 1; } .compare-config-button { grid-column: 2; grid-row: 1; width: 48px; height: 48px; min-height: 48px; padding: 0 !important; display: grid; place-items: center; border: 1px solid var(--lab-ink) !important; } .compare-config-button:hover { padding: 0 !important; } .compare-config-button > .config-button-label { display: none; } .compare-config-button > svg { width: 19px; height: 19px; } .compare-config-button > .config-button-count { position: absolute; margin: -34px 0 0 36px; width: 21px; height: 21px; font-size: 0.58rem; } .compare-intro { grid-column: 1 / -1; grid-row: 2; padding-top: 22px; } .compare-intro h1 { font-size: clamp(3.5rem, 18vw, 6.8rem); line-height: 0.82; } .compare-intro > p:last-child { width: 100%; margin-top: 30px; } .preset-strip { overflow-x: auto; } .preset-label { position: sticky; left: 0; z-index: 1; padding: 0 14px; background: var(--lab-paper); } .preset-button { min-width: 126px; } .signal-rail { grid-template-columns: 68px minmax(0, 1fr); min-height: 118px; } .signal-output { display: none; } .signal-origin { padding: 10px; } .signal-track { grid-auto-flow: column; grid-auto-columns: 145px; grid-template-columns: none; padding: 15px; } .source-console, .outputs-section { padding: 54px 0; } .source-console-head, .outputs-heading { grid-template-columns: 1fr; gap: 16px; } .source-console-head > p, .outputs-heading > p { justify-self: start; } .source-actions { grid-template-columns: 1fr; box-shadow: 5px 5px 0 rgba(23, 23, 20, 0.15); } .upload-plate { min-height: 104px; border-right: 0 !important; border-bottom: 1px solid var(--lab-ink) !important; } .selected-source { min-height: 112px; padding: 22px; } .run-button { grid-column: auto; min-height: 86px; } .crate-heading { align-items: flex-start; flex-direction: column; } .crate-heading > small { text-align: left; } .crate-scroll { grid-auto-columns: minmax(205px, 78vw); } .record-sleeve { min-height: 220px; } .transport-console { top: 6px; grid-template-columns: 52px 1fr; gap: 11px; padding: 8px; } .transport-play { width: 50px; height: 50px; min-height: 50px !important; } .transport-clock { text-align: right; } .transport-seek, .transport-mix, .listen-switch { grid-column: 1 / -1; } .transport-mix { padding: 5px; } .listen-switch { justify-content: flex-start; } .model-grid { grid-template-columns: 1fr; } .model-panel-head { min-height: 130px; } .model-panel h3 { font-size: 1.8rem; } .roll-frame, .roll-frame canvas { min-height: 340px; height: 340px; } .compare-footer { grid-template-columns: 1fr; gap: 14px; padding: 38px 0; } .compare-footer p { margin: 0; } .compare-footer a { width: fit-content; } .config-drawer { padding: 22px 16px 32px; } } @media (max-width: 460px) { .compare-masthead, .compare-main, .compare-footer { width: min(100% - 20px, 1880px); } .compare-intro h1 { font-size: clamp(3rem, 17vw, 4.9rem); } .compare-intro > p:last-child { font-size: 0.86rem; } .signal-origin { display: none; } .signal-rail { grid-template-columns: 1fr; } .source-console-head h2, .outputs-heading h2 { font-size: 2.6rem; } .selected-source > strong { font-size: 1.5rem; } .model-panel-head { flex-direction: column; } .model-metrics { width: 100%; grid-template-columns: 1fr auto auto; text-align: left; } .model-state { grid-column: auto; justify-content: flex-start; } .model-metrics > strong { text-align: right; } .roll-frame, .roll-frame canvas { min-height: 300px; height: 300px; } .config-model { grid-template-columns: 1fr; } .endpoint-health { align-self: start; height: auto; } .config-note { grid-template-columns: 1fr; } }