/* ═══════════════════════════════════════════════════
   HEXXED CARDS
   ═══════════════════════════════════════════════════ */

:root{
  --ink:        #050506;
  --ink-2:      #0a0a0c;
  --bone:       #e9e5e0;
  --dim:        #9c968f;
  --faint:      #5f5a55;
  --ghost:      #35312e;
  --blood:      #a80d18;
  --blood-lit:  #d81424;
  --hair:       rgba(233,229,224,.10);
  --hair-2:     rgba(233,229,224,.05);

  --serif: "Bodoni Moda", Didot, "Times New Roman", serif;
  --mono:  "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;

  --ease: cubic-bezier(.19,.66,.24,1);
  --gut:  clamp(1.25rem, 4.5vw, 5rem);
  --max:  1280px;
}

*,*::before,*::after{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; scroll-behavior:smooth; }

body{
  margin:0;
  background:var(--ink);
  color:var(--bone);
  font-family:var(--serif);
  font-weight:400;
  font-size:clamp(1rem,.3vw + .93rem,1.125rem);
  line-height:1.62;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;
}
::selection{ background:var(--blood); color:#fff; }
svg{ display:block; }

/* ── atmosphere ───────────────────────────────── */
.grain{
  position:fixed; inset:-50%; z-index:80; pointer-events:none;
  opacity:.055; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 5s steps(5,end) infinite;
}
@keyframes grain{
  0%,100%{transform:translate(0,0)} 20%{transform:translate(-2%,1%)}
  40%{transform:translate(1%,-2%)}  60%{transform:translate(-1%,2%)}
  80%{transform:translate(2%,1%)}
}
.vig{
  position:fixed; inset:0; z-index:1; pointer-events:none;
  /* --t is ritual tension, 0 → 1: the dark closes in as you hold */
  background:
    radial-gradient(38vw 30vw at 50% -6%, rgba(168,13,24,calc(.10 + var(--t,0) * .30)), transparent 70%),
    radial-gradient(130vw 90vw at 50% 50%, transparent calc(45% - var(--t,0) * 30%), rgba(0,0,0,calc(.55 + var(--t,0) * .40)) 100%);
}
/* scoped to the section on purpose — a transform on <body> would turn it into the
   containing block for every position:fixed layer and wreck the vignette + canvas */
.is-shaking{ animation:shake .16s linear infinite; }
@keyframes shake{
  0%,100%{transform:translate(0,0)} 25%{transform:translate(-2px,1.5px)}
  50%{transform:translate(1.5px,-2px)} 75%{transform:translate(2px,.5px)}
}

/* the flood */
.flood{
  position:fixed; left:0; right:0; top:0; height:100vh; z-index:78;
  pointer-events:none; opacity:0;
  background:linear-gradient(180deg,#3d0409 0%,#8c0a15 55%,#c5111f 100%);
  transform:translateY(-102%);
}
.flood::after{                              /* dripping underside */
  content:""; position:absolute; left:0; right:0; top:100%; height:64px;
  background:
    radial-gradient(closest-side at 6%   0%, #c5111f 96%, transparent 97%) 0 0/13% 100% repeat-x,
    radial-gradient(closest-side at 32%  0%, #c5111f 96%, transparent 97%) 0 0/21% 62% repeat-x,
    radial-gradient(closest-side at 71%  0%, #c5111f 96%, transparent 97%) 0 0/9%  84% repeat-x;
}
.flood.is-on{ animation:flood 1.55s cubic-bezier(.5,0,.35,1) forwards; }
@keyframes flood{
  0%   { transform:translateY(-102%); opacity:1 }
  34%  { transform:translateY(0);     opacity:1 }
  52%  { transform:translateY(0);     opacity:1 }
  100% { transform:translateY(102%);  opacity:1 }
}

/* ── custom cursor ────────────────────────────── */
.cur{ position:fixed; inset:0; z-index:90; pointer-events:none; display:none; }
.cur__ring,.cur__dot{
  position:absolute; top:0; left:0; border-radius:50%;
  transform:translate(-50%,-50%);
  will-change:transform;
}
.cur__ring{
  width:30px; height:30px;
  border:1px solid rgba(216,20,36,.55);
  transition:width .35s var(--ease), height .35s var(--ease),
             border-color .35s var(--ease), border-radius .35s var(--ease), opacity .35s var(--ease);
}
.cur__dot{ width:3px; height:3px; background:var(--bone); }
body.cur-on{ cursor:none; }
body.cur-on .cur{ display:block; }
body.cur-hot .cur__ring{ width:62px; height:62px; border-color:rgba(216,20,36,.9); }
body.cur-txt .cur__ring{ width:2px; height:26px; border-radius:1px; background:var(--blood-lit); border-color:transparent; }

/* ── intro veil ───────────────────────────────── */
.veil{
  position:fixed; inset:0; z-index:95; background:var(--ink);
  display:flex; align-items:center; justify-content:center;
  transition:opacity .9s var(--ease), visibility .9s;
}
.veil__line{ width:0; height:1px; background:var(--blood); transition:width .8s var(--ease); }
.veil.is-draw .veil__line{ width:min(340px,44vw); }
.veil.is-gone{ opacity:0; visibility:hidden; }

/* ── scroll progress ──────────────────────────── */
.prog{ position:fixed; top:0; left:0; width:1px; height:100vh; z-index:70; background:var(--hair-2); }
.prog span{
  display:block; width:100%; height:var(--p,0%);
  background:linear-gradient(180deg,var(--blood),var(--blood-lit));
}

/* ── rails ────────────────────────────────────── */
.rail{
  position:fixed; top:50%; z-index:70;
  font-family:var(--mono); font-size:.5625rem; font-weight:400;
  letter-spacing:.42em; text-transform:uppercase; color:var(--ghost);
  pointer-events:none;
}
.rail--l{ left:calc(var(--gut) * .42); transform:translateY(-50%) rotate(180deg); writing-mode:vertical-rl; }
.rail--r{ right:calc(var(--gut) * .42); transform:translateY(-50%); writing-mode:vertical-rl; }
@media (max-width:1180px){ .rail{ display:none; } }

/* ── primitives ───────────────────────────────── */
.wrap{ width:100%; max-width:var(--max); margin-inline:auto; padding-inline:var(--gut); }
.wrap--tight{ max-width:calc(760px + 2*var(--gut)); text-align:center; }
.sr{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
.hide{ display:none; }

.tag{
  margin:0; font-family:var(--mono); font-size:.625rem; font-weight:400;
  letter-spacing:.4em; text-transform:uppercase; color:var(--faint);
}
.tag i{ font-style:normal; color:var(--blood); padding:0 .35em; }

.disp{
  margin:1.5rem 0 0;
  font-weight:500;
  font-size:clamp(2.25rem,5.6vw,4.5rem);
  line-height:1.02; letter-spacing:-.022em;
  font-variation-settings:"opsz" 88;
  text-wrap:balance;
}
.disp--c{ text-align:center; }

.say{
  margin:2rem 0 0; max-width:56ch;
  font-size:clamp(1.0625rem,.5vw + .95rem,1.25rem);
  color:var(--dim);
}
.say--wide{ max-width:64ch; }
.say--c{ margin-inline:auto; text-align:center; max-width:46ch; }

.sect{
  position:relative; z-index:2;
  padding-block:clamp(6rem,16vh,12rem);
  border-top:1px solid var(--hair-2);
}
.sect::before{
  content:""; position:absolute; top:-1px; left:0;
  width:clamp(40px,6vw,96px); height:1px; background:var(--blood);
}
.sect__head{ max-width:880px; }

/* ═══════════ I · THE STAGE ═══════════ */

.stage{
  position:relative; z-index:2;
  min-height:100svh;
  display:flex; flex-direction:column; justify-content:space-between;
  padding:clamp(1.5rem,4vh,2.75rem) var(--gut) clamp(1.75rem,4vh,2.75rem);
  overflow:hidden;
}

.stage__hud{
  display:flex; justify-content:space-between; gap:1rem;
  font-family:var(--mono); font-size:.5625rem; font-weight:400;
  letter-spacing:.36em; text-transform:uppercase; color:var(--ghost);
}
.stage__hud-c{ color:var(--faint); }
@media (max-width:600px){ .stage__hud-c{ display:none; } }

.stage__core{ text-align:center; margin-block:auto; }

/* the wordmark */
.mark{
  margin:0;
  display:flex; justify-content:center; align-items:flex-end;
  gap:clamp(.02em,.4vw,.05em);
  font-weight:500;
  font-size:clamp(3.5rem,18vw,15rem);
  line-height:.82;
  font-variation-settings:"opsz" 96;
  text-transform:uppercase;
}
.glyph{
  display:block;
  color:#f4f1ee;
  transform:translate3d(0,0,0);
  will-change:transform;
  transition:color .5s var(--ease), text-shadow .5s var(--ease);
  text-shadow:0 0 80px rgba(168,13,24,.13);
}
body.cur-on .glyph{ cursor:none; }
.glyph.is-hot{
  color:#fffdfb;
  text-shadow:
    .045em 0 0 rgba(216,20,36,.85),
   -.022em 0 0 rgba(80,170,255,.10),
    0 0 60px rgba(216,20,36,.4);
}

.mark__sub{
  display:flex; align-items:center; justify-content:center;
  gap:clamp(.75rem,2vw,1.5rem);
  margin:clamp(1rem,2.4vh,1.75rem) 0 0;
}
.mark__sub span{
  font-family:var(--mono); font-size:clamp(.5625rem,.8vw,.75rem); font-weight:400;
  letter-spacing:.72em; text-indent:.72em; text-transform:uppercase; color:var(--dim);
  white-space:nowrap;
}
.mark__sub i{ flex:0 1 clamp(30px,9vw,120px); height:1px; background:var(--hair); }

.stage__line{
  margin:clamp(2.25rem,6vh,3.75rem) auto 0;
  max-width:20ch;
  font-size:clamp(1.125rem,1.9vw + .55rem,2rem);
  line-height:1.28; letter-spacing:-.012em;
  color:#ddd8d3;
}
.stage__line em{ font-style:italic; color:var(--dim); }

/* blood canvas — fixed over the whole document */
.bleed{ position:fixed; inset:0; z-index:65; pointer-events:none; }

.stage__foot{
  position:relative; z-index:4;
  display:flex; align-items:flex-end; justify-content:space-between; gap:1.5rem;
}

.jump{
  position:relative;
  font-family:var(--mono); font-size:.625rem; font-weight:400;
  letter-spacing:.32em; text-transform:uppercase; text-decoration:none;
  color:var(--dim);
  padding-bottom:.5rem;
  transition:color .45s var(--ease);
}
.jump i{
  position:absolute; left:0; bottom:0; width:100%; height:1px;
  background:var(--hair); overflow:hidden;
}
.jump i::after{
  content:""; position:absolute; inset:0; background:var(--blood-lit);
  transform:translateX(-101%); transition:transform .6s var(--ease);
}
.jump:hover{ color:var(--bone); }
.jump:hover i::after{ transform:none; }

.cue{
  display:flex; flex-direction:column; align-items:center; gap:.75rem;
  text-decoration:none; color:var(--ghost);
  font-family:var(--mono); font-size:.5625rem; letter-spacing:.36em;
  text-transform:uppercase; text-indent:.36em;
  transition:color .45s var(--ease);
}
.cue i{
  display:block; width:1px; height:clamp(30px,5vh,48px);
  background:var(--hair-2); position:relative; overflow:hidden;
}
.cue i::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg,transparent,var(--blood-lit),transparent);
  animation:trace 2.8s var(--ease) infinite;
}
@keyframes trace{ 0%{transform:translateY(-100%)} 55%,100%{transform:translateY(100%)} }
.cue:hover{ color:var(--dim); }

/* ═══════════ II · THE REGISTER ═══════════ */

.reg{
  list-style:none; margin:clamp(3.5rem,9vh,6rem) 0 0; padding:0;
  border-top:1px solid var(--hair-2);
}
.reg__row{
  position:relative;
  display:grid;
  grid-template-columns:clamp(48px,6vw,86px) minmax(0,1fr) auto;
  align-items:center; gap:clamp(1rem,3vw,2.5rem);
  padding:clamp(.875rem,1.6vw,1.375rem) 0;
  border-bottom:1px solid var(--hair-2);
  outline:none;
  transition:background .5s var(--ease), padding-left .5s var(--ease);
}
.reg__row::after{
  content:""; position:absolute; left:0; top:0; bottom:0; width:1px;
  background:var(--blood); transform:scaleY(0); transform-origin:center;
  transition:transform .5s var(--ease);
}
.reg__row:hover,.reg__row:focus-visible{
  background:linear-gradient(90deg,rgba(168,13,24,.05),transparent 60%);
  padding-left:clamp(.75rem,1.5vw,1.5rem);
}
.reg__row:hover::after,.reg__row:focus-visible::after{ transform:scaleY(1); }

.reg__n{
  font-family:var(--mono); font-size:.6875rem; font-weight:400;
  letter-spacing:.2em; color:var(--faint);
  transition:color .5s var(--ease);
}
.reg__row:hover .reg__n,.reg__row:focus-visible .reg__n{ color:var(--blood-lit); }

/* shrink-to-content so each redaction bar is as long as the text it hides */
.reg__b{
  position:relative; justify-self:start;
  width:max-content; max-width:100%;
  display:flex; flex-wrap:wrap; align-items:baseline; gap:.35em 1em;
}
.reg__name{
  font-size:clamp(1.25rem,2.4vw,2rem); font-weight:400;
  letter-spacing:-.012em; line-height:1.1;
  font-variation-settings:"opsz" 60;
}
.reg__ep{
  font-style:italic; font-size:clamp(.8125rem,1vw,1rem);
  color:var(--dim);
}
/* the redaction */
.reg__mask{
  position:absolute; left:-.35em; right:-.35em; top:-.15em; bottom:-.15em;
  background:#0d0d0f;
  box-shadow:0 0 0 1px rgba(0,0,0,.9);
  transform-origin:left center;
  transition:transform .62s var(--ease), opacity .4s var(--ease);
}
.reg__mask::before{
  content:""; position:absolute; inset:0;
  background:
    repeating-linear-gradient(92deg, rgba(255,255,255,.012) 0 2px, transparent 2px 5px),
    linear-gradient(180deg,#0f0f12,#070709);
}
.reg__row:hover .reg__mask,.reg__row:focus-visible .reg__mask{ transform:scaleX(0); }

.reg__st{
  position:relative;
  font-family:var(--mono); font-size:.5625rem; font-weight:400;
  letter-spacing:.3em; text-transform:uppercase; color:var(--ghost);
  transition:color .4s var(--ease);
}
/* the chip flips word on reveal; real text stays for screen readers */
.reg__st::after{
  content:attr(data-b);
  position:absolute; inset:0; text-align:right; white-space:nowrap;
  color:var(--blood-lit); opacity:0;
  transition:opacity .4s var(--ease);
}
.reg__row:hover .reg__st,.reg__row:focus-visible .reg__st{ color:transparent; }
.reg__row:hover .reg__st::after,.reg__row:focus-visible .reg__st::after{ opacity:1; }
@media (max-width:600px){ .reg__st{ display:none; } }

/* XIII refuses */
.reg__row.is-locked:hover .reg__mask,
.reg__row.is-locked:focus-visible .reg__mask{ transform:none; }
.reg__row.is-locked .reg__mask::after{
  content:attr(data-locked);
  position:absolute; inset:0;
  display:flex; align-items:center; justify-content:center;
  font-family:var(--mono); font-size:.5625rem; letter-spacing:.42em;
  text-transform:uppercase; color:var(--blood);
  opacity:0; transition:opacity .4s var(--ease);
}
.reg__row.is-locked:hover .reg__mask::after,
.reg__row.is-locked:focus-visible .reg__mask::after{ opacity:.95; }
.reg__row.is-jolt{ animation:jolt .34s steps(3,end); }
@keyframes jolt{
  0%,100%{transform:translateX(0)} 25%{transform:translateX(-3px)}
  50%{transform:translateX(2px)}   75%{transform:translateX(-1px)}
}

.reg__note{
  margin:clamp(1.75rem,4vh,2.5rem) 0 0;
  font-family:var(--mono); font-size:.6875rem; line-height:1.7;
  letter-spacing:.06em; color:var(--faint); max-width:52ch;
}

/* ═══════════ INTERLUDE · THE RITE ═══════════ */

.sect--rite{ text-align:center; }
.sect--rite .tag{ text-align:center; }

.rite{ margin-top:clamp(3rem,8vh,4.5rem); display:flex; flex-direction:column; align-items:center; }

.rite__btn{
  position:relative;
  appearance:none; background:none; border:0; padding:0;
  display:flex; flex-direction:column; align-items:center; gap:1.5rem;
  cursor:pointer; color:var(--faint);
  -webkit-tap-highlight-color:transparent;
  touch-action:none;
  user-select:none; -webkit-user-select:none;
  transition:color .5s var(--ease);
}
body.cur-on .rite__btn{ cursor:none; }
.rite__btn:focus-visible{ outline:1px solid var(--blood-lit); outline-offset:14px; }

.rite__art{
  width:clamp(148px,30vw,220px); height:auto;
  overflow:visible;
  transition:filter .6s var(--ease);
}
.rite__art .r-o{ stroke:rgba(233,229,224,.14); transition:stroke .5s var(--ease); }
.rite__art .r-t{ stroke:rgba(233,229,224,.09); transition:stroke .5s var(--ease); }
.rite__art .r-h{ stroke:var(--blood); transition:stroke .5s var(--ease); }
.rite__art .r-p{
  stroke:var(--blood-lit);
  stroke-dasharray:1;
  stroke-dashoffset:calc(1 - var(--g,0));
  transform:rotate(-90deg);
  transform-origin:110px 110px;
  filter:drop-shadow(0 0 6px rgba(216,20,36,.85));
}
/* the sigil turns while you hold it */
.rite__art .r-spin{ transform-origin:110px 110px; }
.rite__btn.is-holding .r-spin{ animation:sigil 9s linear infinite; }
.rite.is-broken .r-spin{ animation:sigil 34s linear infinite; }
@keyframes sigil{ to{ transform:rotate(360deg) } }

.rite__btn:hover .r-o{ stroke:rgba(233,229,224,.24); }
.rite__btn:hover .r-h{ stroke:var(--blood-lit); }

.rite__btn.is-holding .rite__art{ filter:drop-shadow(0 0 26px rgba(216,20,36,.5)); }
.rite__btn.is-holding .r-h{ stroke:#ff2436; }

.rite__t{
  position:relative; display:block; height:1.1em;
  font-family:var(--mono); font-size:.625rem; font-weight:500;
  letter-spacing:.34em; text-transform:uppercase; text-indent:.34em;
  white-space:nowrap;
}
.rite__t-a,.rite__t-b{
  position:absolute; left:50%; top:0; transform:translateX(-50%);
  transition:opacity .35s var(--ease);
}
.rite__t-b{ opacity:0; color:var(--blood-lit); }
.rite__btn.is-holding .rite__t-a{ opacity:0; }
.rite__btn.is-holding .rite__t-b{ opacity:1; }

.rite__msg{
  margin:1.75rem 0 0; min-height:1.3rem;
  font-family:var(--mono); font-size:.625rem;
  letter-spacing:.24em; text-transform:uppercase; color:var(--ghost);
  transition:color .5s var(--ease), opacity .5s var(--ease);
}
.rite__msg.hot{ color:var(--blood-lit); }

/* after the seal breaks */
.rite.is-broken .rite__btn{ pointer-events:none; }
.rite.is-broken .r-o{ stroke:rgba(216,20,36,.30); }
.rite.is-broken .r-h{ stroke:#ff2436; }
.rite.is-broken .rite__art{ filter:drop-shadow(0 0 30px rgba(216,20,36,.45)); }
.rite.is-broken .rite__t{ opacity:0; }

.rite__out{
  margin:0; overflow:hidden;
  max-height:0; opacity:0;
  transition:max-height .9s var(--ease), opacity .9s var(--ease), margin .9s var(--ease);
}
.rite.is-broken .rite__out{ max-height:14rem; opacity:1; margin-top:2.25rem; }
.rite__out .n{
  display:block;
  font-size:clamp(2.25rem,7vw,4rem); font-weight:500; line-height:1;
  letter-spacing:-.02em; color:#fff;
  text-shadow:0 0 44px rgba(216,20,36,.6);
}
.rite__out .e{
  display:block; margin-top:.85rem;
  font-style:italic; font-size:clamp(.9375rem,1.3vw,1.1875rem); color:var(--dim);
}
.rite__out .w{
  display:block; margin-top:1.75rem;
  font-family:var(--mono); font-size:.5625rem; letter-spacing:.34em;
  text-transform:uppercase; color:var(--blood);
}

/* the register row, once she is loose */
.reg__row.is-free .reg__mask{ transform:scaleX(0); }
.reg__row.is-free .reg__name{ color:#fff; text-shadow:0 0 30px rgba(216,20,36,.5); }
.reg__row.is-free .reg__n{ color:var(--blood-lit); }
.reg__row.is-free{ background:linear-gradient(90deg,rgba(168,13,24,.10),transparent 62%); }
.reg__row.is-free::after{ transform:scaleY(1); }
.reg__row.is-free .reg__st{ color:var(--blood-lit); }
.reg__row.is-free .reg__st::after{ opacity:0; }

/* ═══════════ III · THE TERMS ═══════════ */

.terms{
  display:grid; grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);
  gap:clamp(2.5rem,6vw,6rem); align-items:center;
  margin-top:clamp(3.5rem,9vh,6rem);
}

.terms__num{ position:relative; }
.fill{
  position:relative; display:block;
  font-size:clamp(7rem,17vw,15rem); font-weight:500; line-height:.8;
  letter-spacing:-.05em;
  font-variation-settings:"opsz" 96;
  color:rgba(233,229,224,.07);
}
.fill::after{
  content:attr(data-n);
  position:absolute; inset:0;
  color:var(--blood-lit);
  clip-path:inset(calc(100% - var(--f,0%)) 0 0 0);
  text-shadow:0 0 50px rgba(216,20,36,.35);
}

.terms__list{ margin:0; }
.terms__list > div{
  display:flex; align-items:baseline; gap:1rem;
  padding:clamp(.75rem,1.4vw,1.125rem) 0;
  border-bottom:1px solid var(--hair-2);
}
.terms__list > div:first-child{ border-top:1px solid var(--hair-2); }
.terms__list dt{
  flex:0 0 auto;
  font-family:var(--mono); font-size:.625rem; font-weight:400;
  letter-spacing:.3em; text-transform:uppercase; color:var(--faint);
}
.terms__list dd{
  flex:1 1 auto; margin:0; text-align:right;
  font-size:clamp(.9375rem,1vw,1.125rem);
}
.terms__list dd.hot{ color:var(--blood-lit); }

/* ═══════════ IV · THE LEDGER ═══════════ */

.sect--ledger{ padding-block:clamp(6.5rem,18vh,13rem); }
.sect--ledger .tag{ text-align:center; }

.sign{ margin:clamp(3rem,8vh,4.5rem) auto 0; max-width:540px; }

.sign__row{
  position:relative;
  display:flex; align-items:center; gap:1rem;
  border-bottom:1px solid var(--hair);
  transition:border-color .5s var(--ease);
}
.sign__row:focus-within{ border-color:rgba(216,20,36,.75); }

.sign__in{
  flex:1 1 auto; min-width:0;
  appearance:none; background:none; border:0; border-radius:0;
  color:var(--bone);
  font-family:var(--serif); font-size:clamp(1.0625rem,1.4vw,1.375rem);
  letter-spacing:.005em;
  padding:1rem .25rem 1.0625rem;
}
.sign__in::placeholder{ color:var(--ghost); }
.sign__in:focus{ outline:none; }

.seal{
  flex:0 0 auto; position:relative;
  display:flex; align-items:center; gap:.75rem;
  appearance:none; background:none; border:0; padding:.5rem 0 .5rem .5rem;
  cursor:pointer; color:var(--dim);
  transition:color .45s var(--ease);
}
body.cur-on .seal{ cursor:none; }
.seal svg{ width:42px; height:42px; transition:transform .6s var(--ease); }
.seal__t{
  font-family:var(--mono); font-size:.625rem; font-weight:500;
  letter-spacing:.3em; text-transform:uppercase;
}
.seal:hover{ color:var(--blood-lit); }
.seal:hover svg{ transform:rotate(45deg); }
.seal:focus-visible{ outline:1px solid var(--blood-lit); outline-offset:4px; }
.seal[disabled]{ cursor:progress; opacity:.5; }
@media (max-width:520px){ .seal__t{ display:none; } }

.sign__note{
  margin:1.25rem 0 0;
  font-family:var(--mono); font-size:.625rem; line-height:1.7;
  letter-spacing:.08em; color:var(--ghost); text-align:center;
}
.sign__msg{
  margin:1rem 0 0; min-height:1.25rem; text-align:center;
  font-family:var(--mono); font-size:.625rem; letter-spacing:.24em;
  text-transform:uppercase; color:var(--blood-lit);
  opacity:0; transform:translateY(4px);
  transition:opacity .5s var(--ease), transform .5s var(--ease);
}
.sign__msg.on{ opacity:1; transform:none; }
.sign__msg.ok{ color:var(--bone); }

/* stamped */
.sign.is-sent .sign__row{ opacity:.2; pointer-events:none; }
.sign.is-sent .seal svg{ transform:rotate(45deg) scale(1.1); color:var(--blood); }

/* ═══════════ COLOPHON ═══════════ */

.colo{ position:relative; z-index:2; border-top:1px solid var(--hair-2); padding-block:clamp(2rem,5vh,3rem); }
.colo__in{ display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:1rem 2rem; }
.colo__b{ font-size:.9375rem; letter-spacing:.18em; text-transform:uppercase; color:var(--dim); }
.colo__ig{
  display:inline-flex; align-items:center; gap:.625rem;
  font-family:var(--mono); font-size:.625rem; letter-spacing:.24em; text-transform:uppercase;
  color:var(--dim); text-decoration:none; transition:color .45s var(--ease);
}
.colo__ig svg{ transition:color .45s var(--ease), transform .45s var(--ease); }
.colo__ig:hover{ color:var(--bone); }
.colo__ig:hover svg{ color:var(--blood-lit); transform:rotate(-8deg) scale(1.1); }
.colo__m{
  font-family:var(--mono); font-size:.5625rem; letter-spacing:.28em;
  text-transform:uppercase; color:var(--ghost);
}
.colo__m i{ font-style:normal; color:var(--blood); padding:0 .3em; }

/* ═══════════ REVEAL ═══════════ */
.reveal{ opacity:0; transform:translateY(20px); transition:opacity 1.1s var(--ease), transform 1.2s var(--ease); }
.reveal.in{ opacity:1; transform:none; }

/* ═══════════ RESPONSIVE ═══════════ */

@media (max-width:900px){
  .terms{ grid-template-columns:1fr; gap:clamp(2rem,6vw,3rem); }
  .fill{ font-size:clamp(6rem,26vw,11rem); }
  .terms__list dd{ text-align:left; }
  .terms__list > div{ flex-direction:column; align-items:flex-start; gap:.375rem; }
}

@media (max-width:600px){
  .reg__row{ grid-template-columns:clamp(34px,9vw,48px) minmax(0,1fr); gap:1rem; }
  .reg__b{ flex-direction:column; gap:.2em; }
  .stage__foot{ flex-direction:column-reverse; align-items:center; gap:1.75rem; }
  .colo__in{ flex-direction:column; align-items:flex-start; gap:1.125rem; }
}

@media (prefers-reduced-motion:reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{
    animation-duration:.001ms !important; animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
  }
  .reveal{ opacity:1; transform:none; }
  .veil{ display:none; }
  .grain{ animation:none; }
}
