diff --git a/stacks/homepage/README.md b/stacks/homepage/README.md index fd57e61..ad06066 100644 --- a/stacks/homepage/README.md +++ b/stacks/homepage/README.md @@ -146,22 +146,78 @@ render are different questions. Before/after evidence: `~/booth-data/homepage-cleanup/` on nh3-dev → `http://10.100.10.50:8090/b/homepage-cleanup/` (24h TTL). -## Theme — the Arbo "Raven" palette (`conf/custom.css`) +## Theme — Australis Skyfall -`conf/custom.css` carries a port of Arbo's design tokens (irv-ml1:8201): flat -raven ink `#021425`, card surface `#112333` on `#1B2E3D` borders, Manrope, and -mint `#2FFC89` reserved for signal — a status pill is green only when the -service is actually serving. Values were read off Arbo's running `:root` -custom properties, not sampled from a screenshot, so drift checks are a diff. +The dashboard is themed with **Australis Skyfall**, the operator-supplied +design system (handoff bundle, 2026-08-18). Skyfall is a dual-theme web system +built on the OKLCH rebuild of the Australis terminal palette: one lightness law +across every chromatic family, all hues cooler than neutral, a Sea neutral ramp +that drifts from ice-blue to ocean green as it brightens, and a "calm depth" +language of hairline + two-layer shadow on every elevated surface. -It lives in CSS rather than `settings.yaml` because Homepage's `color:` setting -only accepts built-in Tailwind ramps and has no separate surface/border/accent -knobs. `color: slate` stays as the base ramp. The `!important` flags are -load-bearing against Tailwind utility specificity. +### `theme/` is the source; `conf/custom.css` is generated -Pairs with removing the `background:` block from `settings.yaml` — Arbo has no -background image, and the wallpaper fought the card surfaces, which sit only a -little lighter than the page. +``` +theme/colors.css vendored VERBATIM from the bundle +theme/layout.css ditto — radii, the shadow/glow/rail system, motion +theme/typography.css ditto — families, scale, weights, tracking +theme/fonts/ Supreme 400/500/700 woff2 (Fontshare ITF license) +theme/skyfall.css.in the Homepage bindings — the only part that is ours +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. + +The build exists for one reason: Homepage serves exactly two files out of its +config directory, `custom.css` and `custom.js`. There is no static route for +anything beside them, so a `@font-face` pointing at a vendored `.woff2` would +404 — the face has to arrive inside the stylesheet as a data: URI. That is also +why the background image is mounted at `/app/public/images` instead (see +`compose.yaml`), which *is* a real static route. + +Only Supreme (body/UI) is embedded. A link dashboard has no display type, so +Bespoke Sans buys nothing; Victor Mono ships as 2.4 MB TTF statics per cut, +which is 30x the whole stylesheet for the handful of latency figures on the +cards. Both are named in the font stacks so they resolve if vendored later. + +### The background is generated, not stock + +`images/skyfall-aurora.webp` came out of **Arbo** (irv-ml1:8201) via its +`t2i-ui-background` workflow — "abstract full-bleed backgrounds, no subject". +Job `13f0891f4e42`, seed 26, flux2-klein-9b, 2048x1152, 1.6 MB PNG re-encoded +to a 22 KB WebP (smooth gradients compress absurdly well). + +Regenerate with a different seed, or reword, via: + +```bash +curl -s -X POST http://10.100.79.3:8201/workflows/t2i-ui-background/run \ + -H 'content-type: application/json' \ + -d '{"prompt":{"kind":"raw","text":"...","negative":"..."}, + "width":2048,"height":1152,"seed":26}' +# poll GET /jobs/, then GET /artifacts//0 +``` + +Note the prompt field is a discriminated union, not a string — a bare string +gets a 422. `{"kind":"raw","text":...}` is the shape. + +### Two deviations from the system, on the record + +1. **Skyfall forbids this background.** Its rule is "flat semantic surfaces; no + photography, no textures", with exactly one permitted decorative motif — a + subtle aurora gradient, on hero and empty-state areas only, *"never behind + body text blocks"*. A dashboard is a body-text block. The background is here + on the operator's explicit instruction to generate one with Arbo, and it is + mitigated rather than excused: abstract with no subject, strictly cool + temperature per the imagery rule, and held at `opacity: 14` so card contrast + never pays for it. **That opacity is load-bearing, not decoration** — the + render is brighter than the "mostly empty negative space" brief, and turning + it up is what would make the cards fight the ribbon. If it ever reads busy, + the system-faithful answer is to drop the image and let `--surface-sunken` + be the canvas. +2. **Service icons stay full-colour vendor logos.** Skyfall wants one cool, + technical icon family. Desaturating every logo from CSS would just make them + illegible, so this one is simply not fixed. ## Open question diff --git a/stacks/homepage/compose.yaml b/stacks/homepage/compose.yaml index 2f22bf5..326afc2 100644 --- a/stacks/homepage/compose.yaml +++ b/stacks/homepage/compose.yaml @@ -9,6 +9,13 @@ services: - 5100:3000 volumes: - /opt/docker/conf/homepage:/app/config # Make sure your local config directory exists + # Background art. Homepage serves ONLY custom.css and custom.js out of + # /app/config — there is no static route for anything else in there — so + # an image referenced from the config dir 404s. /app/public/images is the + # documented drop point; files here are reachable as /images/, which + # is what settings.yaml's `background:` points at. Read-only: nothing in + # the container should ever write to it. + - /opt/docker/compose/homepage/images:/app/public/images:ro - /var/run/docker.sock:/var/run/docker.sock:ro # optional, for docker integrations restart: unless-stopped networks: diff --git a/stacks/homepage/conf/custom.css b/stacks/homepage/conf/custom.css index d278468..fc87853 100644 --- a/stacks/homepage/conf/custom.css +++ b/stacks/homepage/conf/custom.css @@ -1,171 +1,582 @@ -/* Homepage — Corviduo "Raven" theme, ported from Arbo (irv-ml1:8201). +/* Homepage — Australis Skyfall theme. * - * PROVENANCE: every value below is lifted verbatim from Arbo's own :root - * custom properties, read off the running app rather than eyeballed from a - * screenshot. Keep the --raven-* / --eye-* / --surface* names identical to - * Arbo's so a future drift check is a diff, not an interpretation. + * SOURCE OF TRUTH: this file plus `theme/colors.css`, `theme/layout.css` and + * `theme/typography.css`, which are vendored VERBATIM from the Australis + * Skyfall handoff bundle. Do not hand-edit `conf/custom.css` — it is + * generated. Run `theme/build.py` after changing anything here. * - * WHY CSS AND NOT settings.yaml: Homepage's `color:` setting only accepts - * built-in Tailwind ramps (slate, zinc, ...). None of them is the raven mint, - * and there is no setting for surface/border/accent separately. `color: slate` - * stays as the base ramp because it is the closest neutral; everything that - * makes this look like Arbo is here. + * WHY A BUILD STEP AT ALL: 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/Supreme-400.woff2` would 404 — the face has to arrive inside + * the stylesheet as a data: URI. The build inlines it. * - * SPECIFICITY: Homepage is Tailwind-generated, so utility classes win on - * equal specificity. `!important` below is deliberate and load-bearing — - * removing it silently reverts individual rules to the stock theme. + * WHICH FACES, AND WHY NOT ALL THREE: Skyfall specifies Bespoke Sans + * (display), Supreme (body/UI) and Victor Mono (code/data). Only Supreme is + * embedded. A link dashboard has no display type — nothing here is a headline + * or a hero number — and Victor Mono ships as 2.4 MB TTF statics per cut, + * which is 30x this whole stylesheet for the handful of latency figures on + * the cards. Both are named in the stacks below so they resolve if they ever + * get vendored. + * + * DEVIATIONS FROM THE SYSTEM, STATED PLAINLY: + * + * 1. Skyfall says "no photography, no textures" for backgrounds, and permits + * exactly one decorative motif: a subtle aurora gradient, on hero and + * empty-state areas ONLY, "never behind body text blocks". This dashboard + * IS a body-text block, and it carries a generated aurora image behind it. + * That is a real departure, taken on the operator's explicit instruction + * to generate a background with Arbo. It is mitigated, not waved away: + * the image is abstract with no subject (Arbo's `t2i-ui-background` + * workflow), strictly cool-temperature per the imagery rule, and pinned + * to low opacity so card contrast is never the thing that suffers. + * If it still reads as busy, the honest fix is to drop the image and let + * `--surface-sunken` be the canvas, which is what the system actually asks + * for. + * + * 2. Homepage renders service icons as full-colour vendor logos. Skyfall + * wants one cool, technical icon family. Not fixable from CSS without + * desaturating every logo into illegibility, so the icons stay as they + * are. + * + * SPECIFICITY: Homepage is Tailwind-generated, so utilities win on equal + * specificity. Every `!important` here is load-bearing; removing one silently + * reverts that rule to the stock theme. */ -@import url("https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&display=swap"); - -:root { - /* --- Arbo brand ramp (verbatim) --- */ - --raven-ink: #021425; - --raven-black: #0f2131; - --raven-eye: #2ffc89; - --raven-bone: #e5f4f4; - - --black-700: #1b2e3d; - --black-600: #283b4a; - --slate-400: #6a7f88; - --slate-300: #8499a0; - - --eye-500: #2ffc89; - --eye-400: #77ffa3; - --eye-600: #00cf67; - - --info-500: #00a5fb; - --success-500: #30ab60; - --warning-500: #ecb230; - --error-500: #f5686c; - - /* --- semantic surfaces (Arbo's own mapping) --- */ - --bg: var(--raven-ink); - --bg-sunken: #010e1b; - --surface: #112333; - --surface-2: #1b2e3d; - --surface-3: #283b4a; - --fg: #dfeeee; - --fg-muted: var(--slate-300); - --fg-subtle: var(--slate-400); - --border: #1b2e3d; - --border-strong: #283b4a; - --accent: var(--eye-500); +@font-face { + font-family: "Supreme"; + src: url(data:font/woff2;base64,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) format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Supreme"; + src: url(data:font/woff2;base64,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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,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) format('woff2'); + font-weight: 600 700; + font-style: normal; + font-display: swap; } -/* ---------- page ---------- */ -/* Flat ink, no photo. Arbo has no background image and the wallpaper was - * fighting the card surfaces for contrast — the cards are only ~0x10 lighter - * than the page, which reads as depth on flat ink and as mud over a photo. */ +/* ============================================================ + Skyfall tokens — vendored verbatim from the handoff bundle. + ============================================================ */ + +/* ---- colors.css (vendored verbatim) ---- */ +/* ============================================================ + 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; +} + +/* ---- layout.css (vendored verbatim) ---- */ +/* 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); +} + +/* ---- typography.css (vendored verbatim) ---- */ +/* 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 bindings — the only part of this file that is ours. + Everything above is Skyfall; everything below maps Skyfall's + semantic layer onto Homepage's DOM. Never hardcode a hex here: + the system's rule is that UI consumes --surface-*/--text-*/ + --border-*/--accent*/status tokens, not raw values. + ============================================================ */ + body, #page_wrapper, #page_container { - background: var(--bg) !important; - color: var(--fg) !important; - font-family: Manrope, ui-sans-serif, system-ui, -apple-system, "Segoe UI", - Roboto, "Helvetica Neue", Arial, sans-serif !important; + background-color: var(--surface-sunken) !important; + color: var(--text-body) !important; + font-family: var(--font-body) !important; + font-size: var(--text-base) !important; + line-height: var(--leading-normal) !important; } -/* ---------- header widgets ---------- */ +::selection { + background: var(--selection-bg); + color: var(--selection-fg); +} + +/* ---------- header chrome ---------- + Compact chrome per the negative-space rule: --pad-chrome, not --pad-content. */ #information-widgets .widget-container, #information-widgets .information-widget-search { - background: var(--surface) !important; - border: 1px solid var(--border) !important; - border-radius: 0.5rem !important; + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle) !important; + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; + padding: var(--pad-chrome) !important; } #information-widgets .information-widget-search input { background: transparent !important; - color: var(--fg) !important; + color: var(--text-body) !important; + font-family: var(--font-body) !important; } -/* ---------- tabs ---------- */ -/* Arbo marks the active nav item with a mint rule and a raised surface. */ -#myTab li button, -#services + div li button { - color: var(--fg-muted) !important; - border-radius: 0.5rem !important; +#information-widgets .information-widget-search input::placeholder { + color: var(--text-faint) !important; } -#myTab li button[aria-selected="true"], -#myTab li button.active { - background: var(--surface-2) !important; - color: var(--fg) !important; - box-shadow: inset 0 -2px 0 0 var(--accent) !important; +/* Telemetry is data — the system says data is always mono. */ +.information-widget-resource .resource-value, +.service-block, +.service-stats { + font-family: var(--font-mono) !important; + font-variant-numeric: tabular-nums !important; } -/* ---------- group headers ---------- */ +/* ---------- tabs ---------- + The active rail is one of only two sanctioned accent expressions: + a 2px accent bar plus an --accent-soft fill. No glow — glows are + reserved for hero moments, and a tab is not one. */ +#myTab li button { + color: var(--text-muted) !important; + font-family: var(--font-body) !important; + font-weight: var(--weight-medium) !important; + border-radius: var(--radius-md) !important; + transition: color var(--duration-fast) var(--ease-out), + background var(--duration-fast) var(--ease-out) !important; +} + +#myTab li button:hover { + color: var(--text-body) !important; + background: var(--accent-soft) !important; +} + +#myTab li button[aria-selected="true"] { + background: var(--accent-soft) !important; + color: var(--text-heading) !important; + box-shadow: var(--rail-active) !important; +} + +/* ---------- group headers ---------- + ALL-CAPS is permitted only for tiny eyebrow labels — this is that case. */ .service-group-name, .bookmark-group-name { - color: var(--fg-subtle) !important; - font-weight: 600 !important; - letter-spacing: 0.04em !important; + color: var(--text-faint) !important; + font-family: var(--font-body) !important; + font-size: var(--text-xs) !important; + font-weight: var(--weight-semibold) !important; + letter-spacing: var(--tracking-caps) !important; text-transform: uppercase !important; - font-size: 0.78rem !important; } -/* ---------- service cards ---------- */ +/* ---------- cards ---------- + The depth recipe, and it is not optional: crisp 1px hairline AND a + two-layer soft shadow. Never one without the other on a floating + surface — a card with only a border reads flat, one with only a + shadow reads smudged. */ .service-card, -.bookmark li > a, .bookmark-list li > a { - background: var(--surface) !important; - border: 1px solid var(--border) !important; - border-radius: 0.5rem !important; - transition: background 120ms ease, border-color 120ms ease !important; + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle) !important; + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; + transition: background var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out), + box-shadow var(--duration-base) var(--ease-out) !important; } +/* Hover: surfaces lighten one step, interactive cards lift sm -> md. */ .service-card:hover, -.bookmark li > a:hover, .bookmark-list li > a:hover { - background: var(--surface-2) !important; - border-color: var(--border-strong) !important; + background: var(--surface-raised) !important; + border-color: var(--border-default) !important; + box-shadow: var(--shadow-md) !important; } .service-name, .bookmark-name { - color: var(--fg) !important; - font-weight: 600 !important; + color: var(--text-heading) !important; + font-weight: var(--weight-semibold) !important; + letter-spacing: var(--tracking-normal) !important; } .service-description, .bookmark-description { - color: var(--fg-muted) !important; + color: var(--text-muted) !important; + font-size: var(--text-sm) !important; + line-height: var(--leading-snug) !important; } -/* ---------- status pills + widget stat blocks ---------- */ -/* Stock Homepage renders every pill in the same slate; Arbo reserves colour - * for signal. Green only means "this is actually serving". */ +/* ---------- status ---------- + Semantic colour is the whole point: the system communicates status with + colour and icons, never emoji, and accents are semantic-ONLY. Stock + Homepage paints every pill the same slate, which throws away the signal. */ .service-tag, .service-block, .service-stats { - background: var(--surface-2) !important; - border: 1px solid var(--border) !important; - color: var(--fg-muted) !important; - border-radius: 0.375rem !important; + background: var(--surface-raised) !important; + border: 1px solid var(--border-subtle) !important; + border-radius: var(--radius-md) !important; + color: var(--text-muted) !important; + font-size: var(--text-2xs) !important; } .status-online, .status-healthy, -.status-running { - color: var(--eye-500) !important; +.status-running, +.status-started { + color: var(--success-text) !important; + background: var(--success-soft) !important; } .status-offline, .status-unhealthy, +.status-dead, .status-error { - color: var(--error-500) !important; + color: var(--danger-text) !important; + background: var(--danger-soft) !important; } -.status-unknown, .status-exited, -.status-partial { - color: var(--warning-500) !important; +.status-paused, +.status-partial, +.status-unknown, +.status-not-found { + color: var(--warning-text) !important; + background: var(--warning-soft) !important; } /* ---------- focus ---------- */ a:focus-visible, button:focus-visible, input:focus-visible { - outline: 2px solid var(--accent) !important; - outline-offset: 2px !important; + outline: none !important; + box-shadow: var(--focus-ring) !important; + border-radius: var(--radius-sm) !important; +} + +/* ---------- motion ---------- + "Respect reduced-motion" is in the system's motion rule, not an extra. */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + } } diff --git a/stacks/homepage/conf/settings.yaml b/stacks/homepage/conf/settings.yaml index 583aae9..07fdffe 100644 --- a/stacks/homepage/conf/settings.yaml +++ b/stacks/homepage/conf/settings.yaml @@ -2,11 +2,32 @@ # https://gethomepage.dev/latest/configs/settings title: ... all my base ... theme: dark +# `color:` only accepts Homepage's built-in Tailwind ramps, and none of them is +# the Skyfall 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 + +# Background — generated locally, not stock art. Arbo (irv-ml1:8201) rendered +# it from the `t2i-ui-background` workflow: abstract full-bleed, no subject, +# aurora blue->cyan->green on near-black, which is the one decorative motif +# Australis Skyfall permits and its "cool temperature always" imagery rule. +# Job 13f0891f4e42, seed 26, flux2-klein-9b, 2048x1152. +# +# Served from /app/public/images via the read-only mount in compose.yaml — +# NOT from the config dir, which Homepage will not serve static files out of. +# +# ⚠️ opacity is the load-bearing number, not decoration. Skyfall's rule is that +# the aurora motif never sits behind body text; this dashboard breaks that on +# purpose, so the image has to stay far enough back that card contrast never +# suffers. The render is considerably brighter than the "mostly empty" brief, +# which is exactly what this dials out. Raise it and the cards start fighting +# the ribbon. background: - image: https://w.wallhaven.cc/full/p9/wallhaven-p9gr2p.jpg + image: /images/skyfall-aurora.webp blur: sm - opacity: 20 + saturate: 90 + brightness: 90 + opacity: 30 headerStyle: boxedWidgets providers: diff --git a/stacks/homepage/images/skyfall-aurora.webp b/stacks/homepage/images/skyfall-aurora.webp new file mode 100644 index 0000000..08f5e01 Binary files /dev/null and b/stacks/homepage/images/skyfall-aurora.webp differ diff --git a/stacks/homepage/theme/build.py b/stacks/homepage/theme/build.py new file mode 100644 index 0000000..a515673 --- /dev/null +++ b/stacks/homepage/theme/build.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +"""Generate conf/custom.css from the 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. + +Usage: python3 stacks/homepage/theme/build.py +Then: scripts/deploy-stack.sh esh-docker-vm homepage --conf +""" + +import base64 +import pathlib +import re +import sys + +HERE = pathlib.Path(__file__).resolve().parent +OUT = HERE.parent / "conf" / "custom.css" + +# Only the body/UI face is embedded. See the header comment in skyfall.css.in +# for why Bespoke Sans and Victor Mono are deliberately left out. +FONTS = [ + ("Supreme", "Supreme-400.woff2", "400"), + ("Supreme", "Supreme-500.woff2", "500"), + ("Supreme", "Supreme-700.woff2", "600 700"), # Supreme ships no 600 cut +] + +# Vendored verbatim from the handoff bundle; order matters (colors defines the +# families that layout and typography reference). +TOKEN_FILES = ["colors.css", "layout.css", "typography.css"] + + +def font_faces() -> str: + out = [] + for family, filename, weight in FONTS: + 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 tokens() -> str: + out = [] + for name in TOKEN_FILES: + path = HERE / name + if not path.exists(): + sys.exit(f"missing token file: {path}") + text = path.read_text() + # The bundle's fonts.css is not vendored, so typography.css's family + # stacks would reference faces that never load. Nothing to strip here + # today, but keep the read verbatim so drift is a plain diff. + out.append(f"/* ---- {name} (vendored verbatim) ---- */\n{text.strip()}") + return "\n\n".join(out) + + +def main() -> None: + src = (HERE / "skyfall.css.in").read_text() + if "@@FONTS@@" not in src or "@@TOKENS@@" not in src: + sys.exit("skyfall.css.in lost one of its placeholders") + css = src.replace("/* @@FONTS@@ */", font_faces()) + css = css.replace("/* @@TOKENS@@ */", tokens()) + # Guard the one rule that silently breaks the theme if it regresses. + if not re.search(r"--surface-sunken", css): + sys.exit("generated css has no surface tokens — token vendoring failed") + OUT.write_text(css) + print(f"wrote {OUT} ({len(css) / 1024:.0f} KB)") + + +if __name__ == "__main__": + main() diff --git a/stacks/homepage/theme/colors.css b/stacks/homepage/theme/colors.css new file mode 100644 index 0000000..83f248d --- /dev/null +++ b/stacks/homepage/theme/colors.css @@ -0,0 +1,208 @@ +/* ============================================================ + Australis Skyfall — Color Tokens v2 + A ground-up web palette derived from the Australis Dark + PHILOSOPHY (not its ANSI values). Built in OKLCH so the laws + are explicit and every family stays perceptually consistent: + + - All hues are cooler than neutral; nothing warmer than amber. + - One lightness law across every chromatic family: + deep L 0.48 — light-theme fills & colored text + base L 0.66 — dark-theme fills (the working color) + bright L 0.80 — dark-theme colored text & highlights + - Chroma is tuned per hue so no family shouts over another. + - Neutrals (Sea ramp) drift in hue from ice-blue (265°) toward + ocean green (195°) as they brighten — the aurora signature. + - Medium / medium-high contrast for eye comfort. + + Families: Aurora (blue, cyan, green — use generously, in that + order) and Dawn (amber, red, violet — semantic accents only: + warning, danger, AI). + ============================================================ */ + +:root { + /* ---- Sea — neutral ramp (hue 265° → 195° as L rises) ---- */ + --sea-10: oklch(0.23 0.02 265); + --sea-15: oklch(0.27 0.024 268); /* dark canvas — the Australis anchor */ + --sea-20: oklch(0.31 0.022 262); + --sea-25: oklch(0.35 0.02 258); + --sea-30: oklch(0.4 0.018 252); + --sea-40: oklch(0.48 0.016 245); + --sea-50: oklch(0.56 0.015 235); + --sea-60: oklch(0.64 0.014 228); + --sea-70: oklch(0.72 0.014 220); + --sea-75: oklch(0.78 0.015 212); + --sea-80: oklch(0.83 0.017 205); + --sea-90: oklch(0.9 0.02 198); + --sea-94: oklch(0.94 0.014 195); + --sea-96: oklch(0.96 0.01 195); + --sea-98: oklch(0.98 0.006 195); + + /* ---- Ice — main colors (aliases into the ramp) ---- */ + --ice-black: var(--sea-15); + --ice-white: var(--sea-75); + --ice-bright-white: var(--sea-90); + + /* ---- Aurora — primary families (blue > cyan > green) ---- */ + --blue-deep: oklch(0.48 0.12 262); + --blue-base: oklch(0.66 0.12 262); + --blue-bright: oklch(0.8 0.09 262); + --cyan-deep: oklch(0.48 0.08 200); + --cyan-base: oklch(0.66 0.1 200); + --cyan-bright: oklch(0.8 0.1 200); + --green-deep: oklch(0.48 0.11 158); + --green-base: oklch(0.66 0.13 158); + --green-bright: oklch(0.8 0.13 158); + + /* ---- Dawn — accent families (semantic use only) ---- */ + --amber-deep: oklch(0.52 0.1 75); + --amber-base: oklch(0.7 0.12 78); + --amber-bright: oklch(0.82 0.13 82); + --red-deep: oklch(0.5 0.15 25); + --red-base: oklch(0.62 0.16 25); + --red-bright: oklch(0.78 0.11 28); + --violet-deep: oklch(0.5 0.15 292); + --violet-base: oklch(0.66 0.14 292); + --violet-bright: oklch(0.8 0.1 292); +} + +/* ============================================================ + Semantic aliases — DARK (default, first-class) + ============================================================ */ +:root { + color-scheme: dark; + + /* Surfaces */ + --surface-sunken: var(--sea-10); + --surface-base: var(--sea-15); + --surface-raised: var(--sea-20); + --surface-overlay: oklch(0.34 0.022 260); + --surface-card: var(--sea-20); + --surface-input: var(--sea-10); + --surface-scrim: oklch(0.17 0.02 265 / 0.72); + + /* Text */ + --text-heading: var(--sea-90); + --text-body: var(--sea-75); + --text-muted: var(--sea-60); + --text-faint: var(--sea-50); + --text-inverse: var(--sea-15); + --text-link: var(--blue-bright); + --text-link-hover: var(--sea-90); + + /* Borders */ + --border-subtle: var(--sea-25); + --border-default: var(--sea-30); + --border-strong: var(--sea-40); + --border-focus: var(--blue-base); + + /* Accent (primary = aurora blue) */ + --accent: var(--blue-base); + --accent-hover: oklch(0.71 0.11 262); + --accent-active: oklch(0.6 0.13 262); + --accent-bright: var(--blue-bright); + --accent-text: var(--blue-bright); + --accent-contrast: var(--sea-10); + --accent-soft: color-mix(in oklab, var(--blue-base) 16%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-base) 26%, transparent); + + /* Secondary accent (aurora cyan) */ + --secondary: var(--cyan-base); + --secondary-bright: var(--cyan-bright); + --secondary-text: var(--cyan-bright); + --secondary-soft: color-mix(in oklab, var(--cyan-base) 14%, transparent); + + /* Semantic status */ + --success: var(--green-base); + --success-text: var(--green-bright); + --success-soft: color-mix(in oklab, var(--green-base) 14%, transparent); + --warning: var(--amber-base); + --warning-text: var(--amber-bright); + --warning-soft: color-mix(in oklab, var(--amber-base) 13%, transparent); + --danger: var(--red-base); + --danger-hover: oklch(0.67 0.15 25); + --danger-text: var(--red-bright); + --danger-contrast: var(--sea-10); + --danger-soft: color-mix(in oklab, var(--red-base) 13%, transparent); + --info: var(--blue-base); + --info-text: var(--blue-bright); + --info-soft: color-mix(in oklab, var(--blue-base) 14%, transparent); + --ai: var(--violet-base); + --ai-text: var(--violet-bright); + --ai-soft: color-mix(in oklab, var(--violet-base) 13%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: var(--sea-10); +} + +/* ============================================================ + Semantic aliases — LIGHT ("Skyfall Day") + Same laws, inverted: surfaces at L 0.94–0.98, text at L 0.27–0.45, + chromatic fills & colored text drop to the deep (L 0.48) step. + ============================================================ */ +[data-theme="light"] { + color-scheme: light; + + /* Surfaces */ + --surface-sunken: var(--sea-94); + --surface-base: var(--sea-96); + --surface-raised: var(--sea-98); + --surface-overlay: #ffffff; + --surface-card: var(--sea-98); + --surface-input: #ffffff; + --surface-scrim: oklch(0.27 0.024 268 / 0.4); + + /* Text */ + --text-heading: var(--sea-15); + --text-body: oklch(0.38 0.02 255); + --text-muted: var(--sea-50); + --text-faint: var(--sea-60); + --text-inverse: var(--sea-90); + --text-link: var(--blue-deep); + --text-link-hover: var(--sea-15); + + /* Borders */ + --border-subtle: oklch(0.89 0.014 210); + --border-default: oklch(0.84 0.016 215); + --border-strong: var(--sea-75); + --border-focus: var(--blue-deep); + + /* Accent */ + --accent: var(--blue-deep); + --accent-hover: oklch(0.53 0.12 262); + --accent-active: oklch(0.44 0.12 262); + --accent-bright: var(--blue-base); + --accent-text: var(--blue-deep); + --accent-contrast: #ffffff; + --accent-soft: color-mix(in oklab, var(--blue-deep) 10%, transparent); + --accent-soft-hover: color-mix(in oklab, var(--blue-deep) 18%, transparent); + + /* Secondary accent */ + --secondary: var(--cyan-deep); + --secondary-bright: var(--cyan-base); + --secondary-text: var(--cyan-deep); + --secondary-soft: color-mix(in oklab, var(--cyan-deep) 9%, transparent); + + /* Semantic status */ + --success: var(--green-deep); + --success-text: var(--green-deep); + --success-soft: color-mix(in oklab, var(--green-deep) 10%, transparent); + --warning: var(--amber-deep); + --warning-text: var(--amber-deep); + --warning-soft: color-mix(in oklab, var(--amber-base) 16%, transparent); + --danger: var(--red-deep); + --danger-hover: oklch(0.55 0.16 25); + --danger-text: var(--red-deep); + --danger-contrast: #ffffff; + --danger-soft: color-mix(in oklab, var(--red-deep) 8%, transparent); + --info: var(--blue-deep); + --info-text: var(--blue-deep); + --info-soft: color-mix(in oklab, var(--blue-deep) 9%, transparent); + --ai: var(--violet-deep); + --ai-text: var(--violet-deep); + --ai-soft: color-mix(in oklab, var(--violet-deep) 9%, transparent); + + /* Selection */ + --selection-bg: var(--blue-base); + --selection-fg: #ffffff; +} diff --git a/stacks/homepage/theme/fonts/Supreme-400.woff2 b/stacks/homepage/theme/fonts/Supreme-400.woff2 new file mode 100644 index 0000000..50e881b Binary files /dev/null and b/stacks/homepage/theme/fonts/Supreme-400.woff2 differ diff --git a/stacks/homepage/theme/fonts/Supreme-500.woff2 b/stacks/homepage/theme/fonts/Supreme-500.woff2 new file mode 100644 index 0000000..751ea8f Binary files /dev/null and b/stacks/homepage/theme/fonts/Supreme-500.woff2 differ diff --git a/stacks/homepage/theme/fonts/Supreme-700.woff2 b/stacks/homepage/theme/fonts/Supreme-700.woff2 new file mode 100644 index 0000000..f9bd77d Binary files /dev/null and b/stacks/homepage/theme/fonts/Supreme-700.woff2 differ diff --git a/stacks/homepage/theme/layout.css b/stacks/homepage/theme/layout.css new file mode 100644 index 0000000..addeb54 --- /dev/null +++ b/stacks/homepage/theme/layout.css @@ -0,0 +1,72 @@ +/* Australis Skyfall — spacing, radii, shadows, motion (v3 "calm depth") */ + +:root { + /* Spacing (4px base) */ + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + --space-10: 40px; + --space-12: 48px; + --space-16: 64px; + --space-20: 80px; + --space-24: 96px; + --space-32: 128px; + + /* Semantic spacing — airy content, compact chrome */ + --pad-chrome: var(--space-2); /* app chrome: rails, toolbars, list rows */ + --pad-content: var(--space-8); /* work surfaces: page bodies, card interiors breathe */ + --gap-pane: var(--space-4); /* gutter between panes/cards on the canvas */ + --measure: 68ch; /* long-form reading width */ + + /* Radii — moderate, calm */ + --radius-xs: 6px; + --radius-sm: 8px; + --radius-md: 10px; /* buttons, inputs, menu items */ + --radius-lg: 14px; /* cards, panes, popovers */ + --radius-xl: 16px; /* dialogs, drawers, command palette */ + --radius-full: 999px; + + /* Depth — crisp 1px hairline + layered soft shadow underneath. + Every elevated surface pairs border: 1px solid var(--border-subtle) + with one of these. Shadows are cool-tinted and two-layer: + a tight contact shadow + a wide ambient falloff. */ + --shadow-xs: 0 1px 2px oklch(0.13 0.02 265 / 0.22); + --shadow-sm: 0 1px 2px oklch(0.13 0.02 265 / 0.2), 0 2px 8px -2px oklch(0.13 0.02 265 / 0.24); + --shadow-md: 0 2px 4px oklch(0.13 0.02 265 / 0.22), 0 10px 28px -6px oklch(0.13 0.02 265 / 0.36); + --shadow-lg: 0 4px 8px oklch(0.13 0.02 265 / 0.26), 0 28px 64px -12px oklch(0.13 0.02 265 / 0.5); + --shadow-drawer: 0 8px 16px oklch(0.13 0.02 265 / 0.28), 0 32px 80px -8px oklch(0.13 0.02 265 / 0.55); + + /* Glows — hero moments ONLY: empty states, featured cards, command palette */ + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-base) 42%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-base) 38%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-base) 40%, transparent); + + /* Active rail — left accent bar on active nav / selected items */ + --rail-active: inset 2px 0 0 0 var(--accent); + + /* Focus ring */ + --focus-ring: 0 0 0 2px var(--surface-base), 0 0 0 4px var(--border-focus); + + /* Motion — calm, no bounce */ + --ease-out: cubic-bezier(0.22, 1, 0.36, 1); /* @kind other */ + --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* @kind other */ + --duration-fast: 120ms; /* @kind other */ + --duration-base: 180ms; /* @kind other */ + --duration-slow: 300ms; /* @kind other */ + --duration-drawer: 260ms; /* @kind other */ +} + +[data-theme="light"] { + --shadow-xs: 0 1px 2px oklch(0.3 0.02 255 / 0.07); + --shadow-sm: 0 1px 2px oklch(0.3 0.02 255 / 0.06), 0 2px 8px -2px oklch(0.3 0.02 255 / 0.08); + --shadow-md: 0 2px 4px oklch(0.3 0.02 255 / 0.06), 0 10px 28px -6px oklch(0.3 0.02 255 / 0.12); + --shadow-lg: 0 4px 8px oklch(0.3 0.02 255 / 0.07), 0 28px 64px -12px oklch(0.3 0.02 255 / 0.18); + --shadow-drawer: 0 8px 16px oklch(0.3 0.02 255 / 0.08), 0 32px 80px -8px oklch(0.3 0.02 255 / 0.22); + --glow-accent: 0 0 72px -16px color-mix(in oklab, var(--blue-deep) 26%, transparent); + --glow-secondary: 0 0 72px -16px color-mix(in oklab, var(--cyan-deep) 24%, transparent); + --glow-ai: 0 0 72px -16px color-mix(in oklab, var(--violet-deep) 25%, transparent); +} diff --git a/stacks/homepage/theme/skyfall.css.in b/stacks/homepage/theme/skyfall.css.in new file mode 100644 index 0000000..9061fbd --- /dev/null +++ b/stacks/homepage/theme/skyfall.css.in @@ -0,0 +1,238 @@ +/* Homepage — Australis Skyfall theme. + * + * SOURCE OF TRUTH: this file plus `theme/colors.css`, `theme/layout.css` and + * `theme/typography.css`, which are vendored VERBATIM from the Australis + * Skyfall handoff bundle. Do not hand-edit `conf/custom.css` — it is + * generated. Run `theme/build.py` after changing anything here. + * + * WHY A BUILD STEP AT ALL: 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/Supreme-400.woff2` would 404 — the face has to arrive inside + * the stylesheet as a data: URI. The build inlines it. + * + * WHICH FACES, AND WHY NOT ALL THREE: Skyfall specifies Bespoke Sans + * (display), Supreme (body/UI) and Victor Mono (code/data). Only Supreme is + * embedded. A link dashboard has no display type — nothing here is a headline + * or a hero number — and Victor Mono ships as 2.4 MB TTF statics per cut, + * which is 30x this whole stylesheet for the handful of latency figures on + * the cards. Both are named in the stacks below so they resolve if they ever + * get vendored. + * + * DEVIATIONS FROM THE SYSTEM, STATED PLAINLY: + * + * 1. Skyfall says "no photography, no textures" for backgrounds, and permits + * exactly one decorative motif: a subtle aurora gradient, on hero and + * empty-state areas ONLY, "never behind body text blocks". This dashboard + * IS a body-text block, and it carries a generated aurora image behind it. + * That is a real departure, taken on the operator's explicit instruction + * to generate a background with Arbo. It is mitigated, not waved away: + * the image is abstract with no subject (Arbo's `t2i-ui-background` + * workflow), strictly cool-temperature per the imagery rule, and pinned + * to low opacity so card contrast is never the thing that suffers. + * If it still reads as busy, the honest fix is to drop the image and let + * `--surface-sunken` be the canvas, which is what the system actually asks + * for. + * + * 2. Homepage renders service icons as full-colour vendor logos. Skyfall + * wants one cool, technical icon family. Not fixable from CSS without + * desaturating every logo into illegibility, so the icons stay as they + * are. + * + * SPECIFICITY: Homepage is Tailwind-generated, so utilities win on equal + * specificity. Every `!important` here is load-bearing; removing one silently + * reverts that rule to the stock theme. + */ + +/* @@FONTS@@ */ + +/* ============================================================ + Skyfall tokens — vendored verbatim from the handoff bundle. + ============================================================ */ + +/* @@TOKENS@@ */ + +/* ============================================================ + Homepage bindings — the only part of this file that is ours. + Everything above is Skyfall; everything below maps Skyfall's + semantic layer onto Homepage's DOM. Never hardcode a hex here: + the system's rule is that UI consumes --surface-*/--text-*/ + --border-*/--accent*/status tokens, not raw values. + ============================================================ */ + +body, +#page_wrapper, +#page_container { + background-color: var(--surface-sunken) !important; + color: var(--text-body) !important; + font-family: var(--font-body) !important; + font-size: var(--text-base) !important; + line-height: var(--leading-normal) !important; +} + +::selection { + background: var(--selection-bg); + color: var(--selection-fg); +} + +/* ---------- header chrome ---------- + Compact chrome per the negative-space rule: --pad-chrome, not --pad-content. */ +#information-widgets .widget-container, +#information-widgets .information-widget-search { + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle) !important; + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; + padding: var(--pad-chrome) !important; +} + +#information-widgets .information-widget-search input { + background: transparent !important; + color: var(--text-body) !important; + font-family: var(--font-body) !important; +} + +#information-widgets .information-widget-search input::placeholder { + color: var(--text-faint) !important; +} + +/* Telemetry is data — the system says data is always mono. */ +.information-widget-resource .resource-value, +.service-block, +.service-stats { + font-family: var(--font-mono) !important; + font-variant-numeric: tabular-nums !important; +} + +/* ---------- tabs ---------- + The active rail is one of only two sanctioned accent expressions: + a 2px accent bar plus an --accent-soft fill. No glow — glows are + reserved for hero moments, and a tab is not one. */ +#myTab li button { + color: var(--text-muted) !important; + font-family: var(--font-body) !important; + font-weight: var(--weight-medium) !important; + border-radius: var(--radius-md) !important; + transition: color var(--duration-fast) var(--ease-out), + background var(--duration-fast) var(--ease-out) !important; +} + +#myTab li button:hover { + color: var(--text-body) !important; + background: var(--accent-soft) !important; +} + +#myTab li button[aria-selected="true"] { + background: var(--accent-soft) !important; + color: var(--text-heading) !important; + box-shadow: var(--rail-active) !important; +} + +/* ---------- group headers ---------- + ALL-CAPS is permitted only for tiny eyebrow labels — this is that case. */ +.service-group-name, +.bookmark-group-name { + color: var(--text-faint) !important; + font-family: var(--font-body) !important; + font-size: var(--text-xs) !important; + font-weight: var(--weight-semibold) !important; + letter-spacing: var(--tracking-caps) !important; + text-transform: uppercase !important; +} + +/* ---------- cards ---------- + The depth recipe, and it is not optional: crisp 1px hairline AND a + two-layer soft shadow. Never one without the other on a floating + surface — a card with only a border reads flat, one with only a + shadow reads smudged. */ +.service-card, +.bookmark-list li > a { + background: var(--surface-card) !important; + border: 1px solid var(--border-subtle) !important; + border-radius: var(--radius-lg) !important; + box-shadow: var(--shadow-sm) !important; + transition: background var(--duration-fast) var(--ease-out), + border-color var(--duration-fast) var(--ease-out), + box-shadow var(--duration-base) var(--ease-out) !important; +} + +/* Hover: surfaces lighten one step, interactive cards lift sm -> md. */ +.service-card:hover, +.bookmark-list li > a:hover { + background: var(--surface-raised) !important; + border-color: var(--border-default) !important; + box-shadow: var(--shadow-md) !important; +} + +.service-name, +.bookmark-name { + color: var(--text-heading) !important; + font-weight: var(--weight-semibold) !important; + letter-spacing: var(--tracking-normal) !important; +} + +.service-description, +.bookmark-description { + color: var(--text-muted) !important; + font-size: var(--text-sm) !important; + line-height: var(--leading-snug) !important; +} + +/* ---------- status ---------- + Semantic colour is the whole point: the system communicates status with + colour and icons, never emoji, and accents are semantic-ONLY. Stock + Homepage paints every pill the same slate, which throws away the signal. */ +.service-tag, +.service-block, +.service-stats { + background: var(--surface-raised) !important; + border: 1px solid var(--border-subtle) !important; + border-radius: var(--radius-md) !important; + color: var(--text-muted) !important; + font-size: var(--text-2xs) !important; +} + +.status-online, +.status-healthy, +.status-running, +.status-started { + color: var(--success-text) !important; + background: var(--success-soft) !important; +} + +.status-offline, +.status-unhealthy, +.status-dead, +.status-error { + color: var(--danger-text) !important; + background: var(--danger-soft) !important; +} + +.status-exited, +.status-paused, +.status-partial, +.status-unknown, +.status-not-found { + color: var(--warning-text) !important; + background: var(--warning-soft) !important; +} + +/* ---------- focus ---------- */ +a:focus-visible, +button:focus-visible, +input:focus-visible { + outline: none !important; + box-shadow: var(--focus-ring) !important; + border-radius: var(--radius-sm) !important; +} + +/* ---------- motion ---------- + "Respect reduced-motion" is in the system's motion rule, not an extra. */ +@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; +}