Files
space-talkers/styles.css
2026-01-18 01:11:37 +02:00

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;
}
}