@font-face{font-family:Amiri;src:url('assets/fonts/Amiri-Regular.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Ruqaa;src:url('assets/fonts/ArefRuqaa-Regular.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
/* Formal printed invitation: symmetry 3/10, motion 2/10, density 3/10.
   Forest theme, warm ivory type, muted gold rules; native HTML/CSS. */
:root{color-scheme:dark;--background:#0b211b;--paper:#102e25;--ivory:#f3efdf;--muted:#c5cbbb;--gold:#c5b583;--line:rgba(197,181,131,.32)}
*{box-sizing:border-box}
html{min-width:320px;background:var(--background)}
body{margin:0;padding:38px 24px 46px;color:var(--ivory);font-family:Amiri,serif;font-weight:400;-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.88' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='white' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E");z-index:1}
p,h1,h2{margin:0;font-weight:400}
a,button{-webkit-tap-highlight-color:transparent}
.invitation{position:relative;isolation:isolate;max-width:760px;margin:auto;padding:46px 90px 38px;text-align:center;background:var(--paper);box-shadow:0 18px 80px #061b1740}
.frame{position:absolute;inset:14px;border:1px solid var(--line);pointer-events:none;z-index:-1}
.frame::after{content:"";position:absolute;inset:5px;border:1px solid rgba(197,181,131,.12)}
.corner{position:absolute;width:30px;height:30px;border-color:var(--gold);border-style:solid;opacity:.75}
.top-right{right:-1px;top:-1px;border-width:1px 1px 0 0}.top-left{left:-1px;top:-1px;border-width:1px 0 0 1px}.bottom-right{right:-1px;bottom:-1px;border-width:0 1px 1px 0}.bottom-left{left:-1px;bottom:-1px;border-width:0 0 1px 1px}
.bismillah{font-family:Ruqaa,Amiri,serif;font-size:23px;line-height:1.8;color:var(--gold)}
.opening-rule{width:34px;height:1px;background:var(--gold);margin:19px auto 17px;opacity:.65}
.occasion{font-size:15px;color:var(--muted)}
.announcement{margin-top:25px}
.honor{font-size:18px;color:var(--muted);line-height:1.6}
.host{font-size:clamp(21px,3.4vw,28px);line-height:1.8}
.invitation-line{font-size:19px;line-height:1.8;color:var(--muted);margin-top:3px}
h1{font-family:Ruqaa,Amiri,serif;font-size:clamp(76px,13vw,108px);line-height:1.65;margin:0 0 4px;color:var(--ivory)}
.bride-intro{font-size:17px;color:var(--muted);line-height:1.6}
.bride-family{font-size:clamp(20px,3vw,25px);line-height:1.9;margin-top:3px}
.flourish{display:flex;align-items:center;justify-content:center;gap:17px;margin:27px auto 26px;max-width:350px;color:var(--gold)}
.flourish span{height:1px;background:var(--line);flex:1}.flourish b{font-size:20px;font-weight:400;line-height:1}
.details{display:grid;grid-template-columns:1fr 1fr;align-items:center;margin:0 auto 28px}
.date{border-left:1px solid var(--line);padding-left:20px}.venue{padding-right:20px}
.detail-label{font-size:15px;color:var(--muted);line-height:1.8}
time{display:flex;justify-content:center;align-items:center;gap:13px;line-height:1.2;margin-top:7px}
.day{font-size:66px;line-height:1.15}.month-year{font-size:23px;line-height:1.4;text-align:right}.year{display:block;font-size:20px;color:var(--gold)}
.venue h2{font-family:Ruqaa,Amiri,serif;font-size:44px;line-height:1.45;margin:2px 0 5px}
.venue-description{font-size:14px;color:var(--muted);line-height:1.7;white-space:nowrap}
.actions{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.button{display:flex;align-items:center;justify-content:center;gap:17px;min-height:51px;padding:9px 15px;font:400 17px Amiri,serif;text-decoration:none;border:1px solid var(--gold);border-radius:2px;cursor:pointer;transition:background .2s,color .2s,transform .2s;white-space:nowrap}
.primary{background:var(--gold);color:var(--background)}.secondary{background:transparent;color:var(--ivory);border-color:var(--line)}
.primary:hover{background:#d8c99c}.secondary:hover{background:#1d3e32;border-color:var(--gold)}.button:active{transform:translateY(1px)}
.button>span:last-child{font-family:Arial,sans-serif;font-size:20px;font-weight:400}.plus{transition:transform .2s}.button[aria-expanded=true] .plus{transform:rotate(45deg)}
:focus-visible{outline:2px solid var(--ivory);outline-offset:5px}
.calendar-options{padding:16px 0 0;line-height:1.8;direction:ltr}.calendar-options a{display:inline-block;color:var(--ivory);font:13px Arial,sans-serif;margin:5px 12px;text-underline-offset:5px}.calendar-options p{font-size:14px;color:var(--muted);direction:rtl;margin-top:8px}
footer{margin-top:33px}.closing{font-family:Ruqaa,Amiri,serif;font-size:26px;line-height:1.9;color:var(--gold)}.blessing{font-size:14px;color:var(--muted);margin-top:9px;line-height:1.8}
@media(prefers-reduced-motion:no-preference){.opening,.announcement,.flourish,.details,.actions,footer{animation:arrive .8s ease both}.announcement{animation-delay:.08s}.flourish,.details{animation-delay:.16s}.actions,footer{animation-delay:.24s}@keyframes arrive{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}}
@media(min-width:1024px){body{padding-top:42px}.invitation{padding-top:40px;padding-bottom:34px}.announcement{margin-top:20px}}
@media(max-width:600px){body{padding:12px 10px 18px}.invitation{padding:35px 27px 30px}.frame{inset:8px}.frame::after{inset:4px}.bismillah{font-size:21px}.opening-rule{margin:15px auto 13px}.occasion{font-size:14px}.announcement{margin-top:23px}.host{font-size:22px}.invitation-line{font-size:17px;margin-top:5px}h1{font-size:87px;line-height:1.7;margin-bottom:3px}.bride-family{font-size:21px;line-height:1.85}.flourish{margin:24px auto}.details{margin-bottom:24px}.date{padding-left:12px}.venue{padding-right:12px}.detail-label{font-size:13px}.day{font-size:57px}.month-year{font-size:20px}.year{font-size:18px}.venue h2{font-size:38px}.venue-description{font-size:12px;white-space:normal}.actions{gap:9px}.button{font-size:15px;gap:12px;padding:9px 8px;min-height:49px}footer{margin-top:26px}.closing{font-size:25px}.blessing{font-size:12px}}
@media(max-width:360px){.invitation{padding-inline:22px}.host{font-size:20px}.bride-family{font-size:19px}.button{font-size:14px;gap:8px}.detail-label{font-size:12px}time{gap:8px}.day{font-size:51px}}
@media print{body{padding:0;background:var(--paper);print-color-adjust:exact;-webkit-print-color-adjust:exact}.invitation{box-shadow:none;max-width:760px}.actions,.calendar-options{display:none}body::before{display:none}}
/* Keep the invitation at a comfortable phone-card width on every screen. */
.invitation{max-width:430px;padding:35px 27px 30px}
.frame{inset:8px}.frame::after{inset:4px}
.bismillah{font-size:21px}
.opening-rule{margin:15px auto 13px}
.announcement{margin-top:23px}
.host{font-size:22px}
.invitation-line{font-size:17px;margin-top:5px}
h1{font-size:87px;line-height:1.7;margin-bottom:3px}
.bride-family{font-size:21px;line-height:1.85}
.flourish{margin:24px auto}
.details{margin-bottom:24px}
.date{padding-left:12px}.venue{padding-right:12px}
.detail-label{font-size:13px}
.day{font-size:57px}.month-year{font-size:20px}.year{font-size:18px}
.venue h2{font-size:38px}
.venue-description{font-size:12px;white-space:normal}
.actions{gap:9px}
.button{font-size:15px;gap:12px;padding:9px 8px;min-height:49px}
footer{margin-top:26px}.closing{font-size:25px}
@media(max-width:360px){.invitation{padding-inline:22px}.host{font-size:20px}.bride-family{font-size:19px}.button{font-size:14px;gap:8px}.detail-label{font-size:12px}time{gap:8px}.day{font-size:51px}}
/* Balance the Ruqaa font's visual whitespace around the groom's name. */
h1{position:relative;top:-26px}
/* Balance the family names with a more understated groom's name. */
.host{font-size:25px;line-height:1.8}
.bride-family{font-size:24px;line-height:1.8}
h1{font-size:70px;line-height:1.7;top:-18px;margin-top:5px;margin-bottom:5px}
@media(max-width:360px){.host{font-size:23px}.bride-family{font-size:22px}h1{font-size:65px}}
/* Compact phone layout sized for the space left by mobile browser controls. */
@media(max-width:600px){
 body{padding:8px 10px}
 .invitation{padding-top:22px;padding-bottom:20px}
 .bismillah{font-size:19px;line-height:1.65}
 .opening-rule{margin:10px auto}
 .announcement{margin-top:12px}
 .honor{font-size:17px;line-height:1.4}
 .host{line-height:1.6}
 .invitation-line{margin-top:2px;line-height:1.6}
 h1{font-size:59px;line-height:1.55;top:-12px;margin-top:4px;margin-bottom:2px}
 .bride-intro{font-size:16px;line-height:1.4}
 .bride-family{margin-top:2px;line-height:1.6}
 .flourish{margin:17px auto}
 .details{margin-bottom:18px}
 .day{font-size:49px}
 .venue h2{font-size:34px}
 .button{min-height:46px;padding-block:7px}
 footer{margin-top:17px}
 .closing{font-size:23px;line-height:1.7}
}
@media(max-width:600px) and (max-height:650px){
 .invitation{padding-top:17px;padding-bottom:17px}
 .opening-rule{margin:7px auto}
 .announcement{margin-top:8px}
 h1{font-size:53px;line-height:1.45;top:-9px}
 .flourish{margin:12px auto}
 .details{margin-bottom:13px}
 footer{margin-top:12px}
}
@media(max-width:360px) and (max-height:600px){
 .host{font-size:21px}.bride-family{font-size:20px}
 .bismillah{font-size:17px}
 .invitation{padding-inline:20px;padding-top:15px;padding-bottom:15px}
 h1{font-size:48px}
 .flourish{margin:9px auto}
 .details{margin-bottom:10px}
 footer{margin-top:9px}
}
/* Fill the visible phone viewport; let spare height become breathing room.
   Content can still scroll with enlarged accessibility text or in landscape. */
@media(max-width:600px){
 body{min-height:100svh;padding:8px 10px;display:flex;flex-direction:column}
 .invitation{width:100%;min-height:calc(100svh - 16px);margin:0 auto;display:flex;flex-direction:column;justify-content:space-between;gap:0}
 .opening,.announcement,.details,.actions,footer{flex-shrink:0;width:100%}
 .announcement{margin-top:12px}
 .flourish{width:100%;flex-shrink:0}
 .details{margin-bottom:0}
 footer{margin-top:12px}
}
@supports(height:100dvh){
 @media(max-width:600px){body{min-height:100dvh}.invitation{min-height:calc(100dvh - 16px)}}
}
@media(max-width:600px) and (min-height:700px){
 .invitation{padding-top:27px;padding-bottom:25px}
 .opening-rule{margin:15px auto}
 .announcement{margin-top:15px}
 .honor{line-height:1.6}
 .host{line-height:1.8}
 .invitation-line{margin-top:5px;line-height:1.8}
 h1{font-size:62px;line-height:1.7;top:-13px;margin-top:7px;margin-bottom:7px}
 .bride-intro{line-height:1.6}
 .bride-family{margin-top:5px;line-height:1.8}
 .flourish{margin:18px auto}
 .button{min-height:49px}
 footer{margin-top:16px}
}
/* A little more presence for the hosts and the invitation wording. */
.host{font-size:27px}
.bride-family{font-size:26px}
.honor{font-size:19px}
.invitation-line{font-size:19px}
.bride-intro{font-size:18px}
@media(max-width:360px){
 .host{font-size:23px}
 .bride-family{font-size:22px}
 .honor,.invitation-line{font-size:18px}
 .bride-intro{font-size:17px}
}
/* Detail labels remain legible beside the larger family typography. */
.detail-label{font-size:15px}
.venue-description{font-size:14px}
@media(max-width:360px){.detail-label{font-size:14px}.venue-description{font-size:13px}}
