privateboard 0.1.12 → 0.1.13
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.
- package/dist/cli.js +229 -51
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/public/agent-profile.js +0 -2
- package/public/app.js +765 -61
- package/public/home.html +609 -1
- package/public/i18n.js +2 -0
- package/public/index.html +726 -95
- package/public/themes.css +38 -0
- package/public/typing-sfx.js +58 -1
- package/public/user-settings.js +3 -1
package/public/themes.css
CHANGED
|
@@ -315,6 +315,44 @@
|
|
|
315
315
|
--magenta: #C5839E;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
+
/* ─── NINTENDO · 8-bit NES palette · Mario red on dark sky ───
|
|
319
|
+
Built from the classic NES title-screen vocabulary: deep
|
|
320
|
+
night-sky background, pure-white NES title text, Mario red
|
|
321
|
+
as the primary accent (the slot called `--lime*` in this
|
|
322
|
+
codebase), coin-block gold for amber, fire-flower red for
|
|
323
|
+
warnings, and sky-cloud cyan for the moderator accent. Every
|
|
324
|
+
swatch is high-saturation / high-contrast in the NES family —
|
|
325
|
+
no muted desaturated tones (those don't belong in 8-bit). */
|
|
326
|
+
:root[data-theme="nintendo"] {
|
|
327
|
+
--bg: #181820;
|
|
328
|
+
--panel: #22222C;
|
|
329
|
+
--panel-2: #2A2A38;
|
|
330
|
+
--panel-3: #34344A;
|
|
331
|
+
--hi: #44445A;
|
|
332
|
+
|
|
333
|
+
--line: #2C2C3A;
|
|
334
|
+
--line-bright: #44445A;
|
|
335
|
+
--line-strong: #5C5C72;
|
|
336
|
+
|
|
337
|
+
--text: #FCFCFC;
|
|
338
|
+
--text-soft: #C8C8D8;
|
|
339
|
+
--text-dim: #8E8EA0;
|
|
340
|
+
--text-faint: #5C5C70;
|
|
341
|
+
|
|
342
|
+
/* Primary accent · Mario red. Token names stay `--lime*` so every
|
|
343
|
+
callsite that already references the primary keeps working. */
|
|
344
|
+
--lime: #E60012;
|
|
345
|
+
--lime-deep: #A40009;
|
|
346
|
+
--lime-dim: #4F0007;
|
|
347
|
+
|
|
348
|
+
--amber: #FBC000; /* coin / question block */
|
|
349
|
+
--amber-dim: #6B4D00;
|
|
350
|
+
--red: #FC4438; /* fire flower */
|
|
351
|
+
--red-dim: #6E1A14;
|
|
352
|
+
--cyan: #5BC0EB; /* Mario sky / chair moderator */
|
|
353
|
+
--magenta: #FC74FC; /* princess pink / power-up */
|
|
354
|
+
}
|
|
355
|
+
|
|
318
356
|
/* ─── REGENT · gold-on-warm-dark · the eastwood twin
|
|
319
357
|
The same warm dark palette as the default eastwood, with the
|
|
320
358
|
primary forest-green accent swapped for the warm gold used by
|
package/public/typing-sfx.js
CHANGED
|
@@ -171,6 +171,63 @@
|
|
|
171
171
|
osc.stop(t0 + dur);
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
/** Chair gavel cue · fires before chair voice playback begins in
|
|
175
|
+
* voice mode. Two-strike wooden knock that reads as "court is in
|
|
176
|
+
* session — listen up." Designed by ear:
|
|
177
|
+
* · Layer 1 · low sine ~190 Hz, 1ms attack + 220ms decay,
|
|
178
|
+
* gives the bass "thunk" of wood on wood.
|
|
179
|
+
* · Layer 2 · filtered noise burst at ~3.2 kHz, 30ms total,
|
|
180
|
+
* provides the sharp percussive transient.
|
|
181
|
+
* · Two strikes 160ms apart so the ear hears a deliberate
|
|
182
|
+
* "knock-knock" pattern (single strike read as a glitch /
|
|
183
|
+
* typewriter chime in early prototyping). */
|
|
184
|
+
function gavel() {
|
|
185
|
+
if (!_enabled) return;
|
|
186
|
+
if (document.visibilityState !== "visible") return;
|
|
187
|
+
const ctx = ensureContext();
|
|
188
|
+
if (!ctx) return;
|
|
189
|
+
const t0 = ctx.currentTime;
|
|
190
|
+
const strikes = [0, 0.16];
|
|
191
|
+
for (const offset of strikes) {
|
|
192
|
+
const t = t0 + offset;
|
|
193
|
+
// Body resonance · low sine, fat envelope.
|
|
194
|
+
const body = ctx.createOscillator();
|
|
195
|
+
body.type = "sine";
|
|
196
|
+
body.frequency.setValueAtTime(220, t);
|
|
197
|
+
body.frequency.exponentialRampToValueAtTime(140, t + 0.18);
|
|
198
|
+
const bodyGain = ctx.createGain();
|
|
199
|
+
bodyGain.gain.setValueAtTime(0.0001, t);
|
|
200
|
+
bodyGain.gain.exponentialRampToValueAtTime(0.18, t + 0.005);
|
|
201
|
+
bodyGain.gain.exponentialRampToValueAtTime(0.0001, t + 0.22);
|
|
202
|
+
body.connect(bodyGain).connect(ctx.destination);
|
|
203
|
+
body.start(t);
|
|
204
|
+
body.stop(t + 0.25);
|
|
205
|
+
// Transient click · 30ms filtered noise burst.
|
|
206
|
+
const noiseBuf = ctx.createBuffer(
|
|
207
|
+
1,
|
|
208
|
+
Math.max(1, Math.floor(ctx.sampleRate * 0.03)),
|
|
209
|
+
ctx.sampleRate,
|
|
210
|
+
);
|
|
211
|
+
const noiseData = noiseBuf.getChannelData(0);
|
|
212
|
+
for (let i = 0; i < noiseData.length; i++) {
|
|
213
|
+
noiseData[i] = (Math.random() * 2 - 1) * (1 - i / noiseData.length);
|
|
214
|
+
}
|
|
215
|
+
const noise = ctx.createBufferSource();
|
|
216
|
+
noise.buffer = noiseBuf;
|
|
217
|
+
const bp = ctx.createBiquadFilter();
|
|
218
|
+
bp.type = "bandpass";
|
|
219
|
+
bp.frequency.value = 3200;
|
|
220
|
+
bp.Q.value = 0.8;
|
|
221
|
+
const noiseGain = ctx.createGain();
|
|
222
|
+
noiseGain.gain.setValueAtTime(0.0001, t);
|
|
223
|
+
noiseGain.gain.exponentialRampToValueAtTime(0.10, t + 0.003);
|
|
224
|
+
noiseGain.gain.exponentialRampToValueAtTime(0.0001, t + 0.035);
|
|
225
|
+
noise.connect(bp).connect(noiseGain).connect(ctx.destination);
|
|
226
|
+
noise.start(t);
|
|
227
|
+
noise.stop(t + 0.05);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
174
231
|
function setEnabled(on) {
|
|
175
232
|
_enabled = !!on;
|
|
176
233
|
writeEnabled(_enabled);
|
|
@@ -183,5 +240,5 @@
|
|
|
183
240
|
|
|
184
241
|
// Public surface · attached to window so app.js (and the
|
|
185
242
|
// user-settings toggle) can reach it without an import.
|
|
186
|
-
window.boardroomTypingSfx = { tick, speakerChange, setEnabled, isEnabled };
|
|
243
|
+
window.boardroomTypingSfx = { tick, speakerChange, gavel, setEnabled, isEnabled };
|
|
187
244
|
})();
|
package/public/user-settings.js
CHANGED
|
@@ -40,7 +40,9 @@
|
|
|
40
40
|
{ slug: "nebirhos", name: "Nebirhos", desc: "teal · warm orange highlights",
|
|
41
41
|
swatches: ["#0A1414","#11201F","#5EB1A6","#357770","#DD9258","#D87060","#6FBEC2","#B8D4D0"] },
|
|
42
42
|
{ slug: "wedisagree", name: "We Disagree", desc: "argumentative orange · subtle green",
|
|
43
|
-
swatches: ["#14110E","#1F1A14","#DD7B40","#A8521E","#E6B872","#E26060","#6FB28A","#D8CBBC"] }
|
|
43
|
+
swatches: ["#14110E","#1F1A14","#DD7B40","#A8521E","#E6B872","#E26060","#6FB28A","#D8CBBC"] },
|
|
44
|
+
{ slug: "nintendo", name: "8-bit", desc: "NES palette · Mario red · coin gold · sky cyan",
|
|
45
|
+
swatches: ["#181820","#22222C","#E60012","#A40009","#FBC000","#FC4438","#5BC0EB","#FCFCFC"] }
|
|
44
46
|
];
|
|
45
47
|
|
|
46
48
|
const PROVIDERS = [
|