privateboard 0.1.13 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,14 +17,13 @@
17
17
  .voice-replay-overlay {
18
18
  position: fixed;
19
19
  right: 24px;
20
- /* The adjourned-bar (where Voice Replay is launched from) is
21
- `min-height: 44px` and pinned to the bottom of the room view.
22
- `bottom: 24px` would overlap it; lift the panel to clear the
23
- bar with a small gap so the user always reads the bar's
24
- [Export / Voice Replay / Convene Follow-up] actions even while
25
- the player is open. Same offset for expanded + collapsed so
26
- the title bar sits flush above the bottom bar when shrunk. */
27
- bottom: 56px;
20
+ /* Voice Replay is launched from the floating `.input-bar` in
21
+ adjourned rooms (left-cluster Replay icon). The input-bar's
22
+ standard footprint is ~100px tall plus 14px bottom margin.
23
+ `bottom: 130px` lifts the panel clear of the bar so the user
24
+ keeps access to the input + the action icons while the player
25
+ is open. */
26
+ bottom: 130px;
28
27
  z-index: 9300;
29
28
  width: 380px;
30
29
  max-width: calc(100vw - 32px);
@@ -52,7 +51,7 @@
52
51
  display: inline-flex;
53
52
  align-items: center;
54
53
  gap: 6px;
55
- font-size: 9.5px;
54
+ font-size: 10px;
56
55
  font-weight: 700;
57
56
  letter-spacing: 0.18em;
58
57
  text-transform: uppercase;
@@ -95,34 +94,31 @@
95
94
  /* Collapsed posture · the entire floating panel hides, freeing
96
95
  the chat / round-table stage of any overlap. The user re-opens
97
96
  by clicking the inline `.vr-inline-expand` pill that gets
98
- slotted into the adjourned-bar's action group right next to the
99
- Voice Replay button. Audio keeps playing in the background. */
97
+ slotted into the input-bar's left cluster right next to the
98
+ Voice Replay icon. Audio keeps playing in the background. */
100
99
  .voice-replay-overlay.is-collapsed {
101
100
  display: none;
102
101
  }
103
102
 
104
- /* Inline replay control group · three buttons (Next / Pause /
105
- Expand) mounted into the adjourned-bar's action group right
106
- after Voice Replay when the floating panel is collapsed. Each
107
- button inherits `.ghost-btn`'s panel + hairline chrome so the
108
- group reads as a sibling of Export / Voice Replay / Convene
109
- Follow-up. The Expand button carries a small lime pulsing dot
110
- so the user can locate "what's still active" at a glance. */
103
+ /* Inline replay control group · four buttons (Next / Pause /
104
+ Stop / Expand) mounted into the input-bar's left cluster right
105
+ after the Voice Replay icon when the floating panel collapses
106
+ into playback mode. Each button reuses `.ib-action` so the group
107
+ reads as a true sibling of Export / Voice Replay / Convene
108
+ Follow-up same 32×32 frame, same hover-circle, same tooltip
109
+ register. The Expand button carries a small lime pulsing dot so
110
+ the user can locate "what's still active" at a glance. */
111
111
  .vr-inline-group {
112
112
  display: inline-flex;
113
113
  align-items: center;
114
- gap: 6px;
114
+ gap: 4px;
115
115
  }
116
- /* Icon-only ghost-btns · all the visual chrome (panel bg, hairline
117
- border, mono font, uppercase, hover lime) comes from `.ghost-btn`
118
- in index.html. We don't override font-size / color / padding so
119
- the inline group reads as a true sibling of Export / Voice
120
- Replay / Convene Follow-up — just with bracket-wrapped glyphs
121
- instead of trailing labels. The Expand button gets a small lime
122
- pulsing dot tagged on the end so the user can locate "what's
123
- still active" at a glance. */
116
+ /* The inline child SVG centres inside the `.ib-action` 32×32 frame
117
+ via the parent's `display: inline-flex; align-items: center;
118
+ justify-content: center;`. Drop the inline baseline gap so the
119
+ icon snaps to the geometric centre. */
124
120
  .vr-inline-btn .vib-icon {
125
- display: block; /* drop the inline baseline gap so the SVG centres */
121
+ display: block;
126
122
  }
127
123
  .vr-inline-expand {
128
124
  display: inline-flex;
@@ -177,7 +173,7 @@
177
173
  .vr-spinner-dots .vr-spinner-dot:nth-child(3) { animation-delay: 0.4s; }
178
174
  .vr-spinner-text {
179
175
  font-family: var(--mono);
180
- font-size: 10.5px;
176
+ font-size: 10px;
181
177
  font-weight: 700;
182
178
  letter-spacing: 0.18em;
183
179
  color: var(--text-soft);
@@ -228,7 +224,7 @@
228
224
  }
229
225
  .vr-speaker-name {
230
226
  font-family: var(--font-human, var(--mono));
231
- font-size: 12.5px;
227
+ font-size: 12px;
232
228
  font-weight: 700;
233
229
  letter-spacing: -0.005em;
234
230
  color: var(--text);
@@ -241,7 +237,7 @@
241
237
  font-weight: 500;
242
238
  }
243
239
  .vr-speaker-kind {
244
- font-size: 8.5px;
240
+ font-size: 8px;
245
241
  letter-spacing: 0.18em;
246
242
  text-transform: uppercase;
247
243
  color: var(--text-faint);
@@ -250,7 +246,7 @@
250
246
  /* ─── Message preview · 2-line clamp ─── */
251
247
  .vr-preview {
252
248
  font-family: var(--font-human, var(--mono));
253
- font-size: 11.5px;
249
+ font-size: 12px;
254
250
  line-height: 1.4;
255
251
  color: var(--text-soft);
256
252
  letter-spacing: -0.003em;
@@ -311,7 +307,7 @@
311
307
  border: 0.5px solid var(--line-bright);
312
308
  color: var(--text);
313
309
  font-family: var(--mono);
314
- font-size: 9.5px;
310
+ font-size: 10px;
315
311
  font-weight: 700;
316
312
  letter-spacing: 0.12em;
317
313
  text-transform: uppercase;
@@ -338,9 +334,6 @@
338
334
  color: var(--text-soft);
339
335
  cursor: pointer;
340
336
  }
341
- .vr-toggle input[type="checkbox"] {
342
- accent-color: var(--lime, #6FB572);
343
- }
344
337
 
345
338
  /* ─── Key prompt / empty / done ─── */
346
339
  .vr-key-prompt {
@@ -379,7 +372,7 @@
379
372
  }
380
373
  .vr-key-deck {
381
374
  font-family: var(--font-human, var(--mono));
382
- font-size: 11.5px;
375
+ font-size: 12px;
383
376
  line-height: 1.45;
384
377
  color: var(--text-soft);
385
378
  letter-spacing: -0.003em;
@@ -602,7 +595,7 @@
602
595
  background: var(--bg, #0A0A0A);
603
596
  border: 0.5px solid var(--lime, #6FB572);
604
597
  font-family: var(--mono);
605
- font-size: 8.5px;
598
+ font-size: 8px;
606
599
  font-weight: 700;
607
600
  letter-spacing: 0.18em;
608
601
  text-transform: uppercase;
@@ -207,7 +207,7 @@
207
207
  STATE.overlay = null;
208
208
  }
209
209
  clearActiveHighlight();
210
- removeInlineExpand(); // any inline pill in the adjourned-bar drops too
210
+ removeInlineExpand(); // any inline pill in the input-bar drops too
211
211
  STATE.playlist = [];
212
212
  STATE.prefetched = new Map();
213
213
  setActive(null); // round-table stage clears its replay seat / subtitle
@@ -281,8 +281,9 @@
281
281
  }
282
282
 
283
283
  /** Doc-level handler for the inline replay control group in the
284
- * adjourned-bar — those buttons are mounted OUTSIDE the overlay
285
- * so the overlay-scoped click delegate above can't see them.
284
+ * input-bar's left cluster — those buttons are mounted OUTSIDE
285
+ * the overlay so the overlay-scoped click delegate above can't
286
+ * see them.
286
287
  * Bound once per page lifetime; safe even when no replay is
287
288
  * active (the buttons simply aren't in the DOM until
288
289
  * toggleCollapsed mounts them). */
@@ -316,8 +317,8 @@
316
317
  }
317
318
 
318
319
  /** Collapse the player by hiding the floating overlay entirely +
319
- * surfacing the inline replay control group in the adjourned-bar
320
- * right after where the Voice Replay button used to be. Audio
320
+ * surfacing the inline replay control group in the input-bar's
321
+ * left cluster, right after the Voice Replay icon. Audio
321
322
  * keeps playing in the background; the user's content is no
322
323
  * longer blocked.
323
324
  *
@@ -343,7 +344,7 @@
343
344
  * a no-op when the group is already present. */
344
345
  function mountInlineExpand() {
345
346
  if (document.querySelector("[data-vr-inline-group]")) return;
346
- const replayBtn = document.querySelector(".adjourned-bar [data-room-replay]");
347
+ const replayBtn = document.querySelector("[data-room-replay]");
347
348
  if (!replayBtn) return;
348
349
  const group = document.createElement("span");
349
350
  group.className = "vr-inline-group";
@@ -391,10 +392,10 @@
391
392
  </svg>
392
393
  `;
393
394
  group.innerHTML = `
394
- <button type="button" class="ghost-btn vr-inline-btn" data-vr-inline-next aria-label="Next message" title="Next message">${NEXT_SVG}</button>
395
- <button type="button" class="ghost-btn vr-inline-btn" data-vr-inline-pause aria-label="Pause" title="Pause"><span data-vib-pause-mark>${PAUSE_SVG}</span></button>
396
- <button type="button" class="ghost-btn vr-inline-btn" data-vr-inline-stop aria-label="Stop replay" title="Stop replay">${STOP_SVG}</button>
397
- <button type="button" class="ghost-btn vr-inline-btn vr-inline-expand" data-vr-inline-expand aria-label="Expand voice replay" title="Expand voice replay">${EXPAND_SVG}<span class="vie-pulse" aria-hidden="true"></span></button>
395
+ <button type="button" class="ib-action vr-inline-btn" data-vr-inline-next aria-label="Next message" title="Next message">${NEXT_SVG}</button>
396
+ <button type="button" class="ib-action vr-inline-btn" data-vr-inline-pause aria-label="Pause" title="Pause"><span data-vib-pause-mark>${PAUSE_SVG}</span></button>
397
+ <button type="button" class="ib-action vr-inline-btn" data-vr-inline-stop aria-label="Stop replay" title="Stop replay">${STOP_SVG}</button>
398
+ <button type="button" class="ib-action vr-inline-btn vr-inline-expand" data-vr-inline-expand aria-label="Expand voice replay" title="Expand voice replay">${EXPAND_SVG}<span class="vie-pulse" aria-hidden="true"></span></button>
398
399
  `;
399
400
  replayBtn.insertAdjacentElement("afterend", group);
400
401
  // Hide the original Voice Replay anchor while the inline group
@@ -413,7 +414,7 @@
413
414
  // so the user can re-trigger the player. We stashed the prior
414
415
  // inline display when we hid it; restore it (empty string ==
415
416
  // CSS default).
416
- const replayBtn = document.querySelector(".adjourned-bar [data-room-replay]");
417
+ const replayBtn = document.querySelector("[data-room-replay]");
417
418
  if (replayBtn) {
418
419
  const prev = replayBtn.dataset.vrPrevDisplay;
419
420
  replayBtn.style.display = (prev === undefined || prev === null) ? "" : prev;