/* Site stylesheet. Source file: edit it here. It began as the home prototype's stylesheets, joined in their original
   link order (the "==== part ====" markers below name where each block came from). The prototype and port_home.py
   were retired 18 Oct 2026; there is no generator any more. */

/* ==== style.css ==== */
/* Pentaclay · Design Monks structure, Pentaclay brand.
   Ink #050505, white, greys, one accent #FF3C00. Fonts now Inter + Inter Display (see parts/type.css). */
:root {
  --ink: #050505; --ink-2: #111111; --white: #fff; --sheet: #F6F6F6; --line: #E6E6E6;
  --mute: #6B6B6B; --mute-d: #8A8A8A; --accent: #FF3C00; --accent-deep: #D23100;
  --head: 'Red Hat Display', Arial, sans-serif; --text: 'Outfit', Arial, sans-serif;
  --gut: round(nearest, clamp(16px, 4vw, 64px), 8px);
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin: 0; background: var(--white); color: var(--ink); font: 400 16px/1.6 var(--text); -webkit-font-smoothing: antialiased; }
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }

/* Buttons */
.btn { display: inline-flex; align-items: center; min-height: 52px; padding: 0 24px; border-radius: 999px; background: var(--accent); color: #fff; font: 600 16px var(--head); transition: transform .25s ease, background .25s ease; }
.btn:hover { background: var(--accent-deep); transform: translateY(-2px); }
.btn-sm { min-height: 42px; padding: 0 16px; font-size: 14px; }

/* Header: full bar, becomes a centred pill on scroll */
  display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 8px 8px 8px 16px; border-radius: 999px;
  color: #fff; transition: width .5s cubic-bezier(.2,.7,.1,1), background .4s ease, color .4s ease, box-shadow .4s ease; }

/* 1. Hero */

@keyframes slide { to { transform: translateX(-50%); } }

/* 2. Clients */
.clients { padding: round(nearest, clamp(56px, 6vw, 88px), 8px) var(--gut); text-align: center; border-bottom: 1px solid var(--line); }
.clients-label { margin: 0 0 24px; color: var(--mute); font-size: 16px; }
.wordmarks { list-style: none; margin: 0 auto; padding: 0; max-width: 1200px; display: flex; flex-wrap: wrap; justify-content: center; gap: 16px round(nearest, clamp(32px, 4vw, 64px), 8px); }
.wordmarks li { font: 700 round(nearest, clamp(19px, 1.8vw, 26px), 8px) var(--head); letter-spacing: -0.02em; color: #A3A3A3; white-space: nowrap; transition: color .3s; }
.wordmarks li:hover { color: var(--ink); }

/* 3. Work */
.work { padding: round(nearest, clamp(80px, 9vw, 144px), 8px) var(--gut); max-width: 1440px; margin: 0 auto; }
.work-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: 16px; margin-bottom: round(nearest, clamp(32px, 4vw, 56px), 8px); }
h2 { margin: 0; font: 700 round(nearest, clamp(34px, 4vw, 56px), 8px)/1.05 var(--head); letter-spacing: -0.03em; }
.more { font: 600 16px var(--head); border-bottom: 2px solid var(--ink); padding-bottom: 2px; }
.more:hover { color: var(--accent-deep); border-color: var(--accent-deep); }
.cases { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: round(nearest, clamp(16px, 2vw, 32px), 8px); }
.case { grid-column: span 5; display: grid; gap: 16px; }
.case.big { grid-column: span 7; }
.shot { border-radius: 12px; overflow: hidden; background: var(--tint, #111); padding: round(nearest, clamp(16px, 2.4vw, 32px), 8px) round(nearest, clamp(16px, 2.4vw, 32px), 8px) 0; height: clamp(300px, 36vw, 540px); display: flex; align-items: flex-start; }
.shot img { width: 100%; height: auto; border-radius: 8px 8px 0 0; box-shadow: 0 -10px 40px -10px rgba(0,0,0,.5); transition: transform 6s cubic-bezier(.3,.1,.3,1); }
.case:hover .shot img { transform: translateY(calc(-100% + clamp(300px, 36vw, 540px) - 40px)); }
.meta { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; }
.meta h3 { margin: 0; font: 700 24px var(--head); letter-spacing: -0.02em; }
.meta p { margin: 0; color: var(--mute); font-size: 16px; }

@media (max-width: 860px) {
  .case, .case.big { grid-column: span 12; }
  .shot { height: clamp(240px, 62vw, 420px); }
  .meta { flex-direction: column; gap: 2px; }
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

/* Story cards that stack on scroll (Design Monks pattern) */
.stack { display: grid; gap: 0; }
.story { position: sticky; top: calc(96px + var(--i, 0) * 22px); display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: round(nearest, clamp(24px, 4vw, 56px), 8px); align-items: center;
  background: var(--bg); color: var(--deep); border-radius: 12px; padding: round(nearest, clamp(24px, 3.4vw, 48px), 8px); min-height: 520px; margin-bottom: 40px; box-shadow: 0 -12px 40px -24px rgba(0,0,0,.25); }
.story:nth-child(1) { --i: 0 } .story:nth-child(2) { --i: 1 } .story:nth-child(3) { --i: 2 } .story:nth-child(4) { --i: 3 }
.tag { margin: 0; font: 600 16px var(--head); opacity: .7; }
.story h3 { margin: 8px 0 16px; font: 700 round(nearest, clamp(26px, 2.8vw, 40px), 8px)/1.08 var(--head); letter-spacing: -0.025em; color: var(--ink); }
.story .lede { margin: 0; font-size: 16px; color: color-mix(in srgb, var(--deep) 75%, white); max-width: 32em; }
.facts { display: grid; grid-template-columns: repeat(3, auto); justify-content: start; gap: 16px 40px; margin: 32px 0 24px; }
.facts dt { font-size: 14px; opacity: .65; } .facts dd { margin: 2px 0 0; font: 700 18px var(--head); color: var(--ink); }
.visit { font: 600 16px var(--head); color: var(--ink); border-bottom: 2px solid currentColor; padding-bottom: 2px; }
.quote { margin: 0; display: flex; gap: 16px; align-items: center; background: #fff; border-radius: 12px; padding: 16px 16px; max-width: 440px; }
.quote blockquote { margin: 0; font-size: 16px; color: var(--ink); }
.quote figcaption { margin-top: 4px; font-size: 14px; color: var(--mute); }
.avatar { flex: none; width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: var(--deep); color: #fff; font: 700 14px var(--head); }
.story-shot { align-self: stretch; display: flex; align-items: flex-end; }
.screen { width: 100%; height: clamp(300px, 34vw, 460px); border-radius: 12px 12px 0 0; overflow: hidden; background: #fff; box-shadow: 0 30px 60px -30px rgba(0,0,0,.45); }
.screen img { width: 100%; height: auto; transition: transform 7s cubic-bezier(.3,.1,.3,1); }
.story:hover .screen img { transform: translateY(calc(-100% + clamp(300px, 34vw, 460px))); }

/* Floating bottom dock */
@media (max-width: 860px) {
  .story { position: relative; top: 0; grid-template-columns: minmax(0, 1fr); min-height: 0; }
  .facts { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 16px; }
}

/* ===== Four-reference build: shared ===== */
.center { text-align: center; margin-left: auto; margin-right: auto; }
h2.center { max-width: 18ch; text-wrap: balance; }
.sub { margin: 16px 0 0; font-size: 18px; color: var(--mute); max-width: 40em; }
.sub.center { margin-top: 16px; }
.fine { margin: 32px 0 0; font-size: 14px; color: var(--mute); max-width: 60em; }
.fine.center { margin-top: 32px; }
section h3 { font-family: var(--head); letter-spacing: -0.02em; }
.row-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 16px 32px; margin-top: 40px; }
.row-cta.left { justify-content: flex-start; margin-top: 32px; }
.also { margin: 8px 0 0; color: var(--mute); }
.also a { color: var(--ink); font-weight: 600; border-bottom: 1.5px solid currentColor; }

/* ===== Clocks strip (DesignMe) ===== */
.clocks { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 0; border-bottom: 1px solid var(--line); font-size: 14px; color: var(--mute); }
.clock-item { padding: 16px round(nearest, clamp(16px, 3vw, 40px), 8px); border-right: 1px solid var(--line); white-space: nowrap; }
.clock-item:last-child { border-right: 0; }
.clock-item b { color: var(--ink); font: 600 16px var(--head); margin-left: 4px; font-variant-numeric: tabular-nums; }
.clock-item.hours { color: var(--ink); display: inline-flex; align-items: center; gap: 8px; }
.clock-item.hours i { width: 8px; height: 8px; border-radius: 50%; background: #1FA453; box-shadow: 0 0 0 4px rgba(31,164,83,.15); }

/* ===== Short version + facts (Eleken) ===== */
.short { padding: round(nearest, clamp(72px, 8vw, 120px), 8px) var(--gut) 0; max-width: 1240px; margin: 0 auto; }
.short-copy { margin: 0 auto round(nearest, clamp(40px, 5vw, 64px), 8px); max-width: 34em; text-align: center; font: 500 round(nearest, clamp(20px, 1.9vw, 26px), 8px)/1.4 var(--head); letter-spacing: -0.01em; text-wrap: balance; }
.facts-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.fact { background: var(--sheet); border-radius: 12px; padding: 24px 24px 24px; display: grid; grid-template-rows: auto 1fr auto; gap: 8px; min-height: 210px; }
.fact b { font: 700 round(nearest, clamp(34px, 3.2vw, 46px), 8px)/1 var(--head); letter-spacing: -0.035em; font-variant-numeric: tabular-nums; }
.fact p { margin: 0; color: var(--mute); font-size: 16px; line-height: 1.45; }
.fact span { font: 700 14px var(--head); color: #9A9A9A; padding-top: 16px; border-top: 1px solid var(--line); }
.fact:hover span { color: var(--ink); }

/* ===== Problem (Eleken long-form) ===== */
.problem { padding: round(nearest, clamp(48px, 6vw, 96px), 8px) var(--gut) round(nearest, clamp(72px, 8vw, 120px), 8px); }
.problem-in { max-width: 640px; margin: 0 auto; display: grid; gap: 32px; }
.big { margin: 0; font: 500 round(nearest, clamp(22px, 2.2vw, 30px), 8px)/1.32 var(--head); letter-spacing: -0.015em; color: #8C8C8C; }
.big:first-child, .big:last-child { color: var(--ink); }
.xlist { list-style: none; margin: 0; padding: 0; display: grid; gap: 16px; }
.xlist li { display: flex; align-items: center; gap: 16px; font: 500 round(nearest, clamp(19px, 1.8vw, 24px), 8px)/1.3 var(--head); color: var(--ink); }
.xlist li::before { content: ''; flex: none; width: 26px; height: 26px; border-radius: 50%; background: rgba(255,60,0,.1) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M8 8l8 8M16 8l-8 8' stroke='%23D23100' stroke-width='2.2' stroke-linecap='round'/></svg>") center/16px no-repeat; }

/* ===== Who (Eleken pain cards) ===== */
.who, .stacks, .offers, .process, .compare, .faq { padding: round(nearest, clamp(72px, 8vw, 120px), 8px) var(--gut); max-width: 1320px; margin: 0 auto; }
.who { background: none; }
.pain-grid { margin-top: round(nearest, clamp(32px, 4vw, 56px), 8px); display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.pain { background: var(--sheet); border-radius: 12px; padding: 24px 24px; display: flex; flex-direction: column; gap: 16px; transition: background .3s, transform .3s; }
.pain:hover { background: #EFEFEF; transform: translateY(-3px); }
.pain svg { width: 30px; height: 30px; fill: none; stroke: var(--accent-deep); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; margin-bottom: 16px; }
.pain h3 { margin: 0; font-size: 18px; line-height: 1.2; }
.pain p { margin: 0; color: var(--mute); font-size: 16px; line-height: 1.5; flex: 1; }
.pain a { font: 600 14px var(--head); color: var(--ink); }
.pain a:hover { color: var(--accent-deep); }

/* ===== Stacks (DesignMe tools card) ===== */
.stacks { border-top: 1px solid var(--line); }
.stacks-head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px 64px; align-items: end; }
.stacks-head p { margin: 0; color: var(--mute); font-size: 16px; }
.stack-grid { margin-top: round(nearest, clamp(32px, 4vw, 56px), 8px); display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.stack-card { border: 1px solid var(--line); border-radius: 12px; padding: 24px 24px; }
.stack-card h3 { margin: 8px 0 8px; font-size: 32px; }
.stack-card p { margin: 0; color: var(--mute); font-size: 16px; }
.stack-card .who-edits { color: var(--accent-deep); font: 600 14px var(--head); }
.stack-card.wide { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px 56px; align-items: center; background: var(--ink); color: #fff; border-color: var(--ink); }
.stack-card.wide h3 { margin-top: 0; font-size: 24px; }
.stack-card.wide p { color: var(--mute-d); }
.words { display: grid; gap: 16px; }
.words div { display: grid; grid-template-columns: 1fr; gap: 4px; font-size: 14px; color: var(--mute-d); }
.words b { color: #fff; font: 700 24px var(--head); margin-right: 8px; }
.words span { display: block; height: 10px; border-radius: 4px; background: #252525; position: relative; overflow: hidden; }
.words span::after { content: ''; position: absolute; inset: 0 auto 0 0; width: max(var(--w), 6px); background: var(--accent); border-radius: 4px; }

/* ===== Offers accordion (DesignMe) ===== */
.offers { border-top: 1px solid var(--line); }
.acc { margin-top: round(nearest, clamp(32px, 4vw, 56px), 8px); border-top: 1px solid var(--line); }
.offer { border-bottom: 1px solid var(--line); }
.offer summary { list-style: none; cursor: pointer; display: grid; grid-template-columns: minmax(0, 1fr) auto 40px; align-items: center; gap: 24px; padding: 24px 4px; }
.offer summary::-webkit-details-marker { display: none; }
.o-name { font: 700 round(nearest, clamp(24px, 2.6vw, 36px), 8px) var(--head); letter-spacing: -0.025em; }
.o-price { font: 600 16px var(--head); color: var(--mute); white-space: nowrap; }
.o-icon { width: 22px; height: 22px; position: relative; justify-self: end; }
.o-icon::before, .o-icon::after { content: ''; position: absolute; left: 0; top: 10px; width: 22px; height: 2px; background: var(--accent-deep); transition: transform .3s; }
.o-icon::after { transform: rotate(90deg); }
.offer[open] .o-icon::after { transform: rotate(0); }
.offer[open] .o-price { color: var(--ink); }
.offer summary:hover .o-name { color: var(--accent-deep); }
.offer summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 8px; }
.o-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px 48px; padding: 0 4px 32px; }
.o-shot { background: var(--sheet); border-radius: 12px; padding: 32px 0 0 32px; overflow: hidden; height: 280px; }
.o-shot img { width: 100%; height: 100%; object-fit: cover; object-position: left top; border-radius: 8px 0 0 0; box-shadow: -10px -10px 30px -12px rgba(0,0,0,.3); }
.o-text { display: grid; align-content: start; gap: 16px; }
.o-text p { margin: 0; font-size: 16px; color: var(--mute); }
.o-text .o-when { color: var(--ink); font: 600 18px var(--head); }
.o-outcome { margin: 8px 0 16px; font-size: 16px; color: var(--ink); }
.o-outcome b { font-weight: 600; color: var(--accent-deep); margin-right: 8px; }
.ticks { list-style: none; margin: 4px 0 0; padding: 0; display: grid; gap: 8px; }
.ticks li { display: flex; gap: 8px; align-items: center; font-size: 16px; }
.ticks li::before { content: ''; width: 18px; height: 18px; flex: none; border-radius: 50%; background: var(--ink) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m7 12.5 3.2 3.2L17 9' fill='none' stroke='white' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/12px no-repeat; }

/* ===== Dark band (Musemind) ===== */
.dark { background: var(--ink); color: #fff; padding: round(nearest, clamp(80px, 9vw, 144px), 8px) var(--gut); }
.dark-in { max-width: 1320px; margin: 0 auto; }
.dark h2 { max-width: 16ch; }
.dark .sub { color: var(--mute-d); }
.checks { list-style: none; margin: round(nearest, clamp(40px, 5vw, 64px), 8px) 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; border-top: 1px solid #2A2A2A; counter-reset: c; }
.checks li { counter-increment: c; padding: 32px 32px 32px 0; border-bottom: 1px solid #2A2A2A; color: var(--mute-d); font-size: 16px; display: grid; gap: 8px; }
.checks li:not(:nth-child(3n+1)) { padding-left: 32px; border-left: 1px solid #2A2A2A; }
.checks b { color: #fff; font: 700 18px var(--head); letter-spacing: -0.015em; }
.review { margin-top: round(nearest, clamp(48px, 6vw, 80px), 8px); display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px 56px; background: #141414; border: 1px solid #2A2A2A; border-radius: 12px; padding: round(nearest, clamp(24px, 3.4vw, 48px), 8px); }
.review h3 { margin: 0 0 16px; font-size: round(nearest, clamp(24px, 2.6vw, 32px), 8px); line-height: 1.1; }
.review-copy p { margin: 0; color: var(--mute-d); }
.fields { display: grid; gap: 16px; align-content: start; }
.fields label { display: grid; gap: 4px; font-size: 14px; color: var(--mute-d); }
.fields input { font: 400 16px var(--text); color: #fff; background: #0A0A0A; border: 1px solid #353535; border-radius: 12px; padding: 16px 16px; outline: none; transition: border-color .2s; }
.fields input:focus { border-color: var(--accent); }
.fields input.bad { border-color: #FF6B4A; }
.fields .btn { justify-content: center; border: 0; cursor: pointer; }
.form-note { margin: 0; font-size: 14px; color: #8A8A8A; }
.form-note.err { color: #FF8A6E; } .form-note.ok { color: #6FDB9A; }

/* ===== Process: 8-week bar ===== */
.weeks { margin-top: round(nearest, clamp(40px, 5vw, 64px), 8px); position: relative; height: 56px; }
.seg { position: absolute; top: 0; bottom: 0; left: calc(var(--a) / 9 * 100%); width: calc((var(--b) - var(--a)) / 9 * 100% - 6px); border-radius: 12px; display: flex; align-items: center; padding: 0 16px; font: 600 14px var(--head); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.s0 { background: var(--sheet); } .s1 { background: var(--ink); color: #fff; } .s2 { background: #353535; color: #fff; } .s3 { background: var(--accent); color: #fff; }
.week-axis { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); margin-top: 8px; font-size: 14px; color: var(--mute); font-variant-numeric: tabular-nums; }
.steps { list-style: none; margin: round(nearest, clamp(40px, 5vw, 56px), 8px) 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; counter-reset: s; }
.steps li { counter-increment: s; border: 1px solid var(--line); border-radius: 12px; padding: 24px; display: grid; gap: 8px; align-content: start; color: var(--mute); font-size: 16px; }
.steps b { color: var(--ink); font: 700 18px var(--head); letter-spacing: -0.015em; }
.steps b::before { content: counter(s) '. '; color: var(--accent-deep); }
.when { font: 600 14px var(--head); color: var(--accent-deep); }

/* ===== Compare ===== */
.compare { border-top: 1px solid var(--line); }
.table-wrap { margin-top: round(nearest, clamp(32px, 4vw, 48px), 8px); overflow-x: auto; border: 1px solid var(--line); border-radius: 12px; }
table { border-collapse: collapse; width: 100%; min-width: 820px; font-size: 16px; }
th, td { text-align: left; vertical-align: top; padding: 16px 16px; border-bottom: 1px solid var(--line); }
thead th { background: var(--sheet); font: 600 14px var(--head); color: var(--mute); }
tbody th { font: 700 16px var(--head); white-space: nowrap; }
tbody tr:last-child > * { border-bottom: 0; }
td:last-child { color: var(--ink); font-weight: 500; }
td { color: var(--mute); }

/* ===== Research ===== */
.research { padding: 0 var(--gut); }
.research-in { max-width: 1320px; margin: 0 auto; background: var(--sheet); border-radius: 12px; padding: round(nearest, clamp(32px, 4vw, 64px), 8px); display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 40px 64px; align-items: center; }
.research-in p { color: var(--mute); font-size: 16px; margin: 16px 0 0; }
.thumbs { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; transform: rotate(-3deg); }
.thumbs img { border-radius: 12px; aspect-ratio: 4 / 3; object-fit: cover; object-position: top; box-shadow: 0 20px 40px -24px rgba(0,0,0,.45); }

/* ===== FAQ ===== */
.faq-list { max-width: 860px; margin: round(nearest, clamp(32px, 4vw, 48px), 8px) auto 0; border-top: 1px solid var(--line); }
.faq-list details { border-bottom: 1px solid var(--line); }
.faq-list summary { cursor: pointer; list-style: none; display: flex; justify-content: space-between; gap: 24px; padding: 24px 4px; font: 600 round(nearest, clamp(17px, 1.5vw, 20px), 8px) var(--head); letter-spacing: -0.01em; }
.faq-list summary::-webkit-details-marker { display: none; }
.faq-list summary::after { content: '+'; color: var(--accent-deep); font-size: 24px; line-height: 1; transition: transform .3s; }
.faq-list details[open] summary::after { transform: rotate(45deg); }
.faq-list p { margin: 0; padding: 0 4px 24px; color: var(--mute); max-width: 44em; }

/* ===== Founder (Musemind about) ===== */
.founder { max-width: 1320px; margin: 0 auto; padding: round(nearest, clamp(72px, 8vw, 120px), 8px) var(--gut); display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: round(nearest, clamp(32px, 5vw, 80px), 8px); align-items: center; }
.founder-photo { border-radius: 12px; overflow: hidden; aspect-ratio: 4 / 5; background: var(--sheet); }
.founder-photo img { width: 100%; height: 100%; object-fit: cover; object-position: top; }
.founder-copy h2 { font-size: round(nearest, clamp(32px, 3.6vw, 48px), 8px); text-wrap: balance; }
.founder-copy p { color: var(--mute); font-size: 16px; margin: 16px 0 0; max-width: 36em; }
.slots { font-size: 16px; color: var(--mute); }
.promise { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px 8px 8px; border: 1px solid var(--line); border-radius: 999px; font-size: 14px; color: var(--ink); background: var(--paper, #fff); }
.promise::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); flex: none; }
.founder-copy > .more { display: inline-block; margin-top: 24px; }

/* ===== Footer ===== */
.foot { background: var(--ink); color: #fff; padding: round(nearest, clamp(64px, 7vw, 104px), 8px) var(--gut) 112px; }
.foot > * { max-width: 1320px; margin-left: auto; margin-right: auto; }
.foot-top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 24px; padding-bottom: 48px; border-bottom: 1px solid #2A2A2A; }
.foot-line { margin: 0; font: 700 round(nearest, clamp(26px, 3vw, 42px), 8px)/1.1 var(--head); letter-spacing: -0.03em; max-width: 18ch; }
.foot-cols { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 32px; padding: 48px 0; border-bottom: 1px solid #2A2A2A; }
.foot-cols h4 { margin: 0 0 16px; font: 600 16px var(--head); color: #fff; }
.foot-cols a { display: block; color: var(--mute-d); font-size: 14px; padding: 4px 0; }
.foot-cols a:hover { color: #fff; }
.foot-legal { padding-top: 32px; display: grid; gap: 4px; font-size: 14px; color: var(--mute-d); }
.foot-legal p { margin: 0; } .foot-legal b { color: #fff; }

/* ===== Responsive ===== */
@media (max-width: 1080px) {
  .facts-grid, .pain-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .checks, .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .checks li:not(:nth-child(3n+1)) { padding-left: 0; border-left: 0; }
  .checks li:nth-child(2n) { padding-left: 32px; border-left: 1px solid #2A2A2A; }
  .foot-cols { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .clock-item { border-right: 0; padding: 4px 8px; }
  .clocks { padding: 16px 0; }
  .facts-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; }
  .fact { min-height: 0; padding: 16px 16px 16px; }
  .pain-grid, .stack-grid, .checks, .steps { grid-template-columns: minmax(0, 1fr); }
  .checks li:nth-child(2n) { padding-left: 0; border-left: 0; }
  .stacks-head, .stack-card.wide, .o-body, .review, .research-in, .founder { grid-template-columns: minmax(0, 1fr); }
  .o-shot { height: 200px; }
  .offer summary { grid-template-columns: minmax(0, 1fr) auto 24px; gap: 16px; }
  .o-price { font-size: 14px; }
  .seg { font-size: 12px; padding: 0 8px; }
  .s0, .s3 { font-size: 0; }
  .foot-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .thumbs { transform: none; }
}

/* Original logos */
.logos { list-style: none; margin: 0 auto; padding: 0; max-width: 1200px; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 32px round(nearest, clamp(32px, 5vw, 72px), 8px); }
.logos li { height: 58px; display: flex; align-items: center; }
.logos img { height: var(--h); width: auto; filter: brightness(0); opacity: .42; transition: opacity .3s; }
.logos li:hover img { opacity: .9; }
@media (max-width: 760px) { .logos { gap: 24px 32px; } .logos img { height: calc(var(--h) * .8); } }

/* ===== Header with mega menus (Musemind) ===== */
.nav { position: sticky; top: 0; z-index: 50; display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 24px;
  padding: 16px var(--gut); background: var(--hero-bg); border-bottom: 1px solid transparent; transition: background .3s, border-color .3s; }
.nav.scrolled { background: rgba(255,255,255,.9); backdrop-filter: blur(14px); border-color: var(--line); }
.brand img { height: 26px; width: auto; display: block; }
.links { display: flex; justify-content: center; align-items: center; gap: 4px; font: 500 16px var(--head); }
.links .nl, .mm-btn { color: #3A3A3A; padding: 8px 16px; border-radius: 8px; }
.links .nl:hover, .mm-btn:hover, .mm.open .mm-btn { color: var(--ink); }
.mm-btn { all: unset; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; color: #3A3A3A; font: 500 16px var(--head); border-radius: 8px; }
.mm-btn:focus-visible, .links .nl:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.mm-arrow { width: 22px; height: 22px; border-radius: 50%; background: #fff; display: grid; place-items: center; font-size: 12px; transition: transform .3s; box-shadow: 0 1px 2px rgba(0,0,0,.08); }
.mm.open .mm-arrow { transform: rotate(180deg); }
.mm-panel { position: absolute; left: var(--gut); right: var(--gut); top: calc(100% - 4px); max-width: 1320px; margin: 0 auto; background: #fff; border-radius: 0 0 12px 12px;
  box-shadow: 0 30px 60px -30px rgba(0,0,0,.25); padding: 32px 40px; opacity: 0; visibility: hidden; transform: translateY(-6px); transition: opacity .25s, transform .25s, visibility .25s; }
.mm.open .mm-panel { opacity: 1; visibility: visible; transform: none; }
.mm-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.mm-col { padding: 0 32px; border-left: 1px solid var(--line); }
.mm-col:first-child { padding-left: 0; border-left: 0; } .mm-col:last-child { padding-right: 0; }
.mm-item { display: flex; gap: 16px; align-items: flex-start; padding: 16px 0; border-bottom: 1px solid var(--line); }
.mm-col .mm-item:last-child { border-bottom: 0; }
.mm-item svg { width: 26px; height: 26px; flex: none; margin-top: 2px; fill: none; stroke: #9A9A9A; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; transition: stroke .2s; }
.mm-item b { display: block; font: 600 16px var(--head); color: #2A2A2A; }
.mm-item b i { font-style: normal; display: inline-block; transition: transform .2s; }
.mm-item small { display: block; margin-top: 4px; font-size: 14px; color: var(--mute); }
.mm-item:hover b { color: var(--ink); } .mm-item:hover b i { transform: translateX(3px); } .mm-item:hover svg { stroke: var(--accent-deep); }
.btn-dark { background: var(--ink); } .btn-dark:hover { background: #2A2A2A; }
.btn-lg { min-height: 58px; padding: 0 32px; font-size: 16px; }
.menu-btn { all: unset; display: none; cursor: pointer; font: 600 16px var(--head); padding: 8px 16px; border-radius: 999px; background: var(--ink); color: #fff; }

/* ===== Hero (Musemind) ===== */
:root { --hero-bg: #E7E5E9; }
.hero { position: relative; background: linear-gradient(180deg, var(--hero-bg) 0%, var(--hero-bg) 78%, #fff 100%); overflow: hidden;
  display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: center; gap: 24px; padding: round(nearest, clamp(48px, 7vw, 112px), 8px) var(--gut) round(nearest, clamp(64px, 8vw, 120px), 8px); min-height: min(76vh, 760px); }
.hero-copy { position: relative; z-index: 2; display: grid; gap: 24px; justify-items: start; max-width: 780px; }
.hero h1 { margin: 0; font: 700 round(nearest, clamp(40px, 5.4vw, 76px), 8px)/1.04 var(--head); letter-spacing: -0.035em; text-wrap: balance; color: var(--ink); }
.hero-sub { margin: 0; font: 400 round(nearest, clamp(18px, 1.6vw, 23px), 8px)/1.5 var(--text); color: #2E2E2E; max-width: 32em; }
.hero-cta { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 32px; margin-top: 8px; }
.rating { display: flex; align-items: center; gap: 16px; color: var(--ink); }
.contra-badge { width: 34px; height: 34px; border-radius: 50%; background: #fff; display: grid; place-items: center; font: 800 16px var(--head); box-shadow: 0 1px 3px rgba(0,0,0,.12); }
.rating-top { display: flex; align-items: center; gap: 8px; }
.rating-top b { font: 600 24px var(--head); }
.stars { color: #F2453D; letter-spacing: 2px; font-size: 16px; }
.rating small { display: block; font-size: 14px; color: var(--mute); }
.rating:hover small { color: var(--ink); }
.hero-art { position: relative; align-self: stretch; display: grid; place-items: center; }
.hero-art img { width: min(100%, 620px); height: auto; mix-blend-mode: darken; animation: float 9s ease-in-out infinite; }
@keyframes float { 50% { transform: translateY(-14px) rotate(-1.5deg); } }

/* ===== Logo wall (marquee rows) ===== */
.clients { border-bottom: 0; padding-bottom: round(nearest, clamp(48px, 5vw, 72px), 8px); }
.clients-label { font: 500 16px var(--head); color: #3A3A3A; }
.logo-wall { display: grid; gap: 24px; -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
.lw-row { display: flex; overflow: hidden; }
.lw-track { list-style: none; margin: 0; padding: 0; display: flex; align-items: center; gap: round(nearest, clamp(48px, 6vw, 96px), 8px); padding-right: round(nearest, clamp(48px, 6vw, 96px), 8px); flex: none; animation: lw 46s linear infinite; }
.lw-row[data-dir="right"] .lw-track { animation-direction: reverse; animation-duration: 52s; }
.logo-wall:hover .lw-track { animation-play-state: paused; }
.lw-track li { height: 60px; display: flex; align-items: center; flex: none; }
.lw-track img { height: var(--h); width: auto; max-width: 200px; object-fit: contain; filter: brightness(0); opacity: .45; transition: opacity .3s; }
.lw-track li.jpg img { filter: grayscale(1) contrast(1.4); mix-blend-mode: multiply; opacity: .6; }
.lw-track li:hover img { opacity: .9; }
@keyframes lw { to { transform: translateX(-100%); } }
@media (prefers-reduced-motion: reduce) { .lw-track { animation: none; } .hero-art img { animation: none; } }

@media (max-width: 1080px) {
  .links { gap: 0; } .links .nl, .mm-btn { padding: 8px 8px; }
}
@media (max-width: 900px) {
  .nav { grid-template-columns: auto 1fr auto; }
  .links { display: none; position: absolute; left: 0; right: 0; top: 100%; background: #fff; flex-direction: column; align-items: stretch; padding: 8px var(--gut) 16px; border-bottom: 1px solid var(--line); max-height: 80vh; overflow: auto; }
  .nav.menu-open .links { display: flex; }
  .mm-panel { position: static; display: none; opacity: 1; visibility: visible; transform: none; box-shadow: none; padding: 0 0 8px; border-radius: 0; }
  .mm.open .mm-panel { display: block; }
  .mm-grid { grid-template-columns: minmax(0, 1fr); } .mm-col { padding: 0; border-left: 0; }
  .nav-cta { display: none; } .menu-btn { display: inline-block; justify-self: end; grid-column: 3; }
  .hero { grid-template-columns: minmax(0, 1fr); min-height: 0; padding-top: 24px; }
  .hero-art { order: -1; max-width: 340px; justify-self: center; margin-bottom: -24px; }
}

/* Contained layout: content sits in a 1240px column, not full width */
:root { --wrap: 1240px; --side: max(var(--gut), calc((100% - var(--wrap)) / 2)); }
.nav { padding-left: var(--side); padding-right: var(--side); }
.mm-panel { left: var(--side); right: var(--side); max-width: none; }
.hero { padding-left: var(--side); padding-right: var(--side); }
.clocks { max-width: var(--wrap); margin: 0 auto; }
.logo-wall { max-width: var(--wrap); margin: 0 auto; }
.work { max-width: calc(var(--wrap) + 2 * var(--gut)); }
.short { max-width: calc(var(--wrap) + 2 * var(--gut)); }

/* Logo wall in real colours; white-only logos shown dark */
.lw-track img { filter: none; opacity: 1; }
.lw-track li.ink img { filter: brightness(0); opacity: .85; }
.lw-track li.jpg img { filter: none; mix-blend-mode: multiply; opacity: 1; }
.lw-track li:hover img { opacity: 1; }

/* Mega menu joins the header: header turns white while a menu is open */
.nav { padding-top: 16px; padding-bottom: 16px; }
.nav:has(.mm.open) { background: #fff; border-color: var(--line); }
.mm-panel { top: 100%; border-radius: 0 0 12px 12px; border-top: 1px solid var(--line); transform: translateY(-4px); }

/* Hero polish (hero-section skill: one dominant visual, accent word, staggered load) */
.hero h1 em { font-style: normal; color: var(--accent); }
.hero-art img { mix-blend-mode: normal; width: min(100%, 560px); filter: drop-shadow(0 40px 50px rgba(30, 28, 40, .18)); transition: transform .6s cubic-bezier(.2,.7,.2,1); animation: none; }
.hero-art::after { content: ''; position: absolute; left: 22%; right: 22%; bottom: 6%; height: 28px; border-radius: 50%; background: radial-gradient(closest-side, rgba(30,28,40,.18), transparent); filter: blur(6px); }
.hero-copy > * { animation: rise .9s cubic-bezier(.2,.7,.2,1) both; }
.hero-copy > :nth-child(2) { animation-delay: .12s; } .hero-copy > :nth-child(3) { animation-delay: .24s; }
.hero-art { animation: rise 1.1s .15s cubic-bezier(.2,.7,.2,1) both; }
@keyframes rise { from { opacity: 0; transform: translateY(18px); } }
@media (prefers-reduced-motion: reduce) { .hero-copy > *, .hero-art { animation: none; } }

/* Mega menus, DesignMe style: labelled columns, bordered cells, chips, explore bar */
.nav { background: #fff; border-bottom: 1px solid var(--line); }
.mm-arrow { width: 10px; height: 10px; background: none; box-shadow: none; position: relative; border-radius: 0; }
.mm-arrow::before, .mm-arrow::after { content: ''; position: absolute; left: 0; top: 4px; width: 10px; height: 1.6px; background: currentColor; transition: transform .25s; }
.mm-arrow::after { transform: rotate(90deg); }
.mm.open .mm-arrow { transform: none; }
.mm.open .mm-arrow::before { transform: rotate(45deg); } .mm.open .mm-arrow::after { transform: rotate(135deg); }
.mm-btn { flex-direction: row-reverse; gap: 8px; }
.mm-panel { padding: 0; border: 1px solid var(--line); border-top: 0; border-radius: 0 0 12px 12px; overflow: hidden; }
.mm-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.mm-col { padding: 0; border-left: 1px solid var(--line); }
.mm-col:first-child { border-left: 0; } .mm-col:last-child { padding: 0; }
.mm-label { margin: 0; padding: 16px 24px 16px; font: 500 12px var(--text); letter-spacing: .06em; text-transform: uppercase; color: #8A8A8A; border-bottom: 1px solid var(--line); }
.mm-item { padding: 16px 24px; border-bottom: 1px solid var(--line); gap: 16px; transition: background .2s; }
.mm-col .mm-item:last-child { border-bottom: 1px solid var(--line); }
.mm-item:hover { background: #FAFAFA; }
.mm-item svg { width: 20px; height: 20px; stroke: #2A2A2A; stroke-width: 1.7; }
.mm-item b { font-size: 16px; display: flex; align-items: center; gap: 8px; }
.mm-item small { font-size: 14px; }
.chip { font: 600 12px var(--text); letter-spacing: .05em; text-transform: uppercase; padding: 4px 8px; border-radius: 4px; }
.chip-popular { background: #FFE9E0; color: var(--accent-deep); }
.chip-new { background: #EEE9FF; color: #5B3FD6; }
.chip-free { background: #E4F6EA; color: #137A3C; }
.mm-more { display: block; margin: 8px; padding: 16px; text-align: center; font: 600 16px var(--head); color: var(--ink); border-radius: 8px;
  background: linear-gradient(90deg, #FFE8E0, #FFF1E6 30%, #F2EEFF 65%, #E6F7F4); transition: filter .2s; }
.mm-more:hover { filter: saturate(1.6); }
@media (max-width: 900px) { .mm-label { padding: 16px 0 8px; } .mm-item { padding: 16px 0; } .mm-more { margin: 8px 0; } .mm-panel { border: 0; } }

/* ===== We are Pentaclay (Musemind stats band) ===== */
.weare { padding: round(nearest, clamp(40px, 5vw, 72px), 8px) var(--gut); }
.weare-in { max-width: var(--wrap); margin: 0 auto; background: #C5CCD4; border-radius: 12px; padding: round(nearest, clamp(40px, 6vw, 96px), 8px) round(nearest, clamp(16px, 2vw, 24px), 8px) 0; overflow: hidden; position: relative; }
.weare-word { margin: 0; font: 700 round(nearest, clamp(72px, 14vw, 200px), 8px)/.82 var(--head); letter-spacing: -0.05em; color: #fff; white-space: nowrap; position: relative; z-index: 1; pointer-events: none; }
.weare-word.top { padding-left: 14%; margin-bottom: -0.2em; }
.weare-word.bottom { text-align: right; padding-right: 4%; margin-top: -0.28em; transform: translateY(.14em); }
.stat-row { position: relative; z-index: 2; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 16px; }
.stat { background: #fff; display: grid; grid-template-rows: auto 1fr auto; min-height: clamp(260px, 26vw, 360px); }
.stat-n { padding: 24px 24px 0; font: 500 14px var(--head); font-variant-numeric: tabular-nums; color: var(--ink); }
.stat p { margin: 0; padding: 0 24px 16px; align-self: end; font: 600 16px/1.3 var(--head); color: var(--ink); border-bottom: 1px solid var(--line); }
.stat b { padding: 16px 24px 24px; font: 500 round(nearest, clamp(40px, 4.2vw, 60px), 8px)/1 var(--head); letter-spacing: -0.04em; font-variant-numeric: tabular-nums; }
@media (max-width: 1080px) { .stat-row { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 640px) { .stat-row { grid-template-columns: repeat(2, minmax(0, 1fr)); } .stat { min-height: 200px; } .stat:last-child { grid-column: 1 / -1; } .weare-word.top { padding-left: 0; } }

/* Erfan: headline all black; every button in medium weight */
.hero h1 em { color: inherit; }
.btn, .btn-sm, .btn-lg, .menu-btn, .fields .btn { font-weight: 500; }
.weare-word.bottom { transform: translateY(.08em); }

/* Explore bar: our own treatment, a quiet sheet with a next step */
.mm-more { display: flex; justify-content: space-between; align-items: center; text-align: left; background: var(--sheet); font-weight: 500; padding: 16px 24px; }
.mm-more i { font-style: normal; width: 32px; height: 32px; border-radius: 50%; background: var(--ink); color: #fff; display: grid; place-items: center; transition: transform .2s; }
.mm-more:hover { filter: none; background: #EFEFEF; } .mm-more:hover i { transform: translateX(3px); }

/* Menu indicator: small chevron after the label (no plus) */
.mm-btn { flex-direction: row; gap: 4px; }
.mm-arrow { width: 8px; height: 8px; position: relative; top: -2px; border-right: 1.6px solid currentColor; border-bottom: 1.6px solid currentColor; transform: rotate(45deg); opacity: .55; transition: transform .25s, opacity .25s, top .25s; }
.mm-arrow::before, .mm-arrow::after { content: none; }
.mm.open .mm-arrow { transform: rotate(-135deg); top: 2px; opacity: 1; }

/* Header: no white bar, just a subtle bottom stroke */
.nav { background: transparent; border-bottom: 1px solid rgba(5,5,5,.08); }
.nav.scrolled { background: rgba(255,255,255,.6); backdrop-filter: saturate(1.4) blur(14px); -webkit-backdrop-filter: saturate(1.4) blur(14px); border-color: rgba(5,5,5,.08); }
.nav:has(.mm.open) { background: rgba(255,255,255,.92); }

/* ==== parts/logos.css ==== */
/* Client logo wall: two marquee rows in opposite directions, real colours, optical sizing.
   Each <img> carries width/height = round(h * ratio), h = sqrt(3800 / ratio) clamped 20-52px. */
.clients { padding: round(nearest, clamp(56px, 6vw, 88px), 8px) var(--gut, 24px) round(nearest, clamp(48px, 5vw, 72px), 8px); text-align: center; border-bottom: 0; }
.clients .clients-label { margin: 0 0 round(nearest, clamp(24px, 3vw, 32px), 8px); font: 500 16px var(--head, inherit); color: #3A3A3A; text-wrap: balance; }

.clients .cl-wall {
  --gap: clamp(48px, 6vw, 88px);
  max-width: 1240px; margin: 0 auto; display: grid; gap: round(nearest, clamp(16px, 2.4vw, 32px), 8px);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
}
.clients .cl-row { display: flex; overflow: hidden; }
.clients .cl-track {
  list-style: none; margin: 0; padding: 0 var(--gap) 0 0; flex: none;
  display: flex; align-items: center; gap: var(--gap);
  animation: clients-marquee 60s linear infinite;
}
.clients .cl-row[data-dir="right"] .cl-track { animation-direction: reverse; animation-duration: 66s; }
.clients .cl-wall:hover .cl-track { animation-play-state: paused; }
.clients .cl-track li { flex: none; height: 56px; display: flex; align-items: center; }
.clients .cl-track img { display: block; width: auto; max-width: none; object-fit: contain; filter: none; opacity: 1; mix-blend-mode: normal; }
@keyframes clients-marquee { to { transform: translateX(-100%); } }

@media (max-width: 640px) {
  .clients .cl-wall { --gap: 40px; }
  .clients .cl-track li { height: 48px; }
  .clients .cl-track img { zoom: .85; }
}
@media (prefers-reduced-motion: reduce) {
  .clients .cl-wall { -webkit-mask-image: none; mask-image: none; }
  .clients .cl-row { justify-content: center; }
  .clients .cl-track { animation: none; flex-wrap: wrap; justify-content: center; flex: 1 1 auto; padding: 0; row-gap: 16px; }
  .clients .cl-track[aria-hidden="true"], .clients .cl-track li:has(img[alt=""]) { display: none; }
}

/* ==== parts/work.css ==== */
/* ===== Work / case studies (DesignMe layout, Pentaclay treatment) =====
   Every class is cs-* so nothing collides with older .case/.shot/.quote rules.
   .cases.cs-wrap (two classes) beats the old 12-column `.cases` grid in style.css. */
.cases.cs-wrap { display: block; max-width: calc(var(--wrap, 1240px) + 2 * var(--gut)); margin: 0 auto; padding: round(nearest, clamp(80px, 9vw, 144px), 8px) var(--gut); }

.cases .cs-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: 16px 48px; padding-bottom: round(nearest, clamp(32px, 4vw, 48px), 8px); border-bottom: 1px solid var(--line); }
.cases .cs-head h2 { margin: 0; }
.cases .cs-head p { margin: 0; max-width: 26em; color: var(--mute); font-size: 16px; line-height: 1.5; }

/* One case: copy 5 / panel 7, flipped on every second case */
.cases .cs-case { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: round(nearest, clamp(32px, 5vw, 72px), 8px); align-items: center; padding: round(nearest, clamp(40px, 5vw, 72px), 8px) 0; border-bottom: 1px solid var(--line); }
.cases .cs-case:nth-child(even) { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.cases .cs-case:nth-child(even) .cs-panel { order: -1; }

.cases .cs-copy { display: grid; gap: 16px; align-content: center; }
.cases .cs-id { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.cases .cs-name { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
.cases .cs-name h3 { margin: 0; font: 600 18px/1.2 var(--head); letter-spacing: -0.015em; color: var(--ink); }
.cases .cs-chips { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px; }
.cases .cs-chips li { font: 400 14px/1 var(--text); color: #3A3A3A; padding: 4px 8px; border: 1px solid var(--line); border-radius: 999px; white-space: nowrap; }
.cases .cs-year { flex: none; padding-top: 4px; font: 400 14px/1.2 var(--text); color: var(--mute); font-variant-numeric: tabular-nums; }

.cases .cs-headline { margin: 4px 0 0; font: 700 round(nearest, clamp(26px, 2.5vw, 34px), 8px)/1.14 var(--head); letter-spacing: -0.025em; color: var(--ink); text-wrap: balance; }
.cases .cs-sum { margin: 0; font-size: 16px; line-height: 1.6; color: var(--mute); max-width: 34em; }
.cases .cs-sum b { font-weight: 500; color: var(--ink); }

.cases .cs-links { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 24px; }
.cases .cs-read { font: 500 16px var(--head); color: var(--ink); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; transition: color .2s, text-decoration-color .2s; }
.cases .cs-read:hover { color: var(--accent-deep); }
.cases .cs-visit { font: 500 16px var(--head); color: var(--mute); transition: color .2s; }
.cases .cs-visit:hover { color: var(--ink); }
.cases .cs-read:focus-visible, .cases .cs-visit:focus-visible, .cases .cs-foot a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 4px; }

/* Quote card */
.cases .cs-quote { margin: 8px 0 0; background: var(--sheet); border-radius: 12px; padding: 24px 24px; display: grid; gap: 16px; }
.cases .cs-quote blockquote { margin: 0; font: 500 16px/1.45 var(--head); letter-spacing: -0.01em; color: var(--ink); }
.cases .cs-quote figcaption { display: flex; align-items: center; gap: 16px; }
.cases .cs-quote figcaption b { display: block; font: 600 14px/1.3 var(--head); color: var(--ink); }
.cases .cs-quote figcaption small { display: block; font-size: 14px; line-height: 1.35; color: var(--mute); }
.cases .cs-avatar { flex: none; width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: var(--ink); color: #fff; font: 600 14px var(--head); letter-spacing: .02em; }

/* Note card (no client quote): their own claim, labelled */
.cases .cs-note { margin-top: 8px; background: var(--sheet); border-radius: 12px; padding: 16px 24px; display: grid; gap: 4px; }
.cases .cs-note b { font: 500 16px/1.4 var(--head); letter-spacing: -0.01em; color: var(--ink); }
.cases .cs-note small { font-size: 14px; color: var(--mute); }

/* Image panel: dark, tinted with the client's own colour from below */
.cases .cs-panel { --ph: clamp(380px, 40vw, 540px); --pad: clamp(24px, 3vw, 44px); position: relative; display: block; height: var(--ph); padding: var(--pad) var(--pad) 0; border-radius: 12px; overflow: hidden; isolation: isolate;
  background:
    radial-gradient(90% 70% at 50% 108%, color-mix(in srgb, var(--tint) 70%, transparent), transparent 70%),
    radial-gradient(60% 50% at 85% 0%, color-mix(in srgb, var(--glow, var(--tint)) 22%, transparent), transparent 70%),
    #0B0B0B; }
.cases .cs-panel::before { content: ''; position: absolute; inset: 0; z-index: -1; border-radius: inherit; box-shadow: inset 0 0 0 1px rgba(255,255,255,.06); pointer-events: none; }
.cases .cs-screen { display: flex; flex-direction: column; height: 100%; border-radius: 12px 12px 0 0; overflow: hidden; background: #fff; box-shadow: 0 -20px 60px -20px color-mix(in srgb, var(--tint) 60%, transparent), 0 30px 60px -20px rgba(0,0,0,.6); transform: translateY(6px); transition: transform .6s cubic-bezier(.2,.7,.2,1); }
.cases .cs-bar { flex: none; display: flex; align-items: center; gap: 4px; height: 30px; padding: 0 16px; background: #F2F2F2; border-bottom: 1px solid var(--line); }
.cases .cs-bar i { width: 8px; height: 8px; border-radius: 50%; background: #D4D4D4; }
.cases .cs-bar em { margin-left: 8px; font: 400 12px var(--text); font-style: normal; color: #8A8A8A; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cases .cs-view { --vh: calc(var(--ph) - var(--pad) - 30px); position: relative; display: block; height: var(--vh); overflow: hidden; }
.cases .cs-view img { width: 100%; height: auto; transform: translateY(0); transition: transform 1.4s cubic-bezier(.2,.7,.2,1); will-change: transform; }

/* Hover: lift the window and slowly scroll the full page */
.cases .cs-case:hover .cs-screen { transform: translateY(0); }
.cases .cs-case:hover .cs-panel:not(.cs-still) .cs-view img,
.cases .cs-case:focus-within .cs-panel:not(.cs-still) .cs-view img { transform: translateY(calc(-100% + var(--vh))); transition: transform var(--dur, 10s) cubic-bezier(.45,.05,.55,.95); }

/* Short screenshot: no scroll, shown whole at the top on the site's own dark ground */
.cases .cs-still .cs-view { background: #050505; }
.cases .cs-still .cs-view img { height: auto; }

/* Footer line */
.cases .cs-foot { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 16px 40px; padding-top: round(nearest, clamp(32px, 3vw, 40px), 8px); }
.cases .cs-foot p { margin: 0; color: var(--mute); font-size: 16px; max-width: 46em; }
.cases .cs-foot p a { color: var(--ink); font-weight: 500; text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; white-space: nowrap; }
.cases .cs-foot p a:hover { color: var(--accent-deep); }
.cases .cs-all { font: 500 16px var(--head); color: var(--ink); border-bottom: 1.5px solid currentColor; padding-bottom: 2px; white-space: nowrap; }
.cases .cs-all span { display: inline-block; transition: transform .2s; }
.cases .cs-all:hover { color: var(--accent-deep); }
.cases .cs-all:hover span { transform: translateX(3px); }

@media (max-width: 900px) {
  .cases .cs-case, .cases .cs-case:nth-child(even) { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  .cases .cs-panel, .cases .cs-case:nth-child(even) .cs-panel { order: -1; --ph: clamp(280px, 78vw, 460px); --pad: clamp(18px, 5vw, 32px); border-radius: 12px; }
  .cases .cs-id { flex-direction: column; gap: 8px; }
  .cases .cs-year { order: -1; padding-top: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .cases .cs-screen, .cases .cs-view img, .cases .cs-all span { transition: none; }
  .cases .cs-case:hover .cs-panel:not(.cs-still) .cs-view img,
  .cases .cs-case:focus-within .cs-panel:not(.cs-still) .cs-view img { transform: none; transition: none; }
}

/* ==== parts/hero.css ==== */
/* ===== Hero: one photographic scene in a contained, rounded panel =====
   Appended after style.css, so these rules replace the old grid + floating-mark hero. */
.hero { --hero-wall: #E3E8ED; display: block; min-height: 0; overflow: visible; background: none;
  padding: round(nearest, clamp(16px, 1.4vw, 16px), 8px) var(--gut) 0; }
.hero-stage { position: relative; isolation: isolate; max-width: var(--wrap); margin: 0 auto; overflow: hidden;
  border-radius: 12px; background: var(--hero-wall); min-height: min(78vh, 720px); display: flex; align-items: center; }

/* Scene layers */
.hero-scene { position: absolute; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; }
.hero-img { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; object-fit: cover; object-position: 100% 50%;
  scale: 1.04; translate: var(--hx, 0%) var(--hy, 0%); animation: hero-settle 2.2s cubic-bezier(.2,.7,.2,1) both; will-change: translate; }
@keyframes hero-settle { from { scale: 1.1; opacity: 0; } }
@keyframes hero-fade { from { opacity: 0; } }

/* Slow daylight drift: a soft warm highlight passing over the wall, screen-blended */
.hero-light { position: absolute; inset: -25%; mix-blend-mode: screen; opacity: .55;
  background:
    radial-gradient(28% 34% at 34% 42%, rgba(255, 249, 238, .55), rgba(255, 249, 238, 0) 70%),
    radial-gradient(22% 26% at 62% 66%, rgba(255, 255, 255, .35), rgba(255, 255, 255, 0) 70%);
  animation: hero-drift 28s ease-in-out infinite alternate; }
@keyframes hero-drift {
  0%   { transform: translate3d(-5%, -2%, 0) rotate(-2deg); }
  50%  { transform: translate3d(3%, 2%, 0) rotate(1deg); }
  100% { transform: translate3d(7%, -1%, 0) rotate(2deg); } }

/* Caustic shimmer: a faint spectral band sliding through the rainbow light the glass already throws */
.hero-caustic { position: absolute; left: 52%; right: 0; top: 30%; bottom: 0; mix-blend-mode: screen; opacity: .28; filter: blur(10px);
  background: repeating-linear-gradient(118deg,
    rgba(255, 120, 90, 0) 0, rgba(255, 140, 90, .5) 4%, rgba(255, 230, 120, .45) 7%, rgba(120, 230, 200, .4) 10%,
    rgba(120, 160, 255, .45) 13%, rgba(190, 130, 255, 0) 17%, rgba(190, 130, 255, 0) 34%);
  background-size: 220% 220%;
  -webkit-mask-image: radial-gradient(60% 55% at 70% 72%, #000 20%, transparent 75%); mask-image: radial-gradient(60% 55% at 70% 72%, #000 20%, transparent 75%);
  animation: hero-shimmer 24s linear infinite; }
@keyframes hero-shimmer { to { background-position: 100% 100%; } }

/* Soft light behind the copy, left side only */
.hero-veil { position: absolute; inset: 0;
  background: linear-gradient(90deg, rgba(238, 242, 245, .72) 0%, rgba(238, 242, 245, .5) 32%, rgba(238, 242, 245, 0) 56%); }

/* Copy */
.hero-copy { position: relative; z-index: 1; display: grid; gap: 16px; justify-items: start; max-width: 740px;
  padding: round(nearest, clamp(40px, 5vw, 72px), 8px) round(nearest, clamp(24px, 4.6vw, 64px), 8px); }
.hero h1 { margin: 0; font: 700 round(nearest, clamp(44px, 5vw, 70px), 8px)/1 var(--head); letter-spacing: -0.042em; color: var(--ink); text-wrap: balance; }
.hero-sub { margin: 0; font: 400 round(nearest, clamp(17px, 1.45vw, 21px), 8px)/1.5 var(--text); color: #1E2226; max-width: 29em; text-wrap: pretty; }
.hero-cta { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; margin: 4px 0 0; }
.hero-cta .btn { font-weight: 500; }
.hero-copy > :nth-child(4) { animation-delay: .36s; }

/* Review badges: a row, so a Clutch badge can sit beside Contra later */
.hero-reviews { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.review-badge { display: inline-flex; align-items: center; gap: 16px; padding: 8px 8px 8px 8px; border-radius: 999px; color: var(--ink);
  background: rgba(255, 255, 255, .62); -webkit-backdrop-filter: blur(16px) saturate(1.3); backdrop-filter: blur(16px) saturate(1.3);
  border: 1px solid rgba(255, 255, 255, .8); box-shadow: 0 1px 2px rgba(5, 5, 5, .04), 0 10px 28px -14px rgba(20, 32, 48, .3);
  transition: background .25s ease, transform .25s ease, box-shadow .25s ease; }
.review-badge:hover { background: rgba(255, 255, 255, .86); transform: translateY(-1px); box-shadow: 0 1px 2px rgba(5, 5, 5, .05), 0 14px 32px -14px rgba(20, 32, 48, .36); }
.review-badge:focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; }
.rb-logo { width: 40px; height: 40px; flex: none; border-radius: 50%; background: #fff; display: grid; place-items: center; box-shadow: inset 0 0 0 1px rgba(5, 5, 5, .07); }
.rb-logo img { width: 18px; height: 18px; }
.rb-copy { display: grid; gap: 2px; line-height: 1.15; }
.rb-top { display: flex; align-items: center; gap: 8px; }
.rb-top b { font: 600 16px/1 var(--head); letter-spacing: -0.01em; }
.rb-stars { display: inline-flex; gap: 1px; }
.rb-stars svg { width: 13px; height: 13px; fill: var(--accent); }
.review-badge small { font: 400 14px/1.2 var(--text); color: #3A3F45; }
.rb-go { width: 26px; height: 26px; margin-left: 4px; flex: none; border-radius: 50%; display: grid; place-items: center; opacity: .45; transition: opacity .25s, transform .25s; }
.rb-go svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.review-badge:hover .rb-go { opacity: 1; transform: translate(1px, -1px); }

/* Tablet: keep the scene, give the copy a little more veil */
@media (max-width: 1080px) {
  .hero-copy { max-width: 560px; }
  .hero-veil { background: linear-gradient(90deg, rgba(238, 242, 245, .8) 0%, rgba(238, 242, 245, .58) 40%, rgba(238, 242, 245, 0) 70%); }
}

/* Phone: sculpture top-right, copy below on a soft light fade */
@media (max-width: 700px) {
  .hero { padding-top: 8px; }
  .hero-stage { display: block; min-height: 0; border-radius: 12px; }
  .hero-stage { --pw: calc(100vw - 2 * var(--gut)); }
  /* Not cover: the photo is drawn at 180% width and pushed left so the sculpture sits top-right */
  .hero-img { inset: auto; top: -2%; right: -16.5%; width: 180%; height: auto; object-fit: fill; scale: 1; translate: none; animation-name: hero-fade; }
  .hero-caustic { left: 40%; top: calc(var(--pw) * .2); bottom: auto; height: calc(var(--pw) * .6); }
  .hero-veil { background: linear-gradient(180deg, rgba(227, 232, 237, 0) calc(var(--pw) * .42), rgba(227, 232, 237, .75) calc(var(--pw) * .66), var(--hero-wall) calc(var(--pw) * .84)); }
  .hero-copy { max-width: none; gap: 16px; padding: calc(var(--pw) * .8) 24px 24px; }
  .hero h1 { font-size: round(nearest, clamp(40px, 11vw, 48px), 8px); }
  .hero-sub { font-size: 16px; }
  .hero-cta, .hero-cta .btn { width: 100%; justify-content: center; }
  .hero-reviews, .hero-reviews li { width: 100%; }
  .review-badge { width: 100%; }
  .rb-go { margin-left: auto; }
}

@media (prefers-reduced-motion: reduce) {
  .hero-img, .hero-light, .hero-caustic { animation: none; }
  .hero-img { translate: none; }
}
.hero-stage.is-off .hero-light, .hero-stage.is-off .hero-caustic { animation-play-state: paused; }

/* ===== Real work instead of a render (Erfan: the glass scene looked AI) ===== */
.hero-stage { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); align-items: center; gap: round(nearest, clamp(32px, 4vw, 64px), 8px);
  background: #F3F3F4; padding: round(nearest, clamp(40px, 5vw, 72px), 8px); min-height: 0; }
.hero-stage::before, .hero-stage::after { content: none; }
.hero-copy { max-width: 560px; padding: 0; }
.hero h1 { font-size: round(nearest, clamp(40px, 4.6vw, 64px), 8px); }
.hero-work { margin: 0; display: grid; gap: 16px; }
.hw-window { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 1px 0 rgba(5,5,5,.04), 0 40px 70px -40px rgba(5,5,5,.45), 0 0 0 1px rgba(5,5,5,.06); }
.hw-bar { display: flex; align-items: center; gap: 16px; padding: 8px 16px; border-bottom: 1px solid #ECECEC; background: #FAFAFA; }
.hw-dots { display: flex; gap: 4px; } .hw-dots i { width: 9px; height: 9px; border-radius: 50%; background: #DADADA; }
.hw-url { flex: 1; max-width: 300px; margin: 0 auto; text-align: center; font: 400 12px var(--text); color: #6B6B6B; background: #F0F0F0; border-radius: 8px; padding: 4px 8px; transition: opacity .3s; }
.hw-screen { position: relative; height: clamp(320px, 34vw, 470px); overflow: hidden; background: #0B0B0B; }
.hw-shot { position: absolute; left: 0; top: 0; width: 100%; height: auto; max-width: none; opacity: 0; transition: opacity .8s ease; }
.hw-shot.is-on { opacity: 1; animation: hw-scroll 9s cubic-bezier(.45,.05,.35,1) both; }
@keyframes hw-scroll { 0%, 35% { transform: translateY(0); } 85%, 100% { transform: translateY(var(--hw-end, -20%)); } }
.hw-cap { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; font: 400 14px var(--text); color: #6B6B6B; padding: 0 4px; }
.hw-cap b { font: 600 14px var(--head); color: var(--ink); }
.hw-live { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); }
.hw-by { margin-left: auto; }
@media (max-width: 900px) {
  .hero-stage { grid-template-columns: minmax(0, 1fr); padding: 32px 16px; }
  .hw-screen { height: 300px; } .hw-by { margin-left: 0; }
}
@media (prefers-reduced-motion: reduce) { .hw-shot.is-on { animation: none; } }

/* No grey box: white page, work sits on a soft glow in the current client's colour */
.hero-stage { background: transparent; padding: round(nearest, clamp(40px, 6vw, 88px), 8px) 0 round(nearest, clamp(32px, 4vw, 56px), 8px); border-radius: 0; overflow: visible; }
.hero-work { position: relative; --glow: #20D39A; }
.hero-work::before { content: ''; position: absolute; inset: -12% -10% -4% -10%; z-index: -1; pointer-events: none;
  background: radial-gradient(48% 52% at 55% 48%, color-mix(in srgb, var(--glow) 55%, transparent), transparent 72%),
              radial-gradient(30% 30% at 20% 85%, rgba(255,60,0,.10), transparent 70%);
  filter: blur(28px); transition: background .9s ease; }
.hw-window { position: relative; }
@media (max-width: 900px) { .hero-stage { padding: 24px 0 32px; } }

/* ==== parts/type.css ==== */
/* Type scale up (Erfan: "all fonts can be bigger, better reading, better accessibility like Musemind").
   Loaded last. Body text >= 17px, small text >= 14px, greys darkened to pass WCAG AA on white. */
:root { --mute: #555555; --mute-d: #A3A3A3; }
body { font-size: 18px; line-height: 1.6; }

/* Header */
.brand img { height: 30px; }
.links { font-size: 16px; }
.links .nl, .mm-btn { font-size: 16px; font-weight: 500; color: #1F1F1F; }
.nav .btn-sm { min-height: 48px; padding: 0 24px; font-size: 16px; }

/* Mega menus */
.mm-label { font-size: 14px; color: #6A6A6A; }
.mm-item b { font-size: 16px; }
.mm-item small { font-size: 16px; color: #555; }
.mm-more { font-size: 16px; }

/* Hero */
.hero h1 { font-size: round(nearest, clamp(48px, 5.4vw, 80px), 8px); line-height: 1.02; }
.hero-sub { font-size: round(nearest, clamp(18px, 1.7vw, 24px), 8px); line-height: 1.5; color: #1A1A1A; }
.hero .btn-lg { min-height: 60px; padding: 0 32px; font-size: 18px; }
.rb-top b { font-size: 18px; }
.rb-stars svg { width: 16px; height: 16px; }
.review-badge small { font-size: 16px; color: #333; }
.rb-logo { width: 44px; height: 44px; } .rb-logo img { width: 20px; height: 20px; }
.hw-url { font-size: 14px; }
.hw-cap { font-size: 16px; color: #444; } .hw-cap b { font-size: 16px; }

/* Logo wall */
.clients .clients-label { font-size: 18px; color: #222; }

/* Numbers band */
.band .band-title { font-size: round(nearest, clamp(32px, 3.4vw, 48px), 8px); }
.band .band-sub { font-size: round(nearest, clamp(16px, 1.3vw, 18px), 8px); color: #B5B5B5; }
.band .band-n { font-size: round(nearest, clamp(48px, 5.4vw, 80px), 8px); }
.band .band-stat p { font-size: 16px; color: #B5B5B5; }

/* Case studies */
.cases h2, .cases .cs-head h2 { font-size: round(nearest, clamp(40px, 4.2vw, 64px), 8px); }
.cases .cs-head p { font-size: 18px; color: #444; }
.cases .cs-name h3 { font-size: 18px; }
.cases .cs-chips li { font-size: 14px; color: #2A2A2A; padding: 8px 16px; }
.cases .cs-year { font-size: 16px; color: #555; }
.cases .cs-headline { font-size: round(nearest, clamp(32px, 2.8vw, 40px), 8px); }
.cases .cs-sum { font-size: 18px; line-height: 1.6; color: #444; }
.cases .cs-read, .cases .cs-all { font-size: 18px; }
.cases .cs-visit { font-size: 16px; color: #555; }
.cases .cs-quote blockquote { font-size: 18px; }
.cases .cs-quote figcaption b { font-size: 16px; }
.cases .cs-quote figcaption small, .cases .cs-note small { font-size: 16px; color: #555; }
.cases .cs-note b { font-size: 18px; }
.cases .cs-bar em { font-size: 14px; color: #6A6A6A; }
.cases .cs-foot p { font-size: 18px; color: #444; }

@media (max-width: 760px) {
  body { font-size: 16px; }
  .hero h1 { font-size: 40px; }
  .hero-sub { font-size: 18px; }
  .cases .cs-headline { font-size: 24px; }
  .band .band-n { font-size: 48px; }
}
/* Wider text column so the bigger H1 stays on three lines */
.hero-stage { grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr); }
.hero-copy { max-width: 660px; }
.hero h1 { font-size: round(nearest, clamp(48px, 5vw, 80px), 8px); }
@media (max-width: 900px) { .hero-stage { grid-template-columns: minmax(0, 1fr); } }

/* Fonts like DesignMe: Inter for text, Inter Display (opsz 32) SemiBold for headings.
   Their exact heading face is Saans SemiBold (Displaay, paid licence) - swap in here once licensed. */
:root { --head: 'Inter', 'Helvetica Neue', Arial, sans-serif; --text: 'Inter', 'Helvetica Neue', Arial, sans-serif; }
body { font-family: var(--text); font-optical-sizing: auto; }
h1, h2, h3, .band-title, .band-n, .cs-headline, .stat b, .fact b { font-variation-settings: 'opsz' 32; }
.hero h1 { font-weight: 600; letter-spacing: -0.04em; }
h2, .cases h2, .band .band-title { font-weight: 600; letter-spacing: -0.035em; }
.cases .cs-headline { font-weight: 600; letter-spacing: -0.03em; }
.btn, .mm-btn, .links .nl, .mm-item b { font-family: var(--text); font-weight: 500; }
.hw-cap { font-size: 16px; } .hw-by { white-space: nowrap; } .hw-cap { flex-wrap: nowrap; } .hw-cap span:not(.hw-live):not(.hw-by) { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ==== parts/nav.css ==== */
/* Header: simple, like Musemind - see-through bar, hairline, dark links, one dropdown */
.nav { position: sticky; top: 0; z-index: 60; width: auto; max-width: none; margin: 0; padding: 16px var(--side); background: transparent; border: 0; border-bottom: 1px solid rgba(5,5,5,.08); border-radius: 0; box-shadow: none; }
.nav.scrolled { background: rgba(255,255,255,.72); backdrop-filter: saturate(1.4) blur(14px); -webkit-backdrop-filter: saturate(1.4) blur(14px); }
.nav:has(.mm.open) { background: rgba(255,255,255,.96); }
.brand img { height: 28px; }
.links { gap: 4px; }
.links .nl, .mm-btn { color: #4A4A4A; font-weight: 500; }
.links .nl:hover, .mm-btn:hover, .mm.open .mm-btn { color: var(--ink); }
.mm-btn { flex-direction: row; gap: 8px; color: var(--ink); }
.mm-arrow { width: 24px; height: 24px; top: 0; border: 0; transform: none; opacity: 1; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(5,5,5,.12); display: grid; place-items: center; }
.mm-arrow::before { content: ''; width: 10px; height: 10px; position: static; background: none; border: 0; transform: none;
  background: no-repeat center/10px url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 4v16M6 14l6 6 6-6' fill='none' stroke='%23050505' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }
.mm-arrow::after { content: none; }
.mm.open .mm-arrow { transform: rotate(180deg); top: 0; }
.mm-panel { left: var(--side); right: var(--side); top: 100%; border: 1px solid var(--line); border-top: 0; border-radius: 0 0 12px 12px; transform: translateY(-4px); }
.mm.open .mm-panel { transform: none; }
.mm-body { display: block; }
.nav .nav-cta { min-height: 46px; padding: 0 16px; }
.nav .nav-cta:hover { background: var(--ink); color: #fff; }
.hero-stage { padding-top: round(nearest, clamp(40px, 6vw, 88px), 8px); }
@media (max-width: 900px) { .nav { padding: 8px var(--gut); } .links { top: 100%; border-radius: 0 0 12px 12px; } }

/* One arrow style everywhere (Finsweet-like): short, bold, 2px stroke */
.arr { width: 1.05em; height: 1.05em; flex: none; display: inline-block; vertical-align: -0.17em; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: square; stroke-linejoin: miter; transition: transform .2s ease; }
.btn { gap: 8px; }
a:hover > .arr, .btn:hover .arr, .mm-more:hover .arr { transform: translateX(3px); }
a:hover > .arr[viewBox] path[d^="M7 17"] { }
.cs-visit:hover .arr, .cs-visit .arr { }
.mm-more i .arr { width: 16px; height: 16px; }
.rb-go .arr { width: 16px; height: 16px; }
/* Finsweet button + arrow look: rounded rectangles, arrow ~1.15em, 2px stroke, round ends */
.arr { width: 1.15em; height: 1.15em; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; vertical-align: -0.2em; }
.btn, .nav .nav-cta, .menu-btn { border-radius: 8px; }
.btn { padding: 0 24px 0 24px; }
.hero .btn-lg { padding: 0 24px 0 32px; }
/* Hover like Finsweet: no lift, no colour swap, no arrow nudge - the label gets an underline */
.btn, .btn:hover, .nav .nav-cta:hover, .hero .btn-dark:hover { transform: none; }
.btn-dark:hover { background: var(--ink); }
.nav .nav-cta:hover { background: #fff; color: #0B0B0B; }
.btn:hover, .nav .nav-cta:hover, .mm-more:hover span, .cs-read:hover, .cs-all:hover, .cs-visit:hover {
  text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 4px; }
a:hover > .arr, .btn:hover .arr, .mm-more:hover .arr, .mm-more:hover i { transform: none; }

/* Mega menus: intro line, labelled columns of real page links, latest articles (SEO pass) */
.mm-top { padding: 24px 24px 4px; }
.mm-intro { margin: 0; max-width: 40em; font: 500 18px/1.35 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.015em; color: var(--ink); text-wrap: balance; }
.mm-body { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
.mm-label { border-bottom: 0; padding: 16px 24px 4px; }
.mm-item { border-bottom: 0; padding: 16px 24px; }
.mm-col .mm-item:last-child { border-bottom: 0; }
.mm-col { padding-bottom: 16px; }
.mm-latest { width: 340px; padding: 0 16px 16px; border-left: 1px solid var(--line); display: grid; align-content: start; gap: 8px; }
.mm-latest .mm-label { padding: 16px 4px 4px; }
.mm-art { display: grid; grid-template-columns: 64px minmax(0, 1fr) 32px; align-items: center; gap: 16px; padding: 8px; border: 1px solid var(--line); border-radius: 12px; transition: background .2s; }
.mm-art:hover { background: #FAFAFA; } .mm-art:hover b { text-decoration: underline; text-underline-offset: 3px; }
.mm-thumb { width: 64px; height: 48px; border-radius: 8px; background: radial-gradient(120% 120% at 20% 20%, color-mix(in srgb, var(--t) 70%, white), var(--t)); }
.mm-art b { font: 500 14px/1.3 var(--text); color: var(--ink); }
.mm-go { width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--line); display: grid; place-items: center; }
.mm-go .arr { width: 15px; height: 15px; }
@media (max-width: 900px) { .mm-body { grid-template-columns: minmax(0, 1fr); } .mm-latest { width: auto; border-left: 0; padding: 0; } .mm-top { padding: 16px 0 0; } .mm-intro { font-size: 16px; } }
/* Services badge: white circle with a down arrow (Musemind) */
.mm-arrow::before, .mm-arrow::after { content: none !important; }
.mm-arrow { border: 0 !important; }
.mm-arrow svg { width: 12px; height: 12px; fill: none; stroke: var(--ink); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
/* Very subtle dividers between menu items and columns (Musemind) */
.mm-col { border-left-color: rgba(5,5,5,.06); }
.mm-item { padding: 16px 24px; }
.mm-col .mm-item + .mm-item { border-top: 1px solid rgba(5,5,5,.06); }
.mm-col .mm-item { margin: 0 0; }
.mm-col .mm-item + .mm-item { margin-left: 24px; margin-right: 24px; padding-left: 0; padding-right: 0; }
.mm-col .mm-label + .mm-item { margin-left: 24px; margin-right: 24px; padding-left: 0; padding-right: 0; }
.mm-panel { border-color: rgba(5,5,5,.07); }
/* Rows line up across the three columns: columns share one row grid (subgrid) */
.mm-grid { grid-template-rows: auto repeat(4, auto); }
.mm-col { display: grid; grid-row: span 5; grid-template-rows: subgrid; align-content: stretch; }
.mm-col .mm-item { align-items: flex-start; }
@supports not (grid-template-rows: subgrid) { .mm-col .mm-item { min-height: 82px; } }
@media (max-width: 900px) { .mm-grid { grid-template-rows: none; } .mm-col { grid-row: auto; grid-template-rows: none; display: block; } }
/* Menu icons: Lucide line icons and real platform logos in soft tiles */
.mm-ico { width: 36px; height: 36px; flex: none; border-radius: 8px; background: #F4F4F5; display: grid; place-items: center; transition: background .2s; }
.mm-ico svg { width: 18px; height: 18px; fill: none; stroke: #1A1A1A; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; margin: 0; }
.mm-ico.brand svg { fill: #1A1A1A; stroke: none; width: 17px; height: 17px; }
.mm-item:hover .mm-ico { background: #FFE9E0; }
.mm-item:hover .mm-ico svg { stroke: var(--accent-deep); }
.mm-item:hover .mm-ico.brand svg { fill: var(--accent-deep); stroke: none; }
.mm-item { align-items: center; gap: 16px; }
/* Panel top border sits exactly on the header's bottom hairline */
.mm-panel { top: calc(100% - 1px); border: 1px solid rgba(5,5,5,.08); border-radius: 0 0 12px 12px; box-shadow: 0 24px 48px -28px rgba(5,5,5,.28); }
.nav:has(.mm.open) { border-bottom-color: rgba(5,5,5,.08); }
.mm-panel { top: 100%; }

/* Menus v3: two text columns + a featured card with real work that moves */
.mm-wrap { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); }
.mm-grid.g2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.mm-feature { margin: 16px 16px 4px; padding: 16px; border-radius: 12px; background: #0B0B0B; color: #fff; display: grid; gap: 8px; align-content: start; position: relative; overflow: hidden; }
.mm-feature::before { content: ''; position: absolute; inset: -30% -20% auto; height: 70%; background: radial-gradient(closest-side, color-mix(in srgb, var(--tone) 45%, transparent), transparent); filter: blur(20px); pointer-events: none; }
.mf-vis { position: relative; border-radius: 8px; overflow: hidden; height: 190px; }
.mf-win { position: absolute; inset: 14px 14px 0; border-radius: 8px 8px 0 0; overflow: hidden; background: #fff; box-shadow: 0 20px 40px -20px rgba(0,0,0,.8); }
.mf-bar { height: 16px; display: flex; gap: 4px; align-items: center; padding: 0 8px; background: #F2F2F2; }
.mf-bar i { width: 5px; height: 5px; border-radius: 50%; background: #CFCFCF; }
.mf-screen { position: absolute; inset: 16px 0 0; overflow: hidden; }
.mf-screen img { width: 100%; height: auto; max-width: none; animation: mf-scroll 22s ease-in-out infinite alternate; }
@keyframes mf-scroll { 0%, 12% { transform: translateY(0); } 100% { transform: translateY(calc(-100% + 160px)); } }
.mf-stat { position: absolute; inset: 0; display: grid; grid-template-columns: auto 1fr; align-content: center; gap: 4px 16px; padding: 16px; }
.mf-stat b { font: 600 32px/1 var(--head); letter-spacing: -0.03em; color: #fff; }
.mf-stat .mf-stat2 { color: var(--accent); }
.mf-stat span { font-size: 14px; line-height: 1.3; color: #BDBDBD; align-self: center; }
.mf-label { position: relative; margin: 2px 4px 0; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: #9A9A9A; }
.mf-title { position: relative; margin: 0 4px 4px; font: 500 16px/1.35 var(--text); color: #fff; }
.mm-feature:hover .mf-title { text-decoration: underline; text-underline-offset: 3px; }
.mm-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 24px 4px; }
.mm-chips-label { font-size: 14px; letter-spacing: .06em; text-transform: uppercase; color: #6A6A6A; margin-right: 4px; }
.mm-chip { display: inline-flex; align-items: center; gap: 8px; padding: 4px 16px 4px 4px; border: 1px solid rgba(5,5,5,.08); border-radius: 8px; font: 500 14px var(--text); color: var(--ink); }
.mm-chip .mm-ico { width: 26px; height: 26px; border-radius: 8px; } .mm-chip .mm-ico svg { width: 14px; height: 14px; }
.mm-chip:hover { background: #FAFAFA; } .mm-chip:hover span { text-decoration: underline; text-underline-offset: 3px; }
.mm-grid.g2 { grid-template-rows: auto repeat(4, auto); }
@media (prefers-reduced-motion: reduce) { .mf-screen img { animation: none; } }
@media (max-width: 900px) { .mm-wrap { grid-template-columns: minmax(0, 1fr); } .mm-grid.g2 { grid-template-columns: minmax(0, 1fr); } .mm-feature { margin: 8px 0; } .mm-chips { padding: 8px 0; } }

/* ===== Menu polish: restraint, fewer filled shapes ===== */
.mm-panel { border-radius: 0 0 12px 12px; box-shadow: 0 1px 0 rgba(5,5,5,.02), 0 30px 70px -30px rgba(5,5,5,.30); padding: 4px 4px 0; }
.mm.open .mm-panel { animation: mm-in .28s cubic-bezier(.2,.7,.2,1) both; }
.mm.open .mm-col, .mm.open .mm-feature { animation: mm-in .36s cubic-bezier(.2,.7,.2,1) both; }
.mm.open .mm-col:nth-child(2) { animation-delay: .04s; } .mm.open .mm-feature { animation-delay: .08s; }
@keyframes mm-in { from { opacity: 0; transform: translateY(-6px); } }
.mm-label { font-size: 12px; letter-spacing: .09em; color: #8A8A8A; padding: 16px 16px 8px; }
.mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item { margin: 0 8px; padding: 16px 16px; border-radius: 12px; border-top: 0; }
.mm-col .mm-item + .mm-item { position: relative; }
.mm-col .mm-item + .mm-item::before { content: ''; position: absolute; left: 12px; right: 12px; top: 0; height: 1px; background: rgba(5,5,5,.055); }
.mm-item:hover { background: #F7F7F7; } .mm-item:hover::before, .mm-item:hover + .mm-item::before { opacity: 0; }
.mm-item b { font-size: 16px; font-weight: 500; letter-spacing: -0.005em; }
.mm-item small { font-size: 14px; color: #707070; margin-top: 2px; }
.mm-ico { width: 34px; height: 34px; border-radius: 8px; background: #fff; box-shadow: inset 0 0 0 1px rgba(5,5,5,.09), 0 1px 2px rgba(5,5,5,.05); }
.mm-ico svg { stroke-width: 1.6; width: 17px; height: 17px; }
.mm-item:hover .mm-ico { background: #fff; box-shadow: inset 0 0 0 1px rgba(255,60,0,.35), 0 2px 6px -2px rgba(255,60,0,.25); }
.mm-col { border-left-color: rgba(5,5,5,.05); }

/* Feature card */
.mm-feature { margin: 8px 8px 8px 4px; padding: 8px; border-radius: 12px; gap: 0; background: #0A0A0A; box-shadow: inset 0 0 0 1px rgba(255,255,255,.06); }
.mm-feature::before { inset: -40% -30% auto; height: 80%; opacity: .9; }
.mf-vis { height: 200px; border-radius: 8px; }
.mf-win { inset: 16px 16px 0; border-radius: 8px 8px 0 0; }
.mf-screen img { height: 100%; width: 100%; object-fit: cover; object-position: top; animation: mf-zoom 14s ease-in-out infinite alternate; transform-origin: 50% 20%; }
@keyframes mf-zoom { from { transform: scale(1); } to { transform: scale(1.08); } }
.mf-label { margin: 16px 8px 4px; font-size: 12px; letter-spacing: .09em; color: #8D8D8D; }
.mf-title { margin: 0 8px 8px; font-size: 14px; line-height: 1.45; color: #CFCFCF; }
.mf-title b { display: block; margin-bottom: 2px; font: 600 16px var(--head); color: #fff; }
.mf-title .arr { width: 15px; height: 15px; vertical-align: -0.15em; color: #fff; }
.mf-stat { padding: 16px 24px; } .mf-stat b { font-size: 40px; }

/* Platforms: a quiet inline row instead of boxed chips */
.mm-chips { gap: 4px 16px; padding: 8px 16px 16px; border-top: 1px solid rgba(5,5,5,.055); margin: 4px 8px 0; }
.mm-chips-label { font-size: 12px; letter-spacing: .09em; color: #8A8A8A; margin-right: 4px; }
.mm-chip { border: 0; padding: 4px 2px; gap: 8px; font-size: 14px; color: #3A3A3A; }
.mm-chip .mm-ico { width: 22px; height: 22px; border-radius: 4px; box-shadow: none; background: transparent; }
.mm-chip:hover { background: transparent; color: var(--ink); }

/* Bottom: hairline row with a text link, no grey slab or black disc */
.mm-more { margin: 0 8px; padding: 16px 16px 16px; background: transparent; border-top: 1px solid rgba(5,5,5,.055); border-radius: 0; font-size: 14px; font-weight: 400; color: #5A5A5A; }
.mm-more u { text-decoration: none; color: var(--ink); font-weight: 500; }
.mm-more i { width: auto; height: auto; background: none; color: var(--ink); border-radius: 0; }
.mm-more i .arr { width: 17px; height: 17px; }
.mm-more:hover { background: transparent; } .mm-more:hover u, .mm-more:hover span { text-decoration: underline; text-underline-offset: 4px; }
@media (prefers-reduced-motion: reduce) { .mf-screen img, .mm.open .mm-panel, .mm.open .mm-col, .mm.open .mm-feature { animation: none; } }
/* Feature card caption: name + one short line + arrow button; no underline */
.mf-cap { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 8px 4px; }
.mf-cap b { display: block; font: 600 16px/1.2 var(--head); letter-spacing: -0.01em; color: #fff; }
.mf-cap span:not(.mf-go) { display: block; margin-top: 4px; font-size: 14px; color: #9A9A9A; }
.mf-go { flex: none; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: rgba(255,255,255,.1); color: #fff; transition: background .25s, transform .25s; }
.mf-go .arr { width: 16px; height: 16px; }
.mm-feature:hover .mf-go { background: var(--accent); color: #0A0A0A; }
.mm-feature:hover .mf-screen img { transform: scale(1.06); }
.mm-feature:hover .mf-title, .mm-feature .mf-cap b { text-decoration: none; }
.mf-vis { height: 210px; }
/* Hover highlight hugs its item: rows stay aligned, but no item stretches into spare space */
.mm-col { align-content: start; padding-bottom: 8px; }
.mm-col .mm-item { align-self: start; }
.mm-grid, .mm-grid.g2 { align-content: start; grid-template-rows: auto repeat(4, min-content); }

/* Services menu v4: four offers first (what we sell), audiences and platforms as compact link rows */
.mm-svc .mm-svc-main { padding: 4px 8px 4px; }
.mm-svc .mm-label { padding: 16px 16px 8px; }
.mm-offers { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 0 4px; }
.mm-offer { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 16px; padding: 16px; border-radius: 12px;
  border: 1px solid rgba(5,5,5,.07); background: #fff; transition: border-color .2s, box-shadow .2s, background .2s; }
.mm-offer:hover { border-color: rgba(5,5,5,.14); box-shadow: 0 10px 24px -16px rgba(5,5,5,.3); }
.mm-offer .mm-ico { width: 40px; height: 40px; border-radius: 8px; }
.mm-offer .mm-ico svg { width: 19px; height: 19px; }
.mo-txt b { display: block; font: 600 16px/1.25 var(--head); letter-spacing: -0.01em; color: var(--ink); }
.mo-txt small { display: block; margin-top: 4px; font-size: 14px; line-height: 1.35; color: #666; }
.mo-go { width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; color: var(--ink); background: #F4F4F5; transition: background .2s, color .2s; }
.mo-go .arr { width: 15px; height: 15px; }
.mm-offer:hover .mo-go { background: var(--ink); color: #fff; }
.mm-offer:hover .mm-ico { box-shadow: inset 0 0 0 1px rgba(255,60,0,.35), 0 2px 6px -2px rgba(255,60,0,.25); }
.mm-rows { display: grid; gap: 2px; margin: 16px 4px 0; padding-top: 8px; border-top: 1px solid rgba(5,5,5,.055); }
.mm-row { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 16px; padding: 4px 8px; }
.mm-row-label { width: 64px; font-size: 12px; letter-spacing: .09em; text-transform: uppercase; color: #8A8A8A; }
.mm-link { display: inline-flex; align-items: center; gap: 8px; font: 500 14px var(--text); color: #2A2A2A; padding: 4px 0; }
.mm-link .mm-ico { width: 20px; height: 20px; box-shadow: none; background: transparent; border-radius: 0; }
.mm-link .mm-ico svg { width: 14px; height: 14px; }
.mm-link:hover span { text-decoration: underline; text-underline-offset: 3px; color: var(--ink); }
@media (max-width: 900px) { .mm-offers { grid-template-columns: minmax(0, 1fr); } .mm-row-label { width: 100%; } }

/* All menus: DesignMe-clean outlined grid - equal cells, one hairline between every cell */
.mm-panel { padding: 0; }
.mm-grid.g3 { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: auto repeat(4, min-content); }
.mm-col { padding: 0; border-left: 1px solid rgba(5,5,5,.07); }
.mm-col:first-child { border-left: 0; }
.mm-label { margin: 0; padding: 16px 24px 16px; border-bottom: 1px solid rgba(5,5,5,.07); }
.mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item { margin: 0; padding: 16px 24px; border-radius: 0; border-bottom: 1px solid rgba(5,5,5,.07); }
.mm-col .mm-item + .mm-item::before { content: none; }
.mm-item:hover { background: #FAFAFA; }
.mm-wrap { border-bottom: 1px solid rgba(5,5,5,.07); }
.mm-wrap .mm-col .mm-item:last-child { border-bottom: 0; }
.mm-feature { margin: 16px; }
.mm-more { margin: 0; padding: 16px 24px; border-top: 0; }
.mm-grid.g3 + .mm-more { border-top: 0; }

/* Menu items like DesignMe: plain line icons (no tile, no border), bold dark titles, grey one-liners */
.mm-item .mm-ico, .mm-item:hover .mm-ico { width: 20px; height: 20px; background: none; box-shadow: none; border-radius: 0; align-self: start; margin-top: 2px; }
.mm-item .mm-ico svg { width: 19px; height: 19px; stroke: #111; stroke-width: 1.7; }
.mm-item .mm-ico.brand svg { fill: #111; stroke: none; width: 17px; height: 17px; }
.mm-item:hover .mm-ico svg { stroke: #111; } .mm-item:hover .mm-ico.brand svg { fill: #111; }
.mm-item { gap: 16px; align-items: flex-start; }
.mm-item b { font: 600 16px/1.3 var(--text); color: #050505; letter-spacing: -0.005em; }
.mm-item small { font-size: 14px; color: #6B6B6B; margin-top: 4px; }

/* Menu tags: only when true (Popular = most-used by our clients; New = genuinely new). Max two per menu (Services: Popular on Framer, New on Website migration). */
.mm-item b { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tag { font: 500 12px/1 var(--text); letter-spacing: .06em; text-transform: uppercase; padding: 4px 4px; border-radius: 4px; }
.tag-pop { background: #FFEDE6; color: #B42A00; }
.tag-new { background: #EEF0FF; color: #3B3FC4; }

/* UX pass: lighter structure - column lines only, rows separated by space, not boxes */
.mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item { border-bottom: 0; padding: 16px 24px; }
.mm-label { border-bottom: 0; padding-bottom: 4px; }
.mm-col { padding-bottom: 8px; }
.mm-item:hover { background: #F7F7F7; }
.mm-wrap { border-bottom: 1px solid rgba(5,5,5,.07); }
/* Keyboard focus */
.mm-item:focus-visible, .mm-more:focus-visible, .mm-feature:focus-visible, .mm-btn:focus-visible, .links .nl:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: -2px; }

/* Rule fixes flagged by the design system audit */
.mm-label, .mm-chips-label, .mm-row-label, .mf-label { color: #666; font-size: 12px; }          /* 5.7:1 on white */
.tag { font-size: 12px; } .tag-pop { color: #A42600; } .tag-new { color: #3236B0; }            /* both >= 4.5:1 on their fills */
.cases .cs-read:hover, .cases .cs-visit:hover, .cases .cs-all:hover { color: inherit; text-decoration: underline; text-underline-offset: 4px; }
.review-badge:hover { transform: none; box-shadow: none; }
.review-badge:hover small { text-decoration: underline; text-underline-offset: 3px; }

/* Feature card: calm hover (no orange fill) + clearer subtitle */
.mf-cap b { font: 600 16px/1.25 var(--text); letter-spacing: -0.01em; }
.mf-cap span:not(.mf-go) { font: 500 14px/1.3 var(--text); color: rgba(255,255,255,.66); letter-spacing: 0; margin-top: 4px; }
.mf-go { background: rgba(255,255,255,.08); box-shadow: inset 0 0 0 1px rgba(255,255,255,.16); color: #fff; transition: background .25s, color .25s, box-shadow .25s; }
.mm-feature:hover .mf-go { background: #fff; color: #0A0A0A; box-shadow: none; }
.mm-feature:hover .mf-cap b { text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 4px; }
.mf-screen img { transition: transform .8s cubic-bezier(.2,.7,.2,1); animation: none; }
.mm-feature:hover .mf-screen img { transform: scale(1.03); }

/* Three equal thirds: two link columns + feature column, with a divider before the feature */
.mm-wrap { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.mm-wrap > .mm-grid.g2 { grid-column: span 2; border-right: 1px solid rgba(5,5,5,.07); }
.mm-wrap > .mm-feature { margin: 16px; align-self: start; }
@media (max-width: 900px) { .mm-wrap { grid-template-columns: minmax(0, 1fr); } .mm-wrap > .mm-grid.g2 { grid-column: auto; border-right: 0; } }
.cases .cs-visit:hover { color: #555; }

/* Inset hover highlight: 8px clear of the column edges, 8px corners (radius rule) */
.mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item { margin: 0 8px; padding: 16px 16px; border-radius: 8px; }
.mm-label { padding-left: 24px; }

/* Buttons: Lazarev-style arrow swap - the arrow slides out right, a fresh one slides in from the left.
   Background stays ink (white on #FF3C00 fails contrast, 3.6:1). Text links keep the underline rule. */
.arr-swap { position: relative; display: inline-block; width: 1.15em; height: 1.15em; overflow: hidden; vertical-align: -0.2em; flex: none; }
.arr-swap .arr { position: absolute; inset: 0; transition: transform .6s cubic-bezier(.16,1,.3,1), opacity .6s cubic-bezier(.16,1,.3,1); }
.arr-swap .arr + .arr { transform: translateX(-120%); opacity: 0; }
.btn:hover .arr-swap .arr:first-child, .btn:focus-visible .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
.btn:hover .arr-swap .arr + .arr, .btn:focus-visible .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
.btn:hover, .nav .nav-cta:hover { text-decoration: none; }
.btn { transition: background .4s cubic-bezier(.25,1,.5,1); }
.btn-dark:hover { background: #1F1F1F; }
@media (prefers-reduced-motion: reduce) { .arr-swap .arr { transition: none; } }

/* Services menu: the free review is the next step, so it gets a visible band */
.mm-review { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 16px; padding: 16px 24px; background: #FFF6F2; border-top: 1px solid rgba(255,60,0,.14); }
.mr-ico { width: 40px; height: 40px; border-radius: 8px; background: #fff; display: grid; place-items: center; box-shadow: inset 0 0 0 1px rgba(255,60,0,.22); }
.mr-ico svg { width: 20px; height: 20px; fill: none; stroke: var(--accent-deep); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.mr-txt b { display: block; font: 600 16px/1.3 var(--text); color: var(--ink); }
.mr-txt small { display: block; margin-top: 2px; font-size: 14px; color: #5A4A44; }
.mr-btn { min-height: 42px; padding: 0 16px 0 16px; font-size: 16px; gap: 8px; }
.mm-review:hover .mr-btn { background: #1F1F1F; }
.mm-review:hover .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
.mm-review:hover .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
.mm-review:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: -2px; }
@media (max-width: 760px) { .mm-review { grid-template-columns: auto minmax(0, 1fr); } .mr-btn { grid-column: 1 / -1; justify-content: center; } }

/* All buttons: hover turns orange (#D23100, white text 5.0:1 - #FF3C00 would fail at 3.6:1), arrow swap stays */
.btn, .nav .nav-cta, .mr-btn { transition: background-color .4s cubic-bezier(.25,1,.5,1), color .4s cubic-bezier(.25,1,.5,1); }
.btn:hover, .btn:focus-visible, .btn-dark:hover, .nav .nav-cta:hover, .nav .nav-cta:focus-visible, .mm-review:hover .mr-btn { background: var(--accent-deep); color: #fff; }

/* Hero button a bit smaller (was 60px tall, 18px text) */
.hero .btn-lg { min-height: 52px; padding: 0 24px 0 24px; font-size: 16px; gap: 8px; }

/* Review proof card (option A) */
.opt-review{display:grid}

.orv{position:relative;height:210px;border-radius: 4px;background:#141414;padding: 16px;display:grid;align-content:start;gap: 16px}

.orv-k{margin: 0;font: 500 12px var(--text);letter-spacing:.08em;text-transform:uppercase;color:#9A9A9A}

.orv-list{list-style:none;margin: 0;padding: 0;display:grid;gap: 8px}

.orv-list li{display:flex;align-items:center;gap: 8px;font: 500 16px var(--text);color:#EDEDED}

.orv-list em{font-style:normal;margin-left: auto;color:#FF6A3D;font-size: 14px}

.ok,.no{width:20px;height:20px;border-radius: 50%;display:grid;place-items:center;font-size: 12px;flex:none}

.ok{background:rgba(32,211,154,.18);color:#43E0AE}
.no{background:rgba(255,60,0,.18);color:#FF6A3D}


/* Menus, DesignMe structure in Pentaclay's look: bordered square cells, black bottom bar */
.mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item { margin: 0; padding: 16px 24px; border-radius: 0; border-bottom: 1px solid rgba(5,5,5,.07); }
.mm-label { padding: 16px 24px 16px; border-bottom: 1px solid rgba(5,5,5,.07); }
.mm-col { padding-bottom: 0; }
.mm-item:hover { background: #F7F7F7; }
.mm-wrap { border-bottom: 0; }
.mm-bar { display: flex; align-items: center; justify-content: center; gap: 8px; margin: 8px; padding: 16px 16px; border-radius: 8px; background: var(--ink); color: #fff; font: 500 16px var(--text); transition: background-color .4s cubic-bezier(.25,1,.5,1); }
.mm-bar:hover, .mm-bar:focus-visible { background: var(--accent-deep); }
.mm-bar:hover .arr-swap .arr:first-child, .mm-bar:focus-visible .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
.mm-bar:hover .arr-swap .arr + .arr, .mm-bar:focus-visible .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
.mm-feature { margin: 16px; }

/* ONE arrow: same geometry everywhere, rotated for direction; fixed 1.75px line at every size */
.arr, .mm-arrow svg { fill: none; stroke: currentColor; stroke-width: 1.75px; vector-effect: non-scaling-stroke; stroke-linecap: round; stroke-linejoin: round; }
.arr path, .mm-arrow svg path { vector-effect: non-scaling-stroke; }
.arr-ne { transform: rotate(-45deg); }
.arr-down { transform: rotate(90deg); }
.mm.open .mm-arrow .arr-down { transform: rotate(-90deg); }
.mm-arrow { width: 22px; height: 22px; background: transparent; box-shadow: none; color: #050505; transform: none !important; }
.mm-arrow svg { width: 14px; height: 14px; transition: transform .3s cubic-bezier(.16,1,.3,1); }
/* one size per context */
.btn .arr, .btn .arr-swap { width: 18px; height: 18px; }
.mm-bar .arr-swap, .mm-bar .arr { width: 18px; height: 18px; }
.mf-go .arr, .rb-go .arr, .mo-go .arr { width: 16px; height: 16px; }
.cases .arr, .mm-more .arr { width: 16px; height: 16px; }

/* Icon rule: platform logos are filled official marks; every other icon is a 1.75px line icon.
   Logos sized smaller so their solid shapes match the visual weight of line icons. */
.mm-item .mm-ico svg { stroke-width: 1.75px; vector-effect: non-scaling-stroke; }
.mm-item .mm-ico svg * { vector-effect: non-scaling-stroke; }
.mm-item .mm-ico.brand svg { width: 15px; height: 15px; margin: 2px; }

/* ===== Free review card: a live mini report ===== */
@property --p { syntax: '<number>'; inherits: true; initial-value: 0; }
.opt-review .orv { position: relative; overflow: hidden; height: 210px; padding: 0; display: grid; grid-template-rows: auto 1fr; gap: 0; align-content: stretch;
  border-radius: 4px; background: radial-gradient(120% 90% at 85% 0%, rgba(255,60,0,.16), transparent 60%), #121212; box-shadow: inset 0 0 0 1px rgba(255,255,255,.06); }
.orv-bar { display: flex; align-items: center; gap: 8px; padding: 8px 16px; border-bottom: 1px solid rgba(255,255,255,.06); }
.orv-dots { display: flex; gap: 4px; } .orv-dots i { width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,.18); }
.orv-url { flex: 1; font: 500 12px var(--text); color: rgba(255,255,255,.55); background: rgba(255,255,255,.06); border-radius: 4px; padding: 4px 8px; }
.orv-ex { font: 500 12px var(--text); letter-spacing: .06em; text-transform: uppercase; color: rgba(255,255,255,.5); }
.orv-body { display: grid; grid-template-columns: 92px minmax(0, 1fr); align-items: center; gap: 16px; padding: 16px 16px; }
.orv-score { display: grid; justify-items: center; gap: 4px; }
.orv-score small { font: 500 12px var(--text); color: rgba(255,255,255,.6); }
.orv-ring { --p: 62; width: 78px; height: 78px; border-radius: 50%; display: grid; place-items: center;
  background: conic-gradient(var(--accent) calc(var(--p) * 1%), rgba(255,255,255,.08) 0); 
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 6px), #000 calc(100% - 5px)); mask: radial-gradient(farthest-side, transparent calc(100% - 6px), #000 calc(100% - 5px)); position: relative; }
.orv-score { position: relative; }
.orv-num { position: absolute; inset: 0; display: grid; place-items: center; font: 600 24px var(--head); color: #fff; letter-spacing: -0.02em; counter-reset: n calc(var(--p)); -webkit-mask: none; mask: none; }
.orv-ring { -webkit-mask: none; mask: none; background: none; }
.orv-ring::before { content: ''; position: absolute; inset: 0; border-radius: 50%; background: conic-gradient(var(--accent) calc(var(--p) * 1%), rgba(255,255,255,.09) 0);
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 6px), #000 calc(100% - 5.5px)); mask: radial-gradient(farthest-side, transparent calc(100% - 6px), #000 calc(100% - 5.5px)); }
.orv-num::after { content: counter(n); }
.orv-checks { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.orv-checks li { display: flex; align-items: center; gap: 8px; font: 500 14px/1.25 var(--text); color: rgba(255,255,255,.92); }
.orv-checks li b { color: #FF7A50; font-weight: 600; }
.orv-checks svg { width: 18px; height: 18px; flex: none; padding: 4px; border-radius: 50%; fill: none; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.orv-checks .is-ok svg { stroke: #3BE0A6; background: rgba(59,224,166,.14); }
.orv-checks .is-no svg { stroke: #FF7A50; background: rgba(255,60,0,.16); }
.orv-scan { position: absolute; left: 0; right: 0; top: 32px; height: 40px; pointer-events: none;
  background: linear-gradient(180deg, transparent, rgba(255,122,80,.10) 60%, rgba(255,122,80,.28) 96%, transparent); opacity: 0; }

/* animate when the menu opens */
.mm.open .orv-ring { animation: orv-fill 1.4s cubic-bezier(.16,1,.3,1) .15s both; }
@keyframes orv-fill { from { --p: 0; } to { --p: 62; } }
.mm.open .orv-checks li { animation: orv-in .5s cubic-bezier(.16,1,.3,1) both; }
.mm.open .orv-checks li:nth-child(1) { animation-delay: .25s; } .mm.open .orv-checks li:nth-child(2) { animation-delay: .45s; }
.mm.open .orv-checks li:nth-child(3) { animation-delay: .65s; } .mm.open .orv-checks li:nth-child(4) { animation-delay: .85s; }
@keyframes orv-in { from { opacity: 0; transform: translateX(-6px); } }
.mm.open .orv-scan { animation: orv-scan 1.3s cubic-bezier(.4,0,.2,1) .2s both; }
@keyframes orv-scan { 0% { opacity: 0; transform: translateY(-20px); } 15% { opacity: 1; } 85% { opacity: 1; } 100% { opacity: 0; transform: translateY(150px); } }
.opt-review:hover .orv-ring { animation: orv-fill 1.2s cubic-bezier(.16,1,.3,1) both; }
@media (prefers-reduced-motion: reduce) { .mm.open .orv-ring, .mm.open .orv-checks li, .mm.open .orv-scan, .opt-review:hover .orv-ring { animation: none; } .orv-scan { display: none; } }
.orv-checks li > span { display: inline; flex: 1 1 auto; min-width: 0; width: auto; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.orv-checks li > svg { width: 18px !important; height: 18px !important; }
.orv-checks { width: 100%; justify-items: stretch; } .orv-checks li { width: 100%; justify-self: stretch; min-width: 0; }
/* Industries menu has 5 rows since Manufacturing joined the second column (15 Oct, research build #1: industrial is where pentaclay.com already ranks) */
#mm-industries .mm-grid { grid-template-rows: auto repeat(5, auto); }
#mm-industries .mm-col { grid-row: span 6; }
@media (max-width: 900px) { #mm-industries .mm-grid { grid-template-rows: none; } #mm-industries .mm-col { grid-row: auto; } }

/* ==== parts/zfix.css ==== */
/* Loaded last. */
/* Subtle (secondary) button - DesignMe-like quiet bar: light fill, ink text, arrow swap; hover a touch darker */
.mm-bar, .btn-subtle { background: #F4F4F5; color: #050505; box-shadow: inset 0 0 0 1px rgba(5,5,5,.05); }
.mm-bar:hover, .mm-bar:focus-visible, .btn-subtle:hover, .btn-subtle:focus-visible { background: #EAEAEC; color: #050505; }

/* Audit fixes: bordered menu cells are square; one focus ring everywhere; reduced motion respected */
.mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item { border-radius: 0; }
a:focus-visible, button:focus-visible, .btn:focus-visible, .review-badge:focus-visible, .cases a:focus-visible, .mm-item:focus-visible, .mm-bar:focus-visible, .mm-feature:focus-visible { outline: 2px solid #D23100; outline-offset: 2px; box-shadow: none; }
.mm-item:focus-visible { outline-offset: -2px; }
@media (prefers-reduced-motion: reduce) {
  .arr-swap .arr, .rb-go, .rb-go .arr, .mf-screen img, .mm-feature:hover .mf-screen img, .review-badge:hover .rb-go { transition: none !important; transform: none !important; animation: none !important; }
}

/* Services proof: DesignMe-style featured video - grey panel, video, plain caption below */
.mm-vid { display: grid; grid-template-rows: auto auto; align-content: start; gap: 0; margin: 0; border-left: 0; color: var(--ink); }
.mv-frame { display: block; background: #ECECEC; aspect-ratio: 16 / 9; overflow: hidden; }
.mv-frame video { width: 100%; height: 100%; object-fit: cover; display: block; }
.mv-cap { display: grid; gap: 4px; padding: 16px 16px 16px; border-top: 1px solid rgba(5,5,5,.07); }
.mv-k { font: 500 12px var(--text); letter-spacing: .08em; text-transform: uppercase; color: #666; }
.mv-cap b { font: 600 16px/1.35 var(--text); color: var(--ink); }
.mv-cap .arr { width: 16px; height: 16px; vertical-align: -0.2em; }
.mm-vid:hover .mv-cap b { text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 4px; }

/* Hairline closing the grid above the Explore bar */
.mm-wrap { border-bottom: 1px solid rgba(5,5,5,.07); }

/* Video card: inner padding left/right, poster always visible behind the video */
.mm-vid { margin: 16px; border-radius: 12px; overflow: hidden; box-shadow: inset 0 0 0 1px rgba(5,5,5,.07); align-self: start; }
.mv-frame { background: #ECECEC center / cover no-repeat; }
.mv-cap { padding: 16px 16px 16px; }

/* Audit video card: one-line action, calm hover (border darkens, arrow swaps, no underline), no poster edge */
.mv-frame { background: #ECECEC; }
.mv-go { display: inline-flex; align-items: center; gap: 8px; font: 600 16px/1.3 var(--text); color: var(--ink); white-space: nowrap; }
.mv-go .arr-swap { width: 16px; height: 16px; }
.mm-vid { transition: box-shadow .3s ease; }
.mm-vid:hover { box-shadow: inset 0 0 0 1px rgba(5,5,5,.18); }
.mm-vid:hover .mv-cap b, .mm-vid:hover .mv-go { text-decoration: none; }
.mm-vid:hover .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
.mm-vid:hover .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
.mm-vid:focus-visible { outline: 2px solid #D23100; outline-offset: -2px; }

/* Tighter label-to-arrow gap in the nav */
.mm-btn { gap: 4px; }
.mm-arrow { width: 14px; height: 14px; }
.mm-arrow svg { width: 13px; height: 13px; }

/* Video card centred in its column: equal space above and below */
.mm-wrap > .mm-vid, .mm-wrap > .mm-feature { align-self: center; margin: 16px; }

/* Nav menu arrows (12 Oct): calmer + no jump.
   Was a 180° spin on a fast-out ease (80% of the turn in ~50ms) on a half-pixel box.
   Now: whole-pixel 12px box, smaller grey arrow, even ease, own layer so it never re-rasterises mid-turn. */
.mm-arrow { width: 12px; height: 12px; flex: none; color: #6B6B6B; transition: color .2s; }
.mm-arrow svg { width: 12px; height: 12px; display: block; will-change: transform; backface-visibility: hidden; transition: transform .28s cubic-bezier(.4,0,.2,1); }
.mm-btn:hover .mm-arrow, .mm.open .mm-arrow { color: #050505; }
@media (prefers-reduced-motion: reduce) { .mm-arrow svg { transition: none; } }

/* Third menu tag: experience we can prove (Fintech = founder's 5 years on Banfico's open banking software) */
.tag-exp { background: #E3F5EA; color: #0B6B3A; }   /* 5.8:1; was grey, read as disabled (Erfan 12 Oct) */

/* One colour for all six nav labels (12 Oct). Dropdown buttons were #050505 (nav.css), plain links #4A4A4A: they drifted apart by layering. */
.links .nl, .mm-btn { color: #1F1F1F; }
.links .nl:hover, .mm-btn:hover, .mm.open .mm-btn { color: #050505; }

/* Review badge beside Book a call (12 Oct): no card, no shadow, no arrow.
   It had a glow shadow at rest that a later hover rule removed, so it went flat on hover. Now it is a plain proof line;
   hover underlines the "Hired 18 times" line (text-link rule). */
.hero-cta { gap: 16px 32px; }
.hero-cta .review-badge { gap: 16px; min-height: 52px; padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none;
  -webkit-backdrop-filter: none; backdrop-filter: none; transition: none; }
.hero-cta .review-badge:hover { background: none; box-shadow: none; transform: none; }
.hero-cta .rb-logo { width: 44px; height: 44px; background: #fff; box-shadow: inset 0 0 0 1px rgba(5,5,5,.1); }
.hero-cta .rb-top b { font-size: 18px; }
.hero-cta .rb-stars svg { width: 15px; height: 15px; }
.hero-cta .review-badge small { font-size: 16px; color: #333; text-decoration-thickness: 1.5px; text-underline-offset: 4px; }
@media (max-width: 760px) { .hero-cta .review-badge { width: auto; justify-content: center; } }
/* Badge hover (12 Oct, Erfan): no underline. Same idea as the menu video cards: the hairline darkens. */
.hero-cta .review-badge:hover small { text-decoration: none; }
.hero-cta .rb-logo { transition: box-shadow .25s ease; }
.hero-cta .review-badge:hover .rb-logo { box-shadow: inset 0 0 0 1px rgba(5,5,5,.45); }

/* Hero window never wider than its column (phones: the address bar's min-content pushed it 160px past the edge) */
.hero-work { min-width: 0; grid-template-columns: minmax(0, 1fr); }
.hw-window { min-width: 0; width: 100%; }
.hw-url { min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* One warm grey ground for the whole page (12 Oct, Erfan). The ribbed-glass texture stays in the hero only.
   Cards, menus and windows stay white so they lift off the grey. Greys on #ECECE9: #555 = 6.3:1, #6B6B6B = 4.6:1 (both pass 4.5). */
:root { --ground: #ECECE9; }
html, body { background: var(--ground); }
.nav.scrolled { background: rgba(236,236,233,.82); }

/* Proof strip (12 Oct): four facts, no Framer badge; labels say exactly what each number counts and may wrap;
   clearer full-height dividers; the study links to its source. */
.proof-row { grid-template-columns: repeat(4, minmax(0, 1fr)); max-width: 1080px; margin: 0 auto; }
.proof-row li { grid-template-rows: auto auto auto; align-items: start; align-content: start; row-gap: 8px; padding: 4px 24px; }
.proof-row li + li::before { top: 0; bottom: 0; background: rgba(5,5,5,.12); }
.proof-row b { font-size: round(nearest, clamp(40px, 3.6vw, 48px), 8px); }
.proof-row span { white-space: normal; max-width: 15em; text-wrap: balance; }
.proof-link { display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; font: 500 16px var(--text); color: #050505; text-decoration: none; }
.proof-link .arr { width: 15px; height: 15px; }
@media (max-width: 900px) { .proof-row { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 32px; } .proof-row li:last-child { grid-column: auto; } .proof-row li { padding: 0 8px; } }

/* Proof strip in the Rozen style (12 Oct, Erfan): four bordered cells (square: bordered grid cells have no radius),
   index top right, large light number, title, one-line meaning; a tick ruler underneath with a slow orange glow. */
.proof { padding-top: round(nearest, clamp(40px, 5vw, 72px), 8px); }
.proof-grid { max-width: none; grid-template-columns: repeat(4, minmax(0, 1fr)); border: 1px solid rgba(5,5,5,.12); border-bottom: 0; }
.proof-grid li { display: flex; flex-direction: column; align-items: flex-start; text-align: left; gap: 0; padding: 24px 32px 32px; min-height: 300px; position: relative; }
.proof-grid li + li { border-left: 1px solid rgba(5,5,5,.12); }
.proof-grid li + li::before { content: none; }
.pc-n { position: absolute; top: 22px; right: 24px; font: 400 14px var(--text); color: #6B6B6B; font-variant-numeric: tabular-nums; }
.proof-grid b { margin-top: 48px; font: 400 round(nearest, clamp(52px, 5.4vw, 80px), 8px)/1 var(--head); letter-spacing: -0.045em; color: #050505; }
.proof-grid strong { margin-top: 32px; font: 500 18px/1.3 var(--text); letter-spacing: -0.01em; color: #050505; }
.proof-grid p { margin: 8px 0 0; font: 400 16px/1.5 var(--text); color: #444; max-width: 24em; }
.proof-grid .proof-link { margin-top: auto; padding-top: 16px; }
.proof-ruler { position: relative; height: 26px; overflow: hidden; border: 1px solid rgba(5,5,5,.12);
  background: repeating-linear-gradient(90deg, rgba(5,5,5,.22) 0 1px, transparent 1px 7px); }
.proof-ruler i { position: absolute; top: 0; bottom: 0; left: 0; width: 34%;
  background: repeating-linear-gradient(90deg, #FF3C00 0 2px, rgba(255,60,0,.55) 2px 7px);
  -webkit-mask: linear-gradient(90deg, transparent, #000 35%, #000 65%, transparent); mask: linear-gradient(90deg, transparent, #000 35%, #000 65%, transparent);
  animation: ruler-glow 9s ease-in-out infinite alternate; }
@keyframes ruler-glow { from { transform: translateX(-10%); } to { transform: translateX(205%); } }
@media (prefers-reduced-motion: reduce) { .proof-ruler i { animation: none; transform: translateX(120%); } }
@media (max-width: 900px) {
  .proof-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .proof-grid li { min-height: 0; padding: 16px 16px 24px; }
  .proof-grid li:nth-child(3) { border-left: 0; }
  .proof-grid li:nth-child(n+3) { border-top: 1px solid rgba(5,5,5,.12); }
  .proof-grid b { margin-top: 32px; } .proof-grid strong { margin-top: 16px; font-size: 18px; } .proof-grid p { font-size: 16px; }
}
.proof-grid { align-items: stretch; } .proof-grid li { height: 100%; }
/* Ruler removed (Erfan). Cell lines now come from 1px grid gaps, so every divider runs the full row height. */
.proof-grid { gap: 1px; background: rgba(5,5,5,.12); border: 1px solid rgba(5,5,5,.12); }
.proof-grid li, .proof-grid li + li, .proof-grid li:nth-child(n+3) { border: 0; background: var(--ground, #ECECE9); height: auto; }
/* Proof cells on design-system tokens only (Erfan: "follow our design system rules always"):
   number = proof-number, title = case-name, description = body (17px min), index = caption, link = link-text. */
.proof-grid li { min-height: 0; padding: 24px 32px 32px; }
.proof-grid b { margin-top: 32px; font: 500 round(nearest, clamp(34px, 3.2vw, 46px), 8px)/1 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.035em; font-variant-numeric: tabular-nums; color: var(--ink); }
.proof-grid strong { margin-top: 24px; font: 600 18px/1.2 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.015em; color: var(--ink); }
.proof-grid p { margin-top: 8px; font: 400 16px/1.55 var(--text); color: #555; }
.pc-n { font: 400 16px var(--text); color: #6B6B6B; }
.proof-grid .proof-link { font: 500 18px var(--text); color: var(--ink); }
.proof-grid .proof-link .arr { width: 16px; height: 16px; }
@media (max-width: 900px) { .proof-grid strong { font-size: 18px; } .proof-grid p { font-size: 16px; } .proof-grid b { margin-top: 32px; } }
.proof-grid .pc-n { font: 400 16px var(--text); color: #6B6B6B; white-space: nowrap; max-width: none; }
.proof-grid b { margin-top: 8px; }
@media (max-width: 600px) { .proof-grid { grid-template-columns: minmax(0, 1fr); } .proof-grid li { padding: 24px 16px 24px; } } .proof-grid .proof-link { white-space: nowrap; }
/* Proof grid on the same 1240px column as the hero video, with the large-panel radius (r-l 20px, as the video card);
   inner cells stay square (bordered grid rule). */
.proof { max-width: none; padding-left: var(--gut); padding-right: var(--gut); }
.proof-grid { max-width: 1240px; margin: 0 auto; border-radius: 12px; overflow: hidden; }
@media (max-width: 900px) { .proof-grid { border-radius: 12px; } }

/* No orphan words, site-wide (12 Oct, Erfan: "make this a rule"). Headings and titles balance their lines;
   paragraphs, labels and captions never leave one word alone on the last line. */
h1, h2, h3, h4, strong, b, .proof-grid strong, .cs-h, .band-title { text-wrap: balance; }
p, li, small, span, figcaption, blockquote, .proof-grid p { text-wrap: pretty; }
/* short labels and the typed line: balance (pretty only reshapes long paragraphs) */
.band-stat p, .cl-plain, .proof-grid p { text-wrap: balance; }
/* logo wall now sits right under the hero; proof grid follows it */
.clients { padding-top: round(nearest, clamp(40px, 5vw, 72px), 8px); }

/* Link hover rule (12 Oct, Erfan: "we already removed" the hover underline): no underline appears on hover anywhere.
   A link's arrow swaps instead (same motion as buttons); menu cells keep their grey fill. Resting underlines stay as designed. */
.np-link:hover, .proof-link:hover, .mm-vid:hover .mv-cap b, .mm-art:hover b, .mm-feature:hover .mf-title, .mm-feature:hover .mf-cap b,
.mm-chip:hover span, .mm-more:hover u, .mm-more:hover span, .mm-link:hover span, .review-badge:hover small,
.cases .cs-visit:hover, .cases .cs-all:hover { text-decoration: none; }
.cases .cs-read:hover { text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
.arr-swap { position: relative; display: inline-block; width: 16px; height: 16px; overflow: hidden; vertical-align: -0.15em; flex: none; }
.arr-swap .arr { width: 16px; height: 16px; }
a:hover .arr-swap .arr:first-child, a:focus-visible .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
a:hover .arr-swap .arr + .arr, a:focus-visible .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
.arr-swap .arr-ne { transform: rotate(-45deg); }
.arr-swap .arr-ne + .arr-ne { transform: translate(-120%, 120%) rotate(-45deg); }
a:hover .arr-swap .arr-ne:first-child { transform: translate(120%, -120%) rotate(-45deg); }
a:hover .arr-swap .arr-ne + .arr-ne { transform: rotate(-45deg); }

/* ==== parts/hero-variants.css ==== */
/* Hero ground variants for review (12 Oct). Grey is the default (data-hero="grey" on <html>); ?hero=white shows the old white hero. Dark was dropped (Erfan 12 Oct: "don't keep dark color in the hero").
   Erfan 12 Oct: full-width background (not a rounded panel), no client-colour glow.
   Research: pure white read unfinished next to Lazarev #E9E9E9 / Musemind grey / Eleken #F6F4F2; approved 11 Oct "dark-first hero like the live site".
   No leaves, glass or glow fields (design-study.md: laurel wreaths and glass 3D read mid-market). */
html[data-hero] .hero-work::before { content: none; }
html[data-hero] .hero { padding-bottom: round(nearest, clamp(48px, 6vw, 88px), 8px); }
html[data-hero] .hw-cap { flex-wrap: wrap; row-gap: 4px; }
html[data-hero] .hw-cap b { white-space: nowrap; }
html[data-hero] .hw-cap span:not(.hw-live):not(.hw-by) { overflow: visible; }
html[data-hero] .proof { padding-top: round(nearest, clamp(32px, 4vw, 56px), 8px); }

/* A: full-width warm light grey from the top of the page; the nav sits on it until you scroll */
html[data-hero=grey] .hero, html[data-hero=grey] .nav:not(.scrolled):not(:has(.mm.open)) { background: #F1F1EF; }

/* Category H1 (12 Oct, Lazarev-style structure, our words): calmer type. Type rule = 600, not 700; less tight tracking. */
.hero h1 { font-weight: 600; font-size: round(nearest, clamp(40px, 4.7vw, 64px), 8px); line-height: 1.02; letter-spacing: -0.032em; max-width: 13em; }
.hero-sub { font-size: round(nearest, clamp(18px, 1.5vw, 24px), 8px); max-width: 30em; color: #2A2A2A; }

/* Centered hero + 16:9 intro video below (12 Oct, Erfan: "title, subtitle, Book a call and Contra in the center, video below in a rectangle").
   The video gets the full column (1240px) so the text inside it reads; 925 Studios / Finsweet / Lazarev centre the copy the same way. */
.hero-stage { display: block; text-align: center; padding-top: round(nearest, clamp(56px, 7vw, 104px), 8px); padding-bottom: 0; }
.hero-copy { margin: 0 auto; max-width: 980px; justify-items: center; padding: 0; }
.hero h1 { max-width: 14em; margin-inline: auto; font-size: round(nearest, clamp(40px, 5.6vw, 80px), 8px); }
.hero-sub { margin-inline: auto; max-width: 34em; }
.hero-cta { justify-content: center; }
.hero-intro { margin: round(nearest, clamp(40px, 5vw, 64px), 8px) auto 0; max-width: 1240px; }
.hi-video { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 12px; background: #ECECE9;
  box-shadow: 0 0 0 1px rgba(5,5,5,.06), 0 50px 100px -60px rgba(5,5,5,.5); }
@media (max-width: 900px) { .hi-video { border-radius: 12px; } .hero-cta .review-badge { justify-content: center; } }
/* Video controls (WCAG 2.2.2 pause + seek): play/pause, restart, slider, time. Icon-only buttons = circles (radius rule). */
.hero-intro { position: relative; }
.hi-video { cursor: pointer; }
.hi-bar { position: absolute; left: 16px; right: 16px; bottom: 16px; display: flex; align-items: center; gap: 8px; padding: 4px 16px 4px 4px;
  border-radius: 12px; background: rgba(255,255,255,.9); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  box-shadow: 0 0 0 1px rgba(5,5,5,.08), 0 10px 24px -14px rgba(5,5,5,.5); }
.hi-toggle, .hi-restart { all: unset; box-sizing: border-box; width: 40px; height: 40px; flex: none; border-radius: 50%; cursor: pointer; display: grid; place-items: center; color: #050505; transition: background .2s; }
.hi-toggle { background: #050505; color: #fff; }
.hi-toggle:hover { background: #D23100; }
.hi-restart:hover { background: #EAEAEC; }
.hi-toggle:focus-visible, .hi-restart:focus-visible, .hi-seek:focus-visible { outline: 2px solid #D23100; outline-offset: 2px; }
.hi-toggle svg, .hi-restart svg { width: 18px; height: 18px; }
.hi-pause { fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }
.hi-play { fill: currentColor; display: none; }
.hi-toggle.is-paused .hi-pause { display: none; }
.hi-toggle.is-paused .hi-play { display: block; }
.hi-restart svg { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hi-seek { --seek: 0%; flex: 1; min-width: 0; height: 24px; margin: 0; background: transparent; cursor: pointer; -webkit-appearance: none; appearance: none; border-radius: 4px; }
.hi-seek::-webkit-slider-runnable-track { height: 4px; border-radius: 4px; background: linear-gradient(90deg, #FF3C00 var(--seek), rgba(5,5,5,.14) var(--seek)); }
.hi-seek::-moz-range-track { height: 4px; border-radius: 4px; background: rgba(5,5,5,.14); }
.hi-seek::-moz-range-progress { height: 4px; border-radius: 4px; background: #FF3C00; }
.hi-seek::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 14px; margin-top: -4px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 2px #FF3C00; }
.hi-seek::-moz-range-thumb { width: 14px; height: 14px; border: 0; border-radius: 50%; background: #fff; box-shadow: 0 0 0 2px #FF3C00; }
.hi-time { flex: none; font: 500 14px var(--text); color: #333; font-variant-numeric: tabular-nums; min-width: 84px; text-align: right; }
@media (max-width: 900px) { .hi-bar { left: 8px; right: 8px; bottom: 8px; gap: 4px; padding: 4px 8px 4px 4px; } .hi-toggle, .hi-restart { width: 36px; height: 36px; } .hi-time { display: none; } }
/* The bar hides while playing (it covered the "can read this site" chip); hover, keyboard focus or pause shows it.
   Phones: no hover, and the bar covered a third of the video, so it sits under the video, always visible. */
@media (hover: hover) and (min-width: 901px) {
  .hi-bar { opacity: 0; transform: translateY(6px); transition: opacity .25s, transform .25s; }
  .hero-intro:hover .hi-bar, .hero-intro:focus-within .hi-bar, .hero-intro.is-paused .hi-bar { opacity: 1; transform: none; }
}
@media (max-width: 900px) {
  .hi-bar { position: static; margin-top: 8px; padding: 0; background: none; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
}

/* Hero ground texture (12 Oct, Erfan: "not pure", like Komanica's ribbed-glass light). Rebuilt in CSS, not their image:
   fine vertical flutes + one diagonal light streak + a soft bloom, faded behind the headline so text stays clean. */
html[data-hero=grey] .hero { position: relative; isolation: isolate; overflow: hidden;
  background:
    radial-gradient(42% 60% at 18% 22%, rgba(255,255,255,.85), rgba(255,255,255,0) 70%),
    radial-gradient(38% 50% at 86% 78%, rgba(255,255,255,.6), rgba(255,255,255,0) 70%),
    #ECECE9; }
html[data-hero=grey] .hero::before { content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: repeating-linear-gradient(90deg, rgba(5,5,5,.045) 0 1px, rgba(255,255,255,0) 1px 9px, rgba(255,255,255,.55) 9px 11px, rgba(255,255,255,0) 11px 22px);
  -webkit-mask: radial-gradient(60% 55% at 50% 34%, transparent 30%, #000 85%); mask: radial-gradient(60% 55% at 50% 34%, transparent 30%, #000 85%); }
html[data-hero=grey] .hero::after { content: ''; position: absolute; inset: -20% -10%; z-index: -1; pointer-events: none;
  background: linear-gradient(112deg, rgba(255,255,255,0) 38%, rgba(255,255,255,.55) 46%, rgba(255,255,255,0) 54%),
              linear-gradient(112deg, rgba(255,255,255,0) 58%, rgba(255,255,255,.3) 62%, rgba(255,255,255,0) 66%);
  animation: hero-sheen 18s ease-in-out infinite alternate; }
@keyframes hero-sheen { from { transform: translateX(-6%); } to { transform: translateX(6%); } }
@media (prefers-reduced-motion: reduce) { html[data-hero=grey] .hero::after { animation: none; } }
html[data-hero=grey] .nav:not(.scrolled):not(:has(.mm.open)) { background: transparent; }
/* the texture runs up behind the see-through nav (no white strip above the hero) */
html[data-hero=grey] .hero { margin-top: -72px; }
html[data-hero=grey] .hero-stage { padding-top: round(nearest, calc(clamp(56px, 7vw, 104px) + 72px), 8px); }
@media (max-width: 900px) { html[data-hero=grey] .hero::before { opacity: .45; } }
/* ribs fade out toward the bottom of the hero, so the textured hero melts into the plain grey page (no hard edge) */
html[data-hero=grey] .hero::before {
  -webkit-mask: radial-gradient(60% 55% at 50% 34%, transparent 30%, #000 85%), linear-gradient(#000 55%, transparent 92%);
  -webkit-mask-composite: source-in;
  mask: radial-gradient(60% 55% at 50% 34%, transparent 30%, #000 85%), linear-gradient(#000 55%, transparent 92%);
  mask-composite: intersect; }
html[data-hero=grey] .hero::after { -webkit-mask: linear-gradient(#000 60%, transparent 95%); mask: linear-gradient(#000 60%, transparent 95%); }
/* second bloom moved up so it fades out inside the hero instead of being cut by the hero's bottom edge */
html[data-hero=grey] .hero { background: radial-gradient(42% 40% at 18% 14%, rgba(255,255,255,.85), rgba(255,255,255,0) 70%), radial-gradient(36% 30% at 86% 34%, rgba(255,255,255,.55), rgba(255,255,255,0) 70%), var(--ground, #ECECE9); }
/* the video card's shadow was clipped by the hero's bottom edge (a faint line): clip sideways only */
html[data-hero=grey] .hero { overflow: visible; overflow-x: clip; }
html[data-hero=grey] .hero::after { inset: 0 -10%; }
/* Hero rhythm (tokens space-hero-sub 28px, space-hero-cta 40px): more air between H1, subline and the buttons */
.hero-copy { gap: 0; }
.hero-sub { margin-top: 32px; }
.hero-cta { margin-top: 40px; }
@media (max-width: 760px) { .hero-sub { margin-top: 16px; } .hero-cta { margin-top: 32px; } }
/* "Now playing" strip under the intro video (DesignMe idea, our tokens): caption 15px label, menu-item name, caption what,
   link-text with arrow; four chapter dashes (8px hit area each, 44px tall buttons for touch). */
.np { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 16px 32px; margin-top: 16px; padding: 0 4px; text-align: left; }
.np-info { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 16px; min-width: 0; }
.np-k { font: 400 16px var(--text); color: #6B6B6B; }
.np-name { font: 600 16px/1.3 var(--text); color: #050505; }
.np-what { font: 400 16px var(--text); color: #555; }
.np-dots { display: flex; gap: 4px; }
.np-dots button { all: unset; box-sizing: border-box; width: 44px; height: 44px; display: grid; align-items: center; cursor: pointer; }
.np-dots i { position: relative; display: block; height: 3px; border-radius: 4px; background: rgba(5,5,5,.16); overflow: hidden; }
.np-dots i::after { content: ''; position: absolute; inset: 0; width: var(--fill, 0%); background: #050505; }
.np-dots button[aria-current="true"] i::after { background: #FF3C00; }
.np-dots button:hover i { background: rgba(5,5,5,.3); }
.np-dots button:focus-visible { outline: 2px solid #D23100; outline-offset: -2px; border-radius: 4px; }
.np-link { display: inline-flex; align-items: center; gap: 8px; font: 500 18px var(--text); color: #050505; text-decoration: none; white-space: nowrap; }
.np-link .arr { width: 16px; height: 16px; }
@media (max-width: 760px) { .np { grid-template-columns: minmax(0, 1fr) auto; } .np-dots { grid-column: 1 / -1; order: 3; } .np-dots button { flex: 1; width: auto; } }
.hi-frame { position: relative; }
.hero-intro:hover .hi-bar { opacity: 0; } .hi-frame:hover .hi-bar, .hi-frame:focus-within .hi-bar, .hero-intro.is-paused .hi-bar { opacity: 1; transform: none; }
@media (max-width: 900px) { .hi-seek { visibility: hidden; } .np { margin-top: 4px; } }
/* Big play button: shown only in click-to-play mode (phones, Save-Data, slow networks, reduced motion) until first play */
.hi-big { all: unset; box-sizing: border-box; position: absolute; left: 50%; top: 50%; width: 76px; height: 76px; margin: -40px 0 0 -40px; border-radius: 50%;
  display: none; place-items: center; cursor: pointer; background: #fff; color: #050505; box-shadow: 0 16px 40px -12px rgba(0,0,0,.6); transition: background .2s, color .2s; }
.hi-big svg { width: 30px; height: 30px; fill: currentColor; margin-left: 4px; }
.hi-big:hover { background: #D23100; color: #fff; }
.hi-big:focus-visible { outline: 2px solid #D23100; outline-offset: 3px; }
.hero-intro.is-click:not(.has-played) .hi-big { display: grid; }
.hero-intro.is-click:not(.has-played) .hi-bar { display: none; }

/* ==== parts/radius.css ==== */
/* ===== Corner radius rule (Erfan 11 Oct: "are we being too roundish? establish a rule") =====
   4px  tags, small chips
   8px  buttons, icon tiles, row highlights, inputs, small inner windows
   12px cards, dropdown panels, hero browser window, review badge
   20px large section panels (case-study panels, numbers band, rewrite section) - never larger
   full circle only for round things: avatars, icon-only arrow buttons, dots. Never on text buttons or badges.
   Nested: inner radius = outer radius - gap. Loaded last so it wins. */
:root { --r-xs: 4px; --r-s: 8px; --r-m: 12px; --r-l: 20px; }

/* 8px: buttons and small parts */
.btn, .btn-sm, .btn-lg, .nav .nav-cta, .menu-btn, .links .nl, .mm-btn { border-radius: var(--r-s); }
.mm-ico, .mm-chip, .mm-col .mm-item, .mm-col .mm-item + .mm-item, .mm-col .mm-label + .mm-item, .mm-thumb { border-radius: var(--r-s); }
.mm-chip .mm-ico { border-radius: 4px; }
.hw-url { border-radius: 4px; }
.fields input { border-radius: var(--r-s); }

/* 12px: cards and panels */
.mm-panel { border-radius: 0 0 var(--r-m) var(--r-m); }
.mm-feature { border-radius: var(--r-m); }
.mf-vis { border-radius: 4px; }                    /* 12 - ~6 gap */
.mf-win { border-radius: 4px 4px 0 0; }
.hw-window { border-radius: var(--r-m); }
.review-badge { border-radius: var(--r-m); }
.cases .cs-quote, .cases .cs-note { border-radius: var(--r-m); }
.cases .cs-screen { border-radius: var(--r-s) var(--r-s) 0 0; }

/* 20px: large section panels, the maximum */
.cases .cs-panel, .cases .cs-case:nth-child(even) .cs-panel { border-radius: var(--r-l); }
.band .band-in, .band-in { border-radius: var(--r-l); }
.cl-in { border-radius: var(--r-l); }
.founder-photo, .review, .research-in, .table-wrap { border-radius: var(--r-l); }

/* 4px: tags and chips (no pills) */
.cases .cs-chips li, .cl-tabs li, .chip { border-radius: var(--r-xs); }

/* Later layers hard-coded some radii: route them through the tokens too */
.hi-video, .proof-grid { border-radius: var(--r-l); }
.hi-bar, .mm-vid, .mm-panel { border-radius: var(--r-m); }
.mm-panel { border-radius: 0 0 var(--r-m) var(--r-m); }
@media (max-width: 900px) { .hi-video, .proof-grid { border-radius: var(--r-m); } }

/* Tight variant for review (12 Oct): one step smaller everywhere, closer to Lazarev (~3px cards). Switch: ?radius=tight */
html[data-radius=tight] { --r-xs: 4px; --r-s: 4px; --r-m: 8px; --r-l: 12px; }

/* ==== parts/compact.css ==== */
/* Compact look (12 Oct, for review with ?radius=tight): tighter corners (radius.css) + tighter buttons + a smaller type scale.
   Headings about 15% smaller, UI text 1-1.5px smaller, buttons 6px shorter. Paragraphs keep the 17px floor (design rule). */
html[data-radius=tight] .links .nl, html[data-radius=tight] .mm-btn { font-size: 16px; padding: 8px 16px; }
html[data-radius=tight] .nav .nav-cta { font-size: 16px; min-height: 40px; height: 40px; padding: 0 16px; }
html[data-radius=tight] .hero h1 { font-size: round(nearest, clamp(40px, 4.6vw, 64px), 8px); letter-spacing: -0.04em; }
html[data-radius=tight] .hero-sub { font-size: round(nearest, clamp(16px, 1.35vw, 18px), 8px); }
html[data-radius=tight] .hero .btn-lg { font-size: 16px; min-height: 46px; height: 46px; padding: 0 16px 0 16px; }
html[data-radius=tight] .btn .arr-swap, html[data-radius=tight] .btn .arr-swap .arr { width: 15px; height: 15px; }
html[data-radius=tight] .rb-top b { font-size: 16px; }
html[data-radius=tight] .review-badge small { font-size: 14px; }
html[data-radius=tight] .hero-cta .rb-logo { width: 38px; height: 38px; }
html[data-radius=tight] .hero-cta .review-badge { min-height: 46px; }
html[data-radius=tight] .clients-label { font-size: 16px; }
html[data-radius=tight] .proof-grid b { font-size: round(nearest, clamp(32px, 2.8vw, 40px), 8px); }
html[data-radius=tight] .proof-grid strong { font-size: 18px; }
html[data-radius=tight] .proof-grid li { padding: 24px 24px 24px; }
html[data-radius=tight] .np-name, html[data-radius=tight] .np-link { font-size: 16px; }
html[data-radius=tight] .np-k, html[data-radius=tight] .np-what { font-size: 14px; }
html[data-radius=tight] .cases h2 { font-size: round(nearest, clamp(32px, 3.6vw, 48px), 8px); }
html[data-radius=tight] .cases h3 { font-size: 18px; }
html[data-radius=tight] .cases .cs-sum { font-size: 16px; }
html[data-radius=tight] .cases .cs-read, html[data-radius=tight] .cases .cs-visit { font-size: 16px; }
html[data-radius=tight] .cl-plain { font-size: round(nearest, clamp(32px, 3.3vw, 48px), 8px); }
html[data-radius=tight] .band-title { font-size: round(nearest, clamp(32px, 2.9vw, 40px), 8px); }
html[data-radius=tight] .mm-item b { font-size: 16px; }
html[data-radius=tight] .mm-bar { padding: 16px 16px; font-size: 16px; }
html[data-radius=tight] .hi-toggle, html[data-radius=tight] .hi-restart { width: 36px; height: 36px; }

/* Erfan's final values (12 Oct): H1 64, subline 18, nav 16, hero button 48 tall, every section H2 48, proof numbers 40 */
html[data-radius=tight] .hero h1 { font-size: round(nearest, clamp(40px, 4.45vw, 64px), 8px); }
html[data-radius=tight] .hero-sub { font-size: round(nearest, clamp(16px, 1.25vw, 18px), 8px); }
html[data-radius=tight] .links .nl, html[data-radius=tight] .mm-btn { font-size: 16px; }
html[data-radius=tight] .hero .btn-lg { min-height: 48px; height: 48px; }
html[data-radius=tight] .hero-cta .review-badge { min-height: 48px; }
html[data-radius=tight] h2, html[data-radius=tight] .cases h2, html[data-radius=tight] .band-title, html[data-radius=tight] .cl-in h2 { font-size: round(nearest, clamp(32px, 3.35vw, 48px), 8px); }

/* 8-point system (12 Oct): body text 16px on a 24px line; headings on 4px line steps */
html { --lh-body: 24px; }
body { font-size: 16px; line-height: 24px; }
.cases .cs-sum, .proof-grid p, .hero-sub { line-height: 1.5; }
.hero h1 { line-height: 1; } .hero-sub { font-size: 18px; line-height: 28px; }

/* 8-point system: fluid (vw) sizes replaced by steps, so every size lands on the grid at every width.
   Gutter 16 phone / 32 tablet / 64 desktop. */
:root { --gut: 16px; }
@media (min-width: 760px) { :root { --gut: 32px; } }
@media (min-width: 1200px) { :root { --gut: 64px; } }
.hero { padding-bottom: 80px; }
.hero-stage { padding-top: 160px; row-gap: 56px; column-gap: 56px; }
.cl-track { gap: 88px; }
.cl-in { padding: 56px; }
.cl-label-plain { margin-top: 32px; }
html[data-radius=tight] .cl-plain { font-size: 48px; }
.cl-jargon { font-size: 24px; }
.band-head { margin-bottom: 88px; }
.band .band-n { font-size: 80px; }
.band .band-stat { padding: 4px 24px 8px; }
.cases { padding-top: 128px; padding-bottom: 128px; gap: 32px; }
.cases .cs-panel { padding: 40px; }
html[data-radius=tight] h2, html[data-radius=tight] .cases h2, html[data-radius=tight] .band-title, html[data-radius=tight] .cl-in h2 { font-size: 48px; }
html[data-radius=tight] .hero h1 { font-size: 64px; }
html[data-radius=tight] .proof-grid b { font-size: 40px; }
@media (max-width: 1100px) {
  html[data-radius=tight] .hero h1 { font-size: 48px; }
  html[data-radius=tight] h2, html[data-radius=tight] .cases h2, html[data-radius=tight] .band-title, html[data-radius=tight] .cl-in h2 { font-size: 40px; }
  .band .band-n { font-size: 64px; } html[data-radius=tight] .cl-plain { font-size: 40px; }
  .cases { padding-top: 96px; padding-bottom: 96px; } .cases .cs-panel { padding: 32px; }
}
@media (max-width: 760px) {
  html[data-radius=tight] .hero h1 { font-size: 40px; }
  html[data-radius=tight] h2, html[data-radius=tight] .cases h2, html[data-radius=tight] .band-title, html[data-radius=tight] .cl-in h2 { font-size: 32px; }
  .band .band-n { font-size: 48px; } html[data-radius=tight] .cl-plain { font-size: 32px; } .cl-jargon { font-size: 18px; }
  .hero-stage { padding-top: 112px; } .hero { padding-bottom: 48px; } .cl-in { padding: 24px; } .cl-track { gap: 48px; }
  .cases { padding-top: 64px; padding-bottom: 64px; gap: 24px; } .cases .cs-panel { padding: 24px; } .band-head { margin-bottom: 48px; }
  html[data-radius=tight] .proof-grid b { font-size: 32px; }
}
.clients .cl-track { gap: 88px; padding-right: 88px; } @media (max-width: 1100px) { .clients .cl-track { gap: 64px; padding-right: 64px; } } @media (max-width: 760px) { .clients .cl-track { gap: 48px; padding-right: 48px; } }
/* Hero subline 20px on a 28px line (Erfan 12 Oct: bigger, tighter leading); 18 on 26 under 760px */
html[data-radius=tight] .hero-sub, .hero-sub { font-size: 20px; line-height: 28px; max-width: 36em; }
@media (max-width: 760px) { html[data-radius=tight] .hero-sub, .hero-sub { font-size: 18px; line-height: 26px; } }
/* Logo wall label 20px / 28px (Erfan 12 Oct: bigger); 18px under 760px */
html[data-radius=tight] .clients-label, .clients-label { font-size: 20px; line-height: 28px; font-weight: 500; }
@media (max-width: 760px) { html[data-radius=tight] .clients-label, .clients-label { font-size: 18px; line-height: 26px; } }
.clients { padding-bottom: 64px; } @media (max-width: 760px) { .clients { padding-bottom: 40px; } }
.cl-sticky { align-items: start; padding-top: 88px; } .clients { padding-bottom: 40px; }

/* One section gap (12 Oct, Erfan "sure"): 128 desktop / 96 tablet / 64 phone, measured content to content.
   Each section adds the gap above itself; nothing below. Inside a section: 32px from label/heading to content. */
:root { --section-gap: 128px; }
@media (max-width: 1100px) { :root { --section-gap: 96px; } }
@media (max-width: 760px) { :root { --section-gap: 64px; } }
html[data-hero] .hero { padding-bottom: 0; }
html body .clients { padding-top: var(--section-gap); padding-bottom: 0; }
html body .clients-label { margin-bottom: 32px; }
html body .cl-sticky { height: auto; padding-top: var(--section-gap); padding-bottom: 0; }
html body .band { padding-top: var(--section-gap); padding-bottom: 0; }
html body .cases { padding-top: var(--section-gap); padding-bottom: var(--section-gap); }
html body section.cases.cs-wrap { padding-top: var(--section-gap); padding-bottom: var(--section-gap); }
html body .cases .cs-head { align-items: start; }

/* Plain H1 (13 Oct): the question stands on its own line from 900px up; phones wrap naturally */
@media (min-width: 900px) { .hero h1 .h1-l { display: block; } }

/* H1 weight variant for review (13 Oct, Erfan: Supafast's headline reads easier): ?h1=bold -> 700 weight, tighter leading and tracking, 72px */
html[data-h1=bold] .hero h1 { font-weight: 700; font-size: 72px; line-height: .98; letter-spacing: -0.042em; }
@media (max-width: 1100px) { html[data-h1=bold] .hero h1 { font-size: 56px; } }
@media (max-width: 760px) { html[data-h1=bold] .hero h1 { font-size: 44px; } }

/* ==== parts/work2.css ==== */
/* Work cards rebuilt on DesignMe's product card (13 Oct, Erfan: "copy their product card"), in Pentaclay tokens.
   One white card per case: hairline border, text column left (32px padding), product panel right, edge to edge.
   No alternating sides, no browser bar. Chips: stage/funding first (green) only when the fact is public. */
html body .cases .cs-list { display: grid; gap: 24px; padding-top: 32px; }
html body .cases .cs-head { border-bottom: 0; padding-bottom: 0; }
html body .cases .cs-case { grid-template-columns: minmax(0, 46fr) minmax(0, 54fr); gap: 0; align-items: stretch; padding: 0;
  background: #fff; border: 0; border-radius: 12px; overflow: hidden; }
/* Alternate sides like DesignMe (Erfan 13 Oct): even cards put the product on the left */
html body .cases .cs-case:nth-child(even) { grid-template-columns: minmax(0, 54fr) minmax(0, 46fr); }
html body .cases .cs-case:nth-child(even) .cs-panel { order: -1; }
html body .cases .cs-copy { padding: 32px; gap: 16px; align-content: start; }
html body .cases .cs-id { align-items: center; }
html body .cases .cs-name { gap: 8px 12px; }
html body .cases .cs-name h3 { font: 600 16px/24px var(--text); letter-spacing: 0; }
html body .cases .cs-chips { gap: 8px; }
html body .cases .cs-chips li { font: 400 14px/18px var(--text); color: #4A4A4A; background: #F2F2F2; border: 0; border-radius: 4px; padding: 4px 8px; }
html body .cases .cs-chips li.cs-stage { color: #2D6E27; background: #ECF7EB; }
html body .cases .cs-year { padding-top: 0; font: 400 14px/18px var(--text); color: #6B6B6B; }
html body .cases .cs-headline { margin: 8px 0 0; font: 600 24px/32px var(--head); letter-spacing: -0.02em; text-wrap: balance; max-width: 22em; }
html body .cases .cs-sum { font-size: 16px; line-height: 24px; color: #555; max-width: 36em; }
html body .cases .cs-links { gap: 8px 24px; margin-top: 8px; }
html body .cases .cs-read { font: 600 14px/21px var(--text); }
html body .cases .cs-visit { font: 500 14px/21px var(--text); }
html body .cases .cs-quote { margin: 16px 0 0; background: #FAFAFA; border-radius: 8px; padding: 20px; gap: 16px; }
html body .cases .cs-quote blockquote { font: 500 14px/21px var(--text); letter-spacing: 0; }
html body .cases .cs-quote figcaption { gap: 12px; }
html body .cases .cs-quote figcaption b { font: 600 16px/24px var(--text); }
html body .cases .cs-quote figcaption small { font: 400 14px/21px var(--text); color: #6B6B6B; }
html body .cases .cs-avatar { width: 44px; height: 44px; font-size: 14px; }
/* Product panel: the site itself, no frame, on the client's dark ground; hover still scrolls the page */
html body .cases .cs-panel { --ph: auto; --pad: 0; height: auto; min-height: 490px; padding: 0; border-radius: 0; background: #0B0B0B; }
html body .cases .cs-panel::before { display: none; }
html body .cases .cs-screen { position: absolute; inset: 0; height: auto; border-radius: 0; box-shadow: none; transform: none; background: #0B0B0B; }
html body .cases .cs-view { --vh: 100%; height: 100%; }
html body .cases .cs-still .cs-view img { width: 100%; height: 100%; object-fit: cover; object-position: left top; }
@media (max-width: 1100px) { html body .cases .cs-copy { padding: 24px; } html body .cases .cs-headline { font-size: 22px; line-height: 28px; } }
@media (max-width: 900px) {
  html body .cases .cs-case, html body .cases .cs-case:nth-child(even) { grid-template-columns: minmax(0, 1fr); }
  html body .cases .cs-panel, html body .cases .cs-case:nth-child(even) .cs-panel { order: -1; min-height: 0; height: clamp(240px, 60vw, 420px); border-radius: 0; }
  html body .cases .cs-id { flex-direction: row; flex-wrap: wrap; justify-content: space-between; }
  html body .cases .cs-year { order: 0; }
}
/* Section-gap rule: each section adds the gap above itself only (the next section brings its own) */
html body .cases, html body section.cases.cs-wrap { padding-bottom: 0; }
/* Card videos (13 Oct): the real site in motion, no overlay text; fills the panel like the stills did */
html body .cases .cs-vid { height: 100%; }
html body .cases .cs-video { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; background: #0B0B0B; }
html body .cases .cs-case:hover .cs-panel .cs-vid, html body .cases .cs-case:hover .cs-screen { transform: none; }
/* Copy sits in the vertical middle, so a card without a quote has no empty block under its links */
html body .cases .cs-copy { align-content: center; }
/* Section head like DesignMe: centered small label + title (Inter, not mono; no-mono rule) */
html body .cases .cs-head-c { display: grid; justify-items: center; text-align: center; gap: 8px; padding-bottom: 0; margin-bottom: 0; }
html body .cases .cs-label { margin: 0; font: 500 12px/16px var(--text); letter-spacing: .08em; text-transform: uppercase; color: #6B6B6B; }
html body .cases .cs-head-c h2 { margin: 0; }
html body .cases .cs-list { padding-top: 40px; }
/* Quote avatar = the client's logo in a white ring (Erfan 13 Oct: original images or logo, not initials) */
html body .cases .cs-avatar-logo { background: #fff; border: 1px solid #E6E6E6; overflow: hidden; }
html body .cases .cs-avatar-logo img { width: 28px; height: 28px; object-fit: contain; }
/* Space between cards: 64px (Erfan 13 Oct: 56 or 64) */
html body .cases .cs-list { gap: 64px; }
@media (max-width: 760px) { html body .cases .cs-list { gap: 40px; } }
html body .cases .cs-head-c { justify-content: center; width: 100%; }
/* Breathing space (Erfan 13 Oct, DesignMe): the site sits as a framed window inside the panel, on the client's tint; corners 8px */
html body .cases .cs-case { border-radius: 8px; }
html body .cases .cs-panel { background: color-mix(in srgb, var(--tint, #222) 22%, #0B0B0B); }
html body .cases .cs-screen { inset: 40px; height: auto; border-radius: 8px; overflow: hidden; background: #0B0B0B; box-shadow: 0 24px 48px -24px rgba(0,0,0,.6); }
html body .cases .cs-video { transform: scale(1.001); }
@media (max-width: 1100px) { html body .cases .cs-screen { inset: 24px; } }
@media (max-width: 760px) { html body .cases .cs-screen { inset: 16px; border-radius: 4px; } }
/* Measurements matched to DesignMe (Erfan 13 Oct): title 20/28, summary 16/24, one link only (site URL lives in the case study) */
html body .cases .cs-headline { font-size: 20px; line-height: 28px; letter-spacing: -0.01em; max-width: 26em; }
html body .cases .cs-copy { gap: 16px; }
html body .cases .cs-links { margin-top: 16px; }
html body .cases .cs-quote { margin-top: 24px; }
/* Copy starts at the top again (Erfan 13 Oct); cards without a review carry a fact strip in the quote card's place */
html body .cases .cs-copy { align-content: start; }
html body .cases .cs-facts { list-style: none; margin: 24px 0 0; padding: 20px; background: #FAFAFA; border-radius: 8px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px 24px; }
html body .cases .cs-facts li { display: grid; gap: 4px; min-width: 0; }
html body .cases .cs-facts b { font: 600 24px/28px var(--head); letter-spacing: -0.02em; color: var(--ink); white-space: nowrap; }
html body .cases .cs-facts small { font: 400 14px/20px var(--text); color: #6B6B6B; text-wrap: pretty; }
html body .cases .cs-facts .cs-facts-src { grid-column: 1 / -1; font: 400 12px/16px var(--text); color: #8A8A8A; padding-top: 4px; border-top: 1px solid #ECECEC; }
@media (max-width: 760px) { html body .cases .cs-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); } html body .cases .cs-facts b { font-size: 20px; line-height: 24px; } }
/* Sentence title (Erfan 13 Oct, Supafast shape in our words): deliverables grey, the promise black; centred, max 3 lines */
html body .cases .cs-head-c h2 { max-width: 24ch; text-wrap: balance; }
html body .cases .cs-dim { color: #6B6B6B; }
/* Two figures per strip, no source line (Erfan 13 Oct) */
html body .cases .cs-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px 32px; }
/* Title to first card: 64px desktop (next step on the 16/32/64/128 scale), 48 tablet, 40 phone (Erfan 13 Oct: more space) */
html body .cases .cs-list { padding-top: 64px; }
@media (max-width: 1100px) { html body .cases .cs-list { padding-top: 48px; } }
@media (max-width: 760px) { html body .cases .cs-list { padding-top: 40px; } }
/* Fact strip and quote card sit at the bottom of the text column (Erfan 13 Oct) */
html body .cases .cs-copy { display: flex; flex-direction: column; gap: 16px; }
html body .cases .cs-facts, html body .cases .cs-quote { margin-top: auto; padding-top: 20px; }
html body .cases .cs-links + .cs-facts, html body .cases .cs-links + .cs-quote { min-height: 0; }
html body .cases .cs-copy > .cs-links { margin-bottom: 8px; }
/* 50/50 split; text column gets more room on its inner (right) edge (Erfan 13 Oct) */
html body .cases .cs-case, html body .cases .cs-case:nth-child(even) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
html body .cases .cs-copy { padding: 32px 56px 32px 32px; }
html body .cases .cs-case:nth-child(even) .cs-copy { padding: 32px 32px 32px 56px; }
@media (max-width: 1100px) { html body .cases .cs-copy, html body .cases .cs-case:nth-child(even) .cs-copy { padding: 24px 32px 24px 24px; } }
@media (max-width: 900px) { html body .cases .cs-case, html body .cases .cs-case:nth-child(even) { grid-template-columns: minmax(0, 1fr); } html body .cases .cs-copy, html body .cases .cs-case:nth-child(even) .cs-copy { padding: 24px; } }
/* Inner site window: square corners (Erfan 13 Oct) */
html body .cases .cs-screen { border-radius: 0; }
@media (max-width: 760px) { html body .cases .cs-screen { border-radius: 0; } }
/* Panel has no corners of its own; the card clips the outer ones (Erfan 13 Oct: no rounding on the panel's inner edge) */
html body .cases .cs-panel, html body .cases .cs-case:nth-child(even) .cs-panel { border-radius: 0; }
/* "See all work" as a centred subtle button under the cards (Erfan 13 Oct) */
html body .cases .cs-foot { justify-content: center; padding-top: 40px; }
html body .cases .cs-all.btn { display: inline-flex; align-items: center; gap: 8px; min-height: 48px; height: 48px; padding: 0 24px; border-radius: 4px; border: 0;
  background: #fff; color: var(--ink); font: 500 16px/24px var(--text); white-space: nowrap; transition: background .4s cubic-bezier(.25,1,.5,1); }
html body .cases .cs-all.btn:hover, html body .cases .cs-all.btn:focus-visible { background: #EAEAEC; color: var(--ink); }
html body .cases .cs-all.btn span { transition: none; }
html body .cases .cs-all.btn:hover span { transform: none; }
/* Equal padding on all sides of the text column, 40px, matching the 40px inset of the site window (Erfan 13 Oct) */
html body .cases .cs-copy, html body .cases .cs-case:nth-child(even) .cs-copy { padding: 40px; }
@media (max-width: 1100px) { html body .cases .cs-copy, html body .cases .cs-case:nth-child(even) .cs-copy { padding: 24px; } }
/* Card title: 20/24 line height, full column width, no balancing (Erfan 13 Oct: less line height, use the width) */
html body .cases .cs-headline { line-height: 24px; max-width: none; text-wrap: pretty; }
html body .cases .cs-sum { max-width: none; }
/* Composed card video (13 Oct prototype, Machine Football): the scene carries its own breathing space, so it fills the panel */
html body .cases .cs-composed .cs-screen { inset: 0; box-shadow: none; }

/* ==== parts/round1.css ==== */
/* Round 1 below the questions (13 Oct): What we build, Who we work with, How a project runs.
   House rules: page ground #ECECE9, white cards 8px, section H2 48/600, body 16/24, 20/28 intros, hairlines #D6D6D4,
   no eyebrow labels, arrows swap on hover, section gap adds above only. */
html body .offers2, html body .sectors, html body .process2 { padding: var(--section-gap) var(--gut) 0; }
.of-in, .se-in, .pr-in { max-width: 1240px; margin: 0 auto; }
.of-head, .se-head, .pr-head { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 16px 64px; align-items: end; margin-bottom: 40px; }
.offers2 h2, .sectors h2, .process2 h2 { margin: 0; max-width: 18ch; font: 600 48px/1.08 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.032em; color: var(--ink); text-wrap: balance; }
.of-head p, .se-head p, .pr-head p { margin: 0; max-width: 30em; font-size: 20px; line-height: 28px; color: #1A1A1A; }

/* Offers: 2x2 white cards, situation first */
.of-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
.of-card { background: #fff; border-radius: 8px; padding: 40px; display: flex; flex-direction: column; gap: 16px; }
.of-when { margin: 0; font: 600 24px/32px var(--head); letter-spacing: -0.02em; color: var(--ink); text-wrap: balance; max-width: 22em; }
.of-name { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 16px 0; border-top: 1px solid #ECECE9; border-bottom: 1px solid #ECECE9; margin-top: auto; }
.of-name b { font: 600 18px/24px var(--text); color: var(--ink); }
.of-name span { font: 500 16px/24px var(--text); color: var(--accent-deep); white-space: nowrap; }
.of-what { margin: 0; font-size: 16px; line-height: 24px; color: #555; }
.of-ticks { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.of-ticks li { position: relative; padding-left: 26px; font-size: 16px; line-height: 24px; color: #1A1A1A; }
.of-ticks li::before { content: ''; position: absolute; left: 2px; top: 7px; width: 12px; height: 7px; border-left: 2px solid var(--ink); border-bottom: 2px solid var(--ink); transform: rotate(-45deg); }
.of-card .of-when { margin-bottom: 8px; }
.of-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 32px; margin-top: 32px; }
.offers2 .btn-lg, .process2 .btn-lg { min-height: 48px; height: 48px; padding: 0 24px; font-size: 16px; gap: 8px; font-weight: 500; }
.of-more { display: inline-flex; align-items: center; gap: 8px; font: 500 16px/24px var(--text); color: var(--ink); border-bottom: 1.5px solid var(--ink); padding-bottom: 2px; }

/* Sectors: hairline rows, name | what buyers check | arrow */
.se-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid #D6D6D4; }
.se-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.5fr) 24px; gap: 32px; align-items: center; padding: 32px 0; border-bottom: 1px solid #D6D6D4; color: var(--ink); transition: background .3s; }
.se-list li:first-child .se-row { }
.se-name { font: 600 24px/32px var(--head); letter-spacing: -0.02em; text-wrap: balance; }
.se-what { font-size: 16px; line-height: 24px; color: #555; max-width: 40em; }
.se-row .arr-swap { justify-self: end; }
.se-row:hover { background: rgba(255,255,255,.55); }
.se-note { margin: 24px 0 0; font-size: 14px; line-height: 20px; color: #6B6B6B; }

/* Process: six columns on one rail, then three promises */
.pr-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 24px; counter-reset: st; }
.pr-steps li { position: relative; padding-top: 32px; counter-increment: st; }
.pr-steps li::before { content: ''; position: absolute; left: 0; right: -24px; top: 6px; height: 1px; background: #D6D6D4; }
.pr-steps li:last-child::before { right: 0; }
.pr-steps li::after { content: ''; position: absolute; left: 0; top: 0; width: 13px; height: 13px; border-radius: 50%; background: var(--ink); box-shadow: 0 0 0 4px #ECECE9; }
.pr-steps li:first-child::after, .pr-steps li:nth-child(2)::after { background: var(--accent-deep); }
.pr-when { display: block; font: 500 14px/20px var(--text); color: #6B6B6B; margin-bottom: 8px; }
.pr-steps b { display: block; font: 600 18px/24px var(--text); color: var(--ink); margin-bottom: 8px; text-wrap: balance; }
.pr-steps p { margin: 0; font-size: 14px; line-height: 20px; color: #555; }
.pr-promises { list-style: none; margin: 48px 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
.pr-promises li { background: #fff; border-radius: 8px; padding: 32px; display: grid; gap: 8px; }
.pr-promises b { font: 600 20px/28px var(--head); letter-spacing: -0.015em; color: var(--ink); }
.pr-promises span { font-size: 16px; line-height: 24px; color: #555; }

@media (max-width: 1100px) {
  .offers2 h2, .sectors h2, .process2 h2 { font-size: 40px; }
  .pr-steps { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 40px; }
  .pr-steps li:nth-child(3)::before { right: 0; }
}
@media (max-width: 760px) {
  .of-head, .se-head, .pr-head { grid-template-columns: minmax(0, 1fr); gap: 16px; margin-bottom: 32px; }
  .offers2 h2, .sectors h2, .process2 h2 { font-size: 32px; max-width: none; }
  .of-head p, .se-head p, .pr-head p { font-size: 18px; line-height: 26px; }
  .of-grid { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .of-card { padding: 24px; }
  .of-when { font-size: 20px; line-height: 28px; }
  .se-row { grid-template-columns: minmax(0, 1fr) 24px; gap: 8px 16px; padding: 24px 0; }
  .se-what { grid-column: 1; grid-row: 2; }
  .se-row .arr-swap { grid-column: 2; grid-row: 1; }
  .se-name { font-size: 20px; line-height: 28px; }
  .pr-steps { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .pr-steps li { padding: 0 0 32px 32px; }
  .pr-steps li::before { left: 6px; right: auto; top: 13px; bottom: 0; width: 1px; height: auto; }
  .pr-steps li:last-child::before { display: none; }
  .pr-steps li:nth-child(3)::before { right: auto; }
  .pr-promises { grid-template-columns: minmax(0, 1fr); gap: 16px; margin-top: 16px; }
  .pr-promises li { padding: 24px; }
}

/* ==== parts/round2.css ==== */
/* Rounds 2-3 (13 Oct): enterprise checks + Website Audit form, FAQ, founder, closing band, footer.
   Same house rules as round1.css: ground #ECECE9, white 8px cards, H2 48/600, body 16/24, intros 20/28, no eyebrow labels. */
html body .checks2, html body .faq2, html body .founder2, html body .close2 { padding: var(--section-gap) var(--gut) 0; }
.ck-in, .fq-in, .fd-in, .cl2-in, .ft-in { max-width: 1240px; margin: 0 auto; }
.checks2 h2, .faq2 h2, .founder2 h2 { margin: 0; font: 600 48px/1.08 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.032em; color: var(--ink); text-wrap: balance; }

/* checks: 3x2 grid on hairlines, then the dark audit form panel */
.ck-head { margin-bottom: 40px; } .checks2 h2 { max-width: 20ch; }
.ck-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid #D6D6D4; }
.ck-grid li { padding: 32px 32px 32px 0; border-bottom: 1px solid #D6D6D4; display: grid; gap: 8px; align-content: start; }
.ck-grid li:nth-child(3n+2), .ck-grid li:nth-child(3n) { padding-left: 32px; border-left: 1px solid #D6D6D4; }
.ck-n { font: 500 14px/20px var(--text); color: var(--accent-deep); font-variant-numeric: tabular-nums; }
.ck-grid b { font: 600 20px/28px var(--head); letter-spacing: -0.015em; color: var(--ink); text-wrap: balance; }
.ck-grid p { margin: 0; font-size: 16px; line-height: 24px; color: #555; }
.ck-form { margin-top: 48px; background: var(--ink); color: #fff; border-radius: 8px; padding: 56px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px 64px; align-items: start; }
.ck-form h3 { margin: 0 0 16px; font: 600 32px/40px var(--head); letter-spacing: -0.025em; text-wrap: balance; }
.ck-form-copy p { margin: 0; font-size: 18px; line-height: 28px; color: #C8C8C8; max-width: 32em; }
.ck-fields { display: grid; gap: 16px; }
.ck-fields label { display: grid; gap: 8px; }
.ck-fields label span { font: 500 14px/20px var(--text); color: #C8C8C8; }
.ck-fields input { height: 52px; border-radius: 4px; border: 1px solid #3A3A3A; background: #141414; color: #fff; padding: 0 16px; font: 400 16px var(--text); outline: none; transition: border-color .2s; }
.ck-fields input::placeholder { color: #8A8A8A; }
.ck-fields input:focus-visible { border-color: #fff; box-shadow: 0 0 0 2px var(--accent-deep); }
.ck-fields input[aria-invalid=true] { border-color: #FF6B4A; }
.checks2 .btn-lg, .founder2 .btn-lg, .close2 .btn-lg { min-height: 48px; height: 48px; padding: 0 24px; font-size: 16px; gap: 8px; font-weight: 500; justify-self: start; }
.ck-form .btn-dark { background: #fff; color: var(--ink); }
.ck-form .btn-dark:hover, .ck-form .btn-dark:focus-visible { background: var(--accent-deep); color: #fff; }
.ck-note { margin: 0; font-size: 14px; line-height: 20px; color: #A3A3A3; }
.ck-note.ok { color: #9BE59B; } .ck-note.err { color: #FF8A70; }

/* FAQ: heading left, accordion right */
.fq-in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.6fr); gap: 32px 64px; align-items: start; }
.fq-head { position: sticky; top: 120px; } .faq2 h2 { max-width: 12ch; }
.fq-head p { margin: 16px 0 0; font-size: 18px; line-height: 28px; color: #1A1A1A; max-width: 22em; }
.fq-list { border-top: 1px solid #D6D6D4; }
.fq-list details { border-bottom: 1px solid #D6D6D4; }
.fq-list summary { list-style: none; cursor: pointer; display: flex; justify-content: space-between; gap: 24px; align-items: center; padding: 24px 0; font: 600 20px/28px var(--head); letter-spacing: -0.015em; color: var(--ink); }
.fq-list summary::-webkit-details-marker { display: none; }
.fq-list summary::after { content: ''; flex: none; width: 12px; height: 12px; border-right: 1.75px solid #6B6B6B; border-bottom: 1.75px solid #6B6B6B; transform: rotate(45deg) translateY(-3px); transition: transform .28s ease; }
.fq-list details[open] summary::after { transform: rotate(225deg) translateY(-3px); }
.fq-list summary:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 4px; border-radius: 4px; }
.fq-list details p { margin: 0; padding: 0 48px 24px 0; font-size: 16px; line-height: 24px; color: #555; max-width: 40em; }

/* founder: photo card left, letter right */
.fd-in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); gap: 32px 64px; align-items: center; background: #fff; border-radius: 8px; padding: 56px; }
.fd-photo { margin: 0; border-radius: 8px; overflow: hidden; aspect-ratio: 1; background: #D23100; }
.fd-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.founder2 h2 { max-width: 16ch; margin-bottom: 24px; }
.fd-copy p { margin: 0 0 16px; font-size: 18px; line-height: 28px; color: #1A1A1A; max-width: 34em; }
.fd-cta { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 24px; margin-top: 32px; }
.fd-cta span { font-size: 14px; line-height: 20px; color: #6B6B6B; }
.fd-audit { display: inline-flex; align-items: center; gap: 8px; margin-top: 24px; font: 500 16px/24px var(--text); color: var(--ink); border-bottom: 1.5px solid var(--ink); padding-bottom: 2px; }

/* closing band: black panel inside the column */
.cl2-in { background: var(--ink); color: #fff; border-radius: 8px; padding: 96px 56px; text-align: center; display: grid; justify-items: center; gap: 24px; }
.close2 h2 { margin: 0; max-width: 20ch; font: 600 56px/1.05 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.035em; text-wrap: balance; }
.close2 p { margin: 0; max-width: 34em; font-size: 20px; line-height: 28px; color: #C8C8C8; }
.close2 .btn-light { background: #fff; color: var(--ink); margin-top: 8px; justify-self: center; }
.close2 .btn-light:hover, .close2 .btn-light:focus-visible { background: var(--accent-deep); color: #fff; }

/* footer */
html body .foot2 { padding: var(--section-gap) var(--gut) 40px; }
.ft-in { background: var(--ink); color: #fff; border-radius: 8px; padding: 64px 56px 32px; }
.ft-top { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 3.2fr); gap: 48px 64px; padding-bottom: 48px; border-bottom: 1px solid #2A2A2A; }
.ft-brand img { height: 30px; width: auto; display: block; }
.ft-brand p { margin: 16px 0; font-size: 16px; line-height: 24px; color: #C8C8C8; max-width: 18em; }
.ft-call { font: 500 16px/24px var(--text); color: #fff; border-bottom: 1.5px solid #fff; padding-bottom: 2px; }
.ft-cols { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 32px 24px; }
.ft-cols h3 { margin: 0 0 16px; font: 600 14px/20px var(--text); color: #fff; }
.ft-cols a { display: block; font-size: 14px; line-height: 20px; color: #A3A3A3; padding: 4px 0; transition: color .2s; }
.ft-cols a:hover, .ft-cols a:focus-visible { color: #fff; }
.ft-bottom { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 32px; padding-top: 24px; }
.ft-bottom p { margin: 0; font-size: 14px; line-height: 20px; color: #8A8A8A; }
.ft-bottom b { color: #C8C8C8; font-weight: 500; }
.ft-bottom a { color: #A3A3A3; } .ft-bottom a:hover { color: #fff; }

@media (max-width: 1100px) {
  .checks2 h2, .faq2 h2, .founder2 h2 { font-size: 40px; } .close2 h2 { font-size: 44px; }
  .ck-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ck-grid li, .ck-grid li:nth-child(3n+2), .ck-grid li:nth-child(3n) { padding: 32px 32px 32px 0; border-left: 0; }
  .ck-grid li:nth-child(even) { padding-left: 32px; border-left: 1px solid #D6D6D4; }
  .ft-top { grid-template-columns: minmax(0, 1fr); } .ft-cols { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .checks2 h2, .faq2 h2, .founder2 h2 { font-size: 32px; max-width: none; } .close2 h2 { font-size: 36px; }
  .ck-grid { grid-template-columns: minmax(0, 1fr); }
  .ck-grid li, .ck-grid li:nth-child(even) { padding: 24px 0; border-left: 0; }
  .ck-form { grid-template-columns: minmax(0, 1fr); padding: 32px 24px; margin-top: 32px; }
  .ck-form h3 { font-size: 24px; line-height: 32px; }
  .fq-in { grid-template-columns: minmax(0, 1fr); } .fq-head { position: static; }
  .fq-list summary { font-size: 18px; line-height: 26px; padding: 20px 0; } .fq-list details p { padding-right: 0; }
  .fd-in { grid-template-columns: minmax(0, 1fr); padding: 24px; gap: 24px; }
  .fd-copy p { font-size: 16px; line-height: 24px; }
  .cl2-in { padding: 56px 24px; }
  .ft-in { padding: 40px 24px 24px; } .ft-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* Footer columns: brand on its own row, six link columns get the full width (13 Oct: links were wrapping) */
.ft-top { grid-template-columns: minmax(0, 1fr); gap: 48px; }
.ft-brand { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px 48px; }
.ft-brand p { margin: 0; flex: 1 1 320px; max-width: none; }
.ft-cols { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 32px; }
/* Closing band and footer were the same black block back to back: the band goes signal red-deep, the footer stays ink */
.cl2-in { background: var(--accent-deep); }
.close2 p { color: #FFE3D9; }
.close2 .btn-light:hover, .close2 .btn-light:focus-visible { background: var(--ink); color: #fff; }
@media (max-width: 1100px) { .ft-cols { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 760px) { .ft-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } }

/* FAQ v2 (14 Oct, Erfan: "do" to the FAQ review): questions weight 600 → 500 like every title; the open question gets the sheet-grey
   background so you can see which one is open; "Ask it on the call" links to the booking page. */
.fq-list summary { font-weight: 500; font-family: var(--text); }
.fq-list details { transition: background-color .25s ease; }
.fq-list details[open] { background: var(--sheet, #F6F6F6); border-radius: 8px; border-bottom-color: transparent; }
.fq-list details[open] summary, .fq-list details[open] p { padding-left: 20px; padding-right: 20px; }
.fq-list details[open] summary { padding-right: 20px; }
.fq-call { color: var(--ink); text-decoration: underline; text-decoration-color: #FF3C00; text-decoration-thickness: 2px; text-underline-offset: 3px; }
.fq-call:hover { color: #D23100; }
@media (prefers-reduced-motion: reduce) { .fq-list details { transition: none; } }

/* FAQ v3 (Erfan: "the FAQ open state and FAQ design are not beautiful enough"). Every question is its own rounded card on the sheet
   grey with an 8px gap, so open answers never merge into one grey block; the open card turns white with a hairline and a soft shadow;
   a round + button (fixed position, no jump) turns into an orange × when open; details[name] keeps one answer open at a time. */
.fq-list { display: grid; gap: 8px; border-top: 0; }
.fq-list details, .fq-list details[open] { border: 0; border-radius: 8px; background: var(--sheet, #F6F6F6); padding: 0 24px; transition: background-color .25s ease, box-shadow .25s ease; }
.fq-list details:hover { background: #F0F0F0; }
.fq-list details[open] { background: #fff; box-shadow: inset 0 0 0 1px #E6E6E6, 0 16px 32px -24px rgba(0,0,0,.25); }
.fq-list summary, .fq-list details[open] summary { padding: 20px 0; padding-left: 0; padding-right: 0; font: 500 18px/26px var(--text); letter-spacing: -0.01em; color: var(--ink); }
.fq-list summary::after { content: ''; flex: none; width: 32px; height: 32px; border: 0; border-radius: 50%; transform: none;
  background: linear-gradient(var(--ink), var(--ink)) center / 12px 1.75px no-repeat, linear-gradient(var(--ink), var(--ink)) center / 1.75px 12px no-repeat, #fff;
  box-shadow: inset 0 0 0 1px #E0E0E0; transition: transform .3s cubic-bezier(.2,.8,.2,1), background-color .25s ease; }
.fq-list details[open] summary::after { transform: rotate(45deg);
  background: linear-gradient(#fff, #fff) center / 12px 1.75px no-repeat, linear-gradient(#fff, #fff) center / 1.75px 12px no-repeat, #FF3C00; box-shadow: none; }
.fq-list details p, .fq-list details[open] p { padding: 0 56px 24px 0; padding-left: 0; font-size: 16px; line-height: 24px; color: #555; }
@media (prefers-reduced-motion: reduce) { .fq-list details, .fq-list summary::after { transition: none; } }
@media (max-width: 760px) { .fq-list details, .fq-list details[open] { padding: 0 16px; } .fq-list summary { font-size: 16px; line-height: 24px; padding: 16px 0; } .fq-list details p { padding-right: 0; } }
/* while a card slides shut it already looks closed: grey card, + button (faq.js adds .closing for the length of the animation) */
.fq-list details.closing { background: var(--sheet, #F6F6F6); box-shadow: none; }
.fq-list details.closing summary::after { transform: none; background: linear-gradient(var(--ink), var(--ink)) center / 12px 1.75px no-repeat, linear-gradient(var(--ink), var(--ink)) center / 1.75px 12px no-repeat, #fff; box-shadow: inset 0 0 0 1px #E0E0E0; }

/* FAQ ask card (14 Oct, Erfan: "adapt this part from DesignMe, show the email: contact@pentaclay.com"). Under the FAQ title: a sheet-grey
   card with Erfan's photo, "Can't find your answer?", Book a call, and the email. Replaces the one-line "Ask it on the call". */
.fq-ask { margin-top: 32px; max-width: 360px; padding: 24px; border-radius: 8px; background: var(--sheet, #F6F6F6); }
.fq-ask img { display: block; width: 56px; height: 56px; border-radius: 8px; object-fit: cover; }
.fq-ask h3 { margin: 20px 0 0; font: 500 22px/28px var(--text); letter-spacing: -0.02em; color: var(--ink); }
.fq-ask > p { margin: 8px 0 0; font: 400 16px/24px var(--text); color: #555; max-width: none; }
.fq-ask .btn { margin-top: 20px; }
.fq-ask .fq-mail { margin-top: 16px; font-size: 14px; line-height: 20px; color: #6B6B6B; }
.fq-mail a { color: var(--ink); text-decoration: underline; text-decoration-color: #FF3C00; text-decoration-thickness: 1.5px; text-underline-offset: 3px; }
.fq-mail a:hover { color: #D23100; }
@media (max-width: 760px) { .fq-ask { max-width: none; margin-top: 24px; } }

/* ==== parts/round3-live.css ==== */
/* The 5 rules of round3.css that still match the page (16 Oct 2026 cleanup; round3.css itself is archived in
   site/_archive/proto-four-2026-10-16/parts/). Copied unchanged and linked in round3.css's old position so the cascade is the same. */
.se-go { display: inline-flex; align-items: center; gap: 8px; font: 500 15px/20px var(--text); color: var(--accent-deep); }

/* How a project runs: dark band */
html body .process2.pr-dark { margin-top: var(--section-gap); padding: 128px var(--gut); background: #0B0B0B; color: #fff; }
@media (max-width: 1100px) { html body .process2.pr-dark { padding: 96px var(--gut); } }
@media (max-width: 760px) { html body .process2.pr-dark { padding: 64px var(--gut); } }
.pr-dark h2 { color: #fff; }

/* ==== parts/services.css ==== */
/* Ways to work with us (Lazarev-style calm cards, our palette and type). */
html body .svc { padding: var(--section-gap) var(--gut) 0; }
.svc-in { max-width: 1240px; margin: 0 auto; }
.svc-head { text-align: center; display: grid; justify-items: center; gap: 16px; margin-bottom: 48px; }
.svc h2 { margin: 0; max-width: 22ch; font: 600 48px/1.08 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.032em; color: var(--ink); text-wrap: balance; }
.svc-head p { margin: 0; max-width: 34em; font-size: 20px; line-height: 28px; color: #1A1A1A; }
.svc-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.svc-card { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 48px; background: #fff; border-radius: 8px; padding: 24px; }
.svc-txt { display: flex; flex-direction: column; padding: 16px 0 16px 16px; min-height: 380px; }
.svc h3 { margin: 0; font: 600 48px/1.02 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.035em; color: var(--ink); }
.svc-who { margin: 20px 0 0; max-width: 26em; font: 500 20px/28px var(--text); color: #1A1A1A; text-wrap: pretty; }
.svc-cta { display: flex; align-items: center; gap: 16px 20px; flex-wrap: wrap; margin-top: 24px; }
.svc .btn-lg { min-height: 48px; height: 48px; padding: 0 24px; font-size: 16px; gap: 8px; font-weight: 500; }
.svc-cta span { font: 500 16px/24px var(--text); color: var(--accent-deep); }
.svc-cols { margin-top: auto; padding-top: 40px; display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }
.svc-cols small { display: block; margin-bottom: 8px; font: 500 14px/20px var(--text); color: #6B6B6B; }
.svc-cols p { margin: 0; font-size: 17px; line-height: 25px; color: var(--ink); }
/* art: brand gradient + quiet line drawing */
.svc-art { border-radius: 6px; overflow: hidden; display: grid; place-items: center; background: linear-gradient(180deg, #160805 0%, #6E1A04 42%, #C9542C 74%, #EED3C5 100%); }
.svc-art svg { width: 100%; height: 100%; display: block; }
.svc-art .d { fill: none; stroke: rgba(255,255,255,.55); stroke-width: 1.3; stroke-dasharray: 4 5; }
.svc-art .s { fill: none; stroke: rgba(255,255,255,.9); stroke-width: 1.5; }
.svc-art .fill { fill: rgba(255,255,255,.08); }
.svc-art .f { fill: rgba(255,255,255,.55); } .svc-art .f.o { fill: rgba(255,255,255,.3); }
.svc-art .pill { fill: none; stroke: #fff; stroke-width: 1.5; }
.svc-art text { fill: #fff; font: 500 12px var(--text); }
.svc-art .big { font-size: 14px; } .svc-art .chip rect { fill: rgba(22,8,5,.6); stroke: rgba(255,255,255,.6); stroke-width: 1; }
.svc-art .from text { fill: rgba(255,255,255,.75); }
@media (max-width: 1100px) { .svc h2 { font-size: 40px; } .svc h3 { font-size: 40px; } }
@media (max-width: 860px) {
  .svc-card { grid-template-columns: minmax(0, 1fr); gap: 24px; padding: 16px; }
  .svc-txt { min-height: 0; padding: 8px; } .svc-art { order: 2; aspect-ratio: 5 / 3; }
  .svc-cols { grid-template-columns: 1fr; gap: 16px; padding-top: 32px; }
}
@media (max-width: 760px) { .svc h2 { font-size: 32px; } .svc-head p { font-size: 18px; line-height: 26px; } .svc h3 { font-size: 34px; } .svc-who { font-size: 18px; line-height: 26px; } }
.svc-art text { text-transform: none; letter-spacing: 0; font-variant: normal; }
.svc-art .pill.solid { fill: #fff; } .svc-art text.dk { fill: #160805; font-weight: 600; }
/* 13 Oct: two-tone "Our services." title (prices taken off the cards); same measure as the case-studies title so it sits on two lines */
html body .svc h2.tt { max-width: 26ch; }
/* 13 Oct (Erfan: "the title fonts here are too big, tone it down"): card names were 48/600, the same size as the section title.
   Now 32/40 weight 500 (type scale step below 40), so the section title leads and the card name reads as a label. */
html body .svc h3 { font-size: 32px; line-height: 40px; font-weight: 500; letter-spacing: -0.025em; }
html body .svc-who { margin-top: 16px; }
@media (max-width: 760px) { html body .svc h3 { font-size: 28px; line-height: 32px; } }
/* 13 Oct (Erfan: "the gap between the services should be the same as the project cards"): 12px → 64px, 40px on phones (= .cs-list in work2.css) */
html body .svc-list { gap: 64px; }
@media (max-width: 760px) { html body .svc-list { gap: 40px; } }
/* 13 Oct illustrations v2 (Erfan: "things overlap, spacing not good"): redrawn on a 600x400 grid (same 3:2 as the panel, so no letterboxing),
   48px safe margin, nothing overlaps, every window has the same bar + dots, content stays in the dark upper part of the gradient */
.svc-art .ln { fill: none; stroke: rgba(255,255,255,.35); stroke-width: 1; }

/* v3 (13 Oct, Erfan: "sure" to the section review): cards ~20% shorter. Text column min-height 380 → 300 and a tighter gap above
   "What changes", so the empty band between the button and the two columns closes; the drawing scales down with the row. */
.svc-txt { min-height: 300px; }
.svc-cols { padding-top: 32px; }
@media (max-width: 760px) { .svc-txt { min-height: 0; } }
/* the 600×400 drawing was setting the row height (its 3:2 shape at half the card width = 381px). Pin it inside the panel so the text
   column sets the height and the drawing scales to fit; phones keep the panel's 5:3 aspect-ratio. */
.svc-art { position: relative; }
.svc-art svg { position: absolute; inset: 0; }
/* all four cards one height (the tallest text column, 343px) so the stack reads as a set */
@media (min-width: 761px) { .svc-txt { min-height: 343px; } }

/* v4 (13 Oct, Erfan: "I'm losing focus, I can't read Launch site, Redesign"): one clear order per card. Title 28 → 36px so the service
   name leads; the who-line steps back to grey, normal weight; the button goes from solid black to the light "See all work" button
   (btn-subtle), so four black blocks no longer pull the eye. What changes / What you get stay ink: they are the content. */
html body .svc-txt h3 { font-size: 36px; line-height: 40px; letter-spacing: -0.03em; }
html body .svc-txt .svc-who { color: #6B6B6B; font-weight: 400; }
@media (max-width: 760px) { html body .svc-txt h3 { font-size: 30px; line-height: 34px; } }
/* buttons = the top menu's "Book a call" size exactly (compact.css: 40px tall, 16px text, 16px side padding); btn-sm alone gave 42/14/24 */
html body .svc-cta .btn { min-height: 40px; height: 40px; padding: 0 16px; font-size: 16px; }
/* What changes / What you get text 17 → 16px (Erfan: "make this font 16px"), line-height 24 */
html body .svc-cols p { font-size: 16px; line-height: 24px; }
/* card titles 36 → 32px (Erfan: "make this 32px"); phones keep 30px */
@media (min-width: 761px) { html body .svc-txt h3 { font-size: 32px; line-height: 36px; } }

/* ==== parts/services-list.css ==== */
/* CONCEPT (17 Oct 2026): "Four ways to work with us" as a numbered list, idea from DesignMe's services block, built in our system.
   Used only by services-list.html. Full-width rows on #E6E6E6 hairlines: number (24 grey), name (32/600), tag, who-line, square + tile
   (the FAQ tile). One row open at a time (parts/services-list.js). Open row: text left, the existing line drawing right in a 4px panel.
   Radius: drawing panel 4px (card); tile, tags, focus ring 2px. No shadows. Spacing on the 8-pt grid. */

/* concept-page chrome: a quiet way back to the full page, clear of the fixed nav */
html body main.sl-page { padding-bottom: var(--section-gap, 128px); }
html body .sl-back { max-width: 1200px; margin: 0 auto; padding: 96px var(--gut, 64px) 0; box-sizing: content-box;
  display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: baseline; font: 400 14px/20px var(--text); color: #555; }
html body .sl-back a { color: var(--ink); font-weight: 500; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
@media (max-width: 760px) { html body .sl-back { padding: 88px 16px 0; } }

/* list */
html body .sl-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid #E6E6E6; }
html body .sl-item { border-bottom: 1px solid #E6E6E6; }
html body .svc h3.sl-h { margin: 0; font: inherit; letter-spacing: normal; color: inherit; }

/* row = one button across the full width */
html body .sl-btn { appearance: none; -webkit-appearance: none; display: grid; width: 100%; margin: 0; padding: 24px 0; border: 0; border-radius: 0;
  background: none; color: var(--ink); font: inherit; text-align: left; cursor: pointer;
  grid-template-columns: 64px minmax(0, 1fr) minmax(0, 360px) 32px; column-gap: 24px; align-items: center; }
html body .sl-btn:focus { outline: none; }
html body .sl-btn:focus-visible { outline: 2px solid var(--accent-deep, #D23100); outline-offset: 4px; border-radius: 2px !important; }
html body .sl-num { font: 500 24px/32px var(--text); color: #858585; font-variant-numeric: tabular-nums; letter-spacing: -0.01em; }
html body .sl-name { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; font: 600 32px/40px var(--text); letter-spacing: -0.025em; color: var(--ink); }
html body .sl-name .sl-tag { margin: 0; flex: none; letter-spacing: .04em; }
html body .sl-who-h { font: 400 16px/24px var(--text); color: #555; text-wrap: pretty; transition: opacity .25s ease; }
html body .sl-item.is-open .sl-who-h { opacity: 0; }            /* the open row shows the who-line in its text column instead */

/* the FAQ's square + tile (dm-details.css): white, 1px hairline, ink plus; open = the same square in orange with a white minus */
html body .sl-ico { width: 32px; height: 32px; border-radius: 2px !important; justify-self: end;
  background: linear-gradient(var(--ink), var(--ink)) center / 12px 1.75px no-repeat, linear-gradient(var(--ink), var(--ink)) center / 1.75px 12px no-repeat, #FFFFFF;
  box-shadow: inset 0 0 0 1px #E6E6E6; transition: background-color .25s ease; }
html body .sl-btn:hover .sl-ico { background-color: #F6F6F6; }
html body .sl-item.is-open .sl-ico { background: linear-gradient(#FFFFFF, #FFFFFF) center / 12px 1.75px no-repeat, #FF3C00; box-shadow: none; }

/* open panel: lines up under the name; text left, drawing right */
html body .sl-panel { overflow: hidden; }
/* closed panels carry hidden="until-found": Chrome keeps a 0-height box that find-in-page can open; other browsers treat it as hidden */
html body .sl-panel-in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 560px); gap: 48px; padding: 8px 0 32px 88px; }
html body .sl-txt { display: flex; flex-direction: column; gap: 24px; min-width: 0; }
html body .sl .sl-who { margin: 0; max-width: 26em; font: 400 20px/28px var(--text); color: #555; text-wrap: pretty; }
html body .sl-block small { display: block; margin-bottom: 8px; font: 500 14px/20px var(--text); color: #555; }
html body .sl-block p { margin: 0; max-width: 32em; font: 400 16px/24px var(--text); color: var(--ink); }
html body .sl-get { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
html body .sl-get li { position: relative; padding-left: 24px; font: 400 16px/24px var(--text); color: var(--ink); }
html body .sl-get li::before { content: ''; position: absolute; left: 4px; top: 9px; width: 6px; height: 6px; border-radius: 50%; background: var(--ink); }
html body .sl-link { align-self: flex-start; margin-top: auto; display: inline-flex; align-items: center; gap: 8px;
  font: 500 16px/24px var(--text); color: var(--ink); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
html body .sl-link .arr-swap, html body .sl-link .arr { width: 16px; height: 16px; }
html body .sl-link .arr { fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
html body .sl-link:hover .arr-swap .arr:first-child, html body .sl-link:focus-visible .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
html body .sl-link:hover .arr-swap .arr + .arr, html body .sl-link:focus-visible .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
html body .sl-link:focus-visible { outline: 2px solid var(--accent-deep, #D23100); outline-offset: 4px; border-radius: 2px; }

/* drawing: the existing svc-art (gradient + line drawing), 3:2 like its 600×400 viewBox, 4px panel */
html:not(#r5):not(#r4) body .sl .sl-art { border-radius: 4px !important; aspect-ratio: 3 / 2; width: 100%; align-self: start; }

/* tablet */
@media (max-width: 1100px) {
  html body .sl-btn { grid-template-columns: 56px minmax(0, 1fr) minmax(0, 280px) 32px; }
  html body .sl-panel-in { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px; padding-left: 80px; }
}
@media (max-width: 860px) {
  html body .sl-btn { grid-template-columns: 56px minmax(0, 1fr) 32px; }
  html body .sl-who-h { display: none; }
  html body .sl-panel-in { grid-template-columns: minmax(0, 1fr); gap: 32px; }
}
/* phones: number + name + tile; text, then the drawing under it */
@media (max-width: 760px) {
  html body .sl-btn { grid-template-columns: 32px minmax(0, 1fr) 32px; column-gap: 16px; padding: 24px 0; align-items: start; }
  html body .sl-num { font-size: 16px; line-height: 32px; }
  html body .sl-name { font-size: 24px; line-height: 32px; gap: 8px 12px; letter-spacing: -0.02em; }
  html body .sl-panel-in { gap: 24px; padding: 0 0 24px 48px; }
  html body .sl .sl-who { font-size: 18px; line-height: 26px; }
}
@media (max-width: 480px) { html body .sl-panel-in { padding-left: 0; } }

@media (prefers-reduced-motion: reduce) {
  html body .sl-ico, html body .sl-who-h { transition: none; }
}
/* numbers on phones: 16px needs reading contrast → #555 (24px desktop #858585 passes as large text) */
@media (max-width: 760px) { html body .sl .sl-num, html body #services .sl-num { color: #555 !important; } }
/* open row content, back to the earlier card design (Erfan, 17 Oct: "previously this content design was better"):
   lead who-line, then What changes | What you get side by side as full sentences, then the Explore link */
html body #services .sl-who { font-size: 20px !important; line-height: 28px !important; color: #444 !important; margin: 0 0 32px !important; }
html body #services .sl-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; padding-top: 24px; border-top: 1px solid #E6E6E6; }
html body #services .sl-cols small { display: block; margin-bottom: 8px; font: 500 12px/16px var(--text); letter-spacing: .08em; text-transform: uppercase; color: #555; }
html body #services .sl-cols p { margin: 0; font: 400 16px/24px var(--text); color: #050505; }
html body #services .sl-link { margin-top: 32px; }
@media (max-width: 760px) { html body #services .sl-cols { grid-template-columns: 1fr; gap: 20px; } html body #services .sl-who { font-size: 18px !important; } }
/* open row: text column vertically centred against the drawing (Erfan, 17 Oct) */
@media (min-width: 761px) {
  html body #services .sl-panel-in { align-items: center !important; }
  html body #services .sl-txt { align-self: center !important; justify-content: center; }
}

/* ==== parts/titles.css ==== */
/* Two-tone titles (13 Oct, Erfan: "implement this on the first three sections' titles, the grey tone and the black tone").
   Same treatment as "What we do.": grey lead + black statement, weight 500. Grey is #767676 on the grey ground (3.6:1 at this size),
   #8A8A8A on white panels. */
html body .tt { font-weight: 500 !important; letter-spacing: -0.03em; }
html body .tt .tt-g { color: #767676; }
html body .cases .cs-head-c h2.tt { max-width: 26ch; }
html body .qs h2.tt { max-width: 18ch; }

/* 13 Oct review (Erfan: "yes" to the top-to-bottom fixes): every section title is two-tone at weight 500. Full-width sections centre their
   head like Selected work / What we do / Four ways; side-by-side heads (FAQ, founder card) stay left. Intro lines 16/24 like Four ways. */
html body .se-head, html body .pr-head, html body .ck-head { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center; text-align: center; gap: 16px; }
html body .se-head h2, html body .pr-head h2, html body .ck-head h2 { max-width: 26ch; text-wrap: balance; }
html body .se-head p, html body .pr-head p, html body .ck-head p { max-width: 36em; font-size: 16px; line-height: 24px; text-wrap: pretty; }
html body .pr-dark .tt .tt-g { color: #8A8A8A; }
html body .close2 .tt .tt-g { color: rgba(255,255,255,.72); }
/* the six buyer questions now sit in the Checks head as tags (Six questions section merged in) */

/* ==== parts/compare.css ==== */
/* Compare v4 (13 Oct): Design Monks' "Alternative?" layout in Pentaclay colours. Full-bleed black band (#0B0B0B, 128/96/64) with a faint
   warm glow; options as rows (64px icon tiles #1C1C1C, white Lucide lines); five criteria; plain marks: white check, #FF5A36 cross.
   Pentaclay row = lifted card: dark-to-red gradient, 1px #FF3C00 edge at 55%, 16px corners. Reason bubbles on hover / focus / tap. */
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
html body .cmp { margin-top: var(--section-gap); padding: 128px var(--gut); background: radial-gradient(60% 40% at 50% 0%, rgba(255,60,0,.10), rgba(255,60,0,0) 70%), #0B0B0B; color: #fff; }
.cmp-in { max-width: 1240px; margin: 0 auto; }
.cmp-head { display: grid; justify-items: center; text-align: center; }
.cmp-head h2 { margin: 0; max-width: 24ch; font: 500 48px/1.08 var(--head); letter-spacing: -0.03em; color: #fff; text-wrap: balance; }
.cmp-head h2 .tt-g { color: #8A8A8A; }
.cmp-table { display: grid; }
.cmp-row { position: relative; display: grid; grid-template-columns: minmax(0, 3fr) repeat(5, minmax(0, 1fr)); align-items: center; column-gap: 16px; padding: 28px 40px; }
.cmp-row:not(.cmp-cols):not(.cmp-us) + .cmp-row::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 1px; background: #262626; }
.cmp-cols { padding-top: 0; padding-bottom: 24px; }
.cmp-cols span { font: 500 18px/24px var(--text); color: #fff; text-align: center; }
.cmp-cols .cmp-opt { text-align: left; }
.cmp-us { margin-bottom: 16px; border-radius: 16px; background: linear-gradient(100deg, #170A06 0%, #2A0E05 55%, #4A1404 100%); box-shadow: inset 0 0 0 1px rgba(255,60,0,.55), 0 24px 48px -24px rgba(255,60,0,.35); }
.cmp-opt { display: flex; align-items: center; gap: 24px; min-width: 0; }
.cmp-ico { flex: none; width: 64px; height: 64px; border-radius: 12px; background: #1C1C1C; display: grid; place-items: center; overflow: hidden; }
.cmp-ico svg { width: 28px; height: 28px; fill: none; stroke: #fff; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.cmp-logo { box-shadow: 0 0 0 1px rgba(255,255,255,.2); }
.cmp-logo img { width: 100%; height: 100%; display: block; }
.cmp-name b { display: block; font: 500 22px/28px var(--text); color: #fff; }
.cmp-name small { display: block; margin-top: 8px; max-width: 30em; font: 400 15px/22px var(--text); color: #BDBDBD; text-wrap: pretty; }
.cmp-c { position: relative; display: grid; justify-items: center; }
.cmp-m { display: inline-grid; place-items: center; width: 40px; height: 40px; padding: 0; border: 0; border-radius: 50%; background: none; cursor: pointer; transition: background-color .15s ease; }
.cmp-m:hover, .cmp-m:focus-visible { background: rgba(255,255,255,.08); }
.cmp-m:focus-visible { outline: 2px solid #FF5A36; outline-offset: 2px; }
.cmp-m svg { width: 30px; height: 30px; fill: none; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.cmp-y svg { stroke: #fff; } .cmp-n svg { stroke: #FF5A36; }
.cmp-why { position: absolute; bottom: calc(100% + 8px); left: 50%; z-index: 5; width: max-content; max-width: 220px; padding: 8px 12px; border-radius: 8px; background: #fff; color: #050505; font: 500 13px/18px var(--text); text-align: center; text-wrap: pretty; box-shadow: 0 12px 24px -12px rgba(0,0,0,.6); opacity: 0; transform: translate(-50%, 4px); pointer-events: none; transition: opacity .15s ease, transform .15s ease; }
.cmp-why::after { content: ''; position: absolute; top: 100%; left: 50%; margin-left: -5px; border: 5px solid transparent; border-top-color: #fff; }
.cmp-c:hover .cmp-why, .cmp-c:focus-within .cmp-why, .cmp-c.open .cmp-why { opacity: 1; transform: translate(-50%, 0); }
@media (prefers-reduced-motion: reduce) { .cmp-m, .cmp-why { transition: none; } }
@media (max-width: 1100px) {
  html body .cmp { padding: 96px var(--gut); }
  .cmp-head h2 { font-size: 40px; }
  .cmp-row { grid-template-columns: minmax(0, 2.2fr) repeat(5, minmax(0, 1fr)); padding: 20px 16px; column-gap: 8px; }
  .cmp-cols span { font-size: 15px; }
  .cmp-ico { width: 48px; height: 48px; } .cmp-ico svg { width: 22px; height: 22px; }
  .cmp-name small { display: none; }
}
@media (max-width: 760px) {
  html body .cmp { padding: 64px var(--gut); }
  .cmp-head h2 { font-size: 32px; }
  .cmp-cols { display: none; }
  .cmp-table { gap: 12px; }
  .cmp-row { grid-template-columns: repeat(5, minmax(0, 1fr)); row-gap: 16px; padding: 20px 12px; border-radius: 12px; box-shadow: inset 0 0 0 1px #262626; }
  .cmp-us { margin-bottom: 0; }
  .cmp-row:not(.cmp-cols):not(.cmp-us) + .cmp-row::before { display: none; }
  .cmp-opt { grid-column: 1 / -1; align-items: flex-start; gap: 16px; }
  .cmp-name small { display: block; }
  .cmp-c { gap: 4px; }
  .cmp-c::after { content: attr(data-col); font: 500 11px/14px var(--text); color: #BDBDBD; }
  .cmp-m { width: 32px; height: 32px; } .cmp-m svg { width: 24px; height: 24px; }
  .cmp-why { max-width: 170px; }
  .cmp-c:nth-child(2) .cmp-why { left: 0; transform: translate(0, 4px); } .cmp-c:nth-child(2):is(:hover, :focus-within, .open) .cmp-why { transform: translate(0, 0); } .cmp-c:nth-child(2) .cmp-why::after { left: 16px; }
  .cmp-c:nth-child(6) .cmp-why { left: auto; right: 0; transform: translate(0, 4px); } .cmp-c:nth-child(6):is(:hover, :focus-within, .open) .cmp-why { transform: translate(0, 0); } .cmp-c:nth-child(6) .cmp-why::after { left: auto; right: 16px; }
}
.cmp-cols { align-items: end; } .cmp-cols span { text-wrap: balance; }
/* last column: bubble opens to the left so it never pokes past the page edge (caused 5px sideways scroll at 900px) */
@media (min-width: 761px) {
  .cmp-row .cmp-c:last-child .cmp-why { left: auto; right: 0; transform: translate(0, 4px); }
  .cmp-row .cmp-c:last-child:is(:hover, :focus-within, .open) .cmp-why { transform: translate(0, 0); }
  .cmp-row .cmp-c:last-child .cmp-why::after { left: auto; right: 15px; }
}

/* v5 (14 Oct, Erfan: "do" to the compare review). Honest table: columns are what Pentaclay actually does differently (words, custom
   design, AI-readable, fixed price + date, help after launch; Speed and Affordability dropped, build-it-yourself wins those); other
   options keep their real wins; three marks instead of tick / red cross: white ✓ yes, grey half-circle sometimes, dim dash no; one-line
   descriptions; our row = thin orange outline, no red gradient glow ("Recommended plan" look). "Senior team" claim removed. */
.cmp-cols span { font: 500 16px/22px var(--text); }
.cmp-s svg { stroke: #BDBDBD; } .cmp-s svg .fill { fill: #BDBDBD; stroke: none; }
.cmp-n svg { stroke: #5A5A5A; stroke-width: 2.25; }
.cmp-us { background: rgba(255,255,255,.03); box-shadow: inset 0 0 0 1px #FF3C00; }
.cmp-name small { max-width: 26em; }
.cmp-row { padding-top: 24px; padding-bottom: 24px; }
.cmp-key { display: flex; justify-content: center; gap: 24px; margin: 32px 0 0; font: 400 14px/20px var(--text); color: #BDBDBD; }
.cmp-key span { display: inline-flex; align-items: center; gap: 8px; }
.cmp-key i { display: inline-grid; width: 20px; height: 20px; }
.cmp-key svg { width: 20px; height: 20px; fill: none; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.cmp-key .cmp-y svg { stroke: #fff; }
@media (max-width: 1100px) { .cmp-cols span { font-size: 14px; line-height: 18px; } }
@media (max-width: 760px) { .cmp-key { flex-wrap: wrap; gap: 12px 20px; margin-top: 24px; } }
@media (max-width: 760px) { .cmp-row { align-items: start; } .cmp-c { align-content: start; } .cmp-c::after { text-align: center; } }

/* v6 light (14 Oct, Erfan: "go" to the light-grey band like DesignMe / What we do). The page keeps one strong dark band (How a project
   runs) and ends on red + black. Sheet grey #F6F6F6, ink text, marks ink / #8A8A8A / #BDBDBD, our row a white card with the 1px
   orange edge, icon tiles white with a hairline, reason bubbles inverted to ink. */
html body .cmp { background: var(--sheet, #F6F6F6); color: var(--ink); }
.cmp-head h2 { color: var(--ink); } .cmp-head h2 .tt-g { color: #767676; }
.cmp-cols span { color: var(--ink); }
.cmp-row:not(.cmp-cols):not(.cmp-us) + .cmp-row::before { background: #E3E3E3; }
.cmp-ico { background: #fff; box-shadow: inset 0 0 0 1px #E6E6E6; }
.cmp-ico svg { stroke: var(--ink); }
.cmp-logo { box-shadow: none; }
.cmp-name b { color: var(--ink); } .cmp-name small { color: #555; }
.cmp-us { background: #fff; box-shadow: inset 0 0 0 1px #FF3C00, 0 16px 32px -24px rgba(0,0,0,.18); }
.cmp-y svg { stroke: var(--ink); }
.cmp-s svg { stroke: #8A8A8A; } .cmp-s svg .fill { fill: #8A8A8A; }
.cmp-n svg { stroke: #BDBDBD; }
.cmp-m:hover, .cmp-m:focus-visible { background: rgba(0,0,0,.06); }
.cmp-m:focus-visible { outline-color: #D23100; }
.cmp-why { background: var(--ink); color: #fff; } .cmp-why::after { border-top-color: var(--ink); }
.cmp-key { color: #555; } .cmp-key .cmp-y svg { stroke: var(--ink); }
@media (max-width: 760px) {
  .cmp-row { box-shadow: inset 0 0 0 1px #E3E3E3; background: #fff; }
  .cmp-us { box-shadow: inset 0 0 0 1px #FF3C00; }
  .cmp-c::after { color: #6B6B6B; }
}

/* v7 (Erfan: "Option" → "Platform", headings two words max, no Yes / Sometimes / No key, improve the design). Headings on one line
   (Copywriting · Custom design · AI search · Fixed price · Ongoing support); one-line descriptions; 48px icon tiles and 20px rows so
   the table is tighter; every row one height so the marks sit on one grid; marks 28px. The reason bubble on hover / tap explains each
   mark, so the key is not needed. */
.cmp-row { grid-template-columns: minmax(0, 3.2fr) repeat(5, minmax(0, 1fr)); padding-top: 20px; padding-bottom: 20px; min-height: 88px; }
.cmp-cols { min-height: 0; padding-bottom: 16px; }
.cmp-cols span { white-space: nowrap; font: 500 16px/24px var(--text); }
.cmp-cols .cmp-opt { color: #6B6B6B; }
.cmp-ico { width: 48px; height: 48px; border-radius: 8px; } .cmp-ico svg { width: 22px; height: 22px; }
.cmp-opt { gap: 20px; }
.cmp-name b { font-size: 20px; line-height: 26px; }
.cmp-name small { margin-top: 4px; font-size: 15px; line-height: 22px; white-space: nowrap; }
.cmp-us { margin-bottom: 12px; }
.cmp-m svg { width: 28px; height: 28px; }
@media (max-width: 1100px) { .cmp-cols span { font-size: 14px; } .cmp-row { grid-template-columns: minmax(0, 2.4fr) repeat(5, minmax(0, 1fr)); } }
@media (max-width: 760px) { .cmp-name small { white-space: normal; } .cmp-row { min-height: 0; } .cmp-ico { width: 44px; height: 44px; } }
@media (max-width: 760px) { .cmp-c { min-width: 0; } }
@media (max-width: 760px) { .cmp-row { grid-template-columns: repeat(5, minmax(0, 1fr)); } }

/* v8 playful (Erfan: "make this section a little bit playful"). (1) a tilted orange "That's us" sticker after our name; (2) our five
   ticks in brand orange, drawn in one after another when the row scrolls into view (once; reduced motion: shown at once); (3) the
   other options' icon tiles in the soft category tints (peach / sage / blue / sand), the same family as the question bubbles.
   Also: header row padding-top 20 → 0 so title → table is the 64px section rule, not 84. */
.cmp-cols { padding-top: 0; }
.cmp-name b { display: flex; align-items: center; gap: 12px; }
.cmp-tag { display: inline-block; padding: 3px 10px; border-radius: 999px; background: #FF3C00; color: #fff; font: 600 12px/16px var(--text); letter-spacing: .01em; transform: rotate(-4deg); box-shadow: 0 4px 10px -4px rgba(255,60,0,.5); white-space: nowrap; }
.cmp-us .cmp-y svg { stroke: #FF3C00; stroke-width: 2.25; }
.cmp-us.draw .cmp-y svg path { stroke-dasharray: 24; stroke-dashoffset: 24; transition: stroke-dashoffset .45s cubic-bezier(.2,.8,.2,1); }
.cmp-us.draw.drawn .cmp-y svg path { stroke-dashoffset: 0; }
.cmp-us.drawn .cmp-c:nth-child(3) svg path { transition-delay: .12s; } .cmp-us.drawn .cmp-c:nth-child(4) svg path { transition-delay: .24s; }
.cmp-us.drawn .cmp-c:nth-child(5) svg path { transition-delay: .36s; } .cmp-us.drawn .cmp-c:nth-child(6) svg path { transition-delay: .48s; }
.cmp-hire .cmp-ico { background: #FCE6DC; box-shadow: none; } .cmp-hire .cmp-ico svg { stroke: #7A2A0E; }
.cmp-agency .cmp-ico { background: #E4EEDF; box-shadow: none; } .cmp-agency .cmp-ico svg { stroke: #2E5631; }
.cmp-free .cmp-ico { background: #E0E8F4; box-shadow: none; } .cmp-free .cmp-ico svg { stroke: #23426B; }
.cmp-ai .cmp-ico { background: #EFEAE3; box-shadow: none; } .cmp-ai .cmp-ico svg { stroke: #5C4A33; }
@media (max-width: 760px) { .cmp-tag { font-size: 11px; padding: 2px 8px; } }
/* other rows' ticks in grey (Erfan: "make these check marks grey too"), so only our row's orange ticks stand out. #6B6B6B stays a step
   darker than "sometimes" (#8A8A8A) and "no" (#BDBDBD), so the three marks still read apart. */
.cmp-row:not(.cmp-us) .cmp-y svg { stroke: #6B6B6B; }

/* ==== parts/sectors-cards.css ==== */
/* Who we work with v3 (13 Oct): Lazarev's blog-card row in our style. Four equal white cards (8px, 1px #E6E6E6 hairline), 24px padding:
   meta line 12px uppercase grey with a hairline divider (like Lazarev's "CATEGORY | DATE"), title 20/28 weight 500, then a tinted picture
   panel (the three category tints + a warm sand) with the UI drawing set in from the top-left and bleeding off the bottom-right.
   Hover: the card lifts its drawing a little. Phones: one card per row. */
.se-cards { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.se-card { display: flex; flex-direction: column; height: 100%; padding: 24px; border-radius: 8px; background: #fff; box-shadow: inset 0 0 0 1px #E6E6E6; color: var(--ink); text-decoration: none; transition: box-shadow .2s ease; }
.se-card:hover { box-shadow: inset 0 0 0 1px #CFCFCC; }
.se-card:focus-visible { outline: 2px solid #D23100; outline-offset: 2px; }
.se-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 12px; font: 500 12px/16px var(--text); letter-spacing: .04em; text-transform: uppercase; color: #555; }
.se-meta b { font-weight: 500; color: #2A2A2A; }
.se-meta i { width: 1px; height: 16px; background: #CFCFCC; }
.se-meta span { color: #8A8A8A; }
.se-title { display: block; margin: 16px 0 32px; font: 500 20px/28px var(--text); letter-spacing: -0.01em; color: var(--ink); text-wrap: balance; }
.se-pic { position: relative; margin-top: auto; height: 240px; border-radius: 6px; overflow: hidden; }
.se-peach { background: #FCE6DC; } .se-sage { background: #E4EEDF; } .se-blue { background: #E0E8F4; } .se-sand { background: #EFEAE3; }
html body .se-pic .se-ill { position: absolute; left: 24px; top: 28px; width: 300px; height: auto; min-height: 236px; border-radius: 8px 8px 0 0; transform: none; transition: transform .4s cubic-bezier(.2,.8,.2,1); }
html body .se-card:hover .se-pic .se-ill { transform: translateY(-6px); }
.se-note { margin: 24px 0 0; font: 400 14px/20px var(--text); color: #6B6B6B; text-align: center; }
@media (prefers-reduced-motion: reduce) { html body .se-pic .se-ill, .se-card { transition: none; } }
@media (max-width: 1100px) { .se-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 760px) {
  .se-cards { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .se-card { padding: 20px; }
  .se-title { margin: 12px 0 24px; font-size: 18px; line-height: 26px; }
  .se-pic { height: 220px; }
}
/* v3.1: meta kept to one line (short labels, no wrap); drawing sits flush to the panel's right edge instead of overflowing it, so no word is
   cut; it still runs off the bottom like Lazarev's cropped images */
.se-meta { flex-wrap: nowrap; white-space: nowrap; }
html body .se-pic .se-ill { left: 24px; right: 0; width: auto; border-radius: 8px 0 0 0; }
html body .se-pic .se-ill { font-size: 12px; line-height: 16px; padding: 16px; }
html body .se-pic .ia-step, html body .se-pic .id-price, html body .se-pic .id-price em, html body .se-pic .it-row span { white-space: nowrap; }
html body .se-pic .id-price { gap: 8px; }
/* docs drawing is the widest: narrower side nav inside the card so "per 1M tokens" stays inside the panel */
html body .se-pic .ill-docs { grid-template-columns: 36px minmax(0, 1fr); gap: 12px; }
html body .se-pic .id-price { padding-inline: 8px; }

/* Who we work with: drawings v2 (13 Oct, Erfan: "ok" to the four fixes). One style for all four: the service drawings' window (three dots
   + bar line), white on the tinted panel, one accent (our red #D23100), real words instead of grey bars, 13px text, nothing cut except a
   clean crop at the bottom. One calm hover motion per card: agent steps tick in order, the usage bar fills, trust rows check off, the
   source tags light up. Reduced motion: the end state shows on hover with no animation. */
.se-pic { height: 272px; }
.sx-win { position: absolute; left: 24px; right: 0; top: 28px; bottom: -1px; display: flex; flex-direction: column; border-radius: 8px 0 0 0; background: #fff; box-shadow: 0 0 0 1px #E6E6E6, 0 16px 32px -20px rgba(0,0,0,.25); font: 500 13px/18px var(--text); color: #2A2A2A; overflow: hidden; }
.sx-bar { flex: none; display: flex; gap: 5px; align-items: center; height: 28px; padding: 0 12px; border-bottom: 1px solid #EDEDEB; }
.sx-bar i { width: 6px; height: 6px; border-radius: 50%; background: #D6D6D4; }
.sx-body { display: grid; gap: 6px; align-content: start; padding: 14px 16px 16px; }
.sx-h { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; font: 600 14px/20px var(--text); color: var(--ink); }
.sx-shield { width: 16px; height: 16px; fill: none; stroke: #D23100; stroke-width: 1.75; stroke-linejoin: round; }
/* steps with a check circle */
.sx-step { display: flex; align-items: center; gap: 8px; min-height: 28px; padding: 0 8px; border-radius: 4px; background: #F5F5F3; white-space: nowrap; }
.sx-ck { flex: none; display: grid; place-items: center; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px #CFCFCC; transition: background-color .25s ease, box-shadow .25s ease; }
.sx-ck svg { width: 12px; height: 12px; fill: none; stroke: #fff; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; opacity: 0; transition: opacity .25s ease; }
.se-card:hover .sx-ck, .se-card:focus-visible .sx-ck { background: #D23100; box-shadow: inset 0 0 0 1.5px #D23100; }
.se-card:hover .sx-ck svg, .se-card:focus-visible .sx-ck svg { opacity: 1; }
.sx-step:nth-child(2) .sx-ck, .sx-step:nth-child(2) .sx-ck svg { transition-delay: .15s; }
.sx-step:nth-child(3) .sx-ck, .sx-step:nth-child(3) .sx-ck svg { transition-delay: .3s; }
.sx-step:nth-child(4) .sx-ck, .sx-step:nth-child(4) .sx-ck svg { transition-delay: .45s; }
.sx-step:nth-child(5) .sx-ck, .sx-step:nth-child(5) .sx-ck svg { transition-delay: .6s; }
.sx-step.hand { background: #FFF1EB; color: #A42600; }
.sx-btn { justify-self: end; margin-top: 6px; padding: 5px 10px; border-radius: 4px; background: #050505; color: #fff; font: 500 12px/16px var(--text); }
/* infra */
.sx-code { padding: 8px 10px; border-radius: 4px; background: #F5F5F3; font: 500 12px/16px ui-monospace, SFMono-Regular, Menlo, monospace; color: #2A2A2A; white-space: nowrap; }
.sx-code em { font-style: normal; color: #D23100; }
.sx-lbl { margin-top: 6px; font-size: 12px; color: #6B6B6B; }
.sx-meter { height: 8px; border-radius: 4px; background: #EDEDEB; overflow: hidden; }
.sx-meter i { display: block; height: 100%; width: 34%; border-radius: 4px; background: #D23100; transition: width .8s cubic-bezier(.2,.8,.2,1); }
.se-card:hover .sx-meter i, .se-card:focus-visible .sx-meter i { width: 76%; }
.sx-price { display: flex; justify-content: space-between; gap: 8px; margin-top: 2px; font-size: 12px; color: #6B6B6B; white-space: nowrap; }
.sx-price b { font-weight: 600; color: var(--ink); }
/* trust */
.sx-req { justify-content: space-between; }
.sx-pill { padding: 1px 8px; border-radius: 4px; box-shadow: inset 0 0 0 1px #D23100; color: #D23100; font-size: 12px; transition: background-color .25s ease .6s, color .25s ease .6s; }
.se-card:hover .sx-pill, .se-card:focus-visible .sx-pill { background: #D23100; color: #fff; }
/* compliance */
.sx-claim { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 8px; border-radius: 4px; background: #F5F5F3; white-space: nowrap; }
.sx-claim span { overflow: hidden; text-overflow: ellipsis; }
.sx-claim u { flex: none; text-decoration: none; padding: 1px 6px; border-radius: 4px; background: #EDEDEB; color: #555; font-size: 12px; transition: background-color .25s ease, color .25s ease; }
.sx-claim + .sx-claim u { transition-delay: .2s; }
.se-card:hover .sx-claim u, .se-card:focus-visible .sx-claim u { background: #FFEDE6; color: #A42600; }
.sx-file { display: flex; align-items: center; gap: 8px; margin-top: 6px; padding: 8px; border-radius: 6px; box-shadow: inset 0 0 0 1px #E6E6E6; white-space: nowrap; }
.sx-file b { padding: 3px 6px; border-radius: 4px; background: #D23100; color: #fff; font: 600 11px/14px var(--text); }
@media (prefers-reduced-motion: reduce) { .sx-ck, .sx-ck svg, .sx-meter i, .sx-pill, .sx-claim u { transition: none !important; } }
@media (max-width: 760px) { .se-pic { height: 264px; } }
html body .sx-price span, html body .sx-price b, html body .sx-claim span, html body .sx-step, html body .sx-file span { white-space: nowrap; }
/* v3.2 (13 Oct, Erfan: "padding for the images, or full width and touching the bottom?"): picture is full-bleed. The card pads only its
   text; the tinted panel runs to the card's left, right and bottom edges and the card's 8px corners clip it, so there are two frames
   (card, window) instead of three. The window keeps its 24px inset from the panel's top-left and still crops at the bottom. */
.se-card { padding: 0; overflow: hidden; }
.se-meta { padding: 24px 24px 0; }
.se-title { margin: 16px 24px 32px; }
.se-pic { border-radius: 0; box-shadow: inset 0 1px 0 rgba(0,0,0,.04); }
@media (max-width: 760px) { .se-meta { padding: 20px 20px 0; } .se-title { margin: 12px 20px 24px; } }
/* v3.3 (13 Oct, Erfan: "reduce the height, more white space below the graphics"): panel sized to the tallest drawing (agents, ending on
   "Book a demo") + 16px, so the others crop close to their last row too */
.se-pic { height: auto; }
.sx-win { position: relative; left: auto; right: auto; top: auto; bottom: auto; margin: 28px 0 0 24px; }
.sx-body { padding-bottom: 16px; }
.se-cards > li { display: flex; } .se-card { width: 100%; }
/* v3.4 (13 Oct, Erfan: "make the stroke visible from below, left and right"): the card's 1px hairline is drawn on top of the full-bleed
   picture (it was hidden under it). Windows now float inside the tint with their own border on all four sides, sized to their content
   (no empty white inside), centred in a panel of one fixed height so the four picture tops line up. */
.se-card { position: relative; }
.se-card::after { content: ''; position: absolute; inset: 0; border-radius: 8px; box-shadow: inset 0 0 0 1px #E6E6E6; pointer-events: none; transition: box-shadow .2s ease; }
.se-card:hover::after { box-shadow: inset 0 0 0 1px #CFCFCC; }
.se-pic { height: 280px; display: grid; align-items: center; padding: 0 24px; }
.sx-win { margin: 0; border-radius: 8px; box-shadow: 0 0 0 1px #E6E6E6, 0 16px 32px -20px rgba(0,0,0,.25); }
@media (max-width: 760px) { .se-pic { height: 272px; padding: 0 20px; } }
/* v3.5 (13 Oct, Erfan: "make all the inner cards the same height"): every window = the tallest one (agents, 226px), centred in the 280px
   panel; the body is a column and its last item (button, price row, SOC 2 row, PDF chip) is pushed to the bottom, so no window ends
   in an empty gap */
.sx-win { height: 226px; }
.sx-body { flex: 1; display: flex; flex-direction: column; gap: 6px; }
.sx-body > :last-child { margin-top: auto; }
.sx-btn { align-self: flex-end; }
@media (max-width: 760px) { .sx-win { height: 226px; } }

/* Who we work with: drawings v3 = web pages, not product screens (13 Oct, Erfan: "this design gives a vibe that we are making software").
   Each window is a small website: browser bar with an address, the site's nav (logo, three links, "Book a demo"), then the one page we
   build for that kind of AI startup: agent homepage, pricing page, trust center, AI policy page. AI-specific content (model providers,
   how data is used, human review). One accent: #D23100. Hover: the page's main button / Pro tier / ticks / sources turn red. */
.sx-win.wb { height: 236px; display: flex; flex-direction: column; font: 500 11px/14px var(--text); color: #2A2A2A; }
.se-pic { height: 292px; }
.wb-bar { flex: none; display: flex; align-items: center; gap: 5px; height: 26px; padding: 0 10px; background: #F7F7F5; border-bottom: 1px solid #EDEDEB; }
.wb-bar i { width: 6px; height: 6px; border-radius: 50%; background: #D6D6D4; }
.wb-url { margin-left: 8px; flex: 1; height: 16px; border-radius: 4px; background: #fff; box-shadow: inset 0 0 0 1px #EDEDEB; padding: 0 8px; font: 500 10px/16px var(--text); color: #8A8A8A; white-space: nowrap; overflow: hidden; }
.wb-nav { flex: none; display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-bottom: 1px solid #F1F1EF; }
.wb-logo { display: flex; align-items: center; gap: 4px; font: 600 11px/14px var(--text); color: var(--ink); }
.wb-logo i { width: 10px; height: 10px; border-radius: 3px; background: var(--ink); }
.wb-links { display: flex; gap: 8px; color: #6B6B6B; font-size: 10px; }
.wb-cta { margin-left: auto; padding: 3px 7px; border-radius: 3px; background: var(--ink); color: #fff; font-size: 10px; white-space: nowrap; }
.wb-page { flex: 1; display: flex; flex-direction: column; gap: 8px; padding: 14px 12px 12px; }
.wb-h { font: 600 15px/18px var(--head); letter-spacing: -0.01em; color: var(--ink); text-wrap: balance; }
.wb-p { color: #6B6B6B; }
.wb-btns { display: flex; gap: 6px; }
.wb-b1, .wb-b2 { padding: 4px 8px; border-radius: 3px; font-size: 10px; white-space: nowrap; }
.wb-b1 { background: var(--ink); color: #fff; transition: background-color .25s ease; } .wb-b2 { box-shadow: inset 0 0 0 1px #D6D6D4; }
.se-card:hover .wb-b1, .se-card:focus-visible .wb-b1 { background: #D23100; }
.wb-flow { margin-top: auto; display: flex; align-items: center; gap: 4px; }
.wb-flow span { flex: 1; text-align: center; padding: 5px 0; border-radius: 4px; background: #F5F5F3; font-size: 10px; }
.wb-flow i { font-style: normal; color: #9A9A9A; }
.wb-flow .hand { background: #FFF1EB; color: #A42600; }
.wb-tiers { margin-top: auto; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
.wb-tiers span { display: grid; gap: 2px; align-content: start; padding: 8px 6px; border-radius: 4px; box-shadow: inset 0 0 0 1px #EDEDEB; transition: box-shadow .25s ease, transform .25s ease; }
.wb-tiers small { font-size: 10px; color: #6B6B6B; } .wb-tiers b { font: 600 12px/14px var(--text); color: var(--ink); white-space: nowrap; } .wb-tiers em { font-style: normal; font-size: 9px; line-height: 11px; color: #8A8A8A; }
.wb-tiers .on { box-shadow: inset 0 0 0 1.5px var(--ink); }
.se-card:hover .wb-tiers .on, .se-card:focus-visible .wb-tiers .on { box-shadow: inset 0 0 0 1.5px #D23100; transform: translateY(-3px); }
.wb-tiles { display: grid; gap: 5px; }
.wb-tiles > span { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border-radius: 4px; background: #F5F5F3; white-space: nowrap; }
.wb-ck { flex: none; display: grid; place-items: center; width: 12px; height: 12px; border-radius: 50%; box-shadow: inset 0 0 0 1.25px #CFCFCC; transition: background-color .25s ease, box-shadow .25s ease; }
.wb-ck svg { width: 9px; height: 9px; fill: none; stroke: #fff; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; opacity: 0; transition: opacity .25s ease; }
.wb-tiles > span:nth-child(2) .wb-ck, .wb-tiles > span:nth-child(2) .wb-ck svg { transition-delay: .15s; } .wb-tiles > span:nth-child(3) .wb-ck, .wb-tiles > span:nth-child(3) .wb-ck svg { transition-delay: .3s; }
.se-card:hover .wb-ck, .se-card:focus-visible .wb-ck { background: #D23100; box-shadow: inset 0 0 0 1.25px #D23100; } .se-card:hover .wb-ck svg, .se-card:focus-visible .wb-ck svg { opacity: 1; }
.wb-tiles .wb-req { justify-content: center; background: none; box-shadow: inset 0 0 0 1px #D23100; color: #D23100; }
.wb-claim { display: block; padding: 6px 8px; border-radius: 4px; background: #F5F5F3; }
.wb-claim u { text-decoration: none; color: #8A8A8A; white-space: nowrap; transition: color .25s ease; } .wb-claim + .wb-claim u { transition-delay: .15s; }
.se-card:hover .wb-claim u, .se-card:focus-visible .wb-claim u { color: #D23100; }
.wb-pdf { margin-top: auto; align-self: flex-start; display: flex; align-items: center; gap: 6px; padding: 5px 8px 5px 5px; border-radius: 4px; box-shadow: inset 0 0 0 1px #E6E6E6; }
.wb-pdf b { padding: 2px 4px; border-radius: 3px; background: #D23100; color: #fff; font: 600 9px/11px var(--text); }
@media (prefers-reduced-motion: reduce) { .wb-b1, .wb-tiers span, .wb-ck, .wb-ck svg, .wb-claim u { transition: none !important; } }
@media (max-width: 760px) { .sx-win.wb { height: 236px; } .se-pic { height: 284px; } }
.wb-nav { gap: 8px; } .wb-cta { flex: none; }

/* ==== parts/white.css ==== */
/* White ground trial (13 Oct, Erfan: "let's make the bg of the website white"). Loaded last. The old ground was #ECECE9 (zfix.css);
   cards stay white and take a 1px #E6E6E6 hairline so they still read as cards. Revert = remove this file's <link>. */
:root { --ground: #FFFFFF; }
html, body { background: #FFFFFF; }
.nav.scrolled { background: rgba(255,255,255,.82); }
/* hero: was a grey panel with a soft white glow; now plain white */
html body .hero, html[data-hero] body .hero, html[data-hero=grey] .hero { background: #FFFFFF; }
/* cards: white with the design system's 1px `line` hairline (#E6E6E6, "line on white"); inner blocks keep their soft grey
   (Erfan: "subtle border for cards like this, like the design we did") */
html body .cases .cs-case, html body .svc-card, html body .fd-in { background: #FFFFFF; box-shadow: inset 0 0 0 1px #E6E6E6; }
/* What we do table: back to the greys it had on the white panel */
html body .pstory .cap .cap-group { background: #F5F5F3; }
html body .pstory .cap .cap-row li { border-bottom-color: #F1F1EF; }
@media (max-width: 760px) { html body .pstory .cap .cap-row ul::before, html body .pstory .cap .cap-row ul:nth-child(n)::before { background: #F5F5F3; } }
/* sector illustrations: white mini-UIs relied on the grey ground for their edge; add a hairline */
html body .se-ill { outline: 1px solid #E6E6E6; outline-offset: -1px; }
/* "See all work" was white for the grey ground (work2.css); back to the design system's Subtle button: #F4F4F5, hover #EAEAEC
   (Erfan: "button is almost vanished with the background") */
html body .cases .cs-all.btn { background: #F4F4F5; }
html body .cases .cs-all.btn:hover, html body .cases .cs-all.btn:focus-visible { background: #EAEAEC; }

/* ==== parts/spacing.css ==== */
/* Section spacing rule (13 Oct, Erfan: "for all the sections, the space between title and the section should be equal… make it a rule").
   Section header (two-tone title + its intro line) → the section's content: 64px desktop, 48px tablet (≤1100), 40px phones. Same value the case studies use.
   Side-by-side heads (FAQ) and single-block sections (founder, closing band) have no "content below" and are not affected. Loaded last. */
html body .svc-head, html body .cmp-head, html body .qs-head, html body .se-head, html body .pr-head, html body .ck-head, html body .pstory .cap-out { margin-bottom: 64px; }
html body .cases .cs-list { padding-top: 64px; }
@media (max-width: 1100px) {
  html body .svc-head, html body .cmp-head, html body .qs-head, html body .se-head, html body .pr-head, html body .ck-head, html body .pstory .cap-out { margin-bottom: 48px; }
  html body .cases .cs-list { padding-top: 48px; }
}
@media (max-width: 760px) {
  html body .svc-head, html body .cmp-head, html body .qs-head, html body .se-head, html body .pr-head, html body .ck-head, html body .pstory .cap-out { margin-bottom: 40px; }
  html body .cases .cs-list { padding-top: 40px; }
}
/* Services intro line 20/28 → 16/24 (Erfan: "this font can be 16px") */
html body .svc-head p { font-size: 16px; line-height: 24px; }
/* Card name → its one-line description: 8px (Erfan: "space between title and subtitle should be less"; was 16) */
html body .svc-who { margin-top: 8px; }
/* Card to card in a stacked list (13 Oct, Erfan: "reduce the spacing to 40px, same for the project cards"): case-study cards and service
   cards 64 → 40px, 32px on phones. Overrides work2.css (.cs-list gap) and services.css (.svc-list gap). */
html body .cases .cs-list, html body .svc-list { gap: 40px; }
@media (max-width: 760px) { html body .cases .cs-list, html body .svc-list { gap: 32px; } }
/* Button arrows follow the button's text colour (13 Oct, Erfan: "arrow should be white"). Old price rules (.svc-cta span red) and the founder
   card's note rule (grey) also matched the arrow's span inside the button. */
html body .btn .arr-swap, html body .btn .arr-swap .arr { color: inherit; }
/* Hero showreel (13 Oct): no control bar; one 40px round pause/play button in the bottom-right corner, shown on hover / keyboard focus
   (and always while paused, so a paused reel can be restarted). Touch screens: always visible, faint. */
html body .hero-reel .hi-frame { position: relative; }
html body .hero-reel .hi-video { cursor: default; }
.hr-pause { position: absolute; right: 16px; bottom: 16px; width: 40px; height: 40px; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%; background: rgba(5,5,5,.55); color: #fff; cursor: pointer; opacity: 0; transition: opacity .2s ease, background-color .2s ease; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.hr-pause svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hr-pause .hr-i-play { fill: currentColor; stroke: none; display: none; }
.hero-reel.is-paused .hr-i-play { display: block; } .hero-reel.is-paused .hr-i-pause { display: none; }
.hero-reel .hi-frame:hover .hr-pause, .hr-pause:focus-visible, .hero-reel.is-paused .hr-pause { opacity: 1; }
.hr-pause:hover { background: rgba(5,5,5,.75); }
.hr-pause:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
@media (hover: none) { .hr-pause { opacity: .7; } }
/* "Who you work with" strip under the hero buttons (13 Oct) */
.hero-who { display: flex; align-items: center; justify-content: center; gap: 10px; margin: 24px 0 0; font: 400 14px/20px var(--text); color: #555; }
.hero-who b { font-weight: 500; color: var(--ink); }
.hw-faces { display: flex; }
.hw-faces img { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; box-shadow: 0 0 0 2px #fff; }
.hw-faces img + img { margin-left: -8px; }
html body .hero-reel .hi-video { box-shadow: 0 0 0 1px #E6E6E6; background: #F3F3F1; }
.hero-who { width: fit-content; max-width: 100%; margin-inline: auto; text-align: left; } .hero-who > span:last-child { flex: 0 1 auto; text-wrap: pretty; }
html body .hero-reel .hi-video { cursor: pointer; }
/* Case-card poster overlay (13 Oct): the designed poster sits over the film and cross-fades out on hover / back in on leave */
.cs-vid .cs-poster { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; pointer-events: none; opacity: 1; transition: opacity .4s ease; }
.cs-vid.is-playing .cs-poster { opacity: 0; }
@media (prefers-reduced-motion: reduce) { .cs-vid .cs-poster { transition: none; } }

/* ==== parts/sectors-wire.css ==== */
/* Who we work with v4 (13 Oct; trials 1-3 + light/wire runs, Erfan picked the wireframes). Loads after sectors-cards.css (card shell).
   Card = label + design-system swap arrow, "We design…" title, one-line pages list, then a page wireframe on the sheet grey. */
.wi .se-title { margin-bottom: 12px; }
.se-dlv { display: block; margin: 0 24px 24px; font: 400 14px/20px var(--text); color: #6B6B6B; white-space: nowrap; }
@media (max-width: 760px) { .se-dlv { margin: 0 20px 20px; } .wi .se-title { margin-bottom: 8px; } }
/* two cards per row below 1280 so every pages line stays on one line (needs >= 228px of text width) */
@media (max-width: 1279px) { .wi .se-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 760px) { .wi .se-cards { grid-template-columns: minmax(0, 1fr); } }

/* the arrow: same arr-swap as our buttons (nav.css), ink, pushed to the end of the label row. Hidden at rest (Erfan: "only show arrow on
   hover"): the first arrow never shows, the second slides in from the left on hover, the way the buttons' fresh arrow does */
.wi .se-meta .se-go { margin-left: auto; width: 18px; height: 18px; color: var(--ink); }
.wi .se-go .arr:first-child { opacity: 0; }
.wi .se-card:hover .arr-swap .arr:first-child, .wi .se-card:focus-visible .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
.wi .se-card:hover .arr-swap .arr + .arr, .wi .se-card:focus-visible .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }

/* the wireframe: white browser window, the site's nav, soft grey blocks, no words, one #FF3C00 accent */
.wi-art { display: block; margin-top: auto; aspect-ratio: 4 / 3; overflow: hidden; background: var(--sheet, #F6F6F6); }
.wi-art svg { display: block; width: 100%; height: 100%; transition: transform .45s cubic-bezier(.2,.8,.2,1); }
.wi .se-card:hover .wi-art svg, .wi .se-card:focus-visible .wi-art svg { transform: translateY(-6px); }
.wi-art .w-win { fill: #fff; stroke: #DADAD6; stroke-width: 1.25; }
.wi-art .w-dot { fill: #E2E2DE; } .wi-art .w-ln { fill: none; stroke: #EDEDEA; stroke-width: 1; }
.wi-art .w-h { fill: #D9D9D5; } .wi-art .w-b { fill: #EAEAE6; } .wi-art .w-blk { fill: #F4F4F2; }
.wi-art .w-btn { fill: none; stroke: #D9D9D5; stroke-width: 1.25; }
.wi-art .w-on { fill: #fff; stroke: #FF3C00; stroke-width: 1.5; }
.wi-art .w-acc { fill: #FF3C00; } .wi-art .w-play { fill: #fff; }
.wi-art .w-accs { fill: none; stroke: #FF3C00; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.wi-art .w-doc { fill: #fff; stroke: #FF3C00; stroke-width: 1.5; stroke-linejoin: round; }
@media (prefers-reduced-motion: reduce) { .wi-art svg { transition: none; } .wi .se-card:hover .wi-art svg { transform: none; } }

/* v4.1 (Erfan: "okay do" to the section review): greys one step darker so the wireframes don't vanish on bright screens */
.wi-art .w-win { stroke: #D2D2CE; } .wi-art .w-btn { stroke: #CFCFCB; } .wi-art .w-dot { fill: #D9D9D5; }
.wi-art .w-h { fill: #CFCFCB; } .wi-art .w-b { fill: #E1E1DD; } .wi-art .w-blk { fill: #EFEFEC; } .wi-art .w-ln { stroke: #E6E6E2; }
/* titles lost "We design", so they wrap to 2 or 3 lines; keep three lines' height in the 4-up row so the pages lines line up */
@media (min-width: 1280px) { .wi .se-title { min-height: 84px; } }

/* ==== parts/sectors-shots.css ==== */
/* Who we build for, round 3 (15 Oct, Erfan: "check again what screenshot I provided" = Musemind's service cards).
   Musemind's card is one tall composed picture with the heading laid over its empty top; hover turns the card a flat brand colour and
   shows a dark "Explore" pill. Same here: scene-*.webp (pastel + window light + our light UIs on glass plates, 800x1400, built from
   agency-plan/design-system/sector-scenes) fills the card, text sits on top, hover = #FF3C00 with a black pill. */
.wi .se-cards > li { container-type: inline-size; }
.wi .se-card { min-height: calc(210px + 98cqw); background: #F4F3F1; isolation: isolate; }
.wi .se-card > :not(.wi-art):not(.ws-cta) { position: relative; z-index: 2; }
.wi-art.ws { position: absolute; inset: 0; z-index: 0; margin: 0; aspect-ratio: auto; background: none; overflow: hidden; }
.ws-scene { position: absolute; left: 0; bottom: 0; width: 100%; height: auto; display: block;
  transition: transform .6s cubic-bezier(.2,.8,.2,1), opacity .35s ease; transform-origin: 70% 100%; }
/* hover: flat brand colour over the picture, pill rises in */
.wi-art.ws::after { content: ''; position: absolute; inset: 0; background: #FF3C00; opacity: 0; transition: opacity .35s ease; }
.wi .se-card:hover .wi-art.ws::after, .wi .se-card:focus-visible .wi-art.ws::after { opacity: 1; }
.wi .se-card:hover .ws-scene, .wi .se-card:focus-visible .ws-scene { transform: scale(1.03); }
.wi .se-card .se-dlv { transition: color .35s ease; }
.wi .se-card:hover .se-dlv, .wi .se-card:focus-visible .se-dlv { color: rgba(5,5,5,.78); }
.ws-cta { position: absolute; left: 24px; bottom: 24px; z-index: 2; display: inline-flex; align-items: center; gap: 8px;
  height: 48px; padding: 0 20px; border-radius: 999px; background: #050505; color: #fff; font: 500 15px/1 var(--text);
  opacity: 0; transform: translateY(8px); transition: opacity .3s ease, transform .4s cubic-bezier(.2,.8,.2,1); }
.ws-cta .arr-swap { width: 16px; height: 16px; }
.ws-cta .arr:first-child { opacity: 0; }
.wi .se-card:hover .ws-cta, .wi .se-card:focus-visible .ws-cta { opacity: 1; transform: none; transition-delay: .05s; }
.wi .se-card:hover .ws-cta .arr + .arr, .wi .se-card:focus-visible .ws-cta .arr + .arr { transform: none; opacity: 1; }
.wi .se-card::after { z-index: 3; }
@media (max-width: 760px) { .ws-cta { left: 20px; bottom: 20px; } }
@media (prefers-reduced-motion: reduce) { .ws-scene, .wi-art.ws::after, .ws-cta { transition: none; } }
.wi .se-card .se-meta b { transition: color .35s ease; }
.wi .se-card:hover .se-meta b, .wi .se-card:focus-visible .se-meta b { color: #050505; }

/* v4 hover (16 Oct, Erfan: "why it goes to orange? It should be very subtle hover"). No colour flood, no pill: the hairline darkens,
   the picture rises 6px, and the meta arrow swaps (arr-swap). Same calm motion as the rest of the page. */
.wi-art.ws::after, .ws-cta { display: none; }
.wi .se-card { transition: box-shadow .3s ease; }
.wi .se-card:hover, .wi .se-card:focus-visible { box-shadow: inset 0 0 0 1px #BDBDBA, 0 12px 32px -24px rgba(5,5,5,.35); }
.wi .se-card:hover .ws-scene, .wi .se-card:focus-visible .ws-scene { transform: translateY(-6px); }
.wi .se-card:hover .se-dlv, .wi .se-card:focus-visible .se-dlv { color: #555; }
/* v5 (16 Oct, Erfan: "did you reduce some height of these boxes?"): scenes re-rendered 640x860 (was 640x1120), card height
   follows the picture's ratio (1075/800 = 134.4% of the card width), about 100px shorter at 1440. */
.wi .se-card { min-height: 134.4cqw; }
/* v6 (16 Oct, Erfan: "make the titles two lines… reduce the gap between the text and the image"): titles cut to two lines,
   title box no longer reserves a third line; scenes re-rendered with the browser window ~100px higher so more of each site shows. */
@media (min-width: 1280px) { .wi .se-title { min-height: 56px; } }
.wi .se-title { margin-bottom: 16px; }

/* ==== parts/process-cards.css ==== */
/* How a project runs v3 (was the ?process=cards trial). Supafast's layout, our style: 4px tabs with the active one in #FF3C00, 8px cards,
   thin outlines, white / #1A1A1A cards alternating on the #0B0B0B band, wireframes on the sheet grey. Remove this file, process-cards.js
   and the #process-cards section to drop the trial. */
/* merged into the main page 13 Oct (replaces the v2 bar chart in parts/process.html, which is no longer loaded) */

/* tabs: one row, weeks in bold, the step under it */
.pc-tabs { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 4px; margin-bottom: 16px; padding: 4px; border-radius: 8px; background: #141414; box-shadow: inset 0 0 0 1px #242424; }
.pc-tabs button { display: grid; gap: 2px; padding: 10px 14px; border: 0; border-radius: 4px; background: transparent; color: #BDBDBD; text-align: left; cursor: pointer; font: inherit; transition: background-color .25s ease, color .25s ease; }
.pc-tabs b { font: 600 14px/20px var(--text); color: #fff; }
.pc-tabs span { font: 400 13px/18px var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-tabs button:hover { background: #1E1E1E; }
.pc-tabs button[aria-selected="true"] { background: #FF3C00; color: rgba(11,11,11,.78); }
.pc-tabs button[aria-selected="true"] b { color: #0B0B0B; }
.pc-tabs button:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* track: one card at a time, the next one peeking in */
.pc-track { --cw: min(880px, 80%); position: relative; display: flex; gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; overscroll-behavior-x: contain; scrollbar-width: none; cursor: grab; }
.pc-track::-webkit-scrollbar { display: none; }
.pc-track::after { content: ''; flex: 0 0 calc(100% - var(--cw) - 16px); }
.pc-track.drag { cursor: grabbing; scroll-snap-type: none; scroll-behavior: auto; user-select: none; }
.pc-card { flex: 0 0 var(--cw); scroll-snap-align: start; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px; min-height: 400px; padding: 40px; border-radius: 8px; background: #fff; color: var(--ink); }
.pc-card.dk { background: #1A1A1A; color: #fff; box-shadow: inset 0 0 0 1px #2A2A2A; }
.pc-txt { display: flex; flex-direction: column; min-width: 0; }
.pc-num { font: 500 48px/1 var(--text); letter-spacing: -0.03em; color: #E2E2E2; }
.pc-card.dk .pc-num { color: #333; }
.pc-txt h3 { margin: 16px 0 0; font: 500 32px/36px var(--text); letter-spacing: -0.03em; }
.pc-lead { margin: auto 0 0; padding-top: 32px; font: 500 18px/26px var(--text); }
.pc-desc { margin: 8px 0 0; font: 400 16px/24px var(--text); color: #6B6B6B; }
.pc-card.dk .pc-desc { color: #A3A3A3; }
.pc-art { position: relative; border-radius: 6px; overflow: hidden; background: var(--sheet, #F6F6F6); }
.pc-card.dk .pc-art { background: #232323; }
.pc-art svg { position: absolute; inset: 0; width: 100%; height: 100%; }

/* wireframe palette: light card */
.pc-art .p-pg { fill: #fff; stroke: #D2D2CE; stroke-width: 1.25; }
.pc-art .p-lift { filter: drop-shadow(0 8px 16px rgba(0,0,0,.08)); }
.pc-art .p-h { fill: #CFCFCB; } .pc-art .p-b { fill: #E1E1DD; } .pc-art .p-blk { fill: #EFEFEC; }
.pc-art .p-dot { fill: #D9D9D5; } .pc-art .p-sep { fill: none; stroke: #E6E6E2; stroke-width: 1; }
.pc-art .p-ln { fill: none; stroke: #BDBDB8; stroke-width: 1.25; stroke-dasharray: 3 4; }
.pc-art .p-acc { fill: #D23100; } .pc-art .p-accs { fill: none; stroke: #D23100; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.pc-art .p-off { fill: #E1E1DD; } .pc-art .p-knob { fill: #fff; } .pc-art .p-knob-on { fill: #fff; }
.pc-art .p-play { fill: #fff; } .pc-art .p-tick { fill: none; stroke: #fff; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
/* dark card */
.pc-card.dk .p-pg { fill: #2B2B2B; stroke: #3A3A3A; }
.pc-card.dk .p-h { fill: #555; } .pc-card.dk .p-b { fill: #404040; } .pc-card.dk .p-blk { fill: #353535; }
.pc-card.dk .p-dot { fill: #4A4A4A; } .pc-card.dk .p-sep { stroke: #3A3A3A; } .pc-card.dk .p-ln { stroke: #5A5A5A; }
.pc-card.dk .p-acc { fill: #FF3C00; } .pc-card.dk .p-accs { stroke: #FF3C00; }

/* foot: note on the left, previous / next on the right */
.pc-foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 24px; }
.pc-note { margin: 0; font: 400 16px/24px var(--text); color: #A3A3A3; }
.pc-nav { display: flex; gap: 8px; }
.pc-nav button { display: grid; place-items: center; width: 40px; height: 40px; padding: 0; border: 0; border-radius: 4px; background: #1A1A1A; box-shadow: inset 0 0 0 1px #2A2A2A; color: #fff; cursor: pointer; transition: background-color .2s ease, opacity .2s ease; }
.pc-nav button:hover { background: #262626; }
.pc-nav button:disabled { opacity: .35; cursor: default; }
.pc-nav button:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
.pc-nav svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

@media (prefers-reduced-motion: reduce) { .pc-track { scroll-behavior: auto; } .pc-tabs button { transition: none; } }
@media (max-width: 1100px) { .pc-track { --cw: 86%; } .pc-card { padding: 32px; gap: 24px; } }
@media (max-width: 760px) {
  .pc-tabs { display: flex; overflow-x: auto; scrollbar-width: none; } .pc-tabs::-webkit-scrollbar { display: none; }
  .pc-tabs button { flex: 0 0 auto; min-width: 128px; }
  .pc-track { --cw: 88%; }
  .pc-card { grid-template-columns: minmax(0, 1fr); min-height: 0; padding: 24px; gap: 20px; }
  .pc-art { order: 2; aspect-ratio: 4 / 3; }
  .pc-num { font-size: 36px; } .pc-txt h3 { font-size: 26px; line-height: 30px; margin-top: 12px; }
  .pc-lead { padding-top: 20px; font-size: 17px; line-height: 24px; }
  .pc-foot { flex-direction: column; align-items: flex-start; }
}

/* v2 (13 Oct, Erfan: "good start, analyse how we can make the design better" → "yes" to all six):
   1 the track runs to the right edge of the screen, so the next card peeks in on purpose instead of being cut mid-word;
   2 tabs lose the red block: plain text on the band, active step white, and a thin line under the row fills in red up to the step;
   3 every card white (dark cards almost vanished on the band);
   4 cards 01 and 05 redrawn wider so they fill their panel;
   5 the faded 48px number becomes a small grey "01" above the title;
   6 previous / next sit at the right end of the tab row. */
.pc { overflow-x: clip; }
.pc-track { margin-right: calc(50% - 50vw); }
.pc-top { display: flex; align-items: flex-end; gap: 24px; margin-bottom: 24px; }
.pc-tabs { position: relative; flex: 1; min-width: 0; margin: 0; padding: 0 0 14px; gap: 0; border-radius: 0; background: none; box-shadow: none; }
.pc-tabs button { padding: 0 16px 0 0; border-radius: 0; background: none; color: #8A8A8A; }
.pc-tabs button:hover { background: none; color: #BDBDBD; }
.pc-tabs b { color: #BDBDBD; transition: color .25s ease; }
.pc-tabs button[aria-selected="true"] { background: none; color: #BDBDBD; }
.pc-tabs button[aria-selected="true"] b { color: #fff; }
.pc-prog { position: absolute; left: 0; right: 0; bottom: 0; height: 2px; border-radius: 1px; background: #2A2A2A; overflow: hidden; }
.pc-prog i { display: block; height: 100%; width: 20%; background: #FF3C00; transition: width .5s cubic-bezier(.2,.8,.2,1); }
.pc-top .pc-nav { flex: none; padding-bottom: 10px; }
.pc-num { font: 500 14px/20px var(--text); letter-spacing: 0; color: #8A8A8A; font-variant-numeric: tabular-nums; }
.pc-txt h3 { margin-top: 8px; }
.pc-foot { margin-top: 20px; }
@media (prefers-reduced-motion: reduce) { .pc-prog i, .pc-tabs b { transition: none; } }
@media (max-width: 760px) {
  .pc-top { flex-direction: column; align-items: stretch; gap: 12px; }
  .pc-tabs { padding-bottom: 12px; }
  .pc-tabs button { min-width: 140px; }
  .pc-prog { right: auto; width: max(100%, 700px); }
  .pc-top .pc-nav { padding-bottom: 0; align-self: flex-end; }
  .pc-num { font-size: 14px; }
}

/* v3 background pattern (Erfan: "can we add any pattern in the bg?"). Default: faint week lines, one per tab column, running the full
   height of the band and fading out at the top and bottom, so the band reads like a calendar. ?bg=dots swaps in a faint dot grid,
   ?bg=none removes the pattern. Phones: no lines (the tab row scrolls there, so they could not line up). */
.pc .pr-in { position: relative; }
.pc .pr-head, .pc .pc-top, .pc .pc-track { position: relative; z-index: 1; }
.pc-lines { position: absolute; left: 0; right: 112px; top: -128px; bottom: -128px; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); pointer-events: none;
  -webkit-mask-image: linear-gradient(transparent, #000 22%, #000 78%, transparent); mask-image: linear-gradient(transparent, #000 22%, #000 78%, transparent); }
.pc-lines i { border-left: 1px solid #1C1C1C; }
.pc-lines i:last-child { border-right: 1px solid #1C1C1C; }
html[data-pcbg="dots"] .pc-lines, html[data-pcbg="none"] .pc-lines { display: none; }
html[data-pcbg="dots"] .pc { background-image: radial-gradient(#262626 1px, transparent 1.4px); background-size: 20px 20px; background-position: center; }
@media (max-width: 1100px) { .pc-lines { top: -96px; bottom: -96px; } }
@media (max-width: 760px) { .pc-lines { display: none; } }
/* v3.1 (Erfan: "all 3 look the same"): the dot grid never showed (round3.css "html body .process2.pr-dark { background: #0B0B0B }" outranked
   it and reset background-image), and the week lines were too faint. Dots now use a stronger selector; lines and dots one step lighter. */
.pc-lines i { border-left-color: #262626; } .pc-lines i:last-child { border-right-color: #262626; }
html[data-pcbg="dots"] body section.process2.pr-dark.pc { background-color: #0B0B0B; background-image: radial-gradient(#2E2E2E 1.2px, transparent 1.6px); background-size: 20px 20px; background-position: center; }

/* v3.2 (Erfan: "line doesn't look good"): week lines removed (they ran through the title and intro). Plain band by default;
   ?bg=dots keeps the dot grid as the one pattern option. */
.pc-lines { display: none !important; }

/* v4 silk (Erfan: "can we be at this kind of pattern?" with rozen-template.webflow.io's services band). Rozen's is a photo of dark satin;
   ours is our own generated image (Magnific, 13 Oct, img/process-silk.webp, 1920px). It sits under a dark overlay so the white cards stay
   the focus. Default on the trial; ?bg=none = plain, ?bg=dots = dot grid. */
html body section.process2.pr-dark.pc { background-color: #0B0B0B; background-image: linear-gradient(rgba(11,11,11,.55), rgba(11,11,11,.35) 45%, rgba(11,11,11,.8)), url("/assets/img/process-silk.webp"); background-size: cover; background-position: center; }
html[data-pcbg="none"] body section.process2.pr-dark.pc { background-image: none; }
html[data-pcbg="dots"] body section.process2.pr-dark.pc { background-image: radial-gradient(#2E2E2E 1.2px, transparent 1.6px); background-size: 20px 20px; }

/* v5 (Erfan: tab text too small to read, unsure about the progress bar, check illustrations + fonts against the design system, jazz up
   the 01/02/03). Design-system fixes: tab step names were 13px #8A8A8A (under the 14px floor, 3.3:1 on the silk's light folds) → week
   16px/600 white-ish like menu-item, step name 14px #C8C8C8 like menu-desc, on a darker overlay; card lead 18/26 → 18/28 (hero-sub);
   drawing accents #D23100 → brand #FF3C00 (they are graphics, not small text). Progress: one segment under each tab: current = brand
   orange, done = white 40%, ahead = white 12%. Numbers: a tilted orange sticker per step, each at its own angle. */
html body section.process2.pr-dark.pc { background-image: linear-gradient(rgba(11,11,11,.72), rgba(11,11,11,.58) 45%, rgba(11,11,11,.86)), url("/assets/img/process-silk.webp"); }
html[data-pcbg="none"] body section.process2.pr-dark.pc { background-image: none; }
html[data-pcbg="dots"] body section.process2.pr-dark.pc { background-image: radial-gradient(#2E2E2E 1.2px, transparent 1.6px); }
.pc-tabs { padding-bottom: 16px; }
.pc-tabs button { gap: 4px; }
.pc-tabs b { font: 600 16px/24px var(--text); color: #E6E6E6; }
.pc-tabs span { font: 400 14px/20px var(--text); color: #C8C8C8; }
.pc-tabs button:hover b, .pc-tabs button:hover span { color: #fff; }
.pc-tabs button[aria-selected="true"] b, .pc-tabs button[aria-selected="true"] span { color: #fff; }
.pc-tabs button:not([aria-selected="true"]) { opacity: .78; } .pc-tabs button:hover { opacity: 1; }
.pc-prog { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); height: 3px; border-radius: 0; background: none; overflow: visible; }
.pc-prog i { width: auto; height: 3px; margin-right: 16px; border-radius: 2px; background: rgba(255,255,255,.12); transition: background-color .35s ease; }
.pc-prog i.done { background: rgba(255,255,255,.4); }
.pc-prog i.on { background: #FF3C00; }
.pc-lead { line-height: 28px; }
.pc-art .p-acc { fill: #FF3C00; } .pc-art .p-accs { stroke: #FF3C00; }
/* step number = a tilted orange sticker */
.pc-num { display: grid; place-items: center; align-self: flex-start; width: 52px; height: 52px; border-radius: 50%; background: #FF3C00; color: #fff; font: 600 24px/1 var(--text); letter-spacing: -0.02em; transform: rotate(var(--r, -6deg)); box-shadow: 0 6px 16px -6px rgba(255,60,0,.55); transition: transform .5s cubic-bezier(.34,1.56,.64,1); }
.pc-card:hover .pc-num { transform: rotate(0deg) scale(1.06); }
.pc-txt h3 { margin-top: 20px; }
@media (prefers-reduced-motion: reduce) { .pc-num, .pc-prog i { transition: none; } .pc-card:hover .pc-num { transform: rotate(var(--r, -6deg)); } }
@media (max-width: 760px) {
  .pc-tabs button { min-width: 176px; }
  .pc-prog { right: auto; width: max(100%, 880px); }
  .pc-num { width: 44px; height: 44px; font-size: 20px; }
  .pc-txt h3 { margin-top: 16px; }
}
/* v5.1 (Erfan: tone down the orange numbers → "the same grey"): sticker = the drawing panel's sheet grey #F6F6F6 with an ink digit,
   no orange glow; tilt and hover bounce kept. The only bright orange left per card: the drawing accent and the current progress step. */
.pc-num { background: var(--sheet, #F6F6F6); color: var(--ink); box-shadow: none; }
/* lead line 18/28 → 18/26 (Erfan: "is the line height correct?"): the ~1.4 ratio the Four ways who-line uses (20/28) */
.pc-lead { line-height: 26px; }
@media (max-width: 760px) { .pc-lead { line-height: 24px; } }
/* digit ink → dark grey #6B6B6B, the same grey as the card's description (Erfan: "make the 1, 2, 3 dark grey"); 5.0:1 on #F6F6F6 */
.pc-num { color: #6B6B6B; }
/* Book a call under the cards, centred (Erfan: "keep the Book a call button below, in the center"). Same light button as the closing
   band: white with ink text on the dark band, brand-deep on hover. */
.pc-cta { display: flex; justify-content: center; margin-top: 48px; position: relative; z-index: 1; }
.pc .btn-light { background: #fff; color: var(--ink); }
.pc .btn-light:hover, .pc .btn-light:focus-visible { background: var(--accent-deep); color: #fff; }
@media (max-width: 760px) { .pc-cta { margin-top: 32px; } }
/* time-only tabs, now the default (14 Oct, Erfan: "we agreed on only Kickoff, Weeks 1–3, Weeks 3–5, Week 6, Handover"; was ?tabs=short) (Erfan: "Supafast just says Day 1, Day 2–3; in our case Week 1, Weeks 2–3, how would that look instead of the text?"):
   tabs show only the time, one line, a little larger; the step name stays on each card's title and in the tab's accessible name. */
html body .pc-tabs button span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
html body .pc-tabs b { font-size: 18px; line-height: 26px; }
html body .pc-tabs { padding-bottom: 14px; }
@media (max-width: 760px) { html body .pc-tabs button { min-width: 112px; } html body .pc-prog { width: max(100%, 560px); } }
/* v6 (Erfan: write the number "like Supafast's 13-14, in a subtle way"): the sticker becomes a big faded digit, almost card-coloured
   (#EBEBEB on white), no circle, no tilt; it sits where the sticker was, above the title (the card's top-right is the drawing). */
.pc-num { display: block; width: auto; height: auto; border-radius: 0; background: none; box-shadow: none; transform: none; color: #EBEBEB; font: 700 88px/0.8 var(--text); letter-spacing: -0.05em; transition: color .3s ease; }
.pc-card:hover .pc-num { transform: none; color: #E2E2E2; }
.pc-txt h3 { margin-top: 16px; }
@media (max-width: 760px) { .pc-num { width: auto; height: auto; font-size: 64px; } .pc-txt h3 { margin-top: 12px; } }
@media (prefers-reduced-motion: reduce) { .pc-card:hover .pc-num { transform: none; } }

/* ==== parts/checks-v2.css ==== */
/* Before the demo v2 (14 Oct, Erfan: "less text, but everything clear" + "focus on design too"). Title → six questions → one compact,
   light audit panel: heading, one line, then URL + email + button on one row, small print under it. Light (#F6F6F6) instead of black so
   the page does not run black band → black box → black band (process → here → compare). Labels stay in the markup for screen readers. */
.ck-form { max-width: 880px; margin: 0 auto; padding: 48px 56px; display: block; background: var(--sheet, #F6F6F6); color: var(--ink); border-radius: 8px; text-align: center; }
.ck-form h3 { margin: 0; font: 500 32px/36px var(--text); letter-spacing: -0.03em; }
.ck-form-copy p { margin: 8px auto 0; max-width: 34em; font: 400 16px/24px var(--text); color: #555; }
.ck-fields { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; gap: 8px; margin-top: 32px; text-align: left; }
.ck-fields label { display: block; }
.ck-fields label span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.ck-fields input { width: 100%; height: 48px; border: 1px solid #E0E0E0; background: #fff; color: var(--ink); }
.ck-fields input::placeholder { color: #8A8A8A; }
.ck-fields input:focus-visible { border-color: var(--ink); box-shadow: 0 0 0 2px rgba(255,60,0,.35); }
.ck-fields input[aria-invalid=true] { border-color: #D23100; }
html body .ck-form .btn-dark { background: var(--ink); color: #fff; min-height: 48px; height: 48px; padding: 0 20px; white-space: nowrap; }
html body .ck-form .btn-dark:hover, html body .ck-form .btn-dark:focus-visible { background: #2A2A2A; color: #fff; }
.ck-note { grid-column: 1 / -1; margin-top: 8px; text-align: center; color: #6B6B6B; }
.ck-note.ok { color: #2E5631; } .ck-note.err { color: #A42600; }
@media (max-width: 760px) {
  .ck-form { padding: 32px 20px; margin-top: 0; }
  .ck-form h3 { font-size: 26px; line-height: 30px; }
  .ck-fields { grid-template-columns: minmax(0, 1fr); margin-top: 24px; }
  html body .ck-form .btn-dark { width: 100%; justify-content: center; }
}
.ck-form-copy p { max-width: 44em; text-wrap: balance; }

/* v2.1 speech-bubble question chips removed 17 Oct: the questions are now the tick-box self-check (parts/self-check.css). */

/* v2.2 border light (Erfan: "an AI flashy border here so people notice it"). Not the usual rainbow loop (the stock AI-SaaS look): one
   brand-orange light travels slowly round the panel edge (8s a lap) over a 1px hairline. Reduced motion: a still orange outline. */
@property --ck-a { syntax: '<angle>'; inherits: false; initial-value: 0deg; }
.ck-form { position: relative; isolation: isolate; box-shadow: inset 0 0 0 1px #E6E6E6; }
.ck-form::before { content: ''; position: absolute; inset: 0; z-index: -1; padding: 1.5px; border-radius: inherit; pointer-events: none;
  background: conic-gradient(from var(--ck-a), transparent 0deg, transparent 250deg, rgba(255,60,0,.15) 290deg, #FF3C00 340deg, #FFB59A 352deg, transparent 360deg);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  animation: ck-sweep 8s linear infinite; }
@keyframes ck-sweep { to { --ck-a: 360deg; } }
@media (prefers-reduced-motion: reduce) { .ck-form::before { animation: none; background: #FF3C00; opacity: .6; } }

/* v2.3 metal rim (Erfan: "like the way baked.design focuses on the Book a 30-min call button, do it on the whole audit box"). Baked draws
   a liquid-metal ring with their own WebGL canvas; this is our own CSS take on the look, no library: a 2px chrome ring (graphite →
   silver → white highlights, with a warm orange and a cool blue sheen) turning slowly round the panel, plus a soft blurred copy behind
   it as the glow. Replaces the v2.2 orange light. Reduced motion: the ring stands still. */
.ck-form { box-shadow: none; }
.ck-form::before, .ck-form::after { content: ''; position: absolute; border-radius: inherit; pointer-events: none;
  background: conic-gradient(from var(--ck-a), #3A3A3A 0deg, #9A9A9A 40deg, #F7F7F7 70deg, #BDBDBD 100deg, #5A5A5A 140deg, #DADADA 175deg, #FFB59A 205deg, #FFFFFF 225deg, #9AA4B8 255deg, #C9D3EA 280deg, #4A4A4A 320deg, #3A3A3A 360deg);
  animation: ck-sweep 10s linear infinite; }
.ck-form::before { inset: 0; z-index: -1; padding: 2px; opacity: 1;
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0); }
.ck-form::after { inset: -2px; z-index: -2; filter: blur(14px); opacity: .45; }
@media (prefers-reduced-motion: reduce) { .ck-form::before, .ck-form::after { animation: none; } .ck-form::before { background: conic-gradient(from 30deg, #3A3A3A, #F7F7F7, #9A9A9A, #FFB59A, #C9D3EA, #3A3A3A); opacity: 1; } }
/* fix: inside the panel's own stacking layer its background paints under the glow, so the glow tinted the inside. The ring layer now
   carries the panel fill itself (padding-box grey + border-box chrome), so the blurred glow only shows outside the edge. */
.ck-form { background: none; }
.ck-form::before { inset: 0; padding: 0; border: 2px solid transparent; -webkit-mask: none; mask: none;
  background: linear-gradient(var(--sheet, #F6F6F6), var(--sheet, #F6F6F6)) padding-box, conic-gradient(from var(--ck-a), #3A3A3A 0deg, #9A9A9A 40deg, #F7F7F7 70deg, #BDBDBD 100deg, #5A5A5A 140deg, #DADADA 175deg, #FFB59A 205deg, #FFFFFF 225deg, #9AA4B8 255deg, #C9D3EA 280deg, #4A4A4A 320deg, #3A3A3A 360deg) border-box; }
@media (prefers-reduced-motion: reduce) { .ck-form::before { background: linear-gradient(var(--sheet, #F6F6F6), var(--sheet, #F6F6F6)) padding-box, conic-gradient(from 30deg, #3A3A3A, #F7F7F7, #9A9A9A, #FFB59A, #C9D3EA, #3A3A3A) border-box; } }

/* v2.4 (Erfan: focus shows a black border, button looks wrong, hover wrong). The submit is a <button>, so it carried the browser's default
   2px outset border; our other buttons are links and never had it. Border removed, hover = the design system's dark-button hover
   (#1F1F1F, same as nav "Book a call"), focus ring like the inputs. Inputs: focus is orange only (was ink border + orange ring). */
html body .ck-form .btn-dark { border: 0; background: var(--ink); color: #fff; font-family: var(--text); cursor: pointer; }
html body .ck-form .btn-dark:hover { background: #1F1F1F; color: #fff; }
html body .ck-form .btn-dark:focus-visible { background: #1F1F1F; outline: none; box-shadow: 0 0 0 3px rgba(255,60,0,.35); }
.ck-fields input:focus, .ck-fields input:focus-visible { border-color: #FF3C00; box-shadow: 0 0 0 3px rgba(255,60,0,.18); outline: none; }
/* small print removed (Erfan: "are all three texts necessary?"); the note stays empty as the live region for error / "Got it" messages */
.ck-note:empty { margin: 0; }
/* v2.5 (Erfan: "after the border there's something square-looking"): the glow was a blurred copy of the panel (filter: blur), which shows
   a squarish halo on sharp screens. It is now soft box-shadows, which follow the 8px corners exactly: a faint drop shadow plus a warm
   and a cool tint matching the ring's sheen. The chrome ring itself is unchanged. */
.ck-form::after { display: none; }
.ck-form { box-shadow: 0 16px 40px -20px rgba(0,0,0,.22), 0 0 32px -8px rgba(255,140,100,.28), 0 0 40px -10px rgba(140,160,215,.30); }

/* ==== parts/founder-letter.css ==== */
/* Founder letter (14 Oct), after DesignMe's founder note: one bordered white card, letter text on the left (max 34em), name block with a
   rule above, the call button, and Erfan's pencil-sketch portrait cut out at the bottom right of the card, bleeding to its edge. */
html body .fl { padding: var(--section-gap) var(--gut) 0; }
.fl-card { position: relative; max-width: 960px; margin: 0 auto; padding: 64px 64px 56px; border-radius: 8px; background: #fff; box-shadow: inset 0 0 0 1px #E6E6E6; overflow: hidden; }
.fl-copy { position: relative; z-index: 1; max-width: 34em; }
.fl h2.tt { margin: 0 0 32px; max-width: 16ch; font: 500 40px/1.1 var(--text); letter-spacing: -0.03em; color: var(--ink); text-wrap: balance; }
.fl-copy p { margin: 0 0 20px; font: 400 17px/27px var(--text); color: #333; text-wrap: pretty; }
.fl-sign { display: grid; gap: 4px; width: 240px; margin-top: 40px; padding-top: 12px; border-top: 1px solid #CFCFCB; }
.fl-sign b { font: 500 22px/28px var(--text); letter-spacing: -0.01em; color: var(--ink); }
.fl-sign span { font: 400 14px/20px var(--text); color: #6B6B6B; }
.fl-cta { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 16px; margin-top: 32px; }
.fl-cta span { font: 400 14px/20px var(--text); color: #6B6B6B; }
.fl-photo { position: absolute; right: -24px; bottom: 0; width: 400px; height: auto; pointer-events: none; user-select: none; }
@media (max-width: 1100px) { .fl-photo { width: 320px; right: -32px; } .fl-copy { max-width: 30em; } }
@media (max-width: 860px) { .fl-copy { max-width: none; } .fl-photo { position: relative; display: block; right: auto; width: 280px; margin: 24px -24px -56px auto; } }
@media (max-width: 760px) {
  .fl-card { padding: 40px 24px 32px; }
  .fl h2.tt { font-size: 30px; margin-bottom: 24px; }
  .fl-copy p { font-size: 16px; line-height: 25px; }
  .fl-photo { width: 240px; margin: 16px -24px -32px auto; }
}

/* v2 (Erfan: "make this section better, use a signature of your own" + "full name Kazi Mohammed Erfan" + "link my Twitter"). Title spans
   the card (2 lines); the empty top-right holds three proof numbers (taken out of the paragraph, so the letter is shorter); signature
   image (Kazi Mohammed Erfan, a script rendering made for him, not his handwriting) above the name; X link under the role. */
.fl-card { display: grid; grid-template-columns: minmax(0, 1fr) 260px; column-gap: 64px; align-items: start; }
.fl h2.tt { grid-column: 1 / -1; max-width: 22ch; margin-bottom: 40px; }
.fl-copy { grid-column: 1; grid-row: 2; max-width: 34em; }
.fl-stats { grid-column: 2; grid-row: 2; position: relative; z-index: 1; display: grid; gap: 24px; margin: 4px 0 0; }
.fl-stats div { padding-left: 16px; box-shadow: inset 2px 0 0 #FF3C00; }
.fl-stats dt { font: 500 32px/36px var(--text); letter-spacing: -0.03em; color: var(--ink); }
.fl-stats dd { margin: 4px 0 0; font: 400 14px/20px var(--text); color: #6B6B6B; }
.fl-sign { width: 280px; margin-top: 32px; padding-top: 0; border-top: 0; }
.fl-sign img { display: block; width: 260px; height: auto; margin: 0 0 8px -6px; }
.fl-sign b { padding-top: 12px; border-top: 1px solid #CFCFCB; font-size: 18px; line-height: 24px; }
.fl-sign a { color: var(--ink); text-decoration: underline; text-decoration-color: #FF3C00; text-underline-offset: 3px; }
.fl-sign a:hover { color: #D23100; }
.fl-photo { width: 380px; right: -20px; }
@media (max-width: 1100px) { .fl-card { grid-template-columns: minmax(0, 1fr) 200px; column-gap: 40px; } .fl-stats dt { font-size: 26px; line-height: 30px; } }
@media (max-width: 860px) {
  .fl-card { display: block; }
  .fl-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin: 0 0 32px; }
  .fl-stats dt { font-size: 22px; line-height: 26px; } .fl-stats dd { font-size: 13px; line-height: 18px; }
}
@media (max-width: 520px) { .fl-stats { grid-template-columns: minmax(0, 1fr); } .fl-sign img { width: 220px; } }
.fl h2.tt { max-width: 36ch; } @media (max-width: 760px) { .fl h2.tt { max-width: none; } }

/* ==== parts/closing.css ==== */
/* Closing block v4 (14 Oct, Erfan: "follow Musemind… in a grey background", "full width, no rounded corner, no padding").
   Full-width #F6F6F6 band (edge to edge, no radius), content kept to the 1240px column. Left: two-tone title, line, three honest
   promises (all from the FAQ / founder letter). Right: white form box with underline fields and a full-width Send, and under the
   box "Rather talk? Pick a time →", which swaps the form for the cal.com calendar. No photo here: the FAQ card and founder letter
   already show Erfan. Loaded after round2.css / titles.css. */
html body .close2.cl3 { padding: var(--section-gap) 0 0; }
html body .cl3 .cl2-in { max-width: none; margin: 0; border-radius: 0; background: var(--sheet, #F6F6F6); color: var(--ink);
  display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: 0 96px; align-items: start; justify-items: stretch; text-align: left;
  padding: 120px max(var(--gut), calc((100% - 1240px) / 2)); }
.cl3-side { display: flex; flex-direction: column; gap: 24px; padding-top: 40px; }
html body .cl3 h2 { max-width: 14ch; color: var(--ink); text-wrap: balance; }
html body .close2.cl3 .tt .tt-g { color: #767676; }
html body .cl3 .cl3-side > p { max-width: 28em; font-size: 18px; line-height: 28px; color: #4A4A4A; }
.cl3-ticks { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 12px; }
.cl3-ticks li { display: flex; align-items: flex-start; gap: 12px; font-size: 16px; line-height: 24px; color: var(--ink); }
.cl3-ticks svg { flex: none; width: 24px; height: 24px; padding: 3px; border-radius: 50%; background: #fff; fill: none; stroke: #FF3C00; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

/* right column: white box + switch line under it */
.cl3-right { min-width: 0; }
.cl3-panel { background: #fff; color: var(--ink); border-radius: 0; padding: 40px; }
html body .cl3 .cl3-switch { margin: 24px 0 0; font-size: 18px; line-height: 28px; color: var(--ink); text-wrap: pretty; }
/* design-system ArrowLink: ink, 500, underlined 1.5px / 5px offset, shared arrow 16px; hover keeps the colour, focus = the one ring */
.cl3-switch a { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); font-weight: 500; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
.cl3-switch a:hover { color: var(--ink); text-underline-offset: 4px; }
.cl3-switch a:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 2px; }
.cl3-switch .arr { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.cl3-switch [hidden] { display: none; }

/* form: Musemind-style underline fields */
.cl3-form { display: grid; gap: 32px; }
.cl3-form[hidden] { display: none; }
.cl3-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px 24px; }
.cl3-form label > span, .cl3-need legend { display: block; margin-bottom: 4px; font: 500 16px/24px var(--text); color: var(--ink); }
.cl3-form label > span i { font-style: normal; color: #6B6B6B; font-weight: 400; }
.cl3-form input[type=text], .cl3-form input[type=email], .cl3-form textarea { width: 100%; height: 48px; padding: 0; border: 0; border-bottom: 1.5px solid var(--ink); border-radius: 0; background: transparent; color: var(--ink); font: 16px/24px var(--text); }
.cl3-form textarea { height: auto; min-height: 88px; padding: 12px 0; resize: vertical; }
.cl3-form ::placeholder { color: #8A8A8A; }
.cl3-form input:focus, .cl3-form textarea:focus { outline: none; border-bottom-color: #FF3C00; box-shadow: 0 1.5px 0 #FF3C00; }
.cl3-form [aria-invalid=true] { border-bottom-color: #D23100; }
.cl3-need { margin: 0; padding: 0; border: 0; min-width: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.cl3-need legend { padding: 0; float: left; width: 100%; margin-bottom: 12px; }
.cl3-need label { position: relative; }
.cl3-need input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.cl3-need label span { display: inline-flex; align-items: center; height: 40px; padding: 0 16px; border: 1px solid #E0E0E0; border-radius: 4px; background: #fff; font: 500 14px/20px var(--text); color: #1A1A1A; transition: border-color .2s, background .2s, color .2s; }
.cl3-need label:hover span { border-color: #BDBDBD; }
.cl3-need input:checked + span { border-color: #050505; background: #050505; color: #fff; }
.cl3-need input:focus-visible + span { box-shadow: 0 0 0 3px rgba(255,60,0,.25); }
.cl3-send { display: grid; gap: 12px; }
html body .cl3 .cl3-send .btn-dark { width: 100%; justify-content: center; min-height: 52px; height: 52px; padding: 0 24px; gap: 8px; border: 0; border-radius: 4px; background: var(--ink); color: #fff; font: 500 16px var(--text); cursor: pointer; }
html body .cl3 .cl3-send .btn-dark:hover, html body .cl3 .cl3-send .btn-dark:focus-visible { background: #1F1F1F; color: #fff; transform: none; }
html body .cl3 .cl3-note { margin: 0; font-size: 14px; line-height: 20px; color: #6B6B6B; }
html body .cl3 .cl3-note:empty { display: none; }
html body .cl3 .cl3-note.err { color: #D23100; }
html body .cl3 .cl3-note.ok { color: #2E5631; font-weight: 500; }

/* inline calendar (cal.com embed, loaded on first "Pick a time") */
.cl3-cal { min-height: 560px; }
.cl3-cal[hidden] { display: none; }
html body .cl3 .cl3-cal-load { margin: 0; font-size: 14px; color: #6B6B6B; }
.cl3.is-cal .cl3-panel { padding: 8px; }
@media (min-width: 1101px) { html body .cl3.is-cal .cl2-in { grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: 0 56px; } }

/* Ask AI row (Supafast): on, at the top of the grey band above the form. Two-tone title + one black pill of AI logos,
   each opening its tool with a question about Pentaclay; name tooltip on hover. Check each tool's answer before launch. */
.cl3-ai { background: var(--sheet, #F6F6F6); margin: 0; padding: 120px var(--gut) 0; display: grid; justify-items: center; gap: 40px; text-align: center; }
html body .cl3 .cl3-ai h2 { margin: 0; max-width: none; font: 500 40px/1.1 var(--head); letter-spacing: -0.03em; color: var(--ink); text-wrap: balance; }
html body .cl3 .cl3-ai h2 .tt-g { color: #767676; }
html body .cl3 .cl2-in { padding-top: 96px; }
.cl3-ai-btns { display: inline-flex; gap: 6px; padding: 6px; border-radius: 999px; background: var(--ink); }
.cl3-ai-btns a { position: relative; display: grid; place-items: center; width: 64px; height: 44px; border-radius: 999px; background: #fff; color: var(--ink); transition: background .2s, transform .2s; }
.cl3-ai-btns a:hover, .cl3-ai-btns a:focus-visible { background: #FFE1D6; }
.cl3-ai-btns a:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 2px; }
.cl3-ai-btns svg { width: 22px; height: 22px; fill: currentColor; }
.cl3-ai-btns svg.ai-stroke { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
.cl3-ai-btns a::after { content: attr(data-tip); position: absolute; left: 50%; bottom: calc(100% + 14px); transform: translate(-50%, 4px); padding: 6px 10px; border-radius: 4px; background: var(--ink); color: #fff; font: 500 13px/16px var(--text); white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity .15s, transform .15s; }
.cl3-ai-btns a::before { content: ''; position: absolute; left: 50%; bottom: calc(100% + 8px); width: 8px; height: 8px; background: var(--ink); transform: translate(-50%, 4px) rotate(45deg); opacity: 0; pointer-events: none; transition: opacity .15s, transform .15s; }
.cl3-ai-btns a:hover::after, .cl3-ai-btns a:focus-visible::after { opacity: 1; transform: translate(-50%, 0); }
.cl3-ai-btns a:hover::before, .cl3-ai-btns a:focus-visible::before { opacity: 1; transform: translate(-50%, 0) rotate(45deg); }

/* footer v4 (Musemind playful bottom + Design Monks colourful badges). Full width black, content on the 1240 column. */
html body .foot2 { padding: 0; }
html body .ft3 { background: var(--ink); color: #fff; overflow: hidden; }
html body .ft3 .ft-in { max-width: none; margin: 0; border-radius: 0; background: none; padding: 96px max(var(--gut), calc((100% - 1240px) / 2)) 0; }

/* top: brand block + link columns */
html body .ft3 .ft-top { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 48px 64px; padding-bottom: 64px; border: 0; }
.ft-brand { display: grid; justify-items: start; align-content: start; gap: 24px; }
.ft-brand .ft-logo { height: 32px; width: auto; display: block; }
html body .ft3 .ft-brand p { margin: 0; max-width: 24em; font-size: 18px; line-height: 28px; color: #C8C8C8; }
html body .ft3 .ft-cta { min-height: 48px; height: 48px; padding: 0 24px; gap: 8px; border-radius: 4px; background: #fff; color: var(--ink); font: 500 16px var(--text); }
html body .ft3 .ft-cta:hover, html body .ft3 .ft-cta:focus-visible { background: #D23100; color: #fff; transform: none; }
html body .ft3 .ft-cols { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 40px 24px; padding: 0; border: 0; }
html body .ft3 .ft-cols h3 { margin: 0 0 16px; font: 600 18px/28px var(--text); color: #FAFAFA; }
html body .ft3 .ft-cols a { display: block; padding: 4px 0; font-size: 16px; line-height: 24px; color: #A3A3A3; transition: color .2s; }
html body .ft3 .ft-cols a:hover, html body .ft3 .ft-cols a:focus-visible { color: #fff; }
html body .ft3 .ft-cols a.ft-all { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; color: #fff; font-weight: 500; }
html body .ft3 .ft-cols a.ft-all:hover { text-decoration: underline; text-underline-offset: 4px; }
.ft-all .arr { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }

/* colourful badges (Design Monks): their own centred row between dividers, brand pill + caption under it */
html body .ft3 .ft-badges { display: flex; flex-wrap: wrap; justify-content: center; gap: 24px 80px; margin: 0 0 80px; padding: 40px 0; border-top: 1px solid #262626; border-bottom: 1px solid #262626; }
.ftb { display: grid; justify-items: center; gap: 12px; text-align: center; }
.ftb-pill { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 16px; border-radius: 8px; font: 600 16px/1 var(--text); letter-spacing: -0.01em; }
.ftb-pill svg { width: 16px; height: 16px; fill: currentColor; }
.ftb-pill img { width: 16px; height: 16px; }
.ftb-framer .ftb-pill { background: #0099FF; color: #fff; }
.ftb-contra .ftb-pill { background: #fff; color: #050505; }
.ftb-cap { font-size: 16px; line-height: 24px; color: #A3A3A3; }
.ft-stars { color: #FFB800; letter-spacing: 2px; margin-right: 4px; }
.ftb:hover .ftb-cap { color: #fff; }

/* big solid wordmark (text only: icon = first 240 of 1337px cropped) sitting on the panel; the "y" tail dips into it
   (baseline at 201 of 257px, so the descender = 55/1097 of the width = 5.01%) */
.ft-mark { position: relative; z-index: 1; overflow: hidden; margin-bottom: -5.01%; }
.ft-mark img { display: block; width: 121.88%; max-width: none; margin-left: -21.88%; height: auto; }

/* location panel (Musemind): grey slab, three columns, gradient landmark icons */
.ft-panel { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; background: #1C1C1C; padding: calc(5.01% + 32px) 0; }
html body .ft3 .ftl { padding: 0 40px; border-left: 1px solid #2E2E2E; text-align: left; background: none; border-radius: 0; width: auto; }
html body .ft3 .ftl:first-child { border-left: 0; }
.ftl-ico { width: 48px; height: 48px; display: block; margin-bottom: 20px; fill: none; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; transition: transform .3s; }
.ftl:hover .ftl-ico { transform: translateY(-3px) rotate(-4deg); }
.ftl-top { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
html body .ft3 .ftl h3 { margin: 0; font: 600 24px/32px var(--text); letter-spacing: -0.02em; color: #FAFAFA; }
.ftl-time { padding: 4px 8px; border-radius: 4px; border: 1px solid #333; font: 500 12px/16px var(--text); color: #C8C8C8; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ftl-time:empty { display: none; }
html body .ft3 .ftl p { margin: 0; font-size: 14px; line-height: 22px; color: #A3A3A3; }
.ftl-mail { display: inline-block; margin-top: 12px; font: 500 16px/24px var(--text); color: #fff; }
.ftl-mail:hover { text-decoration: underline; text-underline-offset: 4px; }

/* bottom row: deck | legal | socials */
html body .ft3 .ft-bottom { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 24px; padding: 40px 0 48px; border: 0; }
.ft-deck2 { display: inline-flex; align-items: center; gap: 16px; justify-self: start; color: #fff; }
.ft-dl2 { display: grid; place-items: center; width: 48px; height: 48px; border-radius: 50%; background: #FF3C00; transition: transform .3s; }
.ft-dl2 svg { width: 20px; height: 20px; transform: rotate(90deg); fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.ft-deck2:hover .ft-dl2 { transform: translateY(3px); }
.ft-deck2 b { display: block; font: 600 20px/28px var(--text); letter-spacing: -0.01em; }
.ft-deck2 i { display: block; font-style: normal; font-size: 14px; line-height: 20px; color: #8A8A8A; }
html body .ft3 .ft-bottom p { margin: 0; font-size: 16px; line-height: 24px; color: #C8C8C8; text-align: center; }
html body .ft3 .ft-bottom p a { color: #C8C8C8; }
html body .ft3 .ft-bottom p a:hover { color: #fff; text-decoration: underline; text-underline-offset: 4px; }
.ft-social { display: flex; gap: 8px; justify-self: end; }
.ft-social a { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: #1C1C1C; color: #fff; transition: background .2s, color .2s; }
.ft-social a:hover, .ft-social a:focus-visible { background: #fff; color: var(--ink); }
.ft-social a:hover img { filter: none; }
.ft-social svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.ft-social img { width: 18px; height: 18px; filter: invert(1); }
/* name tooltip above each social button (hover and keyboard focus) */
.ft-social a { position: relative; }
.ft-social a::after { content: attr(data-tip); position: absolute; left: 50%; bottom: calc(100% + 10px); transform: translate(-50%, 4px); padding: 6px 10px; border-radius: 4px; background: #fff; color: var(--ink); font: 500 13px/16px var(--text); white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity .15s, transform .15s; }
.ft-social a::before { content: ''; position: absolute; left: 50%; bottom: calc(100% + 4px); width: 8px; height: 8px; background: #fff; transform: translate(-50%, 4px) rotate(45deg); opacity: 0; pointer-events: none; transition: opacity .15s, transform .15s; }
.ft-social a:hover::after, .ft-social a:focus-visible::after { opacity: 1; transform: translate(-50%, 0); }
.ft-social a:hover::before, .ft-social a:focus-visible::before { opacity: 1; transform: translate(-50%, 0) rotate(45deg); }
@media (prefers-reduced-motion: reduce) { .ft-social a::after, .ft-social a::before { transition: none; } }

@media (max-width: 1100px) {
  html body .ft3 .ft-top { grid-template-columns: minmax(0, 1fr); }
  html body .ft3 .ft-cols { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  html body .ft3 .ftl { padding: 0 24px; }
}
@media (max-width: 760px) {
  html body .ft3 .ft-in { padding-top: 64px; }
  html body .ft3 .ft-top { padding-bottom: 48px; }
  html body .ft3 .ft-badges { margin-bottom: 56px; gap: 24px 40px; }
  html body .ft3 .ft-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px 16px; }
  .ft-panel { grid-template-columns: minmax(0, 1fr); padding: calc(5.01% + 32px) 24px 8px; }
  html body .ft3 .ftl { padding: 0 0 32px; border-left: 0; }
  html body .ft3 .ftl + .ftl { padding-top: 32px; border-top: 1px solid #2E2E2E; }
  html body .ft3 .ft-bottom { grid-template-columns: minmax(0, 1fr); justify-items: start; gap: 24px; }
  html body .ft3 .ft-bottom p { text-align: left; }
  .ft-social { justify-self: start; }
}

@media (max-width: 1100px) {
  html body .cl3 .cl2-in { grid-template-columns: minmax(0, 1fr); gap: 48px; padding-top: 88px; padding-bottom: 88px; }
  .cl3-side { padding-top: 0; }
  html body .cl3 h2 { max-width: 18ch; }
}
@media (max-width: 640px) {
  html body .cl3 .cl2-in { gap: 40px; padding-top: 64px; padding-bottom: 64px; }
  .cl3-side { gap: 20px; }
  html body .cl3 .cl3-side > p { font-size: 16px; line-height: 24px; }
  .cl3-panel { padding: 24px 20px; }
  .cl3-form { gap: 28px; }
  .cl3-row { grid-template-columns: minmax(0, 1fr); gap: 28px; }
  html body .cl3 .cl3-switch { font-size: 16px; line-height: 24px; }
  .cl3-ai { padding-top: 64px; gap: 32px; }
  html body .cl3 .cl3-ai h2 { font-size: 32px; }
  html body .cl3 .cl3-ai h2 .tt-g { display: block; }
  html body .cl3 .cl2-in { padding-top: 64px; }
  .cl3-ai-btns a { width: 52px; height: 40px; }
  .cl3-cal { min-height: 640px; }
}

/* ==== parts/qa-round.css ==== */
/* QA round (14 Oct 2026, Erfan: "do all" on the full home-page QA). New parts: work wall (D1), real screens in the service cards
   (D2), proof band with the Comtel quote, Contra record and YC study (D3 + D4), the promise line under the process button (L2) and
   the "Not a fit if" line under the compare table (M4). Design-system values only: Inter, 48/40/32 two-tone H2 at 500,
   64/48/40 head → content, 8px cards, 6px inner, 4px tags, line #E6E6E6, ink / text-2 / mute. Loaded before ds-audit.css. */

/* ---------- shared section head (same as the other centred heads) ---------- */
.wall-head, .proof3-head { max-width: calc(1240px + 2 * var(--gut)); margin: 0 auto 64px; padding: 0 var(--gut); text-align: center; }
.wall-head h2, .proof3-head h2 { margin: 0 auto; max-width: 26ch; font: 500 48px/1.05 var(--head); letter-spacing: -0.035em; color: var(--ink); text-wrap: balance; }
.wall-head .tt-g, .proof3-head .tt-g { color: #767676; }

/* ---------- D1 work wall ---------- */
/* 16 Oct cleanup: the old wall rules (rows, track, 480px items, wall-move keyframes) were defined again in wall-devices.css, which
   wins; the duplicates were removed here (copy in site/_archive/proto-four-2026-10-16/parts/qa-round-before-cleanup.css). Only the CTA row stays. */
.wall-cta { display: flex; justify-content: center; margin-top: 40px; padding: 0 var(--gut); }

/* ---------- D2 real screens in the service cards ---------- */
html body .svc .svc-art.svc-shot { position: relative; place-items: stretch; }
.svc-win { position: absolute; inset: 32px 32px 0 32px; overflow: hidden; border-radius: 6px 6px 0 0; background: #fff; }
.svc-win img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top left; }
.svc-cap { position: absolute; left: 48px; bottom: 16px; padding: 4px 8px; border-radius: 4px; background: rgba(255,255,255,.94); color: var(--ink); font: 500 14px/20px var(--text); }

/* ---------- L2 promise line under the process button ---------- */
html body .pc-cta { flex-direction: column; align-items: center; }
html body .pc-cta .cta-promise { margin: 16px 0 0; font-size: 14px; line-height: 20px; color: var(--mute-d, #A3A3A3); text-align: center; }

/* ---------- D3 + D4 proof band ---------- */
html body .proof3 { padding: var(--section-gap) 0 0; }
.proof3-grid { max-width: calc(1240px + 2 * var(--gut)); margin: 0 auto; padding: 0 var(--gut); display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: 16px; }
.p3-card { display: flex; flex-direction: column; gap: 16px; margin: 0; padding: 32px; border: 1px solid var(--line, #E6E6E6); border-radius: 8px; background: #fff; color: var(--ink); }
a.p3-card:hover, a.p3-card:focus-visible { border-color: rgba(5,5,5,.18); }
.p3-quote { justify-content: space-between; background: var(--sheet, #F6F6F6); border-color: transparent; }
.p3-quote blockquote { margin: 0; font: 500 32px/40px var(--head); letter-spacing: -0.02em; color: var(--ink); text-wrap: balance; }
.p3-quote figcaption { display: flex; align-items: center; gap: 12px; font-size: 14px; line-height: 20px; color: #555555; }
.p3-quote figcaption img { height: 24px; width: auto; }
.p3-num { font: 500 48px/1 var(--head); letter-spacing: -0.035em; color: var(--ink); }
.p3-num i { font-style: normal; color: #767676; font-size: 32px; }
.p3-stars { color: var(--accent, #FF3C00); letter-spacing: 2px; font-size: 18px; line-height: 1; margin-top: -4px; }
.p3-line { font-size: 16px; line-height: 24px; color: #444444; text-wrap: pretty; }
.p3-link { display: inline-flex; align-items: center; gap: 6px; margin-top: auto; font: 500 16px/24px var(--text); color: var(--ink); }
.p3-link .arr { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.p3-vid { display: block; border-radius: 6px; overflow: hidden; aspect-ratio: 16 / 9; background: var(--sheet, #F6F6F6); }
.p3-vid img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* ---------- M4 not-a-fit line ---------- */
html body .cmp .cmp-nofit { margin: 24px 0 0; font-size: 16px; line-height: 24px; color: #444444; }
html body .cmp .cmp-nofit b { font-weight: 500; color: var(--ink); }

@media (max-width: 1100px) {
  .wall-head, .proof3-head { margin-bottom: 48px; }
  .wall-head h2, .proof3-head h2 { font-size: 40px; }
  .proof3-grid { grid-template-columns: 1fr 1fr; }
  .p3-quote { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  .wall-head, .proof3-head { margin-bottom: 40px; }
  .wall-head h2, .proof3-head h2 { font-size: 32px; }
  .proof3-grid { grid-template-columns: minmax(0, 1fr); }
  .p3-card { padding: 24px; }
  .p3-quote blockquote { font-size: 24px; line-height: 32px; }
  .svc-win { inset: 16px 16px 0 16px; }
  .svc-cap { left: 24px; bottom: 12px; }
}

/* ==== parts/ds-audit.css ==== */
/* Design-system audit (14 Oct 2026, Erfan: "audit the full website… every font, colour, roundness, style, form must match our
   design system… check every hover, we should have one kind"). Loaded LAST. Source of truth: design-system/project/tokens.json
   (radius 4 / 6 / 8 / 12 / round; Inter 400/500/600; type scale 12-uppercase / 14 / 16 / 18 / 20 / 24 / 32 / 40 / 48 / 64 / 80)
   + interaction.md (hover) + later decisions (two-tone grey #767676 on light / #8A8A8A on dark, category tints).
   Every rule below fixes one value the audit scan found off-system. */

/* ---------- colour: text ---------- */
html body .clients .clients-label,
html body .sectors .se-head > p,
html body .pstory .cap-group > span,
html body .pstory li,
html body .svc .svc-head > p,
html body .cl3-need label span { color: var(--ink); }                       /* #222 / #1A1A1A / #121212 → ink */
html body .hero .hero-sub,
html body .hero .rb-copy small,
html body .cases .cs-chips > li,
html body .founder2 .fl-copy > p,
html body .cl3 .cl3-side > p { color: #444444; }                              /* #2A2A2A / #333 / #4A4A4A → text-2 */
html body .cases .cs-year,
html body .cases small, html body .cases .cs-quote figcaption small, html body .cases .cs-facts small,
html body .sectors .se-dlv,
html body .svc .svc-who,
html body .svc small,
html body .process2 .pc-desc,
html body .cmp .cmp-opt,
html body .faq2 .fq-mail, html body .faq2 .fq-mail > span,
html body .founder2 dd,
html body .founder2 .fl-sign > span,
html body .founder2 .fl-cta > span,
html body .cl3-form label > span i { color: #555555; }                          /* #6B6B6B on white/sheet → mute (lightest body grey) */
html body .sectors .se-meta > b { color: #666666; }                           /* uppercase label #2A2A2A → label */
html body .process2 .pr-head > p,
html body .process2 .pc-tabs b { color: var(--mute-d, #A3A3A3); }               /* #BDBDBD / #E6E6E6 on dark → mute-d */
html body .process2 .pc-tabs button[aria-selected=true] b { color: #fff; }
html body .process2 .pc-num { color: #E6E6E6; font-size: 80px; font-weight: 600; }   /* #EBEBEB 88px 700 → line, 80px, 600 */
html body .cases .cs-chips > li.cs-stage { color: #2E5631; background: #E4EEDF; }    /* green chip → sage tint pair */
html body .ft3 .ft-brand p,
html body .ft3 .ft-bottom p, html body .ft3 .ft-bottom p a,
html body .ft3 .ftl-time,
html body .ft3 .ft-deck2 i { color: var(--mute-d, #A3A3A3); }                   /* #C8C8C8 / #8A8A8A on ink → mute-d */
html body .ft3 h3, html body .ft3 .ftl h3, html body .ft3 .ft-cols h3 { color: #fff; }   /* #FAFAFA → white */
html body .ft3 .ft-deck2 b { color: #fff; }
html body .ft-stars { color: var(--accent, #FF3C00); }                          /* stars are accent, not gold */

/* ---------- colour: fills ---------- */
html body .cases .cs-chips > li:not(.cs-stage),
html body .cases .cs-facts,
html body .cases .cs-quote,
html body .hero .hi-video { background-color: var(--sheet, #F6F6F6); }        /* #F2F2F2 / #FAFAFA / #F3F3F1 → sheet */
html body section.pstory .cap .cap-group { background: var(--line, #E6E6E6); color: var(--ink); }   /* #EBEBEB / #1A1A1A → line / ink */
html body section.pstory .cap .cap-row li { color: var(--ink); border-bottom-color: var(--line, #E6E6E6); }   /* #121212 / #E3E3E3 → ink / line */

/* ---------- colour: lines ---------- */
html body .checks2 .ck-fields input,
html body .cl3-need label span { border-color: var(--line, #E6E6E6); }        /* #E0E0E0 → line */
html body .pstory li { border-bottom-color: var(--line, #E6E6E6); }            /* #E3E3E3 → line */
html body .founder2 .fl-sign > b { border-color: var(--line, #E6E6E6); }      /* #CFCFCB → line */
html body .ft3 .ft-badges { border-color: var(--line-dark, #2A2A2A); }        /* #262626 → line-dark */
html body .ft3 .ftl { border-left-color: var(--line-dark, #2A2A2A); }         /* #2E2E2E → line-dark */
html body .ft3 .ftl + .ftl { border-top-color: var(--line-dark, #2A2A2A); }
html body .ft3 .ftl-time { border-color: var(--line-dark, #2A2A2A); font-size: 14px; line-height: 20px; }   /* #333, 12px → line-dark, 14px */

/* ---------- type scale ---------- */
html body .cmp .cmp-name > small { font-size: 14px; }                         /* 15 → 14 */
html body .founder2 .fl-copy > p { font-size: 16px; line-height: 24px; }      /* 17 → 16 body */
html body .faq2 .fq-ask > h3 { font-size: 24px; line-height: 32px; }          /* 22 → 24 */
html body section.founder2.fl h2.tt { font-size: 48px; }                                   /* every section H2: 48 / 40 / 32 */
@media (max-width: 1100px) { html body section.founder2.fl h2.tt { font-size: 40px; } }
@media (max-width: 760px) { html body section.founder2.fl h2.tt { font-size: 32px; } html body .process2 .pc-num { font-size: 64px; } }

/* ---------- corners (4 tags+buttons / 6 inner / 8 cards / 12 large panels / round = round things only) ---------- */
html body .cmp .cmp-table > .cmp-row { border-radius: 8px; }                   /* 16 → 8 (card) */
html body .cmp .cmp-tag { border-radius: 4px; background: var(--accent-deep, #D23100); color: #fff;
  font-size: 12px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; }   /* pill + 12px lowercase on #FF3C00 → tag */

/* ---------- buttons: one size set (40 small / 48 large) ---------- */
html body .faq2 .fq-ask .btn, html body .founder2 .fl-cta .btn { min-height: 40px; height: 40px; }   /* 42 → 40 */
html body .cl3 .cl3-send .btn-dark { min-height: 48px; height: 48px; }          /* 52 → 48 */

/* ---------- ONE hover system (interaction.md) ----------
   Primary + icon buttons: fill accent-deep, white text/icon, arrow swap. Subtle: one step darker grey (zfix.css).
   Links: colour stays, no underline appears; the arrow swaps. Muted footer links go white (same pattern as header links).
   Nothing lifts, tilts or nudges. One focus ring: 2px accent-deep, 2px offset. */
html body .ck-form .btn-dark:hover, html body .ck-form .btn-dark:focus-visible,
html body .cl3 .cl3-send .btn-dark:hover, html body .cl3 .cl3-send .btn-dark:focus-visible { background: var(--accent-deep, #D23100); color: #fff; }
html body .cl3-ai-btns a:hover, html body .cl3-ai-btns a:focus-visible,
html body .ft-social a:hover, html body .ft-social a:focus-visible,
html body .process2 .pc-nav button:hover, html body .process2 .pc-nav button:focus-visible,
html body .ft-deck2:hover .ft-dl2, html body .ft-deck2:focus-visible .ft-dl2 { background: var(--accent-deep, #D23100); color: #fff; }
html body .ft-social a:hover img, html body .ft-social a:focus-visible img { filter: invert(1); }
html body .ft-deck2:hover .ft-dl2 { transform: none; }
html body .ftl:hover .ftl-ico { transform: none; }
html body .ft3 .ft-cols a.ft-all:hover,
html body .ftl-mail:hover,
html body .ft3 .ft-bottom p a:hover { text-decoration: none; }
html body .ft3 .ft-bottom p a:hover { color: #fff; }
html body .faq2 .fq-mail a:hover, html body .founder2 .fl-sign a:hover { color: inherit; }
html body .cl3-switch a:hover { text-underline-offset: 5px; }                  /* resting underline stays as it is */
/* the one focus ring on form controls */
html body .ck-fields input:focus-visible, html body .cl3-form input[type=text]:focus-visible,
html body .cl3-form input[type=email]:focus-visible, html body .cl3-form textarea:focus-visible {
  outline: 2px solid var(--accent-deep, #D23100); outline-offset: 2px; box-shadow: none; }
html body .ck-fields input:focus:not(:focus-visible), html body .cl3-form input:focus:not(:focus-visible), html body .cl3-form textarea:focus:not(:focus-visible) { box-shadow: none; }
html body .cl3-need input:focus-visible + span { box-shadow: none; outline: 2px solid var(--accent-deep, #D23100); outline-offset: 2px; }
html body .cl3-ai-btns a:focus-visible, html body .ft-social a:focus-visible { outline: 2px solid var(--accent-deep, #D23100); outline-offset: 2px; }

/* phone sizes found off the scale at 375px */
@media (max-width: 760px) {
  html body .svc .svc-txt > h3,
  html body .process2 .pc-txt > h3,
  html body .checks2 .ck-form-copy > h3,
  html body .founder2 dt { font-size: 24px; line-height: 32px; }                 /* 30 / 26 / 26 / 22 → 24 */
  html body .process2 .pc-txt > p.pc-lead { font-size: 16px; line-height: 24px; } /* 17 → 16 */
  html body .founder2 dd { font-size: 14px; line-height: 20px; }                 /* 13 → 14 (reading text never under 14) */
}

/* ---------- round 2 (Erfan: "always implement on our design system", "remove the dark grey", "use Behance", "fix the arrow") ---------- */
/* Ask AI: design-system corners (strip = 8px card radius, buttons = 4px button radius, nested 8 − 4 gap) instead of the capsule */
html body .cl3-ai-btns { gap: 4px; padding: 4px; border-radius: 8px; }
html body .cl3-ai-btns a { border-radius: 4px; }
/* no dark-grey fills on the dark grounds: the panel and the icon buttons become line-dark outlines on ink */
html body .ft3 .ft-panel { background: transparent; border: 1px solid var(--line-dark, #2A2A2A); }
html body .ft-social a { background: transparent; border: 1px solid var(--line-dark, #2A2A2A); }
html body .ft-social a:hover, html body .ft-social a:focus-visible { border-color: var(--accent-deep, #D23100); }
html body .ft-social svg.ico-fill { fill: currentColor; stroke: none; }
html body .process2 .pc-nav button { background: transparent; border: 1px solid var(--line-dark, #2A2A2A); }
html body .process2 .pc-nav button:hover, html body .process2 .pc-nav button:focus-visible { border-color: var(--accent-deep, #D23100); }
/* text links: the ArrowLink style (ink, 500, ink underline 1.5px at 5px) and the one shared arrow, no typed "→", no orange underline */
html body .faq2 .fq-mail a { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); font-weight: 500; text-decoration: underline; text-decoration-color: currentColor; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
html body .faq2 .fq-mail .arr { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
html body .founder2 .fl-sign a { color: var(--ink); font-weight: 500; text-decoration-color: currentColor; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
/* one form-field style everywhere = the audit form's boxed field (tokens.json: inputs use r-s 4px): 48px, 1px line border,
   4px corners, 16px side padding, white fill; the contact form's Musemind underline fields are converted */
html body .cl3-form input[type=text], html body .cl3-form input[type=email], html body .cl3-form textarea {
  height: 48px; padding: 0 16px; border: 1px solid var(--line, #E6E6E6); border-radius: 4px; background: #fff; }
html body .cl3-form textarea { height: auto; min-height: 96px; padding: 12px 16px; }
html body .cl3-form input:focus, html body .cl3-form textarea:focus { border-color: var(--line, #E6E6E6); box-shadow: none; }
html body .cl3-form [aria-invalid=true] { border-color: var(--accent-deep, #D23100); }
html body .cl3-form label > span, html body .cl3-need legend { margin-bottom: 8px; font-size: 14px; line-height: 20px; }
html body .cl3-form { gap: 24px; }
html body .ck-fields input:focus { border-color: var(--line, #E6E6E6); box-shadow: none; }
html body .cl3 .cl3-ai + .cl2-in { margin-top: -1px; }   /* the Ask AI row and the form band meet on a fractional pixel: overlap 1px so no seam shows */

/* footer wordmark as live text (Erfan: "write Pentaclay as text, don't use the image"): heading face Inter 600 opsz 32, -0.04em,
   sized to fill the content column (the word is 4.1em wide, so 100cqi / 4.12). line-height 1 puts the baseline 0.135em above the
   box bottom, so margin-bottom −0.135em sets the panel top on the baseline; the "y" tail (0.21em) dips into the panel. */
html body .ft3 .ft-in { container-type: inline-size; }
html body .ft3 .ft-mark { --wm: calc(100cqi / 4.12); overflow: visible; margin-bottom: 0; }
html body .ft3 .ft-mark span { display: block; margin-bottom: calc(var(--wm) * -0.135); font: 600 var(--wm)/1 var(--head); font-variation-settings: 'opsz' 32; letter-spacing: -0.04em; color: #fff; white-space: nowrap; }
html body .ft3 .ft-panel { padding-top: calc(100cqi / 4.12 * 0.21 + 32px); padding-bottom: calc(100cqi / 4.12 * 0.21 + 32px); }
@media (max-width: 760px) { html body .ft3 .ft-panel { padding: calc(100cqi / 4.12 * 0.21 + 32px) 24px 8px; } }

/* ONE hover speed everywhere (interaction.md: fills/colours 0.4s, arrow swap 0.6s): every colour, fill, border, underline and
   shadow change on hover eases over 0.4s with the buttons' curve, nothing snaps */
html body main a, html body main button, html body main summary, html body main details, html body main label span,
html body footer a, html body .se-card, html body .cmp-m, html body .pc-tabs button, html body .pc-nav button,
html body .cl3-ai-btns a, html body .ft-social a, html body .ftb-cap, html body .ft-dl2, html body .fq-list details {
  transition-property: color, background-color, border-color, box-shadow, text-decoration-color, outline-color, opacity, filter !important;
  transition-duration: .4s !important; transition-timing-function: cubic-bezier(.25, 1, .5, 1) !important; }
html body .cl3-ai-btns a::after, html body .cl3-ai-btns a::before,
html body .ft-social a::after, html body .ft-social a::before { transition-duration: .4s; transition-timing-function: cubic-bezier(.25, 1, .5, 1); }
@media (prefers-reduced-motion: reduce) {
  html body main a, html body main button, html body main summary, html body footer a, html body .ftb-cap { transition-duration: .01s !important; }
}

/* tooltip pointer: a true centred triangle (border trick) touching the label, instead of a rotated square that sat off-centre */
html body .ft-social a::before, html body .cl3-ai-btns a::before {
  width: 0; height: 0; background: none; border: 6px solid transparent; border-bottom-width: 0;
  transform: translate(-50%, 4px); }
html body .ft-social a::before { border-top-color: #fff; bottom: calc(100% + 4px); }
html body .ft-social a::after { bottom: calc(100% + 10px); }
html body .cl3-ai-btns a::before { border-top-color: var(--ink); bottom: calc(100% + 8px); }
html body .cl3-ai-btns a::after { bottom: calc(100% + 14px); }
html body .ft-social a:hover::before, html body .ft-social a:focus-visible::before,
html body .cl3-ai-btns a:hover::before, html body .cl3-ai-btns a:focus-visible::before { transform: translate(-50%, 0); }

/* square boxes the first scan missed (it only checked non-zero radii): every bordered or filled box gets a token corner */
html body .ft3 .ft-panel { border-radius: 12px; }      /* large panel = r-l */
html body .cl3 .cl3-panel { border-radius: 8px; }      /* card = r-m (was square for the Musemind look) */
html body .ftl-mail { display: inline-flex; align-items: center; gap: 6px; }
html body .ftl-mail .arr { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
html body .ftb-behance .ftb-pill { background: #1769FF; color: #fff; }   /* Behance brand blue, like Framer blue (external brand badge) */

/* form-field focus (Erfan: "the stroke border itself should go from grey to orange", no ring outside it): the field's own 1px
   border eases to accent-deep and thickens to 2px with an inset shadow, so nothing sits outside the field. Same on both forms
   and on the chips. Overrides the outer ring set above for fields only; buttons and links keep the 2px offset ring. */
html body .ck-fields input, html body .cl3-form input[type=text], html body .cl3-form input[type=email], html body .cl3-form textarea, html body .cl3-need label span {
  transition: border-color .4s cubic-bezier(.25, 1, .5, 1), box-shadow .4s cubic-bezier(.25, 1, .5, 1) !important; }
html body .ck-fields input:focus, html body .ck-fields input:focus-visible,
html body .cl3-form input[type=text]:focus, html body .cl3-form input[type=text]:focus-visible,
html body .cl3-form input[type=email]:focus, html body .cl3-form input[type=email]:focus-visible,
html body .cl3-form textarea:focus, html body .cl3-form textarea:focus-visible {
  outline: none; border-color: var(--ink, #050505); box-shadow: inset 0 0 0 1px var(--ink, #050505); }
html body .cl3-need input:focus-visible + span { outline: none; border-color: var(--ink, #050505); box-shadow: inset 0 0 0 1px var(--ink, #050505); }
/* Erfan 17 Oct: an orange field border read as an error, so focused fields and chips use ink, not accent-deep. */
/* Erfan 17 Oct: picked chips read as errors in orange too. Picked = ink fill, white text (like the Send button).
   Keyboard focus on a picked chip draws a 2px white inset line inside the ink, since an ink border would not show. */
html body .cl3-need input:checked + span, html body .cl3-need label:hover input:checked + span { border-color: var(--ink, #050505); background: var(--ink, #050505); color: #FFFFFF; }
html body .cl3-need input:checked:focus-visible + span { border-color: var(--ink, #050505); box-shadow: inset 0 0 0 2px #FFFFFF; }

/* design-system doc sync (14 Oct): Ask AI icon buttons 44 → 40px (control heights are 40 / 48 only);
   tooltip label 13 → 14px (type scale; reading text never under 14) */
html body .cl3-ai-btns a { height: 40px; }
html body .cl3-ai-btns a::after, html body .ft-social a::after { font-size: 14px; line-height: 20px; }

/* ==== parts/wall-devices.css ==== */
/* Work wall v2 (16 Oct 2026, Erfan after Design Monks' device gallery: "look how beautiful… do a mock-up so that it looks good" and
   "we are repeating the same four designs… bring more of our designs"). Real Pentaclay pages inside CSS-drawn devices: a landscape
   tablet for desktop pages, a phone for mobile pages, all the same height so the row reads as one shelf. One row moves slowly, pauses
   on hover; captions name the client (or nothing for our own templates, per the 15 Oct "don't write our template" rule).
   Devices are pure CSS so they stay sharp at every size and need no PNG frames. */
html body .wall { padding: var(--section-gap) 0 0; }
.wall .wall-rows { --dh: 400px; display: grid; gap: 0; overflow: hidden; padding: 8px 0 40px;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); }
.wall .wall-row { display: flex; gap: 32px; width: max-content; }
.wall .wall-track { display: flex; align-items: flex-start; gap: 32px; margin: 0; padding: 0; list-style: none; animation: wall-move 420s linear infinite; } /* 23 items (~11,400px): 420s keeps the old ~27px/s pace */
.wall .wall-rows:hover .wall-track { animation-play-state: paused; }
@keyframes wall-move { from { transform: translateX(0); } to { transform: translateX(calc(-100% - 32px)); } }
.wall .wall-track li { flex: none; width: auto; }
.wall .wall-track figure { margin: 0; display: grid; gap: 16px; justify-items: start; }
.wall .wall-track figcaption { font-size: 14px; line-height: 20px; color: #555; }
.wall .wall-track figcaption b { font-weight: 500; color: var(--ink); margin-right: 4px; }

/* the devices */
.dv { position: relative; display: block; height: var(--dh); background: #050505; overflow: hidden;
  box-shadow: inset 0 0 0 1px #2A2A2A, 0 1px 0 rgba(5, 5, 5, 0.04), 0 40px 70px -40px rgba(5, 5, 5, 0.45), 0 0 0 1px rgba(5, 5, 5, 0.06); /* shadow-window token */ }
.dv img { position: absolute; display: block; object-fit: cover; object-position: top center; background: #F6F6F6; border: 0; border-radius: 0; width: auto; height: auto; }
/* corners from tokens.json only (16 Oct, Erfan: nothing outside the design system): outer r-l 12px; screen = outer minus bezel.
   tablet: 8px bezel -> 4px screen (r-s). phone: 6px bezel -> 6px screen (r-inner). No island or side buttons (decoration). */
.dv-tab { aspect-ratio: 1.52; border-radius: 12px; }
.dv-tab img { inset: 8px; width: calc(100% - 16px); height: calc(100% - 16px); border-radius: 4px; }
.dv-phone { aspect-ratio: 0.482; border-radius: 12px; }
.dv-phone img { inset: 6px; width: calc(100% - 12px); height: calc(100% - 12px); border-radius: 6px; }
/* hover: the device lifts a little */
.wall .wall-track .dv { transition: transform .5s cubic-bezier(.2,.8,.2,1); }
.wall .wall-track a.wall-link:hover .dv, .wall .wall-track a.wall-link:focus-visible .dv { transform: translateY(-6px); } /* only linked items lift */

@media (max-width: 760px) {
  .wall .wall-rows { --dh: 260px; padding-bottom: 24px; }
  .wall .wall-row, .wall .wall-track { gap: 24px; }
}
@media (prefers-reduced-motion: reduce) {
  .wall .wall-track { animation: none; }
  .wall .wall-row { width: auto; overflow-x: auto; }
  .wall .wall-track[aria-hidden="true"] { display: none; }
  .wall .wall-track .dv { transition: none; }
}
/* captions: client name only, linked to the live site (16 Oct) */
/* whole item = one link (16 Oct, Erfan: "make them clickable… redirect to the client websites"); unlinked items keep the default cursor */
.wall .wall-track a.wall-link { display: block; color: inherit; text-decoration: none; cursor: pointer; border-radius: 12px; }
.wall .wall-track a.wall-link:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 2px; } /* same focus ring as the closing/footer links */
.wall .wall-track a.wall-link .wall-name { font-weight: 500; color: var(--ink); }
.wall .wall-track a.wall-link:hover .wall-name, .wall .wall-track a.wall-link:focus-visible .wall-name { text-decoration: underline; text-underline-offset: 4px; }
.wall .wall-track figcaption b { font-weight: 500; color: var(--ink); }
/* 16 Oct, Erfan: "the gap between button is too much, check with all other". Captions → "See all work" = 48px, the same as the
   How a project runs section's button gap (the other section-end CTA). 8px row padding kept for the hover lift. */
html body .wall .wall-rows { padding-bottom: 8px; }
html body .wall .wall-cta { margin-top: 40px; }
/* 16 Oct, Erfan: no underline on hover; the device lift alone shows it's a link */
html body .wall a.wall-link .wall-name, html body .wall a.wall-link:hover .wall-name, html body .wall a.wall-link:focus-visible .wall-name,
html body .wall .wall-track figcaption a, html body .wall .wall-track figcaption a:hover { text-decoration: none !important; }
/* device screens match the screenshot shape exactly, so nothing is cropped (Erfan, 17 Oct: "cut off left and right, the button is cut off"):
   tablet screen 16:10 (1440x900 shots), phone screen 390:844. Frame = screen + bezel. */
html body .dv.dv-tab { aspect-ratio: auto !important; width: calc((var(--dh) - 16px) * 1.6 + 16px) !important; }
html body .dv.dv-phone { aspect-ratio: auto !important; width: calc((var(--dh) - 12px) * 0.46209 + 12px) !important; }
html body .dv-tab img { inset: 8px !important; width: calc(100% - 16px) !important; height: calc(100% - 16px) !important; object-fit: cover; }
html body .dv-phone img { inset: 6px !important; width: calc(100% - 12px) !important; height: calc(100% - 12px) !important; object-fit: cover; }

/* ==== parts/contact-face.css ==== */
/* 16 Oct 2026 (Erfan: "Let's not show my face in here, but let's show my face beside the contact form." / "all that link text are too gray")
   1) FAQ ask card: the avatar is gone, so the heading starts the card.
   2) Closing band: founder row at the top of the form panel (who you're contacting).
   3) Footer text on ink: #A3A3A3 (mute-d) -> #E6E6E6 (line token, 16:1 on #050505); headings and hover stay white. */

/* 1 · FAQ ask card without the photo */
html body .faq2 .fq-ask > h3 { margin-top: 0; }

/* 2 · Founder row in the contact panel */
html body .cl3 .cl3-face { display: flex; align-items: center; gap: 16px; margin: 0 0 32px; padding: 0 0 24px; border-bottom: 1px solid var(--line, #E6E6E6); }
html body .cl3 .cl3-face img { flex: none; display: block; width: 56px; height: 56px; border-radius: 50%; object-fit: cover; }
html body .cl3 .cl3-face p { margin: 0; display: flex; flex-direction: column; }
html body .cl3 .cl3-face b { font: 500 18px/28px var(--text); color: var(--ink, #050505); letter-spacing: -0.01em; }
html body .cl3 .cl3-face span { font: 400 16px/24px var(--text); color: #555555; }
/* calendar mode: the panel drops to 8px padding, so the row brings its own */
html body .cl3.is-cal .cl3-face { margin: 0 0 8px; padding: 16px 16px 16px; }
@media (max-width: 760px) {
  html body .cl3 .cl3-face { gap: 12px; margin-bottom: 24px; padding-bottom: 20px; }
  html body .cl3 .cl3-face img { width: 48px; height: 48px; }
  html body .cl3 .cl3-face b { font-size: 16px; line-height: 24px; }
  html body .cl3 .cl3-face span { font-size: 14px; line-height: 20px; }
}

/* 3 · Footer: lighter text on ink, white on hover */
html body .ft3 .ft-brand p,
html body .ft3 .ft-cols a:not(.ft-all),
html body .ft3 .ftb-cap,
html body .ft3 .ftl p,
html body .ft3 .ftl-time,
html body .ft3 .ft-bottom p,
html body .ft3 .ft-bottom p a,
html body .ft3 .ft-deck2 i { color: #BDBDBD; } /* link-d token, 16 Oct: E6 read too bright */
html body .ft3 .ft-cols a:hover, html body .ft3 .ft-cols a:focus-visible,
html body .ft3 .ftb:hover .ftb-cap, html body .ft3 .ftb:focus-visible .ftb-cap,
html body .ft3 .ft-bottom p a:hover, html body .ft3 .ft-bottom p a:focus-visible,
html body .ft3 .ft-deck2:hover i { color: #fff; }
html body .ft3 .ft-cols h3 { color: #fff; }

/* ==== parts/footer-badges.css ==== */
/* Footer sticker set v3 (16 Oct). Erfan on v2 (thin-edged strips): "This is fun, but the design is not very good. Make the
   design better." One matched set of square vinyl stickers: same size and same build (big mark top-left, one bold word
   bottom-left, a short note under it), a thick die-cut edge, a soft sheen across the top (a gradient, not a shadow), tilted
   and overlapping like stickers slapped on a laptop lid. Language of the page's approved "That's us" sticker. Hover: the
   sticker straightens and lifts on a springy curve. First time in view: they slap on one after another and Contra's stars
   fill one by one (parts/footer-badges.js). Reduced motion: static. No shadows; radius 12 (r-l). Same three claims and links. */
html body .ft3 .ft-badges { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 0; margin: 0 0 80px; padding: 72px 16px 64px; border-top: 1px solid var(--line-dark, #2A2A2A); border-bottom: 0; }

/* the sticker. ds-audit.css forces footer links to transition colours only (!important), so transform is re-listed here */
html body .ft3 .ft-badges a.stk {
  position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: space-between; gap: 24px;
  width: 200px; height: 200px; box-sizing: border-box; margin: 0 -12px; padding: 24px;
  border: 6px solid #fff; border-radius: 12px; overflow: hidden; text-decoration: none; white-space: nowrap;
  transform: translateY(var(--y)) rotate(var(--r));
  transition-property: transform, color, background-color, border-color !important; transition-duration: .5s !important;
  transition-timing-function: cubic-bezier(.34, 1.56, .64, 1) !important; }
/* vinyl sheen: a soft light band across the top-left, under the content */
html body .ft3 .ft-badges a.stk::before { content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: linear-gradient(135deg, rgba(255,255,255,.22) 0%, rgba(255,255,255,0) 42%); }
html body .ft3 .ft-badges a.stk > * { position: relative; z-index: 1; }
html body .ft3 .ft-badges a.stk:hover, html body .ft3 .ft-badges a.stk:focus-visible { z-index: 4; transform: translateY(calc(var(--y) - 8px)) rotate(0deg); }
html body .ft3 .ft-badges a.stk:focus-visible { outline: 2px solid var(--accent, #FF3C00); outline-offset: 4px; }

.stk-framer  { --r: -8deg; --y: -6px;  background: var(--badge-framer, #0099FF); color: #fff; }
.stk-contra  { --r: 4deg;  --y: 14px; z-index: 2 !important; background: #fff; color: #050505; }
.stk-behance { --r: -3deg; --y: -2px;  background: var(--badge-behance, #1769FF); color: #fff; }
/* the white sticker needs its edge drawn: a hairline just inside the die-cut */
html body .ft3 .ft-badges a.stk-contra { border-color: #fff; box-shadow: inset 0 0 0 1px #E6E6E6; }
html body .ft3 .ft-badges a.stk-contra::before { background: linear-gradient(135deg, rgba(5,5,5,.04) 0%, rgba(5,5,5,0) 42%); }

.stk-logo { display: block; flex: none; width: 40px; height: 40px; fill: currentColor; }
img.stk-logo { width: 40px; height: 40px; }
.stk-txt { display: grid; gap: 4px; text-align: left; }
.stk-row { display: flex; align-items: center; gap: 8px; }
.stk-big { font: 600 32px/40px var(--text); letter-spacing: -0.03em; font-variant-numeric: tabular-nums; }
.stk-note { font: 500 14px/20px var(--text); opacity: .86; }
.stk-contra .stk-note { color: #555555; opacity: 1; }
.stk-stars { display: flex; gap: 2px; color: var(--accent, #FF3C00); }
.stk-stars svg { width: 16px; height: 16px; fill: currentColor; }

/* slap-on, only once the script has armed the row (no script = stickers simply shown) */
.ft-badges.stk-armed:not(.is-in) .stk { opacity: 0; }
.ft-badges.stk-armed.is-in .stk { animation: stk-slap .55s cubic-bezier(.34, 1.56, .64, 1) backwards; }
.ft-badges.stk-armed.is-in .stk-contra { animation-delay: .12s; }
.ft-badges.stk-armed.is-in .stk-behance { animation-delay: .24s; }
@keyframes stk-slap {
  0%   { opacity: 0; transform: translateY(var(--y)) rotate(calc(var(--r) * 3)) scale(1.15); }
  45%  { opacity: 1; }
  100% { opacity: 1; transform: translateY(var(--y)) rotate(var(--r)) scale(1); }
}
.ft-badges.stk-armed:not(.is-in) .stk-stars svg { color: #E6E6E6; }
.ft-badges.stk-armed.is-in .stk-stars svg { animation: stk-star .4s cubic-bezier(.34, 1.56, .64, 1) backwards; }
.ft-badges.stk-armed.is-in .stk-stars svg:nth-child(1) { animation-delay: .5s; }
.ft-badges.stk-armed.is-in .stk-stars svg:nth-child(2) { animation-delay: .6s; }
.ft-badges.stk-armed.is-in .stk-stars svg:nth-child(3) { animation-delay: .7s; }
.ft-badges.stk-armed.is-in .stk-stars svg:nth-child(4) { animation-delay: .8s; }
.ft-badges.stk-armed.is-in .stk-stars svg:nth-child(5) { animation-delay: .9s; }
@keyframes stk-star { 0% { color: #E6E6E6; transform: scale(.6); } 100% { color: var(--accent, #FF3C00); transform: scale(1); } }

@media (prefers-reduced-motion: reduce) {
  html body .ft3 .ft-badges a.stk { transition-duration: .01s !important; }
  .ft-badges .stk, .ft-badges .stk-stars svg { animation: none !important; opacity: 1 !important; }
  .ft-badges .stk-stars svg { color: var(--accent, #FF3C00) !important; }
}

/* phones: smaller stickers, still one overlapping row */
@media (max-width: 760px) {
  html body .ft3 .ft-badges { margin-bottom: 56px; padding: 48px 0 48px; }
  html body .ft3 .ft-badges a.stk { width: 128px; height: 128px; margin: 0 -8px; padding: 14px; gap: 8px; border-width: 4px; }
  .stk-logo, img.stk-logo { width: 24px; height: 24px; }
  .stk-big { font-size: 20px; line-height: 24px; }
  .stk-note { font-size: 14px; line-height: 16px; white-space: normal; }
  .stk-stars svg { width: 12px; height: 12px; }
  .stk-framer { --y: -4px; } .stk-contra { --y: 8px; } .stk-behance { --y: 0px; }
}
/* v3.1: one-line notes; phone stars fit inside the white sticker */
.stk-note { white-space: nowrap; }
@media (max-width: 760px) { .stk-note { white-space: nowrap; } .stk-row { gap: 4px; } .stk-stars { gap: 1px; } .stk-stars svg { width: 10px; height: 10px; } }

/* v4 mini (16 Oct, Erfan: "taking too much space… put it below 'Websites for B2B AI companies…' in a small format").
   Same stickers, shrunk into the footer brand column under the tagline: 104px squares, mark + one bold word (Contra: 5.0 over
   its stars). The short notes stay for screen readers only. Left-aligned cluster, small tilts. */
html body .ft3 .ft-brand .ft-badges-mini { justify-content: flex-start; flex-wrap: nowrap; margin: 32px 0 0; padding: 8px 0 8px 8px; border: 0; }
html body .ft3 .ft-badges-mini a.stk { width: 104px; height: 104px; margin: 0 -6px 0 0; padding: 12px; gap: 4px; border-width: 3px; }
.ft-badges-mini .stk-framer { --r: -6deg; --y: -2px; } .ft-badges-mini .stk-contra { --r: 4deg; --y: 6px; } .ft-badges-mini .stk-behance { --r: -3deg; --y: 0px; }
.ft-badges-mini .stk-logo, .ft-badges-mini img.stk-logo { width: 24px; height: 24px; }
.ft-badges-mini .stk-big { font-size: 20px; line-height: 24px; letter-spacing: -0.02em; }
.ft-badges-mini .stk-row { flex-direction: column; align-items: flex-start; gap: 2px; }
.ft-badges-mini .stk-stars { gap: 1px; } .ft-badges-mini .stk-stars svg { width: 12px; height: 12px; }
.ft-badges-mini .stk-note { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
@media (max-width: 760px) {
  html body .ft3 .ft-brand .ft-badges-mini { margin-top: 24px; }
  html body .ft3 .ft-badges-mini a.stk { width: 96px; height: 96px; padding: 10px; border-width: 3px; }
  .ft-badges-mini .stk-big { font-size: 18px; line-height: 24px; }
}

/* v5 calm mini (16 Oct, Erfan: "so many things are happening in this part… make the badge fit here very smoothly"). Smaller
   (80px), barely tilted, lined up with the tagline's left edge, small overlap; same mark + one word. */
html body .ft3 .ft-brand .ft-badges-mini { margin: 32px 0 0; padding: 4px 0 4px 2px; }
html body .ft3 .ft-badges-mini a.stk { width: 80px; height: 80px; margin: 0 -2px 0 0; padding: 10px; gap: 2px; border-width: 2px; }
html body .ft3 .ft-badges-mini a.stk::before { background: linear-gradient(135deg, rgba(255,255,255,.16) 0%, rgba(255,255,255,0) 45%); }
.ft-badges-mini .stk-framer { --r: -3deg; --y: 0px; } .ft-badges-mini .stk-contra { --r: 2deg; --y: 2px; } .ft-badges-mini .stk-behance { --r: -1.5deg; --y: 0px; }
.ft-badges-mini .stk-logo, .ft-badges-mini img.stk-logo { width: 20px; height: 20px; }
.ft-badges-mini .stk-big { font-size: 16px; line-height: 20px; letter-spacing: -0.01em; }
.ft-badges-mini .stk-stars svg { width: 10px; height: 10px; }
html body .ft3 .ft-badges-mini a.stk:hover, html body .ft3 .ft-badges-mini a.stk:focus-visible { transform: translateY(calc(var(--y) - 4px)) rotate(0deg); }
@media (max-width: 760px) { html body .ft3 .ft-badges-mini a.stk { width: 80px; height: 80px; padding: 10px; border-width: 2px; } .ft-badges-mini .stk-big { font-size: 16px; line-height: 20px; } }
html body .ft3 .ft-badges-mini a.stk { width: 96px; }   /* "Featured" needs 96px at 16px */
@media (max-width: 760px) { html body .ft3 .ft-badges-mini a.stk { width: 96px; } }
/* v5.1: square again (Erfan: "make them square") */
html body .ft3 .ft-badges-mini a.stk { width: 96px; height: 96px; padding: 12px; }
@media (max-width: 760px) { html body .ft3 .ft-badges-mini a.stk { width: 96px; height: 96px; padding: 12px; } }
/* v5.2 hover tooltip (Erfan: "on hover you can show some more details… a tooltip"). Design-system tooltip: white on the ink
   footer, ink text 13/16 500 (the one allowed tooltip size), r-s 4px, 8px 12px padding, above the sticker, fades up. */
html body .ft3 .ft-badges-mini a.stk { overflow: visible; }
html body .ft3 .ft-badges-mini a.stk::before { border-radius: 10px; }
html body .ft3 .ft-badges-mini a.stk[data-tip]::after { content: attr(data-tip); position: absolute; z-index: 6; left: 50%; bottom: calc(100% + 12px);
  width: max-content; max-width: 220px; padding: 8px 12px; border-radius: 4px; background: #fff; color: #050505;
  font: 500 13px/16px var(--text); letter-spacing: 0; white-space: normal; text-align: center; pointer-events: none;
  opacity: 0; transform: translate(-50%, 4px); transition: opacity .15s ease, transform .15s ease; }
html body .ft3 .ft-badges-mini a.stk[data-tip]:hover::after, html body .ft3 .ft-badges-mini a.stk[data-tip]:focus-visible::after { opacity: 1; transform: translate(-50%, 0); }
.ft-badges-mini .stk-framer[data-tip]::after { left: 0; transform: translate(0, 4px); }
html body .ft3 .ft-badges-mini .stk-framer[data-tip]:hover::after, html body .ft3 .ft-badges-mini .stk-framer[data-tip]:focus-visible::after { transform: translate(0, 0); }
@media (hover: none) { html body .ft3 .ft-badges-mini a.stk[data-tip]::after { display: none; } }
/* v5.3: "Pro Expert" (Erfan: "we are a Framer Pro Expert") wraps to two lines inside the square */
.ft-badges-mini .stk-framer .stk-big { white-space: normal; }
html body .ft3 .ft-badges-mini a.stk.stk-framer[data-tip]::after { left: 0; transform: translate(0, 4px); }
html body .ft3 .ft-badges-mini a.stk.stk-framer[data-tip]:hover::after, html body .ft3 .ft-badges-mini a.stk.stk-framer[data-tip]:focus-visible::after { transform: translate(0, 0); }
/* v5.4 (Erfan: "I'm not liking the entry animations of these cards. We don't need"): no slap-on, no star fill. The script is
   unlinked; these rules make sure nothing stays hidden if an armed class ever comes back. Hover lift + tooltip stay. */
.ft-badges .stk, .ft-badges .stk-stars svg { animation: none !important; opacity: 1 !important; }
.ft-badges .stk-stars svg { color: var(--accent, #FF3C00) !important; }
/* v5.5 tooltip with a pointer (Erfan: "we should be pointing… a small box with an arrow, like how we show the tooltip"; "is the
   box radius with our system?"). Same tooltip as the Compare table (box + 5px caret pointing at the item), inverted for the ink
   footer (white box, ink text). Radius r-s 4px per tokens.json ("tooltips"). Replaces the data-tip ::after version. */
html body .ft3 .ft-badges-mini a.stk[data-tip]::after { content: none; }
html body .ft3 .ft-badges-mini .stk-tip { position: absolute; z-index: 6; left: 50%; bottom: calc(100% + 10px); width: max-content; max-width: 220px;
  padding: 8px 12px; border-radius: 4px; background: #fff; color: #050505; font: 500 13px/16px var(--text); letter-spacing: 0;
  white-space: normal; text-align: center; pointer-events: none; opacity: 0; transform: translate(-50%, 4px);
  transition: opacity .15s ease, transform .15s ease; }
html body .ft3 .ft-badges-mini .stk-tip::after { content: ''; position: absolute; top: 100%; left: 50%; margin-left: -5px; border: 5px solid transparent; border-top-color: #fff; }
html body .ft3 .ft-badges-mini a.stk:hover .stk-tip, html body .ft3 .ft-badges-mini a.stk:focus-visible .stk-tip { opacity: 1; transform: translate(-50%, 0); }
/* the first sticker sits at the column edge: tooltip starts at its left, caret over the sticker's centre */
html body .ft3 .ft-badges-mini a.stk-framer .stk-tip { left: 0; transform: translate(0, 4px); }
html body .ft3 .ft-badges-mini a.stk-framer:hover .stk-tip, html body .ft3 .ft-badges-mini a.stk-framer:focus-visible .stk-tip { transform: translate(0, 0); }
html body .ft3 .ft-badges-mini a.stk-framer .stk-tip::after { left: 48px; }
@media (hover: none) { html body .ft3 .ft-badges-mini .stk-tip { display: none; } }
@media (prefers-reduced-motion: reduce) { html body .ft3 .ft-badges-mini .stk-tip { transition: none; } }
/* the sticker's "> * { position: relative }" rule outranked the tooltip; pin it above the sticker */
html body .ft3 .ft-badges-mini a.stk > .stk-tip { position: absolute; z-index: 6; }
/* radius per tokens.json: the mini stickers are proof badges → r-m 8px; sheen inside the 2px edge → 6px (r-inner = 8 − 2) */
html body .ft3 .ft-badges-mini a.stk { border-radius: 8px; }
html body .ft3 .ft-badges-mini a.stk::before { border-radius: 6px; }

/* v6 dark mono tiles (16 Oct, Erfan picked option A: the brand-colour stickers looked out of place in the full footer).
   All three the same: #353535 fill (grey token), 1px line-dark edge, white marks, no tilt, no sheen, 8px gap, r-m 8px.
   Hover: edge brightens to mute-d, tooltip with caret as before. Stars stay accent. */
html body .ft3 .ft-badges-mini { gap: 8px !important; }
html body .ft3 .ft-badges-mini a.stk, html body .ft3 .ft-badges-mini a.stk.stk-contra, html body .ft3 .ft-badges-mini a.stk.stk-framer, html body .ft3 .ft-badges-mini a.stk.stk-behance {
  --r: 0deg; --y: 0px; margin: 0 !important; background: #353535 !important; color: #fff !important;
  border: 1px solid #2A2A2A !important; box-shadow: none !important; border-radius: 8px; transform: none;
  transition-property: border-color !important; transition-duration: .4s !important; transition-timing-function: cubic-bezier(.25,1,.5,1) !important; }
html body .ft3 .ft-badges-mini a.stk::before { display: none; }
html body .ft3 .ft-badges-mini a.stk:hover, html body .ft3 .ft-badges-mini a.stk:focus-visible { border-color: #A3A3A3 !important; transform: none; }
html body .ft3 .ft-badges-mini .stk-logo { fill: #fff; }
html body .ft3 .ft-badges-mini .stk-contra img.stk-logo { filter: invert(1); }
html body .ft3 .ft-badges-mini .stk-big, html body .ft3 .ft-badges-mini .stk-contra .stk-big { color: #fff; }

/* ==== parts/proof-faces.css ==== */
/* Proof band v2 (16 Oct 2026, Erfan: "make this section better, we need to show a client face").
   Three white cards with one structure: mark on top (logo or rating), the proof in the middle, a source row
   at the bottom behind a 1px hairline. The NOCAP face card leads (wider column, 32px quote, round photo).
   Overrides the D3 + D4 proof band rules in qa-round.css. */
html body .proof3 .p3-set { grid-template-columns: 1.4fr 1fr 1fr; gap: 16px; align-items: stretch; }
html body .p3-set .p3-card { gap: 24px; padding: 32px; background: #fff; border: 1px solid #E6E6E6; border-radius: 8px; color: var(--ink, #050505); }
.p3-set .p3-top { display: flex; align-items: center; gap: 12px; height: 48px; }
.p3-set .p3-top img { display: block; width: auto; }
.p3-set .p3-face .p3-top img { height: 32px; }
.p3-set .p3-cmt .p3-top img { height: 24px; }
.p3-set .p3-top .p3-stars { margin: 0; font-size: 18px; line-height: 24px; }
.p3-set blockquote { margin: 0; font: 500 24px/32px var(--head); letter-spacing: -0.02em; color: var(--ink, #050505); text-wrap: balance; }
.p3-set .p3-face blockquote { font-size: 32px; line-height: 40px; }
.p3-set .p3-contra blockquote { font-size: 20px; line-height: 28px; letter-spacing: -0.01em; }
.p3-set .p3-cmt blockquote, .p3-set .p3-contra blockquote { text-wrap: pretty; }
.p3-set .p3-line { margin-top: -8px; font-size: 16px; line-height: 24px; color: #555555; }
.p3-set .p3-src { display: flex; align-items: center; gap: 16px; margin: auto 0 0; padding-top: 24px; border-top: 1px solid #E6E6E6; }
.p3-set .p3-who { display: flex; flex-direction: column; justify-content: center; min-height: 64px; min-width: 0; }
.p3-set .p3-who b { font: 500 16px/24px var(--text); color: var(--ink, #050505); }
.p3-set .p3-who > span { font-size: 14px; line-height: 20px; color: #555555; }
.p3-set .p3-ava { display: block; flex: none; width: 64px; height: 64px; border-radius: 50%; object-fit: cover; background: #F6F6F6; }
.p3-set .p3-mark { display: block; flex: none; width: 24px; height: 24px; }
.p3-set .p3-who > .p3-link { margin: 0; font: 500 14px/20px var(--text); color: var(--ink, #050505); }

@media (max-width: 1100px) {
  html body .proof3 .p3-set { grid-template-columns: 1fr 1fr; }
  .p3-set .p3-face { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  html body .proof3 .p3-set { grid-template-columns: minmax(0, 1fr); }
  html body .p3-set .p3-card { padding: 24px; }
  .p3-set .p3-face blockquote { font-size: 24px; line-height: 32px; }
  .p3-set .p3-cmt blockquote { font-size: 20px; line-height: 28px; }
  .p3-set .p3-ava { width: 56px; height: 56px; }
  .p3-set .p3-who { min-height: 56px; }
}

/* ==== parts/compare-light.css ==== */
/* Compare band, window light (16 Oct, Erfan: "the background of this section is very subtle. Let's make it pop… within this light
   gray… maybe some subtle pattern or image"). Not a dot grid (flagged as an AI tell on 11 Oct). Soft daylight through blinds:
   wide white bands and faint shadow bands, blurred, falling diagonally across the #F6F6F6 ground, brightest at the top right.
   Same light as the Who we build for scenes, so the page reads as one set. Gradients and blur only: no shadows, no glow. */
html body section#compare.cmp { position: relative; isolation: isolate; overflow: hidden; background-color: #ECECE9; } /* page-ground token, so the white light reads */
html body section#compare.cmp::before { content: ''; position: absolute; inset: -20%; z-index: -1; pointer-events: none; filter: blur(22px);
  background: repeating-linear-gradient(-58deg,
    rgba(255,255,255,0) 0 90px, rgba(255,255,255,.95) 90px 200px, rgba(255,255,255,0) 200px 270px,
    rgba(40,40,60,.07) 270px 330px, rgba(255,255,255,0) 330px 440px);
  -webkit-mask-image: radial-gradient(120% 90% at 85% 0%, #000 0%, rgba(0,0,0,.75) 45%, rgba(0,0,0,.25) 100%);
          mask-image: radial-gradient(120% 90% at 85% 0%, #000 0%, rgba(0,0,0,.75) 45%, rgba(0,0,0,.25) 100%); }
html body section#compare.cmp::after { content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: linear-gradient(180deg, rgba(236,236,233,0) 70%, rgba(236,236,233,.8) 100%); }
@media (prefers-reduced-transparency: reduce) { html body section#compare.cmp::before { opacity: .5; } }
/* tooltip radius → r-s 4px (tokens.json: tooltips), 16 Oct */ html body .cmp-why { border-radius: 4px; }

/* ==== parts/btn-rim.css ==== */
/* Book a call rim (16 Oct, Erfan: "give this border effect to all the Book a call buttons, only the Book a call buttons… this
   stroke border"). The audit box's chrome ring, stroke only (no blurred glow: glows are off-system): a 2px conic chrome border
   turning slowly round the button, fill drawn in the padding box so the ring sits on the edge. Uses --ck-a and ck-sweep from
   checks-v2.css. Hover keeps the system's dark-button hover (#1F1F1F) / light-button hover. Reduced motion: the ring stands still. */
@property --ck-a { syntax: '<angle>'; inherits: false; initial-value: 0deg; }
@keyframes ck-sweep { to { --ck-a: 360deg; } }
html body a.btn.btn-rim {
  --rim: conic-gradient(from var(--ck-a), #3A3A3A 0deg, #9A9A9A 40deg, #F7F7F7 70deg, #BDBDBD 100deg, #5A5A5A 140deg, #DADADA 175deg, #FFB59A 205deg, #FFFFFF 225deg, #9AA4B8 255deg, #C9D3EA 280deg, #4A4A4A 320deg, #3A3A3A 360deg);
  --fill: var(--ink, #050505);
  box-sizing: border-box; border: 2px solid transparent;
  background: linear-gradient(var(--fill), var(--fill)) padding-box, var(--rim) border-box;
  animation: ck-sweep 6s linear infinite; }
/* hover: no colour change (Erfan, 16 Oct: "on hover don't change color"); older hover rules turned it orange, so this wins */
html body a.btn.btn-rim:hover, html body a.btn.btn-rim:focus-visible { background: linear-gradient(var(--fill), var(--fill)) padding-box, var(--rim) border-box !important; color: #fff !important; }
html body a.btn.btn-light.btn-rim { --fill: #FFFFFF; }
html body a.btn.btn-light.btn-rim:hover, html body a.btn.btn-light.btn-rim:focus-visible { color: var(--ink, #050505) !important; }
@media (prefers-reduced-motion: reduce) { html body a.btn.btn-rim { animation: none; --ck-a: 30deg; } }

/* ==== parts/ds-fix-1016.css ==== */
/* Design-system audit fixes (16 Oct 2026). Source: scratchpad audit/design-system.md (rows 1-34), checked against
   design-system/project/tokens.json + interaction.md. Loaded just before no-shadow.css (which stays last).
   NOT touched here on purpose (Erfan approved the look; to be documented as components): the faded 1-5 process digits (#9),
   the tilted question chips + their hover lift (#3), the tilted footer stickers / edge / sheen / hover (#4), the "That's us"
   tag tilt (#5), the green / orange menu tags (#21), the Compare window-light band and its #ECECE9 ground (#22, not a token:
   reported), client screenshots and logos, the sector scene pictures. */

/* ---------- buttons on the scale ---------- */
/* #1 "See all work" (subtle, small) → control-s 40px, 16px label, 16px side padding */
html body .wall .wall-cta .btn { box-sizing: border-box; height: 40px; min-height: 40px; font-size: 16px; font-weight: 500; padding: 0 16px; }
/* #2 FAQ / founder "Book a call" labels 14 → 16 (rim from btn-rim.css untouched: 2px border, border-box, stays 40px) */
html body .faq2 .fq-ask .btn, html body .founder2 .fl-cta .btn { font-size: 16px; }
/* #26 subtle (grey) buttons: fill only, no faint ring (same component as the menu "Explore all" bars) */
html body .btn-subtle, html body .mm-bar { box-shadow: none; }
/* #13 phone Menu / Close → control-s 40px */
html body .menu-btn { box-sizing: border-box; height: 40px; line-height: 24px; }
/* #10 process prev / next arrows: icon-only buttons are round */
html body .process2 .pc-nav button { border-radius: 50%; }
/* #29 hero pause: no glass; solid ink, icon-only hover fill accent-deep, one hover speed */
html body .hr-pause { -webkit-backdrop-filter: none; backdrop-filter: none; background: #050505; transition: opacity .4s cubic-bezier(.25,1,.5,1), background-color .4s cubic-bezier(.25,1,.5,1); }
html body .hr-pause:hover { background: #D23100; }

/* ---------- section titles: one h2 token (tokens.json h2: line-height 1.05, letter-spacing -0.035em) ---------- */
/* #6 + #7. !important because several sections set the title through higher-specificity font shorthands per breakpoint. */
html body h2.tt { line-height: 1.05 !important; letter-spacing: -0.035em !important; }
/* #7 hero-h1 line-height 1.02 */
html body h1.tt { line-height: 1.02; }

/* ---------- header ---------- */
/* #8 header links nav-text #4A4A4A at rest → ink on hover / open, 0.4s (interaction.md) */
html body .links .nl, html body .mm-btn { color: #4A4A4A; transition: color .4s cubic-bezier(.25,1,.5,1); }
html body .links .nl:hover, html body .mm-btn:hover, html body .mm.open .mm-btn { color: #050505; }
/* #14 phone menu: Services / Industries / Resources rows full width like Work / Pricing / About */
@media (max-width: 900px) { html body .nav.menu-open .mm-btn { box-sizing: border-box; width: 100%; justify-content: space-between; } }
/* #19 mega menu outcome line = menu-desc 14 / 400 / 1.35 */
html body .mm-item small { font-weight: 400; line-height: 1.35; }
/* #20 mega menu cells / video card: one hover speed */
html body .mm-item { transition: background-color .4s cubic-bezier(.25,1,.5,1); }
html body .mm-vid { transition: box-shadow .4s cubic-bezier(.25,1,.5,1); }

/* ---------- text ---------- */
/* #15 section intro lines = text-2 #444 */
html body .sectors .se-head > p, html body .svc .svc-head > p { color: #444444; }
/* #16 hero sub = hero-sub token 18/28 at every width */
html body .hero .hero-sub, html[data-radius] body .hero .hero-sub { font-size: 18px; line-height: 28px; }
/* #17 "Read the case study" = link-text 500, 24px line */
html body .cases .cs-read { font-weight: 500; line-height: 24px; }
/* #18 "Book a call directly" = link-text 16 */
html body .cl3 .cl3-switch, html body .cl3 .cl3-switch a { font-size: 16px; line-height: 24px; }
/* #11 sentence popovers (Compare reasons, footer sticker tips) 13 → 14/20; radius, caret, colours unchanged */
html body .cmp-why, html body .ft3 .ft-badges-mini .stk-tip, html body .ft3 .ft-badges .stk-tip { font-size: 14px; line-height: 20px; }
/* #12 founder stats snapped to the type scale: 24/32 (861-1100), 20/28 + 14/20 (521-860) */
@media (min-width: 861px) and (max-width: 1100px) { html body .fl-stats dt { font-size: 24px; line-height: 32px; } }
@media (min-width: 521px) and (max-width: 860px) {
  html body .fl-stats dt { font-size: 20px; line-height: 28px; }
  html body .fl-stats dd { font-size: 14px; line-height: 20px; } }

/* ---------- off-token colours → nearest token ---------- */
/* #23 sector card base #F4F3F1 → sheet */
html body .wi .se-card { background: #F6F6F6; }
/* #24 Compare row dividers #E3E3E3 → line (and the phone row ring, same colour) */
html body .cmp-row:not(.cmp-cols):not(.cmp-us) + .cmp-row::before { background: #E6E6E6; }
@media (max-width: 760px) { html body .cmp .cmp-row:not(.cmp-us) { box-shadow: inset 0 0 0 1px #E6E6E6; } }
/* #25 FAQ toggle ring #E0E0E0 → line (open state keeps its orange fill, no ring) */
html body .fq-list details:not([open]) summary::after { box-shadow: inset 0 0 0 1px #E6E6E6; }
/* #27 process band ground surface-dark #0B0B0B → ink #050505 (silk photo kept; overlay tinted in ink, same strengths) */
html body section.process2.pr-dark.pc { background-color: #050505; background-image: linear-gradient(rgba(5,5,5,.72), rgba(5,5,5,.58) 45%, rgba(5,5,5,.86)), url("/assets/img/process-silk.webp"); }
/* #28 progress bars: no 2px radius */
html body .pc-prog i { border-radius: 0; }

/* ---------- 8-point grid ---------- */
/* #30 case chips 26 → 24 */
html body .cases .cs-chips li { line-height: 16px; padding-top: 4px; padding-bottom: 4px; }
/* #31 footer time chips 30 → 32 */
html body .ft3 .ftl-time { box-sizing: border-box; height: 32px; display: inline-flex; align-items: center; }
/* #32 closing bands on the section gap (128 / 96 / 64) */
html body .cl3 .cl3-ai { padding-top: var(--section-gap); }
html body .cl3 .cl2-in { padding-top: var(--section-gap); padding-bottom: var(--section-gap); }
/* #33 footer panel padding snapped to 8px */
html body .ft3 .ft-panel { padding-top: round(nearest, calc(100cqi / 4.12 * 0.21 + 32px), 8px); padding-bottom: round(nearest, calc(100cqi / 4.12 * 0.21 + 32px), 8px); }
@media (max-width: 760px) { html body .ft3 .ft-panel { padding: round(nearest, calc(100cqi / 4.12 * 0.21 + 32px), 8px) 24px 8px; } }
/* #34 More work: title → content 64 / 48 / 40 (the rows keep their 8px hover room, so the head gives it back) */
html body .wall .wall-head { margin-bottom: 56px; }
@media (max-width: 1100px) { html body .wall .wall-head { margin-bottom: 40px; } }
@media (max-width: 760px) { html body .wall .wall-head { margin-bottom: 32px; } }
/* founder stat captions: #6B6B6B is the menu-description token only; body text on white → #555 */
html body .fl .fl-stats dd, html body .founder2 dd { color: #555; }

/* --- 16 Oct, design-system v2 conflicts closed --- */
/* process step digits: line token at rest and on hover */
html body .pc-num, html body .pc-card:hover .pc-num { color: #E6E6E6; }
/* sector card hover hairline → mute-d token */
html body .wi .se-card:hover, html body .wi .se-card:focus-visible { box-shadow: inset 0 0 0 1px #A3A3A3; }
/* every primary (ink) button keeps its fill on hover, like Book a call; audit button side padding 24 */
html body .ck-form .btn-dark, html body .ck-form .btn-dark:hover, html body .ck-form .btn-dark:focus-visible,
html body .cl3 .cl3-send .btn-dark:hover, html body .cl3 .cl3-send .btn-dark:focus-visible { background: var(--ink, #050505) !important; color: #fff !important; }
html body .ck-form .btn-dark { padding: 0 24px; }
/* sector cards: the picture rose 6px on hover and showed a white strip at the bottom (Erfan, 16 Oct). The picture now reaches
   6px below the card edge (hidden by the card's overflow), so the lift always has picture under it. */
html body .wi-art.ws .ws-scene { bottom: -6px; }
/* round icon buttons on ink (process arrows, footer socials): hover = fill only, no stroke (Erfan 16 Oct: "we don't need a stroke") */
html body .process2 .pc-nav button:hover, html body .process2 .pc-nav button:focus-visible,
html body .ft-social a:hover, html body .ft-social a:focus-visible { border-color: transparent; box-shadow: none; }
/* service card tags (16 Oct, Erfan: "Most booked" on Launch website, "New" on Website migration, same tag as the dropdown) */
html body #services .svc-txt > h3 .svc-tag { display: inline-block; margin-left: 12px; vertical-align: middle; position: relative; top: -3px; font: 500 12px/1 var(--text); letter-spacing: .06em; padding: 4px; }
@media (max-width: 760px) { html body #services .svc-txt > h3 .svc-tag { margin-left: 8px; top: -2px; } }
/* tag sits 12px from the title: word space (~8px at 32px) + 4px */
html body #services .svc-txt > h3 .svc-tag { margin-left: 4px; }
@media (max-width: 760px) { html body #services .svc-txt > h3 .svc-tag { margin-left: 2px; } }

/* ==== parts/a11y-fix-1016.css ==== */
/* Accessibility + responsive fixes (16 Oct 2026, code audit scratchpad audit/code-a11y.md, rows 2, 3, 4, 5, 6, 13, 30).
   Loaded just before no-shadow.css (which stays last). No new colours except the darker Framer blue below. */

/* #2 marquees also stop while a link inside them has keyboard focus, so a keyboard user can reach a link that is not moving.
   (A visible pause / play button per marquee is still open: needs Erfan.) */
.wall .wall-rows:focus-within .wall-track { animation-play-state: paused; }
.clients .cl-wall:focus-within .cl-track { animation-play-state: paused; }

/* #3 Compare at 761-860px: the table is still a table but the first column is narrow, so the tilted "That's us" tag ran over
   Pentaclay's first tick. In that range the tag sits under the name, and the column headers may wrap instead of running together. */
@media (min-width: 761px) and (max-width: 860px) {
  .cmp-us .cmp-name b { flex-direction: column; align-items: flex-start; gap: 4px; }
  .cmp-cols span { white-space: normal; }
}

/* #4 Framer footer sticker: white on #0099FF was 3.0:1. #006FD6 is a darker Framer blue that passes 4.5:1 with white. */
:root { --badge-framer: #006FD6; }
/* the small note under it ("on Framer", "on Behance") was white at 86% opacity: about 4.1:1 on #006FD6 and 3.9:1 on Behance blue.
   Full white gives 4.95:1 and 4.67:1. */
.stk-framer .stk-note, .stk-behance .stk-note { opacity: 1; }

/* #5 placeholders: #8A8A8A on white was 3.45:1 → #555 (design-system grey). The audit form keeps its visually hidden labels. */
.ck-fields input::placeholder, .cl3-form ::placeholder { color: #555555; }

/* #6 the process card track is now a keyboard stop (tabindex="0"); show the same white ring as the tabs and arrows */
.pc-track:focus-visible { outline: 2px solid #fff; outline-offset: 4px; }

/* #13 services stack: the last card could only pin 8px below the one before it, because a sticky card cannot leave its list's content
   box (padding does not count). An empty last grid item adds one 32px gap of room inside the list; the negative margin gives 16px of it
   back to the page, so the page grows by just the 16px the peek needs. */
@media (min-width: 861px) and (min-height: 720px) { #services .svc-list::after { content: ''; } #services .svc-list { margin-bottom: calc(var(--svc-o) - var(--svc-g)); } }

/* #30 contact radio chips: the focused chip gets a clear 2px ring (was a 1px inset line) */
html body .cl3-need input:focus-visible + span { outline: 2px solid var(--accent-deep, #D23100); outline-offset: 2px; }

/* ==== parts/titles-v2.css ==== */
/* Title styles from the identity concept, rolled onto the original page (16 Oct, Erfan: "roll the title fonts, all kind of title fonts,
   in our original one: sizes, colours, everything"). One ink colour (the grey lead span turns ink), weight 600, tighter tracking.
   H1 72/72 desktop (80 → 72, Erfan 17 Oct), 64 tablet, 48 phone · section H2 48/52 (40/44 tablet, 32/36 phone) · case headline 32/40 · card titles 600.
   Alignment unchanged (left vs centre is a separate layout decision). */
html body h1.tt, html body .hero h1 { font-weight: 600 !important; font-size: 72px !important; line-height: 72px !important; letter-spacing: -0.045em !important; color: #050505 !important; }
html body h2.tt, html body section h2.tt { font-weight: 600 !important; font-size: 48px !important; line-height: 52px !important; letter-spacing: -0.035em !important; color: #050505 !important; }
html body .tt .tt-g, html body .tt .tt-g-d { color: inherit !important; }
html body .pr-dark h2.tt, html body .process2 h2.tt, html body .process2 h2.tt .tt-g { color: #FFFFFF !important; }
html body .cs-headline { font-weight: 600 !important; font-size: 32px !important; line-height: 40px !important; letter-spacing: -0.03em !important; color: #050505 !important; }
html body .cs-name h3, html body #services .svc-txt > h3, html body .se-title, html body .pc-card h3, html body .fq-ask h3, html body .cl3 h2, html body .ck-form h3 { font-weight: 600 !important; color: inherit; }
html body #services .svc-txt > h3 .svc-tag { font-weight: 500 !important; }
@media (max-width: 1100px) {
  html body h1.tt, html body .hero h1 { font-size: 64px !important; line-height: 64px !important; }
  html body h2.tt, html body section h2.tt { font-size: 40px !important; line-height: 44px !important; }
}
@media (max-width: 760px) {
  html body h1.tt, html body .hero h1 { font-size: 48px !important; line-height: 52px !important; letter-spacing: -0.04em !important; }
  html body h2.tt, html body section h2.tt { font-size: 32px !important; line-height: 36px !important; letter-spacing: -0.03em !important; }
  html body .cs-headline { font-size: 24px !important; line-height: 32px !important; }
}
/* case headline one step down the scale (Erfan, 16 Oct): 32 → 24/32, phones 24 → 20/28 */
html body .cs-headline { font-size: 24px !important; line-height: 32px !important; letter-spacing: -0.02em !important; }
@media (max-width: 760px) { html body .cs-headline { font-size: 20px !important; line-height: 28px !important; } }
/* case headline like DesignMe's case cards (Erfan, 16 Oct: "title is smaller than ours, follow that style"): 20px 600, 28px line (8-pt) */
html body .cs-headline { font-size: 20px !important; line-height: 28px !important; letter-spacing: -0.01em !important; }
@media (max-width: 760px) { html body .cs-headline { font-size: 20px !important; line-height: 28px !important; } }

/* ==== parts/body-v2.css ==== */
/* Body text from the identity concept, rolled onto the original page (16 Oct, Erfan: "use the same font for the body text, same font
   sizes"). Inter everywhere; one reading grey (text-2 #444) on white; sizes on the scale with 8-point line heights:
   hero sub 20/28 · section intro 18/28 · service who-line 20/28 · body 16/24 · captions/small 14/20. Ink stays ink where it was. */
html body .hero .hero-sub { font-size: 20px !important; line-height: 28px !important; color: #444 !important; }
html body h2.tt + p, html body .se-head p, html body .svc-head p, html body .pr-head p:not(.pr-promise), html body .cl3 h2 + p { font-size: 18px !important; line-height: 28px !important; color: #444 !important; }
html body #services .svc-who { color: #444 !important; }
html body .cs-sum, html body .faq2 p, html body .fq-ask p, html body .checks2 .ck-form p, html body .founder2 p { color: #444 !important; }
html body .faq2 details > p { font-size: 16px; line-height: 24px; }
html body .hero small, html body .cases small, html body .cmp small, html body .se-dlv, html body .wall figcaption, html body .founder2 dd,
html body .fq-mail, html body .cs-chips li, html body #services small { font-size: 14px !important; line-height: 20px !important; }
html body .hero small, html body .cases small:not(.cs-stage), html body .cmp small, html body .se-dlv, html body .founder2 dd, html body .fq-mail, html body #services small { color: #444 !important; }
html body .faq2 summary { line-height: 28px !important; }
@media (max-width: 760px) { html body .hero .hero-sub { font-size: 18px !important; line-height: 28px !important; } html body h2.tt + p, html body .se-head p, html body .svc-head p { font-size: 16px !important; line-height: 24px !important; } }
html body .wall .wall-track figcaption { color: #444; }
/* every control uses the page's two text styles: browsers default buttons/inputs to Arial 13.3px (Erfan: "use these two kinds of fonts
   everywhere, from drop-down to button") */
html body button, html body input, html body select, html body textarea, html body optgroup { font-family: var(--text, Inter, sans-serif); }
html body button:not([class*="btn"]):not(.cmp-m):not(.pc-nav button) { font-size: inherit; }
/* email links: no arrow; hover = text + underline turn orange (Erfan, 16 Oct). #D23100 on white (5:1), #FF3C00 on ink (5.6:1). */
html body a.mail-link { text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; transition: color .4s cubic-bezier(.25,1,.5,1), text-decoration-color .4s cubic-bezier(.25,1,.5,1); }
html body a.mail-link:hover, html body a.mail-link:focus-visible { color: #D23100 !important; text-decoration-color: #D23100; }
html body .ft3 a.mail-link:hover, html body .ft3 a.mail-link:focus-visible { color: #FF3C00 !important; text-decoration-color: #FF3C00; }

/* ==== parts/spacing-v2.css ==== */
/* Section rhythm: one gap between sections, 128 / 96 / 64. Title → content 64 / 48 / 40. */
:root { --sg2: 128px; }
@media (max-width: 1100px) { :root { --sg2: 96px; } }
@media (max-width: 760px) { :root { --sg2: 64px; } }
/* 17 Oct, Erfan: "if top has 100px, then bottom + next section's top should total 100px". ONE gap between sections: each section
   has --sg2 above its content and nothing below; coloured bands keep --sg2 inside their colour at top AND bottom. */
html body section.clients, html body section.cases, html body section.sectors, html body section.svc, html body section.proof3,
html body section.wall, html body section.checks2, html body section.faq2, html body section.founder2, html body section.close2 { padding-top: var(--sg2) !important; padding-bottom: 0 !important; margin-top: 0 !important; margin-bottom: 0 !important; }
html body section.process2, html body section.cmp { padding-top: var(--sg2) !important; padding-bottom: var(--sg2) !important; margin-top: var(--sg2) !important; margin-bottom: 0 !important; }
html body section.hero { padding-bottom: 0 !important; }
/* content column 1240 → 1200 (DesignMe: 1280 container with 40px sides = 1200 content). Erfan, 17 Oct: "let's do". */
:root { --wrap: 1200px; }
@media (min-width: 761px) {
html body .hero-stage, html body .hero-work, html body .cl-wall, html body .se-in, html body .svc-in, html body .pr-in, html body .ck-in,
html body .cmp-in, html body .fq-in, html body .cs-head, html body .cs-list, html body .cs-foot, html body .ft-top,
html body .ft-mark, html body .ft-panel, html body .ft-bottom, html body .nav-in, html body .mm-panel { max-width: 1200px !important; margin-left: auto !important; margin-right: auto !important; }
}
/* phone hero: the copy grid's column sized itself to the headline's longest no-break chunk (387px) and pushed the headline,
   sub and Book a call past the screen edge. Column now fits the screen. */
html body .hero-copy { grid-template-columns: minmax(0, 1fr) !important; }
html body .hero h1 { max-width: 100%; overflow-wrap: break-word; }
/* proof cards equal (Erfan, 17 Oct: "both of these are not equal"): three equal columns, one quote size (24/32; 20/28 phones) */
html body .proof3 .p3-set { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
html body .p3-set blockquote, html body .p3-set .p3-face blockquote, html body .p3-set .p3-cmt blockquote, html body .p3-set .p3-contra blockquote { font-size: 24px !important; line-height: 32px !important; letter-spacing: -0.02em !important; }
@media (max-width: 1100px) { html body .proof3 .p3-set { grid-template-columns: minmax(0, 1fr) !important; } }
@media (max-width: 760px) { html body .p3-set blockquote, html body .p3-set .p3-face blockquote, html body .p3-set .p3-cmt blockquote, html body .p3-set .p3-contra blockquote { font-size: 20px !important; line-height: 28px !important; } }
/* no white gap between the contact band and the footer: the band carries its own padding, the section adds none below */
html body section.close2 { padding-bottom: 0 !important; }
/* case films were rendered for a 620x490 panel; keep any trim at the bottom (where the window bleeds by design), never the sides */
html body .cases .cs-composed .cs-view video, html body .cases .cs-composed .cs-view img, html body .cases .cs-composed video { object-position: 50% 0 !important; }
/* footer wordmark sized to its own 1200px column (was sized to the wider parent, so "Pentaclay" ran past the grid on the right) */
html body .ft3 .ft-mark { container-type: inline-size; }
html body .ft3 .ft-mark span { font-size: calc(100cqi / 4.1) !important; margin-bottom: calc(100cqi / 4.1 * -0.135) !important; }
/* wordmark ink (not its text box) fills the 1200 column exactly: P's left side-bearing (≈0.058em) pulled out, size so the y's
   tail ends on the right edge. Measured in Chrome: ink 97→1287 at 292.68px in an 80→1280 column. */
html body .ft3 .ft-mark span { font-size: calc(100cqi / 4.066) !important; margin-left: -0.058em !important; margin-bottom: calc(100cqi / 4.066 * -0.135) !important; }
/* footer tiles: subtle hover, no white edge: tile lifts one shade, edge stays dark (Erfan, 17 Oct) */
html:not(#r5):not(#r4) body .ft3 .ft-badges-mini a.stk:hover, html:not(#r5):not(#r4) body .ft3 .ft-badges-mini a.stk:focus-visible { border-color: #2A2A2A !important; background: #404040 !important; }
/* wordmark smaller, fixed size (Erfan, 17 Oct: "just make the font smaller"): 256px max, never wider than the column */
html:not(#wm):not(#wm2) body .ft3 .ft-mark span { font-size: min(256px, calc((100vw - 32px) / 4.4)) !important; margin-left: -0.058em !important; margin-bottom: -0.135em !important; }
html:not(#wm):not(#wm2) body .ft3 .ft-mark span { font-size: min(264px, calc((100vw - 32px) / 4.3)) !important; }  /* Erfan: "make the font 264" */
/* checklist fixes (17 Oct): proof band + contact band on the 1200 column; full 128/96 gap above the dark process band */
@media (min-width: 761px) {
  html body .proof3 .p3-set, html body .proof3-head, html body .wall-head { max-width: calc(1200px + 2 * var(--gut)) !important; }
  html body .cl3 .cl2-in { padding-left: max(var(--gut), calc((100% - 1200px) / 2)) !important; padding-right: max(var(--gut), calc((100% - 1200px) / 2)) !important; }
}
@media (min-width: 861px) and (min-height: 720px) { html body section.process2 { margin-top: calc(var(--sg2) + 16px) !important; } }
html:not(#wm):not(#wm2) body .ft3 .ft-mark span { font-size: min(272px, calc((100vw - 32px) / 4.2)) !important; }  /* Erfan: "make this 272px" */
@media (min-width: 861px) and (min-height: 720px) { html body section.process2 { margin-top: var(--sg2) !important; } }  /* stack removed: no +16 compensation */

/* ==== parts/radius-v2.css ==== */
/* Radius v2 after DesignMe (17 Oct, Erfan: "apply DesignMe's full set"): crisp controls inside soft containers.
   Buttons, inputs, chips/tags 2px · cards and panels 12px · pictures inside cards 8px · round only for avatars, dots, icon buttons. */
html body a.btn, html body button.btn, html body .btn, html body .nav-cta, html body a.btn.btn-rim, html body .ck-form .btn-dark,
html body .cl3-send .btn-dark, html body .btn-subtle, html body .mm-review .mr-btn { border-radius: 2px !important; }
html body input, html body textarea, html body select { border-radius: 2px !important; }
html body .tag, html body .svc-tag, html body .cs-chips li, html body .cl3-need label span, html body .cl3-budget label span,
html body .cmp-tag, html body .ftl-time, html body .stk-tip, html body .cmp-why { border-radius: 2px !important; }
html body .se-card, html body .cs-case, html body #services .svc-card, html body .p3-set > *, html body .fq-ask, html body .faq2 details,
html body .cl3-form, html body form.ck-form, html body .cmp-us, html body .fl-card, html body .founder2 .fl-in, html body .pc-card,
html body .hero-work, html body .ft-panel, html body .mm-panel, html body .ft3 .ft-badges-mini a.stk { border-radius: 12px !important; }
html body .cs-panel, html body .cs-screen, html body .svc-art, html body .pc-art, html body .hi-frame, html body .cs-facts, html body .cs-quote { border-radius: 8px !important; }
html body .mm-btn, html body .menu-btn { border-radius: 2px !important; }
html body .cl3-ai-btns { border-radius: 2px !important; }
/* leftovers found with the menus open (17 Oct): device screens and menu row highlights are pictures/parts inside a 12px container → 8;
   Ask AI icon buttons → 2. The question bubbles keep their approved 4px tail corner. */
html body .dv-tab img, html body .dv-phone img, html body .dv img { border-radius: 8px !important; }
html body .mm-item, html body .mm-panel .mm-item { border-radius: 8px !important; }
html body .cl3-ai-btns a, html body .close2 .cl3-ai-btns a { border-radius: 2px !important; }
/* case cards: the picture is flush with the card edge, so it takes NO radius of its own; the card (12px, overflow hidden) rounds only
   its outer corners. Fixes the curve on the inner side next to the text (Erfan, 17 Oct). */
html body .cases .cs-case { overflow: hidden; }
html body .cases .cs-panel, html body .cases .cs-screen, html body .cases .cs-view, html body .cases .cs-view video, html body .cases .cs-view img { border-radius: 0 !important; }
/* NOCAP case card quote restored, compact so the card stays 490px and the film never crops (Erfan, 17 Oct) */
html body .cases .cs-quote-compact { margin-top: 24px; padding: 16px; gap: 12px; border-radius: 8px !important; }
html body .cases .cs-quote-compact blockquote { font-size: 16px !important; line-height: 24px !important; font-weight: 500; }
html body .cases .cs-quote-compact figcaption { gap: 12px; }
html body .cases .cs-quote-compact figcaption img { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; }
html body .cases .cs-quote-compact figcaption b { font-size: 14px !important; line-height: 20px; display: block; }
html body .cases .cs-quote-compact figcaption small { font-size: 14px !important; line-height: 20px; color: #444; }
/* NOCAP card is taller (quote): fit the film to the panel width, top-aligned; the film's black site fills below, no side crop */
html body .cases .cs-case:has(.cs-quote-compact) .cs-view video, html body .cases .cs-case:has(.cs-quote-compact) .cs-view img { object-fit: contain !important; object-position: 50% 0 !important; }
html body .cases .cs-case:has(.cs-quote-compact) .cs-screen, html body .cases .cs-case:has(.cs-quote-compact) .cs-view { background: #000 !important; }
/* NOCAP: film anchored to the bottom, the gap above filled with the film's own top yellow (side → centre glow), so it reads as one picture */
html body .cases .cs-case:has(.cs-quote-compact) .cs-view video, html body .cases .cs-case:has(.cs-quote-compact) .cs-view img { object-position: 50% 100% !important; }
html body .cases .cs-case:has(.cs-quote-compact) .cs-screen, html body .cases .cs-case:has(.cs-quote-compact) .cs-view { background: radial-gradient(60% 100% at 50% 0%, #FED95D 0%, #FFC71F 70%) !important; }
html body .cases .cs-case:has(.cs-quote-compact) .cs-panel, html body .cases .cs-case:has(.cs-quote-compact) .cs-panel * :not(video):not(img) { background-color: transparent; }
html body .cases .cs-case:has(.cs-quote-compact) .cs-panel { background: radial-gradient(60% 100% at 50% 0%, #FED95D 0%, #FFC71F 70%) !important; }
html body .cases .cs-case:has(.cs-quote-compact) .cs-screen, html body .cases .cs-case:has(.cs-quote-compact) .cs-view { background: transparent !important; }
html body .cases .cs-case:has(.cs-quote-compact) video.cs-video { background: transparent !important; }
/* Radius v3 sweep (17 Oct, Erfan: "every element of Pentaclay should follow the same roundness rules: big cards, small cards, inner
   cards, buttons, images, icons, illustrations, everything"). 2 = buttons, inputs, chips, tooltips, icon tiles · 8 = pictures and inner
   boxes · 12 = cards and panels · round = avatars, dots, icon-only round buttons. Leftovers found by the full-page audit: */
html body .links .nl { border-radius: 2px !important; }                                        /* nav text links (hover/focus shape) */
html body .cmp-ico, html body .cmp .cmp-ico, html body .cmp-ico.cmp-logo { border-radius: 2px !important; } /* compare icon tiles */
html body .cl3-ai-btns a::after, html body .ft-social a::after,
html body .ft3 .ft-badges-mini a.stk[data-tip]::after, html body .ft3 .ft-badges-mini .stk-tip { border-radius: 2px !important; } /* tooltips */
html body .cases .cs-read:focus-visible, html body .cases .cs-visit:focus-visible, html body .cases .cs-foot a:focus-visible { border-radius: 2px !important; }
html body .fq-list summary:focus-visible { border-radius: 8px !important; }                   /* ring sits inside the 12px FAQ row */
html body .cl3-panel { border-radius: 12px !important; }                                      /* contact form panel = large panel */
html body .cmp-row:not(.cmp-cols) { border-radius: 12px !important; }                        /* compare rows are cards on phones */
html body .nav.menu-open .mm-panel { border-radius: 8px !important; }                         /* phone menu: submenu box inside the sheet */
/* SVG drawings: rx is in viewBox units, so the attribute values (r8 / r2 classes in the markup) give 8px / 2px at the 1440 layout
   (services drawing 552px wide = 0.92, process drawing 384px = 0.96). Where the layout makes the drawing smaller or larger, these keep the
   rendered corner near 8 / 2. Text bars and toggles stay fully round (they are lines, not boxes). */
/* ===== RADIUS v4 (17 Oct 2026, Erfan after measuring DesignMe: "DesignMe's cards are square. Then follow our button style") =====
   EVERY box is 2px: cards, inner boxes, facts/quote boxes, FAQ rows, forms, menus and their rows, footer badges, proof/sector/case/
   service/process cards, hero frame, device frames and screens, pictures inside cards, tags, tooltips, inputs, icon tiles, and the
   boxes drawn inside the SVG illustrations (rendered 2px). Round (50%) ONLY for avatars, dots and icon-only round buttons. Pictures flush
   with a card edge stay 0 (the card's overflow rounds the corner). Supersedes v2/v3 above: the :not(#r4) id weight beats every earlier
   !important class rule. */
html:not(#r4) body :is(.btn, .nav-cta, .btn-subtle, .mm-btn, .menu-btn, .links .nl, .mm-review .mr-btn, .cl3-ai-btns, .cl3-ai-btns a,
  input, textarea, select, .tag, .svc-tag, .cs-chips li, .cl3-need label span, .cl3-budget label span, .cmp-tag, .ftl-time, .stk-tip, .cmp-why,
  .hero-work, .hi-frame, .hi-video, .hr-video, .cases .cs-case, .cs-facts, .cs-quote, .cs-quote-compact, .se-card, .svc-card, .svc-art,
  .pc-card, .pc-art, .p3-card, .wall-link, .dv, .dv-tab, .dv-phone, .dv img, .dv-tab img, .dv-phone img, .ck-form, .cmp-row,
  .cmp-ico, .fq-ask, .faq2 details, .fq-list details, .fl-card, .cl3-panel, .cl3-form, .ft3 .ft-badges-mini a.stk, .ft-badges a.stk, .ft-panel,
  .mm-panel, .mm-item, .mm-vid, .mv-frame, .mm-bar) { border-radius: 2px !important; }
html:not(#r4) body :is(.ft3 .ft-badges-mini a.stk, .ft-badges a.stk, .cl3-ai-btns a, .ft-social a)::before,
html:not(#r4) body :is(.ft3 .ft-badges-mini a.stk, .ft-badges a.stk, .cl3-ai-btns a, .ft-social a)::after { border-radius: 2px !important; }
/* overlays that cover a whole card (sector hairline, sector hover tint, audit-form ring) take the card's own corner (4px in radius-v5.css) */
html:not(#r4) body :is(.se-card, .ck-form)::before, html:not(#r4) body :is(.se-card, .ck-form, .wi-art.ws)::after { border-radius: inherit !important; }
html:not(#r4) body :is(.fq-list summary, .links .nl, .mm-btn, .mm-item, .cases .cs-read, .cases .cs-visit, .cases .cs-foot a, .wall-link):focus-visible { border-radius: 2px !important; }
html:not(#r4) body .nav.menu-open .links { border-radius: 0 0 2px 2px !important; }   /* phone menu sheet hangs from the header */
/* flush pictures: 0, the 2px card clips them */
html:not(#r4) body .cases :is(.cs-panel, .cs-screen, .cs-view, .cs-view video, .cs-view img) { border-radius: 0 !important; }
/* SVG drawings: every drawn box carries class r2; rx is in viewBox units, so these bands keep it at ~2px rendered at each layout width
   (attribute values give 2px at 1440: services x0.92 -> 2.2, process x0.96 -> 2.1). Text lines <= 6px tall keep round ends. */
@media (max-width: 400px) { html body .svc-art rect.r2 { rx: 4px; } }
@media (min-width: 401px) and (max-width: 480px) { html body .svc-art rect.r2 { rx: 3.2px; } }
@media (min-width: 481px) and (max-width: 620px) { html body .svc-art rect.r2 { rx: 2.4px; } }
@media (min-width: 621px) and (max-width: 760px) { html body .svc-art rect.r2 { rx: 2px; } }
@media (min-width: 761px) and (max-width: 879px) { html body .svc-art rect.r2 { rx: 1.7px; } }
@media (min-width: 880px) and (max-width: 1040px) { html body .svc-art rect.r2 { rx: 3px; } }
@media (min-width: 1041px) and (max-width: 1199px) { html body .svc-art rect.r2 { rx: 2.5px; } }
@media (min-width: 1200px) and (max-width: 1339px) { html body .svc-art rect.r2 { rx: 2.3px; } }
@media (max-width: 400px) { html body .pc-art rect.r2 { rx: 3.2px; } }
@media (min-width: 401px) and (max-width: 480px) { html body .pc-art rect.r2 { rx: 2.5px; } }
@media (min-width: 481px) and (max-width: 620px) { html body .pc-art rect.r2 { rx: 1.9px; } }
@media (min-width: 621px) and (max-width: 760px) { html body .pc-art rect.r2 { rx: 1.5px; } }
@media (min-width: 761px) and (max-width: 899px) { html body .pc-art rect.r2 { rx: 2.7px; } }
/* Case films v6 (17 Oct, Erfan: "the bottom of the image is cropped", "too much padding on one side", "a different kind of yellow,
   there's a cutoff line", "use yesterday's height"). Cards stay 490px tall (yesterday's height, all four). Each film is rendered at the
   panel's exact 1440 shape, 1200x980 = 600x490 at 2x, with the browser window 64px in from all four edges, so object-fit: cover shows the
   whole film with no crop and no fill. Centred, so any width where the panel is narrower (1280: 576x490) trims both sides equally and the
   window stays fully inside. No CSS colour behind any film: overrides the NOCAP contain / bottom-anchor / yellow-gradient rules above. */
html body .cases .cs-panel video, html body .cases .cs-panel .cs-view img, html body .cases .cs-composed .cs-view video,
html body .cases .cs-composed .cs-view img, html body .cases .cs-composed video, html body .cases .cs-still .cs-view img,
html body .cases .cs-case:has(.cs-quote-compact) .cs-view video, html body .cases .cs-case:has(.cs-quote-compact) .cs-view img {
  object-fit: cover !important; object-position: 50% 50% !important; }
html body .cases .cs-panel, html body .cases .cs-screen, html body .cases .cs-view, html body .cases video.cs-video,
html body .cases .cs-case:has(.cs-quote-compact) .cs-panel, html body .cases .cs-case:has(.cs-quote-compact) .cs-screen,
html body .cases .cs-case:has(.cs-quote-compact) .cs-view, html body .cases .cs-case:has(.cs-quote-compact) video.cs-video { background: transparent !important; }
/* NOCAP quote sits in the facts-box slot (bottom of the text column) and is no taller than a facts box (100px vs 92-112), so the NOCAP
   card is 490 like the others: photo on the left, the quote (16/24, two lines) and one caption line beside it, 16px padding. */
html body .cases .cs-quote-compact { margin-top: auto !important; padding: 16px !important; display: grid !important; grid-template-columns: 32px minmax(0, 1fr);
  column-gap: 12px; row-gap: 0; align-items: start; }
html body .cases .cs-quote-compact blockquote { grid-column: 2; grid-row: 1; margin: 0; }
html body .cases .cs-quote-compact figcaption { display: contents !important; }
html body .cases .cs-quote-compact figcaption img { grid-column: 1; grid-row: 1 / span 2; align-self: start; }
html body .cases .cs-quote-compact figcaption span { grid-column: 2; grid-row: 2; display: block; line-height: 20px; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
html body .cases .cs-quote-compact figcaption b, html body .cases .cs-quote-compact figcaption small { display: inline !important; }
html body .cases .cs-quote-compact figcaption small::before { content: " · "; color: #444; }

/* ==== parts/radius-v5.css ==== */
/* Radius v5 (17 Oct, Erfan's table): cards 4px (process step card + its drawing panel, case, sector, service, proof cards);
   FAQ rows, mega menu, footer badges 2px; buttons and tags 2px. Loaded after radius-v2.css so it wins. */
html:not(#r5):not(#r4) body .pc-card, html:not(#r5):not(#r4) body .process2 .pc-card, html:not(#r5):not(#r4) body .pc-art, html:not(#r5):not(#r4) body .process2 .pc-art,
html:not(#r5):not(#r4) body .cases .cs-case, html:not(#r5):not(#r4) body .cs-case,
html:not(#r5):not(#r4) body .wi .se-card, html:not(#r5):not(#r4) body .se-card,
html:not(#r5):not(#r4) body #services .svc-card, html:not(#r5):not(#r4) body .svc-card,
html:not(#r5):not(#r4) body .proof3 .p3-set > *, html:not(#r5):not(#r4) body .p3-set > * { border-radius: 4px !important; }
html:not(#r5):not(#r4) body .faq2 details, html:not(#r5):not(#r4) body .mm-panel, html:not(#r5):not(#r4) body .ft3 .ft-badges-mini a.stk { border-radius: 2px !important; }
html:not(#r5):not(#r4) body a.btn, html:not(#r5):not(#r4) body button.btn, html:not(#r5):not(#r4) body .btn, html:not(#r5):not(#r4) body .tag, html:not(#r5):not(#r4) body .svc-tag { border-radius: 2px !important; }
/* 4px corners (Erfan, 17 Oct screenshots): proof cards, work-wall devices (screen inside 2px), audit box (+ its chrome ring),
   Compare "That's us" row, founder letter card, contact form card, footer location panel */
html:not(#r5):not(#r4) body :is(.proof3 .p3-set > *, .p3-card, .dv, .dv-tab, .dv-phone, .wall-link .dv, form.ck-form, .ck-form, .cmp-us, .cmp-row.cmp-us,
  .fl-card, .founder2 .fl-in, .founder2 .fl, .cl3-form, .cl3-panel, .ft-panel) { border-radius: 4px !important; }
html:not(#r5):not(#r4) body :is(.ck-form)::before, html:not(#r5):not(#r4) body :is(.ck-form)::after { border-radius: 4px !important; }
html:not(#r5):not(#r4) body :is(.dv img, .dv-tab img, .dv-phone img) { border-radius: 2px !important; }

/* ==== parts/dm-details.css ==== */
/* DesignMe details (17 Oct, Erfan: "apply the easy wins… plus Soon tags"). Our tokens, their ideas. */
/* 1 · ruled logo band: hairline above and below, full width, logos centred in the band */
html body section.clients { border-top: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; padding-bottom: 48px !important; margin-top: var(--sg2) !important; padding-top: 48px !important; }
@media (max-width: 760px) { html body section.clients { padding-top: 32px !important; padding-bottom: 32px !important; } }
/* 2 · square outlined icon tiles: mega-menu icons and the FAQ + */
html:not(#r5):not(#r4) body .mm-ico { width: 32px; height: 32px; border-radius: 2px !important; background: #FFFFFF; box-shadow: inset 0 0 0 1px #E6E6E6; }
html body .mm-item:hover .mm-ico, html body .mm-item:focus-visible .mm-ico { background: #F6F6F6; }
html body .fq-list summary::after { border-radius: 2px !important; box-shadow: inset 0 0 0 1px #E6E6E6 !important; }
html body .fq-list details[open] summary::after { box-shadow: none !important; }
/* 3 · soft nav hover: a quiet grey 2px highlight behind the link */
html body .links .nl, html body .mm-btn { padding: 8px 12px; border-radius: 2px !important; transition: background-color .4s cubic-bezier(.25,1,.5,1), color .4s cubic-bezier(.25,1,.5,1); }
html body .links .nl:hover, html body .mm-btn:hover, html body .mm.open .mm-btn { background: #F2F2F2; color: var(--ink); }
/* 4 · uppercase meta labels: case year + logo-band label, 12px 500, letter-spaced, grey */
html body .cs-year, html body .clients .clients-label { font: 500 12px/16px var(--text) !important; letter-spacing: .08em !important; text-transform: uppercase; color: #555 !important; }
/* 5 · "Soon" tags on footer links that aren't built yet */
html body .ft3 .ft-soon { display: inline-block; margin-left: 8px; padding: 2px 6px; border-radius: 2px; background: rgba(255,255,255,.08); color: #BDBDBD; font: 500 12px/16px var(--text); letter-spacing: .04em; vertical-align: 1px; }
html body .ft3 .ft-nw { white-space: nowrap; }
/* FAQ open state: the square tile no longer rotates (it became a diamond); open = same square, orange, with a minus */
/* 14 Nov (Erfan: orange comes and goes when one opens and another shuts; + lines not centred): lines are 2px on a 32px tile so they
   land on whole pixels (1.75px sat at 15.125px and blurred off-centre). Lines use currentColor and the vertical bar shrinks to 0, so
   tile colour, line colour and + → − all move together; a closing card goes back to the closed look at the same moment the new one opens. */
html body .fq-list summary::after { transform: none !important; color: var(--ink); background-color: #fff !important;
  background-image: linear-gradient(currentColor, currentColor), linear-gradient(currentColor, currentColor) !important;
  background-position: center, center !important; background-repeat: no-repeat !important; background-size: 12px 2px, 2px 12px !important;
  transition: background-size .25s cubic-bezier(.2,.8,.2,1) !important; }
/* Erfan 14 Nov: "don't change the faq plus background color… no orange": open = same white tile and grey ring, + becomes − */
html body .fq-list details[open]:not(.closing) summary::after { background-size: 12px 2px, 2px 0px !important; }
html body .fq-list details[open] summary::after, html body .fq-list details.closing summary::after { box-shadow: inset 0 0 0 1px #E6E6E6 !important; }
@media (prefers-reduced-motion: reduce) { html body .fq-list summary::after { transition: none !important; } }
/* Footer "Soon" v2 (Erfan: "because of the Soon tags the lines are broken… make it clean"): no tag box. Unbuilt links read quieter
   (#858585 on ink, 5.3:1) and say "Coming soon" on hover/focus in the footer tooltip style; one line per link again. */
html body .ft3 .ft-cols a.ft-later { color: #858585 !important; position: relative; }
html body .ft3 .ft-cols a.ft-later::after { content: 'Coming soon'; position: absolute; left: 0; bottom: calc(100% + 6px); padding: 4px 8px; border-radius: 2px;
  background: #fff; color: #050505; font: 500 13px/16px var(--text); white-space: nowrap; opacity: 0; transform: translateY(2px); pointer-events: none;
  transition: opacity .15s ease, transform .15s ease; }
html body .ft3 .ft-cols a.ft-later:hover::after, html body .ft3 .ft-cols a.ft-later:focus-visible::after { opacity: 1; transform: none; }
html body .ft3 .ft-cols a.ft-later:hover { color: #BDBDBD !important; }
/* v3 (Erfan: "for Healthtech, Cost estimator, RFP generator we can write Soon, those lines will not break"): short names + inline Soon tag, no tooltip */
html body .ft3 .ft-cols a.ft-later { color: #BDBDBD !important; }
html body .ft3 .ft-cols a.ft-later::after { content: none !important; }
/* footer columns rebalanced so "Cost estimator Soon" / "RFP generator Soon" fit on one line inside the grid */
@media (min-width: 1101px) {
  html body .ft3 .ft-top { grid-template-columns: 240px minmax(0, 1fr) !important; }
  html body .ft3 .ft-cols { grid-template-columns: repeat(4, minmax(0, 1fr)) minmax(0, 1.4fr) !important; }
}
/* footer: four link columns (Platforms removed, still in the Services menu) — Erfan, 17 Oct "instead of five, remove one" */
@media (min-width: 1101px) { html body .ft3 .ft-cols { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; } }
/* brand column wide enough for its line + the three badges; 64px gutter before the link columns */
@media (min-width: 1101px) { html body .ft3 .ft-top { grid-template-columns: 320px minmax(0, 1fr) !important; column-gap: 64px !important; } }
/* nav reveal: slides up out of view on scroll down, back on scroll up (parts/nav-reveal.js) */
html body .nav { transition: transform .35s cubic-bezier(.22, 1, .36, 1), background-color .3s ease; will-change: transform; }
html body .nav.nav-hidden { transform: translateY(-100%); }
@media (prefers-reduced-motion: reduce) { html body .nav { transition: none; } }
/* contact: left column (title, line, three promises) stays in view while the form scrolls past (Erfan, 17 Oct: "make this section sticky") */
@media (min-width: 861px) { html body .cl2-in .cl3-side { position: sticky; top: 96px; align-self: start; } }
/* contact copy: top-aligned with the form card at rest (no 40px inset); while scrolling it holds at the section's own top padding (128) */
@media (min-width: 861px) { html body .cl2-in .cl3-side { padding-top: 0 !important; top: var(--sg2, 128px) !important; } }

/* ==== parts/hero-proof.css ==== */
/* Hero proof row (17 Oct, Erfan approved "proof row in the hero: quick and sourced"). Sources: 12 years + 140+ clients over 12 years =
   decisions row 35 (11 Oct, Erfan); Framer Pro Expert = 16 Oct (Erfan). Contra 5.0 stays in the review badge above, not repeated. */
html body .hero .hero-proof { list-style: none; margin: 40px auto 0; padding: 24px 0 0; display: flex; justify-content: center; gap: 0; border-top: 1px solid #E6E6E6; max-width: 640px; }
html body .hero .hero-proof li { flex: 1 1 0; padding: 0 24px; text-align: center; }
html body .hero .hero-proof li + li { border-left: 1px solid #E6E6E6; }
html body .hero .hero-proof b { display: block; font: 600 24px/32px var(--head, Inter, sans-serif); letter-spacing: -0.02em; color: #050505; }
html body .hero .hero-proof span { display: block; margin-top: 4px; font: 400 14px/20px var(--text, Inter, sans-serif); color: #444; }
@media (max-width: 760px) {
  html body .hero .hero-proof { margin-top: 32px; padding-top: 16px; }
  html body .hero .hero-proof li { padding: 0 8px; }
  html body .hero .hero-proof b { font-size: 20px; line-height: 28px; }
}
@media (min-width: 761px) {
  html body .hero .hero-proof { max-width: 720px; }
  html body .hero .hero-proof li { flex: 0 1 auto; padding: 0 40px; }
  html body .hero .hero-proof span { white-space: nowrap; }
}
html body .sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
@media (min-width: 761px) { html body .hero .hero-proof { max-width: 800px; } html body .hero .hero-proof li { padding: 0 32px; } }
@media (max-width: 760px) {
  html body .hero .hero-proof { display: grid; grid-template-columns: 1fr 1fr; row-gap: 16px; }
  html body .hero .hero-proof li:nth-child(3) { grid-column: 1 / -1; border-left: 0; border-top: 1px solid #E6E6E6; padding-top: 16px; }
}

/* ==== parts/case-play.css ==== */
/* Case films, click to play (17 Oct 2026, Erfan: "click-to-play case films: speed is a ranking factor"). parts/case-play.js.
   The picture is the play control (a <div>, no longer a link); one round icon-only button sits in the middle of it.
   48px, round (icon-only round button), white, ink icon, 1px hairline, no shadow. Panel hover scales the button 1.04. */
html body .cases .cs-panel { cursor: pointer; }
html body .cases .cs-panel .cs-play {
  position: absolute; z-index: 3; left: 50%; top: 50%; width: 48px; height: 48px; margin: -24px 0 0 -24px; padding: 0;
  display: grid; place-items: center; border: 1px solid #E6E6E6; border-radius: 50% !important; background: #FFFFFF; color: #050505;
  box-shadow: none; cursor: pointer; transform: scale(1); transition: transform .2s ease; -webkit-tap-highlight-color: transparent;
}
html body .cases .cs-panel .cs-play svg { display: block; width: 20px; height: 20px; fill: currentColor; }
html body .cases .cs-panel:hover .cs-play { transform: scale(1.04); }
html body .cases .cs-panel .cs-play:focus-visible { outline: 2px solid #FF3C00; outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { html body .cases .cs-panel .cs-play { transition: none; } }
/* while a film plays, the pause button hides until the picture is hovered or the button has focus (it covered the film) */
html body .cases .cs-panel.is-on .cs-play { opacity: 0; transition: opacity .2s ease, transform .2s ease; }
html body .cases .cs-panel.is-on:hover .cs-play, html body .cases .cs-panel.is-on .cs-play:focus-visible { opacity: 1; }
@media (hover: none) { html body .cases .cs-panel.is-on .cs-play { opacity: .9; width: 40px; height: 40px; left: auto; top: auto; right: 16px; bottom: 16px; margin: 0; } }

/* ==== parts/in-short.css ==== */
/* "Pentaclay, in short" (17 Oct, Erfan: Build #2, after DesignMe /industries/ai) — dated summary + 4 fact tiles inside the Ask AI band */
html body .cl3 .cl3-short { justify-self: stretch; width: 100%; max-width: 1200px; margin: 0 auto; text-align: left;
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; }
html body .cl3 .cl3-short-head { grid-column: 1; display: grid; gap: 8px; align-content: start; padding-top: 4px; }
html body .cl3 .cl3-short-k { margin: 0; font: 500 12px/16px var(--text, Inter, sans-serif); letter-spacing: 0.06em; text-transform: uppercase; color: #050505; max-width: none; }
html body .cl3 .cl3-short-d { margin: 0; font: 400 14px/20px var(--text, Inter, sans-serif); color: #555; }
html body .cl3 .cl3-short-p { grid-column: 2 / span 3; margin: 0; max-width: 760px; font: 400 20px/32px var(--text, Inter, sans-serif); letter-spacing: -0.01em; color: #444; text-wrap: pretty; }
html body .cl3 .cl3-facts { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; margin: 16px 0 0; padding: 0; list-style: none; }
html body .cl3 .cl3-facts li { display: grid; gap: 8px; align-content: start; margin: 0; padding: 24px; background: #fff; border: 1px solid #E6E6E6; border-radius: 2px; box-shadow: none; }
html body .cl3 .cl3-facts b { font: 600 24px/32px var(--text, Inter, sans-serif); letter-spacing: -0.02em; color: #050505; }
html body .cl3 .cl3-facts span { font: 400 14px/20px var(--text, Inter, sans-serif); color: #444; }

@media (max-width: 860px) {
  html body .cl3 .cl3-short { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  html body .cl3 .cl3-short-head, html body .cl3 .cl3-short-p, html body .cl3 .cl3-facts { grid-column: 1; }
  html body .cl3 .cl3-short-head { padding-top: 0; }
  html body .cl3 .cl3-short-p { font-size: 18px; line-height: 28px; }
  html body .cl3 .cl3-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 8px; }
  html body .cl3 .cl3-facts li { padding: 16px; }
}

/* ==== parts/question-chips.css ==== */
/* Before the demo: question chips restored (17 Oct, Erfan: "You didn't revert this back"). The tick-box self-check is archived in
   site/_archive/self-check-2026-10-17/. These are the chips exactly as they rendered before the swap: tinted speech bubbles, small tilt
   that straightens on hover, 2px corners (radius v5: tags and chips 2px). */
html body .ck-qs { list-style: none; margin: 16px 0 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 14px 12px; max-width: 860px; }
html body .ck-qs li { --r: 0deg; padding: 10px 16px; border-radius: 2px !important; font: 500 16px/24px var(--text); transform: rotate(var(--r)); transition: transform .4s cubic-bezier(.25, 1, .5, 1); }
html body .ck-qs li:nth-child(3n+1) { background: #FCE6DC; color: #7A2A0E; }
html body .ck-qs li:nth-child(3n+2) { background: #E4EEDF; color: #2E5631; }
html body .ck-qs li:nth-child(3n+3) { background: #E0E8F4; color: #23426B; }
html body .ck-qs li:nth-child(1) { --r: -2deg; } html body .ck-qs li:nth-child(2) { --r: 1.5deg; } html body .ck-qs li:nth-child(3) { --r: -1deg; }
html body .ck-qs li:nth-child(4) { --r: 2deg; } html body .ck-qs li:nth-child(5) { --r: -1.5deg; } html body .ck-qs li:nth-child(6) { --r: 1deg; }
html body .checks2 .ck-qs li:hover { transform: rotate(0deg); }
@media (prefers-reduced-motion: reduce) { html body .ck-qs li { transition-duration: .01s !important; } html body .checks2 .ck-qs li:hover { transform: rotate(var(--r)); } }
@media (max-width: 760px) { html body .ck-qs li { font-size: 14px; line-height: 20px; padding: 8px 12px; } }

/* ==== parts/ds-fix-1017.css ==== */
/* design-system v3 audit fixes (17 Oct): page values that broke the written rules */
html body .tag, html body .svc-tag { opacity: 1 !important; }                                   /* 70% opacity made 12px tag text fail contrast */
html body #services .sl-cols small { font: 500 12px/16px var(--text) !important; letter-spacing: .08em !important; text-transform: uppercase; color: #555 !important; }
html body .se-meta, html body .se-meta b, html body .mm-label { letter-spacing: .08em !important; line-height: 16px !important; }
html body #services .sl-who-h, html body .pc-desc, html body .cmp-name small, html body .cmp-name b + small { color: #444 !important; }
html body .pc-lead { line-height: 28px !important; }
html body .ftl p { line-height: 20px !important; }
@media (max-width: 760px) { html body .se-title { line-height: 28px !important; } html body .pc-num { line-height: 64px !important; } html body .faq2 .fq-list { margin-top: 8px; } }
html body .cases .cs-panel:hover .cs-play { transform: none !important; }
html body .cases .cs-panel .cs-play:focus-visible { outline-color: #D23100 !important; }
html body #services .sl-ico, html body #services .sl-who-h, html body .ft3 .ft-badges-mini .stk-tip { transition-duration: .4s !important; transition-timing-function: cubic-bezier(.25,1,.5,1) !important; }

/* ==== parts/ask-ai-v2.css ==== */
/* Ask AI band v2 (17 Oct, Erfan: "this design is not good… take inspiration from DesignMe"). DesignMe: a compact block, small
   left-aligned title over a row of separate square icon tiles, beside other content. Ours: two columns inside the 1200 column —
   left: title (32/40 600, left) + 5 separate 48px tiles (white, 1px hairline, 2px radius, 8px gap, hover #F6F6F6, tooltip kept);
   right: "Pentaclay, in short" label + date over the paragraph. Hairline under the band separates it from the contact grid. */
html body .cl3 .cl3-ai { display: grid !important; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); grid-template-rows: auto 1fr; column-gap: 64px; row-gap: 24px;
  max-width: 1200px; margin: 0 auto !important; padding: 0 0 64px !important; text-align: left !important; border-bottom: 1px solid #E6E6E6; }
html body .cl3 .cl3-ai > h2.tt { grid-column: 1; grid-row: 1; margin: 0 !important; max-width: none !important; text-align: left !important;
  font-size: 32px !important; line-height: 40px !important; letter-spacing: -0.03em !important; }
html body .cl3 .cl3-ai .cl3-ai-btns { grid-column: 1; grid-row: 2; align-self: start; display: flex !important; gap: 8px !important; margin: 0 !important;
  padding: 0 !important; border: 0 !important; background: none !important; box-shadow: none !important; width: auto !important; justify-content: flex-start !important; }
html body .cl3 .cl3-ai .cl3-ai-btns a { width: 48px !important; height: 48px !important; display: grid; place-items: center; margin: 0 !important;
  background: #FFFFFF !important; border: 0 !important; box-shadow: inset 0 0 0 1px #E6E6E6 !important; border-radius: 2px !important; color: #050505 !important;
  transition: background-color .4s cubic-bezier(.25,1,.5,1) !important; }
html body .cl3 .cl3-ai .cl3-ai-btns a:hover, html body .cl3 .cl3-ai .cl3-ai-btns a:focus-visible { background: #F6F6F6 !important; }
html body .cl3 .cl3-ai .cl3-ai-btns a svg { width: 20px; height: 20px; }
html body .cl3 .cl3-ai .cl3-short { grid-column: 2; grid-row: 1 / span 2; display: grid !important; grid-template-columns: 1fr !important; gap: 12px !important; margin: 0 !important; padding: 0 !important; }
html body .cl3 .cl3-ai .cl3-short-head { display: flex !important; gap: 12px; align-items: baseline; }
html body .cl3 .cl3-ai .cl3-short-k { margin: 0; font: 500 12px/16px var(--text) !important; letter-spacing: .08em !important; text-transform: uppercase; color: #050505 !important; }
html body .cl3 .cl3-ai .cl3-short-d { margin: 0; font: 400 12px/16px var(--text) !important; color: #555 !important; }
html body .cl3 .cl3-ai .cl3-short-p { margin: 0 !important; max-width: none !important; font: 400 18px/28px var(--text) !important; color: #444 !important; }
@media (max-width: 860px) {
  html body .cl3 .cl3-ai { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto; padding-bottom: 48px !important; }
  html body .cl3 .cl3-ai > h2.tt, html body .cl3 .cl3-ai .cl3-ai-btns, html body .cl3 .cl3-ai .cl3-short { grid-column: 1; grid-row: auto; }
  html body .cl3 .cl3-ai > h2.tt { font-size: 24px !important; line-height: 32px !important; }
  html body .cl3 .cl3-ai .cl3-short-p { font-size: 16px !important; line-height: 24px !important; }
}
/* fixes: full-width band ground kept (content centred via padding), label above the paragraph, tiles start-aligned */
html body .cl3 .cl3-ai { max-width: none !important; padding-left: max(var(--gut, 16px), calc((100% - 1200px) / 2)) !important; padding-right: max(var(--gut, 16px), calc((100% - 1200px) / 2)) !important; border-bottom: 0 !important; }
html body .cl3 .cl3-ai .cl3-ai-btns { justify-self: start !important; }
html body .cl3 .cl3-ai .cl3-short { display: block !important; }
html body .cl3 .cl3-ai .cl3-short-head { display: flex !important; flex-direction: row !important; gap: 12px !important; margin: 0 0 12px !important; width: auto !important; }
html body .cl3 .cl3-ai .cl3-short-head > * { white-space: nowrap; }
html:not(#ai2) body .cl3 .cl3-ai > h2.tt, html:not(#ai2) body .cl3 .cl3-ai > h2.tt * { text-align: left !important; margin-left: 0 !important; justify-self: start !important; }
html:not(#ai2) body .cl3 .cl3-ai > h2.tt .tt-g { display: inline !important; }
html:not(#ai2) body .cl3 .cl3-ai { padding-top: var(--sg2, 128px) !important; padding-bottom: 0 !important; }
/* same columns as the contact grid below (5fr / 6fr, 96px gap), so "in short" starts exactly where the form card starts */
@media (min-width: 861px) { html:not(#ai2) body .cl3 .cl3-ai { grid-template-columns: minmax(0, 5fr) minmax(0, 6fr) !important; column-gap: 96px !important; } }
@media (max-width: 1100px) {
  html:not(#ai2) body .cl3 .cl3-ai { grid-template-columns: minmax(0, 1fr) !important; grid-template-rows: auto !important; row-gap: 24px !important; }
  html:not(#ai2) body .cl3 .cl3-ai > h2.tt, html:not(#ai2) body .cl3 .cl3-ai .cl3-ai-btns, html:not(#ai2) body .cl3 .cl3-ai .cl3-short { grid-column: 1 !important; grid-row: auto !important; }
}
/* 17 Oct: Ask AI band now sits after the contact form, right above the footer (Erfan). One 128/96/64 gap on each side. */
html:not(#ai2) body .cl3 .cl3-ai { padding-top: var(--sg2, 128px) !important; padding-bottom: var(--sg2, 128px) !important; }
/* 17 Oct, Erfan: the grey contact band is a coloured band, so it carries one unit inside at the top; the Ask AI band below closes it with one unit at the bottom. */
html:not(#ai2) body .cl3 .cl2-in { padding-top: var(--sg2, 128px) !important; padding-bottom: 0 !important; }  /* Ask AI shares the grey; its own top padding is the one gap */

/* ==== parts/mobile-1017.css ==== */
/* Mobile tidy-up (17 Oct 2026, Erfan: "Tidy up the mobile design, tidy up the spacing, also the menu. Menu should have a good UX…
   use your best judgment"). Audit: research/mobile-audit-2026-10-17/. Only design-system values: 16px gutter, 8-pt grid,
   type 12/14/16/18/20/24, 2px boxes, 1px #E6E6E6 hairlines, no shadows. Loaded just before no-shadow.css. */

/* ---------- Phone menu (≤900): full-height sheet, page locked behind it ---------- */
@media (max-width: 900px) {
  html.menu-lock, html.menu-lock body { overflow: hidden; }
  html:not(#mb) body .nav.menu-open .links {
    position: absolute; top: 100%; left: 0; right: 0; height: calc(100dvh - 56px); max-height: none;
    display: flex; flex-direction: column; align-items: stretch; gap: 0; padding: 0 16px; margin: 0;
    background: #fff; border: 0; border-top: 1px solid #E6E6E6; border-radius: 0 !important;
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }
  /* top-level rows: 20/28 600 ink, 56px tall, hairline between */
  html:not(#mb) body .nav.menu-open .links > .mm, html:not(#mb) body .nav.menu-open .links > .nl { border-bottom: 1px solid #E6E6E6; }
  html:not(#mb) body .nav.menu-open .links > .nl,
  html:not(#mb) body .nav.menu-open .links > .mm > .mm-btn {
    display: flex; align-items: center; justify-content: space-between; width: 100%; min-height: 56px; padding: 0 !important; margin: 0;
    font: 600 20px/28px var(--text) !important; letter-spacing: -0.01em; color: var(--ink, #050505) !important; background: none !important; border-radius: 0 !important; }
  html:not(#mb) body .nav.menu-open .links > .mm > .mm-btn .mm-arrow { width: 20px; height: 20px; transition: transform .4s cubic-bezier(.25, 1, .5, 1); }
  html:not(#mb) body .nav.menu-open .links > .mm.open > .mm-btn .mm-arrow { transform: rotate(180deg); }
  /* sub-menu: a plain list under its row, no boxed panel, no video promo */
  html:not(#mb) body .nav.menu-open .mm-panel { padding: 0 0 16px !important; margin: 0; border: 0 !important; box-shadow: none !important; background: none !important; border-radius: 0 !important; }
  html:not(#mb) body .nav.menu-open .mm-wrap, html:not(#mb) body .nav.menu-open .mm-grid { display: block !important; padding: 0 !important; margin: 0 !important; border: 0 !important; }
  html:not(#mb) body .nav.menu-open .mm-col { display: block !important; padding: 0 !important; margin: 0 !important; border: 0 !important; }
  html:not(#mb) body .nav.menu-open .mm-col + .mm-col { margin-top: 16px !important; }
  html:not(#mb) body .nav.menu-open .mm-vid { display: none !important; }
  html:not(#mb) body .nav.menu-open .mm-label { margin: 8px 0 4px !important; padding: 0 !important; font: 500 12px/16px var(--text) !important; letter-spacing: .08em; text-transform: uppercase; color: #555 !important; border: 0 !important; }
  html:not(#mb) body .nav.menu-open .mm-item { display: grid !important; grid-template-columns: 32px minmax(0, 1fr); align-items: center; column-gap: 12px; min-height: 48px;
    padding: 8px 0 !important; margin: 0 !important; border: 0 !important; background: none !important; border-radius: 0 !important; }
  html:not(#mb) body .nav.menu-open .mm-item > :first-child:not(:only-child) { width: 32px !important; height: 32px !important; }
  html:not(#mb) body .nav.menu-open .mm-item b, html:not(#mb) body .nav.menu-open .mm-item strong { display: block; font: 500 16px/24px var(--text) !important; color: var(--ink, #050505) !important; }
  html:not(#mb) body .nav.menu-open .mm-item small, html:not(#mb) body .nav.menu-open .mm-item em, html:not(#mb) body .nav.menu-open .mm-item p { display: block; font: 400 14px/20px var(--text) !important; font-style: normal; color: #444 !important; margin: 0 !important; }
  html:not(#mb) body .nav.menu-open .mm-bar { display: inline-flex !important; align-items: center; gap: 8px; min-height: 48px; width: auto !important; margin: 8px 0 0 !important; padding: 0 !important;
    background: none !important; border: 0 !important; font: 500 16px/24px var(--text) !important; color: var(--ink, #050505) !important; text-decoration: underline; text-underline-offset: 6px; text-decoration-thickness: 1px; }
  /* pinned foot: one primary action + email, always in reach */
  html:not(#mb) body .nav .links-foot { display: none; }
  html:not(#mb) body .nav.menu-open .links-foot { display: grid; gap: 8px; position: sticky; bottom: 0; margin: auto -16px 0; padding: 16px 16px calc(16px + env(safe-area-inset-bottom)); background: #fff; border-top: 1px solid #E6E6E6; }
  html:not(#mb) body .nav.menu-open .links-foot .btn { display: flex; justify-content: center; width: 100%; height: 48px; min-height: 48px; font: 500 16px/24px var(--text); }
  html:not(#mb) body .nav.menu-open .links-foot .lf-mail { display: flex; align-items: center; justify-content: center; min-height: 40px; font: 400 14px/20px var(--text); color: #444; text-decoration: none; }
  html:not(#mb) body .nav.menu-open .links-foot .lf-mail span { color: var(--ink, #050505); text-decoration: underline; text-underline-offset: 4px; margin-left: 4px; }
  /* header stays put while the sheet is open */
  html:not(#mb) body .nav.menu-open { transform: none !important; background: #fff !important; }
}
@media (min-width: 901px) { html:not(#mb) body .nav .links-foot { display: none !important; } }
@media (prefers-reduced-motion: reduce) { html:not(#mb) body .nav.menu-open .mm-btn .mm-arrow { transition: none; } }

/* ---------- Hero: keep "buyers understand." whole only where it fits ---------- */
html body .hero h1 .nw { white-space: nowrap; }
@media (max-width: 760px) { html body .hero h1 .nw { white-space: normal; } }

/* ---------- Case cards (≤900): same gap under every picture; one meta order ---------- */
@media (max-width: 900px) {
  html:not(#mb) body .cases .cs-case, html:not(#mb) body .cases .cs-case:nth-child(even) { gap: 0 !important; row-gap: 0 !important; }
  html:not(#mb) body .cases .cs-case .cs-copy { margin: 0 !important; padding: 24px !important; }
  html:not(#mb) body .cases .cs-id { display: flex !important; flex-direction: column !important; align-items: flex-start !important; gap: 8px !important; }
  html:not(#mb) body .cases .cs-year { order: -1 !important; }
  html:not(#mb) body .cases .cs-name { display: flex !important; flex-wrap: wrap; align-items: center; gap: 8px !important; }
  html:not(#mb) body .cases .cs-name h3 { flex: 0 0 100%; margin: 0 0 4px !important; }
}

/* ---------- Who we build for (≤760): picture starts 32px under the text, no blank band ---------- */
@media (max-width: 760px) {
  html:not(#mb) body .wi .se-card { min-height: calc(200px + 61cqw) !important; }
}

/* ---------- Process tabs: 44px tap targets ---------- */
@media (max-width: 900px) { html:not(#mb) body .pc-tabs button { min-height: 44px; align-content: center; } }

/* ---------- FAQ (≤900): questions first, the "Can't find your answer?" box after them ---------- */
@media (max-width: 900px) {
  html:not(#mb) body .faq2 .fq-in { display: flex !important; flex-direction: column; }
  html:not(#mb) body .faq2 .fq-head { display: contents; }
  html:not(#mb) body .faq2 .fq-head > :not(.fq-ask) { order: 1; }
  html:not(#mb) body .faq2 .fq-list { order: 2; margin-top: 40px !important; }
  html:not(#mb) body .faq2 .fq-ask { order: 3; margin-top: 24px !important; }
}

/* ---------- Founder: illustration stays inside the card ---------- */
@media (max-width: 760px) { html:not(#mb) body .fl-photo { max-width: 100%; margin-left: auto; margin-right: 0; right: auto; } html:not(#mb) body .fl-card { overflow: hidden; } }

/* ---------- Ask AI (≤1100): same order as desktop — title, the five tiles, then the paragraph ---------- */
@media (max-width: 1100px) {
  html:not(#mb) body .cl3 .cl3-ai > h2.tt { order: 1; }
  html:not(#mb) body .cl3 .cl3-ai .cl3-ai-btns { order: 2; }
  html:not(#mb) body .cl3 .cl3-ai .cl3-short { order: 3; margin-top: 16px !important; }
}

/* ---------- Footer (≤760): badge tiles fill the row; 40px link rows (the wordmark keeps sitting on the panel edge, same as desktop) ---------- */
@media (max-width: 760px) {
  html:not(#mb) body .ft3 .ft-badges { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px !important; width: 100% !important; padding: 0 !important; }
  html:not(#mb) body .ft3 .ft-badges a { width: auto !important; margin: 0 !important; }
  html:not(#mb) body .ft3 .ft-cols a { display: flex; align-items: center; min-height: 40px; }
}

/* ---------- Services open row (≤760): margins were stacking on the flex gap (56px steps); one 24px rhythm ---------- */
@media (max-width: 760px) {
  html:not(#mb) body .sl .sl-txt { gap: 24px !important; }
  html:not(#mb) body .sl .sl-who, html:not(#mb) body .sl .sl-link { margin: 0 !important; }
}

/* ---------- FAQ (≤900): title → first question is one 40px step (the column gap was adding 32 more); ask box full width ---------- */
@media (max-width: 900px) {
  html:not(#mb) body .faq2 .fq-in { gap: 0 !important; }
  html:not(#mb) body .faq2 .fq-ask { width: 100% !important; max-width: none !important; box-sizing: border-box; }
}

/* ---------- Phone menu fixes from the reference study (research/mobile-ref-2026-10-17/findings.md) ---------- */
@media (max-width: 900px) {
  /* the base .links centres its column, which pushed an opened row above the top of the sheet; start at the top */
  html:not(#mb) body .nav.menu-open .links { justify-content: flex-start !important; animation: mb-in .24s cubic-bezier(.22, 1, .36, 1); }
  html:not(#mb) body .nav.menu-open .links > * { flex: none; }
  /* no Android blue tap flash; pressed state is the system's light grey */
  html body .menu-btn, html body .nav .mm-btn, html body .nav .nl, html body .nav .mm-item, html body .nav .links-foot a { -webkit-tap-highlight-color: transparent; }
  html:not(#mb) body .nav.menu-open .links > .nl:active, html:not(#mb) body .nav.menu-open .links > .mm > .mm-btn:active, html:not(#mb) body .nav.menu-open .mm-item:active { background: #F6F6F6 !important; }
}
@keyframes mb-in { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { html:not(#mb) body .nav.menu-open .links { animation: none; } }

/* ---------- Phone menu button: ghost icon that turns into × (17 Oct, Erfan: "switch… to a ghost icon… like DesignMe") ----------
   40x40 box, 1px #E6E6E6 hairline, 2px corners, no fill; a 48x48 tap area; two 16px ink lines 6px apart rotate into × in place. */
@media (max-width: 900px) {
  html:not(#mb) body .nav .menu-btn { all: unset; box-sizing: border-box; position: relative; display: inline-grid; place-items: center; justify-self: end; grid-column: 3;
    width: 40px; height: 40px; padding: 0; border: 1px solid #E6E6E6; border-radius: 2px !important; background: transparent; color: var(--ink, #050505);
    cursor: pointer; -webkit-tap-highlight-color: transparent; transition: background-color .4s cubic-bezier(.25, 1, .5, 1); }
  html:not(#mb) body .nav .menu-btn::before { content: ''; position: absolute; inset: -4px; }   /* 48x48 tap area */
  html:not(#mb) body .nav .menu-btn:active { background: #F6F6F6; }
  html:not(#mb) body .nav .menu-btn:focus-visible { outline: 2px solid #D23100; outline-offset: 2px; }
  html:not(#mb) body .nav .menu-btn .mb-ico { position: relative; display: block; width: 16px; height: 8px; }
  html:not(#mb) body .nav .menu-btn .mb-ico i { position: absolute; left: 0; width: 16px; height: 2px; background: currentColor;
    transition: transform .24s cubic-bezier(.22, 1, .36, 1), top .24s cubic-bezier(.22, 1, .36, 1); }
  html:not(#mb) body .nav .menu-btn .mb-ico i:first-child { top: 0; }
  html:not(#mb) body .nav .menu-btn .mb-ico i:last-child { top: 6px; }
  html:not(#mb) body .nav.menu-open .menu-btn .mb-ico i:first-child { top: 3px; transform: rotate(45deg); }
  html:not(#mb) body .nav.menu-open .menu-btn .mb-ico i:last-child { top: 3px; transform: rotate(-45deg); }
}
@media (hover: hover) and (max-width: 900px) { html:not(#mb) body .nav .menu-btn:hover { background: #F6F6F6; } }
@media (prefers-reduced-motion: reduce) { html:not(#mb) body .nav .menu-btn .mb-ico i { transition: none; } }

/* ==== parts/no-shadow.css ==== */
/* No shadows anywhere (16 Oct 2026, Erfan: "can we not use shadow? … remove shadow from all our designs").
   Loaded last. Drop shadows, glows and drop-shadow filters are removed; 1px hairlines (inset or 0-blur spread) stay because they are
   borders, not shadows. Elevation now comes from the hairline and the ground colour only. */
html body .svc-card, html body #services .svc-card { box-shadow: inset 0 0 0 1px #E6E6E6; }
html body .mm-panel { box-shadow: inset 0 0 0 1px #E6E6E6; }
html body form.ck-form { box-shadow: inset 0 0 0 1px #E6E6E6; }
html body .cmp-row.cmp-us, html body .cmp-row.cmp-us.draw { box-shadow: inset 0 0 0 1px #FF3C00; }
html body .cmp-tag, html body .cmp-why { box-shadow: none; }
html body .dv { box-shadow: inset 0 0 0 1px #2A2A2A; }
html body .pc-art .p-lift { filter: none; }
html body .wi .se-card:hover, html body .wi .se-card:focus-visible { box-shadow: inset 0 0 0 1px #BDBDBA; }
html body .fq-list details, html body .fq-list details[open], html body .faq2 details[open] { box-shadow: inset 0 0 0 1px #E6E6E6 !important; }  /* no drop shadow on the open FAQ row */

/* ==== parts/phone-round.css ==== */
/* Rounded phone mockups (design system v3.2, token r-phone, approved exception, Erfan 17 Oct 2026).
   Phone frame corner = 15% of the frame width (was 12.5%; Erfan 17 Oct "iPhone style… a bit more round"); screen corner = frame corner - 6px bezel (nested rule).
   Frame width on the work wall = (var(--dh) - 12px) * 0.46209 + 12px, so: 24px at --dh 400, 16px at --dh 260.
   Tablets and browser windows keep radius v5 (4px frame, 2px screen). Loaded last so it beats radius-v5.css. */
html:not(#r5):not(#r4):not(#rp) body .dv.dv-phone,
html:not(#r5):not(#r4):not(#rp) body .wall-link .dv.dv-phone {
  --phone-r: calc(((var(--dh, 400px) - 12px) * 0.46209 + 12px) * 0.15);
  border-radius: var(--phone-r) !important;
}
html:not(#r5):not(#r4):not(#rp) body .dv.dv-phone img { border-radius: calc(var(--phone-r) - 6px) !important; }

/* ==== parts/founder-photo.css ==== */
/* Founder letter photo (Erfan, 17 Oct 2026: option E). The pencil-sketch cut-out at the card's bottom-right is retired:
   its greyscale, drawn look and corner bleed matched DesignMe's founder note. Now: the real photo, square, at the top of
   the facts column, only the flat wall recoloured to brand orange #FF3C00 (face and clothes untouched). 2px corners (a box).
   Research: agency-plan/research/founder-sections-2026-10-17/README.md. Loaded last. */
html body .fl-card .fl-portrait { grid-column: 2; grid-row: 2; display: block; width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; border-radius: 2px; margin: 4px 0 32px; }
html body .fl-card .fl-stats { grid-row: 3; }
html body .fl-card .fl-copy { grid-row: 2 / span 2; }
@media (max-width: 860px) {
  html body .fl-card .fl-portrait, html body .fl-card .fl-stats, html body .fl-card .fl-copy { grid-column: auto; grid-row: auto; }
  html body .fl-card .fl-portrait { max-width: 320px; margin: 0 0 32px; }
}
/* "From the founder" as a small label above the heading (Erfan, 17 Oct: the two sentences read as one heading and didn't
   connect). meta-label style: 12/16 500 uppercase 0.08em, mute #555; 16px to the heading. Label + heading share grid row 1. */
html body .fl-card .fl-head { grid-column: 1 / -1; grid-row: 1; }
html body .fl-card .fl-kicker { margin: 0 0 16px; font: 500 12px/16px var(--text, Inter, sans-serif); letter-spacing: .08em; text-transform: uppercase; color: #555555 !important; }  /* beats the site-wide reading-grey #444 !important on section paragraphs */

/* ==== parts/title-align.css ==== */
/* Title alignment rule (Erfan 17 Oct, content-rules "Words"): a title sits on the left edge of left-aligned content under it (lists, tables, tabs, FAQ, forms); grids, strips and card walls keep centred titles. */
html body .svc-head, html body .pr-head, html body .cmp-head { justify-items: start; text-align: left; }

/* ==== parts/form-autofill.css ==== */
/* Browser autofill must not change our field style (README "Form fields": white box, 1px line border, ink text).
   Chrome and Safari paint autofilled fields light blue with a browser rule that page CSS cannot override by
   background-color, so the white comes from a 0-blur inset fill (a fill, not a shadow: no blur, no offset; the
   no-shadow rule holds). On focus the 1px ink focus ring is drawn on top of the fill, as on any field. Loaded last.
   !important because the field focus rule in ds-audit.css (.cl3-form input[type=text]:focus) is more specific and
   replaced the fill on a focused autofilled field, letting the blue show (Erfan 17 Oct).
   Rest and focus keep the same two shadows in the same order (ring, then fill). With one shadow at rest the 0.4s
   focus transition morphed the 1000px white fill into the 1px ink ring and the field flashed black (Erfan's recording, 17 Oct). */
html body input:-webkit-autofill,
html body input:-webkit-autofill:hover,
html body textarea:-webkit-autofill,
html body select:-webkit-autofill {
  -webkit-text-fill-color: #050505 !important;
  caret-color: #050505;
  -webkit-box-shadow: inset 0 0 0 1px rgba(5, 5, 5, 0), inset 0 0 0 1000px #FFFFFF !important;
          box-shadow: inset 0 0 0 1px rgba(5, 5, 5, 0), inset 0 0 0 1000px #FFFFFF !important;
}
html body input:-webkit-autofill:focus,
html body textarea:-webkit-autofill:focus {
  -webkit-text-fill-color: #050505 !important;
  -webkit-box-shadow: inset 0 0 0 1px #050505, inset 0 0 0 1000px #FFFFFF !important;
          box-shadow: inset 0 0 0 1px #050505, inset 0 0 0 1000px #FFFFFF !important;
}

/* ==== parts/form-errors.css ==== */
/* Form errors (Erfan 17 Oct: "show which fields are not filled, with an error icon"). On Send every problem is shown at once:
   - the field's own border turns accent-deep and becomes 2px (1px border + 1px inset hairline), the same shape as focus, and
     stays red while focused so the problem never hides under the ink focus border;
   - unpicked chips in a group with no choice get an accent-deep border;
   - a 14/20 500 accent-deep message with a 16px alert icon (1.75 stroke, like every line icon) sits 8px under the field;
   - the note under Send repeats the count ("Fix the 2 fields marked in red."), with the same icon.
   accent-deep is used only for errors on forms now: focus is ink and picked chips are ink. Loaded after ds-audit.css. */
html body .cl3-form input[type][aria-invalid=true],
html body .cl3-form input[type][aria-invalid=true]:focus,
html body .cl3-form input[type][aria-invalid=true]:focus-visible {
  border-color: var(--accent-deep, #D23100); box-shadow: inset 0 0 0 1px var(--accent-deep, #D23100); }
html body input[type][aria-invalid=true]:-webkit-autofill,
html body input[type][aria-invalid=true]:-webkit-autofill:focus {
  -webkit-box-shadow: inset 0 0 0 1px #D23100, inset 0 0 0 1000px #FFFFFF !important;
          box-shadow: inset 0 0 0 1px #D23100, inset 0 0 0 1000px #FFFFFF !important; }
html body .cl3-need.is-err label input:not(:checked) + span { border-color: var(--accent-deep, #D23100); }

html body .cl3-form .cl3-err, html body .cl3-form label > span.cl3-err {
  display: flex; align-items: flex-start; gap: 6px; width: 100%; margin: 8px 0 0;
  font: 500 14px/20px var(--text); color: var(--accent-deep, #D23100); }
html body .cl3-form .cl3-need .cl3-err { margin: 0; }            /* the chip group's 8px gap already spaces it */
html body .cl3-form .cl3-err[hidden] { display: none; }
html body .cl3 .cl3-note.err { display: flex; align-items: flex-start; gap: 6px; font-weight: 500; color: var(--accent-deep, #D23100); }
html body .cl3-form .cl3-err svg, html body .cl3 .cl3-note.err svg {
  flex: none; width: 16px; height: 16px; margin-top: 2px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }

/* ==== parts/form-sent.css ==== */
/* Contact form after Send (Erfan 17 Oct: the old green note picked up the comparison table's global .ok dot and broke).
   - Sending: the button says "Sending…", its arrow hides, it can't be pressed twice.
   - Sent: the form is replaced in the same panel by a 48px round tick (1px line ring, accent tick, like the contact promises),
     "Message sent" 24/32 500, one 16/24 line naming who replies and where, a Book a call text link and a quiet
     "Send another message" button. No green: success is ink and one accent tick.
   - Failed: the error note (form-errors.css) with an email link and a book-a-call link; what they typed stays. */
html body .cl3-form .cl3-hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
html body .ck-hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; pointer-events: none; }  /* audit forms' spam trap (14 Nov 2026) */
html body .cl3 .cl3-send .btn-dark[aria-busy=true] { cursor: progress; }
html body .cl3 .cl3-send .btn-dark[aria-busy=true] .arr-swap { display: none; }
html body .cl3 .cl3-note.err a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }

html body .cl3 .cl3-sent { display: grid; justify-items: start; gap: 16px; padding: 8px 0 4px; }
html body .cl3 .cl3-sent[hidden] { display: none; }
html body .cl3 .cl3-sent-ico { display: grid; place-items: center; width: 48px; height: 48px; border-radius: 50%; box-shadow: inset 0 0 0 1px var(--line, #E6E6E6); }
html body .cl3 .cl3-sent-ico svg { width: 24px; height: 24px; fill: none; stroke: var(--accent, #FF3C00); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
html body .cl3 .cl3-sent h3 { margin: 8px 0 0; font: 500 24px/32px var(--text); letter-spacing: -0.01em; color: var(--ink, #050505); outline: none; }
html body .cl3 .cl3-sent p { margin: 0; max-width: none; font-size: 16px; line-height: 24px; color: #444444; }
html body .cl3 .cl3-sent p b { font-weight: 500; color: var(--ink, #050505); overflow-wrap: anywhere; }
html body .cl3 .cl3-sent .cl3-sent-alt a { display: inline-flex; align-items: center; gap: 6px; color: var(--ink, #050505); font-weight: 500; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 5px; }
html body .cl3 .cl3-sent .cl3-sent-alt a:focus-visible, html body .cl3 .cl3-sent-again:focus-visible { outline: 2px solid var(--accent-deep, #D23100); outline-offset: 2px; border-radius: 2px; }
html body .cl3 .cl3-sent-again { margin-top: 8px; padding: 0; border: 0; background: none; font: 500 14px/20px var(--text); color: #555555; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
html body .cl3 .cl3-sent-again:hover { color: var(--ink, #050505); }

/* ==== parts/svc-head-center.css ==== */
/* "Four ways to work with us" heading + intro centred (Erfan, 17 Oct 2026: "make this font center aligned too").
   Overrides the left title rule for this one section; intro capped at 640px so it centres as a block. Loaded last. */
html body .svc .svc-head { justify-items: center; text-align: center; margin-left: auto; margin-right: auto; }
html body .svc .svc-head > p { max-width: 800px; margin-left: auto; margin-right: auto; }

/* Process "Typical outputs" under each step (src/data/process.json, Process.astro). Every page that shows the section
   (home, Launch page) shows it the same way (Erfan 18 Oct). Moved here from pages.css, which the home page does not load.
   Values are the design-system tokens: line #E6E6E6, mute #555, text-2 #444, accent #FF3C00. */
html body .pc-card .pc-outs { margin-top: 24px; padding-top: 16px; border-top: 1px solid #E6E6E6; }
html body .pc-card .pc-outs-k { margin: 0 0 8px; font: 500 12px/16px var(--text); letter-spacing: .08em; text-transform: uppercase; color: #555555; }
html body .pc-card .pc-outs ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 6px; }
html body .pc-card .pc-outs li { position: relative; padding-left: 16px; font: 400 16px/24px var(--text); color: #444444; }
html body .pc-card .pc-outs li::before { content: ''; position: absolute; left: 0; top: 10px; width: 6px; height: 6px; border-radius: 50%; background: var(--accent); }

/* One width for every stacked section head, on every page (Erfan 18 Oct: "give a fixed width to all the titles and
   subtitles in all pages"; 21 Oct: title and subtitle share it, so a one-line title never runs wider than its subtitle).
   Title and subtitle: 800px (token head-width; the old 26ch title width, so approved titles keep their breaks). Side-by-side heads (FAQ, Compare, Contact, Founder) keep their column widths. */
html body .p-head { max-width: none; }
html body .p-head .p-h2, html body .se-head h2, html body .pr-head h2, html body .ck-head h2,
html body .wall-head h2, html body .proof3-head h2, html body .svc h2.tt, html body .cases .cs-head-c h2.tt { max-width: 800px; text-wrap: balance; }
html body .p-head .p-intro, html body .se-head p, html body .pr-head p, html body .ck-head p,
html body .svc .svc-head > p, html body .cases .cs-intro { max-width: 800px; }
html body .p-head-c .p-h2, html body .p-head-c .p-intro { margin-left: auto; margin-right: auto; }

/* Underlined links: one hover everywhere (Erfan 18 Oct: "every hover which has underlined text should have the same kind of
   hover"). The label sits in .ul; its 1.5px underline is a background 3px under the text box. On hover / keyboard focus it wipes
   out to the right and draws back in from the left (0.6s, the arrow-swap curve); an arrow, if the link has one, swaps at the same
   time. The colour never changes (this replaces the old orange email hover). Used by ArrowLink, case study, Explore…, email,
   Book a call directly, Follow me on X and inline links in sentences. Rule: design-system/project/interaction.md. */
html:not(#ul) body a:has(> .ul) { text-decoration: none !important; }
html:not(#ul) body .ul { padding-bottom: 3px; background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1.5px no-repeat; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
@keyframes ul-swap { 0% { background-position: 100% 100%; background-size: 100% 1.5px; } 45% { background-position: 100% 100%; background-size: 0 1.5px; } 46% { background-position: 0 100%; background-size: 0 1.5px; } 100% { background-position: 0 100%; background-size: 100% 1.5px; } }
html:not(#ul) body a:hover > .ul, html:not(#ul) body a:focus-visible > .ul { animation: ul-swap .6s cubic-bezier(.16, 1, .3, 1); }
html:not(#ul) body a:has(> .ul):hover .arr-swap .arr:first-child, html:not(#ul) body a:has(> .ul):focus-visible .arr-swap .arr:first-child { transform: translateX(120%); opacity: 0; }
html:not(#ul) body a:has(> .ul):hover .arr-swap .arr + .arr, html:not(#ul) body a:has(> .ul):focus-visible .arr-swap .arr + .arr { transform: none; opacity: 1; transition-delay: .06s; }
html:not(#ul) body :is(a.mail-link, .cases .cs-read, .fl-sign a, .p-cap a, .cl3-switch a, .cl3-sent-alt a):is(:hover, :focus-visible) { color: var(--ink) !important; }
html:not(#ul) body :is(.ft3 a.mail-link, a.ftl-mail):is(:hover, :focus-visible) { color: #fff !important; }
@media (prefers-reduced-motion: reduce) { html:not(#ul) body a:hover > .ul, html:not(#ul) body a:focus-visible > .ul { animation: none; } }
/* Links inside a sentence (Erfan 21 Oct: "darker ink with a thin light underline that turns dark on hover", every page): ink 500 text
   in the grey sentence, a 1px link-line (#BDBDBD) underline; on hover / focus an ink line draws over it from the left (0.6s, the
   wipe curve) and draws back on leave. Standalone underlined links (Book a call directly, Follow me on X, footer email) keep the
   1.5px ink underline above. Blog bodies (.p-prose) use the same look with a text-decoration underline. */
html:not(#ul) body :is(a.p-inl.p-ul, .fq-mail a, .cl3-sent-alt a, .p-prose :is(p, li) > a) { color: var(--ink) !important; font-weight: 500; }
html:not(#ul) body :is(a.p-inl.p-ul, .fq-mail a, .cl3-sent-alt a) > .ul { padding-bottom: 3px; animation: none !important;
  background: linear-gradient(var(--ink), var(--ink)) 0 100% / 0 1px no-repeat, linear-gradient(#BDBDBD, #BDBDBD) 0 100% / 100% 1px no-repeat;
  transition: background-size .6s cubic-bezier(.16, 1, .3, 1); }
html:not(#ul) body :is(a.p-inl.p-ul, .fq-mail a, .cl3-sent-alt a):is(:hover, :focus-visible) > .ul { background-size: 100% 1px, 100% 1px; }
html:not(#ul) body .p-prose a { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; text-decoration-color: #BDBDBD; transition: text-decoration-color .3s ease; }
html:not(#ul) body .p-prose a:is(:hover, :focus-visible) { text-decoration-color: var(--ink); }
@media (prefers-reduced-motion: reduce) { html:not(#ul) body :is(a.p-inl.p-ul, .fq-mail a, .cl3-sent-alt a) > .ul { transition: none; } }

/* Tools that don't exist yet (18 Oct audit: their links were 404s). Footer: plain text, same size as the links, with the Soon
   chip, not clickable. Menu: the card stays, with a Soon tag, and isn't a link. */
html body .ft3 .ft-cols span.ft-later { display: block; padding: 4px 0; font-size: 16px; line-height: 24px; color: #858585; cursor: default; }
html body .mm-item.mm-soon { cursor: default; }
html body .mm-item.mm-soon:hover b, html body .mm-item.mm-soon b { color: #2A2A2A; }
html body .mm-item.mm-soon:hover svg { stroke: #9A9A9A; }
html body .mm-item.mm-soon .tag { margin-left: 6px; vertical-align: 2px; }

/* Skip link (18 Oct UX audit): first Tab stop on every page, hidden until focused, jumps to <main id="top">. */
html body .skip-link { position: fixed; top: 8px; left: 8px; z-index: 1000; padding: 12px 16px; border-radius: 2px; background: var(--ink); color: #fff; font: 500 16px/24px var(--text); transform: translateY(-200%); }
html body .skip-link:focus-visible { transform: none; outline: 2px solid var(--accent); outline-offset: 2px; }

/* Form chips ("What do you need?", budget): 44px, the tap-target minimum (Erfan 18 Oct audit #11: "yes, 44"). */
html:not(#ch) body :is(.cl3-need, .cl3-budget) label span { height: 44px; min-height: 44px; }

/* ==== Style v6: flat (Erfan 18 Oct 2026, from /preview/personality) ====================================================
   ONE style: flat colour + the four category tints + a canvas dot grid inside picture frames + thin lines.
   No gradients, silk, glows, light beams or frosted glass. The turning chrome rim stays only on the two action points:
   Book a call (.btn-rim) and the free-audit form (.ck-form). Rules (design-system README, "Style v6"):
   - Tints (tokens tint-*): peach = messaging, sage = website, blue = launch and care, sand = support. Text on a tint uses
     that tint's dark text colour. Usage: class="tint t-peach" (+ "dots" on picture frames only, never behind text).
   - A tinted tile never sits on a tint (tiles on a tinted band go white).
   - Big numbers in cards stay below the section title (40px under a 48px title). */
html body .t-peach { --t-bg: #FCE6DC; --t-fg: #7A2A0E; }
html body .t-sage  { --t-bg: #E4EEDF; --t-fg: #2E5631; }
html body .t-blue  { --t-bg: #E0E8F4; --t-fg: #23426B; }
html body .t-sand  { --t-bg: #EFEAE3; --t-fg: #5C4A33; }
html body .tint { background-color: var(--t-bg) !important; }
html body .tint.dots { background-image: radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--t-fg) 22%, transparent) 1px, transparent 1.4px) !important;
  background-size: 16px 16px !important; background-position: 8px 8px !important; }

/* hero (home): no coloured glow behind the work, no moving sheen; the thin column lines stay as the hero's one pattern */
html body .hero-work::before, html body .hero-intro::before { display: none !important; }
html[data-hero=grey] .hero::after { display: none !important; }

/* process band: flat ink (no silk photo); the step pictures carry the tints + dots */
html body section.process2.pr-dark.pc { background: #050505 !important; }
html body .pc-art.tint { box-shadow: none; }

/* services pictures: flat tint + dots; the white wireframes redrawn in the tint's dark colour */
html body .svc-art.tint svg .s { stroke: var(--t-fg) !important; fill: #fff !important; }
html body .svc-art.tint svg path.s { fill: none !important; }  /* lines and arrowheads are strokes only; the white fill is for boxes (Erfan 22 Oct: white inside the arrowheads) */
html body .svc-art.tint svg .d { stroke: color-mix(in srgb, var(--t-fg) 55%, transparent) !important; }
html body .svc-art.tint svg .ln { stroke: color-mix(in srgb, var(--t-fg) 35%, transparent) !important; }
html body .svc-art.tint svg .pill { stroke: var(--t-fg) !important; }
html body .svc-art.tint svg .f { fill: color-mix(in srgb, var(--t-fg) 28%, transparent) !important; }
html body .svc-art.tint svg .f:not(.o) { fill: color-mix(in srgb, var(--t-fg) 45%, transparent) !important; }
html body .svc-art.tint svg rect.r2:not(.s):not(.f):not(.d):not(.pill) { fill: #fff !important; stroke: var(--t-fg) !important; }
html body .svc-art.tint svg text { fill: var(--t-fg) !important; }

/* industry cards: card ground = its scene's tint (the scenes are flat since 18 Oct) */
html body .se-card.tint { box-shadow: none; }

/* case-study fact boxes on tints, text in the tint's dark colour */
html body .cs-facts.tint, html body .cs-facts.tint * { color: var(--t-fg) !important; }

/* proof: number tiles between the quotes; numbers 40px (title is 48px); the Contra 5.0 matches */
html body .p3-stat { display: flex; flex-direction: column; justify-content: space-between; gap: 24px; padding: 32px; border-radius: 4px; color: var(--t-fg); box-shadow: none; }
html body .p3-stat b { font: 500 40px/44px var(--text); letter-spacing: -0.035em; }
html body .p3-stat span { max-width: 18em; font: 500 16px/24px var(--text); }
html body .p3-num { font-size: 40px !important; line-height: 44px !important; }
@media (max-width: 760px) { html body .p3-stat { padding: 24px; } html body .p3-stat b { font-size: 32px; line-height: 36px; } }

/* compare band: flat sand, no light beams; icon tiles white (a tint tile never sits on a tint), icons ink */
html body .cmp { background: #EFEAE3 !important; }
html body .cmp::before, html body .cmp::after { display: none !important; }
html body .cmp .cmp-ico:not(.cmp-logo) { background-color: #FFFFFF !important; box-shadow: inset 0 0 0 1px #E6E6E6 !important; }
html body .cmp .cmp-ico:not(.cmp-logo) svg, html body .cmp .cmp-ico:not(.cmp-logo) svg * { stroke: #050505 !important; color: #050505 !important; }

/* founder portrait: the cut-out of Erfan on peach with the dot grid */
html body .fl-portrait.tint { object-fit: cover; }

/* FAQ help card (peach) and the contact Ask AI band (blue): flat, text on them so no dots */
html body .fq-ask.tint, html body .cl3-ai.tint { box-shadow: none; }
html:not(#ai2) body #contact.cl3 .cl2-in { padding-bottom: var(--section-gap) !important; }   /* the grey contact band ends before the blue Ask AI band (beats the older "Ask AI shares the grey" rule, which set 0) */

/* 15 Nov 2026 (Erfan, after the /home-zeal trial: "apply to every page"). Two elements kept from the Zeal design system:
   1. the comparison and the FAQ sit on a grey band (--sheet) with white bordered cards (4px), 2. calmer body text (--text-2).
   FaqBlock (inner pages) uses the same .faq2 markup, so the FAQ looks the same everywhere. The trial page was removed. */
:root { --text-2: #646464; }
html body .cmp { background: var(--sheet, #F6F6F6) !important; }
html body section.faq2 { background: var(--sheet, #F6F6F6); padding-bottom: var(--section-gap, 128px) !important; }
html body .fq-list details, html body .fq-list details[open] { background: var(--white, #fff) !important; border-radius: 4px !important; box-shadow: inset 0 0 0 1px var(--line, #E6E6E6), 0 1px 3px rgba(0,0,0,.05) !important; }
html body .cs-sum, html body .faq2 p, html body .fq-ask p, html body .checks2 .ck-form p, html body .founder2 p, html body .hero .hero-sub { color: var(--text-2) !important; }
html body :is(.hero, .cases, .sectors, .svc, .proof3, .wall, .checks2, .cmp, .faq2, .founder2, .close2) p:not([class*="-k"]) { color: var(--text-2); }

/* Cookie banner (Base.astro, 15 Nov 2026): bottom-left card in our style, two equal buttons (Reject / Accept). */
html body .pcc { position: fixed; left: 16px; bottom: 16px; z-index: 9990; width: min(380px, calc(100vw - 32px)); padding: 20px; border-radius: var(--r-xs, 4px); background: #FFFFFF; box-shadow: 0 0 0 1px #E6E6E6, 0 12px 32px rgba(5,5,5,.12); }
html body .pcc-t { margin: 0; font: 400 14px/21px var(--text); color: #444444; }
html body .pcc-b { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 16px; }
html body .pcc-b .btn { justify-content: center; min-height: 40px; }
html body .pcc-no { background: #FFFFFF; color: #050505; box-shadow: inset 0 0 0 1px #050505; }
html body .pcc-no:hover { background: #F4F4F5; color: #050505; }

/* 15 Nov 2026 (Erfan, phone review: "Why Pentaclay? … the four cards: the mobile design isn't working, make it horizontal
   scrolling on every page"). Phones: the five rows (us + four others) become one swipe row, each card 82% wide so the next
   one peeks in, edge to edge with the gutter as scroll padding. Desktop and tablet table unchanged. */
@media (max-width: 760px) {
  html body .cmp .cmp-table { display: flex; gap: 12px; overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory;
    margin-inline: calc(var(--gut) * -1); padding: 4px var(--gut) 8px; scroll-padding-inline: var(--gut); scrollbar-width: none; }
  html body .cmp .cmp-table::-webkit-scrollbar { display: none; }
  html body .cmp .cmp-table > .cmp-row:not(.cmp-cols) { flex: 0 0 82%; scroll-snap-align: start; align-content: start; padding: 20px 12px; }
}
/* 15 Nov 2026 (found while test-sending the home audit form): after Send the note gets class "ok", which also matches the old
   comparison table's global .ok (a 20px circle), so "Got it. Your audit will reach …" was squeezed into a 20px column.
   The audit note keeps its own full-width line. */
html body .ck-note.ok, html body .ck-note.err { display: block; width: auto; height: auto; border-radius: 0; background: none; place-items: initial; font-size: 14px; line-height: 20px; }

/* ==== 15 Nov 2026: phone pass (Erfan: "full mobile check of every page"; "cards' top and bottom padding don't match";
   "FAQ answers leave a lot of white space on the right"; "centre-aligned things read better left-aligned on mobile") ==== */
@media (max-width: 760px) {
  /* How a project runs: the swipe cards stretch to the tallest card. The lead floated down (margin-top:auto) and the picture
     stopped short, so short cards had 48–74px under the picture against 24px on top. Lead sits under the title; the spare
     height goes between the list and the picture, so every card ends 24px under its picture. */
  html body .pc-track > .pc-card { grid-template-rows: 1fr auto; }
  html body .pc-track > .pc-card .pc-lead { margin-top: 0; padding-top: 12px; }
}
@media (max-width: 760px) {
  /* FAQ answers: the desktop rule ".fq-list details[open] p { padding-right: 56px }" outranked the phone reset, so answers stopped
     ~68px short of the card edge. On phones they run the full width of the card. */
  html body .fq-list details p, html body .fq-list details[open] p { padding-right: 0; max-width: none; }
}
@media (max-width: 760px) {
  /* Centred blocks → left on phones (Erfan: "a lot of centre-aligned things look better left-aligned on mobile"). Most inner
     pages already start their headings on the left; centred 3–5 line headings and intros gave a ragged left edge. Kept centred:
     the client-logo label, the logo wall and single buttons on their own. */
  html body :is(.hero-copy, .proof3-head, .pr-head, .cs-head, .se-head, .svc-head, .wall-head, .ck-head, .ck-form, .ck-form-copy),
  html body :is(.hero-copy, .proof3-head, .pr-head, .cs-head, .se-head, .svc-head, .wall-head, .ck-head, .ck-form-copy) > :is(h1, h2, h3, p) { text-align: left; }
  html body .cs-head { justify-content: start; }
  html body .ck-form-copy p { margin-left: 0; }
  html body :is(.hero-cta, .ck-qs) { justify-content: flex-start; }
  html body .hero-proof { justify-content: start; text-align: left; }
  html body .hero-proof li { text-align: left; justify-items: start; }
  html body .pc-cta { align-items: flex-start; text-align: left; }
  html body .pc-cta .cta-promise { text-align: left; }
}
@media (max-width: 760px) {
  html body .cases .cs-head-c { justify-items: start; justify-content: start; text-align: left; }
  html body .cases .cs-head-c > * { text-align: left; }
}
@media (max-width: 760px) {
  html body .cases .cs-head, html body .cases .cs-head > p.cs-intro, html body .cases .cs-head > h2 { text-align: left; margin-left: 0; }
  /* 320px phones: "…Infrastructure" / "…Manufacturing" in the FAQ title was wider than the screen */
  html body .faq2 h2.tt { overflow-wrap: break-word; hyphens: auto; }
}
@media (max-width: 760px) {
  html body .hero .hero-proof li, html body .hero .hero-proof li * { text-align: left; }
}
