Spaces:
Running
Running
UI fixes: reels->right, visible feet, signal bar, clean ghost lines, tap-to-talk label
Browse files- radio.html +19 -16
radio.html
CHANGED
|
@@ -111,9 +111,11 @@ body.intimate .room-lamp{ /* direct_address: dim the room */
|
|
| 111 |
mix-blend-mode:overlay;opacity:.5;
|
| 112 |
}
|
| 113 |
/* rubber feet */
|
| 114 |
-
.foot{position:absolute;bottom:-
|
| 115 |
-
background:linear-gradient(180deg,#
|
| 116 |
-
|
|
|
|
|
|
|
| 117 |
|
| 118 |
/* inset faceplate */
|
| 119 |
.bezel{
|
|
@@ -277,7 +279,7 @@ body.broadcasting .onair .label{
|
|
| 277 |
text-wrap:balance;
|
| 278 |
}
|
| 279 |
.line.in{opacity:1;transform:translateY(0)}
|
| 280 |
-
.line.
|
| 281 |
.line.current{color:var(--dial-ivory)}
|
| 282 |
.line .w{opacity:.18;filter:blur(2px);
|
| 283 |
transition:opacity .5s ease, filter .5s ease, color .5s ease, text-shadow .5s ease}
|
|
@@ -387,11 +389,11 @@ body.powered .power-knob::after{background:linear-gradient(180deg,#fff,var(--emb
|
|
| 387 |
body.powered .power-knob .pwr-txt{transform:translateX(-50%) rotate(-28deg);color:#ffd2b0}
|
| 388 |
|
| 389 |
/* signal-integrity gauge (diegetic SIGNAL meter) */
|
| 390 |
-
.gauge-wrap{display:flex;flex-direction:column;align-items:
|
| 391 |
.gauge{
|
| 392 |
-
position:relative;width:100%;height:
|
| 393 |
-
background:rgba(255,255,255,.
|
| 394 |
-
box-shadow:0 0 0 1px rgba(0,0,0,0.
|
| 395 |
}
|
| 396 |
.gauge .ticks{display:none}
|
| 397 |
.gauge .fill{
|
|
@@ -550,15 +552,11 @@ body.locked .gauge .fill{
|
|
| 550 |
<!-- ===== control deck ===== -->
|
| 551 |
<div class="deck">
|
| 552 |
|
| 553 |
-
<!-- left: speaker grille + analog VU
|
| 554 |
<div class="panel">
|
| 555 |
<span class="cap">SPEAKER · VU</span>
|
| 556 |
<div class="speaker-grille" aria-hidden="true"></div>
|
| 557 |
<canvas class="vu-canvas" id="vuCanvas" width="320" height="74" aria-hidden="true"></canvas>
|
| 558 |
-
<div class="reels" aria-hidden="true">
|
| 559 |
-
<div class="reel" id="reelL"><span class="hub"></span></div>
|
| 560 |
-
<div class="reel rev" id="reelR"><span class="hub"></span></div>
|
| 561 |
-
</div>
|
| 562 |
</div>
|
| 563 |
|
| 564 |
<!-- center: power -->
|
|
@@ -572,8 +570,13 @@ body.locked .gauge .fill{
|
|
| 572 |
</div>
|
| 573 |
</div>
|
| 574 |
|
| 575 |
-
<!-- right: handset + signal meter -->
|
| 576 |
<div class="panel">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 577 |
<span class="cap">CALL IN</span>
|
| 578 |
<div class="handset-row">
|
| 579 |
<button class="handset" id="handset" disabled
|
|
@@ -581,7 +584,7 @@ body.locked .gauge .fill{
|
|
| 581 |
<span class="ic" aria-hidden="true">
|
| 582 |
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M6.6 10.8c1.4 2.8 3.8 5.1 6.6 6.6l2.2-2.2c.3-.3.7-.4 1-.2 1.1.4 2.3.6 3.6.6.6 0 1 .4 1 1V20c0 .6-.4 1-1 1C10.6 21 3 13.4 3 4c0-.6.4-1 1-1h3.5c.6 0 1 .4 1 1 0 1.2.2 2.4.6 3.6.1.4 0 .8-.3 1l-2.2 2.2z"/></svg>
|
| 583 |
</span>
|
| 584 |
-
<span class="ht"><b>CALL IN</b><span>
|
| 585 |
</button>
|
| 586 |
</div>
|
| 587 |
<span class="cap" id="stageCap">SIGNAL</span>
|
|
@@ -1451,7 +1454,7 @@ function clearCaptionTimers(){ captionTimers.forEach(clearTimeout); captionTimer
|
|
| 1451 |
// Lift finished lines into the ghost stack; cap the trail at 3 lines.
|
| 1452 |
function ghostifyLines(){
|
| 1453 |
const lines = Array.prototype.slice.call(els.transcript.querySelectorAll(".line"));
|
| 1454 |
-
lines.forEach(l=>{ l.classList.remove("current"); l.classList.add("
|
| 1455 |
while (els.transcript.children.length > 3) els.transcript.removeChild(els.transcript.firstChild);
|
| 1456 |
}
|
| 1457 |
|
|
|
|
| 111 |
mix-blend-mode:overlay;opacity:.5;
|
| 112 |
}
|
| 113 |
/* rubber feet */
|
| 114 |
+
.foot{position:absolute;bottom:-13px;width:104px;height:20px;border-radius:0 0 7px 7px;
|
| 115 |
+
background:linear-gradient(180deg,#4a3420 0%,#241710 55%,#0c0805 100%);
|
| 116 |
+
border:1px solid rgba(0,0,0,.55);border-top:none;
|
| 117 |
+
box-shadow:0 12px 20px rgba(0,0,0,.6), inset 0 2px 0 rgba(255,214,150,.22), inset 0 -3px 5px rgba(0,0,0,.55)}
|
| 118 |
+
.foot.l{left:88px}.foot.r{right:88px}
|
| 119 |
|
| 120 |
/* inset faceplate */
|
| 121 |
.bezel{
|
|
|
|
| 279 |
text-wrap:balance;
|
| 280 |
}
|
| 281 |
.line.in{opacity:1;transform:translateY(0)}
|
| 282 |
+
.line.past{color:var(--foxed);opacity:.5}
|
| 283 |
.line.current{color:var(--dial-ivory)}
|
| 284 |
.line .w{opacity:.18;filter:blur(2px);
|
| 285 |
transition:opacity .5s ease, filter .5s ease, color .5s ease, text-shadow .5s ease}
|
|
|
|
| 389 |
body.powered .power-knob .pwr-txt{transform:translateX(-50%) rotate(-28deg);color:#ffd2b0}
|
| 390 |
|
| 391 |
/* signal-integrity gauge (diegetic SIGNAL meter) */
|
| 392 |
+
.gauge-wrap{display:flex;flex-direction:column;align-items:stretch;gap:6px;justify-content:center;width:100%}
|
| 393 |
.gauge{
|
| 394 |
+
position:relative;width:100%;height:11px;border-radius:6px;
|
| 395 |
+
background:linear-gradient(180deg, rgba(0,0,0,.5), rgba(255,255,255,.05));overflow:hidden;
|
| 396 |
+
box-shadow:0 0 0 1px rgba(0,0,0,0.55) inset, inset 0 1px 2px rgba(0,0,0,.5);
|
| 397 |
}
|
| 398 |
.gauge .ticks{display:none}
|
| 399 |
.gauge .fill{
|
|
|
|
| 552 |
<!-- ===== control deck ===== -->
|
| 553 |
<div class="deck">
|
| 554 |
|
| 555 |
+
<!-- left: speaker grille + analog VU -->
|
| 556 |
<div class="panel">
|
| 557 |
<span class="cap">SPEAKER · VU</span>
|
| 558 |
<div class="speaker-grille" aria-hidden="true"></div>
|
| 559 |
<canvas class="vu-canvas" id="vuCanvas" width="320" height="74" aria-hidden="true"></canvas>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 560 |
</div>
|
| 561 |
|
| 562 |
<!-- center: power -->
|
|
|
|
| 570 |
</div>
|
| 571 |
</div>
|
| 572 |
|
| 573 |
+
<!-- right: tape reels + handset + signal meter -->
|
| 574 |
<div class="panel">
|
| 575 |
+
<span class="cap">TAPE</span>
|
| 576 |
+
<div class="reels" aria-hidden="true">
|
| 577 |
+
<div class="reel" id="reelL"><span class="hub"></span></div>
|
| 578 |
+
<div class="reel rev" id="reelR"><span class="hub"></span></div>
|
| 579 |
+
</div>
|
| 580 |
<span class="cap">CALL IN</span>
|
| 581 |
<div class="handset-row">
|
| 582 |
<button class="handset" id="handset" disabled
|
|
|
|
| 584 |
<span class="ic" aria-hidden="true">
|
| 585 |
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M6.6 10.8c1.4 2.8 3.8 5.1 6.6 6.6l2.2-2.2c.3-.3.7-.4 1-.2 1.1.4 2.3.6 3.6.6.6 0 1 .4 1 1V20c0 .6-.4 1-1 1C10.6 21 3 13.4 3 4c0-.6.4-1 1-1h3.5c.6 0 1 .4 1 1 0 1.2.2 2.4.6 3.6.1.4 0 .8-.3 1l-2.2 2.2z"/></svg>
|
| 586 |
</span>
|
| 587 |
+
<span class="ht"><b>CALL IN</b><span>TAP TO TALK</span></span>
|
| 588 |
</button>
|
| 589 |
</div>
|
| 590 |
<span class="cap" id="stageCap">SIGNAL</span>
|
|
|
|
| 1454 |
// Lift finished lines into the ghost stack; cap the trail at 3 lines.
|
| 1455 |
function ghostifyLines(){
|
| 1456 |
const lines = Array.prototype.slice.call(els.transcript.querySelectorAll(".line"));
|
| 1457 |
+
lines.forEach(l=>{ l.classList.remove("current"); l.classList.add("past"); });
|
| 1458 |
while (els.transcript.children.length > 3) els.transcript.removeChild(els.transcript.firstChild);
|
| 1459 |
}
|
| 1460 |
|