diff --git a/persistent-memory.d/2026-08-24-homepage-uniform-grid.md b/persistent-memory.d/2026-08-24-homepage-uniform-grid.md index cabdb15..9dda21c 100644 --- a/persistent-memory.d/2026-08-24-homepage-uniform-grid.md +++ b/persistent-memory.d/2026-08-24-homepage-uniform-grid.md @@ -210,3 +210,99 @@ rolling the 8.6 MB `conf/homepage/logs/homepage.log` aside and recreating healed it within 15 seconds. That is one observation, not proof — but it is a coherent mechanism (oversized log → logger init throws → silent catch) and it is the cheapest thing to try first next time. + +--- + +# `[2026-08-24, pass 3]` Rebuilt on Australis Skyfall — dual theme, light shipped + +Operator supplied the Skyfall design-system README and said "Go full with +skyfall." + +## The bundle was already in this repo's git history + +**The Skyfall tokens did not need to be hunted down.** A predecessor vendored +them on 2026-08-19 and a later commit deleted them; git kept everything: + +```bash +git show 45c1995:stacks/homepage/theme/colors.css # 208 lines, BOTH themes +git show 45c1995:stacks/homepage/theme/layout.css # calm-depth tokens +git show 45c1995:stacks/homepage/theme/typography.css +git show 45c1995:stacks/homepage/theme/fonts/Supreme-{400,500,700}.woff2 +``` + +`colors.css` carries `:root` (dark) **and** `[data-theme="light"]` (Skyfall +Day) — so the light ramp is canonical, not derived. That killed the entire +objection from the previous answer, which was correct only about the +`australis-design` skill ("Always dark first. No light mode in this system"). +**Skyfall is the dual-theme derivative; australis-design is the terminal +theme. They are different systems and only one of them has a light mode.** + +## ⚠⚠ REMOVING `theme:` FROM settings.yaml BREAKS THE DASHBOARD + +The documented way to get Homepage's own light/dark toggle is to leave `theme:` +unpinned. **Do not.** With the key absent, the page's data loader throws and its +catch branch serves `initialSettings: {}` — no tab bar, no layout, no i18n. + +Measured, not inferred: six force-recreates over seven minutes all came up +empty with the key removed; restoring `theme: dark` rendered correctly on the +next recreate in **12 seconds**. `/api/services` stays 200 and fully correct +throughout, which is exactly why this reads as a caching or warm-up problem and +is not one. + +This is the first *confirmed* trigger for the long-running "tab bar goes +missing" mystery. It does not explain every occurrence (the symptom has +appeared with `theme:` present), but it means **the first diagnostic step is +now `git log -p -- stacks/homepage/conf/settings.yaml`**, not container +archaeology. Also retires an earlier lead from this same session: rolling the +8.6 MB `homepage.log` aside once coincided with a recovery, but did nothing +during the `theme:`-key episode — coincidence, not cause. + +## So the toggle is ours + +`conf/custom.js` renders it (was an empty placeholder). Precedence: + +1. explicit choice — `localStorage['skyfall-theme']`, written by the toggle; +2. OS preference — `@media (prefers-color-scheme: light)`; +3. dark — Skyfall's default. + +`theme/build.py` re-emits each vendored `[data-theme="light"]` block twice: as +`[data-theme="light"], html.light`, and inside the media query scoped to +`html:not([data-theme="dark"]):not([data-theme="light"])`. **That `:not()` pair +is what lets a stored *dark* choice survive a light-mode OS.** Verified across +both OS preferences: load, click, click again, reload — all four correct. + +⚠ Homepage keeps its own `class="dark scheme-dark theme-slate"` on `` +regardless, because `theme:` is pinned. That is fine and was checked +explicitly: with the dark class present AND `data-theme="light"`, every themed +surface resolves to Skyfall Day, because our rules carry `!important` on the +surfaces Tailwind's `dark:` variants would otherwise claim. **`data-theme` is +the control surface; the class is not.** + +## The anti-fork guard is now mechanical + +`build.py` records the SHA-256 of each vendored file and **fails the build** on +a mismatch, rather than warning. A vendored file is either byte-identical to +the bundle or it is a fork wearing the bundle's name. Overrides go in +`skyfall.css.in`, which is written entirely against the semantic layer +(`--surface-*`, `--text-*`, `--border-*`, `--success/--danger/--warning`) — no +raw family tokens, no colour literals. + +The one place a literal is unavoidable: Homepage consumes +`--color-logo-start/stop` as `rgb(var(--x))`, which cannot take an `oklch()`. +Those four values are exact sRGB conversions of real tokens (`--sea-80`, +`--blue-base` for dark; `--sea-40`, `--blue-deep` for light), computed rather +than eyeballed, with the conversion recorded in the file. + +## Deviations, all deliberate and all written down + +- **The aurora ribbon under the tab bar is gone.** Skyfall sanctions exactly two + accent expressions — the active rail and hero-only glows — and a decorative + gradient across the chrome is neither. The colour moved to a 2px accent bar + plus `--accent-soft` fill on the active tab, which *is* the rail. +- **Widget stat values moved from the display face to mono**, per Skyfall's + "numbers and telemetry are always `--font-mono`". +- **Two font substitutions**: Space Grotesk for Bespoke Sans, JetBrains Mono + for Victor Mono. Only Supreme was ever vendored, and Skyfall's own notes call + Victor Mono "user-supplied". Two-line swap when the real faces arrive. + +Dark + light, all four tabs: `http://10.100.10.50:8090/b/homepage-skyfall/` diff --git a/persistent-memory.md b/persistent-memory.md index b40fe67..3a153ab 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -110,6 +110,8 @@ no longer deployed sidecars here. See Recent decisions.) _As of 2026-08-24 — a very long ops session; everything it opened, it closed. Nothing is mid-flight. The **homepage** dashboard pass is done (below); the only thing left open on it is an information-architecture question for the operator, not work._ +- **🎨 Homepage runs AUSTRALIS SKYFALL with a working light/dark toggle.** The dual-theme OKLCH bundle (`colors.css` carries `:root` dark AND `[data-theme="light"]` Skyfall Day) was recovered from **this repo's own git history at `45c1995`** — no derivation, no fork. ⚠ **`theme:` MUST stay pinned in settings.yaml**: removing it (the documented way to get Homepage's built-in toggle) makes the page loader throw and serve `initialSettings: {}` — first *confirmed* trigger for the long-running "tab bar goes missing" mystery. The toggle is ours instead, in `conf/custom.js`, with OS-preference fallback. → `persistent-memory.d/2026-08-24-homepage-uniform-grid.md` + - **🟢 Homepage rebuilt in two passes: uniform 4-column grid, then recategorised on "do I open this?"** Groups are now either TOOLS (expanded, top of tab) or ENDPOINTS (`initiallyCollapsed: true`, bottom); `Service Networking` split four ways; 28 containers relabelled via rerunnable `playbooks/homepage-regroup-.yaml`. Remote-label discovery re-verified — the board reads labels off **all five** Docker engines (74 of 107 cards, only 13 from its own host). ⚠ **The 16 GPU model seats were deliberately NOT relabelled** — order + collapse buys the same separation without a model reload. ⚠ **"columns = member count" is RETIRED.** ⚠ `initialSettings":{}` in the served HTML is a **swallowed exception**, not a warm-up. → `persistent-memory.d/2026-08-24-homepage-uniform-grid.md` - **🔒 ana-gw's public admin surface is now ZERO open TCP ports**, and the box is scheduled for replacement by **OPNsense on a Dell R420** (which brings WireGuard onto the edge — so the downstream-WireGuard-VM design is moot, do not scope it). WAN admin was opened as a cutover contingency then closed on instruction; the FortiOS **ACME listener** on :80 was disabled too. **No out-of-band path to ana-gw remains** — if both tunnels drop it is console-only; re-open is two one-liners in auto-memory. → `persistent-memory.d/2026-08-24-ana-gw-admin-closed-acme-disabled.md` @@ -136,6 +138,7 @@ _As of 2026-08-24 — a very long ops session; everything it opened, it closed. ## Recent decisions +- `[2026-08-24]` **Homepage rebuilt on Australis Skyfall; light mode shipped.** Two findings worth more than the theme: **(a)** the Skyfall bundle including its canonical light ramp was sitting in this repo's git history at `45c1995` — check `git show` before concluding a vendored design asset is lost; **(b)** removing `theme:` from `settings.yaml` deterministically breaks the dashboard render (six recreates empty, restoring the key fixed it in 12s), which is the first confirmed cause of the "tab bar goes missing" symptom. Retires the `homepage.log` size lead from earlier the same day — it did nothing on this episode. → `persistent-memory.d/2026-08-24-homepage-uniform-grid.md` - `[2026-08-24]` **Homepage reorganised on the axis "do I open this?" — UI groups expanded on top, API/agent groups collapsed at the bottom** (operator-delegated: "re-categorize however you want"). Load-bearing constraint: `homepage.group` is read at container CREATION, so the 16 GPU-backed model seats keep their unlovely names rather than eat a recreate — `initiallyCollapsed` + order is free. Second rule discovered here: **group members should all have widgets or none should**, because a stat strip adds ~50px and opens a void beside plain cards. → `persistent-memory.d/2026-08-24-homepage-uniform-grid.md` - `[2026-08-24]` **Homepage columns unified at 4 for every group; the 2026-08-18 "columns = member count" rule is retired.** It was avoiding dead cells in a short last row and bought a worse defect — card width changing at every group boundary. Also carries two CSS traps: `overflow: hidden` clips at the PADDING box (so a `padding-right` gutter is spill room, not a guard), and a `:root` override of a Homepage theme variable is silently outranked by `.theme-slate` on the same `` element. → `persistent-memory.d/2026-08-24-homepage-uniform-grid.md` - `[2026-08-24]` **AES-128 adopted on both Anaheim tunnels; the per-flow ceiling root-caused to the UDM's software AES-CBC, exonerating the FortiGate.** Proven by an A/B/A cipher swap at identical CPU — hardware offload is not cipher-cost-sensitive. → `persistent-memory.d/2026-08-23-anaheim-ipsec-tunnel-ceiling.md` diff --git a/stacks/homepage/README.md b/stacks/homepage/README.md index f8c56f8..b2f8efa 100644 --- a/stacks/homepage/README.md +++ b/stacks/homepage/README.md @@ -202,12 +202,25 @@ Two consequences worth knowing: was observed on 2026-08-24: catch branch demonstrably taken, and not one `index`-tagged line in `docker logs` or `conf/homepage/logs/homepage.log`. +### ONE CAUSE IS NOW KNOWN: a missing `theme:` key + +**Removing `theme:` from `settings.yaml` reproduces this deterministically.** +Six force-recreates over seven minutes all served `initialSettings":{}` with the +key absent; restoring `theme: dark` rendered correctly on the next recreate in +12 seconds (2026-08-24). So the loader really can be thrown by config — just not +by the parts you would suspect, and never with a message. + +That does **not** explain every occurrence: the same symptom has appeared with +`theme:` present and correct. Treat the missing key as one confirmed trigger, +not the whole story. + ### What it is NOT — ruled out by measurement, don't re-run these -- **Not the config.** `/api/services`, `/api/bookmarks`, `/api/widgets` and - `/api/hash` all return **200 with fully correct content** while the page - serves `initialSettings":{}` — including the brand-new group structure, in the - right order. Every input the loader awaits works when called directly. +- **Not a downstream data failure.** `/api/services`, `/api/bookmarks`, + `/api/widgets` and `/api/hash` all return **200 with fully correct content** + while the page serves `initialSettings":{}` — including the brand-new group + structure, in the right order. Every input the loader awaits works when called + directly. - **Not the 2026-08-24 layout rewrite.** Restoring the *previous, known-good* `settings.yaml` and recreating reproduced the empty payload identically. (This matches the 2026-08-19 finding that the pre-adoption backup config reproduces @@ -215,6 +228,10 @@ Two consequences worth knowing: - **Not `/api/validate`,** which returns `[]` throughout. - **Not disk, not permissions.** 206 GB free; the container runs as root and a write test into `/app/config/logs` succeeds. +- **Probably not the log file.** Rolling the 8.6 MB `homepage.log` aside once + coincided with an immediate recovery, which looked like a lead — but the same + move did nothing during the `theme:`-key episode. Recorded so nobody chases + it twice; the coincidence was almost certainly just the intermittency. ### Timing, measured rather than assumed @@ -231,12 +248,11 @@ got spent in 2026-08-19 ruling out four causes that were never the cause (the config, the v2.0.0 release, `PUID`/`PGID` and Docker discovery, and the server side). Every one of those remains ruled out. -**Next lead, for whoever picks this up:** move the `logger("index")` hypothesis -forward. The winston file logger writes to `conf/homepage/logs/homepage.log`, -which had grown to 8.6 MB and stopped being appended to at the same time the -render started failing. Rolling it aside is a one-liner and is the cheapest -thing left to try: -`sudo mv /opt/docker/conf/homepage/logs/homepage.log{,.rolled}` then recreate. +**First thing to check, now that one cause is confirmed:** diff `settings.yaml` +against the last version that rendered. A key that Homepage's loader needs and +cannot find will do this silently — `theme:` is the one we know about, and +there may be others. `git log -p -- stacks/homepage/conf/settings.yaml` is +faster than any amount of container archaeology. **Timing, measured rather than assumed:** five minutes is NOT enough — a fresh container was still tab-less at 4m30s, twice. It was observed healthy again @@ -316,6 +332,64 @@ theme/build.py inlines the fonts + tokens -> conf/custom.css **Do not hand-edit `conf/custom.css`.** Change `skyfall.css.in`, run `python3 stacks/homepage/theme/build.py`, then deploy. +**Do not hand-edit the three vendored files either.** `build.py` records their +SHA-256 and **fails the build** on a mismatch — a vendored file is either +byte-identical to the bundle or it is a fork wearing the bundle's name. Put the +override in `skyfall.css.in`, which is expressed entirely through Skyfall's +semantic layer (`--surface-*`, `--text-*`, `--border-*`, `--success/--danger/ +--warning`) and never against a raw family token or a literal colour. That is +not fussiness: the theme this one replaced built a parallel palette "derived +from the philosophy" and had to be torn out twice. + +### Light and dark (2026-08-24) + +Both themes are first-class. Skyfall Day is the bundle's own light ramp — +surfaces at `--sea-94/96/98`, text at `--sea-15`, and every chromatic family +dropping to its `-deep` (L 0.48) step. Nothing about it was derived here. + +Precedence, highest first: + +1. **an explicit choice** — the toggle in the header strip, stored in + `localStorage` under `skyfall-theme`; +2. **the OS preference** — `@media (prefers-color-scheme: light)`, applied only + while no explicit choice exists; +3. **dark** — Skyfall's default. + +Two pieces of plumbing make that work, and both are load-bearing: + +- **`build.py` re-emits the vendored `[data-theme="light"]` blocks** in both + forms — `[data-theme="light"], html.light` for an explicit choice, and a + copy inside the media query scoped to + `html:not([data-theme="dark"]):not([data-theme="light"])`. That `:not()` pair + is what lets a stored *dark* choice survive a light-mode OS. +- **`conf/custom.js` renders the toggle**, because Homepage will not give us + its own. + +⚠ **Homepage's built-in theme toggle is unreachable, and reaching for it breaks +the dashboard.** The toggle renders only when `settings.yaml` leaves `theme:` +unpinned — but with the key absent, the page's data loader throws and serves +`initialSettings: {}` (no tab bar, no layout, no i18n). Measured 2026-08-24: +six force-recreates over seven minutes all came up empty with the key removed; +restoring `theme: dark` rendered correctly on the next recreate in 12 seconds. +`/api/services` stays 200 and correct the whole time, which is exactly why this +looks like a caching problem and is not one. **Leave `theme: dark` pinned.** + +### Type: one canonical face, two documented substitutions + +Skyfall names Bespoke Sans (display) / Supreme (body, UI) / Victor Mono Nerd +Font (data, code). Only **Supreme** was ever vendored into this repo, and +Skyfall's own notes call Victor Mono "user-supplied", so the other two are +stand-ins rather than deviations: + +| role | Skyfall | here | +|---|---|---| +| display | Bespoke Sans | **Space Grotesk** (variable, latin subset) | +| body / UI | Supreme | **Supreme 400/500/700** — canonical | +| data / mono | Victor Mono Nerd Font | **JetBrains Mono** (variable) | + +Swapping in the real faces is a two-line change: `FONTS_*` in `build.py` and +the `--font-display` / `--font-mono` overrides at the top of `skyfall.css.in`. + ### Iterating on the theme — do NOT recreate the container `custom.css` is fetched per request from `/api/config/custom.css`, so a CSS diff --git a/stacks/homepage/conf/custom.css b/stacks/homepage/conf/custom.css index d887a22..4d7fbe8 100644 --- a/stacks/homepage/conf/custom.css +++ b/stacks/homepage/conf/custom.css @@ -1,63 +1,476 @@ -/* Homepage — Australis. +/* ==== vendored: colors.css (75f78b674dd7) ==== */ +/* ============================================================ + Australis Skyfall — Color Tokens v2 + A ground-up web palette derived from the Australis Dark + PHILOSOPHY (not its ANSI values). Built in OKLCH so the laws + are explicit and every family stays perceptually consistent: + + - All hues are cooler than neutral; nothing warmer than amber. + - One lightness law across every chromatic family: + deep L 0.48 — light-theme fills & colored text + base L 0.66 — dark-theme fills (the working color) + bright L 0.80 — dark-theme colored text & highlights + - Chroma is tuned per hue so no family shouts over another. + - Neutrals (Sea ramp) drift in hue from ice-blue (265°) toward + ocean green (195°) as they brighten — the aurora signature. + - Medium / medium-high contrast for eye comfort. + + Families: Aurora (blue, cyan, green — use generously, in that + order) and Dawn (amber, red, violet — semantic accents only: + warning, danger, AI). + ============================================================ */ + +:root { + /* ---- Sea — neutral ramp (hue 265° → 195° as L rises) ---- */ + --sea-10: oklch(0.23 0.02 265); + --sea-15: oklch(0.27 0.024 268); /* dark canvas — the Australis anchor */ + --sea-20: oklch(0.31 0.022 262); + --sea-25: oklch(0.35 0.02 258); + --sea-30: oklch(0.4 0.018 252); + --sea-40: oklch(0.48 0.016 245); + --sea-50: oklch(0.56 0.015 235); + --sea-60: oklch(0.64 0.014 228); + --sea-70: oklch(0.72 0.014 220); + --sea-75: oklch(0.78 0.015 212); + --sea-80: oklch(0.83 0.017 205); + --sea-90: oklch(0.9 0.02 198); + --sea-94: oklch(0.94 0.014 195); + --sea-96: oklch(0.96 0.01 195); + --sea-98: oklch(0.98 0.006 195); + + /* ---- Ice — main colors (aliases into the ramp) ---- */ + --ice-black: var(--sea-15); + --ice-white: var(--sea-75); + --ice-bright-white: var(--sea-90); + + /* ---- Aurora — primary families (blue > cyan > green) ---- */ + --blue-deep: oklch(0.48 0.12 262); + --blue-base: oklch(0.66 0.12 262); + --blue-bright: oklch(0.8 0.09 262); + --cyan-deep: oklch(0.48 0.08 200); + --cyan-base: oklch(0.66 0.1 200); + --cyan-bright: oklch(0.8 0.1 200); + --green-deep: oklch(0.48 0.11 158); + --green-base: oklch(0.66 0.13 158); + --green-bright: oklch(0.8 0.13 158); + + /* ---- Dawn — accent families (semantic use only) ---- */ + --amber-deep: oklch(0.52 0.1 75); + --amber-base: oklch(0.7 0.12 78); + --amber-bright: oklch(0.82 0.13 82); + --red-deep: oklch(0.5 0.15 25); + --red-base: oklch(0.62 0.16 25); + --red-bright: oklch(0.78 0.11 28); + --violet-deep: oklch(0.5 0.15 292); + --violet-base: oklch(0.66 0.14 292); + --violet-bright: oklch(0.8 0.1 292); +} + +/* ============================================================ + Semantic aliases — DARK (default, first-class) + ============================================================ */ +:root { + color-scheme: dark; + + /* Surfaces */ + --surface-sunken: var(--sea-10); + --surface-base: var(--sea-15); + --surface-raised: var(--sea-20); + --surface-overlay: oklch(0.34 0.022 260); + --surface-card: var(--sea-20); + --surface-input: var(--sea-10); + --surface-scrim: oklch(0.17 0.02 265 / 0.72); + + /* Text */ + --text-heading: var(--sea-90); + --text-body: var(--sea-75); + --text-muted: var(--sea-60); + --text-faint: var(--sea-50); + --text-inverse: var(--sea-15); + --text-link: var(--blue-bright); + --text-link-hover: var(--sea-90); + + /* Borders */ + --border-subtle: var(--sea-25); + --border-default: var(--sea-30); + --border-strong: var(--sea-40); + --border-focus: var(--blue-base); + + /* Accent (primary = aurora blue) */ + --accent: var(--blue-base); + --accent-hover: oklch(0.71 0.11 262); + --accent-active: oklch(0.6 0.13 262); + --accent-bright: var(--blue-bright); + --accent-text: var(--blue-bright); + --accent-contrast: var(--sea-10); + --accent-soft: color-mix(in oklab, var(--blue-base) 16%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-base) 26%, transparent); + + /* Secondary accent (aurora cyan) */ + --secondary: var(--cyan-base); + --secondary-bright: var(--cyan-bright); + --secondary-text: var(--cyan-bright); + --secondary-soft: color-mix(in oklab, var(--cyan-base) 14%, transparent); + + /* Semantic status */ + --success: var(--green-base); + --success-text: var(--green-bright); + --success-soft: color-mix(in oklab, var(--green-base) 14%, transparent); + --warning: var(--amber-base); + --warning-text: var(--amber-bright); + --warning-soft: color-mix(in oklab, var(--amber-base) 13%, transparent); + --danger: var(--red-base); + --danger-hover: oklch(0.67 0.15 25); + --danger-text: var(--red-bright); + --danger-contrast: var(--sea-10); + --danger-soft: color-mix(in oklab, var(--red-base) 13%, transparent); + --info: var(--blue-base); + --info-text: var(--blue-bright); + --info-soft: color-mix(in oklab, var(--blue-base) 14%, transparent); + --ai: var(--violet-base); + --ai-text: var(--violet-bright); + --ai-soft: color-mix(in oklab, var(--violet-base) 13%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: var(--sea-10); +} + +/* ============================================================ + Semantic aliases — LIGHT ("Skyfall Day") + Same laws, inverted: surfaces at L 0.94–0.98, text at L 0.27–0.45, + chromatic fills & colored text drop to the deep (L 0.48) step. + ============================================================ */ +[data-theme="light"], +html.light { + color-scheme: light; + + /* Surfaces */ + --surface-sunken: var(--sea-94); + --surface-base: var(--sea-96); + --surface-raised: var(--sea-98); + --surface-overlay: #ffffff; + --surface-card: var(--sea-98); + --surface-input: #ffffff; + --surface-scrim: oklch(0.27 0.024 268 / 0.4); + + /* Text */ + --text-heading: var(--sea-15); + --text-body: oklch(0.38 0.02 255); + --text-muted: var(--sea-50); + --text-faint: var(--sea-60); + --text-inverse: var(--sea-90); + --text-link: var(--blue-deep); + --text-link-hover: var(--sea-15); + + /* Borders */ + --border-subtle: oklch(0.89 0.014 210); + --border-default: oklch(0.84 0.016 215); + --border-strong: var(--sea-75); + --border-focus: var(--blue-deep); + + /* Accent */ + --accent: var(--blue-deep); + --accent-hover: oklch(0.53 0.12 262); + --accent-active: oklch(0.44 0.12 262); + --accent-bright: var(--blue-base); + --accent-text: var(--blue-deep); + --accent-contrast: #ffffff; + --accent-soft: color-mix(in oklab, var(--blue-deep) 10%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-deep) 18%, transparent); + + /* Secondary accent */ + --secondary: var(--cyan-deep); + --secondary-bright: var(--cyan-base); + --secondary-text: var(--cyan-deep); + --secondary-soft: color-mix(in oklab, var(--cyan-deep) 9%, transparent); + + /* Semantic status */ + --success: var(--green-deep); + --success-text: var(--green-deep); + --success-soft: color-mix(in oklab, var(--green-deep) 10%, transparent); + --warning: var(--amber-deep); + --warning-text: var(--amber-deep); + --warning-soft: color-mix(in oklab, var(--amber-base) 16%, transparent); + --danger: var(--red-deep); + --danger-hover: oklch(0.55 0.16 25); + --danger-text: var(--red-deep); + --danger-contrast: #ffffff; + --danger-soft: color-mix(in oklab, var(--red-deep) 8%, transparent); + --info: var(--blue-deep); + --info-text: var(--blue-deep); + --info-soft: color-mix(in oklab, var(--blue-deep) 9%, transparent); + --ai: var(--violet-deep); + --ai-text: var(--violet-deep); + --ai-soft: color-mix(in oklab, var(--violet-deep) 9%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: #ffffff; +} + +@media (prefers-color-scheme: light) { + html:not([data-theme="dark"]):not([data-theme="light"]) { + color-scheme: light; + + /* Surfaces */ + --surface-sunken: var(--sea-94); + --surface-base: var(--sea-96); + --surface-raised: var(--sea-98); + --surface-overlay: #ffffff; + --surface-card: var(--sea-98); + --surface-input: #ffffff; + --surface-scrim: oklch(0.27 0.024 268 / 0.4); + + /* Text */ + --text-heading: var(--sea-15); + --text-body: oklch(0.38 0.02 255); + --text-muted: var(--sea-50); + --text-faint: var(--sea-60); + --text-inverse: var(--sea-90); + --text-link: var(--blue-deep); + --text-link-hover: var(--sea-15); + + /* Borders */ + --border-subtle: oklch(0.89 0.014 210); + --border-default: oklch(0.84 0.016 215); + --border-strong: var(--sea-75); + --border-focus: var(--blue-deep); + + /* Accent */ + --accent: var(--blue-deep); + --accent-hover: oklch(0.53 0.12 262); + --accent-active: oklch(0.44 0.12 262); + --accent-bright: var(--blue-base); + --accent-text: var(--blue-deep); + --accent-contrast: #ffffff; + --accent-soft: color-mix(in oklab, var(--blue-deep) 10%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-deep) 18%, transparent); + + /* Secondary accent */ + --secondary: var(--cyan-deep); + --secondary-bright: var(--cyan-base); + --secondary-text: var(--cyan-deep); + --secondary-soft: color-mix(in oklab, var(--cyan-deep) 9%, transparent); + + /* Semantic status */ + --success: var(--green-deep); + --success-text: var(--green-deep); + --success-soft: color-mix(in oklab, var(--green-deep) 10%, transparent); + --warning: var(--amber-deep); + --warning-text: var(--amber-deep); + --warning-soft: color-mix(in oklab, var(--amber-base) 16%, transparent); + --danger: var(--red-deep); + --danger-hover: oklch(0.55 0.16 25); + --danger-text: var(--red-deep); + --danger-contrast: #ffffff; + --danger-soft: color-mix(in oklab, var(--red-deep) 8%, transparent); + --info: var(--blue-deep); + --info-text: var(--blue-deep); + --info-soft: color-mix(in oklab, var(--blue-deep) 9%, transparent); + --ai: var(--violet-deep); + --ai-text: var(--violet-deep); + --ai-soft: color-mix(in oklab, var(--violet-deep) 9%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: #ffffff; + } +} + + +/* ==== vendored: layout.css (a3826169b7a6) ==== */ +/* Australis Skyfall — spacing, radii, shadows, motion (v3 "calm depth") */ + +:root { + /* Spacing (4px base) */ + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + --space-10: 40px; + --space-12: 48px; + --space-16: 64px; + --space-20: 80px; + --space-24: 96px; + --space-32: 128px; + + /* Semantic spacing — airy content, compact chrome */ + --pad-chrome: var(--space-2); /* app chrome: rails, toolbars, list rows */ + --pad-content: var(--space-8); /* work surfaces: page bodies, card interiors breathe */ + --gap-pane: var(--space-4); /* gutter between panes/cards on the canvas */ + --measure: 68ch; /* long-form reading width */ + + /* Radii — moderate, calm */ + --radius-xs: 6px; + --radius-sm: 8px; + --radius-md: 10px; /* buttons, inputs, menu items */ + --radius-lg: 14px; /* cards, panes, popovers */ + --radius-xl: 16px; /* dialogs, drawers, command palette */ + --radius-full: 999px; + + /* Depth — crisp 1px hairline + layered soft shadow underneath. + Every elevated surface pairs border: 1px solid var(--border-subtle) + with one of these. Shadows are cool-tinted and two-layer: + a tight contact shadow + a wide ambient falloff. */ + --shadow-xs: 0 1px 2px oklch(0.13 0.02 265 / 0.22); + --shadow-sm: 0 1px 2px oklch(0.13 0.02 265 / 0.2), 0 2px 8px -2px oklch(0.13 0.02 265 / 0.24); + --shadow-md: 0 2px 4px oklch(0.13 0.02 265 / 0.22), 0 10px 28px -6px oklch(0.13 0.02 265 / 0.36); + --shadow-lg: 0 4px 8px oklch(0.13 0.02 265 / 0.26), 0 28px 64px -12px oklch(0.13 0.02 265 / 0.5); + --shadow-drawer: 0 8px 16px oklch(0.13 0.02 265 / 0.28), 0 32px 80px -8px oklch(0.13 0.02 265 / 0.55); + + /* Glows — hero moments ONLY: empty states, featured cards, command palette */ + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-base) 42%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-base) 38%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-base) 40%, transparent); + + /* Active rail — left accent bar on active nav / selected items */ + --rail-active: inset 2px 0 0 0 var(--accent); + + /* Focus ring */ + --focus-ring: 0 0 0 2px var(--surface-base), 0 0 0 4px var(--border-focus); + + /* Motion — calm, no bounce */ + --ease-out: cubic-bezier(0.22, 1, 0.36, 1); /* @kind other */ + --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* @kind other */ + --duration-fast: 120ms; /* @kind other */ + --duration-base: 180ms; /* @kind other */ + --duration-slow: 300ms; /* @kind other */ + --duration-drawer: 260ms; /* @kind other */ +} + +[data-theme="light"], +html.light { + --shadow-xs: 0 1px 2px oklch(0.3 0.02 255 / 0.07); + --shadow-sm: 0 1px 2px oklch(0.3 0.02 255 / 0.06), 0 2px 8px -2px oklch(0.3 0.02 255 / 0.08); + --shadow-md: 0 2px 4px oklch(0.3 0.02 255 / 0.06), 0 10px 28px -6px oklch(0.3 0.02 255 / 0.12); + --shadow-lg: 0 4px 8px oklch(0.3 0.02 255 / 0.07), 0 28px 64px -12px oklch(0.3 0.02 255 / 0.18); + --shadow-drawer: 0 8px 16px oklch(0.3 0.02 255 / 0.08), 0 32px 80px -8px oklch(0.3 0.02 255 / 0.22); + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-deep) 26%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-deep) 24%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-deep) 25%, transparent); +} + +@media (prefers-color-scheme: light) { + html:not([data-theme="dark"]):not([data-theme="light"]) { + --shadow-xs: 0 1px 2px oklch(0.3 0.02 255 / 0.07); + --shadow-sm: 0 1px 2px oklch(0.3 0.02 255 / 0.06), 0 2px 8px -2px oklch(0.3 0.02 255 / 0.08); + --shadow-md: 0 2px 4px oklch(0.3 0.02 255 / 0.06), 0 10px 28px -6px oklch(0.3 0.02 255 / 0.12); + --shadow-lg: 0 4px 8px oklch(0.3 0.02 255 / 0.07), 0 28px 64px -12px oklch(0.3 0.02 255 / 0.18); + --shadow-drawer: 0 8px 16px oklch(0.3 0.02 255 / 0.08), 0 32px 80px -8px oklch(0.3 0.02 255 / 0.22); + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-deep) 26%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-deep) 24%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-deep) 25%, transparent); + } +} + + +/* ==== vendored: typography.css (2ec1a667ced0) ==== */ +/* Australis Skyfall — Typography tokens */ + +:root { + /* Families */ + --font-display: "Bespoke Sans", "Avenir Next", "Segoe UI", sans-serif; + --font-body: "Supreme", "Helvetica Neue", "Segoe UI", sans-serif; + --font-mono: "VictorMono Nerd Font", "SF Mono", "Cascadia Code", monospace; + + /* Scale (web-app oriented; 14px UI base) */ + --text-2xs: 11px; + --text-xs: 12px; + --text-sm: 13px; + --text-base: 14px; + --text-md: 16px; + --text-lg: 18px; + --text-xl: 22px; + --text-2xl: 28px; + --text-3xl: 36px; + --text-4xl: 48px; + --text-5xl: 64px; + + /* Weights */ + --weight-regular: 400; + --weight-medium: 500; + --weight-semibold: 600; + --weight-bold: 700; + --weight-extrabold: 800; + + /* Line heights */ + --leading-tight: 1.15; + --leading-snug: 1.35; + --leading-normal: 1.55; + --leading-relaxed: 1.7; + + /* Tracking */ + --tracking-tight: -0.02em; + --tracking-normal: 0; + --tracking-wide: 0.06em; + --tracking-caps: 0.1em; +} + + +/* Homepage — Australis Skyfall, dual theme. * - * SOURCE OF TRUTH: this file. Do not hand-edit `conf/custom.css`; it is - * generated. Run `theme/build.py` after changing anything here, then + * SOURCE OF TRUTH: this file plus the three VENDORED token files beside it. + * Do not hand-edit `conf/custom.css`; it is generated. Run `theme/build.py` + * after changing anything here, then * `scripts/deploy-stack.sh esh-docker-vm homepage --conf`. * - * WHY A BUILD STEP: Homepage serves exactly two files out of its config - * directory, `/api/config/custom.css` and `/api/config/custom.js`. There is - * no static route for anything else, so a `@font-face` pointing at - * `theme/fonts/*.woff2` would 404 — the faces have to arrive inside the - * stylesheet as data: URIs. The build inlines them. + * ── WHAT IS VENDORED, AND WHY IT IS UNTOUCHABLE ────────────────────────── + * colors.css Skyfall v2 palette — Sea/Ice/Aurora/Dawn in OKLCH, plus + * the semantic layer for BOTH themes. + * layout.css v3 "calm depth" — spacing, radii, the shadow system, + * glows, the active rail, motion. + * typography.css families, scale, weights, leading, tracking. * - * TOKENS ARE CANONICAL, NOT DERIVED. Every hex below is copied verbatim from - * `~/.claude/skills/australis-design/colors_and_type.css`. The predecessor - * theme built a parallel OKLCH palette "derived from the Australis - * philosophy" rather than using the system's own values, which is how a - * design system quietly forks. `build.py` re-checks these against the skill - * file at build time when it is present and warns on drift. + * These three are copied VERBATIM from the Skyfall bundle and must stay that + * way. `build.py` hashes them and fails the build if a byte moves. Everything + * this dashboard needs on top of them lives in THIS file, expressed through + * the semantic layer — never against a raw family token, and never a literal + * colour. That rule is not fussiness: the theme this one replaces built its + * own parallel palette "derived from the philosophy", which is how a design + * system quietly forks, and it had to be torn out twice. * - * DIRECTION: instrument panel. This is engineering chrome, not a page with - * wallpaper. Canon: "the screen is the polar sky — empty, with light coming - * through it." Three moves carry it: + * ── DUAL THEME, AND THE ONE PIECE OF PLUMBING IT NEEDS ─────────────────── + * Skyfall keys light mode off `[data-theme="light"]`. Homepage keys it off a + * `light` / `dark` CLASS on , and does not touch data attributes. Rather + * than edit the vendored file (fork) or duplicate its light block by hand + * (drift), `build.py` rewrites the selector at build time so both spellings + * are honoured. See BRIDGE_SELECTOR there. * - * 1. Group headings become the Australis eyebrow (mono / uppercase / 11px / - * 0.08em, cyan) with a hairline running to the right edge. Canon names - * the eyebrow a system signature and says to use it often; here it turns - * the groups into register bands instead of headings floating over a - * grid. - * 2. Status stops shouting. The filled emerald chips read louder than the - * service names they annotate; they become a semantic dot plus a mono - * micro-label at tertiary contrast. - * 3. Cards are bordered and opaque, sized to their own content. Canon puts - * border above shadow for grouping in chrome, and equal-height rows turn - * short cards into hollow boxes. + * Dark is `:root` and remains first-class. Light is Skyfall Day. Both are + * reachable from Homepage's own theme toggle, which appears because + * settings.yaml no longer pins `theme:`. * - * WHAT WAS REMOVED, AND WHY IT IS NOT A REGRESSION: the previous theme - * carried a generated full-bleed aurora image behind the whole dashboard, - * added on the operator explicitly asking for an Arbo-generated background. - * Canon forbids exactly that ("solid fills only on chrome — no full-bleed - * photography, no decorative gradients", and the aurora motif "never as a - * background fill behind text"). The operator called the result ugly on - * 2026-08-19 and asked for a canonical-colors rebuild, so the image is gone. - * The aurora survives where canon actually sanctions it: a single 1px accent - * edge under the tab bar. If a background is ever wanted again, that is the - * conversation to reopen — not a quiet re-add. + * ── TYPE: TWO DOCUMENTED SUBSTITUTIONS ─────────────────────────────────── + * Skyfall names Bespoke Sans (display) / Supreme (body, UI) / Victor Mono + * Nerd Font (data, code). Only Supreme was ever vendored into this repo, and + * Skyfall's own notes call Victor Mono "user-supplied", so substituting is + * expected rather than a deviation: + * Supreme 400/500/700 — CANONICAL, the body and UI face. + * Space Grotesk variable — stands in for Bespoke Sans (display). + * JetBrains Mono variable — stands in for Victor Mono (data, metadata). + * Both stand-ins are neutral grotesques in the right register. Swap them the + * moment the real faces arrive: it is a two-line change in build.py's FONTS + * and the --font-display / --font-mono overrides below. * - * TYPE: Space Grotesk (display) / Inter (UI, body) / JetBrains Mono (all - * metadata) — canonical per the system README. Vendored as latin-subset - * VARIABLE woff2, one file per family covering the whole weight axis: 102 KB - * for three families against 56 KB for the three static Supreme cuts the - * predecessor shipped, and no Google Fonts request at page load. + * ── WHERE THIS DEPARTS FROM THE PREVIOUS THEME, DELIBERATELY ───────────── + * 1. Depth is now the RECIPE, not a choice: every elevated surface carries a + * 1px hairline AND a two-layer shadow, never one without the other. + * 2. Radii move to Skyfall's scale — cards at --radius-lg (14px), controls at + * --radius-md (10px). + * 3. The full-width aurora ribbon under the tab bar is GONE. Skyfall sanctions + * exactly two accent expressions — the active rail and hero-only glows — + * and a decorative gradient across the chrome is neither. The colour it was + * carrying now lands where canon puts it: a 2px accent bar plus an + * --accent-soft fill on the active tab. If you want the ribbon back, that + * is a deliberate documented deviation, not an oversight. + * 4. Widget stat values move from the display face to mono. Skyfall is + * explicit: numbers and telemetry are always --font-mono. */ -@font-face { - font-family: "Inter"; - src: url(data:font/woff2;base64,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) format('woff2'); - font-weight: 100 900; - font-style: normal; - font-display: swap; -} @font-face { font-family: "Space Grotesk"; src: url(data:font/woff2;base64,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) format('woff2'); @@ -72,148 +485,129 @@ font-style: normal; font-display: swap; } +@font-face { + font-family: "Supreme"; + src: url(data:font/woff2;base64,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) format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Supreme"; + src: url(data:font/woff2;base64,d09GMgABAAAAAEmMAA8AAAAAzPgAAEksAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGjgb4hgchToGYACHRhEICoHyUIG6VAuGCgABNgIkA4wOBCAFkWIHj1Yb56w1bJsWz4PzAAIp6+4zEiFsHCAA6unIQLBxAAnEHn72/39PbowhN6pV3W9E5M48IrOERHaMHJjdMVJr5k75U4VuOoZorVlkq9lRq9cGut2RRuZMTNnCh6qFxEuWo5PyL0gEgvjhE/H4tXHDn+77nkZpBImUQ972vf5DTNAdk3bmon/zRWDcwkfNqReeyO6/P1XdI1wt7fCFC0WgQuGTjoQZ4uf0L0YUkhBieJEgHiRCgMRfDIlCsDRBEwgELyZValClKmtXoVNoV1lNoV1lG7SdV3x/+5XxD//3ve5zfyaaJsoHClgsK5YVsGGiGSTUTwUsYIEr0FWBUrU0Pf7//YPPtc+dfPCqNgWvTFIoGJaw8JTKq9PHX8imEA6cf50xmBl5DCsj28wy81hN1zPz9nImqeUqlh+xNvbzPdz/y1n/dGTNxvTUOhUlYzcadEog2OYxk3P5dxmGOy4/IAsF1LLIxkbshXZBFS5VuzDeRhGM43/vgfxuVGKpZa7X+bYr2YFdvSOALgDwQJYMUZzETnwEHxpprpOSzgHgDrECEhz/SXVcYwBYmbMe7nKPhqyytIlDdAD0+d08ddpP2q4yFbLNdgHOgqmyUBrw2ycwfP9WJFkowiL+E0hFoB6u7Y8JO8wmbsa8tFs5jMT4PVL4//9t2tvq7kiGoB2yE9Y5mQB/6uUPZcBnf9GFu5Qz7817ozdvxpJl2buSSSt7QasFWV4ynT9Pb+SMwBv5szeE+6tNB2j7A3GAuEs6qIhKoC59SdSn69NWKVPmhIf/X/tXe3fwvSQFtjmyrndVKLLizQRPpkRT8DkBVONK7NEJRPnlX19l+apqyV7X96+5T1skYetqUcjKOn+AyR7tEdNL8q+zPN35lzIrILLEisCBqqokUp0q4wu99ulunlPapRmwYNM2xtpvxG5fby9Oe8/0Huwe0sogQcSVEIKEIDJf/dtjTc2VA8cKYMpY6kl85dnuYczVslt1+b/7v5UKCOJCQUBBQOoQL1/A4mqZlE69K3/LAwJ46XT7qwDgjStuHwA+3vv+PQADKegBAMohNoLZpBfc1rrB6qkXvL4GwFigQEBomiKIs/MFAZ/fgR8h+JsmC7GQgOJT8LhsDn5xuUCA9HO9nM3YbHl6DBYwCO7N0g8nFc5/AOz4K0jwU48UCfeC+/fIViyt+Lpl/9EV5YGKRFlQ9ajNqAseXh4aD5vHIPo++i0mDSPFlGCqMFJcO24QN4bb+x09wa8cvAFfgm/CDeJ3e056XiPWEEeIG8lfkqfJr71J3jQKoOAouRQXZZiyn3KBcofy0sfLR0A1UZto+2kXaI9oT2mvaf/Q4XQC3ZvOoAei779mMCWYNCcQIb0f/Slu8FkQa5g25lvylxnKMPk1BsR9/4JCgX8sbT95mjj6fk4hjkmriZCWBrDb04olHS2Kb3Ydo+Ti9lJcrjWAra7ASCnDOHUz3kC5A91LKC/bmny8EoHtHuWibprnJNVErKHtJ2+AdgEGAifT0RFyNCUe6CR4Drs4s4v2D/ulm+pri3tO0rdgoFwbBUARUcLh2nKUDqYHZFubYakRRLshEBo0xjAbVQdKAi0wxraP6ZC1nU45s/VzGiCreFouuJROdtkQWXhTeZmeYN3sb0WEywt+e4iRyg+BHB4lImqkikqsOAJGCS1imp8s4BMQxhMtTz3z/NNfGLItL6LwxBMJKRk5RSjzoqKmoaVjYGRiZunhwpsIz8bOEc4I3OEN5BdchpjCdYuEqJi4hGSmkZVXtGRFOSt5VetRk7qGplZbvSSQGB7IZaFEdxgExXBK/6aRGmk0OoPJYlcqRBmXW+a1KoSviJKyiqqauoam1re3yXUiTddQvQj1pxqWMGNMa67RIqtViDY129yZvYNjnur/Jc8R+s+rS16QBhFDJCg+tJYxVyDz+JYJSmphSY0VHCkfsSGXaM7RnWG6g7bFHzGmCrKC78YlFywiNAVcNx7zwKhNBnmGvEAh0FxbCGMkkGcX3KM4gTDgP9TQ0JHC6NXWJ9bPzEk+leRT1S7WTjB16gX1sfQThiLlF6kKIifOuHEmAIvBBNGf1Dp9JCiRzxNW6MY7oPUzgHOvML0r0w8bQ1dpB6IqLE7RS2QRx4mxhUr9hKFYMTH0h1K92zRP3secy9QQCxofQBRVVMX4+NDMikJcQtr7nD2qBWSZue386vBQdKO60Hn6hJUTJteXfvgCC0UhTlE9haJnGHqzR8Pk0Wqbb0eSJNu2P30n1TKSwRiPYIKb2E9CpkYw29z/n+bDWoCsANJiSEseUQLlHLLtMC7AuAjjEozLMK7AuArjGoLrCG4guAnBzQjuQHQXgrsR3IPgXgT3IXgA2oOQHoL0MKRHID0J42kYz8J4HsGLCF5G8CqC1xG8ieBtBO8ieB/Bhwg+RvApgs8RfInga4QQoBIexHmCOCKIIyPEhM0PtgDYgmCbg1wocuHIRUAWBVkMZHGQJUCWBFkyZFyo+FAJoMqCTYRcHmR6yIyQ9SDXi4yz30P3JLvUQM7xSSg+AjLWGxm2lwAhLgMwLiykeQHUBeoDnYCc9FNJP164/NCF4YpCa0/epD8OZGA9CHIBcYkdvRYvYEIbCj8gIWYeQMgxIFCvdWQP+m0IV7APdcj6o8Yko858OhQliZ9lQlNzTgPrFhx8EAmkIkMoUTQf6FoyvPhHwb/CxMLG6bl+swg1bwGfgDBEQmISUjJyilCiVNQ0tAyMTMwsPYywQmzsHOmEe+lR4BXyGb+AYIbIsImIiolLSErLyitasqKsoqqmrqGpZbVfMxaUNAQjKIZTQiXSmWwpGbkoQJVU1DS0+h7a0Etj01gQraazjvHf8OlefuMXOYH1wiYSl7ABXuC1dS/rYBRx3XqM0knBEu124Shenu5MrNO9sWvng+zhO2PRsCeSTWQF/baEe3XUCA7mEuoKDuP7fq/+NUwsbJzi+uG08WWAfs1Ib1gagxUDvJHJNNdc3hs+3QufX9QENgtNJP51wha4Czgdah2I78JqwhjVMsVl6YTMct88ynvmR0r8XduK7KTbO2hMROcKbDEgGVa4Ub0Okd3rdyycZB/ikPdHyU4hzkxQpst7yeRNYRq2v6XgAeRh4u5zJuARfh1RHVkXA/G72D8k/woTCxun5/ppEWLeAj4BocchkicmISUjp6CkoqahXerk6CEGMaYJZpYe9sCqy8bOUR4Sbz99wS8gGCFEWERUTFxCMtLysvKKlqwo9xVEVUFNXUNTy+pyjdy1RN3K/RJKEpL5MAiK4ZR8zPNZXkNVT2eyo6BbSUVNQyuGSGPTXFSO2+une1HHjzWBw8ImEm+PcNynWAeMOQvNOkoFK/sssksRbIfMKWf6cyJToGnYvHUPB//riXwkFjKMQkalolPwRnJeFvAJCFMJVaqhoZ10/IEgCG4IK8zGzhFOCneF2MKWkRAVE5eQzLRk5RUtWVHOSl5VkZrUNTS12upoM48E9WhIMIJiOCXfKqXy06AzmCx2pVhlXC4KcCUVNQ2tZYdaj9K8bmGV2+fcy7E/U3Ii5B72gxf9xmyCXATKE8aPFh9oDFy/jNHp3ILNgaPAAeljF0FyiOQUyRmScy5x/Ypvac5qPSvOgGlYN5e3Si87V3qDR0wSyCioaEUvoxKKRzKPBXwCwv6FHts4RMQkpGTkFJRU1DS0dAyMTMwsYFY2do5wltGpPAO/YIVIwiEiKiYuIZlpMou8oiUryn2FpNrFZtU90vSL1dP/69uxK6vgoyFgBMVwSry5TKXRGUwWO1OWGeQUlFTUNLSOzFFrjh4ZrWfFWXHWnHY5kCt7fp1rljrEGTgCa46eljHwfReODZDQhcrZbZxXJyhcOslM4sB+FQTm3QM0ZTC09xgviRgoCoGW79yFUHrzsD+cdqD9eTqZl62RyPq09VPsioy/+lpRifLJU1NS0w7b3w4DJ4XvPyi8fVIqahpaOgZGJmaWgsXCiIpnEmlZeUVLVlr5sYAmD5FEGOVFGipIIlmQRHIp2vKHRtO7vC+L/1ENHYOzudd19AyNTW3tHZ2PZ/j+DZATukftQuyGCLlapxmQOu1G8b24ByPOdrsOeOG5NwHeHjN6z/jSdnfz6X++mvVleUDqqGEPkIofGUonDxxR24s/C9H4+YHZdfn+q3lBFxbStUSJikp67jbB4ecfFQRk12Qe1o0xEzj3fdk5ski/jF0t1wTflGpaABt1SwjXEu9JzEPEJ04JpGTkFKEUUVHTNO1Y9FGGSKOYmFl6mMnL5xeMsEhUXDLSAtnIixQtWVGOqlBds60+HhiT5ygCRgkVSmeyLcIpYtylH3MC50Umfk7IEGzdlBBwGiems1H5jvTmuTt5jM1Bg83dS5nksfaF3TBlYoAOaAH0UcNnRpSn2ElIycgpQglQUdPQ9jo1BoCRiZklrBgbO0d4xfxTsPsAAADodAAAgA1R1VLXbKuPBwx4BhEwyqilqcOcbM3EMAzDJqaH5QhzddiPNNGRrnqQEkSMQigXTNVN0Hq9yC70SPbQ3flImyF1aDoElBDCMKYNJOuCWBsU2Sgfoi/1fbe8bDtVhDeH3Clnfv05TZAjPI8uOJTuzmWzFvVzHgv4BITxxKOnnnmeL2ouiIhJqKhlg9ZaB2EUjzfNNAYr8h4rKquqa/Ztd3XN1s85ubnPnRy242RWcSSqPp5+hj2gCdQUbhqDjbwFXOItif0k56Oi5T+R/zomFjbOWa5rj2dmFEVRFEVxHMcf5IqP4ziOX56wgmxi5+ApL8oX/AKCGa5mVOKSkcZkI48rWrKirKqu2VbXIQSjhIqmM9lRACupqGlovcyQjlJSwiNT4ZGpWzfsjmSXtz3hsKPKIHcueXBZzRV6jBn9sH8xsbBxiuvcljw8MJ/Ack25rlp9DIxMnMKpfCoveMj53Lxb2I6e0dm9ek9GHqMWcAd+9Khp7xa33ZJOgn+0j2DA5v3qjPttMYevZOTEfYjBVdU12+rLmvqr5QbeyDScBOMO/8nIxZeWm8cEpJ3hz1GP229OtFfZAfjD3eZTVEuxk5CSkVO8jiJ/+3C2LS/BL8F/kbBxHH+3fAY9QdwATjpJze1cFDOR1R+0depT4mY+GZpABIZgGIZG0hAEQRAEgWEYhlEYhmF49njr6XfBDCMqnkkiDclmHkVLuYKyqrpmW12HEIxCpTMnmwAYvGXJQk/64Y8VymKeDvJyRKg2ceJxdeLrIlBOaDORRnJqGmpaRjnULEIUCTdXl4V8jeE4Kt63vEOAFdUS4fPgCmUirtILBbqX7xXvNxfkfZLXIj78/nCCIE6JQfblBDgKCR3dnA/OQRozP1Eoz1HzU8YCVSFixdFKjlj5TjEBfEhRH0Xjpf6DGAoxH+Yrj9+L+VMlFIuvKBfdx/HSna9EKdJ+D9xXjw9jCE+LRCp6gYWYxshs5esovm9lhQCLEdWQMJ6T70v48dSUhwFS8HEIBLE8pugxC/dfY7M6ure+nQHmGKaElHiTe/DxBEcmL1NHiOPRgzea43B/6+jBdefBA4GIytGgNBCAoI0Y3uIa+R9zskyBJCSiySjEUNKIlyMXm16+FBYl+MpVyFKlioiLi1ijRhLNWkh16CDXZymFESMMVlnHaMxBFkcd5XLM1+p861tNvnNLs2k/W2TWrFUeeWS1X/xijbfeWutvf1vnH/99cTY4DAHOhYOx7CiySCeLLtqpYot1uvjinSmxRN/HTuRsuZW6nT27Xyuv3G9V5fR7vfV6Ar5+AST879EVQgWDQKBK4uXRBYuHPbJoaCkUaVVe/Dk4STTH5hKiIA27esPn6xd/gcjm62vERodGkDFeDmgq+nxEDwBhkhv2AFUptiXd+Tncf+5+GcnZjQZvxhmAKhPojYHNQoB9YKylL1EAUAP0jYowXzJGUyeHe5u6bjPf/JPJAGLcRkA52t1ygD4EqoAc/pQwSIQvlEAg2xuAXq2OW63NvHHTCoq80NAs56z8qWpxlQRkIsVDBoUTHuYFqP7XLHs5XrjwbX4B53fSg00Am7Dpj3MoDuU4nF0RsDZybD9m8lItrKYjEOJwHozA4shrb2xhlmokFaNoyV8nRmQPVC/QzsK9rrRDwMmOOW8Ph/nuNqwuWa7ImJjoAfXlN77bTW/piKf8BMAAWcyPVUXj6p6/syd6cbalIdS7SwFYH9rWstsCXGx7dDs7mAqwwRPgbHzrQFkQE17PrrV9BbAci6HOtfr2jZMXLUvnViLjVWZ2uqxk+o31Q20kgerBL3uj382YryVLGfXNCdCZOTYn0II68XOAVx8XDNEYBjOfz5J+R385idT8j6G/WzS0xmM2qgvtGDrPU6YE6swKXYjeGVv6LE/t8RclGo7viH8HfY/eZfr66MLK3iYrxZ7LkcOmaZDy1pnxipUkhpqwLbk29jH/9iuAW88fbi44v8JigAwQuMySU5rTA54QcGgIJ1wanHtWCnAHq2gf08K84lic/jp0DiqggIUbZcDRa7eMFGwJ+W0bbazU4P2MNs4EYOFRUXxqD/dVEj2OffwK1exJNS2j6/2JCS9PlfoQE+gn1QBCAoCB5NKESRIoUSjAgJfPH6AljhCUr4WyiQVHNjzUtlj7Nnzrztl8v4jGPDrrdawkn5Kin41/sGfwgTYdSyCZHIAdOiThAyxiBFhERgRA0YmGAkBhshCg8Mz84Hc6X3spgaGGYHE3G+lYqFN9njbxjHCQkueXFdXz1XppBWp7C7cOvt+4fr1KPSECTUcGIcDJBYQBZBB05HZAeFhRg5FRSJcmqtiDrfrQmwqNUaB+vsxD7N4IEQiVvDz+TTTiXKtGwABm5SYAIeUJ+C08bcBDKlTfOxy2e8BrFy3WBuZoxDs4Crzl4GZTgPRN9xzwC4DpqPHujuF2ZOK1KRDTELGQjipyDGA9PyEcchTPml62MzHQdg7Absb0fINTkX0zM7JhXUEZUQ1uAE9R6qs3I50FgAv5gTPVvuFSR7jMC1DjiZiYOFQ0ez5jRvblO3+jqs2VbBJoViDkPvMMlKGapZlqNuIY4GELox7nvbuSe0Ll6KW7Sr3fYS5C1GqJA5ptqfJifGnAdx0Qr91lHj6HlwlF2ZvYemsAOeQUzxpftjHQ0XZR4aDRPDooGxM+uBCB6M/kxIk1sXYPbQ+L1l4UjM6HxesmEUHvwxL1xUOSPpkqQyba/M8Zkz/45QwCmFg9SKFCIYqVCIXJ4fotxZrzFfbqyTbYgmu7gzIuXDnhK9mKTalVXEqdUq+4YfXd4WCd0qGsU9YrY8oG2JgT2FQmyl7lgDLJj8OXewIMhE74+ycRSnSzENw3jFAOlxehP5NQQmqlHaIvIa+WuQ3ZQ/u3tyYB+/9nvgDgfmtJIfPb1Qak+zTVn8As5P49Xt30N7cRigAEoFjFV0RRxVE8ZH0XXeUvTKwUAnLZTLcwCXDW+tAu50xWfr2dberXGNFwbAjJpIcfwLLBNYKrSodmLVWXWVbCRPWDCVVR0dAx8i+g4OYkBZeyKagBGvd+c7ocqsAccKKKsVxeuFAfSKEyXyG6IarE8K0qvCe0aNCqsjucK7UlIdR702FUDR2CaASmDCDAJVRbsoIQ4GHt6E1vg0aylul8R9Crbdouo+cxZ1wI0v9Ikon7VbXErQY3ox5wU8Gau3DkmNNbKOjn5QNM9gfLFXbjc2BLo7cZ/khO/DVew0mefwZi+n/LctPCmEvgOADySycBWowfvMnNZOQbBHH/TSLbClBHCKUNQGKTY3GC6m5kfoMzzutPhjVbdftu8k42G2oWB/vAhAsiQoMNb1SPmtCBFsctvxYUkagoh6yEbIRsU6FJlzn/n62fy79d+ueT779PgEQLW30ZL00jYwzOOKd3C6zW2ywKpkCHDVyO3dp1SymD/iO6TOhprmVlXFj17fvq/4//a/8P//h1ujMdSZer17+oU/dQ9lD8UPRQ+DDjYcrD2Iehs//Mvps9MXt0tmBWPQvNimZcM84Z+4xtxjpTNFMwo51JmvGdoT8YR4PpWekG8xLGHThw4qLUPYUeFwPiQ4++RgKhSCyRyuTIvFE6+bMKky8//gLGw/Ug6AdhFCdplhdlVTdt1w/jNC/rth/ndbuLxBKpTK6AlCq1RpttO4N5ulswMvO6vcCiFP3/Xal1rg0AbA7vvznhc7FIIpPKlWqVRvvm9dt3eqPBZDHbrHYHobJqVK6CI5s227jVVKuVs3YLjdWqqY46VQHyXmMN5dSmVmdae32rT5m6WspoXm4uXdnZ9RuyNlLk8iuouJIsFfqmLqdKqzJH5VXUU29zzauo0soMGjZgqcWWW2GlZVZbU7dVNtpkgzdJUmpIljyF9lRBSQFk+lSALAAwawD9CWjzH4Ce/wAAsFQMXF+RYYApCX71oD0mlbyD2iaQrSE9lkKOxHwUykMC1aQOvN0PWFkhZgtgbfOKQxFNvXhcTaJ+uQUbk8ADFoxsQU7yKibSd1tCGfi0djEAAevhtYqkC62QhWYXl7LxYkxsTioIkUETRApqyqrjXxYoYvrSuSF1xXxUhOF8eQzY41XC0/cmUJ38m9ssnZuHDZuWXCJbqhoI8K5fUoap6FaL68l/9W4bQz29rHIqD5kZXlQgBNal5lJjYdtlKyjufm6ZNWvEvbflu6XqCaeqONyPvgH+LWKqu0XJUTUL0h3rC6o+0YMkbOCD/pXTF5DhGmCgx8XYZ5NDxTv4JUMXQ9+tRIghoyv8n8vQs896vzB9p4b5sjxnsRkl9QfWRQEGelzMW9InPmN5g4UEGBfDzBc4tDVkIAMJqVFosK0ZelMbm1hDrQurVti2Lha1zwvaDp8Ltli45SJb8ctSS0VkLAHvTjS3heLr3PkT6dk+PHGXdrKPNjlJ2ylCf5lpHbuDJrQyW25Yy1Z+MlkK3uhv4x6WwwgfQ19op8ujrtmhaBotqGzw2jvN0yxs+jIz62uSmQrCMxHB9YoMPHDng/efPy7XRqIHBb3u+9wbZjSbraXP6aYvteWG+0vG5XEKq1iBggC3nh9xD+zDOmmSXggEhn0PO1xC7PpVUFBx0+ldFHHXmz6kxc13Gz4+XzNkv5pWhkEcKNuMWmsniBEyT+VQuO7xnzF6j83voNNbboPx2JXxCYycnNjDEz4yOP4gYUjSHZHvyPKOQMzr38YBYa45yzjJYuTQOs8xKhpkyBTlNykGwuOTVZZBaPDjOzhdJk7yAOG02+H2QHwGIDyVnO9VfrH5v9829OiUnINuPCKeupOr47lOUucNp1ItCY8MLzBywHRbLdHrFMLbtWb9NmEk+Kwfmbji24CKlpYzjDZKszRKqs8JCAkZGViRz83gU22fLfu5J4jvoE0tavHUz3H6nsonRXnV3uMSlSUy+rcKjDIUpyQV9SqSUsDtmB04yRaI8IQgXAmbtFp11M/CwRZb7LAdgHcWEaMptgAHOAHO2UGv7GIMu3tTGdPuxdMEcFaBqeGgABg/kYHccNdej28Ebuq4OOOWOliQvyuN5UmpM22C4T/0hoajEN795yvsIctl2XLzsQnzgpaDwtK9BrMrFkCr+3V316p1AIRRceZK+nH1wc7z3B6lAj5UbzqqGo2HOmXM1mmZI0+yDFeBXHfwZUmdUMO/RbfeTnUy9eSIeXE6vvzYzNNTd2pHUoNr2nO53PFxqhN0tId0WlcI2tunCB/eZYmcpuUoSqCEGWuVh8H4Od5yLHovoPu27CyEMOnPJu60oQrZEjaX2KRLhnOyNltht7LCk7C/T4vdhTkBTa+UJSo+T6VdseRdy+KyfZsCrk9lxaglWkSaCEKSrIyib0jHrBy8d6Ro+tTq0aysI/n8ZLOskJdaX01SRa3DxbIcyujV6DD3aypRmVB0WoE7g4muIqjOtQbfWa+e0PP5V4Xnku+xMuxWBNle17IuY4dTL3dbgBrMQCWGgPpYEXKZkFvgWg0Ljlljo08ghSxGIMu3/tXRMQ1YmsWJGBCZhAleqOCWSHhzOKvQQOvY4IlnxvE2lySJJBVN6AIAZ/XmDIpGCqPvZ02GWJ61Cbk+URA7bQAcyLlA0sL+kfQ7aWaBRXbkISLdiE8I/17hiarN1rto7RJWGHEn1iaFFpPJhmXFhPsossJekW+RzUBFxGaeSJGQTcVVqj/SQWw61gFMXBqQ3a4KySxKJcFQ5Z7x1xB+8/54EWpZH9fwLvCEPJ42JJr1p3r3BEAQHmeBogRudNIWLCyDd3ruHRac9UJLBjrLUqn+GUyad3POrpqmjD6hAFcL5h2EifOZw0ySnh53MS08xWowDzKxfrTGm5h4CRI86JYdh/WT4Ifz4QQH1ykuUHwfbw1oKGtSVy2D5wo1UwmEnzK6yJl8dQH4hCgcPO58cuNOQm6vU2iHt2YKQiMDbUZtui2a+jLFd+Uccw4xwuix6hond8xseRYgFKrvGavctruWJ/bOSmRnA9BrAFnfZotjXHPG1yXi45abO1jaxMr1Gr/CXNVY6Ld3zeqDL2/fo/4Pz9RqxirXe3EFaeotp+588yhuuHmMpflrHtimeagLrFdu5/0RH4uOJ0fDeSaKnDFPH/lraVuKlmUQzi5Tw2wpZucm15+dXjJd6mu9lpJbZ2o3q06jAankH6s5D9YUFcTNsBBtnlWkzRM4kQqpz7cX/J8t7JYFlUFz+hBHdbC3zjIPc3KaZPhh8BlwM39iaUOFTdsZpGc5JZnOILJ5t1gADaLBvoxavOMBvM51k4VkNdfhNV9psEW2xF/0tm2Zf++Q3Jpl0GhUoP4QyG21Drc/bi4zeHpCefY5IWpeIx8jajCec2e4K79buXftRpyrUtO6eyWswkaCXczABter/MqKemfWaL+tMO811KkKvUPSUgTQFi+z/LwYgje7ytb4n6vcR2ZsYsfnS1fRxiQn8Yd3Ww48V0PqDvYG9oE6rqpVHUIgSeosyi+6yB7mjkRd+ewek0OEWuXvWdbRXvhI9kIqq7mQx/uIJbhEBP0lpVEqbbO+ZfE80mObG/fwCRhZOQtNowDVvL5/DQNUuccCUiePqbRaj5Cydnl8ueCmlnOMnqvMbKmC2DSKtB9/oqTyQ9nssbwvmF60mtpydJ2yCyq9ZmWT3rrA3d3qyuhA3ZRkkO5JUllDPZDr6TFWEk1aemNgZ/lgzkMjZz+qX6ctB6FPKjP4g2duLOfJ4Q2Wf2LksD7K8HFDgiGb5tjXDI1TVrFd2r7y8MgGsix4meYvswp262B2lpM0QHgjn6o4KauUVbd01CIUO3jriwFqIgCBvIdUoppdkusiudcRMXsBFZMOv5SRT17KwSLrtwUshM4yWNEsjqpHfwkNlNYaGAN9a6QZTpOafDkfM4vMno4fGvsmywy04VCzMPA1XKMQ86NXwxDXy2sRra889dgIz7BS/vP6sqUV74/2htekhHCvclC4z+NBnD1Mw1gjSeLOyAcsoW9RhwFGlbYCmcp1Rtb67JPBUalkg8QQRe2XnSOdlqVy+ZHjrNZjw2Iz/HgMZktGsiTyi/Y7KGZUZCQtpDoBe96vkxo1l/INZJQlwfFaQJY46tePRB3bFnZCM19fcc9zA4r3XnqCj4hG1r4Zians0vL8Gf5wiJN9wOoixFlPBlash7256lgovazxqF3iDZEOnJfUeb8W80jZ+aPQE3Xb6aTU2XNr5C7ALVuj7ZEouX49qIEs563IvFoVYjmXA1ZiDYzER7Br0L4c5ei+F0q57xewGJn2tnCk/VuOyqW8d3rvyE7E8e7O+46IEguohOMRfssKcCNO9EBjTAG1JowLmK/I6bTrJwBC6mrQwzoQp/3vPpIBK6cxVPC8h4go/+2XHv+Bm73lEPUPQM0PYVPYvR/peMxPg8vxlDG58hvzV06N1KH/EDiM8IJRABOnjHb73MjnGlWPC78TwuD6HsH54+iAn2F8qQRwqTmMbPpajSy0aKOpg4rQlEEfhTHTtwSlqhNRNYGjVz9zHt+2e5dG+AZ4gMUaG5LRoUK9cqS7e99t0//YjTgJtvyMZjiph0+sve0PvEuERZVtFKoW3TCCx7Ji3mgJwSnxLHWBiFvl9lxxzhAB/SavouesAfdidWSZz1RqZMY8R1woilUyLohticZmy4AEAQEPDU/CqV8QOGqYa12F5hOZfRQTuWKdZT62ikoR0R2xWklykBFH4lLfP04TFiKv1o9buDyuvQSR80oG9Ub95D46nULPBByRHbtTaw5/xOWJH+1f8rLLyrUdYITQ4glVaI/0Sny2knLrY1sr4eq6cXVVg9h08MxwpBegStogCtAVbiYdLS8EaJ5Q1uqvvmxvOm5muf5SMkEXLMk5DbhyUyFY4gmXj+i51loikhxvjKoWypCeKr8LFK7cWxqTqGiPmdTHXEsOqqMQ13eQQQZv+vt1+qFAwE0XDIWTLRGycIVsJSR1N5AyqC4RsRKQALplX1KZIPMSNI9uu4SIRzgZVqpDZDhIpgzBDqy4pW9Gbjui09BMesIxoKuJIdxIfBDQ6eKIgKhNIGxJOZ1lTYgpUBjq8SHyU9KpkvrwKDhe3syNLbwqMTcjzCXaLKLLeqxdTATRab+Yn1wEHA4q5awHNz7q2+RatKrJDaay6wML7qQlFF65ciXqwWfDJPMrE4IwlbTMzZXUovQoXAMfsIWfnDvZRZROIspXFYq6zatZJmK6uVBkYCAsNhggfo23J6s4GqgsQHnC9GMQP2Pyr78TqE8o2QcpihJrCJqYQiAWsq8X8VYmQiJwjb+LxLKYvimmuiiZrNx0UPTfhXc3QEk+s3XNOsGvP9K7KS2qUp2Q94u4SS559+S+GEhyEefL/7rwr636WrP/yriwo+svlc4H/y8w/sbB/mhTyJ4aI3kx6nB7O0Wy0UPjG+Mf75se59xR/bxChC4Ks5KaKbnyGJCrtHUi3CwfWaIg746N0FvoDooV18Z0vJs0/eAVtRxoJ2pTbpwQcPMqj2II8exBsemS+0kD2R9nJDJJOV9Y6hailv78jtiCx0EA6zr/W9+AbNEYDedvc2e6AEK8SPAXRdgPQsgD+czGwg86Eq6+3B+WnRINvnPQh+BgaxEKcBYu+NxBwTCjba++0uCP4zvax+AvjLb7y7Mnr8QcM2vM5DfVIm+Xt7oPCJTSqGg19bHPTLhGSCUUZrzjXB7ig0tDzmcBCvjcJc/niudWjPgz8pGh8pdJfeLCjraPCKu+kuEfWvo4o5EByCopfnFjHS3solt5Xv3ViTg/OD7YPitOlEp8kiObzfUBlrMe7xyod/HXA5ID/NkBgUn8ZPDo7mPDY/CzkJl6ojPlhBrfUjXUFbd3HrQs9Yz6xjue92mEFsTvHYTWHsdhHku08+jzBqiqjfajFMpxK1Ykz1CId3DYMxKGglkcotJlqwusFozFWLSfipqwIkUnRE3WuMt/Q372MMiYO37cCxzpUlry5FS5Ra+ECnRymrwgr7XrzoT6zgRxyPQ6mhz9yvQoyjuqwQKB3BlSxgPQuxr1URX1yPQq2jsaxIiVufr+qiUNc/vXq5bPkUSqqvNz1VadPFNd8fP6/QQPQyGxI9XUOzwdF3CjwB6VF3YtnPXfpBQfPH7TkVrA0ytAWtcvlfcoun/m2aP+v0rnT/37kX0dLOI9y97qJQtufPiHM13S/xQkmAu6Ld0TJd3LYqnypYnwUTVs1XAiTb48trQLgMGly9DlS9Dvrxg4losjYQ1AN/vR/BG0Ytk8Aeem7xBU6uVBCtbV3uQkOtubXXU2QNq3KaZ9vlAlwYuHvxrni1RighiMTxRM2qyrkkwgMvs5qiNMEc+RcPiHkCIrstxdX15ZWW6Rc+0K5a7JRCMYIv7SWoYssaJdC0Q/iTKlmbrEnPg8gyitLMOJrrIiLLW2ua7qMktGhMbtDu+rBN5Lioftw1wt61HTg+KRWwWARqx2lyOKrRhXA0+Szkvo3rDZ2G70+0zy4WaypbUW0LDOrvpyhiSmUVS86HTDGdxob31bWyWjorPO2SYWqyWkTLFcLBHJM0lSkQpccr6pEBl3GUEU1t1eXUh3V0UbWHaGuamk3N5YYmbY9BGVUQ30wvbq2nbBFwmkpEFuWwUpYTUnQS5NTyNxJAIxdAo4pNRNANlwmtKs8q76GmdnXUUTsvMWiUWVRorOeUMZXxLgL+aL/QPCRv6fDgyVDUKf4O3obJmyjX5dppbNMW8wbwTvtp+HzgfrDNDbslOtZDkH717Q2bOg58PGXX2UyLlhslBlFbsZc6GNGbs1LV2ckUotYeZ3OG3FLUW6vKnrfIl/gJgvDvAHezp3T0/t3sP+edtw8tQGa/GQ0cQQRYqyJZICnMi75lCBRii4LM1kjCLSEcQS/ccQAbcc6t+8rXf4yLGlw0fGh3OeCKGw5U+iW5bQiGWykeycVm9XPgcQeLsD+LsrP05UfZw4+b5B3igHlsl79c0Ws5/ZEN4c1uxb2GNzzKlouNMqFLJj6VZH2NJnS2UKHpvOVnCAGtu5dKjrYufwgraG7g5MtZW0YkGurkR3Vqcrzl6GX2FF1fS3Acvkq85Fva1X2+Z3d+AqFnov3r3zYrbeBCyTJ4xFt0KMIU+KjOByPCnBNnnAqHpMAhC2fXio62LX8vmdtR1OdKl1WMGTkbzUhmL9qg2x2wyfGgZa2wFYSUW2SRtLyppSwDKJl516rhTf4WiY/8T2rNpVV1birgYv7rHznefPTKtjudyfuJT+50tVKTaCkY67Y3TrZMef155fq5sspSdbwGw4K6LINIdHRD62gcvY/y+vg2ZWmN91oYvwxmAo1h/TBr1xX2gsBpHEWtL40+JqV4e9NNLSXzHPVAmv1Kj5qcENwH+Lu3A1Ps+F7hpoPhYc5FG3tO3p0laP+gDv8bnmjhxqWTWudRPE5EuVqAsh8qGguq1ENMY/7sz6NmvsExEd8i1jqcza73/9hTZtxYqgDEgyxYmHS5kKZmmIWq/V1Za56hpq4ZVWpOgawFVcqbRVXjW+Bw8myqaaBrubGoa6m6bKbqrURkilMqpAVc3TiZpvsr7OqgSDO1Q7VTXHJ5zL+Nv4jRvSR9Mrj0+AvyZCvgypedp6Q9K46e36t7U3oOcNoMDm82JP3THVuMr5ci8I1pYzDcarmnJfhxEUjIzd1bX83aIDf7kr6eOCSvB85FPBXbAzb2Wi/HtX83l16cFq8HD7Be0F0DHRVDBQAKyicJVTrZdn+feMd4Vwv0sxYSErZdOxb8clU4KG1oiGQgkFAlKsM9Kosd23pUeYaoxVDdVQdVWDy8DnQSKxiA+l8zLlMnGWCAKeKhMxtxSbXW0yzHXXO5QOt3uuxV6A1FrxOrNrsXgxWKxhGZ3GarcDclS7jU6WgWe//2ArnwsJxUuaeRlyuThTCIEHo1iVU2e2N7odSkdjfZnV1VCTLEZRsG4H6ogahZP8PDL4AC7J5tYB6frOMduYVqfV7j4k0WXEq2NUnYB6s7Q2FwNZPaVlmcuVqkijw1jldmQ6qtxGR6RBbZupq6mrbeDzICFXzIfSuZkKGZfmD+thio/tvg2Kt9fm6s1mhT2B/7/UFIkS9Mj8hSmJ/MSURK3sqe3px7c2pcWUI9NE6gLCEJF+NjCy5p5St8B233b70m/uw+dvhIIDC+dUBhKNlDwxP9dgJ1741FYQb3M0nd2WZGtU59Io+CqJLVaJ9zW35rwLZkltjqERRSRseWO9s0f2Ka9oqnconU125f18vkIoE/IhfjofurEVo/XU+NiO2bQv6el5u89ovES1/YEq+cw4jMHantqM8SVlDKu/SKsAb/fHL58ThN/3Id9bkp616txJ793FpUt4Nlmwb7TcE/KSZGZKijSFJ9GbS1UYYDS6HJNWY36v0WlW2Fas1K38EFkVB/rnRjjqs3Umo8rG5v+e3PlLSbc9BZzGQ0+cvQv6FlQCj3kNHQ3OJXG8tOv+qVfY2W3rrhx+AnoGvm7/unYcuf23xrrN1Ztrtz059t/jlTnG4PhqP7Hh5CnHfGghVPGQGlliloDw7E/Q38a67P+mkxGYRtylJvuC1OfcXO7z1IX2UqM7TzgrdcsilC3lkSqZWzIrBPy/PuR8AI9YRJvJrWuTuOUPam6JgOSZh8I8d32/fSHyimB8Z6xbGikPyU7UnPYWrc5LBFbYcvW7x/tQCeqdA9zZQB5e6lNiKMnBF9QWK0sstdl4i6FAgc02ISRWvC6/frF4caOZmAs+njLu+y7P1lSSo0gogkzzbKVWMK8VWOYixSoO70GiMLX0SM629pLS9WLw0zmFQiJVtCqVAIKapCTZgELxUglVKOTlMhmQSkcUJNnXUtlX+ialgufJUyqbIKW5VKDMfngPbw8duYbXclzr+kJ9TF19O88W3hpy9F7eXsB37M7ZnW1s39bA92Zdaw3MWYheOl8oZsfA0bBgrfpKb3pgtzYWlUuV4yTSIC4cYqKgNrPdBda6bCgXi/ftP4kr8kVqbRwqB8XK2UlMAHkpCUVzx9d+T/MkxpAju7KS/kg6+zcDgU3ODZMEFilTgtiBKV5sEMSUUQZ/i76B7CCQjZdOT2/foZft271AO7Z/GiMdObp4yZFx0qHxJYu53gle/VleeXlKha64upJUXVStV+vykPIsfEk+j5stZ8i4WiAQZIRKiwTS9BRqWi5X7CJxVPEarFhF7ls5tg51ODFuDdevIjeLKABwv7sHSu5+ZtvYxhIe2+6FIfciN7XBTgfvbqsOdEHna/KHfGnZkrFv0KTkZ/gbC+mOPfKyzfAb2euyY176+2eBbQUR4ggw0WULD31tvraVm4P33Wc3QhvPKn8/3MZb0C3gF89f1pf4oy9XrEIolfFGmThLzUmLWV6nz/0qA/wvclVOOk1hztEIg7vYwZzgnAyOPHNIRtHwRQoZP0H2VkVXcsHRiaaBgoIBoGgVmh+bQWt3vkXf3c8MLqFZCL4XBer5+sAgCV8C/H9wJGsjfAkBEXGdvBzkDYQBKWKEJAHXhHRYpS3xFwBOys6iwvyMfI53Fj/v7RAmKYjD4XqVxXOxKAHI/eyM88H8z0pwB/7HgZayBfwNtyfU6v1DRrZRZbzK//xD1Ud25+kFpwo9VrR5zj9Gb6wiYq+jU+U98Jdwk828+yDpG25Z8eOB1X2USFuYNFQ5j322PK9illcfhI09nJYuykilljLzO5224uYifS7AvRmeNb14DWCsuNDAfb8e9oKlDO8rEh8jzO5VJWorzMo8gsSY+yUwQolMVbRXeLxA/HMshq6M9gyNEQg3RWNCiYDe/JN9p4kX0hvfQ9Sx3dnZfvhyyc8BSHx04+aIEPaSW3REwMyS9186lxMPb/S55IP2uehD/YaK9vmmUAH/EaYuvnBfqFw88cyYPeVj9Pkr23goQJmwhQGqBGMbWyrxTQNuO3QT1R2tFYgY/onGhbJNw09hjNAY/3GGacSp4XMEcYBVmteA8TzXz97yEOxOJ4BoWGNFY4CkxDYJKJQKxngk+8YEUoJ5DELim3NJoxjHwBp9D9rWCbKl2YJXXQst6qnpm35ftGdnGEz6hb9vAszxcdMQU0TjFuE5xyV2wNvIjQmyN9YlcscaQII02hWX6NFSYBHG49pK2pmIXP+pfnJJ0IcdMvYMjK6WhuQ5IXl0DZxL2MiqkdWgCNsiyViXq6kqNk+i8EE0Le1o88wtg59OylOUHp97oWvF/DBY5Avvpitb9Sa4GkvbY8s1GOFqPGMJ94lfzzGAm+pVgW/UhnZM4GM2Csy9XkSQEH0nsHJdMddf32KBH4shYwIk1HTQOGyuvxbS1YvW2CZtSxdUdZVaIvJ7Sh2S/hcDAiiFHcyGUsHVh4/KxvJ0ujispdZalF2Vg5Vn0b0xKL0qwhXRxcAikUp3Yb44T5D8VyyOkeUQJrEDcpg4YeOdCBoCjUjTxNSDJqt+7ps56LM5QT5iAjL+OLuP5M2D0HyJgMfkKYKSvH7lXn678rB3VEjcX7GouCdx8X/FoXxT5sbIyz5oyqVITScfuRMdvXdAGjUkGOIMQ7n5lUN6h8wZlnrnqJuO1rDECeJya21zXbKIiuxtKCSofx4l/QKDUiU811RlY2tkQ5GU4hAtqp5rzFaFEeFadKsKtfh8V/FKyZw3jGqe7lgJocNDqWZzBDT4fjjVXHlZwnHBoKhhflHW9G0VxnHcKBTaXGydeAe4dcHJg58cP1LBNOX5CjMXyt2159Q/uFxZ6a6zyzZgqr9YrjWV/JrgD0Wosh5p0kWlJe+mNVwuJEzP5MrrufLM9Cy+ElgyxVHgSLSzZfY1U54pcrnQ1y2RTz4LCS51VB6xDNoDbbPlpVBJx+U9KS/XHz4E+brvs8Snvn5PGcynU2t/gn56Dvv04EEA1miJyFPofXKzyGiEraFqrkWgyoWMyGwhCYOwNVY9+Ddu4Oxv+0fryZUIjxbqvBN8gTAqgESNXPb9rydAL3sFlnBcQXSyRwVSJvLADQYKVAzmO65ttcAhJSDaWtUgiI2LVpNBK+uBbfeFOLZWORj0GTrJHQkYj44QRyAoNQacMbZykOdvUFlHI52RNHgJIZQwW5zOzxGbpUCkN4P4WFcbIOS3juM+ct1KhSUcF0b3PfknbyfGAzXLYInenmQbef7Sl1/g1F1eoIQ1WUL28vB4cTcjRG6Fnzwpgqmy0lCeXngksvkg8WZHMDvzRL+HJJWumTx1zYVwJVCKCQydRV3DQ9f4PdHOcZMKqQ9BEUT7fO8anCklC7+T1AHxSOdQz9C4/iHXCL3oEBssg5Xi+B0qMj64R83KXBliNq7h42jCxL1YcGVRD1MB/w+B5O6DeNulijps8jtkXeg7CrKdh3cOGRqKDSQRaoBuyLyNrQ3iBrPdrBQrRYFBHBAqIxp9oMbWN7ZIh5p09PzDJO2QEA1HGcRme1M21DCCMMdR9SOveSM4GMNDR1jNyC1MBn2ybRobTveDNZtf9pk3lOsp8vGkNHmD5eR5ht7KYqLxcCw8+vzLlyREdRWiFE0U4v2Zi2uciDKRiMBEN9fA62G5CILcitNWvtEyPT1gOaEnv276ESHJrueKgM+YD2F0bDKcER01m9alJPGMhKlILo0wgAfpQoAhzEFcJmlqaBcEcnwZbdtno74QEI3zGxBPfawBVOwQUQ7npgseOcCj2DdbOcfew7ZksiNY3rHeJK5POFBkxhPpEQsBEWqlTJCTx1vDJRujRek4BOa8AFfmZzfwwI2wWZKselu9VPu6ati5qxuljf7wNy2CxJDZZm4Xtx8qJUAYdWeT0I1E992DSbMJN2fakZj8Rp2MIej94ll+agSf25DFRCXzUBLMPlhsqxAPTB2HvYzJuxbWv+F031PYb2yTES0zJLInOhQKTgYbR3Q/MIRQhSSh4OtCIGb70/Z0eu3LYO84XKOo+KQGpwojB2OoxdnbY2wdNyDCfz0ZOZEJGpa4HQF9whzs1qUEQNpEoxK+QOomhkcZBKLSTZzDJroolUJxh1uQO/aX7B269JMOKMh4iGnJs8JKdhUz0ZCP6QWB4PgBfq7pCgyrD50JLCQc/KBmFyDE+o2ZBY0EXbhMTeO0ZS7Nkjd8LDYCAtInT1Szl9EP8g8dthxdmBxCJ59NJYEgD5+G0g/7ddBpo4O/ac8KonOM0xrVyh5FeWjZKASMUcuU8QNV+OJWYCOjahyo522XsNGW4Iyxg/MVjOxyB2wHJMMlIXkZfts7ciMPHa9qP8Fvhq3zZbL5iaW/3eLOrKkGTkDPg0iH7EjZ3cv7O77rWt7XHe37fDyjDO3e7UZ9vn4i12AB7N5VGLktLxvxEFaGitUkaapRs7PFSEddhbLCUVeM9FnhQCZo47VlyBU+BmRZFaIEQ4oV0ULRbid8BULjQZD8PNL0AD7jxt/PoD5KEBPQKF4yuzsi06hI4Bico5G53m1pUwd3cFbXkT26aHEe/Ch2Mlue1geu50WWPLRJYf6tUs71jaij7R1VxiNtO0LhF1WOeVwlOKYdlWHvVQsnesqX7ziJcqoaq6RutY9Pe8QgbiA95yAW0zoW7MCT1tO0sJu3yOL9mNjgO3wziso5S3oCXh9aZdy+ffD1EFTUP4LVk7gwbVsEAGdrHXt5NZYkQMtQ81yPl8iXBE6F9YTbwvukfZ+uGT8Yr3zqAUVUWkg0Ak2nWqcGLOhcKVgpPb0M8YDRaDv4XOhBeNeDfGNCIDjTp4ADpvSvADiEyTiocgViNqAxyQgdK3D/PA7bn9WqwJFxfILy332jIvaD/u+e+lMFknfSoIIb9bUnZ7zvlnsq2pM1IZ7o23dDDmtiLG0ieyH/vDfLphYXZojTipmelCYyGzy+yyO+8ji/hU5XQaKScLsN9fCVDKEy5hELsro2SbZ5s4Gvweod22i8GgdIdQC/afCaBOjlUdDho8agP/ii5GAIO3TBH67v+AaDjpb44onxG9Wgmrd++OoftFA1Um8nrnWI8HY+NEoyBzL8ozFKwSte4a+TjAr9sIdfSD31JjZtMOll1ZSZI3TzDwGbNRjNHnXoGqOMoTtXJesiPFZCGGJJFma1bstlVJT1oA7ow0tOKO3v5fpR+VgPG9SdfOad3WImmJ58cSCil0WBl+zkAMtKdkjtnQhQ/CLfO0jxJNuASrtQ4PJUYYFfTe6E9yed6q8YNB18feA1YP2WX+/S31y/7ZDHtoNrp92GuvzfCoRMyaizyb74W/uSZqdw5b/gFSGRM1V8TC6a2UojnSAnx2gBn5z881r72kwjyyjzmtMaCKg7Yrh8PUZGzPeeXP4IZ3qER23C8huHEVECB/MVE3sua0A2vHuF+pJxxPpe+d8piSJs9FBHNmKmGarepBAZRU3WC3xz6632LcjsnfpD+wdwTXDDHpWB4rt/pi9czgl9VA7IE/OX5T06j3MfJYG5KPf2BlwY3gc3FCAM+0r3wmYqwMweMA3tAaQCGGl36S7wy87SHU/GjncVd4NXJ1xiCUhNEbsk6SALa2rEhYUu+sSfNvuT5RT7aZ8qQ2uDz6a+ZZtxR1P8jGX8DWcIMGH2YSYaYOwN+EZtNOs0xRqz3uxXrynSthEsd5JMiXcqS0wChYP+M/7LkVhyojz11sOb5YjOFnQNlirjyfJkfBmO4uHoaq5AzM72IDlFKna40CDTaFASCu4u/17ePd49AgUp0WTLi+Ik4FLdVuRCY63/jWqMpyY1isanZYR7ZVei0ScxNcYp3ho7ShOENvPN8LBKSPMJLBkyaCQ6tVQvPQecRY4ctclZNL9jpJ4AySV9Zw5fX0w93C+BgPmga8OfiiL10JmhM8oi+Z+uDSE3W4OUQS2CNG0722eJChTyMKHVUtq/uNiRwlwtMa6+dZyghkRL5TeA+QOeRwkLCwu7ewtLFnp+jkJ9hwT/YEvcbdVtDUOuPDrq+oWQ/NC8eWxZfrAjM3a8e8K+RCDLW5Ou5WYo5+ZzpFL9v/mUhh/yf7AlBCQAVFD+i3yKwjvT+NzYQcqkKQAY/AT95DafEa2Olesq9Af62s+qbKBzE68oK1mTpLYKeQZHVT6zqKbOyLUIUjXJmkIBz+isL2TmO6sMpmghLx5q8Q0JSBRIOGSOQHqazZdwyRy+JDFKxE9QJkJ/Ap/zsbowdZ54367p+eoVsG1g/GWsWxYpS9YkaspFojXZSdrz5SGpWG1Gdy3EQ9ki8HnKm6yeHmibctkTyFPY+0tGRyu0fjmXxxAKfH99+ZbS5Vs1mgE5eXKFbAVQXW9ENaXWxYmysRggi08VO06NsqXFqzz65wY+mrw7Gfviyt0rMS8m702COL98P/xz9e5VsHdsZsw2ptFptLsPJeiijEnfguhpoixAmCLkJ+os0CIpD4ez4cPxymjIpXOduFW181AmFOZ9tFDan2if74+PIiq1H6xVSL3uOtdODyMjgAk9dtsOAnQFfo6w990YY6ZAgMxn3ZMTkN3xOe7DF9Pf2iZoexoIvdlLGmeBATn68p2+f1jKBL8xeMQfAPh471w2vZLFu28+xbPjAD4FIAhyofdzmQj8vRRMb5J8GgJ0mDsXW3/61wCyDcqFsz5By5JwEOoOmeM0TgkkJUB3AHGwhPufqPYxeYPTbJHMSZMTbVSRSxO+JH6LxF20+KbxnlHmokT5JCMEaDsW4VgSxmLoGQGXIG6LUVbLshrijbAsi2VUlnUSb5IlGstIaKtjGQ4sujaWHWLZZuKJpmB6d2eJnR/SlsuZHXF2HvIq4Uce9AgXnJKlWbAp0ceS2ge+Y+gcDvSYQM7IuLu08UbtTd9nfDF+byoMDA/2X2fBr00lU12ZnPGch6ZaOekfUbnk9E58HZhLpuwDn/PHHAJUBgOlrhFetSBnpVfNeyzsMAD+JRgMDFwU/lKEroL38XlMJWwMdWeR1oUppSJjawIAXw8zho7aMA8bnZ5Pdt65X8c+c4L1+dRxr+C6DmdsomKfeN8ciqswugiebimM3X54DiDLDZ3RJht71mFHd2GPOfSXhmIW9b4SxYEIzAzT1NMmTLqly9ilSFqq+MCGYP/pwHSmsgMsBEujvzQUs4QtU9AiwFjv4Dm237WOy1EfXILaRqU9OSRNxDVunaUbogbVV9JViwmRjOvlu/ZJlrByt2AdFh1tQsH+c4CAD+JBYXSeDwc0GlVq+vmOpBFgeG9MCvZfa6Gt1NacEcEimZo+kgpjxZGCy8TiD1FY0iEOEY0l3cPcFsKbe5QVs2SVE5JYkf33svWveHhkP6SaMKGjOASlRQKlgfjx7nxp4bS7Dfno6HLCXDrm/j7gGYL9S2zVU0vjXh5mcL1DN1yGHfATtMHai789FqHsMsJlyFuf6JKCF2oY6y2g06lXBDqwwuHVC0yxcjc2W3tPALrUSrRhEV+/QC0Xv1yCWqf3GRNRC8qUQheI3SxzbomU8jOOAJotTlQ9xTexzBdd5giz4kIX6lWILGGydUV3SFTUP2z+6J/LuFbAb3X8goHhY+TnLRhkwQQNQIGQ4h7HAoRbtRlsd4ChOpeqSL2nKs8fqtGwZNVyKlAdSR3M3QutVj29BlN9lRWpgSbbr4ZanacaaXo1aqz13VITvyxPq6nGn/dqDr0acdElHqsZEGQJC2AdkFdFE9+qKvWtavTyn2qFaVVHo0qZC6FFqqeuDaqv3VLUwIDVq6ExO69GBl2iGht3i9WkH83faqrf54ya81qlvzVKCKsJruCA0yoCTVIS5MKZczf+td4aF84hmMVolIUQRYtDxpy8PxwUJ6keI/2IGI9rjBvg7L/YyZyA0CYgrOXWP9iVBOAjQsGII6/QH0omBemnemIq1E0G2MtaktDcHVkyvTPcgBAmGNHWvGiAHU7KDCqAkHZ+owGcO3HuzJlHGDG29tjt+q8Yzk/Oz84e/6PKeWTQ9C8vUEZGDrD+BgGe5GXxGneW5mLlAKBPTEpSlEjHtSUyqlkaGRVoL1Jl8hHiiPwLSuFOZVqSO3MJXCExIiGOkjrF/oAbrgUXbgeY4fJwXWXTegj5LPrL9aBRJEyvUMvGUn3XFmD2GHijOZq6YHP8i7ApFK1obpwQ4IXnxSZKekap5BxudmrSih6cSr/OO6lSTVgwq9MlDYi1Sq5JsoS2KCEoiIMAXX9/nRDjp86PPBZIw5NZgIaxNHGamoYPFwEI5UT5ubUqtncgeOedTM+GvV+7k3g9HmKQGHqAwFlefwWdaNdqoOgM0EoatGieu3k9xvvSa2rVDskM8O6hhb/aAzqTSxE5J8QdK9TmlslSoegC0muO7NCxD0b8cBSJggQXGDtB16unq/mPq0adzq6RHVZpdU+uWP2xio6ANo5DEVwVEY4FV2hjMrXJUqLmoxOAdxKhl6bJCGxCG8W4QGnUYUrggjTvA/B+ExNo1tDuJJF1cERMKc7yNCZjzPRjER1KGGgMIJT0YPTHICBUN2nFYtmIuyQzW4zMKHX5AlBZkqCREn10ObCjvLGpLcQrsmbf1EXEL4ZBidM+seTDLn2ArAI78CRA7/P7VO/JFT2x/VtbFgBCgwMTWN2/CEKACwYNOW6NP8y3zBKb7LMzJNjnvgGjXntjqYXO+Nkrm+33zlt/2+6gi877nI3dCmUuK3fBJdddcdU1f6ow5YabDqn00kp3TLutyhPPLOJQzalWDZet6rjVa9CoWZMWrf7Spt08Hbp0+to2Pbr16vPUc9+GgnnA0DAMDAvDgf98Cg8jwDxhXqD4EtmAkSIHg3lHySdqtOgxYuabX/4F+Me/BRZUcHMKKbSwwmMVUWRRRRdTbHH+74fiSyixpNgll1JqaXHixotfukceJygjqNHt4iRJg8JrP+zIW0eZKnWatGWXU2553vvgF7+mS58hY6bMwfHlLRVWFCjfaqVZm5ste2Xtz75KE1VVnSOn3/xudzXV5qquenc99MCPfjLrnpnc9tpirQ011FhTzbXUWlvzHDXuS1/53jFfOKvfaQt85pwTvjNZex111lW3YSyfgXVvRWPWe1G/XUZstMdyq6z2TQNOOtVgQ30i9jA7sofYBkDIUxvGf8ZEDFOvidlkzQTpMHqHGBruAy1phOUgpQYWo7BYD2Iigsb4aIOul8VqwA6umqQniNWlLIZ1dXOcTfREw40V04haiAdHCm9Qoxtp4no94SHINTCIcT5p1BOOImXEpFkOmEkiPZCVSNmopyQi1MRseqjuTK0zgdO0th10tZ+wEiEdxLa2thAO6teY4Fmi3/WMfMT7IjMXKPIYx8LkA3cwpUVmcU5XY9iHYiZmC3ZwZtYkVtcGbZdVFxtcKbaf1mqFXHCtuK/KrlXYh+oO21oFtm4tiR2rYOiy6xKCOztM7P0VSmzUexuKiHFBLu3eTutaiTRLglxqJ4Ut4kprUrAK5lAVysFKyYm8giqbyPN4sa2U6pL7qXJNJ2tC5LO/W0a+RpQk3tRTPhrU2y0z4qPLviKudCGRiYmLCJ9s4+wrulha4zlWt4Y6dBP7mbbSHSyf2dTF+NGA7LpJvJ7ES9GyYbaniHotGxp6umZlkWyy9Ytcdpfn2OVG892la7VJ5LeVMu60MIDdmAWVe0Fr9YwpJmWuT9qDpYttKaqV3Sn/KzgA) format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Supreme"; + src: url(data:font/woff2;base64,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) format('woff2'); + font-weight: 600 700; + font-style: normal; + font-display: swap; +} +/* ---- Family substitutions ------------------------------------------------ + Overriding typography.css's declarations rather than editing it, so the + vendored file stays byte-identical and the swap is visible in one place. */ :root { - /* Ice */ - --aus-black: #222531; - --aus-white: #a9bcc3; - --aus-bright-white: #cce7ec; - /* Sea */ - --aus-bright-black: #373b46; - --aus-dark-30: #414751; - --aus-dark-40: #565f69; - --aus-dark-50: #6e7882; - --aus-dark-60: #86929d; - --aus-bright-70: #9daeb6; - --aus-bright-80: #b3cbcf; - /* Aurora */ - --aus-blue: #6388d8; - --aus-bright-blue: #a4c4ff; - --aus-cyan: #00b1a8; - --aus-bright-cyan: #42dcd1; - --aus-green: #16b866; - --aus-bright-green: #51e08a; - /* Dawn */ - --aus-red: #ff491a; - --aus-yellow: #e1c631; - --aus-magenta: #9d78ff; + --font-display: "Space Grotesk", "Bespoke Sans", ui-sans-serif, sans-serif; + --font-body: "Supreme", ui-sans-serif, system-ui, sans-serif; + --font-mono: "JetBrains Mono", "VictorMono Nerd Font", ui-monospace, monospace; - --bg-0: var(--aus-black); - --bg-1: var(--aus-bright-black); - --bg-2: var(--aus-dark-30); - --border-subtle: var(--aus-dark-30); - --border-default: var(--aus-dark-40); - - --fg-0: var(--aus-bright-white); - --fg-1: var(--aus-white); - --fg-2: var(--aus-bright-70); - --fg-3: var(--aus-dark-60); - --fg-muted: var(--aus-dark-50); - - --font-display: "Space Grotesk", ui-sans-serif, system-ui, sans-serif; - --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; - --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace; - - --tracking-caps: 0.08em; - --radius-sm: 4px; - --radius-md: 6px; - --radius-lg: 10px; - --shadow-1: 0 1px 2px rgba(10, 12, 18, 0.4); - --dur-fast: 120ms; - --ease-out: cubic-bezier(0.2, 0.8, 0.2, 1); - - /* Width the status cluster is allowed to occupy in a card's top-right. - Load-bearing in two places that must agree: the right inset reserved on - the title line, and the negative margin the description uses to opt back - out of it. Sized for the widest real cluster — a latency badge plus a - status word ("21 ms ● RUNNING") — plus the 14px card inset. */ + /* Width the status cluster occupies in a card's top-right. Load-bearing in + two places that must agree: the inset reserved on the title line, and the + negative margin the description uses to opt back out of it. Sized for the + widest real cluster — a latency badge plus a status word. */ --status-gutter: 96px; - } /* ---- Icon colour --------------------------------------------------------- Homepage draws every mdi and simple-icons glyph as a MASK over a gradient - fill, so this ramp IS the icon colour — `color:` does nothing to them, and - a filter only muddies them. Stock is slate-400 -> slate-700, and that dark - stop sinks the bottom half of every glyph into the card fill: at a glance - the rail reads as a column of grey smudges rather than as icons. Ice -> - aurora blue keeps both ends clear of --bg-1 and ties the rail to the tab - accent. Space-separated channels, not hex — Homepage consumes them as - `rgb(var(--color-logo-start))`. + fill, so this ramp IS the icon colour — `color:` does nothing to them. + + ⚠ These must be space-separated sRGB CHANNELS, because Homepage consumes + them as `rgb(var(--color-logo-start))`. An oklch() token cannot be fed + through that, so the four values below are the exact sRGB conversions of + real Skyfall tokens rather than colours anyone picked by eye: + dark --sea-80 oklch(0.83 0.017 205) -> 187 203 204 + --blue-base oklch(0.66 0.12 262) -> 105 145 220 + light --sea-40 oklch(0.48 0.016 245) -> 86 95 102 + --blue-deep oklch(0.48 0.12 262) -> 54 91 161 + Recompute with theme/oklch_to_srgb.py if a token ever changes. + Light uses the deep (L 0.48) step for both stops, per Skyfall's lightness + law: deep is the light-theme value for fills and coloured marks. ⚠ NOT `:root`. Homepage sets these same two variables on `.theme-slate`, - and that class sits on the element — the very element `:root` - matches. Same element, so the cascade decides, and `.theme-slate` (0,1,0) - outranks `:root` (0,0,1): a `:root` override here is simply ignored, which - is how the first attempt at this silently did nothing. `html[class]` is - (0,1,1) and wins on the same element without hard-coding which `theme-*` - class is active, so it survives a change to `color:` in settings.yaml. - Raising specificity is not enough on its own either — a custom property is - resolved from the NEAREST ancestor that sets it, so the override has to - land on too, not on . */ + and that class sits on — the very element `:root` matches. Same + element, so the cascade decides, and `.theme-slate` (0,1,0) outranks + `:root` (0,0,1): a `:root` override here is silently ignored. `html[class]` + is (0,1,1) and wins without hard-coding which `theme-*` class is active. + Specificity alone is not enough either — a custom property resolves from + the NEAREST ancestor that sets it, so this has to land on . */ html[class] { - --color-logo-start: 179 203 207; /* #b3cbcf aus-bright-80 */ - --color-logo-stop: 99 136 216; /* #6388d8 aus-blue */ + --color-logo-start: 187 203 204; + --color-logo-stop: 105 145 220; +} + +html[data-theme="light"], +html.light { + --color-logo-start: 86 95 102; + --color-logo-stop: 54 91 161; } /* ---- Canvas -------------------------------------------------------------- - Solid fill. Canon forbids full-bleed imagery and decorative gradient fills - behind text. The single sanctioned aurora moment is the hairline under the - header chrome, further down. */ + The app canvas is --surface-sunken and work floats on it as cards. Flat + semantic fill only: Skyfall forbids full-bleed imagery and decorative + gradients behind text. + + `#background` is load-bearing, not defensive tidiness. Homepage + server-renders the wallpaper as an INLINE style on `
` + and Next.js caches that rendered page, so removing the `background:` block + from settings.yaml is not enough on its own — a restart does not clear it, + only a full recreate does. Enforcing it here is deterministic and immediate, + and keeps the canvas correct if the setting is ever re-added by accident. */ html, body, #page_wrapper, #background, body > div { - background-color: var(--bg-0) !important; + background-color: var(--surface-sunken) !important; background-image: none !important; } -/* `#background` above is load-bearing, not defensive tidiness. Homepage - server-renders the wallpaper as an INLINE style on `
`, - and Next.js caches that rendered page — so removing the `background:` block - from settings.yaml is not enough on its own. A restart does not clear it; - only a full recreate does, and recreating this container has its own cost - (the tab bar and i18n go missing for up to an hour and then heal on their - own). Enforcing it in the stylesheet is deterministic, immediate, and also - means the canvas stays correct if the setting is ever re-added by accident. - The deliberate absence of the config block is documented in settings.yaml. */ - body { - font-family: var(--font-sans) !important; - color: var(--fg-1); - font-size: 15px; + font-family: var(--font-body) !important; + font-size: var(--text-base); + line-height: var(--leading-normal); + color: var(--text-body); -webkit-font-smoothing: antialiased; } -/* ---- Group heading — the Australis eyebrow -------------------------------- - Canon calls mono/uppercase/11px/0.08em the system's signature and says to - use it often. It replaces the oversized sans heading, and a hairline runs - from the label to the right edge so the groups read as register bands - rather than as titles floating over a grid. */ -/* BOOKMARK GROUPS GET THE SAME TREATMENT. A bookmark group is a different - component with a parallel class family (`.bookmark-group`, - `h2.bookmark-group-name`, `.bookmark-group-icon`) and none of the selectors - below matched it, so UltraSeedbox rendered with Homepage's stock 20px sans - heading and a full-colour icon while every service group above it wore the - mono eyebrow. One un-themed heading in a column of themed ones is more - conspicuous than the whole page being un-themed. */ +/* ---- Group heading — the Skyfall eyebrow --------------------------------- + Mono, uppercase, --text-2xs, --tracking-caps, in the secondary accent, with + a hairline running to the right edge so groups read as register bands + rather than titles floating over a grid. ALL-CAPS is sanctioned here + specifically: Skyfall allows it for tiny tracked eyebrow labels and table + headers, and nowhere else. -/* 22px, not 10px. Now that every group is the same four-across grid (see the - columns note in settings.yaml), the only thing separating one band from the - next is this gap — with card width no longer changing at the boundary, a - 10px gap let two groups read as one long run of cards. */ + Bookmark groups get the identical treatment. They are a separate component + with a parallel class family, and none of these selectors matched it before + — so UltraSeedbox rendered with Homepage's stock 20px sans heading while + every service group above it wore the eyebrow. One un-themed heading in a + column of themed ones is more conspicuous than the whole page being + un-themed. */ .services-group > button.group, .bookmark-group > button.group { gap: 0; - margin-bottom: 4px; - margin-top: 22px; + margin-bottom: var(--space-1); + margin-top: var(--space-6); } /* …except the first group on a tab, which should sit up against the tab bar - rather than floating 22px below it. */ + rather than floating below it. */ .services-group:first-of-type > button.group { - margin-top: 6px; + margin-top: var(--space-2); } .service-group-icon, @@ -224,12 +618,12 @@ body { h2.service-group-name, h2.bookmark-group-name { font-family: var(--font-mono) !important; - font-size: 11px !important; - font-weight: 500 !important; + font-size: var(--text-2xs) !important; + font-weight: var(--weight-medium) !important; line-height: 1 !important; text-transform: uppercase; letter-spacing: var(--tracking-caps); - color: var(--aus-cyan) !important; + color: var(--secondary-text) !important; white-space: nowrap; display: flex; } @@ -239,45 +633,50 @@ h2.bookmark-group-name { content: ""; flex: 1; height: 1px; - margin-left: 12px; + margin-left: var(--space-3); background: var(--border-subtle); } /* The chevron sits after the rule, muted. */ .services-group > button.group svg, .bookmark-group > button.group svg { - color: var(--fg-muted); - margin-left: 8px; + color: var(--text-faint); + margin-left: var(--space-2); width: 14px; height: 14px; } -/* ---- Service cards ------------------------------------------------------- - Border > shadow for grouping in chrome (canon). Opaque fill, 1px border, - one soft shadow. Height is content-driven — equal-height stretching turns - short cards into hollow boxes. */ +/* ---- Service cards — the calm-depth recipe ------------------------------- + HAIRLINE + TWO-LAYER SHADOW, NEVER ONE WITHOUT THE OTHER. That pairing is + Skyfall's defining move; a card with a border and no shadow, or a shadow + and no border, is off-system. Height stays content-driven — equal-height + stretching turns short cards into hollow boxes. */ ul.services-list { align-items: start !important; - row-gap: 8px; + row-gap: var(--space-2); } li.service > .service-card { height: auto !important; - background: var(--bg-1) !important; + background: var(--surface-card) !important; border: 1px solid var(--border-subtle); border-radius: var(--radius-lg) !important; - box-shadow: var(--shadow-1) !important; + box-shadow: var(--shadow-sm) !important; margin-bottom: 0 !important; - transition: background-color var(--dur-fast) var(--ease-out), - border-color var(--dur-fast) var(--ease-out); + transition: background-color var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out), + box-shadow var(--duration-fast) var(--ease-out); } +/* Hover: surface lifts a step and the shadow deepens sm -> md, per canon. + No scale, no translate — Skyfall has no bounce anywhere. */ li.service > .service-card:hover { - background: var(--bg-2) !important; + background: var(--surface-raised) !important; border-color: var(--border-default); + box-shadow: var(--shadow-md) !important; } -/* Service name — display face, tight. Description — body face, secondary. +/* Service name — display face, tight. Description — body face, muted. * * ⚠ `.service-name` IS NOT THE TITLE. Homepage puts the title in as a bare * text node and then nests `

` as a sibling @@ -287,40 +686,36 @@ li.service > .service-card:hover { * explicit escape hatch from anything the title needs. */ .service-name { font-family: var(--font-display) !important; - font-size: 14px !important; - font-weight: 500 !important; + font-size: var(--text-base) !important; + font-weight: var(--weight-medium) !important; /* Pinned so the status cluster can be centred on this exact line rather than floating against the card's top edge. Changing one without the other breaks the alignment. */ line-height: 17px !important; - letter-spacing: -0.015em; - color: var(--fg-0) !important; + letter-spacing: var(--tracking-tight); + color: var(--text-heading) !important; /* THE GUTTER MUST BE HELD BY WRAPPING, NOT BY CLIPPING. This rule used to read `padding-right: 78px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap` and it did not work: CSS clips overflow at the PADDING box, not the content box, so the reserved - 78px was spill room the title printed straight through. Every long name on - the AI tab rendered underneath its own status pill — "char-rp (MeroMero-v2 - NVFP4, multimodal)" collided with HEALTHY, "char-rp-reasoning (Heretic2 - NVFP4+MTP)" with EXITED. The ellipsis never appeared either: it is painted - by the block whose own line overflows, and that block here is the - anonymous box around the text node, which does not carry the `overflow`. - Wrapping has neither problem — line breaking respects the content box, so - the gutter genuinely holds. Long names take two lines instead of one; on - the AI tab nearly every name in a group is long, so those rows stay flush - with each other. */ + 78px was spill room the title printed straight through. Six cards on the + AI tab rendered their name underneath their own status pill. The ellipsis + never appeared either: it is painted by the block whose own line + overflows, and that block here is the anonymous box around the text node, + which does not carry the `overflow`. Wrapping has neither problem — line + breaking respects the content box, so the gutter genuinely holds. */ padding-right: var(--status-gutter) !important; white-space: normal; overflow: visible; } p.service-description { - font-family: var(--font-sans) !important; - font-size: 12.5px !important; - font-weight: 400 !important; + font-family: var(--font-body) !important; + font-size: var(--text-xs) !important; + font-weight: var(--weight-regular) !important; line-height: 17px !important; - color: var(--fg-3) !important; + color: var(--text-muted) !important; margin-top: 3px; white-space: normal; @@ -329,19 +724,15 @@ p.service-description { occupies y 13-30); the description never starts above y 33. Nothing can collide, so it takes the full card width back and the gutter costs no description space at all. */ - margin-right: calc(8px - var(--status-gutter)); + margin-right: calc(var(--space-2) - var(--status-gutter)); - /* Floor of two lines, ceiling of three. - The floor keeps the common one-line/two-line mix bottom-aligned, which is - most of what made rows look ragged. The ceiling is the other half: a - handful of four- and five-line descriptions (The Booth, Waterland Studio, - the vLLM seats) were dragging their entire row 30-50px taller than every - card beside them, and at four cards across that gap is the most visible - defect on the page. Three lines truncates almost nothing in practice — it - bites only the few entries whose description had already outgrown a - dashboard card and belongs in the service's README instead. - Not equal-heights: that inflates short cards into hollow boxes to match a - widget card twice their height, which is worse than a ragged edge. */ + /* Floor of two lines, ceiling of three. The floor keeps the common + one-line/two-line mix bottom-aligned, which is most of what made rows + look ragged. The ceiling is the other half: a handful of four- and + five-line descriptions were dragging their entire row 30-50px taller than + every card beside them, and at four cards across that gap is the most + visible defect on the page. Not equal-heights — that inflates short cards + into hollow boxes to match a widget card twice their height. */ min-height: 34px; display: -webkit-box; -webkit-line-clamp: 3; @@ -349,29 +740,26 @@ p.service-description { overflow: hidden; } -.service-icon { - opacity: 0.9; -} +/* ---- Status — semantic dots, not chips ----------------------------------- + The stock filled emerald pills read louder than the service names they + annotate. A semantic dot plus a mono micro-label at faint contrast: present + when you look for it, silent when you are not. The dot colours come from + --success/--danger/--warning-text, so they take the deep step automatically + in Skyfall Day rather than staying dark-theme bright on a white card. -/* ---- Status — dots, not chips -------------------------------------------- - The filled emerald pills read louder than the service names they annotate. - Replaced with a semantic dot plus a mono micro-label at tertiary contrast: - present when you look for it, silent when you are not. */ -/* The status cluster is CENTRED ON THE SERVICE NAME'S LINE, not parked in the - card's top-right corner. Homepage positions it `absolute top-0 right-0`, - which floats it ~7px above the title's optical centre and reads as a - misalignment on every card. The offsets below reconstruct the title line's - geometry: .service-name sits 5px below the card's top edge and carries 8px - of its own top padding, so its 17px line box starts at 13px and centres at - 21.5px. Giving the cluster that top and that height, and centring inside it, - puts the pill and the name on one optical line. + The cluster is CENTRED ON THE SERVICE NAME'S LINE, not parked in the card's + top-right corner. Homepage positions it `absolute top-0 right-0`, which + floats it ~7px above the title's optical centre and reads as a misalignment + on every card. The offsets below reconstruct the title line's geometry: + .service-name sits 5px below the card's top edge and carries 8px of its own + top padding, so its 17px line box starts at 13px and centres at 21.5px. These three numbers move together — if the name's font-size or line-height changes, recompute all of them. */ .service-tags { top: 13px !important; height: 17px; align-items: center !important; - gap: 12px !important; + gap: var(--space-3) !important; margin-top: 0 !important; /* 14px right inset, against the 8px of text padding on the left — the optical match, since the pill has no glyph hard against its edge. */ @@ -404,10 +792,10 @@ p.service-description { align-items: center !important; font-family: var(--font-mono) !important; font-size: 9px !important; - font-weight: 500 !important; + font-weight: var(--weight-medium) !important; line-height: 1 !important; letter-spacing: var(--tracking-caps); - color: var(--fg-3) !important; + color: var(--text-muted) !important; } /* Flex-centred rather than nudged with vertical-align: the dot is an optical @@ -419,57 +807,66 @@ p.service-description { margin-right: 6px; font-size: 7px; line-height: 1; - color: var(--aus-dark-50); + color: var(--text-faint); } +/* ⚠ Homepage emits `docker-status-`, not `status-`. Selectors + matching the latter silently hit nothing — which is how an earlier pass + shipped "themed" status pills that were still stock green. */ .docker-status-healthy > div::before, .docker-status-running > div::before { - color: var(--aus-green); + color: var(--success-text); } .docker-status-unhealthy > div::before, .docker-status-exited > div::before, .docker-status-dead > div::before { - color: var(--aus-red); + color: var(--danger-text); } .docker-status-starting > div::before, .docker-status-paused > div::before { - color: var(--aus-yellow); + color: var(--warning-text); } -/* Ping / latency — mono metadata, tabular, no chip. */ +/* Ping / latency — mono metadata, tabular, no chip. Deliberately the info + family and not a status colour: "how fast" must not read as "is it alive". */ .site-monitor-status > div { font-family: var(--font-mono) !important; font-size: 9px !important; - font-weight: 400 !important; - letter-spacing: 0.04em; + font-weight: var(--weight-regular) !important; + letter-spacing: var(--tracking-wide); text-transform: lowercase !important; font-variant-numeric: tabular-nums; - color: var(--fg-muted) !important; + color: var(--text-faint) !important; } /* ---- Widget stat strip --------------------------------------------------- - Was nested boxes-in-a-box. Now a footer strip: hairline above, cells - divided by hairlines, value in the display face, label as a mono eyebrow. - The card stays one object instead of three. */ + A footer strip inside the card: hairline above, cells divided by hairlines, + value then a mono eyebrow label. The card stays one object instead of three + nested boxes. + + Values are MONO, not the display face. Skyfall is explicit that numbers and + telemetry always take --font-mono; hierarchy against the label comes from + weight and size, which is the same tool the type system uses everywhere + else. Padding is tight because a stat strip adds its full height to its own + card and to nothing else in the row — at four cards across, one AdGuard + card opens a void beside three ordinary ones. It cannot be made free, but + it can be made small. */ .service-container { - margin-top: 8px; + margin-top: var(--space-2); padding-top: 2px; border-top: 1px solid var(--border-subtle); gap: 0 !important; } -/* Padding trimmed from `8px 4px 6px` on 2026-08-24. Every stat strip adds its - full height to its card and to nothing else in the row, so at four cards - across one AdGuard card opens a void beside three ordinary ones. The strip - cannot be made free, but it can be made small. */ .service-container > div { background: transparent !important; border-radius: 0 !important; margin: 0 !important; padding: 6px 4px 5px !important; border-left: 1px solid var(--border-subtle); + min-width: 0; /* let a long value shrink the cell instead of overflowing */ } .service-container > div:first-child { @@ -477,31 +874,25 @@ p.service-description { } /* value — nowrap because a long one (AdGuard's "32.767 ms") otherwise wraps - mid-cell and drags the whole card taller than its row-mates. - 15px, down from 17px: at four cards across, AdGuard's four-cell strip has - ~72px per cell and "130,253" no longer fits at 17px. */ + mid-cell and drags the whole card taller than its row-mates. */ .service-container > div > div:not(.uppercase) { - font-family: var(--font-display) !important; - font-size: 15px !important; - font-weight: 600 !important; - letter-spacing: -0.015em; + font-family: var(--font-mono) !important; + font-size: var(--text-sm) !important; + font-weight: var(--weight-bold) !important; + letter-spacing: var(--tracking-tight); line-height: 1.2 !important; white-space: nowrap; font-variant-numeric: tabular-nums; - color: var(--fg-0) !important; -} - -.service-container > div { - min-width: 0; /* let a long value shrink the cell instead of overflowing */ + color: var(--text-heading) !important; } /* label */ .service-container > div > div.uppercase { font-family: var(--font-mono) !important; font-size: 9px !important; - font-weight: 400 !important; + font-weight: var(--weight-regular) !important; letter-spacing: var(--tracking-caps); - color: var(--fg-3) !important; + color: var(--text-muted) !important; margin-top: 2px; } @@ -509,9 +900,8 @@ p.service-description { second row, which Homepage emits AFTER .service-container as its own block of Tailwind-tinted pills. Untouched they broke out of the card's language: two light grey bars with their own radius hanging under an otherwise - hairline-ruled footer. Same footer vocabulary, so the card stays one object. - Not hidden — "no active streams" is the answer to the question the card is - there to answer. */ + hairline-ruled footer. Not hidden — "no active streams" is the answer to + the question the card exists to answer. */ li.service .service-container ~ div > div { background: transparent !important; border-radius: 0 !important; @@ -530,28 +920,30 @@ li.service .service-container ~ div span { font-size: 9px !important; letter-spacing: var(--tracking-caps); text-transform: uppercase; - color: var(--fg-3) !important; + color: var(--text-muted) !important; } /* ---- Bookmarks ----------------------------------------------------------- - Same card language as a service: opaque fill, hairline, one soft shadow. The - name takes the display face and the description drops to mono metadata at - tertiary contrast, so a bookmark row reads as a quieter sibling of a service - card rather than as a different widget that wandered in. */ + Same depth recipe as a service card. The name takes the display face and + the description drops to mono metadata, so a bookmark row reads as a + quieter sibling of a service card rather than a different widget that + wandered in. */ li.bookmark > a { - background: var(--bg-1) !important; + background: var(--surface-card) !important; border: 1px solid var(--border-subtle); border-radius: var(--radius-lg) !important; - box-shadow: var(--shadow-1) !important; - margin-bottom: 8px !important; + box-shadow: var(--shadow-sm) !important; + margin-bottom: var(--space-2) !important; overflow: hidden; - transition: background-color var(--dur-fast) var(--ease-out), - border-color var(--dur-fast) var(--ease-out); + transition: background-color var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out), + box-shadow var(--duration-fast) var(--ease-out); } li.bookmark > a:hover { - background: var(--bg-2) !important; + background: var(--surface-raised) !important; border-color: var(--border-default); + box-shadow: var(--shadow-md) !important; } .bookmark-icon { @@ -562,21 +954,29 @@ li.bookmark > a:hover { .bookmark-name { font-family: var(--font-display) !important; - font-size: 13px !important; - font-weight: 500 !important; - color: var(--fg-0) !important; + font-size: var(--text-sm) !important; + font-weight: var(--weight-medium) !important; + color: var(--text-heading) !important; } .bookmark-description { font-family: var(--font-mono) !important; font-size: 10px !important; - letter-spacing: 0.02em; - color: var(--fg-3) !important; + letter-spacing: var(--tracking-wide); + color: var(--text-muted) !important; } -/* ---- Tab bar ------------------------------------------------------------- - The filled pill is replaced by a 2px top edge in aurora blue — canon's one - sanctioned accent-border pattern (and explicitly never a left border). */ +/* ---- Tab bar — the active rail ------------------------------------------- + Skyfall sanctions exactly two accent expressions: the active rail (a 2px + accent bar on the active item, paired with an --accent-soft fill) and + hero-only glows. This is the rail, turned through 90° for a horizontal bar. + + The previous theme ran a full-width blue -> cyan -> green aurora gradient + under this bar. It was the nicest thing on the page and it is gone on + purpose: a decorative gradient across the chrome is neither of the two + sanctioned expressions, and Skyfall permits the aurora motif only on + hero/empty-state areas, never behind body text. A plain hairline separates + chrome from content instead, and the colour lands on the active tab. */ ul.sm\:flex { position: relative; background: transparent !important; @@ -586,10 +986,6 @@ ul.sm\:flex { overflow: visible; } -/* The one moment of colour on the page. Canon sanctions the aurora glow — - bright-blue → bright-cyan → green — as an accent EDGE, never as a fill - behind text. A 1px rule under the tab bar is that edge, and it is the only - place the full aurora appears. */ ul.sm\:flex::after { content: ""; position: absolute; @@ -597,14 +993,7 @@ ul.sm\:flex::after { right: 0; bottom: 0; height: 1px; - background: linear-gradient( - 90deg, - var(--aus-blue) 0%, - var(--aus-cyan) 42%, - var(--aus-green) 68%, - var(--border-subtle) 100% - ); - opacity: 0.9; + background: var(--border-subtle); } ul.sm\:flex > li { @@ -623,95 +1012,154 @@ ul.sm\:flex > li > button { box-shadow: none !important; border-top: 2px solid transparent; font-family: var(--font-mono) !important; - font-size: 11px !important; - font-weight: 500 !important; + font-size: var(--text-2xs) !important; + font-weight: var(--weight-medium) !important; text-transform: uppercase; letter-spacing: var(--tracking-caps); - color: var(--fg-3) !important; - transition: color var(--dur-fast) var(--ease-out); + color: var(--text-muted) !important; + transition: color var(--duration-fast) var(--ease-out), + background-color var(--duration-fast) var(--ease-out); } ul.sm\:flex > li > button:hover { - color: var(--fg-1) !important; - background: transparent !important; + color: var(--text-body) !important; + background: var(--accent-soft) !important; } +/* The active rail: 2px accent bar + --accent-soft fill. `dark:bg-white/10` is + the class Homepage puts on the selected tab; it is the only handle it + gives. */ ul.sm\:flex > li > button.dark\:bg-white\/10 { - border-top-color: var(--aus-blue) !important; - color: var(--fg-0) !important; - background: linear-gradient( - 180deg, - rgba(99, 136, 216, 0.12) 0%, - rgba(99, 136, 216, 0) 72% - ) !important; + border-top-color: var(--accent) !important; + color: var(--text-heading) !important; + background: var(--accent-soft) !important; } /* ---- Header chrome: resource widget + search ----------------------------- - Same card treatment as everything else, so the header belongs to the page - instead of hovering above it. */ -.information-widget-resource, -div.flex.flex-col.justify-center.mt-2 { - background: var(--bg-1) !important; + Same depth recipe as everything else, so the header belongs to the page + instead of hovering above it. --pad-chrome, not --pad-content: this is app + chrome, and Skyfall's negative-space rule is compact chrome / airy content. */ +div.flex.flex-col.justify-center.mt-2, +div.flex.flex-row.self-center.flex-wrap.justify-between { + background: var(--surface-card) !important; border: 1px solid var(--border-subtle); border-radius: var(--radius-lg) !important; - box-shadow: var(--shadow-1) !important; + box-shadow: var(--shadow-sm) !important; } +/* The resource widget is INSIDE that strip, so it must not repeat the recipe + — nested hairline-and-shadow reads as a box in a box. */ .information-widget-resource { border: 0 !important; border-radius: 0 !important; box-shadow: none !important; + background: transparent !important; } -/* The header strip that holds the resource widgets. */ -div.flex.flex-row.self-center.flex-wrap.justify-between { - background: var(--bg-1) !important; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-lg); - box-shadow: var(--shadow-1); +/* The CPU / memory / disk glyphs. Homepage colours them from its own Tailwind + theme, which lands almost invisible on Skyfall Day's near-white chrome. */ +.information-widget-resource svg { + color: var(--text-muted) !important; + opacity: 1 !important; } .information-widget-resource .text-xs, .information-widget-resource span { font-family: var(--font-mono) !important; - font-size: 11px !important; - letter-spacing: 0.02em; - color: var(--fg-2) !important; + font-size: var(--text-2xs) !important; + letter-spacing: var(--tracking-wide); + font-variant-numeric: tabular-nums; + color: var(--text-muted) !important; } .resource-usage, [class*="resource-usage"] { - background: var(--aus-black) !important; + background: var(--surface-input) !important; height: 3px !important; - border-radius: 2px !important; + border-radius: var(--radius-full) !important; } .resource-usage > div, [class*="resource-usage"] > div { - background: var(--aus-cyan) !important; - border-radius: 2px !important; + background: var(--secondary) !important; + border-radius: var(--radius-full) !important; } /* Search input */ input[type="text"], input[type="search"] { - font-family: var(--font-sans) !important; - font-size: 14px !important; - color: var(--fg-1) !important; + font-family: var(--font-body) !important; + font-size: var(--text-base) !important; + color: var(--text-body) !important; + background: transparent !important; } input::placeholder { - color: var(--fg-muted) !important; + color: var(--text-faint) !important; font-family: var(--font-mono) !important; - font-size: 12px !important; - letter-spacing: 0.04em; + font-size: var(--text-xs) !important; + letter-spacing: var(--tracking-wide); } -/* ---- Focus — the aurora glow, canon's signature interaction motif -------- */ +/* ---- Theme toggle -------------------------------------------------------- + Our own switch, injected by conf/custom.js. Homepage's built-in one is + unavailable: rendering it needs `theme:` unpinned in settings.yaml, and an + unpinned `theme:` makes the page's data loader throw — see the note in + custom.js for the measurement. Sized and shaped like an IconButton from the + Skyfall component set: --radius-md, chrome padding, hairline, and the same + accent-soft hover every interactive surface uses. */ +#skyfall-theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + margin-left: auto; + align-self: center; + flex: 0 0 auto; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); + background: transparent; + color: var(--text-muted); + cursor: pointer; + transition: color var(--duration-fast) var(--ease-out), + background-color var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out); +} + +#skyfall-theme-toggle:hover { + color: var(--text-heading); + background: var(--accent-soft); + border-color: var(--border-default); +} + +#skyfall-theme-toggle:active { + background: var(--accent-soft-hover); +} + +/* ---- Focus — Skyfall's ring ---------------------------------------------- */ a:focus-visible, button:focus-visible, input:focus-visible { outline: none !important; - box-shadow: 0 0 0 3px rgba(99, 136, 216, 0.35) !important; - border-radius: var(--radius-sm); + box-shadow: var(--focus-ring) !important; + border-radius: var(--radius-md); +} + +/* ---- Version / footer ---------------------------------------------------- */ +#version, +#version * { + font-family: var(--font-mono) !important; + font-size: var(--text-2xs) !important; + color: var(--text-faint) !important; +} + +/* ---- Reduced motion — canon requires honouring it ------------------------ */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + } } diff --git a/stacks/homepage/conf/custom.js b/stacks/homepage/conf/custom.js index b377919..701903d 100644 --- a/stacks/homepage/conf/custom.js +++ b/stacks/homepage/conf/custom.js @@ -1,2 +1,124 @@ -// Custom JS for homepage. Empty placeholder — keep file present so -// homepage doesn't 404 on the asset. +// Homepage — Australis Skyfall theme switch. +// +// WHY THIS EXISTS INSTEAD OF HOMEPAGE'S OWN TOGGLE +// Homepage renders a built-in light/dark switch only when settings.yaml does +// NOT pin `theme:`. We cannot unpin it: removing the key makes the page's data +// loader throw, and its catch branch serves `initialSettings: {}` — a dashboard +// with no tab bar, no layout and no i18n. Measured on 2026-08-24: with +// `theme: dark` present the payload is correct within ~12s of a recreate; +// with the key removed, six recreates over seven minutes all came up empty, +// and putting the key back fixed it on the next try. So the key stays, and the +// switch is ours. +// +// HOW IT WORKS +// Skyfall keys its light theme off `[data-theme="light"]` on . Homepage +// keeps its own `dark` class there regardless — that is fine and was verified: +// with `class="dark scheme-dark theme-slate"` AND `data-theme="light"`, every +// themed surface resolves to Skyfall Day, because our rules carry !important +// on the surfaces Tailwind's `dark:` variants would otherwise claim. +// +// Precedence, highest first: +// 1. an explicit choice stored here in localStorage +// 2. the OS preference, via @media (prefers-color-scheme) in custom.css +// 3. dark — Skyfall's first-class default +// +// The stylesheet handles 2 and 3 on its own, so this file is only responsible +// for 1. It writes `data-theme` ONLY when there is a stored choice; leaving the +// attribute absent is what lets the media query take over. + +(() => { + "use strict"; + + const KEY = "skyfall-theme"; // "light" | "dark" | absent = follow the OS + const root = document.documentElement; + + const stored = () => { + try { + const v = localStorage.getItem(KEY); + return v === "light" || v === "dark" ? v : null; + } catch { + return null; // private mode / storage disabled — fall through to the OS + } + }; + + const systemPrefersLight = () => + window.matchMedia?.("(prefers-color-scheme: light)").matches ?? false; + + const apply = (mode) => { + if (mode) root.setAttribute("data-theme", mode); + else root.removeAttribute("data-theme"); + }; + + // Run before first paint where possible, so a stored light choice does not + // flash dark on load. + apply(stored()); + + const effective = () => stored() ?? (systemPrefersLight() ? "light" : "dark"); + + const ICON = { + // Lucide sun / moon, 1.75 stroke per Skyfall's iconography note. + light: + '', + dark: '', + }; + + const button = document.createElement("button"); + button.type = "button"; + button.id = "skyfall-theme-toggle"; + button.setAttribute("aria-label", "Toggle light and dark theme"); + + const paint = () => { + const mode = effective(); + // Show the icon for the mode you would switch TO, which is the convention + // every OS theme switch uses. + const next = mode === "light" ? "dark" : "light"; + button.title = `Switch to ${next} theme`; + button.setAttribute("aria-pressed", String(mode === "light")); + button.innerHTML = + '${ICON[next]}`; + }; + + button.addEventListener("click", () => { + const next = effective() === "light" ? "dark" : "light"; + try { + localStorage.setItem(KEY, next); + } catch { + /* storage unavailable — the choice just will not survive a reload */ + } + apply(next); + paint(); + }); + + // Track the OS while no explicit choice is stored, so the icon stays honest. + window + .matchMedia?.("(prefers-color-scheme: light)") + .addEventListener?.("change", () => { + if (!stored()) paint(); + }); + + // Homepage renders client-side and rebuilds its header, so a one-shot + // querySelector at load usually finds nothing and would silently no-op. + // Watch until the header strip exists, then stop watching. + const mount = () => { + if (document.getElementById("skyfall-theme-toggle")?.isConnected) return true; + const host = document.querySelector( + "div.flex.flex-row.self-center.flex-wrap.justify-between", + ); + if (!host) return false; + paint(); + host.appendChild(button); + return true; + }; + + if (!mount()) { + const observer = new MutationObserver(() => { + if (mount()) observer.disconnect(); + }); + observer.observe(document.body, { childList: true, subtree: true }); + // Backstop: never leave an observer running forever on a page that will + // not produce the host element. + setTimeout(() => observer.disconnect(), 30000); + } +})(); diff --git a/stacks/homepage/conf/settings.yaml b/stacks/homepage/conf/settings.yaml index d5b299b..5f51306 100644 --- a/stacks/homepage/conf/settings.yaml +++ b/stacks/homepage/conf/settings.yaml @@ -1,10 +1,28 @@ --- # https://gethomepage.dev/latest/configs/settings title: ... all my base ... +# ⚠ `theme:` MUST STAY PINNED. REMOVING IT BREAKS THE WHOLE DASHBOARD. +# +# Unpinning this is the documented way to make Homepage render its own +# light/dark toggle, and it was tried on 2026-08-24 for exactly that reason. +# It does not work here: with the key absent, the page's data loader throws and +# its catch branch serves `initialSettings: {}` — no tab bar, no layout, no +# i18n, just a flat list of every group at once. Measured, not inferred: six +# force-recreates over seven minutes all came up empty with the key removed, +# and putting it back rendered correctly on the next recreate in 12 seconds. +# `/api/services` stays 200 and correct throughout, which is what makes this so +# easy to misdiagnose as a caching or warm-up problem. +# +# Light/dark still works — it just is not Homepage's switch. The stylesheet is +# dual-theme (Australis Skyfall ships both), driven by `data-theme` on : +# conf/custom.js adds a toggle that writes it and remembers the choice, and +# theme/build.py also emits an OS-preference copy so an unset choice follows +# `prefers-color-scheme`. Dark stays Skyfall's first-class default. +# +# `color:` is pinned too, for a different reason: unpinning it adds a +# colour-ramp picker, and the ramp is not ours to choose — conf/custom.css +# carries the real palette. slate is the nearest cool neutral underneath it. theme: dark -# `color:` only accepts Homepage's built-in Tailwind ramps, and none of them is -# the Australis Sea ramp. slate is the nearest cool neutral and acts as the -# base under conf/custom.css, which is where the real palette lives. color: slate # NO `background:` BLOCK — DELIBERATE, DO NOT RE-ADD WITHOUT ASKING. @@ -14,15 +32,13 @@ color: slate # for an Arbo-generated background and came out on 2026-08-19 when the # operator called the result ugly. # -# The image was also against canon on its own terms: Australis says "solid -# fills only on chrome — no full-bleed photography, no decorative gradients", -# and permits the aurora motif "never as a background fill behind text". A -# whole dashboard is text. The predecessor knew and dialled the opacity down -# instead of dropping it, which is how you end up with a quiet version of the -# wrong thing. The asset is still in `images/` if this is ever revisited. -# -# The aurora now appears exactly where canon sanctions it: a 1px accent edge -# under the tab bar, in conf/custom.css. +# The image was also against canon on its own terms: Skyfall says "flat +# semantic surfaces; no photography, no textures", and permits its one +# decorative motif — a subtle aurora gradient — on hero and empty-state areas +# only, "never behind body text blocks". A whole dashboard is a body text +# block. The predecessor knew and dialled the opacity down instead of dropping +# it, which is how you end up with a quiet version of the wrong thing. The +# asset is still in `images/` if this is ever revisited. headerStyle: boxedWidgets providers: diff --git a/stacks/homepage/theme/australis.css.in b/stacks/homepage/theme/australis.css.in deleted file mode 100644 index b06e393..0000000 --- a/stacks/homepage/theme/australis.css.in +++ /dev/null @@ -1,697 +0,0 @@ -/* Homepage — Australis. - * - * SOURCE OF TRUTH: this file. Do not hand-edit `conf/custom.css`; it is - * generated. Run `theme/build.py` after changing anything here, then - * `scripts/deploy-stack.sh esh-docker-vm homepage --conf`. - * - * WHY A BUILD STEP: Homepage serves exactly two files out of its config - * directory, `/api/config/custom.css` and `/api/config/custom.js`. There is - * no static route for anything else, so a `@font-face` pointing at - * `theme/fonts/*.woff2` would 404 — the faces have to arrive inside the - * stylesheet as data: URIs. The build inlines them. - * - * TOKENS ARE CANONICAL, NOT DERIVED. Every hex below is copied verbatim from - * `~/.claude/skills/australis-design/colors_and_type.css`. The predecessor - * theme built a parallel OKLCH palette "derived from the Australis - * philosophy" rather than using the system's own values, which is how a - * design system quietly forks. `build.py` re-checks these against the skill - * file at build time when it is present and warns on drift. - * - * DIRECTION: instrument panel. This is engineering chrome, not a page with - * wallpaper. Canon: "the screen is the polar sky — empty, with light coming - * through it." Three moves carry it: - * - * 1. Group headings become the Australis eyebrow (mono / uppercase / 11px / - * 0.08em, cyan) with a hairline running to the right edge. Canon names - * the eyebrow a system signature and says to use it often; here it turns - * the groups into register bands instead of headings floating over a - * grid. - * 2. Status stops shouting. The filled emerald chips read louder than the - * service names they annotate; they become a semantic dot plus a mono - * micro-label at tertiary contrast. - * 3. Cards are bordered and opaque, sized to their own content. Canon puts - * border above shadow for grouping in chrome, and equal-height rows turn - * short cards into hollow boxes. - * - * WHAT WAS REMOVED, AND WHY IT IS NOT A REGRESSION: the previous theme - * carried a generated full-bleed aurora image behind the whole dashboard, - * added on the operator explicitly asking for an Arbo-generated background. - * Canon forbids exactly that ("solid fills only on chrome — no full-bleed - * photography, no decorative gradients", and the aurora motif "never as a - * background fill behind text"). The operator called the result ugly on - * 2026-08-19 and asked for a canonical-colors rebuild, so the image is gone. - * The aurora survives where canon actually sanctions it: a single 1px accent - * edge under the tab bar. If a background is ever wanted again, that is the - * conversation to reopen — not a quiet re-add. - * - * TYPE: Space Grotesk (display) / Inter (UI, body) / JetBrains Mono (all - * metadata) — canonical per the system README. Vendored as latin-subset - * VARIABLE woff2, one file per family covering the whole weight axis: 102 KB - * for three families against 56 KB for the three static Supreme cuts the - * predecessor shipped, and no Google Fonts request at page load. - */ - -/* @@FONTS@@ */ - -:root { - /* Ice */ - --aus-black: #222531; - --aus-white: #a9bcc3; - --aus-bright-white: #cce7ec; - /* Sea */ - --aus-bright-black: #373b46; - --aus-dark-30: #414751; - --aus-dark-40: #565f69; - --aus-dark-50: #6e7882; - --aus-dark-60: #86929d; - --aus-bright-70: #9daeb6; - --aus-bright-80: #b3cbcf; - /* Aurora */ - --aus-blue: #6388d8; - --aus-bright-blue: #a4c4ff; - --aus-cyan: #00b1a8; - --aus-bright-cyan: #42dcd1; - --aus-green: #16b866; - --aus-bright-green: #51e08a; - /* Dawn */ - --aus-red: #ff491a; - --aus-yellow: #e1c631; - --aus-magenta: #9d78ff; - - --bg-0: var(--aus-black); - --bg-1: var(--aus-bright-black); - --bg-2: var(--aus-dark-30); - --border-subtle: var(--aus-dark-30); - --border-default: var(--aus-dark-40); - - --fg-0: var(--aus-bright-white); - --fg-1: var(--aus-white); - --fg-2: var(--aus-bright-70); - --fg-3: var(--aus-dark-60); - --fg-muted: var(--aus-dark-50); - - --font-display: "Space Grotesk", ui-sans-serif, system-ui, sans-serif; - --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; - --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace; - - --tracking-caps: 0.08em; - --radius-sm: 4px; - --radius-md: 6px; - --radius-lg: 10px; - --shadow-1: 0 1px 2px rgba(10, 12, 18, 0.4); - --dur-fast: 120ms; - --ease-out: cubic-bezier(0.2, 0.8, 0.2, 1); - - /* Width the status cluster is allowed to occupy in a card's top-right. - Load-bearing in two places that must agree: the right inset reserved on - the title line, and the negative margin the description uses to opt back - out of it. Sized for the widest real cluster — a latency badge plus a - status word ("21 ms ● RUNNING") — plus the 14px card inset. */ - --status-gutter: 96px; - -} - -/* ---- Icon colour --------------------------------------------------------- - Homepage draws every mdi and simple-icons glyph as a MASK over a gradient - fill, so this ramp IS the icon colour — `color:` does nothing to them, and - a filter only muddies them. Stock is slate-400 -> slate-700, and that dark - stop sinks the bottom half of every glyph into the card fill: at a glance - the rail reads as a column of grey smudges rather than as icons. Ice -> - aurora blue keeps both ends clear of --bg-1 and ties the rail to the tab - accent. Space-separated channels, not hex — Homepage consumes them as - `rgb(var(--color-logo-start))`. - - ⚠ NOT `:root`. Homepage sets these same two variables on `.theme-slate`, - and that class sits on the element — the very element `:root` - matches. Same element, so the cascade decides, and `.theme-slate` (0,1,0) - outranks `:root` (0,0,1): a `:root` override here is simply ignored, which - is how the first attempt at this silently did nothing. `html[class]` is - (0,1,1) and wins on the same element without hard-coding which `theme-*` - class is active, so it survives a change to `color:` in settings.yaml. - Raising specificity is not enough on its own either — a custom property is - resolved from the NEAREST ancestor that sets it, so the override has to - land on too, not on . */ -html[class] { - --color-logo-start: 179 203 207; /* #b3cbcf aus-bright-80 */ - --color-logo-stop: 99 136 216; /* #6388d8 aus-blue */ -} - -/* ---- Canvas -------------------------------------------------------------- - Solid fill. Canon forbids full-bleed imagery and decorative gradient fills - behind text. The single sanctioned aurora moment is the hairline under the - header chrome, further down. */ -html, -body, -#page_wrapper, -#background, -body > div { - background-color: var(--bg-0) !important; - background-image: none !important; -} - -/* `#background` above is load-bearing, not defensive tidiness. Homepage - server-renders the wallpaper as an INLINE style on `

`, - and Next.js caches that rendered page — so removing the `background:` block - from settings.yaml is not enough on its own. A restart does not clear it; - only a full recreate does, and recreating this container has its own cost - (the tab bar and i18n go missing for up to an hour and then heal on their - own). Enforcing it in the stylesheet is deterministic, immediate, and also - means the canvas stays correct if the setting is ever re-added by accident. - The deliberate absence of the config block is documented in settings.yaml. */ - -body { - font-family: var(--font-sans) !important; - color: var(--fg-1); - font-size: 15px; - -webkit-font-smoothing: antialiased; -} - -/* ---- Group heading — the Australis eyebrow -------------------------------- - Canon calls mono/uppercase/11px/0.08em the system's signature and says to - use it often. It replaces the oversized sans heading, and a hairline runs - from the label to the right edge so the groups read as register bands - rather than as titles floating over a grid. */ -/* BOOKMARK GROUPS GET THE SAME TREATMENT. A bookmark group is a different - component with a parallel class family (`.bookmark-group`, - `h2.bookmark-group-name`, `.bookmark-group-icon`) and none of the selectors - below matched it, so UltraSeedbox rendered with Homepage's stock 20px sans - heading and a full-colour icon while every service group above it wore the - mono eyebrow. One un-themed heading in a column of themed ones is more - conspicuous than the whole page being un-themed. */ - -/* 22px, not 10px. Now that every group is the same four-across grid (see the - columns note in settings.yaml), the only thing separating one band from the - next is this gap — with card width no longer changing at the boundary, a - 10px gap let two groups read as one long run of cards. */ -.services-group > button.group, -.bookmark-group > button.group { - gap: 0; - margin-bottom: 4px; - margin-top: 22px; -} - -/* …except the first group on a tab, which should sit up against the tab bar - rather than floating 22px below it. */ -.services-group:first-of-type > button.group { - margin-top: 6px; -} - -.service-group-icon, -.bookmark-group-icon { - display: none !important; -} - -h2.service-group-name, -h2.bookmark-group-name { - font-family: var(--font-mono) !important; - font-size: 11px !important; - font-weight: 500 !important; - line-height: 1 !important; - text-transform: uppercase; - letter-spacing: var(--tracking-caps); - color: var(--aus-cyan) !important; - white-space: nowrap; - display: flex; -} - -.services-group > button.group::after, -.bookmark-group > button.group::after { - content: ""; - flex: 1; - height: 1px; - margin-left: 12px; - background: var(--border-subtle); -} - -/* The chevron sits after the rule, muted. */ -.services-group > button.group svg, -.bookmark-group > button.group svg { - color: var(--fg-muted); - margin-left: 8px; - width: 14px; - height: 14px; -} - -/* ---- Service cards ------------------------------------------------------- - Border > shadow for grouping in chrome (canon). Opaque fill, 1px border, - one soft shadow. Height is content-driven — equal-height stretching turns - short cards into hollow boxes. */ -ul.services-list { - align-items: start !important; - row-gap: 8px; -} - -li.service > .service-card { - height: auto !important; - background: var(--bg-1) !important; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-lg) !important; - box-shadow: var(--shadow-1) !important; - margin-bottom: 0 !important; - transition: background-color var(--dur-fast) var(--ease-out), - border-color var(--dur-fast) var(--ease-out); -} - -li.service > .service-card:hover { - background: var(--bg-2) !important; - border-color: var(--border-default); -} - -/* Service name — display face, tight. Description — body face, secondary. - * - * ⚠ `.service-name` IS NOT THE TITLE. Homepage puts the title in as a bare - * text node and then nests `

` as a sibling - * inside the SAME div, so every rule here lands on a box containing both. The - * title has no element of its own and cannot be selected — which is why it - * cannot be given its own truncation, and why the description needs an - * explicit escape hatch from anything the title needs. */ -.service-name { - font-family: var(--font-display) !important; - font-size: 14px !important; - font-weight: 500 !important; - /* Pinned so the status cluster can be centred on this exact line rather - than floating against the card's top edge. Changing one without the - other breaks the alignment. */ - line-height: 17px !important; - letter-spacing: -0.015em; - color: var(--fg-0) !important; - - /* THE GUTTER MUST BE HELD BY WRAPPING, NOT BY CLIPPING. - This rule used to read `padding-right: 78px; overflow: hidden; - text-overflow: ellipsis; white-space: nowrap` and it did not work: CSS - clips overflow at the PADDING box, not the content box, so the reserved - 78px was spill room the title printed straight through. Every long name on - the AI tab rendered underneath its own status pill — "char-rp (MeroMero-v2 - NVFP4, multimodal)" collided with HEALTHY, "char-rp-reasoning (Heretic2 - NVFP4+MTP)" with EXITED. The ellipsis never appeared either: it is painted - by the block whose own line overflows, and that block here is the - anonymous box around the text node, which does not carry the `overflow`. - Wrapping has neither problem — line breaking respects the content box, so - the gutter genuinely holds. Long names take two lines instead of one; on - the AI tab nearly every name in a group is long, so those rows stay flush - with each other. */ - padding-right: var(--status-gutter) !important; - white-space: normal; - overflow: visible; -} - -p.service-description { - font-family: var(--font-sans) !important; - font-size: 12.5px !important; - font-weight: 400 !important; - line-height: 17px !important; - color: var(--fg-3) !important; - margin-top: 3px; - white-space: normal; - - /* Opt back out of the title's gutter. The status cluster is absolutely - positioned over the FIRST line only (top: 13px, height: 17px, so it - occupies y 13-30); the description never starts above y 33. Nothing can - collide, so it takes the full card width back and the gutter costs no - description space at all. */ - margin-right: calc(8px - var(--status-gutter)); - - /* Floor of two lines, ceiling of three. - The floor keeps the common one-line/two-line mix bottom-aligned, which is - most of what made rows look ragged. The ceiling is the other half: a - handful of four- and five-line descriptions (The Booth, Waterland Studio, - the vLLM seats) were dragging their entire row 30-50px taller than every - card beside them, and at four cards across that gap is the most visible - defect on the page. Three lines truncates almost nothing in practice — it - bites only the few entries whose description had already outgrown a - dashboard card and belongs in the service's README instead. - Not equal-heights: that inflates short cards into hollow boxes to match a - widget card twice their height, which is worse than a ragged edge. */ - min-height: 34px; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - overflow: hidden; -} - -.service-icon { - opacity: 0.9; -} - -/* ---- Status — dots, not chips -------------------------------------------- - The filled emerald pills read louder than the service names they annotate. - Replaced with a semantic dot plus a mono micro-label at tertiary contrast: - present when you look for it, silent when you are not. */ -/* The status cluster is CENTRED ON THE SERVICE NAME'S LINE, not parked in the - card's top-right corner. Homepage positions it `absolute top-0 right-0`, - which floats it ~7px above the title's optical centre and reads as a - misalignment on every card. The offsets below reconstruct the title line's - geometry: .service-name sits 5px below the card's top edge and carries 8px - of its own top padding, so its 17px line box starts at 13px and centres at - 21.5px. Giving the cluster that top and that height, and centring inside it, - puts the pill and the name on one optical line. - These three numbers move together — if the name's font-size or line-height - changes, recompute all of them. */ -.service-tags { - top: 13px !important; - height: 17px; - align-items: center !important; - gap: 12px !important; - margin-top: 0 !important; - /* 14px right inset, against the 8px of text padding on the left — the - optical match, since the pill has no glyph hard against its edge. */ - margin-right: 14px !important; -} - -/* Every child of the cluster shares one baseline: status pills, latency - badges and container-stat buttons alike. */ -.service-tag { - display: flex !important; - align-items: center !important; - height: 17px; - line-height: 17px !important; -} - -.service-tag, -.docker-status, -.site-monitor-status, -.service-tag > div:not(.sr-only) { - background: transparent !important; - background-color: transparent !important; - padding: 0 !important; - border-radius: 0 !important; - box-shadow: none !important; -} - -.docker-status > div, -.service-tag .text-\[8px\] { - display: flex !important; - align-items: center !important; - font-family: var(--font-mono) !important; - font-size: 9px !important; - font-weight: 500 !important; - line-height: 1 !important; - letter-spacing: var(--tracking-caps); - color: var(--fg-3) !important; -} - -/* Flex-centred rather than nudged with vertical-align: the dot is an optical - round on a cap-height uppercase run, so it needs true centring, not a magic - pixel offset that only looks right at one font size. */ -.docker-status > div::before { - content: "\25CF"; /* ● */ - display: inline-block; - margin-right: 6px; - font-size: 7px; - line-height: 1; - color: var(--aus-dark-50); -} - -.docker-status-healthy > div::before, -.docker-status-running > div::before { - color: var(--aus-green); -} - -.docker-status-unhealthy > div::before, -.docker-status-exited > div::before, -.docker-status-dead > div::before { - color: var(--aus-red); -} - -.docker-status-starting > div::before, -.docker-status-paused > div::before { - color: var(--aus-yellow); -} - -/* Ping / latency — mono metadata, tabular, no chip. */ -.site-monitor-status > div { - font-family: var(--font-mono) !important; - font-size: 9px !important; - font-weight: 400 !important; - letter-spacing: 0.04em; - text-transform: lowercase !important; - font-variant-numeric: tabular-nums; - color: var(--fg-muted) !important; -} - -/* ---- Widget stat strip --------------------------------------------------- - Was nested boxes-in-a-box. Now a footer strip: hairline above, cells - divided by hairlines, value in the display face, label as a mono eyebrow. - The card stays one object instead of three. */ -.service-container { - margin-top: 8px; - padding-top: 2px; - border-top: 1px solid var(--border-subtle); - gap: 0 !important; -} - -/* Padding trimmed from `8px 4px 6px` on 2026-08-24. Every stat strip adds its - full height to its card and to nothing else in the row, so at four cards - across one AdGuard card opens a void beside three ordinary ones. The strip - cannot be made free, but it can be made small. */ -.service-container > div { - background: transparent !important; - border-radius: 0 !important; - margin: 0 !important; - padding: 6px 4px 5px !important; - border-left: 1px solid var(--border-subtle); -} - -.service-container > div:first-child { - border-left: 0; -} - -/* value — nowrap because a long one (AdGuard's "32.767 ms") otherwise wraps - mid-cell and drags the whole card taller than its row-mates. - 15px, down from 17px: at four cards across, AdGuard's four-cell strip has - ~72px per cell and "130,253" no longer fits at 17px. */ -.service-container > div > div:not(.uppercase) { - font-family: var(--font-display) !important; - font-size: 15px !important; - font-weight: 600 !important; - letter-spacing: -0.015em; - line-height: 1.2 !important; - white-space: nowrap; - font-variant-numeric: tabular-nums; - color: var(--fg-0) !important; -} - -.service-container > div { - min-width: 0; /* let a long value shrink the cell instead of overflowing */ -} - -/* label */ -.service-container > div > div.uppercase { - font-family: var(--font-mono) !important; - font-size: 9px !important; - font-weight: 400 !important; - letter-spacing: var(--tracking-caps); - color: var(--fg-3) !important; - margin-top: 2px; -} - -/* Trailing widget rows — Jellyfin's "No Active Streams" strip and its empty - second row, which Homepage emits AFTER .service-container as its own block - of Tailwind-tinted pills. Untouched they broke out of the card's language: - two light grey bars with their own radius hanging under an otherwise - hairline-ruled footer. Same footer vocabulary, so the card stays one object. - Not hidden — "no active streams" is the answer to the question the card is - there to answer. */ -li.service .service-container ~ div > div { - background: transparent !important; - border-radius: 0 !important; - border-top: 1px solid var(--border-subtle); - height: auto !important; - min-height: 16px; - margin-top: 0 !important; -} - -li.service .service-container ~ div span { - position: static !important; - display: block; - padding: 3px 4px 2px !important; - margin: 0 !important; - font-family: var(--font-mono) !important; - font-size: 9px !important; - letter-spacing: var(--tracking-caps); - text-transform: uppercase; - color: var(--fg-3) !important; -} - -/* ---- Bookmarks ----------------------------------------------------------- - Same card language as a service: opaque fill, hairline, one soft shadow. The - name takes the display face and the description drops to mono metadata at - tertiary contrast, so a bookmark row reads as a quieter sibling of a service - card rather than as a different widget that wandered in. */ -li.bookmark > a { - background: var(--bg-1) !important; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-lg) !important; - box-shadow: var(--shadow-1) !important; - margin-bottom: 8px !important; - overflow: hidden; - transition: background-color var(--dur-fast) var(--ease-out), - border-color var(--dur-fast) var(--ease-out); -} - -li.bookmark > a:hover { - background: var(--bg-2) !important; - border-color: var(--border-default); -} - -.bookmark-icon { - background: transparent !important; - border-radius: 0 !important; - border-right: 1px solid var(--border-subtle); -} - -.bookmark-name { - font-family: var(--font-display) !important; - font-size: 13px !important; - font-weight: 500 !important; - color: var(--fg-0) !important; -} - -.bookmark-description { - font-family: var(--font-mono) !important; - font-size: 10px !important; - letter-spacing: 0.02em; - color: var(--fg-3) !important; -} - -/* ---- Tab bar ------------------------------------------------------------- - The filled pill is replaced by a 2px top edge in aurora blue — canon's one - sanctioned accent-border pattern (and explicitly never a left border). */ -ul.sm\:flex { - position: relative; - background: transparent !important; - background-color: transparent !important; - border-radius: 0 !important; - gap: 0; - overflow: visible; -} - -/* The one moment of colour on the page. Canon sanctions the aurora glow — - bright-blue → bright-cyan → green — as an accent EDGE, never as a fill - behind text. A 1px rule under the tab bar is that edge, and it is the only - place the full aurora appears. */ -ul.sm\:flex::after { - content: ""; - position: absolute; - left: 0; - right: 0; - bottom: 0; - height: 1px; - background: linear-gradient( - 90deg, - var(--aus-blue) 0%, - var(--aus-cyan) 42%, - var(--aus-green) 68%, - var(--border-subtle) 100% - ); - opacity: 0.9; -} - -ul.sm\:flex > li { - height: 40px !important; - border-radius: 0 !important; - background: transparent !important; - overflow: visible; -} - -ul.sm\:flex > li > button { - margin: 0 !important; - height: 100%; - border-radius: 0 !important; - background: transparent !important; - background-color: transparent !important; - box-shadow: none !important; - border-top: 2px solid transparent; - font-family: var(--font-mono) !important; - font-size: 11px !important; - font-weight: 500 !important; - text-transform: uppercase; - letter-spacing: var(--tracking-caps); - color: var(--fg-3) !important; - transition: color var(--dur-fast) var(--ease-out); -} - -ul.sm\:flex > li > button:hover { - color: var(--fg-1) !important; - background: transparent !important; -} - -ul.sm\:flex > li > button.dark\:bg-white\/10 { - border-top-color: var(--aus-blue) !important; - color: var(--fg-0) !important; - background: linear-gradient( - 180deg, - rgba(99, 136, 216, 0.12) 0%, - rgba(99, 136, 216, 0) 72% - ) !important; -} - -/* ---- Header chrome: resource widget + search ----------------------------- - Same card treatment as everything else, so the header belongs to the page - instead of hovering above it. */ -.information-widget-resource, -div.flex.flex-col.justify-center.mt-2 { - background: var(--bg-1) !important; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-lg) !important; - box-shadow: var(--shadow-1) !important; -} - -.information-widget-resource { - border: 0 !important; - border-radius: 0 !important; - box-shadow: none !important; -} - -/* The header strip that holds the resource widgets. */ -div.flex.flex-row.self-center.flex-wrap.justify-between { - background: var(--bg-1) !important; - border: 1px solid var(--border-subtle); - border-radius: var(--radius-lg); - box-shadow: var(--shadow-1); -} - -.information-widget-resource .text-xs, -.information-widget-resource span { - font-family: var(--font-mono) !important; - font-size: 11px !important; - letter-spacing: 0.02em; - color: var(--fg-2) !important; -} - -.resource-usage, -[class*="resource-usage"] { - background: var(--aus-black) !important; - height: 3px !important; - border-radius: 2px !important; -} - -.resource-usage > div, -[class*="resource-usage"] > div { - background: var(--aus-cyan) !important; - border-radius: 2px !important; -} - -/* Search input */ -input[type="text"], -input[type="search"] { - font-family: var(--font-sans) !important; - font-size: 14px !important; - color: var(--fg-1) !important; -} - -input::placeholder { - color: var(--fg-muted) !important; - font-family: var(--font-mono) !important; - font-size: 12px !important; - letter-spacing: 0.04em; -} - -/* ---- Focus — the aurora glow, canon's signature interaction motif -------- */ -a:focus-visible, -button:focus-visible, -input:focus-visible { - outline: none !important; - box-shadow: 0 0 0 3px rgba(99, 136, 216, 0.35) !important; - border-radius: var(--radius-sm); -} diff --git a/stacks/homepage/theme/build.py b/stacks/homepage/theme/build.py index 4ad0c33..8c9df64 100644 --- a/stacks/homepage/theme/build.py +++ b/stacks/homepage/theme/build.py @@ -1,46 +1,126 @@ #!/usr/bin/env python3 -"""Generate conf/custom.css from the Australis source in this directory. +"""Generate conf/custom.css from the Australis Skyfall source in this directory. Homepage serves exactly two files out of its config dir — custom.css and custom.js — with no static route for anything alongside them. A @font-face -pointing at a vendored .woff2 would therefore 404, so the faces have to be -inlined as data: URIs. That is the whole reason this build step exists. +pointing at a vendored .woff2 would therefore 404, and an @import of a sibling +token file would 404 too. So this build does three things that cannot be done +in plain CSS: + + 1. inlines the font faces as data: URIs; + 2. concatenates the vendored token files into one sheet; + 3. bridges Skyfall's `[data-theme="light"]` selector to the `light` CLASS + Homepage actually sets on . Usage: python3 stacks/homepage/theme/build.py Then: scripts/deploy-stack.sh esh-docker-vm homepage --conf + (a settings.yaml change needs a container recreate; a custom.css + change needs only a browser reload — custom.css is served per request) """ import base64 +import hashlib import pathlib import re import sys HERE = pathlib.Path(__file__).resolve().parent -SRC = HERE / "australis.css.in" OUT = HERE.parent / "conf" / "custom.css" -# The canonical token file. Present on a box with the australis-design skill -# installed; absent elsewhere, in which case the drift check is skipped rather -# than failing the build. -CANON = pathlib.Path.home() / ".claude/skills/australis-design/colors_and_type.css" +# --------------------------------------------------------------------------- +# VENDORED, VERBATIM, FROM THE SKYFALL BUNDLE. Concatenated in this order: +# families before semantics, tokens before bindings. +# +# The hashes are the anti-fork guard. The theme this one replaces built a +# parallel palette "derived from the Australis philosophy" instead of using the +# system's own values, and it had to be torn out twice. A vendored file is +# either byte-identical to the bundle or it is a fork wearing the bundle's +# name; there is no third state, so a mismatch FAILS the build rather than +# warning. To legitimately update one, drop in the new file and record its new +# hash in the same commit. +# --------------------------------------------------------------------------- +VENDORED = { + "colors.css": "75f78b674dd7fd87ac414cf04165f0e99b016e54d3b546f0e96378c08fdd7b88", + "layout.css": "a3826169b7a6b604d9c456c073ba3788297ae88bb703862a95171e3858f94c56", + "typography.css": "2ec1a667ced0653292eed0f724b8bc294765d740531ee10e48ebda5f5ca6f2f8", +} -# One VARIABLE face per family — the whole 100-900 axis in a single file, so -# there is no per-weight fan-out. Latin subset only. -FONTS = [ - ("Inter", "Inter-Variable.woff2"), - ("Space Grotesk", "SpaceGrotesk-Variable.woff2"), - ("JetBrains Mono", "JetBrainsMono-Variable.woff2"), +# Our own bindings — the only file in this directory that is ours to edit. +BINDINGS = "skyfall.css.in" + +# --------------------------------------------------------------------------- +# Skyfall keys light mode off `[data-theme="light"]` on . Homepage never +# touches data attributes, and — this is the constraint that shapes everything +# below — it will not give us its own theme toggle either: rendering that +# toggle requires settings.yaml to leave `theme:` unpinned, and an unpinned +# `theme:` makes the page's data loader throw (measured 2026-08-24; see +# conf/custom.js for the evidence). So `theme: dark` stays pinned, Homepage's +# class is always `dark`, and light mode is driven by `data-theme` written by +# our own toggle in custom.js, or by the OS preference when nothing is stored. +# +# Editing the vendored file to add those selectors would fork it; hand-copying +# its light block into the bindings would drift the moment the bundle updates. +# So re-emit the block here, mechanically, in three forms: +# +# [data-theme="light"], html.light explicit choice (our toggle; also the +# spelling a real Skyfall app would use, +# kept so the sheet stays portable) +# @media (prefers-color-scheme: light) +# html:not([data-theme=...]) the OS preference, and ONLY while no +# explicit choice is present — the :not() +# pair is what makes a stored "dark" +# survive a light-mode OS. +# --------------------------------------------------------------------------- +LIGHT_BLOCK = re.compile(r'^\[data-theme="light"\]\s*\{\n(.*?)^\}', re.M | re.S) + + +def expand_light(match: "re.Match[str]") -> str: + body = match.group(1).rstrip("\n") + return ( + '[data-theme="light"],\nhtml.light {\n' + body + "\n}\n\n" + "@media (prefers-color-scheme: light) {\n" + ' html:not([data-theme="dark"]):not([data-theme="light"]) {\n' + + body + + "\n }\n}" + ) + +# One VARIABLE face per stand-in family — the whole 100-900 axis in a single +# file — plus Supreme's three static cuts, which is how Supreme ships. Latin +# subset only. See the type note in skyfall.css.in for why two of the three +# families are substitutions. +FONTS_VARIABLE = [ + ("Space Grotesk", "SpaceGrotesk-Variable.woff2"), # stands in for Bespoke Sans + ("JetBrains Mono", "JetBrainsMono-Variable.woff2"), # stands in for Victor Mono +] +FONTS_STATIC = [ + ("Supreme", "Supreme-400.woff2", 400), + ("Supreme", "Supreme-500.woff2", 500), + # Supreme ships no 600 cut; 600 and 700 both resolve to this file. + ("Supreme", "Supreme-700.woff2", "600 700"), ] # Tokens the generated sheet cannot work without. A vendoring mistake that -# drops the :root block produces a stylesheet that parses fine and renders -# nothing, so assert on the values rather than trusting the copy. -REQUIRED_TOKENS = ["--aus-black", "--aus-cyan", "--bg-1", "--font-mono"] +# drops a block produces a stylesheet that parses fine and renders nothing, so +# assert on the values rather than trusting the copy. One from each vendored +# file, plus proof the light theme survived. +REQUIRED = [ + "--sea-15", # colors.css, family layer + "--surface-card", # colors.css, semantic layer + "--shadow-sm", # layout.css + "--tracking-caps", # typography.css + "html.light", # the explicit-choice selector was emitted + "prefers-color-scheme: light", # the OS-preference copy was emitted + "#skyfall-theme-toggle", # the toggle has styling, not just behaviour +] + + +def sha256(path: pathlib.Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() def font_faces() -> str: out = [] - for family, filename in FONTS: + for family, filename in FONTS_VARIABLE: path = HERE / "fonts" / filename if not path.exists(): sys.exit(f"missing font: {path}") @@ -54,58 +134,79 @@ def font_faces() -> str: f" font-display: swap;\n" f"}}" ) + for family, filename, weight in FONTS_STATIC: + path = HERE / "fonts" / filename + if not path.exists(): + sys.exit(f"missing font: {path}") + b64 = base64.b64encode(path.read_bytes()).decode("ascii") + out.append( + f"@font-face {{\n" + f' font-family: "{family}";\n' + f" src: url(data:font/woff2;base64,{b64}) format('woff2');\n" + f" font-weight: {weight};\n" + f" font-style: normal;\n" + f" font-display: swap;\n" + f"}}" + ) return "\n".join(out) -def check_canon_drift(css: str) -> None: - """Warn if a token here no longer matches the Australis skill's value. +def vendored_css() -> str: + """Concatenate the vendored token files, refusing to build if one moved.""" + parts, drift = [], [] + for name, expected in VENDORED.items(): + path = HERE / name + if not path.exists(): + sys.exit( + f"missing vendored token file: {path}\n" + f"Recover it with: git show 45c1995:stacks/homepage/theme/{name}" + ) + actual = sha256(path) + if actual != expected: + drift.append((name, actual, expected)) + parts.append(f"/* ==== vendored: {name} ({actual[:12]}) ==== */\n{path.read_text()}") - Non-fatal on purpose: the skill is a per-workstation install, so a missing - file is normal and must not break a build on a box that lacks it. A *value* - mismatch is worth shouting about — that is the palette forking, which is - exactly how the theme this one replaced went wrong. - """ - if not CANON.exists(): - print(f"note: {CANON} not present — canonical drift check skipped") - return - - canon = dict(re.findall(r"(--aus-[a-z0-9-]+):\s*(#[0-9a-fA-F]{6});", CANON.read_text())) - ours = dict(re.findall(r"(--aus-[a-z0-9-]+):\s*(#[0-9a-fA-F]{6});", css)) - if not canon: - print(f"note: parsed no --aus-* tokens from {CANON} — drift check skipped") - return - - drift = [(k, v, canon[k]) for k, v in ours.items() if k in canon and v.lower() != canon[k].lower()] - missing = sorted(set(ours) - set(canon)) - for key, mine, theirs in drift: - print(f"DRIFT: {key} is {mine} here, {theirs} in the skill", file=sys.stderr) - for key in missing: - print(f"note: {key} is not a canonical token", file=sys.stderr) if drift: - print( - f"WARNING: {len(drift)} token(s) diverge from the canonical palette. " - "Reconcile before deploying — a derived palette is how the previous " - "theme forked from the design system.", - file=sys.stderr, + for name, actual, expected in drift: + print(f"VENDOR DRIFT: {name}", file=sys.stderr) + print(f" on disk : {actual}", file=sys.stderr) + print(f" expected: {expected}", file=sys.stderr) + sys.exit( + "A vendored Skyfall token file has been modified. These are copied " + "verbatim from the bundle and are not ours to edit — put the " + "override in skyfall.css.in instead. If the bundle itself was " + "legitimately updated, record the new hash in VENDORED in the same " + "commit as the file." ) - else: - print(f"canonical palette check: {len(ours)} tokens match {CANON.name}") + + print(f"vendored token files verified: {', '.join(VENDORED)}") + return "\n\n".join(parts) def main() -> None: - if not SRC.exists(): - sys.exit(f"missing source: {SRC}") - src = SRC.read_text() + src_path = HERE / BINDINGS + if not src_path.exists(): + sys.exit(f"missing source: {src_path}") + src = src_path.read_text() if "/* @@FONTS@@ */" not in src: - sys.exit(f"{SRC.name} lost its @@FONTS@@ placeholder") + sys.exit(f"{BINDINGS} lost its @@FONTS@@ placeholder") - css = src.replace("/* @@FONTS@@ */", font_faces()) + tokens = vendored_css() - for token in REQUIRED_TOKENS: + bridged, n = LIGHT_BLOCK.subn(expand_light, tokens) + if not n: + sys.exit( + 'no [data-theme="light"] rule found in the vendored tokens — the ' + "light theme would silently never apply" + ) + print(f'expanded {n} [data-theme="light"] block(s): explicit + OS-preference') + + css = bridged + "\n\n" + src.replace("/* @@FONTS@@ */", font_faces()) + + for token in REQUIRED: if token not in css: - sys.exit(f"generated css has no {token} — the token block did not survive") + sys.exit(f"generated css has no {token} — a token block did not survive") - check_canon_drift(css) OUT.write_text(css) print(f"wrote {OUT} ({len(css) / 1024:.0f} KB)") diff --git a/stacks/homepage/theme/colors.css b/stacks/homepage/theme/colors.css new file mode 100644 index 0000000..83f248d --- /dev/null +++ b/stacks/homepage/theme/colors.css @@ -0,0 +1,208 @@ +/* ============================================================ + Australis Skyfall — Color Tokens v2 + A ground-up web palette derived from the Australis Dark + PHILOSOPHY (not its ANSI values). Built in OKLCH so the laws + are explicit and every family stays perceptually consistent: + + - All hues are cooler than neutral; nothing warmer than amber. + - One lightness law across every chromatic family: + deep L 0.48 — light-theme fills & colored text + base L 0.66 — dark-theme fills (the working color) + bright L 0.80 — dark-theme colored text & highlights + - Chroma is tuned per hue so no family shouts over another. + - Neutrals (Sea ramp) drift in hue from ice-blue (265°) toward + ocean green (195°) as they brighten — the aurora signature. + - Medium / medium-high contrast for eye comfort. + + Families: Aurora (blue, cyan, green — use generously, in that + order) and Dawn (amber, red, violet — semantic accents only: + warning, danger, AI). + ============================================================ */ + +:root { + /* ---- Sea — neutral ramp (hue 265° → 195° as L rises) ---- */ + --sea-10: oklch(0.23 0.02 265); + --sea-15: oklch(0.27 0.024 268); /* dark canvas — the Australis anchor */ + --sea-20: oklch(0.31 0.022 262); + --sea-25: oklch(0.35 0.02 258); + --sea-30: oklch(0.4 0.018 252); + --sea-40: oklch(0.48 0.016 245); + --sea-50: oklch(0.56 0.015 235); + --sea-60: oklch(0.64 0.014 228); + --sea-70: oklch(0.72 0.014 220); + --sea-75: oklch(0.78 0.015 212); + --sea-80: oklch(0.83 0.017 205); + --sea-90: oklch(0.9 0.02 198); + --sea-94: oklch(0.94 0.014 195); + --sea-96: oklch(0.96 0.01 195); + --sea-98: oklch(0.98 0.006 195); + + /* ---- Ice — main colors (aliases into the ramp) ---- */ + --ice-black: var(--sea-15); + --ice-white: var(--sea-75); + --ice-bright-white: var(--sea-90); + + /* ---- Aurora — primary families (blue > cyan > green) ---- */ + --blue-deep: oklch(0.48 0.12 262); + --blue-base: oklch(0.66 0.12 262); + --blue-bright: oklch(0.8 0.09 262); + --cyan-deep: oklch(0.48 0.08 200); + --cyan-base: oklch(0.66 0.1 200); + --cyan-bright: oklch(0.8 0.1 200); + --green-deep: oklch(0.48 0.11 158); + --green-base: oklch(0.66 0.13 158); + --green-bright: oklch(0.8 0.13 158); + + /* ---- Dawn — accent families (semantic use only) ---- */ + --amber-deep: oklch(0.52 0.1 75); + --amber-base: oklch(0.7 0.12 78); + --amber-bright: oklch(0.82 0.13 82); + --red-deep: oklch(0.5 0.15 25); + --red-base: oklch(0.62 0.16 25); + --red-bright: oklch(0.78 0.11 28); + --violet-deep: oklch(0.5 0.15 292); + --violet-base: oklch(0.66 0.14 292); + --violet-bright: oklch(0.8 0.1 292); +} + +/* ============================================================ + Semantic aliases — DARK (default, first-class) + ============================================================ */ +:root { + color-scheme: dark; + + /* Surfaces */ + --surface-sunken: var(--sea-10); + --surface-base: var(--sea-15); + --surface-raised: var(--sea-20); + --surface-overlay: oklch(0.34 0.022 260); + --surface-card: var(--sea-20); + --surface-input: var(--sea-10); + --surface-scrim: oklch(0.17 0.02 265 / 0.72); + + /* Text */ + --text-heading: var(--sea-90); + --text-body: var(--sea-75); + --text-muted: var(--sea-60); + --text-faint: var(--sea-50); + --text-inverse: var(--sea-15); + --text-link: var(--blue-bright); + --text-link-hover: var(--sea-90); + + /* Borders */ + --border-subtle: var(--sea-25); + --border-default: var(--sea-30); + --border-strong: var(--sea-40); + --border-focus: var(--blue-base); + + /* Accent (primary = aurora blue) */ + --accent: var(--blue-base); + --accent-hover: oklch(0.71 0.11 262); + --accent-active: oklch(0.6 0.13 262); + --accent-bright: var(--blue-bright); + --accent-text: var(--blue-bright); + --accent-contrast: var(--sea-10); + --accent-soft: color-mix(in oklab, var(--blue-base) 16%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-base) 26%, transparent); + + /* Secondary accent (aurora cyan) */ + --secondary: var(--cyan-base); + --secondary-bright: var(--cyan-bright); + --secondary-text: var(--cyan-bright); + --secondary-soft: color-mix(in oklab, var(--cyan-base) 14%, transparent); + + /* Semantic status */ + --success: var(--green-base); + --success-text: var(--green-bright); + --success-soft: color-mix(in oklab, var(--green-base) 14%, transparent); + --warning: var(--amber-base); + --warning-text: var(--amber-bright); + --warning-soft: color-mix(in oklab, var(--amber-base) 13%, transparent); + --danger: var(--red-base); + --danger-hover: oklch(0.67 0.15 25); + --danger-text: var(--red-bright); + --danger-contrast: var(--sea-10); + --danger-soft: color-mix(in oklab, var(--red-base) 13%, transparent); + --info: var(--blue-base); + --info-text: var(--blue-bright); + --info-soft: color-mix(in oklab, var(--blue-base) 14%, transparent); + --ai: var(--violet-base); + --ai-text: var(--violet-bright); + --ai-soft: color-mix(in oklab, var(--violet-base) 13%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: var(--sea-10); +} + +/* ============================================================ + Semantic aliases — LIGHT ("Skyfall Day") + Same laws, inverted: surfaces at L 0.94–0.98, text at L 0.27–0.45, + chromatic fills & colored text drop to the deep (L 0.48) step. + ============================================================ */ +[data-theme="light"] { + color-scheme: light; + + /* Surfaces */ + --surface-sunken: var(--sea-94); + --surface-base: var(--sea-96); + --surface-raised: var(--sea-98); + --surface-overlay: #ffffff; + --surface-card: var(--sea-98); + --surface-input: #ffffff; + --surface-scrim: oklch(0.27 0.024 268 / 0.4); + + /* Text */ + --text-heading: var(--sea-15); + --text-body: oklch(0.38 0.02 255); + --text-muted: var(--sea-50); + --text-faint: var(--sea-60); + --text-inverse: var(--sea-90); + --text-link: var(--blue-deep); + --text-link-hover: var(--sea-15); + + /* Borders */ + --border-subtle: oklch(0.89 0.014 210); + --border-default: oklch(0.84 0.016 215); + --border-strong: var(--sea-75); + --border-focus: var(--blue-deep); + + /* Accent */ + --accent: var(--blue-deep); + --accent-hover: oklch(0.53 0.12 262); + --accent-active: oklch(0.44 0.12 262); + --accent-bright: var(--blue-base); + --accent-text: var(--blue-deep); + --accent-contrast: #ffffff; + --accent-soft: color-mix(in oklab, var(--blue-deep) 10%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-deep) 18%, transparent); + + /* Secondary accent */ + --secondary: var(--cyan-deep); + --secondary-bright: var(--cyan-base); + --secondary-text: var(--cyan-deep); + --secondary-soft: color-mix(in oklab, var(--cyan-deep) 9%, transparent); + + /* Semantic status */ + --success: var(--green-deep); + --success-text: var(--green-deep); + --success-soft: color-mix(in oklab, var(--green-deep) 10%, transparent); + --warning: var(--amber-deep); + --warning-text: var(--amber-deep); + --warning-soft: color-mix(in oklab, var(--amber-base) 16%, transparent); + --danger: var(--red-deep); + --danger-hover: oklch(0.55 0.16 25); + --danger-text: var(--red-deep); + --danger-contrast: #ffffff; + --danger-soft: color-mix(in oklab, var(--red-deep) 8%, transparent); + --info: var(--blue-deep); + --info-text: var(--blue-deep); + --info-soft: color-mix(in oklab, var(--blue-deep) 9%, transparent); + --ai: var(--violet-deep); + --ai-text: var(--violet-deep); + --ai-soft: color-mix(in oklab, var(--violet-deep) 9%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: #ffffff; +} diff --git a/stacks/homepage/theme/fonts/Supreme-400.woff2 b/stacks/homepage/theme/fonts/Supreme-400.woff2 new file mode 100644 index 0000000..50e881b Binary files /dev/null and b/stacks/homepage/theme/fonts/Supreme-400.woff2 differ diff --git a/stacks/homepage/theme/fonts/Supreme-500.woff2 b/stacks/homepage/theme/fonts/Supreme-500.woff2 new file mode 100644 index 0000000..751ea8f Binary files /dev/null and b/stacks/homepage/theme/fonts/Supreme-500.woff2 differ diff --git a/stacks/homepage/theme/fonts/Supreme-700.woff2 b/stacks/homepage/theme/fonts/Supreme-700.woff2 new file mode 100644 index 0000000..f9bd77d Binary files /dev/null and b/stacks/homepage/theme/fonts/Supreme-700.woff2 differ diff --git a/stacks/homepage/theme/layout.css b/stacks/homepage/theme/layout.css new file mode 100644 index 0000000..addeb54 --- /dev/null +++ b/stacks/homepage/theme/layout.css @@ -0,0 +1,72 @@ +/* Australis Skyfall — spacing, radii, shadows, motion (v3 "calm depth") */ + +:root { + /* Spacing (4px base) */ + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + --space-10: 40px; + --space-12: 48px; + --space-16: 64px; + --space-20: 80px; + --space-24: 96px; + --space-32: 128px; + + /* Semantic spacing — airy content, compact chrome */ + --pad-chrome: var(--space-2); /* app chrome: rails, toolbars, list rows */ + --pad-content: var(--space-8); /* work surfaces: page bodies, card interiors breathe */ + --gap-pane: var(--space-4); /* gutter between panes/cards on the canvas */ + --measure: 68ch; /* long-form reading width */ + + /* Radii — moderate, calm */ + --radius-xs: 6px; + --radius-sm: 8px; + --radius-md: 10px; /* buttons, inputs, menu items */ + --radius-lg: 14px; /* cards, panes, popovers */ + --radius-xl: 16px; /* dialogs, drawers, command palette */ + --radius-full: 999px; + + /* Depth — crisp 1px hairline + layered soft shadow underneath. + Every elevated surface pairs border: 1px solid var(--border-subtle) + with one of these. Shadows are cool-tinted and two-layer: + a tight contact shadow + a wide ambient falloff. */ + --shadow-xs: 0 1px 2px oklch(0.13 0.02 265 / 0.22); + --shadow-sm: 0 1px 2px oklch(0.13 0.02 265 / 0.2), 0 2px 8px -2px oklch(0.13 0.02 265 / 0.24); + --shadow-md: 0 2px 4px oklch(0.13 0.02 265 / 0.22), 0 10px 28px -6px oklch(0.13 0.02 265 / 0.36); + --shadow-lg: 0 4px 8px oklch(0.13 0.02 265 / 0.26), 0 28px 64px -12px oklch(0.13 0.02 265 / 0.5); + --shadow-drawer: 0 8px 16px oklch(0.13 0.02 265 / 0.28), 0 32px 80px -8px oklch(0.13 0.02 265 / 0.55); + + /* Glows — hero moments ONLY: empty states, featured cards, command palette */ + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-base) 42%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-base) 38%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-base) 40%, transparent); + + /* Active rail — left accent bar on active nav / selected items */ + --rail-active: inset 2px 0 0 0 var(--accent); + + /* Focus ring */ + --focus-ring: 0 0 0 2px var(--surface-base), 0 0 0 4px var(--border-focus); + + /* Motion — calm, no bounce */ + --ease-out: cubic-bezier(0.22, 1, 0.36, 1); /* @kind other */ + --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* @kind other */ + --duration-fast: 120ms; /* @kind other */ + --duration-base: 180ms; /* @kind other */ + --duration-slow: 300ms; /* @kind other */ + --duration-drawer: 260ms; /* @kind other */ +} + +[data-theme="light"] { + --shadow-xs: 0 1px 2px oklch(0.3 0.02 255 / 0.07); + --shadow-sm: 0 1px 2px oklch(0.3 0.02 255 / 0.06), 0 2px 8px -2px oklch(0.3 0.02 255 / 0.08); + --shadow-md: 0 2px 4px oklch(0.3 0.02 255 / 0.06), 0 10px 28px -6px oklch(0.3 0.02 255 / 0.12); + --shadow-lg: 0 4px 8px oklch(0.3 0.02 255 / 0.07), 0 28px 64px -12px oklch(0.3 0.02 255 / 0.18); + --shadow-drawer: 0 8px 16px oklch(0.3 0.02 255 / 0.08), 0 32px 80px -8px oklch(0.3 0.02 255 / 0.22); + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-deep) 26%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-deep) 24%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-deep) 25%, transparent); +} diff --git a/stacks/homepage/theme/skyfall.css.in b/stacks/homepage/theme/skyfall.css.in new file mode 100644 index 0000000..7e31ca5 --- /dev/null +++ b/stacks/homepage/theme/skyfall.css.in @@ -0,0 +1,718 @@ +/* Homepage — Australis Skyfall, dual theme. + * + * SOURCE OF TRUTH: this file plus the three VENDORED token files beside it. + * Do not hand-edit `conf/custom.css`; it is generated. Run `theme/build.py` + * after changing anything here, then + * `scripts/deploy-stack.sh esh-docker-vm homepage --conf`. + * + * ── WHAT IS VENDORED, AND WHY IT IS UNTOUCHABLE ────────────────────────── + * colors.css Skyfall v2 palette — Sea/Ice/Aurora/Dawn in OKLCH, plus + * the semantic layer for BOTH themes. + * layout.css v3 "calm depth" — spacing, radii, the shadow system, + * glows, the active rail, motion. + * typography.css families, scale, weights, leading, tracking. + * + * These three are copied VERBATIM from the Skyfall bundle and must stay that + * way. `build.py` hashes them and fails the build if a byte moves. Everything + * this dashboard needs on top of them lives in THIS file, expressed through + * the semantic layer — never against a raw family token, and never a literal + * colour. That rule is not fussiness: the theme this one replaces built its + * own parallel palette "derived from the philosophy", which is how a design + * system quietly forks, and it had to be torn out twice. + * + * ── DUAL THEME, AND THE ONE PIECE OF PLUMBING IT NEEDS ─────────────────── + * Skyfall keys light mode off `[data-theme="light"]`. Homepage keys it off a + * `light` / `dark` CLASS on , and does not touch data attributes. Rather + * than edit the vendored file (fork) or duplicate its light block by hand + * (drift), `build.py` rewrites the selector at build time so both spellings + * are honoured. See BRIDGE_SELECTOR there. + * + * Dark is `:root` and remains first-class. Light is Skyfall Day. Both are + * reachable from Homepage's own theme toggle, which appears because + * settings.yaml no longer pins `theme:`. + * + * ── TYPE: TWO DOCUMENTED SUBSTITUTIONS ─────────────────────────────────── + * Skyfall names Bespoke Sans (display) / Supreme (body, UI) / Victor Mono + * Nerd Font (data, code). Only Supreme was ever vendored into this repo, and + * Skyfall's own notes call Victor Mono "user-supplied", so substituting is + * expected rather than a deviation: + * Supreme 400/500/700 — CANONICAL, the body and UI face. + * Space Grotesk variable — stands in for Bespoke Sans (display). + * JetBrains Mono variable — stands in for Victor Mono (data, metadata). + * Both stand-ins are neutral grotesques in the right register. Swap them the + * moment the real faces arrive: it is a two-line change in build.py's FONTS + * and the --font-display / --font-mono overrides below. + * + * ── WHERE THIS DEPARTS FROM THE PREVIOUS THEME, DELIBERATELY ───────────── + * 1. Depth is now the RECIPE, not a choice: every elevated surface carries a + * 1px hairline AND a two-layer shadow, never one without the other. + * 2. Radii move to Skyfall's scale — cards at --radius-lg (14px), controls at + * --radius-md (10px). + * 3. The full-width aurora ribbon under the tab bar is GONE. Skyfall sanctions + * exactly two accent expressions — the active rail and hero-only glows — + * and a decorative gradient across the chrome is neither. The colour it was + * carrying now lands where canon puts it: a 2px accent bar plus an + * --accent-soft fill on the active tab. If you want the ribbon back, that + * is a deliberate documented deviation, not an oversight. + * 4. Widget stat values move from the display face to mono. Skyfall is + * explicit: numbers and telemetry are always --font-mono. + */ + +/* @@FONTS@@ */ + +/* ---- Family substitutions ------------------------------------------------ + Overriding typography.css's declarations rather than editing it, so the + vendored file stays byte-identical and the swap is visible in one place. */ +:root { + --font-display: "Space Grotesk", "Bespoke Sans", ui-sans-serif, sans-serif; + --font-body: "Supreme", ui-sans-serif, system-ui, sans-serif; + --font-mono: "JetBrains Mono", "VictorMono Nerd Font", ui-monospace, monospace; + + /* Width the status cluster occupies in a card's top-right. Load-bearing in + two places that must agree: the inset reserved on the title line, and the + negative margin the description uses to opt back out of it. Sized for the + widest real cluster — a latency badge plus a status word. */ + --status-gutter: 96px; +} + +/* ---- Icon colour --------------------------------------------------------- + Homepage draws every mdi and simple-icons glyph as a MASK over a gradient + fill, so this ramp IS the icon colour — `color:` does nothing to them. + + ⚠ These must be space-separated sRGB CHANNELS, because Homepage consumes + them as `rgb(var(--color-logo-start))`. An oklch() token cannot be fed + through that, so the four values below are the exact sRGB conversions of + real Skyfall tokens rather than colours anyone picked by eye: + dark --sea-80 oklch(0.83 0.017 205) -> 187 203 204 + --blue-base oklch(0.66 0.12 262) -> 105 145 220 + light --sea-40 oklch(0.48 0.016 245) -> 86 95 102 + --blue-deep oklch(0.48 0.12 262) -> 54 91 161 + Recompute with theme/oklch_to_srgb.py if a token ever changes. + Light uses the deep (L 0.48) step for both stops, per Skyfall's lightness + law: deep is the light-theme value for fills and coloured marks. + + ⚠ NOT `:root`. Homepage sets these same two variables on `.theme-slate`, + and that class sits on — the very element `:root` matches. Same + element, so the cascade decides, and `.theme-slate` (0,1,0) outranks + `:root` (0,0,1): a `:root` override here is silently ignored. `html[class]` + is (0,1,1) and wins without hard-coding which `theme-*` class is active. + Specificity alone is not enough either — a custom property resolves from + the NEAREST ancestor that sets it, so this has to land on . */ +html[class] { + --color-logo-start: 187 203 204; + --color-logo-stop: 105 145 220; +} + +html[data-theme="light"], +html.light { + --color-logo-start: 86 95 102; + --color-logo-stop: 54 91 161; +} + +/* ---- Canvas -------------------------------------------------------------- + The app canvas is --surface-sunken and work floats on it as cards. Flat + semantic fill only: Skyfall forbids full-bleed imagery and decorative + gradients behind text. + + `#background` is load-bearing, not defensive tidiness. Homepage + server-renders the wallpaper as an INLINE style on `

` + and Next.js caches that rendered page, so removing the `background:` block + from settings.yaml is not enough on its own — a restart does not clear it, + only a full recreate does. Enforcing it here is deterministic and immediate, + and keeps the canvas correct if the setting is ever re-added by accident. */ +html, +body, +#page_wrapper, +#background, +body > div { + background-color: var(--surface-sunken) !important; + background-image: none !important; +} + +body { + font-family: var(--font-body) !important; + font-size: var(--text-base); + line-height: var(--leading-normal); + color: var(--text-body); + -webkit-font-smoothing: antialiased; +} + +/* ---- Group heading — the Skyfall eyebrow --------------------------------- + Mono, uppercase, --text-2xs, --tracking-caps, in the secondary accent, with + a hairline running to the right edge so groups read as register bands + rather than titles floating over a grid. ALL-CAPS is sanctioned here + specifically: Skyfall allows it for tiny tracked eyebrow labels and table + headers, and nowhere else. + + Bookmark groups get the identical treatment. They are a separate component + with a parallel class family, and none of these selectors matched it before + — so UltraSeedbox rendered with Homepage's stock 20px sans heading while + every service group above it wore the eyebrow. One un-themed heading in a + column of themed ones is more conspicuous than the whole page being + un-themed. */ +.services-group > button.group, +.bookmark-group > button.group { + gap: 0; + margin-bottom: var(--space-1); + margin-top: var(--space-6); +} + +/* …except the first group on a tab, which should sit up against the tab bar + rather than floating below it. */ +.services-group:first-of-type > button.group { + margin-top: var(--space-2); +} + +.service-group-icon, +.bookmark-group-icon { + display: none !important; +} + +h2.service-group-name, +h2.bookmark-group-name { + font-family: var(--font-mono) !important; + font-size: var(--text-2xs) !important; + font-weight: var(--weight-medium) !important; + line-height: 1 !important; + text-transform: uppercase; + letter-spacing: var(--tracking-caps); + color: var(--secondary-text) !important; + white-space: nowrap; + display: flex; +} + +.services-group > button.group::after, +.bookmark-group > button.group::after { + content: ""; + flex: 1; + height: 1px; + margin-left: var(--space-3); + background: var(--border-subtle); +} + +/* The chevron sits after the rule, muted. */ +.services-group > button.group svg, +.bookmark-group > button.group svg { + color: var(--text-faint); + margin-left: var(--space-2); + width: 14px; + height: 14px; +} + +/* ---- Service cards — the calm-depth recipe ------------------------------- + HAIRLINE + TWO-LAYER SHADOW, NEVER ONE WITHOUT THE OTHER. That pairing is + Skyfall's defining move; a card with a border and no shadow, or a shadow + and no border, is off-system. Height stays content-driven — equal-height + stretching turns short cards into hollow boxes. */ +ul.services-list { + align-items: start !important; + row-gap: var(--space-2); +} + +li.service > .service-card { + height: auto !important; + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; + margin-bottom: 0 !important; + transition: background-color var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out), + box-shadow var(--duration-fast) var(--ease-out); +} + +/* Hover: surface lifts a step and the shadow deepens sm -> md, per canon. + No scale, no translate — Skyfall has no bounce anywhere. */ +li.service > .service-card:hover { + background: var(--surface-raised) !important; + border-color: var(--border-default); + box-shadow: var(--shadow-md) !important; +} + +/* Service name — display face, tight. Description — body face, muted. + * + * ⚠ `.service-name` IS NOT THE TITLE. Homepage puts the title in as a bare + * text node and then nests `

` as a sibling + * inside the SAME div, so every rule here lands on a box containing both. The + * title has no element of its own and cannot be selected — which is why it + * cannot be given its own truncation, and why the description needs an + * explicit escape hatch from anything the title needs. */ +.service-name { + font-family: var(--font-display) !important; + font-size: var(--text-base) !important; + font-weight: var(--weight-medium) !important; + /* Pinned so the status cluster can be centred on this exact line rather + than floating against the card's top edge. Changing one without the + other breaks the alignment. */ + line-height: 17px !important; + letter-spacing: var(--tracking-tight); + color: var(--text-heading) !important; + + /* THE GUTTER MUST BE HELD BY WRAPPING, NOT BY CLIPPING. + This rule used to read `padding-right: 78px; overflow: hidden; + text-overflow: ellipsis; white-space: nowrap` and it did not work: CSS + clips overflow at the PADDING box, not the content box, so the reserved + 78px was spill room the title printed straight through. Six cards on the + AI tab rendered their name underneath their own status pill. The ellipsis + never appeared either: it is painted by the block whose own line + overflows, and that block here is the anonymous box around the text node, + which does not carry the `overflow`. Wrapping has neither problem — line + breaking respects the content box, so the gutter genuinely holds. */ + padding-right: var(--status-gutter) !important; + white-space: normal; + overflow: visible; +} + +p.service-description { + font-family: var(--font-body) !important; + font-size: var(--text-xs) !important; + font-weight: var(--weight-regular) !important; + line-height: 17px !important; + color: var(--text-muted) !important; + margin-top: 3px; + white-space: normal; + + /* Opt back out of the title's gutter. The status cluster is absolutely + positioned over the FIRST line only (top: 13px, height: 17px, so it + occupies y 13-30); the description never starts above y 33. Nothing can + collide, so it takes the full card width back and the gutter costs no + description space at all. */ + margin-right: calc(var(--space-2) - var(--status-gutter)); + + /* Floor of two lines, ceiling of three. The floor keeps the common + one-line/two-line mix bottom-aligned, which is most of what made rows + look ragged. The ceiling is the other half: a handful of four- and + five-line descriptions were dragging their entire row 30-50px taller than + every card beside them, and at four cards across that gap is the most + visible defect on the page. Not equal-heights — that inflates short cards + into hollow boxes to match a widget card twice their height. */ + min-height: 34px; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +/* ---- Status — semantic dots, not chips ----------------------------------- + The stock filled emerald pills read louder than the service names they + annotate. A semantic dot plus a mono micro-label at faint contrast: present + when you look for it, silent when you are not. The dot colours come from + --success/--danger/--warning-text, so they take the deep step automatically + in Skyfall Day rather than staying dark-theme bright on a white card. + + The cluster is CENTRED ON THE SERVICE NAME'S LINE, not parked in the card's + top-right corner. Homepage positions it `absolute top-0 right-0`, which + floats it ~7px above the title's optical centre and reads as a misalignment + on every card. The offsets below reconstruct the title line's geometry: + .service-name sits 5px below the card's top edge and carries 8px of its own + top padding, so its 17px line box starts at 13px and centres at 21.5px. + These three numbers move together — if the name's font-size or line-height + changes, recompute all of them. */ +.service-tags { + top: 13px !important; + height: 17px; + align-items: center !important; + gap: var(--space-3) !important; + margin-top: 0 !important; + /* 14px right inset, against the 8px of text padding on the left — the + optical match, since the pill has no glyph hard against its edge. */ + margin-right: 14px !important; +} + +/* Every child of the cluster shares one baseline: status pills, latency + badges and container-stat buttons alike. */ +.service-tag { + display: flex !important; + align-items: center !important; + height: 17px; + line-height: 17px !important; +} + +.service-tag, +.docker-status, +.site-monitor-status, +.service-tag > div:not(.sr-only) { + background: transparent !important; + background-color: transparent !important; + padding: 0 !important; + border-radius: 0 !important; + box-shadow: none !important; +} + +.docker-status > div, +.service-tag .text-\[8px\] { + display: flex !important; + align-items: center !important; + font-family: var(--font-mono) !important; + font-size: 9px !important; + font-weight: var(--weight-medium) !important; + line-height: 1 !important; + letter-spacing: var(--tracking-caps); + color: var(--text-muted) !important; +} + +/* Flex-centred rather than nudged with vertical-align: the dot is an optical + round on a cap-height uppercase run, so it needs true centring, not a magic + pixel offset that only looks right at one font size. */ +.docker-status > div::before { + content: "\25CF"; /* ● */ + display: inline-block; + margin-right: 6px; + font-size: 7px; + line-height: 1; + color: var(--text-faint); +} + +/* ⚠ Homepage emits `docker-status-`, not `status-`. Selectors + matching the latter silently hit nothing — which is how an earlier pass + shipped "themed" status pills that were still stock green. */ +.docker-status-healthy > div::before, +.docker-status-running > div::before { + color: var(--success-text); +} + +.docker-status-unhealthy > div::before, +.docker-status-exited > div::before, +.docker-status-dead > div::before { + color: var(--danger-text); +} + +.docker-status-starting > div::before, +.docker-status-paused > div::before { + color: var(--warning-text); +} + +/* Ping / latency — mono metadata, tabular, no chip. Deliberately the info + family and not a status colour: "how fast" must not read as "is it alive". */ +.site-monitor-status > div { + font-family: var(--font-mono) !important; + font-size: 9px !important; + font-weight: var(--weight-regular) !important; + letter-spacing: var(--tracking-wide); + text-transform: lowercase !important; + font-variant-numeric: tabular-nums; + color: var(--text-faint) !important; +} + +/* ---- Widget stat strip --------------------------------------------------- + A footer strip inside the card: hairline above, cells divided by hairlines, + value then a mono eyebrow label. The card stays one object instead of three + nested boxes. + + Values are MONO, not the display face. Skyfall is explicit that numbers and + telemetry always take --font-mono; hierarchy against the label comes from + weight and size, which is the same tool the type system uses everywhere + else. Padding is tight because a stat strip adds its full height to its own + card and to nothing else in the row — at four cards across, one AdGuard + card opens a void beside three ordinary ones. It cannot be made free, but + it can be made small. */ +.service-container { + margin-top: var(--space-2); + padding-top: 2px; + border-top: 1px solid var(--border-subtle); + gap: 0 !important; +} + +.service-container > div { + background: transparent !important; + border-radius: 0 !important; + margin: 0 !important; + padding: 6px 4px 5px !important; + border-left: 1px solid var(--border-subtle); + min-width: 0; /* let a long value shrink the cell instead of overflowing */ +} + +.service-container > div:first-child { + border-left: 0; +} + +/* value — nowrap because a long one (AdGuard's "32.767 ms") otherwise wraps + mid-cell and drags the whole card taller than its row-mates. */ +.service-container > div > div:not(.uppercase) { + font-family: var(--font-mono) !important; + font-size: var(--text-sm) !important; + font-weight: var(--weight-bold) !important; + letter-spacing: var(--tracking-tight); + line-height: 1.2 !important; + white-space: nowrap; + font-variant-numeric: tabular-nums; + color: var(--text-heading) !important; +} + +/* label */ +.service-container > div > div.uppercase { + font-family: var(--font-mono) !important; + font-size: 9px !important; + font-weight: var(--weight-regular) !important; + letter-spacing: var(--tracking-caps); + color: var(--text-muted) !important; + margin-top: 2px; +} + +/* Trailing widget rows — Jellyfin's "No Active Streams" strip and its empty + second row, which Homepage emits AFTER .service-container as its own block + of Tailwind-tinted pills. Untouched they broke out of the card's language: + two light grey bars with their own radius hanging under an otherwise + hairline-ruled footer. Not hidden — "no active streams" is the answer to + the question the card exists to answer. */ +li.service .service-container ~ div > div { + background: transparent !important; + border-radius: 0 !important; + border-top: 1px solid var(--border-subtle); + height: auto !important; + min-height: 16px; + margin-top: 0 !important; +} + +li.service .service-container ~ div span { + position: static !important; + display: block; + padding: 3px 4px 2px !important; + margin: 0 !important; + font-family: var(--font-mono) !important; + font-size: 9px !important; + letter-spacing: var(--tracking-caps); + text-transform: uppercase; + color: var(--text-muted) !important; +} + +/* ---- Bookmarks ----------------------------------------------------------- + Same depth recipe as a service card. The name takes the display face and + the description drops to mono metadata, so a bookmark row reads as a + quieter sibling of a service card rather than a different widget that + wandered in. */ +li.bookmark > a { + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; + margin-bottom: var(--space-2) !important; + overflow: hidden; + transition: background-color var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out), + box-shadow var(--duration-fast) var(--ease-out); +} + +li.bookmark > a:hover { + background: var(--surface-raised) !important; + border-color: var(--border-default); + box-shadow: var(--shadow-md) !important; +} + +.bookmark-icon { + background: transparent !important; + border-radius: 0 !important; + border-right: 1px solid var(--border-subtle); +} + +.bookmark-name { + font-family: var(--font-display) !important; + font-size: var(--text-sm) !important; + font-weight: var(--weight-medium) !important; + color: var(--text-heading) !important; +} + +.bookmark-description { + font-family: var(--font-mono) !important; + font-size: 10px !important; + letter-spacing: var(--tracking-wide); + color: var(--text-muted) !important; +} + +/* ---- Tab bar — the active rail ------------------------------------------- + Skyfall sanctions exactly two accent expressions: the active rail (a 2px + accent bar on the active item, paired with an --accent-soft fill) and + hero-only glows. This is the rail, turned through 90° for a horizontal bar. + + The previous theme ran a full-width blue -> cyan -> green aurora gradient + under this bar. It was the nicest thing on the page and it is gone on + purpose: a decorative gradient across the chrome is neither of the two + sanctioned expressions, and Skyfall permits the aurora motif only on + hero/empty-state areas, never behind body text. A plain hairline separates + chrome from content instead, and the colour lands on the active tab. */ +ul.sm\:flex { + position: relative; + background: transparent !important; + background-color: transparent !important; + border-radius: 0 !important; + gap: 0; + overflow: visible; +} + +ul.sm\:flex::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 1px; + background: var(--border-subtle); +} + +ul.sm\:flex > li { + height: 40px !important; + border-radius: 0 !important; + background: transparent !important; + overflow: visible; +} + +ul.sm\:flex > li > button { + margin: 0 !important; + height: 100%; + border-radius: 0 !important; + background: transparent !important; + background-color: transparent !important; + box-shadow: none !important; + border-top: 2px solid transparent; + font-family: var(--font-mono) !important; + font-size: var(--text-2xs) !important; + font-weight: var(--weight-medium) !important; + text-transform: uppercase; + letter-spacing: var(--tracking-caps); + color: var(--text-muted) !important; + transition: color var(--duration-fast) var(--ease-out), + background-color var(--duration-fast) var(--ease-out); +} + +ul.sm\:flex > li > button:hover { + color: var(--text-body) !important; + background: var(--accent-soft) !important; +} + +/* The active rail: 2px accent bar + --accent-soft fill. `dark:bg-white/10` is + the class Homepage puts on the selected tab; it is the only handle it + gives. */ +ul.sm\:flex > li > button.dark\:bg-white\/10 { + border-top-color: var(--accent) !important; + color: var(--text-heading) !important; + background: var(--accent-soft) !important; +} + +/* ---- Header chrome: resource widget + search ----------------------------- + Same depth recipe as everything else, so the header belongs to the page + instead of hovering above it. --pad-chrome, not --pad-content: this is app + chrome, and Skyfall's negative-space rule is compact chrome / airy content. */ +div.flex.flex-col.justify-center.mt-2, +div.flex.flex-row.self-center.flex-wrap.justify-between { + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; +} + +/* The resource widget is INSIDE that strip, so it must not repeat the recipe + — nested hairline-and-shadow reads as a box in a box. */ +.information-widget-resource { + border: 0 !important; + border-radius: 0 !important; + box-shadow: none !important; + background: transparent !important; +} + +/* The CPU / memory / disk glyphs. Homepage colours them from its own Tailwind + theme, which lands almost invisible on Skyfall Day's near-white chrome. */ +.information-widget-resource svg { + color: var(--text-muted) !important; + opacity: 1 !important; +} + +.information-widget-resource .text-xs, +.information-widget-resource span { + font-family: var(--font-mono) !important; + font-size: var(--text-2xs) !important; + letter-spacing: var(--tracking-wide); + font-variant-numeric: tabular-nums; + color: var(--text-muted) !important; +} + +.resource-usage, +[class*="resource-usage"] { + background: var(--surface-input) !important; + height: 3px !important; + border-radius: var(--radius-full) !important; +} + +.resource-usage > div, +[class*="resource-usage"] > div { + background: var(--secondary) !important; + border-radius: var(--radius-full) !important; +} + +/* Search input */ +input[type="text"], +input[type="search"] { + font-family: var(--font-body) !important; + font-size: var(--text-base) !important; + color: var(--text-body) !important; + background: transparent !important; +} + +input::placeholder { + color: var(--text-faint) !important; + font-family: var(--font-mono) !important; + font-size: var(--text-xs) !important; + letter-spacing: var(--tracking-wide); +} + +/* ---- Theme toggle -------------------------------------------------------- + Our own switch, injected by conf/custom.js. Homepage's built-in one is + unavailable: rendering it needs `theme:` unpinned in settings.yaml, and an + unpinned `theme:` makes the page's data loader throw — see the note in + custom.js for the measurement. Sized and shaped like an IconButton from the + Skyfall component set: --radius-md, chrome padding, hairline, and the same + accent-soft hover every interactive surface uses. */ +#skyfall-theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + margin-left: auto; + align-self: center; + flex: 0 0 auto; + border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); + background: transparent; + color: var(--text-muted); + cursor: pointer; + transition: color var(--duration-fast) var(--ease-out), + background-color var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out); +} + +#skyfall-theme-toggle:hover { + color: var(--text-heading); + background: var(--accent-soft); + border-color: var(--border-default); +} + +#skyfall-theme-toggle:active { + background: var(--accent-soft-hover); +} + +/* ---- Focus — Skyfall's ring ---------------------------------------------- */ +a:focus-visible, +button:focus-visible, +input:focus-visible { + outline: none !important; + box-shadow: var(--focus-ring) !important; + border-radius: var(--radius-md); +} + +/* ---- Version / footer ---------------------------------------------------- */ +#version, +#version * { + font-family: var(--font-mono) !important; + font-size: var(--text-2xs) !important; + color: var(--text-faint) !important; +} + +/* ---- Reduced motion — canon requires honouring it ------------------------ */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + } +} diff --git a/stacks/homepage/theme/typography.css b/stacks/homepage/theme/typography.css new file mode 100644 index 0000000..0c42329 --- /dev/null +++ b/stacks/homepage/theme/typography.css @@ -0,0 +1,40 @@ +/* Australis Skyfall — Typography tokens */ + +:root { + /* Families */ + --font-display: "Bespoke Sans", "Avenir Next", "Segoe UI", sans-serif; + --font-body: "Supreme", "Helvetica Neue", "Segoe UI", sans-serif; + --font-mono: "VictorMono Nerd Font", "SF Mono", "Cascadia Code", monospace; + + /* Scale (web-app oriented; 14px UI base) */ + --text-2xs: 11px; + --text-xs: 12px; + --text-sm: 13px; + --text-base: 14px; + --text-md: 16px; + --text-lg: 18px; + --text-xl: 22px; + --text-2xl: 28px; + --text-3xl: 36px; + --text-4xl: 48px; + --text-5xl: 64px; + + /* Weights */ + --weight-regular: 400; + --weight-medium: 500; + --weight-semibold: 600; + --weight-bold: 700; + --weight-extrabold: 800; + + /* Line heights */ + --leading-tight: 1.15; + --leading-snug: 1.35; + --leading-normal: 1.55; + --leading-relaxed: 1.7; + + /* Tracking */ + --tracking-tight: -0.02em; + --tracking-normal: 0; + --tracking-wide: 0.06em; + --tracking-caps: 0.1em; +}