:root{--bg:#faf6f1;--bg-soft:#f3ece2;--paper:#fff;--ink:#2a2421;--ink-soft:#6b5e54;--muted:#9a8c80;--line:#e6dccf;--accent:#8c6a4f;--accent-soft:#b89b80;--accent-bg:#8c6a4f14;--gold:#b89255;--rose:#b8666a;--green:#5e8a63;--bg-grad-1:#b8925514;--bg-grad-1-pos:0% 0%;--bg-grad-2:#b8666a0f;--bg-grad-2-pos:100% 100%;--bg-grad-3:transparent;--bg-grad-3-pos:50% 50%;--shadow:0 1px 2px #3a2a1e0a, 0 12px 32px -16px #3a2a1e2e;--col-radius:16px;--btn-radius:10px;--gift-radius:10px;--serif:"Cormorant Garamond", "Garamond", "Hoefler Text", "Times New Roman", serif;--sans:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--display:var(--serif);--event-type-style:italic;font:16px/1.55 var(--sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}:root.theme-kids-birthday{--bg:#fff5f5;--bg-soft:#ffe1e6;--paper:#fffaf6;--ink:#4a1a26;--ink-soft:#7d3a47;--muted:#c08a93;--line:#ffd1dd;--accent:#e8395a;--accent-soft:#ffb3c1;--accent-bg:#e8395a14;--gold:#ffd54f;--rose:#e8395a;--green:#5cb85c;--bg-grad-1:#e8395a2e;--bg-grad-1-pos:6% 14%;--bg-grad-2:#5cb85c29;--bg-grad-2-pos:94% 16%;--bg-grad-3:#ffd54f3d;--bg-grad-3-pos:82% 92%;--display:"Fredoka", "Quicksand", system-ui, sans-serif;--event-type-style:normal;--col-radius:28px;--btn-radius:999px;--gift-radius:20px;--shadow:0 2px 4px #e8395a14, 0 18px 40px -16px #e8395a59}:root.theme-kids-birthday body{background:radial-gradient(circle at 6% 14%, #e8395a2e, transparent 38%), radial-gradient(circle at 94% 16%, #5cb85c2e, transparent 38%), radial-gradient(circle at 82% 92%, #ffd54f42, transparent 40%), radial-gradient(circle at 14% 86%, #ffb3c15c, transparent 36%), radial-gradient(circle, #e8395a2e 1.6px, transparent 2.4px) 0 0 / 34px 34px, radial-gradient(circle, #e8395a2e 1.6px, transparent 2.4px) 17px 17px / 34px 34px, var(--bg)}:root.theme-birthday{--bg:#fdf7ec;--bg-soft:#f8edd2;--paper:#fff;--ink:#2a1f0d;--ink-soft:#6b5a3a;--muted:#a99877;--line:#ecdfc2;--accent:#b88838;--accent-soft:#d9b370;--accent-bg:#b888381a;--gold:#c89a3e;--rose:#b85558;--green:#6e8a3f;--bg-grad-1:#c89a3e1f;--bg-grad-1-pos:0% 10%;--bg-grad-2:#b8555814;--bg-grad-2-pos:100% 90%;--display:"Playfair Display", "Cormorant Garamond", serif}:root.theme-anniversary{--bg:#fbf3f2;--bg-soft:#f4e2e0;--paper:#fff;--ink:#2c1416;--ink-soft:#6f4347;--muted:#a07b7e;--line:#ecd6d4;--accent:#8b2a3a;--accent-soft:#c97a85;--accent-bg:#8b2a3a14;--gold:#b88838;--rose:#8b2a3a;--green:#6e7a3f;--bg-grad-1:#8b2a3a1a;--bg-grad-1-pos:0% 0%;--bg-grad-2:#b8883814;--bg-grad-2-pos:100% 100%}:root.theme-baby-shower{--bg:#f3faf5;--bg-soft:#e0f0e3;--paper:#fff;--ink:#1f3326;--ink-soft:#517361;--muted:#94a89a;--line:#d8eadd;--accent:#7eaa8a;--accent-soft:#b5d4be;--accent-bg:#7eaa8a1a;--gold:#efc678;--rose:#efa9b0;--green:#7eaa8a;--bg-grad-1:#7eaa8a29;--bg-grad-1-pos:5% 10%;--bg-grad-2:#efa9b024;--bg-grad-2-pos:95% 95%;--bg-grad-3:#efc6781f;--bg-grad-3-pos:85% 5%;--col-radius:22px;--btn-radius:14px}:root.theme-graduation{--bg:#f5f6fb;--bg-soft:#e3e6f1;--paper:#fff;--ink:#14213d;--ink-soft:#4a527d;--muted:#8b8fa6;--line:#d5d9e8;--accent:#14213d;--accent-soft:#6b75a3;--accent-bg:#14213d14;--gold:#c89a3e;--rose:#8b2a3a;--green:#4a7a4f;--bg-grad-1:#14213d14;--bg-grad-1-pos:0% 0%;--bg-grad-2:#c89a3e1f;--bg-grad-2-pos:100% 100%}:root.theme-engagement{--bg:#fdf3f3;--bg-soft:#f8dfe0;--paper:#fff;--ink:#2c1c1f;--ink-soft:#6f4a4f;--muted:#a98a8e;--line:#f1d8db;--accent:#c2737e;--accent-soft:#e8b8be;--accent-bg:#c2737e14;--gold:#d4a373;--rose:#c2737e;--green:#87a87a;--bg-grad-1:#c2737e24;--bg-grad-1-pos:0% 0%;--bg-grad-2:#d4a3731a;--bg-grad-2-pos:100% 100%}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:radial-gradient(circle at var(--bg-grad-1-pos), var(--bg-grad-1), transparent 40%), radial-gradient(circle at var(--bg-grad-2-pos), var(--bg-grad-2), transparent 40%), radial-gradient(circle at var(--bg-grad-3-pos), var(--bg-grad-3), transparent 42%), var(--bg);min-height:100svh;transition:background .4s,color .4s}#root{flex-direction:column;min-height:100svh;display:flex}h1,h2,h3{font-family:var(--display);color:var(--ink);letter-spacing:-.01em;margin:0;font-weight:500}p{margin:0}button{font-family:inherit}.page{flex:1;width:100%;max-width:1100px;margin:0 auto;padding:32px 28px 64px}.state-page{justify-content:center;align-items:center;display:flex}.state-card{text-align:center;background:var(--paper);border:1px solid var(--line);max-width:420px;box-shadow:var(--shadow);border-radius:12px;padding:48px 40px}.state-title{margin-bottom:8px;font-size:28px}.state-msg{color:var(--ink-soft)}.loader{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:32px;height:32px;animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.ribbon{justify-content:center;margin-bottom:24px;display:flex}.monogram{border:1px solid var(--accent-soft);width:56px;height:56px;font-family:var(--serif);letter-spacing:.05em;color:var(--accent);background:var(--paper);border-radius:50%;place-items:center;font-size:22px;display:grid}.layout{grid-template-columns:1fr 1fr;align-items:stretch;gap:28px;display:grid}.col{background:var(--paper);border:1px solid var(--line);border-radius:var(--col-radius);box-shadow:var(--shadow);padding:48px 40px}@media (width<=860px){.page{padding:24px 18px 48px}.layout{grid-template-columns:1fr;gap:20px}.col{padding:32px 24px}}.event-col{text-align:center;flex-direction:column;display:flex}.eyebrow{letter-spacing:.22em;text-transform:uppercase;color:var(--muted);margin-bottom:14px;font-size:12px}.event-type{font-size:44px;line-height:1.1;font-style:var(--event-type-style);color:var(--ink)}.divider{color:var(--accent-soft);justify-content:center;align-items:center;gap:12px;width:70%;margin:24px auto;display:flex}.divider .line{background:var(--line);flex:1;height:1px}.celebrant{font-family:var(--serif);color:var(--ink-soft);font-size:18px;font-style:italic}.celebrant-name{font-family:var(--serif);color:var(--ink);margin-top:4px;margin-bottom:32px;font-size:36px}.event-meta{gap:18px;margin:0 0 28px;display:grid}.event-meta>div{gap:4px;display:grid}.event-meta dt{letter-spacing:.2em;text-transform:uppercase;color:var(--muted);font-size:11px}.event-meta dd{font-family:var(--serif);color:var(--ink);margin:0;font-size:20px}.greeting{border-bottom:1px dashed var(--line);color:var(--ink-soft);font-style:italic;font-family:var(--display);margin:0 0 20px;padding-bottom:20px;font-size:18px;line-height:1.45}.guest-name{color:var(--accent);font-weight:500}.rsvp-col{flex-direction:column;display:flex}.section-title{margin-bottom:4px;font-size:28px}.section-title.sm{margin-bottom:4px;font-size:22px}.section-sub{color:var(--ink-soft);margin-bottom:20px;font-size:14px}.rsvp-buttons{grid-template-columns:1fr 1fr;gap:12px;margin-bottom:32px;display:grid}.rsvp-btn{background:var(--paper);border:1px solid var(--line);border-radius:var(--btn-radius);color:var(--ink);cursor:pointer;justify-content:center;align-items:center;gap:10px;padding:16px 14px;font-size:15px;font-weight:500;transition:border-color .18s,background .18s,color .18s,transform .18s;display:flex}.rsvp-btn:hover:not(:disabled){border-color:var(--accent-soft);background:var(--accent-bg)}.rsvp-btn:disabled{cursor:not-allowed;opacity:.7}.rsvp-btn.is-selected.yes{background:var(--green);border-color:var(--green);color:#fff}.rsvp-btn.is-selected.no{background:var(--rose);border-color:var(--rose);color:#fff}@media (width<=480px){.rsvp-buttons{grid-template-columns:1fr}}.rsvp-summary{border:1px solid var(--line);border-radius:var(--btn-radius);background:var(--paper);margin-bottom:32px;padding:20px 22px}.rsvp-summary.yes{border-color:var(--green)}.rsvp-summary.no{border-color:var(--rose)}.rsvp-summary .section-title{margin-bottom:16px;font-size:22px}.summary-list{gap:12px;margin:0 0 16px;display:grid}.summary-list>div{flex-direction:column;gap:2px;display:flex}.summary-list dt{letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);font-size:12px}.summary-list dd{color:var(--ink);margin:0;font-size:16px}.summary-list dd.response{align-items:center;gap:8px;font-weight:600;display:inline-flex}.summary-list dd.response.yes{color:var(--green)}.summary-list dd.response.no{color:var(--rose)}.contact-note{border-top:1px dashed var(--line);color:var(--ink-soft);margin:0;padding-top:12px;font-size:14px}.gift-section{border-top:1px dashed var(--line);margin-top:8px;padding-top:24px}.empty{color:var(--muted);padding:16px 0;font-style:italic}.gift-list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.gift-btn{text-align:left;background:var(--paper);border:1px solid var(--line);border-radius:var(--gift-radius);cursor:pointer;width:100%;color:var(--ink);align-items:flex-start;gap:14px;padding:14px 16px;transition:border-color .18s,background .18s,transform .18s;display:flex}.gift-btn:hover:not(:disabled){border-color:var(--accent-soft);background:var(--accent-bg);transform:translateY(-1px)}.gift-btn:disabled{cursor:not-allowed}.gift-mark{background:var(--bg-soft);width:28px;height:28px;color:var(--green);border:1px solid var(--line);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.gift.reserved .gift-mark{color:var(--muted);background:0 0}.gift.mine .gift-mark{background:var(--green);color:#fff;border-color:var(--green)}.gift-text{flex:1;gap:2px;min-width:0;display:grid}.gift-name{font-family:var(--display);color:var(--ink);font-size:20px}.gift.reserved:not(.mine) .gift-name{color:var(--muted);text-decoration:line-through}.gift-desc{color:var(--ink-soft);font-size:13px}.gift.reserved:not(.mine) .gift-desc{color:var(--muted)}.gift-tag{letter-spacing:.14em;text-transform:uppercase;color:var(--green);margin-top:4px;font-size:11px;font-weight:600;display:inline-block}.gift-tag.muted{color:var(--muted)}.gift.draft .gift-mark{background:var(--accent-bg);color:var(--accent);border-color:var(--accent-soft)}.gift.draft .gift-btn{border-color:var(--accent-soft);background:var(--accent-bg)}.gift-submit{flex-wrap:wrap;align-items:center;gap:16px;margin-top:16px;display:flex}.gift-submit .rsvp-btn{flex:1;min-width:220px}.link-btn{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;padding:8px 4px;font-size:14px;text-decoration:underline}.link-btn:hover:not(:disabled){color:var(--ink)}.link-btn:disabled{cursor:not-allowed;opacity:.6}.toast{background:var(--ink);color:#fff;box-shadow:var(--shadow);text-align:center;border-radius:999px;max-width:calc(100% - 32px);padding:12px 20px;font-size:14px;animation:.25s ease-out rise;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}.toast.err{background:var(--rose)}@keyframes rise{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}.page.theme-kids-birthday{position:relative}.page.theme-kids-birthday .monogram{background:radial-gradient(circle at 30% 32%, #ffffff73 0, transparent 22%), linear-gradient(150deg, #ff6680 0%, var(--accent) 65%, #c2204a 100%);color:#fff;letter-spacing:.02em;width:64px;height:64px;box-shadow:0 8px 18px -8px var(--accent), inset 0 -6px 0 #0000000f;border:3px solid #fff;font-weight:700;animation:3.6s ease-in-out infinite bob;position:relative}.page.theme-kids-birthday .monogram:before{content:"";background:radial-gradient(ellipse at 30% 80%, var(--green) 0 60%, transparent 62%), radial-gradient(ellipse at 70% 80%, var(--green) 0 60%, transparent 62%);background-position:0 0,100% 0;background-repeat:no-repeat;background-size:60% 100%,60% 100%;width:22px;height:14px;position:absolute;top:-10px;left:50%;transform:translate(-50%)rotate(-6deg)}.page.theme-kids-birthday .event-type{background:linear-gradient(135deg, var(--accent) 0%, #ff7a8a 80%);color:#0000;text-shadow:none;-webkit-background-clip:text;background-clip:text;font-weight:700}.page.theme-kids-birthday .celebrant-name{color:var(--accent);font-weight:600}.page.theme-kids-birthday .col{border:2px solid var(--line);position:relative;overflow:visible}.page.theme-kids-birthday .col:before{content:"";background-image:radial-gradient(circle, var(--accent) 0 4px, transparent 5px);opacity:.55;background-repeat:repeat-x;background-size:18px 14px;height:14px;position:absolute;top:-10px;left:24px;right:24px}.page.theme-kids-birthday .gift-btn{border:2px solid var(--line)}.page.theme-kids-birthday .gift-btn:hover:not(:disabled){border-color:var(--accent);transform:translateY(-2px)rotate(-.5deg)}.page.theme-kids-birthday .rsvp-btn{border:2px solid var(--line);font-weight:600}.page.theme-kids-birthday .rsvp-btn:hover:not(:disabled){border-color:var(--accent);transform:translateY(-2px)}.page.theme-kids-birthday .rsvp-btn.is-selected.yes{background:linear-gradient(135deg, #6fce6f, var(--green));border-color:var(--green)}.page.theme-kids-birthday .rsvp-btn.is-selected.no{background:linear-gradient(135deg, #ff7a8a, var(--accent));border-color:var(--accent)}.page.theme-kids-birthday .divider svg{animation:3s ease-in-out infinite berry-bob}.page.theme-kids-birthday .gift-mark{border-width:2px}.page.theme-kids-birthday .greeting{border-top-style:dotted}.page.theme-kids-birthday .eyebrow{color:var(--accent);font-weight:600}.page.theme-kids-birthday .event-meta dd{font-weight:500}.berry-confetti{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.berry-float{filter:drop-shadow(0 4px 10px #e8395a2e);animation:6s ease-in-out infinite berry-drift;display:block;position:absolute}.berry-float:nth-child(odd){animation-duration:7.5s}.page.theme-kids-birthday .layout,.page.theme-kids-birthday .ribbon{z-index:1;position:relative}@keyframes berry-bob{0%,to{transform:translateY(0)rotate(-3deg)}50%{transform:translateY(-3px)rotate(3deg)}}@keyframes berry-drift{0%,to{transform:translateY(0) rotate(var(--r,0deg))}50%{transform:translateY(-12px) rotate(var(--r,0deg))}}.page.theme-baby-shower .monogram{border-color:var(--accent);background:var(--bg-soft)}.page.theme-graduation .monogram{background:var(--accent);color:var(--gold);border-color:var(--gold)}.page.theme-anniversary .monogram,.page.theme-engagement .monogram{background:var(--paper);color:var(--accent);border-color:var(--accent-soft)}.page.theme-birthday .monogram{background:var(--paper);color:var(--accent);border-color:var(--gold)}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}
