--- version: alpha name: punty-design description: "A near-black warm canvas (#171310) with warm cream ink (#f0ebe4), furnace orange-red (#e0562a) as the working accent and the literal color of glass at working temperature, cool glass-aqua (#4fa8a8) marking the finished, cooled material and nothing else. Yeseva One carries every headline in a bold display serif, Manrope carries prose and controls. The homepage shapes one piece through four real hot-shop stages, each glass form on the pipe genuinely different geometry, cooling in color from furnace-hot toward its finished tone." --- ## Brand Positioning Punty runs a glassblowing studio, and it exists because most hot-shop sites reach for either a mystical "fire and breath" framing or a single glowing-furnace photo, neither of which explains what a glassblower actually does with their hands. The bet here is to show the real four-stage sequence, gather, marver, blow, shape, and name the actual physical reason each one exists. If a component doesn't correspond to a real stage, a real technique, or the pipe itself, it doesn't belong here. colors: accent: "#e0562a" accent-alt: "#4fa8a8" ink: "#f0ebe4" ink-muted: "#b0a89d" canvas: "#171310" ## Logo / Wordmark System The mark is a blowpipe in profile with a small gather glowing at its tip. It is not a furnace, a finished vase, or a glassblower silhouette. ```svg ``` - **Lockup**: mark, then a `0.55rem` gap, then "Punty" in Yeseva One, sentence case. Mark always left of the wordmark. - **Minimum size**: mark not smaller than `18px` tall, below that the pipe and the gather merge. - **Clearspace**: empty margin equal to the mark's own height on all four sides. - **Don't**: don't recolor the gather to anything but `--accent`, it's always furnace-hot orange, never the cooled aqua. Don't draw the pipe at a steeper angle than the mark's own, a punty is worked nearly horizontal, not vertical. Don't add flame or spark marks around the gather. ## Color System ### Roles | Role | Token | Value | Used for | |---|---|---|---| | Canvas | `--bg` | `#171310` | Page background | | Surface | `--panel` | `#201a16` | Nav, stage cards, table, form card | | Surface raised | `--raised` | `#271f1a` | Row hover, cta band (large text only, see contrast note) | | Border | `--border` | `#2c241e` | Card edges, table rules, dividers | | Border strong | `--border-strong` | `#3d322a` | Decorative-only edges, bench plank | | Border UI | `--border-ui` | `#8a7d6f` | Every interactive boundary: secondary button, input, select, pipe stroke | | Ink | `--ink` | `#f0ebe4` | Headlines, body copy, table cells | | Ink muted | `--dim` | `#b0a89d` | Labels, meta lines, helper text | | Furnace | `--accent` | `#e0562a` | Primary button, mark's gather, stage-one glass fill | | Glass-cool | `--accent-alt` | `#4fa8a8` | Stage-four glass fill, timing labels, status | The gather's own fill color tracks real temperature across the four stages, from furnace orange-red at stage one through progressively cooler oranges at stages two and three, landing on the cool aqua only at stage four, once the piece is actually shaped and no longer glowing hot. The two system accents are the two temperature extremes of the same material, not a decorative pair. ### Contrast (computed from the hex values above via WCAG relative luminance) | Pairing | Ratio | Passes | |---|---|---| | `--ink` on `--bg` (headlines, body copy) | 15.57:1 | AAA | | `--ink` on `--panel` (card copy, table cells) | 14.51:1 | AAA | | `--dim` on `--bg` (labels, helper text) | 7.86:1 | AAA | | `--dim` on `--panel` | 7.86:1 | AAA | | `--dim` on `--raised` | 6.89:1 | AAA | | `--accent` on `--bg` (links, stage-one label) | 4.87:1 | AA | | `--accent` on `--panel` | 4.53:1 | AA | | `--accent` on `--raised` (large text and UI only, see below) | 4.27:1 | AA (large/UI only) | | `--accent-alt` on `--bg` (timing labels, status) | 6.60:1 | AA | | `--accent-alt` on `--panel` | 6.14:1 | AA | | `--accent-alt` on `--raised` | 5.78:1 | AA | | dark label (`#1c0a03`) on `--accent` fill (primary button) | 5.06:1 | AA | | `--border-ui` control edge on `--bg` (non-text, inputs) | 4.61:1 | AA (1.4.11) | | `--border-ui` control edge on `--panel` (non-text, secondary button) | 4.30:1 | AA (1.4.11) | `--accent` on `--raised` clears large-text and non-text UI use (4.27:1) but falls short of the small-text 4.5:1 minimum, so the cta band, which sits on `--raised`, keeps its heading and body copy in `--ink` and `--dim`, never setting small orange text there, the same constraint this gallery has hit and documented on other systems this batch. `--border-strong` is kept for decorative-only uses, the bench plank, never a control boundary, `--border-ui` exists specifically so a real control never inherits that weaker value. typography: display: fontFamily: Yeseva One fontWeight: 400 body: fontFamily: Manrope fontWeight: 400 ## Type Scale | Token | Size | Weight | Family | Line-height | Letter-spacing | Used for | |---|---|---|---|---|---|---| | `--text-display` | `clamp(2rem, 4.6vw, 3.2rem)` | 400 | Yeseva One | 1.15 | 0 | Homepage H1 | | `--text-page-h1` | `clamp(1.9rem, 4vw, 2.5rem)` | 400 | Yeseva One | 1.15 | 0 | Second-page H1 | | `--text-h2` | `1.5rem` | 400 | Yeseva One | 1.2 | 0 | Section headings | | `--text-h3` | `1.15rem` | 400 | Yeseva One | 1.2 | 0 | Stage names | | `--text-body` | `1rem` | 400 | Manrope | 1.6 | 0 | Paragraph copy | | `--text-small` | `0.88rem` | 400 | Manrope | 1.55 | 0 | Table cells, footer, meta lines | | `--text-label` | `0.78rem` | 700 | Manrope | 1 | 0.05em, uppercase | Form labels, table headers, stage numbers | Yeseva One is a single-weight bold display serif with real presence, matching a material worked at 2000°F, reserved for headlines only. Manrope 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: 4px` on cards and buttons, `--radius-sm: 3px` on inputs. Small and workshop-plain, reading as a bench and a steel marver table, not a decorative rounding choice. ## Iconography No icon library. The only non-text graphics are the logo mark and the hero's own bench-and-pipes illustration (hand-built SVG). A stage's real temperature or technique is always stated in text, never implied by color alone. ## Motion Principles Scroll shapes one piece through four real hot-shop stages, laid out left to right on a bench of pipes. Each stage is a fixed-geometry glass form, positioned at the tip of its own pipe, scaling from `0` to `1` with a slight overshoot as its own scroll segment completes, the same one-shot settle this gallery's other "N items arrive in sequence" systems use. The domain-specific detail is in the geometry and color together: stage one is a small round gather in furnace orange, stage two an oval marvered shape in a slightly cooler orange, stage three a larger hollow-read circle, and stage four a genuinely different, worked final silhouette in the cool glass-aqua, so both shape and color track the real physical process rather than decorating four identical circles. Each stage's static pipe position and its animated scale live on separate nested groups from the first draft, per the lesson carried forward from earlier systems this batch. One-shot sequence: nothing loops, and every stage 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 `520px`). A viewport tall enough to leave under `20px` of room, or a `prefers-reduced-motion` visitor, gets all four stages already shaped and every card already visible, with no scroll listener attached at all. ## Voice & Tone Direct, physically specific, no mystical fire-and-glass poetry. Punty talks like someone who actually works the bench, not a brand selling wonder. In practice: - **Primary button**: "Book the hot shop", not "Discover the ancient art of glass" - **Marvering copy**: "This is what actually makes it round, not the blowing.", a direct correction of the common assumption - **Blowing copy**: "One steady breath, not a big puff.", stated as a technique note, not a dramatic moment - **Shaping copy**: "While the glass is still soft enough to move.", a real time constraint, not poetry - **Status**: "Furnace is hot today, walk-in demos run hourly." The tell that a sentence is off-brand: it reaches for fire-and-breath poetry instead of naming the actual tool, temperature, or physical reason behind a technique. ## 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 glass-shaping sequence, 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 bench-and-pipes graphic is `aria-hidden`.** It's a continuously changing illustration tied to scroll position. Nothing is communicated by it alone: every stage's name, temperature, and 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 `