/* base.css - Tony Gunning, Electrical and Technical Services. Phone first (390), composed again from 760 and 1100.
   The page is finished without JavaScript; html.motion (set by motion.js when motion is welcome) adds the arrivals.
   Every colour is a token from tokens.css (the logo's navy, its blue node, its white ground). */

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-padding-top: 16px; }
body {
  margin: 0; background: var(--paper); color: var(--ink);
  font: 400 16px/1.55 var(--font-text);
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
img, svg { display: block; max-width: 100%; }
h1, h2, h3 { font-family: var(--font-display); font-weight: 600; letter-spacing: -.012em; line-height: 1.1; margin: 0; text-wrap: balance; }
p, figure, blockquote { margin: 0; }
a { color: inherit; }
button, input, select { font: inherit; color: inherit; }
main { overflow-x: clip; }
.wrap { width: 100%; max-width: 1240px; margin: 0 auto; padding: 0 var(--pad); }
:focus-visible { outline: 3px solid var(--node); outline-offset: 3px; }
.skip-link { position: absolute; left: -9999px; top: 8px; z-index: 100; background: var(--paper); color: var(--navy); padding: 10px 14px; }
.skip-link:focus { left: 8px; }

/* the enquiry form's trap field: never seen, never tabbed to (FORM_MARKUP.html) */
.md-hp { position: absolute !important; left: -9999px !important; width: 1px !important; height: 1px !important;
         overflow: hidden !important; opacity: 0 !important; clip-path: inset(50%) !important;
         pointer-events: none !important; }

/* ---------- shared pieces ---------- */
/* the eyebrow is a circuit label: a small printed tag with the node beside it */
.tag {
  display: inline-flex; justify-self: start; align-items: center; gap: 8px; margin: 0 0 16px;
  font: 600 13px/1 var(--font-text); letter-spacing: .01em;
  padding: 7px 11px 7px 9px; border-radius: 1px;
  background: var(--paper); color: var(--navy); border: 1px solid var(--wall-line);
}
.tag::after { /* the mark's end node on a short stub of its trace, ahead of the words */
  content: ""; order: -1; flex: none; width: 16px; height: 8px;
  background: radial-gradient(circle at 4px 50%, var(--node) 0 3.2px, transparent 3.8px),
              linear-gradient(var(--node), var(--node)) 6px 50% / 10px 2px no-repeat;
}
.tag--dark { background: var(--navy-lift); color: var(--on-navy); border-color: var(--navy-line); }

/* buttons are illuminated push buttons off a control panel: round-ended, flat, a lamp that is lit at the left end */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 12px;
  min-height: 52px; padding: 13px 26px 13px 22px; border-radius: 999px; border: 0;
  font: 600 18px/1.1 var(--font-display); letter-spacing: .005em; text-decoration: none; cursor: pointer;
  transition: transform .18s var(--ease), box-shadow .18s var(--ease), background-color .18s;
}
.btn:active { transform: translateY(1px); }
.btn__lamp { flex: none; width: 10px; height: 10px; border-radius: 50%; background: var(--node); box-shadow: 0 0 0 3px rgba(42, 120, 236, .22), 0 0 12px rgba(42, 120, 236, .7); }
.btn--navy { background: var(--navy); color: var(--paper); box-shadow: 0 1px 0 var(--navy-deep), 0 10px 22px -12px rgba(16, 35, 72, .7); }
.btn--navy:hover { background: var(--navy-lift); }
.btn--light { background: var(--paper); color: var(--navy); box-shadow: 0 12px 30px -14px rgba(0, 0, 0, .7); }
.btn--light:hover { box-shadow: 0 0 0 3px rgba(42, 120, 236, .45), 0 12px 30px -14px rgba(0, 0, 0, .7); }
.btn--big { font-size: 26px; min-height: 64px; padding: 15px 22px; }

/* a review is a customer's own words, in their own quotation marks */
.quote p { font: 400 16.5px/1.62 var(--font-text); color: var(--ink); }
.quote--dark p { color: var(--on-navy); }
.quote__lead { display: block; margin-bottom: 8px; font: 600 20px/1.3 var(--font-display); letter-spacing: -.005em; color: var(--navy); }
.quote--dark .quote__lead { color: var(--paper); font-size: 22px; }
@media (min-width: 760px) {
  .quote__lead { font-size: 23px; margin-bottom: 10px; }
  .quote--dark .quote__lead { font-size: 27px; }
}
.credit { display: flex; align-items: center; gap: 10px; margin-top: 14px; font: 600 14px/1.3 var(--font-text); color: var(--ink-soft); }
.credit::before { content: ""; width: 22px; height: 2px; background: var(--node); border-radius: 2px; }
.credit--dark { color: var(--on-navy-soft); }

section { position: relative; padding: var(--band) 0; }
section h2 { font-size: 27px; color: var(--navy); }

/* ---------- header (a bar of the logo's own white ground) ---------- */
.hdr { position: relative; z-index: 40; background: var(--paper); border-bottom: 1px solid var(--wall-line); }
.hdr .wrap { display: flex; align-items: center; gap: 8px; height: 64px; }
.brand { display: block; margin-right: auto; }
/* the lockup as sent; the box shows the artwork and some of its own white ground round it */
.brand img { width: min(236px, calc(100vw - 150px)); height: 44px; object-fit: cover; object-position: 50% 50%; }
.hdr__num { display: none; }
.callbtn {
  display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 50%;
  background: var(--navy); color: var(--paper); box-shadow: 0 0 0 3px rgba(42, 120, 236, .18);
}
.burger { width: 44px; height: 44px; border: 1px solid var(--wall-line); border-radius: 50%; background: var(--paper); position: relative; cursor: pointer; padding: 0; }
.burger span, .burger span::before, .burger span::after { position: absolute; left: 13px; right: 13px; height: 2px; background: var(--navy); border-radius: 2px; content: ""; }
.burger span { top: 21px; }
.burger span::before { top: -6px; left: 0; right: 0; }
.burger span::after { top: 6px; left: 0; right: 0; }
.menu { position: absolute; top: 100%; left: 0; right: 0; background: var(--paper); border-bottom: 1px solid var(--wall-line); padding: 12px var(--pad) 20px; box-shadow: 0 18px 30px -20px rgba(16, 35, 72, .5); }
.menu ul { list-style: none; margin: 8px 0 0; padding: 0; }
.menu li a, .menu li span { display: flex; align-items: center; min-height: 44px; font: 600 18px/1 var(--font-display); text-decoration: none; color: var(--navy); }
.menu__num { display: inline-flex; align-items: center; min-height: 44px; font: 600 24px/1 var(--font-display); color: var(--navy); text-decoration: none; }
.quiet { color: var(--ink-soft); }
.num { font-family: var(--font-display); font-weight: 600; text-decoration: none; }
.hdr__send { display: none; }

@media (min-width: 900px) {
  .hdr { position: sticky; top: 0; }
  .hdr .wrap { height: 76px; display: grid; grid-template-columns: 1fr auto 1fr; }
  .brand img { width: 230px; height: 56px; }
  .hdr__num { display: inline-flex; align-items: center; gap: 10px; justify-self: center; font-size: 22px; color: var(--navy); padding: 8px 4px; }
  .hdr__num::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: var(--node); box-shadow: 0 0 10px rgba(42, 120, 236, .8); }
  .callbtn, .burger { display: none; }
  /* on a desktop the menu held only the number: the header's right-hand side is the second route instead */
  .hdr__send { display: inline-flex; justify-self: end; min-height: 46px; padding: 10px 22px 10px 18px; font-size: 17px; }
}

/* ---------- 1. top: the navy ground, the trace, the lamps ---------- */
.top {
  background: var(--navy); color: var(--on-navy); overflow: clip; padding: 26px 0 30px; isolation: isolate;
  display: flex; flex-direction: column; min-height: 81vh; min-height: 81svh;
}
.top__in { flex: 1; display: flex; flex-direction: column; align-items: flex-start; }
.top__traces { position: absolute; inset: 0; width: 100%; height: 100%; z-index: -1; pointer-events: none; }
.top__traces path, .top__traces circle { fill: none; stroke: var(--navy-line); stroke-width: 2; vector-effect: non-scaling-stroke; stroke-linecap: round; }
.top__traces circle { stroke-width: 2.5; }
.top__tag { margin: 0 0 18px; }
.top__h { font-size: 28px; line-height: 1.1; color: var(--paper); max-width: 15ch; }
.top__h .ln { display: inline; }
.top__copy { margin-top: 18px; max-width: 34rem; }
.top__lede { font-size: 16px; color: var(--on-navy); }
.top__where { margin-top: 8px; font-size: 15px; color: var(--on-navy-soft); }
.top__ask { margin: 24px 0 34px; display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.top__link { display: inline-flex; align-items: center; min-height: 44px; font: 600 16px/1.2 var(--font-text); color: var(--node-tint); text-underline-offset: 4px; text-decoration-thickness: 1px; }

/* the proof as indicator lamps hanging off one live trace that enters from the screen's left edge, at the foot of the
   opening on a phone (the headline keeps the top of the screen) */
.lamps { list-style: none; position: relative; margin: auto 0 4px; padding: 0 0 0 34px; display: grid; gap: 10px; }
.lamps::before {               /* the live trace: in from the left edge, round the corner, down the lamps */
  content: ""; position: absolute; top: -16px; right: calc(100% - 13px); width: 60vw; bottom: 21px;
  border-top: 2px solid var(--node); border-right: 2px solid var(--node); border-top-right-radius: 14px;
}
.lamps li { position: relative; display: flex; align-items: center; }
.lamps li::before { content: ""; position: absolute; left: -22px; width: 18px; top: 50%; height: 2px; margin-top: -1px; background: var(--node); }
.lamps__lamp {
  position: absolute; left: -28px; top: 50%; width: 16px; height: 16px; margin-top: -8px; border-radius: 50%; z-index: 1;
  background: var(--node-glow); border: 2px solid var(--node);
  box-shadow: 0 0 0 4px rgba(42, 120, 236, .22), 0 0 16px 2px rgba(143, 192, 255, .75);
}
.lamps__chip {
  display: inline-flex; align-items: baseline; gap: 6px; padding: 9px 13px; border-radius: var(--radius);
  background: var(--navy-deep); border: 1px solid var(--navy-line);
  font: 500 14.5px/1.3 var(--font-text); color: var(--on-navy);
}
.lamps__chip strong { font: 600 16px/1 var(--font-display); color: var(--paper); }

@media (min-width: 760px) {
  /* composed for the wide screen: one centred panel, the live trace straight across its foot with the lamps on it */
  .top { padding: 56px 0 0; min-height: min(calc(100vh - 76px), 860px); }
  .top__in { align-items: center; text-align: center; }
  .top__tag { margin: auto 0 22px; }
  .top__h { font-size: clamp(40px, 5.2vw, 66px); max-width: none; }
  .top__h .ln { display: block; white-space: nowrap; }
  .top__copy { margin: 22px auto 0; max-width: 40rem; }
  .top__lede { font-size: 18px; }
  .top__where { font-size: 16px; }
  .top__ask { flex-direction: row; justify-content: center; align-items: center; gap: 22px; margin: 32px 0 auto; }
  .btn--big { font-size: 30px; min-height: 70px; padding: 16px 28px; }
  .lamps { display: flex; flex-wrap: wrap; justify-content: center; gap: 18px 26px; margin: 56px 0 0; padding: 0 0 46px; text-align: left; }
  .lamps::before { top: 0; left: -50vw; right: -50vw; width: auto; bottom: auto; height: 0; border-right: 0; border-radius: 0; }
  .lamps li { padding-top: 30px; }
  .lamps li::before { left: 18px; top: 0; width: 2px; height: 30px; margin: 0; }
  .lamps__lamp { left: 11px; top: 0; margin-top: -8px; }
  .lamps__chip { padding: 12px 16px; font-size: 15.5px; }
  .lamps__chip strong { font-size: 18px; }
}
@media (min-width: 760px) and (max-width: 1099px) {
  .lamps { gap: 14px; }
  .lamps__chip { padding: 10px 12px; font-size: 14.5px; }
  .lamps__chip strong { font-size: 16px; }
}
@media (min-width: 1100px) {
  .top { padding-top: 72px; }
}

/* ---------- 2. board: the consumer unit (the signature) ---------- */
/* the board is the section's hero: near full bleed on a phone, the full width of the page above its open job on a
   tablet and desktop, with a lit wire from the switch that is on down into the review it opens */
.board { background: var(--wall); }
.board__in { position: relative; }
.board__head h2 { max-width: 20ch; }
.board__head p:last-child { margin-top: 12px; color: var(--ink-soft); max-width: 36rem; }
.cu-wrap { position: relative; margin: 26px -12px 0; perspective: 1000px; }
.cu__hint { display: flex; align-items: center; gap: 8px; margin: 0 12px 10px; font: 600 14px/1.3 var(--font-text); color: var(--node-deep); }
.cu__hint::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--node); box-shadow: 0 0 8px rgba(42, 120, 236, .8); }
.cu {
  position: relative; z-index: 1; background: linear-gradient(180deg, #fff 0%, #f3f6fb 100%); border-radius: 12px; padding: 12px 10px 14px;
  box-shadow: 0 1px 0 #fff inset, 0 0 0 1px var(--wall-line), 0 2px 3px rgba(16, 35, 72, .08), 0 26px 44px -24px rgba(16, 35, 72, .6);
  transform-style: preserve-3d;
}
/* the shadow the board throws on the wall: it grows as the board comes forward */
.cu__shadow { position: absolute; z-index: 0; left: 8%; right: 8%; bottom: -16px; height: 40px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(16, 35, 72, .42), rgba(16, 35, 72, 0)); }
.cu__top { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 2px 4px 10px; }
.cu__screw { width: 10px; height: 10px; border-radius: 50%; background: radial-gradient(circle at 40% 35%, #fff, #c3cddd 70%); box-shadow: inset 0 0 0 1px #b4c0d3; position: relative; }
.cu__screw::after { content: ""; position: absolute; left: 2px; right: 2px; top: 4px; height: 1.5px; background: #9aa8bf; transform: rotate(35deg); }
.cu__plate { flex: 1; height: 8px; border-radius: 2px; background: repeating-linear-gradient(90deg, #e3e9f3 0 18px, transparent 18px 22px); }
.cu__bay { position: relative; border-radius: 6px; background: var(--navy-deep); padding: 8px; box-shadow: inset 0 3px 8px rgba(0, 0, 0, .55); transform-style: preserve-3d; }
.cu__rail { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.cu__din, .cu__blank { display: none; }
.cu__foot { display: flex; gap: 6px; padding: 10px 4px 0; }
.cu__foot span { flex: 1; height: 6px; border-radius: 2px; background: #e3e9f3; }

/* one switch = one job: a module with a lamp window, a lever in its slot and a printed label */
.sw, .mod {
  position: relative; display: flex; flex-direction: column; align-items: center; gap: 10px;
  min-height: 178px; padding: 12px 4px 10px; border-radius: 4px;
  background: linear-gradient(180deg, #ffffff 0%, #eef2f8 100%); border: 1px solid #ccd6e5;
  box-shadow: 0 1px 0 #fff inset, 0 2px 0 #b9c5d8;
}
.sw { cursor: pointer; -webkit-tap-highlight-color: transparent; transition: transform .2s var(--ease); }
.sw:active { transform: translateY(1px); }
.sw__lamp, .mod__win { width: 32px; height: 10px; border-radius: 2px; background: #c5cfde; box-shadow: inset 0 1px 2px rgba(16, 35, 72, .35); transition: background-color .1s, box-shadow .1s; }
.sw__slot, .mod__slot { position: relative; width: 36px; height: 74px; border-radius: 4px; background: #1b2a48; box-shadow: inset 0 2px 5px rgba(0, 0, 0, .6); }
.sw__lever, .mod__lever {
  position: absolute; left: 3px; right: 3px; top: 3px; height: 33px; border-radius: 3px;
  background: linear-gradient(180deg, #ffffff, #dfe6f1); box-shadow: 0 2px 0 #9fb0c9, 0 4px 6px rgba(0, 0, 0, .35);
  transform: translateY(35px); transition: transform .16s var(--snap);
}
.sw__lever::before, .mod__lever::before { content: ""; position: absolute; left: 7px; right: 7px; top: 10px; height: 9px; background: repeating-linear-gradient(180deg, #b8c4d6 0 1.5px, transparent 1.5px 3px); }
.mod__lever { transform: none; }
.sw__label { margin-top: auto; font: 600 13px/1.2 var(--font-text); color: var(--navy); text-align: center; text-wrap: balance; }
.sw.is-on .sw__lever, html:not(.js) .sw .sw__lever { transform: translateY(0); }
.sw.is-on .sw__lamp, html:not(.js) .sw .sw__lamp, .mod--main .mod__win { background: var(--node-glow); box-shadow: 0 0 0 1px var(--node), 0 0 14px 3px rgba(42, 120, 236, .85); }
.sw[aria-pressed="true"] { border-color: var(--node); box-shadow: 0 0 0 2px var(--node), 0 2px 0 #b9c5d8, 0 10px 22px -6px rgba(42, 120, 236, .55); }
.sw.flick .sw__lamp { animation: flick .26s steps(1) 1; }
@keyframes flick { 0% { opacity: .2; } 25% { opacity: 1; } 45% { opacity: .35; } 65%, 100% { opacity: 1; } }
/* the modules every real board has (drawn from a tablet up): the double-width main switch, on; the RCD with its test
   button; blanking plates where the spare ways are */
.mod--main { width: 112px; }
.mod--main .mod__slot { width: 64px; }
.mod--rcd { width: 80px; }
.mod__test { width: 24px; height: 24px; border-radius: 3px; background: var(--wall); border: 1px solid #b6c3d8; display: grid; place-items: center; }
.mod__test::after { content: "T"; font: 700 12px/1 var(--font-display); color: var(--navy); }
.mod--blank { width: 62px; background: repeating-linear-gradient(180deg, #f4f7fb 0 6px, #e9eef6 6px 7px); }

/* the smoked front cover: a tinted lid on its own plane that hinges up off the board as the section arrives
   (motion.js sets --lift 0..1 from the scroll); the switches sit back on the rail behind it */
.cu__cover {
  position: absolute; inset: -5px; z-index: 3; border-radius: 8px; pointer-events: none; display: none; overflow: hidden;
  background: linear-gradient(172deg, rgba(164, 203, 247, .42) 0%, rgba(26, 50, 99, .62) 38%, rgba(10, 23, 48, .82) 100%);
  border: 1px solid rgba(255, 255, 255, .65); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), 0 12px 26px rgba(10, 23, 48, .4);
  transform-origin: 50% 0; backface-visibility: hidden;
}
.cu__glint { position: absolute; inset: 0; background: linear-gradient(112deg, transparent 28%, rgba(255, 255, 255, .38) 40%, transparent 52%); }
html.motion .cu__cover {
  display: block;
  transform: rotateX(calc(var(--lift, 1) * 82deg)) translateZ(calc(var(--lift, 1) * 34px));
  opacity: calc(1 - var(--lift, 1) * var(--lift, 1));
}
html.motion .cu__glint { transform: translateX(calc(var(--lift, 1) * 70%)); }
html.motion .cu { transform: translateY(calc((1 - var(--lift, 1)) * 34px)) rotateX(calc((1 - var(--lift, 1)) * 16deg)); }
html.motion .cu__rail { transform: translateZ(calc(var(--lift, 1) * 14px)); }
html.motion .cu__shadow { opacity: calc(.25 + var(--lift, 1) * .75); transform: scaleX(calc(.7 + var(--lift, 1) * .3)) translateY(calc((1 - var(--lift, 1)) * 18px)); }

/* the wire: from the switch that is on, glowing, down into the job it opens (site.js measures it live) */
.wire {
  position: absolute; z-index: 4; left: var(--wx, 0px); top: var(--wy, 0px); width: 2px; height: var(--wh, 0px); display: none;
  background: var(--node); box-shadow: 0 0 10px 1px rgba(42, 120, 236, .75); pointer-events: none;
  transform-origin: 50% 0; transform: scaleY(0); opacity: 0;
}
.wire::after { content: ""; position: absolute; left: -5px; bottom: -6px; width: 12px; height: 12px; border-radius: 50%; background: var(--node-glow); box-shadow: 0 0 0 2px var(--node), 0 0 12px rgba(42, 120, 236, .9); }
.js .wire { display: block; }
.wire.is-live { transform: scaleY(1); opacity: 1; transition: transform .26s var(--ease), opacity .08s; }
html.motion .wire.is-live { opacity: calc((var(--lift, 1) - .9) * 10); }

/* the panels: one open at a time (JS sets hidden); with no JavaScript all four are stacked and read */
.panels { position: relative; margin-top: 30px; }
.panel {
  position: relative; background: var(--paper); border-radius: 6px; padding: 22px 20px 22px;
  border-top: 3px solid var(--node); box-shadow: 0 0 0 1px var(--wall-line), 0 18px 30px -24px rgba(16, 35, 72, .6);
}
.panel + .panel { margin-top: 14px; }
.panel h3 { font-size: 21px; color: var(--navy); margin-bottom: 12px; max-width: 24ch; }
.panel__big { font: 500 18px/1.5 var(--font-text); color: var(--navy); }
.panel--rest p + p { margin-top: 12px; color: var(--ink-soft); }
.js .panel[hidden] { display: none; }
.panel.is-in { animation: panel-in .3s var(--ease) both; }
@keyframes panel-in { from { opacity: 0; transform: translateX(26px); } to { opacity: 1; transform: none; } }
.board__call { margin-top: 24px; }

@media (min-width: 760px) {
  .board__head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 0 44px; align-items: end; }
  .board__head .tag, .board__head h2 { grid-column: 1; }
  .board__head .tag { justify-self: start; }
  .board__head h2 { font-size: clamp(32px, 3.6vw, 46px); }
  .board__head p:last-child { grid-column: 2; grid-row: 2; margin: 0; font-size: 17px; }
  .cu-wrap { margin: 36px 0 0; max-width: 1060px; }
  .cu__hint { margin: 0 0 12px; }
  .cu { padding: 16px 16px 18px; border-radius: 14px; }
  .cu__bay { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 8px; padding: 10px; }
  .cu__din { display: flex; gap: 8px; padding-right: 8px; border-right: 2px solid #22345a; }
  .cu__rail { gap: 8px; }
  .sw, .mod { min-height: 196px; }
  .sw__label { font-size: 14px; }
  .panels { margin-top: 36px; max-width: 1060px; }
  .panel { padding: 30px 32px 28px; }
  .panel h3 { font-size: 26px; }
  .quote p { font-size: 17.5px; }
}
@media (min-width: 1100px) {
  .board__head { gap: 0 72px; }
  .cu__bay { grid-template-columns: auto minmax(0, 1fr) auto; }
  .cu__blank { display: flex; gap: 8px; padding-left: 8px; border-left: 2px solid #22345a; }
  .sw, .mod { min-height: 212px; }
  .sw__slot, .mod__slot { height: 84px; width: 40px; }
  .mod--main .mod__slot { width: 70px; }
  .sw__lever, .mod__lever { height: 38px; }
  .sw__lever { transform: translateY(40px); }
  .sw__label { font-size: 15px; }
  .panel { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.7fr); gap: 0 44px; padding: 34px 40px 32px; }
  .panel h3 { grid-column: 1; grid-row: 1 / span 2; margin: 0; }
  .panel > :not(h3) { grid-column: 2; }
}

/* ---------- 3. paperwork: a certificate filling in ---------- */
.paper { background: var(--paper); }
.paper__copy h2 { max-width: 19ch; }
.paper__lede { margin-top: 16px; font: 500 19px/1.45 var(--font-text); color: var(--navy); max-width: 32rem; }
.paper__copy p + p { margin-top: 12px; }
.paper__copy p:not(.paper__lede):not(.tag) { color: var(--ink-soft); max-width: 34rem; }
.paper__copy .paper__lead-in { color: var(--navy); font-weight: 600; }
.paper__review { margin-top: 22px; padding-left: 18px; border-left: 2px solid var(--wall-line); }
.quote--long p { font-size: 16.5px; }
/* the review's own words for each row, underlined as the row ticks (finished when motion is off) */
.quote mark { background: linear-gradient(var(--node), var(--node)) 0 100% / 100% 2px no-repeat; color: inherit; padding-bottom: 1px; }
html.motion .quote mark { background-size: 0 2px; transition: background-size .4s var(--ease); }
html.motion .paper.is-run mark { background-size: 100% 2px; }
html.motion .paper.is-run mark[data-mark="1"] { transition-delay: .2s; }
html.motion .paper.is-run mark[data-mark="3"] { transition-delay: .76s; }
html.motion .paper.is-run mark[data-mark="4"] { transition-delay: 1.04s; }

/* the certificate: a document on its letterhead (the logo as sent), a folded corner, four rows and the node's stamp */
.cert-wrap { margin-top: 26px; }
.cert {
  position: relative; background: var(--paper); border-radius: 4px 0 4px 4px; padding: 16px 18px 18px;
  border: 1px solid var(--wall-line); border-top: 6px solid var(--navy);
  background-image: repeating-linear-gradient(180deg, transparent 0 31px, #eef2f8 31px 32px);
  box-shadow: 0 30px 50px -30px rgba(16, 35, 72, .55), 0 2px 4px rgba(16, 35, 72, .06);
}
.cert::after { /* the folded top corner */
  content: ""; position: absolute; top: -6px; right: -1px; width: 30px; height: 30px;
  background: linear-gradient(225deg, var(--paper) 0 50%, #d9e1ee 50% 100%);
  box-shadow: -3px 3px 6px -3px rgba(16, 35, 72, .35);
}
.cert__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 30px 12px 0; margin-bottom: 4px; border-bottom: 2px solid var(--navy); background: var(--paper); }
.cert__head img { width: 150px; height: 34px; object-fit: cover; }
.cert__head span { flex: none; width: 26%; height: 8px; border-radius: 2px; background: var(--wall); }
.cert__rows { list-style: none; margin: 0; padding: 0; }
.cert__row { display: flex; align-items: center; justify-content: space-between; gap: 14px; min-height: 52px; border-bottom: 1px dashed var(--wall-line); }
.cert__row:last-child { border-bottom: 0; }
.cert__label { font: 600 17px/1.2 var(--font-display); color: var(--navy); }
.cert__box { flex: none; width: 30px; height: 30px; }
.cert__box rect { fill: var(--paper); stroke: var(--node); stroke-width: 2; }
.cert__box path { fill: none; stroke: var(--node); stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 0; }
.cert__sign { margin-top: 12px; display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.cert__line { width: 46%; height: 2px; background: var(--wall-line); }
.cert__stamp {
  position: relative; display: grid; place-items: center; width: 52px; height: 52px; border-radius: 50%;
  border: 3px solid var(--node); box-shadow: inset 0 0 0 4px var(--paper), inset 0 0 0 5px rgba(42, 120, 236, .45); transform: rotate(-10deg);
}
.cert__stamp span { width: 14px; height: 14px; border-radius: 50%; background: var(--node-glow); box-shadow: 0 0 0 2px var(--node), 0 0 12px rgba(42, 120, 236, .85); }
/* motion: the rows tick one after another once, as the card comes into view, then the stamp lands (motion.js adds .is-run
   to the section) - a short run, never a half-drawn tick left on screen */
html.motion .cert__box rect { stroke: var(--wall-line); transition: stroke .2s; }
html.motion .cert__box path { stroke-dashoffset: 1; transition: stroke-dashoffset .26s var(--ease); }
html.motion .is-run .cert__box rect { stroke: var(--node); }
html.motion .is-run .cert__box path { stroke-dashoffset: 0; }
html.motion .is-run .cert__row:nth-child(2) .cert__box * { transition-delay: .28s; }
html.motion .is-run .cert__row:nth-child(3) .cert__box * { transition-delay: .56s; }
html.motion .is-run .cert__row:nth-child(4) .cert__box * { transition-delay: .84s; }
html.motion .cert__stamp { opacity: 0; transform: rotate(-10deg) scale(1.6); transition: opacity .16s 1.12s, transform .3s var(--snap) 1.12s; }
html.motion .is-run .cert__stamp { opacity: 1; transform: rotate(-10deg) scale(1); }
html.motion .paper:not(.is-run) .cert__stamp { transition: none; }
html.motion .cert { transform: translateY(calc((1 - var(--rise, 1)) * 70px)) rotate(calc((1 - var(--rise, 1)) * -2deg)); opacity: calc(.25 + var(--rise, 1) * .75); }

@media (min-width: 760px) {
  .paper__in { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr); gap: 0 48px; align-items: start; }
  .paper__copy { grid-column: 1; }
  .paper__copy h2 { font-size: clamp(32px, 3.6vw, 46px); }
  .paper__review { grid-column: 1; margin-top: 30px; padding-left: 26px; }
  .quote--long p { font-size: 18px; }
  .cert-wrap { grid-column: 2; grid-row: 1 / span 2; margin-top: 8px; position: sticky; top: 110px; }
  .cert { padding: 22px 26px 26px; }
  .cert__head img { width: 190px; height: 42px; }
  .cert__label { font-size: 19px; }
  .cert__row { min-height: 62px; }
}
@media (min-width: 1100px) {
  .paper__in { gap: 0 90px; }
}

/* ---------- 4. behind: the person and the price, the business strip ---------- */
.behind { background: var(--navy); color: var(--on-navy); overflow: clip; }
.behind h2 { color: var(--paper); max-width: 18ch; }
.count { font-variant-numeric: tabular-nums; color: var(--node-tint); }
.cable { position: relative; margin-top: 24px; padding-left: 28px; }
.cable::before { content: ""; position: absolute; left: 6px; top: 8px; bottom: 30px; width: 2px; background: var(--node); transform-origin: 50% 0; transform: scaleY(var(--draw, 1)); }
.cable__node { position: relative; }
.cable__node::before { content: ""; position: absolute; left: -28px; top: 6px; width: 14px; height: 14px; border-radius: 50%; background: var(--navy); border: 2px solid var(--node); }
.cable__node + .cable__node { margin-top: 18px; }
.cable > p { color: var(--on-navy); }
.cable > p + p { color: var(--on-navy); font: 500 18px/1.45 var(--font-text); }
.behind__review { margin-top: 26px; }
.behind__review .quote p { font: 500 19px/1.5 var(--font-text); }
.cable__node.behind__review::before { background: var(--node-glow); box-shadow: 0 0 12px rgba(42, 120, 236, .8); }

.biz {
  position: relative; margin-top: 34px; padding: 24px 20px 20px; border-radius: 6px;
  background: var(--navy-lift); border: 1px solid var(--navy-line);
}
.biz::before { /* a data cable along its top edge: dashed, quieter than the live trace */
  content: ""; position: absolute; left: 20px; right: 20px; top: -1px; height: 2px;
  background: repeating-linear-gradient(90deg, var(--node-tint) 0 10px, transparent 10px 16px);
}
.biz h3 { font-size: 20px; color: var(--paper); margin-bottom: 10px; }
.biz p { font-size: 15px; color: var(--on-navy-soft); }
.biz p + p { margin-top: 10px; }
.biz__link { display: inline-flex; align-items: center; min-height: 44px; margin-top: 8px; font: 600 16px/1.2 var(--font-text); color: var(--node-tint); text-underline-offset: 4px; }
html.motion .biz { transform: translate3d(calc((1 - var(--slide, 1)) * 60px), 0, 0); opacity: calc(.3 + var(--slide, 1) * .7); }

@media (min-width: 760px) {
  .behind__in { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, .8fr); gap: 0 48px; align-items: end; }
  .behind h2 { font-size: clamp(34px, 4vw, 52px); }
  .cable { margin-top: 34px; }
  .cable > p { font-size: 17px; max-width: 34rem; }
  .cable > p + p { font-size: 20px; }
  .behind__review .quote p { font-size: 22px; max-width: 30rem; }
  .biz { margin-top: 0; padding: 30px 28px 24px; }
}
@media (min-width: 1100px) {
  .behind__in { gap: 0 96px; }
}

/* ---------- 5. ask: the smart form on its own plane ---------- */
.ask { background: var(--wall); }
.ask__copy h2 { max-width: 16ch; }
.ask__copy p { margin-top: 14px; max-width: 30rem; }
.ask__copy .ask__where { color: var(--ink-soft); margin-top: 10px; }
.ask__copy .btn { margin-top: 22px; }
.ask__card {
  position: relative; margin-top: 30px; background: var(--paper); border-radius: 8px; padding: 22px 18px 22px;
  border-top: 4px solid var(--navy);
  box-shadow: 0 0 0 1px var(--wall-line), 0 34px 60px -34px rgba(16, 35, 72, .6);
}
html.motion .ask__card { transform: translate3d(0, calc((1 - var(--rise, 1)) * 80px), 0) scale(calc(.96 + var(--rise, 1) * .04)); }
.ask__card form { margin: 0; }
.smart__bar { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 10px; margin-bottom: 18px; }
.smart__count { font: 600 14px/1 var(--font-text); color: var(--ink-soft); }
.smart__lamps { display: flex; gap: 8px; }
.smart__lamps span { width: 12px; height: 12px; border-radius: 50%; background: var(--wall); box-shadow: inset 0 0 0 2px var(--wall-line); transition: background-color .2s, box-shadow .2s; }
.smart__lamps span.is-lit { background: var(--node-glow); box-shadow: 0 0 0 2px var(--node), 0 0 10px rgba(42, 120, 236, .8); }
.smart__track { grid-column: 1 / -1; height: 3px; border-radius: 3px; background: var(--wall); overflow: hidden; }
.smart__fill { display: block; height: 100%; background: var(--node); transform-origin: 0 50%; transform: scaleX(var(--fill, 0)); transition: transform .35s var(--ease); }
.step { border: 0; margin: 0; padding: 0; min-width: 0; }
.step + .step { margin-top: 26px; }
.js .smart-on .step + .step { margin-top: 0; }
.step:focus { outline: none; }
.step__q { padding: 0; margin-bottom: 14px; font: 600 23px/1.15 var(--font-display); color: var(--navy); }
.choices { display: grid; gap: 8px; }
.choice { position: relative; display: flex; align-items: center; gap: 12px; min-height: 52px; padding: 10px 14px; border-radius: var(--radius); background: var(--paper); border: 1px solid var(--wall-line); cursor: pointer; transition: border-color .15s, background-color .15s; }
.choice:hover { border-color: #9fb3d3; }
.choice input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.choice__lamp { flex: none; width: 14px; height: 14px; border-radius: 50%; background: var(--wall); box-shadow: inset 0 0 0 2px #b6c3d8; transition: background-color .15s, box-shadow .15s; }
.choice__t { font: 500 16px/1.3 var(--font-text); color: var(--navy); }
.choice:has(input:checked) { border-color: var(--node); background: #f3f7fe; box-shadow: 0 0 0 1px var(--node); }
.choice input:checked + .choice__lamp { background: var(--node-glow); box-shadow: 0 0 0 2px var(--node), 0 0 10px rgba(42, 120, 236, .8); }
.choice input:focus-visible + .choice__lamp { outline: 3px solid var(--node); outline-offset: 3px; }
.field { display: block; margin-top: 12px; }
.field__l { display: block; margin-bottom: 6px; font: 600 15px/1.3 var(--font-text); color: var(--navy); }
.field input, .field select {
  display: block; width: 100%; min-height: 52px; padding: 12px 14px; border-radius: var(--radius);
  border: 1px solid #9fb0c9; background: var(--paper); color: var(--ink); font-size: 17px;
}
.field input:focus, .field select:focus { outline: 3px solid rgba(42, 120, 236, .45); outline-offset: 0; border-color: var(--node); }
.field--quiet .field__l { font-weight: 500; color: var(--ink-soft); font-size: 14px; }
.field--quiet select { min-height: 48px; font-size: 15px; }
.step__err { margin-top: 10px; padding: 8px 12px; border-left: 3px solid #b3261e; background: #fdf1f0; font: 600 14.5px/1.35 var(--font-text); color: #8c1d18; }
.step [aria-invalid="true"] { border-color: #b3261e; }
.smart__note { margin-top: 14px; font-size: 14px; color: var(--ink-soft); }
.smart__send { margin-top: 14px; width: 100%; }
.smart__nav { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 20px; }
.smart__back { min-height: 48px; min-width: 64px; padding: 10px 6px; background: none; border: 0; font: 600 16px/1 var(--font-text); color: var(--node-deep); text-decoration: underline; text-underline-offset: 4px; cursor: pointer; }
.smart__back[hidden] { display: inline-block; visibility: hidden; }
.smart__next { min-width: 132px; }
.smart__next[hidden] { display: none; }
.smart__done { padding: 6px 0; }
.smart__done:focus { outline: none; }
.smart__done-lamp { display: block; width: 18px; height: 18px; border-radius: 50%; margin-bottom: 14px; background: var(--node-glow); box-shadow: 0 0 0 3px var(--node), 0 0 18px rgba(42, 120, 236, .9); }
.smart__thanks { font: 600 22px/1.25 var(--font-display); color: var(--navy); }
.smart__done p + p { margin-top: 10px; }
.smart__done a, .smart__fail a { color: var(--node-deep); font-weight: 600; }
.smart__preview { font-size: 14px; color: var(--ink-soft); }
.smart__fail { padding: 12px 14px; border-left: 3px solid #b3261e; background: #fdf1f0; color: #8c1d18; font-weight: 600; }
.smart__status { margin-top: 12px; }
.smart__hurry { margin-top: 10px; padding-top: 6px; border-top: 1px solid var(--wall); font-size: 15px; color: var(--ink-soft); }
.smart__hurry a { display: inline-flex; align-items: center; min-height: 44px; font-weight: 600; color: var(--node-deep); text-underline-offset: 3px; }
/* steps arrive in reading order */
html.motion .step.is-in .choice, html.motion .step.is-in .field { animation: choice-in .34s var(--ease) both; animation-delay: calc(var(--i, 0) * 45ms); }
@keyframes choice-in { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }

@media (min-width: 760px) {
  .ask__copy h2 { font-size: clamp(32px, 3.6vw, 46px); max-width: 18ch; }
  .ask__copy p { font-size: 17px; max-width: 34rem; }
  .ask__card { max-width: 640px; padding: 30px; }
  .choices { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 1000px) {
  .ask__in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: 56px; align-items: start; }
  .ask__copy { position: sticky; top: 110px; }
  .ask__card { margin-top: 0; max-width: none; }
}
@media (min-width: 1100px) {
  .ask__in { gap: 88px; }
}

/* ---------- rail: the call, once the opening's button has gone (phone only) ---------- */
/* a strip across the foot of the screen, the node's live line along its top edge; two push buttons like the page's own */
.rail {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50; display: grid; grid-template-columns: 1.5fr 1fr; gap: 6px;
  padding: 8px 10px calc(8px + env(safe-area-inset-bottom, 0px)); background: var(--navy-deep);
  border-top: 2px solid var(--node); box-shadow: 0 -14px 30px -16px rgba(10, 23, 48, .7);
  transform: translateY(115%); transition: transform .3s var(--ease);
}
.rail[hidden] { display: none; }
.rail.show { transform: none; }
.rail a {
  display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 48px; padding: 0 10px; text-decoration: none;
  font: 600 16px/1.1 var(--font-display); white-space: nowrap; border-radius: 999px;
}
.rail__call { background: var(--paper); color: var(--navy); }
.rail__send { background: var(--navy-lift); color: var(--on-navy); }
.consent-pending .rail { bottom: var(--consent-h, 0px); }
@media (min-width: 900px) { .rail { display: none !important; } }

/* ---------- consent ---------- */
.consent {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; padding: 14px var(--pad) 16px;
  background: var(--paper); color: var(--ink); border-top: 3px solid var(--navy); box-shadow: 0 -12px 30px -18px rgba(16, 35, 72, .6);
  font-size: 14px; line-height: 1.45;
}
.consent[hidden] { display: none; }
.consent__actions { display: flex; gap: 10px; margin-top: 10px; }
.consent__actions button { flex: 1; min-height: 46px; border-radius: var(--radius); font: 600 15px/1 var(--font-text); cursor: pointer; border: 1px solid var(--navy); background: var(--paper); color: var(--navy); }
.consent__actions button:first-child { background: var(--navy); color: var(--paper); }
@media (min-width: 900px) {
  .consent { left: auto; right: 20px; bottom: 20px; max-width: 420px; border-radius: 8px; border: 1px solid var(--wall-line); border-top: 3px solid var(--navy); }
}

/* ---------- footer ---------- */
.foot { background: var(--navy-deep); color: var(--on-navy-soft); padding: 40px 0 44px; font-size: 14.5px; position: relative; }
.foot::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: linear-gradient(90deg, var(--node) 0 40%, var(--navy-line) 40%); }
.foot .wrap { display: grid; gap: 10px; }
.foot__brand { display: grid; gap: 14px; justify-items: start; }
.foot__plate { display: block; background: var(--paper); border-radius: 6px; padding: 6px 10px; }
.foot__plate img { width: 200px; height: 46px; object-fit: cover; }
.foot .num { font-size: 26px; color: var(--paper); }
.foot p { margin: 0; }
.foot a { color: var(--on-navy); }
.foot__social a { display: inline-flex; align-items: center; min-height: 44px; margin-right: 16px; }
.foot__nav ul { list-style: none; margin: 0; padding: 0; display: flex; gap: 18px; }
.foot__nav a, .foot__nav span { display: inline-flex; align-items: center; min-height: 44px; }
.foot__legal { display: grid; gap: 6px; font-size: 13.5px; }
.foot__legal a { display: inline-block; padding: 12px 0; }
@media (min-width: 900px) {
  .foot { padding-bottom: 48px; }
  .foot .wrap { grid-template-columns: 1.2fr .8fr 1.4fr; align-items: start; gap: 26px; }
}

/* ---------- legal pages and the 404 share this sheet ---------- */
.legal-page { padding: 40px 0 64px; }
.legal-page .wrap { max-width: 760px; }
.legal-page h1 { font-size: 34px; color: var(--navy); margin-bottom: 18px; }
.legal-page h2 { font-size: 22px; color: var(--navy); margin: 30px 0 10px; }
.legal-page p { margin: 0 0 14px; color: var(--ink); }
.legal-page a { color: var(--node-deep); }
.legal-page code { font-size: .92em; background: var(--wall); padding: 1px 5px; border-radius: 3px; }
.page-404 #not-found { padding: 60px 0 80px; }
.page-404 h1 { font-size: 34px; color: var(--navy); }
.page-404 p { margin: 12px 0 18px; }
.page-404 .num { font-size: 28px; color: var(--navy); }

/* ---------- arrivals (motion.js adds html.motion, then .in on each [data-reveal] as it nears) ---------- */
html.motion [data-reveal] > * { transition: opacity .38s var(--ease), transform .45s var(--ease); }
html.motion [data-reveal]:not(.in) > * { opacity: 0; transform: translate3d(-18px, 0, 0); }
html.motion [data-reveal].in > *:nth-child(2) { transition-delay: .05s; }
html.motion [data-reveal].in > *:nth-child(3) { transition-delay: .1s; }
html.motion [data-reveal].in > *:nth-child(n+4) { transition-delay: .15s; }
/* the tag is a label pressed on: it opens from its node */
html.motion [data-reveal] > .tag { transform-origin: 0 50%; }
html.motion [data-reveal]:not(.in) > .tag { transform: scaleX(.2); }
/* the long quotes rise from a mask */
html.motion .paper__review:not(.in) > * { transform: translate3d(0, 22px, 0); }
/* paperwork: its lines are ruled in left to right, like a form being filled */
html.motion [data-reveal="rule"] > * { transition: clip-path .5s var(--ease), opacity .2s; }
html.motion [data-reveal="rule"]:not(.in) > *, html.motion [data-reveal="rule"]:not(.in) > .tag { opacity: 1; transform: none; clip-path: inset(0 100% 0 0); }
html.motion [data-reveal="rule"].in > * { clip-path: inset(0 0 0 0); }
html.motion [data-reveal="rule"].in > *:nth-child(2) { transition-delay: .07s; }
html.motion [data-reveal="rule"].in > *:nth-child(3) { transition-delay: .14s; }
html.motion [data-reveal="rule"].in > *:nth-child(4) { transition-delay: .21s; }
html.motion [data-reveal="rule"].in > *:nth-child(5) { transition-delay: .28s; }
/* behind: the heading powers on like a lamp, with the count */
html.motion [data-reveal="power"] > * { transition: none; }
html.motion [data-reveal="power"]:not(.in) > *, html.motion [data-reveal="power"]:not(.in) > .tag { opacity: 0; transform: none; }
html.motion [data-reveal="power"].in > * { animation: power-on .4s steps(1) both; }
html.motion [data-reveal="power"].in > h2 { animation-delay: .08s; }
@keyframes power-on { 0% { opacity: 0; } 20% { opacity: 1; } 34% { opacity: .3; } 52%, 100% { opacity: 1; } }
/* ask: the words come up in place and the call button's lamp lights last */
html.motion [data-reveal="lit"]:not(.in) > *, html.motion [data-reveal="lit"]:not(.in) > .tag { opacity: 0; transform: scale(.97); }
html.motion [data-reveal="lit"] > * { transform-origin: 0 50%; }
html.motion [data-reveal="lit"] .btn__lamp { transition: background-color .15s .5s, box-shadow .15s .5s; }
html.motion [data-reveal="lit"]:not(.in) .btn__lamp { background: var(--navy-lift); box-shadow: none; }

/* the opening (html.hero-anim, set in the head before first paint unless reduced motion is asked) */
.hero-anim .top__traces path { stroke-dasharray: 1; stroke-dashoffset: 1; animation: trace 1s var(--ease) forwards; }
.hero-anim .top__traces path:nth-child(2) { animation-delay: .08s; }
.hero-anim .top__traces path:nth-child(3) { animation-delay: .16s; }
.hero-anim .top__traces path:nth-child(4) { animation-delay: .1s; }
.hero-anim .top__traces path:nth-child(5) { animation-delay: .24s; }
.hero-anim .top__traces path:nth-child(6) { animation-delay: .2s; }
.hero-anim .top__traces path:nth-child(7) { animation-delay: .3s; }
.hero-anim .top__traces circle { opacity: 0; animation: fade-on .3s ease .75s forwards; }
@keyframes trace { to { stroke-dashoffset: 0; } }
@keyframes fade-on { to { opacity: 1; } }
.hero-anim .top__h .w, .hero-anim .top__tag, .hero-anim .top__copy, .hero-anim .top__ask { animation: side-in .55s var(--ease) both; }
.top__h .w { display: inline-block; }
.hero-anim .top__h .ln:first-child .w:nth-child(2) { animation-delay: .04s; }
.hero-anim .top__h .ln:first-child .w:nth-child(3) { animation-delay: .08s; }
.hero-anim .top__h .ln + .ln .w:nth-child(1) { animation-delay: .12s; }
.hero-anim .top__h .ln + .ln .w:nth-child(2) { animation-delay: .16s; }
.hero-anim .top__h .ln + .ln .w:nth-child(3) { animation-delay: .2s; }
.hero-anim .top__h .ln + .ln .w:nth-child(4) { animation-delay: .24s; }
.hero-anim .top__copy { animation-delay: .14s; }
.hero-anim .top__ask { animation-delay: .2s; }
@keyframes side-in { from { opacity: 0; transform: translate3d(-28px, 0, 0); } to { opacity: 1; transform: none; } }
/* the live trace runs in from the left edge, then each lamp switches on as it arrives */
.hero-anim .lamps::before { animation: live-trace .95s cubic-bezier(.5, 0, .3, 1) .15s both; }
@keyframes live-trace {
  0% { clip-path: inset(0 100% var(--trace-foot, calc(100% - 3px)) 0); }
  55% { clip-path: inset(0 0 var(--trace-foot, calc(100% - 3px)) 0); }
  100% { clip-path: inset(0 0 0 0); }
}
.hero-anim .lamps li::before { transform-origin: 0 50%; animation: stub .18s ease-out both; }
.hero-anim .lamps__lamp { animation: lamp-on .32s steps(1) both; }
.hero-anim .lamps__chip { animation: chip-on .4s var(--ease) both; }
.hero-anim .lamps li:nth-child(1) > * , .hero-anim .lamps li:nth-child(1)::before { animation-delay: .68s; }
.hero-anim .lamps li:nth-child(2) > * , .hero-anim .lamps li:nth-child(2)::before { animation-delay: .86s; }
.hero-anim .lamps li:nth-child(3) > * , .hero-anim .lamps li:nth-child(3)::before { animation-delay: 1.04s; }
@keyframes stub { from { transform: scale(var(--stub-x, 0), var(--stub-y, 1)); } to { transform: none; } }
@keyframes lamp-on {
  0% { background: var(--navy); box-shadow: none; }
  30% { background: var(--node-glow); box-shadow: 0 0 0 4px rgba(42, 120, 236, .22), 0 0 16px 2px rgba(143, 192, 255, .75); }
  45% { background: var(--navy); box-shadow: none; }
  60%, 100% { background: var(--node-glow); box-shadow: 0 0 0 4px rgba(42, 120, 236, .22), 0 0 16px 2px rgba(143, 192, 255, .75); }
}
@keyframes chip-on { from { border-color: var(--navy-line); opacity: .55; } 50% { border-color: var(--node); } to { opacity: 1; } }
@media (min-width: 760px) {
  .lamps { --trace-foot: 0px; }
  .lamps li { --stub-x: 1; --stub-y: 0; }
  .hero-anim .lamps li::before { transform-origin: 50% 0; }
}
/* depth: the traces sit on a deeper plane and drift slower than the page (motion.js sets --hp) */
html.motion .top__traces { transform: translate3d(0, calc(var(--hp, 0) * 90px), 0); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  html.motion [data-reveal] > * { opacity: 1 !important; transform: none !important; }
  .cu, .cu__rail, .cert, .biz, .ask__card, .top__traces, .cu__shadow, .cert__stamp { transform: none !important; opacity: 1 !important; }
  .cu__cover { display: none !important; }
}

/* author display rules never beat the hidden attribute on the form's furniture */
.smart__bar[hidden], .smart__nav[hidden], .smart__done[hidden], .smart__fail[hidden], .step__err[hidden] { display: none; }
