/* porras.dev — landing comercial. Copper & verdigris, light-first.
   The portfolio page (styles.css) stays dark-first; both share the palette.
   Faces ship from this server, never a font CDN, so first paint never waits on
   a third party. */

@font-face {
  font-family: "Bricolage Grotesque";
  src: url("/fonts/bricolage.woff2") format("woff2");
  font-weight: 200 800;
  font-display: swap;
}

@font-face {
  font-family: "Instrument Sans";
  src: url("/fonts/instrument-sans-latin.woff2") format("woff2");
  font-weight: 400 600;
  font-display: swap;
}

@font-face {
  font-family: "JetBrains Mono";
  src: url("/fonts/jetbrains-mono-latin.woff2") format("woff2");
  font-weight: 400 700;
  font-display: swap;
}

/* The proposal rendered inside a fixed-width canvas; the real page keeps that
   measure as the shell, so every cqi unit and @container rule below still
   resolves exactly as it did in the approved design. */
.shell {
  container-type: inline-size;
  max-width: 1180px;
  margin-inline: auto;
  background: var(--paper);
}

/* v5 — one light page throughout. The offer section is carried by the timeline
     alone: four stops that each say what happens and what the buyer walks away
     with, so the block lists that used to surround it are gone. */

  :root {
    --paper: #fbfaf7;
    --band: #f3f0ea;
    --card: #ffffff;
    --iron: #131311;
    --ink: #14130f;
    --ink-2: #5d584e;
    --line: #e4dfd5;
    --copper: #b45a1d;
    --copper-press: #8e4715;
    --copper-hot: #d8813f;
    --verdigris: #2c7a55;
    --on-copper: #fffdf9;
    --danger: #a52c1b;
    --shadow: 0 18px 40px -24px rgba(35, 25, 12, 0.45);
    --display: "Bricolage Grotesque", system-ui, sans-serif;
    --body: "Instrument Sans", system-ui, -apple-system, sans-serif;
    --mono: "JetBrains Mono", ui-monospace, Menlo, monospace;
    color-scheme: light;
  }

  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
      --paper: #131311;
      --band: #1b1b18;
      --card: #1f1f1b;
      --iron: #0c0c0a;
      --ink: #f4f3ee;
      --ink-2: #a5a094;
      --line: #32312b;
      --copper: #d8813f;
      --copper-press: #e5a06a;
      --copper-hot: #e5a06a;
      --verdigris: #5fb489;
      --on-copper: #17140f;
      --danger: #f08a75;
      --shadow: 0 18px 40px -22px rgba(0, 0, 0, 0.8);
      color-scheme: dark;
    }
  }

  :root[data-theme="dark"] {
    --paper: #131311;
    --band: #1b1b18;
    --card: #1f1f1b;
    --iron: #0c0c0a;
    --ink: #f4f3ee;
    --ink-2: #a5a094;
    --line: #32312b;
    --copper: #d8813f;
    --copper-press: #e5a06a;
    --copper-hot: #e5a06a;
    --verdigris: #5fb489;
    --on-copper: #17140f;
    --danger: #f08a75;
    --shadow: 0 18px 40px -22px rgba(0, 0, 0, 0.8);
    color-scheme: dark;
  }

  :root[data-theme="light"] {
    --paper: #fbfaf7;
    --band: #f3f0ea;
    --card: #ffffff;
    --iron: #131311;
    --ink: #14130f;
    --ink-2: #5d584e;
    --line: #e4dfd5;
    --copper: #b45a1d;
    --copper-press: #8e4715;
    --copper-hot: #d8813f;
    --verdigris: #2c7a55;
    --on-copper: #fffdf9;
    --danger: #a52c1b;
    --shadow: 0 18px 40px -24px rgba(35, 25, 12, 0.45);
    color-scheme: light;
  }

  * {
    box-sizing: border-box;
  }

  body {
    margin: 0;
    background: var(--paper);
    color: var(--ink);
    font-family: var(--body);
    font-size: 16px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
  }

  [data-lang="es"] .en,
  [data-lang="en"] .es {
    display: none;
  }

  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
  }

  
  .chrome {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 16px;
    padding: 10px max(16px, 3vw);
    padding-top: calc(10px + env(safe-area-inset-top, 0px));
    background: var(--band);
    border-bottom: 1px solid var(--line);
    font-family: var(--mono);
    font-size: 11.5px;
  }

  .chrome-name {
    margin-right: auto;
    color: var(--ink-2);
  }

  .chrome-name b {
    color: var(--copper);
  }

  .switch {
    display: inline-flex;
    border: 1px solid var(--line);
    border-radius: 999px;
    overflow: hidden;
    background: var(--card);
  }

  .switch button,
  .icon-btn {
    appearance: none;
    border: 0;
    background: transparent;
    color: var(--ink-2);
    font-family: var(--mono);
    font-size: 11.5px;
    padding: 6px 12px;
    cursor: pointer;
  }

  .switch button[aria-pressed="true"] {
    background: var(--copper);
    color: var(--on-copper);
    font-weight: 700;
  }

  .icon-btn {
    border: 1px solid var(--line);
    background: var(--card);
    border-radius: 999px;
    width: 30px;
    height: 30px;
    display: grid;
    place-items: center;
    padding: 0;
  }

  .icon-btn svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
  }

  .switch button:focus-visible,
  .icon-btn:focus-visible {
    outline: 2px solid var(--verdigris);
    outline-offset: -2px;
  }

  .stage {
    padding: 20px max(16px, 2vw) 0;
  }

  /* ───────── the page ───────── */

  .canvas {
    container-type: inline-size;
    margin-inline: auto;
    max-width: 1180px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: 8px;
    overflow: hidden;
    transition: max-width 0.3s ease;
  }

  .canvas.is-mobile {
    max-width: 402px;
    border-radius: 24px;
  }

  .bleed {
    padding-inline: clamp(20px, 5cqi, 72px);
  }

  .site-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding-block: 18px;
    flex-wrap: wrap;
  }

  .brand {
    font-family: var(--display);
    font-weight: 700;
    font-size: 17px;
    letter-spacing: -0.03em;
    margin-right: auto;
    /* the header does not wrap, so the brand gives way rather than being
       overlapped by whatever sits beside it */
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .head-links {
    display: flex;
    align-items: center;
    gap: 14px;
    font-size: 13px;
  }

  .head-links a {
    color: var(--ink-2);
    text-decoration: none;
  }

  .head-links a:hover {
    color: var(--copper);
  }

  /* the CTA is also an <a> inside .head-links — it needs to win on specificity,
     or its label renders grey-on-near-black */
  .head-links a.head-cta {
    background: var(--ink);
    color: var(--paper);
    border-radius: 999px;
    padding: 8px 16px;
    font-size: 13px;
    font-weight: 600;
  }

  .head-links a.head-cta:hover {
    background: var(--copper);
    color: var(--on-copper);
  }

  .lang-toggle {
    appearance: none;
    font-family: var(--mono);
    font-size: 10.5px;
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 4px 9px;
    color: var(--ink-2);
    background: transparent;
    cursor: pointer;
  }

  .lang-toggle b {
    color: var(--copper);
  }

  .lang-toggle:hover {
    border-color: var(--copper);
  }

  /* Same object as the portfolio's, so the two pages don't disagree about it. */
  .theme-toggle {
    appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    flex: none;
    background: none;
    border: 1px solid var(--line);
    border-radius: 4px;
    color: var(--ink-2);
    padding: 0;
    cursor: pointer;
  }

  .theme-toggle:hover {
    border-color: var(--copper);
    color: var(--copper);
  }

  /* ───────── client area ───────── */

  .head-links a.head-ghost {
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 7px 14px;
    font-size: 13px;
    font-weight: 600;
    color: var(--ink);
    white-space: nowrap;
  }

  .head-ghost .short {
    display: none;
  }

  .head-links a.head-ghost:hover {
    border-color: var(--copper);
    color: var(--copper);
  }

  .theme-toggle svg {
    width: 16px;
    height: 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
  }

  a:focus-visible,
  button:focus-visible,
  .rung:focus-within {
    outline: 2px solid var(--verdigris);
    outline-offset: 3px;
  }

  /* ───────── hero ───────── */

  .hero {
    display: grid;
    grid-template-columns: 1.05fr 0.95fr;
    gap: clamp(24px, 4cqi, 56px);
    align-items: center;
    padding-block: clamp(28px, 5cqi, 64px) clamp(36px, 6cqi, 80px);
  }

  h1 {
    font-family: var(--display);
    font-weight: 600;
    font-size: clamp(34px, 6.6cqi, 74px);
    line-height: 0.98;
    letter-spacing: -0.04em;
    margin: 0;
    text-wrap: balance;
  }

  .slot {
    display: block;
    color: var(--copper);
    position: relative;
    min-height: 1.02em;
  }

  .slot span {
    display: inline-block;
    will-change: transform, opacity;
  }

  .slot.out span {
    transform: translateY(-0.35em) rotate(-1.2deg);
    opacity: 0;
    transition: transform 0.28s cubic-bezier(0.4, 0, 1, 1), opacity 0.2s linear;
  }

  .slot.in span {
    animation: drop 0.46s cubic-bezier(0.2, 1.3, 0.35, 1) both;
  }

  @keyframes drop {
    from {
      transform: translateY(0.4em) rotate(1.2deg);
      opacity: 0;
    }
    to {
      transform: none;
      opacity: 1;
    }
  }

  .hero-sub {
    margin: 22px 0 0;
    font-size: clamp(15px, 1.7cqi, 19px);
    color: var(--ink-2);
    max-width: 32ch;
  }

  .hero-cta {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 28px;
  }

  .btn {
    font-family: var(--body);
    -webkit-user-select: none;
    user-select: none;
    font-size: 15px;
    font-weight: 600;
    border: 1px solid transparent;
    border-radius: 999px;
    padding: 14px 26px;
    cursor: pointer;
    text-decoration: none;
    display: inline-block;
    text-align: center;
    transition: transform 0.16s ease, background 0.16s ease, border-color 0.16s ease;
  }

  .btn:hover {
    transform: translateY(-2px);
  }

  .btn-primary {
    background: var(--copper);
    color: var(--on-copper);
    box-shadow: var(--shadow);
  }

  .btn-primary:hover {
    background: var(--copper-press);
  }

  .btn-ghost {
    border-color: var(--line);
    color: var(--ink);
  }

  .btn-ghost:hover {
    border-color: var(--copper);
    color: var(--copper);
  }

  /* The same promise, repeated wherever the page asks for the call. */
  .callchip {
    margin: 14px 0 0;
    font-family: var(--mono);
    font-size: 11.5px;
    letter-spacing: 0.03em;
    color: var(--ink-2);
    display: flex;
    align-items: baseline;
    gap: 8px;
  }

  .callchip::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--verdigris);
    flex: none;
    transform: translateY(-1px);
  }

  .callchip b {
    color: var(--ink);
    font-weight: 700;
  }

  .whois {
    margin-top: 24px;
    padding-left: 16px;
    border-left: 2px solid var(--copper);
    font-size: 14px;
    line-height: 1.55;
    color: var(--ink-2);
    max-width: 44ch;
  }

  .whois b {
    color: var(--ink);
    font-weight: 600;
  }

  .shot {
    position: relative;
    border-radius: 4px;
    overflow: hidden;
    background: linear-gradient(140deg, var(--band), var(--line));
    aspect-ratio: 16 / 11;
    margin: 0;
  }

  .shot img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    max-width: 100%;
  }

  .hero .shot {
    aspect-ratio: 16 / 10;
    box-shadow: var(--shadow);
  }

  .hero .shot::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(200deg, transparent 55%, rgba(120, 60, 16, 0.22));
    pointer-events: none;
  }

  /* ───────── sectors ─────────
     Not a scoreboard. A buyer scanning for their own industry finds it here,
     with the actual problem that was solved next to it. */

  .sectors {
    border-block: 1px solid var(--line);
    background: var(--band);
    padding-block: clamp(30px, 4cqi, 52px);
  }

  .sectors-head {
    margin: 0 0 clamp(20px, 2.6cqi, 34px);
    font-family: var(--display);
    font-size: clamp(20px, 2.8cqi, 30px);
    font-weight: 600;
    letter-spacing: -0.03em;
    line-height: 1.1;
    max-width: 24ch;
  }

  .sector {
    display: grid;
    grid-template-columns: 11rem 1fr;
    gap: 8px 28px;
    padding: 15px 0;
    border-top: 1px solid var(--line);
    align-items: baseline;
  }

  .sector:last-child {
    border-bottom: 1px solid var(--line);
  }

  .sector b {
    font-family: var(--display);
    font-size: clamp(17px, 2cqi, 21px);
    font-weight: 600;
    letter-spacing: -0.025em;
    color: var(--copper);
  }

  .sector span {
    font-size: 14.5px;
    color: var(--ink-2);
    line-height: 1.5;
    max-width: 62ch;
  }

  /* the kind of business, never its name */
  .sector em {
    font-style: normal;
    font-weight: 600;
    color: var(--ink);
  }

  /* ───────── sections ───────── */

  section {
    padding-block: clamp(46px, 7cqi, 96px);
    scroll-margin-top: 16px;
  }

  @media (prefers-reduced-motion: no-preference) {
    :root {
      scroll-behavior: smooth;
    }
  }

  /* the promise is also the link to the section that explains it */
  .callchip a {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid color-mix(in srgb, var(--verdigris) 55%, transparent);
    padding-bottom: 1px;
  }

  .callchip a:hover {
    color: var(--verdigris);
    border-bottom-color: var(--verdigris);
  }

  h2 {
    font-family: var(--display);
    font-weight: 600;
    font-size: clamp(26px, 4.2cqi, 46px);
    line-height: 1.02;
    letter-spacing: -0.035em;
    margin: 0;
    text-wrap: balance;
    max-width: 17ch;
  }

  .kicker {
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.12em;
    color: var(--copper);
    margin: 0 0 16px;
  }

  .sec-head {
    display: flex;
    align-items: end;
    justify-content: space-between;
    gap: 20px clamp(32px, 6cqi, 88px);
    flex-wrap: wrap;
  }

  .sec-head p {
    margin: 0;
    color: var(--ink-2);
    font-size: 15px;
    max-width: 34ch;
  }

  /* ───────── the filter ───────── */

  .filter-grid {
    display: grid;
    grid-template-columns: 1.15fr 0.85fr;
    gap: clamp(24px, 4cqi, 56px);
    align-items: start;
    margin-top: 32px;
  }

  .ladder {
    border: 0;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
  }

  .rung {
    display: flex;
    align-items: center;
    gap: 14px;
    font-size: 15px;
    color: var(--ink);
    background: var(--card);
    border: 1px solid var(--line);
    border-left: 4px solid var(--line);
    border-radius: 3px;
    padding: 14px 18px;
    cursor: pointer;
    transition: transform 0.22s cubic-bezier(0.2, 1.2, 0.3, 1), border-color 0.2s ease,
      background 0.2s ease, box-shadow 0.2s ease;
  }

  .rung:hover {
    transform: translateX(6px);
    border-left-color: var(--copper-hot);
  }

  .rung:has(input:checked) {
    border-color: var(--copper);
    background: color-mix(in srgb, var(--copper) 10%, var(--card));
    box-shadow: var(--shadow);
  }

  .rung .tick {
    flex: none;
    width: 22px;
    height: 22px;
    border-radius: 4px;
    border: 1.5px solid var(--line);
    display: grid;
    place-items: center;
    color: transparent;
    font-size: 12px;
    transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
  }

  .rung:has(input:checked) .tick {
    background: var(--copper);
    border-color: var(--copper);
    color: var(--on-copper);
  }

  .verdict {
    margin-top: 22px;
    border: 1px solid var(--line);
    border-radius: 4px;
    padding: 20px;
    background: var(--band);
    display: flex;
    gap: 18px;
    align-items: center;
    flex-wrap: wrap;
  }

  .verdict p {
    margin: 0;
    font-size: 15px;
    color: var(--ink);
    flex: 1 1 22ch;
  }

  .verdict.warm {
    border-color: var(--copper);
    background: color-mix(in srgb, var(--copper) 8%, var(--band));
  }

  .verdict .btn {
    padding: 11px 20px;
    font-size: 14px;
  }

  /* ───────── the offer band ───────── */

  .offer {
    background: var(--band);
    padding-block: clamp(56px, 8cqi, 108px);
  }

  /* this section's head is a single column, so the intro line isn't squeezed
     into the heading's measure */
  .offer .sec-head {
    display: block;
  }

  /* The anchor, reduced to one line under the heading: what finding this out
     by building costs, against what it costs here. */
  .anchor-sub {
    margin: 18px 0 0;
    font-size: clamp(15px, 1.7cqi, 18px);
    color: var(--ink-2);
    max-width: 46ch;
  }

  .anchor-sub b {
    color: var(--ink);
    font-weight: 600;
  }

  .terms {
    margin: clamp(38px, 4.5cqi, 60px) 0 0;
    padding-top: 22px;
    border-top: 1px solid var(--line);
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px clamp(24px, 3cqi, 44px);
  }

  .term b {
    display: block;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--ink);
  }

  .term span {
    display: block;
    margin-top: 5px;
    font-size: 13px;
    color: var(--ink-2);
    line-height: 1.5;
  }

  .not-for {
    margin: 0;
    font-size: 13.5px;
    color: var(--ink-2);
    max-width: 46ch;
  }

  /* The line widget is the spine of the section: four stops, each carrying both
     what happens and what the buyer walks away with. */
  .track {
    margin-top: clamp(46px, 6cqi, 76px);
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(28px, 3.6cqi, 52px);
    position: relative;
  }

  .track::before {
    content: "";
    position: absolute;
    top: 6px;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--line);
  }

  .track::after {
    content: "";
    position: absolute;
    top: 6px;
    left: 0;
    height: 1px;
    width: var(--fill, 0%);
    background: var(--copper);
    transition: width 1s cubic-bezier(0.3, 0.8, 0.3, 1);
  }

  .phase {
    position: relative;
    padding-top: 38px;
  }

  .phase::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: var(--band);
    border: 1px solid var(--line);
    transition: border-color 0.4s ease, background 0.4s ease, transform 0.4s ease;
  }

  .phase.lit::before {
    border-color: var(--copper);
    background: var(--copper);
    transform: scale(1.15);
  }

  .phase .when {
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.08em;
    color: var(--ink-2);
  }

  .phase.lit .when {
    color: var(--copper);
  }

  .phase h3 {
    font-family: var(--display);
    font-size: clamp(18px, 2.1cqi, 22px);
    font-weight: 600;
    letter-spacing: -0.025em;
    margin: 10px 0;
  }

  .phase p {
    margin: 0;
    font-size: 14px;
    color: var(--ink-2);
    line-height: 1.55;
    max-width: 26ch;
  }

  .offer-cta {
    margin-top: clamp(40px, 5cqi, 64px);
    display: flex;
    align-items: center;
    gap: 18px 26px;
    flex-wrap: wrap;
  }

  .offer-cta p {
    margin: 0;
    font-size: 13.5px;
    color: var(--ink-2);
  }

  /* ───────── after the diagnostic ───────── */

  .after-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: clamp(20px, 3cqi, 40px);
    margin-top: 34px;
  }

  .tile {
    border: 1px solid var(--line);
    border-radius: 4px;
    padding: 26px 24px 28px;
    background: var(--card);
  }

  .tile .mark {
    width: 32px;
    height: 32px;
    color: var(--copper);
  }

  .tile .mark svg {
    width: 100%;
    height: 100%;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
  }

  .tile h3 {
    font-family: var(--display);
    font-size: 21px;
    font-weight: 600;
    letter-spacing: -0.025em;
    margin: 16px 0 8px;
  }

  .tile p {
    margin: 0;
    font-size: 14px;
    color: var(--ink-2);
    line-height: 1.5;
  }

  .after-shot {
    margin: clamp(34px, 4cqi, 56px) 0 0;
    border-radius: 4px;
    overflow: hidden;
    aspect-ratio: 21 / 8;
  }

  .after-shot img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
  }

  /* ───────── ask your business ───────── */

  .ask {
    background: var(--band);
  }

  .ask-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: clamp(28px, 4cqi, 64px);
    align-items: center;
    margin-top: 30px;
  }

  .asks {
    display: flex;
    flex-direction: column;
    gap: 12px;
  }

  .asks p {
    margin: 0;
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: 16px 16px 16px 4px;
    padding: 14px 18px;
    font-size: clamp(15px, 1.7cqi, 17px);
    color: var(--ink);
    max-width: 42ch;
    box-shadow: var(--shadow);
  }

  .asks p:nth-child(2) {
    margin-left: clamp(14px, 3cqi, 40px);
  }

  .asks p:nth-child(3) {
    margin-left: clamp(28px, 6cqi, 80px);
  }

  .ask-note {
    margin: 22px 0 0;
    font-size: 14px;
    color: var(--ink-2);
    max-width: 46ch;
    border-left: 2px solid var(--verdigris);
    padding-left: 16px;
  }

  .ask-note b {
    color: var(--ink);
    font-weight: 600;
  }

  /* ───────── what happens in the call ───────── */

  .live-panel {
    margin-top: 30px;
    border: 1px solid var(--line);
    border-left: 3px solid var(--copper);
    border-radius: 4px;
    background: var(--card);
    padding: clamp(24px, 3.4cqi, 40px);
    display: grid;
    grid-template-columns: 1.1fr 0.9fr;
    gap: clamp(24px, 3.5cqi, 52px);
    align-items: center;
    box-shadow: var(--shadow);
  }

  .live-panel p {
    margin: 0 0 14px;
    font-size: 15px;
    color: var(--ink-2);
    max-width: 48ch;
  }

  .live-panel p:last-child {
    margin-bottom: 0;
  }

  .live-panel b {
    color: var(--ink);
    font-weight: 600;
  }

  /* A deliberately vague replay: three things a business owner might say, and the
     three fields they fill. It shows the mechanic without exposing anything real. */
  .demo {
    border: 1px solid var(--line);
    border-radius: 6px;
    background: var(--band);
    padding: 16px;
  }

  .demo-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 14px;
  }

  .demo-head span {
    font-family: var(--mono);
    font-size: 10.5px;
    letter-spacing: 0.07em;
    color: var(--ink-2);
  }

  .demo-live {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-family: var(--mono);
    font-size: 10.5px;
    letter-spacing: 0.07em;
    color: var(--copper);
    opacity: 0.45;
    transition: opacity 0.3s ease;
  }

  .demo.playing .demo-live {
    opacity: 1;
  }

  .demo-live .dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: currentColor;
  }

  .demo.playing .demo-live .dot {
    animation: blip 1.1s ease-in-out infinite;
  }

  @keyframes blip {
    50% {
      opacity: 0.2;
      transform: scale(0.8);
    }
  }

  /* ───────── scroll reveals ─────────
     JS adds .rise, so with scripting off everything is simply visible. */

  .rise {
    opacity: 0;
    transform: translateY(16px);
  }

  .rise.in {
    opacity: 1;
    transform: none;
    transition: opacity 0.55s cubic-bezier(0.2, 0.7, 0.2, 1),
      transform 0.55s cubic-bezier(0.2, 0.7, 0.2, 1);
    transition-delay: var(--d, 0ms);
  }

  .tile {
    transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
  }

  .tile:hover {
    transform: translateY(-4px);
    border-color: var(--copper);
    box-shadow: var(--shadow);
  }

  .sector {
    transition: background 0.25s ease, padding-left 0.25s ease;
  }

  .sector:hover {
    background: color-mix(in srgb, var(--copper) 5%, transparent);
  }

  .asks p {
    transition: transform 0.25s cubic-bezier(0.2, 1.2, 0.3, 1);
  }

  .asks p:hover {
    transform: translateX(6px);
  }

  .demo-said {
    display: flex;
    flex-direction: column;
    gap: 7px;
    min-height: 92px;
  }

  .demo-said p {
    margin: 0;
    font-size: 13.5px;
    line-height: 1.45;
    color: var(--ink);
    background: var(--card);
    border: 1px solid var(--line);
    border-radius: 12px 12px 12px 3px;
    padding: 9px 12px;
    max-width: 100%;
    opacity: 0;
    transform: translateY(6px);
    transition: opacity 0.3s ease, transform 0.3s ease;
  }

  .demo-said p.on {
    opacity: 1;
    transform: none;
  }

  .demo-fields {
    margin-top: 16px;
    border-top: 1px solid var(--line);
    padding-top: 12px;
    display: flex;
    flex-direction: column;
    gap: 10px;
  }

  .demo-field {
    opacity: 0;
    transform: translateY(6px);
    transition: opacity 0.35s ease, transform 0.35s ease;
  }

  .demo-field.on {
    opacity: 1;
    transform: none;
  }

  .demo-field i {
    font-style: normal;
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.08em;
    color: var(--ink-2);
    display: block;
  }

  .demo-field b {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: var(--ink);
    margin-top: 2px;
  }

  .demo-field em {
    display: block;
    font-style: normal;
    font-size: 11.5px;
    color: var(--copper);
    margin-top: 3px;
  }

  /* ───────── guarantees + questions ───────── */

  .guards {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px clamp(20px, 3cqi, 40px);
    margin-top: 34px;
  }

  .guard {
    border-top: 2px solid var(--copper);
    padding-top: 14px;
  }

  .guard b {
    display: block;
    font-family: var(--display);
    font-size: 17px;
    font-weight: 600;
    letter-spacing: -0.02em;
  }

  .guard span {
    display: block;
    margin-top: 6px;
    font-size: 13.5px;
    color: var(--ink-2);
    line-height: 1.5;
  }

  .qa {
    margin-top: clamp(40px, 5cqi, 64px);
    border-top: 1px solid var(--line);
  }

  .q {
    border-bottom: 1px solid var(--line);
  }

  .q button {
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 18px;
    background: none;
    border: 0;
    padding: 20px 0;
    text-align: left;
    cursor: pointer;
    font-family: var(--display);
    font-size: clamp(17px, 2.1cqi, 22px);
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--ink);
  }

  .q .sign {
    flex: none;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 1px solid var(--line);
    display: grid;
    place-items: center;
    color: var(--copper);
    font-family: var(--mono);
    font-size: 15px;
    transition: transform 0.25s ease, background 0.25s ease, color 0.25s ease;
  }

  .q[data-open="true"] .sign {
    transform: rotate(45deg);
    background: var(--copper);
    color: var(--on-copper);
    border-color: var(--copper);
  }

  .q .answer {
    display: grid;
    grid-template-rows: 0fr;
    visibility: hidden;
    transition: grid-template-rows 0.3s ease, visibility 0s linear 0.3s;
  }

  .q[data-open="true"] .answer {
    grid-template-rows: 1fr;
    visibility: visible;
    transition: grid-template-rows 0.3s ease, visibility 0s;
  }

  .q .answer > div {
    overflow: hidden;
  }

  .q .answer p {
    margin: 0 0 22px;
    max-width: 58ch;
    color: var(--ink-2);
    font-size: 15px;
  }

  /* ───────── closing ───────── */

  .close {
    background: var(--band);
    display: grid;
    grid-template-columns: 0.95fr 1.05fr;
    gap: clamp(24px, 4cqi, 64px);
    align-items: center;
  }

  .close .shot {
    aspect-ratio: 4 / 5;
    border-radius: 0;
    align-self: stretch;
  }

  .close .shot img {
    object-position: center 28%;
  }

  .close-text {
    padding-block: clamp(40px, 6cqi, 88px);
    padding-right: clamp(20px, 5cqi, 72px);
  }

  .close.no-photo {
    grid-template-columns: 1fr;
  }

  .close.no-photo .close-text {
    padding-inline: clamp(20px, 5cqi, 72px);
    max-width: 64ch;
  }

  .mail {
    display: inline-flex;
    align-items: baseline;
    gap: 14px;
    margin-top: 26px;
    background: var(--ink);
    color: var(--paper);
    border: 0;
    border-radius: 999px;
    padding: 16px 26px;
    font-family: var(--body);
    font-size: 16px;
    font-weight: 600;
    cursor: pointer;
    transition: transform 0.16s ease;
  }

  .mail:hover {
    transform: translateY(-2px);
  }

  .mail .hint {
    font-family: var(--mono);
    font-size: 11px;
    opacity: 0.75;
    font-weight: 400;
  }

  .close-alt {
    margin-top: 18px;
    font-size: 13.5px;
    color: var(--ink-2);
  }

  .close-alt a {
    color: var(--ink-2);
  }

  .site-foot {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 24px;
    justify-content: space-between;
    padding-block: 22px;
    border-top: 1px solid var(--line);
    font-family: var(--mono);
    font-size: 11px;
    color: var(--ink-2);
  }

  .site-foot a {
    color: var(--copper);
    -webkit-user-select: none;
    user-select: none;
  }

  /* ───────── narrow ───────── */

  @container (max-width: 820px) {
    .hero,
    .filter-grid,
    .close,
    .after-grid,
    .ask-grid,
    .live-panel,
    .terms {
      grid-template-columns: 1fr;
    }

    .hero {
      padding-block: 20px 40px;
    }

    .hero-cta {
      flex-direction: column;
      align-items: stretch;
    }

    .hero-cta .btn {
      width: 100%;
    }

    .guards,
    .gets {
      grid-template-columns: 1fr 1fr;
    }

    .sector {
      grid-template-columns: 1fr;
      gap: 4px;
    }

    .track {
      grid-template-columns: 1fr;
      gap: 26px;
      padding-left: 26px;
    }

    .track::before,
    .track::after {
      top: 0;
      bottom: 0;
      left: 7px;
      right: auto;
      width: 1px;
      height: auto;
    }

    .track::after {
      height: var(--fill, 0%);
      width: 1px;
      transition: height 1s cubic-bezier(0.3, 0.8, 0.3, 1);
    }

    .phase {
      padding-top: 0;
      padding-left: 4px;
    }

    .phase::before {
      left: -26px;
      top: 4px;
    }

    .verdict .btn {
      width: 100%;
    }

    .close-text {
      padding-inline: clamp(20px, 5cqi, 72px);
    }

    .close .shot {
      aspect-ratio: 3 / 2;
    }

    /* The header must not reflow when the language changes: Spanish labels are
       wider than English ones, and at phone width the difference was enough to
       push the row onto a second line on switch. One row, tightened, always. */
    .site-head {
      flex-wrap: nowrap;
      gap: 10px;
    }

    .head-links {
      gap: 10px;
      flex-wrap: nowrap;
    }

    .head-links a.head-cta {
      padding: 8px 14px;
      white-space: nowrap;
    }

    .brand {
      min-width: 0;
    }

    .head-links .nav-extra {
      display: none;
    }

    .head-ghost .full {
      display: none;
    }

    .head-ghost .short {
      display: inline;
    }

    .head-links a.head-ghost {
      padding: 7px 11px;
    }
  }

  @container (max-width: 560px) {
    /* The header holds identity plus the entries that are not repeated further
       down. "Platicar" appears three more times on the way to the footer; the
       client entry appears nowhere else above the fold, so the CTA yields and
       the brand keeps its full name. */
    .head-links a.head-cta {
      display: none;
    }
  }

  @container (max-width: 520px) {
    .gets,
    .guards {
      grid-template-columns: 1fr;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: 0.001ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.001ms !important;
    }

    .btn:hover,
    .rung:hover,
    .mail:hover {
      transform: none;
    }
  }

  /* ───────── notes ───────── */

  .notes {
    max-width: 760px;
    margin: 0 auto;
    padding: 60px max(16px, 4vw) 80px;
  }

  .notes h2 {
    font-size: 22px;
    max-width: none;
  }

  .notes h3 {
    font-family: var(--mono);
    font-size: 12px;
    letter-spacing: 0.08em;
    color: var(--copper);
    margin: 30px 0 10px;
    font-weight: 400;
  }

  .notes ul {
    margin: 0;
    padding-left: 18px;
    color: var(--ink-2);
    font-size: 14px;
  }

  .notes li {
    margin-bottom: 9px;
  }

  .notes li b,
  .notes p b {
    color: var(--ink);
  }

  .notes p {
    color: var(--ink-2);
    font-size: 14px;
  }

/* ───────── privacy notice (/privacy) ───────── */

  a.brand {
    color: inherit;
    text-decoration: none;
    -webkit-user-select: none;
    user-select: none;
  }

  .notice {
    max-width: 72ch;
    padding-block: clamp(28px, 5cqi, 64px) clamp(36px, 6cqi, 80px);
  }

  .notice section {
    padding-block: 0;
  }

  .notice h1 {
    font-size: clamp(32px, 5cqi, 56px);
  }

  .notice h2 {
    font-size: clamp(20px, 2.6cqi, 26px);
    max-width: none;
    margin-top: 36px;
  }

  .notice p {
    color: var(--ink-2);
    margin: 12px 0 0;
  }

  .notice p b {
    color: var(--ink);
  }

  .notice a {
    color: var(--copper);
  }

  .notice code {
    font-family: var(--mono);
    font-size: 0.88em;
  }

  .notice-date {
    font-family: var(--mono);
    font-size: 12px;
  }

  .notice-en {
    margin-top: 48px;
    padding-top: 8px;
    border-top: 1px solid var(--line);
  }

/* `hidden` is an HTML attribute and the UA rule that implements it does not
   reach elements in the SVG namespace, so an <svg hidden> icon renders anyway —
   which is why the theme toggle showed the sun and the moon at once. */
[hidden] {
  display: none !important;
}
