:root{--wine:#7b2434;--red:#a83245;--gold:#c69b5b;--cream:#fffaf3;--ink:#392a29;--muted:#8b7770;--line:#eadccd}*{box-sizing:border-box}body{margin:0;background:#f7f0e8;color:var(--ink);font-family:'DM Sans',sans-serif}button,input,textarea,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}.loading{padding:80px;text-align:center;color:var(--wine)}.admin-shell{min-height:100vh;display:grid;grid-template-columns:250px 1fr}.sidebar{background:#51202a;color:#fff;padding:28px 18px;display:flex;flex-direction:column}.brand{font:700 23px 'Playfair Display';line-height:1.2;margin:8px 10px 4px}.brand-sub{font-size:11px;color:#e6c8a1;letter-spacing:2px;margin:0 10px 36px}.nav-label{font-size:10px;letter-spacing:2px;color:#c7a7a0;margin:16px 12px 9px}.nav-btn{border:0;background:transparent;color:#eadcda;padding:13px 14px;text-align:left;border-radius:10px;margin:2px 0}.nav-btn.active,.nav-btn:hover{background:#783541;color:white}.side-foot{margin-top:auto;font-size:12px;color:#d3b7b0;line-height:1.7;padding:12px}.main{padding:30px 36px;max-width:1500px;width:100%;margin:auto}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:28px}.eyebrow{color:var(--gold);letter-spacing:2px;font-size:10px;font-weight:700}.h1{font:600 30px 'Playfair Display';margin:5px 0}.muted{color:var(--muted)}.btn{border:0;border-radius:9px;padding:11px 16px;background:var(--wine);color:#fff;font-weight:600}.btn:hover{filter:brightness(1.1)}.btn.gold{background:var(--gold);color:#321d1d}.btn.light{background:#f3e8dc;color:var(--wine)}.btn.outline{background:transparent;border:1px solid var(--line);color:var(--wine)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:25px}.stat,.panel,.couple-card{background:#fff;border:1px solid var(--line);border-radius:15px;box-shadow:0 8px 24px #50301a0a}.stat{padding:20px}.stat strong{display:block;font:700 30px 'Playfair Display';color:var(--wine)}.stat span{font-size:12px;color:var(--muted)}.panel{padding:22px;margin-bottom:20px}.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.panel h2{font:600 20px 'Playfair Display';margin:0}.toolbar{display:flex;gap:10px;align-items:center}.search{border:1px solid var(--line);background:#fff;border-radius:9px;padding:11px 13px;min-width:230px}.couple-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.couple-card{overflow:hidden}.couple-cover{height:145px;background:linear-gradient(130deg,#7c2736,#d6a56b);position:relative;display:flex;align-items:center;justify-content:center;color:#fff;font:italic 28px 'Great Vibes'}.couple-cover img{width:100%;height:100%;object-fit:cover}.couple-info{padding:16px}.couple-info h3{font:600 19px 'Playfair Display';margin:0 0 6px}.couple-meta{font-size:12px;color:var(--muted);line-height:1.8}.pill{display:inline-block;border-radius:30px;background:#edf5ed;color:#3d7b4a;padding:4px 9px;font-size:10px;font-weight:700}.pill.off{background:#f7e9e7;color:#a14a46}.card-actions{display:flex;gap:7px;margin-top:13px;flex-wrap:wrap}.small-btn{border:1px solid var(--line);background:white;color:var(--wine);border-radius:7px;padding:7px 10px;font-size:11px;font-weight:600}.empty{text-align:center;padding:50px 15px;color:var(--muted)}.login-wrap{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at top,#f9e7d3,#f3e9df 55%,#e9d7c8)}.login-card{width:min(420px,92vw);background:#fff;border:1px solid var(--line);border-radius:22px;padding:38px;box-shadow:0 25px 70px #4d1c2b20}.login-mark{width:58px;height:58px;border-radius:50%;background:var(--wine);color:#f4d49b;display:grid;place-items:center;font:28px 'Playfair Display';margin-bottom:20px}.login-card h1{font:600 27px 'Playfair Display';margin:0}.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.field{display:flex;flex-direction:column;gap:6px;margin:8px 0}.field.full{grid-column:1/-1}.field label{font-size:12px;font-weight:700;color:#6c4d47}.field input,.field textarea,.field select{border:1px solid var(--line);border-radius:9px;padding:11px 12px;background:#fffdfb;outline:none;width:100%}.field input:focus,.field textarea:focus{border-color:var(--gold)}.field textarea{min-height:82px;resize:vertical}.modal-back{position:fixed;inset:0;background:#21131899;display:grid;place-items:center;padding:20px;z-index:20}.modal{background:var(--cream);border-radius:18px;width:min(760px,100%);max-height:92vh;overflow:auto;padding:25px}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.modal-head h2{font:600 23px 'Playfair Display';margin:0}.close{border:0;background:#f0e4d9;border-radius:50%;width:34px;height:34px;color:var(--wine);font-size:18px}.urlbox{background:#f6eee6;border:1px dashed #d6b990;border-radius:8px;padding:10px;font-size:12px;word-break:break-all}.toast{position:fixed;right:20px;bottom:20px;background:#35232a;color:white;padding:13px 18px;border-radius:10px;z-index:50;box-shadow:0 8px 25px #0002}.wedding{min-height:100vh;background:#f8eee5}.wedding-hero{min-height:650px;position:relative;display:grid;place-items:center;text-align:center;padding:60px 20px;background:linear-gradient(#35161a66,#35161a66),url('https://images.unsplash.com/photo-1519741497674-611481863552?auto=format&fit=crop&w=2000&q=85') center/cover;color:#fff}.wedding-hero.has-cover{background-position:center;background-size:cover}.wedding-card{width:min(720px,95vw);padding:55px 30px;border:1px solid #e4c58e;outline:1px solid #e4c58e;outline-offset:8px;background:#fffaf0ed;color:#6b2936;box-shadow:0 20px 60px #2d101044}.wedding-kicker{letter-spacing:4px;font-size:11px;color:#9e7950}.wedding-names{font:56px 'Great Vibes';margin:20px 0 8px;color:#812e3c}.amp{font:20px 'Playfair Display';color:#c19a61}.wedding-date{font:19px 'Playfair Display';margin:22px 0 8px}.wedding-content{max-width:1000px;margin:-45px auto 0;position:relative;padding:0 20px 60px}.wedding-panel{background:#fffaf5;border:1px solid #ead8c4;border-radius:18px;padding:32px;text-align:center;margin:18px 0;box-shadow:0 10px 35px #542b1a0c}.section-title{font:30px 'Great Vibes';color:#8a3542}.photo-row{display:grid;grid-template-columns:1fr 1fr;gap:15px;max-width:700px;margin:20px auto}.photo-row img,.gallery img{width:100%;height:280px;object-fit:cover;border-radius:12px}.gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:20px}.gallery img{height:170px}.detail{color:#806b60;line-height:1.9}.rsvp-form{max-width:520px;margin:15px auto;text-align:left}.rsvp-form input,.rsvp-form textarea,.rsvp-form select{width:100%;padding:12px;border:1px solid #e5d3c0;border-radius:8px;margin:5px 0 12px;background:white}.footer{padding:25px;text-align:center;background:#612431;color:#f8e8cf;font-size:12px;letter-spacing:1px}.admin-table{width:100%;border-collapse:collapse}.admin-table td,.admin-table th{text-align:left;padding:12px;border-bottom:1px solid #f0e7df;font-size:13px}.admin-table th{color:var(--muted);font-size:11px;letter-spacing:1px}
@media(max-width:950px){.admin-shell{grid-template-columns:1fr}.sidebar{padding:14px;flex-direction:row;align-items:center;gap:10px;overflow:auto}.brand{font-size:17px;margin:0}.brand-sub,.nav-label,.side-foot{display:none}.nav-btn{white-space:nowrap;padding:9px}.main{padding:20px}.couple-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:620px){.stats{grid-template-columns:repeat(2,1fr)}.couple-grid{grid-template-columns:1fr}.field-grid{grid-template-columns:1fr}.field.full{grid-column:auto}.topbar{align-items:flex-start;gap:12px;flex-direction:column}.toolbar{width:100%;flex-wrap:wrap}.search{min-width:0;flex:1}.wedding-hero{min-height:560px}.wedding-card{padding:35px 18px}.wedding-names{font-size:43px}.photo-row{grid-template-columns:1fr}.photo-row img{height:260px}.gallery{grid-template-columns:1fr 1fr}.gallery img{height:130px}.wedding-panel{padding:23px 15px}}
.guest-list{display:grid;gap:10px;max-height:48vh;overflow:auto}.guest-row{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:13px;border:1px solid #eee4da;border-radius:12px;background:#fffdfb}.guest-row small{display:block;color:#81766d;margin:4px 0;font-size:12px}.guest-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.guest-row .urlbox{font-size:10px;max-width:430px;overflow-wrap:anywhere}@media(max-width:650px){.guest-row{align-items:flex-start;flex-direction:column}.guest-actions{justify-content:flex-start}}
/* V1.3.2 — cinematic wedding login experience */
.login-wrap{min-height:100vh;position:relative;isolation:isolate;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:42px 5vw 24px;background:linear-gradient(90deg,rgba(34,17,22,.45),rgba(44,20,27,.16) 48%,rgba(39,17,24,.40)),url('/assets/images/wedding-login-bg.jpg') center 42%/cover fixed;overflow:hidden}
.login-wrap:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(26,12,17,.08),rgba(26,12,17,.30))}
.login-scene{width:min(1220px,100%);display:grid;grid-template-columns:minmax(260px,1fr) minmax(380px,490px);align-items:center;gap:clamp(24px,6vw,90px)}
.login-story{color:#fff;text-shadow:0 3px 22px rgba(22,8,12,.55);padding:20px 0;max-width:540px}
.story-kicker{font-size:11px;letter-spacing:4px;font-weight:700;color:#f8e4c9}
.story-ornament{font-size:32px;color:#f3d3ad;margin:24px 0 10px;letter-spacing:10px}
.login-story h2{font:500 clamp(42px,5vw,70px)/1.08 'Playfair Display',serif;margin:0 0 18px;color:#fff8ee}
.login-story p{font:italic 17px/1.8 'Playfair Display',serif;max-width:390px;color:#fff1e7}
.story-bottom{margin-top:44px;font-size:10px;letter-spacing:4px;color:#f4d7b4}
.login-card.login-glass{width:100%;max-width:490px;margin:0;background:rgba(255,250,246,.91);border:1px solid rgba(255,255,255,.82);border-radius:26px;padding:clamp(25px,3.2vw,42px);box-shadow:0 28px 90px rgba(25,7,14,.30),inset 0 1px 0 rgba(255,255,255,.9);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);position:relative;overflow:hidden}
.login-card.login-glass:after{content:"";position:absolute;right:-58px;top:-58px;width:170px;height:170px;border:1px solid rgba(190,142,103,.22);border-radius:50%;box-shadow:0 0 0 18px rgba(190,142,103,.05),0 0 0 38px rgba(190,142,103,.035);pointer-events:none}
.login-card .login-mark{width:62px;height:62px;border-radius:50%;background:linear-gradient(145deg,#8d3342,#531d2a);color:#f7dfb7;display:grid;place-items:center;font-size:31px;margin:0 auto 17px;box-shadow:0 9px 25px rgba(95,32,48,.22);border:2px solid #d8b77f}
.login-card .eyebrow{text-align:center;color:#a77a59;letter-spacing:2.6px;font-size:9px;font-weight:700;margin-bottom:10px}
.login-card h1{text-align:center;font:600 31px 'Playfair Display',serif;color:#672a37;margin:0 0 9px}
.login-card>.muted{text-align:center;font-size:13px;line-height:1.65;margin:0 auto 22px;max-width:360px}
.login-card .field{margin:14px 0;gap:7px}
.login-card .field label{font-size:11px;letter-spacing:.4px;color:#755a55}
.login-card .field input{height:49px;border-radius:12px;border:1px solid #e5d3c9;background:rgba(255,255,255,.9);padding:0 15px;color:#392a29;box-shadow:0 3px 12px rgba(83,38,39,.035)}
.login-card .field input:focus{border-color:#b78365;box-shadow:0 0 0 3px rgba(183,131,101,.13)}
.password-toggle{display:flex;align-items:center;gap:8px;font-size:12px;color:#765c58;cursor:pointer;margin:8px 0 2px}
.password-toggle input{width:15px;height:15px;accent-color:#8c3545;cursor:pointer}
.login-submit{height:51px;border:0;border-radius:13px;background:linear-gradient(110deg,#7a2638,#a64750 55%,#7a2638);color:#fff;font-weight:700;letter-spacing:.3px;box-shadow:0 10px 24px rgba(116,35,54,.23);transition:transform .2s,box-shadow .2s}
.login-submit:hover{transform:translateY(-2px);box-shadow:0 14px 28px rgba(116,35,54,.29)}
.login-submit span{font-size:19px;margin-left:8px}
.default-credential{margin-top:17px;padding:12px 14px;border-radius:11px;background:#f8eee8;border:1px solid #edd9cd;color:#775e57;font-size:11px;line-height:1.7;text-align:center}
.default-credential b{color:#7b2d3c;font-size:11px}.default-credential strong{color:#642a38}.default-credential small{font-size:10px;color:#987f76}
.couple-note{background:#f8f0e9}
.login-switch{text-align:center;font-size:12px;color:#806a64;margin:18px 0 0}.login-switch a{color:#872f42;font-weight:700;text-decoration:none}.login-switch a:hover{text-decoration:underline}
.login-copyright{color:rgba(255,244,232,.88);font-size:9px;letter-spacing:3px;margin-top:24px;text-align:center;text-shadow:0 2px 8px #251017}.login-copyright span{color:#e8c28f;padding:0 8px}
@media(max-width:820px){.login-wrap{padding:28px 18px 18px;background-attachment:scroll}.login-scene{grid-template-columns:1fr;max-width:500px;gap:15px}.login-story{display:none}.login-card.login-glass{max-width:500px}.login-copyright{margin-top:16px}}
@media(max-width:480px){.login-wrap{padding:16px 12px}.login-card.login-glass{padding:25px 20px;border-radius:20px}.login-card h1{font-size:27px}.login-card .login-mark{width:54px;height:54px}.login-copyright{font-size:8px;letter-spacing:2px}}

/* V1.3.2 — login entry embedded on each couple's own invitation page */
.couple-login-launch{position:fixed;left:22px;bottom:20px;z-index:15;display:flex;align-items:center;gap:10px;padding:13px 19px;border:1px solid rgba(255,255,255,.65);border-radius:999px;background:linear-gradient(135deg,#6d2435,#a94b57);color:#fff8ef;font:600 13px 'Playfair Display',serif;letter-spacing:.15px;box-shadow:0 10px 30px rgba(55,19,29,.28),inset 0 1px 0 rgba(255,255,255,.2);cursor:pointer;transition:transform .2s,box-shadow .2s}
.couple-login-launch:hover{transform:translateY(-3px);box-shadow:0 15px 34px rgba(55,19,29,.35)}.couple-login-launch:first-letter{font-size:19px}
.couple-login-overlay{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:linear-gradient(120deg,rgba(37,14,22,.65),rgba(44,20,27,.48)),var(--couple-login-bg,linear-gradient(135deg,#ead4ca,#8c5962)) center/cover no-repeat;backdrop-filter:blur(7px)}.couple-login-overlay.hidden{display:none}
.couple-login-panel{position:relative;width:min(465px,100%);max-height:92vh;overflow:auto;padding:34px 36px 27px;border:1px solid rgba(255,255,255,.85);border-radius:25px;background:rgba(255,250,246,.94);box-shadow:0 30px 100px rgba(18,7,12,.42),inset 0 1px 0 #fff;backdrop-filter:blur(20px);text-align:center;color:#542b34}
.couple-login-close{position:absolute;right:15px;top:12px;width:34px;height:34px;border:0;border-radius:50%;background:#f4e7e1;color:#743044;font-size:24px;cursor:pointer}.couple-login-ornament{width:55px;height:55px;margin:0 auto 12px;display:grid;place-items:center;border-radius:50%;background:linear-gradient(145deg,#8d3342,#531d2a);border:2px solid #d8b77f;color:#f7dfb7;font-size:26px;box-shadow:0 8px 22px #5f20301f}.couple-login-panel .eyebrow{font-size:9px;letter-spacing:2px;color:#a77a59}.couple-login-panel h2{margin:8px 0 8px;font:600 29px 'Playfair Display',serif;color:#702d3b}.couple-login-intro{font-size:12px;line-height:1.65;color:#806a64;margin:0 0 19px}.couple-login-label{display:block;text-align:left;margin:12px 0 6px;font-size:11px;font-weight:700;color:#765650}.couple-login-panel form>input{width:100%;height:47px;padding:0 13px;border:1px solid #e4d1c8;border-radius:11px;background:#fff;color:#38282a;outline:none}.couple-login-panel form>input:focus{border-color:#ad7866;box-shadow:0 0 0 3px #ad78661c}.couple-login-show{display:flex;align-items:center;gap:8px;margin:11px 0 15px;text-align:left;font-size:12px;color:#765c58}.couple-login-show input{accent-color:#8c3545}.couple-login-submit{width:100%;height:49px;border:0;border-radius:12px;background:linear-gradient(110deg,#78283a,#ad4b56);color:#fff;font-weight:700;box-shadow:0 9px 22px #74233635;cursor:pointer}.couple-login-submit span{margin-left:7px;font-size:18px}.couple-login-default{margin-top:15px;padding:11px;border:1px solid #edd9cd;border-radius:11px;background:#f8eee8;color:#775e57;font-size:11px;line-height:1.65}.couple-login-default b{color:#762b3b}.couple-login-default small{font-size:10px}.couple-login-foot{margin-top:18px;font-size:8px;letter-spacing:2px;color:#a88a7b}
@media(max-width:600px){.couple-login-launch{left:12px;bottom:12px;padding:11px 14px;font-size:11px}.couple-login-panel{padding:30px 22px 22px;border-radius:20px}.couple-login-panel h2{font-size:25px}}

/* V1.3.2 — login entry embedded on each couple's own invitation page */
.couple-login-launch{position:fixed;left:22px;bottom:20px;z-index:15;display:flex;align-items:center;gap:10px;padding:13px 19px;border:1px solid rgba(255,255,255,.65);border-radius:999px;background:linear-gradient(135deg,#6d2435,#a94b57);color:#fff8ef;font:600 13px 'Playfair Display',serif;letter-spacing:.15px;box-shadow:0 10px 30px rgba(55,19,29,.28),inset 0 1px 0 rgba(255,255,255,.2);cursor:pointer;transition:transform .2s,box-shadow .2s}
.couple-login-launch:hover{transform:translateY(-3px);box-shadow:0 15px 34px rgba(55,19,29,.35)}
.couple-login-overlay{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:linear-gradient(120deg,rgba(37,14,22,.65),rgba(44,20,27,.48)),var(--couple-login-bg,linear-gradient(135deg,#ead4ca,#8c5962)) center/cover no-repeat;backdrop-filter:blur(7px)}.couple-login-overlay.hidden{display:none}
.couple-login-panel{position:relative;width:min(465px,100%);max-height:92vh;overflow:auto;padding:34px 36px 27px;border:1px solid rgba(255,255,255,.85);border-radius:25px;background:rgba(255,250,246,.94);box-shadow:0 30px 100px rgba(18,7,12,.42),inset 0 1px 0 #fff;backdrop-filter:blur(20px);text-align:center;color:#542b34}
.couple-login-close{position:absolute;right:15px;top:12px;width:34px;height:34px;border:0;border-radius:50%;background:#f4e7e1;color:#743044;font-size:24px;cursor:pointer}.couple-login-ornament{width:55px;height:55px;margin:0 auto 12px;display:grid;place-items:center;border-radius:50%;background:linear-gradient(145deg,#8d3342,#531d2a);border:2px solid #d8b77f;color:#f7dfb7;font-size:26px;box-shadow:0 8px 22px #5f20301f}.couple-login-panel .eyebrow{font-size:9px;letter-spacing:2px;color:#a77a59}.couple-login-panel h2{margin:8px 0;font:600 29px 'Playfair Display',serif;color:#702d3b}.couple-login-intro{font-size:12px;line-height:1.65;color:#806a64;margin:0 0 19px}.couple-login-label{display:block;text-align:left;margin:12px 0 6px;font-size:11px;font-weight:700;color:#765650}.couple-login-panel form>input{width:100%;height:47px;padding:0 13px;border:1px solid #e4d1c8;border-radius:11px;background:#fff;color:#38282a;outline:none}.couple-login-panel form>input:focus{border-color:#ad7866;box-shadow:0 0 0 3px #ad78661c}.couple-login-show{display:flex;align-items:center;gap:8px;margin:11px 0 15px;text-align:left;font-size:12px;color:#765c58}.couple-login-show input{accent-color:#8c3545}.couple-login-submit{width:100%;height:49px;border:0;border-radius:12px;background:linear-gradient(110deg,#78283a,#ad4b56);color:#fff;font-weight:700;box-shadow:0 9px 22px #74233635;cursor:pointer}.couple-login-submit span{margin-left:7px;font-size:18px}.couple-login-default{margin-top:15px;padding:11px;border:1px solid #edd9cd;border-radius:11px;background:#f8eee8;color:#775e57;font-size:11px;line-height:1.65}.couple-login-default b{color:#762b3b}.couple-login-default small{font-size:10px}.couple-login-foot{margin-top:18px;font-size:8px;letter-spacing:2px;color:#a88a7b}
@media(max-width:600px){.couple-login-launch{left:12px;bottom:12px;padding:11px 14px;font-size:11px}.couple-login-panel{padding:30px 22px 22px;border-radius:20px}.couple-login-panel h2{font-size:25px}}

.admin-preview{display:block;max-width:180px;max-height:120px;object-fit:cover;border-radius:9px;margin-top:9px;border:1px solid #e8dcd5}.field.full h3{font:600 17px 'Playfair Display',serif;color:#713847;margin:15px 0 0}.field.full .muted{font-size:11px}

/* V1.6 — hạn sử dụng thiệp */
.exp-line{margin-top:8px}.exp-pill{display:inline-block;border-radius:30px;padding:4px 10px;font-size:11px;font-weight:700;line-height:1.4}
.exp-none{background:#f1ece6;color:#8b7770}.exp-ok{background:#edf5ed;color:#3d7b4a}.exp-warn{background:#fdf3dc;color:#9a6a0b}.exp-danger{background:#f9e4e1;color:#b13a32}
.exp-quick{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin:12px 0}
.exp-warnbox{background:#fdf3dc;border:1px solid #f0dca8;color:#7a5a12;border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.55}
.exp-log{border-top:1px solid var(--line);padding-top:12px;font-size:12px}.exp-log-row{padding:6px 0;border-bottom:1px dashed var(--line);color:var(--muted)}
