feat: legibility wave — veil conditions, first-run hints, kinder errors
Workstream B of the usability wave (#2 hints, #3 conditions, #4 errors): - GET /api/conditions (new backend/app/routes/conditions.py): composes celestial veil_thinness with the cached NOAA Kp reading; lenient lon parsing (junk degrades to moon-only, never 422); geomagnetic may be null on a cold cache. Route tests stub the cache — no live NOAA calls. - VeilConditions strip in the séance side column: moon glyph + phase, % lit, veil-thinness phrase, Kp line only when data exists. Polls every 10 min; renders nothing while loading; no error state. - ModeHint: per-mode in-fiction one-liner after ~15s idle, suppressed once the mode's sensor runs this session, dismissal persisted in localStorage (qm_hint_<mode>). One mount line per panel. - Error copy upgraded to detect-and-redirect: mic denied points at site settings and the ouija board/wire; WebUSB-unsupported suggests EVP. - i18n en/es parity for every new string; coverage-check template domains extended for the new template-key call sites. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
54
frontend/src/components/VeilConditions.css
Normal file
54
frontend/src/components/VeilConditions.css
Normal file
@@ -0,0 +1,54 @@
|
||||
/* VeilConditions — compact sky/field strip in the séance side column.
|
||||
Tokens follow SeancePage.css: phosphor #7cffb2 · violet #b26bff ·
|
||||
panel rgba(16,16,26,0.85) · border rgba(124,255,178,0.18). */
|
||||
|
||||
.veil-conditions {
|
||||
padding: 0.6rem 0.7rem;
|
||||
border: 1px solid rgba(124, 255, 178, 0.18);
|
||||
border-radius: 4px;
|
||||
background: rgba(16, 16, 26, 0.85);
|
||||
font-size: 0.76rem;
|
||||
line-height: 1.5;
|
||||
color: #d3e9db;
|
||||
}
|
||||
|
||||
.veil-conditions-title {
|
||||
margin: 0 0 0.35rem;
|
||||
font-size: 0.68rem;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0.18em;
|
||||
color: #7cffb2;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.veil-conditions-line {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 0.5rem;
|
||||
min-width: 0;
|
||||
flex-wrap: wrap; /* stays legible at 390px */
|
||||
}
|
||||
|
||||
.veil-moon-glyph {
|
||||
flex: none;
|
||||
filter: drop-shadow(0 0 4px rgba(178, 107, 255, 0.5));
|
||||
}
|
||||
|
||||
.veil-moon-name {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.veil-thinness {
|
||||
color: #b26bff;
|
||||
font-style: italic;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.veil-field-quiet {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.veil-field-storm {
|
||||
color: #b26bff;
|
||||
text-shadow: 0 0 8px rgba(178, 107, 255, 0.6);
|
||||
}
|
||||
Reference in New Issue
Block a user