import type { BrandPreset, CustomBrandInputs } from "./index.js"; export interface BrandColorExtra { /** Human label (e.g. "Complementary", "STF Deep Green"). */ label: string; /** Six-digit hex with leading `#` — see {@link isHexColor}. */ hex: string; /** Optional one-line description. */ description?: string; } export interface BrandPresetSpec { preset: BrandPreset; brandName: string; brandNameRule: string; primaryColor: string; accentColor: string; typographyRule: string; domains: readonly string[]; /** * Default GitHub repo OWNER for `gh repo create`. `null` for `custom` (caller * must supply explicitly). Internal Z2W brands map to `zero2webmaster`; STF * maps to `savethefrogs`; Bansuri Bliss maps to `bansuribliss`. * * Named `githubOrg` for backward compatibility with existing briefs and * `--input` files, which spell the field `GitHub org:`. **The value is an * account name, not necessarily an Organization** — see `accountType`. */ githubOrg: string | null; /** * Whether `githubOrg` names a GitHub **User** account or an **Organization**. * * Load-bearing, not trivia. Every account in Kerry's portfolio is a `User` * (verified 2026-08-02: `gh api users/ --jq .type` returns `User` for * `zero2webmaster`, `savethefrogs`, `bansuribliss` and `kerrykriger`, and * `gh api user/orgs` is empty — there is no Organization anywhere). The * emitted brand block used to say "GitHub org default", which sent two * different agents to `/organizations/...` 404s inside five days while * setting up a GitHub App and a webhook. `"unknown"` is the honest answer * for a caller-supplied owner we have not checked. */ accountType: "user" | "organization" | "unknown"; author: string; authorUrl: string; /** Additional brand colors beyond primary + accent (purple, gold, ...). */ extras: readonly BrandColorExtra[]; /** Related Claude skill to cross-link in CLAUDE.md when relevant. */ relatedSkill?: string; /** Free-form notes appended at the bottom of the brand block. */ notes?: readonly string[]; /** * True when one or more required brand values is unresolved (e.g. the * bansuri-bliss stub). The brand-block generator emits TODO markers and a * pointer back to the skill so the gap is impossible to miss. */ isStub: boolean; } export declare const DEFAULT_AUTHOR = "Dr. Kerry Kriger"; export declare const DEFAULT_AUTHOR_URL = "https://zero2webmaster.com/kerry-kriger"; export declare const DEFAULT_TYPOGRAPHY_RULE = "Large, easy-to-read type per Z2W standing organization instruction (body 18px+, line-height >= 1.5)."; /** * The typography rule emitted for a `custom` brand. * * Same substance as {@link DEFAULT_TYPOGRAPHY_RULE} — it is good practice for * anyone — but stated WITHOUT attributing it to a "Z2W standing organization * instruction". A custom brand is by definition somebody else's organisation, * and telling them their type rule comes from Zero2Webmaster is both wrong and * a small piece of the same false-attribution defect as the copyright line. */ export declare const CUSTOM_TYPOGRAPHY_RULE = "Large, easy-to-read type (body 18px+, line-height >= 1.5)."; /** True iff `s` is a `#RGB` or `#RRGGBB` hex color literal. */ export declare function isHexColor(s: string): boolean; export declare const SAVE_THE_FROGS_PRESET: BrandPresetSpec; export declare const BANSURI_BLISS_PRESET: BrandPresetSpec; export declare const ZERO2WEBMASTER_PRESET: BrandPresetSpec; export declare const BRAND_PRESETS: Readonly, BrandPresetSpec>>; /** * Build a one-off BrandPresetSpec from user-supplied custom-brand inputs. * * Per [[instantiate-z2w-project]] SKILL.md, `custom` is never persisted back * into the skill — one-offs aren't presets. The typography rule defaults to * the Z2W standing org rule, and the GitHub owner defaults to `null` (caller * must set it explicitly via the GitHub owner input). * * `accountType` is deliberately `"unknown"`: a caller-supplied owner has not * been checked, and claiming either type would be a guess the emitted docs * would then state as fact. The emitted block tells the reader how to check. */ export declare function buildCustomBrandSpec(inputs: CustomBrandInputs, githubOrg?: string | null): BrandPresetSpec; /** * Resolve the brand spec for a given preset. For `custom`, `customInputs` is * required and `githubOrg` may be passed through to fill the spec's * githubOrg field. */ export declare function getBrandSpec(preset: BrandPreset, customInputs?: CustomBrandInputs, githubOrg?: string): BrandPresetSpec; /** * Render a brand spec as a self-contained markdown block suitable for * prepending to a scaffolded project's CLAUDE.md (per the skill's Step 5). * * Stub presets (e.g. bansuri-bliss) emit visible `_TODO_` markers for the * unresolved values plus the spec's notes — so the gap is impossible to miss * when the scaffolded project is opened. */ export declare function renderBrandBlock(spec: BrandPresetSpec): string;