# Sci-Fi Clean theme — codeless .bnp manifest (WO-WZ-021 Phase B1). # Synthesized into manifest.pb by `ninja plugin build` (no plugin.wasm). theme_presets: presets.json bundled_fonts: fonts.json master_pages: master_pages.json system_templates: - key: scifi-clean title: Sci-Fi Clean description: "Minimalist futurist theme for aerospace, robotics, and R&D — off-white surfaces, technical blue, signal-orange accents, mono numerals." page_templates: - system: scifi-clean key: default title: Default description: "Standard cleanroom layout with header rail, main column, and footer instrument panel." slots: [header, main, footer] - system: scifi-clean key: landing title: Landing description: "Hero diagram + spec strip + CTA banner." slots: [hero, specs, main, cta, footer] - system: scifi-clean key: article title: Article description: "Narrow column with rail metadata and figure margin." slots: [header, rail, main, footer] - system: scifi-clean key: full-width title: Full Width description: "Edge-to-edge schematic surface for diagrams and dashboards." slots: [header, main, footer] template_overrides: - { template: scifi-clean, block: heading } - { template: scifi-clean, block: text } - { template: scifi-clean, block: button } email_wrappers: - scifi-clean css: input_css_append: | /* === Sci-Fi Clean: font-family fallback variables === * The site admin assigns real fonts via the typography settings; until then, * the variables fall through to the stacks below. 'Space Grotesk', 'Inter', * and 'JetBrains Mono' are spec §5 recommendations, available in the Google * Fonts picker. */ :root { --font-heading: "Space Grotesk", "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif; --font-body: "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif; --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } /* === Sci-Fi Clean: utilities === * Hairline rules and a translucent blueprint grid are the two utility classes * the theme uses heavily. Tailwind's defaults cover everything else. */ .hairline { border: 1px solid hsl(var(--border)); } .hairline-t { border-top: 1px solid hsl(var(--border)); } .hairline-b { border-bottom: 1px solid hsl(var(--border)); } .bg-grid { background-color: hsl(var(--background)); background-image: linear-gradient(to right, hsl(var(--border) / 0.6) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--border) / 0.6) 1px, transparent 1px); background-size: 32px 32px; } .mono-numerals { font-family: var(--font-mono); font-variant-numeric: tabular-nums; } .tabular-nums { font-variant-numeric: tabular-nums; } .scrim { position: relative; } .scrim::before { content: ""; position: absolute; inset: 0; background-color: hsl(var(--background) / 0.65); pointer-events: none; } .scrim > * { position: relative; z-index: 1; } /* === Sci-Fi Clean: focus rings === * Use the --ring token (a precise technical blue) for all focus states so * the keyboard cursor is visible against either preset. */ .scifi-focus:focus-visible { outline: 2px solid hsl(var(--ring)); outline-offset: 2px; } /* === Sci-Fi Clean: chevron === * Right-arrow chevron used in ScifiButtonBlock; encoded as Unicode so it * never breaks across renderers (UAT §13.14). */ .scifi-chevron::after { content: " \2192"; font-family: var(--font-mono); margin-left: 0.5rem; } /* === Sci-Fi Clean: heading family === * The host shadcn layer doesn't apply --font-heading by default; wire it * up here for the four heading levels we render. */ .scifi-h1, .scifi-h2, .scifi-h3, .scifi-h4 { font-family: var(--font-heading); font-feature-settings: "ss01" on; } .scifi-body { font-family: var(--font-body); } .scifi-mono { font-family: var(--font-mono); }