Round 2 from live testing: - Clipping root cause: the endpointer committed on any 1.1s pause, so a thinking pause after a sentence opener sent one word; a speculative Whisper pass over that fragment then stalled the real commit ~3.5s on the Jetson. Young utterances now hold a 1.8s endpoint until 1.2s of speech accrues, speculative decode waits for 700ms of speech, resume is unconditional after any 650ms gap (server-frozen snapshots can never reach commit), and the noise floor is capped so playback echo cannot deafen onset. Deterministic capture-continuity probe added. - Stitching now fires for any barge-cancelled send within 20s, regardless of partial assistant output. - The workspace-drawer dark rectangle was our own HUX chrome resolving undefined theme tokens (--bg-primary) to a flat box; bootstrap.css bridges the real theme tokens and drops a compositor-hazard backdrop-filter. - Conversation mode: full-viewport hands-free overlay with an energy- driven orb (mic RMS in, TTS activity out), state caption, live transcript/reply captions, mute and exit controls, focus trap, Escape, reduced-motion support. Voice lane 253 tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf
122 lines
3.3 KiB
CSS
122 lines
3.3 KiB
CSS
.hux-workspace-toggle {
|
|
background: color-mix(in srgb, var(--bg-primary, #0a101b) 88%, #174653);
|
|
border: 1px solid rgb(94 231 215 / 45%);
|
|
border-radius: 999px;
|
|
bottom: max(5.8rem, calc(env(safe-area-inset-bottom) + 4.5rem));
|
|
box-shadow: 0 10px 32px rgb(0 0 0 / 32%);
|
|
color: var(--text-primary, #e7eef6);
|
|
cursor: pointer;
|
|
font: inherit;
|
|
padding: 0.55rem 0.9rem;
|
|
position: fixed;
|
|
right: max(1rem, env(safe-area-inset-right));
|
|
z-index: 115;
|
|
}
|
|
|
|
.hux-workspace-drawer {
|
|
background: color-mix(in srgb, var(--bg-primary, #0a101b) 97%, #102f3a);
|
|
border-left: 1px solid rgb(118 181 193 / 30%);
|
|
bottom: 0;
|
|
box-shadow: -18px 0 48px rgb(0 0 0 / 34%);
|
|
color: var(--text-primary, #e7eef6);
|
|
max-width: 100%;
|
|
overflow: auto;
|
|
position: fixed;
|
|
right: 0;
|
|
top: 0;
|
|
width: min(42rem, 94vw);
|
|
z-index: 160;
|
|
}
|
|
|
|
.hux-workspace-drawer[hidden] {
|
|
display: none !important;
|
|
}
|
|
|
|
.hux-workspace-drawer__header {
|
|
align-items: center;
|
|
backdrop-filter: blur(12px);
|
|
background: rgb(10 16 27 / 88%);
|
|
border-bottom: 1px solid rgb(118 181 193 / 24%);
|
|
display: flex;
|
|
justify-content: space-between;
|
|
padding: 0.8rem 1rem;
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 1;
|
|
}
|
|
|
|
.hux-workspace-drawer__header h2 {
|
|
font-size: 0.92rem;
|
|
margin: 0;
|
|
}
|
|
|
|
.hux-workspace-drawer__header button {
|
|
background: transparent;
|
|
border: 1px solid rgb(118 181 193 / 30%);
|
|
border-radius: 999px;
|
|
color: inherit;
|
|
cursor: pointer;
|
|
font: inherit;
|
|
padding: 0.4rem 0.7rem;
|
|
}
|
|
|
|
.hux-workspace-drawer__content {
|
|
display: grid;
|
|
gap: 0.8rem;
|
|
padding: 0.8rem;
|
|
}
|
|
|
|
.hux-workspace-wave {
|
|
min-width: 0;
|
|
}
|
|
|
|
.hux-workspace-toggle:focus-visible,
|
|
.hux-workspace-drawer button:focus-visible {
|
|
outline: 2px solid #5ee7d7;
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.hux-workspace-drawer {
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.hux-workspace-toggle {
|
|
transition: background-color 120ms ease, border-color 120ms ease;
|
|
}
|
|
}
|
|
|
|
@media (forced-colors: active) {
|
|
.hux-workspace-drawer,
|
|
.hux-workspace-toggle {
|
|
border-color: CanvasText;
|
|
}
|
|
}
|
|
|
|
/* ── Theme bridge for the Workspace chrome ─────────────────────────────── */
|
|
/* The pinned upstream WebUI theme (and hermes-brand.css on top of it) defines
|
|
--bg/--text but never --bg-primary/--text-primary, so every color-mix()
|
|
surface above resolved its fallback constant (#0a101b): with the drawer
|
|
open that painted a large flat dark rectangle that visibly broke the page's
|
|
themed background. Bridge the tokens to the app theme so the drawer, its
|
|
toggle and the shell inherit the real page background (light and dark) —
|
|
layout and component styling are deliberately untouched. */
|
|
.hux-workspace-toggle,
|
|
.hux-workspace-drawer,
|
|
.hux-shell {
|
|
--bg-primary: var(--bg, #0a101b);
|
|
--text-primary: var(--text, #e7eef6);
|
|
}
|
|
|
|
/* The header previously painted a hard-coded dark wash and sampled the page
|
|
through backdrop-filter; blurring the backdrop of a sticky header inside a
|
|
fixed overflow scroller is also a known Chromium compositor hazard on this
|
|
app's gradient background (see the stale-tile note in hermes-brand.css).
|
|
Track the theme instead and let the opaque drawer carry the surface. */
|
|
.hux-workspace-drawer__header {
|
|
backdrop-filter: none;
|
|
background: color-mix(in srgb, var(--bg, #0a101b) 92%, transparent);
|
|
}
|