/*
  dominikdrag.com · shared system (/assets/site-20261025/site.css)
  Every page of the preview loads this file, then its own stylesheet for what only it needs:
    <link rel="stylesheet" href="/assets/site-20261025/site.css">
    <link rel="stylesheet" href="/assets/site-20261025/<page>.css">     (home.css, consulting.css …)
    <script>document.documentElement.classList.add("js")</script>
    <script src="/assets/site-20261025/site.js" defer></script>      (only on pages with a run trace)
    <script src="/assets/site-20261025/page.js" defer></script>      (every page)
  Page rules go in the page file; anything a second page needs moves here.

  HOUSE RULES  No eyebrows or kickers, no 01/02 numbering, no "On this page" strips, no hairlines as page
               structure (space and tone steps instead; the trace, tables and form fields are exempt), no
               monospace outside [data-ui] and code, no tiny tracked capitals, no resting shadows (a thing that
               truly floats may have one), no pill chips for plain facts, no icons in tinted squares, one arrow
               glyph per screen at most, headings in sentence case without a full stop and two lines or fewer.

  TOKENS       Roles, never raw hex in page files: --bg (ground) --tone (one step from the ground: fields,
               panels) --tone-2 (second step: hover, pressed) --ink --ink-2 (secondary) --ink-3 (notes)
               --line-2 (link underlines) --rule (hairline, trace and tables only) --on-ink (text on an ink
               fill) --focus --error --ok. Lanes: --human --human-ink --lead --plan --build --build-2 --verify
               --verify-2 --harness --fail --warn, --on-bar / --on-bar-warn (label on a bar).
               Type: --display --sans --mono (trace data only). Sizes: --t-display --t-section --t-item, body
               18px (17 on phones), small 15. Motion: --ease-out (UI) --ease-in-out (things that travel)
               --ease-expo (section entrances). Layout: --margin --gutter --gap-sec --head-h.
  GROUNDS      .on-paper (white field) and .on-dark (ink field) re-derive every token above, the lane palette
               included, so any component inside them (buttons, links, form, trace) adapts by itself.
               Page ground is the default. A dark field also turns the sticky header dark while under it.
  LAYOUT       .wrap (page margins, max 1680) · .grid (12 columns) · .sec (section on the page ground,
               gap above) · .band (full-width field: add .on-paper or .on-dark) · .panel (rounded surface)
               · .split (heading left 7 cols, text right 5 cols, bottom-aligned) · .lead (statement under a
               heading, max 46ch) · .stack (vertical rhythm for prose).
  COMPONENTS   .btn (round, ink) .btn-sm · .text-link (.quiet) · .inline-link (a button that reads as a link)
               · .replay (button that plays a run in a trace: data-replay="key" data-replay-target="#id")
               · .list (square-bullet list) · .links (row of text links) · .figs (big numbers with a line)
               · .ico (inline SVG icon family: 24px grid drawn at 32px, stroke 2, round caps and joins, currentColor;
                 draw new icons to the same rules) · .points/.point (a heading with its icon hung in the
                 margin, text under the heading; .point-lead for the main one) · .index (names with one plain
                 line each, in columns) · [data-showcase] (a list of [data-showcase-item] rows that drives a
                 .stage of .stage-slide pictures: tinted field, floating picture, blur crossfade; a swipeable
                 strip on phones; behaviour in page.js; markup in the home page's #apps section).
  CHROME       Copy the <header class="top" data-top> and <footer class="foot"> blocks from the home page as they
               are; only move aria-current="page" to the page's own link (Home, Consulting, Work, About);
               the Résumé page marks About with aria-current="true", as the page it belongs to. The bar is sticky; page.js sets [data-scrolled] (translucent material), [data-dark]
               (over a top-level .on-dark field) and [data-menu-open] (phone sheet; .nav-cta is the sheet's
               action, .top-cta the bar's). Footer .foot-name[data-fit] is fitted to full width by page.js.
  FORM         .form .form-two .ledger-row .ledger-label .field-error .topics .topic .form-foot .form-note
               .form-alert .sent (contact.js drives it; keep the data-contact-* hooks and ids).
  TRACE        [data-run-trace] mounts the run trace (site.js). Put a .trace-meta after it for the legend and
               note. It takes the ground it sits on: in .on-dark it uses the dark lane palette.
  MOTION       [data-section] with [data-in] children (style="--i:n" orders them) gets one entrance per section
               (page.js adds .is-in); data-in="mask" opens a picture from a clip-path mask instead of rising.
               Content is hidden only under html.js and no-preference, never without JS.
               UI motion stays under 300 ms; hover is gated by (hover: hover) and (pointer: fine); press scale
               0.96–0.97; transform, opacity, clip-path and filter only.
*/

@font-face { font-family: "JetBrains Mono"; src: url(/assets/jetbrains-mono.ttf) format("truetype"); font-weight: 100 800; font-display: swap; }

/* ---------- Tokens ---------- */
:root, .on-paper {
  --ink: #0B0D12;
  --ink-2: #454B57;
  --ink-3: #5E6571;
  --line-2: #C3C8D1;
  --rule: rgb(11 13 18 / 0.09);
  --on-ink: #FFFFFF;
  --focus: #1D63D8;
  --error: #B4232A;
  --ok: #227C45;

  /* Lanes on a light ground: every bar ≥ 3:1 on white and on the page ground, white labels ≥ 4.5:1
     (warn carries an ink label). OKLCH, lightness ~0.53, one chroma band, hues spread around the wheel. */
  --human: #B75400;
  --human-ink: #B75400;
  --lead: #A0446D;
  --plan: #856632;
  --build: #2A68B7;
  --build-2: #10798C;
  --verify: #227C45;
  --verify-2: #59772B;
  --harness: #505C6C;
  --fail: #BE2E31;
  --warn: #BC7D19;
  --on-bar: #FFFFFF;
  --on-bar-warn: #0B0D12;
}
:root {
  color-scheme: light;
  --bg: #F3F4F6;
  --tone: #FFFFFF;
  --tone-2: #E6E8EC;

  --display: "Funnel Display", ui-sans-serif, system-ui, sans-serif;
  --sans: "Funnel Sans", ui-sans-serif, system-ui, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, monospace;

  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
  --ease-expo: cubic-bezier(0.16, 1, 0.3, 1);

  --margin: clamp(16px, 2.2vw, 32px);
  --gutter: clamp(12px, 1.7vw, 24px);
  --gap-sec: clamp(96px, 11vw, 168px);
  --head-h: 72px;
  --t-display: clamp(42px, 7.6vw, 116px);
  --t-section: clamp(36px, 4.4vw, 64px);
  --t-item: clamp(24px, 2.2vw, 32px);
}
.on-paper {
  color-scheme: light;
  --bg: #FFFFFF;
  --tone: #F3F4F6;
  --tone-2: #E6E8EC;
  background: var(--bg);
  color: var(--ink);
}
.on-dark {
  color-scheme: dark;
  --bg: #0B0D12;
  --tone: #161920;
  --tone-2: #232731;
  --ink: #EEF0F3;
  --ink-2: #AEB4BF;
  --ink-3: #8C93A1;
  --line-2: #4A5160;
  --rule: rgb(238 240 243 / 0.08);
  --on-ink: #0B0D12;
  --focus: #8DB4FF;
  --error: #F08A86;
  --ok: #79C58E;

  /* Lanes on the ink ground: OKLCH lightness ~0.76, one chroma band, the same hues as the light set.
     Every bar ≥ 6.8:1 on the ground, ink labels ≥ 6.8:1 on the bar. No neon, no glow, no violet. */
  --human: #EBA25F;
  --human-ink: #EBA25F;
  --lead: #DC90B1;
  --plan: #D0BB92;
  --build: #79B0E8;
  --build-2: #6AC1CB;
  --verify: #79C58E;
  --verify-2: #B5C87D;
  --harness: #A2ACB9;
  --fail: #E97873;
  --warn: #EBBC63;
  --on-bar: #0B0D12;
  --on-bar-warn: #0B0D12;
  background: var(--bg);
  color: var(--ink);
}

/* ---------- Base ---------- */
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; background: var(--bg); }
html:focus-within { scroll-behavior: smooth; }
body { margin: 0; background: var(--bg); color: var(--ink); font: 18px/1.55 var(--sans); -webkit-font-smoothing: antialiased; overflow-x: clip; }
::selection { background: color-mix(in srgb, var(--focus) 24%, transparent); color: var(--ink); }
a { color: inherit; }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; border-radius: 2px; }
img { display: block; max-width: 100%; height: auto; }
input, textarea, button { caret-color: var(--focus); }
[hidden] { display: none !important; }
[id] { scroll-margin-top: calc(var(--head-h) + 16px); }
h1, h2, h3 { text-wrap: balance; margin: 0; }
p { text-wrap: pretty; }
h1 { font: 640 var(--t-display)/0.93 var(--display); letter-spacing: -0.045em; }
h2 { font: 640 var(--t-section)/1.02 var(--display); letter-spacing: -0.035em; }
h3 { font: 640 var(--t-item)/1.12 var(--display); letter-spacing: -0.02em; }
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip { position: absolute; left: 16px; top: -60px; z-index: 60; background: var(--ink); color: var(--on-ink); padding: 12px 18px; border-radius: 999px; font: 600 15px/1 var(--sans); text-decoration: none; transition: transform 160ms var(--ease-out); }
.skip:focus { transform: translateY(76px); }
.nb { white-space: nowrap; }

/* ---------- Layout ---------- */
.wrap { width: min(100% - 2 * var(--margin), 1680px); margin-inline: auto; }
.grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gutter); }
.sec { padding-top: var(--gap-sec); }
.band { margin-top: var(--gap-sec); padding: clamp(72px, 9vw, 136px) 0; }
.panel { border-radius: 20px; padding: clamp(16px, 2vw, 28px); background: var(--bg); }
.split { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gutter); row-gap: 24px; align-items: end; }
.split > :first-child { grid-column: 1 / span 7; }
.split > :last-child { grid-column: 8 / span 5; }
.lead { margin: 0; max-width: 46ch; }
.stack > * { margin: 0; }
.stack > * + * { margin-top: 18px; }

/* ---------- Buttons and links ---------- */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 52px; padding: 0 26px; border: 0; border-radius: 999px; background: var(--ink); color: var(--on-ink); font: 600 16px/1 var(--sans); text-decoration: none; white-space: nowrap; cursor: pointer; transition: transform 140ms var(--ease-out), opacity 180ms ease; }
.btn-sm { height: 40px; padding: 0 18px; font-size: 15px; }
.btn:active { transform: scale(0.97); }
.text-link, .inline-link { font: inherit; font-weight: 600; color: var(--ink); background: none; border: 0; padding: 0; cursor: pointer; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 0.24em; text-decoration-color: var(--line-2); transition: text-decoration-color 180ms ease, color 180ms ease; }
.inline-link { font-weight: inherit; }
.text-link.quiet { color: var(--ink-2); }
.links { display: flex; flex-wrap: wrap; gap: 12px 28px; }
/* A button that plays a run in the trace. The triangle is the trace's own play glyph, not an arrow. */
.replay { display: inline-flex; align-items: center; gap: 9px; min-height: 44px; padding: 0; border: 0; background: none; color: var(--ink); font: 600 16px/1 var(--sans); cursor: pointer; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 0.3em; text-decoration-color: var(--line-2); transition: text-decoration-color 180ms ease, transform 140ms var(--ease-out); }
.replay svg { flex: none; width: 10px; height: 11px; fill: currentColor; }
.replay:active { transform: scale(0.97); }
@media (hover: hover) and (pointer: fine) {
  .btn:hover { opacity: 0.86; }
  .text-link:hover, .inline-link:hover, .replay:hover { text-decoration-color: currentColor; color: var(--ink); }
}

/* ---------- Lists, figures, icons ---------- */
.list { margin: 22px 0 0; padding: 0; list-style: none; }
.list li { position: relative; padding-left: 22px; }
.list li + li { margin-top: 10px; }
.list li::before { content: ""; position: absolute; left: 2px; top: 0.62em; width: 8px; height: 8px; background: currentColor; }
.figs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 36px var(--gutter); margin: 0; padding: 0; list-style: none; }
.figs b { display: block; font: 640 var(--t-section)/1 var(--display); letter-spacing: -0.04em; font-variant-numeric: tabular-nums; white-space: nowrap; }
.figs span { display: block; max-width: 32ch; margin-top: 10px; font-size: 15px; line-height: 1.45; color: var(--ink-2); }
.ico { flex: none; width: 32px; height: 32px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }

/* Points: the icon hangs in the margin beside the heading; the text sits under the heading. */
.points { display: grid; gap: clamp(40px, 4.4vw, 60px); align-content: start; }
.point { display: grid; grid-template-columns: 32px minmax(0, 1fr); column-gap: 18px; align-items: start; }
.point > .ico { grid-column: 1; grid-row: 1; margin-top: calc((var(--t-item) * 1.12 - 32px) / 2); }
.point > :not(.ico) { grid-column: 2; }
.point h3 a { color: inherit; text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 0.16em; text-decoration-color: transparent; transition: text-decoration-color 180ms ease; }
.point p { margin: 12px 0 0; max-width: 46ch; color: var(--ink-2); }
.point .list { color: var(--ink); }
.point .replay { margin-top: 10px; justify-self: start; }
.point-lead p { color: var(--ink); }
@media (hover: hover) and (pointer: fine) {
  .point h3 a:hover { text-decoration-color: currentColor; }
}

/* Index: names with one plain line each, in columns (an archive, so a repeated module is right). */
.index { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 32px var(--gutter); margin: 0; padding: 0; list-style: none; }
.index a { display: inline-block; font: 640 21px/1.2 var(--display); letter-spacing: -0.01em; color: var(--ink); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 0.2em; text-decoration-color: var(--line-2); transition: text-decoration-color 180ms ease; }
.index span { display: block; max-width: 40ch; margin-top: 8px; font-size: 16px; line-height: 1.5; color: var(--ink-2); }
@media (hover: hover) and (pointer: fine) {
  .index a:hover { text-decoration-color: currentColor; }
}

/* ---------- Showcase: a list that drives a stage ----------
   Markup: [data-showcase] holds [data-showcase-item] rows and a .stage[data-showcase-stage] with one
   .stage-slide per item (style="--tint:#…", taken from that picture's own colours). page.js sets
   [data-current] on the row, .is-on on the slide and --tint on the stage. On phones the stage becomes a
   swipeable strip of tinted cards. */
.stage { position: relative; min-height: clamp(600px, 52vw, 760px); margin: 0; padding: 0; list-style: none; background: var(--tint, var(--tone)); transition: background-color 260ms ease; overflow: clip; }
.stage-slide { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; padding: clamp(32px, 4vw, 56px) 0; visibility: hidden; pointer-events: none; }
.stage-shot { display: block; flex: none; height: min(calc(100% - 58px), 700px); aspect-ratio: 660 / 1434; border-radius: clamp(14px, 1.7vw, 24px); overflow: hidden; box-shadow: 0 32px 64px -24px rgb(16 18 30 / 0.42); opacity: 0; transform: scale(0.97); filter: blur(6px); }
.stage-shot img { width: 100%; height: 100%; object-fit: cover; }
.stage-cap { display: flex; align-items: center; gap: 12px; font: 640 19px/1 var(--display); letter-spacing: -0.01em; color: #0B0D12; opacity: 0; }
.stage-cap img { width: 36px; height: 36px; border-radius: 9px; }
.stage-slide.is-on { visibility: visible; pointer-events: auto; }
.stage-slide.is-on .stage-shot { opacity: 1; transform: none; filter: none; }
.stage-slide.is-on .stage-cap { opacity: 1; }
/* The crossfade is armed on the first switch ([data-live]): the outgoing picture softens and settles back,
   the incoming one sharpens in; transitions, so a quick second switch retargets mid-way. */
.stage[data-live] .stage-slide { transition: visibility 0s linear 320ms; }
.stage[data-live] .stage-shot { transition: opacity 220ms ease, transform 280ms var(--ease-out), filter 220ms ease; }
.stage[data-live] .stage-cap { transition: opacity 200ms ease; }
.stage[data-live] .stage-slide.is-on { transition-delay: 0s; }
.stage[data-live] .stage-slide.is-on .stage-shot { transition: opacity 240ms ease 40ms, transform 320ms var(--ease-out), filter 240ms ease 40ms; }
.stage[data-live] .stage-slide.is-on .stage-cap { transition-delay: 60ms; }

/* ---------- Header: full-width sticky bar ----------
   At the top it is plain on the page ground. Once content runs under it ([data-scrolled]) it takes a
   translucent material with a one-step tone edge; over a dark field ([data-dark]) the material and ink
   turn dark. Solid when backdrop-filter is missing or transparency is reduced. */
.top { position: sticky; top: 0; z-index: 40; height: var(--head-h); color: var(--ink); background-color: rgb(243 244 246 / 0); box-shadow: inset 0 -1px 0 rgb(11 13 18 / 0); -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%); transition: background-color 200ms ease, box-shadow 200ms ease, color 200ms ease; }
.top[data-scrolled] { background-color: rgb(243 244 246 / 0.78); box-shadow: inset 0 -1px 0 rgb(11 13 18 / 0.08); }
.top[data-dark] { --ink: #EEF0F3; --ink-2: #B9BFC9; --on-ink: #0B0D12; --focus: #8DB4FF; color-scheme: dark; background-color: rgb(11 13 18 / 0.74); box-shadow: inset 0 -1px 0 rgb(238 240 243 / 0.1); }
.top-row { height: 100%; display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 24px; }
.brand { justify-self: start; display: flex; align-items: center; gap: 10px; font: 650 18px/1 var(--display); letter-spacing: -0.01em; color: var(--ink); text-decoration: none; white-space: nowrap; }
.brand-mark { width: 26px; height: 26px; border-radius: 7px; background: var(--ink); color: var(--on-ink); display: grid; place-items: center; flex: none; font: 750 17px/1 var(--display); letter-spacing: -0.02em; padding-left: 1px; transition: background-color 200ms ease, color 200ms ease; }
.nav { display: flex; align-items: center; gap: clamp(20px, 2.6vw, 40px); font-size: 16px; }
.nav a { padding-block: 12px; color: var(--ink-2); text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 0.42em; text-decoration-color: transparent; transition: color 180ms ease, text-decoration-color 180ms ease; }
.nav a[aria-current] { color: var(--ink); font-weight: 600; text-decoration-color: currentColor; }
.nav .nav-cta { display: none; }
.top-act { justify-self: end; display: flex; align-items: center; gap: 10px; }
.top-act .btn { transition: transform 140ms var(--ease-out), opacity 180ms ease, background-color 200ms ease, color 200ms ease; }
.menu-btn { display: none; }
@media (hover: hover) and (pointer: fine) {
  .nav a:hover { color: var(--ink); text-decoration-color: currentColor; }
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .top[data-scrolled] { background-color: #F3F4F6; }
  .top[data-dark] { background-color: #0B0D12; }
}
@media (prefers-reduced-transparency: reduce) {
  .top { -webkit-backdrop-filter: none; backdrop-filter: none; }
  .top[data-scrolled] { background-color: #F3F4F6; }
  .top[data-dark] { background-color: #0B0D12; }
}

/* ---------- Footer: the name at full width ---------- */
.foot { padding: clamp(80px, 10vw, 144px) 0 clamp(28px, 3vw, 40px); }
.foot-fit { overflow: clip; }
.foot-name { display: inline-block; margin: 0; white-space: nowrap; font: 640 17vw/0.8 var(--display); letter-spacing: -0.055em; color: var(--ink); padding-bottom: 0.32em; }
.foot-row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 12px 28px; margin-top: clamp(18px, 2.2vw, 28px); font-size: 15.5px; color: var(--ink-2); }
.foot-row p { margin: 0; }
.foot-links { display: flex; flex-wrap: wrap; gap: 8px 24px; }
.foot-links a { padding-block: 6px; color: var(--ink); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 0.24em; text-decoration-color: var(--line-2); transition: text-decoration-color 180ms ease; }
@media (hover: hover) and (pointer: fine) {
  .foot-links a:hover { text-decoration-color: currentColor; }
}

/* ---------- Contact form (contact.js) ---------- */
.form { display: grid; gap: 22px; min-width: 0; }
.form-two { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.ledger-row { display: grid; gap: 8px; min-width: 0; margin: 0; padding: 0; border: 0; }
.ledger-label { padding: 0; font: 600 15px/1.2 var(--sans); color: var(--ink); }
fieldset .ledger-label { margin-bottom: 10px; }
.form input:not([type="radio"]), .form textarea { width: 100%; border: 0; border-radius: 0; background: var(--tone); color: var(--ink); font: 400 17px/1.5 var(--sans); padding: 14px 16px; outline: none; box-shadow: inset 0 0 0 2px transparent; transition: box-shadow 160ms ease, background-color 160ms ease; }
.form input:not([type="radio"]) { height: 54px; }
.form textarea { min-height: 150px; resize: vertical; display: block; }
.form input:not([type="radio"]):focus, .form textarea:focus { background: var(--bg); box-shadow: inset 0 0 0 2px var(--focus); }
.form ::placeholder { color: var(--ink-3); opacity: 1; }
.ledger-row.is-invalid input:not([type="radio"]), .ledger-row.is-invalid textarea { box-shadow: inset 0 0 0 2px var(--error); }
.field-error { font: 600 14.5px/1.3 var(--sans); color: var(--error); }
.topics { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.topic { position: relative; display: flex; min-width: 0; cursor: pointer; }
.topic:last-child:nth-child(odd) { grid-column: 1 / -1; }
.topic input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
.topic span { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 54px; padding: 12px 16px; background: var(--tone); font: 500 16px/1.3 var(--sans); color: var(--ink); transition: background-color 160ms ease, color 160ms ease, transform 140ms var(--ease-out); }
.topic span::before { content: ""; flex: 0 0 16px; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--ink-3); transition: box-shadow 160ms ease; }
.topic input:checked + span { background: var(--ink); color: var(--on-ink); }
.topic input:checked + span::before { box-shadow: inset 0 0 0 5px var(--on-ink); }
.topic input:focus-visible + span { outline: 2px solid var(--focus); outline-offset: 2px; }
.topic:active span { transform: scale(0.99); }
@media (hover: hover) and (pointer: fine) {
  .topic:hover input:not(:checked) + span { background: var(--tone-2); }
}
.form-trap { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
.turnstile-slot:empty { display: none; }
.form-alert { margin: 0; padding: 14px 16px; background: #FBE9EA; color: #9F1F27; font-size: 15.5px; }
.form-alert a { font-weight: 600; color: inherit; }
.form-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 24px; }
.form-note { margin: 0; font-size: 15px; color: var(--ink-3); }
.form-note a { color: var(--ink); }
.form [type="submit"][aria-busy="true"] { cursor: progress; opacity: 0.8; }
.sent { display: grid; gap: 10px; align-content: center; padding: 36px; background: var(--tone); outline: none; transition: opacity 240ms ease, transform 280ms var(--ease-out); }
@starting-style { .sent { opacity: 0; transform: translateY(8px); } }
.sent:focus-visible { box-shadow: inset 0 0 0 2px var(--focus); }
.sent .status { margin: 0; font: 600 15px/1 var(--sans); color: var(--ok); }
.sent h3 { margin-top: 4px; }
.sent p { margin: 0; color: var(--ink-2); }
.sent .text-link { justify-self: start; margin-top: 8px; }

/* ---------- Run trace (markup built by RunTrace.mount in site.js) ----------
   Everything reads the ground tokens, so the same trace works on the page ground, on paper and on the
   ink field. Lanes are clean: a hairline between rows, no boxed rows. Bars share one height and radius. */
.trace { --name-w: 132px; --row: 40px; --bar-h: 26px; --bar-r: 6px; position: relative; color: var(--ink); }
.trace-fallback { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 24px; align-items: center; max-width: 760px; color: var(--ink-2); }
.trace-fallback img { border-radius: 12px; }
.js .trace-fallback { display: none; }
.js .trace:not([data-state]) { min-height: 520px; }

.trace-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
.rec { flex: none; width: 48px; height: 48px; border: 0; border-radius: 50%; background: var(--ink); display: grid; place-items: center; cursor: pointer; transition: transform 140ms var(--ease-out), opacity 180ms ease; }
.rec::before { content: ""; width: 16px; height: 16px; background: var(--bg); clip-path: polygon(22% 6%, 22% 6%, 60% 28%, 96% 50%, 96% 50%, 60% 72%, 22% 94%, 22% 94%); transition: clip-path 160ms var(--ease-out); }
.trace[data-state="running"] .rec::before { clip-path: polygon(16% 10%, 40% 10%, 40% 90%, 60% 90%, 60% 10%, 84% 10%, 84% 90%, 16% 90%); }
.rec:active { transform: scale(0.95); }
.prompt { flex: 1; min-width: 0; display: flex; align-items: center; height: 48px; padding: 0 20px; border-radius: 999px; background: var(--tone); font: 400 14.5px/1.4 var(--mono); color: var(--ink); }
.prompt-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.prompt-text::after { content: ""; display: inline-block; width: 7px; height: 16px; margin-left: 2px; vertical-align: -3px; background: var(--ink); animation: caret 1s steps(1) infinite; }
.trace[data-state="running"] .prompt-text::after, .trace[data-state="done"] .prompt-text::after { display: none; }
@keyframes caret { 50% { opacity: 0; } }

/* Run chips: the selected state is a second row clipped to the selected chip (site.js moves the clip). */
.scen { position: relative; flex: none; padding: 4px; border-radius: 999px; background: var(--tone); }
.scen-row { display: flex; gap: 2px; }
.chip { display: inline-flex; align-items: center; justify-content: center; height: 40px; padding: 0 16px; border-radius: 999px; font: 600 15px/1 var(--sans); white-space: nowrap; }
.scen button.chip { border: 0; background: transparent; color: var(--ink-2); cursor: pointer; transition: color 180ms ease, transform 140ms var(--ease-out); }
.scen button.chip:active { transform: scale(0.97); }
.scen-ink { position: absolute; inset: 4px; background: var(--ink); color: var(--bg); pointer-events: none; clip-path: inset(0 100% 0 0 round 999px); transition: clip-path 240ms var(--ease-in-out); }
@media (hover: hover) and (pointer: fine) {
  .rec:hover { opacity: 0.88; }
  .scen button.chip:hover { color: var(--ink); }
}

.trace-main { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: "body body" "log out"; gap: 12px; }
.trace-body { grid-area: body; position: relative; padding-bottom: 12px; touch-action: pan-y; -webkit-user-select: none; user-select: none; -webkit-tap-highlight-color: transparent; }
.now { grid-area: now; display: none; margin: 0; min-height: 1.45em; font: 500 14.5px/1.45 var(--sans); color: var(--ink); }
.log { grid-area: log; }
.out { grid-area: out; }

.ruler { display: grid; grid-template-columns: var(--name-w) minmax(0, 1fr); height: 34px; cursor: ew-resize; }
.phases { position: relative; font: 500 14.5px/34px var(--sans); color: var(--ink-2); }
.phases span { position: absolute; top: 0; height: 100%; padding: 0 6px 0 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: color 180ms ease; }
.phases span::before { content: ""; position: absolute; left: 0; top: 11px; bottom: 11px; width: 2px; border-radius: 1px; background: var(--rule); transition: background-color 180ms ease; }
.phases span[data-active] { color: var(--ink); }
.phases span[data-active]::before { background: var(--ink-3); }
.phases span[data-cut], .phases span[data-hid] { color: transparent; }
.phases span[data-cut]:not([data-pop])::before, .phases span[data-hid]::before { background: transparent; }
.phases span[data-pop] { color: var(--ink); max-width: none !important; overflow: visible; z-index: 1; background: var(--bg); transform: translateX(var(--pop-x, 0px)); }

.tracks { position: relative; }
.tracks:focus-visible { outline-offset: 2px; border-radius: 4px; }
.track { display: grid; grid-template-columns: var(--name-w) minmax(0, 1fr); height: calc(var(--row) * var(--rows-max, 1) / var(--rows, 1)); box-shadow: inset 0 1px 0 var(--rule); }
.track:last-child { box-shadow: inset 0 1px 0 var(--rule), inset 0 -1px 0 var(--rule); }
.track-name { display: flex; align-items: center; gap: 10px; padding-right: 10px; font: 500 15px/1 var(--sans); color: var(--ink-2); white-space: nowrap; overflow: hidden; }
.track-name i { width: 8px; height: 8px; border-radius: 2px; background: var(--c); flex: none; }
.track[data-kind="human"] .track-name i { width: 9px; height: 9px; border-radius: 50%; background: none; box-shadow: inset 0 0 0 1.5px var(--c); }
.lane { position: relative; cursor: ew-resize; }
.trace[data-scrub] .lane, .trace[data-scrub] .ruler { cursor: grabbing; }

/* Bars grow by clip-path from --p (site.js, a strong ease-out per step; 1:1 with the playhead when scrubbed). */
.seg { position: absolute; top: calc(50% - var(--bar-h) / 2); height: var(--bar-h); z-index: 1; display: flex; align-items: center; gap: 6px; padding: 0 8px; border-radius: var(--bar-r); background: var(--c); color: var(--on-bar); font: 600 13px/var(--bar-h) var(--sans); white-space: nowrap; overflow: hidden; clip-path: inset(0 calc((1 - var(--p, 0)) * 100%) 0 0 round var(--bar-r)); }
.seg[data-status="fail"] { --c: var(--fail); }
.seg[data-status="warn"] { --c: var(--warn); color: var(--on-bar-warn); }
.seg-ico { display: grid; flex: none; width: 13px; height: 13px; }
.seg-ico svg { grid-area: 1 / 1; width: 100%; height: 100%; transition: opacity 120ms ease, transform 200ms var(--ease-out); }
.seg .s { opacity: 0; transform: scale(0.6); }
.seg[data-done] .s { opacity: 1; transform: none; }
.seg[data-done] .k:not(:only-child) { opacity: 0; transform: scale(0.6); }
.seg span { overflow: hidden; text-overflow: ellipsis; }
.seg[data-tight] span { display: none; }
.seg[data-bare] .seg-ico { display: none; }
@media (min-width: 641px) { .seg[data-icon] { --seg-min: 68px; min-width: var(--seg-min); } }
.seg[data-kind="human"] .seg-ico, .seg[data-kind="lead"] .seg-ico { width: 12px; height: 12px; }
/* A human touch point: an outlined bar that waits (a soft ring) until the person acts, then fills. */
.seg[data-kind="human"] { z-index: 4; clip-path: none; gap: 5px; background: var(--bg); color: var(--c); box-shadow: inset 0 0 0 1.5px var(--c); opacity: 0; transform: scale(0.96); transition: opacity 160ms var(--ease-out), transform 200ms var(--ease-out), background-color 200ms ease, color 200ms ease; }
.seg[data-kind="human"][data-on] { opacity: 1; transform: none; }
.seg[data-kind="human"][data-on]:not([data-done]) { animation: wait-ring 1000ms var(--ease-out) infinite; }
.seg[data-kind="human"][data-done] { background: var(--c); color: var(--on-bar); }
@keyframes wait-ring {
  from { box-shadow: inset 0 0 0 1.5px var(--c), 0 0 0 0 color-mix(in srgb, var(--c) 50%, transparent); }
  to { box-shadow: inset 0 0 0 1.5px var(--c), 0 0 0 6px color-mix(in srgb, var(--c) 0%, transparent); }
}
/* An external wait (App Review): dashed, never grows, a flat pulse while it runs. */
.seg[data-status="wait"] { z-index: 4; clip-path: none; background: var(--bg); color: var(--ink-2); box-shadow: none; border: 1.5px dashed var(--ink-3); line-height: calc(var(--bar-h) - 3px); opacity: 0; transition: opacity 200ms var(--ease-out); }
.seg[data-status="wait"][data-on] { opacity: 1; }
.seg[data-status="wait"][data-on]:not([data-done]) { animation: wait-pulse var(--wait-ms, 720ms) ease-in-out infinite alternate; }
@keyframes wait-pulse { to { background-color: var(--tone-2); } }
.seg[data-kind="harness"][data-status]:not([data-status="wait"]):not([data-done]) { --c: var(--harness); color: var(--on-bar); }

.loop { position: absolute; inset: 0; z-index: 2; pointer-events: none; --loop-c: var(--fail); }
.loop > svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.loop .wire { fill: none; stroke: var(--loop-c); stroke-width: 1.5; stroke-dasharray: 4 4; stroke-linecap: round; }
.loop .reveal { fill: none; stroke: #fff; stroke-width: 8; stroke-linecap: round; }
.loop .end, .loop .runner { fill: var(--loop-c); }
.loop .runner { stroke: var(--bg); stroke-width: 2; }
.loop b { position: absolute; left: 0; top: 0; transform: translateY(-50%); display: inline-flex; align-items: center; gap: 4px; padding: 4px 8px; border-radius: 99px; background: var(--bg); color: var(--loop-c); font: 600 12.5px/1 var(--sans); white-space: nowrap; opacity: 0; transition: opacity 200ms var(--ease-out); }
.loop b .arrow { width: 0.95em; height: 0.95em; }
.loop[data-label] b { opacity: 1; }

/* The playhead moves by transform (site.js). Its knob in the ruler is the grab point; 44px hit area. */
.playhead { position: absolute; top: 0; bottom: 12px; left: 0; width: 0; z-index: 5; pointer-events: none; }
.playhead::before { content: ""; position: absolute; top: 17px; bottom: 0; left: -1px; width: 2px; border-radius: 1px; background: var(--ink); }
.knob { position: absolute; top: 17px; left: 0; width: 14px; height: 14px; margin: -7px 0 0 -7px; border-radius: 50%; background: var(--ink); box-shadow: 0 0 0 3px var(--bg); pointer-events: auto; cursor: grab; touch-action: none; transition: transform 140ms var(--ease-out); }
.knob::after { content: ""; position: absolute; inset: -15px; border-radius: 50%; }
.trace[data-scrub] .knob { transform: scale(1.35); cursor: grabbing; }

/* The log is the run's own text: mono is right here. New lines enter with a transition (@starting-style). */
.log { margin: 0; padding: 14px 18px; list-style: none; height: 248px; overflow: auto; border-radius: 12px; background: var(--tone); font: 400 12.5px/1.75 var(--mono); color: var(--ink-2); scrollbar-width: thin; scrollbar-color: var(--tone-2) transparent; }
.log li { display: grid; grid-template-columns: 62px minmax(0, 1fr); gap: 8px; transition: opacity 160ms ease, transform 200ms var(--ease-out); }
@starting-style { .log li { opacity: 0; transform: translateY(4px); } }
.log time { color: var(--ink-3); }
.log li b { font-weight: 600; color: var(--c, var(--ink)); }
.log li[data-k="start"] b::after { content: ""; display: inline-block; width: 5px; height: 7px; margin: 0 2px 0 7px; vertical-align: 0.05em; background: var(--ink-3); clip-path: polygon(0 0, 100% 50%, 0 100%); }
.log li[data-k="fail"] { color: var(--fail); }
.log li[data-k="ok"] span::before { content: "✓ "; color: var(--verify); }
.log li[data-k="act"] span::before { content: "✓ "; color: var(--human-ink); }

.out { position: relative; display: grid; align-content: center; min-width: 0; min-height: 248px; padding: 22px 26px; border-radius: 12px; background: var(--tone); }
.out:has(.result) { align-content: start; }
.out-empty { margin: 0; text-align: center; font: 400 15px/1.5 var(--sans); color: var(--ink-3); }
.result { display: grid; grid-template-columns: minmax(0, 96px) minmax(0, 1fr); gap: 24px; align-items: center; min-width: 0; }
.result.no-img { grid-template-columns: minmax(0, 1fr); }
.result > img { width: 100%; border-radius: 12px; clip-path: inset(0 0 0 0 round 12px); transition: clip-path 280ms var(--ease-out); }
.result[data-enter] > img { clip-path: inset(100% 0 0 0 round 12px); }
.result > div > * { transition: opacity 200ms ease, transform 240ms var(--ease-out); transition-delay: calc(60ms + var(--i, 0) * 40ms); }
.result[data-enter] > div > * { opacity: 0; transform: translateY(8px); }
.result .status { margin: 0; font: 600 14.5px/1.3 var(--sans); color: var(--c); }
.result h3 { margin: 6px 0 8px; font: 640 28px/1.08 var(--display); letter-spacing: -0.02em; color: var(--ink); }
.result p { margin: 0 0 14px; font-size: 15px; line-height: 1.5; color: var(--ink-2); }
.result .list { margin: 0 0 14px; padding: 0; list-style: none; font-size: 14.5px; line-height: 1.45; color: var(--ink-2); }
.result .list li { position: relative; padding-left: 16px; }
.result .list li + li { margin-top: 6px; }
.result .list li::before { content: ""; position: absolute; left: 2px; top: 0.58em; width: 6px; height: 6px; border-radius: 1px; background: var(--c); }
.result .links { display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: 15px; }

/* Leaving state while a new run starts (site.js ghost()). */
.ghost { z-index: 6; overflow: hidden; transition: opacity 150ms var(--ease-out); }

.trace-meta { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-start; gap: 10px 40px; margin-top: 16px; font-size: 14px; line-height: 1.45; color: var(--ink-2); }
.trace-legend { display: flex; flex-wrap: wrap; gap: 8px 22px; margin: 0; padding: 0; list-style: none; }
.trace-legend li { display: inline-flex; align-items: center; gap: 9px; }
.trace-note { margin: 0; color: var(--ink-3); }
.lg { flex: none; display: inline-grid; place-items: center; width: 22px; height: 14px; border-radius: 4px; }
.lg svg { width: 9px; height: 9px; }
.lg-human { width: 26px; color: var(--human); box-shadow: inset 0 0 0 1.5px var(--human); }
.lg-harness { background: var(--harness); color: var(--on-bar); }
.lg-lead { background: var(--lead); color: var(--on-bar); }
.lg-agent { display: inline-flex; gap: 2px; width: auto; }
.lg-agent i { width: 7px; height: 14px; border-radius: 2px; }
.lg-agent i:nth-child(1) { background: var(--plan); }
.lg-agent i:nth-child(2) { background: var(--build); }
.lg-agent i:nth-child(3) { background: var(--verify); }
.lg-wait { border: 1.5px dashed var(--ink-3); }

/* ---------- Entrances: one per section, heading → text → picture ---------- */
@media (prefers-reduced-motion: no-preference) {
  .js [data-section] [data-in] { opacity: 0; transform: translateY(24px); transition: opacity 600ms var(--ease-out), transform 800ms var(--ease-expo); transition-delay: calc(var(--i, 0) * 80ms); }
  .js [data-section].is-in [data-in] { opacity: 1; transform: none; }
  /* Pictures and stages open from a mask instead of rising. */
  .js [data-section] [data-in][data-in="mask"] { transform: none; clip-path: inset(0 0 100% 0); transition: opacity 300ms ease, clip-path 900ms var(--ease-in-out); transition-delay: calc(var(--i, 0) * 80ms); }
  .js [data-section].is-in [data-in][data-in="mask"] { clip-path: inset(0 0 0 0); }
}

/* ---------- Responsive ---------- */
@media (max-width: 1100px) {
  .trace-bar { flex-wrap: wrap; }
  .scen { order: 3; flex-basis: 100%; }
  .scen-row > .chip { flex: 1 1 auto; }
  .split > :first-child, .split > :last-child { grid-column: 1 / -1; }
  .index { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 641px) and (max-width: 1100px) {
  .trace { --name-w: 112px; }
  .track-name { font-size: 14px; gap: 8px; }
  .seg { font-size: 12px; padding: 0 7px; gap: 5px; }
}
@media (max-width: 900px) {
  :root { --head-h: 64px; }
  .skip:focus { transform: translateY(68px); }
  .top-row { grid-template-columns: minmax(0, 1fr) auto; }
  .menu-btn { display: inline-flex; align-items: center; height: 40px; padding: 0 18px; border: 0; border-radius: 999px; background: var(--ink); color: var(--on-ink); font: 600 15px/1 var(--sans); cursor: pointer; transition: transform 140ms var(--ease-out), background-color 200ms ease, color 200ms ease; }
  .menu-btn:active { transform: scale(0.96); }
  .top[data-menu-open] { --ink: #0B0D12; --ink-2: #454B57; --on-ink: #FFFFFF; --focus: #1D63D8; color-scheme: light; background-color: #F3F4F6; box-shadow: inset 0 -1px 0 rgb(11 13 18 / 0.08); }
  .nav { position: absolute; top: 100%; left: 0; right: 0; height: calc(100dvh - var(--head-h)); flex-direction: column; align-items: stretch; gap: 0; padding: 12px var(--margin) 32px; background: #F3F4F6; opacity: 0; visibility: hidden; transform: translateY(-8px); transition: opacity 140ms ease, transform 160ms var(--ease-out), visibility 0s linear 160ms; }
  .top[data-menu-open] .nav { opacity: 1; visibility: visible; transform: none; transition: opacity 200ms ease, transform 240ms var(--ease-out), visibility 0s; }
  .nav a { padding: 10px 0; font: 640 36px/1.1 var(--display); letter-spacing: -0.025em; color: #0B0D12; text-underline-offset: 0.16em; }
  .nav a[aria-current] { font-weight: 640; }
  .nav .nav-cta { display: none; }
  .stage { display: flex; gap: 12px; min-height: 0; margin: 0 calc(-1 * var(--margin)); padding: 0 var(--margin); overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-inline: var(--margin); background: none; scrollbar-width: none; overscroll-behavior-x: contain; }
  .stage::-webkit-scrollbar { display: none; }
  .stage-slide, .stage[data-live] .stage-slide { position: relative; inset: auto; flex: none; width: clamp(240px, 64vw, 340px); gap: 16px; padding: 28px 0 22px; background: var(--tint); visibility: visible; scroll-snap-align: start; pointer-events: auto; transition: none; }
  .stage-shot, .stage[data-live] .stage-shot { height: auto; width: 62%; opacity: 1; transform: none; filter: none; transition: none; }
  .stage-cap, .stage[data-live] .stage-cap { opacity: 1; font-size: 17px; transition: none; }
  .stage-cap img { width: 32px; height: 32px; border-radius: 8px; }
}
@media (max-width: 640px) {
  body { font-size: 17px; }
  .top-act .top-cta { display: none; }
  .nav .nav-cta { display: inline-flex; align-self: flex-start; margin-top: 24px; font: 600 16px/1 var(--sans); letter-spacing: 0; color: #FFFFFF; background: #0B0D12; height: 52px; padding: 0 26px; text-decoration: none; }
  .index { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .figs { gap: 28px 16px; }
  .figs b { font-size: 38px; }
  .figs span { font-size: 14.5px; }
  .point { grid-template-columns: 24px minmax(0, 1fr); column-gap: 14px; }
  .point > .ico { width: 24px; height: 24px; margin-top: calc((var(--t-item) * 1.12 - 24px) / 2); }

  .trace { --name-w: 94px; --row: 34px; --bar-h: 24px; --seg-min: 20px; }
  .trace-bar { gap: 10px; margin-bottom: 14px; }
  .rec { width: 44px; height: 44px; }
  .prompt { height: auto; min-height: 44px; padding: 8px 16px; border-radius: 22px; font-size: 13px; line-height: 1.45; }
  .prompt-text { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .scen { border-radius: 24px; }
  .scen-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px; }
  .chip { height: 44px; padding: 0 10px; font-size: 14.5px; }
  .phases { font-size: 13px; }
  .phases span { padding: 0 3px 0 8px; }
  .track-name { font-size: 13px; gap: 7px; padding-right: 4px; }
  /* Phones show icons only (with the caption under the lanes); a short step keeps room for its icon. */
  .seg, .seg[data-kind="human"] { justify-content: center; font-size: 0; gap: 0; padding: 0 clamp(1px, calc((var(--seg-room, 100vw) - 12px) / 2), 4px); min-width: min(var(--seg-min), var(--seg-room, var(--seg-min))); }
  .seg-ico { width: 12px; height: 12px; }
  .knob { width: 18px; height: 18px; margin: -9px 0 0 -9px; }
  .trace-main { grid-template-columns: minmax(0, 1fr); grid-template-areas: "body" "now" "out" "log"; gap: 10px; }
  .now { display: block; }
  .out { padding: 16px; min-height: 0; }
  .result { grid-template-columns: 92px minmax(0, 1fr); gap: 16px; align-items: start; }
  .result h3 { font-size: 24px; }
  .log { height: 176px; padding: 10px 12px; font-size: 12px; }
  .log li { grid-template-columns: 52px minmax(0, 1fr); gap: 6px; }
  .trace-meta { font-size: 13.5px; }

  .form-two, .topics { grid-template-columns: minmax(0, 1fr); }
  .form-foot .btn { width: 100%; }
  .foot-row { flex-direction: column; }
}

@media (prefers-reduced-motion: reduce) {
  html:focus-within { scroll-behavior: auto; }
  .btn, .rec, .chip, .menu-btn, .knob, .skip, .topic span, .replay { transition-property: opacity, background-color, color, box-shadow, text-decoration-color; }
  .btn:active, .rec:active, .scen button.chip:active, .menu-btn:active, .trace[data-scrub] .knob, .topic:active span, .replay:active { transform: none; }
  .scen-ink, .result > img, .result > div > *, .seg-ico svg, .log li, .sent, .nav { transition: none !important; }
  .prompt-text::after, .seg[data-kind="human"][data-on]:not([data-done]), .seg[data-status="wait"][data-on]:not([data-done]) { animation: none; }
  .seg[data-kind="human"] { transform: none; }
  .stage-shot { transform: none !important; filter: none !important; }
  .stage[data-live] .stage-shot { transition: opacity 200ms ease !important; }
}

@media print {
  .top, .skip, .band.on-dark, .contact, .foot-row nav, .stage, .replay { display: none !important; }
  html, body { background: #fff; }
  .on-paper { background: #fff; }
  .js [data-section] [data-in] { opacity: 1 !important; transform: none !important; clip-path: none !important; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 0.8em; color: #454B57; }
}
