:root{--cream:#fffaf0;--paper:#fffdf6;--ink:#425d39;--dark:#2f482e;--pink:#d99aa9;--soft:#f7e4e7;--sage:#a8c66b;--shadow:0 16px 45px rgb(57 71 45 / 15%)}
*{box-sizing:border-box}html{background:var(--cream)}body{margin:0;color:var(--dark);background:radial-gradient(circle at 15% 0%,#f8eeee 0,transparent 26rem),var(--cream);font-family:Mali,system-ui,sans-serif}button,input,textarea{font:inherit}button{cursor:pointer}.page-shell{padding:clamp(12px,3vw,38px)}
.paper{position:relative;max-width:920px;margin:auto;padding:clamp(50px,9vw,100px) clamp(20px,8vw,90px) 64px;background:var(--paper);border:4px solid var(--pink);border-radius:58px 48px 64px 50px/50px 62px 42px 58px;box-shadow:var(--shadow);overflow:hidden}.paper:before{content:"";position:absolute;inset:11px;border:1px solid #ecd3d7;border-radius:50px 42px 54px 43px/42px 56px 38px 54px;pointer-events:none}
.ribbon{position:absolute;z-index:1;left:8%;right:8%;display:flex;justify-content:space-between;color:var(--pink);font:32px Caveat,cursive;letter-spacing:.65em}.ribbon:before{content:"";position:absolute;left:0;right:0;top:50%;height:2px;background:var(--pink);z-index:-1;opacity:.8}.ribbon-top{top:17px}.ribbon-bottom{bottom:15px}.ribbon span{padding-left:.15em;background:var(--paper)}.flower{position:absolute;z-index:1;top:31%;font:44px/1 Caveat,cursive;color:#d891a2;text-shadow:11px 11px #aacd82}.flower-left{left:12px}.flower-right{right:12px;transform:scaleX(-1)}
.hero,.intro,.guestbook,.wishes,footer{position:relative;z-index:2}.hero{text-align:center}.eyebrow{margin:0;color:var(--ink);font:600 clamp(25px,4.2vw,43px)/.9 Caveat,cursive}.kicker{margin:5px 0 3px;color:var(--pink);font-size:13px;letter-spacing:.11em}h1{margin:0;color:var(--ink);font:700 clamp(59px,13vw,120px)/.82 Caveat,cursive;letter-spacing:-.05em}h1 span{color:var(--sage);font-size:.6em;vertical-align:.2em}.ornament{margin:20px 0 13px;color:var(--sage);font-size:25px;letter-spacing:.25em}.event-date{margin:0;color:var(--ink);font:700 clamp(26px,4vw,38px)/1 Caveat,cursive;letter-spacing:.08em}.venue{margin:5px 0 0;color:var(--ink);font-size:14px;font-weight:700;letter-spacing:.16em;text-transform:uppercase}
.intro{max-width:590px;margin:55px auto 30px;text-align:center}.section-mark{margin:0;color:var(--pink);font:30px/1 Caveat,cursive}h2{margin:2px 0 7px;color:var(--ink);font-size:clamp(21px,3vw,29px);line-height:1.25}.intro>p:last-child{margin:0;font-size:14px;line-height:1.8}.guestbook{max-width:620px;margin:auto;padding:clamp(18px,4vw,30px);background:#fffaf4;border:1px solid #eccfd5;border-radius:25px 20px 27px 21px}
label,legend{display:block;margin:0 0 7px;color:var(--ink);font-size:14px;font-weight:700}input,textarea{display:block;width:100%;margin-bottom:17px;padding:12px 14px;color:var(--dark);background:#fffefa;border:1px solid #e3bcc6;border-radius:12px;outline:0;transition:.2s}textarea{min-height:120px;resize:vertical;line-height:1.65}input:focus,textarea:focus{border-color:var(--pink);box-shadow:0 0 0 3px #f8e5e8}.character-count{margin:-12px 2px 17px;color:#8b987f;text-align:right;font-size:11px}.selfie-area{margin:0;padding:17px 0 0;border:0;border-top:1px dashed #e2bec5}.selfie-area legend span{color:var(--pink)}.selfie-area>p{margin:-2px 0 12px;color:#687561;font-size:12px}
.camera-frame{display:grid;min-height:240px;place-items:center;overflow:hidden;background:linear-gradient(135deg,#f9ebed,#f6f2df);border:1px dashed #d8a1ad;border-radius:18px}.camera-frame video,.camera-frame img{width:100%;height:100%;min-height:240px;object-fit:cover}.camera-placeholder{display:grid;gap:4px;place-items:center;color:#9fac95;text-align:center}.camera-placeholder span{color:var(--pink);font:75px/.8 Caveat,cursive}.camera-placeholder small{font-size:13px}.camera-actions{display:flex;flex-wrap:wrap;gap:9px;align-items:center;margin-top:13px}.button{border:0;border-radius:999px;padding:10px 17px;transition:.2s}.button:hover{transform:translateY(-1px);filter:brightness(.97)}.button:disabled{cursor:wait;opacity:.65}.secondary{color:var(--ink);background:var(--soft);font-size:13px;font-weight:700}.text-button{padding:4px;color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--sage);font-size:12px}.camera-note,.form-status{min-height:1.5em;margin:8px 0 0;color:#778372;font-size:11px}.form-status{color:var(--ink);font-size:13px;text-align:center}.submit{display:block;width:min(100%,310px);margin:23px auto 0;color:#fff;background:var(--ink);font-size:15px;font-weight:700;box-shadow:0 5px #2d452a}.submit span{color:#f2c86c}
.wishes{margin:65px 0 15px}.section-heading{display:flex;align-items:end;justify-content:space-between;padding-bottom:12px;border-bottom:1px solid #e8d4d5}.section-heading .section-mark{font-size:22px}.section-heading h2{margin:0}.wish-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:18px}.loading,.empty{grid-column:1/-1;padding:22px;color:#7b8774;text-align:center;font-size:13px}.wish-card{display:flex;gap:12px;min-width:0;padding:11px;background:#fff9f1;border:1px solid #efdee0;border-radius:17px 14px 18px 13px}.wish-photo{width:76px;height:76px;flex:0 0 76px;object-fit:cover;border:2px solid #fff;border-radius:50% 48% 52% 45%;box-shadow:0 2px 8px #7f6e5b22}.wish-content{min-width:0}.wish-content h3{margin:2px 0 5px;color:var(--ink);font:700 22px/1 Caveat,cursive}.wish-content p{display:-webkit-box;margin:0;overflow:hidden;font-size:12px;line-height:1.55;-webkit-box-orient:vertical;-webkit-line-clamp:3}footer{margin-top:55px;color:var(--ink);text-align:center;font:600 22px/1 Caveat,cursive}footer span{color:var(--pink)}
.export-panel{display:grid;grid-template-columns:1fr auto;gap:12px 22px;align-items:center;max-width:620px;margin:34px auto 0;padding:22px 24px;background:#f4f8e9;border:1px solid #d3e0b3;border-radius:22px}.export-panel .section-mark{font-size:23px}.export-panel h2{margin:0}.export-panel p{margin:3px 0 0;font-size:12px;line-height:1.6}.print-button{color:#fff;background:var(--ink);font-weight:700;white-space:nowrap}.print-note{grid-column:1/-1;color:#65765d;font-size:11px!important}.print-book{display:none}
@media(max-width:560px){.paper{border-width:3px;border-radius:37px 31px 41px 35px}.ribbon{font-size:25px}.flower{display:none}.wish-grid{grid-template-columns:1fr}.camera-frame,.camera-frame video,.camera-frame img{min-height:210px}.camera-actions{gap:7px}.button{padding:9px 13px}}
@media print{*{print-color-adjust:exact;-webkit-print-color-adjust:exact}body{background:#fff;font-family:Mali,sans-serif}.page-shell{display:none}.print-book[hidden]{display:block!important}.print-book{display:block!important;color:#2f482e}.print-cover,.print-entry{position:relative;min-height:270mm;padding:28mm 24mm;page-break-after:always;break-after:page;background:#fffdf6}.print-cover{display:grid;place-content:center;text-align:center;border:10mm solid #f4e1e5}.print-cover:before,.print-entry:before{content:"";position:absolute;inset:8mm;border:1px solid #d99aa9;border-radius:10mm}.print-cover h1{font-size:68pt}.print-cover p{font-size:18pt}.print-cover .print-date{font-weight:700;letter-spacing:.16em}.print-entry{display:grid;grid-template-columns:86mm 1fr;gap:18mm;align-items:center;border:5mm solid #f7ebdc}.print-entry:nth-child(odd){background:#f9fcf1}.print-entry img{width:86mm;height:86mm;object-fit:cover;border:3mm solid #fff;border-radius:50%;box-shadow:0 3mm 8mm #485d3830}.print-entry h2{font:700 34pt/1 Caveat,cursive}.print-entry blockquote{margin:8mm 0 0;font-size:17pt;line-height:1.8}.print-entry .print-mark{color:#d99aa9;font:55pt/1 Caveat,cursive}.print-entry .print-number{position:absolute;right:18mm;bottom:14mm;color:#77905b;font-size:10pt}.print-end{display:grid;place-content:center;min-height:270mm;padding:28mm;text-align:center;page-break-after:avoid}.print-end h2{font:700 40pt Caveat,cursive}.print-end p{font-size:16pt}@page{size:A4 portrait;margin:0}}
