/* ============================================================
   LIMINEX — palette taken from the logo mark:
   deep blue #2349B2 → electric #2440E0 → violet #5C23B2,
   with the bright cyan core #70B9F8 for dark grounds.
   Curves, light lines, and a lot of air.
   ============================================================ */
:root{
  --paper:#FFFFFF; --paper2:#F7F8FA; --ink:#15161A; --muted:#61636B;
  --hair:#E2E4EA;
  --blue:#2349B2; --electric:#2440E0; --violet:#5C23B2; --core:#70B9F8;
  --accent:#2349B2;          /* text accent on light */
  --dark:#101014; --dark-ink:#FFFFFF; --dark-muted:#A9ABB4; --dark-hair:#2C2E36;
  --dark-accent:#70B9F8;     /* 9.0:1 on the dark ground */
  --r:22px;
  --bub:35 73 178;           /* brand blue, as channels, for the header bubbles */
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#0B0B0E; --paper2:#131419; --ink:#F2F3F6; --muted:#9C9EA8; --hair:#2A2C34;
    --accent:#8FC6FF;
    --dark:#F2F3F6; --dark-ink:#15161A; --dark-muted:#5B5D66; --dark-hair:#D8DAE2; --dark-accent:#2349B2;
    --bub:143 198 255;
  }
}
:root[data-theme="dark"]{
  --paper:#0B0B0E; --paper2:#131419; --ink:#F2F3F6; --muted:#9C9EA8; --hair:#2A2C34;
  --accent:#8FC6FF;
  --bub:143 198 255;
  --dark:#F2F3F6; --dark-ink:#15161A; --dark-muted:#5B5D66; --dark-hair:#D8DAE2; --dark-accent:#2349B2;
}
*{box-sizing:border-box}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--ink);color:var(--paper);
  padding:12px 18px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;text-decoration:none}
.skip:focus{left:10px;top:10px}
main:focus{outline:none}
body{background:var(--paper);color:var(--ink);margin:0;
  font-family:Archivo,"Helvetica Neue",Arial,sans-serif;font-size:17px;line-height:1.7;
  -webkit-font-smoothing:antialiased;letter-spacing:-.005em}
h1,h2,h3{margin:0;font-weight:600;letter-spacing:-.028em;line-height:1.06;text-wrap:balance}
p{margin:0 0 1.15em}
.wrap{max-width:1140px;margin:0 auto;padding:0 34px}
.narrow{max-width:780px;margin:0 auto;padding:0 34px}
@media (max-width:640px){.wrap,.narrow{padding:0 22px}}
.lbl{font-size:11px;letter-spacing:.22em;text-transform:uppercase;font-weight:500;color:var(--accent)}
.lbl--q{color:var(--muted)}
.center{text-align:center}
.muted{color:var(--muted)}

/* ---------------- nav ---------------- */
nav.bar{position:fixed;top:0;left:0;right:0;z-index:100;background:var(--paper);
  border-bottom:1px solid transparent;transition:transform .45s cubic-bezier(.2,.7,.3,1),opacity .35s ease,border-color .3s ease;
  transform:translateY(-102%);opacity:0;pointer-events:none}
body.scrolled nav.bar{transform:none;opacity:1;pointer-events:auto;border-bottom-color:var(--hair)}
body:not(.home) main{padding-top:60px}
nav.bar .wrap{display:flex;align-items:center;gap:20px;height:60px}
.navmark{text-decoration:none;display:flex;align-items:center;gap:11px;background:none;border:0;color:inherit;padding:0;
  cursor:pointer;font-family:inherit;flex:none;opacity:0;transform:translateY(4px);
  transition:opacity .35s ease,transform .35s ease;pointer-events:none}
body.scrolled .navmark{opacity:1;transform:none;pointer-events:auto}
.navmark img{width:26px;height:26px;display:block}
.navmark span{font-size:14px;font-weight:700;letter-spacing:.3em;text-transform:uppercase}
.navlinks{display:flex;gap:25px;margin-left:auto;flex-wrap:wrap;justify-content:flex-end}
.navlinks button,.navlinks a{background:none;border:0;color:var(--muted);font-family:inherit;font-size:12.5px;
  padding:3px 0;cursor:pointer;text-decoration:none}
.navlinks button:hover,.navlinks a:hover{color:var(--ink)}
.navlinks button[aria-current="page"],.navlinks a[aria-current="page"]{color:var(--ink);font-weight:500}
.dd{position:relative}
.dd > button{display:flex;align-items:center;gap:7px}
.dd > button::after{content:"";width:5px;height:5px;border-right:1.4px solid currentColor;
  border-bottom:1.4px solid currentColor;transform:rotate(45deg) translateY(-1px);transition:transform .2s ease}
.dd > button[aria-expanded="true"]::after{transform:rotate(-135deg) translateY(-1px)}
.ddmenu{position:absolute;top:calc(100% + 14px);left:50%;transform:translateX(-50%);min-width:230px;
  background:var(--paper);border:1px solid var(--hair);border-radius:16px;padding:10px;
  box-shadow:0 18px 44px rgba(15,18,40,.10);display:grid;gap:2px;z-index:120}
.ddmenu[hidden]{display:none}
.ddmenu button,.ddmenu a{width:100%;text-align:left;padding:10px 14px;border-radius:10px;font-size:14.5px;
  color:var(--ink);background:none;border:0;cursor:pointer;font-family:inherit}
.ddmenu button:hover,.ddmenu button:focus-visible,.ddmenu a:hover,.ddmenu a:focus-visible{background:var(--paper2)}
.ddmenu a[aria-current="page"]{color:var(--accent);font-weight:500}
@media (max-width:900px){.ddmenu{left:0;transform:none}}
.langtog{display:flex;gap:7px;align-items:center;flex:none}
.langtog a{background:none;border:0;color:var(--muted);font-family:inherit;font-size:12px;cursor:pointer;text-decoration:none}
.langtog a[aria-current="true"]{color:var(--ink);font-weight:600}

.langtog .sep{color:var(--hair)}
@media (max-width:900px){
  nav.bar .wrap{height:auto;padding-top:11px;padding-bottom:11px;flex-wrap:wrap;gap:12px}
  .navlinks{width:100%;margin-left:0;justify-content:flex-start;gap:17px;order:3;font-size:12px}
}

/* ---------------- the opening ----------------
   A black panel fixed over the top of the page. As you scroll it closes upward like a
   shutter and the logo shrinks with it, until the nav is all that's left.
   --p is the progress of that collapse, 0 to 1, written by setupOpening() in app.js.
   .opening is the spacer that gives the collapse something to scroll against.        */
.opening{height:100vh}
.overture{position:fixed;top:0;left:0;right:0;z-index:50;overflow:hidden;
  height:calc(100vh * (1 - var(--p, 0)));
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:0 24px;background:#08080B;color:#FFFFFF;
  will-change:height}
.overture .logo{width:min(760px,86vw);margin:0;
  transform:scale(calc(1 - 0.72 * var(--p, 0)));
  opacity:calc(1 - var(--p, 0) * 1.25);will-change:transform}
.overture .logo img{width:100%;height:auto;display:block}
.overture .curves{position:absolute;inset:0;pointer-events:none}
.overture .curves svg{width:100%;height:100%;opacity:.85}
.scrollcue{position:absolute;bottom:34px;left:50%;transform:translateX(-50%);font-size:11px;
  letter-spacing:.22em;text-transform:uppercase;color:#8A8D99;
  opacity:calc(1 - var(--p, 0) * 3)}
@media (prefers-reduced-motion:reduce){
  .overture{transition:none}
  .overture .logo{transition:none}
}

/* ---------------- sections ---------------- */
section.band{padding:120px 0;position:relative}
section.band--tight{padding:82px 0}
section.band--grey{background:var(--paper2)}
section.band--dark{background:var(--dark);color:var(--dark-ink)}
section.band--dark .lbl{color:var(--dark-accent)}
section.band--dark .muted{color:var(--dark-muted)}
@media (max-width:640px){section.band{padding:76px 0}}
h2{font-size:clamp(28px,4.6vw,54px);font-weight:600}
h3{font-size:20px;font-weight:600}
.deck{font-size:clamp(17px,1.6vw,20.5px);color:var(--muted);max-width:60ch}
.center .deck{margin-left:auto;margin-right:auto}

/* flowing divider */
.flow{display:block;width:100%;height:auto}
.flowwrap{padding:26px 0;overflow:hidden}
.flowsplit{line-height:0;overflow:hidden}

/* ---------------- what we do: one card per area ---------------- */
.blocks{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:22px;margin-top:60px}
@media (min-width:1080px){
  /* Six tracks rather than three, so five cards read as a deliberate 3 + 2 instead of
     three cards and a hole: the first three take two tracks each, the last two take
     three each and fill the row. The :nth-last-child pair scopes this to exactly five
     cards — with any other count the grid falls back to plain thirds. */
  .blocks{grid-template-columns:repeat(6,1fr)}
  .blocks>*{grid-column:span 2}
  .blocks>:nth-child(4):nth-last-child(2),
  .blocks>:nth-child(5):nth-last-child(1){grid-column:span 3}
}
.block{display:flex;flex-direction:column;text-decoration:none;color:inherit;cursor:pointer;
  border:1px solid var(--hair);border-radius:var(--r);overflow:hidden;background:var(--paper);
  transition:border-color .25s ease,transform .25s ease}
.block:hover{border-color:var(--accent);transform:translateY(-3px)}
.block .prev{display:flex;align-items:center;justify-content:center;position:relative;
  aspect-ratio:16/10;padding:22px;background:var(--paper2);border-bottom:1px solid var(--hair)}
.block .prev .mk{width:58px;height:58px;color:var(--accent);opacity:.9}
.block .prev.has-img{padding:0}
.block .prev img{width:100%;height:100%;object-fit:cover}
/* ---------------- cut-outs that fly out of the screen ----------------
   A render with a transparent background is not put in the box — it is drawn bigger
   than the box, tilted, breaking over the card's top edge, with a deep shadow that
   says it is in front of the page. It pops forward as the card scrolls into view. */
.blocks{overflow:visible}
.block.has-cut{overflow:visible;margin-top:24px;border:0;background:none}
.block.has-cut .prev{border:0;background:none;border-radius:0;overflow:visible;padding:0;aspect-ratio:16/9}
.block.has-cut .body{border:1px solid var(--hair);border-radius:var(--r);background:var(--paper);
  transition:border-color .25s ease}
.block.has-cut:hover .body{border-color:var(--accent)}
.block .prev.has-cut img{position:absolute;left:50%;top:50%;width:auto;height:auto;
  max-width:94%;max-height:104%;object-fit:contain;
  --tilt:-7deg;
  transform:translate(-50%,-52%) rotate(var(--tilt)) scale(.82);opacity:0;
  filter:drop-shadow(0 30px 34px rgb(21 22 26/.22)) drop-shadow(0 6px 8px rgb(21 22 26/.10));
  transition:transform .9s cubic-bezier(.16,1.2,.3,1),opacity .5s ease,filter .35s ease}
.block:nth-child(2n) .prev.has-cut img{--tilt:6deg}
.block:nth-child(3n) .prev.has-cut img{--tilt:-4deg}
.block.in .prev.has-cut img{opacity:1;transform:translate(-50%,-52%) rotate(var(--tilt)) scale(1)}
.block.has-cut:hover .prev.has-cut img{transform:translate(-50%,-58%) rotate(0deg) scale(1.05);
  filter:drop-shadow(0 44px 44px rgb(21 22 26/.26)) drop-shadow(0 8px 10px rgb(21 22 26/.10))}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .block .prev.has-cut img{filter:drop-shadow(0 30px 40px rgb(0 0 0/.6))}
}
:root[data-theme="dark"] .block .prev.has-cut img{filter:drop-shadow(0 30px 40px rgb(0 0 0/.6))}
@media (prefers-reduced-motion:reduce){
  .block .prev.has-cut img{opacity:1;transform:translate(-50%,-52%) rotate(var(--tilt)) scale(1);transition:none}
}
.block .prev .cap{position:absolute;left:0;right:0;bottom:14px;text-align:center;
  font-size:11.5px;line-height:1.4;color:var(--muted);padding:0 20px}
.block .body{display:flex;flex-direction:column;gap:12px;flex:1;padding:26px 26px 24px}
.block h3{margin:0;font-size:clamp(20px,2vw,25px);letter-spacing:-.02em}
.block .intro{display:block;color:var(--muted);font-size:15.5px;line-height:1.6}
.block .hook{display:block;padding-top:14px;border-top:1px solid var(--hair);
  font-size:14.5px;line-height:1.55;color:var(--ink)}
.block .more{display:block;margin-top:auto;padding-top:14px;font-size:13.5px;
  color:var(--accent);font-weight:500}

/* ---------------- engineering drawing plates ---------------- */
.plate{border:1px solid var(--hair);border-radius:var(--r);margin-top:56px;overflow:hidden;
  background:var(--paper)}
.plate .sheet{display:grid;grid-template-columns:repeat(3,1fr)}
@media (max-width:820px){.plate .sheet{grid-template-columns:1fr 1fr}
  .plate .sheet > *:last-child{grid-column:1/3}}
@media (max-width:520px){.plate .sheet{grid-template-columns:1fr}
  .plate .sheet > *:last-child{grid-column:auto}}
.plate .cell{border-right:1px solid var(--hair);padding:26px 22px 18px;display:flex;
  flex-direction:column;gap:14px;color:var(--ink)}
.plate .cell:last-child{border-right:0}
@media (max-width:820px){.plate .cell{border-bottom:1px solid var(--hair)}}
.plate .dw{width:100%;height:auto;opacity:.78}
.plate .cap{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);
  display:flex;justify-content:space-between;align-items:baseline;gap:14px;
  border-top:1px solid var(--hair);padding-top:10px;margin-top:auto}
.plate .cap span:first-child{max-width:22ch}
.plate .cap span:last-child{white-space:nowrap}
.plate .tb{border-top:1px solid var(--hair);padding:12px 22px;display:flex;gap:26px;flex-wrap:wrap;
  font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);background:var(--paper2)}
.plate .tb b{color:var(--ink);font-weight:500;letter-spacing:.16em}
/* faint drawing behind a page opener */
.opener > .narrow{position:relative;z-index:1}
/* Two drawings tucked into opposite corners of a page opener, chosen per page.
   Decoration only — aria-hidden, and they never sit behind the heading. */
.wmark{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.wmark svg{position:absolute;width:clamp(180px,26vw,340px);height:auto;
  opacity:.085;color:var(--ink)}
.wmark svg:first-child{top:-4%;left:-3%}
.wmark svg:last-child{bottom:-6%;right:-3%}
@media (max-width:760px){.wmark svg{width:clamp(130px,34vw,200px);opacity:.07}}
@media (max-width:520px){.wmark svg:last-child{display:none}}

/* ---------------- portfolio strip (every page) ---------------- */
.folio{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:44px}
@media (max-width:760px){.folio{grid-template-columns:1fr}}
.fcard{text-decoration:none;border:1px solid var(--hair);border-radius:var(--r);overflow:hidden;background:var(--paper);
  display:flex;flex-direction:column;text-align:left;font-family:inherit;color:inherit;cursor:pointer;
  transition:border-color .25s ease,transform .25s ease}
.fcard:hover{border-color:var(--accent);transform:translateY(-3px)}
.fcard .shot{aspect-ratio:16/10;border-bottom:1px solid var(--hair);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:6px;background:var(--paper2);color:var(--muted);
  text-align:center;padding:20px;overflow:hidden;position:relative}
.fcard .shot img{width:100%;height:100%;object-fit:cover;object-position:top center;padding:0}
.fcard .shot.has-img{padding:0}
.fcard .live{display:inline-flex;align-items:center;gap:7px;margin-top:12px;font-size:13.5px;
  color:var(--accent);font-weight:500}
.fcard .live::after{content:"\2197"}
.shotlink{display:block;border:1px solid var(--hair);border-radius:var(--r);overflow:hidden;
  aspect-ratio:16/10;background:var(--paper2)}
.shotlink img{width:100%;height:100%;object-fit:cover;object-position:top center}
.shotlink:hover{border-color:var(--accent)}
.livelink{color:var(--accent);font-weight:500;text-decoration:none}
.livelink:hover{text-decoration:underline}
.fcard .shot .t{font-size:11px;letter-spacing:.18em;text-transform:uppercase}
.fcard .shot .s{font-size:12.5px}
.fcard .body{padding:24px 26px 26px}
.fcard h3{font-size:20px;margin:0 0 6px}
.fcard p{margin:0;font-size:15px;color:var(--muted)}
.fcard .tag{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);
  display:block;margin-bottom:10px}
section.band--dark .fcard{background:transparent;border-color:var(--dark-hair)}
section.band--dark .fcard .shot{background:transparent;border-bottom-color:var(--dark-hair);color:var(--dark-muted)}
section.band--dark .fcard p{color:var(--dark-muted)}
section.band--dark .fcard .tag{color:var(--dark-accent)}

/* ---------------- services, no prices ---------------- */
.svcs{margin-top:52px}
.svc{display:grid;grid-template-columns:minmax(180px,26%) 1fr;gap:0 40px;padding:30px 0;
  border-top:1px solid var(--hair)}
.svc:last-child{border-bottom:1px solid var(--hair)}
.svc h3{margin:0;font-size:19px}
.svc p{margin:0;color:var(--muted);max-width:62ch}
section.band--dark .svc{border-color:var(--dark-hair)}
section.band--dark .svc p{color:var(--dark-muted)}
@media (max-width:700px){.svc{grid-template-columns:1fr;gap:8px}}
.onreq{margin-top:26px;font-size:15px;color:var(--muted)}

/* ---------------- alternating picture / text rows ---------------- */
.alt{margin-top:56px;display:grid;gap:clamp(48px,7vw,96px)}
.altrow{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,5vw,72px);align-items:center}
.altrow:nth-child(even) .altmedia{order:2}
@media (max-width:820px){.altrow{grid-template-columns:1fr;gap:22px}
  .altrow:nth-child(even) .altmedia{order:0}}
.altmedia .ph{aspect-ratio:16/10;margin:0}
.altmedia img{width:100%;height:auto;border-radius:var(--r);display:block}
/* Cut-outs: the object floats on the page rather than sitting in a frame. */
.altmedia--cut{display:flex;align-items:center;justify-content:center;min-height:clamp(220px,28vw,380px);
  perspective:1200px}
/* The object is drawn larger than its column, tilted in 3D, and drifts with the scroll
   (--py is written by setupFly() in app.js: -1 below the fold … +1 above it). */
.altmedia--cut img{border-radius:0;width:auto;max-width:118%;max-height:clamp(260px,36vw,480px);
  --tilt:-8deg;--py:0;
  transform:translateY(calc(var(--py) * -28px)) rotate(var(--tilt)) rotateY(calc(var(--py) * 6deg)) scale(1.04);
  filter:drop-shadow(0 34px 40px rgb(21 22 26/.22)) drop-shadow(0 6px 10px rgb(21 22 26/.10));
  transition:transform .12s linear;will-change:transform}
.altrow:nth-child(even) .altmedia--cut img{--tilt:7deg}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .altmedia--cut img{filter:drop-shadow(0 34px 44px rgb(0 0 0/.6))}
}
:root[data-theme="dark"] .altmedia--cut img{filter:drop-shadow(0 34px 44px rgb(0 0 0/.6))}
@media (prefers-reduced-motion:reduce){.altmedia--cut img{transform:rotate(var(--tilt));transition:none}}
@media (max-width:820px){.altmedia--cut img{max-width:96%}}
.alttext .sn{display:block;font-size:11px;letter-spacing:.2em;color:var(--accent);
  margin-bottom:12px;font-variant-numeric:tabular-nums}
.alttext h3{font-size:clamp(21px,2.3vw,29px);letter-spacing:-.025em;margin:0 0 14px}
.alttext p{margin:0;color:var(--muted);font-size:16.5px;line-height:1.65;max-width:48ch}

/* story and the numbers, side by side */
.whorow{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(240px,.8fr);
  gap:clamp(32px,7vw,96px);align-items:start}
@media (max-width:860px){.whorow{grid-template-columns:1fr;gap:40px}}
.whotext h2{max-width:17ch}
.whotext p{margin-top:22px;max-width:56ch}
.whorow .stats--side{padding-top:clamp(4px,4vw,58px)}
.whorow .stats--side{grid-template-columns:1fr;gap:32px;margin-top:6px}
@media (max-width:860px){.whorow .stats--side{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:26px}}

/* coming soon, with a one-click interest register */
.soon{max-width:70ch}
.soon h2{margin:16px 0 20px}
.soon .deck{max-width:none}
.soonform{display:flex;gap:14px;flex-wrap:wrap;align-items:center;margin-top:8px}
.soonform input{border:0;border-bottom:1px solid var(--hair);background:transparent;
  padding:10px 2px;font-family:inherit;font-size:16px;color:var(--ink);min-width:250px;flex:1}
.soonform input:focus{outline:none;border-bottom-color:var(--accent)}
.sr{position:absolute;left:-9999px}
#soonbox{margin-top:10px}


/* ---------------- header bubbles ----------------
   Soft brand-coloured circles behind every page opener, so the top of a page has
   depth without a picture. Purely decorative: drawn on a pseudo-element, below the
   type, and never sized in a way that can create a scrollbar. */
.opener{isolation:isolate;overflow:hidden}
.opener::before{
  content:"";position:absolute;inset:-18% 0 -10%;z-index:-1;pointer-events:none;
  background:
    radial-gradient(closest-side,rgb(var(--bub)/.20),rgb(var(--bub)/0)) 6% 22%/min(360px,48vw) min(360px,48vw) no-repeat,
    radial-gradient(closest-side,rgb(var(--bub)/.13),rgb(var(--bub)/0)) 94% 6%/min(280px,38vw) min(280px,38vw) no-repeat,
    radial-gradient(closest-side,rgb(var(--bub)/.10),rgb(var(--bub)/0)) 78% 88%/min(460px,60vw) min(460px,60vw) no-repeat,
    radial-gradient(closest-side,rgb(var(--bub)/.09),rgb(var(--bub)/0)) 26% 96%/min(220px,30vw) min(220px,30vw) no-repeat;
}
@media (max-width:640px){
  .opener::before{background-size:min(240px,60vw) min(240px,60vw),min(180px,46vw) min(180px,46vw),
                                  min(260px,66vw) min(260px,66vw),min(160px,40vw) min(160px,40vw)}
}

/* the corner drawings again, fainter, so the plain sections are not bare white */
.band{position:relative}
.band>.wrap,.band>.narrow{position:relative;z-index:1}
.wmark--band svg{opacity:.05;width:clamp(150px,20vw,260px)}
.wmark--band svg:first-child{top:auto;bottom:4%;left:-2%}
.wmark--band svg:last-child{top:2%;bottom:auto;right:-2%}
@media (max-width:760px){.wmark--band{display:none}}

/* ---------------- Project Yard: the page wears the posters' palette ---------------- */
.page-yard{--bub:92 35 178}
.page-yard .opener{background:linear-gradient(152deg,#12285F 0%,#2349B2 48%,#5C23B2 100%);
  color:#FFFFFF;padding:104px 0 76px;margin-bottom:8px}
.page-yard .opener::before{
  background:
    radial-gradient(closest-side,rgb(255 255 255/.16),rgb(255 255 255/0)) 8% 18%/min(380px,50vw) min(380px,50vw) no-repeat,
    radial-gradient(closest-side,rgb(112 185 248/.28),rgb(112 185 248/0)) 92% 10%/min(300px,40vw) min(300px,40vw) no-repeat,
    radial-gradient(closest-side,rgb(255 255 255/.10),rgb(255 255 255/0)) 74% 86%/min(460px,62vw) min(460px,62vw) no-repeat;
}
.page-yard .opener .lbl{color:#C9D6FF}
.page-yard .opener .wmark svg{color:#FFFFFF;opacity:.13}
.page-yard .band--grey{background:linear-gradient(180deg,#F4F3FC,#FAF9FE)}
.page-yard .band--dark{background:linear-gradient(152deg,#12285F,#3B2BC0 60%,#5C23B2)}
.page-yard .lbl{color:#5C23B2}
.page-yard .band--dark .lbl{color:#C9D6FF}
.page-yard .grid4 svg,.page-yard .svc svg{color:#5C23B2}
.page-yard .btn{background:linear-gradient(140deg,#2440E0,#5C23B2);color:#FFFFFF}
/* The survey preview is a light card that keeps its own ink colour wherever it sits;
   without the :not(.formcard) it inherited the pale link blue of a dark band and the
   title dropped below AA on the card's own near-white ground. */
.page-yard .inlink,.page-yard a:not(.btn):not(.fcard):not(.formcard){color:#5C23B2}
.page-yard .band--dark a:not(.btn):not(.formcard){color:#C9D6FF}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .page-yard .band--grey{background:linear-gradient(180deg,#15131F,#100F17)}
  :root:not([data-theme="light"]) .page-yard .lbl{color:#C3A9FF}
  :root:not([data-theme="light"]) .page-yard .grid4 svg,
  :root:not([data-theme="light"]) .page-yard .svc svg{color:#C3A9FF}
  :root:not([data-theme="light"]) .page-yard .inlink,
  :root:not([data-theme="light"]) .page-yard a:not(.btn):not(.fcard){color:#C3A9FF}
}
:root[data-theme="dark"] .page-yard .band--grey{background:linear-gradient(180deg,#15131F,#100F17)}
:root[data-theme="dark"] .page-yard .lbl{color:#C3A9FF}
:root[data-theme="dark"] .page-yard .grid4 svg,
:root[data-theme="dark"] .page-yard .svc svg{color:#C3A9FF}
:root[data-theme="dark"] .page-yard .inlink,
:root[data-theme="dark"] .page-yard a:not(.btn):not(.fcard){color:#C3A9FF}

/* ---------------- disciplines ---------------- */
/* Separate tiles with air between them (not one hairline grid), so a part can hang
   over a tile's edge without being clipped. */
.disc{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;margin-top:64px}
.disc > div{position:relative;background:var(--paper);border:1px solid var(--hair);border-radius:var(--r);
  padding:30px 28px;display:flex;flex-direction:column;gap:13px}
.disc > div.has-cut{padding-top:84px;margin-top:40px;transition:transform .3s ease,border-color .3s ease}
.disc > div.has-cut:hover{transform:translateY(-3px);border-color:var(--accent)}
.disc .ic{width:36px;height:36px;color:var(--accent)}
/* a framed picture sits above the icon in a rounded box … */
.disc .dpic{display:block;aspect-ratio:4/3;border-radius:14px;overflow:hidden;background:var(--paper2);margin-bottom:6px}
.disc .dpic img{width:100%;height:100%;object-fit:cover}
/* … a cut-out replaces the icon and hangs off the tile's top-right corner, in front of it */
.disc .dpic--cut{position:absolute;top:-54px;right:-16px;width:min(64%,210px);height:132px;aspect-ratio:auto;
  display:flex;align-items:flex-end;justify-content:flex-end;background:transparent;overflow:visible;
  border-radius:0;margin:0;pointer-events:none;z-index:2;perspective:900px}
.disc .dpic--cut img{width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain;
  --tilt:-9deg;transform:rotate(var(--tilt)) scale(.8);opacity:0;
  filter:drop-shadow(0 22px 26px rgb(21 22 26/.22)) drop-shadow(0 4px 6px rgb(21 22 26/.10));
  transition:transform .9s cubic-bezier(.16,1.2,.3,1),opacity .5s ease}
.disc > div:nth-child(even) .dpic--cut img{--tilt:8deg}
.disc.in .dpic--cut img,.disc > div.in .dpic--cut img{opacity:1;transform:rotate(var(--tilt)) scale(1)}
.disc > div.has-cut:hover .dpic--cut img{transform:rotate(0deg) scale(1.08) translateY(-6px)}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .disc .dpic--cut img{filter:drop-shadow(0 22px 30px rgb(0 0 0/.6))}
}
:root[data-theme="dark"] .disc .dpic--cut img{filter:drop-shadow(0 22px 30px rgb(0 0 0/.6))}
@media (prefers-reduced-motion:reduce){.disc .dpic--cut img{opacity:1;transform:rotate(var(--tilt));transition:none}}
.disc h3{margin:0;font-size:17.5px}
.disc p{margin:0;color:var(--muted);font-size:15px;line-height:1.6}
.disc .eg{margin:0;padding-top:12px;border-top:1px solid var(--hair);font-size:14.5px;color:var(--ink)}
.disc .eg span{display:block;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);margin-bottom:5px}
.disc .tags{margin-top:auto;padding-top:6px;font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted)}
.discshots{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:20px;margin-top:24px}
.discshots .ph{aspect-ratio:4/3}

/* icons on the service rows */
.svc .ic{width:30px;height:30px;color:var(--accent);margin-bottom:10px}
.svc--ic{grid-template-columns:44px minmax(150px,22%) 1fr;gap:0 26px}
@media (max-width:700px){.svc--ic{grid-template-columns:1fr;gap:8px}
  .svc--ic .ic{margin-bottom:0}}
.step .no .ic{width:26px;height:26px;color:var(--accent);margin-top:2px}
.step .no{display:flex}

/* ---------------- experience list ---------------- */
.exp{margin-top:44px;border-top:1px solid var(--hair)}
.expitem{display:grid;grid-template-columns:minmax(150px,22%) 1fr;gap:0 40px;padding:30px 0;
  border-bottom:1px solid var(--hair)}
.expitem .k{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);padding-top:5px}
.expitem h3{margin:0 0 8px;font-size:19px}
.expitem p{margin:0 0 10px;color:var(--muted);max-width:64ch}
.expitem .st{font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
@media (max-width:700px){.expitem{grid-template-columns:1fr;gap:8px}}

/* ---------------- prices ---------------- */
.prices{margin-top:52px}
.prices h3{font-size:13px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);
  margin:0 0 6px;font-weight:500}
.prow{display:grid;grid-template-columns:minmax(190px,24%) 1fr minmax(150px,auto);gap:0 34px;
  padding:24px 0;border-top:1px solid var(--hair);align-items:baseline}
.prices .prow:last-child{border-bottom:1px solid var(--hair)}
.prow .pn{font-weight:600;font-size:17px}
.prow .pd{color:var(--muted);font-size:15.5px;max-width:60ch}
.prow .pv{font-size:18px;font-weight:600;letter-spacing:-.02em;text-align:right;white-space:nowrap;
  font-variant-numeric:tabular-nums}
@media (max-width:820px){
  .prow{grid-template-columns:1fr auto;gap:6px 20px}
  .prow .pd{grid-column:1/3;order:3}
  .prow .pv{text-align:right}
}
.inlink{background:none;border:0;padding:0;font:inherit;color:var(--accent);cursor:pointer;
  text-decoration:underline;text-underline-offset:3px}

/* ---------------- process ---------------- */
.steps{margin-top:52px}
.step{display:grid;grid-template-columns:60px 1fr;gap:0 26px;padding:28px 0;border-top:1px solid var(--hair)}
.step .no{font-size:12px;letter-spacing:.16em;color:var(--accent);padding-top:6px;font-variant-numeric:tabular-nums}
.step .sn{display:block;font-size:11px;letter-spacing:.18em;color:var(--muted);
  margin-bottom:6px;font-variant-numeric:tabular-nums}
.step h3{margin:0 0 5px;font-size:18px}
.step p{margin:0;color:var(--muted);max-width:58ch}
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:20px;margin-top:48px}
.grid4 > div{border:1px solid var(--hair);border-radius:var(--r);padding:28px 26px}
.grid4 .ic{width:30px;height:30px;color:var(--accent);margin-bottom:14px}
.grid4 h3{margin:0 0 8px;font-size:17px}
.grid4 p{margin:0;color:var(--muted);font-size:15.5px}
.marginnote{border-left:2px solid var(--accent);padding:2px 0 2px 26px;margin:52px 0 0;max-width:64ch}
.marginnote h3{margin:0 0 8px;font-size:17px}
.marginnote p{margin:0;color:var(--muted)}
section.band--dark .marginnote{border-color:var(--dark-accent)}
section.band--dark .marginnote p{color:var(--dark-muted)}

/* ---------------- poster blocks (Project Yard) ---------------- */
.posters{display:grid;grid-template-columns:repeat(auto-fit,minmax(430px,1fr));gap:20px;margin-top:56px}
@media (max-width:560px){.posters{grid-template-columns:1fr}}
.poster{border-radius:var(--r);padding:46px 40px;min-height:330px;display:flex;flex-direction:column;
  justify-content:space-between;gap:26px;color:#FFFFFF;position:relative;overflow:hidden}
.poster .fig{font-size:clamp(44px,6vw,72px);font-weight:600;letter-spacing:-.04em;line-height:.95}
.poster .say{font-size:17px;line-height:1.45;margin:0}
.poster .src{font-size:11.5px;opacity:.82;margin:0}
.p1{background:linear-gradient(150deg,#2349B2,#2440E0)}
.p2{background:linear-gradient(150deg,#3B2BC0,#5C23B2)}
.p3{background:linear-gradient(150deg,#12285F,#2349B2)}
.p4{background:linear-gradient(150deg,#5C23B2,#8B2FA8)}
.formrow{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:44px}
@media (max-width:700px){.formrow{grid-template-columns:1fr}}
.formcard{border:1px solid var(--hair);border-radius:var(--r);padding:30px 28px;display:flex;
  flex-direction:column;gap:12px}
section.band--dark .formcard{border-color:var(--dark-hair)}
.formcard h3{margin:0;font-size:19px}
.formcard p{margin:0;color:var(--muted);font-size:15px}
section.band--dark .formcard p{color:var(--dark-muted)}
.formcard a{color:var(--accent);font-weight:500;text-decoration:none;margin-top:auto;padding-top:8px;font-size:15px}
section.band--dark .formcard a{color:var(--dark-accent)}
.formcard a:hover{text-decoration:underline}

/* ---------------- photos & logos ---------------- */
.ph{border:1px dashed var(--hair);border-radius:var(--r);background:var(--paper2);display:flex;
  flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--muted);
  text-align:center;padding:24px}
.ph .t{font-size:11.5px;letter-spacing:.18em;text-transform:uppercase}
.ph .s{font-size:12.5px}
section.band--dark .ph{background:transparent;border-color:var(--dark-hair);color:var(--dark-muted)}
.phrow{display:grid;grid-template-columns:2fr 1fr;gap:20px;margin-top:56px}
.phrow .ph:first-child{aspect-ratio:16/9}
.phrow .ph:last-child{aspect-ratio:3/4}
@media (max-width:760px){.phrow{grid-template-columns:1fr}.phrow .ph{aspect-ratio:16/10!important}}
.logos{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0;
  border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);margin-top:48px}
.logos > div{aspect-ratio:5/2;display:flex;align-items:center;justify-content:center;
  border-right:1px solid var(--hair);color:var(--muted);font-size:12px;letter-spacing:.14em;
  text-transform:uppercase;text-align:center;padding:12px}
.logos > div:last-child{border-right:0}
@media (max-width:640px){.logos > div{border-right:0;border-bottom:1px solid var(--hair)}
  .logos > div:last-child{border-bottom:0}}
.team{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:20px;margin-top:52px}
.team .p{display:flex;flex-direction:column;gap:12px}
.team .p .ph{aspect-ratio:4/5}
/* A real portrait replaces the dashed slot: no border, no padding, the photo fills it. */
.ph.has-img{padding:0;border:0;overflow:hidden;background:none}
.ph.has-img img{width:100%;height:100%;object-fit:cover;object-position:center 32%;display:block}
section.band--dark .ph.has-img{background:none;border:0}
.team .p .nm{font-weight:600;font-size:16.5px}
.team .p .ro{font-size:14px;color:var(--muted)}
section.band--dark .team .p .ro{color:var(--dark-muted)}
section.band--dark .ph{background:transparent}
.teamcta{margin-top:84px;padding-top:56px;border-top:1px solid var(--dark-hair);text-align:center}
.teamcta h2{max-width:22ch;margin:0 auto 16px}
.teamcta p{max-width:52ch;margin:0 auto 30px;color:var(--dark-muted)}
.twolinks{display:flex;gap:16px;flex-wrap:wrap;margin-top:40px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:36px;margin-top:60px}
.stats .n{font-size:clamp(34px,4.6vw,56px);font-weight:600;letter-spacing:-.035em;line-height:1}
.stats .k{margin-top:10px;font-size:14.5px;color:var(--dark-muted);max-width:26ch}

/* ---------------- inner page openers ---------------- */
.opener{padding:92px 0 20px;text-align:center;position:relative}
.opener h1{font-size:clamp(32px,5.4vw,62px);max-width:19ch;margin:20px auto 0}
.opener .deck{margin-top:28px}

/* ---------------- forms & buttons ---------------- */
.btn{background:var(--ink);color:var(--paper);border:0;border-radius:999px;padding:15px 30px;cursor:pointer;
  font-family:inherit;font-size:15.5px;font-weight:500;text-decoration:none;display:inline-block}
.btn:hover{opacity:.86}
section.band--dark .btn{background:var(--dark-ink);color:var(--dark)}
.btn.btn--ghost{background:none;color:var(--ink);box-shadow:inset 0 0 0 1px var(--hair)}
.btn.btn--ghost:hover{box-shadow:inset 0 0 0 1px var(--accent);color:var(--accent)}
form{display:grid;gap:26px;max-width:560px;margin:48px auto 0}
form[hidden]{display:none}
.field{display:grid;gap:7px;border-bottom:1px solid var(--hair);padding-bottom:9px}
label{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
label .rq{margin-left:3px;color:var(--accent)}
.reqnote{margin:0;font-size:12.5px;color:var(--muted)}
input,select,textarea{font-family:inherit;font-size:17px;padding:2px 0;border:0;background:transparent;
  color:var(--ink);border-radius:0;width:100%}
input:focus,select:focus,textarea:focus{outline:none}
.field:focus-within{border-bottom-color:var(--accent)}
textarea{min-height:96px;resize:vertical;line-height:1.6}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.formstat{margin:0;font-size:15px;min-height:1px}
.formstat.is-ok{color:var(--accent);font-weight:500}
.formstat.is-bad{color:#B4232B}
.formstat a{color:inherit;font-weight:600}
:root:not([data-theme="light"]) .formstat.is-bad{color:#FF9A9F}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .formstat.is-bad{color:#FF9A9F}}
:root[data-theme="dark"] .formstat.is-bad{color:#FF9A9F}
.btn[disabled]{opacity:.5;cursor:default}
.formnote{font-size:13.5px;color:var(--muted);margin:0}
.details{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:28px;margin-top:68px}
.details .k{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.cta{text-align:center;margin-top:92px}
.cta h2{max-width:20ch;margin:0 auto 28px}

/* ---------------- footer ---------------- */
footer.site{background:var(--paper2);border-top:1px solid var(--hair);padding:70px 0 46px;font-size:14.5px}
/* the contact strip that sits above the footer columns */
.footcta{display:grid;grid-template-columns:minmax(260px,46%) 1fr;gap:48px;align-items:center;
  padding-bottom:56px;margin-bottom:52px;border-bottom:1px solid var(--hair)}
@media (max-width:900px){.footcta{grid-template-columns:1fr;gap:30px}}
.footcta .fct-text h2{font-size:clamp(24px,2.6vw,34px);margin:0 0 14px;max-width:14ch}
.footcta .fct-text p{margin:0;color:var(--muted);font-size:15px;line-height:1.65;max-width:44ch}
.footact{display:flex;align-items:center;gap:28px;flex-wrap:wrap}
.footact .mail{color:var(--accent);font-weight:500;text-decoration:none;font-size:16px}
.footact .mail:hover{text-decoration:underline}

.footform .formstat{font-size:14px}
.fcols{align-items:start}
.fseo{border-top:1px solid var(--hair);margin-top:44px;padding-top:24px;color:var(--muted);
  font-size:13px;line-height:1.7;max-width:none}
.fcols{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:38px}
@media (max-width:820px){.fcols{grid-template-columns:1fr 1fr}}
@media (max-width:520px){.fcols{grid-template-columns:1fr}}
.fcols .fh{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:0 0 14px;font-weight:500}
.fcols button,.fcols a{display:block;text-decoration:none;background:none;border:0;padding:3px 0;cursor:pointer;font-family:inherit;
  font-size:14.5px;color:var(--ink);text-align:left}
.fcols button:hover,.fcols a:hover{color:var(--accent)}
.fcols .fmark{display:flex;align-items:center;gap:11px}
.fcols .fmark img{width:30px;height:30px}
.fcols .fmark span{font-size:14px;font-weight:700;letter-spacing:.3em;text-transform:uppercase}
.fcols p{color:var(--muted);margin:14px 0 0;max-width:34ch}
.fbase{border-top:1px solid var(--hair);margin-top:48px;padding-top:22px;display:flex;
  justify-content:space-between;gap:20px;flex-wrap:wrap;color:var(--muted);font-size:13px}
.editnote{border-top:1px solid var(--hair);padding:24px 0 40px;font-size:13.5px;color:var(--muted)}
.editnote strong{color:var(--ink);font-weight:600}
img,svg{display:block;max-width:100%}
.rv{opacity:0;transform:translateY(20px)}
.rv.in{opacity:1;transform:none;transition:opacity .75s cubic-bezier(.2,.7,.3,1),transform .75s cubic-bezier(.2,.7,.3,1)}
@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none}}

/* ---------------- parts instead of icons, everywhere ----------------
   .fly is a cut-out standing in for a line icon: on the card grids it hangs off the
   top-right corner like the domain tiles; on service rows and step lists it sits in
   the icon column, larger than the column, tilted, in front of the hairlines. */
.fly{display:block;position:relative;pointer-events:none}
.fly img{width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain;
  --tilt:-8deg;transform:rotate(var(--tilt));
  filter:drop-shadow(0 18px 22px rgb(21 22 26/.20)) drop-shadow(0 3px 5px rgb(21 22 26/.10));
  transition:transform .5s cubic-bezier(.16,1.2,.3,1)}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .fly img{filter:drop-shadow(0 18px 26px rgb(0 0 0/.6))}
}
:root[data-theme="dark"] .fly img{filter:drop-shadow(0 18px 26px rgb(0 0 0/.6))}

/* card grids (Project Yard, Start-ups, Manufacturing, Pricing) */
.grid4{overflow:visible}
.grid4 > div{position:relative}
.grid4--fly > div{padding-top:78px;margin-top:40px}
.grid4 > div.has-fly{transition:transform .3s ease,border-color .3s ease}
.grid4--fly > div:not(.has-fly) .ic{position:absolute;top:30px;left:26px}
.grid4 > div.has-fly:hover{transform:translateY(-3px);border-color:var(--accent)}
.grid4 > div.has-fly .fly{position:absolute;top:-52px;right:-14px;width:min(64%,200px);height:124px;
  display:flex;align-items:flex-end;justify-content:flex-end;z-index:2}
.grid4 > div:nth-child(even) .fly img{--tilt:7deg}
.grid4 > div.has-fly:hover .fly img{transform:rotate(0deg) scale(1.08) translateY(-6px)}

/* service rows: the part sits in a wider icon column and leans out over the left margin */
.svcs--fly .svc--ic{grid-template-columns:120px minmax(150px,22%) 1fr;align-items:center}
.svcs--fly .svc--ic .ic{margin:0 auto}
.svc--ic.has-fly .fly{height:96px;width:150px;margin-left:-30px;display:flex;align-items:center;justify-content:center}
.svc--ic.has-fly .fly img{max-height:120px;max-width:150px}
.svc--ic:nth-child(even) .fly img{--tilt:6deg}
.svc--ic.has-fly:hover .fly img{transform:rotate(0deg) scale(1.1)}
@media (max-width:700px){
  .svcs--fly .svc--ic{grid-template-columns:1fr}
  .svc--ic.has-fly .fly{margin-left:0;justify-content:flex-start;height:80px}
  .svc--ic.has-fly .fly img{max-height:96px}
}

/* step lists: same idea in the number column */
.steps--fly .step{grid-template-columns:110px 1fr;align-items:center}
.steps--fly .step .no{padding-top:0;justify-content:center}
.step.has-fly .fly{height:84px;width:130px;margin-left:-24px;display:flex;align-items:center;justify-content:center}
.step.has-fly .fly img{max-height:104px;max-width:130px}
.step:nth-child(even) .fly img{--tilt:6deg}
.step.has-fly:hover .fly img{transform:rotate(0deg) scale(1.1)}
@media (max-width:560px){
  .steps--fly .step{grid-template-columns:84px 1fr}
  .step.has-fly .fly{width:96px;margin-left:-10px;height:70px}
  .step.has-fly .fly img{max-height:84px;max-width:96px}
}
@media (prefers-reduced-motion:reduce){.fly img{transition:none}}

/* ---------------- "How it works": four small steps on one screen ----------------
   The alternating rows are for pages with room; on the home page the four steps sit
   side by side with small pictures so the whole section fits one laptop screen. */
.alt--compact{margin-top:44px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:clamp(18px,2.4vw,34px);align-items:start}
.alt--compact .altrow{grid-template-columns:1fr;gap:14px;align-items:start}
.alt--compact .altrow:nth-child(even) .altmedia{order:0}
.alt--compact .altmedia{min-height:0}
.alt--compact .altmedia .ph{aspect-ratio:16/10}
.alt--compact .altmedia img{border-radius:16px}
.alt--compact .altmedia--cut{min-height:170px;height:170px;justify-content:flex-start;padding-left:6px}
.alt--compact .altmedia--cut img{max-height:160px;max-width:92%;
  transform:translateY(calc(var(--py) * -8px)) rotate(var(--tilt)) scale(1)}
.alt--compact .alttext h3{font-size:clamp(17px,1.5vw,20px);margin:0 0 8px}
.alt--compact .alttext p{font-size:14.5px;line-height:1.55}
.alt--compact .alttext .sn{margin-bottom:8px}

@media (max-width:520px){.alt--compact{grid-template-columns:1fr}
  .alt--compact .altmedia--cut{height:120px;min-height:120px}
  .alt--compact .altmedia--cut img{max-height:110px}}

/* machines: level with the horizon, no tilt */
.alt--level .altmedia--cut img{--tilt:0deg}
.alt--level .altmedia--cut{justify-content:center;padding-left:0}

/* ---------------- production in India: picture in a thin dark frame beside the text ---------------- */
.soonrow{display:grid;grid-template-columns:1fr;gap:clamp(28px,5vw,64px);align-items:center}
.soonrow.has-pic{grid-template-columns:minmax(0,1.05fr) minmax(0,1fr)}
.soonpic{border:1.5px solid #2C2E36;border-radius:6px;padding:10px;background:var(--paper);
  box-shadow:0 30px 60px rgb(21 22 26/.14)}
.soonpic img{width:100%;height:auto;display:block;border-radius:2px}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .soonpic{border-color:#D8DAE2}}
:root[data-theme="dark"] .soonpic{border-color:#D8DAE2}
@media (max-width:860px){.soonrow.has-pic{grid-template-columns:1fr}.soonpic{order:-1}}

/* ---------------- the survey cards, drawn as the form itself ---------------- */
.formcard--preview{text-decoration:none;color:inherit;padding:0;overflow:hidden;background:var(--paper);
  transition:transform .3s ease,border-color .3s ease,box-shadow .3s ease}
.formcard--preview:hover{transform:translateY(-4px);border-color:var(--accent);box-shadow:0 24px 44px rgb(21 22 26/.16)}
section.band--dark .formcard--preview{background:var(--paper);color:var(--ink)}
.fp{display:block;padding:0 0 22px}
.fp-bar{display:block;height:12px;background:linear-gradient(90deg,#2349B2,#5C23B2)}
.fp-title{display:block;font-size:19px;font-weight:600;letter-spacing:-.02em;padding:22px 26px 4px;line-height:1.2}
.fp-sub{display:block;font-size:14px;color:var(--muted);padding:0 26px 18px}
.fp-q{display:block;padding:12px 26px 6px;border-top:1px solid var(--hair)}
.fp-l{display:block;height:10px;border-radius:5px;background:var(--hair);width:78%;margin:6px 0}
.fp-l--s{width:46%;height:8px;opacity:.7}
.fp-opts{display:block;padding:2px 26px 12px}
.fp-o{display:block;position:relative;height:9px;margin:10px 0 10px 26px;border-radius:5px;background:var(--hair);width:55%}
.fp-o::before{content:"";position:absolute;left:-26px;top:-4px;width:16px;height:16px;border-radius:50%;
  border:2px solid var(--muted);opacity:.7}
.fp-o:first-child{background:rgb(var(--bub)/.35)}
.fp-o:first-child::before{border-color:var(--accent);background:radial-gradient(circle,var(--accent) 40%,transparent 44%)}
.fp-btn{display:inline-block;margin:14px 26px 0;background:var(--ink);color:var(--paper);border-radius:999px;
  padding:11px 20px;font-size:14px;font-weight:500}
section.band--dark .formcard--preview .fp-btn{background:var(--ink);color:var(--paper)}
.page-yard .formcard--preview .fp-btn{background:linear-gradient(140deg,#2440E0,#5C23B2);color:#fff}

/* ---------------- the soft circles, on white sections too ---------------- */
.band--bub{isolation:isolate;overflow:hidden}
.band--bub::before{
  content:"";position:absolute;inset:-10% 0 -10%;z-index:0;pointer-events:none;
  background:
    radial-gradient(closest-side,rgb(var(--bub)/.14),rgb(var(--bub)/0)) 4% 18%/min(420px,52vw) min(420px,52vw) no-repeat,
    radial-gradient(closest-side,rgb(var(--bub)/.10),rgb(var(--bub)/0)) 96% 12%/min(320px,40vw) min(320px,40vw) no-repeat,
    radial-gradient(closest-side,rgb(var(--bub)/.09),rgb(var(--bub)/0)) 80% 92%/min(520px,64vw) min(520px,64vw) no-repeat,
    radial-gradient(closest-side,rgb(var(--bub)/.08),rgb(var(--bub)/0)) 22% 98%/min(260px,34vw) min(260px,34vw) no-repeat;
}
.band--india{padding-top:0;margin-top:-56px}

/* ---------------- loading screen: the mark, pulsing, until every picture is in ---------------- */
#loader{position:fixed;inset:0;z-index:300;background:#08080B;display:flex;align-items:center;justify-content:center;
  opacity:1;transition:opacity .6s ease}   /* visible from the first paint; JS lifts it */
#loader.is-done{opacity:0!important;pointer-events:none}
#loader img{width:clamp(72px,9vw,120px);height:auto;animation:lpulse 1.4s ease-in-out infinite;
  filter:drop-shadow(0 0 28px rgb(112 185 248/.35))}
@keyframes lpulse{0%,100%{transform:scale(.9);opacity:.75}50%{transform:scale(1.08);opacity:1}}
/* On a phone the tilted cut-outs overhang their row by a couple of pixels, which is
   enough to give the whole page a horizontal scrollbar. Clip each section sideways —
   overflow-x:clip leaves the vertical pop intact, unlike hidden, and sections are not
   ancestors of the fixed nav, so nothing that has to escape the page is caught by it. */
@media (max-width:860px){section{overflow-x:clip}}
body.loading{overflow:hidden}
@media (prefers-reduced-motion:reduce){#loader img{animation:none}}

/* ---------------- engineering cases, same shape as the website cases ---------------- */
.folio--exp{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
@media (min-width:1080px){
  /* Six tracks instead of three so a short last row fills the width instead of
     leaving a hole. The card count varies per page — 2 on Manufacturing, 3 on
     Start-ups, 4 on Prototyping, 5 on Work — so each count gets its own rule,
     scoped by :first-child:nth-last-child(n) / :nth-child(n):nth-last-child(m). */
  .folio--exp{grid-template-columns:repeat(6,1fr)}
  .folio--exp>*{grid-column:span 2}
  .folio--exp>:first-child:nth-last-child(1){grid-column:span 6}
  .folio--exp>:first-child:nth-last-child(2),
  .folio--exp>:first-child:nth-last-child(2)~*{grid-column:span 3}
  .folio--exp>:first-child:nth-last-child(4),
  .folio--exp>:first-child:nth-last-child(4)~*{grid-column:span 3}
  .folio--exp>:nth-child(4):nth-last-child(2),
  .folio--exp>:nth-child(5):nth-last-child(1){grid-column:span 3}
}
.fcard--exp{cursor:default}
.fcard--exp:hover{transform:none;border-color:var(--hair)}
.fcard .shot--cut{padding:26px 28px;background:var(--paper2);position:relative;overflow:visible}
.fcard .shot--cut img{width:auto;height:auto;max-width:92%;max-height:100%;object-fit:contain;
  --tilt:-6deg;transform:rotate(var(--tilt));
  filter:drop-shadow(0 22px 26px rgb(21 22 26/.20)) drop-shadow(0 4px 6px rgb(21 22 26/.10))}
.fcard--exp:nth-child(even) .shot--cut img{--tilt:5deg}
section.band--grey .fcard .shot--cut{background:var(--paper)}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .fcard .shot--cut img{filter:drop-shadow(0 22px 30px rgb(0 0 0/.6))}}
:root[data-theme="dark"] .fcard .shot--cut img{filter:drop-shadow(0 22px 30px rgb(0 0 0/.6))}
.fcard .live--plain{color:var(--muted);font-weight:500}
.fcard .live--plain::after{content:""}
.fcard--exp p{font-size:14.5px}

/* while a switched-to page waits for its pictures, keep the reveal items hidden */
#app.is-waiting .rv{opacity:0;transform:translateY(20px);transition:none}

/* ---------------- web pricing: packages, add-ons, Care ---------------- */
.promo{display:inline-block;margin:18px 0 0;padding:8px 16px;border-radius:999px;
  background:rgb(var(--bub)/.12);color:var(--accent);font-size:14px;font-weight:600}
.pkgs{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:30px}
@media (max-width:900px){.pkgs{grid-template-columns:1fr}}
.pkg{display:flex;flex-direction:column;border:1px solid var(--hair);border-radius:var(--r);
  background:var(--paper);padding:28px 28px 26px}
.pkg h3{margin:0 0 14px;font-size:24px;letter-spacing:-.02em}
.pkg ul{margin:0 0 22px;padding:0;list-style:none;color:var(--muted);font-size:15.5px;line-height:1.55}
.pkg li{padding:6px 0;border-top:1px solid var(--hair)}
.pkg li:first-child{border-top:0}
.pkg-p{margin-top:auto;padding-top:16px;border-top:1px solid var(--hair);font-size:15px;color:var(--muted)}
.pkg-p b{font-size:28px;letter-spacing:-.03em;color:var(--ink);font-weight:650}
.pkg-p s, .pv s{color:var(--muted);margin-right:4px}
.pfrom{color:var(--muted);font-size:14px;font-weight:400}
.pricepre{margin-top:84px}
.prices .prow .pd:empty{display:block}
.tblwrap{margin-top:26px;overflow:hidden;border:1px solid var(--hair);border-radius:var(--r);background:var(--paper)}
table.care{width:100%;border-collapse:collapse;font-size:15px}

table.care th, table.care td{padding:14px 18px;text-align:left;border-top:1px solid var(--hair);vertical-align:top}
table.care thead th{border-top:0;font-size:13px;letter-spacing:.16em;color:var(--accent);background:var(--paper2)}
table.care tbody th{font-weight:500;color:var(--ink);width:44%}
table.care td{color:var(--muted)}
table.care td b{color:var(--ink);font-size:17px}
/* On a phone the four columns don't fit, so each row becomes its label on top and the
   three tiers side by side underneath, each tagged S / M / L from data-t. */
@media (max-width:640px){
  table.care, table.care tbody{display:block}
  table.care thead{position:absolute;left:-9999px}
  table.care tr{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--hair);padding:12px 14px}
  table.care tbody tr:first-child{border-top:0}
  table.care th, table.care td{border:0;padding:0}
  table.care tbody th{grid-column:1/-1;width:auto;margin-bottom:6px}
  table.care td::before{content:attr(data-t);display:block;font-size:11px;letter-spacing:.16em;color:var(--accent);font-weight:600}
}

/* ---------------- example projects per domain ---------------- */
/* The price column is its own track so the three numbers line up down the page. */
.prow--dom{grid-template-columns:minmax(220px,1fr) minmax(120px,auto) minmax(90px,auto);gap:0 28px}
.prow--dom .pd{max-width:none;white-space:nowrap;font-size:14.5px}
@media (max-width:640px){
  .prow--dom{grid-template-columns:1fr auto;gap:4px 16px}
  .prow--dom .pd{grid-column:1/3;order:3;white-space:normal}
}
/* The fold inside a domain card. A native <details>, styled so the marker is ours. */
.fold{margin-top:16px;border-top:1px solid var(--hair)}
.fold>summary{list-style:none;cursor:pointer;padding:12px 0 2px;font-size:13px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--accent);display:flex;
  align-items:center;gap:9px}
.fold>summary::-webkit-details-marker{display:none}
.fold>summary::after{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);
  transition:transform .2s ease}
.fold[open]>summary::after{transform:rotate(-135deg) translateY(-1px)}
.fold>summary:hover{color:var(--ink)}
.prices--fold{margin-top:6px}
.prices--fold .prow{padding:12px 0;grid-template-columns:1fr auto;gap:2px 14px}
.prices--fold .pn{font-size:15px;font-weight:500}
.prices--fold .pd{grid-column:1/3;order:3;font-size:13.5px;max-width:none;white-space:normal}
.prices--fold .pv{font-size:16px}

/* ---------------- price panels float, they do not stretch ---------------- */
/* Opening a panel must not change the height of the card it hangs from, or the length of
   the section around it: above the breakpoint the panel is absolutely positioned over
   whatever sits below. Below it, where sections clip horizontally and columns are single
   file anyway, the panel stays in normal flow. */
.disc > div.fold-open{z-index:6}
.disc > div:has(.fold[open]){z-index:6}
.fold--dom{position:relative;margin-top:0;border:1px solid var(--hair);border-radius:var(--r);
  background:var(--paper);padding:0 16px}
.fold--dom > summary{padding:14px 0;font-size:15.5px;letter-spacing:0;text-transform:none;
  font-weight:500;color:var(--ink);justify-content:space-between}
.fold--dom > summary::after{color:var(--accent)}
.fold--dom > summary:hover{color:var(--accent)}
.fold--dom[open]{border-color:var(--accent);z-index:6}
.domgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,270px),1fr));
  gap:12px;margin-top:44px;align-items:start;position:relative;z-index:3}
@media (min-width:861px){
  .fold[open] > .prices--fold{position:absolute;left:-1px;right:-1px;top:100%;z-index:7;
    margin:0;padding:2px 22px 16px;background:var(--paper);border:1px solid var(--accent);
    border-top:0;border-radius:0 0 var(--r) var(--r);box-shadow:0 26px 44px rgb(0 0 0/.20)}
  .fold--dom[open] > .prices--fold{padding:2px 16px 12px}
}
.fold--dom .prices--fold{margin-top:0;padding-bottom:6px}
.prices--fold .prow:last-child{border-bottom:0}

/* Every Tarieven block is a menu entry. A price in the button when the entry is one
   product; a full-width entry when the panel holds a table that needs the room. */
.fold--dom > summary .mn{flex:1 1 auto}
.fold--dom > summary .mp{flex:0 0 auto;white-space:nowrap;font-weight:600;font-size:15px;color:var(--ink)}
.fold--dom > summary .mp s{font-weight:400;font-size:12.5px;color:var(--muted);margin-right:3px}
.fold--dom > summary .mp .pfrom{font-weight:400;font-size:12px;color:var(--muted);letter-spacing:0}
.fold--dom[open] > summary .mp{color:var(--accent)}
.fold--full{grid-column:1/-1}
.prices--fold .pkgl{margin:4px 0 10px;padding-left:19px;color:var(--muted);font-size:14.5px;line-height:1.95}
.prices--fold .pnote{margin:4px 0 12px;color:var(--muted);font-size:14.5px;line-height:1.7}
.prices--fold .tblwrap{margin:2px 0 6px}
.prices--fold .prices{margin:0}
/* A divider inside a panel: add-ons under the packages, on-quote under the studies. */
.prices--fold .psub{margin:16px 0 2px;padding-top:12px;border-top:1px solid var(--hair);
  font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-weight:600}
