/* Braids By Taja — palette and type extracted from her own brand graphics.
   Greige field, near-black display serif, warm taupe signature script. */
:root{
  --bg:#E9E7E5; --surface:#F1F1F1; --white:#FFFFFF;
  --ink:#131313; --muted:#797877;
  --accent:#A38E7E; --accent-deep:#6E5E53; --accent-soft:#BFB0A5;
  --rule:#CBC9C7;
  --serif:'Cormorant Garamond',Georgia,serif;
  --script:'Sacramento',cursive;
  --sans:'Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --wrap:1180px; --r:2px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-weight:300;line-height:1.65;-webkit-font-smoothing:antialiased}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 24px}
a{color:inherit}

/* type */
h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.12;margin:0}
h1{font-size:clamp(2.6rem,7vw,5rem);letter-spacing:.02em}
h2{font-size:clamp(1.9rem,4vw,3rem)}
h3{font-size:1.25rem}
.display{text-transform:uppercase;letter-spacing:.14em}
.script{font-family:var(--script);color:var(--accent);
  font-size:clamp(1.8rem,4vw,2.9rem);line-height:1;font-weight:400}
.label{font-size:.7rem;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--ink)}
.muted{color:var(--muted)}
.lede{font-size:1.08rem;max-width:62ch}

/* her signature thin rule + right-angle corner motif */
.rule{height:1px;background:var(--ink);border:0;margin:0}
.corner{position:relative;padding-top:26px}
.corner::before{content:'';position:absolute;top:0;left:0;width:64%;height:1px;background:var(--ink)}
.corner::after{content:'';position:absolute;top:-14px;left:64%;width:1px;height:14px;background:var(--ink)}

section{padding:clamp(56px,9vw,116px) 0}
.alt{background:var(--surface)}
.dark{background:var(--ink);color:var(--surface)}
.dark h2,.dark h3{color:var(--white)}
.dark .label{color:var(--accent-soft)}

/* buttons */
.btn{display:inline-block;padding:16px 34px;background:var(--ink);color:var(--white);
  text-decoration:none;font-size:.74rem;letter-spacing:.2em;text-transform:uppercase;
  font-weight:500;border:1px solid var(--ink);border-radius:var(--r);transition:.25s;cursor:pointer}
.btn:hover{background:transparent;color:var(--ink)}
.dark .btn:hover{color:var(--white);border-color:var(--white)}
.btn-ghost{background:transparent;color:var(--ink)}
.btn-ghost:hover{background:var(--ink);color:var(--white)}
.btn-accent{background:var(--accent);border-color:var(--accent)}
.btn-accent:hover{background:transparent;color:var(--accent-deep);border-color:var(--accent-deep)}

/* nav */
header.nav{position:sticky;top:0;z-index:50;background:rgba(233,231,229,.94);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--rule)}
.nav-in{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 24px;
  max-width:var(--wrap);margin:0 auto}
.brand{font-family:var(--serif);font-size:1.18rem;letter-spacing:.16em;text-transform:uppercase;
  text-decoration:none;white-space:nowrap}
.nav-links{display:flex;gap:28px;align-items:center}
.nav-links a{font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;text-decoration:none;
  color:var(--ink);opacity:.75}
.nav-links a:hover{opacity:1}
/* Hiding the links on mobile left a phone user with no way to reach Services,
   Portfolio, About or Policies — only the Book button. Wrap them onto a second
   row instead. No JS, no hamburger. */
@media(max-width:860px){
  .nav-in{flex-wrap:wrap;row-gap:10px;padding-top:12px;padding-bottom:12px}
  .brand{flex:1;font-size:1.05rem}
  .nav-links{order:3;flex:1 0 100%;gap:0;justify-content:space-between;
    border-top:1px solid var(--rule);padding-top:10px}
  .nav-links a:not(.btn){font-size:.66rem;letter-spacing:.1em;opacity:.85}
  .nav-links a.btn{order:2;flex:0 0 auto;padding:11px 20px;font-size:.66rem}
}
@media(max-width:400px){
  .nav-links a:not(.btn){font-size:.6rem;letter-spacing:.06em}
}

/* grids */
.grid{display:grid;gap:22px}
.g2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.g3{grid-template-columns:repeat(auto-fill,minmax(275px,1fr))}
.g4{grid-template-columns:repeat(auto-fill,minmax(215px,1fr))}

/* cards */
.card{background:var(--white);border:1px solid var(--rule);border-radius:var(--r);overflow:hidden;
  display:flex;flex-direction:column;transition:.25s}
.card:hover{border-color:var(--accent);transform:translateY(-3px)}
.card img{width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;display:block;background:var(--surface)}
.card-body{padding:20px;display:flex;flex-direction:column;gap:9px;flex:1}
.price{font-family:var(--serif);font-size:1.5rem}
.meta{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}

/* gallery */
.tile{position:relative;overflow:hidden;border-radius:var(--r);background:var(--surface)}
.tile img{width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;display:block;transition:.5s}
.tile:hover img{transform:scale(1.045)}

/* availability strip — the honest scarcity signal */
.avail{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:16px 20px;
  background:var(--white);border:1px solid var(--accent-soft);border-radius:var(--r)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--accent);display:inline-block;margin-right:8px}

/* policies */
.policy{display:grid;gap:10px}
.policy h3{font-family:var(--sans);font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;font-weight:600}

form input,form textarea,form select{width:100%;padding:13px 15px;border:1px solid var(--rule);
  background:var(--white);font-family:var(--sans);font-size:.94rem;font-weight:300;border-radius:var(--r);color:var(--ink)}
form label{display:block;margin-bottom:7px}
.field{margin-bottom:18px}

footer{background:var(--ink);color:var(--accent-soft);padding:64px 0 34px;font-size:.86rem}
footer a{color:var(--accent-soft);text-decoration:none}
footer a:hover{color:var(--white)}

/* Not every service has a photo on her Acuity listing. Rather than a blank
   box, fall back to a typographic tile in her palette so the grid stays even. */
.card-fallback{width:100%;aspect-ratio:4/5;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:8px;text-align:center;padding:20px;
  background:linear-gradient(150deg,var(--surface) 0%,var(--accent-soft) 100%)}
.card-fallback .mark{font-family:var(--script);font-size:2.6rem;color:var(--accent-deep);line-height:1}
.card-fallback .cat{font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-deep);opacity:.8}

/* `.nav-links a` (0,2,0) outranks `.btn` (0,1,0), which silently turned the
   nav Book button into black-on-black. Restore the button's own colours. */
.nav-links a.btn{color:var(--white);opacity:1}
.nav-links a.btn:hover{color:var(--ink)}

/* Smooth scrolling is mostly an image-decode problem. Reserving each tile's box
   stops layout shift, and content-visibility lets the browser skip rendering
   work for tiles that are still off screen. */
/* The width/height attributes on <img> (added to reserve space and kill CLS)
   are presentational attributes. With `width:100%` and no `height`, the
   attribute's 800px won over `aspect-ratio` and every card image rendered
   361x800 instead of 361x451. `height:auto` on the image rules is the fix. */
.tile,.card{contain:layout paint style}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .card,.tile img{transition:none}
}

/* An honest placeholder beats a photo of the wrong service. 18 services have
   no image of that exact style in her library — these read as intentional
   rather than broken, and tell her which ones still need a photo. */
.card-fallback .mark{font-family:var(--script);font-size:1.9rem;color:var(--accent-deep);line-height:1.1}
.card-fallback .soon{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--accent-deep);opacity:.55;margin-top:4px}

/* Grid children stretch to the tallest in the row so a card with a placeholder
   lines up with a card carrying a photo. */
.grid{align-items:stretch}
.grid > .card,.grid > .cat-card{height:100%}

/* ── Category accordion ────────────────────────────────────────────────────
   One page, categories open in place. Native <details>/<summary>: no client
   JS, keyboard operable, announced by screen readers. */
.accordion{margin-top:34px;border-top:1px solid var(--ink)}
.cat{border-bottom:1px solid var(--rule)}
.cat > summary{
  list-style:none;cursor:pointer;display:flex;align-items:baseline;gap:20px;
  padding:26px 4px;transition:.2s}
.cat > summary::-webkit-details-marker{display:none}
.cat > summary:hover{padding-left:10px}
.cat > summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.cat-name{font-family:var(--serif);font-size:clamp(1.25rem,2.4vw,1.75rem);flex:1;line-height:1.2}
.cat-meta{display:flex;align-items:baseline;gap:18px;white-space:nowrap}
.cat-range{font-family:var(--serif);font-size:1.05rem;color:var(--accent-deep)}
/* the +/− mark, drawn rather than an icon font */
.cat-mark{position:relative;width:13px;height:13px;flex:0 0 13px;margin-left:4px}
.cat-mark::before,.cat-mark::after{content:'';position:absolute;background:var(--ink);transition:transform .25s ease}
.cat-mark::before{top:6px;left:0;width:13px;height:1px}
.cat-mark::after{left:6px;top:0;width:1px;height:13px}
.cat[open] > summary .cat-mark::after{transform:scaleY(0)}
.cat[open] > summary{padding-bottom:14px}
.cat[open] > summary .cat-name{color:var(--accent-deep)}
.cat-panel{padding:6px 0 40px}
@media(max-width:620px){
  .cat > summary{flex-wrap:wrap;gap:8px;padding:20px 4px}
  .cat-name{flex:1 0 100%}
  .cat-meta{gap:14px}
}
@media (prefers-reduced-motion:reduce){
  .cat > summary,.cat-mark::before,.cat-mark::after{transition:none}
}

/* A deep link (/services#take-downs, or an old /services/take-downs redirect)
   opens that category without any script. */
.cat:target{border-color:var(--accent)}

/* ── Portfolio mosaic ──────────────────────────────────────────────────────
   A uniform grid of 22 identical tiles reads as a clump. Letting a few shots
   run wide or tall gives the page rhythm, the way a printed lookbook does. */
.mosaic{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:38px;
  grid-auto-flow:dense}
.shot{display:block;overflow:hidden;border-radius:var(--r);background:var(--surface);
  position:relative;aspect-ratio:4/5}
.shot img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease}
.shot:hover img{transform:scale(1.05)}
.shot::after{content:'';position:absolute;inset:0;background:var(--ink);opacity:0;transition:opacity .3s}
.shot:hover::after{opacity:.06}
.shot.wide{grid-column:span 2;aspect-ratio:8/5}
.shot.tall{grid-row:span 2;aspect-ratio:4/10}
@media(max-width:1000px){
  .mosaic{grid-template-columns:repeat(3,1fr)}
  .shot.tall{grid-row:span 1;aspect-ratio:4/5}
}
@media(max-width:660px){
  .mosaic{grid-template-columns:repeat(2,1fr);gap:10px}
  .shot.wide{grid-column:span 2;aspect-ratio:8/5}
}

/* Lightbox — native <dialog>; tiles stay plain links when JS is off. */
.lightbox{border:0;padding:0;background:transparent;max-width:96vw;max-height:96vh}
.lightbox::backdrop{background:rgba(19,19,19,.92)}
.lightbox img{max-width:88vw;max-height:90vh;display:block;border-radius:var(--r)}
.lightbox button{position:fixed;background:transparent;border:0;color:var(--surface);
  font-size:2.4rem;line-height:1;cursor:pointer;padding:14px;opacity:.75;transition:opacity .2s}
.lightbox button:hover{opacity:1}
.lb-close{top:14px;right:18px;font-size:2.8rem}
.lb-prev{left:10px;top:50%;transform:translateY(-50%)}
.lb-next{right:10px;top:50%;transform:translateY(-50%)}
@media (prefers-reduced-motion:reduce){.shot img{transition:none}}

/* ── Book page ─────────────────────────────────────────────────────────────
   Two columns that size to their own content. Previously the grid stretched
   the shorter left column, leaving a tall dead gap beside the waitlist box. */
.book-cols{align-items:start}
.waitlist-box{background:var(--white);border:1px solid var(--accent-soft);padding:30px;border-radius:var(--r)}

/* The enquiry panel used to be a full-width box wrapped around a 640px form,
   so the right half of it was empty. Now the panel is the width of its
   content and centred. */
.enquiry{max-width:720px;margin:0 auto;background:var(--surface);
  border:1px solid var(--rule);border-radius:var(--r);padding:32px}
.enquiry-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
@media(max-width:560px){.enquiry-row{grid-template-columns:1fr;gap:0}
  .enquiry{padding:24px}}

/* ── Book: numbered outcomes ───────────────────────────────────────────────
   Each block states what it gets you, so the page reads as a path rather than
   a set of forms. */
.step{border-top:1px solid var(--rule)}
.step:first-of-type{border-top:0}
.step-head{display:flex;gap:18px;align-items:flex-start;margin-bottom:22px}
.step-no{flex:0 0 40px;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;
  background:var(--ink);color:var(--white);font-family:var(--serif);font-size:1.15rem}
.step-no.pending{background:transparent;color:var(--accent-deep);border:1px solid var(--accent-soft)}
.step-title{font-family:var(--serif);font-size:clamp(1.3rem,2.4vw,1.7rem);margin:0;line-height:1.2}
.step-sub{font-size:.88rem;margin:6px 0 0;max-width:56ch}

.pick-form{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;padding-left:58px}
@media(max-width:620px){.pick-form{padding-left:0}.step-head{gap:12px}}

.step-empty{margin-left:58px;padding:34px;border:1px dashed var(--accent-soft);
  border-radius:var(--r);background:var(--surface)}
@media(max-width:620px){.step-empty{margin-left:0}}

.chosen{display:flex;align-items:center;gap:20px;flex-wrap:wrap;justify-content:space-between;
  background:var(--white);border:1px solid var(--accent-soft);border-radius:var(--r);
  padding:20px 24px;margin:0 0 18px 58px}
.chosen-figs{display:flex;align-items:baseline;gap:16px}
@media(max-width:620px){.chosen{margin-left:0}}

/* Her real Acuity scheduler, inline — time selection and the $25 deposit stay
   in her account. */
.scheduler-frame{margin-left:58px;border:1px solid var(--rule);border-radius:var(--r);
  background:var(--white);overflow:hidden;height:760px;-webkit-overflow-scrolling:touch}
.scheduler{width:100%;height:100%;border:0;display:block}
@media(max-width:620px){.scheduler-frame{margin-left:0;height:70vh;min-height:520px}}

/* ── Native booking flow ───────────────────────────────────────────────────
   Three steps, owned by the site: choose a service, pick a time, book. */
.step-no.done{background:var(--accent);color:var(--white)}
.step-body{padding-left:58px}
@media(max-width:620px){.step-body{padding-left:0}}
.step-body .pick-form,.step-body .step-empty,.step-body .chosen{padding-left:0;margin-left:0}

/* date strip */
.daylist{display:flex;gap:10px;flex-wrap:wrap}
.day{display:flex;flex-direction:column;align-items:center;gap:2px;text-decoration:none;
  min-width:72px;padding:12px 10px;border:1px solid var(--rule);border-radius:var(--r);
  background:var(--white);color:var(--ink);transition:.2s}
.day:hover{border-color:var(--accent);transform:translateY(-2px)}
.day.on{background:var(--ink);color:var(--white);border-color:var(--ink)}
.day-dow{font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;opacity:.7}
.day-num{font-family:var(--serif);font-size:1.5rem;line-height:1}
.day-mon{font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;opacity:.7}

/* time slots */
.slots{margin-top:26px;padding-top:22px;border-top:1px solid var(--rule)}
.slot-row{display:flex;gap:10px;flex-wrap:wrap}
.slot{text-decoration:none;padding:13px 22px;border:1px solid var(--ink);border-radius:var(--r);
  color:var(--ink);font-size:.86rem;letter-spacing:.08em;background:var(--white);transition:.2s}
.slot:hover{background:var(--ink);color:var(--white)}

/* confirm */
.confirm{max-width:640px}
.summary{background:var(--white);border:1px solid var(--accent-soft);border-radius:var(--r);
  padding:22px 24px;margin-bottom:24px;display:grid;gap:10px}
.summary > div{display:flex;justify-content:space-between;align-items:baseline;gap:16px}
.summary .label{margin:0;color:var(--muted)}

/* ── Social proof ──────────────────────────────────────────────────────────*/
.ratings{display:flex;gap:16px;flex-wrap:wrap;margin-top:22px}
.rating{display:flex;flex-direction:column;gap:2px;text-decoration:none;color:inherit;
  background:var(--white);border:1px solid var(--rule);border-radius:var(--r);padding:18px 24px;
  min-width:180px;transition:.2s}
a.rating:hover{border-color:var(--accent);transform:translateY(-2px)}
.rating-val{font-family:var(--serif);font-size:2.1rem;line-height:1}
.rating-unit{font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--accent-deep)}
.rating .meta{margin-top:6px}

.quote{background:var(--white);border:1px solid var(--rule);border-radius:var(--r);
  padding:26px;margin:0;display:flex;flex-direction:column;gap:8px}
.quote blockquote{margin:0;font-family:var(--serif);font-size:1.06rem;line-height:1.5}
.quote figcaption{font-size:.8rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-deep);
  margin-top:auto;padding-top:10px}

/* channels */
.channel{display:flex;flex-direction:column;gap:4px;text-decoration:none;color:inherit;
  background:var(--white);border:1px solid var(--rule);border-radius:var(--r);padding:22px;transition:.2s}
.channel:hover{border-color:var(--accent);transform:translateY(-3px)}
.channel-metric{font-family:var(--serif);font-size:1.7rem;line-height:1.1}
.channel-handle{margin-top:2px}
.channel-note{font-size:.78rem;margin-top:8px;line-height:1.45}

/* owner-facing wiring table */
.wiring{margin-top:40px;background:var(--surface);border:1px solid var(--rule);
  border-radius:var(--r);padding:28px}
.wire-table{width:100%;border-collapse:collapse;font-size:.82rem}
.wire-table th{text-align:left;font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--muted);font-weight:600;padding:0 12px 10px 0;border-bottom:1px solid var(--rule)}
.wire-table td{padding:11px 12px 11px 0;border-bottom:1px solid var(--rule);vertical-align:middle}
.wire-table code{font-size:.76rem;color:var(--accent-deep);background:var(--white);
  padding:2px 6px;border-radius:2px}
.pill{font-size:.64rem;letter-spacing:.12em;text-transform:uppercase;padding:4px 10px;
  border-radius:999px;white-space:nowrap}
.pill-verified{background:var(--accent);color:var(--white)}
.pill-not_connected{background:var(--accent-soft);color:var(--ink)}
.pill-inactive{background:transparent;color:var(--muted);border:1px solid var(--rule)}

/* square card fields */
.pay{background:var(--white);border:1px solid var(--accent-soft);border-radius:var(--r);
  padding:22px;margin:0 0 22px}
#card-container{min-height:90px}
.pay-error{color:#8B2F2F;font-size:.82rem;margin:10px 0 0;min-height:1em}

/* ── Mobile gutters ────────────────────────────────────────────────────────
   24px reads as crowded under the large serif display type on a phone, and it
   ignores the notch cut-out on newer handsets. Widen the gutter and respect
   the safe area on both sides. */
@media(max-width:700px){
  .wrap{
    padding-left:calc(28px + env(safe-area-inset-left));
    padding-right:calc(28px + env(safe-area-inset-right));
  }
  .nav-in{
    padding-left:calc(28px + env(safe-area-inset-left));
    padding-right:calc(28px + env(safe-area-inset-right));
  }
  /* the hover nudge sticks after a tap on touch devices */
  .cat > summary:hover{padding-left:4px}
  h1{font-size:clamp(2.3rem,9vw,3.2rem)}
  .step-head{align-items:center}
}
/* No narrower override below 400px — an earlier attempt set 22px here, which
   made small phones TIGHTER than the 24px it was meant to fix. 28px holds
   all the way down. */

/* Steps revealed in place get a short fade so the change is noticed without
   a page load. Respects reduced-motion. */
@keyframes stepIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.step-reveal{animation:stepIn .35s ease both}
.slot.on{background:var(--ink);color:var(--white)}
.done-card{background:var(--white);border:1px solid var(--accent-soft);
  border-radius:var(--r);padding:30px;max-width:560px}
@media (prefers-reduced-motion:reduce){.step-reveal{animation:none}}

.quote-tags{display:block;margin-top:6px;font-size:.64rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted)}
.footer-social{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.footer-social a{display:inline-flex;align-items:center;gap:9px}
.footer-social .meta{color:var(--muted)}

/* ── Channel feeds ─────────────────────────────────────────────────────────
   Each social channel gets a real place on the page. Sections with content
   render for everyone; empty ones show only in the owner view so clients never
   meet a blank shelf. */
.feed{padding:clamp(48px,7vw,84px) 0}
.feed-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap}
.feed-strip{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-top:26px}
.feed-tile{display:block;overflow:hidden;border-radius:var(--r);aspect-ratio:4/5;background:var(--surface)}
.feed-tile img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s}
.feed-tile:hover img{transform:scale(1.06)}
@media(max-width:900px){.feed-strip{grid-template-columns:repeat(3,1fr)}}
@media(max-width:520px){.feed-strip{grid-template-columns:repeat(2,1fr);gap:8px}}

.feed-empty{margin-top:24px;padding:26px;border:1px dashed var(--accent-soft);
  border-radius:var(--r);background:var(--white)}

/* owner-only wiring hint */
.hint{margin-top:18px;padding:16px 18px;border-left:2px solid var(--accent);
  background:var(--surface);border-radius:0 var(--r) var(--r) 0}
.hint-head{display:flex;align-items:center;gap:10px}
.hint code{font-size:.74rem;color:var(--accent-deep);background:var(--white);padding:2px 6px;border-radius:2px}

/* Reviews woven into the portfolio grid — a client's words landing between the
   photos does more than a wall of images or a testimonial block at the bottom. */
.quote-tile{grid-column:span 2;justify-content:center;background:var(--white);
  border:1px solid var(--accent-soft);aspect-ratio:auto;padding:30px}
.quote-tile blockquote{font-size:1.02rem}
@media(max-width:660px){.quote-tile{grid-column:span 2;padding:24px}}

/* social bar above the work */
.social-bar{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:30px}
.social-bar a{display:flex;flex-direction:column;gap:6px;text-decoration:none;color:inherit;
  background:var(--white);border:1px solid var(--rule);border-radius:var(--r);padding:20px;transition:.2s}
.social-bar a:hover{border-color:var(--accent);transform:translateY(-2px)}
.social-metric{font-family:var(--serif);font-size:1.5rem;line-height:1.15}
@media(max-width:660px){.social-bar{grid-template-columns:1fr}}
.social-handle{font-family:var(--serif);font-size:1.15rem;line-height:1.2}

/* ── About ────────────────────────────────────────────────────────────────*/
.facts{display:grid;grid-template-columns:auto 1fr;gap:10px 18px;margin:22px 0 0;
  background:var(--white);border:1px solid var(--rule);border-radius:var(--r);padding:22px 24px}
.facts dt{margin:0;white-space:nowrap;align-self:center}
.facts dd{margin:0;font-size:.95rem}
.pull{margin:0;font-family:var(--serif);font-size:clamp(1.4rem,3vw,2.1rem);line-height:1.35;
  max-width:26ch;color:var(--white)}
.spec-list{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.spec{padding:10px 18px;border:1px solid var(--accent-soft);border-radius:999px;
  font-size:.82rem;background:var(--white)}
