/* ═══════════════════════════════════════════════════════════════════
   WordPress layer

   Only what WordPress adds to the static design: the admin bar, block
   content in the editor-written pages, the journal list, pagination,
   search. Every value is a token from main.css, so this reads as the
   same sheet. (Copied to assets/wp.css by `npm run theme`.)
   ═══════════════════════════════════════════════════════════════════ */

/* ── The admin bar ── the header and the rail sit below it, not under it. */
.admin-bar .nav { top: 32px; }
.admin-bar .rail { top: 32px; }

@media (max-width: 782px) {
    .admin-bar .nav { top: 46px; }
    .admin-bar .rail { top: 46px; }
}

@media (max-width: 600px) {
    /* WordPress stops fixing the bar here; it scrolls away with the page. */
    .admin-bar .nav { top: 0; }
}

.screen-reader-text {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

.screen-reader-text:focus {
    clip-path: none;
    width: auto;
    height: auto;
    z-index: 100;
    padding: 0.6rem 1rem;
    background: var(--ink);
    color: var(--stone-hi);
}

/* ── Entry hero ── the service hero, for pages with no aside. */
.entry-hero { padding-bottom: clamp(1.5rem, 3vw, 2.5rem); }
.entry-hero .svc-hero__title { max-width: 20ch; }
.entry-band { border-top: 0; padding-top: clamp(1rem, 3vw, 2rem); }

/* ── Content written in the editor ──────────────────────────────── */

.entry { margin-inline: 0; }

.entry h2,
.entry h3,
.entry h4 {
    font-family: var(--display);
    font-variation-settings: 'wdth' 90, 'wght' 580;
    letter-spacing: -0.015em;
    line-height: 1.12;
    color: var(--ink);
    text-wrap: balance;
}

.entry h2 { font-size: clamp(1.6rem, 2.6vw, 2.2rem); margin-top: var(--s8); }
.entry h3 { font-size: var(--t-h3); margin-top: var(--s7); }
.entry h4 { font-size: 1.05rem; margin-top: var(--s6); }

.entry p,
.entry li { line-height: 1.7; }

.entry ol { display: grid; gap: var(--s3); padding-left: 1.25rem; color: var(--ink-2); }
.entry ol li::marker { font-family: var(--mono); font-size: var(--t-label); color: var(--mark-ink); }

.entry blockquote,
.entry .wp-block-quote {
    margin-inline: 0;
    padding-left: var(--s5);
    border-left: 2px solid var(--mark);
    font-family: var(--display);
    font-size: clamp(1.2rem, 1.8vw, 1.45rem);
    font-variation-settings: 'wdth' 92, 'wght' 480;
    line-height: 1.35;
    color: var(--ink);
}

.entry blockquote cite { display: block; margin-top: var(--s3); font-family: var(--mono); font-size: var(--t-label); font-style: normal; letter-spacing: 0.09em; text-transform: uppercase; color: var(--ink-3); }

.entry pre,
.entry .wp-block-code {
    overflow-x: auto;
    padding: var(--s5);
    border: 1px solid var(--rule);
    border-radius: var(--radius);
    background: var(--stone-hi);
    font-family: var(--mono);
    font-size: 0.8125rem;
    line-height: 1.7;
}

.entry pre code { padding: 0; background: none; font-size: inherit; }

.entry hr,
.entry .wp-block-separator { border: 0; border-top: 1px solid var(--rule); margin-block: var(--s7); }

.entry img,
.entry video,
.entry iframe { max-width: 100%; height: auto; border-radius: var(--radius); }

.entry figure { margin-inline: 0; }

.entry figcaption,
.wp-caption-text {
    margin-top: var(--s2);
    font-family: var(--mono);
    font-size: var(--t-label);
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.entry table { width: 100%; border-collapse: collapse; font-size: var(--t-small); }
.entry th,
.entry td { padding: var(--s3) var(--s4) var(--s3) 0; border-bottom: 1px solid var(--rule); text-align: left; }
.entry th { font-family: var(--mono); font-size: var(--t-label); letter-spacing: 0.09em; text-transform: uppercase; color: var(--ink-3); font-weight: 400; }

.alignleft { float: left; margin: 0 var(--s5) var(--s4) 0; }
.alignright { float: right; margin: 0 0 var(--s4) var(--s5); }
.aligncenter { margin-inline: auto; }

/* Wide and full blocks may leave the 68ch measure, not the page. */
.entry .alignwide { max-width: min(1100px, 100%); }
.entry .alignfull { max-width: none; }

.entry .wp-block-button__link {
    display: inline-flex;
    padding: 0.95rem 1.75rem;
    border-radius: var(--radius);
    background: var(--ink);
    color: var(--stone-hi);
    font-weight: 600;
    text-decoration: none;
    border-bottom: 0;
}

.entry .wp-block-button__link:hover { background: var(--mark-ink); }

.entry__cover { margin: 0 0 var(--s7); }
.entry__cover img { width: 100%; height: auto; border: 1px solid var(--rule); border-radius: var(--radius); }

.entry__pages { display: flex; gap: var(--s3); margin-top: var(--s7); }

.entry__acts { display: flex; flex-wrap: wrap; gap: var(--s3) var(--s4); }

/* Previous / next, ruled off like the section heads. */
.entry__nav { max-width: 68ch; margin-top: var(--s8); border-top: 1px solid var(--rule); }
.entry__nav .nav-links { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s5); padding-top: var(--s5); }
.entry__nav a { display: grid; gap: var(--s2); text-decoration: none; color: var(--ink); }
.entry__nav .nav-next { text-align: right; }
.entry__nav-t { font-family: var(--display); font-variation-settings: 'wdth' 92, 'wght' 560; line-height: 1.2; }
.entry__nav a:hover .entry__nav-t { color: var(--mark-ink); }

.entry__comments { margin-top: var(--s8); }
.entry__comments .comment-list { list-style: none; padding: 0; }
.entry__comments .comment-list li::before { display: none; }

/* ── The journal ── entries ruled off against each other, like the schedule. */
.entries { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--ink); }

.entries__item { border-bottom: 1px solid var(--rule); }

.entries__link {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 11rem) minmax(0, 1fr) 1.5rem;
    gap: var(--s5);
    align-items: start;
    padding-block: clamp(1.4rem, 2.4vw, 2rem);
    text-decoration: none;
    color: inherit;
}

.entries__link::before {
    content: '';
    position: absolute;
    left: calc(var(--s4) * -1);
    top: 50%;
    width: 2px;
    height: 0;
    background: var(--mark);
    transform: translateY(-50%);
    transition: height 0.4s var(--ease-out);
}

.entries__link:hover::before,
.entries__link:focus-visible::before { height: 46%; }

.entries__n { padding-top: 0.55em; }
.entries__n b { color: var(--mark-ink); font-weight: 600; margin-right: var(--s2); }

.entries__main { display: grid; gap: var(--s2); transition: transform 0.45s var(--ease-out); }
.entries__link:hover .entries__main { transform: translateX(6px); }

.entries__t {
    font-family: var(--display);
    font-size: clamp(1.35rem, 2.4vw, 2rem);
    font-variation-settings: 'wdth' 94, 'wght' 560;
    line-height: 1.12;
    letter-spacing: -0.015em;
    text-wrap: balance;
}

.entries__d { color: var(--ink-2); font-size: var(--t-small); line-height: 1.65; max-width: 64ch; }

.entries__go { justify-self: end; padding-top: 0.35em; color: var(--ink-3); transition: transform 0.3s var(--ease-out), color 0.3s var(--ease); }
.entries__link:hover .entries__go { color: var(--mark-ink); transform: translateX(4px); }

@media (max-width: 680px) {
    .entries__link { grid-template-columns: minmax(0, 1fr) 1.5rem; gap: var(--s3); }
    .entries__main { grid-column: 1 / -1; }
    .entries__go { grid-row: 1; grid-column: 2; }
}

@media (prefers-reduced-motion: reduce) {
    .entries__link::before, .entries__main, .entries__go { transition: none; }
}

/* Pagination, set in the mono of the labels. */
.entries__pages { margin-top: var(--s7); }
.entries__pages .nav-links { display: flex; flex-wrap: wrap; gap: var(--s2); }

.entries__pages .page-numbers {
    display: inline-grid;
    place-items: center;
    min-width: 2.5rem;
    height: 2.5rem;
    padding-inline: var(--s3);
    border: 1px solid var(--rule);
    border-radius: var(--radius);
    font-family: var(--mono);
    font-size: var(--t-label);
    color: var(--ink-2);
    text-decoration: none;
}

.entries__pages .page-numbers.current { background: var(--ink); border-color: var(--ink); color: var(--stone-hi); }
.entries__pages a.page-numbers:hover { border-color: var(--mark); color: var(--ink); }

/* ── Search ── */
.search { display: grid; gap: var(--s2); max-width: 36rem; margin-top: var(--s5); }
.search__row { display: flex; gap: var(--s2); }

.search__input {
    flex: 1;
    min-width: 0;
    padding: 0.85rem 1rem;
    border: 1px solid var(--rule);
    border-radius: var(--radius);
    background: var(--stone-hi);
    font: inherit;
    color: var(--ink);
}

.search__input:focus { outline: 2px solid var(--mark); outline-offset: 1px; border-color: var(--ink); }

/* ── The private portfolio's gate ── the code, and the request for one.
   The fields are the project brief's, drawn with the same tokens. */
.gate {
    display: grid;
    grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(2rem, 5vw, 5rem);
    align-items: start;
}

@media (max-width: 860px) {
    .gate { grid-template-columns: minmax(0, 1fr); }
}

.gate__panel { scroll-margin-top: 9rem; }

.gate__panel--code {
    position: sticky;
    top: 9rem; /* clear of the header, and the admin bar when it shows */
    padding: var(--s6);
    border: 1px solid var(--ink);
    border-radius: var(--radius);
    background: var(--stone-hi);
}

@media (max-width: 860px) {
    .gate__panel--code { position: static; }
}

.gate__title {
    margin: 0 0 var(--s3);
    font-family: var(--display);
    font-variation-settings: "opsz" 48, "wdth" 82, "wght" 560;
    font-size: max(1.5rem, min(3vw, 2.1rem));
    line-height: 1.02;
    letter-spacing: -.015em;
}

.gate__title:focus { outline: none; }

.gate__intro {
    max-width: 52ch;
    margin: 0 0 var(--s6);
    color: var(--ink-2);
    font-size: var(--t-small);
    line-height: 1.55;
}

.gate__field { margin: 0 0 var(--s5); }
.gate__field > .label { display: block; margin-bottom: var(--s2); }

.gate__pair {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
    gap: 0 var(--s5);
}

.gate__set { margin: 0 0 var(--s5); padding: 0; border: 0; }
.gate__set legend { margin-bottom: var(--s3); padding: 0; }
.gate__chips { display: flex; flex-wrap: wrap; gap: var(--s2); }

.gate__req {
    font-style: normal;
    font-size: .9em;
    letter-spacing: .06em;
    color: var(--mark-ink);
}
.gate__req::before { content: "· "; }

.gate input[type=text],
.gate input[type=email],
.gate input[type=tel],
.gate input[type=url],
.gate textarea {
    display: block;
    width: 100%;
    padding: .7rem .85rem;
    border: 1px solid var(--rule);
    border-radius: var(--radius);
    background: var(--stone-hi);
    color: var(--ink);
    font: inherit;
    font-size: var(--t-body);
    line-height: 1.5;
    transition: border-color .18s var(--ease), box-shadow .18s var(--ease);
}
.gate textarea { min-height: 6rem; resize: vertical; }
.gate input::placeholder,
.gate textarea::placeholder { color: var(--ink-3); opacity: .75; }
.gate input:focus,
.gate textarea:focus {
    border-color: var(--ink);
    box-shadow: 0 0 0 3px var(--mark-wash);
    outline: none;
}
.gate [aria-invalid="true"] { border-color: var(--mark-ink); }

/* Six digits, read as a code: the mono face, measured out. */
.gate input.gate__code {
    padding: .8rem 1rem;
    background: var(--stone);
    font-family: var(--mono);
    font-size: clamp(1.5rem, 3.4vw, 2rem);
    font-variation-settings: "wdth" 100, "wght" 500;
    letter-spacing: .28em;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.gate__err {
    margin: var(--s2) 0 0;
    color: var(--mark-ink);
    font-size: var(--t-small);
    line-height: 1.4;
}
.gate__err:empty { display: none; }
.gate__err--form {
    margin: 0 0 var(--s5);
    padding: var(--s3) var(--s4);
    border-left: 2px solid var(--mark);
    background: var(--mark-wash);
}

.gate__consent {
    display: flex;
    gap: var(--s3);
    align-items: flex-start;
    color: var(--ink-2);
    font-size: var(--t-small);
    line-height: 1.5;
    cursor: pointer;
}
.gate__consent input { flex: none; width: 1rem; height: 1rem; margin-top: .2rem; accent-color: var(--mark); }

.gate__note {
    margin: var(--s5) 0 0;
    padding-top: var(--s4);
    border-top: 1px solid var(--rule-soft);
    color: var(--ink-3);
    font-size: var(--t-small);
}

/* The field only scripts fill in: out of sight and out of the tab order. */
.gate__trap {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

/* ═══════════════════════════════════════════════════════════════════
   The mobile menu — parts/header-nav.php, src/menu.js

   At 860px and below, once the script is running (html.js-ok), the
   header's sideways-scrolling row of links gives way to a Menu button.
   It opens a full-screen ink panel that grows out of the button: the
   pages large and numbered, then the call to start a project. Without
   script nothing here applies and the row of links stays.
   ═══════════════════════════════════════════════════════════════════ */

.nav__burger,
.menu { display: none; }

@media (max-width: 860px) {
    .js-ok .nav__in {
        flex-wrap: nowrap;
        min-height: 4rem;
        padding-block: 0;
        gap: var(--s3);
    }
    .js-ok .nav > .wrap > nav { display: none; }
    .js-ok .nav__in > .nav__id { margin-right: auto; }
    .js-ok .nav__burger { display: inline-flex; }
    .js-ok .menu { display: block; }
}

/* ── The button: a word and two lines, which cross into a close ── */

.nav__burger {
    align-items: center;
    gap: .7rem;
    height: 2.5rem;
    padding: 0 .35rem 0 .9rem;
    border: 1px solid var(--rule);
    border-radius: 999px;
    background: transparent;
    color: inherit;
    font-family: var(--mono);
    font-size: var(--t-label);
    font-variation-settings: "wdth" 87.5, "wght" 500;
    letter-spacing: .09em;
    text-transform: uppercase;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: border-color .3s var(--ease), background-color .3s var(--ease);
}
.nav__burger:hover { border-color: var(--ink-3); }
.nav__burger:focus-visible { outline: 2px solid var(--mark); outline-offset: 3px; }
.nav[data-over="ink"] .nav__burger { border-color: var(--rule-ink); }

/* Menu / Close: one word slides up out of the way of the other. */
.nav__burger-word {
    display: grid;
    height: 1.2em;
    overflow: hidden;
    line-height: 1.2;
}
.nav__burger-word span { grid-area: 1 / 1; transition: transform .45s var(--ease-out), opacity .3s var(--ease); }
.nav__burger-word span + span { transform: translateY(100%); opacity: 0; }

.nav__burger-icon {
    position: relative;
    display: block;
    width: 1.85rem;
    height: 1.85rem;
    border-radius: 50%;
    background: var(--ink);
    transition: background-color .3s var(--ease);
}
.nav__burger-icon i {
    position: absolute;
    left: 50%;
    top: 50%;
    width: .8rem;
    height: 1.5px;
    margin-left: -.4rem;
    border-radius: 1px;
    background: var(--stone-hi);
    transition: transform .45s var(--ease-out), background-color .3s var(--ease);
}
.nav__burger-icon i:first-child { transform: translateY(-3px); }
.nav__burger-icon i:last-child { transform: translateY(3px) scaleX(.6); transform-origin: left center; }
.nav__burger:hover .nav__burger-icon i:last-child { transform: translateY(3px); }
.nav[data-over="ink"] .nav__burger-icon { background: var(--on-ink); }
.nav[data-over="ink"] .nav__burger-icon i { background: var(--ink); }

/* ── The header while the menu is open: on ink, whatever it was over ── */

.nav[data-menu="open"] {
    background: var(--ink);
    color: var(--on-ink);
    border-bottom-color: var(--rule-ink);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
}
.nav[data-menu="open"] .nav__field { opacity: 0; }
.nav[data-menu="open"] .nav__id em { color: var(--mark-lit); }
.nav[data-menu="open"] .nav__in > .btn { opacity: 0; visibility: hidden; transition: opacity .2s var(--ease), visibility 0s .2s; }
.nav[data-menu="open"] .nav__burger { border-color: var(--rule-ink); }
.nav[data-menu="open"] .nav__burger-icon { background: var(--mark-lit); }
.nav[data-menu="open"] .nav__burger-icon i { background: var(--ink); }
.nav[data-menu="open"] .nav__burger-icon i:first-child { transform: rotate(45deg); }
.nav[data-menu="open"] .nav__burger-icon i:last-child { transform: rotate(-45deg); transform-origin: center; }
.nav[data-menu="open"] .nav__burger-word span:first-child { transform: translateY(-100%); opacity: 0; }
.nav[data-menu="open"] .nav__burger-word span + span { transform: none; opacity: 1; }

html[data-menu-open] { overflow: hidden; }

/* ── The panel ── */

.menu {
    position: fixed;
    inset: 0;
    z-index: 49; /* Under the header (50), which stays on top with the close button. */
    color: var(--on-ink);
    visibility: hidden;
    pointer-events: none;
    transition: visibility 0s linear .65s;
}
.menu[data-open] {
    visibility: visible;
    pointer-events: auto;
    transition: none;
}

/* The ink grows out of the button in a circle, and shrinks back into it. */
.menu__sheet {
    position: absolute;
    inset: 0;
    background-color: var(--ink);
    background-image:
        radial-gradient(90% 60% at 100% 100%, #ff6a3314, #0000 60%),
        linear-gradient(var(--grid-ink) 1px, transparent 1px),
        linear-gradient(90deg, var(--grid-ink) 1px, transparent 1px);
    background-size: auto, 64px 64px, 64px 64px;
    clip-path: circle(0 at var(--menu-x, 100%) var(--menu-y, 0));
    transition: clip-path .6s cubic-bezier(.7, 0, .2, 1);
}
.menu[data-open] .menu__sheet { clip-path: circle(150% at var(--menu-x, 100%) var(--menu-y, 0)); }

.menu__in {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    padding-top: calc(var(--menu-top, 4.5rem) + var(--s5));
    padding-bottom: max(var(--s6), env(safe-area-inset-bottom));
    overflow-y: auto;
    overscroll-behavior: contain;
}

.menu__head {
    display: flex;
    gap: var(--s3);
    margin: 0 0 var(--s4);
    color: var(--on-ink-3);
}
.menu__head b { color: var(--mark-lit); font-weight: 600; }

.menu__links { margin: 0; padding: 0; list-style: none; border-bottom: 1px solid var(--rule-ink); }
.menu__links li { border-top: 1px solid var(--rule-ink); }

.menu__link {
    display: grid;
    grid-template-columns: 2.5rem minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--s3);
    padding: clamp(.8rem, 2.4vh, 1.15rem) 0;
    color: var(--on-ink);
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
}
.menu__n { color: var(--on-ink-3); transition: color .3s var(--ease); }
.menu__t {
    font-family: var(--display);
    font-variation-settings: "opsz" 96, "wdth" 80, "wght" 540;
    font-size: clamp(2rem, 9vw, 3.2rem);
    line-height: 1;
    letter-spacing: -.03em;
    transition: transform .45s var(--ease-out), color .3s var(--ease);
}
.menu__go {
    display: grid;
    place-items: center;
    width: 2.5rem;
    height: 2.5rem;
    border: 1px solid var(--rule-ink);
    border-radius: 50%;
    color: var(--on-ink-2);
    transition: background-color .3s var(--ease), border-color .3s var(--ease), color .3s var(--ease), transform .45s var(--ease-out);
}
.menu__link:hover .menu__t,
.menu__link:focus-visible .menu__t { transform: translateX(.35rem); }
.menu__link:hover .menu__go,
.menu__link:focus-visible .menu__go,
.menu__link:active .menu__go { background: var(--mark-lit); border-color: var(--mark-lit); color: var(--ink); transform: rotate(-45deg); }
.menu__link:focus-visible { outline: 2px solid var(--mark-lit); outline-offset: -2px; }

/* The page you are on: its number in orange, a dot beside the name. */
.menu__link[aria-current] .menu__n { color: var(--mark-lit); }
.menu__link[aria-current] .menu__t::after {
    content: "";
    display: inline-block;
    width: .55rem;
    height: .55rem;
    margin-left: .6rem;
    border-radius: 50%;
    background: var(--mark-lit);
    vertical-align: .35em;
}

.menu__foot {
    display: grid;
    justify-items: start;
    gap: var(--s4);
    margin-top: auto;
    padding-top: var(--s6);
}
.menu__cta { width: 100%; justify-content: center; text-align: center; background: var(--on-ink); border-color: var(--on-ink); color: var(--ink); }
.menu__cta:hover { background: var(--mark-lit); border-color: var(--mark-lit); }
.menu .copy { color: var(--on-ink-2); border-bottom-color: var(--rule-ink); }
.menu .copy:hover { color: var(--on-ink); border-bottom-color: var(--mark-lit); }
.menu .copy__hint { color: var(--on-ink-3); }
.menu__note { margin: 0; color: var(--on-ink-3); }

/* In: the lines rise one after another once the ink has spread. Out: all at once, before it closes. */
.menu__head,
.menu__links li,
.menu__foot {
    opacity: 0;
    transform: translateY(1.25rem);
    transition: opacity .2s var(--ease), transform .2s var(--ease);
}
.menu[data-open] .menu__head,
.menu[data-open] .menu__links li,
.menu[data-open] .menu__foot {
    opacity: 1;
    transform: none;
    transition: opacity .5s var(--ease) calc(.22s + var(--i, 0) * .05s), transform .7s var(--ease-out) calc(.22s + var(--i, 0) * .05s);
}
.menu[data-open] .menu__head { transition-delay: .18s; }

@media (prefers-reduced-motion: reduce) {
    .menu__sheet { transition: none; }
    .menu__head,
    .menu__links li,
    .menu__foot { transform: none; }
    .menu,
    .menu[data-open] .menu__head,
    .menu[data-open] .menu__links li,
    .menu[data-open] .menu__foot { transition-duration: .01s; transition-delay: 0s; }
}

/* ═══════════════════════════════════════════════════════════════════
   Home — 04 About, on a phone (template-parts/home/about.php)

   Above 780px the photo and the text sit side by side and none of this
   applies. Below it they stack, and the stack was a narrow photo with a
   gap beside it and a long single column of facts. Here the photo goes
   full width, square, with a name tag on it; the facts become a
   two-by-two sheet; the buttons fill the width.
   ═══════════════════════════════════════════════════════════════════ */

.about__tag { display: none; }

@media (max-width: 780px) {
    #about .head__title { max-width: none; }

    .about { gap: var(--s6); }

    .about__photo {
        max-width: none;
        aspect-ratio: 1 / 1;
    }
    .about__photo img { object-position: 50% 16%; }

    /* The tag: a name and a role on a strip of ink, bottom left. */
    .about__tag {
        position: absolute;
        left: var(--s4);
        bottom: var(--s4);
        z-index: 1;
        display: grid;
        gap: .2rem;
        max-width: calc(100% - 2 * var(--s4));
        padding: .6rem .85rem .65rem;
        border-left: 2px solid var(--mark-lit);
        border-radius: 0 var(--radius) var(--radius) 0;
        background: color-mix(in srgb, var(--ink) 88%, transparent);
        -webkit-backdrop-filter: blur(6px);
        backdrop-filter: blur(6px);
        color: var(--on-ink);
    }
    .about__tag-name {
        font-family: var(--display);
        font-variation-settings: "opsz" 20, "wdth" 92, "wght" 600;
        font-size: 1.0625rem;
        line-height: 1.15;
        letter-spacing: -.01em;
    }
    .about__tag-role { color: var(--on-ink-2); }

    /* The tag arrives after the photo has been uncovered. */
    @media (prefers-reduced-motion: no-preference) {
        .js-ok .about.rise .about__tag {
            opacity: 0;
            translate: 0 .5rem;
            transition: opacity .6s var(--ease) 1.1s, translate .8s var(--ease-out) 1.1s;
        }
        .js-ok .about.rise[data-seen="true"] .about__tag { opacity: 1; translate: 0; }
    }

    .about__body p + p { margin-top: var(--s3); }

    /* Facts: a two-by-two sheet, ruled like a spec. */
    .facts {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 0;
        margin-top: var(--s6);
        padding-top: 0;
        border-top: 1px solid var(--rule);
    }
    .fact {
        padding: var(--s4) var(--s4) var(--s4) 0;
        border-bottom: 1px solid var(--rule);
    }
    .fact:nth-child(2n) { padding-left: var(--s4); padding-right: 0; border-left: 1px solid var(--rule); }
    .fact dt { margin-bottom: var(--s1); }
    .fact dd { font-size: 1rem; }

    .about__more { display: grid; gap: var(--s3); }
    .about__more .btn { width: 100%; justify-content: center; text-align: center; }
}

/* ═══════════════════════════════════════════════════════════════════
   Home — 06 Contact, on a phone (template-parts/home/contact.php)

   Above 860px the heading and the contact lines sit side by side and
   none of this applies. Below it: the heading takes the full width, the
   button fills it, and email and LinkedIn become rows you can tap
   anywhere on — label over value, an arrow at the end. The reply time
   is the last row, with a live dot, since it is a promise, not a link.
   ═══════════════════════════════════════════════════════════════════ */

@media (max-width: 860px) {
    .contact__title {
        max-width: none;
        font-size: max(2.5rem, min(11vw, 3.4rem));
        text-wrap: balance;
    }
    #contact .lead { max-width: none; }

    .contact__act { margin-top: var(--s6); }
    .contact__act .btn {
        width: 100%;
        justify-content: center;
        padding: 1rem 1.25rem;
        text-transform: uppercase;
        letter-spacing: .08em;
        font-weight: 600;
    }

    .contact__grid { gap: var(--s7); }

    .contact__lines { gap: 0; padding-top: 0; }

    .contact__line {
        position: relative;
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: center;
        gap: .3rem var(--s4);
        padding: var(--s4) 0;
        border-bottom: 1px solid var(--rule-ink);
        -webkit-tap-highlight-color: transparent;
    }
    .contact__line > .label { grid-column: 1; }
    .contact__line > :not(.label) { grid-column: 1; }

    .contact__line a {
        justify-self: stretch;
        padding: 0;
        border: 0;
        overflow-wrap: anywhere;
        font-size: 1.125rem;
        color: var(--on-ink);
    }
    /* The whole row is the link. */
    .contact__line a::before { content: ""; position: absolute; inset: 0; }
    .contact__line a:focus-visible { outline: none; }
    .contact__line:has(a:focus-visible) { outline: 2px solid var(--mark-lit); outline-offset: 2px; }

    /* The arrow: into the mail app, or out to LinkedIn. */
    .contact__line:has(a)::after {
        content: "→";
        grid-column: 2;
        grid-row: 1 / span 2;
        display: grid;
        place-items: center;
        width: 2.75rem;
        height: 2.75rem;
        border: 1px solid var(--rule-ink);
        border-radius: 50%;
        color: var(--on-ink-2);
        font-size: 1rem;
        transition: background-color .25s var(--ease), border-color .25s var(--ease), color .25s var(--ease), transform .35s var(--ease-out);
    }
    .contact__line:has(a[target="_blank"])::after { content: "↗"; }
    .contact__ext { display: none; }
    .contact__line:has(a):active::after,
    .contact__line:has(a:hover)::after {
        background: var(--mark-lit);
        border-color: var(--mark-lit);
        color: var(--ink);
    }
    .contact__line:has(a):active { background: #ffffff06; }

    /* The reply time: no link, a live dot instead of an arrow. */
    .contact__line:not(:has(a)) { border-bottom: 0; }
    .contact__line:not(:has(a)) > :not(.label) {
        display: inline-flex;
        align-items: center;
        gap: .6rem;
        color: var(--on-ink-2);
    }
    .contact__line:not(:has(a)) > :not(.label)::before {
        content: "";
        flex: none;
        width: .5rem;
        height: .5rem;
        border-radius: 50%;
        background: var(--mark-lit);
        box-shadow: 0 0 0 0 #ff6a3366;
    }
    @media (prefers-reduced-motion: no-preference) {
        .contact__line:not(:has(a)) > :not(.label)::before { animation: contact-live 2.4s var(--ease) infinite; }
    }
}

@keyframes contact-live {
    0% { box-shadow: 0 0 0 0 #ff6a3366; }
    70% { box-shadow: 0 0 0 .55rem #ff6a3300; }
    100% { box-shadow: 0 0 0 0 #ff6a3300; }
}

/* ── Home services on phones: the number and phase label keeps column 1 and
   the arrow column 2 (auto-placement had swapped them, pushing the label off
   the right edge and scrolling the page sideways); the stack line wraps. ── */
@media (max-width: 680px) {
    .svcs .svc__n { grid-column: 1; grid-row: 1; }
    .svcs .svc__go { grid-column: 2; grid-row: 1; justify-self: end; }
    .svcs .svc__s { white-space: normal; overflow-wrap: anywhere; }
}
