@font-face{font-family:'Switzer';font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:600;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}
@font-face{font-family:'Switzer';font-style:normal;font-weight:700;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')}

/* ═══════════════════════════════════════════════════════════════════════════
   SHARP · v0.6
   Built to Sharp_Full_Website_Wireframe_Schematic v2.0.
   ---------------------------------------------------------------------------
   THE CONTRACT

   BLACK-LED, TONALLY. Not one black plus borders — a spectrum of near-blacks
   (--s0..--s4) where every step is small enough to still read as black on its
   own. Surfaces, sections and interaction states are separated by tone. Rules
   are the exception now, not the structure.

   NO ACCENT HUE. The old amber (#e9a25a) is gone. Emphasis is a temperature
   shift on white — warm for Sharp Glazing because glass transmits warm light,
   cool for Sharp Steel because steel reflects it. At a glance both read as
   white. The chroma lives in the dark surfaces, never in a coloured block.

   RESTRAINT IN SCALE. The whole site sits between 10 and 26px; 32px appears
   once, on the homepage. Rank is carried by where a block starts on the
   twelve-column grid, how far it is indented, and how much silence is above
   it — not by making the letters bigger.

   DECISION ON THE SURFACE. A page shows what is needed to choose. Anything a
   reader consults rather than reads — spec tables, configurations, glass and
   finish lists — sits one interaction below, in a drawer or a hover detail.

   Zero border-radius. Zero elevation. Single theme.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{
  /* ── SURFACES ─────────────────────────────────────────────────────────────
     A spectrum of near-blacks, not one black and a set of borders. Every step
     is small enough to read as black on its own; what they do is separate one
     surface from the next without drawing a line. Sections are distinguished
     by tone, cards by tone, hover by tone. Rules are the exception now, not
     the structure. */
  --s0:#070708;  /* page ground, the deepest                      */
  --s1:#0a0a0c;  /* alternate band — a section that steps forward */
  --s2:#0e0e11;  /* card, panel                                   */
  --s3:#1c1c22;  /* hover                                         */
  --s4:#26262e;  /* pressed / selected                            */
  /* These two were #131316 and #191920, which put the hover step at
     1.039:1 against a card and 1.086:1 against the page. A surface change
     needs roughly 1.10:1 before the eye reads it at all, so every module on
     the site was changing state invisibly — the tonal ladder was correct in
     structure and simply too tight at the top. Widening the two tokens that
     already mean "hover" and "pressed" lifts every module at once rather
     than patching forty rules: hover is now 1.137:1 off a card and 1.188:1
     off the page, still quiet on a near-black ground. --s4 was unused. */

  /* hairlines: three weights, all quiet. The Stone Veil role, inverted. */
  --l0:#17171a;  /* barely there — internal divisions              */
  --l1:#212126;  /* standard seam                                  */
  --l2:#2e2e35;  /* emphasis, focus                                */

  /* ── INK ──────────────────────────────────────────────────────────────────
     Four levels, warm-cast so the page never reads blue-grey. */
  --t0:#f0eeea;  /* primary   */
  --t1:#a9a7a1;  /* secondary */
  --t2:#7d7a75;  /* tertiary — 4.70:1 on --s0, clears AA for small text */
  --t3:#656158;  /* quiet — 3.21:1, decorative and large text only     */

  /* ── EMPHASIS ─────────────────────────────────────────────────────────────
     There is no accent hue. Emphasis is a temperature shift on white, and the
     temperature is the division: glass transmits warm light, steel reflects
     cool. At a glance both read as white. */
  --em:#f6efe4;          /* Sharp Glazing — warm white  */
  --em-dim:#2a2521;      /* its surface at emphasis      */
  --sig:var(--em);       /* legacy alias, kept so nothing breaks */

  --sans:"Switzer","Helvetica Neue",Arial,sans-serif;
  /* one typeface (beta1.3.5): the client dropped the monospace. The token
     keeps its name because 113 rules read it; it is the brand sans now */
  --mono:var(--sans);

  /* ── SCALE ────────────────────────────────────────────────────────────────
     Walden's restraint: the largest type on the site is 32px and it appears
     once. Everything else lives between 10 and 20. Hierarchy is carried by
     position on the grid, alignment and whitespace — not by size. */
  --f-cap:10px; --f-mic:11px; --f-sm:13px; --f-bd:15px;
  --f-md:17px;  --f-lg:20px;  --f-xl:26px; --f-2xl:32px;

  /* 4px base, Walden's spacing scale */
  --x1:4px; --x2:8px; --x3:12px; --x4:16px; --x5:20px; --x6:24px;
  --x7:28px; --x8:32px; --x10:40px; --x12:48px; --x15:60px; --x20:80px;

  /* Walden's frame: a small, constant gutter and full-bleed content. The
     page is not a centred column on a wide ground — it uses the viewport,
     and everything inside shares the same two vertical edges. */
  --gut:24px;
  --step:clamp(44px,6vh,76px);
  --colw:12;
  --col:minmax(0,1fr);
}
/* the division is a temperature, applied to surfaces and to emphasis alike */
/* --s3 and --s4 are widened here to match the neutral ladder above. Widening
   only the base was not enough: a division is set on almost every route, so
   these two blocks were still shipping the old 1.039:1 hover everywhere it
   was actually seen. The new values were solved for, not picked — each is its
   old colour scaled until its luminance matches the neutral --s3/--s4, so the
   warm cast on Glazing (31,28,24) and the cool cast on Steel (27,28,36) come
   through exactly as before, at a step the eye can read. */
[data-div="sharp-glazing"]{
  --s1:#0b0a09; --s2:#100e0c; --s3:#1f1c18; --s4:#2b2620;
  --em:#f6efe4; --em-dim:#241f1a;
}
[data-div="sharp-steel"]{
  --s1:#09090c; --s2:#0d0e12; --s3:#1b1c24; --s4:#24272f;
  --em:#e8eef5; --em-dim:#1b1f25;
}

/* ── legacy token bridge ──────────────────────────────────────────────────
   The v5 names are kept pointing at the new spectrum so the whole stylesheet
   did not have to be rewritten in one pass. New work should use --s0..--s4,
   --l0..--l2 and --t0..--t3 directly. */
:root{
  --void:var(--s0); --plate:var(--s1); --raise:var(--s3);
  --ink:var(--t0); --mid:var(--t1); --dim:var(--t2); --ghost:var(--t3);
  --rule:var(--l1); --edge:var(--l2);
  --glaze:var(--em); --steel:var(--em);
  --holdbg:#4a4a50; --holdln:#6d6d76; --holdhatch:#565660; --holdtx:#f2f1ee;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  background:var(--void);color:var(--ink);font-family:var(--sans);
  font-size:16px;line-height:1.5;letter-spacing:-.011em;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
img,svg{display:block;max-width:100%}
button,input,select,textarea{font:inherit;color:inherit}
a{color:inherit;text-decoration:none}

:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{
  outline:2px solid var(--sig);outline-offset:3px;
}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:fixed;top:-100px;left:12px;z-index:200;background:var(--ink);color:var(--void);padding:10px 16px;font:600 13px/1 var(--sans)}
.skip:focus{top:12px}


/* ═══════════════════════════════════════════════════════════════════════════
   TYPE — the whole site lives between 10 and 26px, and 32 appears once.
   Rank is carried by four things that are not size:
     COLUMN     where a heading starts across the 12-column grid
     INDENT     how far from the page edge a block sits
     AIR        how much silence is above it
     WEIGHT     400 for everything; 500 only where a line must lead
   A page title at 20px sitting alone in column 1 with 80px of air above it
   outranks a 26px heading crammed into a card. That is the point.
   ═══════════════════════════════════════════════════════════════════════════ */
/* Running text had no measure cap anywhere on the site. At 1440px a .body
   paragraph in a full-width wrap runs past 150 characters — roughly twice the
   line the type is drawn for. Tracking is reset here too: the global -.011em
   on body is the reset for unclassed text, and inheriting it into 15px copy
   set it tighter than the 17px lede above it, inverting the optical ramp. */
/* the display set balanced its long headings and orphaned words on its
   short ones, because only .d1/.d2 carried balance */
.d3,.d4{text-wrap:balance}
.body+.body{margin-top:.9em}
.small{font-size:var(--f-sm);line-height:1.55;color:var(--t2)}
.lbl{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.lbl--sig{color:var(--t1)}
.num{font:400 var(--f-mic)/1.4 var(--mono);letter-spacing:.05em;color:var(--t2);
     font-variant-numeric:tabular-nums}


/* ═══════════════════════════════════════════════════════════════════════════
   ONE FRAME FOR THE WHOLE SITE
   Walden's rhythm: content anchors to the page edges behind a single small
   gutter, never floats in a centred column. Every section uses the same
   twelve columns, so a heading on one page starts on exactly the same pixel
   as a heading on any other. Before this the sheet had seven different left
   edges on a single product page.

   gutter    24px, constant, every breakpoint
   columns   12, one gap value (--x5)
   bands     full-bleed; only the grid inside them is inset
   ═══════════════════════════════════════════════════════════════════════════ */
.wrap{width:100%;margin:0;padding:0 var(--gut);min-width:0}
.wrap--bleed{padding:0}
.ftr .wrap{padding:0 var(--gut)}
.g12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:0 var(--x5)}
.g12>*{min-width:0}   /* grid children must be allowed to shrink */
/* rank by where a block starts, not by how big its letters are */
.r1{grid-column:1/span 6}
.r2{grid-column:2/span 6}
.r3{grid-column:3/span 5}
.r4{grid-column:7/span 6}
.rfull{grid-column:1/-1}
.rhalf{grid-column:1/span 6}
.rside{grid-column:9/span 4}
.rtext{grid-column:1/span 7}
@media (max-width:900px){
  .r1,.r2,.r3,.r4,.rhalf,.rside,.rtext{grid-column:1/-1}
}

/* ── air as rank ──────────────────────────────────────────────────────── */
.air-xl{padding-top:var(--x20)}
.air-lg{padding-top:var(--x15)}
.air-md{padding-top:var(--x10)}
.air-sm{padding-top:var(--x6)}

/* a section establishes its own paint context, so nothing inside one can
   ever overlap the next — the failure mode that put a film placeholder on
   top of the following heading */
/* ── sections separate by tone, not by rule ───────────────────────────── */
.sec--band{background:var(--s1)}
.head .lbl{display:block;margin-bottom:var(--x3)}
.head h1,.head h2{margin-bottom:var(--x3)}

/* ── header ───────────────────────────────────────────────────────────── */.hdr-in{max-width:none;padding:0 var(--gut);margin:0;display:flex;align-items:center;gap:clamp(14px,2.4vw,40px);height:54px}
.hdr .lock{flex:0 0 auto;transition:opacity .25s cubic-bezier(.16,1,.3,1)}
.hdr .lock:hover{opacity:.72}   /* the wordmark is a link home and never said so */
.hdr .lock svg{height:19px;width:auto;fill:var(--ink)}
.nav{display:flex;align-items:center;gap:clamp(12px,1.7vw,26px);margin-left:auto;min-width:0}
/* the phone menu's category groups and its secondary row; on a desktop the
   divisions' panels carry the categories instead */
.nav-grp,.nav-sec{display:none}
.nav a:hover{color:var(--ink)}
.nav a[aria-current]{color:var(--sig);border-bottom-color:var(--sig)}
.hdr-cta:hover{background:var(--ink);color:var(--void)}
.burger{display:none;margin-left:auto;border:1px solid var(--rule);background:none;padding:9px 13px;font:500 12px/1 var(--mono);letter-spacing:.1em;cursor:pointer}

/* ── breadcrumb ───────────────────────────────────────────────────────── */
.crumb{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:18px 0 0;font:400 11.5px/1.5 var(--mono);color:var(--dim);letter-spacing:.04em}
.crumb a:hover{color:var(--ink)}
.crumb i{font-style:normal;color:var(--ghost)}
/* The line was --dim throughout with the CURRENT page lifted to --mid, so the
   one item you cannot click was the brightest thing in the breadcrumb and
   every ancestor you can click was quieter. Inverted: the links carry the
   brighter ink because they are the targets, and where-you-are recedes. */
.crumb b{font-weight:400;color:var(--t2)}

/* ── section frame ────────────────────────────────────────────────────── */.sec{position:relative;isolation:isolate;padding:var(--step) 0;border-top:1px solid var(--rule)}.sec--flush{padding-top:var(--x6);border-top:0}.sec--tight{padding:calc(var(--step)*.6) 0}
.head .lbl{display:block;margin-bottom:16px}
.head h2,.head h1{margin-bottom:18px}

/* ── image slots · every picture on this site is one of these ─────────── */
/* An empty slot is a GREY BLOCK, not a dark outline. On a pure black page a
   #0a0a0a placeholder is invisible — you cannot see where the photography
   goes, which is the one job it has at this stage. Mid grey, hatched on the
   brand's 22.5 axis, with the filename and the shot brief printed on it. */
.shot{position:relative;display:block;background:var(--plate);border:1px solid var(--rule);
       overflow:hidden;aspect-ratio:var(--arx,3/2);min-height:120px}
/* the percentage-padding spacer is the fallback for browsers without
   aspect-ratio. It resolves against the container's width, so if the
   container ever has no width the box collapses to nothing and its
   absolutely-positioned contents paint over whatever follows. min-height
   above is the floor that makes that impossible. */
@supports not (aspect-ratio:1/1){
  .shot{aspect-ratio:auto}
  .shot::before{content:"";display:block;padding-top:var(--ar,66.67%)}
}
.shot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}

.shot--ph{background:var(--holdbg);border-color:var(--holdln)}
.shot:not(.shot--ph) .ph{display:none}

.ph{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;
    padding:clamp(12px,1.5vw,20px);gap:10px}
/* hatch + corner-to-corner cross: reads as "image" at any size */
.ph::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(112.5deg,transparent 0 15px,var(--holdhatch) 15px 16px)}
.ph::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.55;
  background:
    linear-gradient(to bottom right,transparent calc(50% - .5px),var(--holdln) calc(50% - .5px),
                    var(--holdln) calc(50% + .5px),transparent calc(50% + .5px)),
    linear-gradient(to bottom left,transparent calc(50% - .5px),var(--holdln) calc(50% - .5px),
                    var(--holdln) calc(50% + .5px),transparent calc(50% + .5px))}
.ph .ph-top,.film-ph .ph-top{position:relative;z-index:2;display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.ph .ph-tag,.film-ph .ph-tag{font:600 9.5px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--void);
        background:var(--sig);padding:3px 6px}
.ph .ph-id,.film-ph .ph-id{font:400 9.5px/1.3 var(--mono);color:var(--holdtx);text-align:right;word-break:break-all}
.ph .ph-brief,.film-ph .ph-brief{position:relative;z-index:2;font:400 var(--f-mic)/1.5 var(--mono);color:var(--holdtx);max-width:min(46ch,100%);overflow-wrap:anywhere;hyphens:auto}
.ph .ph-ar,.film-ph .ph-ar{position:relative;z-index:2;font:400 9.5px/1 var(--mono);color:var(--holdtx);opacity:.7}
.ar-11{--ar:100%;--arx:1/1}      .ar-43{--ar:75%;--arx:4/3}
.ar-32{--ar:66.67%;--arx:3/2}    .ar-169{--ar:56.25%;--arx:16/9}
.ar-219{--ar:42.85%;--arx:21/9}  .ar-45{--ar:125%;--arx:4/5}
.ar-34{--ar:133.33%;--arx:3/4}   .ar-21{--ar:50%;--arx:2/1}

/* ── 22.5 axonometric drawings ────────────────────────────────────────── */
/* Restored from v4. Every receding edge is arctan(sqrt2 - 1) = 22.5 degrees,
   measured off the logo artwork. Diagrams carry the geometry; photography
   carries the detail. */
.dwg{border:1px solid var(--rule);background:var(--plate);padding:clamp(18px,2.2vw,30px);
     display:flex;flex-direction:column;gap:16px;min-width:0}
.dwg svg{width:100%;height:auto;display:block;overflow:visible}
.dwg-stroke{stroke:var(--ink);fill:none;stroke-width:1.35;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.dwg-hair{stroke:var(--dim);fill:none;stroke-width:.9;vector-effect:non-scaling-stroke}
.dwg-glass{fill:rgba(255,255,255,.055);stroke:none}
.dwg-dash{stroke:var(--sig);fill:none;stroke-width:.9;stroke-dasharray:3 4;vector-effect:non-scaling-stroke}
a.dwg:hover{background:var(--raise)}
a.dwg:hover .dwg-stroke{stroke:var(--sig)}
.dwg-cap{display:flex;flex-wrap:wrap;gap:4px 14px;font:400 11px/1.4 var(--mono);color:var(--dim);
         letter-spacing:.05em;margin-top:auto}
.dwg-cap b{color:var(--ink);font-weight:500}
.dwg-note{display:flex;flex-wrap:wrap;gap:6px 14px;padding-top:18px;margin-top:1px;
          font:400 11px/1.5 var(--mono);color:var(--t2);letter-spacing:.05em}
.dwg-note b{color:var(--mid);font-weight:500}


/* ═══════════════════════════════════════════════════════════════════════════
   PAGE TIERS — hierarchy expressed as spatial generosity.
   The rule: the more space a page is willing to waste, the higher it ranks.
   A primary page gets a viewport to itself and says one thing. A reference
   page starts on a list and says forty. Nothing about this is decoration —
   the reader should be able to tell where they are in the structure before
   reading a single word.

     t1  OVERTURE   division hubs. One title, one film, nothing else above
                    the fold. The only tier with display type at full size.
     t2  CHAPTER    category landings. Opens on the axonometric drawing, not
                    a photograph. Title steps down. Two columns from the top.
     t3  ENTRY      products, guides, project studies. Opens on the numbers.
                    Sticky side panel. Title is compact.
     t4  INDEX      listings and audience pages. No title block at all — the
                    list is the opening move. Dense rows.
     t5  UTILITY    quote and the two booking routes. Opens on the form.
                    Highest density; the label is the only chrome.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── t1 overture ──────────────────────────────────────────────────────── */
.t1-open{min-height:calc(100svh - 66px);display:flex;flex-direction:column;justify-content:flex-end;
         padding-bottom:clamp(28px,5vh,64px)}
.t1-open .t1-lock{width:min(430px,64vw);margin-bottom:auto;padding-top:clamp(30px,7vh,86px)}
.t1-open .t1-lock svg{width:100%;height:auto;fill:var(--ink)}
.t1-ttl{font-size:var(--f-2xl);line-height:1.06;letter-spacing:-.024em;font-weight:400;
        text-wrap:balance;margin:clamp(20px,4vh,44px) 0 clamp(16px,2.4vh,30px)}
.t1-lede{font-size:var(--f-md);line-height:1.36;color:var(--mid);max-width:44ch;letter-spacing:-.016em}
.t1-cue{display:flex;align-items:center;gap:12px;margin-top:clamp(24px,4vh,48px);
        font:500 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.t1-cue i{display:block;width:46px;height:1px;background:var(--sig);transform-origin:left;
          animation:cue 2.6s cubic-bezier(.5,0,.5,1) infinite}
@keyframes cue{0%,100%{transform:scaleX(.25)}50%{transform:scaleX(1)}}

/* ── t2 chapter ───────────────────────────────────────────────────────── */
.t2-open{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.92fr);gap:1px;
         background:var(--rule);border:1px solid var(--rule);margin-top:26px}
.t2-open>*{background:var(--void);padding:clamp(24px,3.4vw,54px);min-width:0;
           display:flex;flex-direction:column;justify-content:center;gap:18px}
.t2-ttl{font-size:var(--f-xl);line-height:1.12;letter-spacing:-.02em;font-weight:400;text-wrap:balance}
.t2-dwg{align-items:center}
.t2-dwg svg{width:100%;height:auto;max-height:44vh;overflow:visible}

/* ── t3 entry · the numbers open the page ─────────────────────────────── */
.t3-open{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);
         display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;background:var(--rule)}
.t3-fig{background:var(--void);padding:clamp(16px,1.8vw,26px) clamp(14px,1.6vw,22px);
        display:flex;flex-direction:column;gap:7px;min-width:0}
.t3-fig dt{font:500 9.5px/1.3 var(--mono);letter-spacing:.15em;text-transform:uppercase;color:var(--dim)}
.t3-fig dd{font-size:var(--f-bd);line-height:1.1;letter-spacing:-.02em;color:var(--ink);
           font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.t3-ttl{font-size:var(--f-lg);line-height:1.2;letter-spacing:-.014em;font-weight:400;
        text-wrap:balance;margin:22px 0 14px}

/* ── t4 index · the list is the opening move ──────────────────────────── */
.t4-bar{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px 22px;padding:22px 0 20px;
        border-bottom:1px solid var(--rule)}
.t4-bar h1{font-size:var(--f-md);font-weight:500;letter-spacing:-.018em}
.t4-bar .t4-n{font:400 11.5px/1 var(--mono);color:var(--sig);letter-spacing:.1em}
.t4-bar p{font-size:14px;line-height:1.5;color:var(--dim);max-width:62ch;flex:1 1 320px}
/* dense rows */
.rows{border-bottom:1px solid var(--rule)}
.row{display:grid;grid-template-columns:44px minmax(0,2.1fr) minmax(0,2.4fr) minmax(0,1fr) 26px;
     gap:clamp(10px,1.6vw,26px);align-items:baseline;padding:15px 0;border-top:1px solid var(--rule);
     transition:background .18s,padding-left .18s;min-width:0}
a.row:hover{background:var(--raise);padding-left:10px}
a.row:hover .row-t{color:var(--sig)}
a.row:hover .row-go{color:var(--sig);transform:translateX(3px)}
.row-n{font:400 11.5px/1.6 var(--mono);color:var(--t2)}
.row-t{font-size:var(--f-bd);font-weight:500;letter-spacing:-.014em;line-height:1.25;
       transition:color .18s;min-width:0}
.row-d{font-size:13.5px;line-height:1.5;color:var(--dim);min-width:0}
.row-m{font:400 11.5px/1.5 var(--mono);color:var(--mid);text-align:right;min-width:0;
       font-variant-numeric:tabular-nums}
.row-go{font:400 13px/1.5 var(--mono);color:var(--t2);transition:color .18s,transform .18s}

/* ── t5 utility ───────────────────────────────────────────────────────── */
.t5-bar{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 20px;padding:18px 0 16px}
.t5-bar h1{font-size:var(--f-bd);font-weight:500;letter-spacing:-.014em}

/* ── side panel · t3, t4 and t5 ───────────────────────────────────────── */
.split{display:grid;grid-template-columns:minmax(0,248px) minmax(0,1fr);gap:1px;
       background:var(--rule);border-top:1px solid var(--rule)}
.aside{background:var(--void);padding:clamp(18px,2vw,26px) clamp(16px,1.6vw,22px);min-width:0}
.aside-in{position:sticky;top:86px;display:flex;flex-direction:column;gap:20px}
.aside h4{font:500 10px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim);
          margin-bottom:11px}
.aside nav{display:flex;flex-direction:column;gap:1px}
.aside nav a{font-size:13.5px;line-height:1.4;color:var(--dim);padding:7px 0 7px 12px;
             border-left:1px solid var(--rule);transition:.18s}
.aside nav a:hover{color:var(--ink);border-left-color:var(--edge)}
.aside nav a[aria-current]{color:var(--sig);border-left-color:var(--sig)}
.aside dl{display:flex;flex-direction:column;gap:9px}
.aside dt{font:500 9.5px/1.3 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.aside dd{font-size:14px;line-height:1.35;color:var(--mid);font-variant-numeric:tabular-nums}
.main{background:var(--void);min-width:0;padding:0 0 0 clamp(18px,2.4vw,40px)}
.main>.sec:first-child{border-top:0}
.main>.sec{padding-left:0;padding-right:clamp(0px,1.6vw,24px)}
.main .wrap{padding:0;max-width:none}

@media (max-width:980px){
  .t2-open{grid-template-columns:1fr}
  .split{grid-template-columns:1fr}
  .aside-in{position:static}
  .main{padding-left:0}
  .row{grid-template-columns:38px minmax(0,1fr) 22px;row-gap:5px}
  .row-d{grid-column:2/4}.row-m{grid-column:2/4;text-align:left}
  /* 2026-10-19: the empty description and meta (rowList always draws both)
     took the second and third grid rows, and the arrow fell to a fourth
     under the number. The arrow is placed with the number and the title, and
     a row with nothing to say there has no row for it (the desktop rules
     further down already did this above 980px). */
  .row-go{grid-column:3;grid-row:1}
  .row-d:empty,.row-m:empty{display:none}
}

/* ── film / video slot ────────────────────────────────────────────────── */
/* width:100% is load-bearing, not decoration. With aspect-ratio:21/9 and
   min-height:180px both set, a narrow viewport resolves the height from the
   min-height and then derives the WIDTH back out of the ratio: 180 x 21/9 =
   420px inside a 327px column, which pushed 69px of horizontal overflow onto
   /sharp-glazing and /sharp-steel at 375px. Stating the width stops the ratio
   ever feeding backwards into it. Found with the comps parked, but not caused
   by them — putting a poster image back leaves the box at 420px. */
.film{position:relative;display:block;width:100%;background:var(--holdbg);border:1px solid var(--holdln);
       overflow:hidden;aspect-ratio:21/9;min-height:180px}
@supports not (aspect-ratio:1/1){
  .film{aspect-ratio:auto}
  .film::before{content:"";display:block;padding-top:42.85%}
}
.film-ph{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;
         padding:clamp(14px,1.8vw,24px)}
.film-ph::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(112.5deg,transparent 0 15px,var(--holdhatch) 15px 16px)}
.film-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:clamp(46px,5vw,72px);
           height:clamp(46px,5vw,72px);border:1px solid var(--holdln);display:grid;place-items:center;
           color:var(--holdtx);font:400 11px/1 var(--mono);letter-spacing:.1em}
/* Loading (beta1.3.2). A picture on its way is a quiet frame: the plate, no
   hatch, no id, no brief, no demo number. Those belong to a slot with no
   picture. The picture fades in when it lands instead of snapping over what
   was underneath. These follow .film so film--loading wins its background. */
.shot img,.film-poster,.film video{transition:opacity .45s cubic-bezier(.16,1,.3,1)}
.shot--loading img,.film--loading .film-poster,.film--loading video{opacity:0}
.film--loading{background:var(--plate);border-color:var(--rule)}
.film--loading .film-ph,.film--loading .film-play{visibility:hidden}
:root[data-motion="off"] .shot img,:root[data-motion="off"] .film-poster,
:root[data-motion="off"] .film video{transition:none}
/* Theta is shown to clients (beta1.3.4): a slot with no picture is a quiet
   frame there too, like one still loading. The labelled placeholder (file
   name, shot brief, demo number) stays in the working build, where it is the
   shot list. */
[data-variant="theta"] .shot--ph{background:var(--plate);border-color:var(--rule)}
[data-variant="theta"] .shot--ph .ph,[data-variant="theta"] .film-ph,
[data-variant="theta"] .film-play{visibility:hidden}
.film-play::after{content:"";width:0;height:0;border-left:11px solid currentColor;
                  border-top:7px solid transparent;border-bottom:7px solid transparent;margin-left:3px}

/* ── collapsed 1px mesh ───────────────────────────────────────────────── */
.mesh{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
.mesh--2{grid-template-columns:repeat(2,1fr)}
.mesh--3{grid-template-columns:repeat(3,1fr)}
.mesh--4{grid-template-columns:repeat(4,1fr)}
.cell{background:var(--void);padding:clamp(20px,2.4vw,32px);display:flex;flex-direction:column;gap:12px;min-width:0}
a.cell{transition:background .18s}
a.cell:hover{background:var(--raise)}
a.cell:hover .cell-go{color:var(--sig)}
.cell-go{margin-top:auto;padding-top:12px;font:500 11px/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--dim);transition:color .18s}

/* ── chooser (category + subtype) ─────────────────────────────────────── */
.choose{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
.choose--2{grid-template-columns:repeat(2,1fr)}
.choose--3{grid-template-columns:repeat(3,1fr)}
.choose--4{grid-template-columns:repeat(4,1fr)}
.opt:hover{background:var(--raise)}
.opt .num{color:var(--sig)}
.opt h3{font-size:var(--f-bd);font-weight:500;letter-spacing:-.008em;line-height:1.3}
.opt p{font-size:14px;line-height:1.55;color:var(--dim)}
.opt-n{margin-top:auto;padding-top:14px;font:400 11px/1 var(--mono);letter-spacing:.1em;color:var(--t2);text-transform:uppercase}

/* ── product card ─────────────────────────────────────────────────────── */
.pcard:hover{background:var(--raise)}
.pcard .shot{border:0;border-bottom:1px solid var(--rule)}
.pcard h3{font-size:var(--f-bd);font-weight:500;letter-spacing:-.006em;line-height:1.3}
.pcard p{font-size:13.5px;line-height:1.5;color:var(--dim)}
.pmeta{margin-top:auto;padding-top:14px;border-top:1px solid var(--rule);display:flex;flex-wrap:wrap;gap:4px 18px;font:400 11.5px/1.4 var(--mono);color:var(--dim)}
.pmeta b{font-weight:400;color:var(--mid)}
.pcard:hover .pmeta b{color:var(--sig)}

/* ── spec / data tables ───────────────────────────────────────────────── */
.specs{display:grid;grid-template-columns:minmax(150px,1fr) minmax(0,1.7fr);gap:0;border-top:1px solid var(--rule)}
.specs dt,.specs dd{padding:13px 0;border-bottom:1px solid var(--rule);min-width:0;font-size:14px}
.specs dt{font:400 12px/1.5 var(--mono);letter-spacing:.05em;color:var(--dim);text-transform:uppercase;padding-right:20px}
.specs dd{color:var(--ink);overflow-wrap:anywhere}

.tbl-x{overflow-x:auto;border:1px solid var(--l1);min-width:0;max-width:100%}
.tbl{width:100%;border-collapse:collapse;font-size:14px;min-width:560px}
.tbl th,.tbl td{padding:13px 16px;text-align:left;border-bottom:1px solid var(--rule);vertical-align:top}
.tbl thead th{font:500 11px/1.3 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--dim);background:var(--plate)}
.tbl tbody th{font-weight:500;color:var(--ink)}
.tbl td{color:var(--mid)}
.tbl tr:last-child th,.tbl tr:last-child td{border-bottom:0}

/* ── FAQ ──────────────────────────────────────────────────────────────── */
/* The top rule used to live on .faq, the container. fx-rise animates each
   `.faq details` individually (fx-rise.js:27), so the first row slid up
   through a border that stayed where it was — a line drawn straight across
   the question, for the length of the arrival. A rule that delimits a row
   has to travel with that row, so it belongs to the row. */
.faq details{border-bottom:1px solid var(--rule)}
.faq details:first-child{border-top:1px solid var(--rule)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";position:absolute;right:6px;top:50%;transform:translateY(-50%);font:300 22px/1 var(--sans);color:var(--dim)}
.faq details[open] summary::after{content:"–";color:var(--sig)}
.faq summary:hover{color:var(--sig)}
.faq-a{padding:0 clamp(0px,6vw,80px) 22px 0;font-size:15px;line-height:1.62;color:var(--mid);max-width:76ch}

/* ── CTA pair (schematic: "dual CTAs" on every template) ──────────────── */
.duo{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);grid-template-columns:repeat(2,1fr)}
.act:hover{background:var(--raise)}
.act h3{font-size:var(--f-md);font-weight:500;letter-spacing:-.02em}
.act p{font-size:14px;line-height:1.55;color:var(--dim);max-width:44ch}
.act .go{margin-top:auto;padding-top:16px;font:500 11.5px/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--sig)}
.btn:hover{background:var(--ink);color:var(--void)}
.btn--sig:hover{background:var(--sig);color:var(--void)}
.btn--ghost:hover{background:var(--raise);color:var(--ink)}
.btn[disabled]{opacity:.4;cursor:not-allowed}
.btn[disabled]:hover{background:none;color:inherit}
.btns{display:flex;flex-wrap:wrap;gap:12px}

/* ── filters ──────────────────────────────────────────────────────────── */
.filters{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-bottom:1px}
.fgrp{background:var(--void);padding:14px 18px;display:flex;flex-wrap:wrap;align-items:center;gap:9px;flex:1 1 240px;min-width:0}
.fgrp>.lbl{flex:0 0 100%;margin-bottom:2px}
.chip:hover{color:var(--ink);border-color:var(--edge)}
.chip[aria-pressed="true"]{border-color:var(--sig);color:var(--sig)}
.fcount{padding:14px 18px;background:var(--void);font:400 12px/1.3 var(--mono);color:var(--dim);display:flex;align-items:center}

/* ── multi-step flow (quote / bookings) ───────────────────────────────── */
.flow{display:grid;grid-template-columns:minmax(0,240px) minmax(0,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.flow-rail{background:var(--void);padding:clamp(20px,2.4vw,30px);display:flex;flex-direction:column;gap:2px}
.frow{display:flex;gap:13px;padding:11px 0;border-bottom:1px solid var(--rule);align-items:flex-start;min-width:0}
.frow:last-child{border-bottom:0}
.frow .n{font:400 11px/1.5 var(--mono);color:var(--t2);flex:0 0 auto}
.frow .t{font-size:13.5px;line-height:1.4;color:var(--dim);min-width:0}
.frow.on .n,.frow.on .t{color:var(--sig)}
.frow.done .t{color:var(--mid)}
.flow-body{background:var(--void);padding:clamp(24px,3vw,44px);min-width:0}
.fields{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:26px}
.f{background:var(--void);padding:15px 18px;display:flex;flex-direction:column;gap:7px;min-width:0}
.f--half{grid-column:span 1}
.f label{font:500 10.5px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.f input,.f select,.f textarea{background:none;border:0;border-bottom:1px solid var(--rule);padding:7px 0;font-size:15px;color:var(--ink);width:100%;min-width:0}
.f input:focus,.f select:focus,.f textarea:focus{border-bottom-color:var(--sig)}
.f select{cursor:pointer}
.f select option{background:var(--plate);color:var(--ink)}
/* iOS zooms into any focused field under 16px and leaves the page zoomed:
   on touch screens only, field text is 16px (1px up). Desktop keeps 15px. */
@media (pointer:coarse){ .f input,.f select,.f textarea{font-size:16px} }
.f .hint{font:400 11.5px/1.4 var(--mono);color:var(--t2)}
.f-err{color:var(--sig);font:400 11.5px/1.4 var(--mono)}
.pick{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule)}
.pick button:hover{background:var(--raise)}
.pick button[aria-pressed="true"]{background:var(--raise)}
.pick button[aria-pressed="true"] .pk-t{color:var(--sig)}
.pk-t{font-size:15.5px;font-weight:500;letter-spacing:-.012em}
.pk-d{font-size:13px;line-height:1.5;color:var(--dim)}
.flow-nav{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px;padding-top:24px;border-top:1px solid var(--rule)}
/* sending (beta1.3.0): what stopped a send sits above the button that tried
   it; the honeypot is in the form but off every screen */
.flow-err{margin-top:26px;padding:14px 16px;border:1px solid var(--edge);border-left:2px solid var(--sig);display:flex;flex-direction:column;gap:12px}
.flow-err p{margin:0;font-size:14px;line-height:1.5;color:var(--ink)}
.flow-err a{color:var(--ink);text-decoration:underline;text-underline-offset:2px}
.flow-go{display:flex;flex-wrap:wrap;gap:10px}
.f-hp{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
/* the subject of an enquiry, carried from the page it was started on: the
   sticky bar's name-and-category pair, in the form's hairline box, with the
   filter chip as its Remove (beta1.7.x) */
.enq-ctx{display:flex;align-items:center;gap:12px 18px;flex-wrap:wrap;margin-top:22px;padding:13px 18px;border:1px solid var(--rule)}
.enq-ctx .enq-ctx-id{flex:1 1 160px}
.enq-ctx .enq-ctx-id b{white-space:normal}
.enq-ctx .chip:disabled{opacity:.5;cursor:default}
.cal-cap{margin:22px 0 10px;font:400 11.5px/1.4 var(--mono);color:var(--t2)}
.cal-cap + .cal{margin-top:0}

/* calendar */
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:22px}
.cal-h{background:var(--plate);padding:9px 4px;text-align:center;font:500 10px/1 var(--mono);letter-spacing:.1em;color:var(--dim)}
.cal-d{background:var(--void);border:0;aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;color:var(--mid);font:400 13px/1 var(--mono);transition:background .16s}
.cal-d:hover:not([disabled]){background:var(--raise);color:var(--ink)}
.cal-d[disabled]{color:var(--ghost);cursor:not-allowed}
.cal-d i{width:3px;height:3px;background:var(--sig);font-size:0}
.cal-d[disabled] i{background:transparent}
.cal-d[aria-pressed="true"]{background:var(--sig);color:var(--void)}
.cal-d[aria-pressed="true"] i{background:var(--void)}
.slots{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:1px}
.slot{background:var(--void);border:0;padding:12px 17px;font:400 13px/1 var(--mono);color:var(--mid);cursor:pointer;flex:1 1 auto;transition:background .16s}
.slot:hover{background:var(--raise);color:var(--ink)}
.slot[aria-pressed="true"]{background:var(--sig);color:var(--void)}

/* ── explorer (schematic block 05) ────────────────────────────────────── */
.expl{position:relative;border:1px solid var(--rule);background:var(--plate)}
/* min-height:320px beat the ratio below ~569px, but the .shot inside still
   sized itself from the ratio alone — at 375px the stage was 325x320 while
   the picture was only 325x183, leaving a 137px dead band. .expl-spots is
   anchored to the STAGE, so seven of the eleven hotspots were positioned
   against a box 1.75x too tall and landed below the photograph entirely,
   on top of the readout. The stage must be the picture. */







.expl-list{border-top:1px solid var(--rule)}
.expl-list summary::-webkit-details-marker{display:none}
.expl-list summary:hover{color:var(--ink)}

/* ── marquee ──────────────────────────────────────────────────────────── */
.marq{overflow:hidden;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:17px 0;display:flex}
.marq-t{display:flex;flex:0 0 auto;gap:52px;padding-right:52px;animation:run 46s linear infinite;will-change:transform}
.marq span{font:400 12px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--dim);white-space:nowrap}
@keyframes run{to{transform:translateX(-100%)}}

/* ── reveal ───────────────────────────────────────────────────────────── */
/* .rv is inert — fx-rise drives arrival for every block on the site.
   Nothing here may hide content: a block the rig never reaches must simply
   be readable. */
.rv{opacity:1}

/* ── footer ───────────────────────────────────────────────────────────── */
.ftr h2{font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin:0 0 16px}
.ftr ul{list-style:none;display:flex;flex-direction:column;gap:9px}
.ftr li a{font-size:14px;color:var(--mid)}
.ftr li a:hover{color:var(--sig)}
.ftr-end .sp{margin-left:auto}
/* ── the motion toggle ────────────────────────────────────────────────────
   Motion is forced on across the site, which deliberately overrides
   prefers-reduced-motion. This control is the entire mitigation for that, so
   it has to read as a control and clear a 24px pointer target — it was
   shipping unstyled and empty. It speaks the footer's own language: mono,
   uppercase, a hairline box, no colour of its own. */
/* ── dev banner ───────────────────────────────────────────────────────── */
.devbar{position:fixed;left:0;right:0;bottom:0;z-index:150;background:var(--sig);color:#000;padding:8px var(--gut);font:500 11.5px/1.4 var(--mono);display:flex;flex-wrap:wrap;gap:6px 20px;align-items:center}
.devbar b{font-weight:700}
.devbar button{background:#000;color:var(--sig);border:0;padding:5px 11px;font:500 11px/1 var(--mono);cursor:pointer}
body.dev{padding-bottom:64px}



/* ═══════════════════════════════════════════════════════════════════════════
   ACTION HIERARCHY — five levels, five different objects.
   Everything used to be a bordered rectangle with a line under it, so a
   reader had no way to tell "Request a quote" from "Open". These are built
   differently from each other, not just coloured differently, and each level
   answers the pointer in its own way. The hover IS the hierarchy signal:
   the higher the level, the more the control moves.

     a1  commit      solid, accent, carries a glyph. One per page.
     a2  arrange     outlined; the border draws itself on approach.
     a3  traverse    no box at all — a word, a rule and an arrow.
     a4  refine      filter chips. Fill rises from the baseline.
     a5  read        inline link. The underline wipes through.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── a1 · commit ──────────────────────────────────────────────────────── */
.a1 .ico{width:17px;height:17px;flex:0 0 auto}
.a1 .ico *{stroke:var(--void)}
.a1::before{content:"";position:absolute;inset:0;background:var(--ink);z-index:-1;
  transform:translateY(101%) skewY(-4.5deg);transition:transform .40s cubic-bezier(.16,1,.3,1)}
.a1:hover::before{transform:translateY(0) skewY(0)}
.a1 .a1-ar{margin-left:auto;transition:transform .34s cubic-bezier(.16,1,.3,1)}
.a1:hover .a1-ar{transform:translate(6px,2.5px)}
/* The brightest, most important control on the site did not respond to the
   pointer: the only hover it carried was a wipe on ::before and a nudge on
   the arrow. It is filled with --sig (a warm white), so pure white is the
   one step available that still reads as the same button. .btn--sig already
   does exactly this, so this is the site agreeing with itself. */.a1{display:inline-flex;align-items:center;gap:12px;position:relative;isolation:isolate;background:var(--sig);color:var(--void);border:0;padding:15px 22px;cursor:pointer;font:600 14px/1 var(--sans);letter-spacing:-.008em;overflow:hidden;transition:background .25s cubic-bezier(.16,1,.3,1)}
.a1:hover{background:#fff}       /* 22.5°: dx, dx*tan */
.a1:active{transform:translate(1px,.4px) scale(.99)}

/* ── a2 · arrange ─────────────────────────────────────────────────────── */
.a2{
  display:inline-flex;align-items:center;gap:11px;position:relative;
  background:none;color:var(--t0);border:1px solid var(--l2);padding:14px 20px;cursor:pointer;
  font:500 13.5px/1 var(--sans);letter-spacing:-.006em;
  transition:background .3s cubic-bezier(.16,1,.3,1),color .3s,border-color .3s;
}
.a2 .ico{width:16px;height:16px;flex:0 0 auto}
.a2 .a2-l,.a2 .a2-r{display:none}          /* the drawn edges are retired */
.a2:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.a2:hover .ico *{stroke:var(--s0)}
.a2:active{transform:translate(1px,.4px) scale(.99)}

/* ── a3 · traverse ───────────────────────────────────────────────────── */
.a3:hover{color:var(--t0);letter-spacing:.17em}
.a3 i{font-style:normal;transition:transform .34s cubic-bezier(.16,1,.3,1)}
.a3:hover i{transform:translate(8px,3.3px)}      /* travels on the 22.5 axis */
.a3:active{transform:translate(1px,.4px)}

/* ── a4 · refine ──────────────────────────────────────────────────────── */
.a4{
  position:relative;isolation:isolate;overflow:hidden;background:none;
  border:1px solid var(--rule);padding:7px 13px;cursor:pointer;
  font:400 12px/1.3 var(--mono);letter-spacing:.03em;color:var(--dim);
  transition:color .22s,border-color .22s;
}
.a4::before{content:"";position:absolute;inset:0;background:var(--raise);z-index:-1;
  transform:scaleY(0);transform-origin:bottom;transition:transform .28s cubic-bezier(.16,1,.3,1)}
.a4:hover::before{transform:scaleY(1)}
.a4:hover{color:var(--ink);border-color:var(--edge)}
.a4[aria-pressed="true"]{color:var(--sig);border-color:var(--sig)}
.a4:active{transform:translate(1px,.4px) scale(.97)}

/* ── a5 · read ───────────────────────────────────────────────────────────
   The quietest level gets the quietest mechanism: colour, nothing else. An
   underline that wipes through is more event than an inline link deserves. */
.a5{position:relative;color:var(--t1);text-decoration:none;
    transition:color .22s cubic-bezier(.16,1,.3,1)}
.a5:hover{color:var(--t0)}

/* ── the floating commit ──────────────────────────────────────────────────
   The primary action does not scroll away. It sits at the bottom-right from
   the moment the reader has passed the first screen, and steps aside for the
   footer so it never covers the contact details. */
/* ── the corner commit: one control, frosted ────────────────────────────
   Was three blocks at equal weight whose labels were hidden below 620px,
   which left a phone with three unreadable squares. One action, and the
   label never leaves. */
.a-float{position:fixed;right:var(--gut);bottom:var(--gut);z-index:70;display:flex;
  opacity:0;transform:translateY(14px);pointer-events:none;
  transition:opacity .42s cubic-bezier(.16,1,.3,1),transform .42s cubic-bezier(.16,1,.3,1)}
.a-float.on{opacity:1;transform:none;pointer-events:auto}
.a-float.tuck{transform:translateY(120%);opacity:0;pointer-events:none}
.a-float-btn{
  display:flex;align-items:center;gap:10px;padding:13px 19px;
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t0);
  /* the glass: a real backdrop blur over a fill dark enough that the label
     keeps its contrast whatever happens to be behind it — film, photograph
     or plain ground. The fill is the floor, the blur is the finish. */
  background:rgba(18,18,20,.72);
  -webkit-backdrop-filter:blur(22px) saturate(1.5);
  backdrop-filter:blur(22px) saturate(1.5);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 10px 34px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.09);
  transition:background .34s cubic-bezier(.16,1,.3,1),color .34s,
             border-color .34s,box-shadow .34s,transform .34s cubic-bezier(.16,1,.3,1)}
.a-float-btn .ico{width:15px;height:15px}
.a-float-btn .ico *{stroke:currentColor}
/* hover lifts it out of the glass and into the light */
.a-float-btn:hover{
  background:var(--em,#f4efe7);color:#111214;border-color:transparent;
  box-shadow:0 14px 40px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.5);
  transform:translateY(-2px)}
.a-float-btn:active{transform:translateY(0) scale(.985)}
body.dev .a-float{bottom:calc(var(--gut) + 40px)}
@media (prefers-reduced-motion:reduce){ .a-float,.a-float-btn{transition-duration:.01ms} }
/* the label stays at every width — that was the whole bug */
@media (max-width:620px){
  .a-float{left:var(--gut);right:var(--gut)}
  /* 44px is the comfortable touch target; at 15px padding it measured 43 */
  .a-float-btn{flex:1;justify-content:center;padding:16px 18px;min-height:48px}
}

/* ── the product bar ────────────────────────────────────────────────────── */
.pv-bar.on{transform:none}
/* the bar stays on to the end of a product page (fx-bar), so the page ends
   one bar height lower: the footer's last line is never under it */
html.pv-bar-pg .ftr{padding-bottom:calc(var(--x6) + var(--pv-bar-h,68px))}.pv-bar{position:fixed;left:0;right:0;bottom:0;z-index:69;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:var(--x5);padding:10px var(--gut);background:rgba(14,14,16,.82);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);border-top:1px solid rgba(255,255,255,.12);transform:translateY(101%);transition:transform .46s cubic-bezier(.16,1,.3,1)}
.pv-bar-fig{font:400 var(--f-sm)/1 var(--mono);color:var(--t1);white-space:nowrap}
.pv-bar-fig i{font-style:normal;color:var(--t2)}
.pv-bar-fig:empty{display:none}
.pv-bar-thumb{display:block;width:46px;flex:0 0 auto}
.pv-bar-thumb .shot{border:0;min-height:0}
.pv-bar-thumb .ph-top,.pv-bar-thumb .ph-brief,.pv-bar-thumb .ph-ar{display:none}
.pv-bar-id,.enq-ctx-id{display:flex;flex-direction:column;gap:3px;min-width:0}
.pv-bar-id b,.enq-ctx-id b{font-size:var(--f-sm);font-weight:400;color:var(--t0);letter-spacing:-.006em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pv-bar-id i,.enq-ctx-id i{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
  color:var(--t2);font-style:normal}
.pv-bar-go i{transition:transform .3s cubic-bezier(.16,1,.3,1)}
.pv-bar-go:hover{background:#fff}
.pv-bar-go:hover i{transform:translate(5px,0)}
.pv-bar-go:active{transform:scale(.985)}
body.dev .pv-bar{bottom:40px}
@media (prefers-reduced-motion:reduce){ .pv-bar{transition-duration:.01ms} }
@media (max-width:700px){
  .pv-bar{grid-template-columns:auto minmax(0,1fr) auto;gap:var(--x4);padding:9px var(--gut)}
  .pv-bar-fig{display:none}
  .pv-bar-go{padding:12px 16px}
}

/* ── icon base ────────────────────────────────────────────────────────── */
.ico{width:100%;height:auto;display:block;overflow:visible}
.i-line{stroke:currentColor;fill:none;stroke-width:1.15;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.i-thin{stroke:currentColor;fill:none;stroke-width:.75;opacity:.62;vector-effect:non-scaling-stroke}
.i-face{fill:currentColor;opacity:.10;stroke:none}
.i-none{fill:none;stroke:none}
.i-dot{stroke:var(--sig);fill:none;stroke-width:1.6;stroke-linecap:round;vector-effect:non-scaling-stroke}

/* icon hover: the glyph turns very slightly on its own axis, and the glass
   in it catches. Restrained — it is a mark, not a toy. */
.ico-box{display:block;width:100%;color:var(--ink);transition:color .28s}
.ico-box .ico{transition:transform .5s cubic-bezier(.16,1,.3,1)}
a:hover>.ico-box .ico,a:hover .ico-box .ico,.opt:hover .ico-box .ico{transform:translateY(-2px) scale(1.045)}
a:hover>.ico-box,a:hover .ico-box,.opt:hover .ico-box{color:var(--sig)}
a:hover .ico-box .i-face,.opt:hover .ico-box .i-face{opacity:.2}

/* ═══════════════════════════════════════════════════════════════════════════
   THREE STATES ON EVERYTHING CLICKABLE
     hover   the target announces itself before you commit
     press   :active — it takes the weight. Everything compresses on the
             22.5 axis rather than scaling, so the press reads as the surface
             being pushed along the grain of the geometry.
     after   .fx-hit — a one-shot confirmation fired on pointerup that
             outlives the press by 420ms, so a click that navigates still
             leaves a visible acknowledgement behind it.
   No border-radius, no shadow. The acknowledgement is a line and a shift.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{
  --press: cubic-bezier(.2,.9,.3,1);
  --hit:   cubic-bezier(.16,1,.3,1);
}

/* the universal press: a compression along the projection's own axis */
:where(a,button,summary,[role="button"],.chip,.slot,.cal-d,.opt,.cell,.pcard,.act,.row,.dwg,.pk-t,.pick button){
  -webkit-tap-highlight-color:transparent;
}
:where(a,button,summary,[role="button"]):active{
  transform:translate(0.8px,0.35px) scale(.994);
  transition:transform 60ms var(--press);
}

/* ── after-press · one-shot acknowledgement ───────────────────────────── */
@keyframes fxhit{
  0%{opacity:.85;transform:scaleX(0);transform-origin:left}
  38%{opacity:.85;transform:scaleX(1);transform-origin:left}
  39%{transform-origin:right}
  100%{opacity:0;transform:scaleX(0);transform-origin:right}
}
.fx-hit{position:relative}
/* Never claim ::after on a control that already owns it. .faq summary::after
   is the +/- marker; when this rule reached it the marker became the bar.
   The :not() is belt and braces — fx-core no longer marks summaries — so a
   future author who re-adds one does not reintroduce the same collision. */
.fx-hit:not(summary)::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--sig);
  pointer-events:none;animation:fxhit 420ms var(--hit) forwards;z-index:3;
}
/* on a bordered control the acknowledgement runs the whole frame instead */
@keyframes fxhitbox{0%{opacity:.9}100%{opacity:0}}
.btn.fx-hit::after,.hdr-cta.fx-hit::after,.chip.fx-hit::after{
  inset:-1px;height:auto;background:none;border:1px solid var(--sig);animation:fxhitbox 420ms var(--hit) forwards;
}

/* ── buttons ──────────────────────────────────────────────────────────── */
.btn::before{content:"";position:absolute;inset:0;background:var(--ink);z-index:-1;
  transform:translateY(101%) skewY(-4.5deg);transition:transform .34s var(--hit)}
.btn:hover::before{transform:translateY(0) skewY(0)}
.btn:hover{color:var(--void);background:none}
.btn--sig::before{background:var(--sig)}
.btn--ghost::before{background:var(--raise)}
.btn--ghost:hover{color:var(--ink)}
.btn:active{transform:translate(.8px,.35px) scale(.988)}.hdr-cta{border:1px solid var(--edge);padding:8px 15px;font-size:12.5px;font-weight:600;color:var(--ink);position:relative;overflow:hidden;isolation:isolate}
.hdr-cta::before{content:"";position:absolute;inset:0;background:var(--ink);z-index:-1;
  transform:translateY(101%);transition:transform .3s var(--hit)}
.hdr-cta:hover::before{transform:translateY(0)}
/* F11: inside the bar, .nav a:hover (0,2,1) out-ranked .hdr-cta:hover (0,2,0)
   and kept the label --ink on its own --ink fill: 1.00:1, the words vanished. */
.nav .hdr-cta:hover{color:var(--void)}
/* the same specificity clash took its side padding: .nav a{padding:5px 0}
   (0,1,1) out-ranked .hdr-cta (0,1,0), so the words touched the outline.
   Desktop bar only; the phone menu sets its own. */
@media (min-width:861px){ .nav .hdr-cta{padding:8px 15px} }

/* ── cards, cells, options ────────────────────────────────────────────── */
/* ═══════════════════════════════════════════════════════════════════════════
   HOVER — ONE MECHANISM PER COMPONENT, NOT ONE FOR ALL OF THEM
   Every block used to answer the pointer the same way: a line wipes in along
   the bottom edge. Six different components all saying the same thing tells
   the reader nothing about what any of them is. Each now moves in a way that
   suits what it is, and no two share a mechanism.

     .opt      a chooser tile     the glyph turns and rises; the tile warms
     .pcard    a product card     the photograph breathes; a wash lifts
     a.dwg     a drawing          the drawing redraws — strokes brighten
     a.cell    a mesh cell        a rule grows down the LEFT edge
     .ais      an aisle row       indents, and the arrow travels
     .row      a dense row        indents, the index swaps for a marker
     .hg       a home glyph       the glyph lifts out of its tile
     .act      a CTA panel        the panel's tone lifts, nothing moves
     .sib      margin nav         indents behind an em dash
     .fx-mega-p menu row          indents, meta fades up
   ══════════════════════════════════════════════════════════════════════════ */
a.cell,.opt,.pcard,.act,a.dwg{position:relative;isolation:isolate}
:where(a.cell,.opt,.pcard,.act,a.dwg):active{
  transform:translate(1.1px,.5px);transition:transform 70ms var(--press)}

/* ── .opt · the glyph is the thing, so the glyph moves ────────────────── */.opt{background:var(--void);padding:clamp(22px,2.6vw,34px);display:flex;flex-direction:column;gap:14px;min-width:0;transition:background .3s cubic-bezier(.16,1,.3,1)}
.opt:hover{background:var(--s3)}
.opt .ico-box{transition:transform .5s cubic-bezier(.16,1,.3,1)}
.opt:hover .ico-box{transform:translateY(-3px)}
.opt:hover .ico-box .ico{transform:rotate(-2.5deg)}      /* a fraction of 22.5 */
.opt .opt-n{transition:color .26s}
.opt:hover .opt-n{color:var(--t0)}

/* ── .pcard · the photograph breathes; a wash rises behind the caption ── */.pcard{background:var(--void);display:flex;flex-direction:column;min-width:0;transition:background .3s}
/* the hover zoom is the img's `scale` (fx.css, --fx-scale); this rule used
   to name only `transform`, so the zoom had no transition and snapped. It
   now eases in and out slowly (owner, 2026-10-19), and the opacity fade of
   a landing picture is kept. */
.pcard .shot img,.pcard .shot .ph{transition:transform .8s cubic-bezier(.16,1,.3,1),
  scale 1.4s cubic-bezier(.22,.61,.36,1),opacity .45s cubic-bezier(.16,1,.3,1)}
/* the .pcard photo hover lived here AND in fx.css (--fx-scale). Two writers
   on one transform: this one replaced the parallax while the pointer was on
   the card. fx.css keeps it, as the module that also drives the parallax. */
.pcard-b{padding:clamp(18px,2vw,26px);display:flex;flex-direction:column;gap:10px;flex:1;position:relative;isolation:isolate}
.pcard-b::before{content:"";position:absolute;inset:0;background:var(--s3);z-index:-1;
  transform:scaleY(0);transform-origin:bottom;transition:transform .42s cubic-bezier(.16,1,.3,1)}
.pcard:hover .pcard-b::before{transform:scaleY(1)}

/* ── a.dwg · the drawing redraws itself ───────────────────────────────── */
a.dwg{transition:background .3s}
a.dwg .dwg-stroke,a.dwg .dwg-hair,a.dwg .dwg-glass{
  transition:stroke .38s,fill .38s,opacity .38s}
a.dwg:hover{background:var(--s2)}
a.dwg:hover .dwg-hair{stroke:var(--t1)}
a.dwg:hover .dwg-glass{fill:rgba(255,255,255,.09)}
a.dwg svg{transition:transform .6s cubic-bezier(.16,1,.3,1)}
a.dwg:hover svg{transform:translateY(-3px)}

/* ── a.cell · a rule grows down the left edge, not across the bottom ──── */
/* a rule growing down the left edge was the oddest thing on the site — a
   vertical line has no relationship to a horizontal card. The surface lifts
   and the index number turns into the arrow instead. */
a.cell{transition:background .3s cubic-bezier(.16,1,.3,1)}
a.cell:hover{background:var(--s3)}
a.cell .num{transition:color .22s,opacity .22s}
a.cell:hover .num{opacity:0}
a.cell{position:relative}
a.cell::after{content:"\2192";position:absolute;left:clamp(20px,2.4vw,32px);
  top:clamp(20px,2.4vw,32px);font:400 13px/1.4 var(--mono);color:var(--t0);
  opacity:0;transform:translate(-6px,-2.5px);
  transition:opacity .26s,transform .3s cubic-bezier(.16,1,.3,1);pointer-events:none}
a.cell:hover::after{opacity:1;transform:none}
a.cell:hover .cell-go{color:var(--t0)}

/* ── .act · a CTA panel does not move; only its tone lifts ────────────── */.act{background:var(--void);padding:clamp(24px,3vw,40px);display:flex;flex-direction:column;gap:12px;transition:background .34s;min-width:0}
.act:hover{background:var(--s3)}
.act .go{transition:letter-spacing .34s}
.act:hover .go{letter-spacing:.18em}

/* ── .hg · the home glyph lifts out of its tile ───────────────────────── */
.hg .ico-box{transition:transform .5s cubic-bezier(.16,1,.3,1)}
.hg:hover .ico-box{transform:translateY(-4px)}

/* ── .row · the index swaps for a marker ──────────────────────────────── */
a.row .row-n{transition:color .22s,opacity .22s}
a.row:hover .row-n{opacity:0}
a.row{position:relative}
a.row::before{content:"—";position:absolute;left:0;top:15px;color:var(--t0);
  opacity:0;transform:translateX(-5px);transition:opacity .24s,transform .28s cubic-bezier(.16,1,.3,1)}
a.row:hover::before{opacity:1;transform:none}

/* ── .fx-mega-p · the meta rises into view ────────────────────────────── */
.fx-mega-meta{transition:color .24s,transform .3s cubic-bezier(.16,1,.3,1)}
.fx-mega-p:hover .fx-mega-meta{color:var(--t1);transform:translateX(2px)}

/* the after-press mark is the ONE thing every level shares — it is the
   acknowledgement, not the identity */
:where(a.cell,.opt,.pcard,.act,a.dwg).fx-hit::after{
  content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;background:var(--t0);
  animation:fxhit 420ms var(--hit) forwards;pointer-events:none;z-index:3}

/* ── nav ──────────────────────────────────────────────────────────────── */.nav a{font-size:13px;font-weight:500;color:var(--mid);letter-spacing:-.006em;padding:5px 0;border-bottom:1px solid transparent;transition:color .18s;position:relative}.crumb a{color:var(--t1);position:relative;transition:color .18s}
.crumb a:hover{color:var(--sig)}

/* ── chips, slots, calendar ───────────────────────────────────────────── */.chip{border:1px solid var(--rule);background:none;padding:6px 12px;font:400 12px/1.3 var(--mono);color:var(--dim);cursor:pointer;transition:color .2s,border-color .2s;letter-spacing:.03em;position:relative;overflow:hidden;isolation:isolate}
.chip::before{content:"";position:absolute;inset:0;background:var(--raise);z-index:-1;
  transform:scaleY(0);transform-origin:bottom;transition:transform .26s var(--hit)}
.chip:hover::before{transform:scaleY(1)}
.chip:active{transform:translate(.8px,.35px) scale(.97)}
.slot,.cal-d{position:relative;transition:background .18s,color .18s}
.slot:active,.cal-d:active:not([disabled]){transform:translate(.8px,.35px) scale(.97)}
.pick button:hover{padding-left:24px}
/* was a 2px bar growing down the left edge — the same vertical-line move that
   read as odd everywhere else. The option fills instead. */.pick button{background:var(--void);border:0;padding:17px 19px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:5px;transition:background .26s cubic-bezier(.16,1,.3,1),padding-left .26s;min-width:0;position:relative}
.pick button[aria-pressed="true"]{background:var(--s3)}
.pick button[aria-pressed="true"] .pk-t{color:var(--t0)}

/* ── faq, details ─────────────────────────────────────────────────────── */
.faq summary:hover{padding-left:8px}
.faq summary::after{transition:transform .3s var(--hit),color .2s}
.faq summary:hover::after{transform:translateY(-50%) rotate(90deg)}

/* ── explorer hotspots ────────────────────────────────────────────────── */


/* ── rows ─────────────────────────────────────────────────────────────── */
a.row:active{transform:none;padding-left:14px;transition:padding-left 70ms var(--press)}

/* ── responsive ───────────────────────────────────────────────────────── */
@media (max-width:1100px){
  .mesh--4{grid-template-columns:repeat(2,1fr)}
  .choose--4{grid-template-columns:repeat(2,1fr)}
  .flow{grid-template-columns:1fr}
}
@media (max-width:860px){
  .burger{display:block}
  /* inset:…auto leaves the height to the content and a fixed box does not
     scroll with the page, so anything past the viewport edge was unreachable
     by any gesture. Six links plus the CTA measure ~416px; a phone in
     landscape is 844px wide (still burger mode) with roughly 340-390px of
     height, which cut off Guides and Request a quote entirely. */
  .nav{position:fixed;inset:66px 0 auto;flex-direction:column;align-items:stretch;gap:0;background:var(--void);border-bottom:1px solid var(--rule);padding:8px var(--gut) 22px;margin:0;display:none;
       max-height:calc(100dvh - 66px);overflow-y:auto;overscroll-behavior:contain}
  .nav.open{display:flex}
  .nav a{padding:14px 0;border-bottom:1px solid var(--rule);font-size:16px}
  .nav a[aria-current]{border-bottom-color:var(--rule)}
  .hdr-cta{margin-top:14px;text-align:center;justify-content:center;display:flex}
  /* Sharp Glazing and Sharp Steel: each its own group, the division's link
     as the group's name and its categories under it, two to a row and set
     like the footer's columns (quieter links) */
  .nav a.nav-dl{border-bottom:0;padding-bottom:6px}
  .nav-grp{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--x5);padding:0 0 10px;border-bottom:1px solid var(--rule)}
  /* a 44px row to the finger (the links measured 37px); the type is unchanged */
  .nav .nav-grp a{border-bottom:0;padding:0;min-height:44px;display:flex;align-items:center;font-size:14px;font-weight:400;min-width:0}
  /* Guides, Services, Professionals, Contact: one quiet row under the button */
  .nav-sec{display:flex;flex-wrap:wrap;gap:0 var(--x4);padding-top:10px}
  .nav .nav-sec a{padding:0;min-height:44px;display:flex;align-items:center;border-bottom:0;font-size:13px;font-weight:400}
  .nav .nav-grp a,.nav .nav-sec a{color:var(--t2)}
  .nav .nav-grp a:hover,.nav .nav-sec a:hover{color:var(--ink)}
  .nav .nav-grp a[aria-current],.nav .nav-sec a[aria-current]{color:var(--sig)}
  .mesh--3,.mesh--4{grid-template-columns:repeat(2,1fr)}
  .choose--3,.choose--4{grid-template-columns:repeat(2,1fr)}
  .duo{grid-template-columns:1fr}
  
}
@media (max-width:620px){
  .mesh--2,.mesh--3,.mesh--4{grid-template-columns:1fr}
  .choose--2,.choose--3,.choose--4{grid-template-columns:1fr}
  .specs{grid-template-columns:1fr}
  .specs dt{padding-bottom:0;border-bottom:0}
  .specs dd{padding-top:5px}
  .cal-d{font-size:11px}
}
/* Motion is ON by default and does NOT consult the OS setting — the client
   asked for it forced on. The only opt-out is the in-page Motion control,
   which sets data-motion="off" on <html>. */
[data-motion="off"] .marq-t{animation:none}
[data-motion="off"] *{transition-duration:.01ms!important;animation-duration:.01ms!important}

/* ── the CTA pair, deliberately unequal ───────────────────────────────── */
.cta2{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:1px;
      background:var(--rule);border:1px solid var(--rule)}
.cta2>*{background:var(--void);padding:clamp(24px,3vw,44px);display:flex;flex-direction:column;
        gap:14px;align-items:flex-start;min-width:0}
.cta2-a{background:var(--plate)!important}
.cta2-a .a1{margin-top:auto}
.cta2-b .a2{margin-top:auto}
@media (max-width:860px){ .cta2{grid-template-columns:1fr} }

/* ── icon placements ──────────────────────────────────────────────────── */
.ico-box--opt{width:clamp(34px,3.4vw,46px);margin-bottom:4px}
.crumb-ico{width:15px;display:inline-block;color:var(--sig);margin-right:4px}
.row-ico{width:19px;color:var(--dim);transition:color .2s,transform .2s}
a.row:hover .row-ico{color:var(--sig);transform:translateY(-1px)}
.fx-mega-cat .ico{width:17px}
.aside .ico-box{width:38px;margin-bottom:4px}

/* the mega menu's category rows carry the same glyph as everywhere else */
.fx-mega-cat{grid-template-columns:20px 26px minmax(0,1fr) 28px}
.fx-mega-ico{width:34px;color:var(--t2);flex:0 0 auto;transition:color .22s,transform .3s cubic-bezier(.16,1,.3,1)}
.fx-mega-cat.on .fx-mega-ico,.fx-mega-cat:hover .fx-mega-ico{width:34px;color:var(--t2);flex:0 0 auto;transition:color .22s,transform .3s cubic-bezier(.16,1,.3,1)}

/* ── retire the old generic button ────────────────────────────────────────
   .btn stays only so nothing breaks mid-refactor; it is no longer used by
   any template. Anything still reaching for it renders as a3. */.btn{display:inline-flex;align-items:center;gap:11px;border:0;padding:9px 0;font-size:14px;font-weight:600;letter-spacing:.14em;background:none;cursor:pointer;transition:background .16s,color .16s;position:relative;overflow:hidden;isolation:isolate;color:var(--mid);font:500 11.5px/1 var(--mono);text-transform:uppercase}
.btn::before{display:none}
.btn:hover{background:none;color:var(--sig)}

.ftr-ico{width:15px;display:inline-block;vertical-align:-2px;margin-right:8px;color:var(--ghost);
         transition:color .2s}
.ftr li a{display:flex;align-items:center}
.ftr li a:hover .ftr-ico{color:var(--sig)}
.a-float .ico-w{display:block;width:15px;flex:0 0 auto}

/* ═══ THE HOMEPAGE ═════════════════════════════════════════════════════════
   Nothing else on the site looks like this, and nothing else is allowed to.
   Film runs full-bleed behind the title; the type sits at a scale no other
   route uses; the eight glyphs act as the contents page. ══════════════════ */
.home-film{position:absolute;inset:0;z-index:0}
.home-film .film{position:absolute;inset:0;border:0;background:#101010;
                 aspect-ratio:auto;min-height:0}
.home-film .film::before{display:none;padding-top:0}
.home-film .film video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.home-film .film-ph{opacity:.5}
.home-film .film-play{display:none}
/* the type has to stay legible over whatever film lands here. The top band
   is darker since beta1.3.1: the hero became a still with an overcast sky
   along its top edge, and the glass header's 13px links measured 2.35:1
   over it at .5. tools/film-contrast.js models these stops — keep it in step. */
.home-scrim{position:absolute;inset:0;
  background:linear-gradient(to top,var(--void) 4%,rgba(0,0,0,.72) 42%,rgba(0,0,0,.34) 78%,rgba(0,0,0,.66) 90%,rgba(0,0,0,.78) 100%)}
/* pinned to the bottom-left corner of the frame, where it plays itself */
.home-hero-in{position:absolute;left:0;bottom:0;z-index:1;
  padding:0 var(--gut) clamp(26px,5vh,54px);max-width:min(760px,92vw);
  display:flex;flex-direction:column;align-items:flex-start;gap:var(--x4)}
.home-lede{font-size:var(--f-md);line-height:1.42;color:var(--mid);max-width:52ch;
           letter-spacing:-.014em}
.home-note{position:relative;z-index:1;color:var(--ghost);max-width:82ch;line-height:1.6;
           margin-top:20px;font-size:11px}
/* the contents row — the site's whole product structure at once.
   It is NOT on the first screen. The hero gets one screen to say one thing;
   the contents arrive just after the peak, as the reader starts to move.
   Frosted rather than filled, so the film keeps running underneath and the
   row reads as a pane laid over the picture, not a bar cut out of it. */
/* The frost was for sitting over the film. The row now sits below the fold
   on solid ground, where rgba(10,10,12,.28) composites to #080809 against a
   #070708 page — a difference of 1.6, invisible as a surface, with an 18px
   blur blurring nothing. On solid ground it takes the site's card tone. */
.hg{background:var(--s2);padding:clamp(12px,1.3vw,18px);display:flex;flex-direction:column;
    gap:8px;min-width:0;transition:background .34s cubic-bezier(.16,1,.3,1)}
.hg:hover{background:var(--s3)}
.hg .ico-box{width:clamp(26px,2.4vw,34px)}
.hg-n{font:400 10px/1 var(--mono);color:var(--t2)}.hg-t{transition:color .24s;font-size:12.5px;font-weight:500;letter-spacing:-.008em;line-height:1.2}
.hg:hover .hg-t{color:var(--sig)}
.hg-c{font:400 10px/1 var(--mono);color:var(--t2);margin-top:auto}
/* Both of these restated repeat(8,1fr) verbatim — copied from the base rule
   and never reduced, so the contents row stayed eight across at every width.
   At 375px that is 318px / 8 = 39.75px a tile, and .hg's 12px padding leaves
   a 15.75px content box holding a 26px icon and an unbreakable ~45px word:
   every glyph and every category name painted across the tile beside it.
   min-width:0 on .hg removed the min-content floor that would have stopped it. */
/* The column count is a custom property because .home-glyphs declares its
   grid in five separate rules (.fx-rise, [data-motion=off], html:not(.fx-on),
   and the base twice), four of them AFTER these queries — so setting
   grid-template-columns here lost the cascade every time. A property is read
   by whichever rule wins, so the count no longer depends on source order. */
@media (max-width:1100px){ .home-glyphs{--glyph-cols:4} }
/* two to a row, and no product count, on a phone (1.4.2) */
@media (max-width:560px){ .home-glyphs{--glyph-cols:2} .hg-c{display:none} }

/* ═══ SCROLL CHARACTER BY TIER ═════════════════════════════════════════════
   The reveal itself carries rank. A tier 1 block arrives slowly from depth;
   a tier 4 row snaps in. Same mechanism, four different characters. */
:root[data-tier="1"] .rv{--fx-d:.58s}
:root[data-tier="2"] .rv{--fx-d:.5s}
:root[data-tier="3"] .rv{--fx-d:.44s}
:root[data-tier="4"] .rv{--fx-d:.36s}
:root[data-tier="5"] .rv{--fx-d:.3s}


/* tier 1 and 2 arrive with a little depth behind them; tier 4 and 5 do not,
   because a dense list that swims is only harder to read */



/* the layers only exist where there is depth to have */
.home-film,.home-ttl,.home-glyphs,.t1-ttl{will-change:transform}
:root[data-tier="4"] .home-film{will-change:auto}
[data-motion="off"] .home-film,[data-motion="off"] .home-ttl,
[data-motion="off"] .home-glyphs,[data-motion="off"] .t1-ttl{transform:none!important}

/* the footer link is the quietest level: no box, no arrow, only the wipe */
.ftr li a.a5{background-position:0 100%;padding-bottom:1px}
.ftr li a.a5:hover .ftr-ico{color:var(--sig)}

/* ═══════════════════════════════════════════════════════════════════════════
   PROGRESSIVE DISCLOSURE
   The surface of a page carries only what is needed to decide. Everything a
   reader would consult rather than read — twelve spec rows, seven
   configurations, four glass options — lives one interaction below, in a
   drawer. Built on <details> so it works with JS off and reads correctly to
   a screen reader and a crawler.
   ═══════════════════════════════════════════════════════════════════════════ */
.dw{border-top:1px solid var(--l1)}
.dw:last-of-type{border-bottom:1px solid var(--l1)}
.dw>summary{
  list-style:none;cursor:pointer;display:grid;
  grid-template-columns:minmax(0,1fr) auto 18px;align-items:baseline;gap:var(--x4);
  padding:var(--x4) 0;transition:padding-left .28s cubic-bezier(.16,1,.3,1),color .2s;
}
.dw>summary::-webkit-details-marker{display:none}
.dw>summary:hover{padding-left:var(--x2);color:var(--t0)}
.dw-n{font:400 var(--f-mic)/1 var(--mono);color:var(--t2);font-variant-numeric:tabular-nums}
.dw-x{position:relative;width:11px;height:11px;justify-self:end;align-self:center}
.dw-x::before,.dw-x::after{content:"";position:absolute;background:var(--t2);
  transition:transform .34s cubic-bezier(.16,1,.3,1),background .2s}
.dw-x::before{left:0;top:5px;width:11px;height:1px}
.dw-x::after{left:5px;top:0;width:1px;height:11px}
.dw[open] .dw-x::after{transform:scaleY(0)}
.dw>summary:hover .dw-x::before,.dw>summary:hover .dw-x::after{background:var(--t0)}
.dw-body{padding:0 0 var(--x6);animation:dwin .42s cubic-bezier(.16,1,.3,1)}
@keyframes dwin{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}
[data-motion="off"] .dw-body{animation:none}

/* the specification, once opened, is a quiet two-column table with no rules */
.dl{display:grid;grid-template-columns:minmax(140px,1fr) minmax(0,2fr);gap:var(--x2) var(--x6)}
.dl dt{font:400 var(--f-mic)/1.5 var(--mono);letter-spacing:.06em;color:var(--t2);text-transform:uppercase}
.dl dd{font-size:var(--f-sm);line-height:1.5;color:var(--t0);overflow-wrap:anywhere}
@media (max-width:620px){ .dl{grid-template-columns:1fr;gap:0} .dl dd{margin-bottom:var(--x3)} }
/* a plain list of options, set as running text rather than a stack of cards */
.opts{font-size:var(--f-sm);line-height:1.9;color:var(--t1)}
.opts b{font-weight:400;color:var(--t2);font-family:var(--mono);font-size:var(--f-mic);
        letter-spacing:.1em;text-transform:uppercase;display:block;margin-top:var(--x3)}

/* ── the figure strip: the only numbers allowed on the surface ────────── */
.fig{display:flex;flex-direction:column;gap:3px;min-width:0;padding:var(--x1) 0}
.fig dt{font:400 var(--f-cap)/1.3 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.fig dd{font-size:var(--f-bd);line-height:1.2;color:var(--t0);font-variant-numeric:tabular-nums}

/* ── hover detail · a product row tells you the rest without a click ──── */
.pop{position:relative}
.pop-c{
  position:absolute;left:0;top:calc(100% + 6px);z-index:60;width:min(360px,74vw);
  background:var(--s2);border:1px solid var(--l1);padding:var(--x4);
  opacity:0;visibility:hidden;transform:translateY(-4px);
  transition:opacity .22s,transform .28s cubic-bezier(.16,1,.3,1),visibility .22s;
  pointer-events:none;
}
.pop:hover .pop-c,.pop:focus-within .pop-c{opacity:1;visibility:visible;transform:none}
/* Escape dismisses it (app.js adds .pop-x) until the reader moves on */
.pop.pop-x .pop-c{opacity:0;visibility:hidden}
/* An overlay can only rise as far as its own stacking context, and .sec sets
   isolation:isolate so that the z-index:-1 backing layers stay inside their
   own section. That caps .pop-c's z-index:60 at the section's level, so the
   NEXT section — painting later at z-index:auto — drew over the bottom of the
   panel: measured 66px of a 192px panel covered by the following full-bleed
   band. The panel does not need a bigger number, it needs its section lifted
   while it is open. */
.sec:has(.pop:hover),.sec:has(.pop:focus-within){z-index:70}
.pop-c p{font-size:var(--f-sm);line-height:1.55;color:var(--t1);margin-bottom:var(--x3)}
.pop-c dl{display:grid;grid-template-columns:auto 1fr;gap:4px var(--x4)}
.pop-c dt{font:400 var(--f-cap)/1.5 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--t2)}
.pop-c dd{font-size:var(--f-sm);color:var(--t0);text-align:right;font-variant-numeric:tabular-nums}
@media (hover:none){ .pop-c{display:none} }

/* sibling navigation in the margin column */
.sib{display:flex;flex-direction:column}
.sib a{font-size:var(--f-sm);line-height:1.45;color:var(--t2);padding:var(--x2) 0;
       border-bottom:1px solid var(--l0);transition:color .2s,padding-left .24s}
.sib a:hover{color:var(--t0);padding-left:var(--x2)}
.sib a[aria-current]{color:var(--t0)}
.sib a[aria-current]::before{content:"— ";color:var(--t2)}

/* ── the aisle: a category as a list, not a grid of cards ─────────────── */
.cat-dwg{border:1px solid var(--l1);padding:var(--x5);background:var(--s1)}
.cat-dwg svg{width:100%;height:auto;max-height:150px;overflow:visible}
.aisle-h{display:flex;justify-content:space-between;gap:var(--x4);
         padding-bottom:var(--x3);border-bottom:1px solid var(--l1)}
.aisle{display:flex;flex-direction:column}
.ais{
  display:grid;grid-template-columns:34px minmax(0,1.1fr) minmax(0,1.9fr) minmax(0,.8fr) 16px;
  gap:var(--x5);align-items:baseline;padding:var(--x4) 0;border-bottom:1px solid var(--l0);
  transition:background .22s,padding-left .28s cubic-bezier(.16,1,.3,1);
}
.ais:hover{background:var(--s3);padding-left:var(--x3)}
.ais-n{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2)}
.ais-t{font-size:var(--f-bd);color:var(--t0);letter-spacing:-.006em;line-height:1.35}
.ais-d{font-size:var(--f-sm);color:var(--t2);line-height:1.5;min-width:0}
.ais-m{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);text-align:right;
       font-variant-numeric:tabular-nums}
.ais-go{font:400 var(--f-sm)/1.6 var(--mono);color:var(--t2);
        transition:color .22s,transform .28s cubic-bezier(.16,1,.3,1)}
.ais:hover .ais-go{color:var(--t0);transform:translate(4px,1.7px)}
@media (max-width:820px){
  .ais{grid-template-columns:30px minmax(0,1fr) 16px;row-gap:var(--x1)}
  .ais-d,.ais-m{grid-column:2/4}
  .ais-m{text-align:left}
  .aisle-h span:last-child{display:none}
}

/* ═══════════════════════════════════════════════════════════════════════════
   THE PRODUCT SPLIT — photography left to the page edge, one column of words
   on the right. Every line in the panel shares one left axis and one right
   axis; nothing in it gets its own width. ═══════════════════════════════════ */
.pv{display:grid;grid-template-columns:minmax(0,1fr) clamp(360px,32vw,520px);
    grid-template-rows:auto 1fr;
    align-items:start;border-bottom:1px solid var(--l1)}
/* The media column is a STACK, and the panel is what sticks.

   It was the other way round: one photograph forced to `height: calc(100svh
   - 52px)` with `aspect-ratio: auto`, in a sticky column. That single
   declaration caused everything wrong with this page. A picture told to be
   viewport-tall regardless of its own proportions is a picture being
   stretched — visibly so on the placeholder, whose diagonals stopped being
   diagonal — and the img inside overflowed its box by 85px. Meanwhile the
   sticky column was only ever 848px tall inside a row that reached 2075px
   once the drawers opened, so it had no travel: the photograph simply ended
   and left a dead column beside the reader.

   A stack of images at their own aspect ratios has intrinsic height. Nothing
   needs telling how tall to be, nothing stretches, and the column is now the
   tall one — which is what gives the panel something to stick against. */
.pv-media{padding:0;display:flex;flex-direction:column;background:var(--l1);gap:1px}
.pv-media .shot{border:0;border-right:1px solid var(--l1);min-height:0}
/* the opening frame gets the viewport, but by ratio — never by force */
.pv-media:where(:first-child) .shot:first-child{max-height:calc(100svh - 52px)}
.pv-media:where(:first-child) .shot:first-child img{height:100%;object-position:center}
.pv-panel{padding:var(--x10) var(--gut) var(--x12) var(--x8);
  position:sticky;top:52px;align-self:start;grid-column:2;grid-row:1 / span 2}
/* The opening photograph and the rest of the gallery are two blocks in the
   source, so that on a phone the panel can sit between them in reading order.
   Here they are one column again: the 1px line is the gap the stack had, and
   the second row is the flexible one so a tall panel never pushes the two
   photograph blocks apart. */
.pv-media--more{grid-column:1;grid-row:2;padding-top:1px}
/* the rest of the photographs: on a desktop the same 1px-seamed stack */
.pv-gal{position:relative;display:flex;flex-direction:column;gap:1px;background:var(--l1)}
/* .pv-media in front: .cnav (fx-carousel.css) loads later and would draw it */
.pv-media .pv-gal-nav{display:none}
.pv-panel-in{display:flex;flex-direction:column;align-items:stretch;max-width:none}
.pv-panel-in .body,.pv-panel-in .lede{max-width:none}
.pv-crumb{display:flex;gap:6px;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.06em;
          color:var(--t2);margin-bottom:var(--x5)}
.pv-crumb a:hover{color:var(--t0)}
.pv-crumb i{font-style:normal;color:var(--t3)}
.pv-ttl{font-size:var(--f-xl);line-height:1.14;letter-spacing:-.018em;font-weight:400;
        margin-bottom:var(--x2)}
.pv-answer{font-size:var(--f-sm);line-height:1.6;color:var(--t1);margin-bottom:var(--x5)}
.pv .figs{margin-bottom:var(--x6);gap:0 var(--x6)}
/* the product's own selling points, in the 1.4.2 assurance rows. The text is
   left-aligned like every other line of the panel (1.4.2 centred it; the
   reviewer asked for one alignment inside a block, with only the buttons
   centred): the row is still the same tonal bar, the words start on its
   padding edge */
.pv-points{list-style:none;display:flex;flex-direction:column;gap:1px;margin:0 0 var(--x6)}
.pv-points li{background:var(--s1);padding:var(--x3) var(--x4);
              font-size:var(--f-sm);line-height:1.4;color:var(--t1);text-align:left}
.pv-act{display:flex;flex-direction:column;gap:var(--x2);margin-bottom:var(--x5)}
.pv-act .a1,.pv-act .a2{justify-content:center;width:100%}
/* the one constraint a buyer must know before choosing, under the sentence */
.pv-note{font-size:var(--f-sm);line-height:1.6;color:var(--t2);margin:calc(var(--x3) * -1) 0 var(--x5)}
/* a short desktop window (1024x768, a 1366x768 laptop's 657px): the sticky
   panel must still show the specifications trigger, so the figures and the
   points close up a little, and the gaps between the panel's parts take one
   step less (final merge 2026-10-11: at 1366x657 the trigger sat 17px below
   the fold on Bi-folds and 9px on Feature Glazing) */
@media (min-width:961px) and (max-height:820px){
  .pv-panel{padding-top:var(--x8)}
  .pv-crumb,.pv-answer,.pv-act{margin-bottom:var(--x4)}
  .pv-note{margin-bottom:var(--x4)}
  .pv .figs{padding:var(--x3) 0;margin-bottom:var(--x4)}
  .pv-points{margin-bottom:var(--x4)}
  .pv-points li{padding:var(--x2) var(--x4)}
}

/* ── the trigger into the detail ───────────────────────────────────────────
   One row in the drawer's own shape and type — rule above and below, the
   label in the drawer title style — but it opens a view rather than a fold,
   so it ends in the arrow that travels on the 22.5° axis, not a plus. */
.pv-spec-go{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--x4);
  width:100%;min-height:52px;padding:var(--x4) 0;background:none;border:0;
  border-top:1px solid var(--l1);border-bottom:1px solid var(--l1);
  color:var(--t0);text-align:left;cursor:pointer;
  transition:padding-left .28s cubic-bezier(.16,1,.3,1),color .2s}
.pv-spec-go:hover{padding-left:var(--x2)}
.pv-spec-go i{font:400 var(--f-sm)/1 var(--mono);font-style:normal;color:var(--t2);
  transition:color .22s,transform .28s cubic-bezier(.16,1,.3,1)}
.pv-spec-go:hover i{color:var(--t0);transform:translate(4px,1.7px)}
.pv-spec-go--panel{margin-top:var(--x3)}
.pv-guides{list-style:none;margin:0 0 var(--x6)}
.pv-guides li+li .pv-spec-go{border-top:0}
.pv-flow{display:none}
@media (max-width:960px){
  .pv{grid-template-columns:1fr;grid-template-rows:none}
  .pv-panel{position:static;grid-column:auto;grid-row:auto}
  .pv-spec-go--panel{display:none}
  .pv-flow{display:block;padding:var(--x8) var(--gut) 0}
  /* the row ends on the section's own full-width rule: its inset bottom
     rule sat on that one and on the next section's, a thick stepped line
     (integrate 2026-10-11) */
  .pv-flow .pv-spec-go{border-bottom:0}
  .pv-media--more{grid-column:auto;grid-row:auto;padding-top:0;background:none}
  .pv-media .shot{border-right:0}
  .pv-media .shot:first-child{max-height:none}
  /* THE STRIP. One photograph high (the frame a 4:3 picture fills at full
     width, never more than 60% of the screen), each picture at its own
     proportion up to the full width, so a portrait is not cropped to fit a
     landscape frame. Sideways only: snap points, no scrollbar, and a
     vertical swipe is left to the page. */
  .pv-gal{--gh:min(75vw,60svh);flex-direction:row;overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;
    -webkit-overflow-scrolling:touch}
  .pv-gal::-webkit-scrollbar{display:none}
  .pv-gal .shot{flex:0 0 auto;height:var(--gh);min-height:0;aspect-ratio:auto;
    width:min(100%,calc(var(--gh) * var(--gr,1.3333)));scroll-snap-align:start}
  .pv-gal .ar-34{--gr:.75}  .pv-gal .ar-45{--gr:.8}   .pv-gal .ar-23{--gr:.6667}
  .pv-gal .ar-11{--gr:1}    .pv-gal .ar-43{--gr:1.3333} .pv-gal .ar-32{--gr:1.5}
  .pv-gal .ar-169{--gr:1.7778} .pv-gal .ar-21{--gr:2}  .pv-gal .ar-219{--gr:2.3333}
  .pv-media .pv-gal-nav{display:flex;justify-content:flex-end;padding:var(--x3) var(--gut) 0}
  .pv-gal-nav .cbtn{position:relative}
  /* 44px to the finger, the drawn 38x32 box unchanged */
  .pv-gal-nav .cbtn::after{content:"";position:absolute;inset:-6px -3px}
  .pv-gal-nav .cbtn[aria-disabled="true"]{opacity:.35;cursor:default}
  .pv-gal-nav .cbtn[aria-disabled="true"]:hover{background:none;color:var(--t1);border-color:var(--l2)}
  .pv-panel{padding:var(--x8) var(--gut) var(--x10)}
  .pv-panel-in{max-width:none}
}

/* ═══════════════════════════════════════════════════════════════════════════
   THE SPECIFICATIONS VIEW — a side panel on a desktop, a full-screen sheet on
   a phone. The panel is the product panel's own surface, width and axis; the
   tables and lists inside are the drawer's .dl and its type. It slides on the
   bar's curve (.46s, cubic-bezier(.16,1,.3,1)) and does not move under
   reduced motion. Above the header and the product bar, below the curtain,
   the lightbox and the cursor.
   ═══════════════════════════════════════════════════════════════════════════ */
html.pv-spec-on{overflow:hidden}
html.pv-spec-on body{padding-right:var(--pv-spec-pad,0px)}
.pv-spec{position:fixed;inset:0;z-index:300;display:flex;justify-content:flex-end}
.pv-spec[hidden]{display:none}
.pv-spec-scrim{position:absolute;inset:0;background:rgba(7,7,8,.62);opacity:0;
  transition:opacity .46s cubic-bezier(.16,1,.3,1)}
.pv-spec-in{position:relative;display:flex;flex-direction:column;width:clamp(380px,36vw,560px);
  height:100%;max-height:100dvh;background:var(--s1);border-left:1px solid var(--l1);
  opacity:0;transform:translate3d(32px,0,0);
  transition:transform .46s cubic-bezier(.16,1,.3,1),opacity .3s cubic-bezier(.16,1,.3,1)}
.pv-spec.is-on .pv-spec-scrim{opacity:1}
.pv-spec.is-on .pv-spec-in{opacity:1;transform:none}
.pv-spec-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--x4);
  padding:var(--x6) var(--gut) var(--x5);border-bottom:1px solid var(--l1);flex:0 0 auto}
.pv-spec-id{min-width:0}
.pv-spec-ttl{font-size:var(--f-lg);line-height:1.2;letter-spacing:-.012em;font-weight:400;
  margin-top:var(--x2);color:var(--t0)}
.pv-spec-x{position:relative;display:inline-flex;align-items:center;gap:10px;flex:0 0 auto;
  min-height:44px;padding:0 14px;background:none;border:1px solid var(--l2);color:var(--t1);
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;
  transition:background .26s cubic-bezier(.16,1,.3,1),color .26s,border-color .26s}
.pv-spec-x i{position:relative;width:11px;height:11px}
.pv-spec-x i::before,.pv-spec-x i::after{content:"";position:absolute;left:0;top:5px;width:11px;height:1px;
  background:currentColor;transform:rotate(45deg)}
.pv-spec-x i::after{transform:rotate(-45deg)}
.pv-spec-x:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.pv-spec-x:active{transform:translate(1px,.4px) scale(.98)}
.pv-spec-bd{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;padding:0 var(--gut) calc(var(--x12) + env(safe-area-inset-bottom,0px))}
.pv-spec-s{padding:var(--x6) 0;border-bottom:1px solid var(--l1)}
.pv-spec-s>.lbl{display:block;margin-bottom:var(--x4)}
.pv-spec-s .body{font-size:var(--f-sm);line-height:1.65;max-width:none}
.pv-spec-sub{display:block;margin:var(--x5) 0 var(--x2)}
.pv-spec-s .dl{grid-template-columns:minmax(120px,1fr) minmax(0,1.6fr)}
.pv-spec-ul{list-style:none}
.pv-spec-ul li{font-size:var(--f-sm);line-height:1.5;color:var(--t0);padding:var(--x2) 0;border-top:1px solid var(--l0)}
.pv-spec-ul li:first-child{border-top:0;padding-top:0}
.pv-spec-act{padding-top:var(--x8)}
.pv-spec-act .a1{width:100%;justify-content:center}
@media (max-width:767px){
  .pv-spec-in{width:100%;border-left:0;transform:translate3d(0,24px,0)}
  .pv-spec-hd{padding:var(--x4) var(--gut);align-items:center}
  .pv-spec-ttl{font-size:var(--f-md)}
}
@media (max-width:620px){ .pv-spec-s .dl{grid-template-columns:1fr} }
@media (prefers-reduced-motion:reduce){ .pv-spec-scrim,.pv-spec-in{transition-duration:.01ms} }
[data-motion="off"] .pv-spec-scrim,[data-motion="off"] .pv-spec-in{transition:none}
html.pv-spec-on .pv-bar{transform:translateY(101%)}
/* the page's scroll line sits above every layer; it measures the page, not the sheet */
html.pv-spec-on .fx-prog{opacity:0}

/* ── project hero: the photographs are 4:3 (1200 x 896). A tablet and up keep
   the 21:9 band; a phone held upright shows the whole picture (ASK-12 B). */
@media (max-width:767px){ .pj-hero .shot{--arx:4/3;--ar:75%} }

/* ── PROJECT DETAIL (spec §2/§4): story → the work → installed systems and
   one Project details fold → other projects. Built from the site's own
   parts: .lede, .shot, .specs, the .dw drawer and its .dl table, .pcard. */
.pj-story{padding-top:var(--x8);max-width:68ch}
.pj-story .lede+.lede{margin-top:.9em}
/* the work: photographs only. One to a row, full width, on a phone (1.4.2's
   gallery; the two-up thumbnails of 145px were the 1.7 change), and two to a
   row from 768px — never three across ("太过于小气": project pictures are
   the point of the page), at 3:2 from 1024px like the project grids. An odd
   set opens on one wide picture, as /projects does (review 2026-10-11). */
.pj-gal{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--x2)}
.pj-gal .shot{min-height:0}
@media (min-width:768px){
  .pj-gal{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pj-gal>.shot:first-child:nth-last-child(odd){grid-column:1/-1;--ar:42.85%;--arx:21/9}
}
@media (min-width:1024px){
  .pj-gal{gap:var(--x4)}
  .pj-gal .shot{--ar:66.67%;--arx:3/2}
}
/* the "Illustrative image" label (app.js aiShot): the label style, small, at
   the lower-left edge of the picture on a scrim dark enough to read on any
   photograph; it ignores the pointer so the picture still opens. Hidden
   until the picture has landed and its wipe has begun, so it never sits on
   an empty frame. */
.ai-tag{position:absolute;left:var(--x3);bottom:var(--x3);z-index:2;pointer-events:none;
  padding:5px 8px 4px;background:rgba(7,7,8,.72);color:var(--t0);
  font:400 var(--f-cap)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
  transition:opacity .5s .35s}
.shot--ph .ai-tag,.shot--loading .ai-tag,.fx-shot.fx-arm .ai-tag{opacity:0}
.shot--ph .ai-tag{display:none}
@media (min-width:1024px){ .ai-tag{left:var(--x4);bottom:var(--x4)} }
/* installed systems: the spec table, the product name as the link */
.pj-sys{margin-bottom:var(--x8)}
.pj-sys-a{display:inline-flex;align-items:baseline;gap:var(--x2);color:var(--t0);transition:color .2s}
.pj-sys-a i{font:400 var(--f-sm)/1 var(--mono);font-style:normal;color:var(--t2);
  transition:color .22s,transform .28s cubic-bezier(.16,1,.3,1)}
.pj-sys-a:hover{color:var(--sig)}
.pj-sys-a:hover i{color:var(--sig);transform:translate(4px,1.7px)}
/* the one fold: its parts are the spec view's sections, quieter */
.pj-dt-s{padding:var(--x5) 0 var(--x2)}
.pj-dt-s+.pj-dt-s{border-top:1px solid var(--l0)}
.pj-dt-s>.lbl{display:block;margin-bottom:var(--x4)}
/* the story's second paragraph opens on request at every width (2026-10-19,
   the owner's site-wide guideline: one paragraph under the photograph; it
   was a phone-only rule, with both paragraphs always open from 768px) */
.pj-story:not(.is-open) .pj-story-more{display:none}
.pj-more-go{display:inline-flex;align-items:center;gap:var(--x3);min-height:44px;margin-top:var(--x1);
  padding:0;background:none;border:0;color:var(--t1);cursor:pointer;
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase}
.pj-more-go:hover{color:var(--t0)}
.pj-more-go[aria-expanded="true"] .dw-x::after{transform:scaleY(0)}

/* ── related rows under the product: projects that used it, the rest of the
   category. Product cards cut to photo and name; each card draws its own
   1px seam (a shadow into the 1px gap), so a short row leaves clean empty
   space instead of the grid's grey ground. */
.pv-rel-h{display:block;margin-bottom:var(--x6)}
.pv-rel{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;width:100%}
.pv-rel>.pcard{box-shadow:0 0 0 1px var(--rule)}
.pv-rel .pcard-b{padding:var(--x4) clamp(14px,2vw,22px) var(--x5)}
@media (min-width:1024px){ .pv-rel{grid-template-columns:repeat(4,minmax(0,1fr))} }

/* ASK-08 B: in the one-column layout wider than a phone held upright —
   tablets, a small laptop window, a phone on its side — the opening
   photograph took the whole first screen (about 1,000px on a lantern at
   768px) and pushed the name and the action below it. It is capped at 60% of
   the screen there, cropped from its focal point; on a phone held upright
   it keeps its full proportion, as approved (F10). */
@media (min-width:641px) and (max-width:960px){
  .pv-media:where(:first-child) .shot:first-child{max-height:60svh}
}

/* ── alignment discipline ─────────────────────────────────────────────────
   Everything that is not the product split sits on the twelve-column grid
   inside the single .wrap frame. These are the only spans in use, so no
   block can invent its own edge. */
.sec>.wrap>.g12{width:100%}.figs{display:flex;flex-wrap:wrap;gap:0 var(--x8);padding:var(--x4) 0;border-top:1px solid var(--l1);border-bottom:1px solid var(--l1);width:100%}
.aisle,.aisle-h,.rows{width:100%}

/* a still standing in for the film, or acting as its poster frame */
.film-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}.film video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.film-ph,.film-play{z-index:2}

/* ── the contents row ────────────────────────────────────────────────────
   Handled entirely by the rise rig now (.fx-rise). It used to be governed by
   a second, separate mechanism as well — two systems setting opacity and
   transform on the same element, which is why it would not move. */
.home-glyphs.is-live{pointer-events:auto}
.fx-rise.home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}
[data-motion="off"] .home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}

/* a cue that there is more below, which leaves as the contents arrive */
.home-peek{position:absolute;left:var(--gut);bottom:clamp(18px,3vh,34px);z-index:2;
  display:flex;align-items:center;gap:10px;
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--t2);
  opacity:1;pointer-events:none;transition:opacity .4s linear}
.home-peek i{display:block;width:34px;height:1px;background:var(--t2);transform-origin:left;
  animation:peekline 2.8s cubic-bezier(.5,0,.5,1) infinite}
.home-peek.is-out{opacity:0}
@keyframes peekline{0%,100%{transform:scaleX(.2);opacity:.5}50%{transform:scaleX(1);opacity:1}}
[data-motion="off"] .home-peek i{animation:none}

/* ═══════════════════════════════════════════════════════════════════════════
   THE HEADER OVER FILM
   On a page that opens with film the bar starts as glass: no fill, no rule,
   just blur, so the picture runs edge to edge and under it without a seam.
   Once the reader has left the hero it fills to black and grows its hairline
   — the moment the bar stops floating over a picture and starts sitting on a
   document. The two states are one transition, not a jump.
   ═══════════════════════════════════════════════════════════════════════════ */.hdr{position:fixed;top:0;left:0;right:0;z-index:100;background:var(--s0);border-bottom:1px solid var(--l1);transition:background .55s cubic-bezier(.16,1,.3,1),
             border-color .55s cubic-bezier(.16,1,.3,1),
             backdrop-filter .55s cubic-bezier(.16,1,.3,1)}
/* glass: only while the film is still behind it */
.hdr.is-glass{
  background:rgba(6,6,8,.20);
  border-bottom-color:transparent;
  -webkit-backdrop-filter:blur(20px) saturate(1.12);
  backdrop-filter:blur(20px) saturate(1.12);
}
/* the bar condenses as it solidifies — the same move, felt rather than read */
.hdr .hdr-in{transition:height .55s cubic-bezier(.16,1,.3,1)}
.hdr.is-glass .hdr-in{height:54px}
.hdr.is-solid .hdr-in{height:50px}
/* over film the links carry a shadow so they hold on a bright frame */
.hdr.is-glass .nav a,.hdr.is-glass .lock{text-shadow:0 1px 14px rgba(0,0,0,.55)}
.hdr.is-glass .lock svg{filter:drop-shadow(0 1px 10px rgba(0,0,0,.6))}
.hdr.is-glass .hdr-cta{border-color:rgba(255,255,255,.34);backdrop-filter:blur(8px)}
/* the mega panel is never glass — it is a surface, not an overlay */
.fx-mega{top:var(--hdr-b,54px)}   /* the bar's measured edge (fx-core), 2026-10-19 */
[data-motion="off"] .hdr,[data-motion="off"] .hdr .hdr-in{transition:none}

/* ═══════════════════════════════════════════════════════════════════════════
   THE FOOTER
   Two jobs. The veil dissolves whatever was scrolling above it into the
   ground, so the page ends rather than stops. The wordline is the last thing
   on every route and the only place the proposition is set large — it arrives
   as the reader reaches it, not before.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{--veil:clamp(120px,17vh,240px)}
/* The footer rides up over the section before it and its own ground is a
   gradient, so what is above does not stop at an edge — it thins out and is
   gone. An opaque background with the same negative margin would simply have
   covered 170px of the preceding section, which is a crop, not a dissolve. */.ftr{border-top:0;padding:var(--veil) 0 var(--x6);position:relative;z-index:3;overflow:hidden;margin-top:calc(var(--veil) * -1);background:linear-gradient(to bottom,
       rgba(7,7,8,0) 0%, rgba(7,7,8,.42) 30%, rgba(7,7,8,.88) 64%, var(--s0) 92%)}
.ftr-veil{display:none}   /* the footer's own ground does this now */
/* give back the space the pull took, so nothing that matters sits under the
   fade — it should dissolve the tail of a section, not its content */
#app > .sec:last-of-type{padding-bottom:calc(var(--step) + var(--veil))}

/* the wordline — sized to fill the measure, not to a step on the type scale */
.ftr-mark{position:relative;z-index:1;padding:clamp(20px,5vh,72px) 0 clamp(24px,5vh,64px);
  overflow:hidden;line-height:.9}
.ftr-mark svg{display:block;width:100%;height:auto;overflow:visible}
.ftr-mark text{
  font-family:var(--sans);font-weight:400;font-size:100px;letter-spacing:-.028em;
  fill:var(--t0);
}
/* off-peak entry: it rises out of its own mask as the footer is reached */
.fx-ftr .ftr-mark svg{
  opacity:0;transform:translateY(26%);
  transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1);
}
.fx-ftr .ftr-mark.is-in svg{opacity:1;transform:none}
/* .fx-ftr is a class the fx layer puts on <html> — the SAME element that
   carries [data-motion="off"]. Written with a descendant combinator this
   asked for .fx-ftr to be a descendant of itself, so it could never match and
   the footer wordmark stayed at opacity 0 for anyone who turned motion off.
   Dropping .fx-ftr from the selector matches wherever that class ends up. */
[data-motion="off"] .ftr-mark svg{opacity:1;transform:none;transition:none}

/* a hairline under the wordline, then the columns */.ftr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:36px 28px;margin-bottom:var(--x10);position:relative;z-index:1;border-top:1px solid var(--l1);padding-top:var(--x8)}.ftr-end{display:flex;flex-wrap:wrap;gap:14px 28px;padding-top:26px;border-top:1px solid var(--rule);font:400 11.5px/1.5 var(--mono);color:var(--t2);position:relative;z-index:1}
/* the SVG scales itself, so there is nothing to override on a small screen */

/* ═══════════════════════════════════════════════════════════════════════════
   THE HEADER IS OUT OF FLOW
   It was sticky, which meant it occupied 66px of layout and the hero film
   began *below* it. The bar was correctly in its glass state the whole time —
   there was simply nothing behind it to see through. Fixed, and the film
   starts at the top of the document, so the picture runs under the bar.
   Routes that do not open on film get the height back as padding.
   ═══════════════════════════════════════════════════════════════════════════ */
#app{padding-top:var(--hdr-h,54px)}
:root[data-hero="film"] #app{padding-top:0}.home-hero{position:relative;height:100svh;min-height:520px;overflow:hidden}
:root[data-hero="film"] .t1-open{min-height:100svh}

/* ── the hero content rises out of the bottom edge ────────────────────────
   Pinned copy covers the picture from the first frame. Starting it below the
   fold and letting it climb as the reader moves keeps the film clear for as
   long as the reader is willing to just look at it. */
.fx-rise{will-change:transform,opacity}
:root:not([data-motion="off"]) .fx-rise{opacity:0}
[data-motion="off"] .fx-rise{opacity:1!important;transform:none!important}

/* the contents row is flush to the bottom edge of the frame */
.home-glyphs .hg:first-child{border-left:0}
.home-hero > .wrap:last-of-type{margin-bottom:0}

/* ═══════════════════════════════════════════════════════════════════════════
   THE HERO PLAYS ITSELF
   The copy is not waiting for a scroll. The film runs clean for a beat, then
   the block enters on its own, one line after another. Tying it to scroll
   meant it arrived at the same moment as the contents row and the reader had
   to work for something that should simply have happened.
   ═══════════════════════════════════════════════════════════════════════════ */


/* the contents row follows a beat behind the copy, not alongside it */.home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}

.home-glyphs .hg{transition:background .34s cubic-bezier(.16,1,.3,1),backdrop-filter .34s}
/* with no script the hero is simply there — and it is COPY, not a grid.
   css_hygiene had merged this selector into the glyph-grid rule below because
   both began `html:not(.fx-on)`, so the title and lede inherited
   display:grid, eight columns and a --l1 fill: one word per line in a dark
   box. Invisible for as long as fx-on was always set; the first build where
   it was not made it the whole first screen. */
html:not(.fx-on) .home-hero-in > *{position:relative;opacity:1;transform:none}
html:not(.fx-on) .home-glyphs{position:relative;display:grid;grid-template-columns:repeat(var(--glyph-cols,8),1fr);
  gap:1px;background:var(--l1);border:1px solid var(--l1)}

.home-hero-in .btns{margin-top:var(--x2)}.home-ttl{font-size:var(--f-2xl);line-height:1.04;letter-spacing:-.026em;font-weight:400;margin:0;text-wrap:balance}

/* The hero copy is never hidden by CSS. It is animated in imperatively with
   the Web Animations API, so a failed or cancelled animation leaves the text
   at its natural, visible state. Hiding in the stylesheet and revealing with
   a transition is fail-CLOSED: one missed transition and the headline is
   simply gone. */

/* ── the property explorer ────────────────────────────────────────────────
   Hotspots are positioned HTML, not SVG. Drawn into a square viewBox with
   preserveAspectRatio="none" and stretched to 16:9 they scaled ~19x across
   and ~9x down: every ring became a giant ellipse and 10px type rendered at
   about 150px. Percent offsets on absolute elements cannot distort. */
/* Anchored to the picture, not the stage. Below 860px .expl-rd drops into
   normal flow INSIDE the stage, so the stage grows taller than the 16:9
   photograph it contains — 285px against 183px at 375px wide. inset:0 made
   every hotspot's percentage `top` measure against that taller box, putting
   four of the eleven below the photograph and on top of the readout. Matching
   the ratio pins the layer to the image whatever else the stage holds. */
.expl-spots{position:absolute;left:0;right:0;top:0;aspect-ratio:16/9;pointer-events:none}

/* ═══ ONE ROOM AT A TIME ═══════════════════════════════════════════════════
   Two night frames of the same elevation, pixel-registered: the base has the
   garden lighting on and every interior dark; the upper one has every room
   lit. The upper layer is masked to a single soft circle centred on whichever
   hotspot the reader is on, so hovering a product turns that room's light on
   and nothing else. Leaving closes it. Moving to another product collapses
   the first before opening the second, so two rooms are never lit at once.

   For a company that sells glazing, the product IS the light coming through
   it — this says more about a rooflight than a ring drawn around one.

   Armed by JS adding .is-night. Until then the stage is the plain photograph:
   no dimming, no mask, nothing hidden. Fail-open. */
/* --mx/--my are declared on the STAGE, not here. Declared on .expl-lit they
   shadow the inherited value the script writes on the stage, and the aperture
   is pinned to the centre of the frame no matter which hotspot is hovered —
   which is exactly what it did. A custom property set on the element always
   beats one inherited from its parent. */
.expl-lit{position:absolute;left:0;right:0;top:0;aspect-ratio:16/9;
  pointer-events:none;opacity:0;z-index:1;
  --r:0px;
  -webkit-mask-image:radial-gradient(circle var(--r) at var(--mx) var(--my),
      #000 0%,#000 42%,rgba(0,0,0,.5) 68%,transparent 82%);
          mask-image:radial-gradient(circle var(--r) at var(--mx) var(--my),
      #000 0%,#000 42%,rgba(0,0,0,.5) 68%,transparent 82%);
  /* switching ON is decisive: the aperture opens on the site's own curve.
     Switching OFF is a different event and gets its own timing below. */
  transition:--r .42s cubic-bezier(.16,1,.3,1),
             opacity .3s cubic-bezier(.16,1,.3,1)}
.expl-lit img{width:100%;height:100%;object-fit:cover;display:block}.expl-stage{position:relative;width:100%;aspect-ratio:16/9;--mx:50%;--my:50%}
/* ── the explorer opts out of the parallax rig ────────────────────────────
   .fx-shot gives every photograph a 10% overscan, a -5% top offset, a
   scroll-driven translate and a 1.06 scale. Right for a photograph, wrong for
   an instrument: the eleven hotspots are percentages of a static 16:9 box and
   the lit layer is a second copy that must register pixel for pixel. Overscan
   defeats both, and because the translate is scroll-driven the misalignment
   moves as the page moves. Neutralise the rig's INPUTS rather than override
   its output, so it still owns the transform and there is no second writer. */
/* .shot carries a 1px border with box-sizing:border-box, so its CONTENT box
   is 2px smaller than the stage. The base photograph fills that content box
   while the lit overlay and the hotspot layer are anchored to the stage — so
   the two photographs were scaled and offset differently, by 1px at every
   edge, and the eleven hotspots were positioned as percentages of a box 2px
   wider than the picture they annotate. On a full-bleed elevation the border
   draws nothing anyway. Removing it makes stage, picture, overlay and hotspot
   layer one and the same box. */
.expl-stage .shot{border:0}
.expl-stage .fx-shot{--fx-oh:0%;--fx-py:0%;--fx-scale:1}
.expl-stage .fx-shot > img{top:0;bottom:0;height:100%;transform:none;scale:1;transition:none}
/* both layers: same box, same fit, same origin, or they cannot align */
.expl-stage .shot img,.expl-lit img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 50%}

/* ═══ A SET THAT GOES NOWHERE ══════════════════════════════════════════════
   NAMED .slate, not .frun/.fr — those were already taken by featureRun(),
   which renders `<a class="fr">`, a LINK, and carries
   `.fr:hover{background:var(--s2);padding-left:var(--x3)}`. Defining a static
   module under the same names meant every block that goes nowhere inherited a
   link's hover and a link's grid, and did it from a rule 200 lines further
   down that won on source order. The differentiation was real in the source
   and absent in the browser. A new module gets a new name. ═══════════════════════════════════════════════════════════
   The counterpart to .cell. An interactive tile is a box in a hairline mesh
   with a small mono index and an Open arrow; a static run has no box at all —
   a large index in the display face, a rule under each row, nothing shaped
   like a target. The two can no longer be confused because they share no
   shape, rather than because one carries an extra word at the bottom. */
/* These two base rules went missing between v0.0.2 and v0.0.4 and the module
   shipped without them. css_hygiene.merge() had folded the original
   `.frun{}` / `.fr{}` bases into featureRun's identically-named rules 200
   lines further down; when the module was renamed to .slate only the block
   that was still HERE got renamed, and the bases were no longer in it. So
   .slate had no list-style and .slate-i had no grid: the ordered list drew
   its own numerals beside the display index, and the index and body stacked
   instead of sitting side by side. Restated explicitly, under names nothing
   else uses. */
.slate{list-style:none;display:grid;gap:0}
.slate-i{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--x5);
         align-items:start;padding:var(--x6) 0;border-top:1px solid var(--l1)}
.slate--2{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--x10)}
.slate--3{grid-template-columns:repeat(3,minmax(0,1fr));column-gap:var(--x6)}
.slate--1 .slate-i:first-child{border-top:0}
.slate--2 .slate-i:nth-child(-n+2){border-top:0}
.slate--3 .slate-i:nth-child(-n+3){border-top:0}
.slate-n{font:300 clamp(26px,2.6vw,38px)/1 var(--sans);letter-spacing:-.02em;
      color:var(--l2);font-variant-numeric:tabular-nums;min-width:1.5em}
.slate-t{display:block;font-size:var(--f-bd);font-weight:500;letter-spacing:-.006em;
      color:var(--t0);margin-bottom:var(--x2)}
.slate-d{font-size:var(--f-sm);line-height:1.6;color:var(--t1);max-width:60ch}
.slate-m{display:block;margin-top:var(--x3);font:400 var(--f-mic)/1 var(--mono);
      letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
/* a gallery stacks: picture, then index and caption beneath it */
.slate--shot .slate-i{grid-template-columns:minmax(0,1fr);gap:var(--x4);border-top:0;
  padding:0 0 var(--x8)}
.slate--shot .slate-n{font-size:var(--f-mic);font-family:var(--mono);color:var(--t2);
  letter-spacing:.14em;min-width:0}
@media (max-width:900px){ .slate--3{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:760px){ .slate--2,.slate--3{grid-template-columns:1fr}
  .slate--2 .slate-i:nth-child(2),.slate--3 .slate-i:nth-child(-n+3){border-top:1px solid var(--l1)}
  .slate--3 .slate-i:first-child{border-top:0} }

/* a static cell inside a MIXED grid: no tile, no arrow, no hover */
/* the checklist inside a step */
.slate-l{list-style:none;margin-top:var(--x3);display:flex;flex-direction:column;gap:5px}
.slate-l li{font:400 var(--f-mic)/1.5 var(--mono);color:var(--t2);padding-left:14px;position:relative}
.slate-l li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:1px;background:var(--l2)}

/* ── a SEQUENCE ───────────────────────────────────────────────────────────
   The other static family. A roster (.slate) is a set with no order: two
   across, a rule per row, a large index. A sequence has direction: one
   column, a connector running down the left, the number sitting on that line.
   Neither carries a box, a terminator or a hover — they cannot be mistaken
   for targets, and they are not mistaken for each other. */
.seq{list-style:none;display:grid;gap:0}
.seq-i{display:grid;grid-template-columns:var(--x12) minmax(0,1fr);gap:0 var(--x5);
       align-items:start;padding:0 0 var(--x8)}
.seq-k{position:relative;display:block;min-height:100%}
.seq-n{display:block;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;
       color:var(--t2);font-variant-numeric:tabular-nums;position:relative;z-index:1;
       background:var(--s0);padding-bottom:6px}
.seq-ax{position:absolute;left:5px;top:14px;bottom:calc(var(--x8) * -1);width:1px;
        background:var(--l1)}
.seq-i:last-child .seq-ax{display:none}
.seq-t{display:block;font-size:var(--f-bd);font-weight:500;letter-spacing:-.006em;
       color:var(--t0);margin-bottom:var(--x2)}
.seq-d{font-size:var(--f-sm);line-height:1.6;color:var(--t1);max-width:62ch}
.seq-l{list-style:none;margin-top:var(--x3);display:flex;flex-direction:column;gap:5px}
.seq-l li{font:400 var(--f-mic)/1.5 var(--mono);color:var(--t2);padding-left:14px;position:relative}
.seq-l li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:1px;background:var(--l2)}
@media (max-width:760px){ .seq-i{grid-template-columns:var(--x10) minmax(0,1fr)} }

/* .cell--static{background:none} at 0,1,0 loses to div.cell{background:--s0}
   at 0,1,1, and a.cell's own --void resolves to the same --s0 — so a static
   cell in a mixed grid kept the interactive tile's fill and differed from a
   target by one missing word. Matching the specificity is the whole fix. */
div.cell--static{background:none}
.cell--static .cell-go{display:none}
.expl-stage.is-night .expl-lit{opacity:1}
.expl-stage.is-night.is-on .expl-lit{--r:var(--hot-r,190px)}

/* ── the light cools, it does not close ───────────────────────────────────
   Both directions used one 420ms curve, so leaving a product read as the
   aperture snapping shut — a shutter, not a lamp. Moving BETWEEN products
   still has to be quick, because the aperture must be gone before it moves or
   the light sweeps across the front of the house. So the two exits are
   separated: .is-cooling is only set when the pointer leaves the stage
   entirely, and it lets the patch dim and widen slightly as it goes, the way
   a filament does. The radius outlasts the opacity, so what fades is light
   rather than a circle shrinking to a point. */
.expl-stage.is-night.is-cooling .expl-lit{
  opacity:0;
  --r:calc(var(--hot-r, 190px) * 1.18);
  transition:opacity .82s cubic-bezier(.32,0,.18,1),
             --r 1.1s cubic-bezier(.32,0,.18,1)}
@property --r{syntax:'<length>';inherits:false;initial-value:0px}

/* the markers can be quiet again: the light is doing the work */
.expl-stage.is-night .hs-ring{background:rgba(7,7,8,.28);border-color:rgba(246,239,228,.62)}
.expl-stage.is-night .hs[data-on] .hs-ring{background:rgba(7,7,8,.1);border-color:#fff}

/* motion off: no travelling light. Every room stays lit, which is the
   informative state, and the markers carry the interaction on their own. */
[data-motion="off"] .expl-stage.is-night .expl-lit{
  --r:0px;opacity:1;-webkit-mask-image:none;mask-image:none}
/* ── hotspots over a PHOTOGRAPH ───────────────────────────────────────────
   These were drawn for the grey placeholder: a 1px --edge hairline and a 4px
   --edge dot, both dark. Against the real elevation — red brick, slate, bright
   overcast sky, glass — a dark hairline has nothing to work against and the
   markers disappear. A marker on unknown imagery cannot borrow contrast from
   the background; it has to carve its own. So each one darkens the photograph
   inside its own disc and rings that disc in the emphasis white. It reads the
   same over sky, brick and glazing, and it stays the site's language: a
   circle, a hairline, no colour of its own. */
.hs{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px;
    display:grid;place-items:center;pointer-events:auto;cursor:pointer;
    transition:opacity .25s}
.hs-ring{position:absolute;inset:0;border:1.5px solid var(--em);border-radius:50%;
  background:rgba(7,7,8,.34);
  -webkit-backdrop-filter:blur(2px) brightness(.55);backdrop-filter:blur(2px) brightness(.55);
  box-shadow:0 2px 10px rgba(0,0,0,.55);
  transition:transform .3s cubic-bezier(.16,1,.3,1),
             border-color .2s cubic-bezier(.16,1,.3,1),
             background .2s cubic-bezier(.16,1,.3,1)}
.hs-ring::after{content:"";position:absolute;inset:-1.5px;border:1.5px solid var(--em);
  border-radius:50%;opacity:0;animation:hspulse 3.2s cubic-bezier(.2,.7,.3,1) infinite;
  animation-delay:var(--pd,0ms)}
@keyframes hspulse{0%{transform:scale(1);opacity:.7}70%{transform:scale(2.1);opacity:0}100%{opacity:0}}
.hs-dot{width:5px;height:5px;border-radius:50%;background:var(--em);
  box-shadow:0 0 0 1px rgba(7,7,8,.5);transition:transform .2s cubic-bezier(.16,1,.3,1)}
.hs-n{position:absolute;top:-18px;font:500 var(--f-cap)/1 var(--mono);color:var(--em);
      letter-spacing:.06em;
      text-shadow:0 1px 3px rgba(0,0,0,.95),0 0 10px rgba(0,0,0,.8)}
.hs:hover .hs-ring,.hs:focus-visible .hs-ring,.hs[data-on] .hs-ring{
  transform:scale(1.4);border-color:#fff;background:rgba(7,7,8,.62)}
.hs:hover .hs-dot,.hs:focus-visible .hs-dot,.hs[data-on] .hs-dot{transform:scale(1.5);background:#fff}
.hs:hover .hs-n,.hs[data-on] .hs-n{color:#fff}
.hs:hover .hs-ring::after,.hs:focus-visible .hs-ring::after{animation-play-state:paused}
.hs.fx-off{opacity:.18;pointer-events:none}
[data-motion="off"] .hs-ring::after{animation:none}

/* the readout sits bottom-LEFT: the floating actions occupy bottom-right and
   were covering it */
/* It is a readout sitting on top of the hotspot layer, so the panel itself
   must not take a hotspot's click — but it carries an "Open" link, so the
   link has to take its own. Panel transparent, children live. */
.expl-rd{position:absolute;left:0;bottom:0;z-index:2;width:min(340px,86%);pointer-events:none;
  background:var(--s0);border-top:1px solid var(--l1);border-right:1px solid var(--l1);
  padding:var(--x5);display:flex;flex-direction:column;gap:var(--x2)}
.expl-rd a,.expl-rd button{pointer-events:auto}
/* empty until a point is chosen, so the box does not stand there blank (beta1.3.4) */
.expl-rd:empty{display:none}
@media (max-width:860px){ .expl-rd{position:static;width:auto;border-right:0} }

/* ═══════════════════════════════════════════════════════════════════════════
   THE CURSOR CARRIES THE MESSAGE
   Studied from 70materia: fifteen hover rules on the whole site, not one of
   them a line. The element barely moves; the cursor becomes a labelled tag
   that says what will happen. That is why their pages stay calm while still
   answering the pointer. Ours had 105 hover rules and eighteen of them were
   pseudo-element lines.
   ═══════════════════════════════════════════════════════════════════════════ */
.fx-cur-lbl{
  display:block;box-sizing:border-box;height:19px;padding:0 6px 0 7.5px;
  background:var(--s0);color:var(--em,var(--t0));border:1px solid rgba(240,238,234,.34);
  border-color:color-mix(in srgb,var(--em,#f0eeea) 34%,transparent);
  font:500 9.5px/17px var(--mono);letter-spacing:.16em;text-transform:uppercase;
  white-space:nowrap;
}

/* ═══════════════════════════════════════════════════════════════════════════
   FOUR SHAPES, FOUR MEANINGS
   Each of these was a numbered card with a paragraph. They are different
   things and now they look it: a split, a fork, a set of actions, an index.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── the two divisions ────────────────────────────────────────────────── */
.dsplit{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--l1);
        border:1px solid var(--l1)}
.dsp{background:var(--s0);padding:clamp(28px,3.6vw,56px);display:flex;flex-direction:column;
     gap:var(--x5);min-width:0;transition:background .32s cubic-bezier(.16,1,.3,1)}
.dsp:hover{background:var(--s3)}
.dsp-shot{display:block;margin:calc(-1 * clamp(28px,3.6vw,56px)) calc(-1 * clamp(28px,3.6vw,56px)) 6px}
.dsp-mark{display:block;width:min(300px,74%)}
.dsp-mark svg{width:100%;height:auto;fill:var(--t0)}
.dsp-line{font-size:var(--f-md);line-height:1.42;color:var(--t1);max-width:44ch}
.dsp-cats{display:flex;flex-wrap:wrap;gap:6px 18px}
.dsp-cats i{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
            color:var(--t2);font-style:normal;transition:color .24s}
.dsp:hover .dsp-cats i{color:var(--t1)}
.dsp-go{margin-top:auto;display:inline-flex;align-items:center;gap:10px;
        font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t0)}
.dsp-go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}
.dsp:hover .dsp-go i{transform:translate(7px,2.9px)}
@media (max-width:860px){ .dsplit{grid-template-columns:1fr} }

/* ── the three intents: a fork, set as questions ──────────────────────── */
.fork{border-top:1px solid var(--l1)}
.fk{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,9fr) minmax(0,3fr);
    gap:var(--x6);align-items:baseline;padding:var(--x6) 0;border-bottom:1px solid var(--l1);
    transition:background .26s,padding-left .3s cubic-bezier(.16,1,.3,1)}
.fk:hover{background:var(--s3);padding-left:var(--x4)}
.fk-t{font-size:var(--f-lg);line-height:1.18;letter-spacing:-.016em;color:var(--t0)}
.fk-d{font-size:var(--f-sm);line-height:1.55;color:var(--t1)}
.fk-m{font:400 var(--f-mic)/1.5 var(--mono);letter-spacing:.13em;text-transform:uppercase;
      color:var(--t2);text-align:right}
@media (max-width:860px){
  .fk{grid-template-columns:1fr;gap:var(--x2)}
  .fk-m{text-align:left}
}

/* ── the booking routes: actions, weighted ────────────────────────────── */
.racts{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1px;
       background:var(--l1);border:1px solid var(--l1)}
.ra{background:var(--s0);padding:var(--x6) var(--x5);display:flex;flex-direction:column;
    gap:var(--x2);min-width:0;transition:background .3s cubic-bezier(.16,1,.3,1)}
.ra .ico{width:19px;margin-bottom:var(--x2)}
.ra:hover{background:var(--s2)}
.ra--lead{background:var(--s2)}
.ra--lead:hover{background:var(--s3)}
.ra--lead .ra-t{color:var(--t0)}
.ra-t{font-size:var(--f-bd);line-height:1.3;color:var(--t0);letter-spacing:-.006em}
.ra-d{font-size:var(--f-sm);line-height:1.5;color:var(--t2)}
.ra-go{margin-top:auto;padding-top:var(--x4);font:400 13px/1 var(--mono);color:var(--t2);
       transition:transform .3s cubic-bezier(.16,1,.3,1),color .24s}
.ra:hover .ra-go{color:var(--t0);transform:translate(6px,2.5px)}

/* ── the explorer fallback: an index, not eleven cards again ──────────── */
.spidx{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
       gap:0 var(--x6);padding:var(--x4) 0 0}
.spidx a{display:flex;gap:var(--x3);padding:7px 0;font-size:var(--f-sm);color:var(--t1);
         transition:color .2s,padding-left .24s}
.spidx a:hover{color:var(--t0);padding-left:6px}
.spidx i{font:400 var(--f-mic)/1.5 var(--mono);color:var(--t2);font-style:normal}.expl-list summary{cursor:pointer;list-style:none;padding:var(--x4) 0;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}

/* the preview column carries a photograph, not the drawing a second time */
.fx-mega-shot{min-height:0;display:flex;align-items:flex-start}
.fx-mega-shot .shot{width:100%;max-height:250px;min-height:0}
.fx-mega-shot .ph-brief{display:none}      /* the brief belongs in the shot list */
.fx-mega-dwg{display:none}

/* ── a strip of standards ─────────────────────────────────────────────── */
.fstrip{display:flex;flex-wrap:wrap;gap:var(--x4) var(--x10);padding:var(--x5) 0;
        border-top:1px solid var(--l1);border-bottom:1px solid var(--l1)}
.fs{display:flex;flex-direction:column;gap:4px;min-width:0}
.fs b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em}
.fs i{font:400 var(--f-mic)/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase;
      color:var(--t2);font-style:normal}

/* ── a knowledge index: titles, scanned not read ──────────────────────── */
.idxl{list-style:none;border-top:1px solid var(--l1)}
.idxl a{display:grid;grid-template-columns:38px minmax(0,1fr) auto 16px;gap:var(--x4);
        align-items:baseline;padding:var(--x4) 0;border-bottom:1px solid var(--l0);
        transition:background .24s,padding-left .28s cubic-bezier(.16,1,.3,1)}
.idxl a:hover{background:var(--s2);padding-left:var(--x3)}
.idxl i{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);font-style:normal}
.idxl b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em;min-width:0}
.idxl em{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);font-style:normal;text-align:right}
.idxl-go{font:400 13px/1.6 var(--mono);color:var(--t2);text-align:right;
  transition:transform .28s cubic-bezier(.16,1,.3,1),color .22s cubic-bezier(.16,1,.3,1)}
.idxl a:hover .idxl-go{color:var(--t0);transform:translate(4px,1.7px)}

/* ── one place, one photograph ────────────────────────────────────────── */
.spanel{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:1px;
        background:var(--l1);border:1px solid var(--l1)}
.spanel-m,.spanel-b{background:var(--s0);min-width:0}
.spanel-m .shot{border:0}
.spanel-b{padding:clamp(20px,2.4vw,34px);display:flex;flex-direction:column;justify-content:center;
          gap:var(--x5)}
.sp-row b{display:block;font-size:var(--f-bd);font-weight:400;color:var(--t0);margin-bottom:5px}
.sp-row--go{display:block;text-decoration:none;color:inherit;padding:14px 16px;margin:0 -16px;border-top:1px solid var(--l1);
  transition:background .32s cubic-bezier(.16,1,.3,1)}
.sp-row--go:hover{background:var(--s3)}
.spanel-b:has(.sp-row--go){gap:0;justify-content:center}
.sp-row--go:first-child{border-top:0}
.sp-go{display:block;margin-top:8px;font:500 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--t2)}
.sp-row--go:hover .sp-go{color:var(--t0)}
.sp-row p{font-size:var(--f-sm);line-height:1.55;color:var(--t1)}
@media (max-width:820px){ .spanel{grid-template-columns:1fr} }

/* ── a compact product run ────────────────────────────────────────────── */.frun{list-style:none;display:grid;gap:0;border-top:1px solid var(--l1)}.fr{display:grid;grid-template-columns:38px minmax(0,1.1fr) minmax(0,2fr) 18px;gap:var(--x4);align-items:baseline;padding:var(--x4) 0;border-top:1px solid var(--l1);border-bottom:1px solid var(--l0);transition:background .24s,padding-left .28s cubic-bezier(.16,1,.3,1)}
.fr:hover{background:var(--s2);padding-left:var(--x3)}
.fr i{font:400 var(--f-mic)/1.6 var(--mono);color:var(--t2);font-style:normal}
.fr b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em;min-width:0}
.fr span{font-size:var(--f-sm);line-height:1.5;color:var(--t2);min-width:0}
.fr em{font:400 13px/1.6 var(--mono);color:var(--t2);font-style:normal;
       transition:transform .28s cubic-bezier(.16,1,.3,1),color .22s}
.fr:hover em{color:var(--t0);transform:translate(4px,1.7px)}
@media (max-width:820px){
  .fr{grid-template-columns:34px minmax(0,1fr) 18px;row-gap:4px}
  .fr span{grid-column:2/4}
}

/* ── the process, plotted on an axis ──────────────────────────────────────
   This was five bordered cells, each with an icon, a number, a title and a
   paragraph — the same object as the card grids above and below it, which
   is why the page read as one texture from top to bottom. It is a sequence
   with a direction, so it is drawn as a plot: one axis, a node per stage,
   the title large, and the accountable fact under it. The paragraph is on
   the cursor instead (fx-peek), and comes back into the layout wherever
   there is no hover to put it on. */
.pchart{list-style:none;display:grid;
  grid-template-columns:repeat(var(--pc-n,5),minmax(0,1fr));
  gap:0;border-top:1px solid var(--l1);border-bottom:1px solid var(--l1)}
.pc{padding:var(--x6) var(--x5) var(--x6) 0;display:flex;flex-direction:column;
  gap:var(--x2);min-width:0;position:relative;
  transition:background .34s cubic-bezier(.16,1,.3,1)}
.pc:hover{background:var(--s1)}
/* The glyph box is a FIXED height. The five drawings have five different
   aspect ratios, so an auto-height box made each column start its axis at a
   different y — a 20px staircase where the whole point is one straight
   line. The glyph sits on the bottom of the box and the axis below it is
   level across all five. */
.pc-ico{display:flex;align-items:flex-end;justify-content:flex-start;
  width:clamp(28px,2.6vw,36px);height:clamp(34px,3.2vw,46px);color:var(--t2);
  /* the drawings carry about 13% of their width as air on the left: pulled
     back so the line work, the node and the words start on one edge */
  margin-left:calc(clamp(28px,2.6vw,36px) * -.135);
  transition:color .3s,transform .46s cubic-bezier(.16,1,.3,1)}
.pc-ico .ico{width:100%;height:auto;max-height:100%}
.pc:hover .pc-ico{color:var(--t0);transform:translateY(-3px)}
/* the axis: the node sits on the column's left edge, under the drawing and over
   the number and the title, so the four share one line (the node used to sit
   in the middle of the column, away from all of them). The rule runs from node
   to node and stops on the last. */
.pc-ax{position:relative;display:block;height:11px;margin:var(--x4) 0 var(--x3)}
.pc-ax::before{content:"";position:absolute;left:6px;right:0;top:50%;height:1px;
  background:var(--l2)}
.pc:last-child .pc-ax::before{display:none}
.pc-ax i{position:absolute;left:6.4px;top:50%;width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid var(--t2);background:var(--s0);transform:rotate(22.5deg);transition:background .3s,border-color .3s,transform .46s cubic-bezier(.16,1,.3,1)}
.pc:hover .pc-ax i{background:var(--t0);border-color:var(--t0);
  transform:rotate(22.5deg) scale(1.55)}
/* --t3 is declared "3.21:1, decorative and large text only". This is 10px
   type carrying the stage number, which is content, not decoration — measured
   3.26:1 against --s0 and failing 1.4.3 AA. It rests at --t2 (4.70:1) and
   lifts to --t1 on hover, so the state change survives the correction. */
.pc-n{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.16em;color:var(--t2);
  transition:color .3s cubic-bezier(.16,1,.3,1)}
.pc:hover .pc-n{color:var(--t1)}
/* the title is the object here, so it is set at heading size */
.pc-t{font-size:clamp(18px,1.65vw,25px);font-weight:400;line-height:1.2;
  letter-spacing:-.012em;color:var(--t0);padding-right:var(--x4)}
.pc-m{margin-top:var(--x2);font:400 var(--f-mic)/1.45 var(--mono);letter-spacing:.08em;
  color:var(--t2);padding-right:var(--x4)}
/* The column owns its paragraph, on every pointer type. It used to be hidden
   here and shown on a cursor card instead, which is one fact with two owners
   and supporting copy reachable only by hover. */
.pc-d{margin-top:var(--x3);font-size:var(--f-sm);line-height:1.5;color:var(--t1);
  padding-right:var(--x4)}
@media (max-width:1100px){
  .pchart{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* two to a row, one on a phone: each cell is its own axis, node to the cell's edge */
  .pc:last-child .pc-ax::before{display:block}
}
@media (max-width:620px){ .pchart{grid-template-columns:1fr} }
[data-motion="off"] .pc,[data-motion="off"] .pc-ico,[data-motion="off"] .pc-ax i{transition:none}

/* ── the figures, at the size a figure deserves ───────────────────────── */
.bignums{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;
  background:var(--l1);border-top:1px solid var(--l1);border-bottom:1px solid var(--l1)}
.bn{background:var(--s0);padding:var(--x8) var(--x5) var(--x8) 0;display:flex;
  flex-direction:column;gap:var(--x2);min-width:0}
.bn-n{font-size:clamp(46px,6.4vw,92px);line-height:.86;letter-spacing:-.04em;
  color:var(--t0);font-variant-numeric:tabular-nums}
.bn-u{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t2)}
.bn-c{margin-top:var(--x3);font-size:var(--f-sm);line-height:1.45;color:var(--t1)}
.bncodes{display:flex;flex-wrap:wrap;gap:var(--x4) var(--x10);padding:var(--x5) 0;
  border-bottom:1px solid var(--l1)}
.bncodes span{display:flex;flex-direction:column;gap:5px;font-size:var(--f-sm);color:var(--t0)}
.bncodes i{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t2);font-style:normal}
.bnmore{display:inline-flex;align-items:center;gap:10px;
  /* 11px of type in an 11px box: a 24x24 pointer target under WCAG 2.5.8,
     and nothing near it to earn the spacing exception. The padding grows the
     hit area to 25px; the negative margin keeps the optical position it had. */
  min-height:25px;padding-block:7px;margin-top:calc(var(--x6) - 7px);
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t1)}
.bnmore i{font-style:normal;transition:transform .34s cubic-bezier(.16,1,.3,1)}
.bnmore:hover{color:var(--t0)}
.bnmore:hover i{transform:translate(6px,2.5px)}
@media (max-width:900px){ .bignums{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:480px){ .bignums{grid-template-columns:1fr} }

/* ── two projects and a door to the rest ──────────────────────────────── */
.ptease{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--l1);
        border:1px solid var(--l1)}
/* one project and the door to the rest: two across, so no empty third cell */
.ptease--2{grid-template-columns:repeat(2,1fr)}
.pt{background:var(--s0);padding:0 0 var(--x6);display:flex;flex-direction:column;gap:var(--x2);
    min-width:0;position:relative;transition:background .3s cubic-bezier(.16,1,.3,1)}
.pt:hover{background:var(--s3)}
.pt .shot{border:0;border-bottom:1px solid var(--l1);margin-bottom:var(--x4)}
.pt-n{padding:0 var(--x5);font:400 var(--f-mic)/1 var(--mono);color:var(--t2)}
.pt-t{padding:0 var(--x5);font-size:var(--f-md);font-weight:400;color:var(--t0);letter-spacing:-.01em}
.pt-d{padding:0 var(--x5);font-size:var(--f-sm);line-height:1.55;color:var(--t1)}
/* the third cell is the way through, not a third project */
.pt--more{overflow:hidden;display:grid;place-items:center;padding:0;min-height:260px}
.pt-veil{position:absolute;inset:0;
  background:linear-gradient(140.5deg,var(--s2),var(--s0) 60%);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}
.pt-veil::after{content:"";position:absolute;inset:0;opacity:.5;
  background:repeating-linear-gradient(112.5deg,transparent 0 15px,var(--l1) 15px 16px)}
.pt-more-in{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;
            gap:var(--x2);text-align:center;padding:var(--x6)}
.pt-more-n{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t2)}
.pt-more-in b{font-size:var(--f-md);font-weight:400;color:var(--t0);letter-spacing:-.01em}
.pt-more-go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}

/* This panel had NO hover at all — .pt:hover changes a background that
   .pt-veil covers completely at inset:0, so the only thing that ever moved
   was the arrow. The veil is the surface here, so the veil is what responds:
   its own 112.5° hatch comes up from .5 to .78 and the gradient lifts a step,
   which reads as the panel brightening rather than as a new element arriving.
   The Open control then takes the emphasis white and draws its rule. Nothing
   is stroked around the card — the retired edge-drawing stays retired; this
   is a state change, not a line being drawn. */
.pt--more .pt-veil{transition:background .3s cubic-bezier(.16,1,.3,1)}
.pt--more .pt-veil::after{transition:opacity .3s cubic-bezier(.16,1,.3,1)}
.pt--more:hover .pt-veil{background:linear-gradient(140.5deg,var(--s4),var(--s2) 60%)}
.pt--more:hover .pt-veil::after{opacity:.82}
.pt--more:hover .pt-more-n{color:var(--t1)}
.pt--more:hover .pt-more-go i{transform:translate(7px,2.9px)}
/* the Open control reads as the control, not as a third line of copy */.pt-more-go{display:inline-flex;align-items:center;gap:9px;margin-top:var(--x3);font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t0);border-bottom:1px solid transparent;padding-bottom:3px;transition:border-color .3s cubic-bezier(.16,1,.3,1),color .3s cubic-bezier(.16,1,.3,1)}
.pt--more:hover .pt-more-go{color:var(--em);border-bottom-color:var(--em)}
@media (max-width:900px){ .ptease{grid-template-columns:1fr} .pt--more{min-height:200px} }

/* ── the spec block, in three shapes ──────────────────────────────────────
   One full-width run of label and value was rendering thirty-four authored
   blocks across nineteen pages, so a schedule of twelve products looked
   exactly like six facts about a showroom. specsMode() in app.js picks the
   shape from the data; these draw it.

   These rules sit at the end of the file on purpose. The base .specs
   responsive rule earlier collapses the grid to one column, and a media
   query adds no specificity — source order is what decides, so the modes
   and their own breakpoints have to come after it. */

/* g2 / g3 — a sheet of short figures, scanned across as well as down */
.specs--g2,.specs--g3{display:grid;gap:1px;background:var(--l0);
  border:1px solid var(--l0);border-top:1px solid var(--l0)}
.specs--g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.specs--g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.specs--g2 .sp-c,.specs--g3 .sp-c{background:var(--s0);padding:var(--x4) var(--x5);
  display:flex;flex-direction:column;gap:7px;min-width:0}
.specs--g2 dt,.specs--g3 dt{font:400 var(--f-cap)/1.4 var(--mono);letter-spacing:.13em;
  text-transform:uppercase;color:var(--t2);padding:0;border:0;font-size:var(--f-cap)}
.specs--g2 dd,.specs--g3 dd{font-size:var(--f-bd);line-height:1.45;color:var(--t0);
  padding:0;border:0;overflow-wrap:anywhere}

/* sp — a long schedule, split so the eye is not dragged down one column */
.specs--sp{display:block;columns:2;column-gap:var(--x12);border-top:0}
.specs--sp .sp-c{break-inside:avoid;display:grid;
  grid-template-columns:minmax(112px,1fr) minmax(0,1.5fr);
  border-top:1px solid var(--rule)}
.specs--sp dt,.specs--sp dd{padding:11px 0;border-bottom:0;font-size:14px}
.specs--sp dt{font:400 12px/1.5 var(--mono);letter-spacing:.05em;color:var(--dim);
  text-transform:uppercase;padding-right:var(--x5)}
.specs--sp dd{color:var(--ink);overflow-wrap:anywhere}

@media (max-width:1000px){ .specs--g3{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:820px){ .specs--sp{columns:1} }
@media (max-width:620px){
  .specs--g2,.specs--g3{grid-template-columns:1fr}
  .specs--sp .sp-c{grid-template-columns:1fr}
  .specs--sp dt{padding-bottom:0}
  .specs--sp dd{padding-top:5px}
}

/* ── filters: the empty state keeps the criteria and offers a way out ──── */
.fclear{margin-left:var(--x4)}
.pempty{display:flex;flex-direction:column;align-items:flex-start;gap:var(--x4);
  padding:var(--x8) var(--x6);border:1px solid var(--l1);background:var(--s1)}
/* display:flex above outranked the hidden attribute, so "No projects match
   those filters" + Clear showed under a full grid with no filter set */
.pempty[hidden]{display:none}






/* ── a grouped list: items that go nowhere, on one axis ────────────────── */
.grp{display:grid;grid-template-columns:1fr;gap:var(--x7) var(--x8)}
.grp--split{grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr))}
.grp-h{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;
  color:var(--t2);padding-bottom:var(--x3);border-bottom:1px solid var(--l1);
  margin-bottom:var(--x2);font-weight:400}
.grp-l{list-style:none}
.grp-l li{padding:var(--x4) 0;border-bottom:1px solid var(--l0)}
.grp-l b{display:block;font-size:var(--f-bd);font-weight:400;line-height:1.3;
  color:var(--t0);letter-spacing:-.008em}
.grp-l p{margin-top:5px;font-size:var(--f-sm);line-height:1.5;color:var(--t2);max-width:56ch}

/* ── L0 does not wear an interactive affordance ────────────────────────────
   A cell nobody can click used to look exactly like a cell that opens
   something: same fill, same padding, same box. Only the link keeps the card
   surface; a plain one drops to a divided entry with no fill and no box, so
   the difference is legible before you point at it. */
/* It still has to cover the grid plane — .mesh paints the divider colour and
   the cells are what hide it, so background:none turned the whole block into
   one raised slab and dropped .num to 3.75 against it. The cell keeps a fill;
   it is the PAGE GROUND rather than the raised card fill, so it reads as part
   of the page instead of a card, and the contrast stays deterministic. */
div.cell{background:var(--s0);gap:9px}
div.cell h3{font-size:var(--f-bd);letter-spacing:-.008em}

/* ── the L1 grammar, restored ───────────────────────────────────────────
   `.btn--sig` set border-color and colour at line 462. `.btn` was rewritten
   later in the file with `border:0; background:none` — same specificity,
   later wins — so the modifier painted a border colour onto a border that no
   longer existed. Every conversion flow's submit was rendering as bare grey
   text: "SEND ENQUIRY" measured 102x30, borderWidth 0px, background
   transparent, in the dim ink. The most important control on the site looked
   like a caption.

   Redefined here, after `.btn`, so the modifier wins — and given the SAME
   filled rectangle as `.a1` and `.pv-bar-go`, because one L1 goal may only
   wear one visual grammar. */.btn--sig{border-color:var(--sig);color:#111214;display:inline-flex;align-items:center;justify-content:center;gap:10px;background:var(--em,#f4efe7);border:0;padding:15px 24px;min-height:48px;box-sizing:border-box;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;transition:background .3s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1)}
.btn--sig:hover{background:#fff;color:#111214}
.btn--sig:active{transform:scale(.985)}
.btn--sig[disabled]{background:var(--s3);color:var(--t2)}
/* the secondary keeps its outline — it is the one that needs a boundary */.btn--ghost{border-color:var(--rule);color:var(--t1);display:inline-flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--l2);background:none;padding:14px 22px;min-height:48px;box-sizing:border-box;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;transition:background .3s,color .3s,border-color .3s}
.btn--ghost:hover{background:var(--s2);color:var(--t0);border-color:var(--l2)}

/* the bar's action is the same L1 and must clear the same target size */.pv-bar-go{display:inline-flex;align-items:center;gap:10px;padding:13px 22px;background:var(--em,#f4efe7);color:#111214;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;transition:background .3s,transform .3s cubic-bezier(.16,1,.3,1);min-height:44px;box-sizing:border-box}

/* Nothing reserved the bottom band, so a fixed control could sit on top of
   whatever focus or a fragment link had just scrolled into view. */
html{scroll-padding-top:70px;scroll-padding-bottom:84px}
.pv-bar,.a-float{padding-bottom:env(safe-area-inset-bottom,0px)}

/* ── the phone contact bar (2026-10-11) ────────────────────────────────────
   Call, WhatsApp and Request a quote along the bottom edge of every page on
   a phone, 700px and under (app.js contactBar; fx-bar decides when it shows).
   It is the product bar's own glass and hairline, so the two read as one
   family. The hierarchy is the site's: one filled action, the division's
   cream or ice, exactly the product bar's button; the two ways to talk are
   outlined, quiet, and stacked glyph-over-word so all three fit at 320px.
   44px is the floor for a target; these are 48. Above 700px it is not drawn:
   the header, the corner button and the product bar do the work there. */
.cbar{display:none}
@media (max-width:700px){
  .cbar{position:fixed;left:0;right:0;bottom:0;z-index:69;display:flex;align-items:stretch;gap:var(--x2);
    padding:var(--x2) max(var(--gut),env(safe-area-inset-right,0px)) calc(var(--x2) + env(safe-area-inset-bottom,0px)) max(var(--gut),env(safe-area-inset-left,0px));
    background:rgba(14,14,16,.82);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);
    border-top:1px solid rgba(255,255,255,.12);
    transform:translateY(101%);transition:transform .46s cubic-bezier(.16,1,.3,1)}
  .cbar.on{transform:none}
  .cb-s,.cb-q{box-sizing:border-box;min-height:48px;display:flex;align-items:center;justify-content:center;
    font:400 var(--f-cap)/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;
    -webkit-tap-highlight-color:transparent;transition:background .3s,color .3s,border-color .3s,transform .3s cubic-bezier(.16,1,.3,1)}
  .cb-s{flex:0 0 auto;flex-direction:column;gap:5px;padding:0 var(--x3);min-width:48px;
    border:1px solid var(--l2);color:var(--t1);background:none}
  .cb-s .ico{width:17px;height:17px;flex:0 0 auto}
  .cb-s:active{background:var(--s3);color:var(--t0)}
  .cb-q{flex:1 1 auto;min-width:0;padding:0 var(--x4);background:var(--em,#f4efe7);color:#111214;font-size:var(--f-mic);letter-spacing:.14em}
  .cb-s:active,.cb-q:active{transform:scale(.985)}
  /* a hover is for a pointer: on touch it would stay on after the tap */
  @media (hover:hover){ .cb-s:hover{background:var(--s3);color:var(--t0)} .cb-q:hover{background:#fff} }
  /* the product bar belongs to wider screens: here its action is the primary
     above, and the page ends one contact-bar height lower (--cbar-h, fx-bar) */
  .pv-bar{display:none}
  html.cbar-pg .ftr{padding-bottom:calc(var(--x6) + var(--cbar-h,65px))}
  /* the corner button is the contact bar's primary on a phone: not twice */
  .a-float{display:none}
  /* the home hero pins its copy to the foot of the first screen, and the bar
     is a fixed layer over that screen, so the copy lifts by the bar's height
     and the second button is not half under it */
  .home-hero-in{padding-bottom:calc(clamp(26px,5vh,54px) + var(--cbar-h,65px))}
  /* a short phone (568px and under): the copy has to fit between the header
     and the bar, so its gaps and the proof line close up a little */
  @media (max-height:600px){ .home-hero-in{gap:var(--x3)} .home-lede{font-size:var(--f-bd);line-height:1.38} }
  body.dev .cbar{bottom:40px}
}
/* a phone held on its side: less of the screen to give away, same 44px target */
@media (max-width:700px) and (max-height:500px){
  .cbar{padding-top:6px;padding-bottom:calc(6px + env(safe-area-inset-bottom,0px))}
  .cb-s,.cb-q{min-height:44px}
}
@media (max-width:359px){
  .cbar{gap:6px}
  .cb-s{padding:0 var(--x2)}
  .cb-q{padding:0 var(--x2);letter-spacing:.1em}
}
@media (prefers-reduced-motion:reduce){ .cbar{transition-duration:.01ms} }
@media print{ .cbar{display:none} }

/* ═══ THE CATEGORY DECISION GUIDE ══════════════════════════════════════════
   About a thousand words per category, authored as an ordered argument and
   until now collapsed inside a drawer. The claim keeps a reading measure of
   its own; the steps of it sit side by side so the order is visible as
   shape, not only as prose. */
.gd-lede{max-width:32em}
.gd{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));
    gap:var(--x6) var(--x8);margin-top:var(--x8)}
.gd p{border-top:1px solid var(--l1);padding-top:var(--x4)}

/* ═══ A COALESCED RUN ══════════════════════════════════════════════════════
   One module, N units, one axis down the left. The four process stages, the
   four audience blocks and the three contact tables were each rendered as
   that many separate sections; this is the frame they share, drawn once. */
.run{list-style:none;display:grid;gap:var(--x15)}
.run-u{display:grid;grid-template-columns:var(--x15) minmax(0,1fr);gap:0 var(--x5)}
.run-k{position:relative}
.run-n{display:block;font:400 var(--f-mic)/1 var(--mono);
       letter-spacing:.16em;text-transform:uppercase;color:var(--t2)}
.run-ax{position:absolute;left:0;top:var(--x6);
        bottom:calc(var(--x15) * -1);width:1px;background:var(--l1)}
.run-u:last-child .run-ax{display:none}
.run-b>.d3{margin-bottom:var(--x4)}
.run-b>.lede{margin-bottom:var(--x6)}
@media (max-width:760px){
  .run{gap:var(--x12)}
  .run-u{grid-template-columns:1fr;gap:var(--x3)}
  .run-ax{display:none}
}

/* ═══ beta1.1.0 · client demonstration ═══════════════════════════════════
   The demo tag is the same chip as "Photography required", set in the
   emphasis tone instead of the signal red: a slot the presenter is going
   to fill is a different fact from a slot nobody has briefed. */
.ph--demo .ph-tag{background:var(--em);color:var(--void)}

/* bar patterns: five leaf elevations in one row, the same stroke as the
   22.5° set, the name under each. Drawn, so the choice is made by eye. */
.bp{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:var(--x5) var(--x4)}
.bp-i{display:grid;gap:8px;min-width:0}
.bp-svg{display:block;width:40px;height:88px;color:var(--t0)}
.bp-t{font:500 var(--f-sm)/1.3 var(--sans);color:var(--t0)}
.bp-d{font-size:var(--f-mic);line-height:1.5;color:var(--t2)}

/* the map: an embed on the left, the address on the right. Offline the
   frame is a plain grey field with the word Map in it — the iframe paints
   over the fallback the moment it loads. */
.mapgrid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--x6);align-items:start}
.map{position:relative;aspect-ratio:4/3;background:var(--holdbg);border:1px solid var(--holdln);overflow:hidden}
.map iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;filter:grayscale(1) contrast(.92) brightness(.86);z-index:1;
  opacity:0;transition:opacity .6s ease}
.map iframe.is-on{opacity:1}
.map:has(iframe.is-on) .map-ph{visibility:hidden}
.map-ph{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;gap:4px;padding:clamp(12px,1.5vw,20px);z-index:0}
.map-side{min-width:0}
@media (max-width:820px){.mapgrid{grid-template-columns:1fr}}

/* a zone's display items are product tiles that lead to product pages:
   the interactive anatomy, with the photograph on top */
.cell--disp .shot{margin:calc(-1 * clamp(20px,2.4vw,32px)) calc(-1 * clamp(20px,2.4vw,32px)) 4px}

/* ── contact strip (beta1.4.0) — call, WhatsApp, email, side by side ───── */
.cstrip{display:flex;flex-wrap:wrap;gap:10px;margin-top:var(--x4)}
.ico--wa path{fill:currentColor;stroke:none}
.a2:hover .ico--wa *{stroke:none}
.ftr-addr{font-size:14px;color:var(--t2);line-height:1.5}

/* ── showroom plan (beta1.4.0) — stands in for the withdrawn photographs ── */
.plan{margin:0;max-width:880px}
.plan-d{position:relative}
.plan svg{display:block;width:100%;height:auto}
.plan .pl-wall{fill:none;stroke:var(--t1);stroke-width:1.4;vector-effect:non-scaling-stroke}
.plan .pl-part{fill:none;stroke:var(--t3);stroke-width:1;vector-effect:non-scaling-stroke}
.plan .pl-street{fill:none;stroke:var(--t3);stroke-width:1;stroke-dasharray:6 6;vector-effect:non-scaling-stroke}
.pl-z,.pl-l{position:absolute;transform:translate(-50%,-50%);font:500 11px/1.2 var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}
.pl-z{color:var(--t0);padding:8px 10px;text-decoration:none;transition:color .2s}
.pl-z i{font-style:normal;color:var(--t2);margin-right:6px}
.pl-z:hover,.pl-z:focus-visible{color:var(--sig)}
.pl-l{color:var(--t2);pointer-events:none}
.pl-cap{font:400 11.5px/1.5 var(--mono);color:var(--t2);margin-top:10px}
.spanel-m .plan{padding:clamp(16px,2vw,28px)}
/* the showroom's own drawing (2026-10-14): the picture runs the width of its
   frame; the four zones are a quiet row of links under it */
.plan--pic{max-width:none}
.plan--pic .plan-d{border:1px solid var(--l1)}
/* on a phone the drawing runs edge to edge (the page's own gutter is taken back
   on both sides); its zone links and caption keep the gutter. Inside the home
   block's panel it keeps the panel's padding. */
@media (max-width:640px){
  .plan--pic{margin-left:calc(var(--gut) * -1);margin-right:calc(var(--gut) * -1)}
  .plan--pic .plan-d{border-left:0;border-right:0}
  .plan--pic .plan-zones,.plan--pic .pl-cap{margin-left:var(--gut);margin-right:var(--gut)}
  .spanel-m .plan--pic{margin-left:0;margin-right:0}
  .spanel-m .plan--pic .plan-d{border-left:1px solid var(--l1);border-right:1px solid var(--l1)}
  .spanel-m .plan--pic .plan-zones,.spanel-m .plan--pic .pl-cap{margin-left:0;margin-right:0}
}
.plan--pic .plan-img{display:block;width:100%;height:auto;aspect-ratio:16/9;background:#080a0b}
.plan-zones{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:0 24px}
.plan-zones a{display:inline-flex;align-items:center;gap:6px;min-height:44px;font:500 11px/1.2 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:var(--t0);text-decoration:none;transition:color .2s}
.plan-zones i{font-style:normal;color:var(--t2)}
.plan-zones a:hover,.plan-zones a:focus-visible{color:var(--sig)}
/* the table is narrower than its label on a phone; the drawing says it alone */
@media (max-width:640px){ .pl-l--table{display:none} }

/* ── F11 · tertiary ink on a hover surface ────────────────────────────────
   --t2 is 4.71:1 on the page and 4.51:1 on a card, but every surface that
   lifts to --s3 on hover dropped it to 3.97:1 (glazing, steel and neutral
   alike). While the surface is lifted, the tertiary ink lifts with it: the
   same hue scaled x1.09, 4.61:1 on all three --s3. --dim is restated because
   it was resolved from --t2 on :root and would not follow. At rest nothing
   changes. */
:is(a.dwg,a.row,a.cell,.opt,.pcard,.act,.pick button,.hg,.ais,.dsp,.fk,.ra--lead,.sp-row--go,.pt):hover{
  --t2:#888580;--dim:#888580}

/* ── browse grids (spec §5; lane B 03, 2026-10-11) ────────────────────────
   Category, product and project browse cards: two to a row from 320px, two
   at 768-1023px, three or four from 1024px. Its own class, so .mesh (also
   used by non-browse content) and its 620px single-column rule are left
   alone. The card is .pcard without its paragraph and meta line; each card
   draws its own hairline so a short last row leaves clean space. */
/* lane B 04d: one column only when the TEXT is enlarged (text-only zoom,
   accessibility text scaling: the grid's own em grows). A track never gets
   narrower than 7.5em, so at normal size (16px: 120px) 320px still holds two
   cards, while at 150-200% text a phone reflows to one. Same column counts as
   above at every width at normal size. The plain rule is the fallback for a
   browser without max(); the @supports block is the rule (integrate
   2026-10-11 put the fallback back as a second top-level rule, but the
   build's css_hygiene merges repeated top-level selectors and folded it
   away again; an at-rule is left alone — final merge 2026-10-11). */
.browse-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;width:100%}
@supports (width:max(1px,2px)){
  .browse-grid{grid-template-columns:repeat(auto-fill,minmax(max(7.5em,calc(50% - 1px)),1fr))}
}
/* the focused card's ring sits above its neighbours: each card is
   positioned (.pcard), so the next card in the row painted over the right
   and lower edge of the ring. The home category tiles are grid items too. */
.browse-card:focus-visible,.home-glyphs .hg:focus-visible{z-index:1}
.browse-grid>.browse-card{box-shadow:0 0 0 1px var(--rule)}
.browse-card .pcard-b{padding:var(--x4) clamp(14px,2vw,22px) var(--x5);gap:var(--x2)}
.browse-card h3{display:flex;align-items:flex-start;gap:var(--x2);overflow-wrap:break-word;min-width:0}
.browse-card h3>span:last-child{min-width:0}
.browse-card-ico{display:block;width:16px;flex:0 0 16px;margin-top:2px}
.browse-card-tag{font:400 var(--f-mic)/1.3 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--t2)}
.browse-more{margin-top:var(--x5)}
@media (min-width:1024px){
  .browse-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .browse-grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}
  .browse-grid--3{grid-template-columns:repeat(auto-fill,minmax(max(7.5em,calc(33.333% - 2px)),1fr))}
  .browse-grid--4{grid-template-columns:repeat(auto-fill,minmax(max(7.5em,calc(25% - 2px)),1fr))}
}
/* phones: the division opening is no longer a full screen of one sentence
   (spec §5, vertical density). The lockup, title, line, cue and both actions
   keep their order and sizes; only the empty height between them goes. */
@media (max-width:767px){
  .t1-open,:root[data-hero="film"] .t1-open{min-height:0}
  .t1-open .t1-lock{margin-bottom:var(--x6)}
}

/* Touch: the Menu button (64x32) and the carousel arrows (38x32) were short of
   a 44px tap. An invisible ::before widens what a finger can hit without
   changing how either looks; the burger's stays inside the 51px header. */
@media (pointer:coarse){
  .burger,.cbtn{position:relative}
  .burger::before{content:'';position:absolute;inset:-6px -2px}
  .cbtn::before{content:'';position:absolute;inset:-6px -3px}
  /* a project's installed-system links are 21px lines of text: 45px to a
     finger, the rows (about 70px apart) unchanged (integrate 2026-10-11) */
  .pj-sys-a{position:relative}
  .pj-sys-a::before{content:'';position:absolute;inset:-12px -4px}
}

/* ── project grids, larger (review of 2026-10-11) ────────────────────────
   "图稍微大一点 … 太过于小气": projects are photographs first. From 1024px a
   project grid (home, the division hubs, /projects, a product's "in place",
   a project's "Other projects", a guide's proof) is two to a row at 3:2, was
   three or four to a row at 4:3; the name takes the 1.4.2 project-teaser
   size. Below 1024px it stays two to a row at 4:3 like every browse grid.
   /projects opens on one full-width card when the set is odd (is-lead, set
   by projectGrid() and applyFilters()), in the project page's own wide crop. */
@media (min-width:1024px){
  .pv-rel--proj{grid-template-columns:repeat(2,minmax(0,1fr))}
  .browse-grid--proj .shot,.pv-rel--proj .shot{--ar:66.67%;--arx:3/2}
  .browse-grid--proj .browse-card h3,.pv-rel--proj .pcard h3{font-size:var(--f-md);font-weight:400;letter-spacing:-.01em}
}
.browse-grid--proj>.is-lead{grid-column:1/-1}
.browse-grid--proj>.is-lead .shot{--ar:56.25%;--arx:16/9}
@media (min-width:768px){ .browse-grid--proj>.is-lead .shot{--ar:42.85%;--arx:21/9} }

/* ═══ approved additions, 2026-10-11 (the user's four "yes"es, each to sit
   below what it stands beside: headline > button > proof line; division name
   > category tiles > figure strip; division items > Projects/Showroom/Guides)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── home: the eight categories as two labelled groups of four ────────────
   Side by side from 1101px (four to a group, as eight across was), one under
   the other below it. The label is the site's small uppercase label, in the
   tertiary grey; the tiles keep the names. Each group keeps the tile grid
   and its hairlines. Phone: label, then its 2 x 2, twice. */
.hg-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--x6)}
.hg-grp{min-width:0}
.hg-lbl{display:block;margin-bottom:var(--x2)}
.hg-grp .home-glyphs{--glyph-cols:4}
@media (max-width:1100px){ .hg-groups{grid-template-columns:minmax(0,1fr)} }
@media (max-width:560px){ .hg-grp .home-glyphs{--glyph-cols:2} }

/* ── division pages: the six-figure strip under the photograph ────────────
   The figure strip (.t3-open) as the product pages' numbers use it: a mono
   label over one line of 15px, hairlines above and below, on the page's own
   ground. Six across from 1024px, 3 x 2 below, 2 x 3 on a phone. */
.t3-open--div{margin-top:var(--x6);grid-template-columns:repeat(6,minmax(0,1fr))}
/* where a label wraps (a phone), the values still share a line */
.t3-open--div .t3-fig dd{margin-top:auto}
@media (max-width:1023px){ .t3-open--div{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (max-width:480px){ .t3-open--div{grid-template-columns:repeat(2,minmax(0,1fr))} }
/* the longest label (Weathertightness) must sit inside its cell at the narrowest
   widths (320 and 481, where the cells are 108-116px): a little less tracking */
@media (max-width:520px){ .t3-open--div .t3-fig dt{letter-spacing:.1em} }
@media (max-width:340px){ .t3-open--div .t3-fig dt{letter-spacing:.05em} }

/* ── header: Guides on the desktop bar ────────────────────────────────────
   It is a plain text link like Showroom. Where the bar becomes the phone menu
   (860px and below) it is hidden here, because the menu's quiet row has it. */
@media (max-width:860px){ .nav a.nav-dsk{display:none} }

/* ═══════════════════════════════════════════════════════════════════════════
   HOME: 1.4.2's PAGE, WITH TWO FORMAT FIXES (2026-10-11)
   The sections, their order, type, colours and motion are 1.4.2's (tplHome,
   renderHomeSection). What differs: survey / make / fit is on one axis (the
   .pc-* rules above: icon, node, number and title share one left edge), and
   Guides and answers is one contained block, below.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Guides and answers: the two lists are a reading block, not the width of the
   screen. They keep the heading's left edge and 1.4.2's order (the guides, then
   the answers, no gap); the rows are lighter (vertical padding only, so the
   hover shift and the + / arrow behave as they did) and an answer opens to a
   reading measure. */
.gl-box .idxl,.gl-box .faq{max-width:46rem}
.gl-box .idxl a{padding-top:var(--x3);padding-bottom:var(--x3)}
.gl-box .faq summary{padding-top:var(--x3);padding-bottom:var(--x3);padding-right:40px}
.gl-box .faq-a{padding-bottom:var(--x4);padding-right:40px;max-width:62ch}

/* ── contained blocks: not everything runs the full screen (2026-10-11 review) ────
   Photographs, heroes, galleries and grids of cards keep the whole width. A
   block that is read line by line (a list of questions, an index of guides,
   a table of facts) sits in 8 of the 12 columns, centred, so its hairlines
   are as long as its content and not 1,392px, and the full-width pieces
   around it stay full width. Below 981px the page is one column and nothing
   is held back. `.sec--c8` contains everything its wrap holds (heading and
   list together, on one left edge); `.c8` contains one block. Inside the
   guide pages' side-panel layout, and inside a numbered run, the container is
   already a column, so a block there is capped at 44rem and keeps its left
   edge instead of being centred. */
@media (min-width:981px){
  .sec--c8>.wrap>*,.c8{max-width:calc((100% - 11 * var(--x5)) * .66667 + 7 * var(--x5));margin-left:auto;margin-right:auto}
  .main .c8,.run-b .specs:not([class*="specs--"]){max-width:min(100%,44rem);margin-left:0;margin-right:0}
  .c8>.rows:first-child{margin-top:var(--x6)}
  /* the index rows lose the empty "meta" column when the block is narrower */
  .c8 .row{grid-template-columns:44px minmax(0,1fr) minmax(0,1.5fr) 26px}
  .c8 .row-m:empty{display:none}
  /* a row with no description (the guides index) gives its width to the title */
  .c8 .row:has(.row-d:empty){grid-template-columns:44px minmax(0,1fr) 26px}
  .c8 .row-d:empty{display:none}
}

/* ═══ HOME HERO, EXPLORER VARIANT (2026-10-18) ════════════════════════════
   Stand-in for the home film until it exists: the night house and its
   products fill the first screen. The 16:9 stage is scaled to cover the
   screen but never cropped by more than 6% a side, so the hotspots at either
   end of the house stay on screen; any height left over is the page's own
   black. Layering: picture, then the scrim, then the hotspots above it, the
   copy above them, and the readout top right over the sky, clear of the copy
   bottom left and of the floating actions bottom right. Turned off by
   removing "variant": "explorer" from the home page's hero section. */
.home-hero--xp .xp-win{position:absolute;inset:0;overflow:hidden;isolation:isolate}
/* Centred by arithmetic, not by a transform: a transform would make the stage
   its own stacking context and the hotspots could no longer sit above the
   scrim. (inset:0 with auto margins does not centre a box wider than its
   container: the overflow all goes to the right, and pushed the garden-room
   hotspot off a 1440px screen.) Percentages in left and in margin-top both
   resolve against the hero's width, so the stage's own height can be
   expressed in them. */.home-hero--xp{background:var(--void);--xp-w:max(100%,min(calc(100svh * 16 / 9),112%))}
.home-hero--xp .expl-stage.xp-stage{position:absolute;max-width:none;height:auto;aspect-ratio:16/9;
  width:var(--xp-w);left:calc((100% - var(--xp-w)) / 2);top:50%;margin-top:calc(var(--xp-w) * -.28125)}
.home-hero--xp .expl-spots{z-index:3}
.home-hero--xp .xp-scrim{position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(to top,rgba(7,7,8,.94) 0%,rgba(7,7,8,.66) 22%,rgba(7,7,8,0) 48%),
             linear-gradient(to bottom,rgba(7,7,8,.62) 0%,rgba(7,7,8,0) 15%)}
.home-hero--xp .home-hero-in{z-index:4;pointer-events:none}
.home-hero--xp .home-hero-in a,.home-hero--xp .home-hero-in button{pointer-events:auto}
.home-hero--xp > .expl-rd{position:absolute;z-index:5;left:auto;bottom:auto;
  top:calc(var(--hdr-h,54px) + var(--x5));right:var(--gut);
  width:min(340px,calc(100% - 2 * var(--gut)));border:1px solid var(--l1)}
.home-hero--xp + .sec .expl-list{border-top:0}
.home-hero--xp .xp-scroll{position:absolute;inset:0}
.xp-dots:empty{display:none}
@media (max-width:860px){
  /* the house fills the screen above the title, a few frames at a time */
  .home-hero--xp{height:100svh;min-height:560px;overflow:hidden;padding-top:0}
  .home-hero--xp .xp-win{inset:0 0 calc(var(--xp-copy,190px) + var(--cbar-h,65px)) 0}
  .home-hero--xp .xp-scroll{overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;
    overscroll-behavior-x:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .home-hero--xp .xp-scroll::-webkit-scrollbar{display:none}
  .home-hero--xp .expl-stage.xp-stage{position:relative;left:auto;top:auto;margin:0;height:100%;width:auto;aspect-ratio:16/9}
  .xp-snap{position:absolute;top:0;width:1px;height:1px;scroll-snap-align:center;pointer-events:none}
  .home-hero--xp .xp-scrim{display:block;
    background:linear-gradient(to bottom,rgba(7,7,8,.62) 0,rgba(7,7,8,0) 18%),
               linear-gradient(to top,var(--void) 0,rgba(7,7,8,0) 20%)}
  /* the facts in the paragraph are all further down the page (survey, make,
     fit; standards and numbers), and the contact bar right below already says
     Request a quote: on a phone the first screen is the house, the title and
     the showroom */
  .home-hero--xp .home-lede{display:none}
  .home-hero--xp .home-hero-in .btns > :first-child{display:none}
  .home-hero--xp .home-hero-in{position:absolute;left:0;right:0;top:auto;bottom:var(--cbar-h,65px);max-width:none;
    padding:var(--x4) var(--gut) var(--x5);gap:var(--x3)}
  .home-hero--xp .home-ttl{font-size:clamp(30px,8.4vw,40px)}
  .home-hero--xp > .expl-rd{position:absolute;left:var(--gut);right:var(--gut);top:calc(var(--hdr-h,54px) + 12px);
    width:auto;border:1px solid var(--l1)}
  .xp-dots{position:absolute;z-index:4;left:0;right:0;bottom:calc(var(--xp-copy,190px) + var(--cbar-h,65px) + 12px);
    display:flex;justify-content:center;gap:6px;pointer-events:none}
  .xp-dots i{width:18px;height:2px;background:rgba(246,239,228,.32);transition:background .3s,width .3s}
  .xp-dots i.on{width:28px;background:var(--ink,#f6efe4)}
}


/* ═══ THE PRODUCT READOUT FLOATS BESIDE THE POINTER (2026-10-18) ══════════
   With a mouse, the card for the product under the pointer opens beside that
   hotspot instead of in a fixed corner: to its right, or to its left when
   the right has no room, and never past the edge of the picture. It takes the
   pointer (so the reader can move into it and press Open) and closes a moment
   after the pointer has left both the hotspot and the card. On a touch screen
   nothing changes: the card stays below the picture. The script places it
   and adds .is-float; without the script the old corner placement holds. */
.expl-rd.is-float{position:absolute;z-index:6;right:auto;bottom:auto;
  width:min(320px,calc(100% - 24px));pointer-events:auto;will-change:transform;
  /* frosted glass over the house, not a black block (owner, 2026-10-19) */
  background:rgba(18,18,20,.46);-webkit-backdrop-filter:blur(22px) saturate(1.4);backdrop-filter:blur(22px) saturate(1.4);
  border:1px solid rgba(255,255,255,.14);
  box-shadow:0 18px 48px rgba(0,0,0,.38);animation:rdin .32s cubic-bezier(.16,1,.3,1)}
/* it arrives (scale and opacity); the transform itself belongs to the
   pointer-follow in app.js, so the entrance uses the separate properties */
@keyframes rdin{from{opacity:0;scale:.94;translate:0 6px}to{opacity:1;scale:1;translate:0 0}}
[data-motion="off"] .expl-rd.is-float{animation:none}

/* ═══ THE HOME INTRO (2026-10-18) ══════════════════════════════════════════
   See homeIntro() in app.js. The house sits in exactly the box the hero's
   stage uses, so when the intro fades the picture does not move: the rooms
   simply go dark. On a phone it fills the screen's height and pans across the
   house while the rooms light. */
html.intro-pending,html.intro-on{overflow:hidden}
html.intro-pending body::after{content:"";position:fixed;inset:0;z-index:9998;background:#070708;
  animation:intro-gate 0s 3s forwards}
@keyframes intro-gate{to{visibility:hidden}}
.intro{position:fixed;inset:0;z-index:9999;background:#070708;overflow:hidden;
  --xp-w:max(100%,min(calc(100svh * 16 / 9),112%))}
.intro-house{position:absolute;width:var(--xp-w);aspect-ratio:16/9;left:calc((100% - var(--xp-w)) / 2);
  top:50%;margin-top:calc(var(--xp-w) * -.28125);opacity:0;transform:scale(1.035);
  transition:opacity 1.1s cubic-bezier(.16,1,.3,1),transform 3.6s cubic-bezier(.16,1,.3,1)}
.intro-house > img,.intro-room,.intro-room img{position:absolute;inset:0;width:100%;height:100%}
.intro-house img{object-fit:cover;display:block}
.intro-room{opacity:0;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  transition:opacity .55s cubic-bezier(.16,1,.3,1)}
.intro-room.on{opacity:1}
.intro-ext{opacity:0;transition:opacity .9s ease}
.intro-ext.on{opacity:1}
.intro.house-in .intro-house{opacity:1;transform:none}
.intro-logo{position:absolute;inset:0;z-index:3;display:grid;place-items:center;pointer-events:none;
  opacity:0;transform:translateY(10px) scale(.97);
  transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.intro-logo svg{width:min(260px,52vw);height:auto;display:block;color:#f6efe4;fill:currentColor}
.intro-logo b{font:600 34px/1 var(--sans,inherit);letter-spacing:.18em;color:#f6efe4}
.intro.logo-in .intro-logo{opacity:1;transform:none}
.intro.house-in .intro-logo{opacity:0;transform:translateY(-6px) scale(1.02);transition-duration:.6s}
.intro-skip{position:absolute;z-index:4;right:var(--gut,24px);bottom:calc(var(--gut,24px) + env(safe-area-inset-bottom,0px));
  font:500 11px/1 var(--mono,monospace);letter-spacing:.14em;text-transform:uppercase;color:rgba(246,239,228,.55)}
.intro.out{opacity:0;transition:opacity 1s cubic-bezier(.4,0,.2,1)}
.intro.out-fast{opacity:0;transition:opacity .35s ease}
@media (max-width:860px){
  .intro{--xp-w:calc(100svh * 16 / 9)}
  .intro-house{left:0;top:0;margin-top:0;height:100%;width:auto}
  .intro.panning .intro-house{transform:translateX(calc(100vw - 100svh * 16 / 9));
    transition:opacity 1.1s cubic-bezier(.16,1,.3,1),transform 3.4s cubic-bezier(.45,0,.25,1)}
}
/* with reduced motion it still plays, but nothing moves: no zoom, no pan,
   only the lights coming on and the fades */
.intro.intro--calm .intro-house,.intro.intro--calm.house-in .intro-house,.intro.intro--calm.panning .intro-house{transform:none}
.intro.intro--calm .intro-logo,.intro.intro--calm.logo-in .intro-logo,.intro.intro--calm.house-in .intro-logo{transform:none}

/* ═══ THE HOME PAGE, OWNER'S LAYOUT (2026-10-18, beta1.8.0) ═══════════════
   From the owner's marked-up screenshots: every screen has clean space round
   it, its content centred and its type larger. The first screen is the house
   with the title in one line bottom left and Request a quote, Call and
   WhatsApp bottom right (the phone bar's three); the header over it is glass
   with no rule. The second screen is one sentence and the four figures. The
   product list and the category tiles under the hero are gone, the
   standards block is the second screen, Survey, make, fit holds still while
   its stages light, and the showroom is the one place the page offers a
   visit. Phone: the hero is the house and the title; a tap on a product
   leans the picture in on it and opens a small frosted card under it. */

/* ── the first screen ──────────────────────────────────────────────────── */
.home-hero--xp .home-ttl{text-transform:uppercase;font-weight:400;letter-spacing:-.022em;line-height:.94}
.xp-acts{display:flex;align-items:stretch;gap:var(--x3);flex:0 0 auto}
.xp-acts .a1{min-height:58px;padding:0 24px;font-size:15px}
.xp-talk{display:flex;gap:6px;padding:4px;background:rgba(14,14,16,.42);
  -webkit-backdrop-filter:blur(18px) saturate(1.3);backdrop-filter:blur(18px) saturate(1.3);
  border:1px solid rgba(255,255,255,.12)}
.xa-s{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  min-width:68px;min-height:48px;padding:0 14px;border:1px solid rgba(255,255,255,.16);
  color:var(--t0);font:400 var(--f-cap)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;
  transition:background .3s,color .3s,border-color .3s}
.xa-s .ico{width:17px;height:17px;flex:0 0 auto}
.xa-s:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.xa-s:hover .ico *{stroke:var(--s0)}
.xa-s:hover .ico--wa{fill:var(--s0)}
.xa-s .ico--wa{fill:currentColor}
@media (min-width:861px){
  /* lighter than before: the house is the picture, the dark is only where
     the title needs it */
  .home-hero--xp .xp-scrim{background:
      linear-gradient(to top,rgba(7,7,8,.84) 0%,rgba(7,7,8,.46) 12%,rgba(7,7,8,0) 30%),
      linear-gradient(to bottom,rgba(7,7,8,.34) 0%,rgba(7,7,8,0) 13%)}
  .home-hero--xp .home-hero-in{left:0;right:0;max-width:none;flex-direction:row;flex-wrap:wrap;
    align-items:flex-end;justify-content:space-between;gap:var(--x5) var(--x8);
    padding:0 var(--gut) clamp(24px,4.6vh,52px)}
  .home-hero--xp .home-ttl{white-space:nowrap;font-size:clamp(40px,calc((100vw - 2 * var(--gut) - 470px) / 12),124px)}
}
@media (max-width:860px){
  .home-hero--xp .home-ttl{font-size:clamp(32px,10vw,46px)}
  .home-hero--xp .home-hero-in{padding-bottom:var(--x6)}
}
@media (max-width:700px){ .home-hero--xp .xp-acts{display:none} }

/* ── the second screen: the sentence and the figures ──────────────────── */
.hsum .wrap{display:flex;flex-direction:column;align-items:center}
.hsum .bignums{width:100%;max-width:1240px;background:none;border:0;gap:0}
.hsum .bn{background:none;padding:0 var(--x5);align-items:center;text-align:center}
.hsum .bn + .bn{border-left:1px solid var(--l1)}
.hsum .bn-n{font-size:clamp(56px,6.6vw,112px)}
.hsum .bn-c{font-size:var(--f-bd)}
.hsum .bncodes{justify-content:center;border:0;padding:clamp(36px,6vh,64px) 0 0;text-align:center}
.hsum .bncodes span{align-items:center}
.hsum .bnmore{margin-top:var(--x6)}
@media (max-width:900px){
  .hsum .bn{padding:var(--x8) var(--x4)}
  .hsum .bn:nth-child(odd){border-left:0}
  .hsum .bn:nth-child(n+3){border-top:1px solid var(--l1)}
}
@media (max-width:700px){
  .hsum{min-height:0;padding:clamp(64px,12vh,104px) 0 clamp(56px,10vh,96px)}
  .hsum .wrap{align-items:stretch}
  .hsum-lede{font-size:clamp(22px,6.2vw,27px);text-align:left;margin-bottom:var(--x10)}
  /* two by two, which the owner preferred; never one column */
  .hsum .bignums{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hsum .bn{align-items:flex-start;text-align:left;padding:var(--x6) var(--x3) var(--x6) 0}
  .hsum .bn:nth-child(even){padding-left:var(--x4)}
  .hsum .bn-n{font-size:clamp(48px,14vw,64px)}
  .hsum .bn-u{letter-spacing:.1em}
  .hsum .bn-c{font-size:var(--f-sm);margin-top:var(--x2)}
  .hsum .bncodes{justify-content:flex-start;text-align:left;gap:var(--x4) var(--x8)}
  .hsum .bncodes span{align-items:flex-start}
}

/* ── every section of the home page is a screen, centred ───────────────── */
.hm{padding:clamp(80px,14vh,168px) 0}
.hm .head{margin-left:auto;margin-right:auto;text-align:center;max-width:58rem;margin-bottom:clamp(40px,7vh,88px)}
.hm .head .d2{font-size:clamp(40px,4.7vw,92px);line-height:1.02;letter-spacing:-.034em;margin-bottom:var(--x6)}
.hm .head .lede{font-size:clamp(19px,1.75vw,32px);line-height:1.32;color:var(--t0);max-width:32em;margin:0 auto;text-wrap:balance}
/* Survey, make, fit. Each stage is centred in its own third, so the three
   drawings and the three points on the axis sit evenly across the screen,
   about its middle (owner, 2026-10-19: not left-aligned inside thirds). The
   axis runs from the first point to the last. On a phone it is one column,
   left-aligned, as before. */
.hm--why .pchart{max-width:1240px;margin:0 auto}
@media (min-width:621px){
  .hm--why .pchart{grid-template-columns:repeat(3,minmax(0,1fr))}
  .hm--why .pc{align-items:center;text-align:center;padding:var(--x8) var(--x6)}
  .hm--why .pc-ico{justify-content:center;margin-left:0}
  .hm--why .pc-ax{align-self:stretch;margin-left:calc(-1 * var(--x6));margin-right:calc(-1 * var(--x6))}
  .hm--why .pc-ax::before{display:block;left:0;right:0}
  .hm--why .pc:first-child .pc-ax::before{left:50%}
  .hm--why .pc:last-child .pc-ax::before{display:block;right:50%}
  .hm--why .pc-ax i{left:50%}
  .hm--why .pc-t,.hm--why .pc-m,.hm--why .pc-d{padding-right:0}
  .hm--why .pc-d{max-width:30em}
}
.hm--why .pc-t{font-size:clamp(30px,3.1vw,56px)}
/* the drawings: the heading centred, the arrows under it */
.hm--drawings .chead{flex-direction:column;align-items:center;justify-content:flex-start;gap:var(--x5)}
.hm--drawings .chead .head{margin-bottom:0}
.hm--why .pc-m{font:400 clamp(15px,1.2vw,19px)/1.4 var(--sans);letter-spacing:-.004em;color:var(--t1);margin-top:var(--x3)}
.hm--why .pc-d{font-size:var(--f-bd)}
.hm--why .wrap > div:last-child{text-align:center}
/* the names in the other blocks, a size up, with their small print gone */
.hm--divisions .dsp-line{font-size:clamp(18px,1.5vw,26px);color:var(--t0)}
.hm--intents .fk{grid-template-columns:minmax(0,1fr) auto;align-items:center;padding-top:var(--x8);padding-bottom:var(--x8)}
.hm--intents .fk-t{font-size:clamp(24px,2.4vw,44px)}
.hm--drawings .cs-meta b{font-size:clamp(18px,1.5vw,24px)}
.hm--proof .pt-t{font-size:clamp(20px,1.8vw,30px);padding-bottom:var(--x2)}
.hm--routes .ra-t{font-size:clamp(19px,1.6vw,26px);line-height:1.2}
.hm--routes .ra{padding:var(--x8) var(--x6);min-height:clamp(150px,20vh,220px)}
.hsum .bn-c{font-size:clamp(15px,1.15vw,18px);color:var(--t1)}
/* the guides and the answers: one centred reading block, larger */
.hm--guides .gl-box{max-width:62rem;margin:0 auto}
.hm--guides .gl-box .idxl,.hm--guides .gl-box .faq{max-width:none}
.hm--guides .idxl b,.hm--guides .faq summary{font-size:clamp(18px,1.6vw,26px)}
.hm--guides .gl-box .idxl a,.hm--guides .gl-box .faq summary{padding-top:var(--x5);padding-bottom:var(--x5)}
/* start where you are: the rows as wide as the reading block */
.hm--intents .wrap > :not(.head){max-width:72rem;margin-left:auto;margin-right:auto}
/* the showroom: the drawing, then the one booking button on the page */
.hm-show{max-width:min(1080px,calc((100svh - 330px) * 1.78));margin:0 auto}
.hm-show .plan--pic .plan-d{border:0}
.hm-show-go{display:flex;flex-direction:column;align-items:center;gap:var(--x4);margin-top:var(--x8)}
.hm-show-go .a2{font-size:clamp(15px,1.2vw,19px);padding:18px 34px;gap:14px}
.hm-show-go .a2 .ico{width:19px;height:19px}
@media (max-width:860px){
  .hm{padding:clamp(64px,11vh,104px) 0}
  .hm .head{text-align:left;margin-left:0;margin-bottom:var(--x10)}
  .hm .head .d2{font-size:clamp(34px,9.6vw,44px)}
  .hm .head .lede{font-size:19px;margin:0;color:var(--t1)}
  .hm--intents .fk{grid-template-columns:minmax(0,1fr);gap:var(--x2);padding-top:var(--x6);padding-bottom:var(--x6)}
  .hm--intents .fk-t{font-size:28px}
  .hm--proof .pt-t{font-size:22px}
  /* four ways to start: two by two, not a stack (owner, 2026-10-19) */
  .hm--routes .racts{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hm--routes .ra{min-height:132px;padding:var(--x5) var(--x4);gap:var(--x3)}
  .hm--routes .ra-t{font-size:18px}
  .hm-show .plan--pic{margin-left:0;margin-right:0}
  .hm-show-go{align-items:stretch}
  .hm-show-go .a2{justify-content:center}
  .hm-show-go .a3{align-self:center}
  .hm--drawings .chead{align-items:flex-start}
}
/* On a phone the stages are one narrow column in the middle of the screen,
   not the full width, each centred, joined by a vertical line from one
   stage's point down to the next (owner, 2026-10-19, after his reference:
   "不要让它站满整个屏幕的宽度…居中在中间…这个线可以让它竖着连"). */
@media (max-width:620px){
  .hm--why .head{text-align:center;margin-left:auto;margin-right:auto}
  .hm--why .head .lede{margin:0 auto}
  .hm--why .pchart{max-width:300px;margin:0 auto;border:0;grid-template-columns:1fr}
  .hm--why .pc{align-items:center;text-align:center;padding:0 0 var(--x8);background:none}
  .hm--why .pc-ico{justify-content:center;margin-left:0}
  .hm--why .pc-ax{order:-1;align-self:center;width:11px;height:64px;margin:0 0 var(--x5)}
  .hm--why .pc-ax::before{display:block;left:50%;right:auto;top:0;bottom:7px;width:1px;height:auto;background:var(--l2)}
  .hm--why .pc:first-child .pc-ax{height:11px}
  .hm--why .pc:first-child .pc-ax::before{display:none}
  .hm--why .pc-ax i{left:50%;top:auto;bottom:0;margin:0 0 0 -5px}
  .hm--why .pc-d{display:none}
  .hm--why .pc-t{font-size:38px}
  .hm--why .pc-m{font-size:17px}
  .hm--why .pc-t,.hm--why .pc-m{padding-right:0}
  .hm--why .wrap > div:last-child{text-align:center}
}

/* ── Survey, make, fit holds still while its stages light (armPin) ─────── */
.hpin[data-pin="on"]{height:calc(100vh + 135vh)}
.hpin[data-pin="on"] > .sec{position:sticky;top:0;min-height:100vh;display:flex;align-items:center;border-top:0;
  padding-top:calc(var(--hdr-h,62px) + var(--x6))}
.hpin[data-pin="on"] > .sec > .wrap{width:100%}
.hpin[data-pin="on"] .pc{opacity:.34;transition:opacity .5s cubic-bezier(.16,1,.3,1),background .34s}
.hpin[data-pin="on"] .pc.is-on{opacity:1}
.hpin[data-pin="on"] .pc.is-on .pc-ico{color:var(--t0)}
.hpin[data-pin="on"] .pc.is-now .pc-ax i{background:var(--t0);border-color:var(--t0);transform:rotate(22.5deg) scale(1.55)}
[data-motion="off"] .hpin .pc{transition:none}

/* ── a tap on the house (openPop) ──────────────────────────────────────── */
.expl-stage.xp-stage{transition:transform .55s cubic-bezier(.16,1,.3,1)}
.expl-stage.xp-stage.is-zoom{transform:scale(1.25)}
.xp-pop{position:absolute;z-index:7;left:0;top:0;width:min(268px,calc(100% - 24px));padding:12px 14px 14px;
  background:rgba(18,18,20,.5);-webkit-backdrop-filter:blur(22px) saturate(1.4);backdrop-filter:blur(22px) saturate(1.4);
  border:1px solid rgba(255,255,255,.14);box-shadow:0 18px 48px rgba(0,0,0,.42);
  opacity:0;transform:translateY(6px);transition:opacity .22s ease,transform .32s cubic-bezier(.16,1,.3,1)}
.xp-pop.on{opacity:1;transform:none}
.xp-pop-x{position:absolute;top:4px;right:4px;width:36px;height:36px;display:grid;place-items:center;
  background:none;border:0;padding:0;color:var(--t1);cursor:pointer;-webkit-tap-highlight-color:transparent}
.xp-pop-x svg{width:12px;height:12px;stroke:currentColor;stroke-width:1.4;fill:none}
.xp-pop-h{display:flex;align-items:baseline;justify-content:space-between;gap:var(--x3);padding-right:30px}
.xp-pop-n{font:400 12px/1 var(--mono);letter-spacing:.12em;color:var(--t1)}
.xp-pop-t{font-size:16px;font-weight:400;line-height:1.2;letter-spacing:-.012em;color:var(--t0);text-align:right}
.xp-pop-d{margin-top:6px;font-size:12.5px;line-height:1.42;color:var(--t1);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.xp-pop-go{margin-top:10px;display:flex;align-items:center;justify-content:center;gap:10px;min-height:40px;
  background:var(--em,#f6efe4);color:#111214;font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase}
.xp-pop-go i{font-style:normal}
/* the contact bar steps down while the card is open, and the frames stop
   snapping so the picture can rest on the point */
html.xp-pop-on .cbar{transform:translateY(101%);pointer-events:none}
html.xp-pop-on .home-hero--xp .xp-scroll{scroll-snap-type:none}
@media (prefers-reduced-motion:reduce){ .expl-stage.xp-stage,.xp-pop{transition-duration:.01ms} }

/* ── the contact page closes centred ───────────────────────────────────── */
.cclose{display:flex;flex-direction:column;align-items:center;gap:var(--x4);padding:clamp(24px,6vh,72px) 0}
.cclose .btns{justify-content:center}
.cclose .cstrip{justify-content:center;margin-top:0}

/* ── the showroom page opens on its drawing ───────────────────────────── */
.srh{position:relative;background:var(--s0)}
.srh-pic .plan{margin:0;max-width:none}
.srh-pic .plan--pic .plan-d{border:0}
.srh-pic .plan-img{display:block;width:100%;height:auto}
.srh-top{padding:0 var(--gut)}
.srh-p{padding:var(--x5) var(--gut) var(--x8)}
.srh-p .t4-bar{border-bottom:0;padding:0 0 var(--x5)}
.srh-p .t4-bar h1{font-size:clamp(18px,1.45vw,24px);font-weight:400}
.srh-p .t4-bar p{font-size:var(--f-bd);flex-basis:100%;max-width:56ch}
@media (min-width:861px){
  .srh{height:calc(100svh - var(--hdr-h,62px));min-height:560px;overflow:hidden;padding-top:0}
  .srh-pic{position:absolute;inset:0}
  .srh-pic .plan,.srh-pic .plan-d{height:100%}
  .srh-pic .plan-img{height:100%;object-fit:cover;object-position:62% 50%}
  .srh-top{position:absolute;z-index:2;left:0;top:0}
  .srh-in{position:absolute;z-index:2;left:var(--gut);bottom:clamp(24px,5vh,56px)}
  .srh-p{max-width:640px;padding:var(--x6) var(--x6) var(--x6);background:rgba(7,7,8,.66);
    -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--l1)}
}

/* ═══ THE FOOTER ON A PHONE (2026-10-19) ════════════════════════════════════
   Two columns, and less of it: the two divisions, the company and the ways
   to reach Sharp. "I want to" and "Book" are the menu's and the contact
   bar's already; the address and the service-area line are on /contact. */
@media (max-width:700px){
  .ftr-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--x8) var(--x4)}
  .ftr-c--i-want-to,.ftr-c--book{display:none}
  .ftr li a{font-size:15px}
  .ftr-addr{display:none}
  .ftr-end{flex-direction:column;gap:var(--x2)}
  .ftr-end span:nth-child(2){display:none}
  .ftr-end .sp{margin-left:0}
}

/* ═══ THE OWNER'S NOTES OF 2026-10-19 (beta1.8.0, second round) ══════════ */

/* ── the product gallery on a phone: a main picture and its thumbnails ──
   Wider than a phone the opening photograph is the block above the strip,
   so its copy in the strip is not drawn, nor the thumbnail row. */
.pv-gal-first,.pv-thumbs{display:none}
@media (max-width:700px){
  .pv > .pv-media:not(.pv-media--more){display:none}
  .pv-media--more{order:-1;position:relative}
  .pv-gal .pv-gal-first{display:block}
  .pv-gal{scroll-snap-type:x mandatory;gap:0;background:none}
  .pv-gal .shot{flex:0 0 100%;width:100%;height:auto;aspect-ratio:1/1;scroll-snap-align:center;border:0}
  .pv-media .pv-gal-nav{position:absolute;z-index:2;right:12px;top:calc(100vw - 44px);padding:0}
  .pv-gal-nav .cbtn{display:none}
  .pv-gal-nav .cpos{padding:7px 10px;background:rgba(14,14,16,.5);color:var(--t0);
    -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
  .pv-thumbs{display:flex;gap:6px;padding:8px var(--gut) 0;overflow-x:auto;scrollbar-width:none}
  .pv-thumbs::-webkit-scrollbar{display:none}
  .pv-th{flex:0 0 58px;height:58px;padding:0;border:1px solid var(--l1);background:var(--s2);
    opacity:.5;overflow:hidden;cursor:pointer;transition:opacity .25s,border-color .25s;-webkit-tap-highlight-color:transparent}
  .pv-th img{display:block;width:100%;height:100%;object-fit:cover}
  .pv-th.on{opacity:1;border-color:var(--t0)}
  /* the contact bar right below already says Request a quote */
  .pv-act .a1{display:none}
}

/* ── phone: a narrower page edge, cards with air between them, pictures
   upright (3:4), and "More in …" as a sideways row ─────────────────────── */
@media (max-width:700px){
  :root{--gut:16px}
  .browse-grid:not(.browse-grid--proj){gap:12px}
  .browse-grid:not(.browse-grid--proj)>.browse-card{box-shadow:none;border:1px solid var(--l1)}
  .browse-grid:not(.browse-grid--proj) .shot{--ar:133.33%;--arx:3/4;border:0}
  .pv-rel:not(.pv-rel--proj){display:flex;gap:12px;overflow-x:auto;overscroll-behavior-x:contain;
    margin:0 calc(-1 * var(--gut));padding:0 var(--gut);scrollbar-width:none;scroll-padding:0 var(--gut)}
  .pv-rel:not(.pv-rel--proj)::-webkit-scrollbar{display:none}
  .pv-rel:not(.pv-rel--proj)>.pcard{flex:0 0 64%;box-shadow:none;border:1px solid var(--l1)}
  .pv-rel:not(.pv-rel--proj) .shot{--ar:133.33%;--arx:3/4;border:0}
}

/* ── the second screen follows the title closely ──────────────────────── */.hsum{min-height:0;display:block;align-items:center;border-top:0;padding:clamp(20px,3.6vh,44px) 0 clamp(80px,14vh,168px)}
.hsum .wrap{align-items:stretch}.hsum-lede{font-size:clamp(24px,2.5vw,44px);line-height:1.28;letter-spacing:-.02em;color:var(--t0);text-align:left;max-width:26em;text-wrap:balance;margin:0 0 clamp(56px,10vh,120px)}

/* ── the footer line on a phone: large, and running ───────────────────── */
.ftr-marq{display:none}
@media (max-width:700px){
  .ftr-mark svg{display:none}
  .ftr-marq{display:flex;overflow:hidden;margin:0 calc(-1 * var(--gut))}
  .ftr-marq-t{display:flex;flex:0 0 auto;animation:ftr-run 16s linear infinite;will-change:transform}
  .ftr-marq span{font:400 clamp(72px,24vw,112px)/1 var(--sans);letter-spacing:-.03em;text-transform:uppercase;
    color:var(--t0);white-space:nowrap;padding-right:.5em}
  @keyframes ftr-run{to{transform:translateX(-50%)}}
}

/* ── the edges of the screen are frosted glass (app.js) ──────────────────
   Top and bottom: a band 15% of the screen tall (7.5% on a phone) from the
   header's lower edge and from the phone's contact bar (or the screen's
   edge), clear at its inner edge, a light frost from 15% in, plainly frosted
   by 9%, strongest at the edge; the middle 70% is untouched. Three layers of
   backdrop blur, each masked to its band, add up to the gradient; their
   radii are scaled by --eb-k (0 to 1), which app.js eases on a spring as
   the bands come and go. Each band also runs a hidden 24px (--eb-hide) in
   under its bar: a backdrop blur smears at its own outer edge, and that
   smear must sit behind the bar, not on the page. --eb-top and --eb-bot are
   measured by app.js. */
.edge-blur{--eb-hide:24px;--eb-z:15vh;--eb-k:0;position:fixed;left:0;right:0;z-index:58;pointer-events:none;
  height:calc(var(--eb-z) + var(--eb-hide))}
@media (max-width:700px){ .edge-blur{--eb-z:7.5vh} }
.edge-blur i{position:absolute;inset:0}
.edge-blur--t{top:calc(var(--eb-top,54px) - var(--eb-hide))}
.edge-blur--b{bottom:calc(var(--eb-bot,0px) - var(--eb-hide))}
.edge-blur i:nth-child(1){-webkit-backdrop-filter:blur(calc(1.5px * var(--eb-k)));backdrop-filter:blur(calc(1.5px * var(--eb-k)))}
.edge-blur i:nth-child(2){-webkit-backdrop-filter:blur(calc(5px * var(--eb-k)));backdrop-filter:blur(calc(5px * var(--eb-k)))}
.edge-blur i:nth-child(3){-webkit-backdrop-filter:blur(calc(14px * var(--eb-k)));backdrop-filter:blur(calc(14px * var(--eb-k)))}
/* stops are measured from the band's outer edge, past the hidden part:
   layer 1 to 100% of the band, layer 2 from 52% to 74%, layer 3 to 42% */
.edge-blur--t i:nth-child(1){-webkit-mask-image:linear-gradient(to bottom,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .72),transparent 100%);mask-image:linear-gradient(to bottom,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .72),transparent 100%)}
.edge-blur--t i:nth-child(2){-webkit-mask-image:linear-gradient(to bottom,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .52),transparent calc(var(--eb-hide) + var(--eb-z) * .74));mask-image:linear-gradient(to bottom,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .52),transparent calc(var(--eb-hide) + var(--eb-z) * .74))}
.edge-blur--t i:nth-child(3){-webkit-mask-image:linear-gradient(to bottom,#000 0,#000 var(--eb-hide),transparent calc(var(--eb-hide) + var(--eb-z) * .42));mask-image:linear-gradient(to bottom,#000 0,#000 var(--eb-hide),transparent calc(var(--eb-hide) + var(--eb-z) * .42))}
.edge-blur--b i:nth-child(1){-webkit-mask-image:linear-gradient(to top,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .72),transparent 100%);mask-image:linear-gradient(to top,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .72),transparent 100%)}
.edge-blur--b i:nth-child(2){-webkit-mask-image:linear-gradient(to top,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .52),transparent calc(var(--eb-hide) + var(--eb-z) * .74));mask-image:linear-gradient(to top,#000 0,#000 calc(var(--eb-hide) + var(--eb-z) * .52),transparent calc(var(--eb-hide) + var(--eb-z) * .74))}
.edge-blur--b i:nth-child(3){-webkit-mask-image:linear-gradient(to top,#000 0,#000 var(--eb-hide),transparent calc(var(--eb-hide) + var(--eb-z) * .42));mask-image:linear-gradient(to top,#000 0,#000 var(--eb-hide),transparent calc(var(--eb-hide) + var(--eb-z) * .42))}
@media print{ .edge-blur{display:none} }

/* ── pictures that lean after the pointer (drift in app.js) ───────────── */
.fx-shot > img{translate:var(--dx,0px) var(--dy,0px)}
.srh .plan-img{translate:var(--dx,0px) var(--dy,0px);scale:1.03}
.hsum .bignums{max-width:none}
.hsum .bncodes,.hsum .bnmore{align-self:center}
/* fixes after the first look (2026-10-19) */
@media (max-width:960px){ .pv{grid-template-columns:minmax(0,1fr)} .pv > *{min-width:0} }
@media (max-width:700px){
  .pv-media--more,.pv-thumbs,.pv-gal{min-width:0}
  .browse-grid:not(.browse-grid--proj){grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* ── card grids: air between the cards (owner, 2026-10-19: "距离挨得特别的近")
   The browse grids (categories, projects) and the related rows were cards
   sharing 1px seams; each card now has its own hairline and a gutter
   between them, at every width. The column counts are written out, since
   the old auto-fill rule counted on a 1px gap. On a phone the pictures
   stand upright (3:4), the projects' opening card 4:5. */
.browse-grid,.pv-rel{--cg:clamp(12px,1.5vw,22px);gap:var(--cg)}
.browse-grid>.browse-card,.pv-rel>.pcard{box-shadow:none;border:1px solid var(--l1)}
.browse-grid .shot,.pv-rel .shot{border:0}
.browse-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
@media (min-width:1024px){
  .browse-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .browse-grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@media (max-width:700px){
  .browse-grid--proj .shot,.pv-rel--proj .shot{--ar:133.33%;--arx:3/4}
  .browse-grid--proj>.is-lead .shot{--ar:125%;--arx:4/5}
}
/* every photograph frame's zoom (hover, and the settle after the reveal)
   eases slowly in and out, whatever order the stylesheets are joined in */
.fx-shot > img{transition:scale 1.4s cubic-bezier(.22,.61,.36,1),opacity .45s cubic-bezier(.16,1,.3,1)}
.pcard .fx-shot > img{transition:transform .8s cubic-bezier(.16,1,.3,1),scale 1.4s cubic-bezier(.22,.61,.36,1),opacity .45s cubic-bezier(.16,1,.3,1)}

/* words drifting against the scroll (fx-smooth textParallax): the separate
   translate property, so the arrival animations keep transform to themselves */
.par{translate:0 var(--py,0px)}
/* a breadcrumb never sits on the heading under it */
.crumb + .head,.crumb + .t4-bar,.crumb + .gx-q{margin-top:var(--x6)}

/* ═══ THE SITE-WIDE GUIDELINE (owner, 2026-10-19; beta1.8.0) ═══════════════
   What the home page was given now holds for every page: bigger type, less
   small print, clean space round each block, content centred, the same
   damped scroll. Shared rules here; a template's own adjustments follow in
   its own block below. The contract at the top of this file ("10 to 26px,
   32px once") is the 1.4.2 scale and no longer the rule: these sizes are.
   On a phone headings stay left, as on the home page (Survey, make, fit is
   the one centred phone block). */
:root{
  --step:clamp(72px,11vh,136px);
  --f-h1:clamp(40px,4.8vw,76px);   /* a page's title */
  --f-h2:clamp(32px,3.6vw,60px);   /* a section's heading */
  --f-h3:clamp(22px,1.9vw,30px);   /* a block or group heading */
  --f-nm:clamp(18px,1.45vw,23px);  /* an item's name */
  --f-ld:clamp(18px,1.45vw,23px);  /* the one line under a heading */
}
@media (max-width:700px){ :root{--step:clamp(56px,9vh,88px)} }.d1{font-size:var(--f-h1);line-height:1.04;letter-spacing:-.03em;font-weight:400;text-wrap:balance}.d2{font-size:var(--f-h2);line-height:1.06;letter-spacing:-.03em;font-weight:400;text-wrap:balance}.d3{font-size:var(--f-h3);line-height:1.12;letter-spacing:-.02em;font-weight:400}.d4{font-size:var(--f-nm);line-height:1.2;letter-spacing:-.012em;font-weight:400}.lede{font-size:var(--f-ld);line-height:1.38;color:var(--t1);letter-spacing:-.008em;max-width:34em}.body{font-size:clamp(16px,1.2vw,18px);line-height:1.62;color:var(--t1);max-width:68ch;letter-spacing:0}.head{margin-bottom:clamp(36px,6vh,72px);max-width:78ch}

/* a page's opening: the title large and centred, one line under it */
.sec--flush > .wrap > .t4-bar,.t5-bar{flex-direction:column;align-items:center;text-align:center;gap:0;
  border-bottom:0;padding:clamp(40px,8vh,96px) 0 clamp(32px,6vh,72px)}
.sec--flush > .wrap > .t4-bar h1,.t5-bar h1{font-size:var(--f-h1);font-weight:400;line-height:1.02;
  letter-spacing:-.034em;text-wrap:balance;max-width:20ch}
.sec--flush > .wrap > .t4-bar p,.t5-bar .lede,.t5-bar p{flex:none;font-size:clamp(18px,1.55vw,26px);line-height:1.32;
  color:var(--t1);max-width:30em;margin-top:var(--x5);text-wrap:balance}
.sec--flush > .wrap > .t4-bar .t4-n,.t5-bar .t4-n{order:-1;margin-bottom:var(--x4)}
.t5-bar .t4-n:empty{display:none}

/* a section's heading: centred, large */
.sec:not(.hm):not(.hsum) > .wrap > .head{margin-left:auto;margin-right:auto;text-align:center;max-width:58rem}
.sec:not(.hm):not(.hsum) > .wrap > .head .lede{margin:0 auto;text-wrap:balance}
.sec:not(.hm):not(.hsum) > .wrap > .head .d2{margin-bottom:var(--x5)}

/* the closing pair: centred, larger, the two cells level */
.cta2>*{align-items:center;justify-content:center;text-align:center;gap:var(--x4);
  padding:clamp(40px,7vh,84px) clamp(24px,3vw,56px)}
.cta2-a .d3{font-size:clamp(26px,2.6vw,44px);font-weight:400;line-height:1.08;letter-spacing:-.028em}
.cta2-a .body{font-size:clamp(16px,1.25vw,19px);max-width:26em;text-wrap:balance;margin:0}
.cta2-b .d4{font-size:clamp(20px,1.8vw,28px);font-weight:400}
.cta2-a .a1,.cta2-b .a2{margin-top:var(--x3)}
.cta2 .a1{min-height:58px;padding:0 28px;font-size:15px}
@media (max-width:860px){ .cta2 .a1,.cta2 .a2{align-self:stretch;justify-content:center} }

/* the header's links a size up on a wide screen */
@media (min-width:1101px){
  .nav a{font-size:clamp(13px,.98vw,15px)}
  .hdr-cta{font-size:clamp(13px,.98vw,15px);padding:9px 18px}
}

/* the footer: its columns as one centred block */
@media (min-width:701px){
  .ftr-grid{grid-template-columns:repeat(4,minmax(0,1fr));max-width:1120px;margin-left:auto;margin-right:auto;gap:var(--x10) var(--x6)}
  .ftr li a{font-size:15px}
}

@media (max-width:860px){
  .sec--flush > .wrap > .t4-bar,.t5-bar{align-items:flex-start;text-align:left;padding:var(--x10) 0 var(--x8)}
  .sec--flush > .wrap > .t4-bar h1,.t5-bar h1{font-size:clamp(34px,10vw,44px)}
  .sec--flush > .wrap > .t4-bar p,.t5-bar .lede,.t5-bar p{font-size:18px;text-wrap:pretty}
  .sec:not(.hm):not(.hsum) > .wrap > .head{text-align:left;margin-left:0}
  .sec:not(.hm):not(.hsum) > .wrap > .head .lede{margin:0}
  .d2{font-size:clamp(30px,8.6vw,38px)}
}
@media (max-width:700px){
  .crumb--top{display:none}
  .ftr li a{min-height:40px}
}
/* the house on a phone scrolls freely and rests wherever it is let go, so
   every part of it (the middle too) can be brought under a finger (owner,
   2026-10-19); the dots still say roughly where you are */
@media (max-width:860px){ .home-hero--xp .xp-scroll{scroll-snap-type:none} }

/* ── on a touch screen nothing lifts, shifts or lights up under a passing
   finger (owner, 2026-10-19: no hover effects while scrolling on a phone).
   A tap still gives its brief :active feedback; the hover states of the
   cards, rows and tiles are for a pointer that hovers. */
@media (hover:none){
  .pcard:hover,.opt:hover,a.cell:hover,.hg:hover,.dsp:hover,.sp-row--go:hover{background:var(--s0)}
  .pc:hover,.fk:hover,.idxl a:hover,a.row:hover{background:none}
  .fk:hover,.idxl a:hover,a.row:hover,.faq summary:hover{padding-left:0}
  .pcard:hover .pcard-b::before{transform:scaleY(0)}
  a:hover>.ico-box .ico,a:hover .ico-box .ico,.opt:hover .ico-box .ico,.opt:hover .ico-box,.hg:hover .ico-box,.pc:hover .pc-ico{transform:none}
  a.cell:hover .num{opacity:1}
  a.cell:hover::after{opacity:0}
  .pc:hover .pc-ax i{background:var(--s0);border-color:var(--t2);transform:rotate(22.5deg)}
}

/* ═══ PAGES · SITE-WIDE GUIDELINE (2026-10-19) ═══════════════════════════════
   /showroom, /services, /professionals, /contact and the 404, drawn as
   overviews (tplPage, notFoundRoute): bigger type, each block its name and
   one short line, clean space, content centred, and on a phone two short
   tiles to a row. Every rule is scoped to .pg-c, the class the renderers give
   these sections, so no other page changes. The headings of the sections are
   the shared ones (THE SITE-WIDE GUIDELINE above); what is here is the run of
   screens, the tiles, the steps, the lists and the places on these pages that
   needed their own. Headings stay left on a phone, as on the home page, and
   the stages of the process are centred, like Survey, make, fit there. */

/* ── a run is a stack of centred screens, not a rail with a column ─────── */
.pg-c .run--c{gap:0}
.pg-c .run--c .run-u{grid-template-columns:minmax(0,1fr);gap:var(--x3) 0;padding:clamp(56px,9vh,112px) 0}
.pg-c .run--c .run-u + .run-u{border-top:1px solid var(--l0)}
.pg-c .run--c .run-u:first-child{padding-top:0}
.pg-c .run--c .run-u:last-child{padding-bottom:0}
.pg-c .run--c .run-k{text-align:center}
.pg-c .run-b > .d3{font-size:var(--f-h2);line-height:1.06;letter-spacing:-.03em;text-align:center;
  text-wrap:balance;margin-bottom:var(--x5)}
.pg-c .run-b > .lede{text-align:center;max-width:32em;margin:0 auto var(--x8);text-wrap:balance}
.pg-c .run-b > .d3 + :not(.lede){margin-top:var(--x8)}
/* the tables of the contact page are utility rows: closer together */
.pg-c--specs .run--c .run-u{padding:clamp(40px,6vh,72px) 0}
.pg-c--specs .run--c .run-u:first-child{padding-top:0}
.pg-c .run-b .specs:not([class*="specs--"]){max-width:52rem;margin-left:auto;margin-right:auto}
.pg-c .specs:not([class*="specs--"]) dd{font-size:var(--f-nm);line-height:1.35}
.pg-c .specs:not([class*="specs--"]) dt,.pg-c .specs:not([class*="specs--"]) dd{padding-top:var(--x5);padding-bottom:var(--x5)}

/* ── tiles: the name and one short line, centred ───────────────────────── */
.pg-c .mesh{max-width:1240px;margin-left:auto;margin-right:auto}
.pg-c .cell{align-items:center;justify-content:center;text-align:center;gap:var(--x3);
  min-height:clamp(150px,20vh,220px);padding:var(--x8) var(--x6)}
.pg-c .cell .d4{font-size:var(--f-h3);line-height:1.15;letter-spacing:-.018em;text-wrap:balance}
.pg-c .cell-l{font:400 clamp(15px,1.2vw,19px)/1.4 var(--sans);letter-spacing:-.004em;color:var(--t1)}
.pg-c a.cell::after{display:none}
.pg-c .cell-go{margin-top:var(--x2);padding-top:0;font:400 20px/1 var(--sans);letter-spacing:0;color:var(--t2)}
.pg-c .choose{max-width:1240px;margin-left:auto;margin-right:auto}
.pg-c .opt{align-items:center;justify-content:center;text-align:center;
  min-height:clamp(150px,20vh,220px);padding:var(--x8) var(--x6)}
.pg-c .opt h3{font-size:var(--f-h3);font-weight:400;line-height:1.15;letter-spacing:-.018em;text-wrap:balance}

/* ── the steps: Survey, make, fit as the home draws it ─────────────────── */
.pg-c .pchart--steps{max-width:1240px;margin-left:auto;margin-right:auto}
.pg-c .pchart--steps .pc-t{font-size:var(--f-h3);line-height:1.15;padding-right:0}
.pg-c .pchart--steps .pc-m{font:400 clamp(15px,1.2vw,19px)/1.4 var(--sans);letter-spacing:-.004em;
  color:var(--t1);margin-top:var(--x3);padding-right:0;max-width:18em;text-wrap:balance}
/* the steps do not drift against the scroll (fx-smooth): the axis joining
   them has to stay one straight line */
.pg-c .pchart--steps > .pc{translate:none}
/* these are facts, not targets: nothing lights under a pointer */
.pg-c .pchart--steps .pc:hover{background:none}
.pg-c .pchart--steps .pc:hover .pc-n{color:var(--t2)}
.pg-c .pchart--steps .pc:hover .pc-ax i{background:var(--s0);border-color:var(--t2);transform:rotate(22.5deg)}
@media (min-width:621px){
  .pg-c .pchart--steps{grid-template-columns:repeat(var(--pc-n,3),minmax(0,1fr))}
  .pg-c .pchart--steps .pc{align-items:center;text-align:center;padding:var(--x8) var(--x6)}
  .pg-c .pchart--steps .pc-ax{align-self:stretch;margin-left:calc(-1 * var(--x6));margin-right:calc(-1 * var(--x6))}
  .pg-c .pchart--steps .pc-ax::before{display:block;left:0;right:0}
  .pg-c .pchart--steps .pc:first-child .pc-ax::before{left:50%}
  .pg-c .pchart--steps .pc:last-child .pc-ax::before{display:block;right:50%}
  .pg-c .pchart--steps .pc-ax i{left:50%}
}

/* ── the audiences: the names of what you get and send, two centred lists ── */
.pg-c--audience-split .grp--split{max-width:1040px;margin-left:auto;margin-right:auto;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:0;align-items:start}
.pg-c--audience-split .grp-g{padding:0 var(--x8)}
.pg-c--audience-split .grp-g + .grp-g{border-left:1px solid var(--l1)}
.pg-c--audience-split .grp-h{font:400 var(--f-nm)/1.2 var(--sans);letter-spacing:-.012em;text-transform:none;
  color:var(--t1);text-align:center;padding-bottom:var(--x5);margin-bottom:var(--x3)}
.pg-c--audience-split .grp-l li{text-align:center;border-bottom:0;padding:var(--x3) 0}
.pg-c--audience-split .grp-l b{font-size:var(--f-nm)}
.pg-c--audience-split .run-b > .shot{margin-top:clamp(40px,7vh,80px);--ar:42.85%;--arx:21/9}
.pg-c--audience-split .run-b > div:last-child{text-align:center}

/* ── the contact details: eight cells, centred, the numbers large ──────── */
.pg-c--contact-panel{padding-top:clamp(40px,6vh,72px)}
.pg-c--contact-panel .specs--g2{grid-template-columns:repeat(4,minmax(0,1fr));max-width:1240px;margin-left:auto;margin-right:auto}
.pg-c--contact-panel .sp-c{align-items:center;justify-content:flex-start;text-align:center;
  padding:var(--x8) var(--x5);gap:var(--x3)}
.pg-c--contact-panel .specs--g2 dd{font-size:var(--f-nm);line-height:1.3;letter-spacing:-.01em}
.pg-c--contact-panel > .wrap > div:last-child{text-align:center}

/* ── the place: the map across the page, its facts in a row under it ───── */
.pg-c--map .mapgrid{grid-template-columns:minmax(0,1fr);gap:var(--x10);max-width:1240px;margin-left:auto;margin-right:auto}
.pg-c--map .map{aspect-ratio:21/9}
/* a picture, not a trap for the scroll: a tap opens it in Maps (.map-tap) */
.pg-c--map .map iframe{pointer-events:none}
.pg-c--map .map-tap{position:absolute;inset:0;z-index:2}
.pg-c--map .map-side{display:flex;flex-direction:column;align-items:center;text-align:center}
.pg-c--map .map-side > .body{margin-top:var(--x8)!important;max-width:none;text-align:center}
.pg-c--map .mapfacts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));width:100%}
.pg-c--map .mapfacts > div{display:flex;flex-direction:column;align-items:center;gap:var(--x3);padding:0 var(--x6)}
.pg-c--map .mapfacts > div + div{border-left:1px solid var(--l1)}
.pg-c--map .mapfacts dt{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--t2)}
.pg-c--map .mapfacts dd{font-size:var(--f-nm);line-height:1.25;letter-spacing:-.01em;color:var(--t0)}

/* ── questions and the technical files: larger, in their centred column ── */
.pg-c--faq .faq summary{font-size:var(--f-nm);font-weight:400;line-height:1.3;padding-top:var(--x5);padding-bottom:var(--x5)}
.pg-c--faq .faq-a{font-size:clamp(16px,1.2vw,19px);line-height:1.55;max-width:none;padding-right:44px}
.pg-c--downloads .idxl a{padding-top:var(--x5);padding-bottom:var(--x5)}
.pg-c--downloads .idxl b{font-size:var(--f-nm);line-height:1.25}
.pg-c--downloads .idxl em{font-size:var(--f-sm)}

/* ── the contact page's closing actions: one size ─────────────────────── */
.cclose .a1,.cclose .a2{padding:18px 34px;font-size:clamp(15px,1.2vw,19px);gap:14px}

/* ── the 404: a centred, large opening, then the four places ──────────── */
.pg-c--404 .head .d1{margin-bottom:var(--x5)}
/* centred at every width, over the phone rule that sets headings left */
.sec.pg-c--404:not(.hm):not(.hsum) > .wrap > .head{text-align:center;margin-left:auto;margin-right:auto}
.sec.pg-c--404:not(.hm):not(.hsum) > .wrap > .head .lede{margin-left:auto;margin-right:auto}

/* ── a phone ──────────────────────────────────────────────────────────── */
@media (max-width:1000px){
  .pg-c--contact-panel .specs--g2{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:860px){
  /* three tiles in two columns: the last one alone spans both, no hole */
  .pg-c .mesh > :last-child:nth-child(odd),.pg-c .choose > :last-child:nth-child(odd){grid-column:1/-1}
  .pg-c .run-b > .d3,.pg-c .run--c .run-k{text-align:left}
  .pg-c .run-b > .lede{text-align:left;margin:0 0 var(--x8);max-width:none}
  .pg-c--map .map{aspect-ratio:4/3}
  .pg-c--map .mapfacts{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:var(--x8)}
  .pg-c--map .mapfacts > div{padding:0 var(--x3)}
  .pg-c--map .mapfacts > div + div{border-left:0}
  .pg-c--map .mapfacts > div:nth-child(3){border-left:1px solid var(--l1)}
  .pg-c--map .mapfacts > div:first-child,.pg-c--map .mapfacts > div:last-child{grid-column:1/-1}
}
@media (max-width:760px){
  .pg-c--audience-split .grp--split{grid-template-columns:minmax(0,1fr);max-width:none}
  .pg-c--audience-split .grp-g{padding:0}
  .pg-c--audience-split .grp-g + .grp-g{border-left:0;margin-top:var(--x8)}
  .pg-c--audience-split .grp-h{text-align:left;border-bottom:1px solid var(--l1);padding-bottom:var(--x3);margin-bottom:0}
  .pg-c--audience-split .grp-l li{text-align:left;border-bottom:1px solid var(--l0)}
}
@media (max-width:700px){
  .cclose{align-items:stretch;gap:var(--x3);padding:var(--x10) 0}
  .cclose .btns{flex-direction:column;align-items:stretch}
  .cclose .btns > *{justify-content:center}
  .cclose .cstrip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--x2)}
  .cclose .cstrip .a2{flex-direction:column;gap:var(--x2);padding:var(--x4) var(--x2);font-size:12px;
    justify-content:center;text-align:center;white-space:nowrap}
}
@media (max-width:620px){
  /* short tiles are two to a row, and a last one alone spans both */
  .pg-c .mesh--2,.pg-c .mesh--3,.pg-c .mesh--4,.pg-c .choose--2,.pg-c .choose--3,.pg-c .choose--4{
    grid-template-columns:repeat(2,minmax(0,1fr))}
  .pg-c .cell,.pg-c .opt{min-height:132px;padding:var(--x5) var(--x3);gap:var(--x2)}
  .pg-c .cell .d4,.pg-c .opt h3{font-size:var(--f-nm)}
  .pg-c .cell-l{font-size:15px}
  /* the stages are one narrow column in the middle, joined by a line, as the
     home's Survey, make, fit is */
  .pg-c--process-stage .run--c .run-k,.pg-c--process-stage .run-b > .d3,.pg-c--process-stage .run-b > .lede{text-align:center}
  .pg-c--process-stage .run-b > .lede{margin-left:auto;margin-right:auto}
  .sec.pg-c--plan-visit:not(.hm):not(.hsum) > .wrap > .head{text-align:center;margin-left:auto;margin-right:auto}
  .sec.pg-c--plan-visit:not(.hm):not(.hsum) > .wrap > .head .lede{margin-left:auto;margin-right:auto}
  .pg-c .pchart--steps{max-width:300px;margin-left:auto;margin-right:auto;border:0;grid-template-columns:1fr}
  .pg-c .pchart--steps .pc{align-items:center;text-align:center;padding:0 0 var(--x5);background:none}
  .pg-c .pchart--steps .pc-ax{order:-1;align-self:center;width:11px;height:48px;margin:0 0 var(--x4)}
  .pg-c .pchart--steps .pc-ax::before{display:block;left:50%;right:auto;top:0;bottom:7px;width:1px;height:auto;background:var(--l2)}
  .pg-c .pchart--steps .pc:first-child .pc-ax{height:11px}
  .pg-c .pchart--steps .pc:first-child .pc-ax::before{display:none}
  .pg-c .pchart--steps .pc-ax i{left:50%;top:auto;bottom:0;margin:0 0 0 -5px}
  .pg-c .pchart--steps .pc-m{font-size:17px}
  .pg-c--audience-split .run-b > .shot{--ar:66.67%;--arx:3/2}
  .pg-c--contact-panel .sp-c{padding:var(--x5) var(--x3)}
  .pg-c--contact-panel .sp-c:nth-child(1),.pg-c--contact-panel .sp-c:nth-child(4){grid-column:1/-1}
  .pg-c--faq .faq-a{padding-right:0}
  .pg-c .specs:not([class*="specs--"]) dt{padding-top:var(--x4);padding-bottom:0}
  .pg-c .specs:not([class*="specs--"]) dd{padding-top:var(--x1);padding-bottom:var(--x4)}
  /* a technical file: its name on one line, what it is under it */
  .pg-c--downloads .idxl a{grid-template-columns:28px minmax(0,1fr) 16px;gap:var(--x1) var(--x3);align-items:start}
  .pg-c--downloads .idxl i{grid-area:1/1/3/2}
  .pg-c--downloads .idxl b{grid-area:1/2}
  .pg-c--downloads .idxl em{grid-area:2/2;text-align:left}
  .pg-c--downloads .idxl .idxl-go{grid-area:1/3/3/4;align-self:center}
}
/* the showroom's drawing is scaled a little past its frame for the lean
   after the pointer; on a phone the frame did not clip it, and the page
   scrolled six pixels sideways */
@media (max-width:860px){ .srh{overflow:clip} }

/* ═══ GUIDES · SITE-WIDE GUIDELINE (2026-10-19) ═══════════════════════════════
   /guides, the eight guide articles and the comparisons list (tplGuidesIndex,
   tplGuide, tplComparisons), under the owner's guideline: bigger type, less
   small print, clean space round each block, content centred. The openings
   and section headings are the shared ones (THE SITE-WIDE GUIDELINE above);
   this block is the rest. Scope classes, so no other page changes:
     .gx-i     the two lists (the guides index, the comparisons): names a size up
     .gx       a guide's sections and the standards block, centred in a column
     .gx-open  the opening of an article (its question and its answer)
   A guide is one centred reading column with no side rail; its four blocks
   are a row of links under the answer. Headings stay left on a phone, as on
   the home page; the long Decision answers are left-aligned there too. */

/* ── the lists: each name a size up, a row of its own ──────────────────── */
.gx-i .c8 .row,.gx .row{padding:var(--x6) 0;align-items:center}
.gx-i .row-n,.gx .row-n{font-size:var(--f-sm)}
.gx-i .row-t,.gx .row-t{font-size:var(--f-h3);font-weight:400;line-height:1.2;letter-spacing:-.02em}
.gx-i .row-go,.gx .row-go{font-size:18px}
/* the dash that stands in for the number under a pointer sits at the row's middle */
.gx-i a.row::before,.gx a.row::before{top:50%;margin-top:-.8em}
/* the way to all of them, centred under a list */
.gx-i .gx-more,.gx .gx-more,.gx .browse-more{display:flex;justify-content:center;margin-top:var(--x8)}

/* ── the opening of an article: the question, its answer, the four links ── */
.gx-open{padding-bottom:0}
.gx-open > .wrap{display:flex;flex-direction:column}
.gx-open .head{width:100%;margin-top:var(--x10);margin-bottom:0}
.gx-open .head .d1{margin-bottom:var(--x6)}
.gx-open .head .lede{font-size:clamp(19px,1.6vw,26px);line-height:1.36;color:var(--t0);max-width:34em;text-wrap:balance}
.gx-on{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--x1) var(--x8);margin-top:var(--x10);padding-bottom:var(--x10)}
.gx-on a{font-size:clamp(15px,1.15vw,17px);line-height:1.3;color:var(--t1);padding:var(--x3) 0;
  text-decoration:underline;text-decoration-color:var(--l2);text-underline-offset:.4em;
  transition:color .18s,text-decoration-color .18s}
.gx-on a:hover{color:var(--t0);text-decoration-color:var(--t1)}
/* on a wide screen the opening is a screen of its own: the question and its
   answer sit in the middle of what is left under the breadcrumb */
@media (min-width:861px){
  .gx-open > .wrap{min-height:calc(100svh - var(--hdr-h,54px) - var(--x6))}
  .gx-open .head{margin-top:auto}
  .gx-on{margin-bottom:auto}
}

/* ── the decision: four numbered answers, a 2 x 2 group about the page's middle ── */
.gx .slate--2{max-width:var(--gx-wide);margin-left:auto;margin-right:auto;column-gap:var(--x15)}
.gx .slate-i{grid-template-columns:minmax(0,1fr);justify-items:center;align-content:start;text-align:center;gap:var(--x3);padding:var(--x10) 0}
.gx .slate-n{font:300 clamp(28px,2.6vw,40px)/1 var(--sans);letter-spacing:-.02em;color:var(--t3);min-width:0}
.gx .slate-t{font-size:var(--f-h3);font-weight:400;line-height:1.2;letter-spacing:-.02em;margin-bottom:var(--x3)}
.gx .slate-d{font-size:clamp(16px,1.25vw,19px);line-height:1.55;max-width:30em;margin-left:auto;margin-right:auto;text-wrap:pretty}

/* ── the figures: each cell centred, the value large ───────────────────── */
.gx .specs--g2,.gx .specs--g3{max-width:var(--gx-wide);margin-left:auto;margin-right:auto}
.gx .specs--g2 .sp-c,.gx .specs--g3 .sp-c{align-items:center;justify-content:flex-start;text-align:center;
  gap:var(--x3);padding:var(--x8) var(--x5)}
/* a sheet whose last row is short: the last cell spans the row, so the lattice
   has no empty square (g2 is two across; g3 is three, two at 1000px and under,
   and two on a phone) */
.gx .specs--g2 .sp-c:last-child:nth-child(odd){grid-column:1/-1}
@media (min-width:1001px){
  .gx .specs--g3 .sp-c:last-child:nth-child(3n+2){grid-column:span 2}
  .gx .specs--g3 .sp-c:last-child:nth-child(3n+1){grid-column:1/-1}
}
@media (max-width:1000px){ .gx .specs--g3 .sp-c:last-child:nth-child(odd){grid-column:1/-1} }
.gx .specs--g2 dt,.gx .specs--g3 dt{font-size:var(--f-sm)}
.gx .specs--g2 dd,.gx .specs--g3 dd{font-size:var(--f-h3);line-height:1.2;letter-spacing:-.02em;text-wrap:balance}
/* a short list of figures that came as plain rows: label and value, in a reading column */
.gx .specs:not([class*="specs--"]){max-width:var(--gx-read);margin-left:auto;margin-right:auto}
.gx .specs:not([class*="specs--"]) dt,.gx .specs:not([class*="specs--"]) dd{padding-top:var(--x5);padding-bottom:var(--x5)}
.gx .specs:not([class*="specs--"]) dt{font-size:var(--f-sm)}
.gx .specs:not([class*="specs--"]) dd{font-size:var(--f-nm);line-height:1.35}

/* ── products and questions: lists in a centred reading column ─────────── */
.gx .c8,.gx .faq{max-width:var(--gx-read);margin-left:auto;margin-right:auto}
@media (min-width:981px){
  /* never wider than the 8 of 12 columns the lists were held to (invariant 47) */
  .gx .c8,.gx .faq{max-width:min(var(--gx-read),calc((100% - 11 * var(--x5)) * .66667 + 7 * var(--x5)))}
}
.gx .faq summary{font-size:var(--f-nm);font-weight:400;line-height:1.3;padding-top:var(--x5);padding-bottom:var(--x5)}
.gx .faq-a{font-size:clamp(16px,1.2vw,19px);line-height:1.55;max-width:none;padding-right:44px}
/* the projects stay big and two to a row; the name under each a size up */
.gx .browse-grid--proj .browse-card h3{font-size:var(--f-nm);line-height:1.2;letter-spacing:-.012em}

/* ── the standards table of /guides: one centred table, the values larger ── */
.gx-std .specs--sp{display:block;columns:1;max-width:62rem;margin-left:auto;margin-right:auto}
.gx-std .specs--sp .sp-c{grid-template-columns:minmax(180px,1fr) minmax(0,2fr);align-items:baseline;gap:var(--x6)}
.gx-std .specs--sp .sp-c:last-child{border-bottom:1px solid var(--rule)}
.gx-std .specs--sp dt,.gx-std .specs--sp dd{padding-top:var(--x4);padding-bottom:var(--x4)}
.gx-std .specs--sp dt{font-size:var(--f-sm)}
.gx-std .specs--sp dd{font-size:var(--f-nm);line-height:1.35}

/* ── a phone ───────────────────────────────────────────────────────────── */
@media (max-width:860px){
  .gx-open .head{margin-top:var(--x8)}
  .gx-open .head .d1{font-size:clamp(30px,8.4vw,38px);margin-bottom:var(--x5)}
  .gx-open .head .lede{font-size:19px;line-height:1.4;text-wrap:pretty}
  /* four short links, two to a row */
  .gx-on{display:grid;grid-template-columns:repeat(2,max-content);justify-content:start;gap:0 var(--x12);
    margin-top:var(--x6);padding-bottom:var(--x6)}
  .gx-on a{padding:var(--x3) 0}
  .gx-i .gx-more,.gx .gx-more,.gx .browse-more{justify-content:flex-start;margin-top:var(--x6)}
  /* a paragraph is read from its left edge */
  .gx .slate-i{justify-items:start;text-align:left;gap:var(--x2);padding:var(--x6) 0}
  .gx .slate-n{font-size:var(--f-nm);color:var(--t2)}
  .gx .slate-d{margin-left:0;font-size:17px}
  .gx .specs--g2 .sp-c,.gx .specs--g3 .sp-c{padding:var(--x6) var(--x4)}
}
@media (max-width:620px){
  /* short figures are two to a row (every value is 30 characters or fewer) */
  .gx .specs--g3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .gx .specs--g3 .sp-c{padding:var(--x6) var(--x3)}
  .gx .specs--g3 dd{font-size:var(--f-nm)}
  .gx .faq-a{padding-right:0}
  .gx-std .specs--sp .sp-c{grid-template-columns:1fr;gap:0}
  .gx-std .specs--sp dt{padding-bottom:0}
  .gx-std .specs--sp dd{padding-top:var(--x1)}
}

/* ═══ PROJECTS · SITE-WIDE GUIDELINE (2026-10-19) ═══════════════════════════════
   /projects and the five project pages (tplProjects, tplProject; the list of
   "Also completed" is alsoDone), under the owner's guideline: bigger type, less
   small print, clean space round each block, content centred. The page
   openings and the section headings are the shared ones (THE SITE-WIDE
   GUIDELINE above); this block is the rest. Scope classes, so the home, the
   division hubs and the product pages' own project rows do not change:
     .pj-c     every section of these pages
     .pj-rel   "Other projects" at the foot of a project page
     .pj-also  "Also completed" on /projects
   The projects stay big: the photographs, their crops (3:2; 3:4 on a phone,
   the opening card 4:5), the gaps between the cards and the 21:9 opening
   picture are not touched here. Headings stay left on a phone, as on the
   home page; the names under the photographs are centred, and so are the
   short items of "Also completed". */

/* ── the opening of a project: the title and its place, then air ───────── */
.pj-c .crumb + .head{margin-top:clamp(28px,5vh,56px)}

/* ── the story: one paragraph, large, centred under the photograph ─────── */
.pj-c .pj-story{max-width:none;padding-top:clamp(40px,7vh,88px);text-align:center}
.pj-c .pj-story .lede{font-size:var(--f-h3);line-height:1.34;letter-spacing:-.014em;color:var(--t0);
  max-width:30em;margin-left:auto;margin-right:auto;text-wrap:balance}
.pj-c .pj-more-go{margin-top:var(--x4);font:400 var(--f-bd)/1 var(--sans);letter-spacing:0;text-transform:none}

/* ── /projects: the one control, centred, and nothing welded to the photographs ── */
#pfilters{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:var(--x3) var(--x8);
  background:none;border:0;margin:0 0 clamp(32px,5vh,56px)}
#pfilters .fgrp{background:none;padding:0;flex:0 0 auto;justify-content:center;gap:var(--x3)}
#pfilters .chip{min-height:46px;padding:0 var(--x6);font:400 clamp(15px,1.15vw,17px)/1 var(--sans);
  letter-spacing:-.004em;color:var(--t1)}
#pfilters .fcount{background:none;padding:0;gap:var(--x4);font:400 var(--f-bd)/1.3 var(--sans);color:var(--t2)}
#pfilters .fcount .chip{min-height:40px;padding:0 var(--x5);font-size:var(--f-bd)}
/* on a wide screen the two chips stay exactly on the page's middle: the count
   and "Clear filters" hang off their right and never push them about */
@media (min-width:1001px){
  #pfilters{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);column-gap:var(--x8)}
  #pfilters .fgrp{grid-column:2}
  #pfilters .fcount{grid-column:3;justify-self:start}
}

/* ── the names under the photographs: a size up, centred ───────────────── */
#pgrid .browse-card h3,.pj-rel .pv-rel--proj .pcard h3{justify-content:center;text-align:center;
  font-size:var(--f-h3);font-weight:400;line-height:1.15;letter-spacing:-.018em;text-wrap:balance}
#pgrid .browse-card .pcard-b,.pj-rel .pv-rel--proj .pcard-b{padding:clamp(18px,2.4vw,34px) var(--x4)}

/* ── "Also completed": six places, each a name and one line, a centred 3 x 2 ── */
.pj-al{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  border-top:1px solid var(--l1)}
.pj-al li{padding:clamp(32px,5vh,60px) var(--x6);text-align:center;border-bottom:1px solid var(--l1)}
.pj-al li:not(:nth-child(3n)){border-right:1px solid var(--l1)}
.pj-al b{display:block;font-size:var(--f-h3);font-weight:400;line-height:1.15;letter-spacing:-.018em;
  color:var(--t0);text-wrap:balance}
.pj-al span{display:block;max-width:19em;margin:var(--x3) auto 0;font-size:clamp(15px,1.2vw,19px);
  line-height:1.4;color:var(--t1);text-wrap:balance}

/* ── the installed systems: the label over the name, one under another, centred ── */
.pj-c .pj-sys{grid-template-columns:minmax(0,1fr);margin-bottom:0}
.pj-c .pj-sys dt{padding:var(--x6) 0 0;border-bottom:0;text-align:center;font-size:var(--f-sm)}
.pj-c .pj-sys dd{padding:var(--x2) 0 var(--x6);text-align:center;font-size:var(--f-h3);line-height:1.2;
  letter-spacing:-.02em}
.pj-c .pj-sys-a i{font-size:var(--f-nm)}

/* ── the details fold: shut by default; opened, a table to read, not a wall of 11px ── */
/* the last system's rule is the fold's top rule */
.pj-c .pj-sys + .pj-dt .dw{border-top:0}
.pj-c .pj-dt .dw>summary{display:flex;justify-content:center;align-items:center;gap:var(--x4);padding:var(--x6) 0}
.pj-c .pj-dt .dw>summary:hover{padding-left:0}
.pj-c .pj-dt .dw-n{display:none}
.pj-c .pj-dt .dw-t{font-size:var(--f-nm)}
.pj-c .pj-dt .dw-body{padding-bottom:var(--x10)}
.pj-c .pj-dt-s{padding:var(--x8) 0 var(--x4)}
.pj-c .pj-dt-s > .lbl{font:400 var(--f-nm)/1.2 var(--sans);letter-spacing:-.012em;text-transform:none;
  color:var(--t0);margin-bottom:var(--x5)}
.pj-c .pj-dt .dl{gap:var(--x4) var(--x8);align-items:baseline}
.pj-c .pj-dt .dl dt{font-size:var(--f-sm);color:var(--t1)}
.pj-c .pj-dt .dl dd{font-size:clamp(15px,1.1vw,17px);line-height:1.55}

/* ── a phone ───────────────────────────────────────────────────────────── */
@media (max-width:860px){
  .pj-c .pj-story{text-align:left;padding-top:var(--x10)}
  .pj-c .pj-story .lede{font-size:var(--f-ld);line-height:1.42;letter-spacing:-.008em;margin-left:0;margin-right:0;
    text-wrap:pretty}
  .pj-c .pj-sys dt,.pj-c .pj-sys dd{text-align:left}
  .pj-c .pj-sys dd{font-size:var(--f-nm)}
  .pj-c .pj-dt .dw>summary{justify-content:space-between}
  /* under the left-aligned title, the chips start at the same edge */
  #pfilters{justify-content:flex-start}
}
@media (max-width:700px){
  /* the two divisions are two big chips side by side; the count under them */
  #pfilters{gap:var(--x3);margin-bottom:var(--x8)}
  #pfilters .fgrp{flex:1 1 100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  #pfilters .chip{min-height:48px;padding:0 var(--x3)}
  #pgrid .browse-card h3,.pj-rel .pv-rel--proj .pcard h3{font-size:var(--f-nm)}
  #pgrid .browse-card .pcard-b,.pj-rel .pv-rel--proj .pcard-b{padding:var(--x4) var(--x3)}
  /* six places, two to a row */
  .pj-al{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pj-al li{padding:var(--x8) var(--x2)}
  .pj-al li:not(:nth-child(3n)){border-right:0}
  .pj-al li:nth-child(odd){border-right:1px solid var(--l1)}
  .pj-al b{font-size:var(--f-nm)}
  .pj-al span{font-size:15px;max-width:none}
}

/* ═══ CATALOGUE · SITE-WIDE GUIDELINE (2026-10-19) ═══════════════════════════════
   The two division hubs, the eight category pages and the product pages
   (tplDivision, tplCategory, tplProduct), under the owner's guideline: bigger
   type, less small print, clean space round each block, content centred. The
   page titles and the section headings are the shared ones (THE SITE-WIDE
   GUIDELINE above); this block is the rest. Scope classes, so no other page
   changes:
     .dv-open  a division's first screen: its photograph, full, as the home's is
     .dv-c     the hub's other screens (.dv-figs the six figures, .dv-cats, .dv-pj)
     .cat-c    a category page's sections (.cat-open, .cat-grid, .cat-help)
     .pv-sec   under a product: "In place" and "More in …"
     .pv       the product's own split, whose panel keeps its words LEFT-aligned
               (the owner's decision: bigger type there, not centred)
   The names under photographs are centred, as /projects has them. Headings
   stay left on a phone, as on the home page. Not touched here: the phone
   product gallery (.pv-gal, .pv-thumbs), the panel's hidden quote button on a
   phone, the product bar, the closing pair (shared). Selectors that name an
   earlier single-class rule are written compound (.pv .pv-ttl, not .pv-ttl),
   so the build's duplicate merge does not move that earlier rule. */

/* ── a division opens on its photograph ────────────────────────────────── */
.sec.dv-open{padding:0;border-top:0;overflow:hidden}
.dv-open > .wrap{position:relative;z-index:1}
/* .sec.dv-open: out-ranks the phone rule that gave .t1-open no height */
.sec.dv-open .t1-open{min-height:100svh;flex-direction:row;flex-wrap:wrap;align-items:flex-end;align-content:flex-end;
  justify-content:space-between;gap:var(--x6) var(--x10);padding-bottom:clamp(28px,6vh,72px)}
.dv-open .dv-id{flex:1 1 34rem;min-width:0}
.dv-open .t1-lock{width:min(300px,52vw);margin:0 0 var(--x6);padding-top:0}
.dv-open .t1-ttl{font-size:var(--f-h1);line-height:1.02;letter-spacing:-.034em;max-width:15em;margin:0}
.dv-open .btns{flex:0 0 auto;margin:0}
/* the dark is only where the type needs it; the top is a light band for the
   glass header (both photographs have a pale sky or a pale wall there) */
.dv-open .home-scrim{background:
  linear-gradient(to top,rgba(7,7,8,.9) 0%,rgba(7,7,8,.62) 26%,rgba(7,7,8,0) 60%),
  linear-gradient(to bottom,rgba(7,7,8,.66) 0%,rgba(7,7,8,.3) 9%,rgba(7,7,8,0) 20%)}
@media (max-width:860px){
  .dv-open .t1-ttl{font-size:clamp(34px,10vw,44px)}
}
@media (max-width:700px){
  /* the contact bar under it already says Request a quote */
  .sec.dv-open .t1-open{padding-bottom:calc(var(--x8) + var(--cbar-h,65px))}
  .dv-open .btns{display:none}
  .dv-open .t1-lock{width:min(240px,62vw);margin-bottom:var(--x5)}
}

/* ── the six figures: proof, each centred in its cell, large ───────────── */
.dv-figs{--dv-fig:clamp(26px,2.6vw,42px);border-top:0;padding-top:clamp(56px,10vh,120px);padding-bottom:clamp(56px,10vh,120px)}
.dv-figs .t3-open--div{margin-top:0;grid-template-columns:repeat(3,minmax(0,1fr))}
.dv-figs .t3-fig{align-items:center;justify-content:center;text-align:center;gap:var(--x3);
  padding:clamp(28px,5vh,56px) var(--x4)}
.dv-figs .t3-fig dt{font-size:var(--f-sm);letter-spacing:.14em;color:var(--t1)}
.dv-figs .t3-fig dd{font-size:var(--dv-fig);line-height:1.12;letter-spacing:-.024em;margin-top:0;text-wrap:balance}
@media (max-width:700px){
  .dv-figs{--dv-fig:21px;padding-top:var(--x12);padding-bottom:var(--x12)}
  .dv-figs .t3-open--div{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dv-figs .t3-fig{padding:var(--x8) var(--x3);gap:var(--x2)}
  .dv-figs .t3-fig dt{font-size:var(--f-mic);letter-spacing:.1em}
}

/* ── the hub's cards: names a size up, centred under their photographs ──── */
.dv-c .browse-card .pcard-b{align-items:center;padding:var(--x6) var(--x4) var(--x7)}
.dv-c .browse-card h3{justify-content:center;align-items:center;text-align:center;gap:var(--x3);
  font-size:var(--f-h3);font-weight:400;line-height:1.15;letter-spacing:-.018em;text-wrap:balance}
/* every icon the same square box, so the names stand on one line across a row */
.dv-cats .browse-card-ico{--dv-ico:clamp(20px,1.8vw,28px);width:var(--dv-ico);height:var(--dv-ico);flex:0 0 var(--dv-ico);margin-top:0}
.dv-cats .browse-card-ico .ico{width:100%;height:100%}
/* projects stay big; the way to all of them is centred under them */
.dv-pj .browse-card .pcard-b{padding:clamp(18px,2.4vw,34px) var(--x4)}
.dv-pj .browse-more{display:flex;justify-content:center;margin-top:var(--x8)}
.dv-pj .browse-more .a3{font-size:clamp(13px,1vw,15px)}
@media (max-width:860px){ .dv-pj .browse-more{justify-content:flex-start;margin-top:var(--x6)} }
@media (max-width:700px){
  .dv-cats .browse-card h3{font-size:var(--f-nm);gap:var(--x2)}
  .dv-cats .browse-card .pcard-b{padding:var(--x4) var(--x2) var(--x5)}
  .dv-cats .browse-card-ico{--dv-ico:20px}
  /* two photographs are two screens, one to a row at 3:2, as the home's phone
     draws its projects */
  .dv-pj .browse-grid--proj{grid-template-columns:minmax(0,1fr)}
  .dv-pj .browse-grid--proj .shot{--ar:66.67%;--arx:3/2}
  .dv-pj .browse-card .pcard-b{padding:var(--x4) var(--x3)}
}

/* ── a category opens on the title: breadcrumb, the drawing small, the title ── */
.cat-open{padding-bottom:clamp(20px,4vh,48px)}
.cat-open .crumb{font-size:13px}
.cat-open .cat-dwg{display:flex;justify-content:center;border:0;background:none;padding:0;
  margin:clamp(28px,6vh,64px) 0 0}
.cat-open .cat-dwg svg{width:auto;max-width:100%;height:clamp(96px,16vh,150px)}
.cat-open .head{margin-top:clamp(20px,4vh,40px);margin-bottom:0}
@media (max-width:860px){
  .cat-open .cat-dwg{justify-content:flex-start;margin-top:var(--x8)}
  .cat-open .cat-dwg svg{height:104px}
  .cat-open .head{margin-top:var(--x5)}
}

/* ── the products: the photographs follow the title; names a size up ───── */
.cat-grid{border-top:0;padding-top:clamp(16px,3vh,40px);padding-bottom:clamp(40px,7vh,88px)}
.cat-grid .browse-card .pcard-b{align-items:center;padding:clamp(18px,1.8vw,28px) clamp(16px,1.8vw,28px)}
.cat-grid .browse-card h3{justify-content:center;text-align:center;font-size:var(--f-nm);font-weight:400;
  line-height:1.2;letter-spacing:-.014em;text-wrap:balance}
/* a last row that is short (5 or 6 over 4, 5 over 3) is centred under the
   others rather than left in the corner; the cards are exactly the size they
   would be in a full row */
.cat-grid .browse-grid{display:flex;flex-wrap:wrap;justify-content:center}
.cat-grid .browse-grid>.browse-card{flex:0 0 calc((100% - var(--cg)) / 2)}
@media (min-width:1024px){
  .cat-grid .browse-grid--3>.browse-card{flex-basis:calc((100% - 2 * var(--cg)) / 3)}
  .cat-grid .browse-grid--4>.browse-card{flex-basis:calc((100% - 3 * var(--cg)) / 4)}
}
@media (max-width:700px){
  .cat-grid .browse-card .pcard-b{padding:var(--x4) var(--x3) var(--x5)}
}

/* ── how to choose: one centred control, opened it reads as text, not small print ── */
.cat-help{border-top:0;padding-top:clamp(24px,4vh,56px);padding-bottom:clamp(56px,9vh,112px)}
.cat-help .dw>summary{display:flex;justify-content:center;align-items:center;gap:var(--x4);padding:var(--x6) 0}
.cat-help .dw>summary:hover{padding-left:0}
.cat-help .dw-n{display:none}
.cat-help .dw-t{font-size:var(--f-h3);line-height:1.15;letter-spacing:-.02em}
/* opened, the guide is one reading column, centred in the drawer */
.cat-help .dw-body{max-width:46rem;margin-left:auto;margin-right:auto;padding-bottom:var(--x10)}
.cat-help .dw-body > h3.d4{font-size:var(--f-nm);margin:var(--x10) 0 var(--x4)}
.cat-help .dw-body > h3.d4:first-child{margin-top:var(--x4)}
.cat-help .dw-body .body{font-size:clamp(16px,1.25vw,19px);line-height:1.6;max-width:none}
.cat-help .dw-body .body + .body{margin-top:var(--x4)}
.cat-help .dl{grid-template-columns:minmax(0,1fr);gap:0}
.cat-help .dl dt{margin-top:var(--x6);font-size:var(--f-sm);letter-spacing:.04em}
.cat-help .dl dd{font-size:clamp(15px,1.15vw,17px);line-height:1.55;color:var(--t1);margin-top:var(--x1)}
.cat-help .faq summary{font-size:var(--f-nm);font-weight:400;line-height:1.3;padding-top:var(--x5);padding-bottom:var(--x5)}
.cat-help .faq-a{font-size:clamp(15px,1.15vw,17px);line-height:1.6;max-width:none;padding-right:44px}
@media (max-width:620px){
  .cat-help .dw>summary{justify-content:space-between}
  .cat-help .faq-a{padding-right:0}
}

/* ── under a product: two screens of their own ──────────────────────────── */
/* the first screen ends on air; the section under it brings its own rule */
section.pv{border-bottom:0}
.pv-sec .pv-rel-h{text-align:center;margin:0 0 clamp(32px,6vh,64px);text-wrap:balance}
.pv-sec .pv-rel .pcard-b{align-items:center;text-align:center;padding:var(--x5) var(--x4) var(--x6)}
.pv-sec .pv-rel .pcard h3{font-size:var(--f-nm);font-weight:400;line-height:1.2;letter-spacing:-.014em;text-wrap:balance}
.pv-sec .pv-rel--proj .pcard h3{font-size:var(--f-h3);line-height:1.15;letter-spacing:-.018em}
.pv-sec .browse-more{display:flex;justify-content:center;margin-top:var(--x8)}
/* a short row (one to three cards) is a centred group at the size of a full
   one, not quarter cells left in the corner; a lone project is one big card */
@media (min-width:1024px){
  .pv-sec .pv-rel:not(.pv-rel--proj){justify-content:center}
  .pv-sec .pv-rel--n1:not(.pv-rel--proj){grid-template-columns:calc((100% - 3 * var(--cg)) / 4)}
  .pv-sec .pv-rel--n2:not(.pv-rel--proj){grid-template-columns:repeat(2,calc((100% - 3 * var(--cg)) / 4))}
  .pv-sec .pv-rel--n3:not(.pv-rel--proj){grid-template-columns:repeat(3,calc((100% - 3 * var(--cg)) / 4))}
  .pv-sec .pv-rel--proj.pv-rel--n1{grid-template-columns:minmax(0,min(100%,880px));justify-content:center}
  .pv-sec .pv-rel--proj.pv-rel--n3>:last-child{grid-column:1/-1;justify-self:center;width:calc((100% - var(--cg)) / 2)}
}
@media (min-width:701px) and (max-width:1023px){
  .pv-sec .pv-rel>:last-child:nth-child(odd){grid-column:1/-1;justify-self:center;width:calc((100% - var(--cg)) / 2)}
}
@media (max-width:860px){
  .pv-sec .pv-rel-h{text-align:left}
  .pv-sec .browse-more{justify-content:flex-start;margin-top:var(--x6)}
}
@media (max-width:700px){
  /* the photographs that show the product in place: one to a row, 3:2, the
     proof, not a half-width card in a corner */
  .pv-sec .pv-rel--proj{grid-template-columns:minmax(0,1fr)}
  .pv-sec .pv-rel--proj .shot{--ar:66.67%;--arx:3/2}
  .pv-sec .pv-rel--proj .pcard-b{padding:var(--x4) var(--x3)}
  .pv-sec .pv-rel:not(.pv-rel--proj) .pcard-b{padding:var(--x4) var(--x3) var(--x5)}
  .pv-sec .pv-rel:not(.pv-rel--proj) .pcard h3{font-size:var(--f-nm)}
}

/* ── the product's panel: bigger type, the words left-aligned ───────────── */
@media (min-width:961px){
  section.pv{grid-template-columns:minmax(0,1fr) clamp(400px,35vw,580px)}
  /* the panel is the height of the screen under the header and its content
     sits in the middle of it; a taller panel simply grows, as before */
  .pv .pv-panel{min-height:calc(100svh - 52px);display:flex;align-items:center}
  .pv .pv-panel-in{width:100%;min-width:0}
  .pv .pv-crumb{font-size:var(--f-sm)}
  .pv .pv-ttl{font-size:var(--f-h2);line-height:1.06;letter-spacing:-.03em;margin-bottom:var(--x4);text-wrap:balance}
  .pv .pv-answer{font-size:clamp(16px,1.3vw,20px);line-height:1.45;margin-bottom:var(--x6)}
  .pv .pv-note{font-size:clamp(14px,1.05vw,16px);line-height:1.5}
  .pv .fig dt{font-size:var(--f-mic)}
  .pv .fig dd{font-size:clamp(16px,1.3vw,19px)}
  .pv .pv-points li{font-size:var(--f-bd);padding:var(--x4) var(--x5)}
  .pv .pv-act .a1,.pv .pv-act .a2{min-height:56px;font-size:15px}
  .pv .pv-spec-go .dw-t{font-size:clamp(17px,1.4vw,21px)}
}
/* the specifications must still show when the window is not tall: a step
   at 920px (1440x900), another at 820px (a 1366x768 laptop's 657px, a
   1024x768), one more at 700px: the panel closes up as before, and the type
   with it */
@media (min-width:961px) and (max-height:920px){
  .pv .pv-panel{padding-top:var(--x6);padding-bottom:var(--x6)}
  .pv .pv-crumb{margin-bottom:var(--x4)}
  .pv .pv-ttl{font-size:clamp(30px,3.1vw,44px);margin-bottom:var(--x3)}
  .pv .pv-answer{font-size:16px;margin-bottom:var(--x5)}
  .pv .pv-note{font-size:14px;margin-bottom:var(--x5)}
  .pv .figs{padding:var(--x3) 0;margin-bottom:var(--x5)}
  .pv .pv-act{margin-bottom:var(--x4)}
  .pv .pv-act .a1,.pv .pv-act .a2{min-height:52px}
  .pv .pv-points{margin-bottom:var(--x4)}
  .pv .pv-points li{font-size:14px;padding:var(--x3) var(--x4)}
}
@media (min-width:961px) and (max-height:820px){
  .pv .pv-panel{padding-top:var(--x6);padding-bottom:var(--x6)}
  .pv .pv-ttl{font-size:clamp(28px,2.6vw,38px);margin-bottom:var(--x3)}
  .pv .pv-answer{font-size:15px;line-height:1.45;margin-bottom:var(--x4)}
  .pv .pv-note{font-size:14px;margin-bottom:var(--x4)}
  .pv .pv-crumb{margin-bottom:var(--x4)}
  .pv .fig dd{font-size:16px}
  .pv .pv-points li{font-size:14px;padding:6px var(--x4)}
  .pv .pv-act .a1,.pv .pv-act .a2{min-height:50px}
  .pv .pv-spec-go--panel{min-height:46px;padding:var(--x3) 0;margin-top:var(--x2)}
  .pv .pv-spec-go .dw-t{font-size:var(--f-md)}
}
/* a window shorter still (650px and under): one more step */
@media (min-width:961px) and (max-height:700px){
  .pv .pv-panel{padding-top:var(--x4);padding-bottom:var(--x4)}
  .pv .pv-crumb{margin-bottom:var(--x3)}
  .pv .pv-ttl{margin-bottom:var(--x2)}
  .pv .pv-answer,.pv .pv-note{margin-bottom:var(--x3)}
  .pv .figs{padding:var(--x2) 0;margin-bottom:var(--x3)}
  .pv .pv-act{margin-bottom:var(--x3)}
  .pv .pv-act .a1,.pv .pv-act .a2{min-height:46px}
  .pv .pv-points{margin-bottom:var(--x3)}
  .pv .pv-points li{padding:5px var(--x4)}
}
/* the quote button: its label, icon and arrow as one group, centred like the
   showroom button under it (.a1-ar pushed the arrow to the edge) */
.pv-act .a1 .a1-ar,.pv-spec-act .a1 .a1-ar{margin-left:0}
/* a hyphenated word in the title ("bi-fold") is not broken after its hyphen */
.pv-ttl .nb{display:inline-block;max-width:100%}
/* a phone: the title and the line a size up as well */
@media (max-width:960px){
  .pv .pv-ttl{font-size:var(--f-h2);line-height:1.06;letter-spacing:-.03em;text-wrap:balance}
  .pv .pv-answer{font-size:16px;line-height:1.5}
  .pv .pv-points li{font-size:var(--f-bd)}
  .pv-flow .pv-spec-go .dw-t{font-size:var(--f-md)}
}

/* ── the specifications view: the detail is read, not squinted at ──────── */
.pv-spec .pv-spec-in{width:clamp(420px,38vw,620px)}
.pv-spec .pv-spec-ttl{font-size:clamp(24px,2vw,32px);letter-spacing:-.02em}
.pv-spec .pv-spec-s>.lbl{font-size:var(--f-lg);letter-spacing:-.012em;text-transform:none;color:var(--t0);margin-bottom:var(--x5)}
.pv-spec .pv-spec-s .body{font-size:16px;line-height:1.6}
.pv-spec .pv-spec-s .dl dt{font-size:12px}
.pv-spec .pv-spec-s .dl dd{font-size:15px;line-height:1.5}
.pv-spec .pv-spec-ul li{font-size:15px;padding:var(--x3) 0}
@media (max-width:767px){
  .pv-spec .pv-spec-in{width:100%}
  .pv-spec .pv-spec-ttl{font-size:22px}
}

/* ═══ INTENTS AND FLOWS · SITE-WIDE GUIDELINE (2026-10-19) ═══════════════════════
   /improve-my-home, /specify-a-project, /trade, /products and the three forms
   (/quote, /book-showroom, /book-home-consultation), under the owner's
   guideline: bigger type, less small print, clean space round each block,
   content centred. The page openings are the shared ones (THE SITE-WIDE
   GUIDELINE above); this block is the rest. Scope classes, so no other page
   changes:
     .ix        the three intent pages: the list of six paths, its link, its close
     .pd        /products: the two division tiles
     .sec--flow the section holding a form (tplFlowPage, flowBlock)
     .fp-band   the drawers under the form
   A form is one contained, centred card: a stepper on top, the step's label,
   name and one line centred, the fields left in their cells, the buttons
   centred. Headings stay left on a phone, as on the home page. Selectors are
   compound (.sec--flow .flow, not .flow), so the build's duplicate merge does
   not move an earlier single-class rule. */

/* ── the intents: six paths, each its name a size up and one line ──────── */
.ix .rows--lean{border-bottom:1px solid var(--l1)}
.ix .rows--lean .row{grid-template-columns:minmax(0,1fr) 28px;grid-template-areas:"t go" "d go";
  column-gap:var(--x6);row-gap:var(--x2);align-items:center;
  padding-top:var(--x6);padding-bottom:var(--x6);border-top:1px solid var(--l1)}
.ix .rows--lean .row-t{grid-area:t;font-size:var(--f-h3);font-weight:400;line-height:1.2;letter-spacing:-.02em;color:var(--t0)}
.ix .rows--lean .row-d{grid-area:d;font-size:clamp(16px,1.2vw,18px);line-height:1.4;color:var(--t1)}
.ix .rows--lean .row-go{grid-area:go;justify-self:end;font-size:18px}
/* there is no number for the dash under a pointer to stand in for */
.ix .rows--lean a.row::before{display:none}
/* the way to how a job runs, on the page's axis */
.ix .i-more{display:flex;justify-content:center;margin-top:var(--x8)}
/* the close: the two actions on one line */
.ix .i-close .btns{gap:var(--x4)}
@media (max-width:700px){
  /* six names, two to a row: the guide behind each carries the rest */
  .ix .rows--lean{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--l1);border:1px solid var(--l1)}
  .ix .rows--lean .row{grid-template-columns:minmax(0,1fr);grid-template-areas:"t" "go";grid-template-rows:1fr auto;
    row-gap:var(--x3);align-items:start;background:var(--s0);border:0;padding:var(--x5) var(--x4);min-height:132px}
  .ix .rows--lean .row-d{display:none}
  .ix .rows--lean .row-t{font-size:18px;line-height:1.22;text-wrap:balance}
  .ix .rows--lean .row-go{justify-self:start;align-self:end}
  /* nothing lifts or shifts under a finger */
  .ix .rows--lean a.row:hover,.ix .rows--lean a.row:active{padding-left:var(--x4);background:var(--s0)}
  .ix .rows--lean .row:last-child:nth-child(odd){grid-column:1/-1}
  .ix .i-more{justify-content:flex-start;margin-top:var(--x6)}
}

/* ── /products: the two tiles are the home's, level with each other ────── */
/* the Glazing lockup is taller than the Steel one: both marks take the same
   height, set at the top, so the two sentences and the two counts start on
   one line (the home's own tiles are left as they are) */
.pd .dsp-mark{display:flex;align-items:flex-start;aspect-ratio:6.7/1}
.pd .dsp-go{font-size:var(--f-sm)}

/* ── a form: the opening's line, the note, the card ────────────────────── */
.t5-bar .t4-n{font:400 12px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t1)}
/* the title and its own form are one page: no hairline between them, and
   the opening's own space under its line is the only space */
.sec.fp-open{padding-bottom:0}
.sec.sec--flow{border-top:0;padding-top:0}
.sec--flow .fp-note{margin-bottom:var(--x8)}
.sec--flow .fp-note .lede{font-size:clamp(17px,1.35vw,21px);line-height:1.4;max-width:36em;text-wrap:balance}
/* one column: the stepper on top, the step under it */
.sec--flow .flow{grid-template-columns:minmax(0,1fr);gap:0}
.sec--flow .flow-rail{flex-direction:row;gap:var(--x3);padding:var(--x8) clamp(24px,4vw,64px) 0}
/* each step a segment that fills as it is reached; its name is in the page
   for a screen reader (.t.sr, clipped, never display:none) and is the step
   heading under it */
.sec--flow .flow-rail .frow{flex:1 1 0;align-items:center;padding:var(--x3) 0 0;border-bottom:0;border-top:2px solid var(--l1);
  transition:border-color .3s,color .24s}
.sec--flow .flow-rail .frow.on{padding-left:0;border-top-color:var(--sig)}
.sec--flow .flow-rail .frow.done{border-top-color:var(--t2)}
.sec--flow .frow .n{font:400 14px/1 var(--mono);letter-spacing:.08em}
.sec--flow .flow-body{padding:clamp(28px,4vw,56px) clamp(24px,4vw,64px)}
.sec--flow .flow-body .lbl{font-size:12px}
/* the label, the step's name and its one line, centred; the fields, the
   review and the calendar under them keep their left edge */
.sec--flow .flow-body > .lbl:first-child,.sec--flow .flow-body > .d3,.sec--flow .flow-body > .body{text-align:center}
.sec--flow .flow-body > .lbl:first-child{display:block}
.sec--flow .flow-body > .d3{margin:var(--x4) 0 var(--x3);font-size:clamp(26px,2.4vw,38px);line-height:1.15;letter-spacing:-.022em}
.sec--flow .flow-body > .body{max-width:36em;margin-left:auto;margin-right:auto;font-size:clamp(17px,1.35vw,20px);line-height:1.45;color:var(--t1)}
/* a heading is not a control: it takes the focus after Continue for a
   screen reader, and draws no ring */
.sec--flow .flow-body :is(h3,.d3,.d4)[tabindex="-1"]:focus-visible{outline:0}
/* the fields: two to a row, the last alone fills its row; one control line
   whether a label takes one line or two */
.sec--flow .fields{display:flex;flex-wrap:wrap;margin-top:var(--x8)}
.sec--flow .fields > .f{flex:1 1 calc(50% - 1px)}
.sec--flow .fields > .f--full{flex-basis:100%}
.sec--flow .f > :is(input:not([type="checkbox"]),select,textarea){margin-top:auto}
.sec--flow .f label{font-size:12px;letter-spacing:.12em}
.sec--flow .f :is(input,select,textarea){font-size:16px}
.sec--flow .f .hint{font-size:13px}
/* the buttons, centred */
.sec--flow .flow-nav{justify-content:center;margin-top:var(--x10)}
/* the last step: what happens next, readable */
.sec--flow .flow-body .seq-l{gap:var(--x2)}
.sec--flow .flow-body .seq-l li{font:400 15px/1.5 var(--sans);color:var(--t1);padding-left:18px}
.sec--flow .flow-body .seq-l li::before{top:.72em}
.sec--flow .flow-body .dl dt{font-size:12px}
.sec--flow .flow-body .dl dd{font-size:15px}
/* the calendar: the small print up */
.sec--flow .cal-cap{font-size:13px}
.sec--flow .cal-h{font-size:12px}
.sec--flow .cal-d{font-size:15px}
.sec--flow .slot{font-size:14px;padding:16px 20px}

/* ── under the form: the detail, in the same centred column ────────────── */
.fp-band > .wrap > .lbl{display:block;margin-bottom:var(--x8);text-align:center;
  font:400 var(--f-nm)/1.25 var(--sans);letter-spacing:-.012em;text-transform:none;color:var(--t1)}
.fp-band .dw > summary{padding:var(--x5) 0}
.fp-band .dw-t{font-size:var(--f-nm);color:var(--t0)}
.fp-band .dw-body .body,.fp-band .dw-body .lede{font-size:17px;line-height:1.55}
.fp-band .fp-plan{margin-top:var(--x12)}
.fp-band .fp-plan-go{display:flex;justify-content:center;margin-top:var(--x6)}

/* ── a phone ───────────────────────────────────────────────────────────── */
@media (max-width:700px){
  /* the form is the page: no box round it, so the first field is on the first screen */
  .sec--flow .flow{border:0;background:none}
  .sec--flow .flow-rail{background:none;gap:var(--x2);padding:0}
  .sec--flow .flow-body{background:none;padding:var(--x6) 0 0}
  .sec--flow .flow-body > .lbl:first-child,.sec--flow .flow-body > .d3,.sec--flow .flow-body > .body{text-align:left}
  .sec--flow .flow-body > .d3{font-size:28px}
  .sec--flow .flow-body > .body{margin-left:0;font-size:17px}
  .sec--flow .fields{margin-top:var(--x6)}
  .sec--flow .fields > .f{flex-basis:100%}
  .sec--flow .cal-d{font-size:14px}
  /* Continue (or Send) is the full-width primary; Back and Call instead sit
     under it two to a row, and Call instead alone on the first step spans it */
  .sec--flow .flow-nav{display:grid;grid-template-columns:1fr 1fr;gap:var(--x2);margin-top:var(--x8)}
  .sec--flow .flow-nav [data-fl="next"],.sec--flow .flow-nav [data-fl="done"]{grid-column:1/-1;order:-1}
  .sec--flow .flow-nav > a:nth-child(2):last-child{grid-column:1/-1}
  .sec--flow .flow-nav--done{display:flex;flex-direction:column;align-items:stretch}
  .fp-band > .wrap > .lbl{text-align:left}
}

/* ═══ REVIEW FIXES · SITE-WIDE GUIDELINE (2026-10-19) ═══════════════════════
   What the desktop and phone reviews found after the template passes. */

/* the footer has five columns since "Book" went: one row of five, centred */
@media (min-width:1101px){ .ftr-grid{grid-template-columns:repeat(5,minmax(0,1fr));max-width:1240px} }
@media (min-width:701px) and (max-width:1100px){ .ftr-grid{grid-template-columns:repeat(3,minmax(0,1fr))} }

/* the showroom's opening panel: its title at a page title's size, the
   label above it, the line readable */
.srh-p .t4-bar{flex-direction:column;align-items:flex-start;gap:var(--x3)}
.srh-p .t4-bar .t4-n{order:-1;font-size:12px}
.srh-p .t4-bar h1{font-size:clamp(34px,3.4vw,58px);line-height:1.04;letter-spacing:-.03em;font-weight:400}
.srh-p .t4-bar p{font-size:clamp(17px,1.3vw,20px);line-height:1.45;color:var(--t1);max-width:32em}
@media (max-width:860px){ .srh-p .t4-bar h1{font-size:clamp(34px,10vw,44px)} }

/* the closing pair: two equal cells, the same heading size, the same
   button height; the quote button's arrow sits beside its label */
.cta2-b .d4,.cta2-b .d3{font-size:clamp(26px,2.6vw,44px);line-height:1.08;letter-spacing:-.028em;font-weight:400}
.cta2 .a2{min-height:58px;padding:0 28px;font-size:15px;justify-content:center}
.cta2 .a1{justify-content:center}
.cta2 .a1 .a1-ar{margin-left:var(--x3)}
@media (min-width:861px){ .cta2{grid-template-columns:repeat(2,minmax(0,1fr))} }

/* the contact page's closing actions: a centred grid of equal buttons */
.cclose .btns{display:grid;grid-template-columns:repeat(2,minmax(0,280px));gap:var(--x3);justify-content:center}
.cclose .cstrip{display:grid;grid-template-columns:repeat(3,minmax(0,220px));gap:var(--x3);justify-content:center}
.cclose .btns > *,.cclose .cstrip > *{justify-content:center;min-height:58px}
.cclose .a1 .a1-ar{margin-left:var(--x3)}
@media (max-width:700px){
  .cclose{align-items:stretch}
  .cclose .btns,.cclose .cstrip{grid-template-columns:minmax(0,1fr)}
}

/* one size for an accordion question everywhere; drawers too */.faq summary{list-style:none;cursor:pointer;padding:19px 44px 19px 0;position:relative;font-size:var(--f-nm);font-weight:400;letter-spacing:-.012em;transition:color .2s,padding-left .2s;line-height:1.3}.dw-t{font-size:var(--f-nm);font-weight:400;letter-spacing:-.004em;color:var(--t0)}

/* the small capitals "go" links are less tiny */.a3{display:inline-flex;align-items:center;gap:10px;position:relative;padding:9px 0;background:none;border:0;cursor:pointer;color:var(--t1);font:500 11.5px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;transition:color .24s,letter-spacing .34s cubic-bezier(.16,1,.3,1);font-size:12.5px}

/* guides: a decision card's paragraph reads left-aligned under its centred
   title; every reading column is one width; project names as on /projects */
.gx .slate-d{text-align:left}.gx{--gx-read:58rem;--gx-wide:72rem}
.gx .browse-grid--proj .browse-card h3{justify-content:center;text-align:center;font-size:var(--f-h3);line-height:1.15;letter-spacing:-.018em}

/* contact and pages: small labels no smaller than 11px; names in a row of
   tiles start on one line instead of centring on each tile's height */
.pg-c dt{font-size:11.5px}
.pg-c .mesh > *,.pg-c .choose > *{justify-content:flex-start}

/* headings: centred down to tablet width, left only on a phone */
@media (min-width:701px) and (max-width:860px){
  .sec:not(.hm):not(.hsum) > .wrap > .head{text-align:center;margin-left:auto}
  .sec:not(.hm):not(.hsum) > .wrap > .head .lede{margin:0 auto}
  .sec--flush > .wrap > .t4-bar,.t5-bar{align-items:center;text-align:center}
}

/* phone: the breadcrumb does not repeat the title right under it */
@media (max-width:700px){
  .crumb > b:last-child,.crumb > i:nth-last-child(2){display:none}
}

/* the first section under the header never draws a second hairline */
#app > .sec:first-child{border-top:0}

/* phone: a product's key figures carry their weight */
@media (max-width:700px){
  .pv .fig dd{font-size:18px;line-height:1.2}
  .pv .fig dt{font-size:11px}
  /* "More in …": the row runs to both edges of the screen */
  .pv-rel:not(.pv-rel--proj){width:auto}
  /* /services: the nine steps closer together */
  .pg-c .pchart--steps .pc{padding-bottom:var(--x5)}
  .pg-c .pchart--steps .pc-ax{height:44px}
}

/* ═══ ONE REQUEST A QUOTE PER PAGE (owner, 2026-10-19) ═══
   "request quote，不要在一个页面里面出现两次 … 只保留底部的那个 … 只保留那个 check
   的那个 CTA，然后居中". The closing block keeps only its arranging option,
   one centred cell; the home row of ways to start loses its quote card. */
.cta2.cta2--one{grid-template-columns:minmax(0,1fr)!important;max-width:880px;margin-left:auto;margin-right:auto}
.cta2--one>.cta2-b{padding:clamp(40px,6vw,88px) clamp(24px,4vw,64px)}
.cta2--one .a2{margin-top:var(--x4)}
@media (max-width:860px){
  .cta2--one .a2{align-self:center;min-width:min(100%,280px)}
  .hm--routes .racts--3 > .ra:last-child{grid-column:1 / -1;min-height:0}
}

/* ═══ THE PHONE BAR, HELD TO THE BOTTOM EDGE (owner, 2026-10-19) ═══
   "能不能强制的锁死在底部不要让它飞上来". --cb-fix (set on #cbar by app.js) is how
   far WebKit has left its fixed layer above the real bottom of the screen in
   an iPhone browser other than Safari; 0 everywhere else. The bar is moved
   down by that much. It uses `translate`,
   so the slide-in (`transform`) is untouched. Below the bar its own dark
   glass carries on past the edge, so even a frame where the bar is still
   catching up shows the bar, never the page, under it. */
.vp-probe{position:fixed;left:0;top:0;bottom:0;width:0;visibility:hidden;pointer-events:none}
@media (max-width:700px){
  .cbar{translate:0 var(--cb-fix,0px)}
  /* moved down to the true foot of the screen: clear of the home bar */
  .cbar.cb-lift{padding-bottom:calc(var(--x2) + 16px + env(safe-area-inset-bottom,0px))}
  .cbar::after{content:"";position:absolute;left:0;right:0;top:100%;height:180px;
    background:rgb(14,14,16);pointer-events:none}
}

/* lenis.css */
html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}

/* ── the loading panel ────────────────────────────────────────────────── */
.fx-load{
  position:fixed;inset:0;z-index:300;background:var(--void);
  display:flex;align-items:center;justify-content:center;
  pointer-events:none;visibility:hidden;
  clip-path:polygon(0 100%,100% 100%,100% 100%,0 100%);
}
.fx-load.in{
  visibility:visible;pointer-events:all;
  clip-path:polygon(0 0,100% 0,100% 100%,0 100%);
  transition:clip-path .30s cubic-bezier(.7,0,.3,1);
}
/* leaves upward on the 22.5 axis, so entry and exit are not mirror images */
.fx-load.out{
  visibility:visible;
  clip-path:polygon(0 0,100% 0,100% 0,0 0);
  transition:clip-path .42s cubic-bezier(.16,1,.3,1);
}
.fx-load-in{display:flex;flex-direction:column;align-items:center;gap:26px;padding:0 var(--gut)}
.fx-load-mark{width:min(190px,44vw)}
.fx-load-mark svg{width:100%;height:auto;fill:var(--ink)}
.fx-load.in .fx-load-mark{animation:fxmark .5s cubic-bezier(.16,1,.3,1) both}
@keyframes fxmark{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
.fx-load-meta{display:flex;flex-direction:column;align-items:center;gap:12px;width:min(320px,74vw)}
.fx-load-to{font:400 11px/1.5 var(--mono);letter-spacing:.16em;text-transform:uppercase;
            color:var(--dim);text-align:center}
.fx-load-bar{display:block;width:100%;height:1px;background:var(--rule);overflow:hidden}
.fx-load-bar i{display:block;width:100%;height:100%;background:var(--sig);
               transform:scaleX(0);transform-origin:left}
[data-motion="off"] .fx-load{display:none}

/* the guarantee's last resort — beats every module's reveal mechanism */
.fx-forcevis .rv,.fx-forcevis .rv:not(.in),
.fx-forcevis :root[data-fx="on"] .rv:not(.in){
  opacity:1!important;transform:none!important;clip-path:none!important;
  -webkit-mask-image:none!important;mask-image:none!important;filter:none!important;
}

/* the guarantee also releases any split line, in case a module reintroduces one */
.fx-forcevis .fx-line-i,.fx-forcevis .fx-ch{transform:none!important;opacity:1!important}
.fx-forcevis .fx-line{overflow:visible!important}

/* ── never under the frosted edges (owner, 2026-10-19: "全站的这种信息，全都
   不能有任何模糊") ─────────────────────────────────────────────────────────
   The frosted bands (.edge-blur, z-index 58) blur what scrolls past the top
   and bottom of the screen. What stays on screen, and a page's own key
   panel, is drawn above them and so is never blurred: the product panel
   (sticky beside its photographs, and on a phone too), the showroom's
   opening panel, Survey, make, fit while it holds still, the house's hover
   card and tap card, a sticky side rail. The bars (contact bar, product
   bar, corner button, header) already sit above them. None of these is
   inside a stacking context, so a z-index here lifts it over the bands. */
html .pv > .pv-panel{z-index:59}
@media (max-width:960px){ html .pv > .pv-panel{position:relative} }
html .srh-in,html .srh-top{z-index:59}
@media (max-width:860px){ html .srh-in{position:relative} }
html .hpin[data-pin="on"] > .sec{z-index:59}
html [data-stk="on"] .stk-a{z-index:59}
html .aside-in{z-index:59}
html .home-hero--xp > .expl-rd,html .expl-rd.is-float,html .xp-pop{z-index:59}

/* ── the old product readout is gone from touch screens (owner, 2026-10-19:
   "把手机版的这个浮窗彻底完全删除") ─────────────────────────────────────────
   On the home hero the readout exists only as the floating card a mouse
   opens beside a hotspot (.is-float). Anywhere it is not floating it is
   never drawn: on a phone it used to come back at the top of the house when
   the reader returned from a product (the returning focus on the hotspot
   filled it). The tap card (.xp-pop) is the phone's only one. */
html .home-hero--xp > .expl-rd:not(.is-float){display:none!important}

/* Blocks are visible by default. The hidden start only exists while the rig
   is live (html.fx-on) AND the rig has actually taken hold of the block
   (.fx-rising) — so a block the driver never reaches stays readable. */
.fx-on .fx-rising{will-change:transform,opacity}
/* no CSS transition: the position IS the scroll position, every frame */
.fx-rising{transition:none!important}
[data-motion="off"] .fx-rising{transform:none!important;opacity:1!important}

/* ── nav links: a menu link says so, and answers differently ──────────── */
.nav a{display:inline-flex;align-items:center;gap:7px}
.nav-caret{display:block;width:6px;height:6px;border-right:1px solid currentColor;
  border-bottom:1px solid currentColor;transform:rotate(45deg) translate(-1px,-1px);
  opacity:.45;transition:opacity .24s,transform .32s cubic-bezier(.16,1,.3,1)}
.nav a[data-menu]:hover .nav-caret,
.nav a[aria-expanded="true"] .nav-caret{opacity:1;transform:rotate(45deg) translate(1px,1px)}
/* a link WITHOUT a menu keeps the underline; a menu link does not use one —
   the caret is its signal, so the two are told apart before clicking */
.nav a[data-menu]::after{display:none}
.nav a[aria-expanded="true"]{color:var(--t0)}
/* No caret where nothing opens. The panel needs a mouse and more than 1000px
   (canShow() in fx-nav.js); on a phone, a touch tablet or a narrow window the
   link goes straight to its page, so a down-arrow there promised a sub-menu
   that never came. */
@media (max-width:1000px), not all and (pointer:fine){ .nav-caret{display:none} }

/* ── the panel ────────────────────────────────────────────────────────── */
.fx-mega{
  /* hung from the bar's measured lower edge (fx-core --hdr-b), never from
     the layout allowance --hdr-h, which left a strip of page between them */
  position:fixed;left:0;right:0;top:var(--hdr-b,54px);z-index:120;background:var(--s0);
  border-bottom:1px solid var(--l1);
  clip-path:polygon(0 0,100% 0,100% 0,0 0);
  transition:clip-path .36s cubic-bezier(.16,1,.3,1);
}
.fx-mega.on{clip-path:polygon(0 0,100% 0,100% 100%,0 100%)}
.fx-mega-in{
  display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1fr) minmax(0,1.5fr);
  gap:1px;background:var(--l0);
  /* border-top removed. The panel opens with a clip-path wipe from zero
     height downward, so a full-width rule across the top of its content is
     dragged down the screen as a horizontal bar for the whole 360ms of the
     reveal — the line that kept being reported. The 1px gap on --l0 already
     separates the three columns; the top edge does not need its own rule,
     and .fx-mega's own border-bottom still closes the panel against the page. */
}
.fx-mega-col{background:var(--s0);padding:var(--x6) var(--gut);min-width:0;
  display:flex;flex-direction:column;gap:0;max-height:66vh;overflow-y:auto}
/* Products lists eight category rows in its first column, twice what one
   division had; on a laptop screen (a 1366x768 display leaves ~650px of
   window) 66vh cut off "All of Sharp Steel". The panel may grow to the
   window less a strip of page; a tall window still sizes to its content. */
.fx-mega-col{max-height:max(66vh,calc(100vh - 104px))}
.fx-mega-col h4{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;
  color:var(--t2);margin-bottom:var(--x4)}

/* first column — the rows that were breaking: four columns, name never clipped */
.fx-mega-cat{
  display:grid;grid-template-columns:20px 26px minmax(0,1fr) auto;
  gap:var(--x3);align-items:center;
  background:none;border:0;border-top:1px solid var(--l0);padding:11px 0;cursor:pointer;
  text-align:left;color:var(--t1);width:100%;
  transition:color .2s,padding-left .26s cubic-bezier(.16,1,.3,1);
}
.fx-mega-cat:hover{color:var(--t0);padding-left:6px}
.fx-mega-cat.on{color:var(--t0)}
.fx-mega-ico{width:20px;color:var(--t2);flex:0 0 auto}
.fx-mega-ico svg{width:100%;height:auto}
.fx-mega-cat.on .fx-mega-ico,.fx-mega-cat:hover .fx-mega-ico{color:var(--t0)}
/* --t3 put these at 3.26:1 against the panel, under the 4.5 an 11px glyph
   needs. They are small text carrying an index, not decoration. */
.fx-mega-ix{font:400 var(--f-mic)/1.4 var(--mono);color:var(--t2)}
.fx-mega-nm{font-size:var(--f-bd);letter-spacing:-.006em;line-height:1.3;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-mega-ct{font:400 var(--f-mic)/1.4 var(--mono);color:var(--t2);justify-self:end}
/* Products holds both divisions: the second group's label clears the first's link */
.fx-mega-all + h4{margin-top:var(--x8)}
.fx-mega-all,.fx-mega-go{
  display:inline-flex;align-items:center;gap:9px;margin-top:var(--x5);
  font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t1)}
.fx-mega-all i,.fx-mega-go i{font-style:normal;transition:transform .3s cubic-bezier(.16,1,.3,1)}
.fx-mega-all:hover,.fx-mega-go:hover{color:var(--t0)}
.fx-mega-all:hover i,.fx-mega-go:hover i{transform:translate(5px,2.1px)}

/* second column — products, or a project's schedule */
.fx-mega-p{display:flex;flex-direction:column;gap:3px;padding:10px 0;
  border-top:1px solid var(--l0);transition:padding-left .24s cubic-bezier(.16,1,.3,1),color .2s}
.fx-mega-p:hover{padding-left:7px}
.fx-mega-p:hover .fx-mega-nm{color:var(--t0)}
.fx-mega-meta{font:400 var(--f-mic)/1.4 var(--mono);color:var(--t2);font-variant-numeric:tabular-nums}
.fx-mega-sched{display:block;padding:9px 0;border-top:1px solid var(--l0);
  font-size:var(--f-sm);color:var(--t1);line-height:1.4}

/* third column — the drawing is the subject, at size */
.fx-mega-prev{display:grid;grid-template-rows:minmax(0,1fr) auto;gap:var(--x5);padding-bottom:var(--x8)}
.fx-mega-dwg{display:flex;align-items:center;justify-content:center;min-height:0;
  padding:var(--x4) 0}
.fx-mega-dwg svg{width:100%;height:auto;max-height:230px;overflow:visible}
.fx-mega-dwg .dwg-stroke{stroke:var(--t0)}
.fx-mega-dwg .dwg-hair{stroke:var(--t2)}
.fx-mega-dwg .dwg-glass{fill:rgba(255,255,255,.06)}
/* the photograph starts level with the column headings; centred, it sat
   25px lower in the taller Products panel (integrate 2026-10-11) */
.fx-mega-shot{min-height:0;display:flex;align-items:flex-start}
.fx-mega-shot .shot{width:100%;max-height:230px}
.fx-mega-read{display:flex;flex-direction:column;gap:var(--x3);align-items:flex-start}
.fx-mega-eyebrow{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.16em;
  text-transform:uppercase;color:var(--t2)}
.fx-mega-read p{font-size:var(--f-sm);line-height:1.55;color:var(--t1);max-width:52ch}
.fx-mega-read dl{display:grid;grid-template-columns:1fr auto;gap:5px var(--x4);width:100%;max-width:340px}
.fx-mega-read dt{font:400 var(--f-cap)/1.6 var(--mono);letter-spacing:.13em;
  /* --t3 is 3.26:1, declared for decoration and large text only; this is a
     10px label. --t2 is 4.71:1, which the sibling label classes already use. */
  text-transform:uppercase;color:var(--t2)}
.fx-mega-read dd{font-size:var(--f-bd);color:var(--t0);text-align:right;font-variant-numeric:tabular-nums}

@media (max-width:1000px){ .fx-mega{display:none} }
[data-motion="off"] .fx-mega{transition:none}

/* the bar's measured edge wins over any later allowance-based rule */
.fx-mega,html .fx-mega{top:var(--hdr-b,54px)}

/* ── pagination ───────────────────────────────────────────────────────── */
.fx-page{display:flex;align-items:center;gap:var(--x5);padding:var(--x5) 0 0;
         border-top:1px solid var(--l1);margin-top:-1px}
.fx-page-n{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;color:var(--t2);
           font-variant-numeric:tabular-nums;white-space:pre}
.fx-page-b{background:none;border:1px solid var(--l2);color:var(--t1);
  width:38px;height:32px;display:grid;place-items:center;cursor:pointer;
  font:400 13px/1 var(--mono);
  transition:background .26s cubic-bezier(.16,1,.3,1),color .26s,border-color .26s}
.fx-page-b:hover:not([disabled]){background:var(--t0);color:var(--s0);border-color:var(--t0)}
.fx-page-b[disabled]{opacity:.3;cursor:not-allowed}
.fx-page-b:active:not([disabled]){transform:translate(1px,.4px) scale(.97)}

/* ── the systems carousel ─────────────────────────────────────────────── */
.chead{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--x6);
       margin-bottom:calc(var(--x6) + 18px)}
.chead .head{margin-bottom:0}
.cnav{display:flex;align-items:center;gap:var(--x4);flex:0 0 auto}
.cpos{font:400 var(--f-mic)/1 var(--mono);letter-spacing:.14em;color:var(--t2);
      font-variant-numeric:tabular-nums}
.cbtn{background:none;border:1px solid var(--l2);color:var(--t1);width:38px;height:32px;
  display:grid;place-items:center;cursor:pointer;font:400 13px/1 var(--mono);
  transition:background .26s cubic-bezier(.16,1,.3,1),color .26s,border-color .26s}
.cbtn:hover{background:var(--t0);color:var(--s0);border-color:var(--t0)}
.cbtn:active{transform:translate(1px,.4px) scale(.97)}

/* The clipping box carries 18px of vertical padding, cancelled by an equal
   negative margin, so a slide can lift clear of the strip without being cut
   off by the overflow and without moving the block in the layout. The frame
   moved onto the slides themselves for the same reason — an outer border
   18px away from the cards would just be a stray rectangle. */
.carousel{overflow:hidden;cursor:grab;touch-action:pan-y;padding:18px 0;margin:-18px 0}
.carousel.is-drag{cursor:grabbing}
.ctrack{display:flex;will-change:transform}
.cslide{flex:0 0 clamp(240px,24vw,340px);
  border:1px solid var(--l1);border-left:0;
  /* a swipe across a link must not select its text or start a native drag */
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;
  padding:clamp(20px,2.2vw,30px);display:flex;flex-direction:column;gap:var(--x4);
  background:var(--s0);min-width:0;position:relative;
  transition:background .34s cubic-bezier(.16,1,.3,1),
             transform .42s cubic-bezier(.16,1,.3,1),
             box-shadow .42s cubic-bezier(.16,1,.3,1),
             opacity .3s,border-color .3s}
/* The selected card is drawn out of the strip and LIT. Dimming the other
   seven to 40% was the wrong half of the idea: it punished the whole run for
   the pointer being somewhere, and the reader lost the row they were
   scanning. Only the chosen card changes — it lifts, its surface comes up,
   its drawing and its text brighten. Everything else is left alone. */
/* Only for a pointer that really hovers: on a phone a finger crossing the
   strip left a card lifted and lit (owner, 2026-10-19). There, a card moves
   only when tapped (.is-tap, below). */
@media (hover:hover){
.carousel:not(.is-drag) .cslide:hover{
  background:var(--s2);border-color:var(--l2);
  transform:translateY(-13px);
  /* the -1px shadow draws the left edge the strip collapses away, so the
     lifted card is framed on all four sides */
  box-shadow:-1px 0 0 var(--l2), 0 18px 38px rgba(0,0,0,.5)}
.carousel:not(.is-drag) .cslide:hover .cs-meta i,
.carousel:not(.is-drag) .cslide:hover .cs-meta em,
.carousel:not(.is-drag) .cslide:hover .cs-cap{color:var(--t1)}
.carousel:not(.is-drag) .cslide:hover .cs-cap b{color:var(--t0)}
}
/* No line drawing itself along the top edge. A card that lifts and lights is
   already saying it is selected; the stroke was a second answer to the same
   question, and the same stroke-on-hover move was repeated on card after
   card until it read as the site's only idea. Strokes are kept for controls
   that need a fill to travel — chips and the small actions — not for cards. */
.cs-dwg{display:block}
.cs-dwg svg{width:100%;height:auto;max-height:150px;overflow:visible;
  transition:transform .5s cubic-bezier(.16,1,.3,1)}
@media (hover:hover){
.carousel:not(.is-drag) .cslide:hover .cs-dwg svg{transform:scale(1.055)}
.cslide:hover .dwg-hair{stroke:var(--t1)}
.cslide:hover .dwg-glass{fill:rgba(255,255,255,.09)}
}
.cs-meta{display:flex;align-items:baseline;gap:var(--x3);flex-wrap:wrap;margin-top:auto}
.cs-meta i{font:400 var(--f-mic)/1 var(--mono);color:var(--t2);font-style:normal}
.cs-meta b{font-size:var(--f-bd);font-weight:400;color:var(--t0);letter-spacing:-.004em}
.cs-meta em{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.13em;text-transform:uppercase;
            color:var(--t2);font-style:normal;width:100%}
.cs-cap{display:flex;flex-wrap:wrap;gap:3px 10px;font:400 var(--f-cap)/1.5 var(--mono);color:var(--t2)}
.cs-cap b{font-weight:400;color:var(--t1)}
@media (max-width:700px){ .chead{flex-direction:column;align-items:flex-start} }
[data-motion="off"] .cslide,[data-motion="off"] .cs-dwg svg{transition:none}

/* ── on a touch screen: the phone's own sideways scroll (fx-carousel) ──── */
.carousel.is-native{overflow-x:auto;overflow-y:hidden;cursor:auto;touch-action:auto;
  overscroll-behavior-x:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.carousel.is-native::-webkit-scrollbar{display:none}
.carousel.is-native .ctrack{transform:none!important;transition:none!important;width:max-content}
.carousel.is-native .cslide[aria-hidden="true"]{display:none}
.carousel.is-native .cslide:first-child{border-left:1px solid var(--l1)}
/* the tap: the card lifts and lights once, on its way to its page */
.cslide.is-tap{animation:cs-tap .34s cubic-bezier(.16,1,.3,1) forwards}
@keyframes cs-tap{to{transform:translateY(-10px);background:var(--s2);border-color:var(--l2);
  box-shadow:-1px 0 0 var(--l2),0 14px 30px rgba(0,0,0,.45)}}
.cslide.is-tap .cs-dwg svg{transform:scale(1.05)}

/* ── fx-peek: the card that rides the cursor ──────────────────────────── */
.fx-peek{
  position:fixed;left:0;top:0;z-index:200;width:268px;pointer-events:none;
  background:var(--s1);border:1px solid var(--l2);
  box-shadow:0 20px 48px rgba(0,0,0,.55);
  opacity:0;visibility:hidden;transform:translate3d(-600px,-600px,0);
  transition:transform .16s cubic-bezier(.16,1,.3,1),opacity .19s,visibility 0s .19s;
}
.fx-peek[data-on="1"]{
  opacity:1;visibility:visible;
  transition:transform .16s cubic-bezier(.16,1,.3,1),opacity .19s,visibility 0s;
}
.fx-peek-m{display:block;border-bottom:1px solid var(--l1)}
.fx-peek-m .shot{width:100%}
.fx-peek-m .ph-brief{font-size:10px;line-height:1.45}
.fx-peek-b{padding:13px 15px 15px;display:flex;flex-direction:column;gap:6px}
.fx-peek-n{font:400 var(--f-cap)/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--t2)}
.fx-peek-t{font-size:var(--f-bd);font-weight:400;line-height:1.28;letter-spacing:-.006em;color:var(--t0)}
.fx-peek-d{font-size:12.5px;line-height:1.5;color:var(--t1)}
@media (pointer:coarse){ .fx-peek{display:none} }
[data-motion="off"] .fx-peek{transition:opacity .19s}

/* ── sticky overlap: the Explain → Prove handoff ──────────────────────── */
.stk{--stk-lap:0px;--stk-min:84px;position:relative}
.stk-a{position:relative}
.stk-a-in{will-change:transform,opacity}
.stk-b{position:relative;z-index:2;background:var(--s0)}

/* The overlap is armed only once fx-stick has mounted. Without it these are
   two ordinary sections in normal flow — readable, in order, no overlap and
   nothing covered. */
[data-stk="on"] .stk{--stk-lap:clamp(56px,9vh,120px)}
[data-stk="on"] .stk-a{position:sticky;top:var(--stk-min)}
/* A's own content stops short of the band B will cover, so B covering it can
   never hide a word — with or without the driver running */
[data-stk="on"] .stk-a{padding-bottom:var(--stk-lap)}
[data-stk="on"] .stk-b{margin-top:calc(-1 * var(--stk-lap));border-top:1px solid var(--l1)}

/* the global visibility backstop reaches this module too */
html.fx-forcevis .stk-a-in{opacity:1 !important;transform:none !important}

@media (prefers-reduced-motion:reduce){
  .stk-a{position:relative !important;top:auto !important;padding-bottom:0 !important}
  .stk-a-in{transform:none !important;opacity:1 !important}
  .stk-b{margin-top:0 !important}
}
@media (max-width:860px){
  /* a short viewport has no room for two modules at once; stack them */
  [data-stk="on"] .stk-a{position:relative;top:auto;padding-bottom:0}
  [data-stk="on"] .stk-b{margin-top:0}
  .stk-a-in{transform:none !important;opacity:1 !important}
}

/* ── the figures ──────────────────────────────────────────────────────── */
/* tabular figures and a reserved width: the counter must not reflow its
   neighbours while it runs */
.bn-n,.bncodes b{font-variant-numeric:tabular-nums;display:inline-block}
[data-rolling]{font-variant-numeric:tabular-nums}

/* ── explorer ─────────────────────────────────────────────────────────── */
.fx-expl-f{display:flex;flex-wrap:wrap;gap:1px;background:var(--rule);
           border:1px solid var(--rule);border-bottom:0}
.fx-expl-f .chip{background:var(--void);border:0;flex:1 1 auto}
.fx-expl-f .chip.on{color:var(--sig)}
.hs.fx-off{opacity:.15;pointer-events:none}
.hs .fx-pulse,.hs circle:first-of-type{transform-origin:center}
@keyframes fxpulse{
  0%{r:11;opacity:.9}
  70%{r:21;opacity:0}
  100%{r:21;opacity:0}
}
.hs::after{content:none}
.hs circle:first-of-type{animation:fxpulse 3.2s cubic-bezier(.2,.7,.3,1) infinite;animation-delay:var(--pd,0ms)}
.hs:hover circle:first-of-type,.hs:focus circle:first-of-type{animation-play-state:paused}
[data-motion="off"] .hs circle:first-of-type{animation:none}

/* ── flow ─────────────────────────────────────────────────────────────── */
.frow{transition:color .24s,padding-left .24s}
.frow.on{padding-left:6px}
.frow.done .n::after{content:" ✓";color:var(--sig)}

/* ══════ motion-core ══════ */
/* ═══════════════════════════════════════════════════════════════════════════
   SHARP · FX / motion-core
   ---------------------------------------------------------------------------
   The reveal is an aperture, not a fade. Two parallel edges at exactly 22.5°
   part from the element's own centre line. --fx-r is the horizontal run of
   that diagonal expressed as a percentage of the element's height, written by
   JS from the IntersectionObserver rect, so the edge is a true 22.5° in device
   pixels whatever the element's aspect ratio.

   Motion is on unconditionally. prefers-reduced-motion is never consulted;
   the only opt-out is [data-motion="off"], set by the footer toggle.
   ═══════════════════════════════════════════════════════════════════════════ */

:root{
  --scroll-y:0px;
  --scroll-p:0;
  --fx-ease:cubic-bezier(.16,1,.3,1);
  --fx-dur:780ms;
  --fx-fade:420ms;
}

/* ── scroll progress ──────────────────────────────────────────────────────
   Sits above .hdr (z 100), .devbar (z 150) and .skip (z 200). 2px tall, no
   track, leading edge chamfered at 22.5°. */
.fx-prog{
  position:fixed;top:0;left:0;right:0;height:2px;
  z-index:400;pointer-events:none;background:transparent;
  contain:layout style;
  opacity:clamp(0,calc(var(--scroll-p,0) * 26),1);
}
.fx-prog i{
  display:block;height:100%;
  width:calc(var(--scroll-p,0) * 100%);
  background:var(--sig);
  /* 2px / tan(22.5deg) = 4.83px of run */
  clip-path:polygon(0 0,100% 0,calc(100% - 4.83px) 100%,0 100%);
}

/* ── reveal ─────────────────────────────────────────────────────────────── */



/* the clip is transient — dropped on completion so it can never clip a focus
   ring, an absolutely positioned child or a later hover state */


/* ── motion toggle (footer) ─────────────────────────────────────────────── */






/* ── motion off ─────────────────────────────────────────────────────────── */
:root[data-motion="off"] .rv,
:root[data-motion="off"] .rv.in,
:root[data-motion="off"] .rv.fx-done{
  opacity:1!important;
  transform:none!important;
  clip-path:none!important;
  transition:none!important;
  will-change:auto!important;
}
:root[data-motion="off"] *,
:root[data-motion="off"] *::before,
:root[data-motion="off"] *::after{
  transition-duration:1ms!important;
  transition-delay:0s!important;
  animation-duration:1ms!important;
  animation-delay:0s!important;
  animation-iteration-count:1!important;
}
:root[data-motion="off"]{scroll-behavior:auto!important}

/* ── forced motion ────────────────────────────────────────────────────────
   The base stylesheet ships a prefers-reduced-motion block that switches the
   reveal off. motion-core retires that block at runtime; this is the belt to
   that pair of braces, in case a sheet is unreachable (CORS) and cannot be
   rewritten. Never used to DISABLE motion — only to keep it running. */


@media (max-width:620px){
  
}

/* ══════ type-motion ══════ */
/* ── fx · type-motion ─────────────────────────────────────────────────────
   Split-line heading reveal, number counters, nav character shift.
   Every diagonal here is 22.5deg: the horizontal travel is tan(22.5) x the
   vertical travel, written as px onto --fx-x / --fx-y by the module.
   No radius, no shadow, no gradient, single theme, motion is unconditional. */

/* the heading becomes a column of masked lines. flex, not block, so the
   negative line margins cannot collapse into each other and shift the type. */
.fx-split{display:flex;flex-direction:column;align-items:stretch}

/* padding opens the mask past ascenders and descenders; the equal negative
   margin gives the space straight back, so total heading height is unchanged */
.fx-line{display:block;overflow:hidden;padding:.16em 0;margin:-.16em 0}

.fx-line-i{
  display:block;
  will-change:transform;
  transform:translate3d(var(--fx-x,-.14em),min(var(--fx-y,120%),0.5em),0);
  transition:transform .42s cubic-bezier(.19,1,.22,1) var(--fx-d,0ms);
}
.fx-split.fx-in .fx-line-i{transform:translate3d(0,0,0)}

/* measuring state — words are inline and unstyled so line breaking is honest */
.fx-word{display:inline}

/* ── figures ──────────────────────────────────────────────────────────── */
.fx-count{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
.fx-n{
  display:inline-block;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum" 1;
  text-align:left;
  /* min-width is written inline in ch by the module: the figure grows into a
     box already the width of its final value, so nothing after it moves */
}

/* ── nav characters ───────────────────────────────────────────────────── */
.fx-chars{display:inline-block;white-space:nowrap}
.fx-ch{
  display:inline-block;
  transition:transform .34s cubic-bezier(.22,1,.36,1) var(--fx-d,0ms);
}
.nav a:hover .fx-ch,
.nav a:focus-visible .fx-ch{
  transform:translate3d(calc(-.41421356 * var(--fx-lift,2.4px)),calc(-1 * var(--fx-lift,2.4px)),0);
}

/* ── the only opt-out: an explicit user toggle ────────────────────────── */
[data-motion="off"] .fx-line-i,
[data-motion="off"] .fx-ch{transform:none !important;transition:none !important}

/* ══════ fx-cursor ══════ */
/* ═══════════════════════════════════════════════════════════════════════════
   fx-cursor — a drafting reticle, fine pointers with real hover only
   The sight is a hairline cross at the pointer: vertical arms, and arms at
   the brand's 22.5deg. Brackets clamp the control under it; a 22.5deg leader
   carries the verb out to a tag. 1px lines, square ends, no radius, no
   shadow, no gradient. The ink is the division's own white (--em). Every
   line is drawn twice — a fine dark keyline under a 1px ink line — so it
   holds on the black UI (where the keyline vanishes) and on a white
   photograph (where it carries the line). No blend mode: the tag is a solid
   plate and must stay the colour it is.
   ═══════════════════════════════════════════════════════════════════════════ */

.fx-cur{
  position:fixed; left:0; top:0; width:0; height:0;
  z-index:900; pointer-events:none;
  opacity:0; transition:opacity .16s linear;
  --fx-cur-ink:var(--em,#f0eeea); --fx-cur-key:rgba(7,7,8,.5);
}
.fx-cur[data-on="1"]{opacity:1}
.fx-cur *{pointer-events:none}

.fx-cur-x,.fx-cur-k,.fx-cur-ld,.fx-cur-tg{
  position:absolute; left:0; top:0; width:0; height:0;
  will-change:transform;
  transform:translate3d(-100px,-100px,0);
}
.fx-cur-f{position:absolute; left:0; top:0; width:0; height:0; opacity:0}
.fx-cur-tg{width:auto; height:auto}

.fx-cur svg{position:absolute; left:0; top:0; display:block; max-width:none; overflow:visible}
.fx-cur-kl{fill:none; stroke:var(--fx-cur-key); stroke-width:2; stroke-linejoin:miter; stroke-linecap:butt}
.fx-cur-in{fill:none; stroke:var(--fx-cur-ink); stroke-width:1; stroke-linejoin:miter; stroke-linecap:butt}

/* the sight ----------------------------------------------------------------
   The hotspot pixel is (0,0)–(1,1); the arms are hung from its centre. */
.fx-cur-a{position:absolute; left:.5px; top:.5px; width:0; height:0}
.fx-cur-a1{transform:rotate(-90deg)}       /* up                          */
.fx-cur-a2{transform:rotate(90deg)}        /* down                        */
.fx-cur-a3{transform:rotate(-22.5deg)}     /* up the 22.5 line            */
.fx-cur-a4{transform:rotate(157.5deg)}     /* and down it                 */
.fx-cur-a b{
  position:absolute; left:3.5px; top:-.5px; width:7px; height:1px;
  background:var(--fx-cur-ink); outline:.5px solid var(--fx-cur-key);
  transform-origin:0 50%; transform:scaleX(1);
  transition:transform .2s cubic-bezier(.22,1,.36,1);
}
.fx-cur-o{
  position:absolute; left:0; top:0; width:1px; height:1px;
  background:var(--fx-cur-ink); outline:.5px solid var(--fx-cur-key);
}
/* on a light control (a filled button) the sight is drawn in the void
   colour, keyed in the light, so the pointer never disappears into it */
.fx-cur[data-lt="1"] .fx-cur-x{--fx-cur-ink:var(--s0,#070708); --fx-cur-key:rgba(246,239,228,.55)}

/* the leader and the tag ---------------------------------------------------- */
.fx-cur-ld svg{
  top:auto; bottom:0;
  transform-origin:0 100%; transform:scale(0);
  transition:transform .1s cubic-bezier(.22,1,.36,1);
}
.fx-cur-tg .fx-cur-lbl{opacity:0; transition:opacity .08s linear}
/* the datum: where the leader lands on the frame of a control */
.fx-cur-dt{
  position:absolute; left:-1.5px; top:-1.5px; width:3px; height:3px;
  background:var(--fx-cur-ink); outline:.5px solid var(--fx-cur-key);
  opacity:0; transition:opacity .08s linear;
}

/* states -------------------------------------------------------------------
   link    the brackets clamp the control; the sight draws in to a point and
           four short stubs, clear of the words
   label   the same, plus the leader and the tag
   press   the brackets close on the control; the sight tightens */
.fx-cur[data-s="link"] .fx-cur-a b,
.fx-cur[data-s="label"] .fx-cur-a b{transform:scaleX(.3)}

.fx-cur[data-s="label"] .fx-cur-ld svg{transform:scale(1); transition-duration:.14s; transition-delay:.02s}
.fx-cur[data-s="label"] .fx-cur-tg .fx-cur-lbl{opacity:1; transition-duration:.11s; transition-delay:.07s}
.fx-cur[data-s="label"][data-w="1"] .fx-cur-dt{opacity:1; transition-duration:.08s; transition-delay:.02s}

/* over running text the tag stands down (the frame folds away in JS) */
.fx-cur[data-q="1"] .fx-cur-ld svg{transform:scale(0); transition-delay:0s}
.fx-cur[data-q="1"] .fx-cur-tg .fx-cur-lbl,
.fx-cur[data-q="1"][data-s][data-w] .fx-cur-dt{opacity:0; transition-delay:0s}

/* a tag re-hung on a new target: one frame unseen, then it fades in there */
.fx-cur[data-tr="1"] .fx-cur-ld svg{transform:scale(0); transition:none}
.fx-cur[data-tr="1"] .fx-cur-tg .fx-cur-lbl,
.fx-cur[data-tr="1"][data-s][data-w] .fx-cur-dt{opacity:0; transition:none}

.fx-cur[data-press="1"] .fx-cur-a b{transform:scaleX(.5); transition-duration:.08s}
.fx-cur[data-press="1"][data-s="link"] .fx-cur-a b,
.fx-cur[data-press="1"][data-s="label"] .fx-cur-a b{transform:scaleX(.3)}

/* native cursor: off where ours is live, back over text entry and native
   controls (which the reticle hands over to the system) --------------------- */
@media (pointer:fine) and (hover:hover){
  html.fx-cur-on,html.fx-cur-on *{cursor:none !important}
  html.fx-cur-on textarea,
  html.fx-cur-on input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="image"]),
  html.fx-cur-on [contenteditable="true"],
  html.fx-cur-on [contenteditable="true"] *{cursor:text !important}
  html.fx-cur-on select{cursor:pointer !important}
  html.fx-cur-on input[type="checkbox"],
  html.fx-cur-on input[type="radio"],
  html.fx-cur-on input[type="range"],
  html.fx-cur-on input[type="color"],
  html.fx-cur-on input[type="file"]{cursor:default !important}
}

/* the two opt-outs: the site's toggle, and the reader's reduced-motion
   setting (read in JS — a media query here would be retired at boot) */
html[data-motion="off"] .fx-cur,
html[data-motion="off"] .fx-cur *,
.fx-cur[data-rm="1"],
.fx-cur[data-rm="1"] *{transition-duration:0s !important; transition-delay:0s !important}

/* belt and braces: never drawn on a coarse pointer or without hover */
@media (pointer:coarse),(hover:none){ .fx-cur{display:none} }

/* ══════ image-motion ══════ */
/* ═══ SHARP FX · image-motion ══════════════════════════════════════════════
   Photographs and their placeholders: scroll-linked parallax, a 22.5° wipe
   on first sight, a slow hover push on card frames, and a full-screen viewer.
   Zero radius, zero elevation, one theme. No prefers-reduced-motion query —
   the only opt-out is html[data-motion="off"].
   ═════════════════════════════════════════════════════════════════════════ */

/* ── the travelling frame ──────────────────────────────────────────────────
   --fx-oh is written by JS from one constant so the overhang and the maximum
   translate can never drift apart. The img is (100 + oh)% tall and hangs
   oh/2 above the frame, so ±oh/2 of travel is exactly flush. */
.fx-shot{ --fx-oh:10%; }

.fx-shot > img{
  top:calc(var(--fx-oh) / -2);
  bottom:auto;
  height:calc(100% + var(--fx-oh));
  transform:translate3d(0, var(--fx-py, 0%), 0);
  scale:var(--fx-scale, 1);
  transition:scale 1100ms cubic-bezier(.22,.61,.36,1);
}
.fx-shot.fx-live > img{ will-change:transform; }

/* ── first reveal · blur to sharp (owner, 2026-10-19) ────────────────────
   Replaces the 22.5° wipe. A picture arrives out of focus and a touch large
   and settles sharp at its own size: opacity and blur run together here,
   the scale on the img's own transition (--fx-scale, above). Only opacity,
   filter and scale move, never the frame. */
.fx-shot.fx-arm{ --fx-scale:1.06; }
.fx-shot.fx-arm > img,
.fx-shot.fx-arm > .ph{ opacity:0; filter:blur(24px); }
.fx-shot.fx-in > img,
.fx-shot.fx-in > .ph{
  animation:fx-reveal 1150ms cubic-bezier(.22,1,.36,1) both;
}
@keyframes fx-reveal{
  from{ opacity:0; filter:blur(24px); }
  35% { opacity:1; }
  to  { opacity:1; filter:blur(0); }
}
/* the house on the home hero is not revealed this way: it is already there
   when the intro hands over */
.expl-stage .fx-shot.fx-arm > img{ opacity:1; filter:none; }
.expl-stage .fx-shot.fx-in > img{ animation:none; }
@media (hover:hover) and (pointer:fine){
  .pcard:hover .fx-shot, a.cell:hover .fx-shot{ --fx-scale:1.04; }
}
.pcard:focus-visible .fx-shot, a.cell:focus-visible .fx-shot{ --fx-scale:1.04; }

/* ── a frame that opens ────────────────────────────────────────────────────
   Only frames holding a real, loaded photograph get this. Placeholders and
   any frame nested inside a link keep their own behaviour. */
.fx-lb-able{ cursor:zoom-in; }

/* ── the viewer ───────────────────────────────────────────────────────────── */
.fx-lb{
  position:fixed;
  inset:0;
  z-index:400;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:clamp(16px,4vw,56px);
  background:var(--void);
  opacity:0;
  transition:opacity 300ms linear;
  cursor:zoom-out;
  touch-action:none;
  overscroll-behavior:contain;
}
.fx-lb[hidden]{ display:none; }
.fx-lb.fx-lb-on{ opacity:1; }

.fx-lb-f{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:14px;
  width:fit-content;
  max-width:min(1400px, 100%);
  max-height:100%;
  transform:translate3d(0, var(--fx-lb-dy, 0px), 0);
  transition:transform 380ms cubic-bezier(.22,1,.36,1);
}
.fx-lb.fx-lb-drag .fx-lb-f{ transition:none; }
.fx-lb.fx-lb-on .fx-lb-img{ scale:1; }

.fx-lb-img{
  display:block;
  width:auto;
  height:auto;
  max-width:100%;
  max-height:calc(100vh - 200px);
  max-height:calc(100dvh - 200px);
  margin:0 auto;
  border:1px solid var(--rule);
  background:var(--plate);
  scale:.985;
  transition:scale 520ms cubic-bezier(.22,1,.36,1);
}

.fx-lb-cap{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  justify-content:space-between;
  gap:8px 24px;
  width:100%;
  max-width:74ch;
  padding-top:2px;
  border-top:1px solid var(--rule);
}
.fx-lb-nocap .fx-lb-cap{ display:none; }
.fx-lb-t{ font:400 12px/1.5 var(--mono); color:var(--mid); max-width:70ch; padding-top:10px; }
.fx-lb-id{ font:400 9.5px/1.5 var(--mono); letter-spacing:.1em; text-transform:uppercase; color:var(--ghost); padding-top:10px; }

.fx-lb-x{
  position:absolute;
  top:clamp(14px,2.4vw,28px);
  right:clamp(14px,2.4vw,28px);
  z-index:2;
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:11px 15px;
  border:1px solid var(--rule);
  background:var(--void);
  color:var(--mid);
  font:500 10.5px/1 var(--mono);
  letter-spacing:.15em;
  text-transform:uppercase;
  cursor:pointer;
  transition:color .18s, border-color .18s, background .18s;
}
.fx-lb-x i{ font-style:normal; color:var(--dim); }  /* F11: was --ghost, 3.26:1 */
.fx-lb-x:hover{ color:var(--ink); border-color:var(--edge); background:var(--raise); }
.fx-lb-x:hover i{ color:var(--sig); }

html.fx-lb-lock{ overflow:hidden; }
html.fx-lb-lock body{ padding-right:var(--fx-lb-pad, 0px); }

/* ── the one opt-out ──────────────────────────────────────────────────────── */
html[data-motion="off"] .fx-shot > img{
  transform:none;
  scale:1;
  transition:none;
  will-change:auto;
}
html[data-motion="off"] .fx-shot > img,
html[data-motion="off"] .fx-shot > .ph{ clip-path:none; animation:none; }
html[data-motion="off"] .fx-lb,
html[data-motion="off"] .fx-lb-f,
html[data-motion="off"] .fx-lb-img{ transition:none; }
html[data-motion="off"] .fx-lb-img{ scale:1; }