/* Fonts are served from this site (no third-party requests). Licenses: public/fonts/OFL-*.txt */
@font-face{font-family:'Great Vibes';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/great-vibes-latin.woff2) format('woff2')}
@font-face{font-family:'Playfair Display';font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/playfair-display-latin.woff2) format('woff2')}

*{box-sizing:border-box}html,body{margin:0}
body{font-family:'Playfair Display',Georgia,serif;background:var(--bg);color:#2b2b2b}
a{color:var(--c3)}
.btn{display:inline-block;font:inherit;font-weight:700;padding:10px 18px;border-radius:6px;border:2px solid var(--c3);background:var(--c3);color:#fff;text-decoration:none;cursor:pointer}
.btn.sec{background:transparent;color:var(--c3)}
.btn:disabled{opacity:.6;cursor:wait}
input,select,textarea{font:inherit;font-size:16px;padding:8px 10px;border:1px solid #c9c9c9;border-radius:6px;background:#fff;width:100%}
label{display:grid;gap:4px;margin:10px 0}
[hidden]{display:none!important}
.lzno{margin:40px 0 24px;text-align:center;font:13px system-ui,sans-serif;color:#777}.lzno a{color:#777}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* ---------- Invitation: animated envelope (design from glizano/invitacion.app) ---------- */
html.inv,html.inv body{overflow-x:clip}
.wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;flex-direction:column}
#env{width:80vw;height:50vw;position:relative;perspective:1200px}
.front,.back{position:absolute;inset:0}
.back{border-radius:0 0 6px 6px;background:var(--c3);box-shadow:0 4px 20px rgba(0,0,0,.2);backface-visibility:hidden;color:var(--bg);display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:0 8%}
.back p{margin:.2em 0}.back .to{font-family:'Great Vibes',cursive;font-size:clamp(22px,6vw,34px)}
.fc{position:absolute;inset:0;backface-visibility:hidden;opacity:0;transform:rotateY(180deg);border-radius:0 0 6px 6px;background:var(--c3);box-shadow:0 4px 20px rgba(0,0,0,.2)}
.pocket{z-index:3;width:0;height:0;border-left:40vw solid var(--c2);border-right:40vw solid var(--c2);border-bottom:25vw solid var(--c1);border-top:25vw solid transparent;border-radius:0 0 6px 6px}
.flap{z-index:3;width:0;height:0;border-left:40vw solid transparent;border-right:40vw solid transparent;border-bottom:25vw solid transparent;border-top:28vw solid var(--c3);transform-origin:top}
.letter{z-index:2;position:absolute;left:4%;width:92%;height:90%;top:5%;border-radius:6px;background:#fff;box-shadow:0 2px 26px rgba(0,0,0,.12);text-align:center;display:flex;flex-direction:column;justify-content:center;padding:6% 8%;overflow:hidden}
.letter::before{content:"";position:absolute;inset:8px;border:1px solid var(--c1);border-radius:4px;pointer-events:none;opacity:.7}
.letter .kind{font-size:clamp(11px,2.6vw,15px);letter-spacing:.2em;text-transform:uppercase;color:var(--c3)}
.letter .names{font-family:'Great Vibes',cursive;font-size:clamp(28px,8vw,46px);line-height:1.1;margin:.3em 0;color:var(--c3)}
.letter .when{font-size:clamp(12px,3vw,16px)}.letter .when::first-letter{text-transform:uppercase}
.letter .orn{color:var(--c1);font-size:clamp(14px,3vw,20px);margin-bottom:.3em}
.letter .line{width:40%;height:1px;background:var(--c1);margin:.5em auto .6em}
.letter .more{margin-top:1em;opacity:0}
.ctrl{margin-top:24px}
.open .fc{transform:rotateY(0);transition:all 2s linear;opacity:1}
.open .back{transform:rotateY(180deg);transition:transform 2s linear}
.open .flap{transform:rotateX(-180deg);transition:transform .4s 2s,z-index .6s 2s;z-index:1}
#env.open{transform:translateY(55%);transition:transform 2s 3s}
.open .letter{transform:translateY(-100%);transition:transform 3s 4.2s,height 2.4s 4.6s;height:200%}
.open .letter .more{opacity:1;transition:opacity 1s 7.5s}
.open~.ctrl{opacity:0;pointer-events:none;transition:opacity 1s}
@media (min-width:640px){#env{width:420px;height:262.5px}.pocket{border-left:210px solid var(--c2);border-right:210px solid var(--c2);border-bottom:131.25px solid var(--c1);border-top:131.25px solid transparent}.flap{border-left:210px solid transparent;border-right:210px solid transparent;border-bottom:131.25px solid transparent;border-top:160px solid var(--c3)}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
.info{max-width:640px;margin:0 auto;padding:24px 16px 24px;text-align:center}
.info .kindline{letter-spacing:.2em;text-transform:uppercase;color:var(--c3)}
.info h1{font-family:'Great Vibes',cursive;font-weight:400;font-size:clamp(40px,11vw,64px);color:var(--c3);margin:.2em 0}
.info h2{font-family:'Great Vibes',cursive;font-weight:400;font-size:34px;color:var(--c3);margin:1.2em 0 .3em}
.cal{display:inline-block;width:130px;border-radius:8px;overflow:hidden;box-shadow:0 4px 14px rgba(0,0,0,.12);background:#fff}
.cal .m{background:var(--c1);color:#fff;padding:4px;text-transform:capitalize}.cal .d{font-size:48px;font-weight:700;line-height:1.1}.cal .w,.cal .t{padding:2px 0 6px;text-transform:capitalize}
.addcal{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:12px}.addcal .btn{font-size:14px;padding:8px 14px}
.cd{display:flex;justify-content:center;gap:12px;margin-top:16px}.cd div{min-width:56px}.cd b{display:block;font-size:26px;color:var(--c3)}
.photos{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x mandatory;padding:4px}.photos img{scroll-snap-align:center;height:340px;max-width:80vw;object-fit:cover;border-radius:8px}
.rsvp{background:#fff;border-radius:10px;padding:16px;text-align:left;box-shadow:0 2px 12px rgba(0,0,0,.08)}
.estado{min-height:1.2em}.estado.error{color:#b42318}.estado.ok{color:#1d7a3d;font-weight:700}
.credit{margin-top:24px;font-size:13px;color:#666}
.demo-bar{position:fixed;top:0;left:0;right:0;z-index:10;background:var(--c3);color:#fff;text-align:center;padding:8px 12px;font:600 14px system-ui,sans-serif}.demo-bar a{color:#fff}
.back-link{position:sticky;top:0;background:var(--bg);padding:10px 16px;text-align:left;border-bottom:1px solid rgba(0,0,0,.08)}
.sonido{position:fixed;right:14px;bottom:14px;z-index:11;width:46px;height:46px;border-radius:50%;border:0;background:var(--c3);color:#fff;font-size:20px;line-height:1;box-shadow:0 4px 14px rgba(0,0,0,.2);cursor:pointer}

/* ---------- Panel, home and legal pages ---------- */
.panel{max-width:820px;margin:0 auto;padding:16px 16px 24px;font-family:system-ui,sans-serif}
.panel h1,.panel h2{font-family:'Playfair Display',serif;color:var(--c3)}
.top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.brand{font-family:'Great Vibes',cursive;font-size:30px;color:var(--c3);text-decoration:none}
.card{background:#fff;border-radius:10px;padding:16px;margin:16px 0;box-shadow:0 2px 10px rgba(0,0,0,.06)}
.row2{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0 16px}
fieldset{border:0;padding:0;margin:0 0 8px}legend{font-family:'Playfair Display',serif;font-weight:700;color:var(--c3);font-size:18px;margin-top:12px}
table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:6px;border-bottom:1px solid #eee;vertical-align:top}
.tbl{overflow-x:auto}.muted{color:#666;font-size:14px}.ok{color:#1d7a3d}.aviso{background:#fff7e6;border:1px solid #f0d9a8;border-radius:8px;padding:10px 12px}
.err{background:#fdecea;border:1px solid #f5c2bd;border-radius:8px;padding:10px 12px;color:#8a1c12}
.stats{display:flex;gap:16px;flex-wrap:wrap}.stats div{background:var(--bg);border-radius:8px;padding:10px 14px}.stats b{display:block;font-size:24px;color:var(--c3)}
.link{word-break:break-all;font-size:13px}
.hint{font-size:13px;color:#666;font-weight:400}
.check{display:flex!important;gap:8px;align-items:flex-start}.check input{width:auto;margin-top:4px}
.kinds{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}
.tile{position:relative;margin:0;display:block}.tile input{position:absolute;opacity:0;pointer-events:none}
.tile span{display:block;padding:12px 8px;border:2px solid #e4e4e4;border-radius:10px;background:#fff;cursor:pointer;font-weight:600;text-align:center}
.tile input:checked+span{border-color:var(--c3);box-shadow:0 0 0 3px rgba(0,0,0,.08)}.tile input:focus-visible+span{outline:2px solid var(--c3);outline-offset:2px}
.swatches{display:flex;flex-wrap:wrap;gap:12px}
.sw{margin:0;display:block;position:relative}.sw input{position:absolute;opacity:0;pointer-events:none}
.sw span{display:flex;flex-direction:column;align-items:center;gap:4px;font-size:13px;cursor:pointer}
.sw i{display:block;width:42px;height:42px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 2px #ddd}
.sw input:checked+span i{box-shadow:0 0 0 3px var(--c3)}.sw input:focus-visible+span i{outline:2px solid #333;outline-offset:3px}
.inline{display:inline}
.danger{border-color:#b42318;color:#b42318}
.legal{max-width:720px;margin:0 auto;padding:24px 16px 24px;font-family:system-ui,sans-serif;line-height:1.6}
.legal h1,.legal h2{font-family:'Playfair Display',serif;color:var(--c3)}
.home{max-width:880px;margin:0 auto;padding:16px;font-family:system-ui,sans-serif}
.home .hero{padding:32px 0 16px}.home h1{font-family:'Playfair Display',serif;font-size:clamp(32px,6vw,52px);line-height:1.1;margin:0 0 12px}
.home h1 em{font-family:'Great Vibes',cursive;font-style:normal;font-weight:400;color:var(--c3);font-size:1.2em}
.home .lead{font-size:18px;color:#555;max-width:560px;line-height:1.5}
.home .ctas{display:flex;gap:10px;flex-wrap:wrap;margin:20px 0}
.home ul.feats{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));list-style:none;padding:0}
.home ul.feats li{background:#fff;border-radius:12px;padding:14px;line-height:1.4}
.home .gal{display:flex;gap:8px;flex-wrap:wrap}
