const{useState,useEffect,useRef,useMemo}=React;const TWEAK_DEFAULTS={brideName:"\u10D7\u10D4\u10D0",groomName:"\u10D2\u10D8\u10DD",weddingISO:"2027-08-29T17:00:00+04:00",venue:"\u10E1\u10D0\u10E1\u10E2\u10E3\u10DB\u10E0\u10DD",venueDetail:"\u10D7\u10D1\u10D8\u10DA\u10D8\u10E1\u10D8",starDensity:1,parallax:1,ornaments:true,palette:"silver"};function useReveal(){useEffect(()=>{const io=new IntersectionObserver(entries=>{for(const e of entries){if(e.isIntersecting){e.target.classList.add("in");io.unobserve(e.target)}}},{threshold:.18});document.querySelectorAll(".reveal").forEach(el=>io.observe(el));return()=>io.disconnect()},[])}function readGuestName(){try{const raw=new URLSearchParams(window.location.search).get("name")||new URLSearchParams(window.location.search).get("guest")||"";return raw.replace(/\s+/g," ").trim().slice(0,48)}catch(e){return""}}const GUEST_NAME="";const REDUCED_MOTION=typeof window!=="undefined"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;function useDriftParallax(){useEffect(()=>{if(REDUCED_MOTION)return;const items=Array.from(document.querySelectorAll("[data-drift]")).map(el=>({el,amount:parseFloat(el.getAttribute("data-drift"))||0}));let queued=false;function update(){queued=false;const vh=window.innerHeight;for(const it of items){const rect=it.el.getBoundingClientRect();const progress=(rect.top+rect.height/2-vh/2)/vh;if(progress>1.6||progress<-1.6)continue;it.el.style.setProperty("--drift-y",`${(progress*it.amount).toFixed(1)}px`)}}function onScroll(){if(queued)return;queued=true;requestAnimationFrame(update)}update();window.addEventListener("scroll",onScroll,{passive:true});window.addEventListener("resize",onScroll);return()=>{window.removeEventListener("scroll",onScroll);window.removeEventListener("resize",onScroll)}},[])}function Sheet({className="",deep=false,drift=12,glows=[],style,children}){return<section className={`sheet ${deep?"sheet--deep":""} ${className}`}style={style}>
      {glows.map((g,i)=><div key={i}className={`glow ${g}`}data-drift={i%2===0?-drift*1.8:drift*1.6}aria-hidden="true"/>)}
      <div className="sheet__body"data-drift={drift}>
        {children}
      </div>
    </section>}function formatDate(iso){const d=new Date(iso);const day=String(d.getDate()).padStart(2,"0");const month=String(d.getMonth()+1).padStart(2,"0");const year=d.getFullYear();return`${day} \xB7 ${month} \xB7 ${year}`}function useCountdown(iso){const target=new Date(iso).getTime();const[now,setNow]=useState(Date.now());useEffect(()=>{const id=setInterval(()=>setNow(Date.now()),1e3);return()=>clearInterval(id)},[]);const diff=Math.max(0,target-now);const d=Math.floor(diff/864e5);const h=Math.floor(diff%864e5/36e5);const m=Math.floor(diff%36e5/6e4);const s=Math.floor(diff%6e4/1e3);return{d,h,m,s}}function NamesConstellation({first,second}){const W=320,H=200;const leftStars=[[60,30],[40,60],[80,85],[50,120],[85,150]];const rightStars=[[240,50],[270,85],[240,115],[275,145],[225,170]];const bridge=[160,100];const leftLines=[[0,1],[1,2],[2,3],[3,4]];const rightLines=[[0,1],[1,2],[2,3],[3,4]];return<svg className="names-svg"viewBox={`0 0 ${W} ${H}`}>
      {leftLines.map(([a,b],i)=><line key={`l${i}`}className="line"x1={leftStars[a][0]}y1={leftStars[a][1]}x2={leftStars[b][0]}y2={leftStars[b][1]}/>)}
      <line className="line"x1={leftStars[2][0]}y1={leftStars[2][1]}x2={bridge[0]}y2={bridge[1]}style={{animationDelay:"1.2s"}}/>
      <line className="line"x1={bridge[0]}y1={bridge[1]}x2={rightStars[1][0]}y2={rightStars[1][1]}style={{animationDelay:"1.4s"}}/>
      {rightLines.map(([a,b],i)=><line key={`r${i}`}className="line"x1={rightStars[a][0]}y1={rightStars[a][1]}x2={rightStars[b][0]}y2={rightStars[b][1]}/>)}
      {leftStars.map(([x,y],i)=><circle key={`ls${i}`}className="star"cx={x}cy={y}r={i===2?2:1.6}style={{animationDelay:`${i*.22}s`}}/>)}
      {rightStars.map(([x,y],i)=><circle key={`rs${i}`}className="star"cx={x}cy={y}r={i===1?2:1.6}style={{animationDelay:`${1+i*.22}s`}}/>)}
      <g style={{transformOrigin:`${bridge[0]}px ${bridge[1]}px`}}>
        <circle className="star"cx={bridge[0]}cy={bridge[1]}r="3"style={{animationDelay:"3.2s"}}/>
        <g className="star"style={{animationDelay:"3.2s"}}>
          <line x1={bridge[0]-12}y1={bridge[1]}x2={bridge[0]+12}y2={bridge[1]}stroke="rgba(255,255,255,.7)"strokeWidth=".4"/>
          <line x1={bridge[0]}y1={bridge[1]-12}x2={bridge[0]}y2={bridge[1]+12}stroke="rgba(255,255,255,.7)"strokeWidth=".4"/>
        </g>
      </g>
      <text x="76"y="195"textAnchor="middle"style={{font:'500 24px "Noto Serif Georgian", serif',letterSpacing:"0.06em",fill:"var(--silver-bright)"}}>
        {first}
      </text>
      <text x="250"y="195"textAnchor="middle"style={{font:'500 24px "Noto Serif Georgian", serif',letterSpacing:"0.06em",fill:"var(--silver-bright)"}}>
        {second}
      </text>
      <text x="160"y="195"textAnchor="middle"style={{font:'300 22px "Cormorant Garamond", serif',fill:"var(--ink-dim)"}}>
        &amp;
      </text>
    </svg>}function Hero({t}){const[phase,setPhase]=useState("black");const[videoGone,setVideoGone]=useState(false);const videoRef=useRef(null);useEffect(()=>{let safety=null;let drop=null;let settled=false;function settle(){if(settled)return;settled=true;if(safety)clearTimeout(safety);setPhase("settled");window.scrollTo(0,0);if(window.releaseScroll)window.releaseScroll();drop=setTimeout(()=>setVideoGone(true),1800)}function begin(){const v2=videoRef.current;if(REDUCED_MOTION||!v2){settle();return}setPhase("video");v2.muted=true;try{v2.currentTime=0}catch(e){}const p=v2.play();if(p&&typeof p.catch==="function"){p.catch(settle)}safety=setTimeout(settle,12e3)}const v=videoRef.current;if(v){v.addEventListener("ended",settle);v.addEventListener("error",settle)}if(window.__introDone)begin();else window.addEventListener("intro:done",begin,{once:true});return()=>{if(safety)clearTimeout(safety);if(drop)clearTimeout(drop);window.removeEventListener("intro:done",begin);if(v){v.removeEventListener("ended",settle);v.removeEventListener("error",settle)}}},[]);return<section className={`hero is-${phase}${videoGone?" is-gone":""}`}style={{paddingTop:"90px",paddingBottom:"80px",display:"flex",flexDirection:"column",justifyContent:"center"}}>
      <div className="hero-media"aria-hidden="true">
        <video className="hero-video"ref={videoRef}src="hero.mp4"playsInline webkit-playsinline="true"muted preload="auto"/>
        <img className="hero-still"src="hero.jpg"alt=""/>
      </div>
      <div className="hero-scrim"aria-hidden="true"/>

      <div className={`hero-content${GUEST_NAME?" has-greet":""}`}>
      {t.ornaments&&<>
          <CornerOrnament className="corner tl"/>
          <CornerOrnament className="corner tr"/>
        </>}
      <div className="reveal"style={{textAlign:"center"}}>
        {GUEST_NAME&&<div className="guest-greet">ძვირფასო {GUEST_NAME}</div>}
        <div className="eyebrow"style={{marginBottom:"14px"}}>
          ✦ &nbsp;გეპატიჟებით ქორწილში &nbsp; ✦
        </div>
      </div>
      <div className="reveal"style={{marginTop:"24px"}}>
        <NamesConstellation first={t.brideName}second={t.groomName}/>
      </div>
      <div className="reveal"style={{textAlign:"center",marginTop:"34px"}}>
        <div className="hr"style={{padding:"0 36px"}}>
          <StarGlyph size={10}/>
        </div>
        <div className="display"style={{marginTop:"22px",fontSize:"15px",letterSpacing:"0.42em"}}>
          {formatDate(t.weddingISO)}
        </div>
        <div className="mono"style={{marginTop:"14px",fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.08em"}}>
          {t.venueDetail}
        </div>
      </div>
      <div className="reveal"style={{textAlign:"center",marginTop:"56px"}}>
        <div style={{display:"flex",alignItems:"center",justifyContent:"center"}}>
          <span style={{width:"1px",height:"30px",background:"var(--hairline-strong)",display:"inline-block"}}/>
        </div>
        <div className="eyebrow"style={{marginTop:"10px",letterSpacing:"0.5em"}}>
          ჩამოსქროლეთ
        </div>
      </div>
      </div>
    </section>}function Countdown({t}){const c=useCountdown(t.weddingISO);return<Sheet drift={14}glows={["glow--tl glow--cool","glow--br glow--warm"]}style={{paddingTop:"70px",paddingBottom:"60px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <div className="eyebrow">ქორწილამდე დარჩა</div>
        <div style={{height:"8px"}}/>
        <DividerOrnament/>
      </div>
      <div className="reveal countdown"style={{marginTop:"22px"}}>
        {[["\u10D3\u10E6\u10D4",c.d],["\u10E1\u10D0\u10D0\u10D7\u10D8",c.h],["\u10EC\u10E3\u10D7\u10D8",c.m],["\u10EC\u10D0\u10DB\u10D8",c.s]].map(([l,v])=><div className="cell"key={l}>
            <div className="num">{String(v).padStart(2,"0")}</div>
            <div className="lbl">{l}</div>
          </div>)}
      </div>
    </Sheet>}function Invocation({t}){return<Sheet deep drift={10}glows={["glow--tr glow--warm"]}style={{paddingTop:"90px",paddingBottom:"80px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={2}size={56}/>
        <div className="eyebrow"style={{marginTop:"10px"}}>
          მოსაწვევი
        </div>
      </div>
      <div className="reveal"style={{marginTop:"30px",textAlign:"center"}}>
        <p style={{margin:0,fontSize:"22px",lineHeight:1.6,color:"var(--silver-bright)",fontFamily:'"Noto Serif Georgian", serif',fontWeight:400}}>
          გეპატიჟებით ჩვენს ქორწილში
        </p>
      </div>
      <div className="reveal"style={{marginTop:"40px"}}>
        <p style={{textAlign:"center",fontFamily:'"Noto Serif Georgian", serif',fontSize:"16px",lineHeight:1.75,color:"var(--ink)",margin:0}}>
          გიწვევთ ჩვენთვის ყველაზე მნიშვნელოვან და ბედნიერ დღეს 💫
        </p>
      </div>
      <div className="reveal"style={{textAlign:"center",marginTop:"44px"}}>
        <div className="display"style={{fontSize:"15px",letterSpacing:"0.2em",color:"var(--ink-dim)",fontFamily:'"Noto Serif Georgian", serif'}}>
          {t.brideName} &amp; {t.groomName}
        </div>
      </div>
    </Sheet>}const dirUrl=(destination,placeId)=>"#"+encodeURIComponent(destination)+"&destination_place_id="+placeId;const VENUE_MAPS={};function PinGlyph(){return<svg width="11"height="11"viewBox="0 0 12 12"fill="none"aria-hidden="true">
      <path d="M6 11s3.6-3.9 3.6-6.4A3.6 3.6 0 0 0 6 1a3.6 3.6 0 0 0-3.6 3.6C2.4 7.1 6 11 6 11Z"stroke="currentColor"strokeWidth=".8"strokeLinejoin="round"/>
      <circle cx="6"cy="4.6"r="1.25"stroke="currentColor"strokeWidth=".8"/>
    </svg>}function Schedule(){const items=[{time:"12:00",name:"\u10E8\u10D4\u10D9\u10E0\u10D4\u10D1\u10D0",place:"\u10E1\u10D0\u10E1\u10E2\u10E3\u10DB\u10E0\u10DD",note:"\u10D0\u10E5 \u10D8\u10EC\u10E7\u10D4\u10D1\u10D0 \u10E9\u10D5\u10D4\u10DC\u10D8 \u10D3\u10E6\u10D4 \u2728"},{time:"13:00",name:"\u10EF\u10D5\u10E0\u10D8\u10E1\u10EC\u10D4\u10E0\u10D0",place:"\u10E1\u10D0\u10D9\u10D0\u10D7\u10D4\u10D3\u10E0\u10DD \u10E2\u10D0\u10EB\u10D0\u10E0\u10D8"},{time:"15:00",name:"\u10EE\u10D4\u10DA\u10D8\u10E1 \u10DB\u10DD\u10EC\u10D4\u10E0\u10D0",place:"\u10EA\u10D8\u10EE\u10D4-\u10E1\u10D8\u10DB\u10D0\u10D2\u10E0\u10D4"},{time:"17:00",name:"Welcome",place:"\u10E1\u10D0\u10E1\u10E2\u10E3\u10DB\u10E0\u10DD"},{time:"18:00",name:"\u10E9\u10D5\u10D4\u10DC\u10D8 \u10E5\u10DD\u10E0\u10EC\u10D8\u10DA\u10D8 \u10D8\u10EC\u10E7\u10D4\u10D1\u10D0 \u{1F4AB}",place:"\u10E1\u10D0\u10E1\u10E2\u10E3\u10DB\u10E0\u10DD"},{time:"22:00",name:"Surprise",place:"\u10E1\u10D0\u10E1\u10E2\u10E3\u10DB\u10E0\u10DD"}];return<Sheet drift={16}glows={["glow--tl glow--warm","glow--br glow--cool"]}style={{paddingTop:"80px",paddingBottom:"80px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={0}size={64}/>
        <div className="eyebrow"style={{marginTop:"8px"}}>
          დღის განრიგი
        </div>
        <div className="display"style={{fontSize:"28px",marginTop:"14px",letterSpacing:"0.08em",fontFamily:'"Noto Serif Georgian", serif'}}>
          ქორწილი
        </div>
      </div>
      <div className="reveal schedule"style={{marginTop:"30px"}}>
        {items.map((it,i)=><div className="item"key={it.time}>
            {}
            <div className="dot"style={i===0?{background:"#fff",boxShadow:"0 0 0 4px rgba(7,7,10,1),0 0 0 5px var(--silver-bright),0 0 14px rgba(255,255,255,.9)"}:{}}/>
            <div className="time">{it.time}</div>
            <div className="name">{it.name}</div>
            {VENUE_MAPS[it.place]?<a className="place"href={VENUE_MAPS[it.place]}target="_blank"rel="noopener noreferrer"aria-label={it.place+" \u2014 \u10DB\u10D0\u10E0\u10E8\u10E0\u10E3\u10E2\u10D8"}>
                <PinGlyph/>
                <span>{it.place}</span>
              </a>:<div className="place">{it.place}</div>}
            {it.note&&<div className="note">{it.note}</div>}
          </div>)}
      </div>
    </Sheet>}function Venue({t}){const venues=[{key:t.venue,img:"hotel.png",name:t.venue,detail:t.venueDetail},{key:"\u10E1\u10D0\u10D9\u10D0\u10D7\u10D4\u10D3\u10E0\u10DD \u10E2\u10D0\u10EB\u10D0\u10E0\u10D8",img:"church.png",name:"\u10E1\u10D0\u10D9\u10D0\u10D7\u10D4\u10D3\u10E0\u10DD \u10E2\u10D0\u10EB\u10D0\u10E0\u10D8",detail:"\u10EB\u10D5\u10D4\u10DA\u10D8 \u10E5\u10D0\u10DA\u10D0\u10E5\u10D8"}];return<Sheet drift={15}glows={["glow--bl glow--warm","glow--tr glow--cool"]}style={{paddingTop:"80px",paddingBottom:"80px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={1}size={56}/>
        <div className="eyebrow"style={{marginTop:"8px"}}>
          ადგილი
        </div>
      </div>

      <div className="reveal venues"style={{marginTop:"18px"}}>
        {venues.map(v=><div className="venue-card"key={v.key}>
            <img className="venue-png"src={v.img}alt=""/>
            <div className="display"style={{fontSize:"30px",marginTop:"14px",letterSpacing:"0.06em",textWrap:"balance",fontFamily:'"Noto Serif Georgian", serif'}}>
              {v.name}
            </div>
            <div style={{fontSize:"16px",marginTop:"6px",color:"var(--ink)",textWrap:"balance",fontFamily:'"Noto Serif Georgian", serif'}}>
              {v.detail}
            </div>
            <div style={{marginTop:"20px"}}>
              <a className="btn btn-corners"href={VENUE_MAPS[v.key]}target="_blank"rel="noopener noreferrer"style={{fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.08em",fontSize:"13px"}}>
                მარშრუტი
              </a>
            </div>
          </div>)}
      </div>
    </Sheet>}const MINIPLAN_COLUMNS=[{x:14,ys:[34,52,70,88]},{x:30,ys:[26,44,62,80,98]},{x:48,ys:[34,52,70,88]},{x:64,ys:[44,62,80]},{x:156,ys:[44,62,80]},{x:172,ys:[34,52,70,88]},{x:190,ys:[26,44,62,80,98]},{x:206,ys:[34,52,70,88]}];const MINIPLAN_LIT={x:190,y:62};function MiniPlan(){return<svg className="miniplan"viewBox="0 0 220 118"fill="none"aria-hidden="true">
      <rect className="stage"x="86"y="6"width="48"height="12"rx="1.5"/>
      <rect className="floor"x="80"y="26"width="60"height="72"rx="1.5"/>
      <rect className="stage"x="86"y="106"width="48"height="10"rx="1.5"/>
      {MINIPLAN_COLUMNS.map(col=>col.ys.map(y=>{const lit=col.x===MINIPLAN_LIT.x&&y===MINIPLAN_LIT.y;return<circle key={col.x+"-"+y}className={lit?"dot dot--lit":"dot"}cx={col.x}cy={y}r="3.4"/>}))}
      <circle className="halo"cx={MINIPLAN_LIT.x}cy={MINIPLAN_LIT.y}r="5"/>
    </svg>}function FindTable(){const href=GUEST_NAME?"find-table.html?name="+encodeURIComponent(GUEST_NAME):"find-table.html";return<Sheet drift={12}glows={["glow--tr glow--warm"]}style={{paddingTop:"84px",paddingBottom:"84px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={2}size={60}/>
        <div className="eyebrow"style={{marginTop:"8px"}}>
          სტუმრების განლაგება
        </div>
        <div className="display"style={{fontSize:"26px",marginTop:"14px",letterSpacing:"0.08em",fontFamily:'"Noto Serif Georgian", serif'}}>
          იპოვე შენი მაგიდა
        </div>
        <p style={{marginTop:"12px",color:"var(--ink-dim)",fontSize:"15px",fontFamily:'"Noto Serif Georgian", serif',lineHeight:1.65}}>
          ჩაწერეთ სახელი და გვარი და ნახეთ თქვენი მაგიდა
        </p>
      </div>

      <div className="reveal"style={{marginTop:"34px"}}>
        <MiniPlan/>
      </div>

      <div className="reveal"style={{marginTop:"34px",display:"flex",justifyContent:"center"}}>
        <a className="btn btn-corners"href={href}style={{fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.08em",fontSize:"13px",width:"100%",maxWidth:"260px",textDecoration:"none"}}>
          ✦ &nbsp; მაგიდის ძებნა
        </a>
      </div>
    </Sheet>}const EVENT_DATE=new Date("2027-08-29T23:59:59+04:00");function rsvpClosed(){return Date.now()>EVENT_DATE.getTime()}function splitName(full){const clean=String(full).replace(/\s+/g," ").trim();const gap=clean.indexOf(" ");if(gap===-1)return{name:clean,surname:""};return{name:clean.slice(0,gap),surname:clean.slice(gap+1)}}function submitRsvp(payload){return new Promise(function(r){setTimeout(r,600)}).then(function(){return{ok:true}});return Promise.resolve().then(function(response){return response.json().catch(function(){return{}}).then(function(result){if(!response.ok){const err=new Error(result.error||"RSVP submit failed");err.closed=!!result.closed;err.httpStatus=response.status;throw err}return result})})}function RSVP(){const[attending,setAttending]=useState(null);const[name,setName]=useState("");const[submitted,setSubmitted]=useState(false);const[sending,setSending]=useState(false);const[error,setError]=useState("");const closed=rsvpClosed();function send(){if(!name||!attending||sending)return;if(rsvpClosed()){setError("\u10DE\u10D0\u10E1\u10E3\u10EE\u10D4\u10D1\u10D8\u10E1 \u10DB\u10D8\u10E6\u10D4\u10D1\u10D8\u10E1 \u10D5\u10D0\u10D3\u10D0 \u10D0\u10DB\u10DD\u10D8\u10EC\u10E3\u10E0\u10D0.");return}setSending(true);setError("");const parts=splitName(name);submitRsvp({name:parts.name,surname:parts.surname,attendance:attending}).then(function(){setSending(false);setSubmitted(true)}).catch(function(err){setSending(false);if(err&&err.closed){setError("\u10DE\u10D0\u10E1\u10E3\u10EE\u10D4\u10D1\u10D8\u10E1 \u10DB\u10D8\u10E6\u10D4\u10D1\u10D8\u10E1 \u10D5\u10D0\u10D3\u10D0 \u10D0\u10DB\u10DD\u10D8\u10EC\u10E3\u10E0\u10D0.")}else if(err&&err.httpStatus===429){setError("\u10D7\u10E5\u10D5\u10D4\u10DC\u10D8 \u10DE\u10D0\u10E1\u10E3\u10EE\u10D8 \u10E3\u10D9\u10D5\u10D4 \u10D2\u10D0\u10D2\u10D6\u10D0\u10D5\u10DC\u10D8\u10DA\u10D8\u10D0.")}else{setError("\u10D3\u10D0\u10E4\u10D8\u10E5\u10E1\u10D8\u10E0\u10D3\u10D0 \u10E8\u10D4\u10EA\u10D3\u10DD\u10DB\u10D0. \u10D2\u10D7\u10EE\u10DD\u10D5\u10D7, \u10E1\u10EA\u10D0\u10D3\u10DD\u10D7 \u10D7\u10D0\u10D5\u10D8\u10D3\u10D0\u10DC.")}console.error("RSVP",err)})}return<Sheet deep drift={10}glows={["glow--tl glow--cool"]}style={{paddingTop:"90px",paddingBottom:"80px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={4}size={56}/>
        <div className="eyebrow"style={{marginTop:"8px"}}>
          გამოხმაურება
        </div>
        <div className="display"style={{fontSize:"26px",marginTop:"14px",letterSpacing:"0.08em",fontFamily:'"Noto Serif Georgian", serif'}}>
          მოხვალთ ქორწილში?
        </div>
        {}
      </div>

      {closed?<div className="reveal"style={{marginTop:"44px",textAlign:"center"}}>
          <p style={{color:"var(--ink-dim)",fontFamily:'"Noto Serif Georgian", serif',fontSize:"16px",lineHeight:1.6}}>
            პასუხების მიღების ვადა ამოიწურა.
          </p>
        </div>:submitted?<div className="reveal"style={{marginTop:"50px",textAlign:"center"}}>
          <StarGlyph size={20}/>
          <div className="display"style={{fontSize:"22px",marginTop:"18px",letterSpacing:"0.06em",color:"var(--silver-bright)",fontFamily:'"Noto Serif Georgian", serif'}}>
            მადლობა!
          </div>
          <p style={{marginTop:"14px",color:"var(--ink-dim)",fontFamily:'"Noto Serif Georgian", serif',fontSize:"16px",lineHeight:1.6}}>
            {name||"\u10EB\u10D5\u10D8\u10E0\u10E4\u10D0\u10E1\u10DD \u10E1\u10E2\u10E3\u10DB\u10D0\u10E0\u10DD"}, თქვენი პასუხი მიღებულია.
          </p>
        </div>:<div className="reveal"style={{marginTop:"34px",display:"flex",flexDirection:"column",gap:"24px"}}>
          <div>
            <div className="mono"style={{marginBottom:"8px",fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.04em",fontSize:"12px"}}>
              1 · თქვენი სახელი
            </div>
            <input className="input"type="text"value={name}onChange={e=>setName(e.target.value)}placeholder="სახელი და გვარი"/>
          </div>
          <div>
            <div className="mono"style={{marginBottom:"10px",fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.04em",fontSize:"12px"}}>
              2 · მოხვალთ?
            </div>
            <div className="seg">
              <button className={attending==="yes"?"on":""}onClick={()=>setAttending("yes")}>
                სიამოვნებით
              </button>
              <button className={attending==="no"?"on":""}onClick={()=>setAttending("no")}>
                სამწუხაოდ არა
              </button>
            </div>
          </div>
          <div style={{marginTop:"20px",textAlign:"center"}}>
            <button className="btn btn-corners"onClick={send}disabled={!name||!attending||sending}style={{opacity:!name||!attending||sending?.4:1,fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.06em",fontSize:"13px"}}>
              {sending?"\u10D8\u10D2\u10D6\u10D0\u10D5\u10DC\u10D4\u10D1\u10D0\u2026":"\u10D2\u10D0\u10D2\u10D6\u10D0\u10D5\u10DC\u10D0 \xA0 \u2726"}
            </button>
            {error?<p style={{marginTop:"16px",color:"#d9a86b",fontFamily:'"Noto Serif Georgian", serif',fontSize:"14px",lineHeight:1.5}}>
                {error}
              </p>:null}
          </div>
        </div>}
    </Sheet>}function DressCode(){return<Sheet deep drift={11}glows={["glow--tr glow--cool"]}style={{paddingTop:"80px",paddingBottom:"80px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={2}size={52}/>
        <div className="eyebrow"style={{marginTop:"10px"}}>
          დრეს კოდი
        </div>
      </div>

      <div className="reveal"style={{marginTop:"34px",textAlign:"center"}}>
        <div className="dc-label">ქალბატონებისთვის</div>
      </div>
      <div className="reveal"style={{marginTop:"16px",marginLeft:"-28px",marginRight:"-28px",position:"relative"}}>
        <img src="dress-code.png"alt="ქალბატონების პალიტრა"style={{width:"100%",display:"block"}}/>
      </div>

      <div className="reveal dc-men"style={{marginTop:"10px"}}>
        <div className="dc-label">მამაკაცებისთვის</div>
        <div className="hr"style={{padding:"0 46px",marginTop:"20px"}}>
          <StarGlyph size={9}/>
        </div>
        <div className="dc-men__title">კლასიკური</div>
        <div className="dc-swatch">
          <span className="dc-swatch__chip"/>
          {}
        </div>
        <p className="dc-men__body">
          შავი-ლურჯი შარვალ-კოსტიუმი.
        </p>
      </div>
    </Sheet>}function Gallery(){return<Sheet drift={13}glows={["glow--br glow--warm"]}style={{paddingTop:"80px",paddingBottom:"80px"}}>
      <div className="reveal"style={{textAlign:"center"}}>
        <ConstellationGlyph type={3}size={56}/>
        <div className="eyebrow"style={{marginTop:"8px"}}>
          ფოტოგალერეა
        </div>
        <div className="display"style={{fontSize:"26px",marginTop:"14px",letterSpacing:"0.08em",fontFamily:'"Noto Serif Georgian", serif'}}>
          მომენტები
        </div>
        <p style={{marginTop:"12px",color:"var(--ink-dim)",fontSize:"15px",fontFamily:'"Noto Serif Georgian", serif',lineHeight:1.65}}>
          გადაიღეთ ფოტოები და გაუზიარეთ ყველა სტუმარს
        </p>
      </div>
      <div className="reveal"style={{marginTop:"40px",display:"flex",flexDirection:"column",alignItems:"center",gap:"16px"}}>
        <a className="btn btn-corners"href="upload.html"style={{fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.08em",fontSize:"13px",width:"100%",maxWidth:"260px",textDecoration:"none"}}>
          ✦ &nbsp; ფოტოს ატვირთვა
        </a>
        <a className="btn btn-corners"href="gallery.html"style={{fontFamily:'"Noto Serif Georgian", serif',letterSpacing:"0.08em",fontSize:"13px",width:"100%",maxWidth:"260px",textDecoration:"none"}}>
          ☽ &nbsp; გალერეის ნახვა
        </a>
      </div>
    </Sheet>}function Footer({t}){return<footer className="sheet sheet--deep"style={{paddingTop:"80px",paddingBottom:"40px",paddingLeft:"28px",paddingRight:"28px",textAlign:"center"}}>
      {}
      {t.ornaments&&<>
          <CornerOrnament className="corner bl"/>
          <CornerOrnament className="corner br"/>
        </>}
      <div className="sheet__body"data-drift="8">
      <div className="reveal"style={{display:"flex",justifyContent:"center"}}>
        <SunBanner label={formatDate(t.weddingISO)}/>
      </div>
      <div className="reveal"style={{marginTop:"28px"}}>
        <a href="https://www.instagram.com/weddsites/"target="_blank"rel="noopener"style={{display:"inline-flex",alignItems:"center",gap:"8px",opacity:.3,textDecoration:"none",color:"var(--ink)",transition:"opacity 0.3s"}}onMouseEnter={e=>e.currentTarget.style.opacity=1}onMouseLeave={e=>e.currentTarget.style.opacity=.3}>
          <img src="weddsite.png"alt="Weddsite"style={{height:"20px",width:"auto"}}/>
          <span style={{fontFamily:'"Cormorant Garamond", serif',fontSize:"13px",letterSpacing:"0.1em"}}>
            Made with ♥ by Weddsite
          </span>
        </a>
      </div>
      </div>
    </footer>}function MeteorRail(){const meteorRef=useRef(null);useEffect(()=>{function update(){const max=document.documentElement.scrollHeight-window.innerHeight;const p=max>0?window.scrollY/max:0;if(meteorRef.current){const t=p*(window.innerHeight-60);meteorRef.current.style.top=`${t}px`}}window.addEventListener("scroll",update,{passive:true});update();return()=>window.removeEventListener("scroll",update)},[]);return<div className="meteor-rail">
      <div className="meteor"ref={meteorRef}/>
    </div>}function MusicToggle(){const[on,setOn]=useState(()=>window.Music?window.Music.isOn():true);const[ready,setReady]=useState(()=>!!window.__introDone);useEffect(()=>{if(ready)return;const show=()=>setReady(true);window.addEventListener("intro:done",show,{once:true});return()=>window.removeEventListener("intro:done",show)},[ready]);useEffect(()=>{if(!window.Music)return;return window.Music.subscribe(setOn)},[]);function toggle(){if(!window.Music)return;if(on)window.Music.off();else window.Music.on(600)}return<button type="button"className={`music-toggle${ready?" is-ready":""}${on?"":" is-off"}`}onClick={toggle}aria-pressed={on}aria-label={on?"\u10DB\u10E3\u10E1\u10D8\u10D9\u10D8\u10E1 \u10D2\u10D0\u10DB\u10DD\u10E0\u10D7\u10D5\u10D0":"\u10DB\u10E3\u10E1\u10D8\u10D9\u10D8\u10E1 \u10E9\u10D0\u10E0\u10D7\u10D5\u10D0"}title={on?"\u10DB\u10E3\u10E1\u10D8\u10D9\u10D8\u10E1 \u10D2\u10D0\u10DB\u10DD\u10E0\u10D7\u10D5\u10D0":"\u10DB\u10E3\u10E1\u10D8\u10D9\u10D8\u10E1 \u10E9\u10D0\u10E0\u10D7\u10D5\u10D0"}>
      <span className="music-toggle__note"aria-hidden="true">
        🎵
      </span>
    </button>}function Tweaks({t,setTweak}){return<TweaksPanel title="Tweaks">
      <TweakSection label="The Couple"/>
      <TweakText label="Bride"value={t.brideName}onChange={v=>setTweak("brideName",v)}/>
      <TweakText label="Groom"value={t.groomName}onChange={v=>setTweak("groomName",v)}/>
      <TweakText label="Venue"value={t.venue}onChange={v=>setTweak("venue",v)}/>
      <TweakText label="Venue detail"value={t.venueDetail}onChange={v=>setTweak("venueDetail",v)}/>

      <TweakSection label="Celestial"/>
      <TweakSlider label="Star density"value={t.starDensity}min={.3}max={2}step={.1}onChange={v=>setTweak("starDensity",v)}/>
      <TweakSlider label="Parallax"value={t.parallax}min={0}max={1.8}step={.1}onChange={v=>setTweak("parallax",v)}/>
      <TweakToggle label="Ornamental corners"value={t.ornaments}onChange={v=>setTweak("ornaments",v)}/>
    </TweaksPanel>}function DesktopNotice(){const[dismissed,setDismissed]=useState(false);if(dismissed)return null;return<div className="desktop-notice">
      <div className="desktop-notice__card">
        <img src="weddsite.png"alt="Weddsite"className="desktop-notice__icon"/>
        <p className="desktop-notice__title">საიტი მობილურისთვისაა შექმნილი</p>
        <p className="desktop-notice__sub">
          გთხოვთ გახსნათ მობილური ტელეფონიდან საუკეთესო გამოცდილებისთვის
        </p>
        <button className="desktop-notice__close"onClick={()=>setDismissed(true)}>
          გაგრძელება →
        </button>
      </div>
    </div>}function App(){const[t,setTweak]=useTweaks(TWEAK_DEFAULTS);useReveal();useDriftParallax();return<>
      <DesktopNotice/>
      <div className="mobile-shell">
        <Starfield density={t.starDensity}parallax={t.parallax}/>
        <div className="vignette"/>
        <MeteorRail/>
        <MusicToggle/>
        <div className="content">
          <Hero t={t}/>
          <Countdown t={t}/>
          <Invocation t={t}/>
          <Schedule/>
          <DressCode/>
          <Venue t={t}/>
          <RSVP/>
          <Footer t={t}/>
        </div>
        <Tweaks t={t}setTweak={setTweak}/>
      </div>
    </>}ReactDOM.createRoot(document.getElementById("root")).render(<App/>);
