:root { --ink: #0c0f14; --void: #07090f; --nebula: #14202e; --glow: #3be2c4; --solar: #ffb347; --lilac: #c7b8ff; --peach: #f8c6a4; --steel: #9fb2c4; --mist: rgba(255, 255, 255, 0.08); --panel: rgba(13, 18, 26, 0.88); --edge: rgba(255, 255, 255, 0.12); --accent: #f4d35e; } * { box-sizing: border-box; } body { margin: 0; font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Grande", sans-serif; color: #edf0f7; background: radial-gradient(circle at 20% 20%, #1a2332, #0a0d13 45%, #07090f 80%); min-height: 100vh; } .app { min-height: 100vh; padding-bottom: 60px; } .brand-overlay { position: absolute; top: 16px; left: 16px; z-index: 10; background: rgba(10, 14, 20, 0.6); padding: 8px 14px; font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; font-size: clamp(20px, 2.5vw, 32px); } .menu-overlay { position: absolute; top: 16px; right: 16px; z-index: 10; } .speaker-overlay { position: absolute; top: 16px; right: 60px; z-index: 10; background: rgba(10, 14, 20, 0.6); padding: 6px 14px; font-size: 0.9rem; color: var(--steel); } .stage { position: relative; background: linear-gradient(160deg, #0d1420 0%, #0b0f16 55%, #101b29 100%); overflow: hidden; height: calc(100vh - 60px); } .space-canvas { width: 100%; height: 100%; display: block; } .stage-overlay { position: absolute; inset: 0; pointer-events: none; } .transcript-panel { position: absolute; left: 18px; bottom: 18px; width: var(--transcript-width, min(420px, 55vw)); background: rgba(9, 12, 18, var(--transcript-opacity, 0.95)); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 0; padding: var(--transcript-padding, 14px 16px); display: grid; gap: 8px; font-size: var(--transcript-font-size, 0.85rem); line-height: var(--transcript-line-height, 1.4); color: #e6e9f0; pointer-events: auto; user-select: text; -webkit-user-select: text; } .transcript-line { display: flex; gap: 10px; align-items: baseline; } .transcript-speaker { color: var(--steel); font-size: 0.7rem; letter-spacing: 0.1em; text-transform: uppercase; white-space: nowrap; min-width: 90px; } .transcript-speaker-hidden { visibility: hidden; } .transcript-text { color: #f1f4ff; user-select: text; -webkit-user-select: text; cursor: text; } .speaker-list { display: none; } .speaker-chip { display: flex; align-items: center; gap: 10px; font-size: 0.85rem; } .chip-dot { width: 10px; height: 10px; border-radius: 50%; box-shadow: 0 0 12px rgba(255, 255, 255, 0.35); } .transport { background: transparent; border-radius: 0; border: none; padding: 0; display: block; box-shadow: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 5; } .controls { display: flex; align-items: center; gap: 10px; position: absolute; left: 16px; bottom: 16px; z-index: 10; } .control-button { border: none; background: rgba(20, 25, 35, 0.85); color: var(--steel); font-weight: 500; padding: 6px 12px; border-radius: 0; cursor: pointer; box-shadow: none; font-size: 0.8rem; transition: background 0.2s ease, color 0.2s ease; } .control-button:hover { background: rgba(30, 38, 50, 0.95); color: #fff; } .timecode { font-variant-numeric: tabular-nums; color: var(--steel); font-size: 0.75rem; } .spectrogram-wrap { position: relative; height: 50px; border-radius: 0; background: #05070b; overflow: hidden; border: none; border-top: 1px solid rgba(255, 255, 255, 0.06); cursor: ew-resize; touch-action: none; } .spectrogram { position: absolute; inset: 0; width: 100%; height: 100%; } .spectrogram.overlay { pointer-events: none; } .scrub-hint { display: none; } .menu-button { border: none; background: rgba(10, 14, 20, 0.6); color: #e6e9f0; padding: 8px 14px; font-size: 1.2rem; cursor: pointer; } .menu-panel { position: absolute; top: calc(100% + 8px); right: 0; background: rgba(9, 12, 18, 0.95); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 0; padding: 12px 14px; min-width: 200px; display: none; gap: 10px; color: #e6e9f0; z-index: 10; } .menu-panel.open { display: grid; } .menu-title { font-size: 0.75rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(--steel); } .menu-row { display: grid; gap: 6px; font-size: 0.8rem; } .menu-row-checkbox { display: flex; align-items: center; gap: 8px; } .menu-row-checkbox input[type="checkbox"] { width: 16px; height: 16px; cursor: pointer; } .menu-row input[type="range"] { width: 100%; } /* Embedded waveform mode */ .embedded-waveform { display: none; position: absolute; left: 18px; bottom: 18px; width: var(--transcript-width, min(420px, 55vw)); height: 25%; background: rgba(5, 7, 11, 0.9); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.08); overflow: hidden; cursor: ew-resize; touch-action: none; } .app.waveform-embedded .embedded-waveform { display: block; } .app.waveform-embedded .transcript-panel { bottom: calc(25% + 28px); } .app.waveform-embedded .transport .spectrogram-wrap { display: none; } .app.waveform-embedded .transport .scrub-hint { display: none; } .spectrogram-wrap.loading::before { content: ""; position: absolute; inset: 0; background: linear-gradient( 90deg, transparent 0%, rgba(85, 230, 193, 0.15) 50%, transparent 100% ); animation: shimmer 1.5s infinite; z-index: 1; } .spectrogram-wrap.loading::after { content: "Loading waveform..."; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: var(--steel); font-size: 0.85rem; z-index: 2; pointer-events: none; } @keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } @media (max-width: 900px) { .topbar { flex-direction: column; align-items: flex-start; } .now-playing { align-self: stretch; text-align: left; } .speaker-list { position: static; margin: 16px; } .transcript-panel { position: static; width: auto; margin: 16px; } }