/* CBI Software GmbH — corporate site
   Swiss International Style: strict grid, Helvetica lineage, paper + ink,
   one precise red accent used sparingly. Light theme by deliberate choice. */

:root {
  --paper: #fbfbf9;
  --paper-raised: #ffffff;
  --ink: #141517;
  --ink-soft: #43464b;
  --ink-faint: #74787e;
  --rule: #dcdcd6;
  --rule-strong: #b9b9b1;
  --accent: #ff0000;          /* official Swiss red (CD Bund / Pantone 485) — the only red on this site */
  --max: 1120px;
  --gutter: clamp(1.25rem, 4vw, 3rem);
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition: none !important; animation: none !important; }
}

body {
  background: var(--paper);
  color: var(--ink);
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 1.0625rem;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

.wrap { max-width: var(--max); margin: 0 auto; padding-inline: var(--gutter); }

a { color: inherit; text-decoration: none; }
a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* ---------- header ---------- */
header {
  position: sticky; top: 0; z-index: 10;
  background: color-mix(in srgb, var(--paper) 92%, transparent);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--rule);
}
.nav {
  display: flex; align-items: center; justify-content: space-between;
  height: 4.25rem;
}
.wordmark {
  display: flex; align-items: baseline; gap: .55rem;
  font-weight: 700; font-size: 1.05rem; letter-spacing: -.01em;
}
/* Swiss flag, drawn to the federal geometry: square field, cross arms
   6/32 wide and 20/32 long. Pure CSS — no image request. */
.wordmark::before {
  content: ""; width: .86rem; height: .86rem; display: inline-block;
  transform: translateY(-1px); flex: none;
  background:
    linear-gradient(#fff, #fff) center / 18.75% 62.5% no-repeat,
    linear-gradient(#fff, #fff) center / 62.5% 18.75% no-repeat,
    var(--accent);
}
nav ul { display: flex; gap: 2rem; list-style: none; align-items: center; }
nav ul a { font-size: .92rem; color: var(--ink-soft); }
nav ul a:hover { color: var(--ink); }
.lang { font-size: .82rem; color: var(--ink-faint); border: 1px solid var(--rule-strong); padding: .3rem .7rem; }
.lang:hover { border-color: var(--ink); color: var(--ink); }
@media (max-width: 720px) { nav ul { gap: 1.1rem; } nav ul li.hide-m { display: none; } }

/* ---------- hero ---------- */
.hero { position: relative; padding: clamp(2.25rem, 6vh, 4rem) 0 clamp(3rem, 8vh, 5.5rem); }
.hero .kicker {
  font-size: .8rem; text-transform: uppercase; letter-spacing: .14em;
  color: var(--ink-faint); margin-bottom: 1.6rem;
}
.hero h1 {
  font-size: clamp(2.3rem, 5.4vw, 4.1rem);
  line-height: 1.06; letter-spacing: -.022em; font-weight: 700;
  max-width: 21ch; text-wrap: balance;
}
.hero h1 em { font-style: normal; color: var(--ink-faint); }
.hero p.lede {
  margin-top: 2rem; max-width: 52ch; font-size: 1.15rem;
  color: var(--ink-soft); text-wrap: pretty;
}
.hero .cta { margin-top: 2.6rem; display: flex; gap: 1rem; flex-wrap: wrap; }
.btn {
  display: inline-block; padding: .78rem 1.5rem; font-size: .95rem; font-weight: 500;
  border: 1px solid var(--ink); transition: background .15s, color .15s;
}
.btn.solid { background: var(--ink); color: var(--paper); }
.btn.solid:hover { background: var(--accent); border-color: var(--accent); }
.btn.ghost:hover { background: var(--ink); color: var(--paper); }

/* ---------- facts strip ---------- */
.facts { border-block: 1px solid var(--rule); }
.facts .wrap {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 0 2rem; padding-block: 1.4rem;
}
.facts div { font-size: .85rem; color: var(--ink-soft); line-height: 1.45; }
.facts b { display: block; font-size: .78rem; text-transform: uppercase; letter-spacing: .12em; color: var(--ink-faint); font-weight: 500; margin-bottom: .15rem; }
@media (max-width: 860px) { .facts .wrap { grid-template-columns: 1fr 1fr; gap: 1.2rem 2rem; } }

/* ---------- sections ---------- */
section { padding-block: clamp(3.5rem, 9vh, 6.5rem); }
.label {
  font-size: .8rem; text-transform: uppercase; letter-spacing: .14em;
  color: var(--accent); font-weight: 500; margin-bottom: 1.4rem;
}
h2 {
  font-size: clamp(1.7rem, 3.2vw, 2.5rem); line-height: 1.15;
  letter-spacing: -.018em; font-weight: 700; max-width: 24ch; text-wrap: balance;
}
.section-intro { margin-top: 1.4rem; max-width: 56ch; color: var(--ink-soft); }

/* expertise */
.cards { margin-top: 3rem; display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--rule); border: 1px solid var(--rule); }
.card { background: var(--paper-raised); padding: 2.2rem 1.9rem 2.5rem; display: flex; flex-direction: column; }
.card h3 { font-size: 1.18rem; letter-spacing: -.01em; line-height: 1.3; }
.card p { margin-top: .9rem; font-size: .95rem; color: var(--ink-soft); flex: 1; }
.card ul { margin-top: 1.2rem; list-style: none; }
.card li { font-size: .88rem; color: var(--ink-soft); padding: .42rem 0; border-top: 1px solid var(--rule); }
.card li::before { content: "— "; color: var(--accent); }
@media (max-width: 860px) { .cards { grid-template-columns: 1fr; } }

/* standards */
.standards { background: var(--ink); color: var(--paper); }
.standards .label { color: var(--accent); }
.standards h2 { color: #fff; }
.standards .grid {
  margin-top: 3rem; display: grid; grid-template-columns: repeat(3, 1fr); gap: 2.6rem 2.4rem;
}
.standards .grid h3 { font-size: 1.02rem; letter-spacing: .01em; }
.standards .grid h3::before {
  content: ""; display: block; width: 2.2rem; height: 2px; background: var(--accent); margin-bottom: 1rem;
}
.standards .grid p { margin-top: .7rem; font-size: .92rem; color: #b9bcc2; }
@media (max-width: 860px) { .standards .grid { grid-template-columns: 1fr; gap: 2rem; } }

/* platform */
.platform .split { margin-top: 3rem; display: grid; grid-template-columns: 5fr 4fr; gap: 3.5rem; align-items: start; }
.platform .split > div:first-child p + p { margin-top: 1rem; }
.platform .split p { color: var(--ink-soft); }
.spec { border: 1px solid var(--rule-strong); background: var(--paper-raised); }
.spec header { position: static; background: var(--ink); color: var(--paper); border: 0; padding: .8rem 1.3rem; font-size: .8rem; text-transform: uppercase; letter-spacing: .13em; backdrop-filter: none; }
.spec dl { padding: .6rem 1.3rem 1rem; }
.spec div { display: flex; justify-content: space-between; gap: 1rem; padding: .62rem 0; border-bottom: 1px solid var(--rule); font-size: .88rem; }
.spec div:last-child { border-bottom: 0; }
.spec dt { color: var(--ink-faint); }
.spec dd { text-align: right; font-weight: 500; }
@media (max-width: 860px) { .platform .split { grid-template-columns: 1fr; gap: 2.2rem; } }

/* company */
.company .cols { margin-top: 2.6rem; display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; }
.company .cols p { color: var(--ink-soft); }
.company .cols p + p { margin-top: 1rem; }
@media (max-width: 860px) { .company .cols { grid-template-columns: 1fr; gap: 1.4rem; } }

/* contact */
.contact { border-top: 1px solid var(--rule); }
.contact .row { margin-top: 2.4rem; display: flex; gap: 4rem; flex-wrap: wrap; }
.contact .row b { display: block; font-size: .78rem; text-transform: uppercase; letter-spacing: .12em; color: var(--ink-faint); font-weight: 500; margin-bottom: .4rem; }
.contact .row a { border-bottom: 1px solid var(--rule-strong); }
.contact .row a:hover { border-color: var(--accent); }
address { font-style: normal; color: var(--ink-soft); line-height: 1.55; }

/* footer */
footer { border-top: 1px solid var(--rule); padding-block: 1.6rem; }
footer .wrap { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; font-size: .82rem; color: var(--ink-faint); }
footer a:hover { color: var(--ink); }

/* legal page */
.legal { padding-block: clamp(3rem, 8vh, 5rem); }
.legal h1 { font-size: clamp(1.9rem, 3.5vw, 2.6rem); letter-spacing: -.02em; }
.legal h2 { font-size: 1.15rem; margin-top: 2.6rem; }
.legal p { margin-top: .8rem; max-width: 62ch; color: var(--ink-soft); }
.legal address { margin-top: .8rem; }
.legal h3 { font-size: .95rem; margin-top: 1.6rem; letter-spacing: -.01em; }
.legal ul { margin-top: .8rem; max-width: 62ch; padding-left: 1.1rem; }
.legal li { margin-top: .35rem; color: var(--ink-soft); font-size: .95rem; }
.legal li b { color: var(--ink); font-weight: 600; }
.legal p.updated { font-size: .82rem; color: var(--ink-faint); margin-top: .6rem; }
.legal .scope { margin-top: 1.8rem; padding: 1.1rem 1.2rem; border: 1px solid var(--rule); border-left: 3px solid var(--red); }
.legal .scope p { margin-top: 0; }
.legal .scope p + p { margin-top: .7rem; }

/* verifiable claims, the audit evidence block */
.legal .claims { margin-top: 1.4rem; display: grid; gap: 0; border: 1px solid var(--rule); }
.legal .claims div { display: flex; gap: 1rem; align-items: baseline; padding: .7rem 1rem; border-bottom: 1px solid var(--rule); font-size: .92rem; }
.legal .claims div:last-child { border-bottom: 0; }
.legal .claims b { flex: 0 0 11rem; color: var(--red); font-weight: 600; }
.legal .claims span { color: var(--ink-soft); }
@media (max-width: 46rem) {
  .legal .claims div { flex-direction: column; gap: .3rem; }
  .legal .claims b { flex: none; }
}

/* processor table */
.legal .tablewrap { margin-top: 1rem; overflow-x: auto; }
.legal table { border-collapse: collapse; width: 100%; min-width: 34rem; font-size: .88rem; }
.legal th, .legal td { text-align: left; vertical-align: top; padding: .6rem .8rem; border-bottom: 1px solid var(--rule); }
.legal th { font-weight: 600; color: var(--ink); font-size: .78rem; letter-spacing: .06em; text-transform: uppercase; }
.legal td { color: var(--ink-soft); }
.legal td b { color: var(--ink); font-weight: 600; }

/* ============================================================
   First-paint assembly — "typesetting"
   The domain's vocabulary rains down the page in columns, the grid is
   ruled, then the structure resolves out of it.
   Pure CSS: the site ships no first-party JavaScript, so no JS is used.
   ============================================================ */

/* --- the ruled grid: hairlines draw across --- */
header { position: relative; }
header::after {
  content: ""; position: absolute; left: 0; bottom: -1px; height: 1px; width: 100%;
  background: var(--accent); transform-origin: left center;
  animation: rule-in .55s cubic-bezier(.2,.7,.2,1) both;
}
@keyframes rule-in {
  0%   { transform: scaleX(0); opacity: 1; }
  70%  { transform: scaleX(1); opacity: 1; }
  100% { transform: scaleX(1); opacity: 0; }
}

/* --- vocabulary rain: 155 terms falling in 12 columns --- */
.assembly {
  position: absolute; inset: 0; overflow: hidden; pointer-events: none;
  z-index: 0;
}
.assembly span {
  position: absolute; top: 0; left: var(--cx); transform: translateX(-50%);
  font-size: .64rem; letter-spacing: .12em; text-transform: uppercase; font-weight: 500;
  color: var(--ink-faint); font-variant-numeric: tabular-nums; white-space: nowrap;
  animation: rain 1.3s linear both;
}
.assembly span.hot {
  color: var(--accent); font-weight: 700; font-size: .8rem; letter-spacing: .2em;
  animation-name: rain-hot;
}
@keyframes rain-hot {
  0%   { opacity: 0; transform: translateX(-50%) translateY(-3rem); text-shadow: none }
  10%  { opacity: 1; text-shadow: 0 0 10px rgba(255,0,0,.55), 0 0 28px rgba(255,0,0,.22) }
  42%  { opacity: 1; text-shadow: 0 0 20px rgba(255,0,0,.85), 0 0 52px rgba(255,0,0,.45) }
  72%  { opacity: .9; text-shadow: 0 0 12px rgba(255,0,0,.5), 0 0 30px rgba(255,0,0,.2) }
  100% { opacity: 0; transform: translateX(-50%) translateY(62vh); text-shadow: none }
}
.assembly span:nth-child(7n)   { font-size: .88rem; letter-spacing: .1em }
.assembly span:nth-child(3n+1) { opacity: .8 }

/* Fragments fade out while still spread, so they never pile up on the
   centre point. Transform + opacity only — no filter on 155 nodes. */
@keyframes rain {
  0%   { opacity: 0;   transform: translateX(-50%) translateY(-3rem) }
  8%   { opacity: .85 }
  70%  { opacity: .45 }
  100% { opacity: 0;   transform: translateX(-50%) translateY(62vh) }
}
.assembly .f1{--cx:33.92%;animation-delay:0.248s;animation-duration:1.67s}
.assembly .f2{--cx:78.85%;animation-delay:0.241s;animation-duration:1.59s}
.assembly .f3{--cx:11.53%;animation-delay:0.221s;animation-duration:1.66s}
.assembly .f4{--cx:41.74%;animation-delay:0.273s;animation-duration:1.14s}
.assembly .f5{--cx:77.8%;animation-delay:0.556s;animation-duration:1.91s}
.assembly .f6{--cx:66.75%;animation-delay:0.346s;animation-duration:1.07s}
.assembly .f7{--cx:66.31%;animation-delay:0.61s;animation-duration:1.64s}
.assembly .f8{--cx:88.6%;animation-delay:0.148s;animation-duration:1.24s}
.assembly .f9{--cx:40.31%;animation-delay:0.674s;animation-duration:1.45s}
.assembly .f10{--cx:13.9%;animation-delay:0.389s;animation-duration:1.94s}
.assembly .f11{--cx:37.1%;animation-delay:0.295s;animation-duration:1.75s}
.assembly .f12{--cx:56.4%;animation-delay:0.2s;animation-duration:1.44s}
.assembly .f13{--cx:5.39%;animation-delay:0.303s;animation-duration:1.17s}
.assembly .f14{--cx:27.26%;animation-delay:0.237s;animation-duration:1.23s}
.assembly .f15{--cx:17.26%;animation-delay:0.022s;animation-duration:1.38s}
.assembly .f16{--cx:83.23%;animation-delay:0.038s;animation-duration:1.73s}
.assembly .f17{--cx:8.87%;animation-delay:0.084s;animation-duration:1.93s}
.assembly .f18{--cx:73.02%;animation-delay:0.322s;animation-duration:1.41s}
.assembly .f19{--cx:90.74%;animation-delay:0.186s;animation-duration:1.25s}
.assembly .f20{--cx:59.55%;animation-delay:0.204s;animation-duration:1.54s}
.assembly .f21{--cx:51.55%;animation-delay:0.303s;animation-duration:1.63s}
.assembly .f22{--cx:18.25%;animation-delay:0.411s;animation-duration:1.52s}
.assembly .f23{--cx:87.8%;animation-delay:0.474s;animation-duration:1.27s}
.assembly .f24{--cx:56.24%;animation-delay:0.365s;animation-duration:1.71s}
.assembly .f25{--cx:81.75%;animation-delay:0.253s;animation-duration:1.22s}
.assembly .f26{--cx:13.45%;animation-delay:0.727s;animation-duration:1.49s}
.assembly .f27{--cx:62.52%;animation-delay:0.309s;animation-duration:1.19s}
.assembly .f28{--cx:25.43%;animation-delay:0.229s;animation-duration:1.05s}
.assembly .f29{--cx:37.45%;animation-delay:0.601s;animation-duration:1.35s}
.assembly .f30{--cx:14.37%;animation-delay:1.141s;animation-duration:1.92s}
.assembly .f31{--cx:60.44%;animation-delay:0.461s;animation-duration:1.0s}
.assembly .f32{--cx:86.91%;animation-delay:0.769s;animation-duration:1.15s}
.assembly .f33{--cx:43.45%;animation-delay:0.064s;animation-duration:1.84s}
.assembly .f34{--cx:38.75%;animation-delay:0.866s;animation-duration:1.24s}
.assembly .f35{--cx:9.49%;animation-delay:0.253s;animation-duration:1.93s}
.assembly .f36{--cx:86.43%;animation-delay:0.936s;animation-duration:1.38s}
.assembly .f37{--cx:68.59%;animation-delay:0.902s;animation-duration:1.05s}
.assembly .f38{--cx:4.25%;animation-delay:0.604s;animation-duration:1.2s}
.assembly .f39{--cx:48.6%;animation-delay:0.05s;animation-duration:1.84s}
.assembly .f40{--cx:9.94%;animation-delay:0.544s;animation-duration:1.83s}
.assembly .f41{--cx:40.59%;animation-delay:1.204s;animation-duration:1.64s}
.assembly .f42{--cx:64.75%;animation-delay:0.704s;animation-duration:1.06s}
.assembly .f43{--cx:55.39%;animation-delay:0.738s;animation-duration:1.15s}
.assembly .f44{--cx:32.12%;animation-delay:0.599s;animation-duration:1.38s}
.assembly .f45{--cx:29.85%;animation-delay:0.567s;animation-duration:1.95s}
.assembly .f46{--cx:27.9%;animation-delay:0.961s;animation-duration:1.42s}
.assembly .f47{--cx:89.72%;animation-delay:0.466s;animation-duration:1.47s}
.assembly .f48{--cx:6.56%;animation-delay:0.848s;animation-duration:1.29s}
.assembly .f49{--cx:13.05%;animation-delay:1.4s;animation-duration:1.64s}
.assembly .f50{--cx:66.43%;animation-delay:1.07s;animation-duration:1.82s}
.assembly .f51{--cx:29.61%;animation-delay:1.174s;animation-duration:1.04s}
.assembly .f52{--cx:88.7%;animation-delay:1.1s;animation-duration:1.62s}
.assembly .f53{--cx:7.96%;animation-delay:0.931s;animation-duration:1.35s}
.assembly .f54{--cx:39.81%;animation-delay:1.539s;animation-duration:1.66s}
.assembly .f55{--cx:7.38%;animation-delay:1.176s;animation-duration:1.63s}
.assembly .f56{--cx:89.6%;animation-delay:0.643s;animation-duration:1.65s}
.assembly .f57{--cx:60.05%;animation-delay:0.612s;animation-duration:1.61s}
.assembly .f58{--cx:34.95%;animation-delay:0.828s;animation-duration:1.88s}
.assembly .f59{--cx:96.1%;animation-delay:0.318s;animation-duration:1.17s}
.assembly .f60{--cx:47.71%;animation-delay:0.298s;animation-duration:1.61s}
.assembly .f61{--cx:63.84%;animation-delay:1.093s;animation-duration:1.53s}
.assembly .f62{--cx:95.33%;animation-delay:0.518s;animation-duration:1.09s}
.assembly .f63{--cx:74.67%;animation-delay:0.332s;animation-duration:1.23s}
.assembly .f64{--cx:70.62%;animation-delay:0.507s;animation-duration:1.31s}
.assembly .f65{--cx:90.21%;animation-delay:0.859s;animation-duration:1.83s}
.assembly .f66{--cx:21.08%;animation-delay:0.105s;animation-duration:1.62s}
.assembly .f67{--cx:6.45%;animation-delay:1.23s;animation-duration:1.75s}
.assembly .f68{--cx:58.96%;animation-delay:0.915s;animation-duration:1.36s}
.assembly .f69{--cx:35.39%;animation-delay:1.101s;animation-duration:1.75s}
.assembly .f70{--cx:62.16%;animation-delay:1.435s;animation-duration:1.4s}
.assembly .f71{--cx:47.8%;animation-delay:0.674s;animation-duration:1.6s}
.assembly .f72{--cx:95.75%;animation-delay:0.803s;animation-duration:1.04s}
.assembly .f73{--cx:32.83%;animation-delay:0.777s;animation-duration:1.55s}
.assembly .f74{--cx:16.62%;animation-delay:0.663s;animation-duration:1.1s}
.assembly .f75{--cx:51.71%;animation-delay:0.659s;animation-duration:1.14s}
.assembly .f76{--cx:44.48%;animation-delay:0.341s;animation-duration:1.44s}
.assembly .f77{--cx:61.11%;animation-delay:1.315s;animation-duration:1.76s}
.assembly .f78{--cx:72.0%;animation-delay:0.775s;animation-duration:1.72s}
.assembly .f79{--cx:95.92%;animation-delay:0.964s;animation-duration:1.71s}
.assembly .f80{--cx:66.77%;animation-delay:1.366s;animation-duration:1.74s}
.assembly .f81{--cx:48.18%;animation-delay:0.855s;animation-duration:1.85s}
.assembly .f82{--cx:57.0%;animation-delay:1.063s;animation-duration:1.05s}
.assembly .f83{--cx:69.95%;animation-delay:1.039s;animation-duration:1.84s}
.assembly .f84{--cx:48.46%;animation-delay:1.185s;animation-duration:1.56s}
.assembly .f85{--cx:89.88%;animation-delay:1.231s;animation-duration:1.46s}
.assembly .f86{--cx:23.67%;animation-delay:0.398s;animation-duration:1.42s}
.assembly .f87{--cx:45.16%;animation-delay:0.525s;animation-duration:1.33s}
.assembly .f88{--cx:33.46%;animation-delay:1.191s;animation-duration:1.4s}
.assembly .f89{--cx:51.19%;animation-delay:0.94s;animation-duration:1.02s}
.assembly .f90{--cx:34.95%;animation-delay:1.495s;animation-duration:1.04s}
.assembly .f91{--cx:53.51%;animation-delay:1.143s;animation-duration:1.05s}
.assembly .f92{--cx:43.92%;animation-delay:0.927s;animation-duration:1.66s}
.assembly .f93{--cx:32.7%;animation-delay:1.583s;animation-duration:1.51s}
.assembly .f94{--cx:43.54%;animation-delay:1.231s;animation-duration:1.0s}
.assembly .f95{--cx:84.14%;animation-delay:0.609s;animation-duration:1.25s}
.assembly .f96{--cx:25.44%;animation-delay:0.615s;animation-duration:1.91s}
.assembly .f97{--cx:27.49%;animation-delay:1.461s;animation-duration:1.23s}
.assembly .f98{--cx:67.27%;animation-delay:1.546s;animation-duration:1.25s}
.assembly .f99{--cx:29.23%;animation-delay:1.769s;animation-duration:1.17s}
.assembly .f100{--cx:75.81%;animation-delay:0.571s;animation-duration:1.41s}
.assembly .f101{--cx:56.48%;animation-delay:1.278s;animation-duration:1.44s}
.assembly .f102{--cx:52.1%;animation-delay:1.538s;animation-duration:1.68s}
.assembly .f103{--cx:63.24%;animation-delay:1.711s;animation-duration:1.46s}
.assembly .f104{--cx:57.39%;animation-delay:1.64s;animation-duration:1.51s}
.assembly .f105{--cx:70.16%;animation-delay:1.353s;animation-duration:1.58s}
.assembly .f106{--cx:4.28%;animation-delay:1.537s;animation-duration:1.69s}
.assembly .f107{--cx:95.09%;animation-delay:1.233s;animation-duration:1.24s}
.assembly .f108{--cx:12.45%;animation-delay:1.723s;animation-duration:1.34s}
.assembly .f109{--cx:76.06%;animation-delay:0.935s;animation-duration:1.33s}
.assembly .f110{--cx:24.96%;animation-delay:0.995s;animation-duration:1.21s}
.assembly .f111{--cx:86.32%;animation-delay:1.271s;animation-duration:1.39s}
.assembly .f112{--cx:49.63%;animation-delay:1.463s;animation-duration:1.35s}
.assembly .f113{--cx:72.12%;animation-delay:1.694s;animation-duration:1.24s}
.assembly .f114{--cx:20.03%;animation-delay:0.255s;animation-duration:1.73s}
.assembly .f115{--cx:24.9%;animation-delay:1.33s;animation-duration:1.16s}
.assembly .f116{--cx:39.36%;animation-delay:1.776s;animation-duration:1.08s}
.assembly .f117{--cx:74.65%;animation-delay:1.347s;animation-duration:1.26s}
.assembly .f118{--cx:41.57%;animation-delay:2.173s;animation-duration:1.28s}
.assembly .f119{--cx:60.06%;animation-delay:1.592s;animation-duration:1.64s}
.assembly .f120{--cx:45.65%;animation-delay:1.472s;animation-duration:1.31s}
.assembly .f121{--cx:34.86%;animation-delay:1.816s;animation-duration:1.1s}
.assembly .f122{--cx:74.16%;animation-delay:1.633s;animation-duration:1.41s}
.assembly .f123{--cx:59.37%;animation-delay:1.885s;animation-duration:1.41s}
.assembly .f124{--cx:19.8%;animation-delay:0.491s;animation-duration:1.2s}
.assembly .f125{--cx:21.62%;animation-delay:0.838s;animation-duration:1.04s}
.assembly .f126{--cx:56.67%;animation-delay:1.995s;animation-duration:1.68s}
.assembly .f127{--cx:29.15%;animation-delay:2.149s;animation-duration:1.28s}
.assembly .f128{--cx:5.5%;animation-delay:1.856s;animation-duration:1.51s}
.assembly .f129{--cx:64.43%;animation-delay:1.869s;animation-duration:1.31s}
.assembly .f130{--cx:31.58%;animation-delay:1.799s;animation-duration:1.59s}
.assembly .f131{--cx:52.55%;animation-delay:1.775s;animation-duration:1.48s}
.assembly .f132{--cx:25.45%;animation-delay:1.734s;animation-duration:1.2s}
.assembly .f133{--cx:69.04%;animation-delay:1.889s;animation-duration:1.21s}
.assembly .f134{--cx:76.54%;animation-delay:1.95s;animation-duration:1.64s}
.assembly .f135{--cx:19.2%;animation-delay:1.002s;animation-duration:1.63s}
.assembly .f136{--cx:37.26%;animation-delay:2.226s;animation-duration:1.49s}
.assembly .f137{--cx:77.87%;animation-delay:0.97s;animation-duration:1.15s}
.assembly .f138{--cx:79.64%;animation-delay:1.343s;animation-duration:1.54s}
.assembly .f139{--cx:7.8%;animation-delay:1.483s;animation-duration:1.49s}
.assembly .f140{--cx:17.3%;animation-delay:0.945s;animation-duration:1.79s}
.assembly .f141{--cx:15.24%;animation-delay:1.243s;animation-duration:1.16s}
.assembly .f142{--cx:53.45%;animation-delay:1.953s;animation-duration:1.22s}
.assembly .f143{--cx:22.2%;animation-delay:1.263s;animation-duration:1.02s}
.assembly .f144{--cx:80.63%;animation-delay:1.601s;animation-duration:1.19s}
.assembly .f145{--cx:31.57%;animation-delay:2.086s;animation-duration:1.45s}
.assembly .f146{--cx:96.52%;animation-delay:1.511s;animation-duration:1.89s}
.assembly .f147{--cx:47.54%;animation-delay:1.79s;animation-duration:1.72s}
.assembly .f148{--cx:84.34%;animation-delay:0.953s;animation-duration:1.66s}
.assembly .f149{--cx:63.21%;animation-delay:2.25s;animation-duration:1.07s}
.assembly .f150{--cx:92.34%;animation-delay:1.536s;animation-duration:1.48s}
.assembly .f151{--cx:84.6%;animation-delay:1.367s;animation-duration:1.13s}
.assembly .f152{--cx:45.37%;animation-delay:1.679s;animation-duration:1.54s}
.assembly .f153{--cx:79.25%;animation-delay:1.996s;animation-duration:1.1s}
.assembly .f154{--cx:17.08%;animation-delay:1.412s;animation-duration:1.78s}
.assembly .f155{--cx:81.73%;animation-delay:1.757s;animation-duration:1.75s}

/* --- the real content settles onto the grid --- */
.hero .wrap > * { position: relative; z-index: 1; }
.hero .kicker { animation: settle .7s cubic-bezier(.2,.75,.25,1) .70s both }
.hero h1 span { display: inline-block; animation: word-in .66s cubic-bezier(.2,.85,.25,1) both }
@keyframes word-in {
  0%   { opacity: 0; transform: translateY(26px) rotate(2deg); filter: blur(5px) }
  100% { opacity: 1; transform: none;            filter: blur(0) }
}
.hero h1 .w1 { animation-delay: .95s } .hero h1 .w2 { animation-delay: 1.04s }
.hero h1 .w3 { animation-delay: 1.13s } .hero h1 .w4 { animation-delay: 1.22s }
.hero h1 .w5 { animation-delay: 1.31s } .hero h1 .w6 { animation-delay: 1.40s }
.hero h1 .w7 { animation-delay: 1.49s }
.hero h1 .w8 { animation-delay: 1.58s }
.hero p.lede  { animation: settle .7s cubic-bezier(.2,.75,.25,1) 2.05s both }
.hero .cta    { animation: settle .7s cubic-bezier(.2,.75,.25,1) 2.20s both }
@keyframes settle {
  0%   { opacity: 0; transform: translateY(14px); clip-path: inset(0 0 100% 0); }
  100% { opacity: 1; transform: none;             clip-path: inset(0 0 -10% 0); }
}

/* the red mark snaps in — precise, no bounce */
.wordmark::before { animation: snap .45s cubic-bezier(.3,1.4,.4,1) .18s both }
@keyframes snap { 0% { transform: translateY(-1px) scale(0) } 100% { transform: translateY(-1px) scale(1) } }

/* facts strip: each cell locks in, left to right */
.facts div { animation: settle .6s cubic-bezier(.2,.75,.25,1) both }
.facts div:nth-child(1) { animation-delay: 2.35s }
.facts div:nth-child(2) { animation-delay: 2.45s }
.facts div:nth-child(3) { animation-delay: 2.55s }
.facts div:nth-child(4) { animation-delay: 2.65s }

/* Anyone who prefers less motion gets the finished page immediately. */
@media (prefers-reduced-motion: reduce) {
  header::after, .assembly span, .hero .kicker, .hero h1, .hero p.lede,
  .hero .cta, .hero h1 span, .wordmark::before, .facts div { animation: none !important }
  .assembly, .assembly span.hot { display: none }
}

/* ---------- public-sector / sovereign section ---------- */
.sovereign { border-top: 1px solid var(--rule); }
.pledge {
  margin-top: 2.6rem; display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 0; border: 1px solid var(--rule);
}
.pledge div {
  padding: 1.4rem 1.5rem; font-size: .88rem; color: var(--ink-soft); line-height: 1.5;
  border-right: 1px solid var(--rule);
}
.pledge div:last-child { border-right: 0; }
.pledge b {
  display: block; font-size: .78rem; text-transform: uppercase; letter-spacing: .12em;
  color: var(--ink); font-weight: 600; margin-bottom: .45rem;
}
.pledge b::before {
  content: ""; display: block; width: 1.6rem; height: 2px;
  background: var(--accent); margin-bottom: .8rem;
}
.sovereign .note {
  margin-top: 2.4rem; padding-top: 1.4rem; border-top: 1px solid var(--rule);
  font-size: .92rem; color: var(--ink-faint); max-width: 74ch;
}
@media (max-width: 860px) {
  .pledge { grid-template-columns: 1fr 1fr; }
  .pledge div:nth-child(2) { border-right: 0; }
  .pledge div:nth-child(-n+2) { border-bottom: 1px solid var(--rule); }
}
@media (max-width: 560px) {
  .pledge { grid-template-columns: 1fr; }
  .pledge div { border-right: 0; border-bottom: 1px solid var(--rule); }
  .pledge div:last-child { border-bottom: 0; }
}

/* four cards in the public-sector section */
.sovereign .cards { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 1100px) { .sovereign .cards { grid-template-columns: 1fr 1fr; } }
@media (max-width: 860px)  { .sovereign .cards { grid-template-columns: 1fr; } }

/* ---------- commitment / document pages ---------- */
.doc-hero h1 { max-width: 20ch; }
.doc { border-top: 1px solid var(--rule); }
.commit {
  margin-top: 3rem; display: grid; grid-template-columns: 1fr 1fr; gap: 1px;
  background: var(--rule); border: 1px solid var(--rule);
}
.commit article { background: var(--paper-raised); padding: 2rem 1.9rem 2.2rem; }
.commit h3 { font-size: 1.1rem; letter-spacing: -.01em; line-height: 1.3; }
.commit h3::before {
  content: ""; display: block; width: 1.8rem; height: 2px;
  background: var(--accent); margin-bottom: .9rem;
}
.commit p { margin-top: .9rem; font-size: .95rem; color: var(--ink-soft); }
.commit ul { margin-top: 1.1rem; list-style: none; }
.commit li { font-size: .88rem; color: var(--ink-soft); padding: .42rem 0; border-top: 1px solid var(--rule); }
.commit li::before { content: "— "; color: var(--accent); }
@media (max-width: 860px) { .commit { grid-template-columns: 1fr; } }

.candid {
  margin-top: 3rem; padding: 2.2rem 2.2rem 2.4rem;
  background: var(--ink); color: #d6d8dc;
}
.candid h3 { color: #fff; font-size: 1.15rem; letter-spacing: -.01em; }
.candid h3::before {
  content: ""; display: block; width: 2.2rem; height: 2px;
  background: var(--accent); margin-bottom: 1rem;
}
.candid p { margin-top: 1rem; max-width: 72ch; font-size: .96rem; }
.candid em { font-style: normal; color: #fff; }
.doc .note {
  margin-top: 2.4rem; padding-top: 1.4rem; border-top: 1px solid var(--rule);
  font-size: .92rem; color: var(--ink-faint); max-width: 74ch;
}

.domains {
  margin-top: 2.2rem; padding: 1.1rem 1.3rem; border-left: 2px solid var(--accent);
  background: var(--paper-raised); font-size: .92rem; color: var(--ink-soft); max-width: 78ch;
}
.domains b {
  display: block; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em;
  color: var(--ink-faint); font-weight: 500; margin-bottom: .35rem;
}

