@font-face{font-family:Vazirmatn;src:url(fonts/Vazirmatn.woff2) format("woff2");font-weight:100 900;font-display:swap}
:root{--navy:#0b1630;--navy2:#14264d;--gold:#c9a96b;--gold2:#e6d2a2;--cream:#f4ecdb;--ivory:#fbf7ee;--ink:#1a2338;--err:#a8352a;--ease:cubic-bezier(.22,.8,.24,1)}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font-family:Vazirmatn,Tahoma,"Segoe UI",sans-serif;background:var(--ivory);color:var(--ink);line-height:1.95;font-size:17px}
body.lock{overflow:hidden}
.wrap{max-width:40rem;margin:0 auto;padding:0 1.5rem}
.kicker{font-size:.9rem;letter-spacing:.04em;color:#8a6d34;font-weight:600;margin-bottom:1.4rem}

/* Hero */
.hero{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--cream);padding:3rem 1.2rem 5rem;position:relative;overflow:hidden;
 background:radial-gradient(ellipse at 50% 28%,#1b3366 0%,var(--navy) 62%),var(--navy)}
.hero::before{content:"";position:absolute;inset:0;opacity:.07;background:repeating-linear-gradient(90deg,var(--gold) 0 1px,transparent 1px 72px),repeating-linear-gradient(0deg,var(--gold) 0 1px,transparent 1px 72px);-webkit-mask:radial-gradient(circle at 50% 40%,#000,transparent 70%);mask:radial-gradient(circle at 50% 40%,#000,transparent 70%)}
.hero>*{position:relative}
.uni{font-size:.95rem;color:var(--gold2);letter-spacing:.06em;margin-bottom:1rem;animation:fade 1.4s var(--ease) both}
.emblem{width:min(68vw,330px);margin-bottom:.6rem}
.emblem svg{width:100%;height:auto;overflow:visible}
.tk{stroke:var(--gold);stroke-width:1.6;opacity:.55;stroke-linecap:round}.tk.gold{stroke:var(--gold2);stroke-width:3;opacity:1}
.ring{fill:none;stroke:var(--gold);stroke-width:1;stroke-dasharray:820;stroke-dashoffset:820;animation:draw 3s var(--ease) .2s forwards}
.r2{stroke-dasharray:4 7;opacity:.6;animation:fade 2s 1s both}
.orbit{fill:none;stroke:var(--gold);stroke-width:1;opacity:.45}.gold-dot{fill:var(--gold2)}
.num{font-family:Vazirmatn,Tahoma,sans-serif;font-weight:900;font-size:118px;fill:var(--cream);animation:fade 1.6s .5s both}
.spin{transform-origin:200px 200px;animation:rot 160s linear infinite}
.spin2{transform-origin:200px 200px;animation:rot 90s linear infinite reverse}
.title{font-weight:900;font-size:clamp(3.2rem,15vw,7.5rem);line-height:1.2;margin:.2rem 0 .8rem;letter-spacing:-.01em}
.title span{display:inline-block;animation:up 1.1s var(--ease) var(--d) both}
.title .g{background:linear-gradient(100deg,var(--gold2),var(--gold) 55%,#a98543);-webkit-background-clip:text;background-clip:text;color:transparent}
.sub{font-size:clamp(1rem,3.6vw,1.3rem);color:#dfe5f2;font-weight:300}
.tagline{margin-top:1.4rem;font-size:clamp(1.05rem,3.8vw,1.35rem);color:var(--gold2);font-weight:500;padding:.4rem 0;border-block:1px solid rgba(201,169,107,.35)}
.date{margin-top:1.4rem;font-size:1.2rem;font-weight:600;letter-spacing:.02em}
.rise{animation:up 1.1s var(--ease) var(--d) both}
.cue{position:absolute;bottom:1.4rem;left:50%;width:26px;height:42px;margin-left:-13px;border:1.5px solid var(--gold);border-radius:14px;opacity:.7}
.cue span{position:absolute;top:8px;left:50%;width:3px;height:8px;margin-left:-1.5px;border-radius:2px;background:var(--gold);animation:cue 2.2s ease-in-out infinite}

/* Letter */
.letter{padding:clamp(4rem,12vw,8rem) 0;background:var(--ivory)}
.letter p:not(.kicker){font-size:clamp(1.12rem,3.8vw,1.35rem);line-height:2.2;margin-bottom:1.6rem;text-wrap:pretty}
.letter p:nth-of-type(2){font-weight:600}
.info{background:var(--cream);padding:clamp(3rem,9vw,5.5rem) 0;border-block:1px solid rgba(201,169,107,.45)}
.info .wrap{max-width:60rem}
.info dl{display:grid;gap:0}
.info dl>div{padding:1.4rem 0;border-top:1px solid rgba(139,109,52,.3)}
.info dl>div:first-child{border-top:0}
dt{font-size:.9rem;color:#8a6d34;font-weight:600}
dd{font-size:clamp(1.3rem,5vw,1.8rem);font-weight:700;color:var(--navy);line-height:1.7}
dd small{font-size:.62em;font-weight:400;color:#4a556f}
@media(min-width:760px){.info dl{grid-template-columns:repeat(3,1fr)}.info dl>div{border-top:0;border-inline-start:1px solid rgba(139,109,52,.3);padding:.4rem 1.6rem}.info dl>div:first-child{border-inline-start:0}}

/* RSVP */
.rsvp{background:linear-gradient(180deg,var(--navy2),var(--navy));color:var(--cream);text-align:center;padding:clamp(4rem,12vw,7rem) 0 0}
.rsvp .kicker{color:var(--gold2);font-size:1.15rem;margin-bottom:2rem}
.fine{margin-top:1rem;font-size:.85rem;color:#aeb8d0}
.rsvp footer{margin-top:5rem;padding:1.4rem 1rem calc(1.4rem + env(safe-area-inset-bottom));font-size:.8rem;color:#8f9bb8;border-top:1px solid rgba(201,169,107,.2)}
.btn{display:inline-block;font:inherit;font-weight:700;font-size:1.1rem;color:var(--navy);background:linear-gradient(135deg,var(--gold2),var(--gold));border:0;border-radius:999px;padding:.85rem 2.2rem;cursor:pointer;min-height:52px;text-decoration:none;transition:transform .3s var(--ease),box-shadow .3s;box-shadow:0 8px 28px -10px rgba(201,169,107,.7)}
.btn:hover{transform:translateY(-2px)}.btn:active{transform:none}
.btn.big{font-size:1.3rem;padding:1.05rem 2.8rem}
.btn.ghost{background:transparent;color:var(--navy);border:1.5px solid var(--gold);box-shadow:none}
.btn.sm{min-height:44px;padding:.4rem 1.2rem;font-size:.95rem}
.btn[disabled]{opacity:.6;cursor:wait}
.fab{position:fixed;inset-inline:1rem;bottom:calc(1rem + env(safe-area-inset-bottom));z-index:5;font:inherit;font-weight:700;font-size:1.05rem;color:var(--navy);background:linear-gradient(135deg,var(--gold2),var(--gold));border:0;border-radius:999px;min-height:52px;box-shadow:0 10px 30px rgba(0,0,0,.35);transform:translateY(140%);transition:transform .5s var(--ease)}
.fab.show{transform:none}
@media(min-width:760px){.fab{display:none}}

/* Dialog */
dialog{border:0;padding:0;background:transparent;max-width:none;max-height:none;width:100%;height:100%;overflow:auto;margin:0}
dialog:not([open]){display:none}
dialog::backdrop{background:rgba(6,12,28,.78);backdrop-filter:blur(4px)}
dialog[open]{display:flex;align-items:flex-end;justify-content:center;animation:fade .4s both;position:fixed;inset:0;background:rgba(6,12,28,.78);z-index:20}
.sheet{position:relative;width:100%;max-width:30rem;background:var(--ivory);color:var(--ink);border-radius:26px 26px 0 0;padding:2.2rem 1.5rem calc(1.8rem + env(safe-area-inset-bottom));max-height:96svh;overflow:auto;border-top:3px solid var(--gold);animation:sheet .6s var(--ease) both}
@media(min-width:640px){dialog[open]{align-items:center}.sheet{border-radius:22px;padding:2.4rem 2.2rem;border:1px solid var(--gold)}}
.x{position:absolute;top:.6rem;inset-inline-start:.8rem;width:44px;height:44px;border:0;background:none;font-size:2rem;line-height:1;color:#6a7288;cursor:pointer}
.sheet h2{font-size:1.5rem;color:var(--navy);font-weight:800}
.lead{color:#4a556f;margin-bottom:1.2rem}
.fld{display:block;margin-bottom:1rem}
.fld span{display:flex;justify-content:space-between;font-weight:600;font-size:.95rem;margin-bottom:.25rem}
.fld i,.fld b{font-style:normal;font-weight:400;font-size:.78rem;color:#8a6d34}.fld b{color:#6a7288}
input{width:100%;font:inherit;font-size:1.05rem;padding:.75rem .9rem;border:1.5px solid #cdbf9d;border-radius:12px;background:#fff;color:var(--ink);min-height:50px;transition:border-color .2s,box-shadow .2s}
input:focus{outline:0;border-color:var(--gold);box-shadow:0 0 0 4px rgba(201,169,107,.28)}
input[aria-invalid=true]{border-color:var(--err)}
.fld em{display:block;color:var(--err);font-style:normal;font-size:.85rem;min-height:0}
.hp{position:absolute!important;left:-9999px;width:1px;height:1px;opacity:0}
.note{font-size:.84rem;color:#5b6580;margin:.4rem 0 1.1rem}
.alert{background:#f8e5e1;color:var(--err);border-radius:10px;padding:.6rem .9rem;margin-bottom:1rem;font-size:.92rem}
.sheet .btn{width:100%}
#done{text-align:center}
#done p{margin-top:.4rem}
.check{width:96px;height:96px;margin:.4rem auto 1rem;display:block}
.check circle{fill:none;stroke:var(--gold);stroke-width:3;stroke-dasharray:330;stroke-dashoffset:330;animation:draw 1.2s var(--ease) forwards}
.check path{fill:none;stroke:var(--navy);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:90;stroke-dashoffset:90;animation:draw .7s var(--ease) .9s forwards}
.code-l{margin-top:1.2rem!important;color:#6a7288;font-size:.9rem}
.code{font-size:2rem;font-weight:800;letter-spacing:.18em;color:var(--navy);background:var(--cream);border:1px dashed var(--gold);border-radius:12px;padding:.3rem 1rem;display:inline-block;margin-bottom:.6rem}
#done .btn{margin-top:.8rem}

.reveal{opacity:0;transform:translateY(26px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.reveal.in{opacity:1;transform:none}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes up{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:none}}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes rot{to{transform:rotate(360deg)}}
@keyframes cue{0%{opacity:0;transform:translateY(0)}40%{opacity:1}100%{opacity:0;transform:translateY(14px)}}
@keyframes sheet{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.ring{stroke-dashoffset:0}.reveal{opacity:1;transform:none}.check circle,.check path{stroke-dashoffset:0}}

/* Admin */
.admin{background:var(--ivory)}
.login{max-width:24rem;margin:12vh auto;padding:2rem 1.5rem;background:#fff;border:1px solid var(--gold);border-radius:20px}
.login h1{color:var(--navy)}.login .btn{width:100%;margin-top:.6rem}.muted{color:#6a7288;margin-bottom:1rem}
.bar{display:flex;justify-content:space-between;align-items:center;background:var(--navy);color:var(--cream);padding:.8rem 1.2rem}
.bar h1{font-size:1.2rem}.link{background:none;border:0;color:var(--gold2);font:inherit;cursor:pointer;min-height:44px}
.panel{max-width:70rem;margin:0 auto;padding:1.2rem}
.stat{display:flex;align-items:baseline;gap:.6rem;margin-bottom:1rem}.stat b{font-size:2.6rem;color:var(--navy)}
.search{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1rem}.search input{flex:1 1 14rem}
table{width:100%;border-collapse:collapse;background:#fff;border-radius:12px;overflow:hidden}
th,td{padding:.65rem .8rem;text-align:start;border-bottom:1px solid #eadfc6;font-size:.95rem}
th{background:var(--cream);color:var(--navy)}
.pager{display:flex;justify-content:center;gap:1.2rem;margin:1rem 0}.pager a,.muted a{color:#8a6d34}
@media(max-width:700px){thead{display:none}tr{display:block;border-bottom:6px solid var(--ivory)}td{display:flex;justify-content:space-between;border:0;padding:.3rem .8rem}td::before{content:attr(data-l);color:#6a7288}}
