:root{--ink:#2a2018;--ink-2:#1f1812;--accent:#c9a24e;--ice:#d9dde3;--gold:#e3c27a;--text:#f6efe4;--muted:#cbbda8;--glass:#16110c85;--line:#e8d6b43d;--serif:"Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;--sans:"Avenir Next", "Segoe UI", system-ui, sans-serif;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);color:var(--text);background:var(--ink);font:16px/1.55 var(--sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-padding-top:env(safe-area-inset-top,0px)}*,:before,:after{box-sizing:inherit}html{scroll-behavior:smooth}body{min-width:320px;color:var(--text);font-family:var(--sans);-webkit-tap-highlight-color:transparent;background:#2a2018;margin:0;font-weight:300;overflow-x:hidden}body.locked{overflow:hidden}button,input,textarea,fieldset,a{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--gold);outline-offset:3px;border-radius:6px}.bg{z-index:0;pointer-events:none;background:radial-gradient(110% 55% at 50% 14%,#ffe2a08c,#ffe2a000 72%),radial-gradient(80% 40% at 80% 85%,#c8ced82e,#c8ced800 70%),linear-gradient(170deg,#4a3520 0%,#73552e 24%,#a07c3e 44%,#8e8068 63%,#6c6e73 82%,#45474d 100%);position:fixed;inset:0}#webgl{z-index:0;pointer-events:none;width:100%;height:100%;display:block;position:fixed;inset:0}.scene-failed .dates,.scene-failed .names,.scene-failed .hint,.scene-failed #lines p:first-child{opacity:1}main{z-index:1;position:relative}.skip{z-index:5;top:calc(14px + env(safe-area-inset-top,0px));border:1px solid var(--line);color:var(--text);letter-spacing:.02em;-webkit-backdrop-filter:blur(10px);background:#16110c80;border-radius:999px;padding:8px 16px;font-size:14px;text-decoration:none;position:fixed;right:16px}#hero,.sticky{text-shadow:0 1px 14px #28180880,0 1px 2px #28180859}#hero{text-align:center;flex-direction:column;justify-content:flex-end;align-items:center;min-height:100svh;margin-bottom:120svh;padding:0 24px 11svh;display:flex}.dates{color:var(--ice);font-family:var(--serif);opacity:0;margin:0 0 14px;font-size:19px;font-style:italic}.title{font-family:var(--serif);letter-spacing:-.02em;perspective:600px;margin:0;font-size:clamp(76px,22vw,190px);font-weight:300;line-height:.9}.title-sub{color:var(--gold);font-family:var(--serif);perspective:600px;margin:4px 0 6px;font-size:clamp(34px,8vw,64px);font-style:italic;font-weight:300}.names{color:var(--text);letter-spacing:.1em;opacity:0;margin:0;font-size:19px}.names strong{color:#fff6e0;font-weight:600}.names .et{color:var(--gold);font-family:var(--serif);letter-spacing:0;padding:0 .2em;font-style:italic;font-weight:300}.word{white-space:nowrap;display:inline-block}.char{will-change:transform;display:inline-block}.hint{color:var(--text);letter-spacing:.04em;opacity:0;margin-top:34px;font-size:14px;font-weight:600}.hint span{background:linear-gradient(var(--gold), transparent);width:1px;height:34px;margin:10px auto 0;animation:2.2s ease-in-out infinite drip;display:block}@keyframes drip{0%{transform-origin:top;transform:scaleY(0)}50%{transform-origin:top;transform:scaleY(1)}51%{transform-origin:bottom}to{transform-origin:bottom;transform:scaleY(0)}}.stage{position:relative}#histoire{height:100svh}html.story-lock,html.story-lock body{overscroll-behavior:none;overflow:hidden}html.story-lock body{touch-action:none}#souvenirs{height:540svh}.sticky{text-align:center;flex-direction:column;justify-content:flex-end;align-items:center;height:100svh;padding:0 24px 12svh;display:flex;position:sticky;top:0}.year{filter:drop-shadow(0 2px 10px #28180873);text-shadow:none;color:#0000;font-family:var(--serif);font-variant-numeric:lining-nums tabular-nums;letter-spacing:-.03em;background:linear-gradient(#fff6e0 15%,#e3c27a 55%,#c0c4cc);-webkit-background-clip:text;background-clip:text;font-size:clamp(88px,26vw,220px);font-weight:300;line-height:1}.lines{width:min(560px,100%);height:3.4em;font-family:var(--serif);font-size:clamp(22px,5.4vw,32px);font-style:italic;position:relative}.lines p{opacity:0;margin:0;position:absolute;inset:0}.story-dots{justify-content:center;align-items:center;gap:9px;margin-top:18px;display:flex}.story-dots span{background:#f6efe447;border-radius:6px;width:7px;height:7px;transition:width .45s,background .45s}.story-dots span.done{background:#e3c27a99}.story-dots span.on{background:var(--gold);width:26px}.story-hint{min-height:1.3em;color:var(--muted);letter-spacing:.02em;margin:14px 0 0;font-size:13px}.story-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.story-skip[hidden]{display:none}.story-skip{border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#16110c66;border-radius:999px;margin-top:10px;padding:8px 16px;font-size:13px}.souv-title{justify-content:flex-start;padding-top:14svh}.souv-title h2{font-family:var(--serif);margin:0;font-size:clamp(34px,8vw,64px);font-weight:300;line-height:1.05}.souv-title>p{color:var(--muted);margin:10px 0 0;font-size:15px}.souv-title>p br{display:block}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}footer{color:var(--muted);font-family:var(--serif);text-align:center;padding:4svh 20px 10svh;font-size:18px;font-style:italic}.panel{border:1px solid var(--line);background:var(--glass);-webkit-backdrop-filter:blur(18px)saturate(1.2);border-radius:28px;width:min(560px,100%);margin:0 auto;padding:36px 28px;box-shadow:0 20px 60px #00000040}#invitation,#rsvp,#livre-or{padding:14svh 18px}#livre-or{padding-top:0}#invitation{align-items:center;min-height:100svh;display:flex}.panel h2{font-family:var(--serif);text-align:center;margin:0 0 8px;font-size:clamp(34px,7.5vw,50px);font-weight:300;line-height:1.05}.lede{color:#e6d9c4;text-align:center;margin:0 0 28px;font-size:16px;font-weight:400}.details{gap:0;margin:0;display:grid}.details div{border-top:1px solid var(--line);grid-template-columns:92px 1fr;gap:14px;padding:16px 0;display:grid}.details dt{color:var(--gold);font-family:var(--serif);font-size:19px;font-style:italic}.details dd{margin:0;font-size:16px}.details dd small{color:#efe3cf;margin-top:2px;font-size:15px;font-weight:500;display:block}.field{margin:0 0 22px;display:block}.field>span,.guest-name>span{color:var(--muted);margin-bottom:8px;font-size:14px;display:block}.field input{border:1px solid var(--line);background:#0f0b0873;border-radius:14px;outline:none;width:100%;padding:14px 16px;font-size:16px}.field textarea{border:1px solid var(--line);width:100%;min-height:9em;font-family:var(--serif);resize:vertical;background:#0f0b0873;border-radius:14px;outline:none;padding:14px 16px;font-size:18px;line-height:1.5;display:block}.field input:focus,.field textarea:focus{border-color:var(--gold)}.field-count{color:var(--muted);text-align:right;margin-top:6px;font-size:13px;display:block}.presence{border:0;grid-template-columns:1fr 1fr;gap:10px;margin:0 0 24px;padding:0;display:grid}.presence legend{color:var(--muted);margin-bottom:8px;font-size:14px}.pres{border:1px solid var(--line);cursor:pointer;text-align:left;background:0 0;border-radius:16px;padding:16px 12px;font-size:15px;line-height:1.3;transition:background .2s,border-color .2s}.pres strong{font-family:var(--serif);margin-bottom:2px;font-size:21px;font-weight:500;display:block}.pres[aria-pressed=true]{border-color:var(--gold);background:#e3c27a1f}.stepper{border:1px solid var(--line);border-radius:999px;align-items:center;display:inline-flex}.stepper button{cursor:pointer;background:0 0;border:0;width:46px;height:46px;font-size:22px}.stepper button:disabled{opacity:.4;cursor:not-allowed}.stepper output{min-width:36px;font-family:var(--serif);text-align:center;font-size:26px}.note-drinks{border:1px solid #e3c27a99;border-left:5px solid var(--gold);background:#e3c27a26;border-radius:18px;align-items:flex-start;gap:14px;margin:0 0 8px;padding:16px 18px;animation:2.2s ease-in-out 3 notePulse;display:flex}.note-drinks .ic{background:var(--gold);color:#1f1a10;border-radius:50%;flex:none;place-items:center;width:28px;height:28px;margin-top:1px;font-size:17px;font-weight:600;line-height:1;display:grid}.note-drinks p{color:var(--text);margin:0;font-size:16px;line-height:1.45}.note-drinks b{color:#fff6e0;margin-bottom:3px;font-size:17px;font-weight:600;display:block}@keyframes notePulse{0%,to{box-shadow:0 0 #e3c27a00}50%{box-shadow:0 0 0 7px #e3c27a38}}.drink-label{color:var(--text);margin:2px 0 8px;font-size:14px;font-weight:500}.drink-label span{color:var(--gold);margin-left:6px;font-size:13px;font-weight:400}.guest{border-top:1px solid var(--line);padding:18px 0 6px}.guest.missing{outline-offset:6px;border-radius:14px;outline:2px solid #ffb4a8}.guest-name input{border:0;border-bottom:1px solid var(--line);width:100%;font-family:var(--serif);background:0 0;outline:none;margin-bottom:12px;padding:6px 0 8px;font-size:21px}.guest-name input:focus{border-bottom-color:var(--gold)}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--line);cursor:pointer;background:#0f0b0859;border-radius:999px;padding:8px 14px;font-size:14px;transition:background .2s,border-color .2s}.chip[aria-pressed=true]{color:#1f1a10;background:linear-gradient(135deg,#f1d999,#c9a24e);border-color:#f1d999;box-shadow:0 0 18px #e3c27a73}.notes-field{margin-top:18px}.cta,.btn-ghost{border:1px solid var(--line);text-align:center;cursor:pointer;border-radius:999px;width:100%;margin-top:10px;padding:16px;text-decoration:none;display:block}.cta{color:#1f1a10;letter-spacing:.02em;background:linear-gradient(135deg,#f1d999,#c9a24e 50%,#9c7224);border:0;margin-top:18px;font-size:17px;font-weight:500}.btn-ghost{background:0 0;font-size:15px}.err,.storage-warning,.invite-status{color:#ffb4a8;text-align:center;min-height:1.3em;margin:10px 0 0;font-size:14px}.storage-warning{color:var(--gold)}.invite-status{color:var(--muted);margin:0 0 20px}.invite-status.guestbook-sent{color:#fff6e0;background:#e3c27a26;border:1px solid #e3c27a99;border-radius:14px;padding:12px 16px;font-size:16px;font-weight:600;animation:.9s cubic-bezier(.28,.84,.42,1) sentBounce}@keyframes sentBounce{0%{opacity:0;transform:translateY(-14px)scale(.92)}45%{opacity:1;transform:translateY(0)scale(1.06)}65%{transform:translateY(-5px)scale(.98)}82%{transform:translateY(0)scale(1.02)}to{transform:translateY(0)scale(1)}}.again{color:var(--muted);text-align:center;margin:0 0 22px;font-size:15px}.again button{color:var(--gold);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.confirm-dialog{width:100%;max-width:none;height:100%;max-height:none;padding:calc(24px + env(safe-area-inset-top,0px)) 18px calc(24px + env(safe-area-inset-bottom,0px));color:var(--text);background:radial-gradient(at 50% 30%,#1e17101a,#1e1710f5 70%);border:0;margin:0;overflow-y:auto}.confirm-dialog::backdrop{-webkit-backdrop-filter:blur(8px);background:#1c150fe6}.confirm-dialog #webgl{z-index:0;position:fixed}.confirm-card{z-index:1;text-align:center;width:min(440px,100%);margin:6svh auto;position:relative}.photo-viewer{width:100%;max-width:none;height:100%;max-height:none;padding:calc(64px + env(safe-area-inset-top,0px)) 16px calc(24px + env(safe-area-inset-bottom,0px));color:var(--text);background:#18120ded;border:0;place-items:center;margin:0;display:grid;position:fixed;inset:0;overflow-y:auto}.photo-viewer:not([open]){display:none}.photo-viewer::backdrop{-webkit-backdrop-filter:blur(10px);background:#18120de6}.viewer-content{width:min(560px,100%)}.viewer-figure{margin:0}.viewer-image{object-fit:contain;width:100%;max-height:62svh;box-shadow:0 30px 70px #0000008c, 0 0 0 1px var(--line);-webkit-user-select:none;user-select:none;-webkit-user-drag:none;touch-action:pan-y;border-radius:18px;display:block}.viewer-caption{flex-wrap:wrap;align-items:baseline;gap:12px;margin-top:16px;display:flex}.viewer-caption strong{color:var(--gold);font-family:var(--serif);font-size:36px;font-weight:300;line-height:1}.viewer-caption span{font-family:var(--serif);font-size:22px;font-style:italic}.viewer-caption small{color:var(--muted);margin-left:auto;font-size:14px}.viewer-navigation{grid-template-columns:1fr 1fr;gap:10px;margin-top:18px;display:grid}.viewer-navigation button,.viewer-close{border:1px solid var(--line);color:var(--text);cursor:pointer;background:#1e1812b3;border-radius:999px;font-size:15px}.viewer-navigation button{min-height:48px;padding:12px}.viewer-close{z-index:1;top:calc(14px + env(safe-area-inset-top,0px));min-height:44px;padding:10px 18px;position:fixed;right:16px}.confirm-card h2{font-family:var(--serif);margin:0;font-size:clamp(34px,8vw,46px);font-weight:300;line-height:1.05}.confirm-card .lede{margin:8px 0 22px}.ticket-download{-webkit-touch-callout:default;border-radius:22px;width:min(340px,100%);margin:0 auto 10px;display:block;box-shadow:0 0 60px #e3c27a59,0 20px 50px #00000073}.ticket-image{border-radius:22px;width:100%;height:auto;display:block}.token{color:var(--ice);font-family:var(--serif);margin:0 0 18px;font-size:18px;font-style:italic}.summary{text-align:left;margin:0 0 18px;padding:0;list-style:none}.summary li{border-top:1px solid var(--line);justify-content:space-between;gap:12px;padding:10px 0;font-size:15px;display:flex}.summary li span:first-child,.note{color:var(--muted)}.note{margin:0 0 18px;font-size:14px}.ticket-save{text-decoration:none}.music-toggle{z-index:6;bottom:calc(16px + env(safe-area-inset-bottom,0px));border:1px solid var(--line);min-height:44px;color:var(--text);cursor:pointer;-webkit-backdrop-filter:blur(10px);background:#16110c99;border-radius:999px;align-items:center;gap:10px;padding:8px 16px 8px 14px;font-size:14px;display:inline-flex;position:fixed;left:16px}.music-toggle.is-playing{border-color:#e3c27a99}.music-bars{align-items:flex-end;gap:3px;height:16px;display:inline-flex}.music-bars i{background:var(--gold);border-radius:2px;width:3px;height:4px;display:block}.music-toggle:not(.is-playing) .music-bars i{background:var(--muted)}.music-toggle.is-playing .music-bars i{animation:1.1s ease-in-out infinite musicBar}.music-toggle.is-playing .music-bars i:nth-child(2){animation-delay:-.35s}.music-toggle.is-playing .music-bars i:nth-child(3){animation-delay:-.7s}.music-toggle.is-playing .music-bars i:nth-child(4){animation-delay:-.2s}@keyframes musicBar{0%,to{height:4px}50%{height:16px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.hint span,.music-toggle.is-playing .music-bars i,.note-drinks,.invite-status.guestbook-sent{animation:none}}@media (width<=420px){.panel{padding:30px 20px}.details div{grid-template-columns:72px 1fr;gap:10px}.chip{padding:8px 11px}}
