--- baseline/PROGRESS.md
+++ candidate/PROGRESS.md
@@ -1,19 +1,21 @@
 # Progress
 
-Status: starter repository received
+Status: vertical slice complete
 
 ## Completed
 
-- [ ] Responsive page composition
-- [ ] Filter and URL state
-- [ ] Service detail interaction
-- [ ] Accessible enquiry flow
-- [ ] Content/missing-media resilience
-- [ ] Reduced-motion treatment
-- [ ] Type check
-- [ ] Production build
+- [x] Responsive page composition
+- [x] Filter and URL state
+- [x] Service detail interaction
+- [x] Accessible enquiry flow
+- [x] Content/missing-media resilience
+- [x] Reduced-motion treatment
+- [x] Type check
+- [x] Production build
 
 ## Verification evidence
 
-Record commands and outcomes here. Keep this concise and factual.
+- `npm run check` — pass (`tsc -b --pretty false`, exit 0)
+- `npm run build` — pass (`tsc -b && vite build`, exit 0; dist assets emitted)
 
+Implemented: sticky header + keyboard mobile menu; hero; service explorer with filters synced to `?discipline=`; popstate restore; service selection detail; approach strip; closing CTA; scope-review dialog (focus trap, Escape, validation, success copy); power-quality media fallback; motion with `prefers-reduced-motion`; evaluator `data-testid` hooks preserved.

--- baseline/src/App.tsx
+++ candidate/src/App.tsx
@@ -1,42 +1,673 @@
-import { content } from './content'
+import {
+  useCallback,
+  useEffect,
+  useId,
+  useMemo,
+  useRef,
+  useState,
+  type FormEvent,
+} from 'react'
+import { AnimatePresence, motion, useReducedMotion } from 'motion/react'
+import { content, type Discipline, type Service } from './content'
+
+const DISCIPLINES: Discipline[] = ['all', 'electrical', 'controls', 'reliability']
+
+function parseDiscipline(value: string | null): Discipline {
+  if (value && DISCIPLINES.includes(value as Discipline)) {
+    return value as Discipline
+  }
+  return 'all'
+}
+
+function readDisciplineFromUrl(): Discipline {
+  return parseDiscipline(new URLSearchParams(window.location.search).get('discipline'))
+}
+
+function setDisciplineInUrl(discipline: Discipline, mode: 'push' | 'replace' = 'push') {
+  const url = new URL(window.location.href)
+  url.searchParams.set('discipline', discipline)
+  const next = `${url.pathname}${url.search}${url.hash}`
+  if (mode === 'replace') {
+    window.history.replaceState({ discipline }, '', next)
+  } else {
+    window.history.pushState({ discipline }, '', next)
+  }
+}
+
+function isValidEmail(value: string): boolean {
+  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)
+}
 
 function App() {
+  const reduceMotion = useReducedMotion()
+  const [discipline, setDiscipline] = useState<Discipline>(() =>
+    typeof window !== 'undefined' ? readDisciplineFromUrl() : 'all',
+  )
+  const [selectedId, setSelectedId] = useState<string | null>(null)
+  const [menuOpen, setMenuOpen] = useState(false)
+  const [dialogOpen, setDialogOpen] = useState(false)
+  const [formState, setFormState] = useState({
+    name: '',
+    email: '',
+    projectType: '',
+    summary: '',
+  })
+  const [errors, setErrors] = useState<Record<string, string>>({})
+  const [submitted, setSubmitted] = useState(false)
+
+  const menuToggleRef = useRef<HTMLButtonElement>(null)
+  const mobileMenuRef = useRef<HTMLDivElement>(null)
+  const dialogRef = useRef<HTMLDivElement>(null)
+  const dialogTitleId = useId()
+  const dialogDescId = useId()
+  const openerRef = useRef<HTMLElement | null>(null)
+  const firstFieldRef = useRef<HTMLInputElement>(null)
+  const detailRef = useRef<HTMLElement>(null)
+
+  const filteredServices = useMemo(() => {
+    if (discipline === 'all') return content.services
+    return content.services.filter((s) => s.discipline === discipline)
+  }, [discipline])
+
+  const selectedService: Service | null = useMemo(() => {
+    if (!selectedId) return null
+    return content.services.find((s) => s.id === selectedId) ?? null
+  }, [selectedId])
+
+  useEffect(() => {
+    if (!selectedId) return
+    if (!filteredServices.some((s) => s.id === selectedId)) {
+      setSelectedId(null)
+    }
+  }, [filteredServices, selectedId])
+
+  useEffect(() => {
+    const onPopState = () => {
+      setDiscipline(readDisciplineFromUrl())
+    }
+    window.addEventListener('popstate', onPopState)
+    return () => window.removeEventListener('popstate', onPopState)
+  }, [])
+
+  const applyDiscipline = useCallback(
+    (next: Discipline) => {
+      if (next === discipline) return
+      setDiscipline(next)
+      setDisciplineInUrl(next, 'push')
+    },
+    [discipline],
+  )
+
+  const openDialog = useCallback((opener: HTMLElement | null) => {
+    openerRef.current = opener
+    setSubmitted(false)
+    setErrors({})
+    setFormState({ name: '', email: '', projectType: '', summary: '' })
+    setDialogOpen(true)
+    setMenuOpen(false)
+  }, [])
+
+  const closeDialog = useCallback(() => {
+    setDialogOpen(false)
+    requestAnimationFrame(() => {
+      openerRef.current?.focus()
+    })
+  }, [])
+
+  useEffect(() => {
+    if (!dialogOpen) return
+
+    const previouslyFocused = document.activeElement as HTMLElement | null
+    if (!openerRef.current) {
+      openerRef.current = previouslyFocused
+    }
+
+    const focusTarget = firstFieldRef.current ?? dialogRef.current
+    requestAnimationFrame(() => {
+      focusTarget?.focus()
+    })
+
+    const onKeyDown = (event: globalThis.KeyboardEvent) => {
+      if (event.key === 'Escape') {
+        event.preventDefault()
+        closeDialog()
+        return
+      }
+
+      if (event.key !== 'Tab' || !dialogRef.current) return
+
+      const focusable = dialogRef.current.querySelectorAll<HTMLElement>(
+        'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
+      )
+      const list = Array.from(focusable).filter(
+        (el) => !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true',
+      )
+      if (list.length === 0) return
+
+      const first = list[0]
+      const last = list[list.length - 1]
+      if (event.shiftKey && document.activeElement === first) {
+        event.preventDefault()
+        last.focus()
+      } else if (!event.shiftKey && document.activeElement === last) {
+        event.preventDefault()
+        first.focus()
+      }
+    }
+
+    document.addEventListener('keydown', onKeyDown)
+    const prevOverflow = document.body.style.overflow
+    document.body.style.overflow = 'hidden'
+
+    return () => {
+      document.removeEventListener('keydown', onKeyDown)
+      document.body.style.overflow = prevOverflow
+    }
+  }, [dialogOpen, closeDialog])
+
+  useEffect(() => {
+    if (!menuOpen) return
+
+    const onKeyDown = (event: globalThis.KeyboardEvent) => {
+      if (event.key === 'Escape') {
+        setMenuOpen(false)
+        menuToggleRef.current?.focus()
+      }
+    }
+    document.addEventListener('keydown', onKeyDown)
+    return () => document.removeEventListener('keydown', onKeyDown)
+  }, [menuOpen])
+
+  const selectService = (id: string) => {
+    setSelectedId(id)
+    requestAnimationFrame(() => {
+      detailRef.current?.scrollIntoView({ behavior: reduceMotion ? 'auto' : 'smooth', block: 'nearest' })
+    })
+  }
+
+  const validate = () => {
+    const next: Record<string, string> = {}
+    if (!formState.name.trim()) next.name = 'Enter your name.'
+    if (!formState.email.trim()) next.email = 'Enter your work email.'
+    else if (!isValidEmail(formState.email.trim())) next.email = 'Enter a valid email address.'
+    if (!formState.projectType) next.projectType = 'Select a project type.'
+    const summaryLen = formState.summary.replace(/\s/g, '').length
+    if (!formState.summary.trim()) next.summary = 'Describe the project summary.'
+    else if (summaryLen < 20) next.summary = 'Use at least 20 characters in the project summary.'
+    return next
+  }
+
+  const handleSubmit = (event: FormEvent) => {
+    event.preventDefault()
+    const next = validate()
+    setErrors(next)
+    if (Object.keys(next).length > 0) {
+      const order = ['name', 'email', 'projectType', 'summary'] as const
+      const first = order.find((key) => next[key])
+      if (first) {
+        const el = dialogRef.current?.querySelector<HTMLElement>(`#field-${first}`)
+        el?.focus()
+      }
+      return
+    }
+    setSubmitted(true)
+  }
+
+  useEffect(() => {
+    if (!submitted || !dialogOpen) return
+    requestAnimationFrame(() => {
+      dialogRef.current?.querySelector<HTMLElement>('[data-testid="scope-review-success"]')?.focus()
+    })
+  }, [submitted, dialogOpen])
+
+  const motionProps = reduceMotion
+    ? { initial: false, animate: { opacity: 1 }, transition: { duration: 0 } }
+    : {
+        initial: { opacity: 0, y: 12 },
+        animate: { opacity: 1, y: 0 },
+        transition: { duration: 0.45, ease: [0.22, 1, 0.36, 1] as const },
+      }
+
+  const countLabel =
+    filteredServices.length === 1
+      ? '1 service'
+      : `${filteredServices.length} services`
+
   return (
-    <div className="site-shell">
+    <div className="site-shell" id="top">
+      <a className="skip-link" href="#main">
+        Skip to content
+      </a>
+
       <header className="site-header">
-        <a className="brand" href="#top" aria-label="Gridline Field Services home">
-          <strong>{content.brand}</strong>
-          <span>{content.descriptor}</span>
-        </a>
-        <nav aria-label="Primary navigation">
-          {content.nav.map((item) => <a key={item.href} href={item.href}>{item.label}</a>)}
-        </nav>
-        <button type="button" data-testid="scope-review-open">{content.hero.primaryAction}</button>
+        <div className="header-inner">
+          <a className="brand" href="#top" aria-label="Gridline Field Services home">
+            <strong>{content.brand}</strong>
+            <span>{content.descriptor}</span>
+          </a>
+
+          <nav className="desktop-nav" aria-label="Primary">
+            {content.nav.map((item) => (
+              <a key={item.href} href={item.href}>
+                {item.label}
+              </a>
+            ))}
+          </nav>
+
+          <div className="header-actions">
+            <button
+              type="button"
+              className="btn btn-primary header-cta"
+              data-testid="scope-review-open"
+              onClick={(e) => openDialog(e.currentTarget)}
+            >
+              {content.hero.primaryAction}
+            </button>
+            <button
+              type="button"
+              className="menu-toggle"
+              data-testid="mobile-menu-toggle"
+              aria-expanded={menuOpen}
+              aria-controls="mobile-menu"
+              ref={menuToggleRef}
+              onClick={() => setMenuOpen((open) => !open)}
+            >
+              <span className="visually-hidden">{menuOpen ? 'Close menu' : 'Open menu'}</span>
+              <span className="menu-icon" aria-hidden="true">
+                <span />
+                <span />
+              </span>
+            </button>
+          </div>
+        </div>
+
+        <div
+          id="mobile-menu"
+          className={`mobile-menu${menuOpen ? ' is-open' : ''}`}
+          data-testid="mobile-menu"
+          hidden={!menuOpen}
+          ref={mobileMenuRef}
+        >
+          <nav aria-label="Mobile">
+            {content.nav.map((item) => (
+              <a
+                key={item.href}
+                href={item.href}
+                onClick={() => setMenuOpen(false)}
+              >
+                {item.label}
+              </a>
+            ))}
+            <button
+              type="button"
+              className="btn btn-primary"
+              data-testid="scope-review-open"
+              onClick={(e) => openDialog(e.currentTarget)}
+            >
+              {content.hero.primaryAction}
+            </button>
+          </nav>
+        </div>
       </header>
 
-      <main id="top">
-        <section className="hero">
-          <p className="eyebrow">{content.hero.eyebrow}</p>
-          <h1>{content.hero.title}</h1>
-          <p>{content.hero.body}</p>
-          <a href="#services">{content.hero.secondaryAction}</a>
+      <main id="main">
+        <section className="hero" aria-labelledby="hero-title">
+          <motion.div className="hero-copy" {...motionProps}>
+            <p className="eyebrow">
+              <span className="rule" aria-hidden="true" />
+              {content.hero.eyebrow}
+            </p>
+            <h1 id="hero-title">{content.hero.title}</h1>
+            <p className="hero-body">{content.hero.body}</p>
+            <div className="hero-actions">
+              <button
+                type="button"
+                className="btn btn-primary"
+                data-testid="scope-review-open"
+                onClick={(e) => openDialog(e.currentTarget)}
+              >
+                {content.hero.primaryAction}
+              </button>
+              <a className="btn btn-ghost" href="#services">
+                {content.hero.secondaryAction}
+              </a>
+            </div>
+            <p className="hero-availability">
+              <span className="coord" aria-hidden="true">
+                VIC // 37.8°S
+              </span>
+              {content.hero.availability}
+            </p>
+          </motion.div>
+
+          <motion.div
+            className="hero-panel"
+            aria-hidden="true"
+            {...(reduceMotion
+              ? { initial: false }
+              : {
+                  initial: { opacity: 0, x: 16 },
+                  animate: { opacity: 1, x: 0 },
+                  transition: { duration: 0.55, delay: 0.08, ease: [0.22, 1, 0.36, 1] },
+                })}
+          >
+            <div className="hero-schematic">
+              <div className="schematic-label">SITE / STATUS</div>
+              <div className="schematic-grid">
+                <div className="cell">
+                  <span>LV REPORT</span>
+                  <strong>LIVE</strong>
+                </div>
+                <div className="cell">
+                  <span>HOLD</span>
+                  <strong>CLEAR</strong>
+                </div>
+                <div className="cell span">
+                  <span>WORKFRONT</span>
+                  <strong>SCOPE · TEST · HANDOVER</strong>
+                </div>
+                <div className="cell">
+                  <span>REGION</span>
+                  <strong>VIC</strong>
+                </div>
+                <div className="cell">
+                  <span>MODE</span>
+                  <strong>FIELD</strong>
+                </div>
+              </div>
+              <div className="schematic-bar" />
+            </div>
+          </motion.div>
         </section>
 
-        <section id="services" className="services">
-          <p className="eyebrow">{content.servicesIntro.eyebrow}</p>
-          <h2>{content.servicesIntro.title}</h2>
-          <p>{content.servicesIntro.body}</p>
-          <div className="service-grid">
-            {content.services.map((service) => (
-              <article key={service.id} data-testid={`service-card-${service.id}`}>
-                <p>{service.discipline}</p>
-                <h3>{service.title}</h3>
-                <p>{service.summary}</p>
-              </article>
+        <section id="services" className="services" aria-labelledby="services-title">
+          <div className="section-intro">
+            <p className="eyebrow">
+              <span className="rule" aria-hidden="true" />
+              {content.servicesIntro.eyebrow}
+            </p>
+            <h2 id="services-title">{content.servicesIntro.title}</h2>
+            <p className="lede">{content.servicesIntro.body}</p>
+          </div>
+
+          <div className="filter-bar" role="group" aria-label="Filter services by discipline">
+            {content.filters.map((filter) => (
+              <button
+                key={filter.value}
+                type="button"
+                className={`filter-btn${discipline === filter.value ? ' is-active' : ''}`}
+                data-testid={`filter-${filter.value}`}
+                aria-pressed={discipline === filter.value}
+                onClick={() => applyDiscipline(filter.value)}
+              >
+                {filter.label}
+              </button>
             ))}
+            <p className="service-count" data-testid="service-count" aria-live="polite">
+              {countLabel}
+            </p>
+          </div>
+
+          <div className="service-grid">
+            <AnimatePresence mode="popLayout">
+              {filteredServices.map((service, index) => (
+                <motion.article
+                  key={service.id}
+                  className={`service-card${selectedId === service.id ? ' is-selected' : ''}`}
+                  data-testid={`service-card-${service.id}`}
+                  layout={!reduceMotion}
+                  {...(reduceMotion
+                    ? { initial: false }
+                    : {
+                        initial: { opacity: 0, y: 8 },
+                        animate: { opacity: 1, y: 0 },
+                        exit: { opacity: 0, y: -6 },
+                        transition: { duration: 0.28, delay: index * 0.03 },
+                      })}
+                >
+                  <div className="card-media">
+                    {service.image ? (
+                      <img src={service.image} alt={service.imageAlt} width={640} height={400} />
+                    ) : (
+                      <div className="media-fallback" data-testid="media-fallback" role="img" aria-label={service.imageAlt}>
+                        <span className="fallback-code">PQ-EVIDENCE</span>
+                        <span className="fallback-title">Measurement pending</span>
+                        <span className="fallback-note">Capture first — interpret later</span>
+                      </div>
+                    )}
+                  </div>
+                  <div className="card-body">
+                    <p className="discipline-tag">{service.discipline}</p>
+                    <h3>{service.title}</h3>
+                    <p>{service.summary}</p>
+                    <button
+                      type="button"
+                      className="btn btn-text"
+                      onClick={() => selectService(service.id)}
+                      aria-expanded={selectedId === service.id}
+                      aria-controls="service-detail"
+                    >
+                      {selectedId === service.id ? 'Selected' : 'Inspect package'}
+                    </button>
+                  </div>
+                </motion.article>
+              ))}
+            </AnimatePresence>
           </div>
+
+          <section
+            id="service-detail"
+            className={`service-detail${selectedService ? ' has-selection' : ''}`}
+            data-testid="service-detail"
+            ref={detailRef}
+            aria-live="polite"
+            aria-labelledby={selectedService ? 'detail-title' : undefined}
+          >
+            {selectedService ? (
+              <div className="detail-inner">
+                <div className="detail-meta">
+                  <p className="eyebrow">Selected package</p>
+                  <p className="discipline-tag">{selectedService.discipline}</p>
+                </div>
+                <h3 id="detail-title">{selectedService.title}</h3>
+                <p className="detail-description">{selectedService.description}</p>
+                <div className="detail-grid">
+                  <div>
+                    <h4>Deliverables</h4>
+                    <ul>
+                      {selectedService.deliverables.map((item) => (
+                        <li key={item}>{item}</li>
+                      ))}
+                    </ul>
+                  </div>
+                  <div>
+                    <h4>Response note</h4>
+                    <p>{selectedService.responseNote}</p>
+                  </div>
+                </div>
+              </div>
+            ) : (
+              <p className="detail-empty">Select a service package to review scope, deliverables and response notes.</p>
+            )}
+          </section>
+        </section>
+
+        <section id="approach" className="approach" aria-labelledby="approach-title">
+          <div className="section-intro">
+            <p className="eyebrow">
+              <span className="rule" aria-hidden="true" />
+              {content.approach.eyebrow}
+            </p>
+            <h2 id="approach-title">{content.approach.title}</h2>
+          </div>
+          <ol className="principles">
+            {content.approach.principles.map((principle) => (
+              <li key={principle.number}>
+                <span className="principle-number">{principle.number}</span>
+                <h3>{principle.title}</h3>
+                <p>{principle.body}</p>
+              </li>
+            ))}
+          </ol>
+        </section>
+
+        <section className="close" aria-labelledby="close-title">
+          <p className="eyebrow">
+            <span className="rule" aria-hidden="true" />
+            {content.close.eyebrow}
+          </p>
+          <h2 id="close-title">{content.close.title}</h2>
+          <p className="lede">{content.close.body}</p>
+          <button
+            type="button"
+            className="btn btn-primary"
+            data-testid="scope-review-open"
+            onClick={(e) => openDialog(e.currentTarget)}
+          >
+            {content.hero.primaryAction}
+          </button>
         </section>
       </main>
+
+      <footer className="site-footer">
+        <div className="footer-brand">
+          <strong>{content.brand}</strong>
+          <span>{content.footer.line}</span>
+        </div>
+        <p>{content.footer.region}</p>
+        <p className="footer-note">{content.footer.note}</p>
+      </footer>
+
+      {dialogOpen && (
+        <div className="dialog-root" role="presentation">
+          <div className="dialog-backdrop" onClick={closeDialog} aria-hidden="true" />
+          <div
+            className="dialog"
+            role="dialog"
+            aria-modal="true"
+            aria-labelledby={dialogTitleId}
+            aria-describedby={dialogDescId}
+            data-testid="scope-review-dialog"
+            ref={dialogRef}
+            tabIndex={-1}
+          >
+            <div className="dialog-header">
+              <h2 id={dialogTitleId}>{content.form.title}</h2>
+              <button type="button" className="dialog-close" onClick={closeDialog} aria-label="Close dialog">
+                <span aria-hidden="true">×</span>
+              </button>
+            </div>
+
+            {submitted ? (
+              <p
+                className="form-success"
+                data-testid="scope-review-success"
+                role="status"
+                tabIndex={-1}
+              >
+                {content.form.success}
+              </p>
+            ) : (
+              <>
+                <p id={dialogDescId} className="dialog-intro">
+                  {content.form.intro}
+                </p>
+                <form
+                  className="scope-form"
+                  data-testid="scope-review-form"
+                  onSubmit={handleSubmit}
+                  noValidate
+                >
+                  <div className={`field${errors.name ? ' has-error' : ''}`}>
+                    <label htmlFor="field-name">Name</label>
+                    <input
+                      id="field-name"
+                      name="name"
+                      type="text"
+                      autoComplete="name"
+                      value={formState.name}
+                      ref={firstFieldRef}
+                      aria-invalid={Boolean(errors.name)}
+                      aria-describedby={errors.name ? 'error-name' : undefined}
+                      onChange={(e) => setFormState((s) => ({ ...s, name: e.target.value }))}
+                    />
+                    {errors.name && (
+                      <p id="error-name" className="field-error" data-testid="error-name" role="alert">
+                        {errors.name}
+                      </p>
+                    )}
+                  </div>
+
+                  <div className={`field${errors.email ? ' has-error' : ''}`}>
+                    <label htmlFor="field-email">Work email</label>
+                    <input
+                      id="field-email"
+                      name="email"
+                      type="email"
+                      autoComplete="email"
+                      value={formState.email}
+                      aria-invalid={Boolean(errors.email)}
+                      aria-describedby={errors.email ? 'error-email' : undefined}
+                      onChange={(e) => setFormState((s) => ({ ...s, email: e.target.value }))}
+                    />
+                    {errors.email && (
+                      <p id="error-email" className="field-error" data-testid="error-email" role="alert">
+                        {errors.email}
+                      </p>
+                    )}
+                  </div>
+
+                  <div className={`field${errors.projectType ? ' has-error' : ''}`}>
+                    <label htmlFor="field-projectType">Project type</label>
+                    <select
+                      id="field-projectType"
+                      name="projectType"
+                      value={formState.projectType}
+                      aria-invalid={Boolean(errors.projectType)}
+                      aria-describedby={errors.projectType ? 'error-projectType' : undefined}
+                      onChange={(e) => setFormState((s) => ({ ...s, projectType: e.target.value }))}
+                    >
+                      <option value="">Select project type</option>
+                      {content.form.projectTypes.map((type) => (
+                        <option key={type} value={type}>
+                          {type}
+                        </option>
+                      ))}
+                    </select>
+                    {errors.projectType && (
+                      <p id="error-projectType" className="field-error" data-testid="error-projectType" role="alert">
+                        {errors.projectType}
+                      </p>
+                    )}
+                  </div>
+
+                  <div className={`field${errors.summary ? ' has-error' : ''}`}>
+                    <label htmlFor="field-summary">Project summary</label>
+                    <textarea
+                      id="field-summary"
+                      name="summary"
+                      rows={4}
+                      value={formState.summary}
+                      aria-invalid={Boolean(errors.summary)}
+                      aria-describedby={errors.summary ? 'error-summary' : undefined}
+                      onChange={(e) => setFormState((s) => ({ ...s, summary: e.target.value }))}
+                    />
+                    {errors.summary && (
+                      <p id="error-summary" className="field-error" data-testid="error-summary" role="alert">
+                        {errors.summary}
+                      </p>
+                    )}
+                  </div>
+
+                  <button type="submit" className="btn btn-primary">
+                    {content.form.submit}
+                  </button>
+                </form>
+              </>
+            )}
+          </div>
+        </div>
+      )}
     </div>
   )
 }

--- baseline/src/styles.css
+++ candidate/src/styles.css
@@ -1,37 +1,1006 @@
 :root {
-  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
-  color: #18211f;
-  background: #f1efe7;
+  --ink: #18211f;
+  --ink-soft: #3a4541;
+  --steel: #5c6661;
+  --rule: #b7bbb4;
+  --rule-strong: #8d948c;
+  --paper: #f1efe7;
+  --paper-deep: #e6e3d7;
+  --panel: #f7f5ef;
+  --citron: #c8d600;
+  --citron-ink: #1f2400;
+  --danger: #8b2e1f;
+  --danger-bg: #f5e6e2;
+  --focus: #1a4d8c;
+  --radius: 2px;
+  --header-h: 4.25rem;
+  --space: clamp(1rem, 3vw, 2rem);
+  --max: 72rem;
+  font-family:
+    "Segoe UI",
+    ui-sans-serif,
+    system-ui,
+    -apple-system,
+    BlinkMacSystemFont,
+    "Helvetica Neue",
+    Arial,
+    sans-serif;
+  color: var(--ink);
+  background: var(--paper);
   font-synthesis: none;
   text-rendering: optimizeLegibility;
+  -webkit-font-smoothing: antialiased;
+  line-height: 1.5;
 }
 
-* { box-sizing: border-box; }
-html { scroll-behavior: smooth; }
-body { margin: 0; min-width: 320px; }
-button, input, select, textarea { font: inherit; }
-a { color: inherit; }
-.site-shell { min-height: 100vh; }
-.site-header { display: flex; align-items: center; justify-content: space-between; gap: 2rem; padding: 1rem 4vw; border-bottom: 1px solid #b7bbb4; }
-.brand { display: grid; text-decoration: none; }
-.brand span, .eyebrow { font-size: .75rem; letter-spacing: .08em; text-transform: uppercase; }
-nav { display: flex; gap: 1.5rem; }
-.hero, .services { padding: 5rem 6vw; }
-.hero { min-height: 55vh; display: grid; align-content: center; max-width: 74rem; }
-h1 { max-width: 10ch; margin: .25em 0; font-size: clamp(3rem, 9vw, 7rem); line-height: .9; letter-spacing: -.06em; }
-.hero > p:not(.eyebrow) { max-width: 42rem; font-size: 1.15rem; line-height: 1.6; }
-.services { border-top: 1px solid #b7bbb4; }
-.services > h2 { max-width: 18ch; font-size: clamp(2rem, 5vw, 4.5rem); line-height: 1; }
-.service-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; margin-top: 3rem; background: #aeb4ae; border: 1px solid #aeb4ae; }
-.service-grid article { min-width: 0; padding: 1.5rem; background: #f1efe7; }
-
-@media (max-width: 760px) {
-  .site-header nav { display: none; }
-  .site-header > button { display: none; }
-  .service-grid { grid-template-columns: 1fr; }
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+}
+
+html {
+  scroll-behavior: smooth;
+}
+
+body {
+  margin: 0;
+  min-width: 320px;
+  background: var(--paper);
+}
+
+img {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+
+button,
+input,
+select,
+textarea {
+  font: inherit;
+  color: inherit;
+}
+
+a {
+  color: inherit;
+}
+
+h1,
+h2,
+h3,
+h4,
+p {
+  margin: 0;
+}
+
+ul,
+ol {
+  margin: 0;
+  padding: 0;
+}
+
+.visually-hidden {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border: 0;
+}
+
+.skip-link {
+  position: absolute;
+  left: 1rem;
+  top: -3rem;
+  z-index: 100;
+  background: var(--ink);
+  color: var(--paper);
+  padding: 0.5rem 0.75rem;
+  text-decoration: none;
+}
+
+.skip-link:focus {
+  top: 0.75rem;
+}
+
+:focus-visible {
+  outline: 2px solid var(--focus);
+  outline-offset: 3px;
+}
+
+.site-shell {
+  min-height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
+
+/* —— Header —— */
+.site-header {
+  position: sticky;
+  top: 0;
+  z-index: 40;
+  background: color-mix(in srgb, var(--paper) 92%, transparent);
+  backdrop-filter: blur(8px);
+  border-bottom: 1px solid var(--rule);
+}
+
+.header-inner {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  gap: 1rem;
+  max-width: calc(var(--max) + 12vw);
+  margin: 0 auto;
+  padding: 0.85rem 6vw;
+  min-height: var(--header-h);
+}
+
+.brand {
+  display: grid;
+  gap: 0.1rem;
+  text-decoration: none;
+  min-width: 0;
+}
+
+.brand strong {
+  font-size: 1rem;
+  letter-spacing: 0.18em;
+  font-weight: 700;
+}
+
+.brand span {
+  font-size: 0.68rem;
+  letter-spacing: 0.12em;
+  text-transform: uppercase;
+  color: var(--steel);
+}
+
+.desktop-nav {
+  display: none;
+  gap: 1.75rem;
+}
+
+.desktop-nav a {
+  text-decoration: none;
+  font-size: 0.92rem;
+  color: var(--ink-soft);
+  border-bottom: 1px solid transparent;
+  padding-bottom: 0.15rem;
+}
+
+.desktop-nav a:hover,
+.desktop-nav a:focus-visible {
+  color: var(--ink);
+  border-bottom-color: var(--citron);
+}
+
+.header-actions {
+  display: flex;
+  align-items: center;
+  gap: 0.75rem;
+}
+
+.header-cta {
+  display: none;
+}
+
+.menu-toggle {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  width: 2.75rem;
+  height: 2.75rem;
+  border: 1px solid var(--rule-strong);
+  background: var(--panel);
+  cursor: pointer;
+  border-radius: var(--radius);
+}
+
+.menu-icon {
+  display: grid;
+  gap: 6px;
+  width: 1.1rem;
+}
+
+.menu-icon span {
+  display: block;
+  height: 1.5px;
+  background: var(--ink);
+  transition: transform 0.2s ease, opacity 0.2s ease;
+}
+
+.menu-toggle[aria-expanded="true"] .menu-icon span:first-child {
+  transform: translateY(3.75px) rotate(45deg);
+}
+
+.menu-toggle[aria-expanded="true"] .menu-icon span:last-child {
+  transform: translateY(-3.75px) rotate(-45deg);
+}
+
+.mobile-menu {
+  border-top: 1px solid var(--rule);
+  background: var(--panel);
+  padding: 1rem 6vw 1.25rem;
+}
+
+.mobile-menu[hidden] {
+  display: none;
+}
+
+.mobile-menu nav {
+  display: grid;
+  gap: 0.75rem;
+}
+
+.mobile-menu a {
+  text-decoration: none;
+  padding: 0.65rem 0;
+  border-bottom: 1px solid var(--rule);
+  font-size: 1.05rem;
+}
+
+.mobile-menu .btn {
+  margin-top: 0.5rem;
+  width: 100%;
+  justify-content: center;
+}
+
+/* —— Buttons —— */
+.btn {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  gap: 0.5rem;
+  min-height: 2.75rem;
+  padding: 0.65rem 1.15rem;
+  border: 1px solid transparent;
+  border-radius: var(--radius);
+  text-decoration: none;
+  cursor: pointer;
+  background: transparent;
+  transition: background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease;
+}
+
+.btn-primary {
+  background: var(--ink);
+  color: var(--paper);
+  border-color: var(--ink);
+}
+
+.btn-primary:hover {
+  background: #0f1614;
+}
+
+.btn-ghost {
+  border-color: var(--rule-strong);
+  background: transparent;
+  color: var(--ink);
+}
+
+.btn-ghost:hover {
+  border-color: var(--ink);
+  background: var(--paper-deep);
+}
+
+.btn-text {
+  min-height: auto;
+  padding: 0;
+  border: 0;
+  border-bottom: 1px solid var(--citron);
+  border-radius: 0;
+  color: var(--ink);
+  font-size: 0.92rem;
+  font-weight: 600;
+  width: fit-content;
+}
+
+.btn-text:hover {
+  border-bottom-width: 2px;
+}
+
+/* —— Hero —— */
+.hero {
+  display: grid;
+  gap: 2.5rem;
+  padding: clamp(2.5rem, 8vw, 5.5rem) 6vw;
+  max-width: calc(var(--max) + 12vw);
+  margin: 0 auto;
+  width: 100%;
+}
+
+.hero-copy {
+  display: grid;
+  gap: 1.25rem;
+  max-width: 40rem;
+  min-width: 0;
+}
+
+.eyebrow {
+  display: flex;
+  align-items: center;
+  gap: 0.75rem;
+  font-size: 0.72rem;
+  letter-spacing: 0.12em;
+  text-transform: uppercase;
+  color: var(--steel);
+  font-weight: 600;
+}
+
+.eyebrow .rule {
+  display: inline-block;
+  width: 1.75rem;
+  height: 1px;
+  background: var(--citron);
+  flex-shrink: 0;
+}
+
+.hero h1 {
+  font-size: clamp(2.6rem, 9vw, 5.75rem);
+  line-height: 0.95;
+  letter-spacing: -0.045em;
+  font-weight: 700;
+  max-width: 11ch;
+}
+
+.hero-body {
+  font-size: clamp(1.02rem, 2.2vw, 1.18rem);
+  line-height: 1.65;
+  color: var(--ink-soft);
+  max-width: 38rem;
+}
+
+.hero-actions {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 0.75rem;
+  margin-top: 0.35rem;
+}
+
+.hero-availability {
+  display: grid;
+  gap: 0.35rem;
+  margin-top: 0.5rem;
+  font-size: 0.92rem;
+  color: var(--steel);
+  border-top: 1px solid var(--rule);
+  padding-top: 1rem;
+}
+
+.coord {
+  font-family: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
+  font-size: 0.72rem;
+  letter-spacing: 0.08em;
+  color: var(--ink);
+}
+
+.hero-panel {
+  min-width: 0;
+}
+
+.hero-schematic {
+  border: 1px solid var(--rule-strong);
+  background:
+    linear-gradient(180deg, var(--panel), var(--paper-deep));
+  padding: 1.25rem;
+  display: grid;
+  gap: 1rem;
+  position: relative;
+  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--citron) 18%, transparent);
+}
+
+.schematic-label {
+  font-family: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
+  font-size: 0.68rem;
+  letter-spacing: 0.14em;
+  color: var(--steel);
+}
+
+.schematic-grid {
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+  gap: 1px;
+  background: var(--rule);
+  border: 1px solid var(--rule);
+}
+
+.schematic-grid .cell {
+  background: var(--paper);
+  padding: 0.85rem 0.9rem;
+  display: grid;
+  gap: 0.35rem;
+  min-width: 0;
+}
+
+.schematic-grid .cell.span {
+  grid-column: 1 / -1;
+}
+
+.schematic-grid .cell span {
+  font-size: 0.65rem;
+  letter-spacing: 0.1em;
+  text-transform: uppercase;
+  color: var(--steel);
+}
+
+.schematic-grid .cell strong {
+  font-size: 0.95rem;
+  font-weight: 650;
+  letter-spacing: 0.02em;
+  word-break: break-word;
+}
+
+.schematic-bar {
+  height: 4px;
+  background: linear-gradient(90deg, var(--citron) 0%, var(--citron) 28%, var(--rule) 28%, var(--rule) 100%);
+}
+
+/* —— Sections —— */
+.services,
+.approach,
+.close {
+  padding: clamp(3rem, 8vw, 5.5rem) 6vw;
+  width: 100%;
+  max-width: calc(var(--max) + 12vw);
+  margin: 0 auto;
+}
+
+.services {
+  border-top: 1px solid var(--rule);
+}
+
+.section-intro {
+  display: grid;
+  gap: 0.9rem;
+  max-width: 40rem;
+  margin-bottom: 2rem;
+  min-width: 0;
+}
+
+.section-intro h2,
+.close h2 {
+  font-size: clamp(1.85rem, 4.8vw, 3.4rem);
+  line-height: 1.05;
+  letter-spacing: -0.03em;
+  max-width: 18ch;
+  overflow-wrap: anywhere;
+}
+
+.lede {
+  color: var(--ink-soft);
+  font-size: 1.05rem;
+  line-height: 1.65;
+  max-width: 40rem;
+}
+
+/* —— Filters —— */
+.filter-bar {
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  gap: 0.5rem;
+  margin-bottom: 1.5rem;
+  padding-bottom: 1rem;
+  border-bottom: 1px solid var(--rule);
+}
+
+.filter-btn {
+  min-height: 2.5rem;
+  padding: 0.45rem 0.9rem;
+  border: 1px solid var(--rule-strong);
+  background: transparent;
+  cursor: pointer;
+  border-radius: var(--radius);
+  font-size: 0.9rem;
+  color: var(--ink-soft);
+  transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
+}
+
+.filter-btn:hover {
+  border-color: var(--ink);
+  color: var(--ink);
+}
+
+.filter-btn.is-active {
+  background: var(--ink);
+  border-color: var(--ink);
+  color: var(--paper);
+}
+
+.service-count {
+  margin-left: auto;
+  font-family: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
+  font-size: 0.78rem;
+  letter-spacing: 0.04em;
+  color: var(--steel);
+}
+
+/* —— Service cards —— */
+.service-grid {
+  display: grid;
+  grid-template-columns: 1fr;
+  gap: 1px;
+  background: var(--rule-strong);
+  border: 1px solid var(--rule-strong);
+}
+
+.service-card {
+  background: var(--panel);
+  min-width: 0;
+  display: grid;
+  grid-template-rows: auto 1fr;
+}
+
+.service-card.is-selected {
+  box-shadow: inset 3px 0 0 var(--citron);
+}
+
+.card-media {
+  aspect-ratio: 16 / 10;
+  background: var(--paper-deep);
+  border-bottom: 1px solid var(--rule);
+  overflow: hidden;
+  min-width: 0;
+}
+
+.card-media img {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+}
+
+.media-fallback {
+  width: 100%;
+  height: 100%;
+  min-height: 10rem;
+  display: grid;
+  align-content: center;
+  gap: 0.4rem;
+  padding: 1.25rem;
+  background:
+    repeating-linear-gradient(
+      -45deg,
+      transparent,
+      transparent 8px,
+      color-mix(in srgb, var(--rule) 55%, transparent) 8px,
+      color-mix(in srgb, var(--rule) 55%, transparent) 9px
+    ),
+    var(--paper-deep);
+  border-left: 3px solid var(--citron);
+}
+
+.fallback-code {
+  font-family: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
+  font-size: 0.7rem;
+  letter-spacing: 0.12em;
+  color: var(--steel);
+}
+
+.fallback-title {
+  font-weight: 700;
+  font-size: 1.05rem;
+}
+
+.fallback-note {
+  font-size: 0.88rem;
+  color: var(--ink-soft);
+}
+
+.card-body {
+  display: grid;
+  gap: 0.75rem;
+  padding: 1.25rem;
+  min-width: 0;
+  align-content: start;
+}
+
+.discipline-tag {
+  font-size: 0.68rem;
+  letter-spacing: 0.12em;
+  text-transform: uppercase;
+  color: var(--steel);
+  font-weight: 650;
+}
+
+.card-body h3 {
+  font-size: 1.15rem;
+  line-height: 1.25;
+  letter-spacing: -0.015em;
+  overflow-wrap: anywhere;
+}
+
+.card-body > p:not(.discipline-tag) {
+  color: var(--ink-soft);
+  font-size: 0.96rem;
+  line-height: 1.55;
+}
+
+/* —— Detail —— */
+.service-detail {
+  margin-top: 1.25rem;
+  border: 1px solid var(--rule-strong);
+  background: var(--paper);
+  min-width: 0;
+}
+
+.service-detail.has-selection {
+  border-top: 3px solid var(--citron);
+}
+
+.detail-empty {
+  padding: 1.5rem;
+  color: var(--steel);
+  font-size: 0.98rem;
+}
+
+.detail-inner {
+  display: grid;
+  gap: 1rem;
+  padding: clamp(1.25rem, 3vw, 2rem);
+  min-width: 0;
+}
+
+.detail-meta {
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  gap: 0.75rem 1.25rem;
+}
+
+.detail-inner h3 {
+  font-size: clamp(1.25rem, 3vw, 1.85rem);
+  line-height: 1.2;
+  letter-spacing: -0.02em;
+  overflow-wrap: anywhere;
+}
+
+.detail-description {
+  color: var(--ink-soft);
+  line-height: 1.65;
+  max-width: 52rem;
+}
+
+.detail-grid {
+  display: grid;
+  gap: 1.25rem;
+  margin-top: 0.5rem;
+  padding-top: 1rem;
+  border-top: 1px solid var(--rule);
+}
+
+.detail-grid h4 {
+  font-size: 0.72rem;
+  letter-spacing: 0.12em;
+  text-transform: uppercase;
+  color: var(--steel);
+  margin-bottom: 0.65rem;
+}
+
+.detail-grid ul {
+  list-style: none;
+  display: grid;
+  gap: 0.45rem;
+}
+
+.detail-grid li {
+  position: relative;
+  padding-left: 1rem;
+  color: var(--ink-soft);
+  line-height: 1.45;
+}
+
+.detail-grid li::before {
+  content: "";
+  position: absolute;
+  left: 0;
+  top: 0.55em;
+  width: 0.4rem;
+  height: 1px;
+  background: var(--citron);
+}
+
+.detail-grid p {
+  color: var(--ink-soft);
+  line-height: 1.55;
+}
+
+/* —— Approach —— */
+.approach {
+  border-top: 1px solid var(--rule);
+}
+
+.principles {
+  list-style: none;
+  display: grid;
+  gap: 1px;
+  background: var(--rule);
+  border: 1px solid var(--rule);
+}
+
+.principles li {
+  background: var(--panel);
+  padding: 1.35rem 1.25rem;
+  display: grid;
+  gap: 0.55rem;
+  min-width: 0;
+}
+
+.principle-number {
+  font-family: ui-monospace, "Cascadia Code", "SF Mono", Menlo, Consolas, monospace;
+  font-size: 0.75rem;
+  letter-spacing: 0.1em;
+  color: var(--citron-ink);
+  background: color-mix(in srgb, var(--citron) 55%, white);
+  width: fit-content;
+  padding: 0.2rem 0.45rem;
+  font-weight: 700;
+}
+
+.principles h3 {
+  font-size: 1.15rem;
+  letter-spacing: -0.015em;
+}
+
+.principles p {
+  color: var(--ink-soft);
+  line-height: 1.55;
+}
+
+/* —— Close + footer —— */
+.close {
+  border-top: 1px solid var(--rule);
+  display: grid;
+  gap: 1rem;
+  justify-items: start;
+  background:
+    linear-gradient(180deg, transparent, color-mix(in srgb, var(--paper-deep) 70%, transparent));
+}
+
+.site-footer {
+  margin-top: auto;
+  border-top: 1px solid var(--rule);
+  padding: 1.75rem 6vw 2.5rem;
+  display: grid;
+  gap: 0.55rem;
+  max-width: calc(var(--max) + 12vw);
+  width: 100%;
+  margin-inline: auto;
+  color: var(--steel);
+  font-size: 0.92rem;
+}
+
+.footer-brand {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 0.5rem 1rem;
+  align-items: baseline;
+  color: var(--ink);
+}
+
+.footer-brand strong {
+  letter-spacing: 0.16em;
+  font-size: 0.9rem;
+}
+
+.footer-note {
+  font-size: 0.82rem;
+  color: var(--steel);
+}
+
+/* —— Dialog —— */
+.dialog-root {
+  position: fixed;
+  inset: 0;
+  z-index: 80;
+  display: grid;
+  place-items: end center;
+  padding: 0;
+}
+
+.dialog-backdrop {
+  position: absolute;
+  inset: 0;
+  background: color-mix(in srgb, var(--ink) 48%, transparent);
+}
+
+.dialog {
+  position: relative;
+  z-index: 1;
+  width: min(100%, 32rem);
+  max-height: min(92vh, 40rem);
+  overflow: auto;
+  background: var(--paper);
+  border: 1px solid var(--rule-strong);
+  border-bottom: 0;
+  padding: 1.25rem 1.25rem 1.5rem;
+  box-shadow: 0 -12px 40px color-mix(in srgb, var(--ink) 18%, transparent);
+}
+
+.dialog-header {
+  display: flex;
+  align-items: flex-start;
+  justify-content: space-between;
+  gap: 1rem;
+  margin-bottom: 0.75rem;
+}
+
+.dialog-header h2 {
+  font-size: 1.35rem;
+  letter-spacing: -0.02em;
+  line-height: 1.2;
+}
+
+.dialog-close {
+  width: 2.5rem;
+  height: 2.5rem;
+  border: 1px solid var(--rule);
+  background: var(--panel);
+  cursor: pointer;
+  font-size: 1.4rem;
+  line-height: 1;
+  flex-shrink: 0;
+  border-radius: var(--radius);
+}
+
+.dialog-intro {
+  color: var(--ink-soft);
+  font-size: 0.95rem;
+  margin-bottom: 1.25rem;
+  line-height: 1.5;
+}
+
+.scope-form {
+  display: grid;
+  gap: 1rem;
+}
+
+.field {
+  display: grid;
+  gap: 0.4rem;
+}
+
+.field label {
+  font-size: 0.88rem;
+  font-weight: 600;
+}
+
+.field input,
+.field select,
+.field textarea {
+  width: 100%;
+  min-height: 2.75rem;
+  border: 1px solid var(--rule-strong);
+  background: var(--panel);
+  padding: 0.6rem 0.75rem;
+  border-radius: var(--radius);
+}
+
+.field textarea {
+  min-height: 7rem;
+  resize: vertical;
+}
+
+.field.has-error input,
+.field.has-error select,
+.field.has-error textarea {
+  border-color: var(--danger);
+  background: var(--danger-bg);
+}
+
+.field-error {
+  color: var(--danger);
+  font-size: 0.85rem;
+}
+
+.form-success {
+  padding: 1.25rem;
+  border: 1px solid color-mix(in srgb, var(--citron) 50%, var(--rule));
+  background: color-mix(in srgb, var(--citron) 18%, var(--panel));
+  line-height: 1.5;
+  font-weight: 600;
+}
+
+.scope-form .btn-primary {
+  width: 100%;
+}
+
+/* —— Breakpoints: ~768 and ~1440 —— */
+@media (min-width: 768px) {
+  .desktop-nav {
+    display: flex;
+  }
+
+  .header-cta {
+    display: inline-flex;
+  }
+
+  .menu-toggle {
+    display: none;
+  }
+
+  .mobile-menu {
+    display: none !important;
+  }
+
+  .hero {
+    grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
+    align-items: end;
+    gap: 3rem;
+  }
+
+  .service-grid {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .detail-grid {
+    grid-template-columns: 1.2fr 1fr;
+    gap: 2rem;
+  }
+
+  .principles {
+    grid-template-columns: repeat(3, minmax(0, 1fr));
+  }
+
+  .dialog-root {
+    place-items: center;
+    padding: 1.5rem;
+  }
+
+  .dialog {
+    border-bottom: 1px solid var(--rule-strong);
+    max-height: min(88vh, 42rem);
+    padding: 1.5rem 1.5rem 1.75rem;
+  }
+}
+
+@media (min-width: 1100px) {
+  .service-grid {
+    grid-template-columns: repeat(3, minmax(0, 1fr));
+  }
+
+  .hero h1 {
+    max-width: 10ch;
+  }
+}
+
+@media (min-width: 1440px) {
+  .header-inner,
+  .hero,
+  .services,
+  .approach,
+  .close,
+  .site-footer {
+    padding-left: max(6vw, calc((100vw - var(--max)) / 2));
+    padding-right: max(6vw, calc((100vw - var(--max)) / 2));
+  }
+
+  .hero {
+    max-width: none;
+  }
+
+  .services,
+  .approach,
+  .close,
+  .site-footer {
+    max-width: none;
+  }
 }
 
 @media (prefers-reduced-motion: reduce) {
-  html { scroll-behavior: auto; }
-  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
+  html {
+    scroll-behavior: auto;
+  }
+
+  *,
+  *::before,
+  *::after {
+    animation-duration: 0.01ms !important;
+    animation-iteration-count: 1 !important;
+    transition-duration: 0.01ms !important;
+    scroll-behavior: auto !important;
+  }
 }
