@font-face{font-family:'EB Garamond';src:url('/assets/eb-garamond-400.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'EB Garamond';src:url('/assets/eb-garamond-italic-400.woff') format('woff');font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:'DM Sans';src:url('/assets/dm-sans-400.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'DM Sans';src:url('/assets/dm-sans-500.woff') format('woff');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:Manrope;src:url('/assets/manrope-600.woff') format('woff');font-weight:600;font-style:normal;font-display:swap}
:root{--paper:#f7f3eb;--outer:#e8e0d3;--ink:#362f2a;--muted:#70665d;--coral:#9b4c38;--soft-coral:#e7cfc1;--rule:#cfc5b7;--serif:'EB Garamond',Georgia,serif;--sans:'DM Sans',Arial,sans-serif;--gutter:24px;--page:1080px}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:24px}
body{margin:0;background:var(--outer);font:400 16px/1.7 var(--sans);color:var(--ink);-webkit-font-smoothing:antialiased}
body.viewer-open{overflow:hidden}
body::after{content:'';position:fixed;inset:0;pointer-events:none;opacity:.1;z-index:10;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='.75' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.23' filter='url(%23n)'/%3E%3C/svg%3E")}
::selection{background:var(--soft-coral);color:var(--ink)}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;color:inherit;border-radius:0}
button,a{-webkit-tap-highlight-color:transparent}
button:disabled{cursor:default;opacity:.4}
a:focus-visible,button:focus-visible{outline:2px solid var(--coral);outline-offset:5px}
img{display:block;width:100%;height:auto}
p,h1,h2,h3,figure{margin:0}
em{font-weight:400}
strong{font-weight:500}
.icon-definitions{position:absolute;width:0;height:0;overflow:hidden}
.icon{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.song-mark{width:48px;height:34px;fill:none;stroke:currentColor;stroke-width:1.1;overflow:visible;color:var(--coral)}
.sr-only{position:absolute;clip:rect(0,0,0,0);clip-path:inset(50%);width:1px;height:1px;overflow:hidden;white-space:nowrap}
.skip-link{position:fixed;left:12px;top:10px;background:var(--ink);color:var(--paper);padding:12px 18px;z-index:100;transform:translateY(-160%)}
.skip-link:focus{transform:none}
.programme{background:var(--paper);border-top:4px solid var(--coral);max-width:1512px;margin-inline:auto;overflow:clip}
.page-width{width:min(calc(100% - var(--gutter)*2),var(--page));margin-inline:auto}
.eyebrow{font:500 10px/1.6 var(--sans);text-transform:uppercase;letter-spacing:.16em}
.masthead{width:min(calc(100% - var(--gutter)*2),1280px);margin:auto;min-height:69px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid var(--rule);font-size:10px;line-height:1.45}
.masthead-message{max-width:130px;color:var(--muted);padding-block:12px}
.masthead-link{min-height:44px;display:flex;align-items:center;gap:10px;color:var(--coral)}
.masthead-link .icon{width:14px;height:14px}
.cover-heading{padding:31px 18px 0;text-align:center}
.cover-dedication{font-size:9px;letter-spacing:.21em;color:var(--coral);margin-bottom:17px}
h1{font:400 clamp(42px,10.6vw,67px)/1.03 var(--serif);letter-spacing:-.025em}
h1>span{display:block;font-size:.73em;font-style:italic;letter-spacing:-.035em;line-height:1.23;margin-top:5px}
.cover-date{display:inline-flex;align-items:center;justify-content:center;min-height:44px;font-size:11px;letter-spacing:.015em;margin-top:9px}
.cover-date time>span{padding-inline:7px;color:var(--coral)}
.cover-composition{position:relative;display:grid;grid-template-columns:1fr;align-items:center;padding:18px 0 0;margin:auto;isolation:isolate;max-width:1180px}
.cover-portrait{position:relative;width:min(72%,310px);margin:auto;z-index:2}
.hero-photo{box-shadow:10px 13px 0 #e9dfd1}
.hero-photo::after{content:'';height:5px;background:var(--coral);position:absolute;bottom:0;left:0;right:0}
.cover-aside{display:none}
.song-lines{position:absolute;top:18%;height:68%;left:-26%;width:152%;z-index:-1;stroke:var(--coral);stroke-width:.7;opacity:.32}
.cover-identity{text-align:center;margin:37px auto 0;padding:0 18px 42px}
.cover-identity>.eyebrow{font-size:9px;color:var(--coral);letter-spacing:.18em;margin-bottom:8px}
.cover-identity h2{font:400 clamp(48px,12vw,69px)/1.1 var(--serif);letter-spacing:-.025em}
.cover-identity h2>span{font-size:.42em;letter-spacing:0;vertical-align:baseline;margin-right:3px}
.maiden-name{font:italic 19px/1.5 var(--serif);color:var(--muted);margin-top:4px}
.mobile-relationships{font-size:10px;color:var(--muted);margin-top:17px;letter-spacing:.025em}
.section-label{display:flex;align-items:center;gap:14px;font-size:10px;letter-spacing:.06em;line-height:1.5}
.section-label h2,.section-label p{font:inherit}
.chapter-number{color:var(--coral);font-size:10px;font-variant-numeric:tabular-nums}
.section-rule{height:1px;flex:1;background:var(--rule);margin-left:3px}
.invitation{padding-block:23px 0;border-top:1px solid var(--rule)}
.arrangements{display:grid;grid-template-columns:1fr;gap:25px;padding-block:29px 32px;border-bottom:1px solid var(--rule)}
.arrangement .eyebrow{color:var(--coral);font-size:9px;letter-spacing:.14em;margin-bottom:6px}
.arrangement-title{font:400 28px/1.2 var(--serif);letter-spacing:-.02em}
.arrangement-sub{font-size:14px;line-height:1.7;margin-top:6px;color:var(--muted);display:flex;align-items:center;gap:10px}
.small-dot{height:3px;width:3px;display:inline-block;border-radius:50%;background:var(--coral)}
.timezone{font-size:11px;margin-left:-5px}
.calendar-link{display:flex;align-items:center;gap:11px;min-height:48px;font-size:12px;border:1px solid #bda895;color:var(--coral);padding:12px 15px;width:100%;transition:background .2s}
.calendar-link:hover{background:#ede1d4}
.calendar-link>.icon{width:16px;height:16px}
.calendar-arrow{margin-left:auto}
.family-letter{padding-block:60px 64px}
.letter-intro>.eyebrow{color:var(--coral);font-size:9px;letter-spacing:.17em}
.letter-intro h2{font:400 45px/1.03 var(--serif);letter-spacing:-.025em;margin-top:17px}
.letter-intro h2>em{color:var(--coral)}
.letter-flourish{display:none}
.letter-copy{font-size:15px;line-height:1.85;margin-top:30px;color:#5c5149}
.letter-copy p+p{margin-top:18px}
.letter-copy strong{color:var(--ink)}
.letter-copy .letter-signature{font:italic 21px/1.35 var(--serif);color:var(--coral);margin-top:25px}
.letter-signature>span{font:400 14px/2 var(--sans);color:var(--ink)}
.life-album{padding-top:30px;background:linear-gradient(to bottom,#eee5d8 0%,#f1e9dc 45%,var(--paper) 100%);position:relative}
.life-album::before{content:'';position:absolute;top:-7px;left:0;right:0;height:10px;background:linear-gradient(135deg,transparent 50%,#eee5d8 51%) 0 0/10px 10px repeat-x}
.album-heading .section-label{margin-bottom:29px}
.album-heading h2{font:400 clamp(41px,10.7vw,58px)/1.07 var(--serif);letter-spacing:-.035em}
.album-heading h2>em{color:var(--coral)}
.album-spread{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:22px 14px;padding-top:33px;align-items:start}
.album-photo{position:relative;min-width:0}
.album-photo figcaption,.together-photo figcaption{font:italic 17px/1.35 var(--serif);color:#6a594b;margin-top:10px}
.laughter-photo{grid-column:1/-1}
.milestone-photo{grid-column:7/-1;grid-row:2/span 2;transform:rotate(2deg);padding:7px 7px 13px;background:#fffaf2;box-shadow:0 8px 17px -14px #58433670;margin-top:7px}
.milestone-photo figcaption{font-size:15px;margin-top:7px}
.seated-photo{grid-column:1/7;grid-row:2/span 2;transform:rotate(-2deg);padding:7px 7px 13px;background:#fffaf2;box-shadow:0 8px 17px -14px #58433670;margin-top:40px}
.shared-photo{grid-column:2/12;margin-top:13px}
.photo-open{display:block;position:relative;width:100%;padding:0;border:none;background:transparent;cursor:zoom-in;text-align:inherit;overflow:hidden}
.photo-open img{transition:filter .3s}
.photo-open:hover img{filter:brightness(1.035)}
.photo-expand{position:absolute;top:10px;right:10px;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;color:#fff;background:#302c2480;backdrop-filter:blur(4px);opacity:.85;transition:opacity .2s}
.photo-expand .icon{height:13px;width:13px;stroke-width:1.5}
.photo-open:hover .photo-expand,.photo-open:focus-visible .photo-expand{opacity:1}
.hero-photo .photo-expand{opacity:0}
.hero-photo:hover .photo-expand,.hero-photo:focus-visible .photo-expand{opacity:1}
.legacy{padding-block:48px 44px;text-align:center}
.legacy p{font:400 clamp(29px,8.1vw,44px)/1.2 var(--serif);letter-spacing:-.025em;max-width:720px;margin-inline:auto}
.legacy em{color:var(--coral)}
.desktop-break{display:none}
.legacy-rule{display:block;width:1px;height:30px;background:#b98e76;margin:0 auto 21px}
.legacy-rule:last-child{margin:24px auto 0}
.together-photo{padding-bottom:17px}
.together-photo figcaption{text-align:center;margin-top:13px}
.closing{text-align:center;padding-block:58px 30px}
.closing>.song-mark{width:46px;height:33px;margin-bottom:22px}
.closing h2{font:400 clamp(35px,9.5vw,54px)/1.1 var(--serif);letter-spacing:-.03em}
.closing h2>em{color:var(--coral)}
.closing-invitation{font-size:12px;color:var(--muted);line-height:1.9;margin-top:23px}
.closing-date{font:400 23px/1.4 var(--serif);margin-top:18px}
.closing-date>span{color:var(--coral);padding-inline:8px}
.closing-place{font-size:12px;color:var(--muted);margin-top:7px}
.enquiries{margin:31px auto 0;max-width:390px;border-top:1px solid var(--rule);padding-top:22px}
.enquiries>.eyebrow{font-size:9px;color:var(--muted);display:block;margin-bottom:7px}
.contact-link{display:flex;align-items:center;justify-content:center;gap:20px;min-height:48px;font-size:14px}
.contact-number{color:var(--muted);padding-left:12px}
.contact-link>.icon{width:16px;height:16px;color:var(--coral)}
.site-footer{display:flex;align-items:center;justify-content:space-between;gap:14px;border-top:1px solid var(--rule);padding-block:20px 24px;font-size:10px;color:var(--muted)}
.site-footer>p:first-child{font:italic 16px/1.4 var(--serif)}
.design-credit{font-size:8px;white-space:nowrap}
.design-credit>span{font-family:Manrope,Arial,sans-serif;font-size:8px;font-weight:600;letter-spacing:.08em;margin-left:4px;color:var(--ink)}
.photo-viewer{inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;border:none;background:#241f1bef;color:#f7f3eb;padding:22px 20px 20px;overflow:auto}
.photo-viewer[open]{display:flex;flex-direction:column;justify-content:space-between;gap:12px}
.photo-viewer::backdrop{background:#241f1b}
.viewer-heading{display:flex;align-items:center;justify-content:space-between;max-width:1200px;width:100%;margin:auto;flex-shrink:0}
.viewer-count{font-size:11px;letter-spacing:.12em;opacity:.75}
.viewer-close,.viewer-navigation button{display:flex;align-items:center;justify-content:center;gap:12px;background:none;border:none;padding:10px 0;min-height:44px;font-size:13px}
.viewer-close .icon{width:19px;height:19px}
.viewer-figure{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:0;margin:0 auto;width:100%}
.viewer-figure img{width:100%;height:calc(100dvh - 190px);min-height:180px;object-fit:contain;transition:opacity .18s}
.viewer-figure figcaption{font:italic 21px/1.35 var(--serif);text-align:center;padding-top:14px;min-height:43px}
.viewer-navigation{display:flex;align-items:center;justify-content:space-between;max-width:600px;width:100%;margin:auto;flex-shrink:0}
.viewer-navigation .icon{width:18px;height:18px}
.photo-viewer button:focus-visible{outline-color:var(--soft-coral)}
.motion-ready .reveal{opacity:0;translate:0 18px;transition:opacity .9s ease,translate 1.05s cubic-bezier(.2,.65,.3,1)}
.motion-ready .reveal.is-visible{opacity:1;translate:0 0}
@media(min-width:600px){
  :root{--gutter:44px}
  .masthead{font-size:11px;height:77px}
  .masthead-message{max-width:none}
  .cover-heading{padding-top:40px}
  .cover-dedication{font-size:10px}
  h1{font-size:76px}
  .cover-date{font-size:12px;margin-top:14px}
  .cover-composition{grid-template-columns:1fr 1.55fr 1fr;padding-top:27px;max-width:910px;gap:24px;padding-inline:35px}
  .cover-portrait{width:100%;max-width:330px}
  .cover-aside{display:block;font:400 31px/1.1 var(--serif)}
  .cover-aside .eyebrow{font-size:8px;color:var(--muted);letter-spacing:.12em;display:block;margin-bottom:23px}
  .aside-left{align-self:end;padding-bottom:63px;text-align:right}
  .aside-left em{color:var(--coral)}
  .aside-right{align-self:start;padding-top:44px}
  .aside-right p{font-size:21px;line-height:1.6;margin-top:17px}
  .aside-small{display:block;font:italic 19px/1.4 var(--serif);color:var(--coral);margin-top:22px}
  .song-lines{left:-10%;width:120%;top:25%;height:55%}
  .cover-identity{margin-top:32px;padding-bottom:47px}
  .cover-identity h2{font-size:70px}
  .cover-identity>.eyebrow{font-size:9px}
  .maiden-name{font-size:22px}
  .mobile-relationships{display:none}
  .arrangements{grid-template-columns:1fr 1fr;gap:25px 30px;padding-block:33px}
  .arrangement-title{font-size:29px}
  .calendar-link{grid-column:1/-1;width:fit-content;min-width:200px}
  .calendar-arrow{margin-left:22px}
  .family-letter{display:grid;grid-template-columns:.85fr 1.15fr;gap:45px;padding-block:74px 85px}
  .letter-intro h2{font-size:46px}
  .letter-flourish{display:flex;gap:25px;align-items:center;margin-top:35px}
  .letter-flourish>span{height:1px;width:55px;background:var(--rule)}
  .letter-flourish .song-mark{width:38px;height:28px;opacity:.7}
  .letter-copy{margin-top:0}
  .life-album{padding-top:40px}
  .album-heading h2{font-size:63px;line-height:1.03;letter-spacing:-.03em}
  .album-spread{gap:30px;padding-top:40px}
  .laughter-photo{grid-column:1/9;grid-row:1/span 2}
  .milestone-photo{grid-column:10/13;grid-row:1/span 2;margin-top:-130px;transform:rotate(3deg);padding:9px 9px 15px}
  .seated-photo{grid-column:2/5;grid-row:3/span 2;margin-top:0;transform:rotate(-3deg);padding:9px 9px 15px}
  .shared-photo{grid-column:6/13;grid-row:3/span 2;margin-top:-23px}
  .album-photo figcaption{font-size:19px}
  .milestone-photo figcaption{font-size:15px}
  .legacy{padding-block:53px}
  .legacy p{font-size:45px;line-height:1.15}
  .legacy-rule{height:38px;margin-bottom:28px}
  .legacy-rule:last-child{margin-top:30px}
  .desktop-break{display:initial}
  .together-photo{max-width:760px;width:calc(100% - var(--gutter)*3);padding-bottom:0}
  .together-photo figcaption{font-size:21px}
  .closing{padding-block:75px 48px}
  .closing h2{font-size:55px}
  .closing-date{font-size:27px}
  .closing-invitation,.closing-place{font-size:14px}
  .enquiries{margin-top:35px}
  .contact-link{font-size:15px}
  .site-footer{padding-block:24px 28px}
  .site-footer>p:first-child{font-size:19px}
  .design-credit,.design-credit>span{font-size:9px}
}
@media(min-width:1000px){
  .programme{margin:18px auto 26px;width:calc(100% - 40px);box-shadow:0 5px 50px #5b44240a}
  .masthead{height:70px}
  .cover-heading{padding-top:33px}
  h1{font-size:88px}
  h1>span{font-size:.69em;line-height:1.15}
  .cover-date{margin-top:9px}
  .cover-composition{padding-top:20px;max-width:1020px;grid-template-columns:1fr 1.25fr 1fr;gap:52px}
  .cover-portrait{max-width:306px}
  .cover-aside{font-size:41px}
  .cover-aside .eyebrow{font-size:9px;letter-spacing:.14em}
  .aside-left{padding-bottom:55px}
  .aside-right{padding-top:43px}
  .aside-right p{font-size:24px;line-height:1.5}
  .aside-small{font-size:22px;margin-top:26px}
  .cover-identity{margin-top:31px;padding-bottom:46px}
  .cover-identity h2{font-size:76px}
  .arrangements{grid-template-columns:1fr 1fr auto;gap:36px;align-items:center;padding-block:36px}
  .arrangement-title{font-size:31px}
  .calendar-link{grid-column:auto;min-width:0;gap:10px;padding:12px 15px}
  .calendar-arrow{display:none}
  .family-letter{grid-template-columns:1fr 1fr;gap:70px;padding-block:94px 99px}
  .letter-intro h2{font-size:63px}
  .letter-intro .eyebrow{font-size:10px}
  .letter-copy{font-size:16px;line-height:1.9;max-width:480px}
  .letter-copy .letter-signature{font-size:25px}
  .life-album{padding-top:45px}
  .album-heading .section-label{margin-bottom:39px}
  .album-heading h2{font-size:79px;max-width:750px}
  .album-spread{gap:40px;padding-top:46px}
  .laughter-photo{grid-column:1/9}
  .milestone-photo{grid-column:10/13;margin-top:-170px}
  .seated-photo{grid-column:2/5;margin-top:-5px}
  .shared-photo{grid-column:6/13;margin-top:-40px}
  .album-photo figcaption{font-size:22px}
  .milestone-photo figcaption{font-size:17px}
  .legacy{padding-block:65px}
  .legacy p{font-size:58px}
  .legacy-rule{height:45px;margin-bottom:32px}
  .legacy-rule:last-child{margin-top:35px}
  .together-photo{max-width:850px}
  .closing{padding-block:94px 56px}
  .closing h2{font-size:68px}
  .closing>.song-mark{margin-bottom:26px}
  .closing-invitation{margin-top:27px}
  .photo-expand{opacity:0}
}
@media(max-width:359px){
  :root{--gutter:20px}
  .masthead{font-size:9px}
  .masthead-link{gap:7px}
  .cover-heading{padding-inline:10px}
  h1{font-size:39px}
  .cover-date{font-size:10px}
  .cover-date time>span{padding-inline:4px}
  .cover-identity h2{font-size:47px}
  .mobile-relationships{font-size:9px}
  .arrangement-title{font-size:25px}
  .letter-intro h2{font-size:41px}
  .album-heading h2{font-size:37px}
  .milestone-photo figcaption{font-size:13px}
  .closing h2{font-size:32px}
  .closing-date{font-size:21px}
  .contact-link{font-size:12px;gap:15px}
  .contact-number{padding-left:8px}
  .site-footer{gap:8px}
  .site-footer>p:first-child{font-size:14px}
  .design-credit,.design-credit>span{font-size:7px}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .motion-ready .reveal{opacity:1;translate:none}
}
@media print{
  body{background:white}
  body::after,.masthead,.photo-expand,.calendar-link,.design-credit,.photo-viewer{display:none!important}
  .programme{margin:0;width:100%;box-shadow:none}
  .cover-portrait{width:200px}
  .cover-heading h1{font-size:45px}
  .cover-identity h2{font-size:45px}
  .cover-aside,.song-lines{display:none}
  .cover-composition{display:block}
  .reveal{opacity:1!important;translate:none!important}
  .family-letter,.album-photo,.closing{break-inside:avoid}
  .life-album{background:white}
  .album-spread{display:flex;flex-wrap:wrap;gap:20px}
  .album-photo{width:43%;margin:0;transform:none;padding:0}
  .legacy{padding-block:30px}
  .together-photo{max-width:500px}
}
