From 35adc4a043c15b7302c61aee9c89dcdf5da7c3e8 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Mon, 24 Aug 2026 09:44:45 -0700 Subject: [PATCH] =?UTF-8?q?feat(homepage):=20rebuild=20on=20Australis=20Sk?= =?UTF-8?q?yfall=20=E2=80=94=20dual=20theme,=20light=20mode=20shipped?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The board was on the Australis TERMINAL palette, which is dark-only by design ("Always dark first. No light mode in this system"). Skyfall is the dual-theme web derivative of the same science, and its bundle turned out to be sitting in this repo's own git history: a predecessor vendored it on 2026-08-19 and a later commit deleted it. `git show 45c1995:...` returns colors.css with both `:root` (dark) and `[data-theme="light"]` (Skyfall Day) intact, plus the calm-depth layout tokens, the typography scale and Supreme 400/500/700. So the light ramp is canonical rather than derived, which was the entire objection to building one. The visual language moves with the palette. Depth is now the recipe and not a choice — every elevated surface carries a 1px hairline AND a two-layer shadow, never one without the other. Radii move to Skyfall's scale, cards at --radius-lg. Widget stat values move from the display face to mono, because Skyfall is explicit that numbers and telemetry are always --font-mono. 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 — so the colour it carried now lands on the active tab as a 2px accent bar plus an --accent-soft fill, which is the rail. Every binding is written against the semantic layer; there are no raw family tokens and no colour literals left in our own file. build.py now guards the vendoring instead of advising it. The three token files are hashed and a mismatch FAILS the build — a vendored file is either byte-identical to the bundle or it is a fork wearing the bundle's name, and the theme this one replaces had to be torn out twice for exactly that. ⚠ Homepage's own theme toggle is unreachable, and reaching for it breaks the dashboard. It renders only when settings.yaml leaves `theme:` unpinned, and with the key absent the page's data loader throws and its catch branch serves `initialSettings: {}` — no tab bar, no layout, no i18n. Six force-recreates over seven minutes all came up empty; restoring `theme: dark` rendered correctly on the next recreate in 12 seconds, while /api/services returned 200 with fully correct content the whole time. That is the first confirmed cause of the long-running "tab bar goes missing after a recreate" symptom, and it also retires the homepage.log-size lead recorded earlier today: rolling the log aside did nothing during this episode, so that coincidence was intermittency. So the toggle is ours. conf/custom.js renders it and stores the choice; build.py re-emits each vendored light block twice, once for an explicit `data-theme` and once inside a prefers-color-scheme 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 against both OS preferences: load, click, click back, reload, all four correct. `data-theme` is the control surface; Homepage's own `dark` class stays on and does not fight, because our rules carry !important on the surfaces Tailwind's `dark:` variants would otherwise claim. Two font substitutions, both documented rather than silent: Space Grotesk for Bespoke Sans and JetBrains Mono for Victor Mono. Only Supreme was ever vendored here and Skyfall's own notes call Victor Mono user-supplied, so this is a two-line swap when the real faces arrive. Dark and light, all four tabs: http://10.100.10.50:8090/b/homepage-skyfall/ --- .../2026-08-24-homepage-uniform-grid.md | 96 ++ persistent-memory.md | 3 + stacks/homepage/README.md | 94 +- stacks/homepage/conf/custom.css | 1104 ++++++++++++----- stacks/homepage/conf/custom.js | 126 +- stacks/homepage/conf/settings.yaml | 40 +- stacks/homepage/theme/australis.css.in | 697 ----------- stacks/homepage/theme/build.py | 213 +++- stacks/homepage/theme/colors.css | 208 ++++ stacks/homepage/theme/fonts/Supreme-400.woff2 | Bin 0 -> 18700 bytes stacks/homepage/theme/fonts/Supreme-500.woff2 | Bin 0 -> 18828 bytes stacks/homepage/theme/fonts/Supreme-700.woff2 | Bin 0 -> 18784 bytes stacks/homepage/theme/layout.css | 72 ++ stacks/homepage/theme/skyfall.css.in | 718 +++++++++++ stacks/homepage/theme/typography.css | 40 + 15 files changed, 2306 insertions(+), 1105 deletions(-) delete mode 100644 stacks/homepage/theme/australis.css.in create mode 100644 stacks/homepage/theme/colors.css create mode 100644 stacks/homepage/theme/fonts/Supreme-400.woff2 create mode 100644 stacks/homepage/theme/fonts/Supreme-500.woff2 create mode 100644 stacks/homepage/theme/fonts/Supreme-700.woff2 create mode 100644 stacks/homepage/theme/layout.css create mode 100644 stacks/homepage/theme/skyfall.css.in create mode 100644 stacks/homepage/theme/typography.css 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,d09GMgABAAAAAEkMAA8AAAAAzFwAAEitAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGjgb4hgchToGYACHRhEICoHyLIG6IguGCgABNgIkA4wOBCAFkGoHj1YbPaw30G3bFTQqKG8M9KN1a5+2H4kQNg5hAKt5ZCDYOAAy7xTP/v//U5LKIaZhaWGwfQ4xGcERYUpttVdzm25GNEzjJJZ8a+F5ERB+Rl+Zn/0Zka85lZJdVEJIrEBhttP10kh5mMTCqUR1p/arngS3xZ4r7JS/Oeo4fD54HxsJJ21m6Xyhtm3/CB13jDdZyl/oSFpMl1GGIkwrSERc+VoR+6KYYTYq6xAVv/P1yh4bGBWTiouLK2s/tDKH2Mi+CIxb+Kg59fLEN/b87sy+r46aZfdmkoiQxDKEyqGqxE8UayY7PD+33grYgAEbg23Qk+gxeozl318lDDZ6RI0saQNUWqzCyBPrDuw7q+C8Oy9EvVMuxIC788obPjf9hwU8BE3L6ASoQZVKGmRCxSdKkJkd908Th9LTt9rEgIpdUv2p/Y6qzKgY7eG4bWquvJl1CTug5zAeCgWUsMiXVWXVozH1tkbiWtkfX0/wAE7yAV1Zd3D3Pp1vM5LhvRntMdYEsCAwRJ/kRGFYXbrd1geEJWBFJMsBrI6KMj/Ovb3INfuqtB0ACMUYGACoU8f29BC4lKZnDIJZqllwn3sHLMB0sihKejqEXMaic9F4fCyXzetJz6QiTlaMVJw4C4Rgm9JTpoOxG1I2rZvjKZIxcu+JHUgCS1TWFF+nWmHtNEBA/38TtoXeEEvpS/ySGarjVX5ys/7K6trm/6IRq07co7pino04JCE7JAwBRnmEID3FClggrUFBmybbRBefbfq3/wIICGxU4cTh4NmJ+3+qli3/gdwQJacLkc8PDlnPRUNdeL3eXlE75BL44Aw4GA5BQZTeilSkJN9yqQ0iNwUMBjgDJHetddY6hFBduSGeU0yVSxd9Ljq3LqrKXe+2cunanYnql33SyfgxZ9GdPLuGghMCSJTtjmztyLmR809+49DIO4g18dE/tiFk0SEhLoiEkCDWfHOvdoAgbIUcohETvoBJOgiNANMO7qfZezns7tOYSAGwBVTAwrhJht7ro6YSdhy93HhWrNZaRPT3udvQakevlWTLec0PkhcREZkfBhnEZPdbW9ZGwo1ZMcIoSi9/kYfNlQVLLSmdgRB39+7xIwHUaWzVePft/voVFxYCok0LEuo/eQTgo1P9FsAX16YVALZvGTkSIABrAUcAKAyENgjtOiB19hgiT6QDMk/lBQQ0oIAAVlJKhzrnvC4B59tMzsH7bupqCIUGmFOA27Ouh7z08i4Cx6sGvY/tOjJ33WJqsAGs66Ehf5qQcHt8AbH7m4AG/JydMru2u8QTn6ML0IPoR+gPmA4mEGPEVGK2Y25Y4a3kVrlWPdZPrJdtrrSBbDJtimwgXDOuB7cZd+BbuMA/HFu9baZtLa7HdtJ+xv6eQ5nDsMNWpzNOc07vJY4EFyIg4ohqYjlxgHiIeIP4mPhWhndmkVJItS6HXG64PHf5zeW94oMS6WrnSnAlu3paPxlnbDJtYkUgB7rJ9Tdcz3NwKKPkUpaRMzPEAaf35KFM/QUKu7mHuhxymqNs/aSmULaJ7clQvd2DUZ7RDFYkqXWx52aiGneAWK7WejC2DtpAUEDfe2z1xMcwNJP4tm+tM97zbDYYi6pD7GdIKQ5lLofQG3O5AWOeM/44h4r6lD2vjD284r3q0QWHn3r0I5cPSrLXhNd2r73EcrlwoJZEq8OCEbH5JJAGKIMAvECn4FIiGOQoFUpN9U9yFhSjYlPD4gzpVYwZZf72bBpMRo4+3C6TKovv8oIVJK3wUqR4WJKs00k7+8HzybsQkz2bQ2U5UuTsaK6Q3B2u0lAVqtWoVVdv9L31zvv1D777lDR/sMAlqF6DRk3VnLQWrdq0I3Xq0q1H75Aqrb5g/QYM1lBIwxUKNmo8EyOT3UyFaTNmzZnPoiz76ruwVevZqNtmsrbMth0Ru93eewbMYgZhL3QmHQy4ZODBHCFD8tQShRQqFXdqnvY3H+jsLfsu95v9xHHIAUhwEL1DJDlMiiOknXzUrMbIJdHzezI5JfZqGE6YYK2zp5bDSOFB54qek9Ga0/Sw4lPO/VzO/i8+JZ1n0nhkHHJbUH0qPWpLMDG4OHNYvnJ6nS5xMpTcBoU5SnOibFLJ2UdSK8FE4LaYLSAQTid81r02QpG4ZBC5cyiHimkfQW0T5gRuF2ECg9Rj8rhUKeIQq0FQEkpVBVNXMJ1ao1oThYCYBWGQAPIUqVJ0A1SFTR02HauR1QT6xsOCWIUauOVxhr3RAB/0Pv4zYnqysa7uluWZbFtVR2/MlIXXBIAYAjXPPdQll4htvgj6Hu572FvnJFxyBhX3gLDn1kbV4nUGY5u4PZ4FfrXvEGvvLr1dgya76AirIV3XrYpVrWUbXOd7QxgzdZ9iEWMTPY2RMCYdV3GmOAODuPjJcWfLi6UgrsI4iqKKEyjJaeXsXueDXGj2GBwsnSR3DJ9o/lgCCKrXoFFTNcfVolWb9kbG04ku3XrSy5CKpS+GfgMGKxTLqPGajGvarPlajGM5X/FdOKtYt2lbpNvbC8yEoREcJLrYoHgiua4TdOu+lBhpDBaHJ5DKlVmeWGc3czCnPK1/7zMBiOgbNCowC3ArCOUApMQhuFgA47BQ2Czz0X2gFCJ2rqpTUy+bhLWJ6qMbHsPwPiAAbRCMBSeYodTKWgEF0BHs+njmZRAO3hk+G0QtrkXpnIhD6TVM9o4RlbmOJc3mf3mwgjWFKFLitLPr54ELBDuOmG84Vbl4sbDguRMvzEseXhVDn+sqUVWq1ahVV35YQFC9Bo2aqhnVolWbdp26dOvRO8pP68P1Y8BgDZGG83m0EGwkjBoznomTTMqUaTNmzZm3aNlX34WtWrdh05ZtOyJ27Q1/eRcCaSgMjkCi0MWCeCK5rolu3ZeCpzFYHN4wIkstlCuzxHq6yBjRSaKaDkybfjrR+mkwtkkUvUH6R6Sx2LT4HHhNInkoDIOG0BxtNxdYRP+y1GGycNPprt4qtkuQo6VEjs6e5EayD5uZZL2bzW+eZ3khL3l4VTSfv3zGiLG7f52diXkwzgikSvAyRRbWqqBq1ptEtSVMJ1s/DcZDJjl0OBdJYsGY90RrJURyvI9BgHcuDuL3jAcXrrQJTpPlr/nmtQHSIkokAF0e78PEpiH2SMzSWRFH0GuY7IiRkDlhkdZeylNUoKAQRR8sce4k6lTlXCg4k7Ph3GHntdiZ3IRHDM+teGFe8vCqGPrcUkkwLlKsRKmy7b+2dQA1gI1JT5kKAkC2sznvvPNCCAEAyGQy2QXnDapLU6dCSIPRlKXOQY516jeHVjyRXAozjcHi8ColypXzUstxcHrUdI+a/mOzfWRgsvnJJ4ikolTdDLHEquiNUWaye7eLZ896gkG9Uccc1LmoMkuVVKtRq+4LBTDk2ReJ4BcpxZEqCIVQCIVQ7McwoYMQCIEQqEgA0h71qEdHqDGM2Bku8AQiiew6t+SeLyV8y4BapNiizrJvnd2eg5xyyVsVv5qr28ZoiIGL9xEsEZu/Ec45aXzuea2HtIrib5fo0uYtziI9jDIPzzYDcxvuO5MGi/vyDBRcChUpXpaUVnlEp91Z511gDwEHZ3Oly02rtKgK1WrUqht+cN8nA34BQfUaNGrSrEWrNu1Inbp069GL0qffgMEaStdwQhg1XhMWTWYqTJsxa858FskyvvoubNX6cMOizdLasm1HxK69139HDOicCXkwFBgcgUShizETi8MTiCRyruXWPYXGYHF4zdcoYBi6X5Ru4qQuV9bCTMusrW0iZtu1yz4cHJ1yPqlLunnqno/FxqNO45BWAMpGwG+KAIQZCSo42re0OTVQuDQFvN7WaxKNs756eCyKIAnxMPElJJSbSExiBQiVRJ0mZfjlR8I6mipOK+AqlKJWGs/pyFna5dJrJi1o1aYdqVOXbj16G2Vkkkxj1rxFy776Lmy1W38oIMlbC25IdFUhU683qactZTqF+mkw/tKkjl7LaeBhSPcYB1zchrrhswUiqVxp5+DkcmeEEdl9OtEJzTJpu4+dLc2PBiiDcns2wj4yJdrDZbN0vl8QeuuL9zKUJ/JbZ9rcBMKLxp/Rxk8e0rm/R7xSz0EnOz7+voCQKdF9nDaGIxV2tENeJ5cCl9sXCQegJd8KtHF3H7RnBmJNYommGL2nPDYgnHtJ02FxZs5fJSBB9Ro0aqpmRItWbdpDks5Il+nWo3dI0YXYRo1n0kybNd8WOZapr4jvwlat27QtcnvzmGVoBDckulg8nki2rCr91Ms2yXRmGjA+NVlCGHsyEXjzNAe5KpiGtTmXBY3GA9qMfdFdiMPm2xe0BGaoLk2XokubTfZ+/HUCElSvQaOmNFta0KpNeyO1dUa60K1Hb/Vx9RswWCHUqPGa1DVt1nwt0izXV13fha1ar02KbZFu7z0BiEP9wXCQ6GKZ8URyKdw0BovDyzJvFauaS22ChhHPRy8RAunDpE2U7YScnhUzXRJ0cg2q7uU0KB3tROeV6TB5uCE61J7ouZf6pHc4KrQLxuLy6C1Gydxln0I9yLQcW3B5JqssfCpNVapNjVp19caWt955nw89E6bMmLNhKzt0u2dDYAhUMepxBFI92EqlM9ncoW+1kK84C7JdszfHv3bm40pMhRiR0OgweaQCINYFSsAR5Hz+lB1dEeR5Ly/kJQ+vimd89rp+kiRJkiQBAADMns5Il+nWo3dIYfpQ/QYM5vPeQqQRM2rMeCa7mZZZ859qDAAAsMGmbZFu72woHIkulownkktB0xgsDu9zunRSmTIwBRVMQT1Oo01sgsQk2lPyyct/7gqzbRZVVhU2n9CdV33ojAiMxY+FL38pFaoWqxKVMkXOa6u6PjXrDVIbq85E/TQYPziZZAn6uAVcx/94lGge4PF4bwE7dqrtBVzznhZp1Ta1U8jj8Xg8HMOwDTXJM23WfC0Cy/nqvgtnFes2bYt0e2dD4Uh0KVgag8XhVYqXT6U0MzPvFFRcoRNBaHg08dFOo97VfpM3v2QFgAuYc3I3KwAAAODnBJazYBiesZAZ/S+NA2Z/9sTOFhiGYfg7GLktQOFGl9pgcU/mI3it/jyvaYMQd41HYRAEAYgRNQAAAD8A8+tq5Au57qbb092VPkIAbPDUMy+6n84GhSPRX6LFg0D/zhyTyZErDA17vfDWoqkSxke8DkxtWPJxbcOTDcYkx6QAU2Ey8pVuhRwWq3nbLM5J3j7jkCEnFuGYrKDh4NlCc5omQ6XqUzrfczEyTMd9hyT2qTpvqDusQMBOVtWJg5frxaSkY5/5StEQes01aSwCWEakrrVa+fvjPDiDkABb4b6A2SAzoLwaVHJu8f/17sQ8YPmjCUITjCYMUQQaOppoNLFoKI9pwmMzJ0BkyMniS9nrCvuYJrLsqHIHzK4EkycPpYhmUiVJHRdWTnh45g5E4Jw4nxte05EOUToBSHFgKcKDEdY4LfDxIc2jzAYgR+sTDQ3KQINS0aUEYQOt46MTp4gFTZ2ANn2SkkotOmPWYrJlg0gwIZEQEnLhVNQYdFJFM8rElK8AR5EiPOXK8dWoIVCnHqRFC1indUSGDdMbNSHZZkcZnXRSuVPOqfCZz9S66JE6c36wxrx5o557bsyPfjRu2bKN/vCHCR/878XoGXbFy372FJ9Al5KYYJdjSKgrSU64q0kN3edJD88XOZEsX+ZqzH7K9eR7mVsp9SpP89SvkGvfgwaWf7ZqBo03AAwYBlRVFevObaCq2B/dA6pwQA3oIeDdWcYgYfYFuFkdEpytV3gyxOkws3B5HsX2f24Rsdv0KGJbtSI6iNFFJ8j95dgXmT1adZoc1vTKMvRLnt8ezNunheJh4fTMBwxoTH8O5FWDsyypb/vox1duFVOd+ZEHWfVdLvkv/wzoPqUPU3ChWpxUJBvp5ZE4gLo4uQOV0zDLECvJECxRN/X3lw6NeKpkEkiSgyYN2cOkgdiP0hVwt3DZ47QB8QGp9ilQWjlLMGJRPECWJtDCxL68iyjCIzkb4rQjZrNJDOPpWweYlwzuBZeQHGRBcQQ7s/jRFgHpWz984ROAmc8AXMeoxQxjDScvB3+TWlTA6dP642v3PULFgHuXgO61Rx/ihGrRyb2WWHRyppoHA/VXAdGRjX/uqcLiZ/b0Uw8rWX+M6KHzh0c/lYjkeOBPvPkkIPgEgsRwCfPds8nKwI/QeIufn/t2VhWfcJHIVlMHGCG2mshSUM8Q4AomSrROTFPXwRz7ixr24iIeEZK8dOGO3NMXwSLGr+24wRd305vLqIHSsfIoSc1qS8pBFiR7/oE3Ien1ikIiGyHIjO8EP+jzV0Z6v3t45YUXi5cJCCddz6qNjksHGI/1FgDQgUb8Lj6bFyzDHN+6bK5+85bz/DD4kydfwAVEC6JFQ+xqKZ0eAcoQeV/knp/rOVnhcsVPSItXQmFXeykGFDjD6BYOO9dBWNypkyB3UCgcagoowPPNJI706nq8LdWxIhdfiLUGJk/Y6V8QaXj/95k7GuixorKKSdMlOYnOOaeiKXo9me1Prz9sCB1Ws9jQQ3evZg+///XoKmQtjfYHTS55+etiSygmptJUsZwstpgsWQP960GGMgL9rSDQz7JLDhQLLCpQOu9fABCR2ZP3bnemzSB9MGpsYKoWQt3B/Y/eObyF4NXejLz4Enu67ZcCg28NJE5bDPCyAF52NazF6rZCBqCbPiJjPTEACEYGdDSpeVKiMqdj1R3g4UrLBWSBUQk4vAUUHJGC8JUJ5J+ml8BkiOtzXfJJgJ25DYCMEHHWPnjSAC6MB1pdq6mhPref8JYAeTsUHoSAxzZGmTLftQ7JQI4HcrpWqKEe59pUtGUBj5wIxYJrK7mL0NAPGIaKhrP52dHrNAcO6LoQHR1EyfvVfW7f0xoRc/ADuCBcmM4L6swHHMhOn6rqhlMe2UICUPOYTYwE5TvpiUjeR4f4kLV9R+4VsFoAMs5TTwEFvZpWo5NyCAk8KGHapXdDBXowUN4+DRWSSFc3LWqdYgCsVkHpZfdKn6euBaItO+QjZ0KpQOa9HdprDZBBRsPHR+NgrVkHWeBO7qDiZwrFCp8jROM07XNBmy44toauHXs8B8PQsVORi2Hqyp3Mw1S3ualZ/0/dyt/Y3sw+0Nrzr379sv75bwPat2R+uqzjv87XGOePssUO8XY7KmnDJSt8TanlahatXKvQKrUqePCB1ay1aBPaJm2ztgW2Nli2ZUU7oB3RZvh5+EMvQABWGvXHj0Rowau5YikX3xEMK9YO+mMSmm+32FmcZJZ1Q11m0O/Z5oYbhAPG/8/8fiD+blZSYN+tUgHQ4RDpfSarQf3Q/PlTHvKNhXRAANDQmo2G0JAaRrM+HAXLmbsV3creLDClFE8hNZnaTJ+YiMoPlbNYyzHObI6CUsk5sz/CXAaJCpfbtahTn+Kwwwk3vHRBwHFG4sIVOe7xiHd8AkHCQ/tgAdQd/uJlHGESHAUJwRlZf6xIONHQcAiofLVD5TZksxaRr7QdF1iLuDeSFbwOj0zHF4+AROIKBYEKgQAIYCkEJD/ChOAR4u7aKLoiKKTOonWHMMyv7BfScTvKHARCiCSJxG2yWmOXBpI6K0dNAVHcB0Z3UwZhgD7XC4CLzXvOtRjxNTyFJ4Fl6/1dXnjN+QAusf+n4Kv/NcYxF3QPgBcA8n37AXv0H3yXi6a8DQXZXaDzxn+HN+PCWAFYo92psiNOe4aralyvd33EjtHRPPrH/7t59n3nxgMvbHmbT/meH9FKtBa9f2D8oGqs2TbHVvgu9V3nu9HWdrCLPbCv7xa9m//4459jWTgGa3jb6Uw5kWe4aON6rT8SnO/pvm+8cMcT8+bO3Q3eoM1B/iN6JpnqvOY5j7nnnH0qxV7bR8tHv/96/wv+989/fz5/8DzvmfAZ/xnvGfdZ0rPoZ6HPaPMftn7fujB/cj5tXjYvnuc9LX9a+tT8NPdp9tP0p2lPFU8jn1Kfun47NYvL09J2ZMjCGcELJqkeTMRdkUAxyFEbXyA8tf7IiVQmj5WV/EPWG4wms8WKGdaGTVvs8YFCpdEZTBabw+XxBUKRWHKKGwpsL5/v0goPnwBECCYiJiElI6egbDs1De0lJDPD3Z/GqKX/712WbDlygf67676HXnrni59++MXPJyAkIiwqJiEuKSUjJytv0oRZM+bMF6uRr0DJRKNd/lBWalD6zWofOqr9629FwDRtc/CVReueA6Zd97uKs3t/1Mq1TZl1ue1tUXr19uOnd+992t3l8U+n88V//2dNHz7P9HjkpsceeOqZ55547U0Poz757CPrSaz62fMXmkcvRwQBMscKkGcBxnKg3wL7/AIc+SkArmED74gNA1CBEEcaQJZQvmQHSIGyVIFkvJMIMifHoxAtEEAnRB7W/U2AhSoRQzcALVAj2nIwNfJ8J4QzjrgEtIuwQoQCSqVRqUbZk+wEwlZADJm7bAEC0CHGDgh/qRSi5ehURw6XXXJxSkbIBNogY9AVcWcSPzdNDtsExwbd54pREobfgqlK7/eC5wlFXLzCbNCV734Gjw+9Oy/iGrmkmYEAn9u7oXRZbTOT7UKqD0t5PSrrozIzVK2gBG5b65gnfsWVyxazwSTts8QNmI1HbYr6yo62Yx8rbh/e6gT8WNnMLicne7OhIiQc72P0hUreILzjztQNe4rSDSmmWtmN3d+W3YiXEES5ySwztmHIbBKlLBBZywtGu2tzx4x24Ow2o6Z9NfMC821trW60Rlr6mPUFVkKK5olLdqnbvhlKKSWQo5Pyqvq2CRMnQ/eNYzqjgn1r9YKr93fuPlZsOHHjqWxlM0MzBD1C5prQDF3e9BWVR9xfkeL6iDu38N37yl769gjzdGZu2CqD45C5KKx2VuaZNEN53qQUCvRQvymI37/Ls8EwW8xB4wxHn+RlV4VHptg22wsGbq0ImokIpua68KgHep8/Nz7KEi1Y0MZLm9uEGZPPPt0ycmNjCkPMPnzB6J+gcnSrMCjAvnuPAkkbIr2EH9CAQHe7mGI0PbdWATeWjRi2qHk1s05U5jMiUt69f3xkids7w8HRFQF1G2Lkj90IosdX6WBXA+Ivo/+nIZQYbWqPwAy4V7sOVHVi3/42FhmIbhOGJK1HXs9yPRDL7J9RTthonkzYB1i5WjcNVoFBhomiZXdyYLeVapeCJZmTyD8q9j6AFXHJo4NuDsDO+0VbMXuUj9pTZwNY52pj4WhdE5uv+HcNrglPeLeaGq6lWuLcILJAwYf2Pdff12B9pdmW0aOEUc8qxoK/TTQttHzQ6MsUY2kukbQgICRkZGBFhmcJeaL7kXQLb8ydxFBYIRDjAyc0mmiefDKJ3KK2RMbsrylWiiM0VWpWSgGXhjVH7YYqSYSGeW9Oesxul04q73NEWHDAEYeHkfkrlK3JYiggApBQgRS2G8Pxe3gSN/17nOD+k4dhGkYo4DBCnIPrkR9WPOG5fod9xY1JiACjXpm9fTM9RqUWnUdx9wLhftj5Lp04uM42g7OwKC8iFAENG9w1cijGbVWq7AplAIRV8NBTk6WdpZUJpSuIHxkbYBkodgIzQi6xx8/njbuDL+5nOdZI1fQrzuN+/R732d+7oNbeO9s0tQvk7DNI1fzROpJU8mKdxtxmD2CJPvM0IDB1MooCrUu5xmifJYKjzrmu8SiOaCF63E4Hk1JBoRBFOpbJfS0HZabtYMXRIdLuHIiQW2xGWsYW6iEHVq+6SCU8uKHgufmGgNm0tfOSzKaqsVhyxBafJvOkiR9Ici+TWHPvKFSrlnzS7pjsjZhBhz+RoPGDOG5sdI9MKJ0s5jqwjou+EMW5sse+e3RJLWoTitIASxfrqfMIGnB/yEcPelvstfZEGlOW6rMYJ4LCYZWxtNQDRwJUl4E6NDCnzawIuesUzxvAcjcbnngCBaB9C351rMgLNMDcvRQegz6FJiDjLpn11vm4vi4ntAk2SzTptUNupS9EYvb5BkBkI60HmIHRJ3LTRCHk9ZCQFSoAzk0B8Itu4UpUJ5EDxyP10SxQsw4BhabMi6HrcKO3aIsLOTipxVtBU5lRnkXBFaHppN2wTIxtb5G5tpYsoJChFQmb/ccus1/FD6tWSXVUkx3rVA8wgStzCseTlPNECXgM7R3lpsCO37hjIr5VfsVRfssmbrLP3Ks7s0A1ROa2AQV2Gq+FRUkm4G+jtRildnQa/7GYZqvQ8qFVszIsFavMectcVtLSq2vGgqFSczx/aC4Q+sXucthC5sTlw74E3Ka63DFr03WN5101AgguJmyebZ2DbLkf9s/gZ3KS3GP87aBkukrb+453lPs0W0sg/HJR/Waz0/vD3jo/FOHni2fXHlKQtz9kNvaqQD30d8JAr+wRUszqn8k9lDeaBcTqmr5JWewfmBvkPIC9rNakGNJMiImIzSzQKWQ9CzlgFR/NHViVoFJtPsac9E8ZjP1Rm912XI27lzLO/0Vc699i0qajCfv8kk/7fZm8ibz1UvTdZDA3ZxwbI+2/6LbRZbf0M/+U8UmXvTNksEsi+VW9T4OOOensvR4YEFvHvN/WKeH3dQCDEGCTvcdfo6+6TOMWGfJu7gx+toTmSJuq0YBU8pczuxV2FSTmOVB4b7Evp4rW8hwslCSJzGaI7zEmpK3dCWrNo/m6d5tOv9Yyd79kyJgU3xRnxA0rVx1wCBsfUUoyZYdCGt5NAHWoe6Nv4t3kknGwY8lSAHKICHbhvteGHFAo8e9uBUiYIwwajQrUL1J3sV/yaEWH33PGARPK3OeL6HnnGKPYS88TqIrSyqlKS2NN3D8e27JpJ0cYpPx7qF6wok3a9bW2SDJPDTB9Cf0WOacF6MVFZl56LcQvzMF2PcJa/k+O+eO9ObOFram11m2felDXkXhFD1xbXmg/ss6y3BEfNi6QUp92fs2F8OZ4MXpqtLyQq4Sjim/U7phKz0kqZeqeS6V8Mz6PW3jwN4HHLMSozVOH5WEpNDwenBEwmtQzaZsH1rqEMxEs8uEqSK9CZsp2QwKGGFm49P2nanmjYTcpfoOkuWM3k0REldXmdf+R2zjZXcy8EJm5QFeuk2NIhs1TafVc2vyIOysbBEeqKCAjVGTqvobAWNpovVRnCTZK8sZN7cliZhKMVbutrjVW8ybwy9LkFkBtV43875mjW892o2aHnJFzl/qofKLVKCYOMSIi1XpGa6DWB1FT5nrGPe8sRcm31ptojbzC2npQ1RDUImMABmpQiiGItUfFuidSASbglJ9AYuVZtwjl5BYFiXreooDXB6xIw2MH8Dchgln3g8tgni6btejGrzSP3uKfMdp7f3ATywlo7aOkgM6xvYgz1Mt+mxF7FaqY9DRUpmw5FJh64kKlOZnvsY1GKOTzQ5Pdw+vJfIqQOxef3MTyE868urZ7ecfNJ7Wl+pwy6nlVm03vI93vJKMUxxucQwYanKl7rUbXaaMta5njd6PLgRpnYPPX3BKh2EzRSDqhHsft9sJzflngivPwpJmvIBrPlvMBUGeP9j6CbY6btKmuzfrjT9M4J3dsZF8JqszK2Uuols6QzXkl8l5GtqCC8RGIedaeo7W1mFqXWzwSytWjtkk4SLp6oTLnv1NmQkjS4v/KcOSLufuWHjcm+dITiRt3G3knyhvQ1nvPnQ1tWciOsIu7siBoZCXJvsE0ivzy3yQof3oC843plEt3OslRyFIqfNnZS+GfJl7XxmjKycsO3FWC8LneS01KcFHjAFUuB+FwWLF+f/0FuEweTtEZsXTy/bjIekXph0174b1F7tAMixxG8M9rFJyJEig6XgWjq+90Fe6N3kYJlTEp+dxGdVgnopKwWvQovCragHHTGfaH3MjLjr2QC/HM5em8JGh9ASPICqxXCQBW2sBoy3cbFuH2jLyCVcgj+FxaK2zie4pau6QUpnm+OG7S2rqobowPTq/h48f2QsODjyJN76qpzBEkw9iu8DP6Akou/utkkfOHl8gkJUeNqET0g0g+y8SixZI8VHIu3f+QXZU/dMW5QF7yuClLbmQFlG4WqFTOlEXjWLoTl0pjSd794VCiCTkwIEGA+rSAd+N9rxAc++bbUeFWojCFXFElD1ARZkskZURquP2G5KbAjQwT0rFCNupln9EjsVbIxr4aoYwnnAFGFBYBqQx1FyEo92gFObmc27xe2NI25NiQWgnFg1b2Ohp861N4IjxbrDYH66JREXbHeumFrula2Z7IECDJuDWTaneLl6uHGIG8dqSps6X16B50rBU5SEo48oQlQjEEi5xJgZEwqGJEjrpRMoQaZ5xapg9klqL3n4BFT+ghRGK0YEq/sqxaCHahGqJC6ZaA0+C+SUwciowT0EUQ67sZp9oSVD4JlaujcCuQ81XNiNEu1/MLugrYVxKMP5QrrsAQCigYHVUWqk6QwuC7yHXdqZeaQPHPBKm/sPmpm2C/Tb0uwbtjO67Em74UeRKl5pIODygIDeIQjgl0mtQeIbuBpcPsCJa157AjD7Ymtquo9vZVE/YTo0/2C98nwaGixmRv7e7YrPKcKV+WaELaIm2KfkwXIOUii5Ms/Z4H3CXZE+khGZqfIqnNGIq5RpPZbp9YNNc4gEreoZSVUKSP4CH39aAnoi8k/L2DgXAaN24H6yvlTtkpFesw0RxhvcJYKIYi7xw9KK8dexdlemJDpG9sOpAr2YZWTtR0JNdXu/EyvNUHm15NDHxzwGyEYssxeKy9KimbcJPwf1w/pw/3X1CPBoSsGXiWYkofMCHnOS46dS5WHnsH7MeukD4l8d8IlzgGPU9EWaI405GIEnIIRI5EXpNKHuFXR3XoQUZxhRdhSlcV8rn2FJqaExV1f8h49K2mrD2ri4nHxZgtC2O3p8xwFE/erOknFUnPfvkHgrV2jjUhhcK3r5u0S7CYU7jqUcyllBmRaDDm+xtZ6AQk1TXXHOUAbJsq59/lpLPzgGtWY2V4L0LGABYLT50w8iZITC/CVITlcCHp+2Na1o5a1D26k0OExQIKiObnpAdOWn5o7z0Z8gontR9h2XSKbIf8snt62G1yIwurZpomslpB7dj2aaFVR0M7qecj5s5TQTqhMHeI6ExIDM6D3M8cCihiSjNO0jgx2d9WhgzJ7/UKk4QW4eF6dREM3BYx364PyLMzAAl850HrgQii6f7a3biPXFnc9Z6pnuZ5Ph0SOEcF1pmdAGnn0Eg9Gml7hfGGTHlNob5mgC9//Ar66gU1AOS466shBntBlsTWqE/bmRtiPmcn4uqfFRqYq/cV1iZuctTEIhmfLlcSYJVBBacdCJfkWIlCqJTwmOw4tJgqoWb4iNVyWVpmOiYdyjhKQJ+XoyR8objbwnAQUiRuuStgrerkRTvQ1w9r5RAR0ipgoVYhcIa08ub++9PsB9N+641LoU6hS8RyiFOoNhsuOyFCOuVarVJQtwaECkOXNUNQxhdh6uxZBslitdq4Kq+3KqNnu3RqhTBQZNbLYJNawJLnLx654ie0yRI7dMYamnrvR3qjt1vC0wIIgcECtW8JR3xz/jxbEsNOVYJYAM4Q4BRl1fnt62edC9K+L5d/ex+C9azFjifS3gcffnrmpB2vQFh2ZndGNzGnayScOsJAbmYjtgxHBY+G53SBf5l37zLv3mHeYY93F6Svjwl87wLcX98I34BebFy3BHpXXZKWNgCEY0trq4rcimqrS8vqqoqpxcJHab8EVokpon9ViVSkElE3gmPT8IyyejgCAgFJy7J0P3lkXUMbbp0cbS635Jhzc1OgmByucOY7DgTs4YoaMzpdjmkdHxiApMKUME5Y8iER6wnUjKmXIdNKsjPK8nMNvFDl8UZa3yPwcThjRDnCZIX8lv4yY/TndlDrcKsiD2mSJ4nYbI6Ex4kS6fkZ66WV0Iqr4vY2c3FUGnDEFjVX5JH5oZWCrIFrxlsuT+LLQF1DPjmvqcKzd1SslRKEYsWoWCEkSMFU8ocGETQOgUHsd3WFRtfG6oAMv2JXfUV6TlZFut61KN1fw9QmuhrnaXwuM5oY+0tSTxUx+m9LrFzKZxFYEoFYLhOwCIlSAXhvvOnyi9rCp0pxUZMCTflZVY0SgYpE2vLdPAZYX8FYpJBfU6i/Mbwm4h2YuFbJ6BGdNA3u5AxcUA0VeGn7oGWwvOdz5uf2VAuYcrgXYTzH/zKw9Oi/Wl1bspRVT3YIVgbAvtJ+AaWgJ/VFksA2kh/L4kn5TIrcLaWxKDujMk2tevCY8caVssj4GEUGky37Zh/JZ2cnt1y8tCUzvVef6swP4mt4PMNxQsWxFCmHeyk1mjxKxjjm5iv8OKxiWd/ufT2DZz71PnNuUP6Lq9i3/3norXVox2LR6ZCg6iZildEESLzTofzTWtS0FjF99MOTnJU5wDhz78VR9/R0v3afZqqpLavUo6F9sQcWx9OppS2hG603KtWceGqcOgkIsU1rulvvt67paShvbbYplBO2j6ammdMeGNLMKdtst8sxpSvrgXFmoaV3ZcP9po7WVpuGseiJLF2a4aHemAGMM+egkt/CBGGYEghcjXdPUM5MQqn/uFNdU1t/d3NZY7FNlhwLqbjyzgaYzMa9R2KOCT6UddY1A5vCbPGNGkp6Nl1VBMYZ2HjnS3LbvvqVo4vKxZJiS67RUgj+fM3Nrr0T0klvYo8JyXTv6B3CRiUExnreTCXIZ3L+ffL/nmRGkbA4BV7DkFA+kyEUwooZIMG29He1qVC2pZk6bn3Q2t/t2X/GVFRKNeVuDvz9VEAl11CUMxf/GAwytOc1Zla4Veq13AS/VmDzwZg9hnWqRLd3Nkx54zE1a5rq6/hdw1TjvU/lpbfoCJh2Otp+cnS7kDpdgT+3IvUYGUftEDh3rrJEOoopEmruCqlBdmm+sqkQVyrDSjRClUzAZDMkv5YHJstXqpKrS3LKnqBnZWgJJAT/NjxoVDY+gt6CyLT6y5rOtqpKqlDzpRrLatKFH18RSEl5M518Pe1amgasO5HNV5ByZTpli/643nQoeUeydrVz4N3NqKtRKYsNjwSmQ+hJdMpD8btqIFJS3vpTL7Mjo3+7B7gnVrOyocuJNawGCKQNjEzzLQ4WPrhn0biak7RgbuCshWlwQr6NzWpwzpTLxWUHno5dSroE2qczMntEoADyU1TKNFCSZ8uRVUEcNDMXq5UTxw8bDfo06E74yg56R76UpAGx2PKAVJXqiQryN1WkFFYUy4oKKwoFXK4SlsBcFY8NKWUiCFYCbE5MWYcMpzJrdJmW8iJ5SVo2y8A3EC2V22fmto1LxsCQOjDNYiioKJIVs84NlsBUnvLJw6NMQkXMjyVWyM/K+0PW0iK1PquivFheXF6ek1FcURIGO3lgupsdsvVYnPLPoZQ/kPcz4Xa2BDD2tU0qJxV8Ream3Rx+YmRZuLENOD00FSmsRXI7TZUgEdJo/dPkTlHEKxZTdFnl/JNHK7kcJcwZ72ILFPIkngdxJ8lF9USlDius3HsMUkazTcwEqQY0wq7/Gv5VUn4L/Y0DL6gWQCNMXgTy2WHG9yphjmgF38MPGRioAhN7ftJmrFY9Uf32/V/249ceeIOtTb6Nng4QQbRPnKOivu0LqozQgooGamFEYf3WY5Aqmm0bGy/RwC67IISB0sPzK2SobMFeiQtfKV+p3KxxUNzFUQplIo6ii6uEZcI0KhVX1QmVdlA/XFeS02AwKuXDhOgXYKejk2pBlRKWVUCWU/kqOXhzKvpHf58s29fJBH4CC86SZFxw2CdNec+1qPzKj0L2MJ7LSuQaJGmfWm+RcS1AyOKLNCJYRZLz5YPKwWH+sEvIKjpYnRtYWr3rsEgZ12yJk2hgimoB0IxTr/Trx9ePa4C9p29Vn37wld6yYfUGyarBikHN0CvQse6Lvi9SphC7fjI2Ha49nLJjYeojyLrjCXlGpLkLj1+6pB/JHs7WvKD6GbVsQGPj8lFQrloJFQL8gfxUnWk05l0mB1c+akrV5fPYRG4P10/04YMObhdFYIOkn/8++jdY9HlQEp9N4IhsHvYiwfGtETXSYL4T11PcaJ1j5nuCdPBHFcqAnxJxUoJG6sCdjYT16xzSoXQV1liaKc80lqlwyVCy2EqpRwnk9pnm9nHJWEdMWQd4exZ6/ThGcNfIETGKYX19TjrIrqsBBgVWpkriCvkxvNjSGc7RW3EoKRSuBs/uwXADLNkkFq0WiU5JHcRnhHCjSNwkkzRA0GqB4HOZg/wVJDhS0KVRc+25Wm2HVmsOElAqT+yi7/I4OUZvvmlKvZJ2OU133dREH/0qfjd9N0gqnuRNcnXZgQbODy31pchSifWWcbEkgY7CIkO/IsgOd7LvDshCrCW+8fRJz0AU5OaBgmtT8+KyliFKxI1sUe5f+UYtOshkQdZS30Mr+8ITUAJq//Bhdd6/H7yOtbGyIqZHBa6CeRTHl0wKHlneAlpUobdJLrdcXD9zIX3jdggNTTskAbktNDe3ew/55R3u2Y3cSz5zbv0GdtmQT5/bsJ5HiWZMxOC1arFIk15cSChKL9HINBo0HJMXxUhK1MmoUpYW8JN4K6RZbCEzhhSrjIfqCKwd0clYSZJj23qFVKLAHPOj81hJPlUhL2iOEFj2nDuumDuu3tO7p++xanaJMzvHwfIc+2Qf83NpDtv7K/uij61MkTATvYLIf987zCrfC77WHNRERnt5wWDM6B7rDqb6hTpPWsMxFP4284AaORlpLHcOPqy8uZe59ybz58+Rc4d5B1DoERtW0+95cMQqlDrRQyXgJAnjooMVHjnZ5xlgf8gguoKZmayBabuiPMI96JE+SXKoNR4pimdD/PgIEY8oI8pjxRywe7q2R5TZA6K65fALA6hpTU2rbTNshsrlsBzMiqh4hgPVDU+l4IHxKAOESgPd7L0Cw2rpCqIWySF740H2TNwAy2CkRoLIqJ1Gk4FnMBp3moymg8POcTGCRFZStqVxsXEQi5UYJwByT/Wevj296tnjCsTxLMacDqoRNIjddn+aPTx9Xmp0GivtVsRJpA4ZXXl//b3K0oqhF0aJzifHFDgEkbmkrdrf/H/pkGefNoVsrNKHrN7YsgDJHYMVhmLspNiyTtKrjNsBLjKkQ1040OwMulAPe8BMu8AKhtIW8REruHZMNEwGrDHaC3JK3wXXbjJFGuEYEMlIuhVoRZZEOPhHMFhNgVgzuaZrtyg/sXHhSOMl5SZP7zYYnEZM4D3QVhRBu79PrGW7I9Lj4+v/O1W94NEB0vckK9K3JJfbLlakFEoavMZHj/6+/1A7Pv0lZHhNFVDRBmivs/niQV+QTSVTOK0QW9tZbZi2U9xcV4CkM5KiBGaOs9PZWaSq29ScxXA05Nnwodni8LqcfALq1NA5WyKvjoJ40VYCEFVXOQOclqaSVc3QUxtKijoBco/fnsDhHsoEIMrPNYFyviJOITCys2N5Bz5OCdPY/01Aoa0fhxGQzV3FTtMnDxFRLmav6mnusYeopS01bQ7/jsdDQCutTUCu6ayHaIFvQwK3panyEDklS1rcv3Z0fGT8oGwwuvHgyMY+bBM7L8aBAdvK4y8K5IUswwUSFlW3trUBSy9CvMwXCEzncx+0DnTT/9X+adj0zJhqykDobF3PVKeaMhFaO7cJjpKx+w6wnVaCGZUBrnrMziSBea7K5sCYPIKde6sJ3MxDJrjbA6q6o8jxiKtDhvy1Ebt5wxbljHJ4XV6LKTUopc1klvbbDHA1zFi/eHUC+GzhZ/Wkhq/FEa1MRWaj0qyxEkUQcV7WerlffUAP2QqFEpelp4q4PKaQF4l3hbfDUfFuHFe85pRbiIu1m2RDRDNoMPiLRWOstEVXsPCfBi1/jD5TLMz94HgWj9lY+PBg8bWqjMVgabKQYB/9ZBAm6IB+v1qAKiv4O5K187fB3ybeIEVuy6TlXUpHDWGmINNqVXKsj9bDawI5zok5MRXHrIomC5OVZhTXlIfB7sj1K0txaX8OE/+lPcqUtbMlt+M6OxhdeXKSxm1qpsjWKBESElghWyfLKLdNLslwpsS2JWX17V5XSdq1rKzWBIEDZ5eW1dW/YCw0Lw+rpTC86DI82TZ23yUR+i2bp58AgR2Sg/pfWFgkJCNLS1p8/IW5vCw7iw6gWVFQXp6l22/dyGbBPENOeqwb00elI3ESuOkZS/eMbI5azBFyFGxu4ptPNizQAj2fSrGfhbpoYk9Xaaq5jpp0YBQ03l+AANMDpMkYA7Mg7iONuxzGQuec0aytS0KdAvyiM3zq4vppR5/Nbphjzv2yeIjpHPPc6QYUbKrKIhBq/pQbUObyokwjbwNfpH+n4jhaI80VRc9/ZUx9898Q5t3OE2yxl1XPN+1W/TYgTBn2ydf//QTeOcT1x7qJ0ol5w0VNFwOX5wpX3V9lYc04cdtKwaR+Eu44Etc4mEH77b7b7RexkEfQHWxNAtbZcZ+lu8e6o7sLDDhhvRPBInBQOT0TxFk2Bw8nZsi45VJOJtMBdjKz8SFAVYPF7iLUy8/bnKBa8Yrm4r5I5Z7EuNjuJ97ePCKeUEuoG0nfg6nZONeeb/qZTvYYF/wHjq+0CEmo5KLEbBLGzsEWY1W+t4UtNBhUSJ3ylIGvccYTegiMOzdbkU2xrWkeAguImrjFFyqNLx8VvdMvZccHjCXqkVK8wBSdUSE0uB9sktmd/q/h39TfQpFLgneaGwxKFRl0W4Dvxz/GYK1RY4SNx0gB9tH2PKg+lfebLEcqmfXH4PI8ERJ+ROR6+GZ4gE+0WNBpfm7pydBiw9ufPFMfRWOo8F6eqI+tNylNsliZBJvsPiIwnMvSDbtfGBUVVgkfNxuUM0pcOFw3G5sZRlCYWT1GXHqJCjgnQQLG0u6LzWr4IapwJ+4b0IMzlvdpYQEvVBoS3rmOCFY6T5XvlXA0jkK6pdbYpyILi5E5ycWW8hxTUQkyLw62tre26mt2MFnjNHIbWYkwtoyKR7tm0C5fIDDBBJjTBtzXPga2h9QOXrIQo50b+2y0rb0CokoPH4Bb4uZtMJsZ3kU5R62rV9BEcctmvmvubeTVROI6qWbxvYJCCdrVI2Bwxi9iyfWm+M7qt8coE0I/oTn6OzkEEH0BU/A0htO07eji7IPck07W5qhbZc4WlRM/qo7VYPN9QyP1vAvEpCMcO47domzJJr+pNZyivz27PUB+tySyWJlJZWqPbb8IQ2C7vJetZLWHvHu3cMpKkov5VqLsuKRAEtjq/KIEG8UhnxksQtlo6KYSwswuN2uiCZlUBKgemNWKG/2GeU41UzOj/ehNwGOjGz2jwBBM/y30N9pXBCpegHV6lOLl4vYW/1G5kLtW68gl4q3iGr0YABugkUqYpYQ2BC3GMONkXnjcZjieKPNdZEKIPqiAl62HEyBxIdDVO3AAfrwFBdxqFMmBHiTkMEkkcQ8T56oqTrNl4RbVXHYQWNmJtu4Fh+gmxkdEY4Xj7w0jOEDhUS+oJbK9eMNRnzuiNNaT5Yfzg/DZq9keTuPNPjxRuOBCJwWNqfCtVinXsJnD3r0tg8AH9HGiMfHOX5m/rlLmqWhMFe2Kb6MXHuwLIXGYq0MeHWnK3sCd3rc3MB52OnqOsCeOfOCULdVghBKG6j4SBH9PsFuI7YoeG6OHNkuV4RhhE8PThG62/VHOU9zgIWpWjNfMlldotle30bnX1FDGqgTxqriftEia78v+xTRwXzW5V9ePuKW/s/lqa39HSzBkeO0mcEMboCBBb3SvyZSdejXFlAMYjsNWohyVEvn27Q3rIF2orsR6kGRCFVkK5AVFFhOSNFhiHaoN0hZaDzrrkblFyCw0Hk2DvT0x3c32aoMNTvXnUMrviG1PH4RJqzz+W9WdRkXkMw3xaElCVQjZoZhcrxxiQyfPMk/EET1YMVEGAuoi3/FTV8AtzIbikfsT7haojAYBPoYujYyTIWx12AjahTyjweqHdoFJCcgQ+7htMMkfPnapMw7EK4Qcpf2r/tksxj/ucBDPEO60xU+QdGD2sPrqQ9bw4O+VjIag1qkAv1xihqG1achJCNjjHwaLGooKw4bWGuDzjmuP+pBUAkyTOsc6fmy8y+BkeHeEKqI3rpfwEHoLPSB0AwWLL1aLYZVBwVAM1Iyluh8GhhnDqSENdOC6ZCMQZJj8txY0RgMunO87kD1QqpaAeBCLsEu+4iiDMKbONgbB087mZgQlijtZhImodDHASVB+DKU1bkgUl7QNOeRFk81WPg+lG5VxlKNBm0pXZpXG0qioh/chXSD95lbXprNF8a1u+5k3EQkez8aT+K82WZwxthiSx+NMv/xiNOJZv80uZI21m3O9Ij0QA0QBCk0muMZ151y4AaJ5Ht/Zf/7AZm/EwCOJOeF7YDekO3bdaQEdAspItIBHv+AhUqk6yckRrg5d8ZGq1SH0V9/JBp1AtBE5giABUFuEi6B3Vz+DLwUKcvqYgqe4HHoalH0tOWSfBedrA/i+bslJvZzoHaX86gSW14kROn8F9hOVnVMFKgK1g7//uhSUe1nke+sFE0i1DNkH5Y3JTksZOL2gdvDjzKCAtdDpwHOiyQBDcOqAuM1RO/X7w7NeECP66wwJT6gFAmUCgbPcggAvzcSzgPD/vPl4uRi67HnRE7j/ADc3pHy9Y+cn3V07j2/7oVnfBP8gEpIlW6tWWkbzCyxjHRWirQIyWLK9fsd3shOqOHZipXgsQrmgzAksAwlsyLZdWMj7oHIvC3KAhMFYGZCmjs5c287aCYr4n28WPx7LJVrAUnQVPzXUMNxLs0c9nRL4dQuIa3sdDxP+b1Vd/LFSzAo2NCYeZbbjN7FwLO7gltB8u5lL3yxbloG148lC0gIonQ5b8VgPND/+SqgeqKwDH3Ns8OP8oCdBpYIoOXA6cGzLfqQZRpr3yybBvPrZPnA6dw8IFoHgPdLdYHGXbBdiXgPmd5ptAYu7wewjY0NoeH1YeEF4GPDBni/S3sdcijX+6y1nsnN9w3T6hSP9iraD/0m/QO55KsYGeZ7sEKHrFR9EcDVMqlaIysRqpVSiUYpLxRoFpSDzFb2I/jLzcWRhJJCsuYCxcb4pCWmdVs6Duei6RowFg7IS08Um2jmsM6a0odGMHiQ1o2OSJ3akqHQGlAJNQr+kvzQll6MLDqnQpyqzIvjg09Sjjn1QuefDBiw2nUbxofu4+WEz6nDz3hboFn37MlOj3NEGuoFijV055Aaqm+UinjQFEkBPCpKLpEJVkamvccRiq5dLGi5emZ8gXl8rVQH9mnqfJJ96RtB7aMP+ZVyXtOYa1mDpmMub3iRwG/qaLsKgT9g1GLO61maURFPGBMljj87bDTGCfzx93fYn7VabTO0dpszV9scwmIto8APbL28qa6zqKzFGQ8jqsoZiD6Hn2NCRdYzjLacydwlkGQf4BrZAW5XLUiiUwL47Vi0ULyjDrcLBH5Hwj7BPmrcKegGt8lTR0sC/zDnm3PocwAL9xN5Cwc61/XezlKB9Z4JJEK+L1uZATE1+YSolrdCiTUjjMHVxOqPaAW2RJY2SWlSoyQqDkxhqr1PnFeRonoRFTIIG9+PYYnZbgyOODoNVMzSxGj4LOF3343vLdOnbxo7ftJmSgxwFx3/9ark0HDZcgxsh/vw7giyYG8n+kCtfcbA/MYbf2cfco5pYwh0EXf6cljbmZtXEL0wMCG6v2Stfs4et6dcMTK6NXwsUt9kYS4G9Gz9lu/jRCj5kXMvQX9s3GjJ2UXY/VwLlM1/PhL658/WdkDcz38wgv3xsX32Y/fouODr5Z4NyUs6XZ27aTeeHfuVoXbjgDx87GaaQfQRw1v1Heu2ILA0zVPGrPnK7cWJ3/Ov46IHiK0NH7PY63pBMOGqWxDB0D+DaI4BrzwCuvv+8XPt+Mz8g60fHfGLg8r6lofxs/FIQgOz40nf9/v3rSNZvHjq+B9i+ZezrzSdozbY0Y5wBLIcEEOAPKAwvvV2kxkoIui3PlCHwRVw6+cQXgP+JohHXGh6NRh+uyN38x2Bn442vny58XmPf/QT7UWCGaX0vJg8gej1VkjkXLaAh/OuBWqr4egrPZY4V49RDsNfYfhdcf9wLIj/a9LzgOcKFtxWh2Yw1E7Q3WBSAZzVr6sTaIGtIpPksgnGUwl42UolIA/BHFy20OPZ9hqp6juM8Qg1+tTPZdAP3RDDmARt+dqj1F5v/L+1ReysLwNFl0OYPrEZKqh1WuNxKl1g6rSV8SzfKoQ2KcmTQNoK2VKwQ9GfZvzL5VWQKURtEntdIwwk1i0h5h5jzaDHwFsBuOtdfNO7sl3Xp35JKEc/2wKo5zJ+lXAG1Vz9SOq0XJZZHilkdYDqg9ppTxG1gWCCkGBAbr1rFN9gmHfyp7+HyrrizpYq+QhxY2nWomYHFWwVzY4ItBRDlh+uCnJplGGKn2Z988A+Gdn/6HhZIgQRMCDuhXxOh4q3azY1I0XqFnUSYtfQ+oHWUt4WqMPHvnLhr9RfUaDQtQT3P4KhCY5U6DcDRkGl/xpkJ8odE5Cbyo7aJt0JsML9Apa1wWTby+BWLwFTsRGcpnbzXBDDQOp3Y0jWwYADi3KMA1pY/XlIsDul/jFnArw3Tx5u9sbL/M0BPoyhNrg00tVP5JFgAfYhhkEIKEcdAlRpn4o0MrMoYI4VAhu8E1N8blnci4dFx7HMtCtzW7sgxzby5gRSFVrEQ+5BxHWHYcuWTRaU4t75Pe5S7eZ3pn3dqq5YnhSp30AH3YS/chAbY+qEf9wFCr2GXQdcSISklI+Uwl18BmR5/h7cG+rloRTS8x/2inR/t50j5XkCU+C0TvNiCHBM+n5swmrlSISjZHMvkUzthucp7lApNf9iw41lvQfm0fsZYG0SeY8iS3kUYObNKmgNZIfLKlbu/dweuS28rr4J7c7hbwq991vgNAsizjKwBFBCINlXbLeUTMHmq1jc9MK7pZeWJPlDjqi9gcpq+hH2uZ0uzzMP6Moy8xEIED/QV3LtBX8m37/VVPIZGX402zuprLC7574Ov5bZ0HgpisQLwMKB1BJzPdCQ7d3SUaM90NFyO0jGogZgVmdv+cp3+91YvHjdSr76W6ubXunT3fei6/LlCPdqnV74e6fPSNieURmAwpYqDLFu0ZN1Py4ZsmX++CFbLMFQNIYJGDjmn+NtZI5gfPyL6OGLG7QnLDeRshiyLikGYd+gLofPTK0rifyOGqGiVLWHUhG8IZELJfiK6doACJdhxCHDvcIA+xZC3ilCuzAbAknlii/j+d2DEuYEdE14jEcj+n8afZMkTKAOWDltaXNzB5HywU5BU8bPknEqR/MqkpsUoYHz8BITUaVFTkslSmIwzoBgl5h5qVHYTJWK8qilF41VVydNDgPpx9IEHfGUhImV+UsJ9MoByN8DcARDJ9eGswy7jwTQ964fUNSFoyPrIPKJWf7ILEL3JJcvRpTK1tz8QFoGiPvVSFQVk03sFiMAMp9ScA13mrjasbQt9nDWEa3cqYpil2xUSvDdKzlgyB8UiwmAMawDt7GTNM+MLyY+WBWXeyhzwSDGYOf2ehY9kAYhKWP15HVdsMkHBW3uyrc2yv37F8XTFsspSwxJWRbI6qmB6+pkUKCIA01ytRutc7XoR9ktJuqUJyQRDYGrILQyIyEsVec6IK1E44rWQlYXgCvhicwShqH9yePIQVUHFJcHIEMHv7Ij5Z6JppYUaIezQuJ7asN5tBx8Ayz+GIKUqMnZNKvRlPAUySNWmNQ98jkQPomlV/trBhVq+edLiu8jBNvp/AvC27ZdnXdB2vqJzrMKQUl/Hq5ic+y0/Z1ESSiGTD0WW3C18LiUv0W1erm3l3x6S/WmK7GJtxUyosKRSIRXu6EtgUdmx7SzEFpm0266I8lqBSFpfH9HOBfbtUXA+j2H6b+08CwhkCpUH3L8IgrJHj17njVvQZ71+2xy0N6a1nug24r0l66x21Q/e2e6Q3y37w25H3XTdMbnMBuW5Ld8Nt9x3x133/KzArAceOq7QW0Mem/OlIr96bY0SxUpZlCm3U4UqlarVqFOrXoNfNGrWpEWbVufsetmuuuKa63RD001yyCWPfAowXqeIYkrwSimbJyqWq/Vmu9sfjqczhr+95qa9cfPWkn2oVGv1RrPlt/N2p9vrD4aj8WQ6my/8oizPc/DccfzkaQ5z/Sekvj54tLO7t39weOQfLlXn/iQZv3qdy13z7v2HvO7O9/wlnUxno9+/0nRVdpp7qcdfV66rja+1VFTVNJU0fnfAV299bGm7/mz7dXBSRt6EVVk5a25YdlfEunkLZrv89fc//xoIkDP17uvog/eMr3xe+CTgqVdem+pr0dL3/x/JW9uY6qQI/xjO6bLq/L0fJulIVheyYdJ0EkdJtQePgEaGx1GemqbafONU96R6H2g1ii5z00Orc5KNwukbHXDTqI7TlOnxbG1uDFhgoTNumTx9puXLnDMqq3MjnsiQzg2WZ8bz9XL3QqLcMudidTnmXbz7BnKUWy53L1nkVEuNy4QXo5KHA7u6y3KwzihhIzIsjYss3jI4ze5Tw5HGpm7EPmd6itdRKJeX0TXNTXKI6BSvizJY5OHQxFKjm41iCFlBnzRdD+oPqtN9rR6lgVkZlR5o6o/yB9U2lLxsfceb+OqkgrGotBk0HmTSY81UMCHQ7HJ3AlCOLVvk1t5Z3XVsuW0FBLfoDHZIKl3j0nHaZ+KMT8ea98zYA1jP9KtT/dioQX6U4tQU3hFyr+PtIfc2J1RwZ572tsy5y5g5b4MmCXs0iOQ6Zt3EoF+XN2HbxJUJrqtKayJHuy5e89bat7avszqvRqMxu51UcPsUD03HLwg9DVPX8X2MtU8co+xKRfc/V7YcL5ubgsmS64Oqt8OpTdoVkmX5hev6vtq+v47XSsdkb7L5TImdYtt2LCQIih8UBw==) format('woff2'); + font-weight: 400; + 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: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Supreme"; + src: url(data:font/woff2;base64,d09GMgABAAAAAElgAA8AAAAAzCQAAEj/AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGjgb4h4chToGYACHRhEICoHxbIG4VQuGCgABNgIkA4wOBCAFkGoHj1Ybdqs30JtdnARqJwTpnaraOCMRwsYJHoZ5ayTCZpBWIcj+//8zksqxfdX+A0UFWVeEE49MBAKBKBXN9Oxo1tGhoSFMc6OXDNOVjokhPDURdykoqzCPFSSSprhO2LzbgneEuadZl/mcfbvRFzfKEAKLbFchLTJIBJz4TZXonSzI+IvxU4lKVFzHK3H8WmpE15kP852siM3qNEWnaBPVdlJHqX9W9Imk/3Vv8hgd2OJNF3mFhWHqQEvrB16qxnRCHFCFZP7y7OVZUU7vXKdUXtkQfU9fBMYtfNScevnnY7/nt/a574tpFJsuimhoYkk0FE1UGiVBJ0QSSayRSJbsDsHcuhVs9MjRY8CI3ohRsipqAxYwasWo2kaNGoLy0orov1GINmKBnWA0xvtGon6qP/23WT1I6G4e1g9PCGPYmLF0GBjjiIxYwhE6ZMW/zi3WOdHYiGHy09ElCSMQ8aIojqKI6Nf9Z+/6nOV3S3agWy84M0GiB7JkWK03aycOsS9S5SZtbgMLDAMhGLYkBz7inej/457ds28KAJrAkwT8D87LebwMn1z7fDNnLOUAuMAU/Jul8P2mbCSBQiFbzUp1vrnX9N0wfOVwOQgf9zNA9YESFgUWupXTEtWkObTwUpAHsAH60K4B/gkCqpuehhQpXTTi2DrM7f9/3N60/GWusWJ71XUrvZGcDBP74EEQQfSaNGcpl39WbkbO+CKnAwhpLJtk4RDAqAIr3T65z48JOy1T7SGMQGKLOSITq9jOldY+3wMBDrfO+/a/5h84ogC1dBRcrB24z5U0ZarZ3uqAIT6TTpSd6Ug5xRb80HqGdu6dK5e4Xewd7vaOAA9gAqgnSCiQAhUIhaHS/C32oN87QGMcCWAExf+vQoh8fpAySUc5hNjZVchVzKVLu8p1H6vYuuvdVi5deszz3+/tm31rJrsRkiPbzRWSwpof0p5HSs2Xow65QXXhUpKeV6NSUL9GkRRCOBTeICTEvzugTxAcELy15gklmktAYUzBp/I6vXMX7M+ptSBdkbHit71V/Uz3PUcyl3NJkCCFiEjhFiISJHv+7bKcIQEqDl0qhv+2nUwy1Q4Hd5g0tNv5xAM0YQs0QQIB5tc2W9159SLKBg/2WlRMwtqveQTwzS3fNYBvX+hGAPDzkezNAALYC7gxgIEA0TyIlrWCaqsFJEOtoLXVAQIOGECAnVKWM9jDx05dgv1vlxWw/yy2CB4cYA0Ctyn3D/rs86cI2HyU02fFtmlvvO5bIAHj3uCg//1AmZ3/DjjnvgRwwO89GzjUCurWs41q07+5ufkbEwHh76Rk6a375cUmfDCA6hz3x1esvaEjF0Wgs4GdHOM46DwKemREbtSyMzbPmXk1S3MwV9f+miv8kLaOdiDZTVSuXk3ovBqKlth+6JC1az3h89YdGPv/h+tEOm06YZw8TO9PaeQi+ogRRL/fecfOl5Olt/B+rdG0emuBMOLvG42wyhfsOFFzERv3axnPj2i4kDz0E9ILNfMrHBQd1xxTGsdVro75CQ/rB129yHVpZOg22ufqU2NcVmY3aOQLqw3mzM7KUk+w1+3z6O45d7iEFHaJ9cltDR6QkWyvXj/m/z//t0EvBMT6HgR1a6rzUCRoYkxfsPWk6gVQE5eygqpMBUWIJkSb498U2dRhmjzaNKaGTkW75BLzb2OpiuqJ2uqsfXYlhb3znHD1CA34GtOt3CZNg4t7bMHlgaMfrxXkpdWG8KEaPQ31ok+/AYP1tLpnnnux/LLzXuPzwfktICgkLFJRhJi4hGSz+IZlJKMYMz6mKE3ATZqSrjcI7yoDN212e66heYSFtGjJshWrncOXpwoIRSVl69moexPflmzbsWtv2v9UABOHsxGBEZGg0BgsOO5XjcOPJxBJZEof4nZsp9tn1VPhadAZTBabw+Xxbx+kFIJFnS9GlGR31awvw+VR1VL8PuA26ZlmJnMLy6z6Wa/lqfNbP+OD5GUUzVNHaWrTtojqLmtP2ZzEOOEJDfIILU9QNkfVrKrW2/1WTcmCvtfT8m7119GNeKtjWvUkSyqGT96IomXqMppMNeWhrGVFv8W8CrKOU6ikARHILChEWlCmbrmryqrt8wLCEqEmWzkP118mmszMCLKadZ/E+6xCXeprhysd7HjAsBkEazJWXi9JE7SxK1p2qSpWm/NZYJMg5HtOLf04iVat8t35rrqKv7HOV5ekFRSpNPEF1NDn1z5fuU96sSFudF7RxSES9VuoeU1ffxM4dYbqAhqEL/LKwHKwEl7V25rU5rwbnuaUvZMqdydzyhrChHB7ooxlOUtpwsTtJ7g4QfWQBqTGrFtUbv9/1QRxIbkJtVDywLTi8Zb4EOY1FR/IDwqAgqAQKAyKgKKQGCQOSUCSEJbMMGQEMgoZg4xDUvgmYCZhpmDSMBnQNGgWNA9ZhCxDViE5pDxSAVKElCBlyDpkE7IN2YXsQwNY1QgMjcLQGAwNQuMIEwiTCFMIO6TcMeVOKafC0mGZsGxYLiwfVohXF1Yf1hBWStgHyk3xmuO1xOuJas9UMOIt09VHNcuagq4RQAgJRRjLUGXsGRxNYep6mVGUUZLRKqNM83LNK2CVQODBagBCzo/TCSAPhkqwRtmyp6bXq1KPzUXn1u9FOmLZACcJciT7CFUhbUMNpllOeTzbI5eSzMsUGUfHOcPqb9OARrc1cZ3dXaalnKcYneCtqi3mwwb+VEO7dejUpXtkOqwnqVeffgMGyxfmFxAUEhapaFJMXELSsBGjxoyPqRITxSZNSdebmHfb72vIhGXTtBmzPZc0jwWLlixbsSonr6CopGzdhk1btu3YtWd/POhROJIRSBQagwWLK0sgUeqwvGOnpRanM9lc/hjH6jaob5h0xYd5Xcec3tFyQbWScVUfq4dGe3LOa7gNxN0JPI7WMc15EsPytzRWQVeObuthleIR785/BUb1lbUFdH0GZK+hWqS9Zgg423WWJFvM1XKOfvCngPaAjoDOgK6A7gCmX70PyAbMBBx0vf1kfDIxmZysU16vvEF5o2SZw8sdLoYPT6zqdUHsDu3TnvcalzWOjeGhClmTpXJ3ugKTSgguZyqQ99qKLFzsN7y9K1+6wIHFsz8NoFQnOI7sG9Qqad8ZUpiiTnk8W9mlKPNMebrdVc721VfSENCYuV33wxKPIk23ac5yBXz38dy1efJ9GPXbUn9K0S4dOnXpHpn+0hPVq0+/AYPjkxK+9vkFBIWERSpaSUxcQjLsrIZKDBsxaizjjKnWTOSbNCXd71Nk+smmaTNmey5qnixg0ZJlK1Y7F5B3FSopKilbz4Zqs7KtbMuOXXv2Tw600kuU9NrbbRzRCFSKBIXGYMFs1dmRveJqJ5AopeanM9lcfnWj9Q2Tdg5L4jYVZCsdWdW36qHRPst537sqVcnRC0z3salSNX3VttsUdMouMS9boupDGoo0Zt0u1BTXbbuLtSze3hNBB7Smaquu56A3faHfgMExGhILiUtIFltsOCNhNGMY74mISZuSrjfVveu5oPkqC7JoybIVq50rklcVQopKytazUfdmoS3ZtmPX3rS/19o2whGMAIlCY7DguB+NK44nEElkSh+mdmynpUbSmWwuP+G84+qN+lIfTM2zxPpJMqJyokqcGhx8sHatEHH01507vJmY/vYkHdtmqe+3S6xdXUyPOWWXmB/fkoLqf9Y+utIye/c4g+qtQaNb27fVuaddk7i40wIPWitvt3H7kO5pUy/69BswOL7sntdBPn4BQSHhOSIGEARBEARBENxByoRJU9L1htu7ZMK02Z5r03xasGjJshWrlQvKKygqKVsfN9q0qc6WbTt27dnvb7UPROFoMyIkKDQGC9Z+ShyeQCSRKXUY7Ngplc5kc/kVtFw4Rt0r5l6S7m36NuxRSik+9Eftm3RNM0tzC8usVmrNvafp+angoCq6qvRwjiia8Q9IAIkFBm2kYPbWRaepYjhtQIrChn83w+EtZsUDYYwgLgEjkcPEDiHbgRqSBugI6MlcV+UGIUeNUSiqcAdPsePxEyrRCjFxCUmsYSNGjRkfUxHzFRYtW5WTV1BUUp7WXw/U5N0MJQwoky8Xjq50YVU71UOj/bXzAG5lWQ0DhO6Ar6JqrD7roFCsq29oam5pfeTh7ji4hHiSrow+zMjn2VoB1OedFr8ozqggzltM9i6i05C3rv84yejz5acr3FPtW1/Zx5swcO0U2aN4ha6o9jw48f1B8CBmzz/BqoSIk/hWejzX1brhwt2T3CnzibPYxgFkq4M5P+U4AQGyRagRaSt0iV07c9U/dkO+xjxoOkL+GvNV8VtAUEhYpKKNxMQlJEc2z3AjI0aNGR9TaTK5ps1mHouWrXYuX54qNFJUUrZem4W27R40j00WgUZRYMDiwgkkirQyuuXbpaOrWqxJ7el5KwyrmDkD3VSE5XFSWQGUuQtbDi4myPuJV0DV6EroI5xBVBpVn0rbNHhK+er4LSAoJCxS0VQxcQnJka1hONWIUWPGa6LUpCnpyoRMm808FrOM1cqlyVchVVFJ2Xpt1rdtd9r/VADpEbwWBQYsLiOBRCm1NJ3J5vJvpH3nlUa7PFdSrtkvqpcYQ8RHGTZz+3JGYieTXeSHTp91hEtRlyYNhzqGQ1mKi6rE+nFrdXXVJThdV3k9v9MNl5gecsouMa8t6Us9qba9xaUpV9pm77Ee0kv6rN+AwXranmeee5GXPXMWLFmxYSs7THtXw5FobO2nxxPJddZeGoPF4Y1B20U9LsmITG4zk8VvseqxNmQqlEWayVDEGVOf0FCqMXMbTXFF3PNTT6gjyJ96abcOnbp0nzJN9SnxwS8gKCQsUtGEmLiE5Mz2zQRBEAQMQdAq8r5IJtk0bcZs5rtZDMtWK1cqX4WEopKydZu27U77VyNQGLC4WAKJUmooncnm8r9klY5xcsJBKhyk3jAr9Vt92OQ4a+JsbVQ7bG2x13O1Pkev/KlEe+jQqUt3M0142cn7kazMjAe1i+qVVKd+PYOsbo8295aLskpoVR+qQ6PFsOvO2mHDLaBJMCxKwtsrJydGBU/RVlutItsfxSMikWiOtjYsvrK8nUG8sLBp2+5L+9sWKAzYalG6mWwuv7qR+oaVsS3fy8n1DegBbOymowSbrq9kzS/O8TULgLjm8+4nH18vfgsICgmLfIsi/3HU23amzLTM/ouETRDEzxU96DFzuxCuvXKt+s43KuwXIQ0BCFXiafwWPoMoIkYQRLzHGoqiKIqiCIIgCIYgCIKsXZl+pm0281i0nFUqVyyfAopKKWPdpm270/7VCBQGxBFIs8IAolatw/+8DlPh+ZJIP7F+On9whh3lF6x+y+ZL171wA6NOmzva3PWl+9rQjvEy+sTfMaSeoLDsUuQD2O/2yM0KQ4AkBAioSKA4cZHjv0QIEsdxHEdxHMd/jIsPx/Hv81LFcRz/cY5tgMwIxKOMASsjLnfZH1QyrPEi15m7pEOsNQcrVCz2iapTaFAr33dOS85JEaYko+JvB7WPVZWq5qIJqXGX1hFGpBNIJ5HOIJxDOo90GekDJKo2K4KNBE3HW4ih8cRNr5BYNim1A1gzCQU+dbHqOA2CViXKGVaX2WjR5bzlmC57koENSNUOIIRAgaxwdBpvTUyPsClSrQYQwem65lGowl8gIfzPHuI6B4MDJAhwkZR41LSE9E6ROuO8aiiHRmSf0AT6giXID3yhxtIQzIlFKuSKc0klyY0iFOXKUdWoQVOnHl2jRkxtfsEyaFCGYaMyjdlBaq+9yu1zUIXDDqt1zE115jzWY968YQp8ZkefF/b0++qrFf70p1F/+9+ioBAYWJcZBG9D/vk7XmCBThRcsJOFFupU4YU7HSGKM6WV51by5H5PmdLLiirxR6211qT6H+79ohKI/8g/dI4AAGLjYxoumgC/TphsIYB17wUmlflYCiISKFp8YvgoXENBJAMOxpeeji1eQozycICl0OwXmoAFcWeG5eTMAp7LnjeqLP5ayOProj4YG3qFASiTyGjOi2gEA3A4XW7MgyTQ4g9cjIrhpU443ezu1NnJfPenVgHMx/EAcHY7AwA7AMC+j2gRKwmC4miojy4zd2GFgyF7wlRjoyPKhTLj5fGhOkBYTskDQM4OzK1yNFLccbeYGeOzZK6+jaTC3BvwSzeZsyoX+HEYvzoFkAMo9s1WJvZDR9OMEUAtuOsQiA9MA9yBEcCA5xOu8uEfGUH+QdECOHzCr0PbW3OTZOpVTR8WEiC+hb2NP96UG4zkgM7Ku7mN3d0LQHVyzE9dZW6WFAXULK47TO0TDg0ocSis2XyY2Jdt7RPg3D5P7u35Xe0DfiQCnJ7YBwB8zEhEstI6ewb4Zm8BUABaQxz0bI/P+sfrsZF9tOlNF3HYJPfkQpc8k3tFYlzmiy45tmCUbODlV8pJJoAooLcZAAQUa8ZNi1NsfmlNSfc+cI7BkG+ZfBjUHyFxNtzz2tGfQxQnBrcSIWO01s9ECnqPegI1vR5IEe/D9AAZwD1ObeE4livL29g2ov16oCN+sDEK508c54NISR0EoMkf/aurBttAIVsn09rqD87G4vDtjP6euxJwmQDek3dIVYd8TldTuYl1J5ezBmfJ4y4zd62WSQF3qWBevG30amq2Dwikv7JAAAr+8jGCDYABKOI2UKO49IP1hjJoLAdIlLrh2Jw7cC+yxzkne2P27DvMGjh+AE66SeW0aoBzZVqABooRuEFGKCzx07al5d3AerWf29K+ULRIjSdTJEn4F7PTUafhmgnx3WNyyH2fAXz9mtl1gLcvAT5c3ABo0xIAoDM4CjgCwBRwb8bc2unHRlMbcejTkkdCu+Nk1roTCwaHY8t9sdL0Rf5YqQCX5K0UvrZPno+WvLY6LjoG6IL/WQ8RBggA1ZIEIEDkBCUoiIOY7PG8VkFg9jCoyIBCNs2L4kaPgLCU8TlAFe8ODzNCDECJXAHAryQG3uJFAwH0hRWOzY5tHxJoEs1nBuZkxD4MxWO2VCRlwqvWdknQ/oAZyEmr9kG+OSH6zBULxkXEhJuzUlGodh8gDSqFrta25SVF+VcCitYzXTiMjOwbSsGlkhoeYQxWgICosnavs66GAB4kt5+QLRsicbSkxQFyJCYmVQwyFxAUZWS/5cGXo1YmfM9AgwL8Hq0evRwapAE3azEMzhgGYQHu1F7JPSFz8tJexQs6368uxy0GQINlhLfY60OCqhmiz9wzCyZFJIRp2SvUUnMASQiZrla25UUF+VeqwtW0bFTTEe7wgQcRIHCuFtTkVJu83hMGDIwETZ4wYm4pavOECTsnSZfVc27u8v0/KXb+oDLyoOaJ6RvevWv79KWD1Xt++a/f54spe3H6S155ifJRkn1HGjt88YzIxEZsRSNa0YHr7lDQID4Un4svxJfiK/B6JIE3jRA/id/E7+QHPt00DgDMDDv4xwhxqmGfASleCAQTphblnyXEoWJri3Dm52Kwkx9+6ciXyzpi6b9oPgA23uw6FHveXHiNQ68bnHjHixbnPlie/soHyQbcAgABIMJFpAgRoSJCNIWt79D2eo2YsWKXI864cgJcAIxa7e8yRr0SpTyRzuj42qnWTAQwrdMXP4ylgHKZWUUaV7f6NC0qKXKU2kGYsZ/DHOc0TG65h80rOigrcBeYgGy3f9zGZogAm4GCsB9mmCuUmcjBmbGdy3BrGSw1jD6GHTGYmiMC7DYblAkrrQ7+1jcdAsphToOBcBmE7YAAW0FA+Y4RELjbuGsmTqiDRDLK1vQs0cm3bGJMSCxypkEYgkxiTwQZVcCi6aDSMoBKHiS5g8MnfGYggPlsxICn9aX3AkI440v4ENi238/kk98jZ7GW5T9jz/3voG8uzHngc4D+mGHA+fUHOX3M6mswtJwevLXLXxt5iC7sV3fL9hUTu5YGx3Vi5tw8WvDL8LJ1mVkGfdzD6PEFa491wXpgcVg8Nhwbh6VjK7G12O3YQ152XjgvvFcoDoozwVnjbHEOOBecBy4Ix8bl45S+F//+P4MEQAZgwVqwHxIL4UMGoRhoDPQs9G6A6Vo9FrB2WAzWDYvdnbrYtmhRAfqP6Pj//zHL9L53pYtn1BbNP8t++v44+GPjj8Effc+uP1M8ZTylPqU8JT9NfBr5NPip9/zf89/mj87vnZfM8+bZ85Qn5U9KnsifFD7Jf5LzRPIk+UnEE5cnTg8mkQb7bG0hxhb8EEwsQt1T6GkxQDjq0VdJSFhEVExcQlJKWqaQP2GUlFVU1dQ1NLW0dXT19LtUKo3OYLLYHC6PLxCKxBIdXT19A8P28oam3qOgoqFjYGJh4+Di4UuW0nZS6QQnkKmKjk0SUjHn/+/y5CtQCPDPYj2WGjLqNxust9Fmm2yx1TYTttthl51222PSlH32O+iAGdOOOFp+NZRUiitMZ50qpZWlVVJD3cbSVlujpooAsWpUS6WrTFPJjTusjUJF9RLpVVWuOXly7YxWZANNTEIml1R2h2ruRAm1YkoqBq0K0pcjj6JOvTr8Yok+/QYsM2J5LQ1b7VerfIFwqo6BiVVDXGxcowNZAyCfAsx2QH+j+wurHQDgQwxEp5ddOIbwqoFGjWv4GahuDCYRT6dS8BLtT0FBRICbxIHu7wcsK5BqG8DqZoImTVY0vewmVl5OwEbFYFOhYh7hwJpoR/ysi8kCp7HTBhBgbUwu4k6ngoPjZ3oomE7b6OSYgqAzqIDmoKjcSfDbb7YoOr9vkFtsHAdR8T0DARe8cYTHYQXSaah4GZfcXti09ew9ex7eBvIKAnyo37JMp6pd1fXIkT6H3L3+Z5X6rCyMl0EVlJfhtbZYfzbY2A/vgsOUj3p6ixbxbPSYRdMjPDTh9uzmG/DvTt9THauTs5QV7X3j/AhNnZ4kYRPvpMtIeUCZfgQKIyYxbs2p4R18S9MlpNcpCQkZQ3A/ChSGphiGdzMsW5qLdBlbU3+w1hAojJhEzMNjX5b6BhslMCah+Gt1y9GRQgoJUkgVx9ZCR2cPXRpbC61F2LhWi1gcaJ++G3as3Llql54BVRsiYw04NprbqVGu1g+fSefW+hEPt0fWqEdqfBQhPU33geM9JHin2n5w1Vl/t5YSnEn3YAQzfE5pF4q5yJUDQlf0oNjhsc83d9NwL+0Hl/qak96KcDoieEwz8GwDNH/8wOtSYgQLRruMZXQs6LZY91g8bqR9aD/4/DVje7zKJlUICLDx0bOA1NZOmjxWBQLTMVIPZUqHc6Gi4Zjjo7jrhzO0TweJ81HZ9OXFuUQ57k9nw1QcqFtGa23wq2Mmpe90lY46/jNm7q+5LXQ+LDbBeOym8ShGY8kIhD4yOH6QMCTpOOTjWB4HpHrzt2pAmGteNcPJFEajj+s8x6hrkCFTtHqWYghHHlNZBt/yr/FOYjZJBoRui5u/iT8Fws84+eIZ//ebI78fPF6nFGZkfKpc7e07fVTtMZxK9XK47a7uMTJKeriUPNNJwncWsdpuJZYPiKIcPzZ+pDmzQkndhpbaaKM0S6OkepuAkJCRgRX5XHdQqHprfLydYdnmD34f52jn98Zo6MUpEGacdBGjvMYFKkpkNJ2iF0+fS92SDUspIEjr1ByY28FolgjbBSJ0yLBv5ac3ztrrJbg2BxtsscM2egCjYVuAA4dRgDANmPIExrAc4izT04oIM/M6uUw1BwVUFbURPiYJ5c9QHBgPgQRnmXTjaZJLnxVk1lKO2pdK/WmwughlcfZLPNoavMsWlABDrdxqU83FOswJGg4KS3cavOw9gEb/+MatAIRR95mpM7b0iFoHdZ7xY5Zq+F5Khw5TfP2ndDaNYc8UV53BMuzvkc+2/dgSpChOGf9dfuK6VCedc04xL0fj8TPls8+O146kGle053KxwSMpVQl+colq7hl0tMm8wse4InromDGcpmQYR7AQQ7Vi+4d/LGo4Fr1X8LFgWwRiA0IBYSpsuBhb2MgFNgumO4fQZqt2y3LhSQDcp8Hui0MC6h7sFCWfC2S74uUCVV96jP9+QR7aJ9XRf35GvbKkQRaVU/OaBLrZV0nHF/chOUW04mqgH/nfkET9cKkskfeZaynmxBRLcLh5m79PBSoSHt+qPqoJqu80gqpcqfHx1fIZft5/WXgu+R4rw25JkO3VK+kyisbsYJ4AdTQDFRhepY84IOSi1hrwoRg1cOfUWJHAAlALE1YY4dwxnIClkyoQw1AQawhljiV56MtJvStdqJMlsGY4miibC8qDQ0cdeS6As6g342SIv7lAK3j15xQzXLMNxTQRM1A8DMCKKq6yUtWQPfxvvvT4ViVXUbKjz8ke/a1xjZXtynoRykJ6IjaG0QmhRWR1w7Jkwk0Fqrktx7fIZiiEpqecMYhKxtyK2RQWI5FDVk1HxYGF9QHZTXJIVhkmD5OhuHViCDfd9JD4BJaNCEeO23wzxMzQ8tF61WVtmwaCMKJHoCCBz+A5LkhUoPjAAxKbDYSW5GtW7UCUHo2ba1JyymnK6CtcvyuggdlRwmSsvBp0UG64cvjGLIOc1lXH8jEmTEHdj3wNi04oiPj7XDh5AaYpzil+Fju/TUbCYeqax1dconqaSoAKhkc2ha9CGRuY4x08MnbGktqhGqtdR5iJ77xvxUCrTl15p6jrbyl+Wj5vPkeMHtAvqClOnjLPyc+A8F71s1FGoS6GJfV6g1VnEOhK0CHfZotjzCAeJaCcHrRv+e3rb9ajF+d68RldM6mVH1VKGH8H9i67beA29c1FmVp06ko5ocKeNPUGeg+cg9Htg7fr/r61W0+F8LZ1F7UEENcWv/b/e0FufJLfv/tE/6oLIBMkY+fIFsOEOhsyG7xd6xzVg2LTQ69rNCCV/K3VB76iIo+YgR4bqvso0mbeESnU/a82AhkJ+cZgrloxwz6asR3COt7mpM9KBl84MwlGh+UMgu5xJq3RHgVv0pJkWkeRLba9AmjvOfoX+SQBhiQkNIHzT4/X2Ir0SCyTQzsum35u0GhUoH5j2NFKi5uvV1Y1sC2hvPsKEOV2d7NDwhuCKSJ3aGzLlhWIHLH4yfFTN6pwnMGUX0rUZkUfDqGR9sKb95EWSD6HPkLpyAFa3WWWl7Mjr0pJWWJkfdbMWft+nAqsmGr67rRNYx+tkK7GG9XgJk62iLvaXPFcgSSpdfz4e9b59qXXWr+kfBg3ZK/AOvEfjN8woi5xRMXMclMg8hE9kwt04B+9hg9jdoMlm8ZjRodtWdzDJ1BpYbNQGf1h2Uv5rwMAi7aVjOtkK2bmaAuN2RxbwYHrWj5v9AvKPCdVEOs7yQXVzuDebG/21DWs41ZN5w/0+mlKmS/7odRphlTybHeqnu7KsYA1ZCTgujFiZkltUOz40CYx6zTAOsCWAlOJSX+k7x9agoGwKAQQnOhJh2ezg0aXTL4lh/jAcJIziMtHKXZdTlMFmpfCIDBfFUiJ1ZcFYrDYVFjg+KfRpSS1MCKtPVoU1RCJ+zrWlgoQKkTQPe2SOOuqXBKpvcQhy7emZMGhUyFgfCqIDpN1W/Mi+lCVFY3bsAzwD84HxcyukGxl9ZBe+rb87mejyfoWWO2xK1hmMMQo8zimCBRxHUHEnfacQVQtewBcWZsxs3i7iMwG2wvERpqTQ6DOrRwU7uW6Qfz0lWQ+n/tgQ4MsnVXDs0zs5sGePrVQJR9Sp8to8xmWJ6w56x5uMCtmlt5Olm4fWK3I7n7mR7PFPOTFPlvbQTFAS8etK8tgb3IBl2jOQuFZEgqT4tirAOqkr2vPPaSZtRdu3aoF9uJ5bkDxxV9fvRijU5awTxtT2U95fv4g4pqM1lHhIrD6cUzWPYLLBllkb3KO+NLOvE62T+xhyv1nJ47+37qzWXT0n2B7FQhPUEr8IAinboVLWqS5CJF33hqrYYhjzlzMroVBk1kmX3nmvlCQKBcHRgXpSesThWd9KsgYWtqcwra0ckEG2CKIvEPav7Zno1hpQdodnT6IuOKF/r4814xePgDghHTGdi/g9MnxYTraO7CJPZpKH1hecK8VVBqGCLL9Q7LDuAUWD6wsLoiqowVXOGW20LNP/D+RCj8V5CXLSoZweijbaAtSizDq+BJ2x0Zg6jKjrd42oz06MTwu5HiEMO93CP5fgg74CfDGCfBMJxlZ/KwkOIJDCYIgKDno0tITCMfyHgI6lNhKHTagl9I7sI75tyxO0f5RoBSZWNsTRBZB0P+lNJUdDB+jhUI0e1WbnA/8S5hNziaWrCWtKJS/0jGnv6jlKfquPDMKT7f4iu+KcAINyZs0xwd3w2hnqyLLdFWdw4nRnxtFgaI/JeyPbYnGZsuABAHBicMbCA8rZplrwcGFZS1FRSpdZpaXzVECYQ0SrRDiZ1bmUGRK+s9ETrLbdJ6swmVvJmgd2W1mAbd2bE8nMcgmsSESLTP1Za+xTfEh3k7tgIieE3Gfyx4wDE/YDOunhbIGdUtLVUJ50VrpKsUHaQPFWeY0CtrhRkrXsClgAF2U1s69UN85KmWh/lEsd1sr6SlwBcaUt8RORhwVJk+z8hCwqXKUs3zADCq48hiu4EBee3A0u4q5lFxM9qWhMC+ohSxddMWrL/kfAQRct6JgNOZYwFqaYCAwJxpQ4t0lJpJ1BqRVxVm5WVJYRdibsDOo2INj0ZSNBassOJH1ogfD3dl33BOvhYfnjJweBo0MZxBgfxJXmA9CH02OBkEEJQ/91MoTvnVUtg6wpGCPj3KZfzLFmnAp6Gg0U7av0DRE2XSwjsUKkPvniKugYGGMNl/kKwVo8MJS3xcX+K/EkjO0zNh+SmX/wp6t4JU6WtcVvClDG8AzQc145ShgxuJmWcXS0h72RKwrYGs+88ULariHmZIkc5dTWQrheawqjvJGAtybEMV140tXKu4DKgrRYsL09UYh9U8eD1QJuAxJi5Nak3KocAINVN/v6YAtRrSIslJpYlQBRVglmTeEexXS7RPwRHtSks9uSautndOXymG9BpWpSsj2Pq6TH77hSwGG+I9x3hXl4avb+7zzJMYwtP/wRvB/+X8dHH+EcPwh0utbQPoT6yLnQC1urqFYQ2djVSPx+k7fwuk6WmymoZ8ZGFPJzu4+d6HRToanrZp6E9HgtzzZwN0bhk5xUAz27daDRCiARs4bOI2B+k9NpRDy8KqL/stKjHlwhFstI29rIPtfDTknIefyTKlC3My3jys/6Z36a9O6UPsYIfLkU/vE5rIfIGSRqMcf4nflnFyWZbs7kAPUFc1y9pxfLToFOvr4o14FBxvzUYBTmve2g4JlfYK8xMsq1fj1ONfLCrAJOKvl0/eObBtZKIw6e0AyD+SzaqTXi9va24VCugrqpi7jRu8CehihMMpwHgHh4PGP/cxDAW+75Plc0lK56+fnI0Ppjyr1xMJeWx8Q1m84Tns1IPa9cgYkrdAteVbS4RBPTyP3dcnP+S/TOdnZME8Np9Psif51eBRAOmv6R4fJH06P6KM4rxX0FV448Hl+QbXgpccB14h9ZYR9ErUXhbjJf7hG1Bt1UhJ5soxEpEVvuWjxtbdFvNwRs7aASBn/6AASlapgl6PDtHbsJjkuPjR45V90TB6Ol5maLJFLUGKVdNwVMaVlRcUq0vF1RrarEs8Vpe2bsQUWZaOFWRwMt1A0Sh6Pi+HcOv1oWnorqEbBvL+t3yf/gFcO2v9F5lgBRKiRUGIe437AxwXwj6cIeI2lg7UK4yCDmspMrczJTC0Scchc9ZWO/mETZiW6jpjZPXQ3wHUVTILjYpd44ZYkvE8P23VcHJwWxVsEous8M2Bvh+p48f5xx5e67lvfoT+vgfbo95f3Q13PdciPnrm6jk+AkJypzdSyIrN1PYEuGV0h0KVSSK8x1DWzJzBbC0wiz18QXzgvPv99/6BxQBBg1w1Us+al5qAT5d2+nd44MeNRgKnHwOINTl/iwXbUC4O2HFbeqquq1vsuh1YsfIiPoyf+lxhHi0+Ipy3/PMbTwYHpyhk9fzlBAwIKXn8dw9ECIx5GEP2y6+Hq+tqi0lKNjBOvSEnpHfXUAGfrukYVPE9rKtPGKeNivvGJheE8q9iw91EyU1E9TFqlVNSUqWU+k5XBRX7Nt4F/Z65Rb4zK97y97Gpu/6Fw4G5dVquC5dWjZIXEfYSgivbdhUYNun/Rf3PEnMYK4IYqb6tSOdMCa8ky49HeQz/eelaDJn2Rs6qtqqI4LpaaYB39a1z8jmjrhDgqeNHxXhCvOaABW1DvDCU5zhpZECcwGyPVFxSrdYUSTDY7MCdI45yz8G+UEmAlkWskVgEeEX6L5kKtw07HJ82FWYfOAUzvoR/mYk0BXGXuE3asym0fW8X0ldQVOO/lOC9+L+57SzsKIjsfha0xZhfsXW0vCLRbDB7IV+9pWr03L2NgHAv+en1RdDFSDQGePPfmrZq3am8T+KVx8RPvEmdfHZbmzRI9vI73SC+Mqg9D1zpKWivleQ35mVm3T1HHWcwLV44FW5q3zM1t5n+bbVl94uSq/LzFWcKry3h0VrYZ1bbYjJKdQo1+mcpxHoB5Qq2z07Z7kiLzGc0rVzd1b9vZ0719x+L0tz18fN9XP1o3yjqXWMF2z7AtzbAHMMKIOWHE8M9069/Td37K/RX+QDrzslInk7ikc/2K/cqdcw2KEl+B8nARaZWfg0Ds2na1Lf5mkH3wNSBAGQa7Dcda+pbo6zqaTYu1lgY9i5OVfJDHyWK2oAxaeHmnHkhn/mvpbdde0C1tbbQQ6N80rBg+weSlAOnMWU3ylKPG8XKyBtzCwbz1M5OauHMwwEM19nUbjhmGelrLWspNcrU184k0Z8bnZXJpZGYSbqgIoTfqG8BflA8pI6139XGd+4B0BmbvcFmLLJMp6l7p32lqKtWF2jLw8pR3Sv6pkA0yLTN6v0eZGz/PSBilAcsqj7V8qptZcev4g+M9M/WfTsPgJhSOuJH+X6NgDgWGqhABZW7LccO5R6P8505+Jgr8NIiFq/lbd+ZRY2tRgW+uUdOULPtdRqNFhrkpAXHNEvGIvW2ZWaOxdtLLA1XWX6+tH6ijnyFPr0lZeiMXE5hGqecmPLz27u6gjZiefjic2hvkmaNKxxtH2K5KX5405cLb1063tWPPKPG80IAZM/hXdXJWiqhS9ayuAqbSshjAVXBeqBde0JiBm9NN1+t7DNr6bkP99cbLNGoyhUpNpoFm4+tp4wRuK84A9MOEEYLx0LSxxX3AvW+Ju9HdcGgaPN9htcmq67XuCvWX/qdLnnZd5bytAuV66w/buzfHb4pv/7AT+ORnLdA19/NFCzkaIBnb+I+y7V6bCqDqW52+xBuA+di/qvZ77cp/wUhmO64dl7NRWbtRCV7sviG7AbTTv2S2lwFJIo5ZzM3gkF0TpIz8KueIkmDOaq3jpunTh6kPePIKtwJBgk0SEKJUAels3X1dhJ+gKKO4rphZXFw3XqQgUuLi44mUKIIhMZEE0LksK0odMqU8W6SoqylhltbVKmTqXHia1ozJzm2ObwIdbL90NWmAURLLUB+OMlx//8UgkUCJj2vWECoSE0mxFPBqxIxXKZSqdLX9J7K2RqOo1pbHJji7WmRLoGnQ599ODu2dCXgZkQ9ESxt69b18FZ80dZSjTAoO8I9uAM435DWZSE79yyxSLJmCT1dnFtcVx5cU12Wq/NLZ+qeVddUJCgWREh9e2FuBSAKnbNC6+7qksPyilEypiKsPiB4KC42ngq10+oiH54jJ9fRYXLygW7gSNs3b9I62Xpon4QuDlW4+MH8rHVi6+NIiplF3X3d46sbS3Reu+oGjY9gsD2uNQw43ScrQZ3+QBZ0oJF9V4ZlLyK3gCgpZVx4UHEtNQr/KKPmrMc4BpdHXlDJLTZem+DxV1OoiAjluUaM6iij12P55gW10h3Wcc/pvVm/D/nNi61/khp8cp/4HHyzoMsNz8zE6zyQuBfzzkhPjcj7mPymauYgydv2s7eZq9RdCaIm767kVHEuuJZNCYRWk5Z1DrtdGtoHiPKVYJhDmPeaquP36/j5V32N8TDBoyMdrypKF4swUfWh0e0ij/zQ66BdASt/2z8YqbbW2Ffw/BBXZxq7PxtSS6pKKitKMUsPiz6BFN1E20TVpuv71L4p+WX/Xuo+TEEC57KPxCs1yISOPnu7QhjaFNj1BB8plbOBf8Mnvtaal4LMfRAPKxlpVktKGqLfxhfFvoxpKVZJWBe0oK4fw4N+TZGgAn5/NOkoDMe9ALgC/k6UqiUFJ28nK5gfyF74YfF4OaydNYSA+LvLdrYODO/wrFvlxiDKCIGA5A552vkAIFNAx6S+f7cEa0z86wNO1JlRhFs28QFWQbCUpz2HmiCtTrHJVuUyzFAmMoTVjcvOb45sUHCsKsLiioa5c2kAsLGAGJ3PFLYqCAtDcBGS68FhaWIQwIIko2FwwbFfSfooA7h3hcFIX0eRc7gSHE0FGL6KzWEu4HBqd3MFkrmQwyFQ0RctgnE5Q/IiwIPxU/CRYRIAm/e5d9F3WqlF69Z5EzRHCfdbQR5ucd9N3g5iSLblbZOLiPQmwN35H3K80NdTEHPaDQ8zHzUNaSBV9KWHQLEyGBZmMZQM+2tSU0ygqRNkbHgEx21q70RCzISE1FCoi2rXQlzwLa3XawONgi+DXf9hUk+5UD59w3I/U2wD0NHeFm7swQRgnfPdhHEgzp8/Nrd+gpXL8hvX/9Jts22Hsor8STLbu6DKGmAcdauZZCdLZHKFMo7IqkmmEfGE6nMlDZaRFEtkURzKRBaITYr3I2SRaQqRDdHoMRWVJ+BZAHpPYdg3/NgabigvEEh2ysTwXa2cusMM82Vr5ZFw7rBku/lr/dqODv/4r2VwlvliRn42PaStZm3qyOPGLnIUZLvkbBOJR03O8Tp7PaoxzNNgpjkyNBDZOr2LRpvw/CsKNfv7u+Ih45Lj41x+2srviu8AjmLVUn/bKkZBIg1HFUHIOi0ERkGKCgil76Um7OWDS9zd4XVZFL8mNE46jevGiw5NifhXapyUweez4cOptthM3Ni0JnJ6uay/NaAe5RRGaFxLQYJBkN7ZKZjRlEZoIcDueOY7zGmeOe+GA9yNtYpovxszVN9TIEDiITKnO3ipQPS3sE9PkHhywKHI8TyaKE8MBx/Nl4jjRvn+CLxAjiBeCQz4eBJAx2uHiYY32yXil/da/hMfdoAE7nrjSyf/KpwgihGLhTea2by1/RfTsM0wCt4Lc5NN+KJ7jm427rKDMcwh1/NsG+fnjJ6i/rrV39QSfl/rghpN7esGyCWD2pWtAnMzyuU2Wwnp3MXUHyOddKavY/D9Ng7rpCmiSGOZ2zPgHAzOLwPB8LL2COFkRjHCkI9vXAuvPzgymBpvMImB35Cq0ko4dWD+3gus8PXKZ4V8HIUGLEFYpnVcCvFIuYDzgCUl/HeioDty+y26rnantuJ39uJ2p3TifCf9dmDv6TH3E0DyN1NCnLDWWl+maGXxw76AVqOaHK1mmtqw1VrmV62ga9Sq4n8jEUR1MqzOnwWzKhPssu+qs5V33ODij6qxOMeNJXYi1rkMNWUHEIfJiAkA+qp8B9vLsA4gv0Aa1ZBuAe0u3Sa2/ZBcAk5JjuqqoNEFa1H+GpW065/j+ZpEDl68svv7yAHARdlodlIZwVOPmkyXaFTOapcPahe2oajUb+pE453rskumGtLgkeSl3BSa3JpvUdZY5u2LRgSFJb24cHB57fw4OldqHV/DxfTUE5KhaanRSPl+NJ4sPmjuYVA826m0qZfDL/xVw5KsKjhuGujEmJcPfOF0MFo8Hp6HsR1OZMC3VzLExvPt/9wDMathYwRTTaU5g7ZhXQe4FEIdmWQWGnnhSV3ljK7icjpjw2JBbPcSuy/ZeNaO/fUA/o2efwGUthTl4aZu8MlZ3Q0f6GeQW/BM8v3e/sTddJYTbIiwk1Tl5KRV8CzrV1QUq5Aaog6qcLRCmnLpsSYI8JkiIN3V0jvkt2DPfFZoGofb5OEARENtXfkpQaaE/HapI+hGzXwO/adieq1EsqgG7Eb4iHonDtkT5ilaP+jUYoWFOneBTSE0MR4RTkwppizCZX+Cv23wHa+C+PYN9hpOXm/MqhZKSSH44vz09J7ZVooRRUI0RQgL1DkevOuwiU1TrK0nx1vAKBf/iieXW5z3eEML9b9sqKtwLBYk0PM1Z25RdKOUj/A0gh9edF5RqkV2ZO/chtZ1Zix/rJzf6iagWk76o3GxUi9nf0YvWd0ctvHYQEq/amKakqZEeVVEzZ/odxyuHSW68KvqxCNOcdn/M60uqugq1fqup6EV1laqYUtPMZMfsDOkyX3dRCMN5R3YCpSD3n4fx4T9J0dGWYRGW6sKQQkFhHCdWsCVg/kSaqlkdjjqL0i/Uojr8GSTufgOrQxgRS8qobHUsOlnRlrarjplM8lVFz7mHu7mEu3uGubphb615JX711enmdQHeKGH9zXx2ho+AbGuKKNBqFBmLn+dzs3zSpIB8g3VFN5F+gl2XO6hr+7MQqALP8oNyVJGbOxrP3nFJBfTtWUEPaVKn32RhBcTpNG6+5SoQNaYXXdzgCtbRIPUDee2M1WzPrBDPjrdi/QJG0dLidsb0C5riDfHY4B2ZGgkZqrbMtC2zgBqkbDFJ3xD2X9iENyITejqzRcA0oYsvWnWw6U1g2QxRg5bmjO+6qTtT7Rfkh8GsO0wYojgd9MszG7S5TbrNqsXBd//6ozhftCC00NbaxGT3RCyWIoFVoqkghcwysXRzllDzPk53CLUZDuAJN4YW0PibEu/P5UELTdHWuRmervIuQ7z7fZT6vn6ryiFn8YiDjey7DJ6n0eUu8VhVcDfaA45Ea4/PLsM2JEWcv4+oKrJ5cCvm/5QNFpMZSQwN7jLMDh6UXQuDryrqehTsWEHkP55ftg/uerF9poqw+2oHFoHOXRmVKkh1jhvNIwfB6Dx+kUE6n+ll5anlQr2QlcoiLeqZ7qfUpA7jXe3Ka9sUpBYJ6MFmInt5JJhTGbnZSEctzP+gWubwvNfrbJ9HZceF9m4t+uZoGZ7SdlbnE2rOy1STJ96i7cxtFWiwzvmBxMFSXE2d44pv3JDASzVwmbhUW1OUX10GU5rYRCYgEHCzAhkkHEKF/llvxuvZZelsDoNYp9sc37v+SA68WUcL/pYv5eAOx9RidGV1eZRa1cQubQ2A+6BauxUiT/G8TmS/oS93C0wuKNQtuJ93K9QuLe8yx5oe3y1wYdITRxeG3YkQJua4hdZX5rAnTE2L7Qt0jLJHix0CQGas6j1wuJqyHfxhp5S5ct6dW4fyZq7dDJjDUPcrCE5cCteg0OuZkgVkuV7uo6V1NVPdWpWPasH6M01ipjKFOmF9av2vRKVZTqEFJJyDl3TGKTLb46xD0w5mMgKWcilO8zEV5t0tSROhOjgnCTaw0926ucJENiMmZh8p45e39tIh/QxDcNwGbQ5HW+RaERf5c8GXxvKIdz4IC3zUL0yduPG0CMDDEoH5kHUSORRVhManqUpX95xVLyq7npe+Wwba6CqC1wa7crCNgxAyW3XXU+G4quWJWY3F2FbzqGNFhbEh4UIBpexr6kfcfhNY/XZcyk7Ye+V1/LRyQaQApw1mvtWNOsQX+wOGN6+ZjCf54Ez21B0MLEuK8UfmgSk7vTZxWGsi9hdOreT6kH6qMDKbkwJecJR0J9VdyFqV60mZeKG2D7sLeHkH6uHPu1YTw/bF5B0TMwN65dEZXU9bKzLeiB4E3lcTe4j/FMq/Dir41SPvuKe3DVnNbJPHBS0sVze6x+V3dZCLXTG3E9B1c1CY6oiLC7hVHK2rsDOD1ukn7xTOVZk/X84qfzUNW2XsmdnSbwytQ52N0y2D7W1BGsaUlcbqMkMTWFT2pmx09SSbLwBEsBzFKBSmwtc6FsLDGURGMdyhPw9RWq1iqkqr8xCexVACk8AshHpkIJQahAxpFxlv72WRLYGkQcmw308MrZ8JeBleuBv+2fDwWlbe27ohrNcI0wS46ZWyQlaSJxjv5SyX/wm95Y1p/L8CVfmar2XhR3hsIk5YdRLuQ/WpYZD/JrY+2byaBbtu/XGvx5gamr0qijtt6Gpm/qA4TrBwfaFzZuzsjxfgiKvOwLE51BI2F0PhwmZvskSvyI0PKtmS3m0W/vj8+86qIWN1zfnzvVczZl+kPGzgifnGO3Y2Yb2VKyH4x+XtOr2ZShIELjLRk5o8xp4K3MQ0OOudmwRNr8I21Jx/1QDK8pSiD7cRymfzi3gqXr/uy7KiPnZfKHRFznbDfwUkts+1kvy4QwXWcXN/02NSf1bgNEVLO6Q1K0jagjeRg52hrGBqaQZubuaxgv5mahW3PF2mrCBzR8alZyxuVoDfXozHa1YDl3LSJ+74oHdLWeGP0d/YR5fLqZQBA3Din5nLTde7c8gnQ5zNbRU2BLCwHudtsxB90tUphEaV4fJykPPzTEiqWJAZtp4uxSYdTQBTGmHHSG/mfhcuS/InVzY+BsD9S0GA0b547iLmzlg85yzUFHfeCIqYWmg6hrvzUGcL63q8Rl8beD5M7y4os4fZhHX28ijU0KPl6ChG53+XNk/sPyd+Svk9yLCnuV+zKhDKswOUnqG+aWFGtaomsNl3xQhJGTSM3VwR1lyYF2yJasUuJY9suRHYgo94ePj3yM5E/eNyyh7mbvVjObjXHhMBe9UrA0T2Vg6YspMDWruJmSre/txydTIyHBg0W3ObdCAwMB4wLy0TgBf2YNrur6Md08/BBs2KEyMnQMTHEqUy88zQ+u3I9RMDF9SZ8pKPpbrIO2pRc4ZQZFDfriGCD5ZeHy5UHVaLN06f61sC1HKNQw6PLPl6vkffQ9Ys0tA/YLM8gMNq6o7NJmFSQv5ecp18GUk9EoFCwd2xiV0Xpk7h4cnZ09GkvhuUQ7BgZ1P0X0/p5HtpmcZRs80RELSkkeJm7IwZ0UReX8kvi19lX8Gi1suvZK9A9TQN91kHii/8Pq5oqNFvmrqtNufzfTP78zVO1bMT32a/N0zAqeUw6rb6rWC+GTK/Ffx1ehvkaznk67b6CXBna/0WyHwLZH5LM+7OBLDb0pmWPjWmdaZ7AHl3L2/+2Cn3+sHqwvc5b4fUnnV0g1963PbDem6EX3QBmx0rq45oRooBRmvIyMMXceBSyHgQ6Ls5V5zOEzAJvy4FvPQ9P8VF1PD9wUH7I6gRU6DCsDNiVpSidZo4MrzVrgjaUWdWjLBHUBnj0dJp5naoos6aIqh9v9EkRpGTgCUL4mlJukDoBfpFBvn9vQVaQ6ckSAKp4GFP37dfNGWma03EiKCsIDOGWaA0MQt23bVMM0//ZYPBFC1iiFARNppKHNgykJvOkCbR1fQdoFpZlpWeWy4z/eIR7zWD7T238hDNPCYzWZuYBDQblcseCpWStmOtxyTKjIeKZUFX693EbvVsuprN9H04CwHfbaGV5rUvkRVHOo/QMkduHrGohcBfAro6LPdadGdnt7Rm53Zb7kQgjsHBD35bX6/W1hqrma/he2b8ywKYFT7MuJA0W0Gwz8HWU8XVUQk0slEZnZTGj5hQ+zffqfY047Q+IiYCOJqV/VcGI8ACNf9pyv43ogRgEvlK/KpjPpZ7OnqWKNUz9ZoZog40jJFkcWG0jJYqcblG4iyrqJaQpKRweig9h0SSVNTkOEsqNGIufuQ391ufXEJywq0iyvaFyCKswnOCfTftDCLXAKdzRKU/N8XnwCEC5qYGQHeDg9/2pd2DTZfm0A/mEjIuXj+MQ5QK0mYuBPtDUiAJjVrxWkrnM7FFQjMPFqevEI+ext8Xw8Dj2RWraqfebFYDrD43mjEKmLNvWva9iP15gwxgK5uWdUz/HKbJOj8bx71+AuUzd2eCP16+ezno48y9GUq/zu3O31fuXgHre0/36nt5Kh5p6mio0mef5jaJC84PU6ZALtwEbjpfF+yHjypVlSLekOi9R/9OwmZ52OzEjAdYLSE4Cz1iDi0ZX9vPec1urNndvY3cGphjc9ax5xCfebr+C3RzaVn9gS7OPjpR7cI3BwLoxBf9cYaTty/hbzDsFcDPR2ayP5v1+DHDZMuZ/8dgTYCA/3Wg833JI3TUg/ia7ZOBgXIf37P/ALQbgC7h1CdGPxye0DOwdd7hzbFERou8HjQBDc8zCxDYSd4sAKnPq02LkxFGgAA0PljcxSCJEdJrcgoJYviHlpAtT3hJ8ELh8fub60UItpKdJlL1KNaSSiblQaoLxUV0IaS8OGol5UB6XaRmSE2gEP4B6lDdFCx05r9KVctquUkyeqhRMJkEPqkA6gX6zDzVbPEi+4c9HzoOQrDxQUGkGqN47CMNZ0xEDPxsNGKz+sLHCA7zSnoq3ckQRAp076x9PvK/KxrU0SZhsAS258+JCzQ7Nj1zvGbuu4rKrA28cN7nsgfEQYIoCRJFctfKfnkKWXB8FF1ed3TWVZmcDQ0wfwI+Guvh+IR+KdhXCT3yfE44mqrK6+8ICcy6y7I2lnIYthdPbhun7hDxzUTmjjLPAUi2Yn4hq4e0MF5nDR3kxX9+BfCpM07kgIJailrYT6lh+GYNgYtFg4sHBrNZBwC+pn8t4SOC//xDLp4nNteBRsocWOQKapgqDCcr/xhMG4a2paA0oTxGDvDCUlim7pFwIZhQxlBK9rR6sTOWgWmegWUmhaxCbhJAgjE4eFDU1ewWAC8EL8W/+LLQEkpDqvo0SxUJmgW4QZkqOtgbHMuN5VEm7/xBDvMqmEPIY17V6rYjn/IpVJGmx/fTiH/57RwUBOFRQ9m2jDMYzCVxaoyrNGB+7CuOZm5wL0gWPEc5oVwapeW93QcM+hxbszqhUSkv9FH6DJrAWbAefAU60H/42Rll55obuFKsFhiS0lQMmb4CdbrvVxqD4y3Ghri+f/0bhgfASf7C2yTJHj6vGLbRRERDaN0K2wXfMg6kfBBFgwDc7ZIYfqOzAB4S+MeT+xYtjJvMIeU2DXC6Yv4lr1ZdwfV1ubOefw+CeV/yPWouWrhkI4FPgX6AAH0qfaYABhBIu1pnKwdpXKPpSxDOGtoOZR6MUy7gEC2CYFl+TGbVwBShl5DshgLFbfqYwc0Cc+5LOgveywGWPtA3ZyuuW+fpAdmgAAANABBmDoOy9Q9MqP/gzCJAcIkeE6qcKUXPIOHHGQppMpmhzzfm4hYHFpiLYdlDU35hJXrrOA6GlXlaRyEilixYtGb2Lku6JY5rCRrVIi7JLIk4wkj25mVzc79624k3tUgwVJlAqjvbyHMJc0CQDnII1GbZRGLeipDcIWrKoMvnyfeRgjrC3MqtDqhQNRwBNbw+QLjPqaHNYoyaAOHrjZ5ltjcCRJjT6oJ8ZbYdd8kRZ227KLG8EJD+A7mIuLa4sLBdW8nYbsLUnD0AwVIJsvq8oIhBxqLEABlNBMQUo1VLlGikVKpXjzxKvKjSffUKYajl7irIeBjQniczI2BpIgg3y8TEuwZAx8XwyeUAl7SH6L16LB74bBLMaJ2qZQvVMzKVNFb90FbAfd3LRktybPFtCjPk+JgpOZOlxiiFPN0iSOTNOKblBN2uH1nBlvmR10sj7tyUh1V+rmtgwCWJhlQj6GoDaQymAO1JjeaAkfnww8QCnXCSaWBymB9cngjCBQKQodCD/UhFH3FxBYp000lJNpR+TUYk/KJfIGZIO/CaWEITJE+TxgGFHwBajKkWXRJzU7ROX6tIMR5ItaYQmRRxHQf4QdIxkUggYlTBA9IqqVdyKcCC7ieUo8glwt6EpkDDKcUQsFHQ+YXJuNCA0cUaYuhiS4/tWOlhD98AOvw2yFRUIXDUR6FRSAqSeUzNBnPA1REyb5bHwFeh5Ygorcr9XqFpKlq+A+DLCp3VoTrrzo0QDupFqMwRPHncPML3PRMI+9p3CZN4xa9GxmuKXbkiKxq24WE3UuZ0SOkPFreTbMWj8cgoR0uAjSKNlWLBqag2dqUUob6IwiOatkOlcuoFHX6DCI7/rd0fQFgy7Lpp/yKoxxqdjI5Y7pUTllnqV1ttDC5231FDFsTO63bKwNgDE74hEk/scMGGDwrJ9VO45EfnbQN27dnn+smskrKP1D657Laaul+8FTqtmEaJMqXKrVWhSqVqNerUqqf1xr8a6DVq1uSgdQxatGrzzsgMfGSYlu30n6JwPd5WSh9ow2/Lth279uzj8AQiqRSvKQ4cOnLsxKkzKo3OYLLYCU0Ol8cXCEViiY6unr5Beoahd1Uvl0MIrsrW9Kmv3jEcnkAkkSlUWhnJzDJjMFlsTmW4rC8Q1oebLpHK5Arlwade06xBpzeEdC/ZXlSq0TJsd2m6evpUbcOqGrfGCquqFkTJjq77cntN2u+A076ZcsYRJ520zVkLjpmpwUOPPPakXmqZwug70JiVPtZuk0GrbdFn2IhDdThuuc6MdX1C0AWeWd/3IRHSsuE/UQ4LGTTjbBxCX7YQgI0XcBzZJuTRDMNRYQ6vvBaNi4M8/qBltrjLNUjsUtZDIRAtNkPAvOyOlJfSKQSLS2EizV/5iFiVGdJJQxWKxzr4qhANg5HqstwyGgU3QUxD0+2YQWPA94KbcstCBLVjC5aVV9GajcHFcWladPsu5pzwdz5O7/zm53zdtWbciawrLQ8f1HucYFDwEIOI2UdajBuPEz/SdgzjIY5jC1HsUowmAVnUN7eR28w+WZy7WHHLv/gUcfmyvFI8W19ez7qUj/jlQQK6Kt/eRm+z+3R9v9QNAfEotwZCQUdMmVlrN+OylOq8TsD8rH46rJlRmnf6LN/lt/yXzxIvkyzmrCZdF15vOdXm6mIrmsZVCMEO/9wFe0FfAr574l9m/MwM+tsYjuNeGzP4VFUmpMtaPsWdJOsrOGOM1d/iudQd2eJzXu2IsR1/om79HCXgvYt8a833IF4meKt5bq7KA61o+ki3/1zV636XLY1arjZXilUTkXXqkbxCfGqjnuPsgZbyHnLu0pu6uWYXHbHhV7lICOI/hgMAAA==) 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 0000000000000000000000000000000000000000..50e881bcaa62be4b2864f1e55b08ec3f1c3f497d GIT binary patch literal 18700 zcmV)hK%>8RPew8T0RR9107(o04*&oF0L)wf07$I>0RR9100000000000000000000 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%0At#gqdWj>A@>9F-FJ_U#SpAYG`g#CniqLKRsG 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 literal 0 HcmV?d00001 diff --git a/stacks/homepage/theme/fonts/Supreme-500.woff2 b/stacks/homepage/theme/fonts/Supreme-500.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..751ea8f282490d70a9a8cca3b548671a37be08fd GIT binary patch literal 18828 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 literal 0 HcmV?d00001 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; +}