ratandeep commited on
Commit
fe67bfa
·
verified ·
1 Parent(s): 0a71f72

UI fixes: reels->right, visible feet, signal bar, clean ghost lines, tap-to-talk label

Browse files
Files changed (1) hide show
  1. 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:-9px;width:96px;height:16px;border-radius:4px;
115
- background:linear-gradient(180deg,#170f0a,#050302);box-shadow:0 9px 16px rgba(0,0,0,.55)}
116
- .foot.l{left:70px}.foot.r{right:70px}
 
 
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.ghost{color:var(--foxed);opacity:.5}
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:center;gap:6px;justify-content:center}
391
  .gauge{
392
- position:relative;width:100%;height:8px;border-radius:5px;
393
- background:rgba(255,255,255,.06);overflow:hidden;
394
- box-shadow:0 0 0 1px rgba(0,0,0,0.5) inset;
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 + tape reels -->
554
  <div class="panel">
555
  <span class="cap">SPEAKER &middot; 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>HOLD TO TALK</span></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("ghost"); });
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 &middot; 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