@font-face{font-family:Manrope;src:url('/fonts/manrope-variable.ttf') format('truetype');font-weight:200 800;font-display:swap}
/* Moss and cream are the default; dark colors are an explicit reader choice. */
:root{color-scheme:light dark;--paper:#ecf0e5;--surface:#e0e6d7;--ink:#20392f;--muted:#526559;--line:#becbb8;--accent:#80502f;--button:#234a3a;--button-ink:#fffdf8;--error:#a03d2f}
:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}*{box-sizing:border-box}body{margin:0;font-size:15px}header,footer{max-width:1160px;margin:auto;padding:30px 32px;display:flex;justify-content:space-between;align-items:center;font-size:12px;letter-spacing:.04em}header{border-bottom:1px solid var(--line)}.signature{font-family:Georgia,serif;font-size:28px;letter-spacing:-1.4px;text-decoration:none;color:inherit}.signature span{color:var(--accent)}main{max-width:1096px;margin:48px auto;padding:0 32px;min-height:65vh}h1,h2{font-family:Georgia,"Times New Roman",serif;font-weight:400;letter-spacing:-.045em;line-height:1.06}h1{font-size:clamp(38px,5.5vw,64px);margin:24px 0}h2{font-size:clamp(26px,3vw,36px);margin:48px 0 20px}em{font-weight:400;color:var(--accent)}p{line-height:1.8;max-width:570px}.kicker{font-size:11px;letter-spacing:.17em;text-transform:uppercase;color:var(--accent)}.intro{font-size:16px;color:var(--muted)}.button{display:inline-flex;align-items:center;justify-content:center;border:0;background:var(--button);color:var(--button-ink);padding:17px 25px;min-height:52px;border-radius:3px;font:inherit;cursor:pointer;margin:18px 0}.button:disabled{opacity:.55;cursor:wait}.text-button{background:none;border:0;border-bottom:1px solid var(--line);padding:8px 0;color:inherit;cursor:pointer;font:inherit}.entry{max-width:560px;margin:20px auto 100px}.entry h1{font-size:clamp(38px,5.5vw,60px)}label{display:block;margin-top:24px;font-size:14px}input{display:block;width:100%;border:1px solid var(--line);background:var(--surface);border-radius:3px;padding:18px;margin:12px 0;font-size:25px;letter-spacing:.3em;color:inherit}input:focus-visible,button:focus-visible,a:focus-visible{outline:3px solid var(--accent);outline-offset:5px}.error{color:var(--error);font-size:14px}.hint{font-size:13px;color:var(--muted)}.letter{max-width:600px}.personal-photos{margin-top:32px}.grid{display:grid;align-items:start;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.card{padding:0;border:0;text-align:left;background:transparent;color:inherit;cursor:pointer;min-width:0}.card img{display:block;width:100%;height:auto;background:var(--surface);object-fit:contain;border-radius:10px}.card span{overflow-wrap:anywhere;display:block;font-size:12px;line-height:1.5;margin:8px 0 2px}.signoff{font-family:Georgia,serif;font-style:italic;font-size:18px}.section-top{display:flex;justify-content:space-between;align-items:baseline}footer{justify-content:center;gap:10px;color:var(--muted);font-size:11px;text-align:center;border-top:1px solid var(--line)}@media(max-width:600px){header{padding:20px}header>span{font-size:10px}main{padding:0 20px;margin:32px auto}.entry{margin:12px auto 60px}.entry h1{font-size:42px}.grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}h1{margin:18px 0 22px}h2{margin-top:36px}.personal-photos{margin-top:28px}.section-top h2{font-size:28px}footer{flex-wrap:wrap;padding:24px}.intro{font-size:15px}}

footer{flex-wrap:wrap;row-gap:20px}

@media(max-width:600px){header{gap:16px;flex-wrap:wrap}.signature{font-size:24px;letter-spacing:-1px}}

.prose{white-space:pre-wrap}

@media(max-width:600px){header,main,footer{padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right))}.letter p{line-height:1.75}.letter .kicker{font-size:10px}.text-button{min-height:44px}.signature,h1,h2{overflow-wrap:anywhere}}

/* A transparent lightbox: the image floats over the page, with controls on the image. */
:root{scrollbar-gutter:stable}
.card img.pending-dimensions{min-height:180px}
#photo{padding:4px;width:fit-content;max-width:calc(100vw - 24px);max-height:calc(100dvh - 24px);border:0;border-radius:0;background:transparent;color:#fff;color-scheme:dark;overflow:auto;overscroll-behavior:contain;box-shadow:none}
#photo::backdrop{background:rgb(4 9 7 / .9);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:photo-backdrop-in 280ms ease-out both}
.photo-stage{position:relative;width:fit-content;margin:auto}
#photo img{display:block;width:auto;height:auto;max-width:min(900px,calc(100vw - 40px));max-height:calc(100dvh - 110px);object-fit:contain;border-radius:5px}
#photo p{font-size:13px;line-height:1.6;margin:10px auto 0;max-width:560px;text-align:center;overflow-wrap:anywhere;text-shadow:0 1px 5px #000,0 0 15px #000}
#photo .photo-control{position:absolute;z-index:1;right:10px;display:grid;place-items:center;width:44px;height:44px;margin:0;padding:0;border:1px solid rgb(255 255 255 / .35);border-radius:50%;background:rgb(18 25 23 / .85);color:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}
#photo .close{top:10px}
#photo .photo-actions{position:absolute;z-index:1;right:10px;bottom:10px;left:10px;display:flex;align-items:center;justify-content:flex-end;gap:8px}
#photo .photo-actions .photo-control{position:static;flex:0 0 44px}
#photo .photo-actions .resolution-control{flex:0 1 auto;min-width:0}
#photo .photo-control:focus-visible{outline:2px solid #fff;outline-offset:2px}
#photo .photo-control:disabled{opacity:.5;cursor:wait}
#photo .photo-control svg{display:block;pointer-events:none}
#save[hidden],#full-resolution[hidden],#save-status:empty{display:none}
html:has(#photo[open]){overflow:hidden}
@media(max-height:500px){#photo img{max-height:calc(100dvh - 80px)}}

.grid{grid-auto-rows:4px;grid-auto-flow:row}
@media(max-width:359px){.grid{column-gap:10px}.card span{font-size:11px}}

#photo[open]{animation:photo-enter 280ms cubic-bezier(.16,1,.3,1) both;transform-origin:center}
#photo[open].is-closing{animation:photo-exit 180ms ease-in both;pointer-events:none}
#photo.is-closing::backdrop{animation:photo-backdrop-out 180ms ease-in both}
@keyframes photo-enter{from{opacity:0;transform:translateY(14px) scale(.94)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes photo-exit{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(8px) scale(.97)}}
@keyframes photo-backdrop-in{from{background:rgb(8 13 12 / 0);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}to{background:rgb(4 9 7 / .9);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}
@keyframes photo-backdrop-out{from{background:rgb(4 9 7 / .9);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}to{background:rgb(8 13 12 / 0);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}}
@media(prefers-reduced-motion:reduce){#photo[open],#photo[open].is-closing,#photo::backdrop,#photo.is-closing::backdrop{animation:none}}
@media(prefers-reduced-transparency:reduce){#photo::backdrop,#photo.is-closing::backdrop{background:rgb(4 9 7 / .96);-webkit-backdrop-filter:none;backdrop-filter:none;animation:none}}

footer a{color:inherit;text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}footer a:hover{color:var(--accent);text-decoration-color:currentColor}footer>span{line-height:1.9}

#photo .resolution-control{width:auto;height:auto;min-height:44px;padding:8px 12px;border-radius:22px;font:500 12px/1.25 system-ui,sans-serif;white-space:normal}
#photo .resolution-control.is-ready{opacity:1;border-color:rgb(255 255 255 / .65)}

/* The invitation's greeting is a deliberate personal dedication. */
.recipient-greeting{margin:28px 0;padding-left:18px;border-left:3px solid #b8c797}
.recipient-greeting .recipient-name{margin:0;font:400 clamp(25px,3.2vw,32px)/1.25 Georgia,"Times New Roman",serif;letter-spacing:-.025em;color:var(--ink);overflow-wrap:anywhere}
.recipient-name strong{font-weight:600;font-style:italic;color:var(--accent)}
.recipient-greeting .recipient-welcome{margin:7px 0 0;font-size:14px;line-height:1.6;color:var(--muted)}
@media(max-width:600px){.recipient-greeting{margin:24px 0;padding-left:14px}.recipient-greeting .recipient-welcome{font-size:13px}}

.entry .invitation-greeting{font-size:clamp(30px,5vw,44px);line-height:1.15;letter-spacing:-.035em;overflow-wrap:anywhere}

/* A warmer ending, while the gallery remains quiet. */
footer{max-width:none;width:100%;flex-direction:column;gap:22px;padding:44px 24px 38px;background:#193d38;color:#ecf0e5;border-top:1px solid #365b4c;color-scheme:dark}
footer .footer-closing{margin:0;max-width:none;font:400 clamp(25px,3.2vw,34px)/1.3 Georgia,"Times New Roman",serif;letter-spacing:-.025em}
footer .footer-closing em{color:#f2ab89;font-style:italic}
footer>span{font-size:12px;color:#dce5d5}
footer a{color:#f2ab89;text-decoration-color:#f2ab8966;text-underline-offset:4px}
footer a:hover{color:#fff4e5;text-decoration-color:currentColor}
footer a:focus-visible{outline:2px solid #f2ab89;outline-offset:4px}

/* Swipe, trackpad, buttons, and keyboard all use the authorized photo list. */
.photo-stage{touch-action:pan-y pinch-zoom;user-select:none;-webkit-user-select:none}
#photo img{max-height:calc(100dvh - 176px);-webkit-user-drag:none}
#photo .photo-navigation{display:flex;justify-content:center;align-items:center;gap:18px;margin:12px auto 0}
#photo .photo-navigation[hidden]{display:none}
#photo .photo-navigation .photo-control{position:static;flex:none}
#photo .photo-navigation .photo-control:disabled{cursor:default;opacity:.3}
#photo-count{min-width:94px;text-align:center;font-size:12px;font-variant-numeric:tabular-nums;color:#fff;text-shadow:0 1px 5px #000}
@media(max-height:500px){#photo img{max-height:calc(100dvh - 150px)}}

/* Local winter study: small stationery accents outside the photos/viewer. */
.edition-stamp{display:inline-flex;align-items:center;gap:9px}
.edition-stamp .winter-snowflake{width:19px;height:19px;color:#81988e;flex:none}
.opening-note-top{display:flex;align-items:center;gap:18px;min-height:39px}
.opening-note-top .kicker{margin:0}
.winter-lights{display:block;flex:none;width:120px;height:34px}
footer .footer-ornament{height:30px;margin-bottom:-8px;color:#dce8e2}
footer .winter-snowflake{display:block;width:30px;height:30px}
@media(max-width:600px){.opening-note-top{gap:12px;min-height:33px}.winter-lights{width:96px;height:28px}.edition-stamp{gap:5px}.edition-stamp .winter-snowflake{width:16px;height:16px}}

/* Pixel's approved holiday portrait is a transparent header cutout. */
header .header-pixel{display:block;width:auto;height:64px;max-width:66px;object-fit:contain;-webkit-mask-image:linear-gradient(#000 88%,transparent);mask-image:linear-gradient(#000 88%,transparent)}
@media(max-width:600px){header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 16px}header .signature{grid-column:1;grid-row:1;align-self:end}header .edition-stamp{display:contents}header .edition-label{grid-column:1;grid-row:2;font-size:10px;align-self:start}header .header-pixel{grid-column:2;grid-row:1/span 2;height:56px;max-width:56px}}

/* Declare both schemes early, then keep the chosen palette independent of the OS. */
:root[data-palette="moss"]{color-scheme:light dark}
:root[data-palette="night"]{color-scheme:dark light;--paper:#172922;--surface:#223b31;--ink:#edf1e6;--muted:#b9c7b6;--line:#486052;--accent:#f2b28a;--button:#b9d7b7;--button-ink:#17352b;--error:#ffb3a7}
.theme-toggle{display:inline-flex;align-items:center;justify-content:center;gap:7px;width:44px;min-width:44px;min-height:44px;border:1px solid var(--line);border-radius:50%;padding:8px;background:transparent;color:var(--ink);font:500 12px/1.2 system-ui,sans-serif;cursor:pointer;letter-spacing:0}
.theme-toggle[hidden]{display:none}.theme-toggle[aria-pressed="true"]{background:var(--surface);border-color:var(--accent)}.theme-toggle svg{flex:none;pointer-events:none}
@media(max-width:600px){header{grid-template-columns:minmax(0,1fr) auto 44px;column-gap:12px}header .header-pixel{grid-column:2;grid-row:1/span 2}header .theme-toggle{grid-column:3;grid-row:1/span 2;padding:8px;width:44px;align-self:center}}

#photo::backdrop{color-scheme:dark}#photo .photo-caption,#photo #save-status{color:#fff}

.theme-toggle .theme-sun{display:none}:root[data-palette="night"] .theme-toggle .theme-sun{display:block}:root[data-palette="night"] .theme-toggle .theme-moon{display:none}

/* Keep both root schemes advertised to Safari; native form controls follow the reader. */
:root[data-palette="moss"] input{color-scheme:light}:root[data-palette="night"] input{color-scheme:dark}

/* Decode nearby previews before a quiet reveal; keep the photo's reserved space. */
.grid .card img{opacity:0;transform:translateY(8px);transition:opacity 480ms cubic-bezier(.22,1,.36,1),transform 480ms cubic-bezier(.22,1,.36,1)}
.grid .card img.is-ready{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.grid .card img{transform:none;transition:none}}
/* Controls live below the image, with actions anchored to its right edge. */
#photo .photo-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;width:0;min-width:100%;margin-top:12px}
#photo .photo-navigation{flex:none;gap:4px;margin:0}
#photo-count{min-width:82px}
#photo .photo-actions{position:static;display:flex;flex:0 0 auto;justify-content:flex-end;gap:6px;margin-left:auto}
#photo .photo-actions:not(:has(button:not([hidden]))){display:none}
#photo .photo-actions .resolution-control{font-size:11px;padding:8px 10px}
#photo .photo-navigation .photo-control[hidden]{display:none}
@media(max-width:359px){#photo .photo-toolbar{gap:6px}#photo .photo-actions .resolution-control{max-width:100px}}

/* Keep the year beneath the wordmark on desktop, as it is on phones. */
@media(min-width:601px){header{display:grid;grid-template-columns:minmax(0,1fr) auto 44px;gap:6px 12px}header .signature{grid-column:1;grid-row:1;align-self:end}header .edition-stamp{display:contents}header .edition-label{grid-column:1;grid-row:2;align-self:start}header .header-pixel{grid-column:2;grid-row:1/span 2}header .theme-toggle{grid-column:3;grid-row:1/span 2;align-self:center}}

/* A year worth keeping: paper, postcards, and a little handwriting. */
@font-face{font-family:Caveat;src:url('/fonts/caveat-400.ttf') format('truetype');font-weight:400;font-display:swap}
:root{color-scheme:light dark;--paper:#f7f3e8;--surface:#e1e8d7;--ink:#264838;--muted:#687163;--line:#d8d7c8;--accent:#a44f36;--button:#2d5744;--button-ink:#f6efdc;--peach:#eed7c2;--error:#a03d2f;font-family:Manrope,system-ui,sans-serif}
:root[data-palette=night]{color-scheme:light dark;--paper:#17251d;--surface:#344a34;--ink:#f0efdf;--muted:#b7c0ae;--line:#46553e;--accent:#eab897;--button:#aacb9f;--button-ink:#17251d;--peach:#553e2d;--error:#ffb3a7}
body{font-size:15px;background:var(--paper)}h1,h2,.signature{font-family:Manrope,system-ui,sans-serif;letter-spacing:-.025em;font-weight:400}header{max-width:1440px;padding:38px 64px 26px;border-color:var(--line);letter-spacing:0}.signature{font-size:34px;line-height:1.15;letter-spacing:-1px}header .edition-label{font-size:12px;color:var(--muted)}header .header-pixel{height:52px;max-width:48px}.theme-toggle{background:var(--paper);border-color:var(--line)}main{max-width:1440px;padding:0 64px;margin:38px auto 64px}p{line-height:1.65}.button{border-radius:28px;min-height:48px;padding:14px 24px;font-size:14px;font-weight:500;transition:background .2s,translate .2s}.button:hover:not(:disabled){translate:0 -2px}.text-button{min-height:44px}.opening-spread{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(260px,1fr);gap:64px;align-items:start;margin:20px 0 42px}.opening-spread>.letter{max-width:760px}.opening-note-top{margin-bottom:22px;gap:22px}.opening-note-top .kicker,.handwritten{font:500 20px/1.35 Manrope,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--accent)}.winter-lights{width:120px;height:34px;flex:none}.recipient-greeting{border:0;padding:0;margin:0 0 22px}.recipient-greeting .recipient-name{font:400 clamp(34px,4.4vw,60px)/1.12 Manrope,system-ui,sans-serif;letter-spacing:-.03em;color:var(--ink)}.recipient-name strong{font-weight:400;font-style:normal;color:inherit}.recipient-greeting .recipient-welcome{font-size:20px;line-height:1.45;margin-top:12px}.letter .prose{font-size:17px;line-height:1.65;max-width:730px;margin:24px 0}.signoff{font:400 32px/1.45 Caveat,cursive;margin:20px 0;color:var(--ink)}.pixel-note{display:grid;grid-template-columns:100px minmax(0,1fr);gap:10px 16px;align-items:center;justify-self:end;width:100%;max-width:350px;padding:20px;background:var(--peach);border-radius:20px;margin:12px 0 0;animation:pixel-note-in 2s linear both}.pixel-note .handwritten{grid-column:1/-1;margin:0;max-width:none}.pixel-note>img{display:block;justify-self:center;width:auto;height:110px;max-width:100%;object-fit:contain}.pixel-note>p:last-child{font-size:12px;margin:0;color:var(--ink)}.personal-photos{margin-top:0}.personal-heading{font-size:clamp(25px,3vw,36px);line-height:1.2;margin:16px 0 26px}.grid{column-gap:28px;row-gap:20px;overflow:visible}.grid .card{background:#fffdf7;border:0;border-radius:1px;padding:9px 9px 14px;box-shadow:0 2px 4px #20392f06;transform:rotate(var(--photo-tilt,0deg));transform-origin:50% 50%;color:#264838}.grid .card:nth-child(4n+1){--photo-tilt:-.45deg}.grid .card:nth-child(4n+2){--photo-tilt:.45deg}.grid .card:nth-child(4n+3){--photo-tilt:.2deg}.grid .card img{border-radius:0;background:#e1e8d7;height:auto;object-fit:contain;transform:none;transition:opacity .32s ease-out}.grid .card span{font:500 14px/1.55 Manrope,system-ui,sans-serif;letter-spacing:0;margin:12px 0 0;padding:0 2px 0;overflow-wrap:anywhere}.grid .card:hover{box-shadow:0 10px 22px #20392f16}.grid .card:has(img.is-ready){animation:scrapbook-photo-in 2s linear both}.grid .card:nth-child(3n+2):has(img.is-ready){animation-delay:80ms}.grid .card:nth-child(3n+3):has(img.is-ready){animation-delay:160ms}.shared-photos{margin-top:54px}.shared-photos h2{margin-bottom:26px;max-width:100%;font-size:clamp(26px,3vw,36px)}.shared-photos+.letter{margin-top:44px}.entry{max-width:560px;margin:24px auto 80px}.invitation-delivery{display:flex;align-items:center;gap:20px;margin-bottom:30px}.invitation-delivery>img{width:92px;height:100px;object-fit:contain}.invitation-delivery>div{background:var(--surface);padding:18px 22px;border-radius:16px}.invitation-delivery .handwritten{margin:0 0 8px}.invitation-delivery .kicker{font-size:10px;letter-spacing:.09em;margin:0}.entry .invitation-greeting{font-size:clamp(36px,5vw,56px);line-height:1.12}.entry h1{font-family:Manrope,system-ui,sans-serif}.entry input{border-radius:12px;background:var(--paper);border-color:var(--line);font:500 30px/1.4 Manrope,sans-serif;letter-spacing:.36em;text-align:center}.entry .button{min-width:220px}.entry .intro{font-size:16px}.entry .kicker{font-family:Manrope,system-ui,sans-serif;font-size:12px;letter-spacing:0;text-transform:none}
footer{position:relative;width:calc(100% - 128px);max-width:1312px;margin:36px auto 44px;border:0;border-radius:20px;align-items:center;justify-content:center;text-align:center;gap:8px;padding:22px 42px;background:#2d5744;color:#f6efdc;letter-spacing:0;box-sizing:border-box;min-width:0}footer .footer-closing{font:400 clamp(24px,2.5vw,30px)/1.15 Manrope,system-ui,sans-serif;letter-spacing:-.025em;margin:0;padding:0 24px;overflow-wrap:anywhere}footer .footer-closing em{font-style:normal;color:#eed7c2}footer>span{font-size:12px;color:#f6efdc;overflow-wrap:anywhere}footer .footer-ornament{position:absolute;right:22px;top:22px;margin:0;color:#e3ecd9}footer .winter-snowflake{width:32px;height:32px}footer a{color:#f4cdb0}
/* The navigation and originals controls share a baseline below the photo. */
#photo .photo-toolbar{width:100%;min-width:0;gap:12px;align-items:center;margin-top:14px}#photo .photo-actions{align-items:center;max-width:100%;margin-left:auto}#photo .photo-navigation{gap:6px;align-items:center}#photo img{max-width:min(1000px,calc(100vw - 40px));max-height:calc(100dvh - 190px);border-radius:3px}#photo .photo-caption{font:400 23px/1.3 Manrope,system-ui,sans-serif;color:#f6efdc;max-width:900px;text-shadow:none}#photo .photo-control{background:#2a3b31;border:0;color:#f6efdc}#photo .resolution-control{display:flex;align-items:center;justify-content:center;min-height:44px;line-height:1.2;white-space:nowrap}#photo #save-status{font-size:12px}#photo .photo-count{white-space:nowrap}
@keyframes scrapbook-photo-in{0%{opacity:0;transform:translateY(20px) rotate(var(--photo-tilt,0deg))}16%{opacity:1}21%{transform:translateY(-2px) rotate(var(--photo-tilt,0deg))}28%,100%{opacity:1;transform:translateY(0) rotate(var(--photo-tilt,0deg))}}
@keyframes pixel-note-in{0%,7.5%{opacity:0;transform:translateY(12px)}23.5%{opacity:1}28.5%{transform:translateY(-2px)}35.5%,100%{opacity:1;transform:none}}
@media(max-width:1000px){header{padding:28px 40px 22px}main{padding:0 40px}.opening-spread{gap:32px;grid-template-columns:minmax(0,1.6fr) minmax(220px,1fr)}.pixel-note{padding:22px;grid-template-columns:80px minmax(0,1fr);gap:12px}.pixel-note .handwritten{font-size:18px}.pixel-note>img{height:100px}.recipient-greeting .recipient-name{font-size:42px}.letter .prose{font-size:16px}.grid{column-gap:22px}footer{width:calc(100% - 80px)}}
@media(max-width:700px){.opening-spread{display:block;margin-bottom:38px}.pixel-note{margin:24px auto 0}.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.recipient-greeting .recipient-name{font-size:38px}.letter .prose{font-size:15px}.recipient-greeting .recipient-welcome{font-size:16px}}
@media(max-width:600px){header{padding:24px 24px 20px;column-gap:12px}.signature{font-size:25px;letter-spacing:-.8px}header .header-pixel{height:43px;max-width:40px}header .edition-label{font-size:10px}main{padding:0 max(24px,env(safe-area-inset-left));margin:30px auto 42px}.opening-note-top{margin-bottom:22px;gap:14px}.opening-note-top .kicker{font-size:24px}.winter-lights{width:96px;height:28px}.recipient-greeting{margin-bottom:20px}.recipient-greeting .recipient-name{font-size:34px}.recipient-greeting .recipient-welcome{margin-top:10px}.signoff{font-size:27px;margin-top:18px}.opening-spread{margin-bottom:40px}.personal-heading{font-size:25px;line-height:1.2;margin-bottom:24px}.grid{column-gap:17px;row-gap:14px}.grid .card{padding:7px 7px 12px}.grid .card span{font-size:14px;line-height:1.3;margin-top:10px}.shared-photos{margin-top:38px}.shared-photos h2{font-size:26px;line-height:1.2}.entry{margin:12px auto 60px}.entry .invitation-greeting{font-size:42px}.entry .button{width:100%}.invitation-delivery{gap:14px}.invitation-delivery>div{padding:16px}.invitation-delivery .handwritten{font-size:18px}.invitation-delivery>img{width:82px;height:90px}footer{width:calc(100% - 40px);padding:20px 22px;margin-bottom:24px;border-radius:18px}footer .footer-closing{font-size:24px;line-height:1.2;padding:0 18px}footer .footer-ornament{right:18px;top:24px}footer .winter-snowflake{width:24px;height:24px}footer>span{font-size:11px}#photo .photo-toolbar{gap:8px}#photo .photo-navigation{gap:2px}#photo-count{min-width:78px;font-size:11px}#photo .photo-caption{font-size:21px}#photo .photo-actions .resolution-control{font-size:11px;padding:8px 10px}#photo .photo-actions{gap:5px}}
@media(max-width:359px){main{padding-left:18px;padding-right:18px}header{padding-left:18px;padding-right:18px}.signature{font-size:23px}.grid{column-gap:12px}.grid .card span{font-size:18px}#photo .photo-actions .resolution-control{white-space:normal;max-width:90px}}
@media(prefers-reduced-motion:reduce){.grid .card,.grid .card:has(img.is-ready),.pixel-note{animation:none;transform:none}.grid .card img{opacity:1;transition:none}.button{translate:none;transition:none}}

footer .footer-ornament-bottom{top:auto;right:auto;left:22px;bottom:20px;transform:rotate(20deg)}
@media(max-width:600px){footer .footer-ornament-bottom{left:16px;bottom:16px}}

h1,h2,.signature,.recipient-greeting .recipient-name{font-weight:600}.opening-note-top .kicker{font:600 11px/1.5 Manrope,system-ui,sans-serif;letter-spacing:.12em;text-transform:uppercase}.signature{letter-spacing:-.04em}.entry .kicker{font-family:Manrope,system-ui,sans-serif;font-size:12px;letter-spacing:.08em;text-transform:uppercase}

/* Arrows sit outside; pagination dots sit quietly inside the photo. */
#photo .photo-image{position:relative;width:fit-content;margin:auto}
#photo .photo-image #previous-photo,#photo .photo-image #next-photo{position:absolute;top:50%;bottom:auto;transform:translateY(-50%);z-index:2;box-shadow:0 2px 12px #0003}
#photo .photo-stage{padding-inline:56px}#photo img{max-width:min(1000px,calc(100vw - 152px))}
#photo #previous-photo{left:-54px;right:auto}#photo #next-photo{right:-54px;left:auto}
#photo .photo-image .photo-control[hidden]{display:none}
#photo .photo-image .photo-control:disabled{cursor:default;opacity:.3}
#photo .photo-toolbar{display:flex;justify-content:flex-end;gap:0;margin-top:10px}
#photo .photo-actions{margin-left:auto;min-width:0}
#photo .photo-toolbar:not(:has(button:not([hidden]))){display:none}
#photo-count{position:absolute;width:1px;height:1px;min-width:0;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
#photo .photo-pagination{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;gap:5px;padding:6px 9px;border-radius:20px;background:#08110d30;pointer-events:none}
#photo .photo-pagination[hidden]{display:none}
#photo .photo-dot{display:block;flex:none;width:5px;height:5px;border-radius:50%;background:#ffffff75;box-shadow:0 1px 3px #0006}
#photo .photo-dot.is-current{width:6px;height:6px;background:#fff}
#photo .photo-dot.is-small{width:3px;height:3px;opacity:.65}

@media(max-width:600px){#photo .photo-stage{padding-inline:48px}#photo img{max-width:calc(100vw - 136px)}#photo #previous-photo{left:-48px}#photo #next-photo{right:-48px}}

/* Keep a full tap target around the quieter close glyph. */
#photo .close{width:44px;height:44px;top:4px;right:4px;background:transparent;color:#ffffffe0;box-shadow:none}
#photo .close::before{content:'';position:absolute;inset:8px;border-radius:50%;background:#08110d45;z-index:-1}
#photo .close svg{width:15px;height:15px;filter:drop-shadow(0 1px 2px #0008)}
#photo .close:hover::before,#photo .close:focus-visible::before{background:#08110d99}
@media(pointer:coarse),(max-width:600px){#photo .photo-image{touch-action:pinch-zoom}#photo.is-zoomed .photo-image{touch-action:pan-x pan-y pinch-zoom}}

/* Initial dialog focus should not draw a ring around the close tap target. */
#photo:focus{outline:none}

/* Keep invitation credits out of the unauthenticated landing page. */
footer[hidden],header .signature[hidden]{display:none}
