Commit inicial: G Radio Player

Sistema de automatización de radio en Rust (GTK4 + GStreamer): reproductor
principal con crossfade y ducking, scheduler de comerciales, refill de
playlist, y herramientas auxiliares (pautaje, parrilla, botonera, visor,
buscador, playlist, grabador, reportes). Incluye sistema de skins y modos
de Players (paneles de reproducción configurables).
This commit is contained in:
2026-08-23 00:57:40 -05:00
commit 03084e2d5a
231 changed files with 31055 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
/* Skin "cyan" — paleta moderna azul-marino/turquesa. Solo colores:
mantiene el layout de G Radio Player intacto.
NOTA GTK4: los overrides de color de fondo usan background-image: image()
en vez de background-color, porque el tema del sistema puede pisar
background-color pero no background-image (ver LEEME.txt en ejemplo/). */
window { background-image: image(#0e1420); color: #dbe6f0; }
.header-bar { background-image: image(#131a28); border-bottom: 2px solid #1f2c3d; }
.clock-label { color: #22d3c5; }
.station-name-lbl { color: #22d3c5; }
.now-playing-bar { background-image: image(#161f30); }
.now-playing-label { color: #22d3c5; }
.version-lbl { color: #5c7a9c; }
.deck-frame { background-image: image(#131a28); border: 1px solid #22d3c5; }
.deck-frame > label { background-image: image(#1c2740); color: #22d3c5; }
.track-title { background-image: image(#1f2c46); }
.time-label { color: #22d3c5; }
scale trough { background-image: image(#1c2740); }
scale highlight { background-image: image(#22d3c5); }
scale slider { background-image: image(#22d3c5); border-color: #1aa89c; }
.control-btn { background-image: image(#22d3c5); color: #0b1622; border-color: #1aa89c; }
.control-btn:hover { background-image: image(#1aa89c); color: #ffffff; }
.control-btn:active { background-image: image(#12857c); color: #ffffff; }
button.deck-icon-btn { background-image: image(#1c2740); border-color: #22d3c5; }
button.deck-icon-btn:hover { background-image: image(#22364f); border-color: #4ee0d4; }
button.deck-icon-btn:active { background-image: image(#0f1928); }
button.global-icon-btn { background-image: image(#1c2740); border-color: #22d3c5; }
button.global-icon-btn:hover { background-image: image(#22364f); border-color: #4ee0d4; }
button.global-icon-btn:active { background-image: image(#0f1928); }
button.global-icon-btn:checked { background-image: image(#12857c); border-color: #22d3c5; }
.ext-sq-btn { background-image: image(#1c2740); color: #22d3c5; border-color: #1aa89c; }
.ext-sq-btn:hover { background-image: image(#1aa89c); color: #ffffff; }
.duck-btn { background-image: image(#22d3c5); color: #0b1622; border-color: #1aa89c; }
.duck-btn:checked, .duck-btn:hover { background-image: image(#1aa89c); color: #ffffff; }
.list-frame { background-image: image(#0f1522); border-color: #1f2c3d; }
.list-frame > label { background-image: image(#1c2740); }
.queue-list row { background-image: image(#0f1522); }
.queue-list row:nth-child(even) { background-image: image(#141c2c); }
.queue-list row:hover { background-image: image(#1c2740); }
.playing-row { background-image: image(#12857c); }
button.queue-idx-btn { background-image: image(#7c6fe0); }