Components

Style guide

Components

Every primitive this theme owns. Compare against the Figma frames before any module is built. Legend: ✓ read from Figma · ~ derived or theme-authored · ! placeholder, asset outstanding.

Source: ClYG21FApa9XPMXJAZhor1 (home) and ijGjrbLrwXmkSHi4Qn4rE4 (sub-pages). The file has no Figma Variables and no Local Styles, so every value was read from a node fill.

Colour

primary #E4462B ✓ CTA fill, eyebrows, accent words (10911:78/125)
primary-700 #C93A22 ~ NOT in the design — AA alternate, unused
secondary #298B97 ✓ announcement bar, form rules (10911:369/285)
secondary-700 #24818D ~ NOT in the design — AA alternate, focus rings
tertiary #4DB8C8 ✓ photo tint only, at 15–20% (10911:141/202)
atg-gray-50 #F3F8FA ✓ off-white text + form panel (10911:75)
atg-gray-100 #C8D6DB ~ DERIVED — muted text on dark
atg-gray-300 #5E7078 ~ DERIVED — muted text on light
atg-gray-900 #0F1D25 ✓ headings + body on light (10911:126)
danger #B3261E ~ NOT in the design — form errors only
white #FFFFFF ✓ page background

Six brand values. Everything else is an opacity modifier — bg-atg-gray-50/80 (form panel), bg-tertiary/15 and /20 (photo tints), text-white/85 (review count). Adding a palette entry is almost always the wrong fix.

Contrast audit

Three pairings in the design as drawn fall below the WCAG AA 4.5:1 floor for normal-size text. They are shipped as designed — these are brand colours and changing them is the client's call, not ours. The -700 tokens are defined and ready if that call is made.

Measured against the surface each is actually used on
Pairing Ratio AA Where
atg-gray-900 on white 17.2:1 PASS body copy
atg-gray-300 on white 5.11:1 PASS muted copy
secondary-700 on white 4.56:1 PASS AA alternate
primary-700 on white 4.77:1 PASS AA alternate
primary on white — LARGE (36px) 4.03:1 PASS hero accent word — passes 3:1
primary on white — NORMAL (16px) 4.03:1 FAIL eyebrows, "Explore Service" links
atg-gray-50 on primary — 16px 3.77:1 FAIL every .btn label
secondary on white — 14px / 12px 4.01:1 FAIL form labels, consent copy

Type scale

Poppins throughout — the design uses exactly one family, in five weights (300 / 400 / 500 / 600 / 700), no italics. ⚠ H1 and H2 are the same size. There is no larger display step anywhere in the design; both render at 36px/42px. The scale is deliberately flat: 36 / 24 / 16, plus 14 and 12 for forms.

Heading 1 — the quick brown fox

h1 · 36px at 2xl · ✓ Poppins Medium · lh 42 · uppercase (10911:75)

Heading 2 — the quick brown fox

h2 · 36px at 2xl · ✓ SAME SIZE AS H1 — the design has no larger step (10911:126)

Heading 3 — the quick brown fox

h3 · 24px at 2xl · ✓ Poppins Medium · lh 1.5 · uppercase (10911:144)

Heading 4 — the quick brown fox

h4 · 20px at 2xl · ~ interpolated — does not appear in any frame

Heading 5 — the quick brown fox

h5 · 18px at 2xl · ~ interpolated — does not appear in any frame

Heading 6 — the quick brown fox

h6 · 16px at 2xl · ~ interpolated — does not appear in any frame

Uppercase is global on headings — every heading in every frame is set that way, including blog post titles (12946:3313), so there is no blog exemption. The .h1–.h6 aliases exist so a template can take a size without breaking semantic order:

An <h3> carrying .h2

Body copy

Poppins Light 300 at 16px/24px with 0.03em tracking — ✓ read from every paragraph in the design (10911:76, 128). That tracking is tokenised as tracking-body rather than repeated as an arbitrary value. Here is an inline link, some bold text, some emphasis, and inline code.

  • Unordered list item with a primary marker
  • Second item
  1. Ordered list item
  2. Second item
A blockquote — ~ theme-authored. No frame in the design contains one.
// preformatted block
.btn { background: #E4462B; }

Section heading block

✓ Eyebrow is Poppins Regular 16px uppercase in primary, 10px above the heading, no tracking (10911:125). Five uses across the homepage, all identical. This design has no decorative rule flanks, so there are no has-lines-* modifiers.

our services

Solutions Designed Around Your Space

Accent words are marked by colour only — no weight or style change (10911:75). Editors produce them by wrapping in <span>, which is why headings are echoed through wp_kses_post().

our advantage

Why Choose Us

Over photography the eyebrow stays orange — the design keeps it that way (I10911:202) — but accent words go off-white, because orange on a dark photo stops reading as an accent.

Buttons and links

✓ #E4462B fill and border, 10px radius, 19/12 padding, Poppins Medium 16px, label #F3F8FA, sentence case (10911:78). Four identical instances across the homepage. ~ Hover is theme-authored — the design shows resting states only, for every interactive element on the page.

Outline on dark ~ .btn-white is NOT in this design — the homepage pairs the CTA with a plain phone number, not a second button. Kept because the shared module layer expects an alternate to exist.

✓ Text link with trailing arrow — Poppins Medium 16px, underlined at rest, −0.1px tracking (10911:147). The underline is why hover shifts the gap and the colour rather than adding one.

Explore Service

✓ Phone pairing — 46px circular glyph + Poppins Bold 20.6px number (10911:82). Shared partial, reused by the hero, every inner banner and the cta_band module.

Service card

✓ Full-bleed photo under two stacked gradients — a vertical black wash (16% → 80%, stop at 82%) for legibility, plus a flat tertiary/15 tint that unifies the six photos (10911:141). No radius, no border in the design.

Glass Sliding Doors

Transform your interiors with elegant glass sliding door systems designed for smooth operation and contemporary style.

Explore Service

Glass Sliding Doors

Transform your interiors with elegant glass sliding door systems designed for smooth operation and contemporary style.

Explore Service

Glass Sliding Doors

Transform your interiors with elegant glass sliding door systems designed for smooth operation and contemporary style.

Explore Service
! Shown without photographs — .surface-card expects an <img> as its first child. The dark fill stands in.

Grid

Flex-wrap with negative-margin gutters — house convention, not CSS Grid, even though the Figma uses auto-layout. Row -mx-3 xl:-mx-4, cell px-3 xl:px-4.

1/2
1/2
1/3
1/3
1/3
1/4
1/4
1/4
1/4

Accordion

✓ Used twice in the design — the About page mission/vision/values panel over a photo (12946:99), and the FAQs page as a two-column list with circular +/− buttons (12946:2408). Markup uses the shared JS hook classes; no new JavaScript.

At Atlantic Glass, our mission is to deliver exceptional glass solutions with precision and care.

Editor output (.default-block)

Wraps WYSIWYG and Gutenberg content in modules and pages. Distinct from Tailwind Typography's prose — never both on one element. The blog single (12946:3313) leans on this heavily: colour-coded tables, nested lists, inline links.

A heading inside editor content

A paragraph with an underlined link and bold copy.

  • List item one
  • List item two
CategoryWind speedDamage
174–95 mphMinimal
296–110 mphModerate

Icon list

  • Storefront glass installation
  • Storefront glass repair
  • Custom mirrors
! The bullet glyph is a placeholder codepoint until the icomoon set lands. Note the design's own bulleted list (10911:520) uses a plain 6px orange dot, not a glyph — this class is for WYSIWYG content.

Icon set

! Not yet exported — blocking.

Every icon in the design is currently an exported SVG in Figma, not a font glyph. Nine are needed: long right arrow, the rotated arrow on “Explore Service”, phone, envelope, location pin, star, quote mark, chevron, and the announcement-bar glyph.

Export once and commit selection.json. Re-exporting renumbers codepoints and silently breaks every content-['\eXXX'] rule in the component layer.

Forms

⚠ Phase 8 — geometry not yet rebuilt.

forms.css still carries the cloned scaffold's filled 56px inputs with an 8px radius. Atlantic Glass wants the opposite: a 34px unfilled field with a 1px #298B97 bottom border and no radius at all (10911:285). Colours have been flipped to light-theme so nothing is invisible in the meantime.

Two form styles exist in the design — Contact (12946:4217) uses boxed inputs with placeholders; the footer panel uses underline-only fields with labels above. Confirm both are intended.

Pagination

Breadcrumbs

~ NOT in the design — no frame shows breadcrumbs. Kept because Yoast is installed and they help orientation on a 90-page site.

Spacing rhythm

Measured section gaps on the 1440 frame run 120–160px, roughly 1.5× the canonical house rhythm, which tops out at 80px. Rather than replace the canonical strings, a 2xl step was added:

my-9 sm:my-12 lg:my-16 xl:my-20 2xl:my-30   /* container section */
py-12 lg:py-16 xl:py-20 2xl:py-30           /* full-bleed section */
-mx-3 xl:-mx-4                              /* grid row gutter */
gap-y-6 xl:gap-y-8                          /* grid row wrap */

Outstanding before sign-off

  1. No mobile or tablet frames exist. The Figma has one 1440 frame. Every sub-1440 value in this theme is derived, and marked ~ in the CSS. One mobile frame removes all of it.
  2. No hover or focus states anywhere in the design. House defaults applied and labelled.
  3. Icomoon set not exported. Blocks the glyph map.
  4. Sticky header undefined, and two unexplained near-identical nav frames.
  5. Three AA contrast failures — see the audit above. Decision needed.
  6. Copy errors to fix at source: “At Atlantis Glass” (10911:129), “WILMINGTON, NCLUSION” (FAQs CTA), and “Glassolutions” — another company's name — in the footer form's SMS consent text.