/* ==========================================================================
   FOUR-COLOR VÖID — components.css
   Cards, stamps, bursts, bubbles, skyline, buttons, forms, panels, toast.
   Extracted from the root mockups; skyline + boom generalized site-wide.
   ========================================================================== */

/* ============ CITY SKYLINE STRIPS (every blue section, behind content) ============ */
.city-strip{position:absolute;left:0;right:0;bottom:0;height:190px;pointer-events:none;z-index:1;overflow:hidden}
.city-strip svg.sky{position:absolute;bottom:0;left:-2%;width:104%}
.city-strip svg.sky.far{height:82%;opacity:.4}
.city-strip svg.sky.near{height:100%;opacity:.9}
.offers .city-strip{height:140px}
.band .city-strip{height:150px}
.null-aside .city-strip,
.confirm-aside .city-strip{height:80px}
.auth-sec .city-strip{height:140px}
@media(max-width:900px){
  .city-strip{height:120px}
  .offers .city-strip{height:100px}
  .band .city-strip{height:100px}
}

/* stars in the hero sky */
.stars{position:absolute;inset:0;pointer-events:none;z-index:1}

/* ============ ACTION BURSTS (one per text-heavy section, corners only) ============ */
.boom{
  position:absolute;pointer-events:none;z-index:4;
  width:clamp(96px,13vw,170px);height:auto;
  opacity:0;transform:rotate(var(--r,0deg)) scale(.4);
}
.boom.in{
  opacity:1;transform:rotate(var(--r,0deg)) scale(1);
  transition:opacity .35s ease,transform .5s cubic-bezier(.2,1.7,.4,1);
}
.boom text{font-family:var(--font-display)}
.boom-props{top:-52px;right:2px;--r:7deg}
.boom-offers{top:-34px;right:0;--r:-8deg}
.boom-coupon{top:-56px;right:-22px;--r:9deg}
.boom-band{top:-30px;right:6px;--r:8deg}
.boom-spec{top:-52px;right:-8px;--r:7deg}
.boom-tally{top:-54px;right:-14px;--r:9deg}
.boom-form{top:-48px;right:-10px;--r:-7deg}
.boom-auth{top:-34px;right:0;--r:-8deg}
@media(max-width:640px){
  .boom-coupon{right:-6px}
  .boom-props{right:-4px}
  .boom-spec{right:-2px}
  .boom-tally{right:-4px}
  .boom-form{right:-2px}
  /* keep the corner clear: captions must not run under their section's burst */
  .boom + .sec-caption{max-width:calc(100% - 104px)}
}

/* ============ BUTTONS ============ */
.btn{
  display:inline-block;cursor:pointer;text-decoration:none;text-align:center;
  font-family:var(--font-display);font-size:23px;letter-spacing:.05em;line-height:1;
  color:var(--ink);background:var(--yellow);
  border:4px solid var(--ink);box-shadow:5px 5px 0 var(--ink);
  padding:14px 24px 11px;
  transition:transform .12s ease,box-shadow .12s ease;
}
.btn:hover{transform:translate(-2px,-2px);box-shadow:8px 8px 0 var(--ink)}
.btn:active{transform:translate(3px,3px);box-shadow:2px 2px 0 var(--ink)}
.btn.red{background:var(--red);color:#fff}
.btn.block{display:block;width:100%;margin-top:18px}
.cta-row{display:flex;gap:18px;flex-wrap:wrap}

/* ============ PRODUCT CARDS ============ */
.card{
  position:relative;background:var(--newsprint-lift);
  border:var(--border-panel);box-shadow:var(--shadow-hard);
  padding:18px 18px 20px;display:flex;flex-direction:column;
  transition:transform .14s ease,box-shadow .14s ease;
}
.card:hover{transform:translate(-3px,-3px);box-shadow:10px 10px 0 var(--ink)}
.card.hide{display:none}
.card.pop{animation:pop .35s cubic-bezier(.2,1.5,.4,1)}
@keyframes pop{0%{opacity:0;transform:scale(.92)}100%{opacity:1;transform:scale(1)}}
.card .dept{
  font:700 11px/1.35 var(--font-caption);letter-spacing:.12em;text-transform:uppercase;
  background:var(--yellow);border:3px solid var(--ink);display:inline-block;
  align-self:flex-start;padding:5px 8px 4px;margin-bottom:12px;
  max-width:calc(100% - 70px); /* stay clear of the price burst */
}
.card .art{background:var(--newsprint);border:4px solid var(--ink);margin-bottom:14px;position:relative;overflow:hidden;display:block}
.card .art .dots-lite{position:absolute;inset:0}
.card .art svg{position:relative;width:100%;height:auto}
.card h3{font-family:var(--font-display);font-weight:400;font-size:27px;line-height:1;letter-spacing:.02em;margin-bottom:8px}
.card h3 a{text-decoration:none}
.card h3 a:hover{color:var(--red)}
.card .blurb{font:700 13.5px/1.45 var(--font-caption);text-transform:uppercase;flex:1}
.card .price-burst{position:absolute;top:-24px;right:-18px;width:104px;height:104px;z-index:2}
.card .price-burst text{font-family:var(--font-display);fill:#fff}
.card .p{font-family:var(--font-display);font-size:22px;color:var(--red)}
.card .btn{margin-top:16px;font-size:20px;padding:12px 16px 9px}

/* ============ THE VÖID CODE AUTHORITY STAMP (slam-on) ============ */
/* stamped in the specimen corner, clear of both the copy and the product art */
.card .art .stamp{position:absolute;bottom:6px;right:6px;width:56px;height:56px;opacity:0;z-index:2}
.card .stamp.slam,
.p-art .stamp.slam,
.conf-stamp.slam{animation:slam .55s cubic-bezier(.2,1.5,.35,1) forwards}
@keyframes slam{
  0%{opacity:0;transform:scale(2.6) rotate(-24deg)}
  55%{opacity:1;transform:scale(.92) rotate(-7deg)}
  75%{transform:scale(1.06) rotate(-9deg)}
  100%{opacity:1;transform:scale(1) rotate(-8deg)}
}

/* ============ HOMEPAGE: cover furniture ============ */
.issue-box{
  position:absolute;top:14px;left:14px;z-index:3;
  background:var(--newsprint);border:4px solid var(--ink);
  font:700 12px/1.3 var(--font-caption);text-transform:uppercase;letter-spacing:.08em;
  padding:7px 10px;text-align:center;box-shadow:4px 4px 0 var(--ink);
}
.cover-stamp{position:absolute;top:12px;right:14px;z-index:3;width:104px;height:104px}
.caption-box{
  display:inline-block;background:var(--yellow);border:4px solid var(--ink);
  font:700 15px/1.35 var(--font-caption);text-transform:uppercase;letter-spacing:.04em;
  padding:9px 14px;box-shadow:5px 5px 0 var(--ink);transform:rotate(-1.2deg);
}
.masthead{width:100%;max-width:600px;margin:18px 0 6px}
.masthead-eyebrow{
  font:700 14px/1 var(--font-caption);letter-spacing:.24em;text-transform:uppercase;
  color:var(--newsprint);margin-top:22px;
}
.tagline-banner{
  display:inline-block;background:var(--red);color:#fff;
  border:5px solid var(--ink);box-shadow:6px 6px 0 var(--ink);
  font-family:var(--font-display);font-size:clamp(24px,3.4vw,40px);
  letter-spacing:.03em;line-height:1.05;
  padding:12px 20px 8px;margin:22px 0 26px;transform:rotate(-.6deg);
}
.hero-art{position:relative;justify-self:center;width:min(100%,560px)}
.cn-float{animation:cnfloat 6s ease-in-out infinite;transform-origin:52% 45%}
@keyframes cnfloat{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-12px) rotate(-.8deg)}}

/* ============ SPEECH BUBBLES ============ */
.bubble{
  position:relative;display:inline-block;background:#FFFDF2;
  border:4px solid var(--ink);border-radius:22px;
  font:700 17px/1.4 var(--font-caption);text-transform:uppercase;
  padding:14px 20px;margin:20px 0 8px;max-width:430px;
  box-shadow:5px 5px 0 var(--ink);
}
.bubble::before{
  content:"";position:absolute;right:-26px;top:46%;
  border:14px solid transparent;border-left:26px solid var(--ink);
}
.bubble::after{
  content:"";position:absolute;right:-15px;top:46%;margin-top:2.5px;
  border:11px solid transparent;border-left:21px solid #FFFDF2;
}

/* ============ VALUE PROPS + ORIGIN PANELS ============ */
.prop{
  background:var(--yellow);border:var(--border-panel);box-shadow:var(--shadow-hard);
  padding:22px 20px;
}
.prop:nth-child(2){transform:rotate(.6deg)}
.prop:nth-child(3){transform:rotate(-.5deg)}
.prop svg{width:56px;height:56px;margin-bottom:12px}
.prop h3{font-family:var(--font-display);font-weight:400;font-size:27px;line-height:1.02;letter-spacing:.02em;margin-bottom:8px}
.prop p{font:700 14px/1.45 var(--font-caption);text-transform:uppercase}

.panel{
  background:var(--yellow);border:var(--border-panel);box-shadow:var(--shadow-hard);
  position:relative;padding:16px;min-height:300px;display:flex;flex-direction:column;
}
.panel .p-cap{
  background:var(--newsprint);border:3px solid var(--ink);
  font:700 13px/1.4 var(--font-caption);text-transform:uppercase;
  padding:8px 10px;margin-bottom:12px;
}
.panel .p-art{flex:1;display:grid;place-items:center}
.panel:nth-child(2){transform:rotate(.5deg)}
.panel:nth-child(3){transform:rotate(-.6deg)}
.panel:nth-child(5){transform:rotate(.5deg)}
.panel:nth-child(6){transform:rotate(-.4deg)}

/* ============ ORIGIN: full comic-page collage (about.html) ============ */
.origin-eyebrow{
  font:700 14px/1 var(--font-caption);letter-spacing:.22em;text-transform:uppercase;
  margin:4px 0 0;color:var(--ink);
}
.origin-title{margin:2px 0 0;line-height:0}
.origin-masthead{width:100%;max-width:560px;height:auto;margin:2px 0 0}

.comic-page{
  position:relative;margin-top:22px;
  background:var(--newsprint-lift);
  border:6px solid var(--ink);
  box-shadow:10px 10px 0 var(--ink);
  padding:26px;
}
.comic-boom{top:-40px;right:-16px;width:150px;--r:8deg}

/* mobile-first: single-column stack in story order */
.comic-page .strip{grid-template-columns:1fr;gap:18px;margin-top:0}
.comic-page .panel{margin:0}

/* the collage tilt must survive the scroll reveal (generic .reveal.in zeroes transform) */
.comic-page .panel.reveal{opacity:0;transform:translateY(26px) rotate(var(--tilt,0deg)) scale(.97)}
.comic-page .panel.reveal.in{opacity:1;transform:rotate(var(--tilt,0deg));
  transition:opacity .5s ease,transform .55s cubic-bezier(.2,1.35,.4,1)}

/* asymmetric collage: big central hero, satellites around it, wide closer */
@media(min-width:820px){
  .comic-page .strip{
    grid-template-columns:1fr 1.34fr 1fr;
    grid-template-areas:"p1 p3 p2" "p4 p3 p5" "p6 p6 p6";
    gap:16px;
  }
  .comic-page .panel:nth-child(1){grid-area:p1;--tilt:-1.2deg}
  .comic-page .panel:nth-child(2){grid-area:p2;--tilt:1.4deg}
  .comic-page .panel:nth-child(3){grid-area:p3;z-index:3;margin:-6px -22px;--tilt:0deg}
  .comic-page .panel:nth-child(4){grid-area:p4;--tilt:1deg}
  .comic-page .panel:nth-child(5){grid-area:p5;--tilt:-1deg}
  .comic-page .panel:nth-child(6){grid-area:p6;--tilt:.4deg}
  /* wide closer: letterbox its art so the banner stays a sensible height */
  .comic-page .panel:nth-child(6) .p-art>svg{max-width:560px;margin-inline:auto}
}

@media(max-width:640px){
  .comic-page{padding:16px}
  .comic-boom{top:-28px;right:-4px;width:108px}
}

@media(prefers-reduced-motion:reduce){
  .comic-page .panel.reveal{opacity:1;transform:rotate(var(--tilt,0deg))}
}

/* ============ MAIL-ORDER COUPON (bulletin) ============ */
.coupon{
  position:relative;max-width:760px;margin:0 auto;
  background:var(--newsprint-lift);
  border:4px dashed var(--ink);
  padding:36px 34px 30px;box-shadow:var(--shadow-hard);
}
.coupon .scissors{position:absolute;top:-19px;left:36px;font-size:28px;background:var(--newsprint);padding:0 8px;transform:rotate(-8deg)}
.coupon h2{font-family:var(--font-display);font-weight:400;font-size:clamp(32px,4.6vw,50px);line-height:1;margin-bottom:8px}
.coupon .lead{font:700 14px/1.5 var(--font-caption);text-transform:uppercase;margin-bottom:20px}
.coupon form{display:grid;grid-template-columns:1fr 1fr auto;gap:14px}
.coupon input{
  font:600 15px/1 var(--font-body);padding:14px 14px;
  border:4px solid var(--ink);background:#FFFDF2;min-width:0;
}
.coupon .fine{font:400 12px/1.5 var(--font-body);margin-top:16px;color:#4b4550}

/* ============ SHOP: filter buttons ============ */
.filter-btn{
  cursor:pointer;font-family:var(--font-display);font-size:19px;letter-spacing:.05em;line-height:1;
  color:var(--ink);background:var(--newsprint-lift);border:4px solid var(--ink);
  box-shadow:4px 4px 0 var(--ink);padding:11px 16px 8px;
  transition:transform .12s ease,box-shadow .12s ease;
}
.filter-btn:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--ink)}
.filter-btn[aria-pressed="true"]{background:var(--red);color:#fff}
.showing{font:700 13px/1 var(--font-caption);text-transform:uppercase;letter-spacing:.08em;margin-left:auto}

/* ============ PRODUCT PAGE ============ */
.crumb{
  display:inline-block;background:var(--yellow);border:3px solid var(--ink);
  font:700 12px/1 var(--font-caption);letter-spacing:.08em;text-transform:uppercase;
  padding:7px 10px 6px;box-shadow:3px 3px 0 var(--ink);text-decoration:none;margin:0 10px 8px 0;
}
.crumb.here{background:var(--newsprint-lift)}
.p-art{position:relative;background:var(--newsprint-lift);border:6px solid var(--ink);box-shadow:8px 8px 0 var(--ink);overflow:hidden}
.p-art .dots-lite{position:absolute;inset:0}
.p-art > svg{position:relative;width:100%;height:auto}
.p-art .stamp{position:absolute;bottom:16px;right:16px;width:118px;height:118px;opacity:0}
.p-info h1{font-family:var(--font-display);font-weight:400;font-size:clamp(44px,5.6vw,72px);line-height:.95;letter-spacing:.02em;margin:6px 0 14px}
.p-price{width:150px;height:150px;margin:4px 0 10px}
.p-price text{font-family:var(--font-display);fill:#fff}
.p-copy{font:700 16px/1.55 var(--font-caption);text-transform:uppercase;letter-spacing:.02em;margin-bottom:22px;max-width:520px}
.p-copy strong{color:var(--red)}
.buy-row{display:flex;gap:16px;align-items:stretch;flex-wrap:wrap;margin-bottom:12px}
.buy-row .btn{font-size:24px;padding:15px 26px 12px}
.ship-line{font:700 13px/1.4 var(--font-caption);text-transform:uppercase;letter-spacing:.06em}

/* quantity steppers: large (product page) + small (cart lines) */
.qty{display:flex;border:4px solid var(--ink);background:var(--newsprint-lift);box-shadow:5px 5px 0 var(--ink)}
.qty button{width:52px;border:none;background:var(--yellow);font-family:var(--font-display);font-size:26px;cursor:pointer;border-right:4px solid var(--ink)}
.qty button:last-child{border-right:none;border-left:4px solid var(--ink)}
.qty button:hover{background:#ffd94a}
.qty .num{width:64px;display:grid;place-items:center;font-family:var(--font-display);font-size:26px}
.line .qty{border-width:3px;background:var(--newsprint);box-shadow:3px 3px 0 var(--ink)}
.line .qty button{width:38px;height:38px;font-size:20px;border-right-width:3px}
.line .qty button:last-child{border-left-width:3px}
.line .qty .num{width:44px;font-size:20px}

/* spec table */
.spec-panel{
  position:relative;max-width:1160px;margin:0 auto;background:var(--newsprint-lift);
  border:var(--border-panel);box-shadow:var(--shadow-hard);padding:26px 26px 30px;
}
table.specs{width:100%;border-collapse:collapse;font:700 14px/1.4 var(--font-caption);text-transform:uppercase}
table.specs th,table.specs td{border:3px solid var(--ink);padding:12px 14px;text-align:left}
table.specs th{background:var(--blue);color:var(--newsprint);width:34%;letter-spacing:.06em}
table.specs tr:nth-child(even) td{background:var(--newsprint)}

/* captain null aside */
.null-aside{
  position:relative;max-width:1160px;margin:0 auto;background:var(--blue);
  border:var(--border-panel);box-shadow:var(--shadow-hard);
  display:grid;grid-template-columns:220px 1fr;gap:26px;align-items:center;
  padding:26px;overflow:hidden;
}
.null-aside::before{content:"";position:absolute;inset:0;background-image:radial-gradient(rgba(26,22,27,.3) 1.4px,transparent 1.6px);background-size:22px 22px;pointer-events:none}
.null-aside .fig{position:relative;z-index:2;background:var(--red);border:5px solid var(--ink);overflow:hidden;height:220px}
.null-aside .fig svg{width:100%;height:100%}
.null-aside .say{position:relative;z-index:2}
.null-aside .bubble{
  margin:0;max-width:none;border-radius:22px;
  font:700 17px/1.5 var(--font-caption);padding:18px 22px;
}
.null-aside .bubble::before{right:auto;left:-27px;top:44%;border:14px solid transparent;border-right:26px solid var(--ink);border-left:none}
.null-aside .bubble::after{right:auto;left:-16px;top:44%;margin-top:2.5px;border:11px solid transparent;border-right:21px solid #FFFDF2;border-left:none}
.null-aside .who{font:700 12px/1 var(--font-caption);letter-spacing:.14em;text-transform:uppercase;color:var(--newsprint);margin-top:12px;position:relative}

/* ============ CART / FUNNEL ============ */
.line{
  display:grid;grid-template-columns:96px 1fr auto;gap:18px;align-items:center;
  background:var(--newsprint-lift);border:var(--border-panel);box-shadow:var(--shadow-hard);padding:16px;
}
.line .thumb{background:var(--newsprint);border:4px solid var(--ink);position:relative;overflow:hidden}
.line .thumb .dots-lite{position:absolute;inset:0}
.line .thumb svg{position:relative;width:100%;height:auto}
.line h3{font-family:var(--font-display);font-weight:400;font-size:24px;line-height:1;letter-spacing:.02em}
.line .dept{font:700 11px/1 var(--font-caption);letter-spacing:.1em;text-transform:uppercase;margin-top:5px}
.line .unit{font:700 13px/1 var(--font-caption);text-transform:uppercase;margin-top:8px}
.line .right{display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.line .lt{font-family:var(--font-display);font-size:26px;color:var(--red)}
.remove{
  border:none;background:none;cursor:pointer;font:700 12px/1 var(--font-caption);
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink);text-decoration:underline;
}
.remove:hover{color:var(--red)}

.tally{position:relative;background:var(--newsprint-lift);border:var(--border-panel);box-shadow:var(--shadow-hard);padding:22px}
.cart-grid .tally{position:sticky;top:96px}
.tally h2{font-family:var(--font-display);font-weight:400;font-size:32px;letter-spacing:.02em;margin-bottom:14px}
.tally .row{display:flex;justify-content:space-between;font:700 14px/1.4 var(--font-caption);text-transform:uppercase;padding:9px 0;border-bottom:3px solid var(--ink)}
.tally .row.free span:last-child{color:var(--red)}
.tally .row.total{border-bottom:none;padding-top:14px;font-family:var(--font-display);font-size:28px;text-transform:none;letter-spacing:.02em}
.tally .row.total span:last-child{color:var(--red)}
.tally .ship-note{font:700 11.5px/1.5 var(--font-caption);text-transform:uppercase;letter-spacing:.04em;margin-top:14px}
.summary{display:flex;flex-direction:column;gap:16px}
.summary .line{grid-template-columns:64px 1fr auto;padding:12px}
.summary .line h3{font-size:19px}
.summary .sum-line{box-shadow:none;border-width:3px;margin-bottom:12px}
.back-link{font:700 12px/1 var(--font-caption);letter-spacing:.08em;text-transform:uppercase}

.empty{border:var(--border-panel);background:var(--newsprint-lift);box-shadow:var(--shadow-hard);padding:56px 26px;text-align:center;margin-top:22px}
.empty svg{width:120px;height:120px;margin:0 auto 18px}
.empty h2,.empty h1{font-family:var(--font-display);font-weight:400;font-size:clamp(34px,5vw,52px);line-height:1;margin-bottom:8px}
.empty p{font:700 14px/1.5 var(--font-caption);text-transform:uppercase;margin-bottom:22px}

/* checkout order form */
.demo-callout{
  max-width:1080px;margin:24px auto 0;background:var(--ink);color:var(--newsprint);
  font:600 13px/1.6 var(--font-body);padding:14px 18px;border:4px solid var(--ink);
}
.order-form{
  position:relative;background:var(--newsprint-lift);border:4px dashed var(--ink);
  box-shadow:var(--shadow-hard);padding:32px 28px 28px;
}
.order-form .scissors{position:absolute;top:-19px;left:32px;font-size:26px;background:var(--newsprint);padding:0 8px;transform:rotate(-8deg)}
.order-form h2{font-family:var(--font-display);font-weight:400;font-size:clamp(30px,4vw,44px);line-height:1;margin-bottom:6px}
.order-form .lead{font:700 13px/1.5 var(--font-caption);text-transform:uppercase;margin-bottom:22px}
.fields{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.fields .full{grid-column:1/-1}
.field label{display:block;font:700 12px/1 var(--font-caption);letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px}
.field input{width:100%;font:600 15px/1 var(--font-body);padding:13px 13px;border:4px solid var(--ink);background:#FFFDF2}
.pay{margin-top:24px}
.pay h3{font:700 13px/1 var(--font-caption);letter-spacing:.08em;text-transform:uppercase;margin-bottom:12px}
.pay label{
  display:flex;gap:12px;align-items:flex-start;border:4px solid var(--ink);background:#FFFDF2;
  padding:14px;margin-bottom:12px;cursor:pointer;font:700 13.5px/1.45 var(--font-caption);text-transform:uppercase;
}
.pay label:has(input:checked){background:var(--yellow)}
.pay input{margin-top:2px;accent-color:var(--red);width:18px;height:18px}
.order-form .btn.block{margin-top:24px}

/* confirmation */
.confirm{position:relative;text-align:center;padding:40px 0 0}
.confirm .caption-top{
  display:inline-block;background:var(--yellow);border:4px solid var(--ink);
  font:700 14px/1 var(--font-caption);letter-spacing:.1em;text-transform:uppercase;
  padding:9px 14px 8px;box-shadow:4px 4px 0 var(--ink);transform:rotate(-1.2deg);
}
.confirm h1{font-family:var(--font-display);font-weight:400;font-size:clamp(56px,9vw,110px);line-height:.95;margin:22px 0 10px}
.order-no{
  display:inline-block;background:var(--newsprint-lift);border:var(--border-panel);box-shadow:var(--shadow-hard);
  font-family:var(--font-slab);font-size:clamp(20px,3vw,30px);padding:14px 26px;margin:12px 0 22px;
}
.confirm .body{font:700 16px/1.6 var(--font-caption);text-transform:uppercase;max-width:560px;margin:0 auto 26px}
.confirm-aside{
  position:relative;max-width:680px;margin:0 auto 26px;background:var(--blue);
  border:var(--border-panel);box-shadow:var(--shadow-hard);
  display:grid;grid-template-columns:170px 1fr;gap:20px;align-items:center;
  padding:20px;text-align:left;overflow:hidden;
}
.confirm-aside::before{content:"";position:absolute;inset:0;background-image:radial-gradient(rgba(26,22,27,.3) 1.4px,transparent 1.6px);background-size:22px 22px;pointer-events:none}
.confirm-aside .fig{position:relative;z-index:2;background:var(--red);border:5px solid var(--ink);overflow:hidden;height:170px}
.confirm-aside .fig svg{width:100%;height:100%}
.confirm-aside .bubble{
  position:relative;z-index:2;margin:0;max-width:none;border-radius:20px;
  font:700 15px/1.5 var(--font-caption);padding:16px 18px;box-shadow:4px 4px 0 var(--ink);
}
.confirm-aside .bubble::before,.confirm-aside .bubble::after{display:none}
.conf-stamp{width:150px;height:150px;margin:0 auto 26px;opacity:0}
.confirm .plain-note{font:400 13px/1.6 var(--font-body);color:#4b4550;max-width:520px;margin:0 auto 28px}

/* ============ 404 ============ */
.lost{max-width:720px;margin:40px auto 0}

/* ============ TOAST ============ */
.toast{
  position:fixed;left:50%;bottom:34px;transform:translateX(-50%) translateY(30px) scale(.8);
  background:var(--yellow);border:5px solid var(--ink);box-shadow:6px 6px 0 var(--ink);
  font-family:var(--font-display);font-size:30px;letter-spacing:.04em;
  padding:14px 30px 10px;opacity:0;pointer-events:none;z-index:99;
  transition:opacity .18s ease,transform .28s cubic-bezier(.2,1.5,.4,1);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}

/* ============ SCROLL REVEALS ============ */
.reveal{opacity:0;transform:translateY(28px) scale(.97)}
.reveal.in{opacity:1;transform:none;transition:opacity .5s ease,transform .55s cubic-bezier(.2,1.35,.4,1)}

/* ============ CONTACT: the bullpen credits ============ */
.bullpen{max-width:760px;margin:0 auto}
.credits{
  position:relative;background:var(--newsprint-lift);
  border:var(--border-panel);box-shadow:var(--shadow-hard);
  padding:12px 28px 22px;margin-top:38px;
}
.credit-row{
  display:flex;justify-content:space-between;align-items:baseline;gap:20px;
  padding:18px 0 12px;border-bottom:3px solid var(--ink);
}
.credit-row:last-of-type{border-bottom:0}
.credit-row:first-of-type{padding-right:92px} /* clear the corner stamp */
.credit-row .role{font:700 12px/1.4 var(--font-caption);letter-spacing:.14em;text-transform:uppercase}
.credit-row .who{
  font-family:var(--font-display);font-weight:400;
  font-size:clamp(20px,3.4vw,30px);letter-spacing:.02em;
  text-align:right;word-break:break-word;
}
.credit-row .who a{text-decoration:none;color:var(--red)}
.credit-row .who a:hover{color:var(--ink)}
.credits .stamp{position:absolute;top:-34px;right:-28px;width:104px;height:104px;opacity:0;z-index:3}
.bullpen-note{
  font:700 13px/1.7 var(--font-caption);text-transform:uppercase;letter-spacing:.04em;
  text-align:center;margin:28px auto 0;max-width:520px;
}
.bullpen-cta{text-align:center;margin-top:22px}
@media(max-width:640px){
  .credit-row{flex-direction:column;gap:4px;align-items:flex-start;padding:14px 0 10px}
  .credit-row .who{text-align:left}
  .credits .stamp{top:-30px;right:-8px;width:84px;height:84px}
}

/* ============ PUNCH CLICKS (every click socks the site) ============ */
.punch{
  position:absolute;z-index:9999;pointer-events:none;
  width:112px;height:112px;margin:-56px 0 0 -56px;
  animation:punch-in .5s cubic-bezier(.2,1.5,.35,1) forwards;
}
.punch text{font-family:var(--font-display);fill:#fff}
@keyframes punch-in{
  0%{opacity:0;transform:scale(2.1) rotate(var(--pr,-8deg))}
  18%{opacity:1;transform:scale(.92) rotate(var(--pr,-8deg))}
  38%{transform:scale(1.08) rotate(var(--pr,-8deg))}
  55%{transform:scale(1) rotate(var(--pr,-8deg))}
  72%{opacity:1}
  100%{opacity:0;transform:scale(1) rotate(var(--pr,-8deg))}
}
/* the page chrome takes the hit; the fixed toast is left alone so a
   transformed ancestor never becomes its containing block */
body.hit .demo-bar,
body.hit header,
body.hit main,
body.hit footer{animation:site-hit .2s ease-out}
@keyframes site-hit{
  0%{transform:translate(0,0)}
  25%{transform:translate(2px,5px) rotate(.25deg)}
  55%{transform:translate(-2px,-2px)}
  100%{transform:translate(0,0)}
}
