/* ============================================================
   keepsake — landing
   Tactile paper-keepsake aesthetic. Vanilla CSS, no build.
   ============================================================ */

:root {
  /* paper canvas */
  --paper:      #fbf6ec;
  --paper-2:    #f5ebd9;
  --paper-3:    #efe2cb;
  --paper-edge: #e7d8bd;

  /* ink */
  --ink:      #2b2118;
  --ink-soft: #6c5f4e;
  --ink-faint:#9a8a73;

  /* celebratory accents */
  --coral:      #ec6a4e;
  --coral-deep: #cf4426;
  --sage:  #7d9a6f;
  --sky:   #6b95c2;
  --gold:  #e6ab33;
  --plum:  #875072;

  --card: #fffdf8;

  --r-sm: 8px;
  --r:    16px;
  --r-lg: 26px;

  /* layered, warm shadows */
  --sh-1: 0 2px 6px rgba(74,52,28,.10);
  --sh-2: 0 10px 24px -10px rgba(74,52,28,.30);
  --sh-3: 0 26px 50px -22px rgba(74,52,28,.42);

  --font-display: "Fraunces", Georgia, serif;
  --font-body: "Hanken Grotesk", system-ui, sans-serif;
  --font-hand: "Caveat", cursive;

  --maxw: 1180px;
}

/* Non-Latin scripts: the brand fonts (Fraunces/Hanken/Caveat) are Latin-only.
   When such a locale is active (i18n.js sets <html lang>), swap the font vars to
   a Noto family — loaded on demand by the engine. The generic serif/sans-serif
   fallback renders the device's own CJK/Indic font instantly while Noto loads
   (display:swap). ru/Cyrillic needs no override — the Georgia/system-ui fallback
   already covers it. */
:lang(zh) { --font-display: "Noto Serif SC", serif; --font-body: "Noto Sans SC", sans-serif; --font-hand: "Noto Sans SC", sans-serif; }
:lang(ja) { --font-display: "Noto Serif JP", serif; --font-body: "Noto Sans JP", sans-serif; --font-hand: "Noto Sans JP", sans-serif; }
:lang(ko) { --font-display: "Noto Serif KR", serif; --font-body: "Noto Sans KR", sans-serif; --font-hand: "Noto Sans KR", sans-serif; }
:lang(hi) { --font-display: "Noto Serif Devanagari", serif; --font-body: "Noto Sans Devanagari", sans-serif; --font-hand: "Noto Sans Devanagari", sans-serif; }

* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; overflow-x: clip; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  margin: 0;
  font-family: var(--font-body);
  color: var(--ink);
  background:
    radial-gradient(120% 80% at 50% -10%, var(--paper) 40%, var(--paper-2) 100%) fixed;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
  width: 100%;
}

h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 600; line-height: 1.04; margin: 0; letter-spacing: -0.01em; }
p { margin: 0; }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; }
em { font-style: normal; }

/* paper grain overlay */
.paper-grain {
  position: fixed; inset: 0; z-index: 1; pointer-events: none;
  opacity: .5; mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
}

/* ambient floating confetti */
.ambient { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.confetti { position: absolute; width: 12px; height: 12px; border-radius: 2px; opacity: .55; animation: drift 18s linear infinite; }
.c1 { left: 8%;  top: -20px; background: var(--coral); --t: 0s;   transform: rotate(20deg); }
.c2 { left: 26%; top: -20px; background: var(--gold);  --t: -4s;  border-radius: 50%; }
.c3 { left: 48%; top: -20px; background: var(--sage);  --t: -9s; }
.c4 { left: 67%; top: -20px; background: var(--sky);   --t: -2s;  border-radius: 50%; }
.c5 { left: 82%; top: -20px; background: var(--plum);  --t: -12s; transform: rotate(45deg); }
.c6 { left: 93%; top: -20px; background: var(--coral); --t: -6s; }
@keyframes drift {
  0%   { transform: translateY(-10vh) rotate(0deg); opacity: 0; }
  10%  { opacity: .55; }
  100% { transform: translateY(110vh) rotate(420deg); opacity: 0; }
}
.confetti { animation-delay: var(--t); }
@media (prefers-reduced-motion: reduce) { .confetti { display: none; } }

/* shared ink-stroke svg (logo) */
.ink-stroke { fill: none; stroke: var(--coral); stroke-width: 3; stroke-linecap: round; }
.ink-dot { fill: var(--gold); }

/* ───────────────────────── layout helpers ───────────────────────── */
main, .nav, .foot { position: relative; z-index: 2; }
.sec-head { max-width: 720px; margin: 0 auto clamp(28px, 5vw, 52px); }
.sec-head--center { text-align: center; }
.kicker {
  display: inline-block; font-family: var(--font-hand); font-size: 1.45rem;
  color: var(--coral-deep); transform: rotate(-2deg); margin-bottom: 6px;
}
.sec-head h2 { font-size: clamp(1.9rem, 4.4vw, 3rem); }

/* ───────────────────────── buttons ───────────────────────── */
.btn {
  --bg: var(--coral); --edge: var(--coral-deep); --fg: #fff;
  display: inline-flex; align-items: center; gap: 9px;
  font-family: var(--font-body); font-weight: 700; font-size: 1.02rem;
  color: var(--fg); background: var(--bg);
  padding: 14px 22px; border: none; border-radius: 999px; cursor: pointer;
  box-shadow: 0 5px 0 var(--edge), var(--sh-2);
  transition: transform .12s cubic-bezier(.3,1.4,.5,1), box-shadow .12s, filter .15s;
}
.btn:hover { filter: saturate(1.08) brightness(1.02); transform: translateY(-1px); box-shadow: 0 6px 0 var(--edge), var(--sh-3); }
.btn:active { transform: translateY(5px); box-shadow: 0 0 0 var(--edge), var(--sh-1); }
.btn--ghost { --bg: var(--card); --edge: var(--paper-edge); --fg: var(--ink); border: 1.5px solid var(--paper-edge); }
.btn--sm { padding: 10px 16px; font-size: .92rem; box-shadow: 0 4px 0 var(--edge), var(--sh-1); }
.btn--lg { padding: 17px 30px; font-size: 1.12rem; }
.btn__arrow { stroke: currentColor; fill: none; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; transition: transform .2s; }
.btn:hover .btn__arrow { transform: translateX(3px); }

/* ───────────────────────── nav ───────────────────────── */
.nav {
  position: sticky; top: 0; z-index: 60;
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px; padding: 14px clamp(16px, 4vw, 40px);
  transition: background .3s, box-shadow .3s, padding .3s;
}
.nav.is-stuck {
  background: color-mix(in srgb, var(--paper) 86%, transparent);
  backdrop-filter: blur(10px) saturate(1.2);
  box-shadow: 0 1px 0 var(--paper-edge), 0 10px 30px -22px rgba(74,52,28,.5);
}
.brand { display: inline-flex; align-items: center; gap: 9px; }
.brand__mark { display: grid; place-items: center; width: 40px; height: 40px; background: var(--card); border-radius: 12px; box-shadow: var(--sh-1); transform: rotate(-6deg); border: 1.5px solid var(--paper-edge); }
.brand__word { font-family: var(--font-display); font-weight: 600; font-size: 1.5rem; letter-spacing: -0.02em; }
.nav__links { display: none; gap: 26px; font-weight: 600; color: var(--ink-soft); }
.nav__links a { position: relative; padding: 4px 0; }
.nav__links a::after { content: ""; position: absolute; left: 0; right: 100%; bottom: -2px; height: 2px; background: var(--coral); border-radius: 2px; transition: right .25s; }
.nav__links a:hover { color: var(--ink); }
.nav__links a:hover::after { right: 0; }
.nav__right { display: flex; align-items: center; gap: 12px; }
.lang { display: none; align-items: center; }
.lang__select {
  font: inherit; font-weight: 700; font-size: .86rem; color: var(--ink-soft);
  background-color: var(--card);
  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='%236f615a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 10px center; background-size: 11px;
  border: 1.5px solid var(--paper-edge); border-radius: 999px;
  padding: 7px 30px 7px 13px; cursor: pointer;
  -webkit-appearance: none; -moz-appearance: none; appearance: none;
  transition: border-color .15s, box-shadow .15s;
}
.lang__select:hover { border-color: var(--coral); }
.lang__select:focus-visible { outline: none; border-color: var(--coral); box-shadow: 0 0 0 3px rgba(236, 106, 78, 0.18); }
.nav__panel .lang__select { font-size: 1rem; padding: 11px 34px 11px 15px; }
.nav .btn--sm { display: none; }

/* burger */
.nav__burger { display: inline-flex; flex-direction: column; gap: 5px; justify-content: center; width: 44px; height: 40px; padding: 0 10px; background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: 12px; cursor: pointer; box-shadow: var(--sh-1); }
.nav__burger span { height: 2.5px; background: var(--ink); border-radius: 2px; transition: transform .25s, opacity .2s; }
.nav__burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(7.5px) rotate(45deg); }
.nav__burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav__burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7.5px) rotate(-45deg); }

/* mobile menu panel */
.nav__panel {
  position: fixed; top: 70px; left: 12px; right: 12px; z-index: 55;
  background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: var(--r);
  box-shadow: var(--sh-3); padding: 18px; display: grid; gap: 6px;
  transform: translateY(-12px) scale(.98); opacity: 0; pointer-events: none;
  transition: transform .25s cubic-bezier(.3,1.3,.5,1), opacity .2s;
}
.nav__panel.is-open { transform: none; opacity: 1; pointer-events: auto; }
.nav__panel a { padding: 12px 10px; border-radius: 10px; font-weight: 700; font-size: 1.1rem; }
.nav__panel a:hover { background: var(--paper-2); }
.nav__panel .btn { justify-content: center; margin-top: 8px; }
.nav__panel .lang { display: flex; justify-content: center; margin-top: 6px; }

/* ───────────────────────── hero ───────────────────────── */
.hero {
  max-width: var(--maxw); margin: 0 auto;
  padding: clamp(24px, 5vw, 56px) clamp(16px, 4vw, 40px) clamp(40px, 6vw, 72px);
  display: grid; gap: clamp(40px, 6vw, 30px);
}
/* lock the text column to its grid track: a grid item defaults to min-width:auto, so a long
   no-wrap rotating word ("baby shower") would otherwise widen this column and shove the
   polaroids. min-width:0 lets the track keep its 1.05fr share regardless of the word. */
.hero__copy { min-width: 0; }

.hero__title { font-size: clamp(2.3rem, 5.8vw, 4.3rem); font-weight: 600; margin: 18px 0 0; max-width: 15ch; line-height: 1.05; }
.rotor { position: relative; display: inline-block; white-space: nowrap; }
/* "your <word>," holds together on its own line; the tail drops below, so swapping the word never reflows anything */
.hero__title > [data-i18n="h1a"], .hero__slot, .hero__title > [data-i18n="h1b"] { display: block; }
.hero__slot { white-space: nowrap; }
.rotor__c { position: relative; z-index: 1; font-style: normal; }
.rotor__mark { position: absolute; left: -3%; bottom: -.14em; width: 106%; height: .5em; z-index: 0; overflow: visible; }
.rotor__mark path { fill: none; stroke: var(--coral); stroke-width: 13; stroke-linecap: round; opacity: .85; stroke-dasharray: 640; stroke-dashoffset: 640; animation: draw 1s ease forwards .35s; }
@keyframes draw { to { stroke-dashoffset: 0; } }
.rotor__word { position: relative; z-index: 1; color: var(--coral-deep); font-style: italic; padding: 0 .06em; display: inline-block; }
.rotor__word.swap { animation: wordSwap .5s cubic-bezier(.3,1.2,.5,1); }
@keyframes wordSwap { 0% { transform: translateY(.35em) rotate(-2deg); opacity: 0; } 100% { transform: none; opacity: 1; } }

.hero__lede { font-size: clamp(1.05rem, 2.2vw, 1.28rem); color: var(--ink-soft); max-width: 46ch; margin-top: 22px; }
.hero__cta { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 30px; }
.hero__offer { margin-top: 14px; color: var(--ink-soft); font-size: .92rem; font-weight: 600; max-width: 44ch; }
.hero__trust { display: flex; align-items: center; gap: 12px; margin-top: 22px; color: var(--ink-soft); font-size: .95rem; }
.hero__trust strong { color: var(--ink); }
.avatars { display: flex; }
.avatars span { width: 34px; height: 34px; border-radius: 50%; border: 2.5px solid var(--paper); margin-left: -10px; background-size: cover; box-shadow: var(--sh-1); }
.avatars span:first-child { margin-left: 0; }
.avatars span { background-image: linear-gradient(135deg, var(--gold), var(--coral)); }
.avatars span[style*="--i:1"] { background-image: linear-gradient(135deg, var(--sky), var(--sage)); }
.avatars span[style*="--i:2"] { background-image: linear-gradient(135deg, var(--plum), var(--coral)); }
.avatars span[style*="--i:3"] { background-image: linear-gradient(135deg, var(--sage), var(--gold)); }

/* photo pile — fluid via container queries. The pile is a sizing container and every piece
   inside is measured in cqw (% of the pile's own width), so the whole cluster scales as ONE
   unit and can't overlap or clip from small phones up to desktop. The base .polaroid/.qrcard/
   .pin rules stay in px for the (non-container) event cards + final-CTA QR. */
.hero__pile { position: relative; container-type: inline-size; width: 100%; max-width: 500px; aspect-ratio: 100 / 104; margin: 8px auto 0; }

/* Curled-corner polaroids — the classic page-curl shadow technique: real box-shadows on
   two skewed boxes, hidden behind an opaque card. The figure's transform makes it a
   stacking context, so a z-index:-1 child can never get behind the FIGURE's own
   background — the white surface therefore lives on a real child (span.face) instead.
   Paint order inside the figure: curl shadows (z:-1) → .face (opaque) → .ph/figcaption/.pin. */
.polaroid {
  position: absolute; background: transparent; padding: 11px 11px 40px;
  border-radius: 3px; transform: rotate(var(--r, -3deg));
  transition: transform .35s cubic-bezier(.3,1.3,.5,1); will-change: transform;
}
.polaroid:hover { transform: rotate(calc(var(--r) * .3)) translateY(-8px) scale(1.04); z-index: 5; }
.polaroid .face {
  position: absolute; inset: 0; background: var(--card); border-radius: inherit;
  /* hairline contact shadow + soft inner vignette (paper bowing); the deep drop shadow is
     hover-only. Both lists are 2 outer + 1 inset so the transition can interpolate. */
  box-shadow: 0 1px 4px rgba(74,52,28,.28), 0 10px 20px -14px rgba(74,52,28,0), inset 0 0 40px rgba(74,52,28,.06);
  transition: box-shadow .35s;
}
.polaroid:hover .face { box-shadow: 0 4px 10px rgba(74,52,28,.16), 0 30px 50px -18px rgba(74,52,28,.45), inset 0 0 40px rgba(74,52,28,.04); }
.polaroid .face::before, .polaroid .face::after {
  content: ""; position: absolute; z-index: -1;
  /* geometry from codepen.io/bsmith/pen/dyEZZE (matthamm box-shadow curl). bottom:10px +
     rotate(6deg) keeps the whole box tucked behind the card — push it any lower and the
     transparent box pokes past the edge, punching a pale hole in its own shadow (outer
     shadows are clipped out of their own border box). */
  bottom: 10px; width: 70%; max-width: 300px; height: 55%; max-height: 100px;
  box-shadow: 0 8px 16px rgba(74,52,28,.38);
  transition: opacity .35s;
}
.polaroid .face::before { left: 10px; transform: skew(-15deg) rotate(-6deg); }
.polaroid .face::after  { right: 10px; transform: skew(15deg) rotate(6deg); }
/* mix the curls like the pen's stacks: most cards lift at both corners (ul.box), these
   curl at the bottom-right only (ul.box4) */
.hero__pile .p-b .face::before, .polaroid.ev:nth-child(even) .face::before { content: none; }
/* card rises on hover → corners leave the board, curl shadows fade */
.polaroid:hover .face::before, .polaroid:hover .face::after { opacity: 0; }
.ph { position: relative; display: block; overflow: hidden; border-radius: 2px; background: linear-gradient(150deg, #f3c39e, #e89a6a 55%, #cf6f4e); }
.polaroid.ev:nth-child(1) .ph { background: linear-gradient(150deg, #f4a98f, #ec6a4e); }
.polaroid.ev:nth-child(2) .ph { background: linear-gradient(150deg, #aecaa1, #7d9a6f); }
.polaroid.ev:nth-child(3) .ph { background: linear-gradient(150deg, #a3c5e8, #6b95c2); }
.polaroid.ev:nth-child(4) .ph { background: linear-gradient(150deg, #f4d188, #e6ab33); }
.polaroid.ev:nth-child(5) .ph { background: linear-gradient(150deg, #cba4c0, #875072); }
.polaroid.ev:nth-child(6) .ph { background: linear-gradient(150deg, #f3ab92, #cf4426); }
.ph img { display: block; width: 100%; height: 100%; object-fit: cover; filter: saturate(.9) contrast(1.03) sepia(.12); }
.ph::after { content: ""; position: absolute; inset: 0; mix-blend-mode: multiply; background: linear-gradient(150deg, color-mix(in srgb, var(--coral) 22%, transparent), color-mix(in srgb, var(--gold) 14%, transparent)); }
/* figcaption must be positioned to paint above the absolutely-positioned .face */
/* font-weight 500 (not the default 400): Caveat is loaded at 500;700 only. iOS Safari
   won't synthesize the missing 400 and falls through to the wide `cursive` fallback
   (Snell Roundhand), overflowing + clipping the caption. Pinning to a loaded weight
   keeps real Caveat on every engine. */
.polaroid figcaption { position: relative; font-family: var(--font-hand); font-weight: 500; font-size: 1.3rem; color: var(--ink); text-align: center; margin-top: 8px; line-height: 1; overflow-wrap: break-word; }
.cap__by { font-size: .85em; opacity: .6; }

/* hero pile instances → cqw (scale with the pile width) */
.hero__pile .polaroid { padding: 2.4cqw 2.4cqw 2.6cqw; border-radius: .6cqw; }
.hero__pile .polaroid:hover { transform: rotate(calc(var(--r) * .3)) translateY(-1.6cqw) scale(1.04); }
.hero__pile .ph { aspect-ratio: 1 / 1.04; border-radius: .4cqw; }
.hero__pile .polaroid figcaption { font-size: 3.1cqw; margin-top: 1.3cqw; line-height: 1.05; white-space: normal; min-height: 2em; }
.hero__pile .polaroid .face::before, .hero__pile .polaroid .face::after { bottom: 2cqw; box-shadow: 0 1.6cqw 3.2cqw rgba(74,52,28,.38); }
/* two columns with a clear cream channel down the middle (home for the "scan it!" note) */
.hero__pile .p-a { width: 39cqw; left: 1cqw; top: 1cqw; }
.hero__pile .p-b { width: 38cqw; right: 1cqw; top: 4cqw; }
.hero__pile .p-c { width: 38cqw; left: 2cqw; top: 50cqw; z-index: 3; }
/* the first-dance photo is taped (not pinned) across the top */
.p-a--taped::before { /* washi tape across the top */
  content: ""; position: absolute; z-index: 6;
  top: -2.6cqw; left: 50%; width: 17cqw; height: 4.6cqw;
  transform: translateX(-50%) rotate(-9deg);
  background: linear-gradient(155deg, rgba(235,216,152,.46), rgba(214,186,120,.62));
  box-shadow: 0 .5cqw 1cqw rgba(74,52,28,.13);
  border-radius: .3cqw;
}

/* push-pins — inline SVG thumbtack instances of the #kc-pushpin symbol (defined once at the
   top of <body>); colour per-pin via --pin on each <svg class="pin">. Geometry is in em so
   one font-size override rescales the whole pin: px base (final-CTA pin), cqw for hero. */
.pin { position: absolute; top: -2em; left: 50%; z-index: 7; --pin: var(--coral);
  font-size: 10px; width: 3.4em; height: 4.46em;
  transform: translateX(-50%) rotate(12deg); transform-origin: 50% 52%; }
.hero__pile .pin { font-size: 2cqw; }

/* QR card — px base (final-CTA), cqw for hero */
.qrcard { position: absolute; background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: 12px; padding: 14px 14px 12px; box-shadow: var(--sh-3); transform: rotate(var(--r, 5deg)); text-align: center; width: 168px; }
.qrcard__top { font-weight: 700; font-size: .82rem; color: var(--ink); margin-bottom: 9px; }
.qrcard__bot { font-family: var(--font-hand); font-size: 1.05rem; color: var(--coral-deep); margin-top: 8px; }
.qrcode { width: 120px; height: 120px; margin: 2px auto 0; display: block; }
.qrcode--mini { width: 64px; height: 64px; }
.hero__pile .qrcard { right: 12cqw; top: 54cqw; z-index: 4; width: 34cqw; padding: 3cqw 3cqw 2.6cqw; border-radius: 2.4cqw; }
.hero__pile .qrcard__top { font-size: 2.9cqw; margin-bottom: 1.8cqw; line-height: 1.15; }
.hero__pile .qrcard__bot { font-size: 3.1cqw; margin-top: 1.6cqw; }
.hero__pile .qrcode { width: 25cqw; height: 25cqw; }

.spark { position: absolute; width: 3cqw; height: 3cqw; z-index: 9; background:
  radial-gradient(circle, var(--gold) 0 .45cqw, transparent .65cqw),
  linear-gradient(var(--gold), var(--gold)) center/.4cqw 100% no-repeat,
  linear-gradient(90deg, var(--gold), var(--gold)) center/100% .4cqw no-repeat;
  opacity: .8; animation: twinkle 3s ease-in-out infinite; }
.hero__pile .s1 { left: 45cqw; top: 7cqw; }
.hero__pile .s2 { left: 2cqw; top: 46cqw; --d: 1s; }
.hero__pile .s3 { right: 3cqw; top: 3cqw; --d: 2s; }
.spark { animation-delay: var(--d, 0s); }
@keyframes twinkle { 0%, 100% { transform: scale(.6) rotate(0); opacity: .3; } 50% { transform: scale(1) rotate(90deg); opacity: .9; } }

/* ───────────────────────── strip ───────────────────────── */
.strip { max-width: var(--maxw); margin: 0 auto; padding: 0 clamp(16px, 4vw, 40px); }
.strip__row {
  list-style: none; margin: 0; padding: 18px clamp(16px, 3vw, 34px); display: flex; flex-wrap: wrap;
  align-items: center; justify-content: center; gap: 10px 26px;
  background: var(--ink); color: var(--paper); border-radius: var(--r-lg);
  box-shadow: var(--sh-2); position: relative;
}
.strip__row::before, .strip__row::after { content: ""; position: absolute; width: 16px; height: 16px; border-radius: 50%; background: var(--paper); top: 50%; transform: translateY(-50%); }
.strip__row::before { left: -8px; } .strip__row::after { right: -8px; }
.strip__row li { display: flex; align-items: baseline; gap: 8px; font-weight: 600; font-size: .98rem; color: color-mix(in srgb, var(--paper) 78%, transparent); }
.strip__row li b { font-family: var(--font-display); font-size: 1.5rem; color: var(--gold); }
.strip__perf { color: var(--ink-faint) !important; }

/* ───────────────────────── how ───────────────────────── */
.how { max-width: var(--maxw); margin: 0 auto; padding: clamp(56px, 9vw, 110px) clamp(16px, 4vw, 40px); text-align: center; }
.steps { display: grid; gap: 22px; align-items: start; }
.step { background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: var(--r-lg); padding: 30px 24px; box-shadow: var(--sh-2); transform: rotate(var(--r, 0)); transition: transform .3s, box-shadow .3s; position: relative; }
.step:hover { transform: rotate(0) translateY(-6px); box-shadow: var(--sh-3); }
.step__no { position: absolute; top: -18px; left: 24px; width: 40px; height: 40px; display: grid; place-items: center; background: var(--coral); color: #fff; font-family: var(--font-display); font-weight: 700; font-size: 1.3rem; border-radius: 50%; box-shadow: 0 4px 0 var(--coral-deep); }
.step__art { height: 130px; display: grid; place-items: center; margin: 8px 0 18px; }
.step h3 { font-size: 1.45rem; margin-bottom: 8px; }
.step p { color: var(--ink-soft); }
.dash { display: none; width: 110px; height: 40px; align-self: center; }
.dash path { fill: none; stroke: var(--ink-faint); stroke-width: 2.4; stroke-linecap: round; stroke-dasharray: 2 9; }
.dash path:last-child { stroke-dasharray: none; }

.qrcard--mini { position: relative; width: 92px; padding: 8px; transform: rotate(var(--r)); }
.miniphone { width: 86px; height: 120px; background: var(--ink); border-radius: 16px; padding: 8px; position: relative; box-shadow: var(--sh-2); }
.miniphone__cam { width: 22px; height: 5px; background: #4a4035; border-radius: 3px; margin: 0 auto 6px; }
.miniphone__shot { height: 64px; border-radius: 6px; background: linear-gradient(135deg, var(--sky), var(--sage)); }
.miniphone__btn { margin-top: 8px; background: var(--coral); color: #fff; font-size: .55rem; font-weight: 700; text-align: center; padding: 5px; border-radius: 6px; }
.step__art--stack { position: relative; }
.ministack { position: absolute; width: 80px; height: 96px; border-radius: 6px; background: var(--card); border: 1.5px solid var(--paper-edge); box-shadow: var(--sh-1); top: 50%; left: 50%; }
.ministack.s-1 { transform: translate(-50%, -50%) rotate(-10deg); background: linear-gradient(135deg, var(--gold), var(--coral)); }
.ministack.s-2 { transform: translate(-58%, -48%) rotate(4deg); background: linear-gradient(135deg, var(--sky), var(--plum)); }
.ministack.s-3 { transform: translate(-44%, -52%) rotate(12deg); background: linear-gradient(135deg, var(--sage), var(--gold)); }

/* ───────────────────────── app showcase ───────────────────────── */
.app { max-width: var(--maxw); margin: 0 auto; padding: clamp(40px, 7vw, 90px) clamp(16px, 4vw, 40px); display: grid; gap: clamp(40px, 6vw, 60px); align-items: center; }
.app__copy h2 { font-size: clamp(1.8rem, 4vw, 2.7rem); margin: 8px 0 16px; max-width: 16ch; }
.app__copy > p { color: var(--ink-soft); font-size: 1.1rem; max-width: 44ch; }
.ticks { list-style: none; padding: 0; margin: 22px 0 28px; display: grid; gap: 13px; }
.ticks li { display: flex; align-items: center; gap: 12px; font-weight: 600; }
.ticks svg { flex: none; width: 26px; height: 26px; padding: 5px; border-radius: 8px; background: color-mix(in srgb, var(--sage) 22%, transparent); fill: none; stroke: var(--sage); stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }

.app__device { position: relative; display: grid; place-items: center; }
.phone { position: relative; width: min(300px, 78vw); aspect-ratio: 300 / 620; background: linear-gradient(150deg, #2c2218, #161009); border-radius: 44px; padding: 11px; box-shadow: var(--sh-3), inset 0 0 0 2px rgba(255,255,255,.06); transform: rotate(-3deg); transition: transform .4s; }
.app__device:hover .phone { transform: rotate(0); }
.phone__island { position: absolute; top: 20px; left: 50%; transform: translateX(-50%); width: 86px; height: 24px; background: #000; border-radius: 14px; z-index: 3; }
.phone__screen { height: 100%; border-radius: 34px; overflow: hidden; background: var(--paper); }
.ui { height: 100%; display: flex; flex-direction: column; }
.ui__bar { padding: 40px 16px 12px; display: flex; align-items: baseline; justify-content: space-between; background: var(--paper); border-bottom: 1px solid var(--paper-edge); }
.ui__title { font-family: var(--font-display); font-weight: 600; font-size: 1.15rem; }
.ui__count { font-size: .78rem; font-weight: 700; color: var(--coral-deep); }
.ui__grid { flex: 1; overflow: hidden; padding: 8px; display: grid; grid-template-columns: 1fr 1fr 1fr; grid-auto-rows: 56px; gap: 6px; }
.t { border-radius: 8px; background: var(--paper-edge) center/cover; position: relative; box-shadow: var(--sh-1); }
.t-tall { grid-row: span 2; }
.t-vid { grid-row: span 2; display: grid; place-items: center; }
.t__play { width: 34px; height: 34px; display: grid; place-items: center; background: rgba(255,255,255,.9); color: var(--ink); border-radius: 50%; font-size: .8rem; padding-left: 3px; box-shadow: var(--sh-1); z-index: 2; }
.t__sound { position: absolute; bottom: 6px; left: 50%; transform: translateX(-50%); white-space: nowrap; font-size: .52rem; font-weight: 700; color: #fff; background: rgba(0,0,0,.45); padding: 3px 7px; border-radius: 999px; z-index: 2; }
.t-vid::after { content: ""; position: absolute; inset: 0; border-radius: 8px; background: linear-gradient(transparent, rgba(0,0,0,.3)); }

.callout { position: absolute; z-index: 4; font-family: var(--font-hand); font-size: 1.15rem; font-weight: 700; color: var(--ink); background: var(--gold); padding: 8px 14px; border-radius: 4px 4px 4px 14px; box-shadow: var(--sh-2); transform: rotate(var(--r)); max-width: 160px; line-height: 1.15; }
.co-1 { background: #ffd66b; top: 8%; left: -6%; }
.co-2 { background: #ffb59e; bottom: 22%; right: -8%; }
.co-3 { background: #bce0b3; top: 42%; right: -10%; }

/* ───────────────────────── features ───────────────────────── */
.feat { max-width: var(--maxw); margin: 0 auto; padding: clamp(56px, 9vw, 110px) clamp(16px, 4vw, 40px); text-align: center; }
.feat__grid { display: grid; gap: 18px; text-align: left; }
.fcard { background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: var(--r-lg); padding: 26px; box-shadow: var(--sh-1); transition: transform .28s cubic-bezier(.3,1.3,.5,1), box-shadow .28s; position: relative; overflow: hidden; }
.fcard::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 5px; background: var(--accent); transform: scaleX(0); transform-origin: left; transition: transform .3s; }
.fcard:hover { transform: translateY(-7px) rotate(-.6deg); box-shadow: var(--sh-3); }
.fcard:hover::before { transform: scaleX(1); }
.fcard__ico { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 15px; background: color-mix(in srgb, var(--accent) 16%, transparent); margin-bottom: 16px; transform: rotate(-5deg); }
.fcard__ico svg { width: 28px; height: 28px; fill: none; stroke: var(--accent); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.fcard h3 { font-size: 1.4rem; margin-bottom: 7px; }
.fcard p { color: var(--ink-soft); }

/* ───────────────────────── events ───────────────────────── */
.events { max-width: var(--maxw); margin: 0 auto; padding: clamp(40px, 7vw, 80px) clamp(16px, 4vw, 40px); text-align: center; }
/* rotating word sits on its OWN line (like the hero) with a reserved fixed height,
   so swapping it can only change this line — it never reflows the photos below */
.events h2 > [data-i18n="evTitleA"] { display: block; }
.evrotor { display: block; color: var(--coral-deep); font-style: italic; white-space: nowrap; min-height: 1.1em; }
/* overflow-x:auto forces overflow-y to auto too, so this scroll row clips the cards'
   drop shadow. Pad it out to fit the shadow, then cancel the extra with negative margins
   so the section's spacing is unchanged. */
.events__row { display: flex; gap: 47px; overflow-x: auto; padding: 40px 36px 100px; margin: -18px 0 -70px; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
  /* fade the left/right scroll edges so a partially-scrolled card softens out instead of
     hard-cutting at the clip line. Horizontal-only gradient → the bottom shadow is untouched. */
  -webkit-mask-image: linear-gradient(to right, transparent, #000 36px, #000 calc(100% - 36px), transparent);
          mask-image: linear-gradient(to right, transparent, #000 36px, #000 calc(100% - 36px), transparent); }
.events__row::-webkit-scrollbar { height: 0; }
/* margin:0 kills the default <figure> UA margin (1em 40px) — that 40px on each side, not
   the flex gap, was the real space between cards. Spacing is now the flex gap alone. */
.polaroid.ev { position: relative; flex: 0 0 auto; width: 168px; margin: 0; scroll-snap-align: center; }
.polaroid.ev .ph { height: 168px; }
.polaroid.ev figcaption { font-size: 1.25rem; }
.events__tr { font-family: var(--font-hand); font-size: 1.35rem; color: var(--ink-soft); margin-top: 6px; }

/* ───────────────────── founder story (reuses the sticky-note system) ───────────────────── */
.love { max-width: var(--maxw); margin: 0 auto; padding: clamp(30px, 5vw, 50px) clamp(16px, 4vw, 40px) clamp(56px, 8vw, 90px); }
.love .sec-head { margin-bottom: clamp(28px, 4vw, 40px); }
.notes { display: grid; gap: 24px; max-width: 600px; margin: 0 auto; }
.story__stats { list-style: none; margin: clamp(28px, 4vw, 40px) auto 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px 16px; text-align: center; }
.story__stats b { font-family: var(--font-display); font-weight: 600; font-size: 1.12rem; color: var(--coral-deep); }
.story__dot { color: var(--ink-faint); }
/* ── sticky-note system ────────────────────────────────────────────────────────
   Anatomy (each blockquote.note):
     .note   BOARD layer — grid placement, rotation, hover, and the GROUND SHADOW
             pseudos. These live outside the paper: .note's background is
             transparent and the opaque .sheet paints over them, so they can only
             ever show on the board (below the edge / through a scooped corner) —
             smearing the face is structurally impossible.
     .pin    unclipped overlay (pokes above the sheet).
     .sheet  PAPER layer — colour (--np), adhesive strip, bowed-face gradients,
             the silhouette (border-radius does every curl scoop), bend insets,
             and overflow:hidden. That overflow is the reference pen's mechanism:
             flap artwork inside is cropped to the silhouette BY CONSTRUCTION, so
             no dial combination or skew can ever poke outside the paper.
   Styles compose on the blockquote:
     colour   n-a (cream) · n-b (blush) · n-c (sage) — just set --np
     curl     curl-sweep-l / curl-sweep-r  whole bottom edge bows up to one side
              curl-ear-l   / curl-ear-r    dog-ear page-flip corner with a flap
              (no curl class)              flat note
   Dial namespaces (fallbacks = shipping values, all panel-tunable):
     --pw-*  ground wedge · --sweep-y/--lip-a/--shade-a  sweep · --dg-*  dog-ear */
.note {
  --np: #fff8d6;
  position: relative; margin: 0;
  transform: rotate(var(--r)); transition: transform .3s;
}
.note:hover { transform: rotate(0) scale(1.02); }
.note.n-b { --np: #ffe6dc; } .note.n-c { --np: #e2efd9; }

.note .sheet {
  position: relative; overflow: hidden; padding: 30px 26px 24px; border-radius: 2px;
  background:
    linear-gradient(to bottom, rgba(74,52,28,.055), rgba(74,52,28,.015) 16%, transparent 21%),
    linear-gradient(165deg, rgba(255,255,255,.28), transparent 38%, rgba(74,52,28,.05) 80%, rgba(74,52,28,.09));
  background-color: var(--np);
  box-shadow: 0 1px 2px rgba(74,52,28,.16), 0 8px 12px -6px rgba(74,52,28,var(--base-sh,.3)), inset 1px 1px 0 rgba(255,255,255,.35);
}

/* swept edge — silhouette bows up to one side, gradient lip catches the light */
.curl-sweep-l .sheet {
  border-bottom-left-radius: 50% var(--sweep-y, 10%);
  background-image:
    linear-gradient(to bottom, rgba(74,52,28,.055), rgba(74,52,28,.015) 16%, transparent 21%),
    linear-gradient(195deg, rgba(255,255,255,.25), transparent 40%, rgba(74,52,28,var(--shade-a,.11)) 82%, rgba(255,255,255,var(--lip-a,.22)) 91%, rgba(255,255,255,var(--lip-a,.22)) 100%);
}
.curl-sweep-r .sheet {
  border-bottom-right-radius: 50% var(--sweep-y, 10%);
  background-image:
    linear-gradient(to bottom, rgba(74,52,28,.055), rgba(74,52,28,.015) 16%, transparent 21%),
    linear-gradient(165deg, rgba(255,255,255,.25), transparent 40%, rgba(74,52,28,var(--shade-a,.11)) 82%, rgba(255,255,255,var(--lip-a,.22)) 91%, rgba(255,255,255,var(--lip-a,.22)) 100%);
}

/* dog-ear page flip — corner scooped from the silhouette (independent dials, safe:
   the sheet crops everything), flap = the back of the sheet folded over the face.
   Its drop shadow clips at the silhouette, i.e. it falls on the paper — correct. */
.curl-ear-l .sheet { border-bottom-left-radius: var(--dg-rx, 66px) var(--dg-ry, 28px); }
.curl-ear-r .sheet { border-bottom-right-radius: var(--dg-rx, 66px) var(--dg-ry, 28px); }
.curl-ear-l .sheet, .curl-ear-r .sheet {
  box-shadow:
    0 1px 2px rgba(74,52,28,.16),
    0 8px 12px -6px rgba(74,52,28,var(--base-sh,.3)),
    inset 0 calc(var(--dg-bend-h, 46px) * -1) var(--dg-bend-h, 46px) rgba(74,52,28,var(--dg-bend-a,.07)),
    inset 1px 1px 0 rgba(255,255,255,.35);
}
.curl-ear-l .sheet::after, .curl-ear-r .sheet::after {
  content: ""; position: absolute; bottom: -6px;
  width: calc(var(--dg-tw, 70px) + 6px); height: calc(var(--dg-th, 30px) + 6px);
}
/* flap lighting: shaded tucked tip → lit crest mid-roll → easing into the crease
   (rolled paper catches light on the cylinder's crest, not at the fold). --dg-tip
   rounds the flap's outer corner — stock-style rolls are rounded everywhere.
   The crease is DEFINED by two shadows riding the flap's curved edge: a white inset
   rim (the lit lip of the rolled paper) + a soft dark line cast onto the face just
   beyond it (--dg-crease). Both follow the border-radius arc automatically. */
.curl-ear-l .sheet::after {
  left: -6px; border-radius: 0 100% 0 var(--dg-tip, 2px);
  box-shadow:
    inset var(--dg-roll, 11px) calc(var(--dg-roll, 11px) * -1) var(--dg-roll, 11px) rgba(74,52,28,var(--dg-tab-roll,.28)),
    inset -2px 2px 3px rgba(255,255,255,.5),
    2px -2px 5px rgba(74,52,28,var(--dg-crease,.18));
  background: linear-gradient(to top right,
    color-mix(in srgb, var(--np) 85%, #4a341c) 0%,
    color-mix(in srgb, var(--np) 72%, #fff) 26%,
    color-mix(in srgb, var(--np) 48%, #fff) 55%,
    color-mix(in srgb, var(--np) 70%, #fff) 82%,
    color-mix(in srgb, var(--np) 88%, #fff) 100%);
  filter: drop-shadow(2px 2px 3px rgba(74,52,28,var(--dg-tab-sh,.27)));
  transform: skewX(var(--dg-skew, 15deg)); transform-origin: 0 100%;
}
.curl-ear-r .sheet::after {
  right: -6px; border-radius: 100% 0 var(--dg-tip, 2px) 0;
  box-shadow:
    inset calc(var(--dg-roll, 11px) * -1) calc(var(--dg-roll, 11px) * -1) var(--dg-roll, 11px) rgba(74,52,28,var(--dg-tab-roll,.28)),
    inset 2px 2px 3px rgba(255,255,255,.5),
    -2px -2px 5px rgba(74,52,28,var(--dg-crease,.18));
  background: linear-gradient(to top left,
    color-mix(in srgb, var(--np) 85%, #4a341c) 0%,
    color-mix(in srgb, var(--np) 72%, #fff) 26%,
    color-mix(in srgb, var(--np) 48%, #fff) 55%,
    color-mix(in srgb, var(--np) 70%, #fff) 82%,
    color-mix(in srgb, var(--np) 88%, #fff) 100%);
  filter: drop-shadow(-2px 2px 3px rgba(74,52,28,var(--dg-tab-sh,.27)));
  transform: skewX(calc(var(--dg-skew, 15deg) * -1)); transform-origin: 100% 100%;
}

/* sharp dog-ear — real post-its crease to a POINT; border-radius can only produce
   tangent-smooth scoops, so the .sharp modifier swaps the corner for a straight
   chamfer via clip-path polygon (same --dg-rx/ry dials; the clip also crops the
   flap). clip-path clips the sheet's own outer box-shadow, so the ambient shadow
   is re-painted from a .note::before rectangle behind the paper. */
.curl-ear-l.sharp .sheet {
  border-bottom-left-radius: 0;
  clip-path: polygon(0 0, 100% 0, 100% 100%, var(--dg-rx, 66px) 100%, 0 calc(100% - var(--dg-ry, 28px)));
}
.curl-ear-r.sharp .sheet {
  border-bottom-right-radius: 0;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--dg-ry, 28px)), calc(100% - var(--dg-rx, 66px)) 100%, 0 100%);
}
.note.sharp::before {
  content: ""; position: absolute; z-index: -2; inset: 0; border-radius: 2px;
  box-shadow: 0 1px 2px rgba(74,52,28,.16), 0 8px 12px -6px rgba(74,52,28,var(--base-sh,.3));
}
/* sharp mode flap: a folded (not rolled) dog-ear is a FLAT triangle with a straight
   crease — the corner-to-corner gradient keyword puts its 50% line exactly on the
   box diagonal at any aspect ratio, so the crease always runs tip to tip. The rolled
   inset shading is dropped (flat paper), and brightness peaks just under the crease. */
.curl-ear-l.sharp .sheet::after, .curl-ear-r.sharp .sheet::after {
  border-radius: 0; box-shadow: none;
}
.curl-ear-l.sharp .sheet::after {
  background: linear-gradient(to top right,
    color-mix(in srgb, var(--np) 82%, #4a341c) 0%,
    color-mix(in srgb, var(--np) 88%, #fff) 18%,
    color-mix(in srgb, var(--np) 62%, #fff) 44%,
    color-mix(in srgb, var(--np) 50%, #fff) 49.7%,
    transparent 50.3%);
}
.curl-ear-r.sharp .sheet::after {
  background: linear-gradient(to top left,
    color-mix(in srgb, var(--np) 82%, #4a341c) 0%,
    color-mix(in srgb, var(--np) 88%, #fff) 18%,
    color-mix(in srgb, var(--np) 62%, #fff) 44%,
    color-mix(in srgb, var(--np) 50%, #fff) 49.7%,
    transparent 50.3%);
}

/* folded-over TOP corner — the corner flips 180° and lies ON the face, tip pointing
   into the sheet, board showing through the cut (stock-art style). The flap's crease
   is a radial gradient sized with the SAME --dg-rx/ry ellipse as the silhouette scoop,
   so crease and cut always coincide exactly; % stops beyond 100% shade the flap body
   out to its tip (the flap box corner — --dg-tw/th set the tip's reach). */
.curl-fold-tl .sheet { border-top-left-radius: var(--dg-rx, 78px) var(--dg-ry, 64px); }
.curl-fold-tr .sheet { border-top-right-radius: var(--dg-rx, 78px) var(--dg-ry, 64px); }
.curl-fold-tl .sheet, .curl-fold-tr .sheet {
  box-shadow:
    0 1px 2px rgba(74,52,28,.16),
    0 8px 12px -6px rgba(74,52,28,var(--base-sh,.3)),
    inset 0 var(--dg-bend-h, 30px) var(--dg-bend-h, 30px) rgba(74,52,28,var(--dg-bend-a,.05)),
    inset 1px 1px 0 rgba(255,255,255,.35);
}
.curl-fold-tl .sheet::after, .curl-fold-tr .sheet::after {
  content: ""; position: absolute; top: -2px;
  width: calc(var(--dg-tw, 105px) + 2px); height: calc(var(--dg-th, 88px) + 2px);
}
.curl-fold-tl .sheet::after {
  left: -2px;
  background: radial-gradient(var(--dg-rx, 78px) var(--dg-ry, 64px) at 0 0,
    transparent 99%,
    rgba(74,52,28,var(--dg-crease,.18)) 100%,
    color-mix(in srgb, var(--np) 55%, #fff) 105%,
    color-mix(in srgb, var(--np) 76%, #fff) 132%,
    color-mix(in srgb, var(--np) 88%, #b08d62) 175%);
  filter: drop-shadow(3px 3px 4px rgba(74,52,28,var(--dg-tab-sh,.3)));
}
.curl-fold-tr .sheet::after {
  right: -2px;
  background: radial-gradient(var(--dg-rx, 78px) var(--dg-ry, 64px) at 100% 0,
    transparent 99%,
    rgba(74,52,28,var(--dg-crease,.18)) 100%,
    color-mix(in srgb, var(--np) 55%, #fff) 105%,
    color-mix(in srgb, var(--np) 76%, #fff) 132%,
    color-mix(in srgb, var(--np) 88%, #b08d62) 175%);
  filter: drop-shadow(-3px 3px 4px rgba(74,52,28,var(--dg-tab-sh,.3)));
}

/* ground shadow on the board under the curled side (user-tuned --pw-* values) */
.curl-sweep-l::after, .curl-sweep-r::after, .curl-ear-l::after, .curl-ear-r::after {
  content: ""; position: absolute; z-index: -1;
  bottom: var(--pw-bottom, -1px); height: var(--pw-h, 60px); width: var(--pw-w, 84%);
  filter: blur(var(--pw-blur, 8.5px));
}
.curl-sweep-l::after, .curl-ear-l::after {
  left: 0;
  background: radial-gradient(var(--pw-gw, 79%) var(--pw-gh, 135%) at var(--pw-gx, 18%) var(--pw-gy, 30%),
    rgba(74,52,28,var(--pw-a,.58)), transparent var(--pw-fade, 70%));
  transform: rotate(var(--pw-rot, 6deg)); transform-origin: 0 50%;
}
.curl-sweep-r::after, .curl-ear-r::after {
  right: 0;
  background: radial-gradient(var(--pw-gw, 79%) var(--pw-gh, 135%) at calc(100% - var(--pw-gx, 18%)) var(--pw-gy, 30%),
    rgba(74,52,28,var(--pw-a,.58)), transparent var(--pw-fade, 70%));
  transform: rotate(calc(var(--pw-rot, 6deg) * -1)); transform-origin: 100% 50%;
}
.note p { font-family: var(--font-hand); font-size: 1.5rem; line-height: 1.25; color: var(--ink); }
.note cite { display: block; margin-top: 14px; font-style: normal; font-weight: 700; font-size: .92rem; color: var(--ink-soft); }

/* ───────────────────────── final cta ───────────────────────── */
.final { max-width: var(--maxw); margin: 0 auto; padding: 0 clamp(16px, 4vw, 40px) clamp(60px, 9vw, 110px); }
.final__card { position: relative; background: linear-gradient(150deg, var(--coral), var(--coral-deep)); color: #fff; border-radius: var(--r-lg); padding: clamp(34px, 6vw, 64px); box-shadow: var(--sh-3); display: grid; gap: 34px; align-items: center; overflow: hidden; }
.final__card::after { content: ""; position: absolute; inset: 0; opacity: .5; mix-blend-mode: overlay; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); pointer-events: none; }
.final__copy { position: relative; z-index: 1; }
.final__card h2 { font-size: clamp(1.8rem, 4.4vw, 2.9rem); max-width: 18ch; }
.final__card > .final__copy p { margin-top: 14px; font-size: 1.12rem; color: color-mix(in srgb, #fff 88%, transparent); max-width: 40ch; }
.final__card .btn--primary { --bg: #fff; --edge: #e9c9bf; --fg: var(--coral-deep); }
.final__card .btn--ghost { --bg: transparent; --fg: #fff; border-color: rgba(255,255,255,.6); box-shadow: none; }
.final__card .btn--ghost:active { transform: translateY(2px); }
.final__qr { position: relative; z-index: 1; justify-self: start; background: var(--card); color: var(--ink); }
.final .qrcard__top { color: var(--ink); }
.final .spark { background: radial-gradient(circle, #fff 0 2px, transparent 3px), linear-gradient(#fff,#fff) center/2px 100% no-repeat, linear-gradient(90deg,#fff,#fff) center/100% 2px no-repeat; }
.final .s1 { top: 18px; right: 22px; } .final .s2 { bottom: 26px; left: 30%; --d: 1.2s; }

/* ───────────────────────── footer ───────────────────────── */
.foot { background: var(--ink); color: color-mix(in srgb, var(--paper) 80%, transparent); padding: clamp(44px, 7vw, 72px) clamp(16px, 4vw, 40px) 30px; }
.foot__top { max-width: var(--maxw); margin: 0 auto; display: grid; gap: 14px; }
.brand--foot .brand__word { color: var(--paper); }
.brand--foot .brand__mark { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.12); }
.foot__blurb { max-width: 36ch; color: color-mix(in srgb, var(--paper) 62%, transparent); }
.foot__cols { max-width: var(--maxw); margin: 36px auto 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 28px; }
.foot__cols h4 { font-family: var(--font-body); font-size: .78rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-faint); margin-bottom: 12px; }
.foot__cols a { display: block; padding: 5px 0; color: color-mix(in srgb, var(--paper) 78%, transparent); }
.foot__cols a:hover { color: var(--paper); }
.foot__bot { max-width: var(--maxw); margin: 40px auto 0; padding-top: 22px; border-top: 1px dashed rgba(255,255,255,.16); display: flex; flex-wrap: wrap; gap: 10px; justify-content: space-between; font-size: .86rem; color: var(--ink-faint); }

/* ───────────────────────── reveal anim ───────────────────────── */
.reveal { opacity: 0; transform: translateY(26px); transition: opacity .7s ease, transform .7s cubic-bezier(.2,.9,.3,1); }
.reveal.in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .reveal { opacity: 1; transform: none; transition: none; } }

/* ───────────────────────── responsive ───────────────────────── */
@media (min-width: 640px) {
  .feat__grid { grid-template-columns: 1fr 1fr; }
  .foot__cols { grid-template-columns: 1.4fr 1fr 1fr 1fr; }
}

@media (min-width: 860px) {
  .nav__links, .lang { display: flex; }
  .nav .btn--sm { display: inline-flex; }
  .nav__burger { display: none; }
  .nav__panel { display: none !important; }

  .hero { grid-template-columns: 1.05fr .95fr; align-items: center; }
  .steps { grid-template-columns: 1fr auto 1fr auto 1fr; }
  .dash { display: block; }
  .feat__grid { grid-template-columns: repeat(3, 1fr); }

  .app { grid-template-columns: 1fr 1fr; }
  .final__card { grid-template-columns: 1.5fr auto; }
}

@media (max-width: 859px) {
  .hero__title { max-width: 16ch; }
  /* centre the stacked hero so the copy isn't left-weighted in a wide tablet column */
  .hero__copy { text-align: center; }
  .hero__title, .hero__lede, .hero__offer { margin-inline: auto; }
  .hero__cta, .hero__trust { justify-content: center; }
  /* shrink the device box to the phone's width + centre it, so the sticky-note callouts
     hug the phone instead of being flung to the section edges on a wide tablet column */
  .app__device { width: min(300px, 78vw); margin-inline: auto; }
  .callout { max-width: 124px; font-size: 1rem; padding: 7px 11px; }
}

/* (very-small-phone pile sizing is no longer needed — the cqw pile scales fluidly) */

/* ============================================================
   Phase 4 — conversion sections (problem · objections + compare ·
   pricing · faq) + mobile sticky CTA. Every selector is scoped to a
   section class so nothing leaks into create.html, which also loads
   this stylesheet.
   ============================================================ */

/* ── problem (PAS) ── */
.prob { max-width: 760px; margin: 0 auto; padding: clamp(44px, 7vw, 84px) clamp(16px, 4vw, 40px) clamp(8px, 2vw, 20px); text-align: center; }
.prob__head { margin-bottom: 0; }
.prob__body { color: var(--ink-soft); font-size: clamp(1.05rem, 2vw, 1.22rem); margin-top: 20px; }
.prob__pivot { font-family: var(--font-display); font-weight: 600; font-size: clamp(1.3rem, 3.4vw, 1.95rem); color: var(--coral-deep); margin-top: 26px; }

/* ── objections + comparison ── */
.objx { max-width: var(--maxw); margin: 0 auto; padding: clamp(56px, 9vw, 110px) clamp(16px, 4vw, 40px); }
.objx__grid { display: grid; gap: 18px; margin-bottom: clamp(34px, 5vw, 52px); }
.ocard { background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: var(--r-lg); padding: 24px 26px; box-shadow: var(--sh-1); }
.ocard h3 { font-size: 1.22rem; margin-bottom: 9px; color: var(--ink); }
.ocard p { color: var(--ink-soft); }

.compare__wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--r); box-shadow: var(--sh-1); }
.compare { width: 100%; min-width: 560px; border-collapse: collapse; background: var(--card); font-size: .94rem; }
.compare th, .compare td { padding: 13px 14px; text-align: center; border-bottom: 1px solid var(--paper-edge); }
.compare thead th { font-family: var(--font-display); font-weight: 600; background: var(--paper-2); }
.compare thead th.compare__kc { background: color-mix(in srgb, var(--coral) 16%, var(--card)); color: var(--coral-deep); }
.compare tbody th { text-align: left; font-family: var(--font-body); font-weight: 600; color: var(--ink); }
.compare td.compare__kc { background: color-mix(in srgb, var(--coral) 7%, transparent); font-weight: 700; }
.compare .yes { color: var(--sage); font-weight: 800; }
.compare .no { color: var(--ink-faint); }
.compare tr:last-child th, .compare tr:last-child td { border-bottom: none; }
.objx__trust { text-align: center; margin-top: clamp(24px, 4vw, 40px); font-weight: 700; color: var(--ink-soft); }

/* ── pricing ── */
.price { max-width: var(--maxw); margin: 0 auto; padding: clamp(40px, 7vw, 90px) clamp(16px, 4vw, 40px); }
.price__card { max-width: 560px; margin: 0 auto; background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: var(--r-lg); padding: clamp(30px, 5vw, 48px); box-shadow: var(--sh-2); text-align: center; }
.price__badge { display: inline-block; font-weight: 700; font-size: .9rem; color: color-mix(in srgb, var(--sage) 62%, var(--ink)); background: color-mix(in srgb, var(--sage) 16%, transparent); padding: 7px 16px; border-radius: 999px; margin: 0 0 18px; }
.price__frame { color: var(--ink-soft); margin: 14px auto 0; max-width: 42ch; }
.price__big { display: flex; align-items: baseline; justify-content: center; flex-wrap: wrap; gap: 4px 10px; margin: 0 0 4px; }
.price__num { font-family: var(--font-display); font-weight: 700; font-size: clamp(3rem, 9vw, 4.4rem); color: var(--ink); line-height: 1; }
.price__unit { color: var(--ink-soft); font-weight: 600; }
.price__inc { list-style: none; padding: 0; margin: 26px auto 0; display: inline-grid; gap: 12px; text-align: left; }
.price__inc li { display: flex; align-items: center; gap: 12px; font-weight: 600; }
.price__inc svg { flex: none; width: 26px; height: 26px; padding: 5px; border-radius: 8px; background: color-mix(in srgb, var(--sage) 22%, transparent); fill: none; stroke: var(--sage); stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.price__guarantee { color: var(--ink); font-weight: 700; margin: 26px auto 0; max-width: 46ch; padding: 16px 20px; border-radius: var(--r); background: color-mix(in srgb, var(--sage) 12%, transparent); border: 1px solid color-mix(in srgb, var(--sage) 28%, transparent); }
.price .btn { margin-top: 22px; }
.price__scarcity { color: var(--ink-faint); font-size: .92rem; margin-top: 18px; }

/* ── faq (visible static Q/A — NOT collapsed, so a future FAQPage JSON-LD matches) ── */
.faq { max-width: 800px; margin: 0 auto; padding: clamp(40px, 7vw, 90px) clamp(16px, 4vw, 40px) clamp(56px, 9vw, 110px); }
.faq__list { display: grid; gap: 16px; margin-top: clamp(26px, 4vw, 44px); }
.faq__item { background: var(--card); border: 1.5px solid var(--paper-edge); border-radius: var(--r); padding: 22px 24px; box-shadow: var(--sh-1); }
.faq__q { font-family: var(--font-display); font-weight: 600; font-size: 1.18rem; color: var(--ink); margin-bottom: 8px; }
.faq__a { color: var(--ink-soft); }

/* ── mobile sticky CTA ── */
.sticky-cta {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 9px clamp(12px, 4vw, 16px) calc(9px + env(safe-area-inset-bottom));
  background: color-mix(in srgb, var(--paper) 90%, transparent);
  backdrop-filter: blur(10px) saturate(1.2);
  box-shadow: 0 -1px 0 var(--paper-edge), 0 -12px 30px -22px rgba(74,52,28,.5);
}
.sticky-cta__note { margin: 0; font-size: .78rem; font-weight: 600; color: var(--ink-soft); text-align: center; }
.sticky-cta .btn { width: 100%; max-width: 440px; justify-content: center; }

@media (min-width: 760px) {
  .objx__grid { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 860px) {
  .sticky-cta { display: none; }
}
@media (max-width: 859px) {
  /* clear the fixed sticky bar (caption + button) so it can never cover the footer's last row */
  .foot { padding-bottom: calc(124px + env(safe-area-inset-bottom)); }
}
