--- version: alpha name: steadywick-design description: "A warm unbleached-wax canvas (#ece4d8) with near-black ink (#2b241c), close in family to the cream systems built earlier the gallery's history but warmer and more amber-leaning than either. Amber wax (#96530f) is the working accent and the literal color of a lit flame's glow, smoke slate (#4f605d) marks status and nothing else. Cormorant Garamond carries every headline in an elegant literary serif, Albert Sans carries prose and controls. The homepage pours one candle in four real scent layers, then lights the centered wick." --- ## Brand Positioning Steadywick pours scented candles, and it exists because most candle sites sell a mood, a bathtub photo, "manifest your intentions" copy, instead of the one thing that actually matters when you're about to burn something in your house: what's in the wax. The bet here is to show a real four-layer pour, in the order it's actually poured, and name real scent notes instead of a vibe. If a component doesn't correspond to a real layer, a real scent, or the jar itself, it doesn't belong here. colors: accent: "#96530f" accent-alt: "#4f605d" ink: "#2b241c" ink-muted: "#6b6560" canvas: "#ece4d8" ## Logo / Wordmark System The mark is the jar in profile: a rounded rectangle body with a centered wick line and a small flame above it, unlit in most contexts, lit only where the mark specifically needs to say "burning now." It is not a candlestick, a sparkle, or a bathtub icon. ```svg ``` - **Lockup**: mark, then a `0.55rem` gap, then "Steadywick" in Cormorant Garamond 600, sentence case. Mark always left of the wordmark. - **Minimum size**: mark not smaller than `14px` tall, below that the flame and the wick merge. - **Clearspace**: empty margin equal to the mark's own width on all four sides. - **Don't**: don't recolor the flame to anything but `--accent`. Don't draw the flame as a teardrop with a hole in it, keep it a single simple pointed shape. Don't add smoke wisps or sparkle, the mark is a still jar, not an animated one. ## Color System ### Roles | Role | Token | Value | Used for | |---|---|---|---| | Canvas | `--bg` | `#ece4d8` | Page background | | Surface | `--panel` | `#ffffff` | Nav, scent cards, table, form card, jar glass | | Surface raised | `--raised` | `#f4efe5` | Row hover, cta band | | Border | `--border` | `#ded2bd` | Card edges, table rules, dividers | | Border strong | `--border-strong` | `#c9b89a` | Decorative-only edges | | Border UI | `--border-ui` | `#8a7a5f` | Every interactive boundary: secondary button, input, select, jar and wick outline | | Ink | `--ink` | `#2b241c` | Headlines, body copy, table cells | | Ink muted | `--dim` | `#6b6560` | Labels, meta lines, helper text | | Amber | `--accent` | `#96530f` | Primary button, mark's flame, links | | Slate | `--accent-alt` | `#4f605d` | Second-page status | Amber is the flame's own color, the primary button and the mark's flame share it because that's this brand's one working color. The four wax layer colors on the jar itself, near-black cedar through pale vanilla cream, are real illustrative material colors, not system tokens, the same exception every material-specific fill in this gallery already establishes. ### Contrast (computed from the hex values above via WCAG relative luminance) | Pairing | Ratio | Passes | |---|---|---| | `--ink` on `--bg` (headlines, body copy) | 12.14:1 | AAA | | `--ink` on `--panel` (card copy, table cells) | 15.31:1 | AAA | | `--dim` on `--bg` (labels, helper text) | 4.56:1 | AA | | `--dim` on `--panel` | 5.74:1 | AA | | `--dim` on `--raised` | 5.01:1 | AA | | `--accent` on `--bg` (links, price text) | 4.70:1 | AA | | `--accent` on `--panel` | 5.93:1 | AA | | `--accent` on `--raised` | 5.17:1 | AA | | `--accent-alt` on `--bg` | 5.26:1 | AA | | `--accent-alt` on `--panel` | 6.64:1 | AA | | `--accent-alt` on `--raised` | 5.79:1 | AA | | light label (`#fff8f0`) on `--accent` fill (primary button) | 5.63:1 | AA | | `--border-ui` control edge on `--bg` (non-text, inputs) | 3.31:1 | AA (1.4.11) | | `--border-ui` control edge on `--panel` (non-text, secondary button) | 3.18:1 | AA (1.4.11) | Both accents were darkened from an initial pass, `#a85f14` and `#5c6e6b`, which measured 3.86:1 and 4.27:1 on canvas, short of the small-text 4.5:1 minimum, before this system shipped, not after. `--border-strong` is kept for decorative-only uses, never a control boundary, `--border-ui` exists specifically so a real control never inherits that weaker value. typography: display: fontFamily: Cormorant Garamond fontWeight: 600 body: fontFamily: Albert Sans fontWeight: 400 ## Type Scale | Token | Size | Weight | Family | Line-height | Letter-spacing | Used for | |---|---|---|---|---|---|---| | `--text-display` | `clamp(2.2rem, 5vw, 3.6rem)` | 600 | Cormorant Garamond | 1.1 | 0 | Homepage H1 | | `--text-page-h1` | `clamp(2rem, 4vw, 2.7rem)` | 600 | Cormorant Garamond | 1.1 | 0 | Second-page H1 | | `--text-h2` | `1.5rem` | 600 | Cormorant Garamond | 1.15 | 0 | Section headings | | `--text-h3` | `1.1rem` | 600 | Cormorant Garamond | 1.2 | 0 | Scent names | | `--text-body` | `1rem` | 400 | Albert Sans | 1.6 | 0 | Paragraph copy | | `--text-small` | `0.88rem` | 400 | Albert Sans | 1.55 | 0 | Table cells, footer, meta lines | | `--text-label` | `0.78rem` | 700 | Albert Sans | 1 | 0.05em, uppercase | Form labels, table headers | Cormorant Garamond's elegant literary serif reads as considered rather than mass-produced, reserved for headlines only, never body copy where its light weight would fight legibility at length. Albert Sans carries every sentence and every control at 400 for prose and 700 for labels. ## Spacing Scale Base unit `8px`. Tokens in use: `--space-2: .5rem`, `--space-3: 1rem`, `--space-4: 1.5rem`, `--space-6: 2rem`, `--space-8: 3rem`, `--space-12: 4rem`. ## Shape `--radius: 6px` on cards and panels, `--radius-sm: 4px` on buttons and inputs. Soft enough to read as a poured, cooled surface, not sharp glass. ## Iconography No icon library. The only non-text graphics are the logo mark and the hero's own jar-and-pour illustration (hand-built SVG). A scent's pour order is stated in text ("poured first", "poured last"), never implied by position alone. ## Motion Principles Scroll pours one candle in four real layers. Each layer is a fixed-geometry rect clipped to the jar's rounded interior, scaling from `0` to `1` on its vertical axis with a bottom-anchored transform origin, so each one visibly fills upward from where the layer below it ends, the same technique this gallery has used for jar-and-layer mechanisms before, applied here to a genuinely different material and a genuinely different final beat: instead of a dome sealing, a flame ignites. The wick line is present from the first frame, unlit, so the jar never looks incomplete before pouring starts. The moment a layer finishes filling, the card for its scent slides in below. Once all four layers have landed, the flame fades in at the wick's tip. One-shot pour: nothing loops, and every scent is written out in the card grid regardless of scroll or script state. The scroll trigger measures the page's real available scroll room below the stage at load, minus a `16px` safety margin, and caps the distance at that figure (never more than `500px`). A viewport tall enough to leave under `20px` of room, or a `prefers-reduced-motion` visitor, gets the fully-poured, lit candle immediately with no scroll listener attached at all. ## Voice & Tone Warm, specific about scent notes, no mystical self-care language. Steadywick talks like someone who actually poured the wax, not like a brand selling a mood. In practice: - **Primary button**: "Pour a candle", not "Manifest your best self" - **Scent description**: "Fruit up front, tannic tea underneath, not sweet the way most fig candles are.", not "An enchanting blend of fig and comfort" - **Base layer note**: "The base layer, poured first, deepest and slowest to fade.", stated as a fact about pour order, not poetry - **Cure time**: "Pouring today, cure time is about 48 hours.", not "Handcrafted with love" - **Top layer note**: "What you smell first when you light it." The tell that a sentence is off-brand: it reaches for a self-care or wellness abstraction instead of naming the actual scent note or the actual pour order. ## Accessibility Baseline - **Focus ring**: `2px solid var(--accent)` at `2px` offset via `:focus-visible` on every link, button, input, and select, never removed. - **Reduced motion**: honored on the pour and the flame ignition, as described under Motion Principles. No scroll listener is attached at all when reduce is set, or when there's no real scroll room to attach one to meaningfully. - **The jar graphic is `aria-hidden`.** It's a continuously changing illustration tied to scroll position. Nothing is communicated by it alone: every layer's name, pour order, and scent description is in the card grid below in plain markup at all times. - **Tap targets**: `44px` minimum height on every button, nav link, and form control. - **Structure**: one `