/* 고급 청첩장 종류별 틀 공통 뼈대(시트·크게 보기·알림·음악 버튼·폼). 색·글꼴은 종류 CSS 의 변수로 */
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{background:var(--page,#eee);color:var(--fg);font-family:var(--font);font-size:15px;line-height:1.75;-webkit-font-smoothing:antialiased;word-break:keep-all;overflow-wrap:break-word}
body.lock{overflow:hidden}
img{display:block;max-width:100%;-webkit-touch-callout:none;-webkit-user-drag:none;user-select:none;-webkit-user-select:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;-webkit-tap-highlight-color:transparent}
a{color:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent}
:focus-visible{outline:1px solid var(--accent);outline-offset:3px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.rv-on [data-rv]{opacity:0;transform:translateY(18px);transition:opacity 1s ease,transform 1.1s cubic-bezier(.22,.61,.36,1)}
.rv-on [data-rv].in{opacity:1;transform:none}
/* 달력 */
.cal{width:100%;border-collapse:collapse;table-layout:fixed;font-variant-numeric:tabular-nums}
.cal th{font-size:11px;font-weight:600;letter-spacing:.1em;color:var(--sub);padding:6px 0}
.cal td{text-align:center;padding:4px 0;font-size:14px}
.cal td span{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:50%}
.cal .sun{color:var(--sun,var(--accent))}
.cal td.on span{background:var(--accent);color:var(--on-accent,#fff);font-weight:700}
/* 혼주·교통·지도·계좌·연락처 */
.fam-row{display:flex;flex-wrap:wrap;justify-content:center;align-items:baseline;gap:4px;margin:4px 0}
.fam-r{color:var(--sub);font-size:13px}
.fam-row b{font-weight:700;margin-left:4px}
.late{font-size:11px;margin-right:2px;opacity:.75}
.ways div{display:grid;grid-template-columns:64px 1fr;gap:10px;padding:12px 0;border-top:1px solid var(--line)}
.ways dt{font-weight:700;color:var(--accent);font-size:13px}
.ways dd{font-size:14px}
.maplinks{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:12px 0}
.maplinks a,.maplinks button{text-align:center;padding:11px 0;border:1px solid var(--line);font-size:13px}
.map{height:220px;background:var(--line);filter:var(--map-filter,none)}
.pin span{display:block;width:22px;height:22px;border-radius:50% 50% 50% 0;background:var(--accent);transform:rotate(-45deg);box-shadow:0 2px 6px rgba(0,0,0,.3)}
.acc{border-top:1px solid var(--line)}
.acc:last-child{border-bottom:1px solid var(--line)}
.acc summary{list-style:none;display:flex;justify-content:space-between;align-items:center;padding:15px 2px;cursor:pointer;font-size:14px}
.acc summary::-webkit-details-marker{display:none}
.acc summary i{width:8px;height:8px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:rotate(45deg);transition:transform .3s}
.acc[open] summary i{transform:rotate(-135deg)}
.acc-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:0 2px 14px}
.acc-who{font-size:13px;color:var(--sub)}
.acc-no{font-size:14px;font-variant-numeric:tabular-nums}
.acc-row button,.ct-row a{border:1px solid var(--line);padding:7px 13px;font-size:12px;white-space:nowrap}
.ct-row{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-top:1px solid var(--line)}
.ct-row small{color:var(--sub);margin-right:4px}
.ct-row span{display:flex;gap:6px}
/* 방명록 */
.gb-item{position:relative;padding:16px 34px 16px 0;border-top:1px solid var(--line)}
.gb-msg{font-size:14px}
.gb-by{font-size:12px;color:var(--sub);margin-top:6px}
.gb-del{position:absolute;top:12px;right:0;width:28px;height:28px;color:var(--sub);font-size:16px}
.gb-empty{text-align:center;color:var(--sub);font-size:13px;padding:18px 0}
/* 버튼 */
.btn-solid{display:block;width:100%;padding:15px 0;background:var(--accent);color:var(--on-accent,#fff);font-weight:600;letter-spacing:.06em;font-size:14px}
.btn-line{display:inline-block;padding:12px 22px;border:1px solid currentColor;font-size:13px;letter-spacing:.08em}
/* 시트 */
.sheet{position:fixed;inset:0;z-index:80;display:none;align-items:flex-end;justify-content:center;background:rgba(0,0,0,.5)}
.sheet.open{display:flex}
.sheet-box{position:relative;width:100%;max-width:480px;max-height:90vh;overflow:auto;background:var(--card,#fff);color:var(--card-fg,var(--fg));padding:28px 24px calc(24px + env(safe-area-inset-bottom));animation:shUp .4s cubic-bezier(.22,.61,.36,1)}
@keyframes shUp{from{transform:translateY(30px);opacity:.4}}
.sheet-box h3{font-size:17px;margin-bottom:16px;font-family:var(--disp)}
.sheet-x{position:absolute;top:10px;right:12px;width:36px;height:36px;font-size:24px}
.form .lab{display:block;font-size:13px;color:var(--sub);margin:14px 0 6px}
.form input:not([type=radio]),.form textarea{display:block;width:100%;margin-top:6px;padding:12px;border:1px solid var(--line);background:transparent;color:inherit;font:inherit;font-size:15px;border-radius:0}
.form .btn-solid{margin-top:20px}
.chips{display:flex;gap:6px}
.chips label{flex:1}
.chips input{position:absolute;opacity:0}
.chips span{display:block;text-align:center;padding:11px 0;border:1px solid var(--line);font-size:14px}
.chips input:checked+span{background:var(--accent);color:var(--on-accent,#fff);border-color:var(--accent)}
.chips input:focus-visible+span{outline:1px solid var(--accent)}
/* 크게 보기 */
.lb{position:fixed;inset:0;z-index:90;display:none;flex-direction:column;background:rgba(8,8,8,.96);color:#fff}
.lb.open{display:flex}
.lb-top{display:flex;justify-content:space-between;align-items:center;padding:calc(10px + env(safe-area-inset-top)) 12px 6px 20px;font-size:12px;letter-spacing:.2em}
.lb-x{width:40px;height:40px;font-size:26px}
.lb-st{flex:1;display:flex;align-items:center;justify-content:center;padding:8px;touch-action:pan-y}
.lb-st img{max-height:100%;max-width:100%;object-fit:contain}
.lb-p,.lb-nx{position:absolute;top:50%;width:44px;height:60px;margin-top:-30px;font-size:34px;opacity:.6}
.lb-p{left:2px}.lb-nx{right:2px}
/* 알림·음악 */
.toast{position:fixed;left:50%;bottom:calc(28px + env(safe-area-inset-bottom));z-index:95;transform:translate(-50%,14px);background:rgba(20,20,20,.92);color:#fff;font-size:13px;padding:12px 18px;opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;max-width:calc(100% - 40px);text-align:center}
.toast.on{opacity:1;transform:translate(-50%,0)}
.fab{position:fixed;top:12px;right:max(12px,calc(50% - 240px + 12px));z-index:60;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;gap:2px;background:var(--fab-bg,rgba(0,0,0,.35));color:var(--fab-fg,#fff);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.fab i{display:block;width:2px;height:4px;background:currentColor}
.fab.on i{animation:eq .9s ease-in-out infinite alternate}
.fab.on i:nth-child(2){animation-delay:.2s}.fab.on i:nth-child(3){animation-delay:.4s}.fab.on i:nth-child(4){animation-delay:.1s}
@keyframes eq{to{height:14px}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
.acc-note{font-size:12.5px;color:var(--sub);padding:0 2px 14px}
