/* ==========================================================================
   Mewtru — minimal styles
   ========================================================================== */
:root {
  color-scheme: light;
  --bg: #ffffff;
  --bg-2: #f5f4f6;
  --surface: #ffffff;
  --ink: #161418;
  --ink-2: #5f5b66;
  --ink-3: #9a96a0;
  --line: #e8e6eb;
  --on-ink: #ffffff;
  --ink-strong: #000000;
  --header-bg: rgba(255, 255, 255, .9);
  --switch-on: #161418;
  --brand: #ff4f7b;
  --font: 'Outfit', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-mode="light"]) {
  color-scheme: dark;
    --bg: #121115;
    --bg-2: #222127;
    --surface: #19181d;
    --ink: #f2f0f5;
    --ink-2: #b3aebb;
    --ink-3: #7d7886;
    --line: #2d2b32;
    --on-ink: #121115;
    --ink-strong: #ffffff;
    --header-bg: rgba(18, 17, 21, .85);
    --switch-on: #a39dae;
  }
}
:root[data-mode="dark"] {
  color-scheme: dark;
  --bg: #121115;
  --bg-2: #222127;
  --surface: #19181d;
  --ink: #f2f0f5;
  --ink-2: #b3aebb;
  --ink-3: #7d7886;
  --line: #2d2b32;
  --on-ink: #121115;
  --ink-strong: #ffffff;
  --header-bg: rgba(18, 17, 21, .85);
  --switch-on: #a39dae;
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body { margin: 0; font-family: var(--font); font-size: 16px; line-height: 1.6; color: var(--ink); background: var(--bg); -webkit-font-smoothing: antialiased; overflow-x: hidden; }
body.rv-open { overflow: hidden; }
[hidden] { display: none !important; }
img, svg { max-width: 100%; }
a { color: inherit; text-underline-offset: 3px; }
h1, h2, h3 { line-height: 1.15; margin: 0 0 .5em; letter-spacing: -.02em; font-weight: 700; }
p { margin: 0 0 1em; }
button { font: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; border-radius: 8px; }
.wrap { width: min(1040px, 100% - 40px); margin-inline: auto; }
.narrow { width: min(720px, 100% - 40px); }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.skip { position: absolute; left: -999px; top: 8px; background: var(--ink); color: var(--on-ink); padding: 8px 14px; border-radius: 10px; z-index: 100; }
.skip:focus { left: 8px; }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .4em;
  padding: .68em 1.1em; border-radius: 12px; border: 1px solid var(--line); background: var(--surface); color: var(--ink);
  font-weight: 600; font-size: .95rem; line-height: 1.2; text-decoration: none; cursor: pointer; white-space: nowrap;
  transition: background .15s, border-color .15s, transform .1s;
}
.btn:hover { border-color: var(--ink-3); }
.btn:active { transform: scale(.98); }
.btn:disabled { opacity: .5; cursor: default; transform: none; }
.btn-primary { background: var(--ink); border-color: var(--ink); color: var(--on-ink); }
.btn-primary:hover { background: var(--ink-strong); border-color: var(--ink-strong); }
.btn-ghost { background: transparent; border-color: transparent; }
.btn-ghost:hover { background: var(--bg-2); border-color: transparent; }
.btn-light { background: rgba(255, 255, 255, .92); border-color: transparent; color: #161418; }
.btn-light:hover { background: #fff; border-color: transparent; }
.btn-sm { padding: .5em .9em; font-size: .88rem; }
.btn-lg { padding: .8em 1.3em; font-size: 1rem; }
.btn-xl { width: 100%; padding: .95em; font-size: 1rem; margin-top: 22px; }
.btn-block { width: 100%; }
.chip { display: inline-flex; align-items: center; padding: .38em .8em; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); font-weight: 500; font-size: .85rem; cursor: pointer; }
.chip:hover { border-color: var(--ink-3); }
.chip[aria-pressed="true"] { background: var(--ink); border-color: var(--ink); color: var(--on-ink); }

/* ---------- Header / footer ---------- */
.site-header { position: sticky; top: 0; z-index: 50; background: var(--header-bg); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid var(--line); }
.nav { display: flex; align-items: center; justify-content: space-between; height: 58px; }
.logo { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: 1.08rem; text-decoration: none; }
.logo svg { width: 24px; height: 24px; }
.nav-r { display: flex; align-items: center; gap: 6px; }
.mode-btn { width: 36px; height: 36px; display: grid; place-items: center; border: 0; border-radius: 10px; background: transparent; color: var(--ink-2); cursor: pointer; }
.mode-btn:hover { background: var(--bg-2); color: var(--ink); }
.mode-btn svg { width: 18px; height: 18px; }
.mode-btn .i-sun { display: none; }
:root[data-mode="dark"] .mode-btn .i-sun { display: block; }
:root[data-mode="dark"] .mode-btn .i-moon { display: none; }
@media (prefers-color-scheme: dark) {
  :root:not([data-mode="light"]) .mode-btn .i-sun { display: block; }
  :root:not([data-mode="light"]) .mode-btn .i-moon { display: none; }
}
.site-footer { border-top: 1px solid var(--line); margin-top: 40px; padding: 28px 0; font-size: .88rem; color: var(--ink-3); }
.foot { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; align-items: center; }
.foot nav { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.foot a { color: var(--ink-2); text-decoration: none; }
.foot a:hover { color: var(--ink); }
.foot p { margin: 0; }

/* ---------- Hero ---------- */
.hero { padding: 56px 0 8px; text-align: center; }
.hero h1 { font-size: clamp(2rem, 5vw, 3rem); margin: 0 auto .3em; }
.hero h1 span { display: block; font-size: .42em; font-weight: 500; letter-spacing: 0; color: var(--ink-2); margin-top: .4em; }
.hero .lead { color: var(--ink-2); font-size: 1.05rem; max-width: 520px; margin: 0 auto; }
.page-hero { text-align: left; padding-top: 40px; }
.page-hero .lead { margin: 0; }
.hero .btn { margin-top: 20px; }
.crumbs { font-size: .85rem; color: var(--ink-3); margin-bottom: 10px; }
.crumbs a { color: var(--ink-2); text-decoration: none; }

/* ---------- Maker ---------- */
.maker { padding: 32px 0 48px; scroll-margin-top: 64px; }
.maker-grid { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 40px; align-items: start; }
.panel { border: 1px solid var(--line); border-radius: 20px; padding: 26px; background: var(--surface); }
.step { display: flex; align-items: center; gap: 10px; margin: 28px 0 12px; }
.step:first-child { margin-top: 0; }
.step h2 { margin: 0; font-size: 1rem; letter-spacing: -.01em; }
.step-num { width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: var(--bg-2); color: var(--ink-2); font-weight: 600; font-size: .75rem; flex: none; }
.step-note { margin-left: auto; font-size: .85rem; color: var(--ink-3); }
.field { display: block; margin-bottom: 12px; position: relative; }
.field > span { display: block; font-size: .82rem; font-weight: 500; margin-bottom: 5px; color: var(--ink-2); }
.field em { font-style: normal; color: var(--ink-3); margin-left: 4px; }
.field small { position: absolute; right: 12px; bottom: 10px; color: var(--ink-3); font-size: .75rem; }
.field-row { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; }
.field-row .grow { flex: 1 1 200px; }
.field-row .age { flex: 0 0 110px; }
input[type="text"], input[type="number"], input[type="datetime-local"], select, textarea {
  width: 100%; font: inherit; font-size: 16px; color: var(--ink); background: var(--surface);
  border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; transition: border-color .15s, box-shadow .15s;
}
textarea { resize: vertical; min-height: 84px; line-height: 1.5; }
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--ink); box-shadow: 0 0 0 3px rgba(22, 20, 24, .06); }
::placeholder { color: var(--ink-3); }
.row { display: flex; gap: 8px; align-items: center; }
.row input { flex: 1; min-width: 0; }
.hint { font-size: .8rem; color: var(--ink-3); margin: 6px 0 0; }
.hint:empty { display: none; }
.shake { animation: shake .45s; }
@keyframes shake { 20%, 60% { transform: translateX(-6px); } 40%, 80% { transform: translateX(6px); } }

.pills { display: flex; gap: 6px; overflow-x: auto; padding: 0 24px 10px 0; scrollbar-width: none; -webkit-mask: linear-gradient(90deg, #000 88%, transparent); mask: linear-gradient(90deg, #000 88%, transparent); }
.pills::-webkit-scrollbar { display: none; }
.pill { flex: none; padding: .35em .85em; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); font-weight: 500; font-size: .85rem; cursor: pointer; }
.pill:hover { border-color: var(--ink-3); }
.pill[aria-selected="true"] { background: var(--ink); border-color: var(--ink); color: var(--on-ink); }
.wishes { display: grid; gap: 6px; max-height: 236px; overflow-y: auto; padding-right: 4px; overscroll-behavior: contain; }
.wish { text-align: left; padding: 10px 13px; border-radius: 12px; border: 1px solid var(--line); background: var(--surface); cursor: pointer; font-size: .92rem; line-height: 1.45; color: var(--ink-2); transition: border-color .15s, background .15s; }
.wish:hover { border-color: var(--ink-3); }
.wish.on { border-color: var(--ink); background: var(--bg-2); color: var(--ink); }
.wish-note { padding: 14px; border-radius: 12px; background: var(--bg-2); color: var(--ink-2); margin: 0; font-size: .92rem; }
.wish-tools { display: flex; gap: 6px; margin-top: 10px; }
.own { margin-top: 10px; }

.themes { display: flex; flex-wrap: wrap; gap: 10px; }
.theme-opt { width: 38px; height: 38px; padding: 0; border: 0; border-radius: 50%; cursor: pointer; background: none; }
.theme-opt .sw { display: block; width: 100%; height: 100%; border-radius: 50%; transition: transform .15s; }
.theme-opt:hover .sw { transform: scale(1.08); }
.theme-opt[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--ink); }

.extras { margin-top: 26px; border-top: 1px solid var(--line); }
.extras summary { cursor: pointer; padding: 14px 0 4px; font-weight: 600; font-size: .95rem; list-style: none; display: flex; align-items: center; }
.extras summary::-webkit-details-marker { display: none; }
.extras summary::after { content: '+'; margin-left: auto; font-size: 1.2rem; line-height: 1; color: var(--ink-3); transition: transform .2s; }
.extras[open] summary { margin-bottom: 10px; }
.extras[open] summary::after { transform: rotate(45deg); }
.switch { display: inline-flex; align-items: center; gap: 8px; font-size: .88rem; font-weight: 500; cursor: pointer; padding: 10px 0 22px; user-select: none; }
.switch input { appearance: none; -webkit-appearance: none; width: 38px; height: 22px; border-radius: 999px; background: var(--line); position: relative; cursor: pointer; transition: background .2s; margin: 0; flex: none; }
.switch input::after { content: ''; position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%; background: #fff; transition: transform .2s; }
.switch input:checked { background: var(--switch-on); }
.switch input:checked::after { transform: translateX(16px); }

/* Preview */
.preview { position: sticky; top: 80px; display: grid; justify-items: center; gap: 12px; }
.phone { width: 340px; max-width: 100%; height: 620px; max-height: calc(100vh - 150px); min-height: 500px; border-radius: 34px; padding: 8px; border: 1px solid var(--line); background: var(--surface); }
.phone-screen { height: 100%; border-radius: 27px; overflow-y: auto; overflow-x: hidden; padding: 28px 14px 20px; display: flex; scrollbar-width: none; }
.phone-screen::-webkit-scrollbar { display: none; }
.preview-actions { display: flex; gap: 6px; }

/* ---------- Content ---------- */
.section { padding: 40px 0; }
.section h2 { font-size: 1.35rem; }
.section h3 { font-size: 1rem; margin: 28px 0 8px; color: var(--ink-2); }
.steps { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; counter-reset: s; }
.steps li { counter-increment: s; display: grid; gap: 2px; padding: 16px; border: 1px solid var(--line); border-radius: 14px; }
.steps li::before { content: counter(s); font-size: .8rem; color: var(--ink-3); }
.steps span { color: var(--ink-2); font-size: .9rem; }
.feats { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 0 24px; }
.feats li { display: flex; align-items: center; gap: 10px; padding: 11px 0; border-bottom: 1px solid var(--line); }
.links { display: flex; flex-wrap: wrap; gap: 8px; }
.links a { padding: .45em .9em; border: 1px solid var(--line); border-radius: 999px; text-decoration: none; font-size: .9rem; }
.links a:hover { border-color: var(--ink-3); }
.prose p { color: var(--ink-2); }
.prose h2 { font-size: 1.1rem; margin-top: 1.6em; }
.note { font-size: .82rem; color: var(--ink-3); margin-top: 12px; }

.wish-list { list-style: none; padding: 0; margin: 0; }
.wish-list li { display: flex; align-items: flex-start; gap: 16px; padding: 12px 0; border-bottom: 1px solid var(--line); }
.wish-list .wish-text { margin: 0; flex: 1; }
.use-wish { flex: none; border: 1px solid var(--line); background: var(--surface); border-radius: 999px; padding: .25em .8em; font-size: .82rem; font-weight: 500; cursor: pointer; }
.use-wish:hover { border-color: var(--ink); }

.table-wrap { overflow-x: auto; }
.compare { width: 100%; border-collapse: collapse; font-size: .92rem; }
.compare th, .compare td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--line); }
.compare thead th { font-weight: 600; color: var(--ink-2); }
.compare tbody th { font-weight: 500; }
.compare td { color: var(--ink-2); }
.compare td:nth-child(2) { color: var(--ink); font-weight: 600; }

.faq details { border-bottom: 1px solid var(--line); }
.faq summary { cursor: pointer; list-style: none; padding: 14px 28px 14px 0; font-weight: 500; position: relative; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: '+'; position: absolute; right: 0; top: 50%; transform: translateY(-50%); font-size: 1.2rem; color: var(--ink-3); transition: transform .2s; }
.faq details[open] summary::after { transform: translateY(-50%) rotate(45deg); }
.faq details p { color: var(--ink-2); margin: 0 0 14px; }

/* ==========================================================================
   Birthday card + themes
   ========================================================================== */
.stage { background: var(--stage); background-color: var(--stage-c, #fff4e0); color: var(--card-ink); }
.bcard {
  position: relative; z-index: 1; width: 100%; max-width: 380px; margin: auto; text-align: center;
  background: var(--card-bg); color: var(--card-ink); border-radius: 26px; padding: 22px 22px 26px;
  box-shadow: var(--card-shadow, 0 20px 50px rgba(0, 0, 0, .14)); border: var(--card-border, 0);
}
.bcard-hello { margin: 4px 0 0; font-weight: 700; font-size: 1rem; color: var(--accent); }
.bcard-cake { width: 100%; max-width: 240px; margin: 2px auto -4px; }
.cake-svg { display: block; width: 100%; height: auto; overflow: visible; }
.bcard-name {
  font-family: var(--name-font, 'Baloo 2'), var(--font); font-style: var(--name-style, normal); font-weight: 700;
  font-size: clamp(2rem, 9vw, 2.7rem); line-height: 1.08; margin: 6px 0 4px; color: var(--name-c, var(--card-ink));
  overflow-wrap: anywhere; text-shadow: var(--name-shadow, none);
}
.bcard-name .ph { opacity: .3; }
.bcard-age { display: inline-block; margin: 2px 0 10px; padding: 3px 12px; border-radius: 999px; background: var(--accent); color: var(--accent-ink, #fff); font-weight: 700; font-size: .85rem; }
.bcard-age[hidden], .bcard-from[hidden] { display: none; }
.bcard-msg { font-size: 1rem; line-height: 1.6; color: var(--card-ink-2); margin: 6px 0 12px; overflow-wrap: anywhere; }
.bcard-from { font-family: var(--name-font, 'Baloo 2'), var(--font); font-style: var(--name-style, normal); font-weight: 700; font-size: 1.15rem; color: var(--name-c, var(--card-ink)); margin: 0; }

/* candle flames */
.flame { transform-box: fill-box; transform-origin: 50% 100%; animation: flicker 1.6s ease-in-out infinite alternate; transition: transform .35s, opacity .35s; }
.glow { animation: glow 2s ease-in-out infinite alternate; transition: opacity .35s; }
@keyframes flicker { 0% { transform: scale(1, 1) rotate(-2deg); } 35% { transform: scale(.94, 1.06) rotate(2deg); } 70% { transform: scale(1.04, .95) rotate(-1deg); } 100% { transform: scale(.97, 1.04) rotate(1.5deg); } }
@keyframes glow { from { opacity: .65; } to { opacity: 1; } }
.flame-wrap.out .flame { transform: scale(.1, .1); opacity: 0; animation: none; }
.flame-wrap.out .glow { opacity: 0; }
.smoke circle { animation: smoke 1.6s ease-out forwards; }
.smoke circle:nth-child(2) { animation-delay: .12s; }
.smoke circle:nth-child(3) { animation-delay: .24s; }
@keyframes smoke { from { opacity: .8; transform: translateY(0) scale(.6); } to { opacity: 0; transform: translateY(-34px) scale(1.8); } }
.blowable, .blowable .flame-wrap:not(.out) { cursor: pointer; }

/* theme tokens */
.t-confetti {
  --stage: radial-gradient(circle at 12% 18%, #ffd93d 0 4px, transparent 5px) 0 0/120px 120px, radial-gradient(circle at 70% 60%, #4ecdc4 0 3px, transparent 4px) 0 0/90px 90px, radial-gradient(circle at 40% 80%, #ff6b6b 0 3px, transparent 4px) 0 0/140px 140px, linear-gradient(160deg, #fff6e8, #ffe6ea);
  --stage-c: #fff1e6; --card-bg: #fffdf8; --card-ink: #2b1d3a; --card-ink-2: #5e5070; --accent: #ff4f79;
  --name-font: 'Baloo 2'; --name-c: #2b1d3a; --gift: #ff5a7a; --ribbon: #ffd93d;
}
.t-galaxy {
  --stage: radial-gradient(1.5px 1.5px at 20px 30px, #fff 50%, transparent 52%) 0 0/120px 110px, radial-gradient(1px 1px at 70px 80px, #cbbfff 50%, transparent 52%) 0 0/150px 130px, radial-gradient(1.2px 1.2px at 100px 40px, #fff 50%, transparent 52%) 0 0/210px 170px, radial-gradient(ellipse at 75% 5%, rgba(255, 122, 217, .38), transparent 55%), radial-gradient(ellipse at 5% 95%, rgba(126, 232, 250, .28), transparent 55%), linear-gradient(180deg, #0e0a2a, #2a1d68);
  --stage-c: #120d35; --card-bg: rgba(255, 255, 255, .09); --card-ink: #fff; --card-ink-2: #ddd5ff; --accent: #ff7ad9;
  --card-border: 1px solid rgba(255, 255, 255, .2); --card-shadow: 0 30px 80px rgba(0, 0, 0, .45), inset 0 1px 0 rgba(255, 255, 255, .15);
  --name-font: 'Fraunces'; --name-style: italic; --name-c: #fff; --name-shadow: 0 0 24px rgba(185, 166, 255, .7); --gift: #7b5cff; --ribbon: #ff7ad9;
}
.t-galaxy .bcard, .t-neon .bcard { backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); }
.t-pastel {
  --stage: radial-gradient(circle at 20% 20%, rgba(255, 179, 209, .7), transparent 40%), radial-gradient(circle at 85% 30%, rgba(160, 231, 229, .7), transparent 40%), radial-gradient(circle at 50% 90%, rgba(200, 182, 255, .7), transparent 45%), #fdf3ff;
  --stage-c: #fdf3ff; --card-bg: #ffffff; --card-ink: #3d2c5a; --card-ink-2: #6c5b88; --accent: #b46cff;
  --name-font: 'Dancing Script'; --name-c: #7a4cc2; --gift: #c8b6ff; --ribbon: #ffb3d1;
}
.t-romance {
  --stage: radial-gradient(circle at 50% 0%, rgba(255, 143, 171, .45), transparent 60%), radial-gradient(circle at 10% 100%, rgba(255, 77, 109, .4), transparent 50%), linear-gradient(160deg, #3d0920, #8f1d46 60%, #c9184a);
  --stage-c: #6b1434; --card-bg: #fff6f8; --card-ink: #4a0b25; --card-ink-2: #7d3a55; --accent: #d6336c;
  --name-font: 'Dancing Script'; --name-c: #c9184a; --gift: #ff4d6d; --ribbon: #ffccd5;
}
.t-gold {
  --stage: radial-gradient(circle at 50% 15%, rgba(233, 196, 106, .28), transparent 55%), repeating-linear-gradient(45deg, rgba(233, 196, 106, .06) 0 2px, transparent 2px 16px), #0f0f14;
  --stage-c: #0f0f14; --card-bg: linear-gradient(180deg, #1b1a22, #121117); --card-ink: #f6efdc; --card-ink-2: #d4c8a8; --accent: #e9c46a; --accent-ink: #1b1a22;
  --card-border: 1.5px solid rgba(233, 196, 106, .7); --card-shadow: 0 30px 80px rgba(0, 0, 0, .6), 0 0 0 6px rgba(233, 196, 106, .08);
  --name-font: 'Fraunces'; --name-c: #f4e1a1; --gift: #e9c46a; --ribbon: #fff3c4;
}
.t-neon {
  --stage: radial-gradient(circle at 15% 15%, rgba(255, 0, 200, .38), transparent 40%), radial-gradient(circle at 85% 85%, rgba(0, 240, 255, .32), transparent 42%), linear-gradient(rgba(255, 255, 255, .05) 1px, transparent 1px) 0 0/100% 34px, linear-gradient(90deg, rgba(255, 255, 255, .05) 1px, transparent 1px) 0 0/34px 100%, #0b0b1a;
  --stage-c: #0b0b1a; --card-bg: rgba(12, 10, 32, .78); --card-ink: #fff; --card-ink-2: #cfd3ff; --accent: #00f0ff; --accent-ink: #0b0b1a;
  --card-border: 2px solid #ff00c8; --card-shadow: 0 0 30px rgba(255, 0, 200, .55), 0 0 90px rgba(0, 240, 255, .2);
  --name-font: 'Baloo 2'; --name-c: #fff; --name-shadow: 0 0 8px #ff00c8, 0 0 22px #ff00c8; --gift: #ff00c8; --ribbon: #00f0ff;
}
.t-ocean {
  --stage: radial-gradient(ellipse at 50% 120%, rgba(255, 255, 255, .5), transparent 50%), radial-gradient(circle at 80% 10%, rgba(255, 255, 255, .5), transparent 30%), linear-gradient(180deg, #caf0f8, #48cae4 60%, #0077b6);
  --stage-c: #48cae4; --card-bg: #ffffff; --card-ink: #023e57; --card-ink-2: #2f6178; --accent: #0096c7;
  --name-font: 'Baloo 2'; --name-c: #0077b6; --gift: #00b4d8; --ribbon: #ffd166;
}
.t-garden {
  --stage: radial-gradient(circle at 12% 88%, rgba(255, 143, 171, .45), transparent 28%), radial-gradient(circle at 90% 12%, rgba(255, 224, 102, .5), transparent 25%), radial-gradient(circle at 85% 85%, rgba(149, 213, 178, .8), transparent 35%), linear-gradient(160deg, #eefaf1, #d8f3dc 50%, #fde2e4);
  --stage-c: #e3f6e8; --card-bg: #fffef9; --card-ink: #1b4332; --card-ink-2: #40695a; --accent: #e75480;
  --name-font: 'Dancing Script'; --name-c: #2d6a4f; --gift: #ff8fab; --ribbon: #ffe066;
}
.t-romance, .t-galaxy, .t-gold, .t-neon, .t-ocean { --title-c: #fff; }

/* ==========================================================================
   The surprise (full screen)
   ========================================================================== */
.reveal { position: fixed; inset: 0; z-index: 1000; overflow: hidden; animation: fadeIn .35s ease; }
@keyframes fadeIn { from { opacity: 0; } }
.rv-scene { position: absolute; inset: 0; overflow-y: auto; overflow-x: hidden; display: grid; place-items: center; padding: 68px 16px 36px; z-index: 1; }
.rv-balloons { position: fixed; inset: 0; z-index: 2; pointer-events: none; overflow: hidden; }
.rv-fx { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 3; pointer-events: none; }
.rv-bar { position: fixed; top: 14px; right: 14px; left: 14px; z-index: 4; display: flex; justify-content: flex-end; gap: 8px; pointer-events: none; }
.rv-btn { pointer-events: auto; border: 0; border-radius: 999px; padding: 8px 14px; font-weight: 600; font-size: .88rem; cursor: pointer; background: rgba(255, 255, 255, .85); color: #161418; backdrop-filter: blur(8px); }
.rv-btn[data-sound] { min-width: 40px; margin-right: auto; }
.rv-center { display: grid; justify-items: center; text-align: center; gap: 6px; max-width: 520px; position: relative; color: var(--title-c, var(--card-ink)); }
.rv-kicker { margin: 0; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; font-size: .78rem; opacity: .75; }
.rv-title { font-family: var(--name-font, 'Baloo 2'), var(--font); font-style: var(--name-style, normal); font-size: clamp(2.2rem, 9vw, 3.4rem); margin: 0 0 18px; overflow-wrap: anywhere; text-shadow: var(--name-shadow, none); }
.rv-sub { margin: 0; opacity: .8; font-weight: 500; }
.rv-sub.small { font-size: .88rem; margin-top: 10px; }
.rv-tap { margin-top: 18px; font-weight: 600; font-size: .92rem; animation: pulse 1.6s ease-in-out infinite; }
@keyframes pulse { 50% { opacity: .4; } }
.rv-giftmini { font-size: 3.4rem; animation: wiggle 2s ease-in-out infinite; }

/* countdown */
.count { display: flex; gap: 8px; margin: 10px 0 4px; }
.count div { min-width: 68px; padding: 10px 6px 8px; border-radius: 14px; background: rgba(255, 255, 255, .92); color: #161418; }
.count b { display: block; font-size: 1.8rem; font-variant-numeric: tabular-nums; line-height: 1; }
.count span { font-size: .68rem; text-transform: uppercase; letter-spacing: .08em; font-weight: 600; opacity: .55; }

/* gift box */
.giftbox { position: relative; width: 180px; height: 170px; border: 0; background: none; cursor: pointer; animation: wiggle 2.2s ease-in-out infinite; padding: 0; }
.gb-box { position: absolute; left: 16px; right: 16px; bottom: 0; height: 112px; background: var(--gift, #ff5a7a); border-radius: 12px; box-shadow: inset -20px 0 0 rgba(0, 0, 0, .1), 0 18px 36px rgba(0, 0, 0, .2); transition: transform .6s .2s, opacity .6s .2s; }
.gb-box::before { content: ''; position: absolute; left: 50%; top: 0; bottom: 0; width: 26px; transform: translateX(-50%); background: var(--ribbon, #ffd93d); }
.gb-lid { position: absolute; left: 4px; right: 4px; top: 26px; height: 38px; background: var(--gift, #ff5a7a); border-radius: 10px; z-index: 2; box-shadow: inset 0 -7px 0 rgba(0, 0, 0, .1); transition: transform .75s cubic-bezier(.2, .9, .3, 1.2), opacity .6s .2s; }
.gb-lid::before { content: ''; position: absolute; left: 50%; top: 0; bottom: 0; width: 26px; transform: translateX(-50%); background: var(--ribbon, #ffd93d); }
.gb-bow { position: absolute; left: 50%; top: -14px; width: 20px; height: 18px; margin-left: -10px; border-radius: 8px; background: var(--ribbon, #ffd93d); }
.gb-bow::before, .gb-bow::after { content: ''; position: absolute; top: -17px; width: 42px; height: 28px; border: 9px solid var(--ribbon, #ffd93d); border-radius: 50%; }
.gb-bow::before { right: 11px; transform: rotate(-22deg); }
.gb-bow::after { left: 11px; transform: rotate(22deg); }
.giftbox.open { animation: shakeOpen .45s; }
.giftbox.open .gb-lid { transform: translate(-40px, -190px) rotate(-38deg); opacity: 0; }
.giftbox.open .gb-box { transform: scale(.4) translateY(80px); opacity: 0; }
@keyframes wiggle { 0%, 70%, 100% { transform: rotate(0); } 75% { transform: rotate(-6deg); } 80% { transform: rotate(6deg); } 85% { transform: rotate(-4deg); } 90% { transform: rotate(3deg); } }
@keyframes shakeOpen { 25% { transform: rotate(-8deg) scale(1.05); } 50% { transform: rotate(8deg) scale(1.08); } 75% { transform: rotate(-4deg); } }
.rays { position: absolute; left: 50%; top: 58%; width: 600px; height: 600px; margin: -300px 0 0 -300px; border-radius: 50%; pointer-events: none; opacity: .25;
  background: repeating-conic-gradient(from 0deg, rgba(255, 255, 255, .55) 0 8deg, transparent 8deg 22deg);
  -webkit-mask: radial-gradient(circle, #000 0 20%, transparent 65%); mask: radial-gradient(circle, #000 0 20%, transparent 65%);
  animation: spin 24s linear infinite; z-index: -1; }
.opening .rays { opacity: 1; transform: scale(1.6); transition: opacity .3s, transform .6s; }
@keyframes spin { to { rotate: 360deg; } }

/* card stage */
.rv-cardstage { display: grid; justify-items: center; gap: 14px; width: 100%; max-width: 540px; }
.rv-cardwrap { width: 100%; display: flex; justify-content: center; animation: cardIn .8s cubic-bezier(.2, .9, .3, 1.15) both; }
@keyframes cardIn { from { opacity: 0; transform: translateY(50px) scale(.88); } }
.rv-cardwrap .bcard { max-width: 400px; padding: 24px 24px 28px; }
.bcard.animate .ltr { display: inline-block; animation: letter .7s cubic-bezier(.2, .9, .3, 1.4) both; animation-delay: calc(.5s + var(--i) * .06s); }
@keyframes letter { from { opacity: 0; transform: translateY(.6em) scale(.4); } }
.bcard.animate .wd { opacity: 0; animation: word .5s ease forwards; animation-delay: var(--d); display: inline-block; }
@keyframes word { from { opacity: 0; transform: translateY(6px); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
.rv-hint { margin: 0; text-align: center; font-weight: 600; color: var(--title-c, var(--card-ink)); min-height: 1.6em; max-width: 420px; position: relative; z-index: 1; }
.reveal.dim .rv-hint { --title-c: #fff; }
.rv-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; transition: opacity .3s; }
.rv-actions .btn-primary { background: var(--accent); border-color: var(--accent); color: var(--accent-ink, #fff); }
.rv-own { background: none; border: 0; cursor: pointer; font-weight: 500; font-size: .9rem; color: var(--title-c, var(--card-ink)); opacity: .75; text-decoration: underline; text-underline-offset: 4px; padding: 6px; }
.reveal.dim .bcard { box-shadow: 0 0 0 200vmax rgba(6, 3, 18, .78); transition: box-shadow .6s; }
.reveal.dim .rv-actions, .reveal.dim .rv-own { opacity: .2; pointer-events: none; }
.mic-meter { width: 160px; height: 6px; border-radius: 999px; background: rgba(255, 255, 255, .25); overflow: hidden; position: relative; z-index: 1; }
.mic-meter span { display: block; height: 100%; width: calc(var(--lvl, 0) * 100%); background: #fff; transition: width .08s; }
.mic-meter[hidden] { display: none; }

/* balloons */
.balloon { position: absolute; left: var(--x); bottom: -150px; width: 70px; height: 144px; border: 0; padding: 0; background: none; cursor: pointer; pointer-events: auto; animation: rise var(--dur) linear var(--delay) infinite; }
.balloon svg { width: 100%; height: 100%; animation: sway 3s ease-in-out infinite alternate; transform-origin: 50% 100%; }
@keyframes rise { from { transform: translateY(0); } to { transform: translateY(calc(-100vh - 200px)); } }
@keyframes sway { from { transform: rotate(-7deg); } to { transform: rotate(7deg); } }
.rv-note { position: fixed; top: 70px; left: 50%; z-index: 5; transform: translate(-50%, -16px); opacity: 0; pointer-events: none; transition: .3s; background: #fff; color: #161418; padding: 12px 20px; border-radius: 16px; font-weight: 600; box-shadow: 0 16px 40px rgba(0, 0, 0, .2); max-width: calc(100% - 32px); text-align: center; }
.rv-note.show { opacity: 1; transform: translate(-50%, 0); }

/* envelope + letter */
.envelope { position: relative; width: 220px; height: 144px; border: 0; padding: 0; cursor: pointer; border-radius: 12px; background: #fff; box-shadow: 0 18px 40px rgba(0, 0, 0, .2); animation: wiggle 2.2s ease-in-out infinite; }
.envelope::before { content: ''; position: absolute; inset: 0; border-radius: 12px; background: linear-gradient(to top right, #f4eef8 50%, transparent 50.5%) left bottom / 50% 100% no-repeat, linear-gradient(to top left, #f4eef8 50%, transparent 50.5%) right bottom / 50% 100% no-repeat; }
.env-flap { position: absolute; left: 0; right: 0; top: 0; height: 62%; background: #ffe0ec; clip-path: polygon(0 0, 100% 0, 50% 100%); transform-origin: top; transition: transform .5s; border-radius: 12px 12px 0 0; z-index: 2; }
.envelope.open .env-flap { transform: rotateX(180deg); }
.env-heart { position: absolute; left: 50%; top: 56%; transform: translate(-50%, -50%); font-size: 2rem; z-index: 3; }
.bcard.letter { padding: 32px 28px; }
.bcard.letter .bcard-hello { font-size: 1.5rem; font-family: var(--name-font), var(--font); }
.bcard.letter .bcard-msg { font-size: 1.1rem; text-align: left; }
.dear { display: block; font-weight: 700; margin-bottom: 6px; }

/* ==========================================================================
   Modal + toast
   ========================================================================== */
.modal-backdrop { position: fixed; inset: 0; z-index: 2000; background: rgba(15, 12, 20, .45); display: grid; place-items: center; padding: 16px; opacity: 0; transition: opacity .2s; overflow-y: auto; }
.modal-backdrop.show { opacity: 1; }
.modal { position: relative; width: min(460px, 100%); background: var(--surface); color: var(--ink); border-radius: 20px; padding: 26px 22px 22px; text-align: center; transform: translateY(10px); transition: transform .2s; }
.show .modal { transform: none; }
.modal h2 { font-size: 1.3rem; margin-bottom: 4px; }
.modal .muted { color: var(--ink-2); font-size: .92rem; margin: 0; }
.modal .field { text-align: left; margin-top: 14px; }
.modal-x { position: absolute; top: 10px; right: 10px; width: 34px; height: 34px; border-radius: 50%; border: 0; background: var(--bg-2); cursor: pointer; font-size: .9rem; }
.linkbox { display: flex; gap: 8px; margin: 18px 0 10px; }
.linkbox input { flex: 1; min-width: 0; font-size: .88rem; color: var(--ink-2); }
.linkbox .btn { flex: none; }
.share-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.share { display: flex; align-items: center; justify-content: center; padding: 10px 6px; border-radius: 12px; font-weight: 600; font-size: .88rem; text-decoration: none; border: 1px solid var(--line); background: var(--surface); color: var(--ink); }
.share:hover { border-color: var(--ink-3); }
.share.wa { background: #1fae54; border-color: #1fae54; color: #fff; }
.modal-row { display: flex; justify-content: center; gap: 4px; flex-wrap: wrap; margin-top: 10px; }
.modal-row:empty { display: none; }
.qr-box { display: grid; justify-items: center; gap: 8px; margin-top: 10px; color: var(--ink-2); font-size: .9rem; }
.qr-box img { image-rendering: pixelated; border-radius: 10px; border: 1px solid var(--line); width: 220px; height: auto; }
.qr-box[hidden] { display: none; }
.fineprint { font-size: .8rem; color: var(--ink-3); margin: 12px 0 0; }
.fineprint.warn { color: #b45309; }
.scratch { position: relative; width: 100%; max-width: 320px; height: 180px; margin: 16px auto; border-radius: 16px; overflow: hidden; color: #161418; background: linear-gradient(135deg, #fff3c4, #ffd6e8); }
.scratch-prize { position: absolute; inset: 0; display: grid; place-content: center; gap: 4px; padding: 16px; }
.scratch-prize span { font-size: 2rem; }
.scratch-prize b { font-size: 1.25rem; line-height: 1.25; }
.scratch-prize small { color: #5f5b66; }
.scratch canvas { position: absolute; inset: 0; width: 100%; height: 100%; touch-action: none; cursor: grab; transition: opacity .6s; }
.scratch canvas.gone { opacity: 0; pointer-events: none; }
.toast { position: fixed; left: 50%; bottom: 24px; z-index: 3000; transform: translate(-50%, 20px); opacity: 0; transition: .25s; background: var(--ink); color: var(--on-ink); padding: 10px 18px; border-radius: 999px; font-weight: 500; font-size: .92rem; pointer-events: none; max-width: calc(100% - 32px); text-align: center; }
.toast.show { transform: translate(-50%, 0); opacity: 1; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 860px) {
  .maker-grid { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .preview { position: static; }
  .phone { height: 580px; max-height: none; }
}
@media (max-width: 600px) {
  .wrap, .narrow { width: calc(100% - 32px); }
  .hero { padding-top: 36px; }
  .panel { padding: 20px 16px; border-radius: 18px; }
  .steps, .feats { grid-template-columns: 1fr; }
  .steps { gap: 8px; }
  .linkbox { flex-direction: column; }
  .share-grid { grid-template-columns: repeat(2, 1fr); }
  .count div { min-width: 60px; }
  .count b { font-size: 1.5rem; }
  .rv-actions .btn { flex: 1 1 calc(50% - 8px); }
  .rv-actions .btn-primary { flex-basis: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
  .balloon { animation: rise 14s linear var(--delay) infinite !important; }
}
