:root{--paper:#f5efe4;--paper-2:#efe7d8;--ink:#211c16;--ink-soft:#4f463a;--ink-faint:#897f6e;--line:#ddd2bd;--terracotta:#c8553d;--terracotta-deep:#a8402c;--sage:#6f7a5a;--gold:#c89b3c;--font-display:"Fraunces", Georgia, serif;--font-body:"Hanken Grotesk", system-ui, sans-serif;--font-mono:"Space Mono", ui-monospace, monospace;--maxw:1120px;--radius:14px;--shadow:0 1px 2px #211c160f, 0 18px 40px -24px #211c1659}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-body);background-color:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;background-image:radial-gradient(circle at 18% -10%,#c8553d1a,#0000 42%),radial-gradient(circle at 92% 8%,#6f7a5a1f,#0000 40%);background-attachment:fixed;line-height:1.6}body:before{content:"";pointer-events:none;z-index:1;opacity:.4;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E");position:fixed;inset:0}a{color:inherit;text-decoration:none}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.02em;font-weight:600;line-height:1.04}button{cursor:pointer;font-family:inherit}.eyebrow{font-family:var(--font-mono);letter-spacing:.28em;text-transform:uppercase;color:var(--terracotta);font-size:.72rem}.container{width:100%;max-width:var(--maxw);z-index:2;margin:0 auto;padding:0 28px;position:relative}@media (width<=640px){.container{padding:0 20px}}.app-shell{flex-direction:column;min-height:100vh;display:flex}main{flex:1}.site-header{z-index:50;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);background:#f5efe4c7;position:sticky;top:0}.site-header__inner{justify-content:space-between;align-items:center;height:70px;display:flex}.brand{font-family:var(--font-display);letter-spacing:-.02em;align-items:baseline;gap:10px;font-size:1.4rem;font-weight:600;display:inline-flex}.brand__mark{color:var(--terracotta);font-size:1.1rem}.brand__text em{color:var(--ink-faint);padding:0 2px;font-style:italic;font-weight:400}.nav{gap:6px;display:flex}.nav__link{color:var(--ink-soft);border-radius:999px;padding:8px 16px;font-size:.95rem;font-weight:500;transition:background .2s,color .2s}.nav__link:hover{background:var(--paper-2);color:var(--ink)}.nav__link.active{background:var(--ink);color:var(--paper)}.hero{padding:clamp(70px,13vh,150px) 0 clamp(48px,8vh,90px);position:relative;overflow:hidden}.hero__inner{max-width:760px}.hero__title{flex-wrap:wrap;align-items:baseline;gap:0 22px;margin:14px 0 0;font-size:clamp(3.4rem,12vw,8.5rem);display:flex}.hero__amp{color:var(--terracotta);font-style:italic;font-weight:300}.hero__lede{color:var(--ink-soft);max-width:56ch;margin-top:26px;font-size:clamp(1.05rem,2.2vw,1.3rem)}.hero__cta{flex-wrap:wrap;gap:14px;margin-top:36px;display:flex}.hero__deco{color:var(--terracotta);opacity:.06;pointer-events:none;z-index:0;font-size:clamp(18rem,40vw,36rem);line-height:1;position:absolute;top:50%;right:-4%;transform:translateY(-50%)}.btn{border:1.5px solid #0000;border-radius:999px;align-items:center;padding:13px 26px;font-size:.98rem;font-weight:600;transition:transform .15s,box-shadow .2s,background .2s;display:inline-flex}.btn:hover{transform:translateY(-2px)}.btn--primary{background:var(--terracotta);color:#fff;box-shadow:0 12px 24px -12px #c8553dcc}.btn--primary:hover{background:var(--terracotta-deep)}.btn--ghost{border-color:var(--line);color:var(--ink)}.btn--ghost:hover{border-color:var(--ink)}.section-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:34px;padding-bottom:18px;display:flex}.section-head h2{font-size:clamp(2rem,5vw,3rem)}.section-head__link{font-family:var(--font-mono);letter-spacing:.05em;color:var(--terracotta);white-space:nowrap;font-size:.8rem}.section-head__link:hover{text-decoration:underline}.upcoming{padding:clamp(40px,7vh,80px) 0 clamp(70px,12vh,130px)}.next-list{gap:18px;list-style:none;display:grid}.next-card{border:1px solid var(--line);border-radius:var(--radius);background:#ffffff73;grid-template-columns:130px 1fr;align-items:start;gap:24px;padding:22px 26px;transition:transform .2s,box-shadow .25s,border-color .2s;display:grid}.next-card:hover{box-shadow:var(--shadow);border-color:#0000;transform:translateY(-3px)}.next-card__date{font-family:var(--font-mono);flex-direction:column;gap:6px;font-size:1.15rem;font-weight:700;display:flex}.next-card__glyph{font-size:1.4rem}.next-card__body h3{margin-bottom:4px;font-size:1.5rem}.next-card__body p{color:var(--ink-faint);font-size:.95rem}.next-card__note{margin-top:8px;font-style:italic;color:var(--ink-soft)!important}.empty{color:var(--ink-faint);font-style:italic}.events-page{padding:clamp(50px,8vh,90px) 0 clamp(70px,12vh,130px)}.page-head{max-width:640px;margin-bottom:30px}.page-head h1{margin:10px 0 14px;font-size:clamp(2.6rem,7vw,4.5rem)}.page-head__lede{color:var(--ink-soft);margin-bottom:22px;font-size:1.1rem}.legend{flex-wrap:wrap;gap:18px;margin-bottom:26px;display:flex}.legend__item{color:var(--ink-soft);align-items:center;gap:8px;font-size:.85rem;display:inline-flex}.legend__dot{border-radius:50%;width:11px;height:11px}.calendar{grid-template-columns:1fr 320px;align-items:start;gap:26px;display:grid}.calendar__main{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#ffffff80;padding:22px}.calendar__bar{justify-content:space-between;align-items:center;margin-bottom:18px;display:flex}.calendar__title{font-size:1.6rem}.calendar__title span{color:var(--ink-faint);font-style:italic;font-weight:300}.calendar__nav{align-items:center;gap:6px;display:flex}.calendar__nav button{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:10px;width:38px;height:38px;font-size:1.3rem;line-height:1;transition:background .18s,border-color .18s}.calendar__nav button:hover{background:var(--paper-2);border-color:var(--ink-faint)}.calendar__today{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;padding:0 14px;width:auto!important;font-size:.72rem!important}.calendar__grid{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.calendar__grid--head{margin-bottom:8px}.calendar__weekday{text-align:center;font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);padding-bottom:4px;font-size:.68rem}.calendar__cell{aspect-ratio:1;background:0 0;border:1px solid #0000;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:5px;transition:background .16s,border-color .16s,transform .16s;display:flex;position:relative}.calendar__cell.is-empty{pointer-events:none}.calendar__cell:not(.is-empty):hover{background:var(--paper-2);transform:translateY(-1px)}.calendar__num{font-variant-numeric:tabular-nums;color:var(--ink-soft);font-size:.95rem}.calendar__cell.has-events .calendar__num{color:var(--ink);font-weight:600}.calendar__cell.is-today{border-color:var(--terracotta)}.calendar__cell.is-today .calendar__num{color:var(--terracotta);font-weight:700}.calendar__cell.is-selected{background:var(--ink)}.calendar__cell.is-selected .calendar__num{color:var(--paper)}.calendar__dots{gap:3px;height:6px;display:flex}.calendar__dot{border-radius:50%;width:6px;height:6px}.calendar__cell.is-selected .calendar__dot{outline:1px solid #f5efe480}.calendar__detail{background:var(--ink);color:var(--paper);border-radius:var(--radius);box-shadow:var(--shadow);padding:24px;position:sticky;top:90px}.calendar__detail .eyebrow{color:var(--gold)}.calendar__empty{color:#f5efe499;margin-top:18px;font-style:italic;line-height:1.5}.calendar__events{gap:20px;margin-top:18px;list-style:none;display:grid}.calendar__event{border-top:1px solid #f5efe429;padding-top:16px}.calendar__event:first-child{border-top:none;padding-top:0}.calendar__event-tag{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;border:1px solid;border-radius:999px;margin-bottom:10px;padding:3px 10px;font-size:.66rem;display:inline-block}.calendar__event h4{margin-bottom:4px;font-size:1.3rem}.calendar__event p{color:#f5efe4b3;font-size:.9rem}.calendar__event-note{margin-top:8px;font-style:italic;color:#f5efe4d9!important}.calendar__add{width:100%;color:var(--paper);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;background:0 0;border:1px dashed #f5efe466;border-radius:10px;margin-top:22px;padding:12px;font-size:.74rem;transition:background .18s,border-color .18s}.calendar__add:hover{border-color:var(--gold);color:var(--gold);background:#f5efe414}.calendar__event-remove{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:#f5efe48c;background:0 0;border:none;margin-top:12px;padding:4px 0;font-size:.68rem;transition:color .18s}.calendar__event-remove:hover{color:var(--terracotta)}.calendar__confirm{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.calendar__confirm span{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:#f5efe4b3;font-size:.68rem}.calendar__confirm-yes,.calendar__confirm-no{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;background:0 0;border:1px solid;border-radius:999px;padding:5px 14px;font-size:.66rem;transition:background .16s,color .16s}.calendar__confirm-yes{border-color:var(--terracotta);color:var(--terracotta)}.calendar__confirm-yes:hover{background:var(--terracotta);color:#fff}.calendar__confirm-no{color:#f5efe4cc;border-color:#f5efe466}.calendar__confirm-no:hover{background:#f5efe41f}.calendar__restore{width:100%;font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:#f5efe480;background:0 0;border:none;margin-top:10px;padding:6px;font-size:.66rem;transition:color .16s;display:block}.calendar__restore:hover{color:var(--gold)}.modal-overlay{z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#211c1680;justify-content:center;align-items:flex-start;padding:clamp(20px,8vh,90px) 18px 40px;animation:.2s forwards fade;display:flex;position:fixed;inset:0;overflow-y:auto}@keyframes fade{0%{opacity:0}to{opacity:1}}.modal{background:var(--paper);border:1px solid var(--line);border-radius:18px;width:100%;max-width:540px;padding:28px;animation:.28s cubic-bezier(.22,1,.36,1) forwards pop;box-shadow:0 30px 70px -30px #211c1699}@keyframes pop{0%{opacity:0;transform:translateY(14px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.modal__head{justify-content:space-between;align-items:center;display:flex}.modal__close{border:1px solid var(--line);background:var(--paper);width:34px;height:34px;color:var(--ink-soft);border-radius:9px;font-size:.85rem;transition:background .16s,color .16s}.modal__close:hover{background:var(--paper-2);color:var(--ink)}.modal__title{margin:6px 0 22px;font-size:2rem}.form{grid-template-columns:1fr 1fr;gap:16px;display:grid}.field{flex-direction:column;gap:6px;display:flex}.field--full{grid-column:1/-1}.field span{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);font-size:.66rem}.field input,.field select,.field textarea{font-family:var(--font-body);color:var(--ink);border:1px solid var(--line);background:#fff9;border-radius:10px;padding:11px 13px;font-size:1rem;transition:border-color .16s,box-shadow .16s}.field textarea{resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--terracotta);outline:none;box-shadow:0 0 0 3px #c8553d24}.form__error{color:var(--terracotta-deep);grid-column:1/-1;margin:-4px 0 0;font-size:.9rem}.form__actions{grid-column:1/-1;justify-content:flex-end;gap:12px;margin-top:6px;display:flex}@media (width<=480px){.form{grid-template-columns:1fr}}.site-footer{border-top:1px solid var(--line);margin-top:auto;padding:30px 0}.site-footer__inner{color:var(--ink-faint);justify-content:center;align-items:center;gap:10px;font-size:.9rem;display:flex}.site-footer .brand__mark{font-size:.95rem}.dot{opacity:.5}.reveal{opacity:0;animation:.7s cubic-bezier(.22,1,.36,1) forwards reveal;transform:translateY(16px)}@keyframes reveal{to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;animation:none;transform:none}.btn:hover,.next-card:hover,.calendar__cell:hover{transform:none}.photo__img--cur{animation:none}}@media (width<=880px){.calendar{grid-template-columns:1fr}.calendar__detail{position:static}}@media (width<=640px){.site-header__inner{height:60px}.brand{gap:7px;font-size:1.15rem}.nav__link{padding:7px 13px;font-size:.9rem}.hero{padding:56px 0 40px}.hero__lede{margin-top:20px}.hero__cta{margin-top:28px}.hero__cta .btn,.page-head .btn{flex:auto;justify-content:center;min-height:50px}.section-head{flex-direction:column;align-items:flex-start;gap:8px}}@media (width<=560px){.next-card{grid-template-columns:1fr;gap:12px}.next-card__date{flex-direction:row;align-items:center;gap:10px}.calendar__main{padding:14px}.calendar__grid{gap:4px}.calendar__cell{border-radius:8px;gap:4px}.calendar__num{font-size:.85rem}.calendar__dot{width:5px;height:5px}.calendar__detail{padding:20px}.calendar__add,.calendar__confirm-yes,.calendar__confirm-no,.calendar__event-remove{min-height:44px}.calendar__add{justify-content:center;align-items:center;display:flex}}@media (width<=380px){.brand__text{font-size:1.05rem}.calendar__weekday{font-size:.6rem}}.photo{border:1px solid var(--line);transform:rotate(var(--tilt,0deg));background:#fbf8f1;border-radius:4px;max-width:100%;margin:0;padding:10px 10px 12px;transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .35s;box-shadow:0 2px 4px #211c1614,0 22px 40px -26px #211c168c}.photo img{object-fit:cover;filter:grayscale()contrast(1.04);border-radius:2px;width:100%;height:100%;display:block}.photo__stack{display:block;position:relative}.photo__img--prev{position:absolute;inset:0}.photo__img--cur{animation:.9s photoFade;position:relative}@keyframes photoFade{0%{opacity:0}to{opacity:1}}.photo figcaption{text-align:center;font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-top:9px;font-size:.66rem}.photo:hover{z-index:5;transform:rotate(0)translateY(-6px)scale(1.02);box-shadow:0 6px 10px #211c161a,0 36px 60px -28px #211c1699}.photo--landscape img{aspect-ratio:3/2}.photo--portrait img{aspect-ratio:3/4}.hero__photos{z-index:2;width:min(34vw,360px);position:absolute;top:50%;right:clamp(20px,5vw,80px);transform:translateY(-50%)}.hero__photo{position:absolute}.hero__photo--front{width:100%;top:26%;right:0}.hero__photo--back{width:64%;top:-8%;right:58%}@media (width<=1040px){.hero__photos{display:none}}.moments{padding:0 0 clamp(70px,12vh,130px)}.moments__wall{grid-template-columns:repeat(12,1fr);align-items:start;gap:26px 22px;display:grid}.moments__item{grid-column:span 4}.moments__item:first-child{grid-column:1/span 5;margin-top:10px}.moments__item:nth-child(2){grid-column:6/span 3}.moments__item:nth-child(3){grid-column:9/span 4;margin-top:38px}.moments__item:nth-child(4){grid-column:2/span 3;margin-top:30px}.moments__item:nth-child(5){grid-column:5/span 5}.moments__item:nth-child(6){grid-column:10/span 3;margin-top:14px}.page-head-row{justify-content:space-between;align-items:flex-start;gap:30px;display:flex}.page-head__photo{flex:none;width:clamp(180px,22vw,250px);margin-top:6px}@media (width<=760px){.moments__wall{grid-template-columns:1fr 1fr;gap:18px}.moments__item,.moments__item:nth-child(n){grid-column:auto;margin-top:0}.moments__item:nth-child(odd){transform:rotate(-1.5deg)}.moments__item:nth-child(2n){margin-top:16px;transform:rotate(1.5deg)}.page-head-row{flex-direction:column-reverse;align-items:stretch}.page-head__photo{align-self:center;width:180px;margin:0 0 6px}}@media (width<=420px){.moments__wall{grid-template-columns:1fr}.moments__item:nth-child(n){transform:rotate(var(--tilt,0deg));justify-self:center;max-width:320px;margin-top:0}}.calendar__bar{flex-wrap:wrap;gap:12px}.calendar__controls{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.calendar__views{background:var(--paper-2);border:1px solid var(--line);border-radius:999px;padding:3px;display:flex}.calendar__view-btn{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);background:0 0;border:none;border-radius:999px;padding:7px 15px;font-size:.66rem;transition:background .18s,color .18s}.calendar__view-btn:hover{color:var(--ink)}.calendar__view-btn.is-active{background:var(--ink);color:var(--paper)}.calendar__week{grid-template-columns:repeat(7,1fr);gap:8px;display:grid}.calendar__weekday-col{text-align:left;border:1px solid var(--line);background:#fff6;border-radius:12px;flex-direction:column;gap:10px;min-height:168px;padding:12px 10px;transition:border-color .16s,background .16s,transform .16s;display:flex}.calendar__weekday-col:hover{background:var(--paper-2);transform:translateY(-2px)}.calendar__weekday-col.is-today{border-color:var(--terracotta)}.calendar__weekday-col.is-selected{background:var(--ink)}.calendar__weekday-col.is-selected .calendar__week-dow,.calendar__weekday-col.is-selected .calendar__week-num,.calendar__weekday-col.is-selected .calendar__week-empty{color:var(--paper)}.calendar__week-head{justify-content:space-between;align-items:baseline;display:flex}.calendar__week-dow{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);font-size:.62rem}.calendar__week-num{font-family:var(--font-display);color:var(--ink);font-size:1.35rem}.calendar__weekday-col.is-today .calendar__week-num{color:var(--terracotta)}.calendar__week-events{flex-direction:column;gap:6px;display:flex}.calendar__chip{background:var(--paper);text-align:left;border:1px solid;border-radius:6px;padding:4px 7px;font-size:.68rem;line-height:1.25}.calendar__week-empty{color:var(--ink-faint);opacity:.6}.calendar__year{grid-template-columns:repeat(4,1fr);gap:20px 18px;display:grid}.calendar__mini-title{text-align:left;width:100%;font-family:var(--font-display);color:var(--ink);border:none;border-bottom:1px solid var(--line);background:0 0;margin-bottom:8px;padding:2px 0;font-size:1.05rem;transition:color .16s;display:block}.calendar__mini-title:hover{color:var(--terracotta)}.calendar__mini-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.calendar__mini-cell{aspect-ratio:1;font-variant-numeric:tabular-nums;color:var(--ink-soft);background:0 0;border:none;border-radius:5px;justify-content:center;align-items:center;font-size:.62rem;transition:background .14s,color .14s;display:flex}.calendar__mini-cell.is-empty{visibility:hidden}.calendar__mini-cell:not(.is-empty):hover{background:var(--paper-2)}.calendar__mini-cell.has-events{color:var(--terracotta-deep);background:#c8553d24;font-weight:700}.calendar__mini-cell.is-today{outline:1px solid var(--terracotta);color:var(--terracotta)}.calendar__mini-cell.is-selected{background:var(--ink);color:var(--paper)}.upload{padding:0 0 clamp(70px,12vh,130px)}.upload__card{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#ffffff80;padding:clamp(24px,4vw,40px)}.upload__intro h2{margin:8px 0 10px;font-size:clamp(1.8rem,4vw,2.6rem)}.upload__lede{color:var(--ink-soft);max-width:52ch;margin-bottom:20px}.upload__input{display:none}.upload__btn{min-height:52px}.upload__note{font-family:var(--font-mono);letter-spacing:.04em;color:var(--sage);margin-top:12px;font-size:.72rem}.upload__grid{border-top:1px solid var(--line);grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:12px;margin-top:26px;padding-top:24px;display:grid}.upload__thumb{aspect-ratio:1;border:1px solid var(--line);border-radius:8px;margin:0;position:relative;overflow:hidden}.upload__thumb img{object-fit:cover;filter:grayscale()contrast(1.04);width:100%;height:100%}.upload__remove{color:#fff;background:#211c16bf;border:none;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;font-size:.7rem;transition:background .16s;display:flex;position:absolute;top:5px;right:5px}.upload__remove:hover{background:var(--terracotta)}@media (width<=1024px){.calendar__year{grid-template-columns:repeat(3,1fr)}}@media (width<=700px){.calendar__year{grid-template-columns:repeat(2,1fr)}.calendar__week{grid-template-columns:1fr}.calendar__weekday-col{flex-direction:row;align-items:flex-start;gap:14px;min-height:0}.calendar__week-head{flex-direction:column;align-items:center;gap:2px;min-width:46px}.calendar__week-events{flex:1}}@media (width<=420px){.calendar__year{grid-template-columns:1fr;max-width:320px;margin:0 auto}.calendar__controls{justify-content:space-between;width:100%}}
