366 lines
6.1 KiB
CSS
366 lines
6.1 KiB
CSS
: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;
|
|
}
|
|
}
|