/* ============================================================
   Vivid Customs
   One committed theme: black, with a single electric blue
   sampled from the shop's own underglow footage. Display face
   is a high-contrast serif — a star ceiling is a luxury-car
   feature, so the page is set like one.
   ============================================================ */

:root{
  --ink:     #000000;
  --sheet:   #0B0C0E;
  --sheet-2: #101216;
  --line:    #1C1E23;
  --line-2:  #2A2D34;

  --white:   #F4F6F9;
  --mute:    #868D98;
  --mute-2:  #5C626C;

  --glow:    #3D7BFF;   /* the blue in his underglow, the only accent */
  --glow-lo: rgba(61,123,255,.13);

  --serif: "Instrument Serif", "Times New Roman", Georgia, serif;
  --sans:  "Archivo", "Helvetica Neue", Arial, sans-serif;

  --pad:  clamp(1.25rem, 4vw, 4.5rem);
  --max:  1240px;
  --rail: 190px;
}

*,*::before,*::after{ box-sizing:border-box; }

html{ scroll-behavior:smooth; }
@media (prefers-reduced-motion: reduce){ html{ scroll-behavior:auto; } }

body{
  margin:0;
  background:var(--ink);
  color:var(--white);
  font-family:var(--sans);
  font-size:1rem;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

img,video{ display:block; max-width:100%; }
a{ color:inherit; }
::selection{ background:var(--glow); color:#fff; }

:focus-visible{ outline:2px solid var(--glow); outline-offset:3px; border-radius:2px; }

.skip{ position:absolute; left:-9999px; top:0; z-index:100; background:var(--white); color:var(--ink); padding:.6rem 1rem; font-weight:600; }
.skip:focus{ left:.5rem; top:.5rem; }

/* ── type primitives ─────────────────────────────────────── */

h1,h2{
  font-family:var(--serif);
  font-weight:400;
  letter-spacing:-.015em;
  line-height:1.0;
  text-wrap:balance;
  margin:0;
}
h1 i, h2 i{ font-style:italic; }

h3{ font-family:var(--sans); font-weight:600; font-size:1.125rem; letter-spacing:.005em; line-height:1.25; margin:0; }
p{ margin:0; }

.label{
  font-family:var(--sans);
  font-weight:600;
  font-size:.75rem;
  text-transform:uppercase;
  letter-spacing:.18em;
  color:var(--mute-2);
}
.label--light{ color:rgba(244,246,249,.72); }

.lede{ color:var(--mute); max-width:56ch; font-size:1.0625rem; }
.note{ font-size:.875rem; color:var(--mute-2); }
.note a{ color:var(--white); text-decoration:none; border-bottom:1px solid var(--glow); }
.note a:hover{ color:var(--glow); }

/* ── buttons ─────────────────────────────────────────────── */

.btn{
  --bp:.85rem 1.75rem;
  display:inline-flex; align-items:center; justify-content:center;
  padding:var(--bp);
  font-family:var(--sans); font-size:.9375rem; font-weight:600;
  letter-spacing:.01em;
  text-decoration:none;
  color:var(--ink); background:var(--white);
  border:1px solid var(--white); border-radius:999px;
  cursor:pointer;
  transition:background .2s ease, color .2s ease, border-color .2s ease, opacity .2s ease;
}
.btn:hover{ background:var(--glow); border-color:var(--glow); color:#fff; }
.btn--sm{ --bp:.55rem 1.15rem; font-size:.875rem; }
.btn--ghost{ background:transparent; color:var(--white); border-color:rgba(244,246,249,.32); }
.btn--ghost:hover{ background:transparent; border-color:var(--white); color:var(--white); }
.btn[disabled]{ opacity:.4; cursor:not-allowed; }

/* ── nav ─────────────────────────────────────────────────── */

.nav{
  position:fixed; inset:0 0 auto 0; z-index:50;
  display:flex; align-items:center; gap:2rem;
  padding:1rem var(--pad);
  border-bottom:1px solid transparent;
  transition:background .3s ease, border-color .3s ease, backdrop-filter .3s ease, padding .3s ease;
}
.nav[data-stuck="true"]{
  background:rgba(0,0,0,.86);
  backdrop-filter:blur(16px);
  border-bottom-color:var(--line);
  padding-block:.6rem;
}
.nav[data-stuck="true"] .nav__brand img{ height:38px; }
.nav__brand{ margin-right:auto; display:flex; line-height:0; }
.nav__brand img{ height:46px; width:auto; }
.nav__links{ display:flex; gap:2rem; }
.nav__links a{
  font-size:.9375rem; color:var(--mute); text-decoration:none;
  transition:color .18s ease;
}
.nav__links a:hover{ color:var(--white); }
@media (max-width: 820px){ .nav__links{ display:none; } }

/* ── hero: his own footage, running behind the type ──────── */

.hero{
  position:relative;
  min-height:100svh;
  display:flex; flex-direction:column; justify-content:center;
  /* bottom padding = top padding minus the nav, so the gap under the buttons
     matches the gap above the label instead of running 30px deeper */
  padding:7rem var(--pad) 2rem;
  overflow:hidden;
  isolation:isolate;
}
.hero__video{
  position:absolute; inset:0; z-index:-2;
  width:100%; height:100%;
  object-fit:cover;
  object-position:center 35%;
}
.hero__scrim{
  position:absolute; inset:0; z-index:-1;
  background:
    linear-gradient(to right, rgba(0,0,0,.86) 0%, rgba(0,0,0,.50) 36%, rgba(0,0,0,.04) 62%, rgba(0,0,0,.18) 100%),
    linear-gradient(to bottom, rgba(0,0,0,.6) 0%, transparent 16%, transparent 58%, rgba(0,0,0,.88) 90%, var(--ink) 100%);
}

.hero__inner{
  width:100%; max-width:var(--max); margin-inline:auto;
  display:flex; flex-direction:column; align-items:flex-start; gap:1.5rem;
}
.hero__inner > *{ max-width:100%; }

.hero__h1{
  font-size:clamp(3.25rem, 10.5vw, 8.5rem);
  margin:0;
}
.hero__h1 i{ color:var(--white); }

.hero__sub{ max-width:48ch; color:rgba(244,246,249,.82); font-size:clamp(1rem,1.4vw,1.1875rem); }
.hero__cta{ display:flex; flex-wrap:wrap; gap:1rem; }

/* ── section shell: a label rail, then the content ───────── */

.sec{
  max-width:var(--max); margin-inline:auto;
  padding:clamp(4rem,7vw,7rem) var(--pad);
  display:grid; grid-template-columns:var(--rail) minmax(0,1fr);
  gap:clamp(1.5rem,3vw,3rem);
  border-top:1px solid var(--line);
}
.sec:first-of-type{ border-top:0; }
.sec__rail{ padding-top:.6rem; }
.sec__body{ display:flex; flex-direction:column; gap:1.25rem; min-width:0; }
.sec__h2{ font-size:clamp(2.125rem,4.4vw,3.5rem); max-width:20ch; }
.sec__h2 + .lede{ margin-top:-.25rem; }

@media (max-width: 780px){
  .sec{ grid-template-columns:minmax(0,1fr); gap:1rem; }
  .sec__rail{ padding-top:0; }
}

/* ── service rows (no cards — hairlines and type) ────────── */

.rows{ margin-top:1.5rem; border-top:1px solid var(--line); }
.rowitem{
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(1.25rem,3vw,3rem);
  padding:2rem 0;
  border-bottom:1px solid var(--line);
}
.rowitem__lead{ display:flex; flex-direction:column; justify-content:center; gap:.6rem; }
.rowitem__lead p{ color:var(--mute); font-size:.9375rem; max-width:42ch; }

.rowitem__shot{
  /* Uniform width, natural height — nothing is cropped. Every shot is 4:3
     out of the camera, so the three rows land at the same height anyway. */
  width:100%; max-width:340px; height:auto;
  margin-left:auto;
}

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

/* ── work panes (5:4 frames, two up — big enough to read) ─── */

.panes{
  margin-top:1rem;
  display:grid; grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(.5rem,1vw,.875rem);
}
@media (min-width: 720px){ .panes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }

.pane{ margin:0; position:relative; overflow:hidden; background:var(--ink); border-radius:3px; aspect-ratio:5/4; }
.pane img, .pane video{
  position:absolute; inset:0;
  width:100%; height:100%; object-fit:cover;
  transition:transform .7s cubic-bezier(.2,.7,.3,1);
}
/* Hover effects only where there's a pointer to hover with. On a phone a
   :hover rule costs a tap: Safari spends the first one applying the hover
   state and only opens the link on the second. */
@media (hover: hover) and (pointer: fine){
  .pane:hover img, .pane:hover video{ transform:scale(1.04); }
}
.pane figcaption{
  position:absolute; inset:auto 0 0 0;
  padding:2rem .9rem .8rem;
  background:linear-gradient(to top, rgba(0,0,0,.92) 12%, transparent);
  display:flex; flex-direction:column; gap:.1rem;
}
.pane figcaption b{ font-size:1rem; font-weight:600; line-height:1.2; }
.pane figcaption span{ font-size:.8125rem; color:var(--mute); }

.pane__link{ position:absolute; inset:0; z-index:2; }
.pane__link span{
  position:absolute; right:.9rem; top:.9rem;
  padding:.4rem .8rem; border-radius:999px;
  font-size:.75rem; font-weight:600; letter-spacing:.02em;
  color:var(--ink); background:var(--white);
  opacity:0; translate:0 -.35rem;
  transition:opacity .25s ease, translate .25s ease;
}
.pane__link:focus-visible span{ opacity:1; translate:0; }
/* Hover only where there's a pointer to hover with — on a phone a :hover rule
   costs a tap, and the chip would have nothing to reveal it anyway. */
@media (hover: hover) and (pointer: fine){
  .pane:hover .pane__link span{ opacity:1; translate:0; }
}

/* ── process ─────────────────────────────────────────────── */

.steps{
  list-style:none; margin:1.75rem 0 0; padding:0;
  display:grid; grid-template-columns:minmax(0,1fr);
  gap:clamp(.6rem,1.2vw,.875rem);
  counter-reset:step;
}
@media (min-width: 720px){ .steps{ grid-template-columns:repeat(2,minmax(0,1fr)); } }

.steps li{
  position:relative; overflow:hidden;
  display:flex; flex-direction:column; gap:.5rem;
  padding:1.35rem 1.35rem 1.5rem;
  background:var(--sheet);
  border:1px solid var(--line);
  border-radius:4px;
  transition:border-color .25s ease, background .25s ease;
}
.steps li::before{
  content:""; position:absolute; inset:0 auto 0 0; width:2px;
  background:linear-gradient(to bottom, var(--glow), transparent 85%);
}
.steps li:hover{ background:var(--sheet-2); border-color:var(--line-2); }

.steps__n{
  font-family:var(--sans); font-weight:600;
  font-size:.6875rem; text-transform:uppercase; letter-spacing:.2em;
  color:var(--glow); font-variant-numeric:tabular-nums;
}
.steps h3{ font-size:1.0625rem; }
.steps p{ color:var(--mute); font-size:.9375rem; }

/* ── faq ─────────────────────────────────────────────────── */

.faq{ margin-top:1rem; border-top:1px solid var(--line); }
.faq details{ border-bottom:1px solid var(--line); }
.faq summary{
  list-style:none; cursor:pointer; position:relative;
  padding:1.25rem 2.5rem 1.25rem 0;
  font-family:var(--serif); font-size:clamp(1.25rem,2.2vw,1.625rem); line-height:1.25;
  transition:color .2s ease;
}
.faq summary::-webkit-details-marker{ display:none; }
.faq summary:hover{ color:var(--glow); }
.faq summary::after{
  content:""; position:absolute; right:.5rem; top:50%;
  width:10px; height:10px;
  border-right:1.5px solid var(--glow); border-bottom:1.5px solid var(--glow);
  translate:0 -70%; rotate:45deg; transition:rotate .25s ease;
}
.faq details[open] summary::after{ rotate:-135deg; translate:0 -30%; }
.faq details p{ color:var(--mute); max-width:62ch; padding:0 0 1.5rem; font-size:.9375rem; }
.faq details b{ color:var(--white); font-weight:600; }

/* ── closer ──────────────────────────────────────────────── */

.closer{
  max-width:var(--max); margin-inline:auto;
  padding:clamp(4.5rem,8vw,7.5rem) var(--pad);
  border-top:1px solid var(--line);
  display:flex; flex-direction:column; align-items:center; text-align:center; gap:1rem;
}
.closer h2{ font-size:clamp(2.5rem,6vw,4.5rem); }
.closer p{ color:var(--mute); max-width:44ch; }
.closer .btn{ margin-top:.75rem; }

/* ── footer ──────────────────────────────────────────────── */

.foot{
  max-width:var(--max); margin-inline:auto;
  padding:2.5rem var(--pad) 3rem;
  border-top:1px solid var(--line);
  display:flex; flex-wrap:wrap; align-items:center; gap:1.25rem 2.5rem;
}
.foot__brand{ display:flex; align-items:center; gap:1rem; margin-right:auto; }
.foot__brand img{ height:52px; width:auto; }
.foot__brand span{ font-size:.75rem; text-transform:uppercase; letter-spacing:.13em; color:var(--mute-2); }
.foot__links{ display:flex; flex-wrap:wrap; gap:.35rem 1.5rem; }
.foot__links a{ font-size:.875rem; color:var(--mute); text-decoration:none; }
.foot__links a:hover{ color:var(--white); }
.foot__fine{ flex-basis:100%; font-size:.8125rem; color:var(--mute-2); }

/* ── scroll reveal ───────────────────────────────────────── */

[data-reveal]{ opacity:0; transform:translateY(14px); transition:opacity .6s ease, transform .6s cubic-bezier(.2,.7,.3,1); }
[data-reveal].is-in{ opacity:1; transform:none; }

@media (prefers-reduced-motion: reduce){
  [data-reveal]{ opacity:1; transform:none; transition:none; }
  .wiz__fill{ transition:none; }
  .hero__video{ display:none; }
  .hero{ background:url("video/hero-poster.jpg") center 35%/cover no-repeat; }
  .pane img, .pane video{ transition:none; }
  .pane:hover img, .pane:hover video{ transform:none; }
}

/* ============================================================
   book.html — the booking page
   ============================================================ */

.bookhead{
  padding:8rem var(--pad) 0;
  max-width:900px; margin-inline:auto;
  display:flex; flex-direction:column; gap:1rem;
}
.bookhead h1{ font-size:clamp(2.75rem,6.5vw,5rem); }
.bookhead .lede{ font-size:1.0625rem; }

.book{
  max-width:900px; margin-inline:auto;
  padding:clamp(2.5rem,5vw,4rem) var(--pad) 5rem;
}

.form{ display:flex; flex-direction:column; gap:0; min-width:0; }

/* numbered steps — the whole form without JS, one at a time with it */
[hidden]{ display:none !important; }
.step{ border:0; margin:0; padding:2.25rem 0; border-top:1px solid var(--line); display:grid; gap:1.25rem; }
.step:first-of-type{ border-top:0; padding-top:0; }

.is-quiz{ min-height:26rem; }
.is-quiz .step{ display:none; border-top:0; padding:0 0 .5rem; }
.is-quiz .step.is-on{ display:grid; }
.step__head{ display:flex; align-items:baseline; gap:.85rem; }
.step__n{ font-family:var(--serif); font-size:1.5rem; line-height:1; color:var(--glow); font-variant-numeric:tabular-nums; }
.step__head h2{ font-size:1.5rem; }
.step__hint{ font-size:.875rem; color:var(--mute-2); margin-top:-.6rem; }

.field{ display:flex; flex-direction:column; gap:.4rem; min-width:0; }
.field > label, .field > .lbl{
  font-size:.75rem; font-weight:600; text-transform:uppercase; letter-spacing:.13em; color:var(--mute);
}
.field input, .field select, .field textarea{
  font-family:var(--sans); font-size:1rem; color:var(--white);
  background:var(--sheet); border:1px solid var(--line-2); border-radius:4px;
  padding:.75rem .85rem; width:100%;
  transition:border-color .2s ease, box-shadow .2s ease;
}
.field textarea{ min-height:110px; resize:vertical; }
.field input:focus, .field select:focus, .field textarea:focus{
  outline:none; border-color:var(--glow); box-shadow:0 0 0 3px var(--glow-lo);
}
.field input::placeholder, .field textarea::placeholder{ color:var(--mute-2); }
.field input[type="date"]::-webkit-calendar-picker-indicator{ filter:invert(1) opacity(.55); cursor:pointer; }
.field select{
  appearance:none; cursor:pointer; padding-right:2.25rem;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%233D7BFF' stroke-width='1.6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right .85rem center; background-size:12px 8px;
}
/* the Logo extra opens this — kept out of the flow until it's picked */
.drawer{ gap:.6rem; padding:1rem 1.1rem; border:1px solid var(--line); border-radius:6px; background:var(--sheet); }
.drawer[hidden]{ display:none; }
.drawer textarea{ min-height:84px; }
.field input[type="file"]{ padding:.55rem .6rem; font-size:.875rem; color:var(--mute); cursor:pointer; }
.field input[type="file"]::file-selector-button{
  margin-right:.75rem; padding:.45rem .85rem; border-radius:999px;
  border:1px solid var(--line-2); background:var(--sheet-2);
  color:var(--white); font:inherit; font-size:.8125rem; cursor:pointer;
}
@media (hover: hover) and (pointer: fine){
  .field input[type="file"]::file-selector-button:hover{ border-color:var(--glow); }
}

.hp{ position:absolute; left:-9999px; width:1px; height:1px; opacity:0; }

.row{ display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:1rem; align-items:end; }

/* selectable service tiles */
.tiles{ display:grid; grid-template-columns:minmax(0,1fr); gap:.75rem; }
@media (min-width: 520px){ .tiles{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
.tiles input{ position:absolute; opacity:0; width:0; height:0; }
.tiles label{
  display:flex; flex-direction:column; gap:.3rem;
  padding:1rem; cursor:pointer;
  background:var(--sheet); border:1px solid var(--line-2); border-radius:4px;
  transition:border-color .2s ease, background .2s ease;
}
.tiles label b{ font-size:.9375rem; font-weight:600; }
.tiles label span{ font-size:.8125rem; color:var(--mute); line-height:1.4; }
.tiles label:hover{ border-color:var(--line-2); background:var(--sheet-2); }
.tiles input:checked + label{ border-color:var(--glow); background:var(--glow-lo); }
.tiles input:focus-visible + label{ outline:2px solid var(--glow); outline-offset:2px; }

/* compact chip choices */
.chips{ display:flex; flex-wrap:wrap; gap:.5rem; }
.chips input{ position:absolute; opacity:0; width:0; height:0; }
.chips label{
  padding:.5rem .95rem; cursor:pointer; font-size:.875rem; color:var(--mute);
  border:1px solid var(--line-2); border-radius:999px;
  transition:color .2s ease, border-color .2s ease, background .2s ease;
}
.chips label:hover{ color:var(--white); }
.chips input:checked + label{ color:var(--white); border-color:var(--glow); background:var(--glow-lo); }
.chips input:focus-visible + label{ outline:2px solid var(--glow); outline-offset:2px; }

.form__actions{ display:flex; flex-direction:column; gap:.75rem; align-items:flex-start; padding-top:2rem; border-top:1px solid var(--line); }
.wiz__nav{ display:flex; gap:.75rem; align-items:center; }

/* progress + review, both only when the quiz is running */
.wiz{ display:none; }
.is-quiz .wiz{
  display:flex; flex-direction:column; gap:.65rem;
  padding-bottom:1.9rem; scroll-margin-top:6rem;
}
.wiz__track{ height:2px; background:var(--line-2); border-radius:2px; overflow:hidden; }
.wiz__fill{ display:block; height:100%; width:16.6%; background:var(--glow); transition:width .35s cubic-bezier(.2,.7,.3,1); }
.wiz__count{ font-size:.6875rem; font-weight:600; text-transform:uppercase; letter-spacing:.2em; color:var(--mute-2); }

.review{ margin:0; display:flex; flex-direction:column; }
.review__row{
  display:grid; grid-template-columns:minmax(0,9rem) minmax(0,1fr) auto;
  gap:.35rem 1rem; align-items:baseline;
  padding:.85rem 0; border-bottom:1px solid var(--line);
}
.review__row:first-child{ border-top:1px solid var(--line); }
.review__row dt{ font-size:.6875rem; font-weight:600; text-transform:uppercase; letter-spacing:.13em; color:var(--mute-2); }
.review__row dd{ margin:0; font-size:.9375rem; }
.review__edit{
  font-family:var(--sans); font-size:.75rem; font-weight:600; color:var(--mute);
  background:none; border:0; border-bottom:1px solid var(--line-2);
  padding:.15rem .1rem; cursor:pointer;
  transition:color .2s ease, border-color .2s ease;
}
.review__edit:hover{ color:var(--white); border-color:var(--glow); }
@media (max-width: 560px){
  .review__row{ grid-template-columns:minmax(0,1fr) auto; }
  .review__row dt{ grid-column:1 / -1; }
}
.status{ font-size:.875rem; color:var(--glow); min-height:1.2em; }
.status[data-err="true"]{ color:#FF8A7A; }


/* ============================================================
   gallery.html — every shot from one build
   ============================================================ */

.galhead{
  padding:8rem var(--pad) 0;
  max-width:var(--max); margin-inline:auto;
  display:flex; flex-direction:column; gap:.85rem;
}
.galhead h1{ font-size:clamp(2.5rem,6vw,4.5rem); }
.galhead .lede{ font-size:1.0625rem; }

/* masonry by way of columns — the shots are portrait, landscape and
   everything between, and nothing here is worth cropping */
.gal{
  max-width:var(--max); margin-inline:auto;
  padding:clamp(2rem,4vw,3.25rem) var(--pad) 0;
  columns:1; column-gap:clamp(.5rem,1vw,.875rem);
}
@media (min-width: 640px){ .gal{ columns:2; } }
@media (min-width: 1040px){ .gal{ columns:3; } }

.gal__item{
  margin:0 0 clamp(.5rem,1vw,.875rem);
  break-inside:avoid;
  overflow:hidden; border-radius:3px; background:var(--sheet);
}
.gal__item img, .gal__item video{ width:100%; height:auto; }
.gal__item a{ display:block; }
.gal__item img{ transition:transform .7s cubic-bezier(.2,.7,.3,1); }
@media (hover: hover) and (pointer: fine){
  .gal__item a:hover img{ transform:scale(1.03); }
}

.galmore{
  max-width:var(--max); margin-inline:auto;
  margin-top:clamp(2.5rem,5vw,4rem);
  padding:2rem var(--pad) 4rem;
  border-top:1px solid var(--line);
  display:flex; flex-wrap:wrap; gap:.7rem 1.75rem; align-items:baseline;
}
.galmore .label{ flex-basis:100%; }
.galmore a{ font-size:.9375rem; color:var(--mute); text-decoration:none; transition:color .18s ease; }
.galmore a:hover{ color:var(--white); }

@media (prefers-reduced-motion: reduce){
  .gal__item img{ transition:none; }
  .gal__item a:hover img{ transform:none; }
  .pane__link span{ transition:none; }
}

/* ============================================================
   Sent — the headliner coming on. Stars fade up behind a tick
   that draws itself, then the copy rises through.
   ============================================================ */
.done{
  position:relative; display:grid; justify-items:center; text-align:center;
  gap:1rem; padding:4.5rem 0 5.5rem; overflow:hidden;
}
.done[hidden]{ display:none; }

.done__sky{ position:absolute; inset:0; pointer-events:none; }
.done__sky i{
  position:absolute; width:var(--s,2px); height:var(--s,2px); border-radius:50%;
  background:var(--white); opacity:0;
  box-shadow:0 0 6px 1px rgba(244,246,249,.55);
  animation:starlight 3.2s ease-in-out var(--d,0s) infinite;
}
@keyframes starlight{
  0%   { opacity:0;   transform:scale(.4); }
  18%  { opacity:1;   transform:scale(1); }
  55%  { opacity:.28; transform:scale(.85); }
  100% { opacity:0;   transform:scale(.4); }
}

.done__mark{
  position:relative; color:var(--glow);
  animation:markIn .55s cubic-bezier(.2,1.5,.4,1) both;
}
.done__mark::after{           /* the glow washing outward once */
  content:""; position:absolute; inset:-14px; border-radius:50%;
  background:radial-gradient(circle, var(--glow-lo) 0%, transparent 70%);
  animation:markWash 1.5s ease-out .25s both;
}
@keyframes markIn{ from{ opacity:0; transform:scale(.4); } to{ opacity:1; transform:scale(1); } }
@keyframes markWash{ from{ opacity:0; transform:scale(.5); } 40%{ opacity:1; } to{ opacity:0; transform:scale(2.1); } }

.done__ring{ stroke-dasharray:145; stroke-dashoffset:145; animation:draw .7s ease-out .1s forwards; }
.done__tick{ stroke-dasharray:34;  stroke-dashoffset:34;  animation:draw .35s ease-out .55s forwards; }
@keyframes draw{ to{ stroke-dashoffset:0; } }

.done h2{
  font-family:var(--serif); font-weight:400; font-size:clamp(2rem,6vw,2.9rem);
  margin:.6rem 0 0; letter-spacing:-.01em;
  animation:riseIn .6s ease-out .5s both;
}
.done h2:focus{ outline:none; }   /* focused only so screen readers announce it */
.done__note{
  max-width:34rem; margin:0; color:var(--mute); font-size:1.0625rem; line-height:1.6;
  animation:riseIn .6s ease-out .62s both;
}
.done__cta{
  display:flex; flex-wrap:wrap; gap:.75rem; justify-content:center; margin-top:.75rem;
  animation:riseIn .6s ease-out .78s both;
}
@keyframes riseIn{ from{ opacity:0; transform:translateY(14px); } to{ opacity:1; transform:none; } }

/* the send button, while it's actually sending */
.btn.is-sending{ pointer-events:none; opacity:.75; }
.btn.is-sending::after{
  content:""; display:inline-block; vertical-align:-2px; margin-left:.6rem;
  width:13px; height:13px; border-radius:50%;
  border:2px solid currentColor; border-top-color:transparent;
  animation:spin .7s linear infinite;
}
@keyframes spin{ to{ transform:rotate(360deg); } }

@media (prefers-reduced-motion: reduce){
  .done__sky{ display:none; }
  .done__mark, .done__mark::after, .done h2, .done__note, .done__cta,
  .done__ring, .done__tick, .btn.is-sending::after{ animation:none; }
  .done__ring, .done__tick{ stroke-dashoffset:0; }
}
