/* RSVPly — RSVP Collection App
 * Main stylesheet. Shares the EverAfter palette so both apps read as one suite.
 */

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}

:root{
  --cream:#FAF8F3;
  --ivory:#F4F0E8;
  --linen:#E8E2D6;
  --stone:#B8AFA3;
  --taupe:#8C7D6E;
  --bark:#5C4A3C;
  --espresso:#2C1F14;
  --gold:#B8962E;
  --gold-lt:#F5EDD0;
  --sage:#5C7A5C;
  --sage-lt:#E0EBE0;
  --rose:#A85C5C;
  --rose-lt:#F0E0E0;
  --amber:#A06C2A;
  --amber-lt:#F5E8D0;
  --plum:#6B52A8;
  --plum-lt:#F0EDF8;
  --sky:#3A6090;
  --sky-lt:#E8F0F8;
  --sidebar:230px;
}

html{background:var(--cream);scrollbar-gutter:stable;}
body{
  font-family:'DM Sans',-apple-system,BlinkMacSystemFont,sans-serif;
  background:var(--cream);color:var(--espresso);
  min-height:100vh;display:flex;-webkit-font-smoothing:antialiased;
}
a{color:inherit;}

/* ══════════ SIDEBAR ══════════ */
.sidebar{
  width:var(--sidebar);min-height:100vh;background:#fff;
  border-right:1px solid var(--linen);
  display:flex;flex-direction:column;
  position:fixed;left:0;top:0;bottom:0;z-index:50;
}
.sidebar-brand{padding:26px 20px 20px;border-bottom:1px solid var(--linen);text-align:center;}
.monogram{
  width:76px;height:76px;border:1.5px solid var(--gold);border-radius:50%;
  display:flex;align-items:center;justify-content:center;margin:0 auto 12px;
  font-family:'Cormorant Garamond',serif;font-size:25px;color:var(--gold);
  font-style:italic;background:var(--gold-lt);letter-spacing:-1px;overflow:hidden;
}
.monogram img{width:100%;height:100%;object-fit:cover;border-radius:50%;}
.couple-name{font-family:'Cormorant Garamond',serif;font-size:20px;font-style:italic;line-height:1.2;}
.event-detail{font-size:11px;color:var(--taupe);margin-top:5px;line-height:1.6;}
.switch-event{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  margin-top:12px;padding:5px 12px;border:1px solid var(--linen);border-radius:20px;
  font-size:11px;color:var(--taupe);text-decoration:none;transition:all .15s;
}
.switch-event:hover{border-color:var(--gold);color:var(--gold);background:var(--gold-lt);}

.nav-list{padding:14px 10px;flex:1;overflow-y:auto;}
.nav-section{font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--stone);padding:12px 14px 6px;}
.nav-item{
  display:flex;align-items:center;gap:11px;padding:10px 14px;border-radius:10px;
  font-size:13px;color:var(--taupe);text-decoration:none;transition:all .15s;
  margin-bottom:2px;letter-spacing:.01em;
}
.nav-item:hover{background:var(--ivory);color:var(--espresso);}
.nav-item.active{background:var(--sage-lt);color:var(--sage);font-weight:500;}
.nav-item svg{flex-shrink:0;opacity:.7;}
.nav-item.active svg{opacity:1;}
.nav-count{margin-left:auto;font-size:10px;background:var(--ivory);color:var(--taupe);padding:2px 7px;border-radius:10px;}
.nav-item.active .nav-count{background:#fff;color:var(--sage);}
.sidebar-footer{padding:14px 10px;border-top:1px solid var(--linen);}

/* ══════════ MAIN + TOPBAR ══════════ */
.main{margin-left:var(--sidebar);flex:1;min-height:100vh;display:flex;flex-direction:column;}
.topbar{
  background:#fff;border-bottom:1px solid var(--linen);padding:0 30px;min-height:68px;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  position:sticky;top:0;z-index:40;
}
.topbar-left .welcome{font-size:12px;color:var(--taupe);letter-spacing:.02em;}
.topbar-left .couple-big{font-family:'Cormorant Garamond',serif;font-size:26px;font-weight:500;line-height:1.1;}
.topbar-left .tagline{font-size:12px;color:var(--stone);margin-top:1px;}
.topbar-right{display:flex;align-items:center;gap:10px;}

.avatar{
  width:38px;height:38px;border-radius:50%;background:var(--sage);color:#fff;
  font-size:13px;font-weight:500;display:flex;align-items:center;justify-content:center;
  cursor:pointer;flex-shrink:0;
}
.avatar-menu{position:relative;}
.avatar-dropdown{
  position:absolute;right:0;top:46px;background:#fff;border:1px solid var(--linen);
  border-radius:12px;box-shadow:0 12px 32px rgba(0,0,0,.1);min-width:210px;
  padding:6px;display:none;z-index:60;
}
.avatar-dropdown.open{display:block;}
.avatar-dd-head{padding:10px 12px 8px;border-bottom:1px solid var(--linen);margin-bottom:4px;}
.avatar-dd-name{font-size:13px;font-weight:500;}
.avatar-dd-sub{font-size:11px;color:var(--taupe);margin-top:1px;}
.avatar-dd-item{
  display:flex;align-items:center;gap:9px;padding:9px 12px;border-radius:8px;
  font-size:13px;color:var(--espresso);text-decoration:none;
}
.avatar-dd-item:hover{background:var(--ivory);}

/* ══════════ BUTTONS ══════════ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  padding:9px 17px;border:1.5px solid var(--linen);border-radius:10px;background:#fff;
  font-size:13px;color:var(--espresso);cursor:pointer;text-decoration:none;
  font-family:inherit;transition:all .15s;white-space:nowrap;
}
.btn:hover{border-color:var(--gold);color:var(--gold);}
.btn-primary{background:var(--espresso);color:var(--gold);border-color:var(--espresso);}
.btn-primary:hover{background:var(--bark);border-color:var(--bark);color:var(--gold-lt);}
.btn-sage{background:var(--sage);color:#fff;border-color:var(--sage);}
.btn-sage:hover{background:#4d6b4d;border-color:#4d6b4d;color:#fff;}
.btn-ghost{background:transparent;}
.btn-danger{color:var(--rose);border-color:var(--rose-lt);}
.btn-danger:hover{background:var(--rose-lt);border-color:var(--rose);color:var(--rose);}
.btn:disabled{opacity:.5;cursor:not-allowed;}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:8px;border-width:1px;}

.act-btn{
  font-size:12px;padding:6px 13px;border-radius:7px;border:1px solid var(--linen);
  background:#fff;cursor:pointer;font-family:inherit;color:var(--espresso);
  transition:all .15s;white-space:nowrap;text-decoration:none;display:inline-flex;
  align-items:center;gap:5px;
}
.act-btn:hover{border-color:var(--bark);}
.act-btn.muted{color:var(--taupe);}
/* Destructive: coloured before the click, not only in the confirmation. */
.act-btn.danger{color:var(--rose);}
.act-btn.danger:hover{border-color:var(--rose);background:var(--rose-lt);}
.act-icon{
  width:29px;height:29px;border-radius:7px;border:1px solid var(--linen);background:#fff;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  color:var(--taupe);transition:all .15s;font-size:13px;flex-shrink:0;
}
.act-icon:hover{border-color:var(--bark);color:var(--espresso);}
.act-icon.danger{color:var(--rose);border-color:var(--rose-lt);}
.act-icon.danger:hover{background:var(--rose-lt);border-color:var(--rose);}

/* ══════════ PAGE ══════════ */
.page-inner{padding:26px 30px;}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:14px;margin-bottom:20px;}
.page-head h2{font-family:'Cormorant Garamond',serif;font-size:28px;font-style:italic;font-weight:500;}
.page-head p{font-size:13px;color:var(--taupe);margin-top:3px;}
.page-actions{display:flex;gap:8px;flex-wrap:wrap;}

/* ══════════ BANNERS ══════════ */
.banner{
  padding:10px 30px;display:flex;align-items:center;justify-content:space-between;
  gap:12px;flex-wrap:wrap;font-size:13px;border-bottom:1px solid transparent;
}
.banner-sage{background:var(--sage-lt);border-bottom-color:#B0CEB0;color:var(--sage);}
.banner-amber{background:var(--amber-lt);border-bottom-color:#E8C97A;color:var(--amber);}
.banner-rose{background:var(--rose-lt);border-bottom-color:#E0B0B0;color:var(--rose);}
.banner a{font-size:12px;text-decoration:none;border:1px solid currentColor;padding:4px 12px;border-radius:6px;opacity:.9;}
.banner a:hover{opacity:1;}

.flash{
  margin:0 30px;margin-top:18px;padding:12px 16px;border-radius:10px;font-size:13px;
  display:flex;align-items:center;gap:9px;
}
.flash-success{background:var(--sage-lt);color:var(--sage);}
.flash-error{background:var(--rose-lt);color:var(--rose);}
.flash-info{background:var(--gold-lt);color:var(--amber);}

/* ══════════ STAT CARDS ══════════ */
.stats-row{
  display:grid;grid-template-columns:repeat(5,1fr);background:#fff;
  border:1px solid var(--linen);border-radius:14px;overflow:hidden;margin-bottom:22px;
}
.stat-card{padding:20px 22px;border-right:1px solid var(--linen);display:flex;align-items:flex-start;gap:14px;}
.stat-card:last-child{border-right:none;}
.stat-icon{
  width:40px;height:40px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;flex-shrink:0;margin-top:2px;font-size:17px;
}
.si-gold{background:var(--gold-lt);}
.si-sage{background:var(--sage-lt);}
.si-amber{background:var(--amber-lt);}
.si-rose{background:var(--rose-lt);}
.si-plum{background:var(--plum-lt);}
.stat-label{font-size:12px;color:var(--taupe);margin-bottom:3px;}
.stat-num{font-size:36px;font-weight:700;line-height:1;letter-spacing:-.03em;}
.stat-sub{font-size:11px;color:var(--stone);margin-top:3px;}

/* ══════════ PANEL ══════════ */
.panel{background:#fff;border:1px solid var(--linen);border-radius:14px;overflow:hidden;}
.panel + .panel{margin-top:18px;}
.panel-head{padding:15px 20px;border-bottom:1px solid var(--linen);display:flex;align-items:center;gap:11px;flex-wrap:wrap;}
.panel-title{font-family:'Cormorant Garamond',serif;font-size:20px;font-weight:500;flex-shrink:0;}
.panel-body{padding:20px;}
.panel-sub{font-size:12px;color:var(--taupe);margin-top:2px;}

.search-box{
  display:flex;align-items:center;gap:8px;background:var(--ivory);
  border:1px solid var(--linen);border-radius:8px;padding:8px 12px;flex:1;min-width:170px;
}
.search-box input{border:none;background:transparent;font-size:13px;color:var(--espresso);font-family:inherit;flex:1;}
.search-box input:focus{outline:none;}
.search-box input::placeholder{color:var(--stone);}

.filter-pills{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.pill{
  font-size:12px;padding:6px 14px;border-radius:20px;border:1px solid var(--linen);
  background:transparent;color:var(--taupe);cursor:pointer;font-family:inherit;
  transition:all .15s;white-space:nowrap;
}
.pill:hover{border-color:var(--bark);color:var(--espresso);}
.pill.active{background:var(--sage);color:#fff;border-color:var(--sage);}

/* ══════════ TABLE ══════════ */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
table{width:100%;border-collapse:collapse;}
th{
  font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--stone);
  padding:10px 16px;text-align:left;border-bottom:1px solid var(--linen);
  font-weight:500;background:var(--ivory);white-space:nowrap;
}
td{padding:13px 16px;border-bottom:1px solid var(--linen);font-size:13px;vertical-align:middle;}
tbody tr:last-child td{border-bottom:none;}
tbody tr:hover td{background:var(--cream);}
tr.is-dup td{background:#FDF6F6;}
tr.is-dup:hover td{background:#FAEEEE;}
.g-num{color:var(--stone);font-size:12px;width:40px;}
.g-name{font-weight:500;font-size:14px;}
.g-meta{font-size:11px;color:var(--taupe);margin-top:2px;}
.g-note{
  font-size:11px;color:var(--sage);margin-top:3px;background:var(--sage-lt);
  display:inline-block;padding:2px 8px;border-radius:6px;
}
.cell-muted{font-size:12px;color:var(--taupe);}
.cell-dash{color:var(--stone);}
.empty-row td{text-align:center;color:var(--stone);font-style:italic;padding:40px 16px !important;font-size:13px;}

/* ══════════ BADGES ══════════ */
.badge{
  display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:5px 11px;
  border-radius:20px;white-space:nowrap;line-height:1.2;
}
.b-yes{background:var(--sage-lt);color:var(--sage);}
.b-no{background:var(--rose-lt);color:var(--rose);}
.b-maybe{background:var(--amber-lt);color:var(--amber);}
.b-pending{background:var(--ivory);color:var(--taupe);}
.b-dup{background:var(--rose-lt);color:var(--rose);}
.b-plum{background:var(--plum-lt);color:var(--plum);}
.b-sky{background:var(--sky-lt);color:var(--sky);}
.b-neutral{background:var(--ivory);color:var(--taupe);}
.b-gold{background:var(--gold-lt);color:var(--amber);}
.chip-src{font-size:10px;padding:2px 7px;border-radius:5px;background:var(--ivory);color:var(--stone);}

/* ══════════ PAGINATION ══════════ */
.pagination{padding:13px 20px;border-top:1px solid var(--linen);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.page-info{font-size:12px;color:var(--taupe);}
.page-btns{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.page-btn{
  min-width:32px;height:32px;padding:0 8px;border-radius:7px;border:1px solid var(--linen);
  background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;
  font-size:13px;color:var(--taupe);font-family:inherit;transition:all .15s;
}
.page-btn.active{background:var(--sage);color:#fff;border-color:var(--sage);}
.page-btn:hover:not(.active):not(:disabled){border-color:var(--bark);color:var(--espresso);}
.page-btn:disabled{opacity:.4;cursor:not-allowed;}

/* ══════════ FORMS ══════════ */
.field-group{margin-bottom:14px;}
.field-group label,.flabel{display:block;font-size:12px;color:var(--taupe);margin-bottom:5px;}
.flabel .req{color:var(--rose);}
.inp,.sel,textarea.inp{
  width:100%;padding:10px 12px;border:1px solid var(--linen);border-radius:9px;
  font-size:13px;font-family:inherit;color:var(--espresso);background:var(--ivory);
}
.inp:focus,.sel:focus{outline:none;border-color:var(--gold);background:#fff;}
textarea.inp{min-height:88px;resize:vertical;line-height:1.55;}
.sel{cursor:pointer;}
.fhelp{font-size:11px;color:var(--stone);margin-top:4px;}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;}
.form-grid .full{grid-column:1/-1;}

.check-row{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--espresso);cursor:pointer;padding:6px 0;}
.check-row input{width:16px;height:16px;accent-color:var(--sage);cursor:pointer;}

.radio-card{
  display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--linen);
  border-radius:10px;cursor:pointer;transition:all .15s;background:#fff;margin-bottom:8px;
}
.radio-card:hover{border-color:var(--stone);}
.radio-card input{margin-top:2px;accent-color:var(--sage);flex-shrink:0;}
.radio-card.sel-on{border-color:var(--sage);background:var(--sage-lt);}
.radio-card strong{display:block;font-size:13px;font-weight:500;}
.radio-card span{font-size:11.5px;color:var(--taupe);line-height:1.5;}

/* ══════════ FORM BUILDER ══════════ */
.fb-list{display:flex;flex-direction:column;}
.fb-item{
  display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--linen);
  background:#fff;transition:background .15s;
}
.fb-item:last-child{border-bottom:none;}
.fb-item:hover{background:var(--cream);}
.fb-item.dragging{opacity:.45;}
.fb-item.drop-target{box-shadow:inset 0 2px 0 var(--gold);}
.fb-grip{color:var(--stone);cursor:grab;font-size:15px;line-height:1;user-select:none;flex-shrink:0;}
.fb-grip:active{cursor:grabbing;}
.fb-ico{
  width:34px;height:34px;border-radius:9px;background:var(--ivory);display:flex;
  align-items:center;justify-content:center;font-size:15px;flex-shrink:0;
}
.fb-main{flex:1;min-width:0;}
.fb-label{font-size:14px;font-weight:500;display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.fb-meta{font-size:11px;color:var(--taupe);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap;}
.fb-key{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;background:var(--ivory);padding:2px 6px;border-radius:4px;color:var(--bark);}
.fb-actions{display:flex;gap:6px;align-items:center;flex-shrink:0;}
.fb-off{opacity:.5;}

.tpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;}
.tpl-card{
  border:1px solid var(--linen);border-radius:10px;padding:12px 14px;background:#fff;
  cursor:pointer;transition:all .15s;text-align:left;font-family:inherit;
}
.tpl-card:hover{border-color:var(--gold);background:var(--gold-lt);}
.tpl-card strong{display:block;font-size:12.5px;font-weight:500;color:var(--espresso);}
.tpl-card span{font-size:11px;color:var(--taupe);}

/* ══════════ CODE / INTEGRATION ══════════ */
.code-box{
  display:flex;align-items:center;gap:10px;background:var(--espresso);color:var(--gold-lt);
  border-radius:10px;padding:12px 14px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:12px;word-break:break-all;line-height:1.6;
}
.code-box code{flex:1;}
.code-box button{
  background:rgba(255,255,255,.12);border:none;color:var(--gold-lt);border-radius:7px;
  padding:6px 12px;font-size:11px;cursor:pointer;font-family:'DM Sans',sans-serif;
  white-space:nowrap;transition:background .15s;
}
.code-box button:hover{background:rgba(255,255,255,.24);}
/* Multi-line variant, for a snippet that must be copied exactly as written:
   line breaks preserved, long attributes scrolling rather than wrapping. */
.code-box.multi{align-items:flex-start;}
.code-box.multi code{white-space:pre;overflow-x:auto;word-break:normal;min-width:0;max-height:230px;}
pre.raw{
  background:var(--ivory);border:1px solid var(--linen);border-radius:9px;padding:12px 14px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;line-height:1.65;
  color:var(--bark);overflow-x:auto;white-space:pre-wrap;word-break:break-word;max-height:300px;
}
.steps{counter-reset:step;list-style:none;}
.steps li{
  position:relative;padding-left:38px;margin-bottom:16px;font-size:13px;line-height:1.65;color:var(--bark);
}
.steps li::before{
  counter-increment:step;content:counter(step);
  position:absolute;left:0;top:-1px;width:26px;height:26px;border-radius:50%;
  background:var(--gold-lt);color:var(--amber);font-size:12px;font-weight:600;
  display:flex;align-items:center;justify-content:center;
}
.steps li strong{color:var(--espresso);font-weight:500;}
.kv{display:grid;grid-template-columns:150px 1fr;gap:8px 16px;font-size:13px;}
.kv dt{color:var(--taupe);font-size:12px;}
.kv dd{color:var(--espresso);word-break:break-word;}

/* ══════════ MODAL ══════════ */
.modal-overlay{
  position:fixed;inset:0;background:rgba(44,31,20,.42);z-index:200;
  display:none;align-items:center;justify-content:center;padding:20px;overflow-y:auto;
}
.modal-overlay.open{display:flex;}
.modal{
  background:#fff;border-radius:16px;padding:26px;width:520px;max-width:100%;
  box-shadow:0 24px 64px rgba(0,0,0,.18);max-height:90vh;overflow-y:auto;
}
.modal.sm{width:380px;}
.modal h3{font-family:'Cormorant Garamond',serif;font-size:23px;font-weight:500;margin-bottom:3px;}
.modal .modal-sub{font-size:12px;color:var(--taupe);margin-bottom:18px;}
.modal-btns{display:flex;gap:10px;margin-top:20px;}
.modal-btns .btn{flex:1;}
/* Spells out what a destructive confirmation is about to take. */
.danger-note{
  background:var(--rose-lt);color:var(--rose);padding:11px 14px;border-radius:9px;
  font-size:12.5px;line-height:1.65;margin-bottom:16px;
}
.danger-note strong{display:block;}

/* ══════════ TOAST ══════════ */
#toast{
  position:fixed;bottom:26px;left:50%;transform:translateX(-50%);
  background:var(--espresso);color:var(--gold);padding:12px 24px;border-radius:10px;
  font-size:13px;opacity:0;transition:opacity .25s;pointer-events:none;z-index:999;
  box-shadow:0 4px 20px rgba(0,0,0,.2);max-width:90vw;text-align:center;
}
#toast.show{opacity:1;}
#toast.err{background:var(--rose);color:#fff;}

/* ══════════ EMPTY STATE ══════════ */
.empty-state{text-align:center;padding:56px 24px;}
.empty-state .ico{font-size:38px;margin-bottom:12px;opacity:.6;}
.empty-state h3{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:500;margin-bottom:6px;}
.empty-state p{font-size:13px;color:var(--taupe);max-width:400px;margin:0 auto 18px;line-height:1.65;}

/* ══════════ EVENT CARDS (select-event) ══════════ */
.ev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;}
.ev-card{
  background:#fff;border:1px solid var(--linen);border-radius:14px;padding:20px;
  text-decoration:none;color:inherit;display:block;transition:all .18s;
}
.ev-card:hover{border-color:var(--gold);box-shadow:0 8px 26px rgba(0,0,0,.07);transform:translateY(-2px);}
.ev-card .ev-name{font-family:'Cormorant Garamond',serif;font-size:21px;font-style:italic;line-height:1.2;}
.ev-card .ev-meta{font-size:12px;color:var(--taupe);margin-top:6px;line-height:1.6;}
.ev-card .ev-foot{
  margin-top:14px;padding-top:12px;border-top:1px solid var(--linen);
  display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--taupe);
}
.ev-card.new{
  border-style:dashed;display:flex;align-items:center;justify-content:center;
  min-height:150px;color:var(--taupe);font-size:13px;text-align:center;
}
.ev-card.new:hover{color:var(--gold);}

/* ══════════ BREAKDOWN BARS ══════════ */
.bd-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--linen);}
.bd-row:last-child{border-bottom:none;}
.bd-name{font-size:13px;min-width:140px;flex-shrink:0;}
.bd-track{flex:1;height:8px;background:var(--ivory);border-radius:4px;overflow:hidden;}
.bd-fill{height:100%;border-radius:4px;background:var(--sage);transition:width .5s ease;}
.bd-fill.f2{background:var(--gold);}
.bd-fill.f3{background:var(--plum);}
.bd-fill.f4{background:var(--sky);}
.bd-fill.f5{background:var(--amber);}
.bd-val{font-size:12px;color:var(--taupe);min-width:64px;text-align:right;}
.bd-head{
  font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--taupe);
  margin-bottom:8px;display:flex;align-items:center;gap:7px;
}
/* Says which of the two numbers a row is counting: one per person, or one per
   reply covering everyone who came with them. */
.bd-tag{
  text-transform:none;letter-spacing:0;font-size:10.5px;padding:1px 7px;border-radius:20px;
  background:var(--sage-lt);color:var(--sage);
}
/* The people a per-guest question has no answer for. Deliberately colourless:
   it is the gap in the order, not another option on the menu. */
.bd-missing .bd-name{color:var(--stone);font-style:italic;}
.bd-fill.f-none{background:repeating-linear-gradient(
  45deg,var(--linen),var(--linen) 4px,transparent 4px,transparent 8px);}

/* ── Per-guest answers in the RSVP editor ── */
.ed-guests{margin:18px 0 4px;}
.ed-guests-head{font-size:12px;color:var(--bark);font-weight:500;margin-bottom:9px;}
.ed-guests-head span{display:block;font-size:11px;color:var(--taupe);font-weight:400;margin-top:2px;}
.ed-guest{
  border:1px solid var(--linen);border-radius:11px;padding:13px 13px 1px;
  margin-bottom:9px;background:var(--ivory);
}
.ed-guest-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:12px;color:var(--taupe);}
.ed-guest .inp,.ed-guest .sel{background:#fff;}
.ed-guest .field-group{margin-bottom:11px;}

/* One person's answer in the report's guest list: their name, quietly, then
   what they asked for. */
.pg-line{white-space:nowrap;line-height:1.6;}
.pg-line span{color:var(--stone);margin-right:6px;}

/* ══════════ SHARED GUEST LIST (public token page) ══════════ */
.sh-bar{background:#fff;border-bottom:1px solid var(--linen);position:sticky;top:0;z-index:40;}
.sh-bar-inner{
  max-width:1240px;margin:0 auto;padding:14px 24px;
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
}
.sh-title{font-family:'Cormorant Garamond',serif;font-size:23px;font-style:italic;line-height:1.15;}
.sh-sub{font-size:12px;color:var(--taupe);margin-top:2px;}
.sh-right{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.sh-exp{font-size:11.5px;color:var(--stone);}
.sh-page{max-width:1240px;margin:0 auto;padding:26px 24px 60px;}
.sh-stats{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));}
.sh-count{font-size:12px;color:var(--taupe);}
.sh-hint{
  padding:9px 20px;background:var(--gold-lt);color:var(--amber);
  font-size:12px;border-bottom:1px solid var(--linen);
}
.sh-foot{
  text-align:center;font-size:11.5px;color:var(--stone);
  margin-top:22px;line-height:1.7;
}

/* Spreadsheet cells */
/* No `.sh-table td{padding:0}` here, though there was for a long time. It was
   meant to let an editor sit flush in its cell, but `.sh-table td` outranks the
   plain `.sh-cell` below it, so the padding on every value cell was being
   thrown away — text sat hard against the column edge and an email address
   finished exactly where the phone number started, which is what made this
   table look ragged next to the report. The editing state carries its own
   padding and outranks .sh-cell on its own, so nothing needed the reset. */
.sh-table .g-num{padding:11px 16px;}
.sh-cell{
  padding:11px 16px;font-size:13px;position:relative;
  border-left:1px solid transparent;transition:background .12s;
  /* And when a single unbroken value is wider than its column — a long address,
     a URL — it wraps inside the cell rather than running out of it. */
  overflow-wrap:break-word;
}
.sh-cell.editable{cursor:text;}
.sh-cell.editable:hover{background:var(--gold-lt);box-shadow:inset 0 0 0 1px var(--linen);}
.sh-cell.editable:focus{outline:none;background:var(--gold-lt);box-shadow:inset 0 0 0 2px var(--gold);}
.sh-cell.editing{padding:4px 8px;background:#fff;box-shadow:inset 0 0 0 2px var(--gold);}
.sh-cell.saving{opacity:.55;}
.sh-cell.saved{background:var(--sage-lt);}
.sh-cell.failed{background:var(--rose-lt);}
.sh-val{display:block;min-height:18px;}

/* Each column dressed for what it holds, the way the report table is. The
   class sits on the cell and is set once, so the inline editor can replace the
   contents as often as it likes without any of this having to be reapplied. */
.sh-c-name .sh-val{font-weight:500;font-size:14px;}
.sh-c-muted .sh-val{font-size:12px;color:var(--taupe);}
/* Centred, not right-aligned: pushed to the right edge the count ends up
   touching whatever the next column starts with, and two unrelated answers
   read as one. */
.sh-c-num{text-align:center;font-variant-numeric:tabular-nums;}
.sh-c-num .sh-val{font-weight:500;}
.sh-c-when{white-space:nowrap;}
.sh-c-when .sh-val{font-size:12px;color:var(--taupe);}
.sh-c-badge{white-space:nowrap;}
/* Free text is the one column that will happily take the whole table with it. */
.sh-c-long{min-width:210px;max-width:340px;}
.sh-c-long .sh-val{font-size:12px;color:var(--taupe);line-height:1.55;}
/* A badge brings its own padding; the cell's would double it. */
.sh-c-badge .sh-val{margin:-2px 0;}
.sh-input{
  width:100%;border:none;background:transparent;font-family:inherit;font-size:13px;
  color:var(--espresso);padding:7px 8px;
}
.sh-input:focus{outline:none;}
select.sh-input{cursor:pointer;}

/* Picking between the two contact layouts. A segmented pair rather than two
   buttons, because the choice is one thing with two settings — and only ever
   appears when there is genuinely something to choose. */
/* No gap: the two options share an edge, which is what says they are one
   setting with two positions rather than two things to press. */
.sh-lay{display:inline-flex;align-items:center;}
.sh-lay-lbl{font-size:11px;color:var(--stone);white-space:nowrap;margin-right:8px;}
.sh-lay-opt{
  display:inline-flex;align-items:center;gap:5px;padding:6px 11px;font-size:11.5px;
  color:var(--taupe);text-decoration:none;border:1px solid var(--linen);
  background:transparent;transition:all .15s;white-space:nowrap;position:relative;
}
.sh-lay-opt:first-of-type{border-radius:8px 0 0 8px;}
/* Overlapped by a pixel so the pair share one edge rather than drawing two,
   and whichever is on sits above it — the divider then belongs to the option
   that is off, from either side. */
.sh-lay-opt:last-of-type{border-radius:0 8px 8px 0;margin-left:-1px;}
.sh-lay-opt:hover{color:var(--espresso);border-color:var(--stone);z-index:1;}
.sh-lay-opt.is-on{background:var(--gold-lt);color:var(--amber);border-color:var(--gold-lt);z-index:1;}
.sh-lay-opt svg{flex-shrink:0;opacity:.8;}

/* Contact details stacked under the name.
   The <td> stops being the editable cell here and becomes a container: the
   name and each contact are their own cell inside it, so the inline editor
   reaches them exactly as it reaches a column — and re-drawing one after an
   edit cannot wipe out the others sharing the same <td>. */
/* Left at the table's own vertical-align:middle: two lines of guest against one
   line of answer, and top-aligning only this cell leaves the badge beside it
   hanging below the name it belongs to. */
.sh-stack{padding:9px 16px;min-width:190px;}
.sh-stack .sh-cell{display:block;padding:2px 6px;margin-left:-6px;border-radius:5px;}
.sh-stack-meta{display:flex;align-items:center;flex-wrap:wrap;gap:0 1px;margin-top:1px;}
.sh-stack-meta .sh-cell{display:inline-block;margin-left:0;padding:2px 5px;}
.sh-stack-sep{color:var(--stone);font-size:11px;}
.sh-c-contact .sh-val{font-size:11.5px;color:var(--taupe);}
/* An editor opening on the second line would otherwise inherit the full cell
   padding and shove the row taller by the height of a line each time. */
.sh-stack .sh-cell.editing{padding:1px 4px;}
.sh-stack .sh-input{padding:3px 4px;}
.sh-stack-meta .sh-cell.editing{min-width:150px;}
.sh-stack-meta .sh-input{font-size:12px;}
/* Sub-heading in the header row, naming what the second line holds. */
.sh-th-sub{
  display:block;margin-top:2px;font-size:9.5px;color:var(--stone);
  text-transform:none;letter-spacing:.02em;font-weight:400;
}

@media(max-width:767px){
  .sh-bar-inner{padding:12px 16px;}
  .sh-title{font-size:19px;}
  .sh-right{margin-left:0;width:100%;}
  .sh-page{padding:18px 14px 48px;}
  .sh-table{min-width:640px;}
  .sh-lay-lbl{display:none;}
}

@media print{
  .sh-bar,.sh-hint,.sh-foot,.search-box,.btn{display:none !important;}
  .sh-page{padding:0;max-width:none;}
  .sh-cell{box-shadow:none !important;background:none !important;}
}

/* ══════════ AGENCY WORKSPACE (above any single event) ══════════ */
.ws-bar{background:#fff;border-bottom:1px solid var(--linen);position:sticky;top:0;z-index:40;}
.ws-bar-inner{
  max-width:1180px;margin:0 auto;padding:0 24px;min-height:62px;
  display:flex;align-items:center;gap:22px;flex-wrap:wrap;
}
.ws-brand{
  display:flex;align-items:center;gap:9px;text-decoration:none;
  font-family:'Cormorant Garamond',serif;font-size:19px;font-style:italic;color:var(--espresso);
  flex-shrink:0;
}
.ws-mark{
  width:30px;height:30px;border-radius:50%;background:var(--gold-lt);border:1.5px solid var(--gold);
  display:flex;align-items:center;justify-content:center;color:var(--gold);font-size:15px;
}
.ws-tabs{display:flex;gap:4px;align-items:center;}
.ws-tab{
  display:flex;align-items:center;gap:7px;padding:8px 15px;border-radius:9px;
  font-size:13px;color:var(--taupe);text-decoration:none;transition:all .15s;
}
.ws-tab:hover{background:var(--ivory);color:var(--espresso);}
.ws-tab.active{background:var(--sage-lt);color:var(--sage);font-weight:500;}
.ws-tab svg{opacity:.75;}
.ws-tab.active svg{opacity:1;}
.ws-right{display:flex;align-items:center;gap:10px;margin-left:auto;flex-wrap:wrap;}
.ws-who{font-size:12px;color:var(--taupe);white-space:nowrap;}
.ws-page{max-width:1180px;margin:0 auto;padding:34px 24px 64px;}

/* Filter-in-place toolbar above a workspace list — shared by the client list and
 * the event picker, so the two search the same way and look the same doing it. */
.list-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap;}
.list-toolbar .search-box{max-width:420px;background:#fff;}
.list-count{font-size:12px;color:var(--taupe);white-space:nowrap;}
.list-none{
  background:#fff;border:1px dashed var(--linen);border-radius:14px;padding:34px 20px;
  text-align:center;font-size:13px;color:var(--stone);font-style:italic;
}

/* Client card: the account plus the events that belong to it.
 * Three tones, so nothing dissolves into the cream page behind it:
 *   page   cream  → card  white (+ shadow)  → events well  ivory  → rows white
 * The well used to be cream as well, which made it read as a hole in the card. */
.cl-card{
  background:#fff;border:1px solid var(--linen);border-radius:14px;margin-bottom:14px;
  overflow:hidden;box-shadow:0 1px 3px rgba(44,31,20,.05);transition:box-shadow .15s;
}
.cl-card:hover{box-shadow:0 3px 12px rgba(44,31,20,.07);}
.cl-head{padding:17px 20px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.cl-avatar{
  width:42px;height:42px;border-radius:50%;background:var(--gold-lt);color:var(--gold);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  font-family:'Cormorant Garamond',serif;font-size:17px;font-style:italic;
}
.cl-id{flex:1;min-width:180px;}
.cl-name{font-size:15px;font-weight:500;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.cl-meta{font-size:12px;color:var(--taupe);margin-top:2px;line-height:1.6;}
.cl-stats{display:flex;gap:22px;flex-shrink:0;}
.cl-stat{text-align:center;}
.cl-stat b{display:block;font-size:19px;font-weight:600;line-height:1.2;}
.cl-stat span{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--stone);}
.cl-actions{display:flex;gap:6px;flex-wrap:wrap;flex-shrink:0;}

/* The events live behind a disclosure, so a long client list stays scannable. */
.cl-disclose{
  display:inline-flex;align-items:center;gap:7px;flex-shrink:0;
  padding:6px 11px 6px 13px;border:1px solid var(--linen);border-radius:20px;
  background:#fff;cursor:pointer;font-family:inherit;font-size:12px;color:var(--taupe);
  transition:all .15s;white-space:nowrap;
}
.cl-disclose:hover{border-color:var(--bark);color:var(--espresso);}
.cl-disclose svg{transition:transform .18s;}
.cl-card.open .cl-disclose{background:var(--ivory);color:var(--espresso);}
.cl-card.open .cl-disclose svg{transform:rotate(180deg);}

.cl-events{display:none;}
/* Indented, not flush with the account above it: the rows are children of the
 * client, and starting them at the same left edge read as a second list. */
.cl-card.open .cl-events{
  position:relative;
  display:flex;flex-direction:column;gap:8px;padding:12px 12px 13px 52px;
  border-top:1px solid var(--linen);background:var(--ivory);
  box-shadow:inset 0 2px 5px rgba(44,31,20,.04);
}
/* A guide line in the gap the indent opens up, so the nesting is explicit.
 * left:40px puts it under the centre of the 42px avatar (which starts at the
 * head's 20px padding), so it reads as descending from the account itself. */
.cl-card.open .cl-events::before{
  content:'';position:absolute;left:40px;top:15px;bottom:16px;
  width:2px;border-radius:2px;background:var(--linen);
}
.cl-event{
  display:flex;align-items:center;background:#fff;border:1px solid var(--linen);
  border-radius:10px;transition:border-color .15s,box-shadow .15s;
}
.cl-event:hover{border-color:var(--gold);box-shadow:0 2px 8px rgba(44,31,20,.07);}
.cl-event.cl-hidden{display:none;}
.cl-event-link{
  flex:1;min-width:0;display:flex;align-items:center;gap:12px;
  padding:11px 8px 11px 14px;text-decoration:none;color:inherit;
}
.cl-event-name{flex:1;min-width:0;font-size:13px;font-weight:500;}
.cl-event-meta{font-size:11.5px;color:var(--taupe);margin-top:1px;font-weight:400;}
.cl-event-num{font-size:12px;color:var(--taupe);white-space:nowrap;}
.cl-event-del{
  flex-shrink:0;margin:0 8px 0 2px;width:28px;height:28px;border-radius:7px;
  border:1px solid transparent;background:transparent;cursor:pointer;font-size:12.5px;
  color:var(--stone);opacity:.5;transition:all .15s;
}
.cl-event:hover .cl-event-del{opacity:1;}
.cl-event-del:hover{background:var(--rose-lt);border-color:var(--rose);opacity:1;}
.cl-empty{
  background:#fff;border:1px dashed var(--linen);border-radius:10px;
  padding:13px 14px;font-size:12px;color:var(--stone);font-style:italic;
}

@media(max-width:767px){
  .ws-bar-inner{padding:10px 16px;gap:12px;}
  .ws-tabs{order:3;width:100%;}
  .ws-tab{flex:1;justify-content:center;}
  .ws-right{width:100%;margin-left:0;}
  .ws-who{display:none;}
  .ws-page{padding:22px 16px 48px;}
  .cl-head{gap:10px;}
  .cl-stats{gap:16px;}
  .cl-actions{width:100%;}
  .cl-disclose{width:100%;justify-content:center;padding:8px 13px;}
  /* Still indented, but not at the cost of the row content on a narrow screen:
     every pixel spent on the left here is one the event name wraps for. */
  .cl-card.open .cl-events{padding:10px 8px 11px 20px;}
  .cl-card.open .cl-events::before{left:10px;}
  .cl-event-link{padding:10px 4px 10px 11px;gap:8px;}
  .cl-event-del{margin:0 4px 0 0;}
}

/* A printed client list must not lose everything the disclosures hide. */
@media print{
  .list-toolbar,.cl-disclose,.cl-event-del{display:none !important;}
  .cl-events{
    display:flex !important;flex-direction:column;gap:6px;padding:10px 10px 10px 34px;
    border-top:1px solid var(--linen);box-shadow:none;
  }
  .cl-card{box-shadow:none !important;}
}

/* ══════════ LOGIN ══════════ */
body.auth-body{display:flex;align-items:center;justify-content:center;padding:24px;background:var(--cream);}
.auth-card{
  background:#fff;border:1px solid var(--linen);border-radius:18px;padding:36px 34px;
  width:400px;max-width:100%;box-shadow:0 12px 40px rgba(44,31,20,.07);
}
.auth-logo{
  width:60px;height:60px;border-radius:50%;background:var(--gold-lt);border:1.5px solid var(--gold);
  display:flex;align-items:center;justify-content:center;margin:0 auto 16px;
  font-family:'Cormorant Garamond',serif;font-size:24px;color:var(--gold);font-style:italic;
}
.auth-card h1{font-family:'Cormorant Garamond',serif;font-size:27px;font-weight:500;text-align:center;}
.auth-card .sub{font-size:13px;color:var(--taupe);text-align:center;margin:4px 0 24px;}
.auth-err{background:var(--rose-lt);color:var(--rose);padding:10px 14px;border-radius:9px;font-size:12.5px;margin-bottom:16px;}

/* ══════════ PUBLIC RSVP FORM ══════════ */
body.rsvp-body{display:block;background:var(--cream);padding:0;}
.rsvp-shell{max-width:600px;margin:0 auto;padding:36px 20px 60px;}
.rsvp-hero{text-align:center;margin-bottom:26px;}
.rsvp-hero .mono{
  width:84px;height:84px;border-radius:50%;border:1.5px solid var(--gold);background:var(--gold-lt);
  display:flex;align-items:center;justify-content:center;margin:0 auto 16px;overflow:hidden;
  font-family:'Cormorant Garamond',serif;font-size:28px;color:var(--gold);font-style:italic;
}
.rsvp-hero .mono img{width:100%;height:100%;object-fit:cover;}
.rsvp-hero h1{font-family:'Cormorant Garamond',serif;font-size:36px;font-weight:500;line-height:1.15;}
.rsvp-hero .when{font-size:13px;color:var(--taupe);margin-top:8px;line-height:1.7;}
.rsvp-hero .intro{font-size:14px;color:var(--bark);margin-top:14px;line-height:1.7;}
.rsvp-card{background:#fff;border:1px solid var(--linen);border-radius:18px;padding:28px;box-shadow:0 4px 22px rgba(44,31,20,.04);}
.rsvp-card .flabel{font-size:13px;color:var(--bark);margin-bottom:7px;font-weight:500;}
.rsvp-card .inp,.rsvp-card .sel{padding:12px 14px;font-size:14px;background:#fff;}
.rsvp-card .field-group{margin-bottom:20px;}
.rsvp-submit{
  width:100%;padding:14px;background:var(--espresso);color:var(--gold);border:none;
  border-radius:11px;font-size:14px;cursor:pointer;font-family:inherit;letter-spacing:.05em;
  text-transform:uppercase;transition:opacity .2s;margin-top:6px;
}
.rsvp-submit:hover{opacity:.88;}
.rsvp-submit:disabled{opacity:.5;cursor:not-allowed;}
.rsvp-foot{text-align:center;font-size:11px;color:var(--stone);margin-top:22px;}
.opt-grid{display:grid;gap:8px;}
.opt-grid.cols2{grid-template-columns:1fr 1fr;}
/* A softer third answer sitting under the two firm ones, e.g. "Not sure yet". */
.opt-wide{grid-column:1/-1;}
.opt-btn{
  border:1px solid var(--linen);border-radius:11px;padding:13px 14px;background:#fff;
  font-family:inherit;font-size:13.5px;color:var(--espresso);cursor:pointer;
  text-align:center;transition:all .15s;
}
.opt-btn:hover{border-color:var(--stone);}
.opt-btn.on{border-color:var(--sage);background:var(--sage-lt);color:var(--sage);font-weight:500;}
.opt-btn.on.no{border-color:var(--rose);background:var(--rose-lt);color:var(--rose);}
.opt-btn.on.maybe{border-color:var(--amber);background:var(--amber-lt);color:var(--amber);}
.rsvp-thanks{text-align:center;padding:14px 0 6px;}
/* Focused only to pull the guest's eye here inside an embed; the ring would be
   a box drawn around a message nobody is going to tab through. */
.rsvp-thanks:focus{outline:none;}
.rsvp-thanks .tick{
  width:64px;height:64px;border-radius:50%;background:var(--sage-lt);color:var(--sage);
  display:flex;align-items:center;justify-content:center;font-size:30px;margin:0 auto 16px;
}
.rsvp-thanks h2{font-family:'Cormorant Garamond',serif;font-size:27px;font-weight:500;margin-bottom:8px;}
.rsvp-thanks p{font-size:14px;color:var(--taupe);line-height:1.7;}
.err-msg{font-size:11.5px;color:var(--rose);margin-top:5px;display:none;}
.field-group.has-err .inp,.field-group.has-err .sel{border-color:var(--rose);}
.field-group.has-err .err-msg{display:block;}
/* Stands in for the hero intro when the form is embedded without its header. */
.rsvp-lead{font-size:14px;color:var(--bark);line-height:1.7;text-align:center;margin-bottom:22px;}

/* ── Questions asked once per person ── */
/* Set apart from the run of one-per-reply questions, because "which meal?"
   asked four times in a row is otherwise indistinguishable from the form having
   repeated itself. */
.guest-repeat{margin-bottom:20px;}
.guest-legend{font-size:13px;color:var(--bark);font-weight:500;margin-bottom:10px;}
.guest-legend span{display:block;font-size:11.5px;color:var(--taupe);font-weight:400;margin-top:2px;}
.guest-block{
  border:1px solid var(--linen);border-radius:13px;padding:16px 16px 2px;
  margin-bottom:10px;background:var(--ivory);
}
.guest-block[hidden]{display:none;}
.guest-head{display:flex;align-items:center;gap:9px;margin-bottom:12px;}
.guest-num{
  width:22px;height:22px;border-radius:50%;background:var(--espresso);color:var(--gold);
  display:flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0;
}
.guest-title{font-size:12.5px;color:var(--taupe);letter-spacing:.02em;}
.guest-block .inp,.guest-block .sel{background:#fff;}
.guest-block .field-group{margin-bottom:14px;}

/* ── Embedded in the client's own page ── */
/* No background and no page padding of our own: the surrounding page supplies
   both, and the iframe supplies the width. The card keeps its shape but drops
   the shadow, which only ever looked right floating on our cream. */
body.rsvp-body.rsvp-embed{background:transparent;}
/* The frame is sized to the form, so the reserved scrollbar gutter every other
   page wants would only be a permanent empty strip down the side of someone
   else's layout. */
html:has(> body.rsvp-embed){scrollbar-gutter:auto;}
.rsvp-embed .rsvp-shell{padding:0;}
.rsvp-embed .rsvp-card{box-shadow:none;}
.rsvp-embed .rsvp-hero{margin-bottom:20px;}
.rsvp-embed .rsvp-foot{margin-top:14px;}

/* ══════════ RESPONSIVE ══════════ */
@media(max-width:1200px){
  .stats-row{grid-template-columns:repeat(3,1fr);}
  .stats-row .stat-card:nth-child(3){border-right:none;}
  .stats-row .stat-card:nth-child(-n+3){border-bottom:1px solid var(--linen);}
}
@media(max-width:1024px){
  :root{--sidebar:190px;}
  .page-inner{padding:20px;}
  .topbar{padding:0 20px;}
  .form-grid{grid-template-columns:1fr;}
}
@media(max-width:767px){
  :root{--sidebar:0px;}
  body{flex-direction:column;}
  .sidebar{
    width:100%;min-height:auto;height:auto;position:fixed;left:0;bottom:0;top:auto;
    border-right:none;border-top:1px solid var(--linen);flex-direction:row;z-index:100;
  }
  .sidebar-brand,.sidebar-footer,.nav-section,.nav-count{display:none;}
  .nav-list{display:flex;flex-direction:row;padding:6px 4px;overflow-x:auto;justify-content:space-around;width:100%;}
  .nav-item{flex-direction:column;gap:3px;padding:6px 6px;font-size:9.5px;flex:1;text-align:center;justify-content:center;min-width:56px;}
  .nav-item svg{width:18px;height:18px;}
  .main{margin-left:0;padding-bottom:68px;}
  .topbar{padding:0 16px;min-height:58px;}
  .topbar-left .welcome,.topbar-left .tagline{display:none;}
  .topbar-left .couple-big{font-size:19px;}
  .topbar-right .btn span{display:none;}
  .topbar-right .btn{padding:9px 11px;}
  .page-inner{padding:16px;}
  .page-head h2{font-size:23px;}
  .stats-row{grid-template-columns:repeat(2,1fr);}
  .stat-card{padding:14px;gap:10px;}
  .stat-card{border-right:1px solid var(--linen);border-bottom:1px solid var(--linen);}
  .stat-num{font-size:29px;}
  .banner,.flash{padding-left:16px;padding-right:16px;margin-left:16px;margin-right:16px;}
  .banner{margin:0;}
  table{min-width:760px;}
  .kv{grid-template-columns:1fr;gap:2px 0;}
  .kv dd{margin-bottom:10px;}
  .pagination{flex-direction:column;align-items:flex-start;}
  .rsvp-shell{padding:24px 14px 48px;}
  .rsvp-card{padding:20px 18px;}
  .rsvp-hero h1{font-size:28px;}
  .fb-item{flex-wrap:wrap;}
  .fb-actions{width:100%;justify-content:flex-end;}
}

/* ══════════ PRINT (PDF report) ══════════ */
@media print{
  @page{size:A4 landscape;margin:12mm 10mm;}
  body{background:#fff !important;display:block;}
  .sidebar,.topbar,.no-print,.banner,.pagination,#toast{display:none !important;}
  .main{margin-left:0 !important;}
  .page-inner{padding:0 !important;}
  .panel{border:none !important;border-radius:0 !important;box-shadow:none !important;}
  .stats-row{border-radius:0;}
  th{background:#F4F0E8 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .badge,.stat-icon,.bd-fill{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  tr,.bd-row{page-break-inside:avoid;}
  thead{display:table-header-group;}
  a{text-decoration:none;color:inherit;}
}
