:root{--navy:#1a2c78;--navy-soft:#3c4c98;--cream:#eef0f6;--paper:#f7f8fc;--ink:#1a2c78;--line:#1a2c7833;--ok:#2c5d45;--bad:#7a2e2e;--sans:"Montserrat", system-ui, sans-serif;--script:"Great Vibes", cursive}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{font-family:var(--sans);color:var(--ink);background-color:var(--cream);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .1 0 0 0 0 .12 0 0 0 0 .28 0 0 0 .22 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E")}#root{justify-content:center;min-height:100dvh;display:flex}button,input,a{font:inherit}.sr-only{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.page{width:min(720px,100%);padding-top:max(clamp(16px, 4vw, 36px), env(safe-area-inset-top,0px));padding-bottom:max(48px, env(safe-area-inset-bottom,0px));padding-left:max(12px, env(safe-area-inset-left,0px));padding-right:max(12px, env(safe-area-inset-right,0px));box-sizing:border-box;margin-inline:auto}.invite{background:var(--paper);border:1px solid var(--navy);width:100%;margin-inline:auto;position:relative}.invite-inner{padding:4px clamp(18px,5.5vw,48px) clamp(36px,8vw,56px);position:relative}.hero-art{pointer-events:none;mix-blend-mode:multiply;width:100%;height:auto;display:block;-webkit-mask-image:linear-gradient(#000 0% 52%,#0000008c 72%,#0000 100%);mask-image:linear-gradient(#000 0% 52%,#0000008c 72%,#0000 100%)}.hero{text-align:center}.eyebrow{letter-spacing:.38em;text-transform:uppercase;margin:10px 0 0;font-size:11px;font-weight:500}.names{font-family:var(--script);flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;margin:22px 0 16px;font-size:clamp(42px,12vw,70px);font-weight:400;line-height:1.15;display:flex}.heart-mark{width:28px;height:24px;color:var(--navy);flex:none;margin-top:10px}.script-line{font-family:var(--sans);letter-spacing:.02em;margin:0;font-size:15px;font-weight:400}.lede{max-width:28em;font-family:var(--sans);color:var(--navy-soft);margin:18px auto 0;font-size:15px;font-weight:400;line-height:1.55}.rule{align-items:center;gap:12px;margin:28px 8px;display:flex}.rule span{background:var(--navy);opacity:.28;flex:1;height:1px}.rule .heart-mark{opacity:.85;width:16px;height:14px;margin:0}.uploader{gap:16px;padding:4px 4px 0;display:grid}.uploader.is-drag{outline:1px dashed var(--navy);outline-offset:6px}.upload-intro{text-align:left;grid-template-columns:auto 1fr;align-items:center;gap:14px;display:grid}.camera-mark{width:62px;height:50px;color:var(--navy)}.upload-kicker{font-family:var(--sans);margin:0 0 4px;font-size:15px;font-weight:500}.upload-copy{font-family:var(--sans);color:var(--navy-soft);margin:0;font-size:14px;line-height:1.45}.name-field{text-align:left;letter-spacing:.14em;text-transform:uppercase;gap:8px;font-size:11px;display:grid}.name-field input{border:0;border-bottom:1px solid var(--navy);width:100%;color:var(--ink);text-transform:none;letter-spacing:0;font-size:16px;font-family:var(--sans);background:0 0;padding:10px 2px 8px}.name-field input:focus{border-bottom-width:2px;outline:none}.upload-actions{gap:10px;display:grid}@media (width>=560px){.upload-actions{grid-template-columns:1.15fr .85fr}}.btn{border:1px solid var(--navy);min-height:48px;color:var(--navy);cursor:pointer;letter-spacing:.04em;background:0 0;justify-content:center;align-items:center;padding:12px 18px;text-decoration:none;display:inline-flex}.btn.primary{background:var(--navy);color:var(--paper)}.btn:disabled{opacity:.5;cursor:not-allowed}.progress,.note,.hint{font-family:var(--sans);margin:0;font-size:14px}.progress-bar{background:#1a2c781f;height:2px;margin-bottom:10px}.progress-bar span{background:var(--navy);height:100%;display:block}.note.success{color:var(--ok)}.note.error{color:var(--bad)}.closing{text-align:center;letter-spacing:.34em;text-transform:uppercase;margin:34px 0 0;font-size:12px;font-weight:500}.qr-card .invite-inner{text-align:center}.qr-figure{border:1px solid var(--navy);background:var(--paper);width:min(240px,70%);margin:22px auto;padding:10px}.qr-figure img{width:100%;display:block}.hint{margin-top:18px}@media print{body{background:#fff}.page{width:auto;padding:0}.name-field,.upload-actions,.hint{display:none}}
