@font-face{font-family:Gowun;src:url("assets/GowunBatang-Regular.ttf") format("truetype");font-display:swap}
:root{--paper:#faf8f3;--ink:#393b36;--muted:#68655f;--accent:#80604b;--line:#ded8cc;--ui:system-ui,-apple-system,"Noto Sans CJK KR",sans-serif}
.couple-mark{display:block;width:88px;height:auto;margin:0 0 15px -6px}
.closing-mark{display:block;margin:0 auto 15px}
.opening>.eyebrow{font-family:Gowun,serif;font-size:.875rem;letter-spacing:.08em}
.hero-photo{box-shadow:0 0 0 5px var(--paper),0 0 0 6px #e3d8c9}
.gallery .photo-slot{border:5px solid #fffdf8;box-shadow:0 3px 12px #6955410a}
*{box-sizing:border-box}html{background:#e9e6df;color:var(--ink)}body{margin:0;font-family:Gowun,Batang,serif;line-height:1.9;word-break:keep-all;overflow-wrap:anywhere}
main{max-width:1160px;margin:auto;background:var(--paper)}p,h1,h2,h3,figure{margin:0}h1,h2,h3,strong{font-weight:400}a{color:inherit}button{font:inherit;color:inherit;cursor:pointer}button,a,summary{touch-action:manipulation}button:disabled{cursor:default;color:var(--muted)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip{position:absolute;left:12px;top:-90px;z-index:2;background:var(--paper);padding:8px}.skip:focus{top:12px}
.hero-layout{display:grid;grid-template-columns:minmax(0,1fr);padding:0 18px}.opening{padding:43px 12px 28px;text-align:left}
.eyebrow,.section-index{font-family:var(--ui);font-size:10px;letter-spacing:.19em;color:var(--accent)}h1{display:flex;align-items:baseline;gap:13px;font-size:clamp(30px,8vw,43px);line-height:1.5;letter-spacing:.01em;margin:19px 0 13px}h1 i{font-size:21px;font-style:normal;color:var(--accent)}
.opening-note{font-size:14px;line-height:1.9;color:var(--muted)}.date-mark{font-size:23px;margin-top:24px;letter-spacing:.025em}.event-time,.venue-top{font-family:var(--ui);font-size:11px;color:var(--muted)}.event-time{margin-top:5px}
.photo-slot{position:relative;display:grid;place-items:center;background:#e9e4d9;color:var(--muted);text-align:center;overflow:hidden}.photo-slot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.photo-slot p{font-size:13px;line-height:1.9}.photo-slot small{display:block;font-family:var(--ui);font-size:10px;margin-top:18px}.photo-mark{display:block;font-size:18px;color:var(--accent);margin-bottom:14px}.hero-photo{aspect-ratio:4/5;min-width:0}
.letter{padding:65px 25px 70px;text-align:center}.letter>.eyebrow{font-family:Gowun,serif;font-size:12px;letter-spacing:.08em;margin-bottom:25px}.letter>p:not(.eyebrow){font-size:15px;line-height:2.1}.letter>p+p{margin-top:23px}.families{margin-top:32px;font-family:var(--ui);font-size:11px;line-height:2.5;color:var(--muted)}.families strong{font-family:Gowun,serif;color:var(--ink);font-size:14px;margin-left:7px}
.moments,.details,.connections{padding:0 24px 70px}.section-heading{display:flex;flex-direction:column;gap:5px;margin-bottom:24px}.section-heading h2{font-size:24px;letter-spacing:-.02em}.section-index{font-size:9px}.gallery{display:grid;grid-template-columns:1.1fr 1fr;grid-template-rows:145px 145px;gap:10px}.gallery-tall{grid-row:span 2}.gallery .photo-slot:nth-child(2){background:#f0ece4}.gallery .photo-slot:nth-child(3){background:#e2dfd7}.gallery .photo-slot p{font-size:11px}.draft-note{font-family:var(--ui);font-size:10px;color:var(--muted);text-align:center;margin-top:12px}
.information-grid{display:grid;gap:34px}.schedule{padding:6px 8px 0;min-width:0}.month-heading{display:flex;justify-content:center;align-items:center;gap:19px;color:var(--accent);font-family:var(--ui);font-size:9px;letter-spacing:.09em;margin:23px 0 18px}.month-heading strong{font-family:Gowun,serif;font-size:38px;line-height:1}
.calendar{width:100%;table-layout:fixed;text-align:center;border-collapse:collapse;font-size:14px}.calendar th{height:35px;font-family:var(--ui);font-size:10px;font-weight:400;color:var(--muted)}.calendar td{height:40px}.calendar td span{display:inline-grid;place-items:center;width:32px;height:32px}.calendar [aria-current]{border:1px solid var(--accent);border-radius:50%;color:var(--accent)}
.calendar-caption{text-align:center;font-family:var(--ui);font-size:12px;margin-top:20px}.calendar-caption small{display:block;font-size:10px;color:var(--muted);margin-top:3px}.text-button{display:block;margin:15px auto 0;padding:5px 14px;min-height:44px;background:transparent;border:0;border-bottom:1px solid var(--line);font-family:var(--ui);font-size:11px}.text-button span{margin-left:12px}
.place{border-top:1px solid var(--line);padding-top:30px;text-align:left;min-width:0}h3{font-size:24px}.hall{font-size:14px;margin-top:2px}#address{font-family:var(--ui);font-size:11px;color:var(--muted);margin-top:12px;user-select:text}.map{display:block;width:100%;height:auto;margin:24px 0 0}.attribution{font-family:var(--ui);font-size:9px;color:var(--muted);margin-top:5px;text-align:center}
.actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:20px}.actions a,.actions button{display:flex;align-items:center;justify-content:center;gap:6px;min-height:46px;border:1px solid var(--line);background:transparent;text-decoration:none;font-family:var(--ui);font-size:11px}.transport{font-family:var(--ui);font-size:11px;margin:25px 0 0}.transport div{display:grid;grid-template-columns:55px 1fr;margin-top:10px}.transport dt{color:var(--accent)}.transport dd{margin:0}
.connections{padding-top:38px;background:#f1eee6}.connection-grid{display:grid;gap:31px}.connection-title{font-size:19px}.connection-description{font-family:var(--ui);font-size:11px;color:var(--muted);margin:3px 0 17px}details{border-bottom:1px solid #cfc7ba}summary{display:flex;align-items:center;justify-content:space-between;min-height:55px;cursor:pointer;list-style:none;font-family:var(--ui);font-size:12px}summary::-webkit-details-marker{display:none}summary span{font-size:17px;color:var(--accent)}.people{padding:0 0 12px}.person{padding:14px 0 12px;border-top:1px solid #dfd8cc}.person-name{display:flex;gap:12px;align-items:baseline;font-size:16px}.person-name small{min-width:35px;font-family:var(--ui);font-size:10px;color:var(--muted)}.person-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:7px}.person-actions a,.person-actions button{border:1px solid #c9c1b4;background:transparent;text-decoration:none;min-height:44px;padding:7px 16px;display:inline-flex;align-items:center;font-family:var(--ui);font-size:11px}.pending{font-family:var(--ui);font-size:11px;color:var(--muted)}.account-value,.account-holder,.copy-feedback{font-family:var(--ui);font-size:12px;margin-top:8px}.account-holder{font-size:11px;color:var(--muted)}.copy-feedback:empty{display:none}
footer{text-align:center;padding:45px 24px 24px}.closing{font-size:14px}.signature{font-size:21px;letter-spacing:.1em;margin:13px 0 25px}.signature span{font-size:12px;margin:0 8px}#share{min-height:46px;width:100%;max-width:340px;border:1px solid var(--line);background:transparent;font-family:var(--ui);font-size:12px}#status{font-family:var(--ui);font-size:12px;margin-top:12px;min-height:24px}.proof-label{font-family:var(--ui);font-size:9px;color:var(--muted);margin-top:18px}
@media(min-width:760px){.hero-layout{grid-template-columns:1fr 1fr;align-items:stretch;padding:40px;gap:30px}.opening{align-self:center;padding:30px 5px 30px 25px}.hero-photo{max-height:600px}.opening-note{font-size:17px}.date-mark{font-size:29px;margin-top:38px}.event-time,.venue-top{font-size:12px}.letter{padding:90px 40px}.letter>p:not(.eyebrow){font-size:18px}.families{font-size:13px}.families strong{font-size:16px}.moments,.details,.connections{padding-left:65px;padding-right:65px}.gallery{grid-template-columns:1.1fr 1fr 1fr;grid-template-rows:330px;gap:16px}.gallery-tall{grid-row:auto}.gallery .photo-slot:nth-child(2){margin-top:35px}.gallery .photo-slot:nth-child(3){margin-bottom:35px}.information-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:45px}.place{padding-top:10px;border:0}.connection-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:45px}.section-heading{margin-bottom:32px}.connections{padding-top:45px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

/* Q196: fluid spacing, readable grouping, and small interaction responses. */
.hero-layout{padding:0 clamp(18px,4vw,40px);gap:0}
.opening{padding:clamp(36px,7vw,72px) 8px 26px}
.date-mark{display:none}
.event-time{margin-top:24px;color:var(--ink)}
.venue-top{margin-top:3px}
.hero-photo{border-radius:48% 48% 2px 2px}
.window-shutter{position:absolute;inset:0 auto 0 0;width:50%;z-index:1;pointer-events:none;opacity:0;background-color:transparent;background-image:linear-gradient(115deg,transparent 15%,#ffffff38 16%,#ffffff10 32%,transparent 33%),linear-gradient(to bottom,transparent calc(39% - 2px),#cfb899 calc(39% - 2px),#cfb899 calc(39% + 2px),transparent calc(39% + 2px),transparent calc(70% - 2px),#cfb899 calc(70% - 2px),#cfb899 calc(70% + 2px),transparent calc(70% + 2px));border:4px solid #cfb899;border-radius:100% 0 0 0 / 48% 0 0 0;box-shadow:inset 0 0 0 1px #a98c69,0 0 0 1px #a98c69;transform-origin:left center;backface-visibility:hidden}
.window-right{left:50%;transform-origin:right center;border-radius:0 100% 0 0 / 0 48% 0 0}
.window-shutter::before{content:none}
.window-shutter::after{content:"";position:absolute;right:5px;top:54%;width:3px;height:17px;border-radius:3px;background:#ad8e69;box-shadow:1px 1px 2px #49372320}
.window-right::after{right:auto;left:5px}
.letter{padding:clamp(56px,8vw,96px) 24px}
.letter>p:not(.eyebrow){line-height:1.95}
.letter>p+p{margin-top:20px}
.moments,.details,.connections{padding-left:clamp(24px,5vw,65px);padding-right:clamp(24px,5vw,65px)}
.gallery{grid-template-rows:repeat(2,clamp(135px,35vw,240px));gap:12px}
.gallery .photo-slot{border-radius:2px}
.section-heading{padding-bottom:14px;border-bottom:1px solid var(--line)}
.actions a,.actions button,.person-actions a,.person-actions button,#share{border-radius:4px;transition:background-color .18s ease,transform .18s ease}
.actions a:active,.actions button:active,.person-actions a:active,.person-actions button:active,#share:active{transform:translateY(1px);background:#eee8dc}
summary{transition:color .18s ease}details[open] summary{color:var(--accent)}
@media(hover:hover){.actions a:hover,.actions button:not(:disabled):hover,.person-actions a:hover,.person-actions button:hover,#share:not(:disabled):hover{background:#eee8dc}}
@media(min-width:760px){.hero-layout{padding:clamp(32px,4vw,56px);gap:clamp(24px,4vw,48px)}.opening{padding:24px 0 24px 8px}.hero-photo{max-height:none}.gallery{grid-template-rows:clamp(260px,30vw,360px)}}

/* Essential details and controls follow the reader's text-size preference. */
h1{font-size:clamp(1.875rem,8vw,2.6875rem);flex-wrap:wrap;gap:.5rem}h1 i{font-size:1.3125rem}
.opening-note,.hall,.closing{font-size:.9375rem}.date-mark{font-size:1.4375rem}
.event-time,.venue-top,#address,.transport,.connection-description,.pending,.account-holder{font-size:.875rem}
.letter>p:not(.eyebrow){font-size:1rem}.letter>.eyebrow{font-size:.8125rem}
.families{font-size:.8125rem}.families strong{font-size:1rem}
.section-heading h2,h3{font-size:1.5rem}.connection-title{font-size:1.1875rem}
.photo-slot p{font-size:.8125rem}.photo-slot small,.draft-note{font-size:.75rem}
.gallery .photo-slot p{font-size:.75rem}.photo-mark{font-size:1.125rem}
.calendar{font-size:.875rem}.calendar th{font-size:.75rem}.calendar td{height:2.5rem}
.calendar td span{width:min(2rem,100%);height:2rem}.month-heading strong{font-size:2.375rem}
.calendar-caption,.text-button,.actions a,.actions button,summary{font-size:.875rem}
.calendar-caption small{font-size:.75rem}.actions{grid-template-columns:repeat(2,minmax(0,1fr))}
.actions a,.actions button{padding:8px;min-width:0}.transport div{grid-template-columns:3.5rem minmax(0,1fr)}
summary span{font-size:1.0625rem}.person-name{font-size:1rem;flex-wrap:wrap}
.person-name small{font-size:.75rem}.person-actions a,.person-actions button{font-size:.875rem}
.account-value,.copy-feedback,#share,#status{font-size:.875rem}
.signature{font-size:1.3125rem}.signature span{font-size:.75rem}
.opening{min-width:0}.hero-photo{width:100%;align-self:center}
@media(min-width:760px){.hero-layout{grid-template-columns:repeat(2,minmax(0,1fr))}.opening-note{font-size:1.0625rem}.date-mark{font-size:1.8125rem}.letter>p:not(.eyebrow){font-size:1.125rem}}
/* Self-contained illustrated venue map. */
.venue-map-shell{position:relative;width:100%;aspect-ratio:480/285;margin-block:1.2rem;}
.venue-map-shell .map{display:block;width:100%;height:auto;margin:0;}
[hidden]{display:none!important;}
.photo-slot img{object-position:50% 50%;}
