*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
::selection{background:rgba(64,100,95,.18);color:inherit}
::-moz-selection{background:rgba(64,100,95,.18);color:inherit}
:root{
  /* Type scale moved to styles/tokens.css 2026-08-03 (owner: "make the portal
     match the site"). The portal ran a smaller scale on a smaller root; both
     now resolve identically. Removed: --text-xs, --text-sm, --text-ui, --text-base, --text-body, --text-md */

  /* Palette, semantic colour roles and the heading scale now live in
     app/styles/tokens.css, loaded before this file. Kept here: everything unique to the portal.
     Removed from here 2026-08-03 so there is ONE definition, not two:
     --ivory, --greige, --sage, --sage-dk, --bloodstone, --bloodstone-dk, --onyx, --success, --warn, --bad, --forest, --gold, --text-micro, --h3, --h2-sm, --h2, --h2-display */

--white:var(--ivory);--pearl:var(--ivory);--sage-lt:#7A9490;--cream:var(--ivory);
--onyx-dk:#221010;
  --beta-h:0px;
  --border:rgba(45,16,21,.08);--border-d:rgba(45,16,21,.13);
  --sh:0 2px 12px rgba(45,16,21,.06);--shl:0 16px 48px rgba(45,16,21,.12);--sh-hover:0 8px 28px rgba(45,16,21,.10);
  --btn-pad-sm:10px 20px;--btn-pad-md:12px 28px;--btn-pad-lg:16px 36px;
  --overlay-bg:rgba(45,16,21,.7);

  /* Type scale — minimum 0.63rem (≈10px) decorative, 0.69rem labels, 0.82rem body */
}

/* ── ACCESSIBILITY ── */
*:focus-visible {
  outline: 2px solid var(--bloodstone);
  outline-offset: 2px;
}
html{scroll-behavior:smooth;overflow-x:hidden}
/* overflow-x:hidden required on BOTH html (line 34) and body (2026-07-14 audit
   H8): html alone clips the visible scrollbar, but leaves body as the actual
   overflow-establishing box. Underlying tab content (wide tables, etc.) that
   the JS-driven tab switching keeps in the DOM but visually hidden inflates
   body's layout width, which corrupted the containing block used for
   position:fixed elements (.login-screen, .portal-hdr) — on mobile the login
   card rendered ~1.57x too wide and visibly off-center/clipped. Clipping at
   body too keeps position:fixed sizing correctly pinned to the true viewport. */
/* 2026-07-17 UX review (Critical B1): overflow-x:hidden alone forces body's
   overflow-y to compute to `auto`, which silently makes <body> a second scroll
   container — and then every Element.scrollIntoView() in the portal scrolls
   the (unscrollable) body instead of the page and does NOTHING. `clip` clips
   exactly like `hidden` but does NOT create a scroll container, so
   scrollIntoView reaches the real page scroller again. The `hidden` line stays
   first as a fallback for browsers without `clip` support (pre-2022). */
body{overflow-x:hidden;overflow-x:clip;font-family:'Montserrat',sans-serif;font-weight:300;background:var(--cream);color:var(--onyx);min-height:100vh;padding-top:calc(var(--hdr-h,120px) + var(--beta-h,0px));padding-bottom:48px}

/* ── SKIP LINK (2026-08-06 launch-readiness audit, P1 — WCAG 2.4.1) ──────────
   The portal does NOT load app/assets/main.css, where the public site keeps its
   copy of this rule — it loads tokens.css + portal.css only. So the markup in
   client-portal.html would have been an unstyled, permanently visible link at
   the top of the page without this block. Do not "de-duplicate" it against
   main.css; they are two separate stylesheets serving two separate documents.

   OFF-SCREEN, NOT display:none — a display:none or visibility:hidden link is
   removed from the focus order entirely, which is the classic way this control
   ends up doing nothing at all.

   z-index must beat .portal-hdr, which is position:fixed at z-index:200 and
   would otherwise paint straight over the revealed link.

   #portalMain carries tabindex="-1" but must never show a focus ring of its
   own: it is the whole page body, and outlining it on skip is alarming. */
.skip-link{
  position:absolute;top:-100px;left:16px;z-index:9999;
  background:var(--bloodstone);color:var(--ivory,#FAF6EE);
  font-family:'Montserrat',sans-serif;font-size:.75rem;font-weight:600;
  letter-spacing:.1em;text-transform:uppercase;
  padding:10px 18px;text-decoration:none;border-radius:2px;
  transition:top .2s;
}
.skip-link:focus{top:16px;}
@media (prefers-reduced-motion:reduce){ .skip-link{transition:none} }
#portalMain:focus{outline:none}


/* ── PORTAL HEADER ── */
.portal-hdr{
  background:rgba(250,246,238,.96);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  position:fixed;top:var(--beta-h,0px);left:0;right:0;z-index:200;
  border-bottom:1px solid rgba(45,16,21,.08);
}
.hdr-top{
  display:flex;justify-content:space-between;align-items:center;
  padding:18px 64px;gap:16px;position:relative;
}
.hdr-support{
  position:absolute;left:50%;transform:translateX(-50%);
  font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.06em;
  color:var(--sage);text-decoration:none;white-space:nowrap;transition:color .2s;
  z-index:2;cursor:pointer;
}
.hdr-support strong{color:var(--bloodstone);font-weight:600;font-style:normal}
.hdr-support:hover{color:var(--bloodstone)}
@media (max-width:900px){.hdr-support{display:none}}
@media (max-width:600px){
  .hdr-top{padding:14px 20px}
  /* 2026-08-06 (platform 360 test): only the LABEL is dropped now.
     This rule used to hide the NAME as well, which left the chip as a bare "▾"
     — a dropdown with no visible identity at all. On a phone that is the only
     place the client can see WHOSE portal they are in, and it is the control
     that opens My Events / Billing / Sign Out, so an unlabelled caret is also a
     target with nothing to read. The word "Client" is redundant chrome and stays
     hidden; the name is the part that carries meaning.
     Capped and ellipsised rather than wrapped: the header is a fixed-height row,
     so a long name must shorten, never push the row taller. */
  .hdr-client-chip .hdr-client-label{display:none}
  .hdr-client-chip .hdr-client-name{
    display:inline-block;max-width:38vw;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;
  }
  .hdr-client-chip{padding:8px 12px}
  .hdr-ref{display:none}
}
.hdr-logo{
  font-family:'Libre Baskerville',serif;font-size:.85rem;
  letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);
  text-decoration:none;white-space:nowrap;
}
.hdr-meta{
  display:flex;align-items:center;gap:16px;flex-shrink:0;
  position:relative;z-index:3;
}
.hdr-account-switcher{position:relative}
.hdr-client-chip{
  display:flex;align-items:center;gap:12px;
  padding:8px 18px;border:1px solid rgba(45,16,21,.08);background:#fff;
  cursor:pointer;transition:border-color .2s;user-select:none;
}
.hdr-client-chip:hover{border-color:rgba(45,16,21,.22)}
.hdr-account-caret{font-size:.78rem;opacity:.45;margin-left:2px}
.hdr-client-label{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-weight:600}
.hdr-client-name{font-family:'Libre Baskerville',serif;font-size:.9rem;color:var(--onyx)}
.hdr-ref{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.16em;text-transform:uppercase;color:var(--sage)}
.hdr-account-dropdown{
  display:none;position:absolute;top:calc(100% + 4px);left:0;
  background:#fff;border:1px solid rgba(45,16,21,.08);
  min-width:180px;z-index:900;box-shadow:0 8px 28px rgba(45,16,21,.1);
}
.hdr-account-switcher.open .hdr-account-dropdown{display:block}
.hdr-account-opt{
  padding:11px 18px;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);
  font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--sage);
  cursor:pointer;border-bottom:1px solid rgba(45,16,21,.06);transition:all .2s;
}
.hdr-account-opt:last-child{border-bottom:none}
.hdr-account-opt:hover{background:var(--greige);color:var(--bloodstone)}

/* ── EVENT SWITCHER ── */
.hdr-event-switcher{position:relative}
.hdr-event-chip{
  display:flex;align-items:center;gap:10px;
  padding:8px 18px;border:1px solid rgba(45,16,21,.08);background:#fff;
  cursor:pointer;transition:border-color .2s;user-select:none;
}
.hdr-event-chip:hover{border-color:rgba(45,16,21,.22)}
.hdr-event-label{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-weight:600}
.hdr-event-name{font-family:'Libre Baskerville',serif;font-size:.9rem;color:var(--onyx);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hdr-event-dropdown{
  display:none;position:absolute;top:calc(100% + 4px);left:0;
  background:#fff;border:1px solid rgba(45,16,21,.08);
  min-width:220px;z-index:900;box-shadow:0 8px 28px rgba(45,16,21,.1);
}
.hdr-event-switcher.open .hdr-event-dropdown{display:block}
.hdr-event-opt{
  padding:12px 18px;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);
  font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--sage);
  cursor:pointer;border-bottom:1px solid rgba(45,16,21,.06);transition:all .2s;
}
.hdr-event-opt:last-child{border-bottom:none}
.hdr-event-opt:hover{background:var(--greige);color:var(--bloodstone)}
.hdr-event-opt.active{color:var(--bloodstone);background:var(--greige)}
.hdr-event-opt-sub{font-family:'Montserrat',sans-serif;font-size:.6rem;letter-spacing:.1em;color:var(--ash);font-weight:400;text-transform:none;margin-top:2px}

/* ── INBOX BELL ── */
.hdr-bell{
  position:relative;width:36px;height:36px;border-radius:50%;
  background:#fff;border:1px solid rgba(45,16,21,.1);
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:border-color .2s,background .2s;flex-shrink:0;
}
.hdr-bell:hover{border-color:rgba(45,16,21,.28);background:var(--greige)}
.hdr-bell svg{width:15px;height:15px;stroke:var(--sage);stroke-width:1.6;fill:none}
.hdr-bell-badge{
  position:absolute;top:-4px;right:-4px;
  min-width:16px;height:16px;border-radius:50%;
  background:var(--bloodstone);color:#fff;
  font-family:'Montserrat',sans-serif;font-size:8px;font-weight:700;
  display:none;align-items:center;justify-content:center;padding:0 4px;
  border:1.5px solid var(--white);
}
.hdr-bell-badge.visible{display:flex}

/* ── INBOX DRAWER ── */
.inbox-overlay{
  position:fixed;top:calc(var(--hdr-h,120px) + var(--beta-h,0px));left:0;right:0;bottom:0;z-index:800;
  background:rgba(45,16,21,.18);opacity:0;pointer-events:none;transition:opacity .25s;
}
.inbox-overlay.open{opacity:1;pointer-events:all}
.inbox-drawer{
  position:fixed;top:calc(var(--hdr-h,120px) + var(--beta-h,0px));right:0;bottom:0;width:340px;max-width:92vw;
  background:var(--white);z-index:801;
  transform:translateX(100%);transition:transform .3s cubic-bezier(.16,1,.3,1);
  display:flex;flex-direction:column;
  border-left:1px solid rgba(45,16,21,.08);box-shadow:-8px 0 32px rgba(45,16,21,.08);
}
.inbox-drawer.open{transform:translateX(0)}
@media(max-width:400px){.inbox-drawer{width:92vw}}
.inbox-hdr{
  display:flex;align-items:center;justify-content:space-between;
  padding:16px 20px;border-bottom:1px solid rgba(45,16,21,.08);flex-shrink:0;
}
.inbox-hdr-title{
  font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);
}
.inbox-hdr-actions{display:flex;align-items:center;gap:12px}
.inbox-mark-all{
  font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--sage);cursor:pointer;text-decoration:underline;
  text-underline-offset:3px;
}
.inbox-mark-all:hover{color:var(--bloodstone)}
.inbox-close{
  width:28px;height:28px;border-radius:50%;background:transparent;
  border:1px solid rgba(45,16,21,.1);cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  font-size:1rem;color:var(--sage);transition:all .2s;
}
.inbox-close:hover{background:var(--greige);border-color:rgba(45,16,21,.25)}
.inbox-list{flex:1;overflow-y:auto;padding:8px 0}
.inbox-empty{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  height:100%;padding:40px 24px;text-align:center;
}
.inbox-empty-icon{font-size:2rem;opacity:.2;margin-bottom:12px}
.inbox-empty-text{
  font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--sage);
}
.inbox-notif{
  padding:14px 20px;border-bottom:1px solid rgba(45,16,21,.06);
  cursor:pointer;transition:background .15s;border-left:3px solid transparent;
}
.inbox-notif:hover{background:var(--greige)}
.inbox-notif.unread{border-left-color:var(--bloodstone)}
/* Synthetic production-details nudge (2026-07-23): an ACTION, not a past update —
   amber accent to match the Designs-tab attention pip, with a call-to-action. */
.inbox-notif-prod{border-left-color:#C0872C;background:rgba(192,135,44,.05)}
.inbox-notif-prod .inbox-notif-type{color:#A66E1E}
.inbox-notif-prod .inbox-notif-action{color:#A66E1E;font-weight:600}
.inbox-notif-type{
  font-family:'Montserrat',sans-serif;font-size:.58rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--sage);margin-bottom:4px;
}
.inbox-notif-title{font-size:.82rem;color:var(--onyx);line-height:1.4;margin-bottom:3px}
.inbox-notif-body{font-size:.75rem;color:var(--sage);line-height:1.5;margin-bottom:4px}
.inbox-notif-meta{
  display:flex;align-items:center;justify-content:space-between;
}
.inbox-notif-time{
  font-family:'Montserrat',sans-serif;font-size:.58rem;letter-spacing:.08em;
  color:rgba(64,100,95,.55);
}
.inbox-notif-action{
  font-family:'Montserrat',sans-serif;font-size:.6rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--bloodstone);text-decoration:underline;
  text-underline-offset:2px;
}

/* ── TABS ── */
.portal-tabs{
  display:flex;border-top:1px solid var(--border);background:var(--white);
  overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;
  width:100%;min-width:0;
}
.portal-tabs::-webkit-scrollbar{display:none}
.ptab{
  flex:1 1 0;min-width:0;padding:16px 24px;
  font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;
  color:var(--sage);background:transparent;border:none;
  border-right:1px solid var(--border);cursor:pointer;
  transition:all .25s;font-family:'Montserrat',sans-serif;font-weight:500;
  display:flex;align-items:center;justify-content:flex-start;gap:10px;position:relative;
  white-space:nowrap;overflow:hidden;
}
@media (max-width:900px){
  .ptab{padding:12px 14px;font-size:var(--text-ui);letter-spacing:.14em;gap:8px}
  .ptab-num{display:none}
}
.ptab::after{
  content:'';position:absolute;bottom:0;left:0;right:0;height:2px;
  background:var(--bloodstone);transform:scaleX(0);transition:transform .3s;
}
.ptab:hover{color:var(--onyx);background:rgba(64,100,95,.04)}
.ptab.active{color:var(--onyx)}
.ptab.active::after{transform:scaleX(1)}
.ptab-num{font-size:.78rem;opacity:.8}
/* Short mobile label — hidden on desktop; the ≤600px media query swaps it in
   for .ptab-lbl. (2026-07-17: the swap CSS existed but the spans didn't, so
   mobile tabs rendered as bare numbers with no label at all.) */
.ptab-lbl-s{display:none}
.ptab-dot{
  width:6px;height:6px;border-radius:50%;
  background:rgba(45,16,21,.12);transition:background .3s;flex-shrink:0;
}
.ptab.active .ptab-dot{background:var(--bloodstone)}
.ptab.done .ptab-dot{background:var(--success)}
/* Attention pip (2026-07-23): the Production Details step lives inside the
   Designs tab, so when finishing details are waiting we mark the tab itself.
   A distinct amber corner dot, injected as a child span (.ptab-attn-pip) by
   syncTabDoneStates — NOT ::after, which .ptab already uses for the active
   underline and the 🔒 lock glyph. Shows on every breakpoint (unlike .ptab-dot,
   which the mobile query hides). Quiet-by-default; removed the moment the client
   saves the last detail. */
.ptab-attn{position:relative}
.ptab-attn-pip{
  position:absolute;top:7px;right:7px;
  width:8px;height:8px;border-radius:50%;
  background:#C0872C;box-shadow:0 0 0 2px var(--white,#fff);
  pointer-events:none;
  animation:ptabAttnPulse 2.4s ease-in-out infinite;
}
@keyframes ptabAttnPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.82)}}
@media (prefers-reduced-motion:reduce){.ptab-attn-pip{animation:none}}
/* Locked tabs remain tappable so showTab()'s nudge toast can explain WHY the
   stage is locked (pointer-events:none made taps dead on touch, 2026-07-17). */
.ptab.ptab-locked{cursor:not-allowed;opacity:.45;}

/* Revision-note change-type chips (2026-07-17 UX review) */
.bb-note-chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 10px}
.bb-note-chip{font-family:'Montserrat',sans-serif;font-size:.64rem;letter-spacing:.08em;padding:5px 12px;border:1px solid rgba(45,16,21,.2);background:transparent;color:var(--onyx,#2D1015);cursor:pointer;transition:all .15s}
.bb-note-chip:hover{border-color:var(--bloodstone,#922630);color:var(--bloodstone,#922630)}
.bb-note-chip-on{background:var(--bloodstone,#922630);border-color:var(--bloodstone,#922630);color:#FAF6EE}

/* ── "Your next step" card (2026-07-17 UX review, keystone) ── */
#nextStepCard{background:var(--white,#FFFDF9);border-bottom:1px solid rgba(45,16,21,.08)}
.nsc-inner{max-width:1080px;margin:0 auto;padding:18px 32px 20px}
.nsc-top{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:6px}
.nsc-eyebrow{font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage,#40645F);font-weight:600}
.nsc-ball{font-family:'Montserrat',sans-serif;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;padding:4px 12px;border-radius:0}
.nsc-ball-you{background:var(--bloodstone,#922630);color:#FAF6EE}
.nsc-ball-maison{background:rgba(64,100,95,.12);color:var(--sage-dk,#2F4A46)}
.nsc-ball-none{background:rgba(64,100,95,.12);color:var(--sage-dk,#2F4A46)}
.nsc-title{font-family:'Libre Baskerville',serif;font-size:1.25rem;color:var(--onyx-dk,#2D1015);margin-bottom:4px}
.nsc-action{font-family:'Montserrat',sans-serif;font-size:.8rem;line-height:1.6;color:rgba(45,16,21,.72);max-width:72ch}
.nsc-btnrow{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:12px}
.nsc-btn{font-family:'Montserrat',sans-serif;font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;font-weight:600;padding:11px 24px;background:var(--bloodstone,#922630);color:#FAF6EE;border:none;cursor:pointer;transition:background .2s}
.nsc-btn:hover{background:var(--bloodstone-dk,#6E1C24)}
.nsc-meanwhile{font-family:'Montserrat',sans-serif;font-size:.72rem;color:rgba(45,16,21,.6)}
.nsc-link{font-family:inherit;font-size:inherit;background:none;border:none;color:var(--bloodstone,#922630);text-decoration:underline;cursor:pointer;padding:0}
@media(max-width:600px){ .nsc-inner{padding:14px 18px 16px} .nsc-title{font-size:1.05rem} }

/* Venue-style example chips (2026-07-17, briefing B4) */
.venue-style-chips{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 10px}
.vs-chip{font-family:'Montserrat',sans-serif;font-size:.7rem;letter-spacing:.06em;padding:7px 14px;border:1px solid rgba(45,16,21,.22);background:transparent;color:var(--onyx);cursor:pointer;transition:all .18s;border-radius:0}
.vs-chip:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.vs-chip-on{background:var(--bloodstone);border-color:var(--bloodstone);color:#FAF6EE}

/* ── TAB PANELS ── */
.tab-panel{display:none}
.tab-panel.active{display:block}
/* 2026-07-29 mobile audit — the fixed `height` that used to sit beside this
   min-height is GONE, and must not come back.
   `min-height` says "at least fill the screen", which is the intent — the
   placeholder below uses flex:1 to stretch into it while the moodboards are
   still being made. The `height:calc(100vh - 56px)` alongside it said "and
   never any taller", which is false the moment the boards arrive. Measured at
   390x844 on a client at concept-review: the panel was pinned to 788px while
   #creativeDirectionBanner inside it ran 805px and the content reached 1723 —
   593px of the moodboard tab hanging outside its own panel with overflow
   visible, so the footer flowed at 1158 and painted over the intro copy AND
   the region holding both "Choose this moodboard" buttons. That is the single
   most important decision in the client journey, sitting under a footer.
   svh, not vh: on a phone `100vh` is the height with the browser chrome
   RETRACTED, so a vh-sized panel is always taller than what the client can
   actually see. main.css already uses 100svh on the homepage hero for the same
   reason; the vh line below is the fallback for browsers without svh. */
#tab-concept.active{display:flex;flex-direction:column;min-height:calc(100vh - 56px);min-height:calc(100svh - 56px)}
#tab-concept .concept-pending-placeholder{flex:1;min-height:0}

/* ── BRIEFING HERO ── */
.brief-hero{
  background:var(--white);padding:56px 64px 40px;text-align:left;
  border-bottom:1px solid var(--border);
}
.eyebrow{
  font-size:.78rem;letter-spacing:.22em;text-transform:uppercase;
  color:var(--sage);margin-bottom:18px;display:block;font-weight:700;
  font-family:'Montserrat',sans-serif;
}
.hero-title{
  font-family:'Libre Baskerville',serif;font-size:clamp(2.2rem,4.5vw,3.2rem);
  font-weight:400;color:var(--onyx-dk);line-height:1.05;margin-bottom:16px;
}
.hero-title em{font-style:italic;color:var(--bloodstone);display:block;}
.em-approved{color:#2E7D52!important;}
.hero-rule{display:none}
.rl{width:40px;height:1px;background:var(--sage);opacity:.25}
.rd{width:5px;height:5px;border:1px solid var(--bloodstone);transform:rotate(45deg);opacity:.5}
.hero-sub{
  font-family:'Montserrat',sans-serif;font-style:normal;font-weight:300;
  font-size:var(--text-md);color:var(--onyx);max-width:540px;
  margin:0;line-height:1.8;
}

/* ── PACKAGE STRIP ── */
.pkg-strip{
  background:var(--white);border-bottom:1px solid var(--border);
  padding:24px 64px;display:flex;column-gap:40px;row-gap:16px;flex-wrap:wrap;align-items:flex-start;
}
.pkg-item{display:flex;flex-direction:column;gap:6px}
.pkg-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-weight:700}
.pkg-val{font-family:'Libre Baskerville',serif;font-size:var(--h3);color:var(--onyx-dk);font-weight:400;letter-spacing:0}

/* ── FORM WRAPPER ── */
.form-wrap{max-width:760px;margin:0 auto;padding:72px 24px 80px}

/* ── SECTION ── */
/* 2026-07-17 UX review: the reveal animation is opt-in ("armed") by the JS that
   creates the IntersectionObserver. Previously .sec started at opacity:0
   unconditionally, so any load where the observer didn't run (init aborted
   early, JS error upstream, anchor jump) left the ENTIRE briefing form
   invisible. Default is now visible; JS adds body.reveal-armed only at the
   moment observation actually begins. */
.sec{margin-bottom:80px}
body.reveal-armed .sec{opacity:0;transform:translateY(24px);transition:opacity .7s,transform .7s}
body.reveal-armed .sec.vis{opacity:1;transform:translateY(0)}
@media (prefers-reduced-motion: reduce){
  body.reveal-armed .sec{opacity:1;transform:none;transition:none}
}
.sec-hdr{margin-bottom:32px;padding:20px 0 0}
.sec-num{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.24em;text-transform:uppercase;color:var(--sage);display:block;margin-bottom:8px;font-weight:600}

/* ── DESIGN PICKER ── */
.dp-rec-label{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.26em;text-transform:uppercase;color:var(--bloodstone);display:flex;align-items:center;gap:10px;margin-bottom:10px;font-weight:600}
.dp-rec-label::after{content:'';flex:1;height:1px;background:rgba(146,38,48,.15)}
.dp-rec-note{font-size:var(--text-ui);color:var(--onyx);margin-bottom:16px;line-height:1.65;font-style:italic}
.dp-all-label{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.26em;text-transform:uppercase;color:var(--onyx);display:flex;align-items:center;gap:10px;margin-bottom:14px;margin-top:8px;font-weight:600}
.dp-all-label::after{content:'';flex:1;height:1px;background:var(--border)}
.dp-cat-tabs{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:16px}
.dp-cat-tab{font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;padding:5px 13px;border:1px solid var(--border);background:var(--white);color:var(--onyx);cursor:pointer;font-family:'Montserrat',sans-serif;font-weight:500;transition:all .18s}
.dp-cat-tab.active{border-color:var(--onyx);color:var(--onyx);background:rgba(45,16,21,.04)}
.dp-cat-tab:hover:not(.active){border-color:var(--sage);color:var(--onyx)}
.dp-pill-grid{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:20px}
.dp-pill{display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border:1px solid var(--border);background:var(--white);cursor:pointer;transition:all .18s;font-size:.79rem;color:var(--onyx);font-family:'Montserrat',sans-serif;font-weight:400;user-select:none}
.dp-pill:hover{border-color:var(--sage)}
.dp-pill.dp-rec{border-color:rgba(146,38,48,.22)}
.dp-pill.dp-on{border-color:var(--sage);background:rgba(64,100,95,.06)}
.dp-pill.dp-rec.dp-on{border-color:var(--bloodstone);background:rgba(146,38,48,.05);color:var(--onyx)}
.dp-dot{width:8px;height:8px;border:1px solid rgba(64,100,95,.5);flex-shrink:0;transition:all .18s}
.dp-pill.dp-on .dp-dot{background:var(--sage);border-color:var(--sage)}
.dp-pill.dp-rec.dp-on .dp-dot{background:var(--bloodstone);border-color:var(--bloodstone)}
.dp-pill.dp-disabled{opacity:.35;cursor:not-allowed;pointer-events:none}
.dp-pill.dp-bundled{border-style:dashed;border-color:var(--sage);opacity:.85}
.dp-pill.dp-bundled.dp-on{background:rgba(64,100,95,.04)}
/* The custom-request pill — see _makeCustomPill() in portal-briefing-form.js.
   It is not a catalogue piece and never consumes a plan slot, so it must not read
   like one. DOTTED, because dashed is already spoken for by .dp-bundled
   ("included with every suite") and a client who cannot tell those two apart
   learns the wrong thing about what they are paying for. Selected state returns
   to solid sage so it confirms like every other pill once it is on. */
.dp-pill.dp-custom{border-style:dotted;border-color:rgba(58,53,48,.38)}
.dp-pill.dp-custom:hover{border-color:var(--sage)}
.dp-pill.dp-custom.dp-on{border-style:solid;border-color:var(--sage);background:rgba(64,100,95,.06)}
.dp-pill.dp-bundled-locked{cursor:default;pointer-events:none;opacity:.7}
.dp-bundled-tag{font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;color:var(--sage);font-weight:600;padding:1px 5px;border:1px solid rgba(64,100,95,.3);margin-left:2px}
/* Disambiguates the two programme pieces at the moment of choosing — see
   DP_CLARIFY in portal-briefing-form.js. Quieter than the piece name itself:
   a clarifier, not a second label. */
.dp-clarify{font-size:var(--text-xs);letter-spacing:.06em;color:var(--sage);opacity:.75;font-style:italic;margin-left:5px;white-space:nowrap}
.dp-bar{display:flex;align-items:center;justify-content:space-between;padding:14px 0 0;border-top:1px solid var(--border);margin-top:4px}
.dp-bar-txt{font-size:.78rem;color:var(--onyx);font-family:'Montserrat',sans-serif;font-weight:500}
.dp-bar-txt strong{color:var(--bloodstone);font-family:'Libre Baskerville',serif;font-size:1.1rem;font-weight:700}
.dp-bar-clear{font-size:.71rem;letter-spacing:.1em;color:var(--sage);background:none;border:none;cursor:pointer;text-transform:uppercase;font-family:'Montserrat',sans-serif;font-weight:500}

/* ── PIECE DETAILS (section 08b) ── */
.pd-piece-card{border:1px solid var(--border);margin-bottom:16px;background:var(--white)}
.pd-piece-hdr{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid var(--border);background:rgba(64,100,95,.03)}
.pd-piece-name{font-family:'Libre Baskerville',serif;font-size:.9rem;font-weight:400;color:var(--onyx);margin-bottom:4px}
.pd-piece-spec{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.06em;color:var(--sage-dk);opacity:.8}
.pd-unit-toggle{display:flex;gap:0;flex-shrink:0;border:1px solid var(--border);overflow:hidden}
.pd-unit-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;font-weight:600;padding:5px 10px;background:transparent;border:none;cursor:pointer;color:var(--onyx);opacity:.5;transition:all .15s}
.pd-unit-btn.pd-unit-active{background:var(--sage);color:var(--white);opacity:1}
.pd-piece-body{padding:16px}
/* text-transform added 2026-07-31: this rule was byte-identical to .fld-lbl
   (the portal's standard field label, below) EXCEPT for the uppercase, so
   piece-detail labels rendered in whatever case the author typed. Inside one
   Production Details card that put "STARTER / AMUSE-BOUCHE" (via
   .menu-course-label, which does uppercase) directly above "Tables", and the
   panel's own labels disagreed with each other — "Paper Stock" title-case
   beside "Table assignments" sentence-case. Uppercasing here is the house
   treatment, not a new one: .fld-lbl already renders sentence-style labels
   like "Who are you celebrating with?" this way throughout the briefing. */
.pd-field-lbl{display:block;font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);margin-bottom:6px}
.pd-field-hint{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-style:italic;color:var(--onyx);opacity:.55;margin-bottom:10px;line-height:1.55}
.pd-required{color:var(--bloodstone)}
.pd-input{width:100%;font-family:'Montserrat',sans-serif;font-size:.8rem;padding:8px 10px;border:1px solid var(--border);background:var(--white);color:var(--onyx);outline:none;transition:border-color .15s;box-sizing:border-box}
.pd-input:focus{border-color:var(--sage)}
.pd-textarea{width:100%;font-family:'Montserrat',sans-serif;font-size:.8rem;padding:8px 10px;border:1px solid var(--border);background:var(--white);color:var(--onyx);outline:none;resize:vertical;min-height:72px;transition:border-color .15s;box-sizing:border-box;line-height:1.5}
.pd-textarea:focus{border-color:var(--sage)}
.pd-select{font-family:'Montserrat',sans-serif;font-size:.8rem;padding:8px 10px;border:1px solid var(--border);background:var(--white);color:var(--onyx);outline:none;cursor:pointer;min-width:140px}
.pd-rows-container{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.pd-row{display:flex;align-items:flex-start;gap:8px}
.pd-row .pd-input{flex:1}
.pd-row .pd-select{flex-shrink:0}
.pd-remove-btn{flex-shrink:0;width:28px;height:28px;background:transparent;border:1px solid rgba(146,38,48,.25);color:var(--bloodstone);cursor:pointer;font-size:var(--text-xs);display:flex;align-items:center;justify-content:center;transition:all .15s;margin-top:2px;font-family:'Montserrat',sans-serif}
.pd-remove-btn:hover{background:rgba(146,38,48,.06);border-color:var(--bloodstone)}
.pd-add-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;color:var(--sage-dk);background:transparent;border:1px dashed rgba(64,100,95,.4);padding:7px 14px;cursor:pointer;transition:all .15s;margin-top:2px}
.pd-add-btn:hover{background:rgba(64,100,95,.05);border-color:var(--sage)}
.pd-ref-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;background:rgba(64,100,95,.05);border:1px dashed rgba(64,100,95,.35)}
.pd-ref-banner span{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx)}
.pd-ref-link{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;color:var(--sage-dk);background:transparent;border:none;cursor:pointer;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.pd-upload-zone{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px dashed var(--border);background:rgba(45,16,21,.02);margin-top:4px}
.pd-upload-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;color:var(--white);background:var(--sage);padding:6px 12px;cursor:pointer;white-space:nowrap}
.pd-upload-input{display:none}
.pd-upload-name{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--onyx);opacity:.6;font-style:italic}
.pd-seating-table{border:1px solid var(--border);padding:12px;margin-bottom:8px;background:rgba(64,100,95,.02)}

/* ── Advisory & recommendation card internals (2026-07-31) ──────────────────
   The read-only concierge cards inside Production Details — "How many to
   order", "Your stationery timeline", "The house recommends" — were built
   entirely from inline `style.cssText` in portal-recommendations.js and
   portal-production-details.js. Between them they carried ~15 hand-picked
   font-sizes and a SECOND serif family (Cormorant Garamond) sitting inside
   cards whose own titles are Libre Baskerville — so the panel showed two
   serifs at once, and the advisory headline rendered LARGER than the card
   title above it. Same fix as .pdp-* above (see the note at the panel markup
   in client-portal.html): Cormorant is a face this portal uses a handful of
   times against Libre Baskerville's ~160.
   Three serif steps now, one family: .9rem card title < var(--h3) hero line
   < 1.25rem figure. Everything else is Montserrat on the --text-* tokens, so
   nothing here sits below the scale's own documented floor (the quantity
   strip's caps labels were .52rem ≈ 8px, against a --text-micro of .62rem). */
.pd-adv-head{font-family:'Libre Baskerville',Georgia,serif;font-size:var(--h3);font-weight:400;line-height:1.3;color:var(--onyx);margin:0 0 10px}
.pd-adv-head em{font-style:italic}
.pd-adv-strip{display:flex;gap:22px;flex-wrap:wrap;margin:0 0 12px}
.pd-adv-fig{font-family:'Libre Baskerville',Georgia,serif;font-size:1.25rem;font-weight:400;line-height:1.1;color:var(--onyx)}
.pd-adv-fig.is-total{color:var(--bloodstone)}
.pd-adv-fig-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-micro);letter-spacing:.16em;text-transform:uppercase;color:var(--onyx);opacity:.6;margin-top:4px}
.pd-adv-body{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);line-height:1.62;color:var(--onyx);opacity:.82;margin:0}
.pd-adv-note{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);line-height:1.55;color:var(--onyx);opacity:.6;margin:11px 0 0}
.pd-adv-row{display:flex;gap:14px;padding:9px 0;border-bottom:1px solid var(--border)}
.pd-adv-row.is-past{opacity:.45}
.pd-adv-date{flex:0 0 132px;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:600;color:var(--bloodstone)}
.pd-adv-row-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx);margin-bottom:2px}
.pd-adv-row-why{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);line-height:1.5;color:var(--onyx);opacity:.68}
.pd-adv-passed{font-size:var(--text-micro);opacity:.7}
.pd-rec-box{border:1px solid rgba(123,29,29,.26);background:linear-gradient(180deg,#fffdf8,#fbf5ea);padding:16px 18px;margin:2px 0 4px}
.pd-rec-badge{font-family:'Montserrat',sans-serif;font-size:var(--text-micro);letter-spacing:.2em;text-transform:uppercase;font-weight:600;color:var(--bloodstone);margin:0 0 9px}
.pd-rec-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);opacity:.78;margin:0}
.pd-rec-sub strong{color:var(--onyx-dk);font-weight:600}
.pd-rec-why{border-left:2px solid rgba(123,29,29,.38);padding:1px 0 1px 12px;margin:11px 0 14px;font-family:'Libre Baskerville',Georgia,serif;font-style:italic;font-size:var(--text-md);line-height:1.6;color:var(--onyx);opacity:.78}
.pd-rec-actions{display:flex;flex-wrap:wrap;gap:9px;align-items:center}
.pd-rec-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;padding:11px 20px;background:var(--bloodstone);color:var(--ivory);border:1px solid var(--bloodstone);cursor:pointer;transition:opacity .2s}
.pd-rec-btn:hover{opacity:.9}
.pd-rec-btn--ghost{background:transparent;color:var(--onyx-dk);border-color:var(--border-d)}
.pd-rec-defer{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);opacity:.6;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.pd-rec-confirm{font-family:'Montserrat',sans-serif;font-size:var(--text-body);line-height:1.5;color:var(--sage-dk);padding:6px 0}
.pd-rec-team{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);line-height:1.55;color:var(--onyx)}
.pd-rec-team strong{color:var(--bloodstone);font-weight:600}
.pd-rec-row{display:flex;gap:10px;padding:6px 0;border-bottom:1px solid rgba(123,29,29,.10)}
.pd-rec-num{flex:0 0 18px;font-family:'Libre Baskerville',Georgia,serif;font-size:var(--text-body);color:var(--bloodstone)}

.dp-bar-clear:hover{color:var(--bloodstone)}
.sec-title{font-family:'Libre Baskerville',serif;font-size:clamp(1.6rem,3.2vw,2.4rem);font-weight:400;color:var(--onyx-dk);line-height:1.2;margin-bottom:8px}
.sec-title em{font-style:italic;color:var(--bloodstone-dk)}
.sec-desc{font-family:'Montserrat',sans-serif;font-size:var(--text-md);color:var(--onyx);line-height:1.8;max-width:620px;font-weight:300}

/* ── FIELDS ── */
.fld{margin-bottom:20px}
.fld-lbl{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);display:block;margin-bottom:8px;font-weight:600}
.fld-hint{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);font-style:italic;margin-bottom:6px;display:block;line-height:1.55}
.fld-input,.fld-select,.fld-textarea{
  width:100%;padding:12px 14px;border:1px solid var(--border);
  background:var(--white);font-family:'Montserrat',sans-serif;font-size:.8rem;
  color:var(--onyx);outline:none;transition:border-color .25s,box-shadow .25s;font-weight:300;appearance:none;
}
.fld-input:hover,.fld-select:hover,.fld-textarea:hover{border-color:rgba(45,16,21,.22)}
.fld-input:focus,.fld-select:focus,.fld-textarea:focus{border-color:var(--bloodstone);box-shadow:0 0 0 3px rgba(146,38,48,.06)}
.fld-textarea{resize:vertical;min-height:96px}
.fld-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.fld-err{font-size:.72rem;color:var(--brick);margin-top:4px;display:none}
.fld-input.err{border-color:var(--brick)}
.fld-date-warn{display:none;margin-top:7px;padding:9px 12px;background:rgba(184,147,90,.1);border:1px solid rgba(184,147,90,.35);font-family:'Montserrat',sans-serif;font-size:.74rem;color:#7a5c1e;line-height:1.55}

/* ── PALETTE CARDS ── */
.pal-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}
.pal-card{border:1px solid var(--border);cursor:pointer;transition:all .28s;background:var(--white);position:relative}
.pal-card:hover{border-color:var(--sage);transform:translateY(-2px);box-shadow:var(--shl)}
.pal-card.selected{border-color:var(--bloodstone);border-width:2px}
.pal-card.selected::after{content:"\2756";position:absolute;top:11px;right:13px;font-size:var(--text-ui);color:var(--bloodstone)}
.pal-strips{height:64px;display:flex}
.pal-strip{flex:1;transition:flex .35s}
.pal-card:hover .pal-strip{flex:1.25}
.pal-body{padding:14px 16px}
.pal-name{font-family:'Libre Baskerville',serif;font-size:var(--text-md);color:var(--onyx-dk);margin-bottom:3px}
.pal-mood{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);color:var(--sage);letter-spacing:.06em}

/* ── FEELING / MOODBOARD ── */
.feeling-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.feeling-card{
  border:1px solid var(--border);cursor:pointer;transition:all .28s;
  background:var(--white);position:relative;overflow:hidden;
}
.feeling-card:hover{border-color:var(--sage);transform:translateY(-2px);box-shadow:var(--shl)}
.feeling-card.selected{border-color:var(--bloodstone);border-width:2px}
.feeling-card.selected::after{content:"\2756";position:absolute;top:11px;right:13px;font-size:var(--text-ui);color:var(--bloodstone)}
.feeling-bar{height:8px;width:100%}
.feeling-body{padding:18px 20px}
.feeling-name{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx-dk);margin-bottom:5px}
.feeling-desc{font-family:'Montserrat',sans-serif;font-size:.8rem;color:var(--onyx);line-height:1.75;font-weight:300}
.feeling-quote{
  font-family:'Libre Baskerville',serif;font-size:var(--text-ui);color:var(--sage);font-style:italic;
  margin-top:10px;padding-top:10px;border-top:1px solid var(--border);display:block;line-height:1.6;
}

/* ── LANG CHIPS ── */
.lang-grid{display:flex;flex-wrap:wrap;gap:8px}
.lang-opt{
  padding:8px 16px;border:1px solid var(--border);font-size:var(--text-ui);
  font-family:'Montserrat',sans-serif;font-weight:500;
  letter-spacing:.06em;cursor:pointer;transition:all .22s;background:var(--white);user-select:none;color:var(--onyx);
}
.lang-opt:hover{border-color:var(--sage)}
.lang-opt.selected{border-color:var(--bloodstone);background:rgba(146,38,48,.05);color:var(--bloodstone)}

/* ── LANG NATIVE SPEAKER NOTICE ── */
.lang-native-notice{
  display:none;margin-top:14px;padding:14px 18px;
  border-left:3px solid var(--bloodstone);background:rgba(146,38,48,.04);
  border-radius:0;
}
.lang-native-notice p{
  font-size:.8rem;color:var(--onyx);line-height:1.65;margin:0;
}
.lang-native-notice strong{color:var(--bloodstone);font-weight:500}

/* ── SUBMIT — "The Ledger", colourway C3 (owner choice, 2026-07-31) ──
   Was a full-bleed near-black field (--onyx-dk #221010) with everything
   centre-stacked. The owner rejected that colour as a SURFACE for the second
   time — see docs/DECISIONS.md 2026-07-31 and the Moreau entry of 07-29 — and
   chose C3 from docs/BRIEFING_SUBMIT_COLOURWAYS.html: cream ground, bloodstone
   doing the ruling, ink as TYPE ONLY.
   ⚠ Do not reintroduce a dark background here. --onyx/--onyx-dk is the house
   INK: correct as type, wrong as a field. Both rejections were of a surface,
   neither was of the text colour.
   Layout is V1 "The Ledger" from docs/BRIEFING_SUBMIT_AND_GLANCE_VERSIONS.html:
   heading left / promise right, terms on a full-width rule, then status left
   and the action right so the eye travels into the button. */
.submit-block{
  background:var(--ivory);padding:64px 48px;text-align:left;margin-top:24px;
  display:block;
}
.submit-ttl{
  font-family:'Libre Baskerville',serif;font-size:clamp(1.5rem,2.6vw,2.15rem);
  font-weight:400;color:var(--onyx);line-height:1.22;margin:0;
}
.submit-ttl em{font-style:italic;color:var(--bloodstone)}

/* heading + the three things a client wants to know before pressing send */
.sb-top{
  display:grid;grid-template-columns:1fr auto;gap:56px;align-items:end;
  padding-bottom:28px;border-bottom:1px solid rgba(146,38,48,.24);
}
.sb-promise{list-style:none;margin:0;padding:0;min-width:250px}
.sb-promise li{
  display:grid;grid-template-columns:16px 1fr;gap:12px;align-items:baseline;
  font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:300;
  line-height:1.55;color:rgba(45,16,21,.66);padding:7px 0;
}
.sb-promise li + li{border-top:1px solid rgba(146,38,48,.12)}
.sb-promise b{font-size:.55rem;font-weight:600;letter-spacing:.18em;color:var(--bloodstone)}
.sb-promise i{font-style:normal;color:var(--onyx);font-weight:400}

/* terms — a rule across the block, not a box floating in a dark field */
.sb-terms{
  display:flex;align-items:center;gap:14px;padding:20px 0;cursor:pointer;
  border-bottom:1px solid rgba(146,38,48,.24);
  font-family:'Montserrat',sans-serif;font-size:.78rem;font-weight:300;color:rgba(45,16,21,.66);
}
.sb-terms input[type=checkbox]{
  flex-shrink:0;width:16px;height:16px;margin:0;accent-color:var(--bloodstone);cursor:pointer;
}
.sb-terms a{color:var(--bloodstone);text-decoration:underline;text-underline-offset:3px}
/* replaces the bare red asterisk — every other required field is worded */
.sb-req{
  margin-left:auto;font-size:.62rem;font-weight:500;letter-spacing:.24em;
  text-transform:uppercase;color:var(--bloodstone);flex-shrink:0;
}
#e_terms{
  display:none;margin:16px 0 0;padding:10px 14px;
  font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.04em;
  color:var(--bad);border:1px solid rgba(181,72,52,.35);background:rgba(181,72,52,.06);
}

/* status opposite the action — reassurance beside it, never stacked on top */
.sb-act{display:flex;align-items:center;justify-content:space-between;gap:32px;padding-top:24px;flex-wrap:wrap}
/* validate() injects #briefErrorSummary as a SIBLING immediately before
   #submitBtn (portal-briefing-form.js ~2229), which lands it inside this flex
   row. Without this it would sit beside the button instead of above it. */
.sb-act #briefErrorSummary{flex:1 0 100%;order:-1;margin:0 0 16px!important}
/* Stack the two-column rows on narrow screens. Kept here beside the rules it
   undoes; the later .submit-block media queries only touch padding and the
   button width, so nothing here is overridden by them. */
@media(max-width:900px){
  .sb-top{grid-template-columns:1fr;gap:26px;align-items:start}
  .sb-promise{min-width:0}
}
@media(max-width:640px){
  .sb-act{flex-direction:column;align-items:stretch;gap:16px}
  .sb-act .autosave-hint{order:2;text-align:center}
  /* The label wraps to two lines on a phone; without wrapping the row,
     "Required" gets squeezed against the second line. Drop it to its own
     line, indented past the checkbox (16px box + 14px gap). */
  .sb-terms{align-items:flex-start;flex-wrap:wrap}
  .sb-terms > span:not(.sb-req){flex:1 1 auto}
  .sb-req{flex:1 0 100%;margin-left:30px;padding-top:6px}
}
.submit-btn{
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.22em;text-transform:uppercase;
  color:var(--ivory);background:var(--bloodstone);border:none;padding:16px 52px;
  cursor:pointer;transition:background .3s;font-weight:600;
}
.submit-btn:hover{background:var(--bloodstone-dk)}
.submit-btn:disabled{opacity:.55;cursor:not-allowed}
/* The arrow lives in CSS, not in the label. submitBriefing() overwrites the
   button's innerHTML with "Sending…" and resetSuccess() restores it as the
   bare string 'Send My Vision' — so an arrow typed into the markup was lost
   for good after the first submit attempt. Suppressed while disabled so the
   sending state doesn't read "Sending… →". */
.submit-btn::after{content:' \2192';letter-spacing:0}
.submit-btn:disabled::after{content:none}
.btn-spinner{display:inline-block;width:12px;height:12px;border:1.5px solid rgba(255,255,255,.25);border-top-color:var(--ivory);border-radius:50%;animation:btnspin .7s linear infinite;vertical-align:-2px;margin-right:8px}
@keyframes btnspin{to{transform:rotate(360deg)}}
.submit-note{font-family:'Montserrat',sans-serif;font-size:.71rem;color:var(--sage);margin-top:14px;letter-spacing:.08em}

/* ── SUCCESS ── */
.success-screen{
  display:none;position:fixed;inset:0;background:var(--ivory);z-index:1000;
  flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:48px;animation:fadeUp .6s ease;overflow-y:auto;
}
.success-screen.on{display:flex}
@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
.suc-badge{display:inline-flex;align-items:center;gap:8px;background:var(--white);border:1px solid var(--border);
  border-radius:0;padding:8px 20px;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);
  letter-spacing:.18em;text-transform:uppercase;color:var(--success);margin-bottom:32px;font-weight:600}
.suc-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--success)}
.suc-icon{font-size:2rem;margin-bottom:20px;color:rgba(45,16,21,.25)}
.suc-title{font-family:'Libre Baskerville',serif;font-size:clamp(2.2rem,5.5vw,4.2rem);color:var(--onyx-dk);font-weight:500;margin-bottom:8px}
.suc-title em{font-style:italic;color:var(--bloodstone)}
.suc-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:rgba(45,16,21,.58);line-height:1.9;max-width:480px;margin:0 auto 36px;font-weight:300}
.suc-card{
  background:var(--white);border:1px solid var(--border);
  padding:28px 36px;max-width:500px;width:100%;margin:0 auto 28px;text-align:left;box-shadow:var(--sh);
}
.suc-card-row{display:flex;justify-content:space-between;align-items:baseline;
  padding:12px 0;border-bottom:1px solid var(--border)}
.suc-card-row:last-child{border-bottom:none}
.suc-card-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-weight:600}
.suc-card-val{font-family:'Libre Baskerville',serif;font-size:var(--text-body);color:var(--onyx-dk);text-align:right;max-width:60%}
.suc-primary-btn{
  display:inline-block;background:var(--bloodstone);color:var(--ivory);
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.22em;text-transform:uppercase;
  padding:16px 40px;border:none;cursor:pointer;transition:background .3s;margin-bottom:16px;font-weight:600;
}
.suc-primary-btn:hover{background:var(--bloodstone-dk)}
.suc-resubmit-btn{
  display:block;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;
  text-transform:uppercase;color:var(--sage);background:none;border:none;cursor:pointer;
  text-decoration:underline;text-underline-offset:3px;margin:0 auto;padding:4px 0;
  transition:color .2s;font-weight:500;
}
.suc-resubmit-btn:hover{color:var(--onyx)}
.suc-sig{font-family:'Montserrat',sans-serif;font-size:.71rem;color:rgba(45,16,21,.2);margin-top:24px;letter-spacing:.12em}
.suc-suite-btn{
  margin-top:24px;font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--bloodstone);background:transparent;
  border:1px solid rgba(146,38,48,.3);padding:12px 32px;cursor:pointer;
  transition:all .3s;font-weight:600;
}
.suc-suite-btn:hover{border-color:var(--bloodstone);background:rgba(146,38,48,.05)}

/* ── DESIGN SUITE TAB ── */
.suite-hero{
  background:var(--white);padding:36px 48px;
  display:flex;justify-content:space-between;align-items:center;
  border-bottom:1px solid var(--border);flex-wrap:wrap;gap:20px;
  box-shadow:var(--sh);
}
.suite-title-block h2{
  font-family:'Libre Baskerville',serif;font-size:1.9rem;font-weight:400;
  color:var(--onyx-dk);margin-bottom:6px;
}
.suite-title-block p{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--sage);letter-spacing:.14em;font-weight:500;text-transform:uppercase}
.status-row{display:flex;align-items:center;gap:8px}
.status-step{
  display:flex;align-items:center;gap:7px;padding:8px 14px;
  border:1px solid var(--border);background:var(--ivory);
}
.status-dot{width:7px;height:7px;border-radius:50%;background:rgba(45,16,21,.12);flex-shrink:0}
.status-step.done .status-dot{background:var(--success)}
.status-step.active .status-dot{background:var(--bloodstone);animation:pulse 1.8s infinite}
@keyframes pulse{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(146,38,48,.3)}50%{opacity:.8;box-shadow:0 0 0 4px rgba(146,38,48,0)}}
.status-step span{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;color:var(--sage);font-weight:500}
.status-step.active span{color:var(--onyx);font-weight:600}
.status-step.done span{color:var(--success)}
.status-arrow{font-size:var(--text-sm);color:var(--border)}

.suite-note{
  background:rgba(146,38,48,.05);border-bottom:2px solid var(--bloodstone);padding:0;
}
.suite-note-inner{
  max-width:760px;margin:0 auto;padding:16px 24px;
  display:flex;align-items:center;justify-content:center;gap:14px;
}
.suite-note-icon{font-size:1.4rem;flex-shrink:0;}
.suite-note p{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx);line-height:1.6;margin:0;text-align:center;font-weight:300}
.suite-note strong{font-weight:600;color:var(--bloodstone);}

.suite-sample-label{
  margin:0 64px;padding:14px 0 12px;
  border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;
}
.ssl-txt{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);font-weight:600}
.ssl-badge{
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;
  padding:6px 16px;border:1px solid rgba(201,168,76,.45);color:rgba(170,138,40,.9);font-weight:700;
}

.suite-iframe-wrap{
  margin:0 48px 48px;
  border:1px solid var(--border);
  position:relative;overflow:hidden;box-shadow:var(--sh);
}
.suite-iframe-wrap iframe{
  width:100%;height:85vh;border:none;display:block;
}
/* Concept (Tab 02) frame is deliberately shorter than the shared 85vh suite
   frame, so the designer's letter and the Direction A/B chooser peek above the
   fold instead of sitting one or two full screens below an iframe that fills
   the viewport (client-experience audit 2026-07-22: "the decision buttons sit
   below a full-screen iframe — the actual choice is below the fold"). Scoped by
   #id so it outranks every .suite-iframe-wrap iframe breakpoint rule below and
   leaves the Tab 03/04 suiteFrame at its taller 85vh. */
#conceptFrameWrap iframe{height:62vh}
@media(max-width:600px){#conceptFrameWrap iframe{height:54vh}}
.iframe-expand-btn{
  position:absolute;bottom:16px;right:16px;
  background:var(--white);border:1px solid var(--border);
  padding:9px 18px;font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;
  color:var(--onyx);cursor:pointer;transition:all .25s;font-family:'Montserrat',sans-serif;font-weight:600;
  box-shadow:var(--sh);
}
.iframe-expand-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}

/* ── PIECE TABS (for per-piece design loading) ── */
.piece-tabs-container{
  margin:0 64px 20px;display:flex;gap:8px;flex-wrap:wrap;border-bottom:1px solid var(--border);
  padding-bottom:12px;
}
.piece-tab{
  padding:9px 18px;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;
  background:var(--white);border:1px solid var(--border);color:var(--sage);cursor:pointer;
  transition:all .25s;font-family:'Montserrat',sans-serif;font-weight:500;
}
.piece-tab:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.piece-tab.active{background:var(--bloodstone);color:var(--white);border-color:var(--bloodstone)}
.piece-loading-hint{
  margin:0 48px;padding:12px 16px;background:rgba(64,100,95,0.08);border-left:2px solid var(--sage);
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--sage);display:none;font-weight:300;
}
.piece-loading-hint.show{display:block}

/* ── LOGIN SCREEN ── */
.login-screen{
  position:fixed;inset:0;background:var(--onyx-dk);z-index:600;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:40px 24px;text-align:center;
}
.login-screen.hidden{display:none}
.login-logo{font-family:'Libre Baskerville',serif;font-size:.78rem;letter-spacing:.18em;
  text-transform:uppercase;color:rgba(250,246,238,.6);margin-bottom:44px;display:block}
.login-box{
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);
  padding:44px 52px;width:100%;max-width:420px;text-align:left;
}
.login-title{font-family:'Libre Baskerville',serif;font-size:1.8rem;font-weight:400;
  color:var(--ivory);margin-bottom:8px;line-height:1.2}
.login-title em{font-style:italic;color:var(--bloodstone)}
.login-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);color:rgba(250,246,238,.72);margin-bottom:30px;line-height:1.75;font-weight:300}
.login-fld{margin-bottom:16px}
.login-fld label{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.22em;text-transform:uppercase;color:var(--sage);
  display:block;margin-bottom:7px;font-weight:600}
.login-fld input{
  width:100%;padding:12px 14px;border:1px solid rgba(64,100,95,.2);
  background:rgba(255,255,255,.05);font-family:'Montserrat',sans-serif;font-size:var(--text-body);
  color:var(--ivory);outline:none;transition:border-color .3s;font-weight:300;
}
.login-fld input:focus{border-color:var(--bloodstone)}
.login-btn{
  width:100%;font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.24em;
  text-transform:uppercase;color:var(--ivory);background:var(--bloodstone);border:none;
  padding:15px;cursor:pointer;transition:background .3s;margin-top:8px;font-weight:600;
}
.login-btn:hover{background:var(--bloodstone-dk)}
.login-err{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--brick);margin-top:10px;display:none;line-height:1.5;font-weight:400}
.login-err.show{display:block}
.login-hint{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--sage);margin-top:14px;letter-spacing:.04em;text-align:center;font-weight:300}
.login-legal{font-size:var(--text-xs);margin-top:8px;opacity:.7}
.login-text-btn{background:none;border:none;padding:0;cursor:pointer;color:inherit;font:inherit;text-decoration:underline}
.login-pass-wrap{position:relative}
.login-pass-wrap input{width:100%;padding-right:40px;box-sizing:border-box}
.login-eye{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:var(--sage);padding:4px;line-height:0;opacity:.65;transition:opacity .2s}
.login-eye:hover{opacity:1}
/* ── RSVP TAB ── */
/* ── RSVP Hero ── */
.rsvp-hero{
  background:var(--white);padding:40px 64px 28px;border-bottom:none;
}
.rsvp-hero-eyebrow{
  font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:12px;
}
.rsvp-hero-title{
  font-family:'Libre Baskerville',serif;font-size:2.4rem;font-weight:400;
  color:var(--onyx-dk);text-align:left;margin-bottom:8px;line-height:1.1;
}
.rsvp-hero-title em{font-style:italic;color:var(--bloodstone)}
.rsvp-hero-sub{
  font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--sage);
  text-align:left;margin-bottom:0;max-width:none;line-height:1.8;font-weight:300;white-space:nowrap;
}
.rsvp-security-tip{
  background:#FAF6EE;border-left:3px solid var(--bloodstone);
  padding:10px 14px;margin:16px 0 0;
  font-family:'Montserrat',sans-serif;font-size:.75rem;color:rgba(45,16,21,.65);
  line-height:1.6;font-weight:300;white-space:nowrap;
}
.rsvp-security-tip strong{font-weight:600;color:var(--bloodstone)}

/* 3-stat meta row */
.rsvp-meta-bar{
  display:flex;gap:0;margin-bottom:36px;border-top:1px solid var(--border);
  border-bottom:1px solid var(--border);padding:20px 0;
}
.rsvp-meta-item{padding-right:40px;margin-right:40px;border-right:1px solid var(--border);}
.rsvp-meta-item:last-child{border-right:none;margin-right:0}
.rsvp-meta-lbl{
  font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--sage);font-weight:600;margin-bottom:4px;
}
.rsvp-meta-val{
  font-family:'Montserrat',sans-serif;font-size:.84rem;font-weight:600;
  color:var(--onyx-dk);letter-spacing:.02em;
}

/* Big-number counts row */
.rsvp-rag-row{
  display:flex;align-items:flex-end;gap:0;flex-wrap:wrap;row-gap:16px;
}
.rsvp-rag-item{
  padding-right:24px;margin-right:24px;border-right:1px solid var(--border);
}
.rsvp-rag-item:last-of-type{border-right:none;margin-right:24px}
.rsvp-rag-num{
  font-family:'Libre Baskerville',serif;font-size:2.4rem;font-weight:400;
  color:var(--onyx-dk);line-height:1;margin-bottom:6px;
}
.rsvp-rag-lbl{
  font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--sage);font-weight:600;
}
.rsvp-rag-item.is-attending .rsvp-rag-num{color:var(--success)}
.rsvp-rag-item.is-attending .rsvp-rag-lbl{
  border-bottom:2px solid var(--success);padding-bottom:2px;
}
.rsvp-rag-item.is-dietary .rsvp-rag-num{color:var(--gold)}
.rsvp-export-cta{
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;
  text-transform:uppercase;font-weight:700;color:var(--white);
  background:var(--bloodstone-dk);border:none;padding:14px 28px;cursor:pointer;
  align-self:center;transition:background .2s;white-space:nowrap;margin-left:auto;
}
.rsvp-export-cta:hover{background:var(--bloodstone)}

/* Add Guest drawer */
.rsvp-add-drawer{border-top:1px solid var(--border)}
.rsvp-add-summary{
  font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--bloodstone);font-weight:600;
  padding:20px 64px;cursor:pointer;list-style:none;
}
.rsvp-add-summary::-webkit-details-marker{display:none}
.rsvp-add-drawer[open] .rsvp-add-summary{border-bottom:1px solid var(--border)}

@media(max-width:700px){
  .rsvp-hero{padding:28px 24px 20px}
  .rsvp-hero-title{font-size:1.75rem}
  .rsvp-hero-sub{font-size:.72rem;margin-bottom:0}
  .guests-empty-state{padding:20px 24px;flex-wrap:wrap;gap:20px}
  /* The two columns stack here, so their desktop min-width must be released —
     280px + 48px of padding overflows a 320px phone. */
  .guests-empty-lhs,.guests-empty-rhs{flex:1 1 100%;min-width:0}
  .guests-empty-title{font-size:1.05rem;white-space:normal}
  .rsvp-meta-bar{flex-wrap:wrap;gap:20px;padding:16px 0}
  .rsvp-meta-item{border-right:none;margin-right:0;padding-right:0}
  /* Counters must wrap on phones — nowrap pushed the row to ~710px at a
     375px viewport, horizontally clipping the pending/declined counts. */
  .rsvp-rag-row{gap:20px;flex-wrap:wrap;row-gap:16px}
  .rsvp-rag-item{padding-right:0;margin-right:0;border-right:none}
  .rsvp-rag-num{font-size:1.9rem}
  .rsvp-add-summary{padding:16px 20px}
}
.rsvp-body{max-width:760px;margin:0 auto;padding:48px 24px 80px}
.rsvp-sec-title{font-family:'Libre Baskerville',serif;font-size:1.4rem;color:var(--onyx-dk);margin-bottom:6px}
.rsvp-sec-title em{font-style:italic;color:var(--bloodstone-dk)}
.rsvp-sec-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:rgba(45,16,21,.58);margin-bottom:28px;line-height:1.75;font-weight:300}
.rsvp-add-form{
  background:var(--white);border-bottom:1px solid var(--border);
  padding:48px 64px 36px;
}
.rsvp-add-title{
  font-family:'Libre Baskerville',serif;font-size:1.2rem;color:var(--onyx-dk);
  margin-bottom:28px;font-weight:400;letter-spacing:.02em;
}
.rsvp-fld-row{
  display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:18px;
}
@media(max-width:700px){
  .rsvp-add-form{padding:28px 20px 32px}
  .rsvp-fld-row{grid-template-columns:1fr;gap:14px}
}
.rsvp-add-btn{
  font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--white);background:var(--bloodstone);border:none;padding:12px 28px;
  cursor:pointer;transition:background .3s;margin-top:4px;font-weight:600;
}
.rsvp-add-btn:hover{background:var(--bloodstone-dk)}
.rsvp-table-wrap{overflow:hidden;border-top:1px solid var(--border);}
.rsvp-list-hdr-outer{
  padding:24px 64px;background:var(--white);border-top:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;
}
@media(max-width:700px){
  .rsvp-list-hdr-outer{
    padding:20px 20px;flex-direction:column;align-items:flex-start;gap:14px;
  }
  .rsvp-list-hdr-outer > div:last-child{width:100%;display:flex;flex-direction:column;gap:10px}
  .rsvp-filter-row{display:flex;gap:6px;width:100%;flex-wrap:wrap}
  .rsvp-export-btn{width:100%;text-align:center}

  /* 2026-07-29 mobile audit (M-2) — two problems, one block.
     (a) The rule above turns this row's parent into a column, and because
     `.rsvp-list-hdr-outer > div:last-child` (0,2,1) outranks `.rsvp-filter-row`
     (0,1,0), flex-direction:column won and the four filters stacked as four
     full-width 44px buttons — 216px of a phone screen spent on a filter row.
     Selector below is (0,3,1) so it actually wins. One horizontally scrollable
     line instead, matching the pill-rail pattern the homepage already uses for
     occasion categories.
     (b) Nothing on this tab was sticky. With 214 guests the tab measures
     34,776px and the awaiting-response block alone is 8,481px — ten screens —
     so a client looking at guest #100 was ~10,000px below the only search box
     and the only filters, with no way back but scrolling. Pinning this row
     under the header keeps both one tap away for the whole list. */
  .rsvp-list-hdr-outer > div.rsvp-filter-row:last-child{
    flex-direction:row;flex-wrap:nowrap;overflow-x:auto;gap:6px;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px;
  }
  .rsvp-list-hdr-outer > div.rsvp-filter-row:last-child::-webkit-scrollbar{display:none}
  .rsvp-filter-row .rsvp-filter-btn{flex:0 0 auto}

  .rsvp-list-hdr-outer{
    position:sticky;top:calc(var(--hdr-h,120px) + var(--beta-h,0px));z-index:120;
    box-shadow:0 6px 16px -12px rgba(45,16,21,.5);
  }
}
.rsvp-table{width:100%;border-collapse:collapse}
.rsvp-table th{
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--sage);
  padding:12px 20px 12px 64px;background:var(--ivory);border-bottom:1px solid var(--border);text-align:left;font-weight:600;
}
.rsvp-table th:not(:first-child){padding-left:14px;}
.rsvp-table td{font-family:'Montserrat',sans-serif;padding:13px 14px 13px 64px;font-size:var(--text-body);border-bottom:1px solid var(--border);color:var(--onyx);font-weight:300}
.rsvp-table td:not(:first-child){padding-left:14px;}
.rsvp-table tr:last-child td{border-bottom:none}
.rsvp-badge-yes{font-family:'Montserrat',sans-serif;background:rgba(45,106,79,.1);color:var(--success);font-size:var(--text-xs);padding:3px 10px;font-weight:600}
.rsvp-badge-no{font-family:'Montserrat',sans-serif;background:rgba(146,38,48,.08);color:var(--bloodstone);font-size:var(--text-xs);padding:3px 10px;font-weight:600}
.rsvp-badge-pending{font-family:'Montserrat',sans-serif;background:rgba(64,100,95,.12);color:var(--sage);font-size:var(--text-xs);padding:3px 10px;font-weight:600}
.rsvp-del-btn{font-size:var(--text-sm);color:var(--sage);background:none;border:none;cursor:pointer;padding:2px 6px;transition:color .2s}
.rsvp-del-btn:hover{color:var(--bloodstone)}
/* Guest edit modal */
.guest-edit-overlay{position:fixed;inset:0;background:var(--overlay-bg);z-index:9000;display:flex;align-items:center;justify-content:center;padding:20px}
.guest-edit-modal{background:var(--ivory);border:1px solid var(--border);max-width:640px;width:100%;max-height:90vh;overflow-y:auto;padding:32px 36px}
.guest-edit-modal-hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}
.guest-edit-modal-title{font-family:'Libre Baskerville',serif;font-size:1.1rem;color:var(--onyx)}
.guest-edit-close{background:none;border:none;font-size:1.3rem;color:var(--sage);cursor:pointer;padding:4px 8px;transition:color .2s}
.guest-edit-close:hover{color:var(--bloodstone)}
.guest-edit-footer{display:flex;gap:12px;align-items:center;margin-top:22px;flex-wrap:wrap}
.guest-edit-save{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;padding:11px 24px;background:var(--bloodstone);color:#fff;border:none;cursor:pointer;transition:background .2s;font-weight:600}
.guest-edit-save:hover{background:var(--bloodstone-dk)}
.guest-edit-cancel{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;padding:11px 20px;background:transparent;border:1px solid var(--border);color:var(--onyx);cursor:pointer;transition:all .2s}
.guest-edit-cancel:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.rsvp-empty{font-family:'Montserrat',sans-serif;text-align:center;padding:40px;font-size:.72rem;color:var(--sage);font-style:italic}

/* ── GUESTS TAB — PHASE STRUCTURE ── */

/* Hero step-progress bar */
.guests-steps{display:flex;gap:0;border-top:1px solid var(--border);margin-top:32px;padding-top:0}
.guests-step{flex:1;padding:14px 0 12px;text-align:center;border-right:1px solid var(--border);border-top:3px solid transparent;transition:all .2s}
.guests-step:last-child{border-right:none}
.guests-step-num{font-family:'Montserrat',sans-serif;font-size:.58rem;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);opacity:.65;margin-bottom:3px}
.guests-step-lbl{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.14em;text-transform:uppercase;color:var(--onyx);font-weight:500;opacity:.45}
.guests-step.done{border-top-color:var(--success)}
.guests-step.done .guests-step-num,.guests-step.done .guests-step-lbl{opacity:1;color:var(--success)}
.guests-step.active{border-top-color:var(--bloodstone)}
.guests-step.active .guests-step-num,.guests-step.active .guests-step-lbl{opacity:1;color:var(--bloodstone)}
.guests-step:hover{background:rgba(45,16,21,.03);border-top-color:rgba(146,38,48,.35)}

/* Empty state */
.guests-empty-state{
  padding:24px 64px 28px;background:var(--white);border-bottom:1px solid var(--border);
  display:flex;align-items:center;gap:40px;flex-wrap:wrap;
}
/* TWO columns, and both need a real basis. `flex:1` alone resolves to
   flex-basis:0, which makes the copy the only item the row will take space
   away from — it was measured at 0px wide while the button row (flex:0 0 auto)
   held 575px. A basis plus a min-width means the row runs out of space before
   the copy does, and wraps instead of crushing it. */
.guests-empty-lhs{flex:1 1 360px;min-width:280px}
.guests-empty-rhs{flex:0 1 520px;min-width:280px}
.guests-empty-eyebrow{
  font-family:'Montserrat',sans-serif;font-size:.6rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--sage);font-weight:600;margin-bottom:6px;white-space:nowrap;
}
.guests-empty-title{
  font-family:'Libre Baskerville',serif;font-size:1.25rem;font-weight:400;
  color:var(--onyx-dk);margin-bottom:0;line-height:1.25;white-space:nowrap;
}
.guests-empty-title em{font-style:italic;color:var(--bloodstone)}
.guests-empty-sub{
  font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:rgba(45,16,21,.5);
  line-height:1.4;margin:8px 0 0;
}
.guests-empty-actions{display:flex;gap:14px;align-items:center;flex-wrap:wrap;flex:0 0 auto}
/* Separates the one primary door (paste a list) from the alternative routes
   below it (2026-07-31). Without a break the four controls read as one
   undifferentiated pile and the client has to work out which is the real
   action — see the comment on .guests-empty-actions in client-portal.html. */
.guests-empty-or{
  display:flex;align-items:center;gap:12px;margin:18px 0 14px;
  font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.2em;
  text-transform:uppercase;color:rgba(45,16,21,.38);font-weight:500;
}
.guests-empty-or::before,.guests-empty-or::after{content:'';flex:1;height:1px;background:var(--border)}

/* Phase blocks */
.guests-phase{background:var(--white);border-top:1px solid var(--border)}
.guests-phase-hd{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:28px 64px 20px;flex-wrap:wrap}
.guests-phase-eyebrow{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:5px}
.guests-phase-title{font-family:'Libre Baskerville',serif;font-size:1.3rem;font-weight:400;color:var(--onyx-dk)}
.guests-phase-title em{font-style:italic;color:var(--bloodstone)}
.guests-phase-body{padding:0 64px 32px}
.guests-phase-locked-msg{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:rgba(45,16,21,.45);font-style:italic;padding:16px 0 24px;line-height:1.7}
@media(max-width:700px){
  .guests-phase-hd{padding:20px 20px 16px}
  .guests-phase-body{padding:0 20px 24px}
}

/* Table Name Generator */
.tng-row{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.tng-generate-btn{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.18em;text-transform:uppercase;padding:var(--btn-pad-sm);background:var(--onyx);color:var(--white);border:none;cursor:pointer;transition:background .2s;font-weight:600;white-space:nowrap}
.tng-generate-btn:hover{background:var(--bloodstone)}

/* Tables list */
.tables-list{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.table-card{display:flex;align-items:center;gap:12px;padding:12px 16px;border:1px solid var(--border);background:var(--ivory)}
.table-card-name{font-family:'Libre Baskerville',serif;font-size:.9rem;color:var(--onyx-dk);flex:1}
.table-card-count{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.12em;text-transform:uppercase;color:var(--sage);font-weight:600}
.table-card-del{background:none;border:none;color:var(--sage);cursor:pointer;font-size:.75rem;opacity:.5;transition:all .2s}
.table-card-del:hover{opacity:1;color:var(--bloodstone)}
.add-table-row{display:flex;gap:8px;align-items:stretch}
.add-table-input{border:1px solid var(--border);padding:10px 14px;font-family:'Montserrat',sans-serif;font-size:.82rem;color:var(--onyx);background:var(--white);outline:none;flex:1}
.add-table-input:focus{border-color:var(--bloodstone)}
.add-table-btn{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.16em;text-transform:uppercase;padding:var(--btn-pad-sm);background:var(--sage-dk);color:var(--white);border:none;cursor:pointer;font-weight:600;transition:background .2s}
.add-table-btn:hover{background:var(--sage)}

/* Seating map view */
.seating-view-toggle{display:flex;gap:0;margin-bottom:20px;border:1px solid var(--border);overflow:hidden;width:fit-content}
/* Map View needs real drag-and-drop — pointless on touch (2026-07-17) */
.seating-touch-tip{display:none;font-family:'Montserrat',sans-serif;font-size:.7rem;color:rgba(45,16,21,.55);margin:-10px 0 16px}
@media (hover:none) and (pointer:coarse){
  .seating-map-btn-pointer-only{display:none}
  .seating-touch-tip{display:block}
}
.seating-toggle-btn{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.16em;text-transform:uppercase;padding:8px 18px;background:transparent;border:none;cursor:pointer;color:var(--sage);font-weight:500;transition:all .2s}
.seating-toggle-btn.active{background:var(--onyx);color:var(--white)}
.seating-map-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin-top:4px}
.seating-table-card{border:1px solid var(--border);background:var(--ivory);padding:14px}
.seating-table-name{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx-dk);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.seating-guest-item{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--onyx);padding:4px 0;border-bottom:1px solid rgba(45,16,21,.05);font-weight:400}
.seating-guest-item:last-child{border-bottom:none}
.seating-empty-card{font-family:'Montserrat',sans-serif;font-size:.68rem;color:rgba(45,16,21,.35);font-style:italic;padding:8px 0}
/* Unseated guest pool — the drag source Map View was missing (2026-07-29) */
#seatingGuestPool{border:1px dashed var(--border);background:var(--white);padding:14px;margin-top:14px}
.seating-pool-title{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.16em;text-transform:uppercase;color:var(--sage);font-weight:600;margin-bottom:10px}
.seating-pool-chips{display:flex;flex-wrap:wrap;gap:8px}
.seating-pool-chips .seating-pool-chip{border:1px solid var(--border);background:var(--ivory);padding:5px 10px;cursor:grab}

/* Design picker — Phase 3 */
.design-picker-row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:28px}
@media(max-width:800px){.design-picker-row{grid-template-columns:1fr}}
.design-picker-card{border:1px solid var(--border);padding:20px;background:var(--ivory);cursor:pointer;transition:all .2s;position:relative}
.design-picker-card:hover{border-color:var(--bloodstone)}
.design-picker-card.mapped{border-color:var(--success);background:rgba(45,106,79,.04)}
.design-picker-role{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.design-picker-name{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx-dk);margin-bottom:4px}
.design-picker-hint{font-family:'Montserrat',sans-serif;font-size:.68rem;color:rgba(45,16,21,.45);font-style:italic}
.design-picker-check{position:absolute;top:12px;right:12px;color:var(--success);font-size:.8rem;display:none}
.design-picker-card.mapped .design-picker-check{display:block}
.design-picker-empty{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:rgba(45,16,21,.45);font-style:italic;line-height:1.7;padding:16px 0}
/* Role assignment buttons inside each design picker card */
.design-role-btn{font-family:'Montserrat',sans-serif;font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;padding:5px 12px;border:1px solid var(--border);background:transparent;color:var(--sage);cursor:pointer;font-weight:600;transition:all .2s;white-space:nowrap}
.design-role-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.design-role-btn.active{background:var(--bloodstone);border-color:var(--bloodstone);color:var(--white)}
/* Empty hint inside tables list */
.tables-empty-hint{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:rgba(45,16,21,.4);font-style:italic;padding:8px 0;font-weight:300}

/* Generate blocks — Phase 3 */
.gen-block{border:1px solid var(--border);padding:24px;margin-bottom:20px;background:var(--white)}
.gen-block-hd{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.gen-block-title{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);font-weight:600}
.gen-block-status{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.12em;text-transform:uppercase;color:var(--sage);font-weight:500;margin-top:7px}
.gen-block-status.complete{color:var(--success)}
.gen-block-status.locked{color:rgba(45,16,21,.3)}
.gen-block-status.error{color:var(--bad)}
.gen-progress-bar{height:3px;background:var(--border);margin-bottom:14px;overflow:hidden;display:none}
.gen-progress-fill{height:100%;background:var(--bloodstone);width:0;transition:width .4s}
.gen-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.gen-btn{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.18em;text-transform:uppercase;padding:var(--btn-pad-sm);background:var(--bloodstone);color:var(--white);border:none;cursor:pointer;font-weight:600;transition:background .2s;white-space:nowrap}
.gen-btn:hover{background:var(--bloodstone-dk)}
.gen-btn:disabled{opacity:.4;cursor:not-allowed}
.gen-btn-ghost{background:transparent;border:1px solid var(--border);color:var(--onyx)}
.gen-btn-ghost:hover{border-color:var(--bloodstone);color:var(--bloodstone);background:transparent}

/* QR panel */
.qr-panel{border:1px solid var(--border);background:var(--ivory);padding:20px 24px;display:none;align-items:center;gap:24px;flex-wrap:wrap;margin-top:12px}
.qr-panel.visible{display:flex}
.qr-canvas-wrap{width:100px;height:100px;background:var(--white);padding:6px;border:1px solid var(--border);flex-shrink:0;overflow:hidden}
.qr-canvas-wrap canvas,.qr-canvas-wrap img{width:100%!important;height:100%!important;display:block}
.qr-info{flex:1;min-width:180px}
.qr-info-label{font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.18em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:6px}
.qr-info-sub{font-family:'Montserrat',sans-serif;font-size:.72rem;color:rgba(45,16,21,.55);line-height:1.6;margin-bottom:12px}
.qr-download-btn{font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;padding:var(--btn-pad-sm);background:var(--bloodstone);color:var(--white);border:none;cursor:pointer;font-weight:600;transition:background .2s}
.qr-download-btn:hover{background:var(--bloodstone)}

/* Meal summary bars — Phase 4 */
.meal-summary-card{border:1px solid var(--border);background:var(--ivory);padding:24px;margin-bottom:20px}
.meal-summary-title{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:18px}
.meal-bar-row{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.meal-bar-label{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--onyx);font-weight:500;min-width:90px}
.meal-bar-track{flex:1;height:6px;background:rgba(45,16,21,.08);overflow:hidden}
.meal-bar-fill{height:100%;background:var(--success);transition:width .5s}
.meal-bar-count{font-family:'Montserrat',sans-serif;font-size:.68rem;color:var(--sage);font-weight:600;min-width:24px;text-align:right}

/* ── APPROVAL BLOCK — EDITORIAL STACK ── */
.approval-section{
  margin:24px 64px 0;padding:56px 32px 40px;text-align:center;
  background:var(--white);border:1px solid var(--border);box-shadow:var(--sh);
}
.approval-eyebrow{
  font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.34em;text-transform:uppercase;
  color:var(--sage);margin-bottom:14px;font-weight:600;
}
.approval-title{
  font-family:'Libre Baskerville',serif;font-size:2rem;font-weight:400;
  font-style:italic;color:var(--onyx-dk);margin-bottom:28px;line-height:1.2;
}
.approval-title em{font-style:italic;color:var(--bloodstone)}
.approval-sub{font-family:'Montserrat',sans-serif;font-size:.8rem;color:rgba(45,16,21,.58);line-height:1.7;margin:0 auto 36px;max-width:560px;text-align:center;font-weight:300}
.approval-btns{display:flex;gap:14px;margin-bottom:32px;flex-wrap:wrap;justify-content:center}
.approval-foot{
  display:flex;gap:22px;justify-content:center;align-items:center;flex-wrap:wrap;
  padding-top:24px;border-top:1px solid var(--border);
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--sage);
}
.approval-foot em{font-family:'Libre Baskerville',serif;font-style:italic;color:var(--onyx);letter-spacing:0;text-transform:none;font-size:var(--text-md)}
.approval-foot .sep{color:var(--border)}
.approval-foot a{
  font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--sage);
  text-decoration:none;border-bottom:1px solid rgba(64,100,95,.35);padding-bottom:2px;cursor:pointer;transition:all .25s;
}
.approval-foot a:hover{color:var(--bloodstone);border-color:var(--bloodstone)}
.btn-approve{
  flex:1;min-width:200px;padding:18px 28px;
  background:var(--success);border:none;color:var(--white);
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.18em;text-transform:uppercase;
  cursor:pointer;transition:all .3s;font-weight:600;
  display:flex;align-items:center;justify-content:center;gap:14px;
}
.btn-approve:hover{background:#245c3e}
.btn-approve.active{background:#245c3e;box-shadow:0 0 0 3px rgba(45,106,79,.2)}
.btn-decline{
  flex:1;min-width:200px;padding:18px 28px;
  background:var(--white);border:2px solid var(--bloodstone);color:var(--bloodstone);
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.18em;text-transform:uppercase;
  cursor:pointer;transition:all .3s;font-weight:600;
  display:flex;align-items:center;justify-content:center;gap:14px;
}
.btn-decline:hover{background:rgba(146,38,48,.05)}
.btn-decline.active{background:rgba(146,38,48,.08);box-shadow:0 0 0 3px rgba(146,38,48,.15)}
.approval-comment-block{display:none;margin-top:4px}
.approval-comment-block.open{display:block}
.approval-comment-block textarea{
  width:100%;min-height:88px;padding:12px 14px;border:1px solid var(--border);
  background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:.8rem;
  color:var(--onyx);resize:vertical;outline:none;transition:border-color .3s;font-weight:300;
}
.approval-comment-block textarea:focus{border-color:var(--bloodstone)}
.approval-send-btn{
  font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--white);background:var(--bloodstone);border:none;padding:12px 28px;
  cursor:pointer;transition:background .3s;margin-top:8px;font-weight:600;
}
.approval-send-btn:hover{background:var(--bloodstone-dk)}
.approval-status-msg{
  font-family:'Montserrat',sans-serif;padding:14px 20px;border:1px solid;font-size:var(--text-ui);margin-top:16px;
  display:none;line-height:1.7;font-weight:500;
}
.approval-status-msg.approved{
  border-color:rgba(45,106,79,.25);background:rgba(45,106,79,.07);
  color:var(--success);display:block;
}
.approval-status-msg.declined{
  border-color:rgba(146,38,48,.2);background:rgba(146,38,48,.04);
  color:var(--onyx);display:block;
}

/* ── EVENT COUNTDOWN HERO ── */
.event-countdown-hero{
  background:var(--white);padding:40px 48px;text-align:center;
  border-bottom:1px solid var(--border);position:relative;overflow:hidden;
}
.event-countdown-hero::before{
  content:'';position:absolute;inset:0;
  background:radial-gradient(ellipse at 50% 120%,rgba(146,38,48,.04) 0%,transparent 70%);
  pointer-events:none;
}
.ech-eyebrow{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.36em;text-transform:uppercase;color:var(--sage);margin-bottom:14px;display:block;font-weight:600}
.ech-title{font-family:'Libre Baskerville',serif;font-size:clamp(1.4rem,3.5vw,2.6rem);font-weight:400;color:var(--onyx-dk);line-height:1.2;margin-bottom:28px}
.ech-title em{font-style:italic;color:var(--bloodstone)}
.ech-units{display:flex;justify-content:center;gap:0;margin-bottom:16px}
.ech-unit{padding:0 24px;border-right:1px solid var(--border);text-align:center}
.ech-unit:last-child{border-right:none}
.ech-num{font-family:'Libre Baskerville',serif;font-size:clamp(2.4rem,6vw,4.8rem);color:var(--onyx-dk);display:block;line-height:1;letter-spacing:-.02em}
.ech-lbl{font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.26em;text-transform:uppercase;color:var(--sage);margin-top:6px;display:block;font-weight:600}
.ech-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);color:var(--sage);letter-spacing:.12em;margin-top:4px}

/* ── FINAL SUITE LUXURY COVER ── */
.final-suite-cover{
  background:var(--white);padding:40px 48px;text-align:center;
  border-bottom:1px solid var(--border);position:relative;overflow:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:auto;
}
.final-suite-cover > *{position:relative;z-index:1}
.fsc-c{
  position:absolute;width:44px;height:44px;
  border-color:rgba(45,16,21,.12);border-style:solid;border-width:0;pointer-events:none;z-index:2;
}
.fsc-c.tl{top:32px;left:32px;border-top-width:1px;border-left-width:1px}
.fsc-c.tr{top:32px;right:32px;border-top-width:1px;border-right-width:1px}
.fsc-c.bl{bottom:32px;left:32px;border-bottom-width:1px;border-left-width:1px}
.fsc-c.br{bottom:32px;right:32px;border-bottom-width:1px;border-right-width:1px}
.fsc-eyebrow{
  font-size:var(--text-ui);letter-spacing:.46em;text-transform:uppercase;
  color:var(--sage);margin-bottom:14px;font-weight:500;
}
.fsc-subtitle{
  font-family:'Libre Baskerville',serif;font-size:.9rem;font-style:italic;
  color:rgba(45,16,21,.45);letter-spacing:.04em;margin-bottom:10px;
}
.fsc-client-name{
  font-family:'Libre Baskerville',serif;font-size:clamp(3rem,7vw,5.5rem);
  font-weight:300;color:var(--onyx);line-height:.95;margin:0 0 6px;
  letter-spacing:-.03em;
}
.fsc-event-details{
  margin-top:18px;margin-bottom:0;
}
.fsc-event-name-date{
  font-size:var(--text-ui);font-family:'Montserrat',sans-serif;letter-spacing:.28em;
  color:var(--onyx);text-transform:uppercase;
}
.fsc-location{
  font-size:var(--text-sm);color:rgba(45,16,21,.25);letter-spacing:.16em;text-transform:uppercase;margin-top:4px;
}
.fsc-divider{
  width:100%;max-width:320px;height:1px;background:rgba(45,16,21,.1);
  margin:18px auto;
}
.fsc-palette{
  margin-bottom:32px;
}
.fsc-palette-swatches{
  display:flex;gap:12px;justify-content:center;flex-wrap:wrap;
}
.fsc-swatch{
  display:flex;flex-direction:column;align-items:center;gap:6px;
}
.fsc-swatch-box{
  width:48px;height:48px;border:1px solid var(--border);
  border-radius:0;
}
.fsc-swatch-label{
  font-size:var(--text-xs);color:rgba(45,16,21,.4);letter-spacing:.08em;text-transform:uppercase;
}
.fsc-mood{
  margin-bottom:32px;max-width:580px;margin-left:auto;margin-right:auto;
}
.fsc-mood p{
  font-family:'Libre Baskerville',serif;font-size:.9rem;font-style:italic;
  color:rgba(45,16,21,.45);line-height:1.7;margin:0;letter-spacing:.04em;
}
.fsc-countdown{
  margin-bottom:16px;
}
.fsc-cd-title{font-size:0}
.fsc-cd-row{
  display:flex;justify-content:center;
}
.fsc-cd-unit{
  display:flex;flex-direction:column;align-items:center;
  padding:0 16px;position:relative;
}
.fsc-cd-unit+.fsc-cd-unit::before{
  content:'';position:absolute;left:0;top:4px;bottom:14px;
  width:1px;background:rgba(45,16,21,.1);
}
.fsc-cd-num{
  font-family:'Libre Baskerville',serif;font-size:clamp(1.8rem,4vw,2.4rem);
  color:var(--onyx);line-height:1;font-weight:300;letter-spacing:-.02em;
  display:block;text-align:center;
}
.fsc-cd-lbl{
  font-size:.63rem;letter-spacing:.3em;text-transform:uppercase;
  color:var(--onyx);margin-top:6px;display:block;
}
.fsc-cd-date{
  font-size:.72rem;color:var(--onyx);letter-spacing:.16em;margin-top:10px;margin-bottom:0;
}
.fsc-view-suite-btn{
  font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.26em;text-transform:uppercase;
  padding:16px 52px;background:var(--bloodstone);color:var(--white);border:none;
  cursor:pointer;transition:background .3s;margin-top:8px;font-weight:600;
}
.fsc-view-suite-btn:hover{background:var(--bloodstone-dk)}

/* ── KEEPSAKE MODE ── */
.keepsake-banner{
  background:linear-gradient(135deg,rgba(201,168,76,.12),rgba(125,64,71,.08));
  border-bottom:1px solid rgba(201,168,76,.25);
  padding:16px 48px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
}
.keepsake-title{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx);font-style:italic}
.keepsake-title em{color:var(--bloodstone)}
.keepsake-sub{font-size:.72rem;color:var(--sage);letter-spacing:.1em}
.keepsake-icon{font-size:1.4rem;opacity:.5}

/* ══════════════════════════════════════════════════════════
   TAB 05 — YOUR EVENT (dossier · live · keepsake · testimonial)
══════════════════════════════════════════════════════════ */

/* DOSSIER (before-state) */
.dossier-wrap{padding:56px 48px 72px;background:var(--ivory);border-top:1px solid var(--border)}
.dossier-hdr{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--border)}
.dossier-eyebrow{font-size:var(--text-ui);letter-spacing:.32em;text-transform:uppercase;color:var(--bloodstone);display:block;margin-bottom:8px}
.dossier-title{font-family:'Libre Baskerville',serif;font-size:1.4rem;color:var(--onyx);font-weight:400;margin:0 0 6px}
.dossier-sub{font-size:.78rem;color:rgba(45,16,21,.58);line-height:1.7;max-width:520px;margin:0}
.dossier-print-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.16em;text-transform:uppercase;padding:14px 22px;background:var(--white);color:var(--onyx);border:1px solid var(--border);cursor:pointer;transition:all .25s;white-space:nowrap;font-weight:500}
.dossier-print-btn:hover{background:var(--bloodstone)}

.dossier-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:28px}
.dossier-card{background:white;border:1px solid var(--border);padding:24px 26px;position:relative}
.dossier-card-lbl{font-size:var(--text-ui);letter-spacing:.26em;text-transform:uppercase;color:var(--bloodstone);display:block;margin-bottom:12px;font-weight:600}

/* Weather */
.do-weather{min-height:80px}
.do-weather-empty{font-size:var(--text-xs);color:var(--sage);font-style:italic;margin:0;line-height:1.6}
.do-weather-main{display:flex;align-items:center;gap:18px}
.do-weather-icon{font-size:2.4rem;line-height:1}
.do-weather-desc{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx)}
.do-weather-temp{font-size:.79rem;color:var(--sage);margin-top:3px;letter-spacing:.08em}
.do-weather-meta{font-size:var(--text-sm);color:var(--sage);margin-top:12px;letter-spacing:.08em}
.do-weather-note{font-size:var(--text-xs);color:rgba(182,166,151,.6);margin-top:12px;font-style:italic}

/* Contact card */
.dossier-contact{padding:4px 0}
.do-contact-name{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx);margin-bottom:3px}
.do-contact-role{font-size:var(--text-sm);color:var(--sage);letter-spacing:.1em;margin-bottom:10px}
.do-contact-phone{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--bloodstone);text-decoration:none;display:inline-block;margin-bottom:12px;letter-spacing:.04em;font-weight:400}
.do-contact-note{font-size:var(--text-ui);color:var(--sage);line-height:1.65;font-style:italic;margin:0}

/* Run-of-Show mirror */
.dossier-ros{background:white;border:1px solid var(--border);padding:24px 26px;margin-bottom:18px}
.do-ros-empty{font-size:var(--text-xs);color:var(--sage);font-style:italic;margin:0}
.do-ros-list{}
.do-ros-row{display:flex;align-items:center;gap:14px;padding:10px 0;border-bottom:1px solid rgba(221,213,205,.5);font-size:.72rem}
.do-ros-row:last-child{border-bottom:none}
/* 2026-08-06 type audit: this was 'Courier New' — a FOURTH family on a
   client-facing screen (brand/brand.json allows three). It is rendered live by
   app/client-portal.html (the day-of run of show), so it was not orphaned.
   The monospace was reached for to keep the times column-aligned, which is what
   tabular figures do — so Montserrat + tnum keeps the alignment and drops the
   family. */
.do-ros-time{font-family:'Montserrat',sans-serif;font-variant-numeric:tabular-nums;font-feature-settings:'tnum' 1;color:var(--bloodstone);width:70px;font-size:.79rem}
.do-ros-name{flex:1;color:var(--onyx)}
.do-ros-dur{font-size:.78rem;color:var(--sage);letter-spacing:.08em}

/* Vendors */
.dossier-vendors{background:white;border:1px solid var(--border);padding:24px 26px;margin-bottom:18px}
.dossier-vendors-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.dossier-vendor-add{font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.14em;text-transform:uppercase;padding:8px 14px;background:transparent;border:1px solid var(--border);color:var(--bloodstone);cursor:pointer;font-weight:500}
.dossier-vendor-add:hover{border-color:var(--bloodstone)}
.do-empty{font-size:var(--text-xs);color:var(--sage);font-style:italic;margin:0}
.do-vendor-row{display:grid;grid-template-columns:1.1fr 1.3fr 1fr 32px;gap:10px;margin-bottom:8px;align-items:center}
.do-vendor-row .fld-input{padding:9px 12px;font-size:.72rem}
.do-vendor-rm{background:transparent;border:1px solid var(--border);width:28px;height:28px;color:var(--sage);cursor:pointer;font-size:.8rem;padding:0}
.do-vendor-rm:hover{color:var(--bloodstone);border-color:var(--bloodstone)}

/* Checklist */
.dossier-checklist{background:white;border:1px solid var(--border);padding:24px 26px}
.do-check-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid rgba(221,213,205,.35);cursor:pointer;font-size:.78rem;color:var(--onyx);transition:opacity .2s}
.do-check-row:last-child{border-bottom:none}
.do-check-row input[type=checkbox]{width:16px;height:16px;accent-color:var(--bloodstone);cursor:pointer;flex-shrink:0}
.do-check-row input:checked + span{text-decoration:line-through;opacity:.45;font-style:italic}

/* LIVE STATE */
.live-hero{padding:88px 48px;text-align:center;background:linear-gradient(180deg,rgba(146,38,48,.04) 0%,transparent 100%);border-bottom:1px solid var(--border);position:relative}
.live-pulse{display:inline-block;width:10px;height:10px;background:#C1272D;border-radius:50%;margin-bottom:16px;animation:livePulse 1.4s ease-in-out infinite}
@keyframes livePulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.4)}}
.live-eyebrow{font-size:var(--text-xs);letter-spacing:.36em;text-transform:uppercase;color:#C1272D;display:block;margin-bottom:20px;font-weight:500}
.live-title{font-family:'Libre Baskerville',serif;font-size:clamp(1.6rem,4vw,2.4rem);color:var(--onyx);font-weight:400;margin:0 0 14px;letter-spacing:-.01em}
.live-sub{font-size:var(--text-body);color:rgba(45,16,21,.55);font-style:italic;margin:0 0 36px}
.live-progress{max-width:420px;margin:0 auto 14px;height:3px;background:rgba(221,213,205,.6);overflow:hidden}
.live-progress-fill{height:100%;background:var(--bloodstone);transition:width .8s ease;width:0%}
.live-timing{font-size:var(--text-sm);color:var(--sage);letter-spacing:.18em;text-transform:uppercase;margin:0}
.live-upcoming{padding:40px 48px;background:var(--ivory)}
.live-up-row{display:flex;gap:16px;padding:12px 0;border-bottom:1px solid rgba(221,213,205,.5);font-size:.8rem}
/* Same 2026-08-06 fourth-family fix as .do-ros-time above; this one is the LIVE
   state's upcoming-moments list, also rendered by app/client-portal.html.
   Tabular figures preserve the column of times. */
.live-up-row span{width:80px;font-family:'Montserrat',sans-serif;font-variant-numeric:tabular-nums;font-feature-settings:'tnum' 1;color:var(--bloodstone);font-size:.72rem}
.live-up-row.past{opacity:.35;text-decoration:line-through}
.live-up-row.upcoming{color:var(--onyx)}

/* KEEPSAKE STATE */
.keepsake-hero{padding:88px 48px;text-align:center;background:linear-gradient(135deg,rgba(201,168,76,.08),rgba(125,64,71,.04));border-bottom:1px solid var(--border)}
.keepsake-title{font-family:'Libre Baskerville',serif;font-size:clamp(1.8rem,4.4vw,2.8rem);color:var(--onyx);font-weight:400;margin:14px 0 20px;line-height:1.2}
.keepsake-title em{color:var(--bloodstone);font-style:italic}
.keepsake-hero .hero-rule{margin:18px auto}
.keepsake-sub{font-size:var(--text-body);color:var(--sage);line-height:1.8;margin:20px auto 0;max-width:540px;font-style:italic}
.keepsake-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;padding:40px 48px 72px;background:var(--ivory)}
.keepsake-card{background:white;border:1px solid var(--border);padding:28px 30px}
.keepsake-card-title{font-family:'Libre Baskerville',serif;font-size:var(--h3);color:var(--onyx);font-weight:400;margin:6px 0 10px}
.keepsake-card-sub{font-size:.79rem;color:var(--sage);line-height:1.7;margin:0 0 18px}
.keepsake-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;padding:12px 22px;background:transparent;border:1px solid var(--bloodstone);color:var(--bloodstone);cursor:pointer;transition:all .25s;font-weight:500}
.keepsake-btn:hover{background:var(--bloodstone);color:var(--white)}
.keepsake-btn-dark{background:var(--bloodstone);border-color:var(--bloodstone);color:var(--white)}
.keepsake-btn-dark:hover{background:var(--bloodstone-dk);border-color:var(--bloodstone-dk)}
.keepsake-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:8px;margin-top:18px}
.keepsake-photo-tile{aspect-ratio:1;display:block;overflow:hidden;border:1px solid var(--border);background:#FAFAFA}
.keepsake-photo-tile img{width:100%;height:100%;object-fit:cover;display:block}
.keepsake-photos-empty{font-size:var(--text-xs);color:rgba(182,166,151,.6);font-style:italic;padding:18px 0 0;grid-column:1/-1;text-align:center}
.keepsake-card-upsell{background:var(--ivory);color:var(--onyx);border-color:var(--border);border:2px solid rgba(184,147,90,.35)}
.keepsake-card-upsell .dossier-card-lbl{color:var(--gold)}
.keepsake-card-upsell .keepsake-card-title{color:var(--onyx-dk)}
.keepsake-card-upsell .keepsake-card-sub{color:var(--sage)}
.keepsake-upsell-list{list-style:none;padding:0;margin:0 0 22px;font-size:.78rem;color:var(--sage)}
.keepsake-upsell-list li{padding:6px 0;border-bottom:1px solid var(--border);letter-spacing:.04em}
.keepsake-upsell-list li::before{content:'—  ';color:var(--gold)}

/* Testimonial */
.keepsake-card-testimonial{grid-column:1/-1;background:linear-gradient(180deg,white 0%,rgba(201,168,76,.04) 100%)}
.testimonial-stars{display:flex;gap:6px;margin:14px 0 16px}
.tstar{background:transparent;border:none;font-size:1.8rem;color:rgba(201,168,76,.25);cursor:pointer;padding:0;line-height:1;transition:color .15s,transform .15s}
.tstar.filled{color:#C9A84C}
.tstar:hover{transform:scale(1.1)}
.tstar:disabled{cursor:default}
.testimonial-text{width:100%;min-height:90px;padding:14px 16px;font-family:'Libre Baskerville',serif;font-size:var(--text-body);color:var(--onyx);background:white;border:1px solid var(--border);resize:vertical;margin-bottom:14px;line-height:1.7;font-style:italic}
.testimonial-text:focus{outline:none;border-color:var(--bloodstone)}
.testimonial-consent{display:flex;gap:10px;align-items:flex-start;font-size:var(--text-ui);color:var(--sage);line-height:1.6;margin-bottom:18px;cursor:pointer}
.testimonial-consent input{width:16px;height:16px;accent-color:var(--bloodstone);margin-top:1px;flex-shrink:0}
.testimonial-thanks{font-size:.72rem;color:var(--sage-dk);font-style:italic;margin:14px 0 0;letter-spacing:.02em}

@media (max-width:720px){
  .dossier-wrap,.keepsake-grid,.live-hero,.live-upcoming,.keepsake-hero{padding-left:24px;padding-right:24px}
  .dossier-grid,.keepsake-grid{grid-template-columns:1fr}
  .do-vendor-row{grid-template-columns:1fr 32px;grid-auto-rows:auto;gap:6px}
  .do-vendor-row .fld-input:nth-child(1),
  .do-vendor-row .fld-input:nth-child(2),
  .do-vendor-row .fld-input:nth-child(3){grid-column:1/-1}
  .do-vendor-rm{grid-column:1/-1;justify-self:end}
  .dossier-hdr{flex-direction:column;align-items:flex-start}
  .dossier-print-btn{width:100%}
}

/* ── ANNOTATE OVERLAY ── */
.annotate-toolbar{
  margin:0 48px;padding:10px 16px;background:var(--white);border:1px solid var(--border);
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;border-bottom:none;
  box-shadow:var(--sh);
}
.annotate-toggle{
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;
  padding:7px 16px;border:1px solid var(--border);background:var(--white);color:var(--sage);cursor:pointer;transition:all .25s;font-weight:500;
}
.annotate-toggle.active{background:var(--bloodstone);border-color:var(--bloodstone);color:var(--white)}
.annotate-toggle:hover:not(.active){border-color:var(--bloodstone);color:var(--bloodstone)}
.annotate-hint{font-family:'Montserrat',sans-serif;font-size:.71rem;color:var(--sage);font-style:italic;font-weight:300}
.annotate-clear{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--sage);background:none;border:none;cursor:pointer;margin-left:auto;padding:4px 8px;transition:color .2s;font-weight:500}
.annotate-clear:hover{color:var(--bloodstone)}
.iframe-annotate-wrap{position:relative}
.annotate-overlay{position:absolute;inset:0;z-index:10;cursor:crosshair;display:none}
.annotate-overlay.active{display:block}
.annotate-pin{
  position:absolute;width:24px;height:24px;background:var(--bloodstone);border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:.72rem;color:var(--white);
  font-family:'Montserrat',sans-serif;font-weight:700;cursor:pointer;transform:translate(-50%,-50%);
  box-shadow:0 2px 8px rgba(146,38,48,.4);transition:transform .2s;z-index:11;
}
.annotate-pin:hover{transform:translate(-50%,-50%) scale(1.2)}
.annotate-bubble{
  position:absolute;background:var(--white);border:1px solid var(--border);padding:12px 14px;
  min-width:200px;max-width:280px;z-index:20;box-shadow:var(--shl);
  display:none;
}
.annotate-bubble.open{display:block}
.annotate-bubble input{
  width:100%;padding:8px 10px;border:1px solid var(--border);background:var(--ivory);
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);color:var(--onyx);outline:none;font-weight:300;
}
.annotate-bubble input:focus{border-color:var(--bloodstone)}
.annotate-bubble-btns{display:flex;gap:8px;margin-top:8px}
.annotate-save-btn{flex:1;padding:7px;background:var(--bloodstone);border:none;color:var(--white);font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;cursor:pointer;font-weight:600}
.annotate-del-btn{padding:7px 10px;background:var(--white);border:1px solid var(--border);color:var(--sage);font-family:'Montserrat',sans-serif;font-size:var(--text-xs);cursor:pointer;transition:all .2s}
.annotations-list{margin:0 48px;border:1px solid var(--border);border-top:none;background:var(--ivory);display:none}
.annotations-list.has-items{display:block}
.annotations-list-title{font-family:'Montserrat',sans-serif;padding:12px 18px;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);border-bottom:1px solid var(--border);font-weight:600}
.annotation-row{padding:10px 18px;display:flex;align-items:flex-start;gap:12px;border-bottom:1px solid var(--border);font-size:.79rem;color:var(--onyx)}
.annotation-row:last-child{border-bottom:none}
.ann-num{width:22px;height:22px;background:var(--bloodstone);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.78rem;color:var(--white);font-family:'Montserrat',sans-serif;font-weight:700;flex-shrink:0;margin-top:1px}
.ann-push-btn{margin:10px 18px;font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:9px 20px;cursor:pointer;transition:background .3s;font-weight:600}
.ann-push-btn:hover{background:var(--bloodstone-dk)}
/* ── QR CODE ── */
/* ── GUEST-SUBMIT RSVP SECTION ── */
.guest-rsvp-section{
  margin-bottom:40px;padding:32px 36px;
  background:linear-gradient(135deg,rgba(146,38,48,.04),rgba(201,168,76,.04));
  border:1px solid rgba(146,38,48,.18);border-left:3px solid var(--bloodstone)
}
.guest-rsvp-hdr{margin-bottom:22px}
.guest-rsvp-hdr .qr-title{font-size:1.1rem;margin:6px 0 8px}
.guest-rsvp-panel{}
.guest-rsvp-enable{
  display:inline-block;padding:16px 34px;font-family:'Montserrat',sans-serif;font-size:var(--text-xs);
  letter-spacing:.22em;text-transform:uppercase;background:var(--bloodstone);color:var(--white);
  border:none;cursor:pointer;transition:background .25s;font-weight:600
}
.guest-rsvp-enable:hover{background:var(--bloodstone)}
.guest-rsvp-hint{font-size:var(--text-ui);color:var(--onyx);margin-top:12px;line-height:1.75}
.guest-rsvp-url-row{display:flex;gap:8px;margin-bottom:24px}
/* Third and last 'Courier New' in this file (2026-08-06). Kept rather than
   removed even though `guest-rsvp-url-row` returns 0 matches anywhere under
   app/ or api/ — i.e. nothing renders it today. Retokenising it stops the
   fourth family reappearing if that markup is ever built. A little
   letter-spacing stands in for the monospace's URL legibility. */
.guest-rsvp-url-row .fld-input{flex:1;font-size:var(--text-sm);padding:11px 14px;font-family:'Montserrat',sans-serif;letter-spacing:.02em;color:var(--bloodstone);background:white;border-color:rgba(146,38,48,.25)}
.guest-rsvp-qr-wrap{display:flex;gap:28px;align-items:center;flex-wrap:wrap;background:white;padding:24px;border:1px solid var(--border)}
#guestRsvpQrCanvas{flex-shrink:0;background:var(--white);padding:12px;border:1px solid var(--border)}
.guest-rsvp-qr-actions{flex:1;min-width:220px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.guest-rsvp-qr-actions .qr-dl-btn{width:100%;max-width:260px;text-align:center}
@media (max-width:720px){
  .guest-rsvp-section{padding:22px 20px}
  .guest-rsvp-qr-wrap{flex-direction:column;align-items:stretch}
  #guestRsvpQrCanvas{align-self:center}
}

.qr-section{margin-bottom:40px;padding:28px 32px;border:1px solid var(--border);background:var(--white)}
.qr-title{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx);margin-bottom:4px}
.qr-sub{font-size:var(--text-ui);color:var(--onyx);margin-bottom:20px;line-height:1.75}
.qr-input-row{display:flex;gap:0;margin-bottom:16px}
.qr-input{flex:1;padding:11px 14px;border:1px solid var(--border);border-right:none;background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);outline:none;transition:border-color .3s;font-weight:300}
.qr-input:focus{border-color:var(--bloodstone)}
.qr-gen-btn{padding:var(--btn-pad-md);background:var(--bloodstone);border:none;color:var(--white);font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;cursor:pointer;white-space:nowrap;transition:background .3s;font-weight:600}
.qr-gen-btn:hover{background:var(--bloodstone-dk)}
.qr-output{display:none;align-items:flex-start;gap:24px;flex-wrap:wrap}
.qr-output.show{display:flex}
.qr-output .qr-canvas-wrap{padding:16px;background:white;border:1px solid var(--border)}
.qr-actions{display:flex;flex-direction:column;gap:10px;justify-content:center}
.qr-dl-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:10px 22px;cursor:pointer;transition:background .3s;font-weight:600}
.qr-dl-btn:hover{background:var(--bloodstone-dk)}
.qr-note{font-size:.71rem;color:var(--sage);font-style:italic;max-width:200px;line-height:1.65}
/* ── GUEST ADDRESS COLLECTOR ── */
.addr-section{margin-bottom:40px}
.addr-title{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx);margin-bottom:4px}
.addr-sub{font-size:var(--text-ui);color:var(--sage);margin-bottom:20px;line-height:1.7}
.addr-form{background:rgba(241,236,230,.5);border:1px solid var(--border);padding:24px 28px;margin-bottom:20px}
.addr-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
.addr-actions{display:flex;align-items:center;gap:12px;margin-top:14px;flex-wrap:wrap}
.addr-add-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:var(--btn-pad-md);cursor:pointer;transition:background .3s;font-weight:600}
.addr-add-btn:hover{background:var(--bloodstone-dk)}
.addr-import-btn,.addr-export-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;color:var(--onyx);background:transparent;border:1px solid var(--border);padding:9px 16px;cursor:pointer;transition:all .25s;font-weight:500}
.addr-import-btn{display:inline-block;font-size:var(--text-ui);letter-spacing:.14em;color:var(--bloodstone);padding:10px 14px}
.addr-import-btn:hover,.addr-export-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.addr-table-wrap{border:1px solid var(--border);overflow:auto}
.addr-table{width:100%;border-collapse:collapse;min-width:600px}
.addr-table th{font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;color:var(--sage);padding:9px 12px;background:rgba(221,213,205,.3);border-bottom:1px solid var(--border);text-align:left}
.addr-table td{padding:9px 12px;font-size:.72rem;border-bottom:1px solid var(--border);color:var(--onyx)}
.addr-table tr:last-child td{border-bottom:none}
.addr-empty{text-align:center;padding:32px;font-size:.79rem;color:var(--sage)}
.addr-count{font-size:.71rem;color:var(--sage);letter-spacing:.1em}
/* ── SEATING CHART ── */
.seating-section{margin-bottom:60px}
.seating-title{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx);margin-bottom:4px}
.seating-sub{font-size:var(--text-ui);color:var(--sage);margin-bottom:16px;line-height:1.75}
.seating-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.seating-tb-lbl{font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;color:var(--sage)}
.seating-tb-num{width:52px;padding:8px 10px;border:1px solid var(--border);font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--onyx);outline:none;text-align:center;background:var(--ivory);font-weight:300}
.seating-tb-num:focus{border-color:var(--bloodstone)}
.seating-apply-btn,.seating-export-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;padding:9px 18px;cursor:pointer;transition:all .25s;font-weight:600}
.seating-apply-btn{background:var(--bloodstone);border:none;color:var(--white)}
.seating-apply-btn:hover{background:var(--bloodstone-dk)}
.seating-export-btn{background:transparent;border:1px solid var(--border);color:var(--onyx)}
.seating-export-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.seating-layout{display:grid;grid-template-columns:200px 1fr;gap:16px;min-height:400px}
.seating-guests-col{border:1px solid var(--border);background:var(--ivory)}
.seating-guests-hdr{padding:10px 14px;background:rgba(221,213,205,.4);border-bottom:1px solid var(--border);font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage)}
.seating-guest-chip{padding:8px 14px;font-size:.79rem;color:var(--onyx);border-bottom:1px solid rgba(221,213,205,.5);cursor:grab;transition:background .2s;user-select:none}
.seating-guest-chip:hover{background:rgba(221,213,205,.4)}
.seating-guest-chip.seated{opacity:.35;cursor:default}
.seating-tables-col{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;align-content:start}
.seating-table-box{border:2px solid var(--border);padding:12px;background:white;min-height:120px}
.seating-table-box.drag-over{border-color:var(--bloodstone);background:rgba(125,64,71,.04)}
.seating-table-box .seating-table-name{font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--border)}
.seated-guest{font-size:var(--text-xs);color:var(--onyx);padding:3px 0;display:flex;align-items:center;justify-content:space-between}
.seated-remove{background:none;border:none;color:rgba(182,166,151,.4);cursor:pointer;font-size:.79rem;padding:0 2px}
.seated-remove:hover{color:var(--bloodstone)}
.seating-drop-hint{font-size:.71rem;color:rgba(182,166,151,.3);font-style:italic;text-align:center;margin-top:16px}
/* ── MEAL PREFERENCE ── */
.meal-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-right:5px;vertical-align:middle}
.meal-dot.chicken{background:#C9945A}
.meal-dot.fish{background:#5A90C9}
.meal-dot.vegetarian{background:#5A9E6A}
.meal-dot.vegan{background:#7DB85A}
.meal-dot.kids{background:#C9A84C}
.meal-dot.none{background:rgba(182,166,151,.3)}
.meal-badge{display:inline-flex;align-items:center;font-size:.72rem;padding:2px 8px;border-radius:0;white-space:nowrap}
.meal-badge.chicken{background:rgba(201,148,90,.12);color:#9A6A2E}
.meal-badge.fish{background:rgba(90,144,201,.12);color:#2E5A9A}
.meal-badge.vegetarian{background:rgba(90,158,106,.12);color:#2E7040}
.meal-badge.vegan{background:rgba(125,184,90,.12);color:#3A7020}
.meal-badge.kids{background:rgba(201,168,76,.12);color:#7A5A18}
.meal-badge.none{background:rgba(182,166,151,.1);color:var(--sage)}
/* ── MEAL SUMMARY PANEL ── */
.meal-summary{background:white;border:1px solid var(--border);padding:22px 28px;margin-bottom:32px}
.meal-summary-title{font-family:'Libre Baskerville',serif;font-size:var(--text-md);color:var(--onyx);margin-bottom:16px}
.meal-bars{display:flex;flex-direction:column;gap:10px}
.meal-bar-row{display:flex;align-items:center;gap:10px}
.meal-bar-lbl{font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--onyx);width:100px;flex-shrink:0}
.meal-bar-track{flex:1;height:6px;background:rgba(221,213,205,.4);border-radius:0;overflow:hidden}
.meal-bar-fill{height:100%;border-radius:0;transition:width .5s ease}
.meal-bar-fill.chicken{background:#C9945A}
.meal-bar-fill.fish{background:#5A90C9}
.meal-bar-fill.vegetarian{background:#5A9E6A}
.meal-bar-fill.vegan{background:#7DB85A}
.meal-bar-fill.kids{background:#C9A84C}
.meal-bar-count{font-size:.72rem;color:var(--onyx);min-width:18px;text-align:right}
/* ── RUN OF SHOW ── */
.ros-section{margin-bottom:60px}
.ros-toolbar{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.ros-start-lbl{font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;color:var(--sage)}
.ros-start-input{padding:8px 10px;border:1px solid var(--border);font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--onyx);outline:none;background:var(--ivory);width:90px;font-weight:300}
.ros-start-input:focus{border-color:var(--bloodstone)}
.ros-add-btn,.ros-export-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;padding:9px 18px;cursor:pointer;transition:all .25s;font-weight:600}
.ros-add-btn{background:var(--bloodstone);border:none;color:var(--white)}
.ros-add-btn:hover{background:var(--bloodstone-dk)}
.ros-export-btn{background:transparent;border:1px solid var(--border);color:var(--onyx)}
.ros-export-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.ros-list{border:1px solid var(--border);background:white}
.ros-row{display:grid;grid-template-columns:22px 10px 56px 1fr 78px 26px;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--border);transition:background .15s}
.ros-row:last-child{border-bottom:none}
.ros-row.drag-over{background:rgba(125,64,71,.04);outline:2px solid var(--bloodstone);outline-offset:-2px}
.ros-row.dragging{opacity:.4}
.ros-drag{color:rgba(182,166,151,.4);font-size:.85rem;cursor:grab;user-select:none;text-align:center}
.ros-drag:active{cursor:grabbing}
.ros-color-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.ros-time{font-family:'Libre Baskerville',serif;font-size:.8rem;color:var(--onyx);white-space:nowrap}
.ros-name-wrap{min-width:0}
.ros-name-input{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--onyx);border:none;background:transparent;padding:2px 4px;width:100%;outline:none;border-bottom:1px solid transparent;transition:border-color .2s;font-weight:400}
.ros-name-input:focus{border-bottom-color:var(--bloodstone)}
.ros-notes-input{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);color:var(--sage);border:none;background:transparent;padding:1px 4px;width:100%;outline:none;border-bottom:1px solid transparent;transition:border-color .2s;margin-top:2px;font-weight:300}
.ros-notes-input:focus{border-bottom-color:rgba(182,166,151,.4)}
.ros-dur-wrap{display:flex;align-items:center;gap:4px;justify-content:flex-end}
.ros-dur-input{width:40px;font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--onyx);border:1px solid transparent;background:transparent;padding:3px 4px;text-align:center;outline:none;transition:border-color .2s;font-weight:300}
.ros-dur-input:focus{border-color:var(--border)}
.ros-dur-lbl{font-size:.63rem;letter-spacing:.08em;text-transform:uppercase;color:var(--sage)}
.ros-del{background:none;border:none;color:rgba(182,166,151,.3);cursor:pointer;font-size:.72rem;padding:2px 4px;transition:color .2s}
.ros-del:hover{color:var(--bloodstone)}
.ros-foot{padding:10px 14px;background:rgba(221,213,205,.2);border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.ros-foot-lbl{font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;color:var(--sage)}
.ros-foot-val{font-family:'Libre Baskerville',serif;font-size:.86rem;color:var(--onyx)}
/* ── TABLE NAME GENERATOR ── */
.tng-toggle-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;padding:9px 18px;cursor:pointer;transition:all .25s;background:transparent;border:1px solid var(--border);color:var(--onyx);font-weight:500}
.tng-toggle-btn:hover,.tng-toggle-btn.active{border-color:var(--bloodstone);color:var(--bloodstone)}
.tng-panel{background:rgba(241,236,230,.5);border:1px solid var(--border);border-top:none;padding:20px 24px;margin-bottom:16px;display:none}
.tng-panel.open{display:block}
.tng-inner-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}
.tng-lbl{font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:var(--sage);flex-shrink:0}
.tng-select{flex:1;min-width:160px;padding:8px 12px;border:1px solid var(--border);font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);background:var(--ivory);outline:none;cursor:pointer;font-weight:300}
.tng-select:focus{border-color:var(--bloodstone)}
.tng-gen-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;padding:9px 18px;cursor:pointer;background:var(--bloodstone);border:none;color:var(--white);transition:all .25s;font-weight:600}
.tng-gen-btn:hover{background:var(--bloodstone-dk)}
.tng-shuffle-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;padding:9px 14px;cursor:pointer;background:transparent;border:1px solid var(--border);color:var(--onyx);transition:all .25s;font-weight:500}
.tng-shuffle-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.tng-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px;margin-bottom:12px}
.tng-chip{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--ivory);border:1px solid var(--border)}
.tng-chip-num{font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;color:var(--sage);white-space:nowrap;flex-shrink:0}
.tng-chip-input{flex:1;font-size:.72rem;color:var(--onyx);border:none;background:transparent;outline:none;font-family:'Montserrat',sans-serif;min-width:0;font-weight:300}
.tng-chip-input:focus{border-bottom:1px solid var(--bloodstone)}
.tng-apply-btn{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;padding:var(--btn-pad-sm);cursor:pointer;background:var(--bloodstone);border:none;color:var(--white);transition:background .25s;font-weight:600}
.tng-apply-btn:hover{background:var(--bloodstone-dk)}
/* ── RSVP FILTER + EXPORT ROW ── */
.rsvp-list-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:10px}
.rsvp-filter-row{display:flex;gap:6px;flex-wrap:wrap}
.rsvp-filter-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.12em;text-transform:uppercase;padding:6px 14px;background:transparent;border:1px solid var(--border);color:var(--onyx);cursor:pointer;transition:all .2s;font-weight:500}
.rsvp-filter-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.rsvp-filter-btn.active{background:var(--bloodstone);border-color:var(--bloodstone);color:var(--white)}
.rsvp-export-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;padding:6px 14px;background:transparent;border:1px solid var(--border);color:var(--onyx);cursor:pointer;transition:all .25s;font-weight:500}
.rsvp-export-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
/* ── PLUS-ONE CHIP ── */
.plus-one-chip{display:inline-block;font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;background:rgba(125,64,71,.08);color:var(--bloodstone);padding:1px 6px;margin-left:5px;vertical-align:middle}

/* ── RELATIONSHIP CHIPS ── */
.rel-chip{display:inline-flex;align-items:center;font-family:'Montserrat',sans-serif;font-size:var(--text-xs);font-weight:600;letter-spacing:.14em;text-transform:uppercase;padding:3px 9px;margin:0;border:none;border-radius:0;white-space:nowrap}
.rel-chip.rel-bride_family{background:rgba(140,92,106,.1);color:#6B3D4E}
.rel-chip.rel-groom_family{background:rgba(58,90,127,.1);color:#2E4A6B}
.rel-chip.rel-family{background:rgba(146,38,48,.08);color:var(--bloodstone)}
.rel-chip.rel-friend{background:rgba(64,100,95,.1);color:var(--sage-dk)}
.rel-chip.rel-work{background:rgba(184,147,90,.12);color:#7A5020}
.rel-chip.rel-plus_one{background:rgba(45,16,21,.06);color:var(--sage)}

/* ── ADDRESS TOGGLE + PANEL (inside guest form) ── */
.rsvp-addr-toggle{background:transparent;border:1px dashed var(--border);width:100%;padding:12px 14px;font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:var(--onyx);cursor:pointer;margin-top:8px;transition:all .25s;font-weight:400}
.rsvp-addr-toggle:hover{color:var(--bloodstone);border-color:var(--bloodstone)}
.rsvp-addr-panel{background:rgba(221,213,205,.18);padding:18px;margin-top:10px;border:1px solid var(--border)}
.rsvp-addr-panel .rsvp-fld-row{margin-bottom:10px}
.rsvp-addr-line{font-size:.78rem;color:var(--sage);margin-top:4px;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── MEAL SUMMARY: zero-state bars + hint ── */
.meal-bar-row.is-zero{opacity:.45}
.meal-bar-row.is-zero .meal-bar-fill{background:rgba(182,166,151,.25)!important}
.meal-summary-hint{font-size:.72rem;color:var(--onyx);letter-spacing:.06em;margin-top:14px;text-align:right}

/* ── SEATING PROGRESS BAR ── */
.seating-progress{background:rgba(221,213,205,.2);padding:16px 20px;margin-bottom:18px;border-left:3px solid var(--bloodstone)}
.seating-progress:empty{display:none}
.seating-prog-empty{font-size:.78rem;color:var(--sage);font-style:italic}
.seating-prog-bar{height:6px;background:rgba(221,213,205,.5);overflow:hidden;margin-bottom:8px}
.seating-prog-fill{height:100%;background:var(--bloodstone);transition:width .4s ease}
.seating-prog-fill.done{background:var(--success)}
.seating-prog-label{font-size:var(--text-xs);color:var(--onyx);letter-spacing:.08em}
.seating-prog-check{color:var(--success);font-weight:500;margin-left:10px}

/* ── MOBILE CARDS: hidden on desktop, table hidden on mobile ── */
.rsvp-cards{display:none}
.rsvp-card{background:white;border:1px solid var(--border);padding:16px 18px;margin-bottom:10px;position:relative}
.rsvp-card-hdr{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px}
.rsvp-card-name{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx);line-height:1.3}
.rsvp-card-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.rsvp-card-kv{display:flex;justify-content:space-between;gap:12px;font-size:.72rem;padding:5px 0}
.rsvp-card-kv > span{color:var(--sage);text-transform:uppercase;letter-spacing:.08em;font-size:var(--text-ui)}
.rsvp-card-kv > strong{color:var(--onyx);font-weight:500;text-align:right;max-width:70%;word-break:break-word}
.rsvp-card-empty{text-align:center;padding:32px;font-size:.72rem;color:var(--sage);font-style:italic}
@media (max-width:720px){
  .rsvp-table{display:none!important}
  .rsvp-cards{display:block}
  .rsvp-stats{grid-template-columns:1fr 1fr}
  .rsvp-fld-row{grid-template-columns:1fr!important}
  .seating-toolbar{flex-wrap:wrap;gap:8px}
}
/* ── SEATING CHIP MEAL DOT ── */
.seating-guest-chip{padding:8px 14px;font-size:.79rem;color:var(--onyx);border-bottom:1px solid rgba(221,213,205,.5);cursor:grab;transition:background .2s;user-select:none;display:flex;align-items:center;gap:6px}
/* ── SOCIAL ASSETS ── */
.social-assets-modal{display:none;position:fixed;inset:0;background:var(--overlay-bg);z-index:700;align-items:center;justify-content:center;padding:16px}
.social-assets-modal.open{display:flex}
.social-box{background:var(--white);width:100%;max-width:700px;max-height:92vh;overflow-y:auto;box-shadow:var(--shl)}
.social-box-hdr{background:var(--ivory);padding:22px 28px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border)}
.social-box-title{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx-dk)}
.social-close{background:none;border:none;color:var(--sage);font-size:1.5rem;cursor:pointer;padding:0;width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:color .2s}
.social-tabs{display:flex;border-bottom:1px solid var(--border)}
.social-tab{flex:1;padding:12px;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--sage);background:transparent;border:none;cursor:pointer;transition:all .25s;font-family:'Montserrat',sans-serif;font-weight:500}
.social-tab.active{color:var(--onyx);border-bottom:2px solid var(--bloodstone)}
.social-preview-area{padding:24px;display:flex;justify-content:center}
.social-canvas-wrap{position:relative;width:270px;height:480px;flex-shrink:0}
.social-canvas-wrap canvas{width:100%;height:100%}
.social-controls{padding:0 24px 24px;display:flex;flex-direction:column;gap:12px}
.social-dl-btn{font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.2em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:12px;cursor:pointer;transition:background .3s;width:100%;font-weight:600}
.social-dl-btn:hover{background:var(--bloodstone-dk)}
.social-regen-btn{font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.2em;text-transform:uppercase;color:var(--onyx);background:var(--white);border:1px solid var(--border);padding:11px;cursor:pointer;transition:all .25s;width:100%;font-weight:500}
.social-regen-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
/* ── VENDOR KIT MODAL ── */
.vendor-modal{display:none;position:fixed;inset:0;background:var(--overlay-bg);z-index:700;align-items:center;justify-content:center;padding:16px}
.vendor-modal.open{display:flex}
.vendor-box{background:var(--white);width:100%;max-width:640px;max-height:92vh;overflow-y:auto;box-shadow:var(--shl)}
.vendor-box-hdr{background:var(--ivory);padding:22px 28px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border)}
.vendor-box-title{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx-dk)}
.vendor-close{background:none;border:none;color:var(--sage);font-size:1.5rem;cursor:pointer;padding:0;width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:color .2s}
.vendor-body{padding:32px}
.vendor-event-title{font-family:'Libre Baskerville',serif;font-size:1.8rem;color:var(--onyx);margin-bottom:4px}
.vendor-event-sub{font-size:var(--text-ui);color:var(--sage);letter-spacing:.1em;margin-bottom:28px}
.vendor-section{margin-bottom:24px;padding-bottom:24px;border-bottom:1px solid var(--border)}
.vendor-section:last-of-type{border-bottom:none}
.vendor-sec-lbl{font-size:var(--text-ui);letter-spacing:.26em;text-transform:uppercase;color:var(--sage);margin-bottom:10px;display:block}
.vendor-palette-row{display:flex;gap:8px}
.vendor-swatch{height:48px;flex:1;border:1px solid rgba(0,0,0,.07)}
.vendor-swatch-lbl{font-size:var(--text-xs);color:var(--sage);text-align:center;margin-top:4px}
.vendor-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.vendor-detail-item{}
.vendor-detail-key{font-size:.63rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage);display:block;margin-bottom:2px}
.vendor-detail-val{font-family:'Libre Baskerville',serif;font-size:var(--text-md);color:var(--onyx)}
.vendor-actions{display:flex;gap:10px;padding:0 32px 28px;flex-wrap:wrap}
.vendor-print-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:var(--btn-pad-md);cursor:pointer;transition:background .3s;font-weight:600}
.vendor-print-btn:hover{background:var(--bloodstone-dk)}
.vendor-copy-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--onyx);background:transparent;border:1px solid var(--border);padding:var(--btn-pad-md);cursor:pointer;transition:all .25s;font-weight:500}
.vendor-copy-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
/* ── APPROVE & SIGN CERT PRINT ── */
@media print{
  body > *:not(#certPrint){display:none!important}
  #certPrint{display:block!important}
}
#certPrint{display:none}
/* ── SUITE TOOL BUTTONS ── */
.suite-tools-bar{
  margin:0 48px;padding:14px 0;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  border-bottom:1px solid var(--border);
}
.suite-tool-btn{
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.16em;text-transform:uppercase;
  padding:10px 20px;border:1px solid var(--border);background:var(--white);color:var(--onyx);
  cursor:pointer;transition:all .25s;font-weight:500;
}
.suite-tool-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
/* ── HIDDEN INTENTIONS ── */
.intentions-card{margin:20px 48px 0;background:var(--white);border:1px solid var(--border);overflow:hidden;box-shadow:var(--sh)}
.intentions-sealed{padding:28px 32px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.intentions-sealed-txt{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx-dk)}
.intentions-sealed-txt em{font-style:italic;color:var(--bloodstone)}
.intentions-sealed-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);color:var(--sage);margin-top:5px;font-weight:300}
.intentions-reveal-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.22em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:12px 28px;cursor:pointer;transition:background .3s;white-space:nowrap;font-weight:600}
.intentions-reveal-btn:hover{background:var(--bloodstone-dk)}
.intentions-body{display:none;padding:0 32px 32px}
.intentions-body.open{display:block;animation:bfadeIn .5s ease}
.intentions-list{display:flex;flex-direction:column;gap:16px}
.intention-item{border:1px solid var(--border);padding:18px 20px;background:var(--ivory)}
.intention-heard-lbl{font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.22em;text-transform:uppercase;color:var(--bloodstone);opacity:.8;display:block;margin-bottom:5px;font-weight:600}
.intention-heard{font-family:'Libre Baskerville',serif;font-size:var(--text-md);color:var(--onyx-dk);font-style:italic;margin-bottom:12px}
.intention-built-lbl{font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage);opacity:.8;display:block;margin-bottom:4px;font-weight:600}
.intention-built{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage);line-height:1.75;font-weight:300}
/* ── INTENTIONS ADMIN EDIT PANEL ── */
.intentions-admin{margin:8px 48px 0;border:2px dashed rgba(201,168,76,.3);padding:24px;background:rgba(201,168,76,.04);display:none}
.intentions-admin.visible{display:block}
.int-admin-lbl{font-size:var(--text-ui);letter-spacing:.22em;text-transform:uppercase;color:var(--sage);display:block;margin-bottom:6px}
.int-admin-textarea{width:100%;padding:10px 12px;border:1px solid var(--border);background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);outline:none;resize:vertical;min-height:64px;transition:border-color .3s;margin-bottom:12px;font-weight:300}
.int-admin-textarea:focus{border-color:var(--bloodstone)}
.int-admin-item{border:1px solid var(--border);padding:14px;margin-bottom:10px;background:white}
.int-admin-save{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--white);background:var(--bloodstone);border:none;padding:11px 28px;cursor:pointer;transition:background .3s;font-weight:600}
.int-admin-save:hover{background:var(--bloodstone-dk)}
.int-admin-add{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);background:transparent;border:1px solid var(--border);padding:9px 18px;cursor:pointer;margin-right:10px;transition:all .25s;font-weight:500}
.int-admin-add:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
/* ── SUITE SHARE BUTTON ── */
.suite-share-btn{
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;
  color:var(--sage);background:var(--white);border:1px solid var(--border);
  padding:10px 20px;cursor:pointer;transition:all .25s;font-weight:500;
}
.suite-share-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}

/* ── SUITE DEADLINE COUNTDOWN ── */
.suite-deadline{
  background:rgba(146,38,48,.04);border-bottom:1px solid var(--border);
  padding:14px 48px;text-align:center;
}
.dl-sentence{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx);font-style:italic;margin:0;line-height:1.7;font-weight:300}
.dl-sentence strong{color:var(--bloodstone);font-style:italic;font-weight:700;font-size:var(--text-body)}

/* ── BRIEF SUMMARY CARD ── */
.brief-summary-card{margin:20px 48px 0;border:1px solid var(--border);overflow:hidden}
.brief-summary-toggle{
  padding:15px 22px;background:rgba(241,236,230,.5);
  display:flex;justify-content:space-between;align-items:center;
  cursor:pointer;transition:background .25s;
}
.brief-summary-toggle:hover{background:var(--greige)}
.brief-summary-toggle-lbl{font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--onyx)}
.brief-summary-toggle-icon{font-size:var(--text-sm);color:var(--sage);transition:transform .3s;line-height:1}
.brief-summary-toggle-icon.open{transform:rotate(45deg)}
.brief-summary-content{display:none;padding:20px 22px}
.brief-summary-content.open{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}
.bsc-item{display:flex;flex-direction:column;gap:3px}
.bsc-lbl{font-size:.63rem;letter-spacing:.24em;text-transform:uppercase;color:var(--sage)}
.bsc-val{font-family:'Libre Baskerville',serif;font-size:.85rem;color:var(--onyx);line-height:1.3}
.bsc-palette{display:flex;gap:5px;margin-top:4px}
.bsc-swatch{width:22px;height:22px;border:1px solid rgba(0,0,0,.08)}

/* ── ITEMS CHECKLIST ── */
.items-section{margin:20px 48px 0}
.items-sec-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.items-sec-title{font-family:'Montserrat',sans-serif;font-size:var(--text-md);font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx)}
.items-sec-sub{font-size:.84rem;color:rgba(201,168,76,.9);letter-spacing:.08em;font-weight:800}
.items-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.item-card{border:1px solid var(--border);padding:12px 14px;display:flex;flex-direction:column;gap:4px;background:white}
.item-card-top{display:flex;align-items:center;gap:8px}
.item-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.item-status-dot.pending{background:rgba(182,166,151,.3)}
.item-status-dot.in_progress{background:var(--bloodstone);animation:pulse 1.8s infinite}
.item-status-dot.ready{background:var(--success)}
.item-name{font-size:var(--text-body);color:var(--onyx);font-weight:600}
.item-status-txt{font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;color:var(--onyx);font-weight:600}
.item-view-btn{display:inline-block;margin-top:6px;font-size:var(--text-sm);letter-spacing:.1em;text-transform:uppercase;color:var(--sage);text-decoration:none;border:1px solid var(--sage);border-radius:0;padding:2px 7px;font-weight:600;transition:all .2s}
.item-view-btn:hover{color:var(--onyx);border-color:var(--onyx);background:rgba(0,0,0,.03)}

/* ── BRANDBOOK GRID (per-piece preview slots) ── */
.brandbook-grid{
  display:grid;grid-template-columns:repeat(2,1fr);
  gap:48px;padding:64px 48px;background:var(--ivory);
  align-content:start;
  max-width:1200px;margin:0 auto;
}
.bb-slot{
  background:#fff;border:1px solid rgba(45,16,21,.1);
  display:flex;flex-direction:column;overflow:hidden;
  transition:all .3s ease;
  box-shadow:0 2px 8px rgba(45,16,21,.06);
}
.bb-slot:hover{
  transform:translateY(-4px);
  box-shadow:0 16px 48px rgba(45,16,21,.12);
}
.bb-preview{
  position:relative;aspect-ratio:4/5;background:#2D1015;
  display:flex;align-items:center;justify-content:center;overflow:hidden;
}
.bb-preview.empty::before{
  content:'';position:absolute;inset:0;
  background:
    linear-gradient(135deg,rgba(64,100,95,.04) 25%,transparent 25%,transparent 50%,rgba(64,100,95,.04) 50%,rgba(64,100,95,.04) 75%,transparent 75%) 0/24px 24px,
    #2D1015;
}
.bb-preview-empty-label{
  position:relative;font-family:'Montserrat',sans-serif;font-size:var(--text-xs);
  letter-spacing:.28em;text-transform:uppercase;color:rgba(250,246,238,.4);
  text-align:center;line-height:1.8;
}
.bb-preview-empty-label strong{
  display:block;font-family:'Libre Baskerville',serif;font-size:.85rem;
  letter-spacing:.04em;color:rgba(250,246,238,.85);text-transform:none;
  font-weight:400;font-style:italic;margin-bottom:6px;
}
.bb-preview iframe,.bb-preview img{
  width:100%;height:100%;border:none;display:block;object-fit:cover;background:#fff;
}
.bb-preview iframe{pointer-events:none}
.bb-preview .bb-open{
  position:absolute;top:10px;right:10px;z-index:2;
  background:rgba(45,16,21,.75);color:#FAF6EE;border:none;padding:6px 12px;
  font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;
  text-transform:uppercase;cursor:pointer;backdrop-filter:blur(4px);font-weight:500;
}
.bb-preview .bb-open:hover{background:var(--bloodstone)}
.bb-meta{padding:42px 32px 36px;border-top:none;flex:1;display:flex;flex-direction:column}
.bb-meta-top{display:flex;flex-direction:column;align-items:flex-start;gap:16px;margin-bottom:24px}
.bb-piece-name{
  font-family:'Libre Baskerville',serif;font-size:1.3rem;color:var(--onyx);font-weight:400;font-style:normal;letter-spacing:.01em;line-height:1.2;
}
.bb-status-pill{
  font-size:.79rem;letter-spacing:.12em;text-transform:uppercase;
  padding:10px 16px;border-radius:0;
  display:inline-flex;align-items:center;gap:0;flex-shrink:0;border:none;
  font-weight:700;
}
.bb-status-pill::before{
  content:'';display:none;
}
.bb-status-pill.pending{color:#40645F;background:rgba(64,100,95,.15);}
.bb-status-pill.in_progress{color:var(--sage-dk);background:rgba(64,100,95,.15);}
.bb-status-pill.ready,.bb-status-pill.approved{color:var(--success);background:rgba(45,106,79,.15);}
.bb-status-pill.approved::after{content:' ✓';}
.bb-piece-sub{font-size:.78rem;color:var(--onyx);letter-spacing:.04em;line-height:1.55}
.bb-rev-counter{
  font-size:var(--text-ui);letter-spacing:.1em;text-transform:uppercase;font-weight:600;
  color:rgba(58,53,48,.45);margin-top:8px;margin-bottom:16px;
}
.bb-rev-counter.partial{color:rgba(58,53,48,.6);}
.bb-rev-counter.at-limit{color:var(--bloodstone);}
.bb-rev-counter.at-limit a{color:inherit;text-decoration:underline;text-underline-offset:2px;}
/* Zero-state reassurance: drop the shouty uppercase/tracking so "most pieces are
   perfect within one or two" reads as a calm sentence, not a scarcity label. */
.bb-rev-counter.reassure{text-transform:none;letter-spacing:0;font-weight:500;color:rgba(58,53,48,.52);}
.bb-piece-desc{
  margin-top:12px;padding:14px 16px;border:1px solid var(--border);
  background:var(--ivory);
}
.bb-piece-desc-lbl{
  display:block;font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold);margin-bottom:8px;font-weight:600;font-style:normal;
}
.bb-piece-desc-body{
  font-family:'Libre Baskerville',serif;font-size:.79rem;color:var(--onyx);
  line-height:1.8;font-style:italic;
}
.bb-piece-note{
  display:block;width:100%;box-sizing:border-box;
  margin-top:12px;padding:10px 12px;
  border:1px solid rgba(200,189,182,.3);background:rgba(200,189,182,.04);
  font-family:'Libre Baskerville',serif;font-size:var(--text-ui);color:var(--onyx);
  line-height:1.75;font-style:italic;resize:vertical;min-height:56px;
  outline:none;transition:border-color .2s,background .2s;
}
.bb-piece-note:focus{border-color:rgba(201,168,76,.5);background:#fff}
.bb-piece-note::placeholder{font-style:italic;color:rgba(182,166,151,.45)}
.bb-actions{display:flex;gap:12px;border-top:1px solid rgba(200,189,182,.15)}
.bb-action-approve,.bb-action-revise{
  flex:1;padding:15px 8px;border:none;background:none;cursor:pointer;
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;
  transition:all .25s;display:flex;align-items:center;justify-content:center;gap:6px;font-weight:500;
}
.bb-action-approve{color:var(--success);border-right:1px solid rgba(200,189,182,.15)}
.bb-action-approve:hover{background:rgba(45,106,79,.08)}
.bb-action-approve.active{background:rgba(45,106,79,.12);color:#245c3e;cursor:default}
.bb-action-revise{color:var(--bloodstone)}
.bb-action-revise:hover{background:rgba(125,64,71,.08)}
.bb-action-revise.open{background:rgba(125,64,71,.08)}
.bb-action-history{
  flex:1;padding:15px 8px;border:none;background:none;cursor:pointer;
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;
  font-weight:500;color:var(--ash);transition:all .25s;display:flex;align-items:center;justify-content:center;
  white-space:nowrap;
}
.bb-action-history:hover{background:rgba(45,16,21,.05)}
.bb-thumb{
  overflow:hidden;height:180px;background:#2D1015;
  position:relative;cursor:pointer;
  border-bottom:1px solid rgba(45,16,21,.08);
}
.bb-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.bb-thumb-frame{
  width:286%;height:514px;
  transform:scale(0.35);transform-origin:top left;
  pointer-events:none;border:none;background:#fff;
}
.bb-thumb-overlay{position:absolute;inset:0;cursor:pointer;}
.bb-thumb-html-badge{
  position:absolute;bottom:12px;left:50%;transform:translateX(-50%);
  background:rgba(45,16,21,.62);backdrop-filter:blur(6px);
  border:1px solid rgba(201,168,76,.28);border-radius:0;
  padding:5px 12px;white-space:nowrap;pointer-events:none;
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.14em;
  text-transform:uppercase;color:#C9A84C;font-weight:600;
}
.bb-file-btns{display:flex;gap:8px;margin-top:auto;padding-top:20px;}
.bb-file-btn{
  padding:10px 20px;font-family:'Montserrat',sans-serif;font-size:.72rem;
  letter-spacing:.16em;text-transform:uppercase;font-weight:600;cursor:pointer;
  border:none;text-decoration:none;display:inline-flex;align-items:center;gap:5px;
  transition:background .2s;
}
.bb-file-open{background:var(--success);color:#FAF6EE;}
.bb-file-open:hover{background:#3A7040;}
.bb-note-block{
  display:none;padding:18px 22px 16px;border-top:2px solid rgba(146,38,48,.1);
  background:var(--cream);
}
.bb-note-block.open{display:block}
/* Matches .cdl-revision-ta — its direct sibling (the deck-level revision note).
   Libre Baskerville is this portal's DISPLAY face (titles, names, numerals); every
   other field a client types into — .cdl-revision-ta, .fld-textarea, .thread-textarea,
   .testi-textarea, .approval-comment-block — is Montserrat. This one was serif at
   1rem/1.75, so it read oversized against its own "Tip:" line and the chips above it,
   didn't match how the note renders once saved (.rev-active-client-txt is Montserrat),
   and overflowed the 80px box — the placeholder was sliced mid-sentence. */
.bb-note-ta{
  width:100%;min-height:104px;padding:13px 14px;border:1px solid var(--border-d);
  background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:var(--text-body);font-style:normal;
  color:rgba(45,16,21,.8);resize:none;outline:none;transition:border-color .2s;box-sizing:border-box;line-height:1.8;border-radius:0;
}
.bb-note-ta::placeholder{color:rgba(45,16,21,.35);font-family:'Montserrat',sans-serif;font-style:italic}
.bb-note-ta:focus{border-color:rgba(146,38,48,.3)}
.bb-note-send{
  font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.15em;text-transform:uppercase;
  background:rgba(146,38,48,.07);color:var(--bloodstone);border:1px solid rgba(146,38,48,.25);padding:9px 16px;cursor:pointer;
  border-radius:0;transition:background .2s;font-weight:400;
}
.bb-note-send:hover{background:rgba(146,38,48,.14)}
.bb-note-confirm{font-size:.78rem;color:var(--onyx);letter-spacing:.06em}
/* Revision note blocks — client note + history */
.rev-active-section-lbl,.rev-hist-section-lbl,.rev-hist-version-lbl,.rev-hist-date-lbl,.rev-hist-designer-lbl,.rev-hist-pending-lbl{
  display:block;font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.22em;
  text-transform:uppercase;color:var(--bloodstone);margin-bottom:8px;font-weight:600;font-style:normal;
}
.rev-hist-section-lbl{color:var(--onyx);opacity:.45;margin-bottom:14px;}
.rev-hist-designer-lbl{color:var(--sage);}
.rev-hist-pending-lbl{color:var(--sage);font-style:italic;opacity:.7;}
.rev-active-client-txt,.rev-hist-client-txt,.rev-hist-designer-txt{
  font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx);
  line-height:1.7;font-style:normal;white-space:pre-wrap;word-break:break-word;
}
/* Historical version cards — full .bb-slot format, muted */
.bb-version-separator{
  display:flex;align-items:center;gap:12px;padding:18px 22px 0;
  font-size:.63rem;letter-spacing:.26em;text-transform:uppercase;
  color:rgba(182,166,151,.42);
}
.bb-version-separator::before,.bb-version-separator::after{
  content:'';flex:1;height:1px;background:rgba(200,189,182,.14);
}
.bb-slot-historical{opacity:.72;border-top:1px solid rgba(200,189,182,.08);}
.bb-slot-historical .bb-preview{border-bottom:1px solid rgba(200,189,182,.08);}
.bb-slot-historical .bb-actions{display:none!important;}
/* V0/V1/V2 version toggle strip */
.bb-version-strip{display:flex;border-bottom:1px solid var(--border);background:var(--ivory);gap:4px;padding:8px;border-radius:0;margin-bottom:16px;margin-top:6px;}
.bb-vtab{
  flex:1;padding:12px 10px;background:var(--white);border:1.5px solid var(--border);border-radius:0;
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:500;letter-spacing:.18em;text-transform:uppercase;
  color:var(--sage);cursor:pointer;transition:all .25s;white-space:nowrap;
}
.bb-vtab:last-child{border-right:1.5px solid var(--border)}
.bb-vtab:hover{color:var(--onyx);background:var(--ivory);border-color:var(--sage)}
.bb-vtab.bb-vtab-active{color:var(--white);background:var(--bloodstone);font-weight:700;border-color:var(--bloodstone)}
.reject-all-block{margin-top:20px;border-top:1px solid rgba(200,189,182,.12);padding-top:20px}
.reject-all-toggle{
  background:var(--white);border:1px solid var(--border);color:var(--onyx);
  font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.2em;text-transform:uppercase;
  padding:12px 28px;cursor:pointer;transition:all .3s;display:inline-flex;align-items:center;gap:10px;font-weight:500;
}
.reject-all-toggle:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.reject-all-notes{display:none;margin-top:18px;text-align:left}
.reject-all-notes.open{display:block}
.reject-all-notes .bb-piece-note{color:var(--onyx);border-color:var(--border)}
.reject-all-notes .bb-piece-note::placeholder{color:var(--sage)}
.reject-all-label{
  font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);margin-bottom:10px;
}
.brandbook-empty{
  grid-column:1/-1;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  min-height:calc(100vh - 360px);
  text-align:center;color:var(--sage);
  font-family:'Libre Baskerville',serif;font-style:italic;font-size:1.15rem;line-height:1.6;
}
@media (max-width:900px){
  .brandbook-grid{grid-template-columns:1fr;gap:32px;padding:48px 32px}
}
@media (max-width:600px){
  .brandbook-grid{padding:32px 20px;gap:24px}
  .bb-meta{padding:24px}
}

/* ── UPGRADE SECTION ── */
.upgrade-section{margin:32px 48px 8px;display:none;border-top:1px solid var(--border);padding-top:28px}
.upgrade-section.visible{display:block}
.upgrade-hdr{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.upgrade-eyebrow{font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--bloodstone);font-family:'Montserrat',sans-serif;font-weight:600}
.upgrade-title{font-family:'Libre Baskerville',serif;font-size:1.15rem;color:var(--onyx);margin-bottom:4px}
.upgrade-sub{font-size:.78rem;color:rgba(45,16,21,.55);line-height:1.7;margin-bottom:24px;max-width:480px}
.upgrade-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.upgrade-card{border:1px solid var(--border);background:var(--white);padding:24px 22px;display:flex;flex-direction:column;gap:6px;position:relative;transition:border-color .25s,box-shadow .25s}
.upgrade-card:hover{border-color:var(--bloodstone);box-shadow:var(--sh-hover)}
.upgrade-card-badge{font-size:var(--text-ui);letter-spacing:.18em;text-transform:uppercase;color:var(--bloodstone);font-family:'Montserrat',sans-serif;margin-bottom:2px;font-weight:600}
.upgrade-card-name{font-family:'Libre Baskerville',serif;font-size:1rem;color:var(--onyx)}
.upgrade-card-pieces{font-size:var(--text-sm);color:rgba(45,16,21,.55);line-height:1.8;margin:6px 0 10px;letter-spacing:.02em}
.upgrade-card-price{font-size:var(--text-ui);letter-spacing:.06em;color:rgba(45,16,21,.45);margin-bottom:14px}
.upgrade-card-price strong{font-size:var(--text-md);color:var(--onyx);font-weight:600;letter-spacing:0}
.upgrade-card-tagline{font-family:'Libre Baskerville',serif;font-size:.78rem;color:var(--bloodstone);font-style:italic;margin-bottom:6px}
.upgrade-card-btn{font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-family:'Montserrat',sans-serif;background:var(--bloodstone);color:var(--white);border:none;padding:11px 18px;cursor:pointer;transition:background .25s;text-align:center;text-decoration:none;display:block;margin-top:auto;font-weight:600}
.upgrade-card-btn:hover{background:var(--bloodstone-dk)}
@media(max-width:600px){.upgrade-section{margin:24px 20px 0}}

/* ── ADDON DESIGN PICKER OVERLAY ── */
.addon-overlay{position:fixed;inset:0;background:var(--overlay-bg);z-index:900;display:none;overflow-y:auto;-webkit-overflow-scrolling:touch}
.addon-overlay.open{display:block}
.addon-sheet{background:#FAF6EE;width:100%;max-width:800px;margin:60px auto 0;padding:40px 40px 48px;position:relative}
.addon-sheet-eyebrow{font-size:.63rem;letter-spacing:.32em;text-transform:uppercase;color:var(--bloodstone);margin-bottom:10px}
.addon-sheet-title{font-family:'Libre Baskerville',serif;font-size:1.35rem;font-weight:400;color:var(--onyx);margin-bottom:6px}
.addon-sheet-title em{font-style:italic;color:var(--bloodstone)}
.addon-sheet-sub{font-size:.79rem;color:var(--sage);line-height:1.7;margin-bottom:24px}
.addon-cat-row{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:16px}
.addon-cat-btn{font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;padding:5px 13px;border:1px solid rgba(45,16,21,.1);background:var(--ivory);color:var(--sage);cursor:pointer;font-family:'Montserrat',sans-serif;transition:all .18s;font-weight:500}
.addon-cat-btn.active{border-color:var(--onyx);color:var(--onyx);background:rgba(45,16,21,.04)}
.addon-pill-grid{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:20px}
.addon-pill{display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border:1px solid rgba(64,100,95,.3);background:var(--ivory);cursor:pointer;transition:all .18s;font-size:var(--text-xs);color:var(--onyx);font-family:'Montserrat',sans-serif;user-select:none;font-weight:300}
.addon-pill:hover:not(.owned):not(.maxed){border-color:rgba(64,100,95,.7)}
.addon-pill.on{border-color:var(--bloodstone);background:rgba(146,38,48,.07)}
.addon-pill.owned{border-color:rgba(64,100,95,.12);background:#F5F3EF;color:rgba(64,100,95,.4);cursor:default;text-decoration:line-through;pointer-events:none}
.addon-pill.maxed{opacity:.3;cursor:not-allowed}
.addon-pill-dot{width:8px;height:8px;border:1px solid rgba(64,100,95,.5);flex-shrink:0;transition:all .18s}
.addon-pill.on .addon-pill-dot{background:var(--bloodstone);border-color:var(--bloodstone)}
.addon-bottom-bar{display:flex;align-items:center;justify-content:space-between;padding:14px 0 0;border-top:1px solid rgba(45,16,21,.1);flex-wrap:wrap;gap:10px}
.addon-count-txt{font-size:var(--text-ui);color:var(--sage)}
.addon-count-txt strong{font-family:'Libre Baskerville',serif;font-size:.9rem;color:var(--bloodstone)}
.addon-proceed-btn{font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;font-family:'Montserrat',sans-serif;background:var(--bloodstone);color:var(--white);border:none;padding:13px 28px;cursor:pointer;transition:background .2s;font-weight:600}
.addon-proceed-btn:disabled{opacity:.35;cursor:not-allowed}
.addon-proceed-btn:not(:disabled):hover{background:var(--bloodstone)}
.addon-close{position:absolute;top:16px;right:16px;background:none;border:none;font-size:1.5rem;color:rgba(45,16,21,.3);cursor:pointer;line-height:1;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:color .18s}
.addon-close:hover{color:var(--onyx)}
.addon-back-link{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;font-weight:600;color:var(--sage-dk);background:none;border:none;cursor:pointer;padding:0;margin-bottom:16px;display:inline-block}
.addon-back-link:hover{color:var(--onyx)}
#addonDetailsWrap{margin-top:8px;margin-bottom:8px}
@media(max-width:600px){.addon-sheet{padding:28px 20px 40px}.addon-bottom-bar{flex-direction:column;align-items:flex-start}}

/* ── DOWNLOAD SECTION ── */
.download-section{
  margin:80px 48px 0;display:none;
  border:none;background:transparent;padding:0;
}
.download-section.visible{display:block}
.download-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:40px;padding-bottom:0;border-bottom:none}
.download-title{font-family:'Libre Baskerville',serif;font-size:1.8rem;color:var(--onyx);font-weight:400}
.download-ready-tag{font-size:.79rem;letter-spacing:.12em;text-transform:uppercase;padding:10px 16px;border:none;background:rgba(45,106,79,.15);color:var(--success);font-weight:700}
.download-grid{display:flex;flex-direction:column;gap:0}
.dl-note{font-size:.9rem;color:#2D1015;margin-top:40px;line-height:1.7;font-style:normal;letter-spacing:.02em}
/* per-piece download card */
.piece-dl-card{border:1px solid rgba(45,16,21,.1);background:#fff;padding:40px;margin-bottom:48px;box-shadow:0 2px 8px rgba(45,16,21,.06);transition:all .3s ease}
.piece-dl-card:hover{box-shadow:var(--sh-hover)}
.piece-dl-name{font-family:'Libre Baskerville',serif;font-size:1.5rem;color:var(--onyx);margin-bottom:32px;padding-bottom:0;border-bottom:none;font-weight:400}
.piece-dl-variants{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
@media(max-width:900px){.piece-dl-variants{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.piece-dl-variants{grid-template-columns:1fr}}
.pdv{border:1px solid rgba(45,16,21,.1);padding:24px;text-align:center;display:flex;flex-direction:column;align-items:center;background:#fff;transition:all .3s;box-shadow:0 1px 4px rgba(45,16,21,.04)}
.pdv:hover{box-shadow:0 8px 24px rgba(45,16,21,.1)}
.pdv.ready{border-color:rgba(45,106,79,.3);background:rgba(45,106,79,.03)}
.pdv-label{font-size:.79rem;letter-spacing:.12em;text-transform:uppercase;color:var(--onyx);margin-bottom:12px;font-weight:600}
.pdv-type{font-size:.78rem;font-weight:600;color:var(--onyx);margin-bottom:2px;font-family:'Libre Baskerville',serif;display:none}
.pdv-spec{font-size:.9rem;color:var(--onyx);margin-bottom:12px;line-height:1.6;letter-spacing:.02em}
.pdv-btn{display:block;width:100%;font-size:.79rem;letter-spacing:.12em;text-transform:uppercase;color:#FAF6EE;background:#922630;border:1.5px solid #922630;padding:12px;cursor:pointer;text-decoration:none;font-family:'Montserrat',sans-serif;transition:all .3s;text-align:center;font-weight:600;margin-top:16px}
.pdv-btn:hover{background:#FAF6EE;color:#922630;border-color:#922630}
.pdv-btn.pending{background:rgba(45,16,21,.08);color:var(--onyx);border-color:rgba(45,16,21,.1);cursor:default}
.pdv-btn.pending:hover{background:rgba(45,16,21,.08);color:var(--onyx)}

/* ── DESIGNER MESSAGE THREAD ── */
.message-thread{margin:20px 48px 0;border:1px solid var(--border);overflow:hidden;box-shadow:var(--sh)}
.thread-hdr{padding:14px 20px;background:var(--white);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}
.thread-hdr-title{font-family:'Libre Baskerville',serif;font-size:.9rem;color:var(--onyx-dk)}
.thread-hdr-sub{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--sage);letter-spacing:.12em;font-weight:500;text-transform:uppercase}
.thread-msgs{padding:16px 20px;display:flex;flex-direction:column;gap:12px;max-height:300px;overflow-y:auto;background:var(--ivory)}
.thread-empty{font-family:'Montserrat',sans-serif;text-align:center;padding:28px;font-size:.78rem;color:var(--sage);font-style:italic}
.msg-wrap{display:flex;flex-direction:column;max-width:82%}
.msg-wrap.from-designer{align-self:flex-start}
.msg-wrap.from-client{align-self:flex-end;align-items:flex-end}
.msg-author{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;color:var(--sage);margin-bottom:4px;font-weight:600}
.msg-body{padding:11px 15px;font-size:.79rem;line-height:1.65}
.from-designer .msg-body{background:var(--white);color:var(--onyx);border:1px solid var(--border)}
.from-client .msg-body{background:rgba(146,38,48,.07);color:var(--onyx);border:1px solid rgba(146,38,48,.14)}
.msg-time{font-family:'Montserrat',sans-serif;font-size:.63rem;color:var(--sage);margin-top:3px}
.thread-compose{border-top:1px solid var(--border);padding:12px 16px;display:flex;gap:10px;align-items:flex-end;background:var(--white)}
.thread-textarea{flex:1;padding:10px 12px;border:1px solid var(--border);background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);outline:none;resize:none;min-height:42px;max-height:100px;transition:border-color .3s;font-weight:300}
.thread-textarea:focus{border-color:var(--bloodstone)}
.thread-send{padding:10px 18px;background:var(--bloodstone);border:none;color:var(--white);font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;cursor:pointer;transition:background .3s;white-space:nowrap;align-self:stretch;font-weight:600}
.thread-send:hover{background:var(--bloodstone-dk)}

/* ── REVISION COUNTER STRIP ── */
.rev-counter-strip{display:none;align-items:center;justify-content:center;gap:16px;padding:14px 24px;margin:0 48px 16px;background:rgba(125,64,71,.05);border:1px solid rgba(125,64,71,.18);text-align:center;flex-wrap:wrap}
.rev-counter-strip.show{display:flex}
.rcs-label{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.18em;text-transform:uppercase;color:var(--sage);font-weight:600}
.rcs-count{font-family:'Montserrat',sans-serif;font-size:.78rem;font-weight:500;color:var(--onyx)}
.rcs-count strong{color:var(--bloodstone);font-family:'Libre Baskerville',serif;font-size:1rem;font-style:italic;font-weight:400}
.rcs-pips{display:flex;gap:6px;align-items:center}
.rcs-pip{width:10px;height:10px;border-radius:50%;background:rgba(146,38,48,.15);border:1px solid rgba(146,38,48,.25);transition:background .25s}
.rcs-pip.used{background:var(--bloodstone);border-color:var(--bloodstone)}

/* ── REVISION LIMIT MESSAGE ── */
.rev-limit-msg{display:none;margin:0 48px 24px;padding:28px 32px;background:#FAF6EE;border:1px solid rgba(146,38,48,.25);border-left:3px solid var(--bloodstone)}
.rlm-icon{font-family:'Libre Baskerville',serif;font-size:1.1rem;color:var(--bloodstone);margin-bottom:12px}
.rlm-title{font-family:'Libre Baskerville',serif;font-size:1.15rem;font-weight:400;color:var(--onyx);margin-bottom:8px}
.rlm-sub{font-family:'Montserrat',sans-serif;font-size:.84rem;line-height:1.7;color:var(--sage);margin:0 0 18px;max-width:520px}
.rlm-btn{display:inline-block;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;font-weight:600;color:#FAF6EE;background:var(--onyx);padding:12px 28px;text-decoration:none;transition:opacity .18s}
.rlm-btn:hover{opacity:.8}
@media(max-width:700px){
  .rev-counter-strip,.rev-limit-msg{margin-left:0;margin-right:0}
}

/* ── REVISION SUBMIT BAR ── */
.rev-submit-bar{display:none;align-items:center;justify-content:space-between;gap:14px;padding:14px 20px;margin:0 48px 24px;background:var(--white);border:1px solid var(--border);box-shadow:var(--sh)}
.rev-submit-bar.show{display:flex;position:sticky;bottom:54px;z-index:20;box-shadow:0 4px 24px rgba(28,10,13,.12)}
.rsb-note{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage);flex:1;font-weight:300}
.rsb-note strong{color:var(--onyx);font-weight:600}
.rsb-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;background:var(--bloodstone);color:var(--white);border:none;padding:9px 20px;cursor:pointer;transition:background .2s;white-space:nowrap;font-weight:600}
.rsb-btn:hover{background:var(--bloodstone-dk)}
.rsb-btn:disabled{opacity:.35;cursor:not-allowed}

/* ── LOCKED REVISION STATE ── */
.bb-action-locked{font-size:var(--text-sm);letter-spacing:.1em;text-transform:uppercase;color:rgba(140,58,46,.6);padding:6px 12px;background:rgba(140,58,46,.04);border:1px solid rgba(140,58,46,.18);cursor:default}

/* ── V2 PLACEHOLDER SECTION ── */
.v2-section{display:none;margin:0 48px 24px}
.v2-section.show{display:block}
.v2-section-sep{display:flex;align-items:center;gap:14px;padding:22px 0 16px;margin-top:8px}
.v2-section-sep-label{font-size:var(--text-ui);letter-spacing:.22em;text-transform:uppercase;color:var(--onyx);white-space:nowrap}
.v2-section-sep-badge{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;padding:3px 10px;border:1px solid rgba(45,16,21,.35);color:var(--onyx)}
.v2-section-sep-line{flex:1;height:1px;background:rgba(45,16,21,.07)}

/* ── REVISION HISTORY ── */
.revision-history{margin:20px 48px 0;background:var(--white);border:1px solid var(--border);padding:22px 28px;display:none;box-shadow:var(--sh)}
.revision-history.open{display:block}
.print-specs{display:none}
.print-specs.open{display:block}
.rev-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:8px}
.rev-title{font-family:'Libre Baskerville',serif;font-size:1.35rem;color:var(--onyx-dk)}
.rev-remaining{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;padding:7px 16px;border:1px solid var(--border);color:var(--sage);font-weight:500}
.rev-list{display:flex;flex-direction:column;gap:12px}
.rev-item{padding:16px 20px;border:1px solid var(--border);display:flex;align-items:center;gap:18px;background:var(--ivory)}
.rev-v{font-family:'Libre Baskerville',serif;font-size:1.3rem;color:var(--onyx-dk);min-width:36px}
.rev-info{flex:1}
.rev-date{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--sage);font-weight:400}
.rev-desc{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);font-style:italic;margin-top:4px;line-height:1.6;font-weight:300}
.rev-tag{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;padding:6px 14px;border:1px solid;font-weight:600}
.rev-tag.current{border-color:var(--bloodstone);color:var(--bloodstone)}
.rev-tag.reviewed{border-color:rgba(45,106,79,.35);color:var(--success)}

/* ── PRINT SPECS — EDITORIAL LEDGER ── */
.print-specs{margin:20px 48px 0}
.print-specs-hdr{font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:var(--onyx);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.print-specs-wrap{overflow-x:auto}
.print-specs-table{width:100%;border-collapse:collapse;min-width:640px}
.print-specs-table thead tr{border-bottom:1px solid var(--onyx)}
.print-specs-table th{padding:14px 16px;text-align:left;font-size:var(--text-sm);letter-spacing:.24em;text-transform:uppercase;color:var(--onyx);font-weight:400;white-space:nowrap}
.print-specs-table th:first-child{padding-left:0}
.print-specs-table td{padding:18px 16px;border-bottom:1px solid var(--border);font-family:'Libre Baskerville',serif;font-size:var(--text-md);color:var(--onyx);line-height:1.4;vertical-align:top}
.print-specs-table td:first-child{padding-left:0}
.print-specs-table tbody tr:hover{background:rgba(241,236,230,.3)}
.ps-piece{font-style:italic;color:var(--bloodstone)}
.ps-piece-idx{font-family:'Montserrat',sans-serif;font-style:normal;font-size:var(--text-sm);letter-spacing:.2em;color:var(--sage);margin-right:10px;vertical-align:middle}

/* ── A MEASURED SPECIFICATION, told apart from a house default (T7, 2026-08-05) ──
   Owner ruling: a card must show the REAL paper specified for that client. Where a
   piece carries a measured spec (`designs.piece_specs`) the table shows that instead
   of the tier default — and it must be VISIBLY distinguishable, because "this is your
   paper" and "this is what we'd normally use" are different claims and the client is
   entitled to know which one they are reading.
   ⚠ THESE TWO RULES WERE MISSING FOR A WHILE AND THE MARKING WAS INVISIBLE. The
   markup carried the classes, the test asserted the classes were present, and nothing
   styled them — a source-level assertion passing for a behavioural one. Found by
   re-checking rather than by anything going red. `test/print-specs-tier.test.mjs`
   now asserts these rules exist in this file, so the marking cannot go dark again.
   Quiet on purpose: a left rule and a small label, not a badge. The table is a
   reference document, and the measured row is the more authoritative one — it should
   read as confirmed, not as flagged. */
.ps-row-measured td{background:rgba(48,80,75,.035)}
.ps-row-measured td:first-child{box-shadow:inset 2px 0 0 var(--forest,#30504B)}
.ps-measured{position:relative;display:inline-block}
.ps-measured::after{content:'measured from your files';display:block;margin-top:3px;font-family:'Montserrat',sans-serif;font-style:normal;font-size:var(--text-xs,.62rem);letter-spacing:.14em;text-transform:uppercase;color:var(--forest,#30504B);opacity:.75}

/* ── MOODBOARD REFERENCE ── */
.moodboard-ref{margin:20px 64px 0;border:1px solid var(--border);overflow:hidden}
.moodboard-toggle{padding:15px 22px;background:rgba(241,236,230,.5);display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:background .25s}
.moodboard-toggle:hover{background:var(--greige)}
.moodboard-toggle-lbl{font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--onyx)}
.moodboard-toggle-icon{font-size:var(--text-sm);color:var(--sage);transition:transform .3s;line-height:1}
.moodboard-toggle-icon.open{transform:rotate(45deg)}
.moodboard-body{display:none}
.moodboard-body.open{display:block}
.moodboard-palette-row{padding:16px 22px;display:flex;gap:8px;border-bottom:1px solid var(--border);align-items:center}
.moodboard-swatch-block{flex:1;height:56px;border:1px solid rgba(0,0,0,.07)}
.moodboard-grid{padding:16px 22px;display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.moodboard-placeholder{aspect-ratio:1;background:rgba(221,213,205,.45);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;color:var(--sage);text-align:center;line-height:1.5}

/* ── SHARE MODAL ── */
.share-modal{display:none;position:fixed;inset:0;background:var(--overlay-bg);z-index:700;align-items:center;justify-content:center;padding:24px}
.share-modal.open{display:flex}
.share-box{background:var(--white);border:1px solid var(--border);padding:36px 40px;max-width:480px;width:100%;box-shadow:var(--shl)}
.share-box-title{font-family:'Libre Baskerville',serif;font-size:1.2rem;color:var(--onyx-dk);font-weight:400;margin-bottom:8px}
.share-box-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);color:var(--sage);line-height:1.75;margin-bottom:22px;font-weight:300}
.share-url-row{display:flex;margin-bottom:12px}
.share-url-input{flex:1;padding:11px 14px;border:1px solid var(--border);border-right:none;background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:.79rem;color:var(--onyx);outline:none;overflow:hidden;text-overflow:ellipsis;font-weight:300}
.share-copy-btn{padding:var(--btn-pad-md);background:var(--bloodstone);border:none;color:var(--white);font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;cursor:pointer;white-space:nowrap;transition:background .3s;font-weight:600}
.share-copy-btn:hover{background:var(--bloodstone-dk)}
.share-note{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage);font-style:italic;line-height:1.65;margin-bottom:20px}
.share-close-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);background:transparent;border:1px solid var(--border);padding:10px 22px;cursor:pointer;transition:all .3s;font-weight:500}
.share-close-btn:hover{border-color:var(--sage);color:var(--onyx)}
/* ── EDIT GUEST MODAL ── */
.edit-guest-box{background:var(--white);border:1px solid var(--border);padding:36px 40px;max-width:720px;width:100%;box-shadow:var(--shl);max-height:90vh;overflow-y:auto}
.edit-guest-hd{display:flex;align-items:center;justify-content:space-between}
.edit-guest-close{background:none;border:none;font-size:1rem;cursor:pointer;color:var(--sage);padding:4px 8px;line-height:1}
.edit-guest-close:hover{color:var(--bloodstone)}
@media(max-width:600px){.edit-guest-box{padding:24px 20px}}
/* ── EDIT / DELETE GUEST BUTTONS ── */
.rsvp-edit-btn{background:none;border:none;color:var(--sage);font-size:.9rem;cursor:pointer;padding:4px 6px;line-height:1;transition:color .2s}
.rsvp-edit-btn:hover{color:var(--onyx-dk)}

/* ── BRIEFING V3 — PROGRESS BAR ── */
.brief-prog{display:flex;align-items:center;gap:12px;padding:14px 48px;background:rgba(125,64,71,.06);border-bottom:1px solid var(--border)}
.brief-prog-lbl{font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:var(--sage)}
.brief-prog-bar{flex:1;max-width:200px;height:1px;background:rgba(46,46,46,.12)}
.brief-prog-fill{height:100%;background:var(--bloodstone);transition:width .6s ease;width:0%}
/* Persistent time/autosave reassurance strip under the progress bar (2026-07-23) */
.brief-reassure{margin:0;padding:10px 48px;background:rgba(125,64,71,.04);border-bottom:1px solid var(--border);font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.03em;line-height:1.55;color:var(--sage)}
.brief-reassure strong{color:var(--onyx-dk,#3A3530);font-weight:600}
@media(max-width:900px){.brief-reassure{padding:10px 32px}}
@media(max-width:600px){.brief-reassure{padding:9px 20px;font-size:.68rem}}
.brief-prog-pct{font-size:.78rem;color:var(--sage);letter-spacing:.1em;min-width:28px}

/* ── BRIEFING V3 — PREFILLED BAR ── */
.brief-prefilled{background:rgba(125,64,71,.09);border-top:2px solid var(--bloodstone);padding:20px 48px;display:flex;gap:48px;flex-wrap:wrap}
.bpf-item{display:flex;flex-direction:column;gap:3px}
.bpf-lbl{font-size:var(--text-xs);letter-spacing:.28em;text-transform:uppercase;color:var(--sage)}
.bpf-val{font-family:'Libre Baskerville',serif;font-size:.9rem;color:var(--onyx)}
.bpf-note{font-size:.72rem;color:var(--sage);opacity:.7}

/* ── BRIEFING V3 — PALETTE EXPLORER ── */
.palette-explorer{margin-bottom:8px}
.palette-explorer-intro{font-size:.92rem;color:var(--sage);line-height:1.85;margin-bottom:28px;max-width:640px}
.pal-tabs{display:flex;gap:0;border:1px solid var(--border);margin-bottom:28px;overflow:hidden}
.pal-tab{flex:1;padding:14px 10px;font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;color:var(--onyx);background:var(--ivory);border:none;border-right:1px solid var(--border);cursor:pointer;transition:all .25s;text-align:center;font-family:'Montserrat',sans-serif;font-weight:400}
.pal-tab:last-child{border-right:none}
.pal-tab:hover{background:var(--greige);color:var(--onyx)}
.pal-tab.active{background:var(--bloodstone);color:var(--white)}
.pal-panel{display:none}
.pal-panel.active{display:block}
.pal-regen-row{display:flex;justify-content:flex-end;margin:-14px 0 18px}
.pal-regen-btn{display:flex;align-items:center;gap:8px;padding:9px 18px;font-size:.76rem;letter-spacing:.14em;text-transform:uppercase;color:var(--onyx);background:transparent;border:1px solid var(--border);cursor:pointer;transition:all .25s;font-family:'Montserrat',sans-serif;font-weight:400}
.pal-regen-btn:hover{background:var(--greige);border-color:var(--sage)}
.pal-regen-icon{font-size:.95rem;line-height:1}
.pal-grid-v3{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pal-card-v3{border:1px solid var(--border);cursor:pointer;transition:all .3s;position:relative;overflow:hidden;background:var(--white)}
.pal-card-v3:hover{border-color:var(--sage);transform:translateY(-2px);box-shadow:var(--sh-hover)}
.pal-card-v3.selected{border-color:var(--bloodstone);border-width:2px}
.pal-card-v3.selected::after{content:"\2756";position:absolute;top:12px;right:14px;font-size:.79rem;color:var(--bloodstone)}
.pal-card-strips{height:72px;display:flex}
.pal-strip-v3{flex:1;transition:flex .4s}
.pal-card-v3:hover .pal-strip-v3{flex:1.3}
.pal-card-body-v3{padding:14px 16px}
.pal-card-name-v3{font-family:'Libre Baskerville',serif;font-size:1.15rem;font-weight:400;color:var(--onyx);margin-bottom:6px}
.pal-card-mood-v3{font-size:var(--text-body);color:#2D1015;letter-spacing:.04em;margin-bottom:12px;line-height:1.5}
.pal-card-hexes{display:flex;gap:10px;flex-wrap:wrap}
.pal-hex-chip{display:flex;align-items:center;gap:6px;font-size:var(--text-ui);color:#2D1015;letter-spacing:.02em}
.pal-hex-dot{width:9px;height:9px;border-radius:50%;border:1px solid rgba(0,0,0,.08);flex-shrink:0}
.pal-selected-preview{display:none;margin-top:20px;border:1px solid var(--border);background:var(--white);overflow:hidden}
.pal-selected-preview.show{display:block;animation:bfadeIn .4s ease}
@keyframes bfadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.pal-preview-strips{height:48px;display:flex}
.pal-preview-inner{padding:16px 18px;display:flex;justify-content:space-between;align-items:center}
.pal-preview-name{font-family:'Libre Baskerville',serif;font-size:1.15rem;font-weight:400;color:var(--onyx)}
.pal-preview-name em{font-style:italic;color:var(--bloodstone)}
.pal-preview-change{font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--sage);cursor:pointer;padding:6px 12px;border:1px solid var(--border);transition:all .25s}
.pal-preview-change:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.pal-divider{display:flex;align-items:center;gap:16px;margin:24px 0}
.pal-divider-line{flex:1;height:1px;background:var(--border)}
.pal-divider-txt{font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:#2D1015;white-space:nowrap}
.custom-pal{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
.col-fld label{font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;color:#2D1015;display:block;margin-bottom:9px}
.col-wrap{display:flex;gap:8px;align-items:center}
.col-pick{width:42px;height:42px;border:1px solid var(--border);cursor:pointer;padding:2px;background:var(--white);border-radius:0}
.col-hex{flex:1;padding:11px 13px;border:1px solid var(--border);font-family:'Montserrat',sans-serif;font-size:.92rem;color:var(--onyx);outline:none;transition:border-color .3s;background:var(--ivory);font-weight:300}
.col-hex:focus{border-color:var(--bloodstone)}
.col-label-name{font-size:var(--text-body);color:#2D1015;margin-top:7px;font-style:italic;min-height:18px}

/* ── BRIEFING V3 — VIBE GRID ── */
.vibe-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.vibe-opt{border:1px solid var(--border);padding:22px 18px;cursor:pointer;transition:all .3s;background:var(--white);position:relative}
.vibe-opt:hover{border-color:var(--sage);transform:translateY(-2px);box-shadow:0 6px 24px rgba(0,0,0,.07)}
.vibe-opt.selected{border-color:var(--bloodstone);background:rgba(125,64,71,.04)}
.vibe-opt.selected::after{content:"\2756";position:absolute;top:14px;right:16px;font-size:var(--text-sm);color:var(--bloodstone)}
.vibe-name{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx);display:block;margin-bottom:5px}
.vibe-desc{font-size:var(--text-xs);color:var(--sage);line-height:1.65}
.vibe-ref{font-size:.72rem;color:rgba(182,166,151,.55);font-style:italic;margin-top:6px;display:block;border-top:1px solid var(--border);padding-top:7px}
.vibe-open{display:block;margin-top:10px;font-size:var(--text-ui);letter-spacing:.18em;text-transform:uppercase;color:var(--bloodstone);font-weight:500}
.vibe-opt:hover .vibe-open{text-decoration:underline}
.mb-tile{aspect-ratio:1/1;padding:18px;border-radius:0;display:flex;flex-direction:column;justify-content:space-between;font-family:'Montserrat',sans-serif;color:#FAF6EE;position:relative;overflow:hidden}
.mb-tile-icon{font-family:'Libre Baskerville',Georgia,serif;font-size:28px;line-height:1;opacity:.85}
.mb-tile-ttl{font-family:'Libre Baskerville',Georgia,serif;font-style:italic;font-size:15px;line-height:1.35;font-weight:400}
.mb-tile-sub{font-size:.63rem;letter-spacing:.24em;text-transform:uppercase;opacity:.75;margin-top:6px}

/* ── BRIEFING V3 — TYPOGRAPHY ── */
.type-opts{display:flex;flex-direction:column;gap:10px}
.type-opt{border:1px solid var(--border);padding:20px 22px;cursor:pointer;transition:all .3s;background:var(--white);display:flex;justify-content:space-between;align-items:center}
.type-opt:hover{border-color:var(--sage)}
.type-opt.selected{border-color:var(--bloodstone)}
.type-sample{font-family:'Libre Baskerville',serif;color:var(--onyx);display:block;margin-bottom:6px}
.type-lbl{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:#2D1015}
.type-lbl-name{font-size:.71rem;letter-spacing:.2em;text-transform:uppercase;color:var(--bloodstone);display:block;margin-bottom:6px;opacity:.8}
.type-mark{font-size:var(--text-sm);color:var(--bloodstone);opacity:0;transition:opacity .2s}
.type-opt.selected .type-mark{opacity:1}
/* Recommended "let our designers choose" default card — the low-effort escape hatch */
.type-opt-default{background:linear-gradient(0deg,rgba(125,64,71,.045),rgba(125,64,71,.045)),var(--white);border-width:1.5px}
.type-opt-default .type-lbl-name{opacity:1;color:var(--bloodstone);font-weight:700}
.type-default-title{font-family:'Libre Baskerville',serif;font-size:1.08rem;color:var(--onyx);display:block;margin-bottom:6px;line-height:1.3}

/* ── PRINTING & DELIVERY — option cards ── */
.print-opt-card{border:1px solid var(--border);padding:18px 20px;cursor:pointer;transition:border-color .2s,background .2s;background:var(--white);position:relative}
.print-opt-card:hover{border-color:var(--sage)}
.print-opt-card.selected{border-color:var(--bloodstone);border-width:2px}
.print-opt-card.selected::after{content:"\2756";position:absolute;top:10px;right:12px;font-size:var(--text-ui);color:var(--bloodstone)}
.print-opt-name{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.06em;font-weight:600;color:var(--onyx);display:block;margin-bottom:5px}
.print-opt-desc{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--onyx);line-height:1.55;font-style:italic}

/* ── BRIEFING V3 — UPLOADS ── */
.upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.upload-zone{border:1px dashed var(--border);padding:28px 18px;text-align:center;cursor:pointer;transition:all .3s;background:var(--ivory);position:relative}
.upload-zone:hover,.upload-zone.drag{border-color:var(--bloodstone);background:rgba(125,64,71,.03)}
.upload-zone input{position:absolute;inset:0;opacity:0;cursor:pointer}
.upload-ico{font-size:1.2rem;margin-bottom:10px;opacity:.4}
.upload-ttl{font-family:'Libre Baskerville',serif;font-size:var(--text-md);color:var(--onyx);margin-bottom:4px}
.upload-sub{font-size:var(--text-ui);color:#2D1015;line-height:1.7}
.upload-prevs{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.upload-prev{width:60px;height:60px;object-fit:cover;border:1px solid var(--border)}

/* ── BRIEFING V3 — CHECKBOXES ── */
.check-list{display:flex;flex-direction:column;gap:10px}
.check-item{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:14px 16px;border:1px solid var(--border);background:var(--white);transition:border-color .25s}
.check-item:hover{border-color:var(--sage)}
.check-item.chk{border-color:var(--bloodstone);background:rgba(125,64,71,.04)}
.check-box{width:18px;height:18px;border:1px solid var(--border);flex-shrink:0;margin-top:2px;display:flex;align-items:center;justify-content:center;transition:all .2s}
.check-item.chk .check-box{background:var(--bloodstone);border-color:var(--bloodstone)}
.check-mark{font-size:.72rem;color:white;opacity:0;transition:opacity .2s}
.check-item.chk .check-mark{opacity:1}
.check-txt{font-size:.92rem;color:var(--onyx);line-height:1.55;flex:1}
.check-sub{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--onyx);font-style:italic;display:block;margin-top:4px;line-height:1.55}
.check-detail{display:none;max-height:0;overflow:hidden;transition:max-height .3s ease;margin-top:12px;padding-top:12px;border-top:1px dashed rgba(125,64,71,.18)}
.check-detail textarea,.check-detail input{width:100%;padding:11px 13px;border:1px solid var(--border);background:var(--ivory);font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--onyx);outline:none;transition:border-color .3s;font-weight:300;box-sizing:border-box}
.check-detail textarea{resize:vertical;min-height:76px;line-height:1.6;font-style:italic}
.check-detail textarea::placeholder,.check-detail input::placeholder{color:rgba(125,64,71,.42);font-style:italic}
.check-detail textarea:focus,.check-detail input:focus{border-color:var(--bloodstone)}
.check-item.chk .check-detail{display:block}

/* ── BRIEFING V3 — COLOR WHEEL ── */
.wheel-wrap{display:flex;flex-direction:column;align-items:center;gap:20px;margin:24px 0}
.wheel-canvas-wrap{position:relative;width:200px;height:200px;flex-shrink:0}
.wheel-canvas{border-radius:50%;cursor:crosshair;display:block}
.wheel-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:54px;height:54px;border-radius:50%;border:3px solid white;box-shadow:0 2px 12px rgba(0,0,0,.18);transition:background .2s;pointer-events:none}
.wheel-picked{display:flex;flex-direction:column;gap:12px;width:100%;max-width:340px}
.wheel-picked-preview{height:48px;border:1px solid var(--border);transition:background .2s;display:flex;align-items:center;justify-content:center}
.wheel-picked-hex{font-size:.8rem;color:white;letter-spacing:.12em;font-family:'Montserrat',sans-serif;font-weight:300;text-shadow:0 1px 3px rgba(0,0,0,.4)}
.wheel-actions{display:flex;gap:8px;flex-wrap:wrap}
.wheel-add-btn{flex:1;min-width:100px;padding:9px;font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;border:1px solid var(--border);background:var(--ivory);color:var(--onyx);cursor:pointer;font-family:'Montserrat',sans-serif;font-weight:500;transition:all .25s}
.wheel-add-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.wheel-selected-colors{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}
.wheel-chip{width:34px;height:34px;border-radius:50%;border:2px solid white;box-shadow:0 2px 8px rgba(0,0,0,.15);cursor:pointer;position:relative;transition:transform .2s;flex-shrink:0}
.wheel-chip:hover{transform:scale(1.12)}
.wheel-chip::after{content:"×";position:absolute;top:-5px;right:-5px;background:var(--onyx);color:white;font-size:var(--text-xs);width:13px;height:13px;border-radius:50%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s;line-height:13px;text-align:center}
.wheel-chip:hover::after{opacity:1}
.wheel-add-btn--full{width:100%;flex:none}
.wheel-name-hint{font-size:.76rem;color:var(--sage);line-height:1.7;margin-top:6px}
.wheel-name-found{color:var(--bloodstone);font-weight:500}
.wheel-intro{font-size:.79rem;color:var(--sage);line-height:1.8;margin-bottom:4px}
@media(min-width:600px){.wheel-wrap{flex-direction:row;align-items:flex-start}.wheel-picked{margin-top:8px}}

/* ── MINIMUM READABLE SIZES — clamp against very small root font sizes ── */
.fld-hint,.login-hint,.submit-note{font-size:max(var(--text-ui),12px)}
.thread-textarea,.fld-input,.fld-select,.fld-textarea,.login-fld input{font-size:max(.8rem,13px)}

/* ── ARIA live region ── */
[aria-live]{outline:none}

/* ── TABLET ── */
@media(min-width:681px) and (max-width:1024px){
  .hdr-top{padding:16px 28px}
  .pkg-strip{padding:16px 28px;gap:24px}
  .brief-hero{padding:56px 32px 48px}
  .form-wrap{padding:56px 32px 64px}
  .suite-note,.suite-sample-label,.suite-iframe-wrap,.piece-tabs-container,.piece-loading-hint,
  .approval-section,.annotate-toolbar,.annotations-list,
  .suite-tools-bar,.brief-summary-card,.items-section,
  .download-section,.message-thread,.revision-history,
  .print-specs,.moodboard-ref,.intentions-card,.intentions-admin{margin-left:28px;margin-right:28px}
  .suite-iframe-wrap iframe{height:75vh}
  .suite-hero{padding:28px 28px}
  .rsvp-stats{padding:22px 28px 0}
  .rsvp-body{padding:40px 28px 64px}
  .pal-grid-v3,.vibe-grid,.feeling-grid,.pal-grid{grid-template-columns:1fr 1fr}
  .fld-row{grid-template-columns:1fr 1fr}
  .ptab{padding:13px 18px}
  .brief-prog,.brief-prefilled,.brief-urgency .bub-inner{padding-left:32px;padding-right:32px}
  .keepsake-banner,.suite-deadline{padding-left:28px;padding-right:28px}
}

/* ── RESPONSIVE ── */
@media(max-width:680px){
  .hdr-top{padding:16px 20px}
  .pkg-strip{padding:16px 20px;gap:20px}
  .brief-hero{padding:52px 24px 44px}
  .fld-row{grid-template-columns:1fr}
  .pal-grid,.feeling-grid{grid-template-columns:1fr}
  .submit-block{padding:52px 24px}
  .suite-hero{padding:24px 20px}
  .suite-note,.suite-sample-label,.suite-iframe-wrap,.piece-tabs-container,.piece-loading-hint,.approval-section{margin-left:20px;margin-right:20px}
  .suite-iframe-wrap iframe{height:70vh}
  .ptab{padding:12px 16px;font-size:.78rem}
  .hdr-ref{display:none}
  .status-row{flex-wrap:wrap;gap:4px}
  .status-arrow{display:none}
  .approval-btns{flex-direction:column}
  .btn-approve,.btn-decline{min-width:0;width:100%}
  .rsvp-stats{padding:20px 20px 0;gap:10px}
  .rsvp-body{padding:32px 16px 60px}
  .rsvp-fld-row{grid-template-columns:1fr}
  .login-box{padding:32px 24px}
}

/* ── BRIEFING SUBMITTED PANEL ── */
#briefSubmittedPanel{display:none;flex-direction:column;background:var(--ivory)}
#briefSubmittedPanel.on{display:flex}

/* Status bar */
.bsp-status-bar{
  display:flex;align-items:center;gap:16px;
  padding:11px 64px;background:var(--white);border-bottom:1px solid var(--border);
}
.bsp-status-badge{
  display:inline-flex;align-items:center;gap:6px;
  background:rgba(45,106,79,.08);border:1px solid rgba(45,106,79,.25);
  color:rgba(45,106,79,.9);padding:5px 14px;
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);font-weight:700;
  letter-spacing:.18em;text-transform:uppercase;
}
.bsp-status-date{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--sage);}

/* "In our hands" hero */
.bsp-hero{
  padding:32px 64px 28px;background:var(--white);border-bottom:1px solid var(--border);
  text-align:left;
}
.bsp-hero-eyebrow{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.26em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:12px;}
.bsp-hero-title{font-family:'Libre Baskerville',serif;font-size:2.4rem;font-weight:400;color:var(--onyx-dk);line-height:1.1;margin-bottom:10px;}
.bsp-hero-title em{color:var(--bloodstone);font-style:italic;display:block;}
.bsp-hero-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-body);font-weight:300;color:var(--sage);line-height:1.8;max-width:520px;}

/* Cards container */
.bsp-inner{display:flex;flex-direction:column;max-width:900px;width:100%;margin:0 auto;padding:40px 0 80px;}

/* Designer note */
.bsp-designer-note{
  display:flex;align-items:flex-start;gap:16px;
  background:var(--white);border:1px solid var(--border);
  padding:22px 28px;margin-bottom:16px;
}
.bsp-dn-avatar{
  width:38px;height:38px;border-radius:50%;background:var(--sage);
  color:var(--white);display:flex;align-items:center;justify-content:center;
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);font-weight:700;flex-shrink:0;letter-spacing:.04em;
}
.bsp-dn-meta{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--sage);margin-bottom:10px;}
.bsp-dn-msg{font-size:var(--text-body);color:var(--onyx);line-height:1.85;font-style:italic;margin:0;}

/* Section cards */
.bsp-sec{
  background:var(--white);border:1px solid var(--border);margin-bottom:12px;
  border-left:3px solid rgba(45,16,21,.07);
}
.bsp-sec-hdr{
  display:flex;justify-content:space-between;align-items:center;
  padding:18px 28px 16px;border-bottom:1px solid var(--border);
}
.bsp-sec-title{
  font-family:'Libre Baskerville',serif;font-size:.96rem;font-weight:400;
  color:var(--onyx-dk);letter-spacing:-.01em;
}
.bsp-sec-badge{
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:700;
  letter-spacing:.18em;text-transform:uppercase;
  color:rgba(45,106,79,.9);background:rgba(45,106,79,.05);
  border:1px solid rgba(45,106,79,.18);padding:4px 10px;
  display:inline-flex;align-items:center;gap:5px;
}
/* Lock icon before badge text (✓ Locked) */
.bsp-sec-badge::before{
  content:'';display:inline-block;width:8px;height:10px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 10'%3E%3Crect x='0.5' y='4' width='7' height='5.5' rx='.8' fill='%232D6A4F' opacity='.85'/%3E%3Cpath d='M2 4V2.8a2 2 0 0 1 4 0V4' stroke='%232D6A4F' stroke-width='1.2' fill='none' stroke-linecap='round' opacity='.85'/%3E%3C/svg%3E") center/contain no-repeat;
  flex-shrink:0;
}

/* Field grid */
.bsp-sec-grid{display:grid;grid-template-columns:1fr 1fr;gap:0;}
.bsp-field{padding:18px 28px 20px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);}
.bsp-field:nth-child(even),.bsp-field--wide{border-right:none;}
.bsp-field:last-child,.bsp-field:nth-last-child(2):nth-child(odd){border-bottom:none;}
.bsp-field--wide{grid-column:1/-1;border-right:none;}
.bsp-fld-lbl{
  display:block;font-family:'Montserrat',sans-serif;font-size:.63rem;
  letter-spacing:.22em;text-transform:uppercase;color:var(--sage);
  margin-bottom:6px;font-weight:700;
}
/* Locked input-like field values */
.bsp-fld-val{
  display:block;font-family:'Montserrat',sans-serif;font-size:.84rem;
  color:var(--onyx);line-height:1.55;font-weight:300;
  background:var(--ivory);border:1px solid var(--border);
  padding:10px 14px;margin-top:2px;cursor:default;
}
.bsp-fld-val--long{
  font-size:.8rem;line-height:1.85;color:var(--onyx);font-weight:300;
  min-height:68px;
}

/* Blockquote */
.bsp-quote{
  margin:0;padding:18px 28px 20px 36px;border-top:1px solid var(--border);
  border-left:3px solid rgba(201,168,76,.38);
  font-family:'Libre Baskerville',serif;font-size:.84rem;font-style:italic;
  color:var(--onyx);line-height:1.85;
}
.bsp-quote::before{content:'\201C'}.bsp-quote::after{content:'\201D'}

/* Upload thumbnails */
.bsp-upload-thumbs{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;}
.bsp-upload-thumb{width:88px;height:88px;object-fit:cover;border-radius:0;border:1px solid var(--border);cursor:pointer;}
.bsp-upload-thumb:hover{opacity:.85;}

/* Pieces grid */
.bsp-pieces-grid{display:flex;flex-wrap:wrap;gap:8px;padding:20px 28px 24px;}
.bsp-piece-chip{
  font-family:'Montserrat',sans-serif;font-size:.78rem;font-weight:600;
  letter-spacing:.1em;text-transform:uppercase;padding:8px 16px;
  border:1px solid var(--border-d);background:var(--ivory);color:var(--onyx);
  display:inline-flex;align-items:center;gap:8px;
}
.bsp-piece-chip--designer{
  color:var(--sage-dk);background:rgba(64,100,95,.06);
  border:1px dashed rgba(64,100,95,.4);font-style:italic;
}
.bsp-bundle-tag{
  font-family:'Montserrat',sans-serif;font-size:.63rem;font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;
  color:var(--gold);border:1px solid rgba(184,147,90,.35);
  background:rgba(184,147,90,.07);padding:2px 7px;white-space:nowrap;
}
.bsp-pieces-count{
  font-family:'Montserrat',sans-serif;font-size:.63rem;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--sage);
  background:rgba(45,16,21,.04);border:1px solid var(--border);padding:4px 10px;
}
.bsp-tier-badge{
  font-family:'Montserrat',sans-serif;font-size:.63rem;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--gold);
  background:rgba(184,147,90,.07);border:1px solid rgba(184,147,90,.28);padding:4px 10px;
}

/* Palette swatches */
.bsp-palette-row{display:flex;gap:8px;margin-top:6px;align-items:center;flex-wrap:wrap;}
.bsp-palette-swatch{width:26px;height:26px;border-radius:50%;border:1px solid rgba(45,16,21,.12);flex-shrink:0;box-shadow:0 1px 4px rgba(45,16,21,.1);}

/* Footer */
.bsp-footer{padding:36px 0 0;text-align:center;}
.bsp-note{font-size:var(--text-ui);color:var(--sage);font-style:italic;}

/* "Read Only" locked notice bar — shown between hero and sections */
.bsp-readonly-bar{
  background:var(--white);border-bottom:1px solid var(--border);
  padding:10px 64px;display:flex;align-items:center;gap:10px;
}
.bsp-readonly-icon{
  width:16px;height:16px;flex-shrink:0;opacity:.6;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23395A55'%3E%3Crect x='3' y='7' width='10' height='8' rx='1' /%3E%3Cpath d='M5 7V5a3 3 0 0 1 6 0v2' stroke='%23395A55' stroke-width='1.5' fill='none'/%3E%3C/svg%3E") center/contain no-repeat;
}
.bsp-readonly-label{
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.22em;
  text-transform:uppercase;font-weight:700;color:var(--onyx);
}
.bsp-readonly-sub{
  font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage);
  font-weight:300;margin-left:4px;
}
@media(max-width:700px){
  .bsp-readonly-bar{padding:10px 20px;}
}

@media(max-width:700px){
  .bsp-status-bar{padding:11px 20px;}
  .bsp-hero{padding:36px 20px 32px;}
  .bsp-hero-title{font-size:1.6rem;}
  .bsp-inner{padding:24px 0 60px;}
  .bsp-sec-grid{grid-template-columns:1fr;}
  .bsp-field{border-right:none;}
  .bsp-sec-hdr,.bsp-field,.bsp-pieces-grid,.bsp-quote{padding-left:20px;padding-right:20px;}
}

/* ── FEATURE 8: designer working banner ── */
.designer-working-banner{
  display:none;background:rgba(146,38,48,.05);border-bottom:2px solid var(--bloodstone);padding:0;
}
.designer-working-banner.show{display:block;}
.dwb-inner{
  max-width:1000px;margin:0 auto;padding:14px 24px;
  display:flex;align-items:center;gap:14px;
}
.dwb-icon{font-size:1.4rem;flex-shrink:0;}
.dwb-text{font-family:'Montserrat',sans-serif;flex:1;font-size:var(--text-body);color:var(--onyx);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:300;}
.dwb-text strong{display:inline;font-weight:700;color:var(--bloodstone);white-space:nowrap;}
.dwb-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx);line-height:1.6;display:inline;font-weight:300;}
.dwb-date{color:var(--bloodstone);font-style:italic}
.dwb-cta{
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.18em;
  text-transform:uppercase;background:var(--bloodstone);color:var(--white);
  border:none;padding:9px 18px;cursor:pointer;transition:background .25s;flex-shrink:0;font-weight:600;
}
.dwb-cta:hover{background:var(--bloodstone-dk);}
@media(max-width:680px){.dwb-inner{flex-wrap:wrap}.dwb-cta{width:100%;text-align:center;padding:10px}}

/* ── CONCEPT PENDING PLACEHOLDER ── */
.concept-pending-placeholder{
  display:grid;
  grid-template-columns:220px 1fr;
  min-height:calc(100vh - 56px);
  flex:1;
}
.concept-pending-placeholder.hide{display:none}

/* Sidebar */
.cpp-sidebar{
  background:var(--onyx);
  display:flex;flex-direction:column;
  align-items:center;justify-content:center;
  padding:48px 28px;
  position:relative;overflow:hidden;
}
.cpp-sidebar::after{
  content:'';
}
.cpp-sidebar-num{
  font-family:'Montserrat',sans-serif;font-size:.63rem;
  letter-spacing:.28em;text-transform:uppercase;
  color:rgba(255,255,255,.2);margin-bottom:12px;
}
.cpp-sidebar-title{
  font-family:'Libre Baskerville',serif;
  font-size:1rem;font-style:italic;
  color:rgba(255,255,255,.62);
  text-align:center;line-height:1.75;letter-spacing:.04em;
}

/* Content pane */
.cpp-pane{
  background:var(--ivory);
  display:flex;align-items:center;justify-content:flex-start;
  padding:48px 72px;
}
.cpp-inner{max-width:420px;}

.cpp-eyebrow{
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);
  letter-spacing:.28em;text-transform:uppercase;
  color:var(--bloodstone);font-weight:600;margin-bottom:20px;
  display:flex;align-items:center;gap:12px;
}
.cpp-eyebrow-line{
  display:block;width:28px;height:1px;
  background:var(--bloodstone);opacity:.4;flex-shrink:0;
}
.cpp-headline{
  font-family:'Libre Baskerville',serif;font-size:1.85rem;
  font-style:italic;color:var(--onyx);line-height:1.35;
  margin-bottom:24px;font-weight:500;
}
.cpp-body{
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);
  font-weight:300;color:rgba(45,16,21,.5);line-height:2;
  margin-bottom:36px;
}
.cpp-progress-row{
  display:flex;align-items:center;gap:16px;
}
.cpp-bar-wrap{
  flex:1;height:1px;background:rgba(45,16,21,.1);
  position:relative;overflow:hidden;
}
.cpp-bar{
  position:absolute;top:0;height:100%;
  background:var(--sage);
}
.cpp-bar--static{
  left:0;width:0%;
}
.cpp-bar--scan{
  left:-50%;width:50%;
  animation:cpp-scan 3s ease-in-out infinite;
}
@keyframes cpp-scan{0%{left:-50%}100%{left:150%}}
.cpp-progress-label{
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);
  letter-spacing:.18em;text-transform:uppercase;
  color:var(--sage);font-weight:600;white-space:nowrap;
}

@media(max-width:680px){
  .concept-pending-placeholder{grid-template-columns:1fr}
  .cpp-sidebar{display:none}
  .cpp-pane{padding:48px 28px}
  .cpp-headline{font-size:1.35rem}
}

/* ── CREATIVE DIRECTION BANNER ── */
/* ── DESIGNER'S INTENTIONS LETTER CARD ── */
/* ── DESIGNER'S INTENTIONS — integrated section ── */
.creative-direction-banner{
  display:none;
  background:var(--white);
  border-bottom:1px solid var(--border);
  margin:0;
}
.creative-direction-banner.show{display:block}

/* Section header bar — matches portal section rhythm */
.cdl-section-hdr{
  display:flex;align-items:center;gap:16px;
  padding:20px 64px;
  border-bottom:1px solid var(--border);
}
.cdl-eyebrow{
  font-family:'Montserrat',sans-serif;font-size:.63rem;
  letter-spacing:.28em;text-transform:uppercase;
  color:var(--gold);font-weight:700;flex-shrink:0;
}
.cdl-heading{
  font-family:'Libre Baskerville',serif;font-size:1.0rem;font-weight:700;
  color:var(--onyx-dk);letter-spacing:-.01em;margin:0;
}

/* Letter body — comfortable reading width, centred */
.cdl-card{
  max-width:920px;
  margin:0 auto;
  padding:40px 64px 52px;
  position:static;
  background:transparent;
  border:none;
  box-shadow:none;
}
.cdl-card::before,.cdl-card::after{display:none;}

.cdl-salutation{
  font-family:'Libre Baskerville',serif;font-size:.94rem;
  color:var(--onyx);margin-bottom:20px;font-weight:400;line-height:1.6;
}
.cdl-body{
  font-family:'Montserrat',sans-serif;font-size:.85rem;font-weight:300;
  color:var(--onyx);line-height:1.95;
}
.cdl-body p{margin-bottom:16px}
.cdl-body p:last-child{margin-bottom:0}

/* Signature + seal row — seal lives here now, like a real wax stamp */
.cdl-footer{
  display:flex;align-items:flex-end;justify-content:space-between;
  margin-top:28px;gap:32px;
}
.cdl-sign-area{flex:1;}
.cdl-divider{
  border:none;border-top:1px solid rgba(184,147,90,.35);
  margin:0 0 22px;
}
.cdl-signature{
  font-family:'Libre Baskerville',serif;font-size:.87rem;
  color:var(--onyx);font-style:italic;line-height:1.85;
}
.cdl-seal{
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;
}
.cdl-seal img{
  transform:rotate(-5deg);
  opacity:.72;
  mix-blend-mode:multiply;
  filter:sepia(.12) contrast(1.08);
  transition:opacity .3s;
}
.cdl-seal img:hover{opacity:.88}
.cdl-seal-text{
  font-family:'Montserrat',sans-serif;font-size:.3rem;
  letter-spacing:.14em;text-transform:uppercase;
  color:rgba(255,255,255,.97);font-weight:700;
  text-align:center;line-height:1.65;
}

/* Old cd-message hidden — replaced by letter card */
.cd-message{display:none!important;}

@media(max-width:680px){
  .cdl-section-hdr{padding:16px 20px;}
  .cdl-card{padding:28px 20px 40px;}
  .cdl-footer{flex-direction:column;align-items:flex-start;gap:20px;}
}

/* ── DOCUMENTS SECTION ── */
.docs-section{display:block;margin:24px 48px 0}
.docs-section-hdr{font-family:'Montserrat',sans-serif;font-size:var(--text-md);font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.docs-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.doc-card{
  border:1px solid var(--border);padding:28px 28px 24px;background:#fff;
  display:flex;align-items:flex-start;gap:16px;
  transition:box-shadow .25s;position:relative;
}
.doc-card:hover{box-shadow:var(--sh-hover)}
.doc-icon{font-size:1.4rem;flex-shrink:0;opacity:.45;line-height:1;margin-top:3px}
.doc-info{flex:1;min-width:0}
.doc-title{font-family:'Montserrat',sans-serif;font-size:var(--text-body);font-weight:600;color:var(--onyx);margin-bottom:5px;letter-spacing:.01em}
.doc-sub{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage);line-height:1.58;margin-bottom:12px;font-weight:300}
.doc-actions{display:flex;gap:8px;flex-wrap:wrap}
.doc-btn{
  font-size:var(--text-ui);letter-spacing:.14em;text-transform:uppercase;
  color:var(--white);background:var(--bloodstone);border:none;
  padding:8px 14px;cursor:pointer;font-family:'Montserrat',sans-serif;
  transition:background .2s;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;
  white-space:nowrap;border-radius:0;font-weight:600;width:100%;box-sizing:border-box;
}
.doc-btn:hover{background:var(--bloodstone-dk)}
.doc-btn-download{background:var(--sage);}
.doc-btn-download:hover{background:var(--onyx)}
.doc-btn-soon{position:absolute;top:14px;right:14px;font-size:var(--text-ui);letter-spacing:.08em;text-transform:uppercase;color:var(--gold);font-weight:800;font-family:'Montserrat',sans-serif}
.docs-group-divider{margin:20px 0;border-top:1px solid var(--border)}
@media(max-width:900px){.docs-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:540px){.docs-grid{grid-template-columns:1fr}}
@media(max-width:680px){.docs-section{margin:16px 20px 0}}

/* ── UPSELL / UPGRADE SECTION ── */
.upgrade-section{display:none;border-top:1px solid var(--border);padding:56px 64px 60px;background:var(--ivory);}
.upgrade-section.show{display:block}
.upgrade-section-inner{padding:0;background:none;border:none;overflow:visible;}
.upgrade-section-inner::before{display:none}
.upgrade-label{font-size:.63rem;letter-spacing:.3em;text-transform:uppercase;color:var(--gold);font-weight:700;margin-bottom:18px;font-family:'Montserrat',sans-serif;}
.upgrade-title{font-family:'Libre Baskerville',serif;font-size:1.9rem;color:var(--onyx-dk);margin-bottom:10px;font-weight:400;line-height:1.15;}
.upgrade-title em{font-style:italic;color:var(--bloodstone)}
.upgrade-sub{font-size:.85rem;color:var(--sage);line-height:1.75;margin-bottom:36px;max-width:520px}
.upgrade-cards{display:block;border-top:1px solid var(--border)}
.upgrade-card{
  display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:32px;
  border:none;background:transparent;padding:22px 12px;box-shadow:none;
  border-bottom:1px solid var(--border);
  transition:background .2s;
}
.upgrade-card:hover{background:rgba(146,38,48,.022)}
.upgrade-card-left{display:flex;flex-direction:column;gap:4px}
.upgrade-card-plan{font-size:var(--text-ui);letter-spacing:.28em;text-transform:uppercase;color:var(--sage-lt);font-family:'Montserrat',sans-serif;font-weight:600}
.upgrade-card-badge{font-size:var(--text-ui);letter-spacing:.28em;text-transform:uppercase;color:var(--sage-lt);font-family:'Montserrat',sans-serif;font-weight:600}
.upgrade-card-title,.upgrade-card-name{font-family:'Libre Baskerville',serif;font-size:var(--h3);color:var(--onyx-dk);font-weight:400}
.upgrade-card-desc{font-size:.72rem;color:var(--sage);line-height:1.65;max-width:500px;margin-top:3px}
.upgrade-card-right{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:7px}
.upgrade-card-btn{
  display:inline-block;white-space:nowrap;
  font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;
  background:transparent;color:var(--bloodstone);
  border:1.5px solid var(--bloodstone);
  padding:10px 22px;cursor:pointer;font-family:'Montserrat',sans-serif;
  text-decoration:none;transition:background .22s,color .22s;font-weight:600;
}
.upgrade-card-btn:hover{background:var(--bloodstone);color:var(--ivory)}
.upgrade-card-note{font-size:.78rem;color:rgba(45,16,21,.32);line-height:1.5;text-align:right}
@media(max-width:680px){.upgrade-section{padding:40px 24px 48px;}.upgrade-card{flex-direction:column;align-items:flex-start}.upgrade-card-right{align-items:flex-start}}

/* WELCOME MODAL */
.welcome-modal-overlay {
  position: fixed; inset: 0; background: rgba(45,16,21,0.6);
  backdrop-filter: blur(8px); z-index: 800;
  display: none; align-items: center; justify-content: center; padding: 24px;
}
.welcome-modal-overlay.open { display: flex; }
.welcome-modal {
  background: var(--white); max-width: 520px; width: 100%;
  padding: 52px 48px; text-align: center; position: relative;
  animation: fadeUp .5s ease; box-shadow: var(--shl);
}
.wm-icon { font-size: 2rem; margin-bottom: 20px; opacity: 0.35; color: var(--bloodstone); }
.wm-title {
  font-family: 'Libre Baskerville', serif; font-size: 1.7rem;
  font-weight: 400; color: var(--onyx-dk); margin-bottom: 10px; line-height: 1.2;
}
.wm-title em { font-style: italic; color: var(--bloodstone); }
.wm-sub { font-family: 'Montserrat', sans-serif; font-size: .72rem; color: var(--sage); line-height: 1.85; margin-bottom: 36px; max-width: 380px; margin-left: auto; margin-right: auto; font-weight: 300; }
.wm-steps { display: flex; flex-direction: column; gap: 0; text-align: left; margin-bottom: 36px; border: 1px solid var(--border); }
.wm-step {
  display: flex; align-items: flex-start; gap: 16px; padding: 16px 20px;
  border-bottom: 1px solid var(--border);
}
.wm-step:last-child { border-bottom: none; }
.wm-step-num {
  width: 28px; height: 28px; border-radius: 50%; background: rgba(45,16,21,.08);
  color: var(--sage); font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); font-weight: 700;
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.wm-step.active .wm-step-num { background: var(--bloodstone); color: var(--white); }
.wm-step-info {}
.wm-step-title { font-family: 'Montserrat', sans-serif; font-size: var(--text-ui); font-weight: 600; color: var(--onyx); margin-bottom: 2px; }
.wm-step-desc { font-family: 'Montserrat', sans-serif; font-size: .63rem; color: var(--sage); line-height: 1.55; font-weight: 300; }
.wm-btn {
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); letter-spacing: .22em;
  text-transform: uppercase; color: var(--white); background: var(--bloodstone);
  border: none; padding: 15px 48px; cursor: pointer; transition: background .3s; font-weight: 600;
}
.wm-btn:hover { background: var(--bloodstone-dk); }
.wm-dismiss { font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); color: rgba(64,100,95,.5); margin-top: 14px; cursor: pointer; letter-spacing: .08em; display: block; font-weight: 400; }
.wm-dismiss:hover { color: var(--sage); }

/* PORTAL PROGRESS BAR */
.portal-progress {
  background: var(--ivory); padding: 14px 64px;
  display: flex; align-items: center; gap: 0;
  border-bottom: 1px solid var(--border);
  overflow-x: auto; flex-shrink: 0;
}
.pp-step {
  display: flex; align-items: center; gap: 10px;
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); font-weight: 500;
  letter-spacing: .16em; text-transform: uppercase;
  color: var(--sage); white-space: nowrap; position: relative;
}
.pp-step.done { color: var(--success); }
.pp-step.active { color: var(--onyx); }
.pp-dot {
  width: 24px; height: 24px; border-radius: 50%;
  border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); font-weight: 600;
  flex-shrink: 0; transition: all .3s; color: var(--sage);
}
.pp-step.done .pp-dot { background: var(--success); border-color: var(--success); color: var(--white); }
.pp-step.active .pp-dot { background: var(--bloodstone); border-color: var(--bloodstone); color: var(--white); }
.pp-arrow { padding: 0 12px; color: var(--border); font-size: var(--text-md); flex-shrink: 0; }
@media (max-width: 640px) {
  .portal-progress { padding: 12px 20px; }
  .pp-step span:not(.pp-dot) { display: none; }
  .pp-step.active span:not(.pp-dot) { display: inline; }
}

/* URGENCY BANNER */
.brief-urgency {
  background: rgba(146,38,48,.05); border-bottom: 2px solid var(--bloodstone);
  padding: 0;
}
.bub-inner {
  max-width: 760px; margin: 0 auto; padding: 14px 24px;
  display: flex; align-items: center; gap: 14px;
}
.bub-icon { font-size: 1.4rem; flex-shrink: 0; }
.bub-text { font-family: 'Montserrat', sans-serif; flex: 1; font-size: var(--text-body); color: var(--onyx); line-height: 1.6; white-space: nowrap; font-weight: 300; }
.bub-text strong { display: inline; font-weight: 700; color: var(--bloodstone); }
.bub-cta {
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); letter-spacing: .18em;
  text-transform: uppercase; background: var(--bloodstone); color: var(--white);
  border: none; padding: 9px 18px; cursor: pointer; transition: background .25s; flex-shrink: 0; font-weight: 600;
}
.bub-cta:hover { background: var(--bloodstone-dk); }

/* RSVP NOTE */
.rsvp-why-note {
  background: var(--ivory); border-bottom: 1px solid var(--border);
}
.rwn-inner {
  max-width: 760px; margin: 0 auto; padding: 16px 24px;
  display: flex; align-items: flex-start; gap: 12px;
}
.rwn-icon { font-size: 1rem; flex-shrink: 0; margin-top: 1px; }
.rwn-inner p { font-family: 'Montserrat', sans-serif; font-size: var(--text-ui); color: var(--onyx); line-height: 1.75; font-weight: 300; }
.rwn-inner p strong { color: var(--onyx); font-weight: 600; }

/* ANNOTATION TOOLTIP */
.annotate-tip-overlay {
  position: absolute; inset: 0; background: rgba(45,16,21,.65);
  z-index: 50; display: none; align-items: center; justify-content: center;
  flex-direction: column; gap: 20px; text-align: center; padding: 32px;
}
.annotate-tip-overlay.show { display: flex; }
.ann-tip-box {
  background: var(--white); border: 1px solid var(--border);
  padding: 36px 40px; max-width: 400px; box-shadow: var(--shl);
}
.ann-tip-title {
  font-family: 'Libre Baskerville', serif; font-size: 1.1rem; color: var(--onyx-dk);
  margin-bottom: 10px; font-weight: 400;
}
.ann-tip-title em { font-style: italic; color: var(--bloodstone); }
.ann-tip-steps { list-style: none; text-align: left; margin: 16px 0; display: flex; flex-direction: column; gap: 10px; }
.ann-tip-steps li {
  display: flex; align-items: center; gap: 12px;
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); color: var(--sage); line-height: 1.5; font-weight: 300;
}
.ann-tip-step-num {
  width: 22px; height: 22px; background: var(--bloodstone); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); color: var(--white); flex-shrink: 0; font-weight: 700;
}
.ann-tip-btn {
  font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); letter-spacing: .2em;
  text-transform: uppercase; background: var(--bloodstone); color: var(--white);
  border: none; padding: 12px 32px; cursor: pointer; transition: background .3s;
  margin-top: 8px; font-weight: 600;
}
.ann-tip-btn:hover { background: var(--bloodstone-dk); }
.ann-tip-skip { font-family: 'Montserrat', sans-serif; font-size: var(--text-xs); color: rgba(64,100,95,.45); cursor: pointer; margin-top: 10px; display: block; font-weight: 400; }
.ann-tip-skip:hover { color: var(--sage); }

/* ── REVIEW HERO (Tab 03 – Final Suite) ── */
.review-hero-block{padding:52px 64px 44px;background:var(--white);border-bottom:1px solid var(--border);}
.rhb-eyebrow{font-size:var(--text-xs);letter-spacing:.22em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:20px;}
.rhb-heading{font-family:'Libre Baskerville',serif;font-size:2.4rem;font-weight:400;color:var(--onyx-dk);line-height:1.15;margin-bottom:16px;}
.rhb-heading em{display:block;color:var(--bloodstone);font-style:italic;}
.rhb-sub{font-size:var(--text-body);color:var(--sage);line-height:1.8;max-width:580px;margin-bottom:32px;}
.rhb-divider{border:none;border-top:1px solid var(--border);margin:0 0 26px;}
.rhb-pills{display:flex;flex-wrap:wrap;gap:10px;}
.rhb-pill{display:inline-flex;align-items:center;gap:8px;padding:9px 18px;font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--border);background:var(--white);color:var(--sage);}
.rhb-pill.approved{background:rgba(45,106,79,.08);border-color:rgba(45,106,79,.3);color:var(--success);}
.rhb-pill.pending{color:rgba(64,100,95,.65);}
.rhb-pill.pending.in-review{background:rgba(146,38,48,.06);border-color:rgba(146,38,48,.2);color:rgba(146,38,48,.75);}
.rhb-pill-dot{font-size:var(--text-ui);line-height:1;}
@media(max-width:600px){.review-hero-block{padding:36px 20px 32px;}.rhb-heading{font-size:1.8rem;}}

/* ── RSVP AT A GLANCE ── */
/* ── RSVP SLIM STATS BAR ── */
.rsvp-stats-bar{
  display:flex;justify-content:space-between;align-items:center;
  padding:20px 64px;background:var(--white);border-bottom:1px solid var(--border);
  gap:16px;flex-wrap:wrap;
}
.rsb-stats{display:flex;align-items:flex-end;gap:0;flex-wrap:wrap;}
.rsb-stat{
  display:flex;flex-direction:column;flex-shrink:0;
  padding-right:24px;margin-right:24px;border-right:1px solid var(--border);
}
.rsb-stat:last-of-type{border-right:none;margin-right:0;padding-right:0;}
.rsb-num{
  font-family:'Libre Baskerville',serif;font-size:2.2rem;font-weight:400;
  line-height:1;margin-bottom:5px;color:var(--onyx-dk);
}
.rsb-num--muted{color:var(--sage);}
.rsb-num--gold{color:var(--gold);}
.rsb-lbl{font-size:.63rem;letter-spacing:.18em;text-transform:uppercase;color:var(--sage);font-weight:600;white-space:nowrap;}
.rsb-attending .rsb-num{color:var(--success);}
.rsb-attending .rsb-lbl{color:var(--success);}
.rsb-attending{position:relative;padding-bottom:8px;}
.rsb-attending::after{content:'';position:absolute;bottom:0;left:0;right:24px;height:2px;background:var(--success);opacity:.4;}
.rsb-export-btn{
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);font-weight:600;letter-spacing:.2em;
  text-transform:uppercase;padding:13px 24px;background:var(--bloodstone-dk);color:var(--white);
  border:none;cursor:pointer;transition:background .2s;white-space:nowrap;flex-shrink:0;
}
.rsb-export-btn:hover{background:var(--bloodstone);}
@media(max-width:700px){
  .rsvp-stats-bar{padding:16px 20px;}
  .rsb-stat{padding-right:16px;margin-right:16px;}
  .rsb-num{font-size:1.8rem;}
}

/* ── ALL GUESTS SECTION (Tab 04) ── */
.rsvp-guest-wrap{background:var(--white);border-top:2px solid var(--border);}
.ag-hdr-wrap{
  padding:48px 64px 28px;background:var(--white);border-bottom:1px solid var(--border);
}
.ag-hdr-row{
  display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:20px;
}
.ag-title-eyebrow{
  font-size:var(--text-ui);letter-spacing:.22em;text-transform:uppercase;color:var(--sage);
  font-weight:600;margin-bottom:6px;
}
.ag-title{
  font-family:'Libre Baskerville',serif;font-size:1.6rem;font-weight:400;
  color:var(--onyx-dk);letter-spacing:.01em;
}
@media(max-width:700px){
  .ag-hdr-wrap{padding:28px 20px 20px}
  .ag-hdr-row{flex-direction:column;align-items:flex-start}
  .ag-title{font-size:1.3rem}
}
.ag-search-row{display:flex;align-items:stretch;border:1px solid var(--border);overflow:hidden;}
.ag-search-input{border:none;outline:none;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);padding:10px 16px;flex:1;background:transparent;color:var(--onyx);min-width:200px;}
.ag-search-input::placeholder{color:rgba(64,100,95,.6);}
.ag-search-btn{background:var(--onyx-dk);color:var(--white);border:none;padding:0 18px;font-size:.85rem;cursor:pointer;font-family:'Montserrat',sans-serif;flex-shrink:0;transition:background .2s;}
.ag-search-btn:hover{background:var(--bloodstone);}
.ag-badge-yes{display:inline-block;font-family:'Montserrat',sans-serif;background:rgba(45,106,79,.1);color:var(--success);font-size:.78rem;padding:4px 10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;}
.ag-badge-no{display:inline-block;font-family:'Montserrat',sans-serif;background:rgba(146,38,48,.08);color:var(--bloodstone);font-size:.78rem;padding:4px 10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;}
.ag-badge-pending{display:inline-block;font-family:'Montserrat',sans-serif;background:rgba(64,100,95,.1);color:var(--sage);font-size:.78rem;padding:4px 10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;}
.ag-alert-chip{display:inline-flex;align-items:center;gap:3px;font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#c0390a;margin-top:3px;margin-left:8px;}
/* A standing REQUIREMENT, not a problem to fix — so deliberately not .ag-alert-chip.
   Accessibility and transport needs are facts the host seats around; rendering them
   in alert red would read as "something went wrong with this guest". Quiet, legible,
   and it sits with the other per-guest facts. (2026-08-05 CRM/Portal audit.) */
.ag-need-chip{display:inline-flex;align-items:center;gap:4px;font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--sage);margin-top:3px;margin-left:8px;}
.ag-table-chip{display:inline-block;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:600;color:var(--onyx-dk);background:rgba(45,16,21,.05);padding:3px 10px;letter-spacing:.04em;white-space:nowrap;}
.ag-footer{display:flex;justify-content:space-between;align-items:center;padding:12px 64px;background:var(--white);border-top:1px solid var(--border);}
.ag-footer-count{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--sage);}
.ag-footer-link{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;font-weight:600;color:var(--onyx-dk);background:none;border:none;cursor:pointer;padding:0;}
.ag-footer-link:hover{color:var(--bloodstone);}
.ag-party-txt{display:block;font-size:var(--text-sm);color:rgba(45,16,21,.35);font-weight:400;margin-top:5px;letter-spacing:.02em;}

/* ── NEW DOWNLOAD SECTION (Tab 03) ── */
.ndl-section{padding:48px;background:var(--ivory);}
.ndl-eyebrow{font-size:var(--text-xs);letter-spacing:.22em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:20px;}
.ndl-heading{font-family:'Libre Baskerville',serif;font-size:1.6rem;font-weight:400;color:var(--onyx-dk);line-height:1.2;margin-bottom:8px;}
.ndl-heading em{color:var(--bloodstone);font-style:italic;}
.ndl-sub{font-size:var(--text-body);color:var(--sage);line-height:1.7;max-width:580px;margin-bottom:36px;}
.ndl-list{display:block;width:100%;}
#finalSuiteGrid.ndl-list{padding:40px 48px;background:var(--ivory);box-sizing:border-box;}
.ndl-piece{background:var(--white);border:1px solid var(--border);margin-bottom:20px;}
.ndl-piece-hdr{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:20px 28px;border-bottom:1px solid var(--border);}
.ndl-piece-hdr-right{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.ndl-piece-name{font-family:'Libre Baskerville',serif;font-size:var(--h3);font-weight:400;color:var(--onyx-dk);text-transform:capitalize;}
.ndl-approved-badge{font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;color:var(--success);font-weight:700;font-family:'Montserrat',sans-serif;}
.ndl-formats{display:grid;}
.ndl-fmt{padding:22px 20px 18px;border-right:1px solid var(--border);display:flex;flex-direction:column;}
.ndl-fmt:last-child{border-right:none;}
.ndl-fmt-type{font-size:var(--text-ui);letter-spacing:.2em;text-transform:uppercase;font-weight:700;color:var(--sage);margin-bottom:10px;font-family:'Montserrat',sans-serif;}
.ndl-fmt-spec{font-size:var(--text-md);font-weight:400;color:var(--onyx-dk);margin-bottom:6px;font-family:'Montserrat',sans-serif;letter-spacing:0;text-transform:none;}
.ndl-fmt-sub{font-size:.72rem;color:rgba(64,100,95,.85);line-height:1.55;flex:1;font-family:'Montserrat',sans-serif;font-weight:300;}
.ndl-fmt-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:700;padding:12px 10px;cursor:pointer;text-decoration:none;transition:all .2s;display:block;text-align:center;margin-top:16px;}
.ndl-fmt-btn.solid{background:#3A7D57;color:var(--white);border:none;}
.ndl-fmt-btn.solid:hover{background:#2F6647;}
.ndl-fmt-btn.outline{background:transparent;color:var(--onyx-dk);border:1px solid rgba(45,16,21,.3);}
.ndl-fmt-btn.outline:hover{background:rgba(45,16,21,.03);}
.ndl-fmt-btn.waiting{background:rgba(45,16,21,.03);color:rgba(64,100,95,.5);border:1px solid var(--border);cursor:default;pointer-events:none;}
.ndl-fmt-btn.na{background:transparent;color:rgba(64,100,95,.35);border:1px dashed rgba(64,100,95,.25);cursor:default;pointer-events:none;font-style:italic;letter-spacing:.08em;}
.ndl-guest-link-btn{background:transparent;color:var(--sage-dk);border:1px solid rgba(64,100,95,.4);}
.ndl-guest-link-btn:hover{background:rgba(64,100,95,.06);}
.ndl-bundled-badge{font-size:.63rem;letter-spacing:.18em;text-transform:uppercase;color:var(--sage);font-weight:600;padding:2px 7px;border:1px dashed rgba(64,100,95,.4);margin-left:10px;vertical-align:middle;}
.bb-designer-choice-badge{display:inline-block;font-size:.6rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(122,148,144,.8);font-weight:600;padding:2px 8px;border:1px dashed rgba(122,148,144,.38);margin-top:7px;font-family:'Montserrat',sans-serif;font-style:normal;white-space:nowrap;}
.bb-meta-name-wrap{display:flex;flex-direction:column;align-items:flex-start;gap:0;}
.ndl-share-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;padding:5px 10px;cursor:pointer;background:transparent;color:var(--onyx);border:1px solid var(--border);transition:all .18s;}
.ndl-share-btn:hover{border-color:var(--sage);color:var(--sage-dk);}
.ndl-fmt--na{opacity:.42;}
.ndl-fmt-spec--na{color:rgba(64,100,95,.4);font-size:var(--text-sm);}
.ndl-pending-wrap{background:var(--ivory);border-top:1px solid var(--border);padding:32px 64px 36px;display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:28px;margin-bottom:0;}
.ndl-pending-eyebrow{font-size:.63rem;letter-spacing:.24em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:16px;font-family:'Montserrat',sans-serif;}
.ndl-pending-name{font-family:'Libre Baskerville',serif;font-size:.9rem;font-style:italic;color:var(--sage);line-height:1.8;}
/* Individual pending item rows */
.ndl-pi{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--border);}
.ndl-pi:last-child{border-bottom:none;}
.ndl-pi-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.ndl-pi-dot.in_review{background:rgba(184,147,90,.85);}
.ndl-pi-dot.revision_requested{background:rgba(146,38,48,.45);}
.ndl-pi-dot.in_design{background:rgba(45,16,21,.25);}
.ndl-pi-dot.pending{background:rgba(45,16,21,.15);}
.ndl-pi-name{font-family:'Libre Baskerville',serif;font-size:.85rem;color:var(--onyx-dk);flex:1;}
.ndl-pi-status{font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;font-weight:600;font-family:'Montserrat',sans-serif;}
.ndl-pi-status.in_review{color:rgba(184,147,90,.9);}
.ndl-pi-status.revision_requested{color:rgba(146,38,48,.6);}
.ndl-pi-status.in_design{color:var(--sage);}
.ndl-pi-status.pending{color:rgba(45,16,21,.3);}
@media(max-width:680px){.ndl-pending-wrap{padding:28px 24px 32px;}}
.ndl-review-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;font-weight:600;padding:12px 24px;background:var(--bloodstone);color:var(--white);border:none;cursor:pointer;flex-shrink:0;transition:all .2s;}
.ndl-review-btn:hover{background:var(--bloodstone-dk);}
@media(max-width:900px){.ndl-formats{grid-template-columns:repeat(2,1fr) !important}}
@media(max-width:600px){
  .ndl-formats{grid-template-columns:1fr !important}
  .ag-hdr-wrap{padding:24px 20px 16px;}
  .ag-footer{padding:12px 20px;}
  .ag-search-input{min-width:140px;}
}

/* ══ DESIGN SUITE CARD — V2 REFERENCE FORMAT ══ */
/* "Full View" button overlay */
.bb-preview .bb-open{top:10px!important;right:10px!important;font-size:var(--text-ui);letter-spacing:.16em;font-weight:600;padding:5px 10px;background:rgba(45,16,21,.72);color:rgba(250,246,238,.9);backdrop-filter:blur(2px);}
/* Corner crop marks */
.bb-corner{position:absolute;width:14px;height:14px;pointer-events:none;}
.bb-corner-tl{top:10px;left:10px;border-top:1px solid rgba(250,246,238,.28);border-left:1px solid rgba(250,246,238,.28);}
.bb-corner-tr{top:10px;right:10px;border-top:1px solid rgba(250,246,238,.28);border-right:1px solid rgba(250,246,238,.28);}
.bb-corner-bl{bottom:24px;left:10px;border-bottom:1px solid rgba(250,246,238,.28);border-left:1px solid rgba(250,246,238,.28);}
.bb-corner-br{bottom:24px;right:10px;border-bottom:1px solid rgba(250,246,238,.28);border-right:1px solid rgba(250,246,238,.28);}
/* Print spec gradient overlay at bottom of preview */
.bb-preview-spec{position:absolute;bottom:0;left:0;right:0;padding:10px 14px;text-align:center;font-family:'Montserrat',sans-serif;font-size:.34rem;letter-spacing:.22em;color:rgba(250,246,238,.38);background:linear-gradient(to top,rgba(45,16,21,.52) 0%,transparent 100%);pointer-events:none;}
/* Meta panel */
.bb-meta{padding:20px 22px 10px!important;}
.bb-meta-top{flex-direction:row!important;justify-content:space-between!important;align-items:flex-start!important;gap:10px!important;margin-bottom:8px!important;}
.bb-piece-name{font-size:1.1rem!important;flex:1!important;min-width:0!important;}
/* Status badge — bordered, minimal fill */
.bb-status-pill{font-size:var(--text-ui)!important;letter-spacing:.12em!important;padding:5px 10px!important;border-radius:0!important;border:1px solid!important;background:transparent!important;flex-shrink:0!important;margin-top:3px!important;font-weight:600!important;}
.bb-status-pill.pending{color:rgba(64,100,95,.6)!important;border-color:rgba(64,100,95,.25)!important;background:transparent!important;}
.bb-status-pill.in_progress{color:rgba(201,168,76,.88)!important;border-color:rgba(201,168,76,.3)!important;background:rgba(201,168,76,.04)!important;}
.bb-status-pill.ready,.bb-status-pill.approved{color:var(--success)!important;border-color:rgba(45,106,79,.3)!important;background:rgba(45,106,79,.05)!important;}
.bb-status-pill.approved::after{content:''!important;}
/* Print specs line below piece name */
.bb-piece-specs{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:300;color:var(--sage);line-height:1.5;margin-bottom:0;margin-top:6px;}
/* Note / designer note box */
.bb-piece-desc{margin:0 0 10px!important;padding:12px 14px!important;background:rgba(250,246,238,.55)!important;}
.bb-piece-desc-lbl{font-size:var(--text-ui)!important;letter-spacing:.16em!important;color:var(--sage)!important;}
/* Action buttons — full-width 2-column */
.bb-actions{display:flex!important;gap:8px!important;border-top:1px solid var(--border)!important;margin-top:14px!important;padding:12px!important;justify-content:stretch!important;align-items:center!important;}
.bb-actions-compact{margin-top:2px!important;padding:8px 12px!important;}
.bb-action-approve{flex:1!important;padding:11px 8px!important;font-size:.78rem!important;letter-spacing:.15em!important;font-weight:400!important;color:#3A7040!important;background:rgba(45,106,79,.09)!important;border:1px solid rgba(45,106,79,.28)!important;text-align:center!important;justify-content:center!important;}
.bb-action-approve:hover{background:rgba(45,106,79,.16)!important;}
.bb-action-approve.active{color:var(--success)!important;cursor:default!important;background:rgba(45,106,79,.06)!important;}
.bb-action-revise{flex:1!important;padding:11px 8px!important;font-size:.78rem!important;letter-spacing:.15em!important;font-weight:400!important;background:rgba(146,38,48,.07)!important;color:var(--bloodstone)!important;border:1px solid rgba(146,38,48,.25)!important;border-radius:0!important;text-align:center!important;justify-content:center!important;}
.bb-action-revise:hover{background:rgba(146,38,48,.14)!important;}
.bb-action-history{flex:0;padding:9px 16px;border:1px solid var(--border-d);background:none;cursor:pointer;font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.15em;text-transform:uppercase;font-weight:400;color:rgba(45,16,21,.45);transition:background .2s;border-radius:0;}
.bb-action-history:hover{background:rgba(45,16,21,.04);}
.bb-action-disabled{flex:0!important;padding:0!important;font-family:'Montserrat',sans-serif!important;font-size:var(--text-ui)!important;letter-spacing:.13em!important;text-transform:uppercase!important;font-weight:400!important;color:rgba(64,100,95,.45)!important;background:none!important;border:none!important;}
.bb-action-norevisions{flex:1!important;padding:11px 8px!important;font-family:'Montserrat',sans-serif!important;font-size:.78rem!important;letter-spacing:.13em!important;text-transform:uppercase!important;font-weight:400!important;color:rgba(64,100,95,.5)!important;background:rgba(64,100,95,.05)!important;border:1px dashed rgba(64,100,95,.25)!important;text-align:center!important;display:flex!important;align-items:center!important;justify-content:center!important;}
.bb-note-block{padding:18px 22px 16px!important;}
@media(max-width:900px){.brandbook-grid{grid-template-columns:1fr!important;gap:32px;}}

/* ── DESIGN SUITE CARD: status pill refinements ── */
/* Awaiting Review — burgundy tone, ◐ icon */
.bb-status-pill.in_review{color:rgba(146,38,48,.85)!important;border-color:rgba(146,38,48,.28)!important;background:rgba(146,38,48,.05)!important;}
.bb-status-pill.in_review::before{content:'\25D0\00a0\00a0';font-style:normal;}
/* In Progress — gold tone, ◑ icon */
.bb-status-pill.in_progress::before{content:'\25D1\00a0\00a0';font-style:normal;}
/* Special (Awaiting Guest List, Post-Event) — muted/flat */
.bb-status-pill.special{color:rgba(64,100,95,.6)!important;border-color:rgba(64,100,95,.22)!important;background:transparent!important;}
/* Pending (Not Yet Started) status pill stays as-is */

/* Action-bar reassurance line — a soft, sentence-case note beneath the uppercase
   "In Progress" / "Not Yet Started" action badge (.bb-action-disabled), echoing the
   design-suite hero's promise that an email arrives the moment each piece is released,
   so a deadline-driven client scanning the piece list doesn't read a bare status word
   as "stalled". Resets the parent's uppercase/tracked/muted treatment; wraps narrow. */
/* min-width raises the parent badge's automatic-minimum size so the flex item
   (.bb-action-disabled is flex:0 1 0%) can't collapse to one word — that keeps the
   uppercase status label on a single line and lets this note wrap at a readable width. */
.bb-action-reassure{display:block!important;margin-top:5px!important;min-width:190px!important;max-width:220px!important;text-transform:none!important;letter-spacing:.01em!important;font-family:'Montserrat',sans-serif!important;font-size:.66rem!important;font-weight:300!important;line-height:1.4!important;color:rgba(64,100,95,.62)!important;}

/* ── Pending preview placeholder — brownish-gray bg ── */
.bb-preview.empty{background:#726B5F!important;}
.bb-preview.empty::before{background:
  linear-gradient(135deg,rgba(250,246,238,.025) 25%,transparent 25%,transparent 50%,rgba(250,246,238,.025) 50%,rgba(250,246,238,.025) 75%,transparent 75%) 0/20px 20px,
  #726B5F!important;}
.bb-preview-empty-lbl{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;width:80%;}
.bb-preview-empty-name{display:block;font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.24em;text-transform:uppercase;color:rgba(250,246,238,.42);margin-bottom:9px;}
.bb-preview-empty-sub{display:block;font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(250,246,238,.24);}

/* ── Revision notes block redesign ── */
.bb-note-hdr{font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(146,38,48,.42);font-weight:600;margin-bottom:12px;}
.bb-note-tip{font-family:'Montserrat',sans-serif;font-size:.72rem;line-height:1.55;color:rgba(45,16,21,.6);margin:-4px 0 12px;max-width:56ch;}
.bb-note-tip strong{font-weight:600;color:rgba(45,16,21,.78);letter-spacing:.02em;}
.bb-note-cancel{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--bloodstone);background:rgba(146,38,48,.06);border:1px solid rgba(146,38,48,.22);padding:8px 16px;cursor:pointer;transition:background .2s;}
.bb-note-cancel:hover{background:rgba(146,38,48,.12);}
.bb-note-send{font-family:'Montserrat',sans-serif;font-size:.78rem!important;letter-spacing:.15em!important;text-transform:uppercase;background:rgba(146,38,48,.07)!important;color:var(--bloodstone)!important;border:1px solid rgba(146,38,48,.25)!important;padding:9px 16px!important;cursor:pointer;border-radius:0!important;transition:background .2s!important;font-weight:400!important;}
.bb-note-send:hover{background:rgba(146,38,48,.14)!important;}
.bb-note-footer{display:flex;align-items:center;justify-content:space-between;margin-top:10px;}
.bb-note-autosave{font-family:'Montserrat',sans-serif;font-size:.68rem;letter-spacing:.06em;color:rgba(45,106,79,.7);font-style:italic;}

/* ── DESIGN SUITE HERO ── */
.ds-hero{background:var(--white);border-bottom:1px solid var(--border);display:none;}
.ds-hero.show{display:block;}
.ds-hero-body{padding:52px 64px 40px;}
.ds-hero-eyebrow{font-size:.78rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:18px;}
.ds-hero-h1{font-family:'Libre Baskerville',serif;font-size:2.4rem;font-weight:400;color:var(--onyx-dk);line-height:1.1;margin-bottom:18px;}
.ds-hero-h1 em{color:var(--bloodstone);font-style:italic;display:block;}
.ds-hero-sub{font-size:var(--text-body);color:var(--sage);line-height:1.8;max-width:540px;margin-bottom:36px;font-weight:300;}
.ds-hero-stats{display:flex;gap:56px;border-top:1px solid var(--border);padding-top:28px;flex-wrap:wrap;}
.ds-hero-stat-lbl{font-size:var(--text-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:7px;}
.ds-hero-stat-val{font-family:'Libre Baskerville',serif;font-size:var(--h3);color:var(--onyx-dk);font-weight:400;}
/* Hero-level jump to the A/B chooser (client-experience audit 2026-07-22).
   Shown only while the direction is still pending — toggled in
   _updateConceptHero(). Gives the above-the-fold cue the hero otherwise
   lacked; the anchor scrolls straight to the Choose cards below the iframe. */
.ds-hero-cta{display:inline-flex;align-items:center;gap:9px;margin-top:28px;font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;font-weight:600;background:var(--bloodstone);color:var(--ivory);border:1px solid var(--bloodstone);padding:13px 26px;cursor:pointer;text-decoration:none;transition:opacity .2s;}
.ds-hero-cta:hover{opacity:.9}
.ds-hero-cta-arrow{transition:transform .25s}
.ds-hero-cta:hover .ds-hero-cta-arrow{transform:translateY(3px)}
#cdlDirectionActions{scroll-margin-top:24px}
.ds-status-bar{display:flex;justify-content:space-between;align-items:center;padding:14px 64px;border-top:1px solid var(--border);background:var(--white);flex-wrap:wrap;gap:12px;}
.ds-status-pills{display:flex;align-items:center;gap:28px;flex-wrap:wrap;}
.ds-spill{display:flex;align-items:center;gap:8px;font-size:.78rem;letter-spacing:.15em;text-transform:uppercase;font-weight:600;color:var(--sage);cursor:default;}
.ds-spill-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.ds-spill-dot.approved{background:var(--success);}
.ds-spill-dot.review{background:var(--bloodstone);}
.ds-spill-dot.progress{background:var(--gold);}
.ds-spill-dot.pending{background:rgba(64,100,95,.32);}
.ds-spill-count{font-family:'Libre Baskerville',serif;font-size:.95rem;color:var(--onyx-dk);font-weight:400;margin-left:2px;}
.ds-share-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;color:var(--onyx-dk);background:transparent;border:1px solid rgba(45,16,21,.18);padding:9px 20px;cursor:pointer;transition:all .2s;white-space:nowrap;}
.ds-share-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone);}
@media(max-width:680px){
  .ds-hero-body{padding:32px 20px 24px;}
  .ds-hero-stats{gap:28px;}
  .ds-status-bar{padding:12px 20px;}
}

/* ═══════════════════════════════════════════════════════
   PRODUCTION DETAILS PANEL (tab 03) — Act II of the briefing
   ═══════════════════════════════════════════════════════
   Added 2026-07-31. #prodDetailsPanel was styled inline and was the ONLY
   block in this tab carrying an inline background+border: a bordered box
   with `margin:0 0 26px` and 28px padding. Every neighbour is inset —
   .ds-hero-body and .items-sec-hdr sit at 64px, .revision-history at
   48px+28px — so this panel alone ran hard to both edges and its whole
   left column was 36px out of line with the tab. Inline styling also put
   it permanently out of reach of the @media rules that retune the rest of
   this tab for mobile.
   Now a band like its neighbours: same 64px column, same hairline rules.
   The sage wash is .pd-piece-hdr's existing tint, reused so the panel
   still reads as "your part to do" without floating free of the page.
   `display` deliberately stays inline on the element — renderProductionDetails()
   toggles panel.style.display between 'none' and '', so this rule must not
   own it. */
.pdp-panel{background:rgba(64,100,95,.03);border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:34px 64px 30px}
.pdp-title{font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.26em;text-transform:uppercase;color:var(--sage);font-weight:700;margin-bottom:12px}
.pdp-intro{font-family:'Montserrat',sans-serif;font-size:.78rem;line-height:1.8;color:var(--sage);font-weight:300;margin:0 0 24px;max-width:62ch}
.pdp-actions{display:flex;align-items:center;gap:18px;margin-top:8px;flex-wrap:wrap}
.pdp-save{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.16em;text-transform:uppercase;font-weight:600;padding:13px 26px;background:var(--bloodstone);color:var(--ivory);border:1px solid var(--bloodstone);cursor:pointer;transition:opacity .2s}
.pdp-save:hover{opacity:.9}
.pdp-status{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage-dk)}
@media(max-width:680px){
  .pdp-panel{padding:26px 20px 22px}
}

/* ═══════════════════════════════════════════════════════
   ALL-DESIGNS-COMPLETE CALLOUT (tab 03)
   ═══════════════════════════════════════════════════════ */
.ds-complete-callout{display:flex;align-items:center;gap:24px;padding:28px 64px;background:var(--ivory);border-top:1px solid var(--border);border-bottom:1px solid var(--border);}
.dsc-icon{font-size:1.4rem;color:var(--bloodstone);flex-shrink:0;line-height:1;}
.dsc-body{flex:1;min-width:0;}
.dsc-title{font-family:'Libre Baskerville',serif;font-size:.92rem;color:var(--onyx-dk);font-weight:400;margin-bottom:4px;}
.dsc-sub{font-size:.78rem;color:var(--sage);line-height:1.65;}
.dsc-sub strong{color:var(--onyx-dk);font-weight:600;}
.dsc-btn{flex-shrink:0;padding:var(--btn-pad-sm);background:var(--bloodstone);color:#fff;border:none;cursor:pointer;font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;font-weight:600;white-space:nowrap;}
.dsc-btn:hover{background:var(--onyx-dk);}
@media(max-width:700px){
  .ds-complete-callout{flex-direction:column;align-items:flex-start;padding:24px 20px;gap:16px;}
  .dsc-btn{width:100%;}
}

/* ═══════════════════════════════════════════════════════
   WHAT'S IN YOUR SUITE — editorial numbered row list
   ═══════════════════════════════════════════════════════ */
.items-section{margin:0!important;background:var(--white);border-top:1px solid var(--border);}
.items-sec-hdr{padding:26px 64px 22px!important;margin-bottom:0!important;border-bottom:1px solid var(--border)!important;}
.items-sec-title{font-family:'Montserrat',sans-serif!important;font-size:.78rem!important;letter-spacing:.26em!important;color:var(--sage)!important;font-weight:700!important;}
.items-sec-sub{font-size:.78rem!important;letter-spacing:.18em!important;color:var(--gold)!important;font-weight:700!important;}
.items-grid{display:block!important;gap:0!important;background:var(--white);}
.item-card{
  display:flex!important;flex-direction:row!important;align-items:center!important;
  padding:15px 64px!important;gap:22px!important;
  border:none!important;border-bottom:1px solid var(--border)!important;
  background:var(--white)!important;transition:background .18s;
}
.item-card:last-child{border-bottom:none!important;}
.item-card:hover{background:rgba(64,100,95,.04)!important;}
.item-num{font-family:'Montserrat',sans-serif;font-size:.43rem;letter-spacing:.18em;color:rgba(64,100,95,.5);font-weight:600;flex-shrink:0;min-width:24px;}
.item-name{font-family:'Libre Baskerville',serif!important;font-size:.92rem!important;color:var(--onyx-dk)!important;font-weight:400!important;flex:1;letter-spacing:0!important;}
.item-card-top{display:none!important;}
.item-status-txt{display:none!important;}
.item-status-dot{display:none!important;}
.item-status-row{display:inline-flex;align-items:center;gap:7px;font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.15em;text-transform:uppercase;font-weight:600;flex-shrink:0;}
.item-status-row.in_progress{color:var(--sage);}
.item-status-row.in_revision{color:var(--gold);}
.item-status-row.ready{color:var(--warn);}
.item-status-row.approved{color:var(--success);}
.item-status-row.not_started{color:rgba(45,16,21,.28);}
.item-sdot{display:inline-block;width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.item-sdot.in_progress{background:var(--sage);}
.item-sdot.in_revision{background:var(--gold);}
.item-sdot.ready{background:var(--warn);}
.item-sdot.approved{background:var(--success);}
.item-sdot.not_started{background:rgba(45,16,21,.18);}
.item-num{color:var(--sage-lt)!important;}
@media(max-width:600px){
  .item-card{padding:14px 20px!important;gap:14px!important;}
  .items-sec-hdr{padding:20px 20px 16px!important;}
}

/* ═══════════════════════════════════════════════════════
   LOGIN SCREEN — redesign
   ═══════════════════════════════════════════════════════ */
.login-screen{
  background:var(--ivory)!important;
  justify-content:center!important;gap:0!important;
}
.login-logo{
  font-size:.76rem!important;letter-spacing:.18em!important;
  color:var(--onyx)!important;
  margin-bottom:6px!important;
  padding-bottom:0!important;
  border-bottom:none!important;
  width:100%!important;max-width:440px!important;
  text-align:center!important;
  position:relative!important;
}
/* Concept 2 "Ivory Salon" pick (2026-07-21): short gold rule under the wordmark,
   replaces the old full-width bottom border used by the dark theme. */
.login-logo::after{
  content:"";display:block;width:36px;height:1px;background:var(--gold);
  margin:16px auto 36px;
}
.login-box{
  background:#fff!important;border:1px solid var(--border)!important;
  border-bottom:1px solid var(--border)!important;box-shadow:var(--shl)!important;
  padding:48px 52px!important;max-width:420px!important;width:100%!important;
}
.login-title{
  font-size:1.85rem!important;line-height:1.22!important;
  letter-spacing:.02em!important;
  color:var(--onyx)!important;margin-bottom:10px!important;
}
.login-title em{color:var(--bloodstone)!important;}
.login-sub{
  font-size:.74rem!important;line-height:1.75!important;
  color:rgba(45,16,21,.62)!important;margin-bottom:30px!important;font-weight:300!important;
}
.login-fld{margin-bottom:0!important;padding-bottom:20px!important;}
.login-fld label{
  font-size:.66rem!important;letter-spacing:.22em!important;
  color:var(--sage)!important;margin-bottom:8px!important;font-weight:600!important;
}
.login-fld input{
  background:transparent!important;
  border:none!important;border-bottom:1px solid var(--border)!important;
  padding:11px 0!important;font-size:.85rem!important;
  color:var(--onyx)!important;font-weight:300!important;
  transition:border-color .25s!important;
}
.login-fld input::placeholder{color:rgba(45,16,21,.28)!important;}
.login-fld input:focus{border-bottom-color:var(--bloodstone)!important;outline:none!important;}
.login-btn{
  margin-top:10px!important;padding:16px!important;
  font-size:.72rem!important;letter-spacing:.24em!important;
  background:var(--bloodstone)!important;
}
.login-err{font-size:var(--text-sm)!important;margin-top:14px!important;color:var(--bad)!important;}
.login-hint{
  font-size:var(--text-sm)!important;color:var(--sage)!important;
  margin-top:22px!important;letter-spacing:.03em!important;text-align:center!important;
}
/* Forgot panel */
#forgotPanel{max-width:420px!important;width:100%!important;}
#forgotPanel > div{
  border-top:none!important;padding-top:0!important;
  padding:28px 0 0!important;
}
#forgotPanel p{color:rgba(45,16,21,.62)!important;font-size:var(--text-ui)!important;}
#forgotPanel input{
  background:transparent!important;
  border:none!important;border-bottom:1px solid var(--border)!important;
  color:var(--onyx)!important;padding:11px 0!important;font-size:.85rem!important;
  margin-top:10px!important;
}
#forgotPanel button[onclick]{
  background:var(--bloodstone)!important;font-size:var(--text-xs)!important;
  letter-spacing:.28em!important;padding:15px!important;
}
#forgotMsg{color:rgba(45,16,21,.62)!important;font-size:var(--text-ui)!important;}
/* Non-inbox recovery block on the forgot-code screen (2026-07-23 friction fix).
   Prominent bloodstone outline = the house "action" affordance, clearly distinct
   from the filled "Send New Code" primary above it. */
.login-recover{margin-top:24px;padding-top:22px;border-top:1px solid var(--border);text-align:center;}
.login-recover-lead{font-family:'Montserrat',sans-serif;font-size:.72rem;line-height:1.7;color:rgba(45,16,21,.62);margin:0 0 14px;font-weight:300;}
/* selector is `a.login-recover-btn` + !important so it outranks the UA a:link
   rule (specificity 0,1,1), which otherwise paints the text default-blue. */
a.login-recover-btn{display:inline-block;font-family:'Montserrat',sans-serif;font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:var(--bloodstone)!important;text-decoration:none!important;border:1px solid var(--bloodstone);padding:12px 22px;font-weight:600;transition:background .2s,color .2s;}
a.login-recover-btn:hover,a.login-recover-btn:focus-visible{background:var(--bloodstone)!important;color:#fff!important;outline:none;}
@media(max-width:540px){
  .login-box,#forgotPanel{padding-left:0!important;padding-right:0!important;}
}

/* ═══════════════════════════════════════════════════════
   BRIEFING PROGRESS BAR — redesign
   ═══════════════════════════════════════════════════════ */
.brief-prog{
  padding:0 64px!important;background:var(--white)!important;
  border-bottom:1px solid var(--border)!important;
  gap:0!important;height:44px!important;
}
.brief-prog-lbl{
  font-size:.63rem!important;letter-spacing:.24em!important;
  color:var(--sage)!important;font-weight:700!important;
  flex-shrink:0;margin-right:20px!important;
}
.brief-prog-bar{
  flex:1!important;max-width:none!important;
  height:2px!important;background:rgba(45,16,21,.07)!important;
}
.brief-prog-fill{height:2px!important;background:var(--bloodstone)!important;}
.brief-prog-pct{
  font-size:.63rem!important;letter-spacing:.2em!important;
  color:var(--bloodstone)!important;font-weight:700!important;
  flex-shrink:0;margin-left:20px!important;min-width:32px!important;text-align:right!important;
}
@media(max-width:600px){.brief-prog{padding:0 20px!important;}}

/* ═══════════════════════════════════════════════════════
   BRIEFING URGENCY BANNER — redesign
   ═══════════════════════════════════════════════════════ */
.brief-urgency{
  background:var(--white)!important;
  border-bottom:none!important;border-top:none!important;
  border-left:none!important;border-right:none!important;
  border-bottom:2px solid rgba(146,38,48,.18)!important;
}
.bub-inner{
  max-width:none!important;padding:16px 64px!important;gap:18px!important;
}
.bub-icon{font-size:1rem!important;opacity:.6;}
.bub-text{
  font-size:.78rem!important;font-weight:300!important;
  color:var(--onyx)!important;white-space:normal!important;
}
.bub-text strong{font-weight:700!important;color:var(--bloodstone)!important;}
.bub-cta{
  font-size:var(--text-xs)!important;letter-spacing:.22em!important;
  padding:10px 20px!important;flex-shrink:0!important;
  background:var(--bloodstone)!important;
}
@media(max-width:600px){.bub-inner{padding:14px 20px!important;}}

/* ═══════════════════════════════════════════════════════
   YOUR DOCUMENTS — magazine tile grid (Design 3)
   ═══════════════════════════════════════════════════════ */
.docs-section{margin:0!important;background:var(--ivory);}
.docs-section-hdr{font-size:.78rem!important;letter-spacing:.26em!important;color:var(--sage)!important;font-weight:700!important;padding:26px 64px 22px!important;border-bottom:1px solid var(--border)!important;margin-bottom:0!important;background:var(--white);}
.docs-grid{display:grid!important;grid-template-columns:repeat(5,1fr)!important;gap:16px!important;background:transparent!important;padding:24px 64px 32px!important;}
.doc-card{padding:28px 24px!important;background:var(--white)!important;flex-direction:column!important;gap:0!important;align-items:flex-start!important;border:none!important;border-bottom:3px solid transparent!important;position:relative!important;transition:border-color .2s,transform .18s!important;cursor:default!important;aspect-ratio:1!important;overflow:hidden!important;}
.doc-card:hover{border-bottom-color:var(--gold)!important;transform:translateY(-2px)!important;}
.doc-big-num{font-family:'Libre Baskerville',serif!important;font-size:3.8rem!important;font-weight:700!important;color:var(--gold)!important;opacity:.14!important;line-height:1!important;margin-bottom:10px!important;}
.doc-icon{display:none!important;}
.doc-icon-large{display:none!important;}
.doc-info{width:100%;}
.doc-status-tag{display:block;font-size:.63rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);font-weight:700;font-family:'Montserrat',sans-serif;margin-bottom:14px;}
.doc-status-tag.ready{color:var(--success);}
.doc-title{font-family:'Libre Baskerville',serif!important;font-size:1rem!important;color:var(--onyx-dk)!important;font-weight:400!important;margin-bottom:8px!important;letter-spacing:0!important;line-height:1.4!important;}
.doc-sub{font-size:.72rem!important;color:var(--sage)!important;line-height:1.7!important;margin-bottom:0!important;font-weight:300!important;}
.doc-btn-soon{display:none!important;}
.doc-actions{margin-top:20px!important;}
@media(max-width:900px){.docs-grid{grid-template-columns:1fr 1fr!important;padding:20px 24px 24px!important;}}
@media(max-width:540px){.docs-grid{grid-template-columns:1fr!important;padding:16px 16px 20px!important;}}
@media(max-width:600px){
  .docs-section-hdr{padding:20px 20px 16px!important;}
  .doc-card{padding:28px 24px!important;}
}

/* ═══════════════════════════════════════════════════════
   BRIEFING — UNIFIED PORTAL REDESIGN
   Removes duplicate step-nav; makes form sections match
   the portal's full-width editorial aesthetic.
   ═══════════════════════════════════════════════════════ */

/* 1 ── Remove the duplicate "1 Brief › 2 Design" step nav from every tab */
.portal-progress{display:none!important;}

/* 2 ── Form wrapper — remove narrow centered column */
.form-wrap{
  max-width:none!important;padding:0!important;margin:0!important;
  background:var(--ivory)!important;
}

/* 3 ── Each form section = white portal block */
/* Preserve existing JS-driven fade-in: JS toggles .vis to restore opacity/transform */
.sec{
  background:var(--white)!important;
  border-bottom:1px solid var(--border)!important;
  padding:52px 64px 48px!important;
  margin-bottom:0!important;
}

/* 4 ── Section header — inner divider, portal rhythm */
.sec-hdr{
  padding:0 0 28px!important;
  margin-bottom:36px!important;
  border-bottom:1px solid var(--border)!important;
}

/* 5 ── Eyebrow / section number */
.sec-num{
  font-size:.78rem!important;letter-spacing:.26em!important;
  color:var(--sage)!important;margin-bottom:16px!important;font-weight:700!important;
}

/* 6 ── Section title */
.sec-title{font-size:clamp(1.9rem,3vw,2.6rem)!important;line-height:1.1!important;margin-bottom:12px!important;}

/* 7 ── Section description */
.sec-desc{max-width:560px!important;}

/* 8 ── Cap form content width inside full-bleed sections for readability */
.sec>*:not(.sec-hdr){max-width:720px;}
.sec>.palette-explorer,.sec>#customFontPicker,.sec>.type-opts,.sec>#typeMoreOpts{max-width:860px!important;}

/* 9 ── Text / email / tel / number / date / time inputs — underline only */
.form-wrap .fld-input{
  border:none!important;
  border-bottom:1px solid rgba(45,16,21,.13)!important;
  padding:12px 0!important;background:transparent!important;box-shadow:none!important;
}
.form-wrap .fld-input:hover{border-bottom-color:rgba(45,16,21,.3)!important;box-shadow:none!important;}
.form-wrap .fld-input:focus{border-bottom-color:var(--bloodstone)!important;box-shadow:none!important;}
.form-wrap .fld-input.err{border-bottom-color:var(--brick)!important;}

/* 10 ── Selects — underline (appearance:none already strips native arrow) */
.form-wrap .fld-select{
  border:none!important;
  border-bottom:1px solid rgba(45,16,21,.13)!important;
  padding:12px 0!important;background:transparent!important;box-shadow:none!important;
}
.form-wrap .fld-select:hover{border-bottom-color:rgba(45,16,21,.3)!important;}
.form-wrap .fld-select:focus{border-bottom-color:var(--bloodstone)!important;box-shadow:none!important;}
.form-wrap .fld-select option{padding:8px 12px!important;}

/* 11 ── Textareas — keep box (better UX for multi-line editing) */
.form-wrap .fld-textarea{
  border:1px solid rgba(45,16,21,.1)!important;padding:16px!important;
  background:var(--white)!important;box-shadow:none!important;
}
.form-wrap .fld-textarea:hover{border-color:rgba(45,16,21,.22)!important;}
.form-wrap .fld-textarea:focus{border-color:var(--bloodstone)!important;box-shadow:none!important;}

/* 12 ── Submit block — full-width, generous padding */
.submit-block{margin-top:0!important;padding:72px 64px!important;}

/* 13 ── Briefing submitted panel — ONE centred column
   Owner, 2026-07-31: "too much on the left". Three different left edges were
   fighting on this tab: `margin:0!important` below pinned the answers column
   hard against x=0, the hero/status/read-only bars sat at a fixed 64px inset,
   and #homeTimelineCard had no width rule at all so the mailing-calendar card
   stretched the entire viewport. On a 1600px screen the content crowded into
   the left 860px with ~740px of empty ivory on the right.
   Fix: the bars stay full-bleed (their white backgrounds are meant to span),
   but their CONTENT is inset onto the same 732px measure as the answers, and
   the answers column is centred. max() keeps the old 64px gutter whenever the
   viewport can't fit the measure plus gutters, so nothing under ~990px moves. */
.bsp-inner{max-width:860px!important;padding:44px 64px 80px!important;margin:0 auto!important;}
.bsp-hero,
.bsp-status-bar,
.bsp-readonly-bar,
#homeTimelineCard{
  padding-left:max(64px,calc((100% - 732px) / 2));
  padding-right:max(64px,calc((100% - 732px) / 2));
}
@media(max-width:700px){
  .bsp-hero,.bsp-status-bar,.bsp-readonly-bar,#homeTimelineCard{
    padding-left:20px;padding-right:20px;
  }
}

/* 14 ── Mobile */
@media(max-width:640px){
  .sec{padding:40px 20px 36px!important;}
  .sec>*:not(.sec-hdr){max-width:none;}
  .submit-block{padding:56px 20px!important;}
  .bsp-inner{padding:28px 20px 60px!important;}
}

/* ═══════════════════════════════════════════════════════
   TAB 02 — STATUS PILL FILTER INTERACTIVITY
   ═══════════════════════════════════════════════════════ */
.ds-spill{cursor:pointer!important;transition:opacity .2s,color .2s!important;user-select:none;}
.ds-spill:hover{opacity:.75!important;}
.ds-spill.ds-spill-active{opacity:1!important;}
.ds-spill.ds-spill-active .ds-spill-count{
  color:var(--onyx)!important;font-weight:700!important;
}
/* Dim inactive pills when filter is active */
.ds-filter-on .ds-spill:not(.ds-spill-active){opacity:.35!important;}
/* Show-all reset button */
.ds-filter-reset{
  font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.18em;
  text-transform:uppercase;color:var(--sage);background:none;border:none;
  cursor:pointer;padding:4px 0;transition:color .2s;font-weight:600;
}
.ds-filter-reset:hover{color:var(--bloodstone);}

/* ═══════════════════════════════════════════════════════
   TAB 03 — QUICK SUMMARY CHIPS
   ═══════════════════════════════════════════════════════ */
.t3-summary-row{
  display:flex!important;flex-wrap:nowrap;gap:6px;overflow-x:auto;
  background:transparent;
  border-bottom:1px solid var(--border);
  padding:10px 24px;
  scrollbar-width:none;
}
.t3-summary-row::-webkit-scrollbar{display:none;}
.t3-sq-card{
  flex:1 1 0;min-width:0;display:flex;align-items:center;gap:10px;
  padding:11px 16px;background:var(--white);cursor:pointer;
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);
  letter-spacing:.18em;text-transform:uppercase;font-weight:600;
  white-space:nowrap;
  transition:all .18s;border:1px solid var(--border-d);text-align:left;
}
.t3-sq-card:hover{background:var(--ivory);border-color:rgba(45,16,21,.22);}
.t3-sq-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;transition:transform .2s;}
.t3-sq-card:hover .t3-sq-dot{transform:scale(1.3);}
.t3-sq-approved{border-color:rgba(45,106,79,.32);background:rgba(45,106,79,.025);}
.t3-sq-approved .t3-sq-dot{background:var(--success);}
.t3-sq-approved .t3-sq-name{color:var(--success);}
.t3-sq-approved:hover{background:rgba(45,106,79,.05);border-color:rgba(45,106,79,.5);}
.t3-sq-pending .t3-sq-dot{background:rgba(45,16,21,.22);}
.t3-sq-pending .t3-sq-name{color:rgba(45,16,21,.5);}
.t3-sq-in-review{border-color:rgba(184,147,90,.32);}
.t3-sq-in-review .t3-sq-dot{background:rgba(184,147,90,.8);}
.t3-sq-in-review .t3-sq-name{color:rgba(184,147,90,.9);}
.t3-sq-in-design .t3-sq-dot{background:rgba(45,16,21,.28);}
.t3-sq-in-design .t3-sq-name{color:rgba(45,16,21,.48);}
@media(max-width:640px){
  .t3-summary-row{padding:10px 16px!important;}
  .t3-sq-card{padding:12px 16px!important;}
}

/* ═══════════════════════════════════════════════════════
   BILLING TAB STYLES
   ═══════════════════════════════════════════════════════ */
.billing-hero{padding:72px 64px 48px;text-align:center;border-bottom:1px solid var(--border)}
.billing-title{font-family:'Libre Baskerville',serif;font-size:2.4rem;font-weight:400;margin-bottom:12px;color:var(--onyx)}
.billing-sub{font-size:.9rem;color:var(--sage);max-width:640px;margin:0 auto}
.billing-container{max-width:960px;margin:0 auto;padding:52px 64px}
.billing-section{margin-bottom:64px}
.billing-section-title{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--sage);font-weight:600;margin-bottom:24px;padding-bottom:12px;border-bottom:2px solid var(--border)}
.billing-plan-card{background:var(--white);border:1px solid var(--border);padding:32px;display:grid;grid-template-columns:repeat(3,1fr);gap:32px;border-radius:0}
.plan-detail{display:flex;flex-direction:column;gap:8px}
.plan-label{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);letter-spacing:.15em;text-transform:uppercase;color:var(--sage);font-weight:600}
.plan-value{font-family:'Libre Baskerville',serif;font-size:1.4rem;color:var(--onyx);font-weight:400}
.invoice-table{border-collapse:collapse;width:100%}
.invoice-table tbody tr{border-bottom:1px solid var(--border);transition:background .2s}
.invoice-table tbody tr:hover{background:var(--ivory)}
.invoice-table td{padding:14px 12px;font-size:.85rem;color:var(--onyx)}
.invoice-date{font-weight:500;color:var(--sage)}
.invoice-amount{font-weight:600;color:var(--onyx)}
.invoice-status{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:600;letter-spacing:.1em;text-transform:uppercase;padding:6px 12px;background:var(--ivory);display:inline-block;border-radius:0}
.invoice-status.paid{background:var(--success);color:var(--white)}
.invoice-download-btn{background:none;border:none;color:var(--bloodstone);cursor:pointer;font-size:var(--text-sm);font-family:'Montserrat',sans-serif;letter-spacing:.1em;text-decoration:underline;transition:color .2s}
.invoice-download-btn:hover{color:var(--onyx)}
.billing-action-btn{font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;padding:12px 24px;border:1.5px solid var(--border);background:var(--white);color:var(--onyx);cursor:pointer;transition:all .2s;border-radius:0}
.billing-action-btn:hover{border-color:var(--bloodstone);color:var(--bloodstone)}
.billing-action-btn:disabled{opacity:.5;cursor:not-allowed}
.upgrade-option-card{background:var(--white);border:1px solid var(--border);border-top:3px solid var(--border);display:flex;flex-direction:column;gap:0;transition:all .3s;overflow:hidden}
.upgrade-option-card:hover{border-color:var(--bloodstone);border-top-color:var(--bloodstone);box-shadow:0 8px 32px rgba(146,38,48,.1)}
.upgrade-option-card--recommended{border-top-color:var(--bloodstone)}
.upgrade-card-header{padding:20px 28px 0;display:flex;align-items:center;gap:12px}
.upgrade-card-tier{font-family:'Libre Baskerville',serif;font-size:1.25rem;font-style:italic;color:var(--onyx)}
.upgrade-recommended-pill{font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;background:var(--bloodstone);color:var(--white);padding:4px 10px;border-radius:0;white-space:nowrap}
.upgrade-card-body{padding:16px 28px 24px;flex:1;display:flex;flex-direction:column;gap:16px}
.upgrade-card-tagline{font-size:var(--text-body);color:var(--sage);line-height:1.6;margin:0}
.upgrade-price-block{display:flex;align-items:baseline;gap:8px;padding:16px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.upgrade-price-label{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--sage)}
.upgrade-option-price{font-family:'Libre Baskerville',serif;font-size:2.2rem;color:var(--bloodstone);font-weight:400;line-height:1}
.upgrade-price-note{font-size:.72rem;color:var(--sage)}
.upgrade-option-features{font-size:.8rem;color:var(--sage);line-height:1.9;list-style:none;padding:0;margin:0}
.upgrade-option-features li{display:flex;align-items:baseline;gap:10px}
.upgrade-check{color:var(--bloodstone);font-size:var(--text-sm);flex-shrink:0}
.upgrade-btn{display:block;background:var(--bloodstone);color:var(--white);border:none;padding:var(--btn-pad-lg);font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;font-weight:600;cursor:pointer;transition:background .2s;text-align:center;text-decoration:none;margin-top:auto}
.upgrade-btn:hover{background:var(--bloodstone-dk)}
@media(max-width:640px){
  .billing-hero{padding:48px 20px 32px}
  .billing-title{font-size:1.8rem}
  .billing-container{padding:32px 20px}
  .billing-plan-card{grid-template-columns:1fr;gap:16px;padding:20px}
  .plan-value{font-size:1.2rem}
}

/* ── MOBILE RESPONSIVENESS: Small screens ≤ 600px — stacked equal-width tabs ── */
@media(max-width:600px){
  .portal-hdr{overflow-x:hidden}
  .hdr-logo{letter-spacing:.18em}
  /* Equal-width tabs that all fit on one line — no horizontal scroll needed */
  .portal-tabs{overflow-x:hidden}
  .ptab{
    flex:1 1 0;min-width:0;
    flex-direction:column;align-items:center;justify-content:center;
    gap:3px;padding:9px 4px 8px;
    font-size:.63rem;letter-spacing:.1em;white-space:normal;text-align:center;
  }
  /* Show step number above short label */
  .ptab-num{display:block!important;font-size:.63rem;opacity:.45;margin-bottom:1px}
  /* Swap to short label */
  .ptab-lbl{display:none}
  /* 2026-07-29 mobile audit (H-3), second half: renaming tab 02 to "Boards"
     fixed 375px and up, but at 360px — the common Android width — the cell is
     only 59px of content box and "Boards" measures 61px, so it would have
     clipped by 2px and the bug would have quietly survived on a whole class of
     device. Tightening the tracking here buys ~5px across a six-character
     label, which puts every one of the five (Vision 49, Boards 61, Designs 63,
     Suite 41, Guests 55) inside the cell at 360px with room to spare. The
     letter-spacing is decorative at 12px anyway. */
  .ptab-lbl-s{display:block;letter-spacing:.04em}
  .ptab{padding-left:3px;padding-right:3px}
  /* Shrink dot to fit the tight layout */
  .ptab-dot{width:4px;height:4px;margin-bottom:1px}
  /* var(--hdr-h), not a hardcoded 110px (2026-07-29 mobile audit, L-6).
     syncHeaderPad() measures the header and publishes its real height; this
     rule used to guess, and the guess was wrong in both directions. Measured at
     360px on the guests tab: header 121px tall, body padding 100px — so the top
     21px of every tab's content sat behind the fixed header. Guessing a fixed
     number for an element whose height depends on which controls have been
     revealed is what created the drift; track the measurement instead. */
  body{padding-top:calc(var(--hdr-h,110px) + var(--beta-h,0px))}
}

/* ── MOBILE RESPONSIVENESS: Extra-small screens < 400px ── */
@media(max-width:400px){
  .portal-hdr{overflow-x:hidden}
  .hdr-top{padding:12px 14px;gap:12px}
  .hdr-logo{font-size:var(--text-ui);letter-spacing:.18em}
  .hdr-meta{gap:8px}
  #logoutBtn{padding:6px 10px;font-size:.78rem;letter-spacing:.12em}
  .ptab{padding:8px 2px 7px;font-size:.63rem;letter-spacing:.08em}
  .ptab-num{font-size:.63rem}
  /* Same reason as the ≤600px block above (L-6): track the measured header
     rather than guessing. This 100px was the value actually in force at 360px,
     against a real header of 121px. */
  body{padding-top:calc(var(--hdr-h,100px) + var(--beta-h,0px))}
}

/* ── LANDSCAPE ORIENTATION SUPPORT ── */
@media(max-height:500px) and (orientation:landscape){
  .portal-hdr{position:relative}
  .hdr-top{padding:10px 14px}
  .hdr-logo{font-size:.79rem}
  #logoutBtn{padding:4px 10px;font-size:.78rem}
  /* 0, not 80px: .portal-hdr is position:relative one line above, so it is in
     normal flow and needs no reserved space. Kept in sync with the duplicate
     landscape block further down (search "H-4"). */
  body{padding-top:0}
  .portal-tabs{overflow-x:auto}
  .ptab{padding:8px 10px;font-size:var(--text-xs)}
  /* 2026-07-29 mobile audit (L-5): landscape is the one place the LONG labels
     are used, and "Your Complete Suite" needs 164px against a 156px cell — so
     tab 04 rendered as "YOUR COMPLETE SUI". Rather than invent a fourth sizing
     scheme, reuse the short labels that portrait already proved fit; five of
     them across 844px is comfortable and it keeps the two orientations reading
     the same.
     ⚠ CORRECTED 2026-08-07 — this comment used to end "…and .ptab-lbl still
     carries the full name for screen readers, so nothing is lost to assistive
     tech." That was FALSE. `display:none` removes .ptab-lbl from the
     accessibility tree, not merely from view, and .ptab-lbl-s is aria-hidden —
     so below these widths the five tab buttons had NO accessible name at all
     (axe-core `button-name`, critical: 5/5 nodes at 375px, clean at 1280px).
     The name now comes from an explicit aria-label on each <button> in
     client-portal.html, which is width-independent; these display swaps are
     therefore safe. Keep those labels in step with .ptab-lbl if either changes. */
  .ptab-lbl{display:none}
  .ptab-lbl-s{display:block}
  .brief-hero{padding:24px 20px}
  .hero-title{font-size:clamp(1.4rem,3vw,1.8rem)}
}

/* ── TABLET OPTIMIZATION (640px - 1024px) ── */
@media(max-width:1024px) and (min-width:641px){
  .brief-hero{padding:40px 36px 30px}
  .pkg-strip{padding:20px 36px;gap:40px}
  .form-wrap{padding:60px 20px 60px}
  .suite-hero{padding:28px 32px}
  .suite-sample-label{margin:0 32px}
  .suite-iframe-wrap{margin:0 32px 32px}
  .approval-section{margin:20px 32px 0}
}

/* ── ENSURE NO HORIZONTAL SCROLLING ON MOBILE ── */
@media(max-width:640px){
  .portal-tabs{width:100%!important;max-width:100%!important}
  .hdr-top{width:100%!important;max-width:100%!important}
  .fld-row{grid-template-columns:1fr}
  .pal-grid{grid-template-columns:1fr}
  .feeling-grid{grid-template-columns:1fr}
  .rsvp-fld-row{grid-template-columns:1fr;gap:12px}
  .rsvp-stat-card{padding:16px 12px}
  .rsvp-table th{padding:10px 8px 10px 12px}
  .rsvp-table td{padding:10px 8px 10px 12px}
  .rsvp-add-form{padding:20px;margin:0}
  .rsvp-list-hdr-outer{padding:16px}
  .approval-section{padding:28px 16px;margin:16px 0 0}
  .approval-title{font-size:1.6rem}
  .approval-btns{gap:8px;flex-direction:column}
  .btn-approve,.btn-decline{min-width:auto;width:100%;padding:14px 16px;font-size:.71rem}
  .suite-hero{flex-direction:column;align-items:flex-start;gap:12px}
  .status-row{flex-wrap:wrap}
  .status-step{padding:6px 10px;font-size:.78rem}
  .suite-title-block h2{font-size:1.5rem}
  .ndl-formats{grid-template-columns:repeat(2,1fr) !important}
  .ndl-fmt{padding:14px 10px}
}

/* ── TOUCH TARGET SIZE FOR MOBILE (44px minimum) ── */
@media(max-width:640px){
  .ptab{min-height:44px;display:flex;align-items:center}
  #logoutBtn{min-height:40px;display:flex;align-items:center;justify-content:center}
  .btn-approve,.btn-decline,.rsvp-add-btn,.upgrade-btn,.submit-btn{min-height:44px;padding:12px 16px}
  .fld-input,.fld-select,.fld-textarea{min-height:44px;padding:12px 12px}

  /* 2026-07-29 mobile audit (L-4) — controls this pass had missed. Measured on
     a phone: the access-code reveal was 24x24, the updates-drawer close 28x28,
     the event switcher 48x33, and .nsc-btn — the "next step" call to action
     that is the whole point of the dashboard — 35px tall. Padding rather than
     height so nothing reflows; the icon buttons get a centred flex box. */
  .login-eye{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;padding:4px}
  .inbox-close{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}
  .hdr-client-chip{min-height:44px}
  .nsc-btn{min-height:44px;padding:13px 24px}

  /* The moodboard decision screen (2026-07-29 mobile audit, found on the second
     pass once a client could actually be put in front of it). Choosing a
     direction is the single most consequential tap in the whole journey — it
     locks the creative world the entire suite is built from — and the two
     buttons measured 32px, with the "neither of these" escape hatch at 14px.
     Sized like the decisions they are. */
  .cdl-approve-btn{min-height:48px;padding:14px 18px}
  .ds-hero-cta{min-height:44px}   /* measured 43 — one pixel under is still under */
  /* #portalConfirmOverlay is the house's shared yes/no dialog — the last tap
     before anything irreversible ("Lock in Moodboard A?", and every other
     confirm in the portal). Its buttons are built in JS with inline padding and
     no class, so they measured 38px and only !important can reach them. One
     rule, every confirmation. */
  #portalConfirmOverlay button{min-height:44px!important;padding:13px 22px!important}
  .cdl-neither-link{min-height:44px;padding:14px 8px;display:inline-flex;align-items:center;justify-content:center}
  .iframe-expand-btn{min-height:44px;padding:12px 18px}
}

/* ── NO FOCUS ZOOM ON iOS (2026-07-29 mobile audit, C-1) ──
   Mobile Safari zooms the whole page in whenever a focused text control's
   computed font-size is under 16px, and does NOT zoom back out on blur — so the
   client has to pinch out again after every field. The clamp at
   "MINIMUM READABLE SIZES" above floors these controls at 13px, three pixels
   under the threshold, and the touch-target block above raised min-height but
   never font-size. Measured before this rule: 115 controls at 13px, ~100 of
   them in the ten-section vision brief and the guest manager — i.e. the two
   journeys a paying client actually has to complete.
   The homepage checkout has always been correct (#payName/#payEmail/
   #payEventDate/#payReferral all compute to exactly 16px), so this brings the
   portal in line with the house standard rather than inventing one.
   Scoped by viewport rather than (pointer:coarse) so it is verifiable in a
   desktop browser at phone dimensions; the landscape arm is required because a
   phone on its side is 800-932px wide and iOS zooms there too. */
@media(max-width:640px), (max-height:500px) and (orientation:landscape){
  input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=submit]):not([type=button]):not([type=file]):not([type=image]):not([type=hidden]),
  select, textarea,
  .fld-input, .fld-select, .fld-textarea, .thread-textarea,
  .login-fld input, .ag-search-input, .pay-input{
    /* !important is required, not lazy: `.login-fld input{font-size:.85rem
       !important}` exists earlier in this file, and !important beats any
       specificity. Verified — without it the two login fields, the
       forgot-code field and the testimonial/satisfaction textareas stayed at
       13.6/13.12px and still zoomed. main.css's equivalent homepage rule uses
       !important for exactly this reason and says so. */
    font-size:16px !important;
  }
}

/* ── DESIGN VERSION TIMELINE ── */
.design-timeline-modal{position:fixed;inset:0;background:var(--overlay-bg);z-index:500;display:none;align-items:center;justify-content:center;padding:20px;animation:fadeIn .3s ease}
.design-timeline-modal.open{display:flex}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.design-timeline-content{background:var(--white);border-radius:0;max-width:600px;width:100%;max-height:85vh;overflow-y:auto;box-shadow:0 20px 60px rgba(45,16,21,.25);animation:slideUp .3s ease}
@keyframes slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
.design-timeline-hdr{padding:32px 32px 24px;border-bottom:1px solid var(--border);text-align:center}
.design-timeline-piece-name{font-family:'Libre Baskerville',serif;font-size:1.6rem;font-weight:400;color:var(--onyx-dk);margin-bottom:8px}
.design-timeline-piece-sub{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--sage);letter-spacing:.08em;text-transform:uppercase}
.design-timeline-body{padding:32px}
.design-timeline-vertical{position:relative;padding-left:40px}
.design-timeline-vertical::before{content:'';position:absolute;left:16px;top:20px;bottom:0;width:2px;background:var(--border)}
.design-timeline-node{position:relative;margin-bottom:32px}
.design-timeline-node::before{content:'';position:absolute;left:-34px;top:0;width:18px;height:18px;border-radius:50%;background:var(--white);border:3px solid var(--border)}
.design-timeline-node.current::before{border-color:var(--bloodstone);background:var(--bloodstone)}
.design-timeline-node.approved::before{border-color:var(--success);background:var(--success)}
.design-timeline-node.revision::before{border-color:rgba(146,38,48,.4)}
.design-timeline-event{padding:16px;background:var(--ivory);border-left:3px solid var(--border);border-radius:0}
.design-timeline-node.current .design-timeline-event{border-left-color:var(--bloodstone);background:rgba(146,38,48,.04)}
.design-timeline-node.approved .design-timeline-event{border-left-color:var(--success);background:rgba(45,106,79,.04)}
.design-timeline-node.revision .design-timeline-event{border-left-color:rgba(146,38,48,.4)}
.design-timeline-version{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--onyx);margin-bottom:4px}
.design-timeline-date{font-family:'Montserrat',sans-serif;font-size:.79rem;color:var(--sage);margin-bottom:6px}
.design-timeline-status{display:inline-block;font-family:'Montserrat',sans-serif;font-size:.71rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;padding:3px 10px;background:var(--ivory);border:1px solid var(--border);color:var(--sage);margin-bottom:6px}
.design-timeline-node.current .design-timeline-status{background:rgba(146,38,48,.1);border-color:var(--bloodstone);color:var(--bloodstone)}
.design-timeline-node.approved .design-timeline-status{background:rgba(45,106,79,.1);border-color:var(--success);color:var(--success)}
.design-timeline-details{font-family:'Montserrat',sans-serif;font-size:.78rem;color:rgba(45,16,21,.7);line-height:1.6;margin-top:8px}
.design-timeline-close{position:absolute;top:16px;right:16px;background:none;border:none;font-size:1.5rem;color:var(--sage);cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:color .2s}
.design-timeline-close:hover{color:var(--onyx)}
@media(max-width:640px){
  .design-timeline-content{max-width:100%;border-radius:0}
  .design-timeline-hdr{padding:24px 20px 18px}
  .design-timeline-piece-name{font-size:1.4rem}
  .design-timeline-body{padding:20px}
  .design-timeline-node{margin-bottom:24px}
}

/* ── Colour wheel responsive (Fix 6) ── */
@media(max-width:640px){
  .wheel-wrap{flex-direction:column;align-items:center;gap:18px}
  .wheel-canvas-wrap{width:200px;max-width:100%}
  .wheel-canvas{width:100%!important;height:auto!important}
  .palette-explorer{overflow-x:hidden}
  .pal-grid-v3{grid-template-columns:1fr!important}
  .pal-mode-toggle{max-width:100%!important}
  .pal-tabs{flex-wrap:wrap;gap:6px}
}

/* ── Fix 8a: bsp-inner responsive padding ── */
.bsp-inner{padding-left:64px;padding-right:64px}
@media(max-width:720px){.bsp-inner{padding-left:20px;padding-right:20px}}

/* ── Fix 8b: portal loading overlay class ── */
.portal-loading-overlay{position:fixed;inset:0;background:var(--onyx);z-index:500;flex-direction:column;align-items:center;justify-content:center;gap:18px}

/* ── Fix 8c: billing table headers ── */
.billing-th{padding:12px;text-align:left;font-size:var(--text-sm);font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--sage)}

/* ── Tab 03 empty state ── */
.t3-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:100px 40px;min-height:380px}
.t3-es-icon{font-size:.72rem;color:var(--bloodstone);opacity:.35;letter-spacing:.3em;margin-bottom:20px;display:block}
.t3-es-label{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.25em;text-transform:uppercase;color:var(--sage);margin-bottom:28px}
.t3-es-title{font-family:'Libre Baskerville',serif;font-size:1.45rem;font-weight:400;font-style:italic;color:var(--onyx);margin:0 0 22px;line-height:1.55}
.t3-es-sub{font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:300;line-height:1.9;color:var(--sage);max-width:480px;margin:0 0 32px}
.t3-es-sub strong{color:var(--onyx);font-weight:500}
.t3-es-divider{width:40px;height:1px;background:rgba(146,38,48,.2);border:none;margin:0 auto 20px}
.t3-es-tagline{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;color:rgba(57,90,85,.45);margin-bottom:36px}
.t3-es-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.22em;text-transform:uppercase;background:var(--bloodstone);color:var(--pearl);border:none;padding:14px 32px;cursor:pointer;transition:opacity .2s}
.t3-es-btn:hover{opacity:.85}

/* ── Download All button ── */
.ndl-dl-all-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.2em;text-transform:uppercase;background:var(--bloodstone);color:var(--pearl);border:none;padding:var(--btn-pad-lg);cursor:pointer;transition:opacity .2s}
.ndl-dl-all-btn:hover:not(:disabled){opacity:.85}
.ndl-dl-all-btn:disabled{opacity:.45;cursor:default}

/* ── DESIGN LIGHTBOX (full-screen HTML design preview) ── */
.design-lightbox{display:none;position:fixed;inset:0;background:var(--overlay-bg);z-index:900;align-items:center;justify-content:center;padding:12px}
.design-lightbox.open{display:flex}
.design-lightbox-inner{background:var(--white);width:100%;max-width:1120px;height:92vh;display:flex;flex-direction:column;box-shadow:0 24px 80px rgba(0,0,0,.5);border-radius:0;overflow:hidden}
.design-lightbox-hdr{display:flex;justify-content:space-between;align-items:center;padding:14px 20px;background:var(--ivory);border-bottom:1px solid var(--border);flex-shrink:0}
.design-lightbox-title{font-family:'Libre Baskerville',serif;font-size:.85rem;color:var(--onyx-dk);letter-spacing:.02em}
.design-lightbox-hdr-actions{display:flex;align-items:center;gap:12px}
.design-lightbox-newtab{background:none;border:1px solid var(--border);color:var(--sage);font-size:.72rem;letter-spacing:.04em;padding:4px 10px;cursor:pointer;transition:color .2s,border-color .2s;font-family:'Libre Baskerville',serif}
.design-lightbox-newtab:hover{color:var(--onyx);border-color:var(--onyx)}
.design-lightbox-close{background:none;border:none;color:var(--sage);font-size:1.5rem;cursor:pointer;padding:0;width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:color .2s;line-height:1}
.design-lightbox-close:hover{color:var(--onyx)}
.design-lightbox #designLightboxFrame{flex:1;width:100%;border:none;display:block}

/* ── CDL direction preview button ── */
.cdl-direction-actions{margin-top:24px;display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.cdl-view-btn{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;background:var(--bloodstone);color:var(--pearl);border:none;padding:12px 28px;cursor:pointer;transition:opacity .2s}
.cdl-view-btn:hover{opacity:.85}
.cdl-approval-badge{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;padding:11px 22px;border-radius:0;font-weight:600;border:1px solid;transition:background .3s,color .3s,border-color .3s}

/* Pending — matches view btn height, muted, subtle pulse to signal "waiting" */
.cdl-approval-badge.pending{background:transparent;color:var(--sage);border-color:var(--border);animation:cdl-pulse 2.8s ease-in-out infinite}
@keyframes cdl-pulse{0%,100%{opacity:1}50%{opacity:.45}}

/* Approved — solid green, mirrors the weight of the view button */
.cdl-approval-badge.approved{background:var(--success);color:#fff;border-color:var(--success);animation:none}

/* Revision — solid amber, actionable */
.cdl-approval-badge.revision{background:#B7791F;color:#fff;border-color:#B7791F;animation:none}

/* ── PORTAL LOADING OVERLAY ── */
.portal-loading-overlay{
  position:fixed;inset:0;background:var(--ivory);z-index:700;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;
}
.portal-loading-logo{
  font-family:'Libre Baskerville',serif;font-size:.72rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--sage);
}
.portal-loading-spinner{
  width:36px;height:36px;border:2px solid rgba(64,100,95,.2);
  border-top-color:var(--bloodstone);border-radius:50%;
  animation:btnspin .8s linear infinite;
}

/* ── LOGIN TEXT BUTTON (replaces inline-styled hint/back buttons) ── */
.login-text-btn{
  background:none;border:none;padding:0;
  color:var(--sage);font-size:inherit;font-family:inherit;
  font-weight:inherit;letter-spacing:inherit;
  cursor:pointer;text-decoration:underline;
  transition:color .2s;
}
.login-text-btn:hover{color:var(--bloodstone)}

/* ── PALETTE MODE TOGGLE BUTTONS ── */
.pal-mode-btn{
  flex:1;padding:12px 18px;font-family:'Montserrat',sans-serif;
  font-size:var(--text-body);letter-spacing:.24em;text-transform:uppercase;
  background:transparent;color:var(--onyx);border:0;cursor:pointer;
  transition:background .2s,color .2s;
}
.pal-mode-btn.active{background:var(--onyx);color:#FAF6EE}

/* ── FONT PICKER INLINE LABELS ── */
.font-picker-lbl{font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:rgba(45,16,21,.82);font-weight:500}
.font-picker-hide{font-size:.72rem;color:var(--bloodstone);cursor:pointer;text-decoration:underline}

/* ── MISC INLINE LABEL OVERRIDES ── */
.fld-lbl--sm{font-size:.78rem}
.login-hint-note{font-size:.72rem;color:var(--sage);line-height:1.7;font-style:italic}
.rsvp-guest-count{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--onyx);font-weight:700}
.admin-section-lbl{font-size:.78rem;letter-spacing:.22em;text-transform:uppercase;color:rgba(201,168,76,.8);margin-bottom:18px}
/* Was color:#fff for the old dark submit field — invisible on the C3 cream
   ground (2026-07-31). Sits opposite the button on the .sb-act row now, so it
   is left-aligned and no longer needs a bottom margin.
   ⚠ _setSyncState() force-sets display:block and REPLACES textContent on every
   save — so this element can never hold child elements. The "●" is part of the
   string it writes; don't add a dot span here. */
.autosave-hint{font-size:var(--text-xs);color:var(--sage);letter-spacing:.12em;margin:0;text-align:left}
/* Top-of-briefing live "Saved HH:MM" proof — sits on the light briefing bg (not
   the dark submit area), so it must override the base white. Aligned with the
   .brief-reassure line above it (client-experience audit 2026-07-23). */
.autosave-hint-top{margin:0;padding:2px 48px 10px;font-size:.7rem;color:var(--sage);letter-spacing:.04em;text-align:left;text-transform:none}
@media(max-width:900px){.autosave-hint-top{padding-left:32px;padding-right:32px}}
@media(max-width:600px){.autosave-hint-top{padding-left:20px;padding-right:20px;font-size:.66rem}}
/* Was color:#fff on the dark field. On cream that was invisible; at the tested
   alpha it also failed WCAG AA (2.88:1 against a 4.5 floor) in every colourway
   — this is real disclosure text, so it is now solid ash on ivory (~4.9:1). */
.submit-fine-print{
  font-size:var(--text-xs);color:rgba(45,16,21,.62);letter-spacing:.02em;line-height:1.7;
  text-align:left;max-width:60ch;margin-top:24px;padding-top:18px;
  border-top:1px solid rgba(146,38,48,.12);
}

/* ── SOCIAL KIT NOTES ── */
.kit-note{font-size:.72rem;color:var(--sage);line-height:1.7;font-style:italic}
.kit-note-center{font-size:.72rem;color:var(--sage);text-align:center;font-style:italic}

/* ── ACCOUNT CARET ── */
.hdr-caret{font-size:.63rem;opacity:.5}

.submit-terms-lbl{font-size:.78rem;line-height:1.6;color:#FAF6EE;cursor:pointer}


/* ── Inline-style extractions ──────────────────────────────────────── */

/* Monogram input */
#f_mono{letter-spacing:.4em;font-family:'Libre Baskerville',serif;font-size:1.1rem;text-transform:uppercase}
/* Type preview input */
#typePreview{font-family:'Libre Baskerville',serif;font-size:1rem}

/* Primary font picker samples (ts1–ts12) */
#ts1{font-family:'Libre Baskerville',serif;font-weight:400;font-size:1.7rem}
#ts2{font-family:'Libre Baskerville',serif;font-weight:400;font-style:italic;font-size:2rem}
#ts3{font-family:'Playfair Display',serif;font-weight:700;font-size:1.7rem}
#ts4{font-family:'Montserrat','Helvetica Neue',sans-serif;font-weight:300;letter-spacing:.06em;font-size:1.55rem}
#ts5{font-family:'Bodoni Moda','Playfair Display',serif;font-weight:700;font-size:1.7rem}
#ts6{font-family:'EB Garamond',serif;font-weight:400;font-size:1.9rem}
#ts7{font-family:'Great Vibes',cursive;font-weight:400;font-size:2.2rem}
#ts8{font-family:'Cinzel',serif;font-weight:400;letter-spacing:.06em;font-size:1.45rem}
#ts9{font-family:'Raleway',sans-serif;font-weight:200;letter-spacing:.1em;font-size:1.55rem}
#ts10{font-family:'Sacramento',cursive;font-weight:400;font-size:2.4rem}
#ts11{font-family:'Lora',serif;font-weight:400;font-size:1.75rem}
#ts12{font-family:'DM Sans',sans-serif;font-weight:300;letter-spacing:.04em;font-size:1.6rem}

/* Extended artistic/calligraphy samples (ts13–ts20) */
#ts13{font-family:'Zeyada',cursive;font-weight:400;font-size:2.4rem}
#ts14{font-family:'Italianno',cursive;font-weight:400;font-size:2.6rem}
#ts15{font-family:'Qwitcher Grypen',cursive;font-weight:400;font-size:2.2rem}
#ts16{font-family:'Ruthie',cursive;font-weight:400;font-size:2.6rem}
#ts17{font-family:'Alex Brush',cursive;font-weight:400;font-size:2.4rem}
#ts18{font-family:'Niconne',cursive;font-weight:400;font-size:2.2rem}
#ts19{font-family:'Arizonia',cursive;font-weight:400;font-size:2.4rem}
#ts20{font-family:'Euphoria Script',cursive;font-weight:400;font-size:2.4rem}
/* Halloween font samples */
#tsh1{font-family:'Creepster',cursive;font-weight:400;font-size:2rem}
#tsh2{font-family:'Metal Mania',cursive;font-weight:400;font-size:1.8rem}
#tsh3{font-family:'Eater',cursive;font-weight:400;font-size:1.8rem}
#tsh4{font-family:'Butcherman',cursive;font-weight:400;font-size:1.8rem}
#tsh5{font-family:'Nosifer',cursive;font-weight:400;font-size:1.7rem}

/* See more / See fewer button */
.type-see-more{display:block;width:100%;margin:14px 0 0;padding:11px 20px;background:transparent;border:1px solid rgba(250,246,238,.18);color:rgba(250,246,238,.62);font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;cursor:pointer;transition:color .2s,border-color .2s}
.type-see-more:hover{color:#B8935A;border-color:rgba(184,147,90,.4)}

/* Custom font picker samples (tsf1–tsf17) */
#tsf1{font-family:'Libre Baskerville',serif;font-weight:400;font-size:1.7rem}
#tsf2{font-family:'Libre Baskerville',serif;font-weight:400;font-style:italic;font-size:1.8rem}
#tsf3{font-family:'Libre Baskerville',serif;font-weight:300;font-size:2rem}
#tsf4{font-family:'Libre Baskerville',serif;font-weight:400;font-style:italic;font-size:2rem}
#tsf5{font-family:'Playfair Display',serif;font-weight:700;font-size:1.6rem}
#tsf6{font-family:'Playfair Display',serif;font-weight:400;font-style:italic;font-size:1.8rem}
#tsf7{font-family:'EB Garamond',serif;font-weight:400;font-size:1.9rem}
#tsf8{font-family:'Bodoni Moda',serif;font-weight:400;font-size:1.65rem}
#tsf9{font-family:'Cinzel',serif;font-weight:400;letter-spacing:.06em;font-size:1.4rem}
#tsf10{font-family:'Cinzel',serif;font-weight:700;letter-spacing:.05em;font-size:1.35rem}
#tsf11{font-family:'Great Vibes',cursive;font-weight:400;font-size:2.2rem}
#tsf12{font-family:'Pinyon Script',cursive;font-weight:400;font-size:2.1rem}
#tsf13{font-family:'Lora',serif;font-weight:400;font-size:1.75rem}
#tsf14{font-family:'Lora',serif;font-weight:400;font-style:italic;font-size:1.85rem}
#tsf15{font-family:'Raleway',sans-serif;font-weight:200;letter-spacing:.1em;font-size:1.55rem}
#tsf16{font-family:'DM Serif Display',serif;font-weight:400;font-size:1.75rem}
#tsf17{font-family:'Josefin Sans',sans-serif;font-weight:300;letter-spacing:.12em;font-size:1.5rem}
#tsf18{font-family:'Give You Glory',cursive;font-weight:400;font-size:2.4rem}

/* Lang dropdown caret */
.lang-caret{font-size:.63rem;opacity:.5}
/* No-pieces placeholder */
.pieces-empty-hint{font-size:.79rem;color:var(--sage);font-style:italic}
/* Terms validation message — a SECOND rule for #e_terms; the one that styles
   it as an error box is up at the SUBMIT section. This one only survives to
   set the size, and its colour had to go: rgba(250,246,238,.6) was near-white
   for the old dark submit field and left the message invisible on the C3 cream
   ground (2026-07-31). Colour is deliberately NOT set here so the error box
   rule stays the single source. */
#e_terms{font-size:.72rem;margin-bottom:14px}
/* Piece description panel */
#pieceDescription{margin:0 48px;padding:14px 20px;border-left:3px solid rgba(201,168,76,.4);background:rgba(201,168,76,.04);font-family:'Libre Baskerville',serif;font-size:var(--text-body);font-style:italic;color:var(--onyx);line-height:1.75}
/* Download status */
#ndlDownloadAllStatus{font-family:'Montserrat',sans-serif;font-size:.78rem;color:var(--sage)}
/* RSVP subtitle count */
#rsvpHeroSub{margin-top:-20px;opacity:.65;font-size:.79rem}
/* Upgrade info text */
.upgrade-info-txt{color:var(--sage);font-size:.85rem;margin-bottom:20px}
/* Billing state divs */
#invoiceLoading{text-align:center;padding:32px;color:var(--sage);font-size:.85rem}
#invoiceError{text-align:center;padding:32px;color:var(--brick);font-size:.85rem}
#invoiceEmpty,#upgradeMaxedMessage{text-align:center;padding:32px;color:var(--sage);font-size:.85rem}
/* Add-on status */
#addonStatusMsg{font-size:var(--text-ui);color:rgba(64,100,95,.6);margin-top:10px;text-align:right}

/* ── JS-generated HTML classes ──────────────────────────────────────── */

/* Creative direction approval buttons */
.cdl-approve-btn{font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.16em;text-transform:uppercase;background:rgba(45,106,79,.1);color:var(--success);border:1px solid rgba(45,106,79,.3);padding:8px 16px;cursor:pointer;border-radius:0;white-space:nowrap;transition:background .2s}
.cdl-approve-btn:hover{background:rgba(45,106,79,.18)}
.cdl-approve-btn--2{background:rgba(45,106,79,.05);border-color:rgba(45,106,79,.2)}
.cdl-revise-btn{font-family:'Montserrat',sans-serif;font-size:.71rem;letter-spacing:.16em;text-transform:uppercase;background:rgba(146,38,48,.07);color:var(--bloodstone);border:1px solid rgba(146,38,48,.25);padding:8px 16px;cursor:pointer;border-radius:0;white-space:nowrap;transition:background .2s}
.cdl-revise-btn:hover{background:rgba(146,38,48,.14)}
/* Sent revision note blocks */
.note-sent-lbl{font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);margin-bottom:10px}
.note-sent-content{background:#faf8f6;border:1px solid rgba(182,166,151,.35);padding:14px 16px;font-size:.8rem;color:var(--onyx);line-height:1.7}
.note-sent-action{margin-top:8px;font-size:var(--text-sm);letter-spacing:.14em;text-transform:uppercase;color:rgba(125,64,71,.7);cursor:pointer}
/* Brandbook empty state */
.bb-empty-icon{font-size:2.4rem;margin-bottom:24px;opacity:.45}
.bb-empty-title{font-size:1.55rem;font-weight:700;margin-bottom:14px}
.bb-empty-desc{font-size:.84rem;font-family:'Montserrat',sans-serif;letter-spacing:.06em;max-width:420px;line-height:1.8}
/* Revision history labels */
.rev-hist-section-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#B8935A;margin-bottom:18px}
.rev-hist-version-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgba(45,16,21,.5);margin-bottom:12px}
.rev-hist-date-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgba(146,38,48,.55);margin-bottom:6px}
.rev-hist-client-txt{font-family:'Montserrat',sans-serif;font-style:normal;font-size:var(--text-body);color:var(--onyx);line-height:1.7;padding-left:4px}
.rev-hist-designer-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgba(45,106,79,.6);margin-bottom:6px}
.rev-hist-designer-txt{font-family:'Montserrat',sans-serif;font-style:normal;font-size:var(--text-body);color:var(--onyx);line-height:1.7;padding-left:4px}
.rev-hist-pending-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.1em;color:rgba(45,16,21,.38);font-style:italic;margin-top:4px;padding-left:4px}
.rev-active-section-lbl{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgba(146,38,48,.55);margin-bottom:8px}
.rev-active-client-txt{font-family:'Montserrat',sans-serif;font-size:var(--text-body);color:var(--onyx);line-height:1.7;font-style:normal;margin:0 0 10px;white-space:pre-wrap;word-break:break-word}
.rev-active-block{background:var(--ivory);border-top:2px solid rgba(146,38,48,.1);padding:18px 28px 14px}
.rev-active-status{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.13em;text-transform:uppercase;color:rgba(45,16,21,.42)}
/* Revision history timeline thread */
.rh-entry{display:flex;gap:14px}
.rh-spine{display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:24px;padding-top:4px}
.rh-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.rh-dot--client{background:rgba(146,38,48,.35)}
.rh-dot--designer{background:rgba(45,106,79,.4)}
.rh-line{width:1px;background:rgba(45,16,21,.1);flex:1;margin-top:6px}
.rh-content{flex:1;padding-bottom:20px}
.rh-date{font-family:'Montserrat',sans-serif;font-size:.63rem;letter-spacing:.14em;text-transform:uppercase;color:rgba(45,16,21,.25);margin-top:6px}
/* Items / pieces empty states */
.items-empty-hint{font-size:var(--text-sm);color:rgba(45,16,21,.35);font-style:italic;padding:8px 0}
.rev-list-empty{font-size:var(--text-sm);color:rgba(182,166,151,.45);font-style:italic;padding:14px 0}
.spec-empty-cell{padding:24px 0;font-size:var(--text-sm);color:rgba(45,16,21,.4);font-style:italic}
.palette-pending{font-size:var(--text-sm);color:var(--sage);font-style:italic}
.palette-pending-span{font-size:var(--text-ui);color:var(--sage)}
/* Revision request rows */
.rev-req-row{padding:7px 0;border-bottom:1px solid rgba(200,189,182,.1);font-size:.8rem;color:rgba(182,166,151,.85)}
.rev-req-piece{font-family:'Libre Baskerville',serif;font-style:italic;color:var(--sage)}
.rev-req-count{font-size:.79rem;color:var(--sage);margin-top:2px}
/* RSVP table cells */
.rsvp-email-sub{font-size:var(--text-ui);color:var(--sage);margin-top:2px}
.rsvp-dash{color:rgba(64,100,95,.4);font-size:.78rem}
.rsvp-td-cell{font-size:.72rem}
.rsvp-empty-cell{text-align:center;padding:28px;font-size:.72rem;color:var(--sage)}
.meal-dash{color:rgba(182,166,151,.4);font-size:.78rem}
.ag-pdf-link{font-family:'Montserrat',sans-serif;font-size:var(--text-ui);color:var(--bloodstone);text-decoration:underline;text-underline-offset:2px;font-weight:500;transition:opacity .2s}
.ag-pdf-link:hover{opacity:.7}
/* Seating chart helpers */
.seating-empty-msg{padding:16px;font-size:var(--text-xs);color:var(--sage);font-style:italic}
.meal-chip-icon{display:inline-flex;align-items:center;gap:3px;margin-right:8px;font-size:var(--text-ui);color:#888}
.rsvp-plusone-badge{font-size:var(--text-sm);color:#7D4047}
.rsvp-dietary-badge{font-size:var(--text-ui);color:#B6A697}
.seating-meal-pct{color:#B6A697;font-size:var(--text-sm)}
/* Timeline / TNG empty states */
.timeline-empty-msg{padding:28px;font-size:var(--text-ui);color:var(--sage);text-align:center}
.tng-empty-hint{font-size:var(--text-xs);color:var(--sage);font-style:italic}
/* Upgrade diff badge */
.upgrade-diff{font-size:.71rem;color:var(--bloodstone)}
/* Admin remove button */
.int-rm-btn{background:none;border:none;color:rgba(182,166,151,.4);cursor:pointer;font-size:.8rem;line-height:1;padding:0;transition:color .2s}
/* Retry inline button */
.retry-inline-btn{background:none;border:none;color:#fff;text-decoration:underline;cursor:pointer;margin-left:12px;font-size:.78rem;padding:0}
/* bb-piece-sub override (revision pending note) */
.bb-piece-sub{font-family:'Montserrat',sans-serif;font-size:.72rem;color:var(--sage);font-weight:300;margin-top:6px;line-height:1.6}

.note-sent-piece{text-transform:none;font-family:'Libre Baskerville',serif;font-style:italic;font-size:.8rem;letter-spacing:0;color:var(--sage)}
/* CDL revision note textarea + submit */
.cdl-revision-ta{width:100%;box-sizing:border-box;font-family:'Montserrat',sans-serif;font-size:.82rem;font-style:normal;color:rgba(45,16,21,.8);line-height:1.8;padding:13px 14px;border:1px solid rgba(45,16,21,.1);background:var(--ivory);border-radius:0;resize:none;outline:none;min-height:100px;transition:border-color .2s;display:block}
.cdl-revision-ta::placeholder{color:rgba(45,16,21,.35);font-family:'Montserrat',sans-serif;font-style:italic}
.cdl-revision-ta:focus{border-color:rgba(146,38,48,.3)}
.cdl-revision-wrap{background:var(--ivory);border-top:2px solid rgba(146,38,48,.1);padding:18px 0 14px;margin-top:8px}
.cdl-revision-footer{display:flex;align-items:center;justify-content:space-between;margin-top:10px}
.cdl-revision-submit{font-family:'Montserrat',sans-serif;font-size:var(--text-sm);letter-spacing:.18em;text-transform:uppercase;background:var(--bloodstone);color:var(--ivory);border:none;padding:12px 28px;cursor:pointer;transition:background .3s}
.cdl-revision-submit:hover{background:var(--bloodstone-dk)}
.cdl-revision-submit:disabled{opacity:.55;cursor:not-allowed}
/* Downloads tab empty state */
.ndl-empty-hint{font-size:var(--text-sm);color:rgba(45,16,21,.35);font-style:italic;padding:8px 0 8px 64px;white-space:nowrap}
/* Icon in button (close/x) */
.btn-icon{font-size:1.1rem}
/* Retry inline button */
.retry-inline-btn{background:none;border:none;color:#fff;text-decoration:underline;cursor:pointer;margin-left:12px;padding:0}

/* ══════════════════════════════════════════════════════════════
   MOBILE RESPONSIVE — comprehensive breakpoints
   Covers all tablets, phones (iPhone SE → Pro Max, Samsung, etc.)
══════════════════════════════════════════════════════════════ */

/* ── 900px — Tablets landscape / large iPad ── */
@media(max-width:900px){
  /* Header */
  .hdr-top{padding:14px 28px}

  /* Brief */
  .brief-hero{padding:40px 28px 32px}
  .pkg-strip{padding:18px 28px;column-gap:24px}

  /* Suite tab */
  .suite-hero{padding:28px 28px;flex-direction:column;align-items:flex-start}
  .status-row{flex-wrap:wrap;gap:6px}
  .suite-sample-label{margin:0 28px}
  .suite-iframe-wrap{margin:0 28px 32px}
  .piece-tabs-container{margin:0 28px 16px}
  .piece-loading-hint{margin:0 28px}

  /* Concept tab */
  .approval-section{margin:20px 28px 0}
  .annotate-toolbar{margin:0 28px}
  .annotations-list{margin:0 28px}
  .rev-submit-bar{margin:0 28px 20px}
  .revision-history{margin:16px 28px 0}
  .print-specs{margin:16px 28px 0}
  .moodboard-ref{margin:16px 28px 0}
  .message-thread{margin:16px 28px 0}
  .v2-section{margin:0 28px 20px}
  .download-section{margin:40px 28px 0}
  #pieceDescription{margin:0 28px}

  /* Progress + prefilled bars */
  .brief-prog{padding:12px 28px}
  .brief-prefilled{padding:16px 28px;gap:24px}

  /* RSVP table: reduce left indent */
  .rsvp-table th{padding:10px 14px 10px 28px}
  .rsvp-table td{padding:11px 12px 11px 28px}

  /* Keepsake / live */
  .keepsake-banner{padding:14px 28px}
}

/* ── 768px — Tablets portrait / iPad mini ── */
@media(max-width:768px){
  /* Login box */
  .login-box{padding:32px 28px}

  /* 2-col form grids → 1 col */
  .fld-row{grid-template-columns:1fr}
  .pal-grid{grid-template-columns:1fr 1fr} /* keep 2-col on 768 */
  .feeling-grid{grid-template-columns:1fr}

  /* Suite status strip wraps */
  .suite-hero{gap:14px}

  /* Palette explorer → 1 col */
  .pal-grid-v3{grid-template-columns:1fr}

  /* Vibe grid → 1 col */
  .vibe-grid{grid-template-columns:1fr}

  /* Upload grid → 1 col */
  .upload-grid{grid-template-columns:1fr}

  /* Custom palette → 2 col */
  .custom-pal{grid-template-columns:1fr 1fr}

  /* Brief hero tighter */
  .brief-hero{padding:32px 20px 28px}
  .pkg-strip{padding:16px 20px}

  /* Submit block */
  .submit-block{padding:40px 24px}

  /* Success screen */
  .success-screen{padding:32px 20px}
  .suc-card{padding:22px 20px}

  /* Suite */
  .suite-sample-label{margin:0 20px}
  .suite-iframe-wrap{margin:0 20px 28px}
  .suite-iframe-wrap iframe{height:70vh}
  .piece-tabs-container{margin:0 20px 12px}
  .piece-loading-hint{margin:0 20px}

  /* All 48px-margined panels */
  .approval-section{margin:16px 20px 0}
  .annotate-toolbar{margin:0 20px}
  .annotations-list{margin:0 20px}
  .rev-submit-bar{margin:0 20px 16px}
  .revision-history{margin:12px 20px 0}
  .print-specs{margin:12px 20px 0}
  .moodboard-ref{margin:12px 20px 0}
  .message-thread{margin:12px 20px 0}
  .v2-section{margin:0 20px 16px}
  .download-section{margin:32px 20px 0}
  #pieceDescription{margin:0 20px}
  .brief-prog{padding:10px 20px}
  .brief-prefilled{padding:14px 20px;gap:16px}

  /* RSVP */
  .rsvp-table th{padding:10px 12px 10px 20px}
  .rsvp-table td{padding:11px 12px 11px 20px}
  .rsvp-body{padding:32px 20px 60px}

  /* Event countdown */
  .event-countdown-hero{padding:28px 20px}
  .ech-unit{padding:0 14px}

  /* Final suite cover */
  .final-suite-cover{padding:28px 20px}
  .fsc-c.tl{top:16px;left:16px}
  .fsc-c.tr{top:16px;right:16px}
  .fsc-c.bl{bottom:16px;left:16px}
  .fsc-c.br{bottom:16px;right:16px}

  /* Keepsake */
  .keepsake-banner{padding:12px 20px;flex-direction:column;gap:8px}
  .keepsake-grid{padding:28px 20px 48px}

  /* Live */
  .live-hero{padding:56px 20px}
  .live-upcoming{padding:28px 20px}

  /* Dossier */
  .dossier-wrap{padding:32px 20px 48px}
}

/* ── 640px — Large phones landscape / iPhone Pro Max ── */
@media(max-width:640px){
  /* Tabs — show dot + text, hide num (already at 900), tighter */
  .ptab{padding:12px 10px;font-size:.72rem;letter-spacing:.1em;gap:6px}
  .ptab-dot{width:5px;height:5px}

  /* Header */
  .hdr-top{padding:12px 16px}
  .hdr-logo{font-size:var(--text-ui);letter-spacing:.18em}

  /* Login */
  .login-logo{font-size:.78rem;letter-spacing:.18em;margin-bottom:32px;max-width:100%!important}
  /* !important required: the base .login-box rule (line ~3223, "LOGIN SCREEN
     — redesign") sets max-width:440px!important — without matching
     !important here this override was dead, leaving the login card wider
     than the viewport on mobile (2026-07-14 audit H8: ~212px overflow,
     content visibly clipped/off-center at 375px). */
  .login-box{padding:28px 20px!important;max-width:100%!important}
  .login-title{font-size:1.5rem}

  /* Brief hero */
  .brief-hero{padding:28px 16px 24px}
  .hero-title{font-size:clamp(1.6rem,7vw,2.2rem)}
  .pkg-strip{padding:14px 16px;column-gap:18px}
  .form-wrap{padding:40px 16px 60px}

  /* 2-col grids → 1 col on phone */
  .pal-grid{grid-template-columns:1fr}
  .custom-pal{grid-template-columns:1fr}

  /* Section headers */
  .sec{margin-bottom:52px}

  /* Submit */
  .submit-block{padding:32px 16px}
  .submit-ttl{font-size:clamp(1.4rem,6vw,2rem)}
  .submit-btn{padding:15px 32px;width:100%}

  /* Success */
  .success-screen{padding:28px 16px}

  /* Suite */
  .suite-title-block h2{font-size:1.4rem}
  .suite-sample-label{margin:0 16px;flex-direction:column;align-items:flex-start;gap:6px}
  .suite-iframe-wrap{margin:0 16px 24px}
  .suite-iframe-wrap iframe{height:60vh}
  .piece-tabs-container{margin:0 16px 10px;gap:6px}
  .piece-loading-hint{margin:0 16px}
  .piece-tab{padding:8px 12px;font-size:var(--text-xs)}

  /* Concept / designs panels */
  .approval-section{margin:12px 16px 0;padding:36px 20px 32px}
  .approval-title{font-size:1.5rem}
  .btn-approve,.btn-decline{min-width:0;padding:14px 16px;font-size:.72rem}
  .annotate-toolbar{margin:0 16px;gap:8px}
  .annotations-list{margin:0 16px}
  .rev-submit-bar{margin:0 16px 12px;flex-direction:column;align-items:flex-start;gap:10px}
  .rsb-btn{width:100%;text-align:center;padding:12px}
  .revision-history{margin:10px 16px 0;padding:18px 20px}
  .print-specs{margin:10px 16px 0}
  .moodboard-ref{margin:10px 16px 0}
  .message-thread{margin:10px 16px 0}
  .v2-section{margin:0 16px 12px}
  .download-section{margin:28px 16px 0}
  #pieceDescription{margin:0 16px;font-size:var(--text-ui)}
  .brief-prog{padding:10px 16px}
  .brief-prefilled{padding:12px 16px;gap:12px}

  /* RSVP */
  .rsvp-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .rsvp-table{min-width:520px}
  .rsvp-table th{padding:9px 10px 9px 16px}
  .rsvp-table td{padding:10px 10px 10px 16px}

  /* Event countdown */
  .event-countdown-hero{padding:24px 16px}
  .ech-unit{padding:0 10px}
  .ech-num{font-size:clamp(1.8rem,10vw,3rem)}

  /* Final suite */
  .final-suite-cover{padding:24px 16px}
  .fsc-client-name{font-size:clamp(2.2rem,10vw,4rem)}

  /* Keepsake */
  .keepsake-banner{padding:12px 16px}
  .keepsake-grid{padding:20px 16px 40px}

  /* Live */
  .live-hero{padding:44px 16px}
  .live-upcoming{padding:20px 16px}

  /* Dossier */
  .dossier-wrap{padding:24px 16px 40px}
  .dossier-grid{grid-template-columns:1fr}

  /* Brandbook pieces */
  .brandbook-grid{padding:24px 16px!important;gap:20px!important}

  /* Downloads */
  .download-section{margin:24px 16px 0}
  .piece-dl-card{padding:24px 16px;margin-bottom:28px}
  .piece-dl-name{font-size:1.1rem;margin-bottom:20px}
  .bb-file-btns{flex-direction:column}
  .bb-file-btn{width:100%;justify-content:center}

  /* Package info strip */
  .pkg-item{min-width:50%}

  /* Suite note */
  .suite-note-inner{padding:12px 16px;flex-direction:column;text-align:center}

  /* Welcome modal */
  .welcome-modal{padding:28px 20px}

  /* Share modal */
  .share-box{padding:24px 20px}
  .share-url-row{flex-direction:column}
  .share-url-input{border-right:1px solid var(--border);border-bottom:none}
  .share-copy-btn{width:100%;padding:12px}

  /* Progress / status */
  .status-row{gap:4px}
  .status-step{padding:6px 10px}
  .status-step span{font-size:.78rem}
  .status-arrow{display:none}
}

/* ── 480px — Standard phones (iPhone SE, most Androids) ── */
@media(max-width:480px){
  /* Tab text: abbreviate to fit */
  .ptab{padding:10px 8px;font-size:.78rem;letter-spacing:.06em}

  /* Brief */
  .brief-hero{padding:24px 14px 20px}
  .pkg-strip{padding:12px 14px}
  .form-wrap{padding:32px 14px 52px}

  /* Login */
  .login-box{padding:24px 16px!important}
  .login-title{font-size:1.35rem}

  /* Suite */
  .suite-iframe-wrap{margin:0 14px 20px}
  .suite-iframe-wrap iframe{height:55vh}
  .piece-tabs-container{margin:0 14px 8px}
  .piece-loading-hint{margin:0 14px}
  .suite-sample-label{margin:0 14px}
  .approval-section{margin:10px 14px 0;padding:28px 16px 24px}
  .annotate-toolbar{margin:0 14px}
  .annotations-list{margin:0 14px}
  .rev-submit-bar{margin:0 14px 10px}
  .revision-history{margin:8px 14px 0}
  .print-specs{margin:8px 14px 0}
  .moodboard-ref{margin:8px 14px 0}
  .message-thread{margin:8px 14px 0}
  .v2-section{margin:0 14px 10px}
  .download-section{margin:20px 14px 0}
  #pieceDescription{margin:0 14px}
  .brief-prog{padding:8px 14px}
  .brief-prefilled{padding:10px 14px}

  /* Approval buttons */
  .approval-btns{flex-direction:column}
  .btn-approve,.btn-decline{width:100%}

  /* Event countdown units tighter */
  .ech-unit{padding:0 8px}
  .ech-lbl{font-size:.63rem;letter-spacing:.18em}

  /* Vibe grid stays 1 col */
  .vibe-grid{grid-template-columns:1fr}

  /* RSVP hero */
  .rsvp-hero{padding:24px 14px 20px}
  .rsvp-add-form{padding:20px 14px 24px}
  .rsvp-list-hdr-outer{padding:16px 14px}
  .rsvp-table th{padding:9px 8px 9px 14px}
  .rsvp-table td{padding:10px 8px 10px 14px}
  .rsvp-rag-num{font-size:1.8rem}

  /* Downloads */
  .piece-dl-card{padding:20px 14px;margin-bottom:20px}
  .download-section{margin:18px 14px 0}
  .ndl-empty-hint{padding-left:0;white-space:normal}

  /* Package items full width */
  .pkg-item{min-width:100%;border-bottom:1px solid var(--border);padding-bottom:10px}
  .pkg-item:last-child{border-bottom:none;padding-bottom:0}

  /* Feeling cards already 1-col, keep text readable */
  .feeling-body{padding:14px 16px}

  /* Colour wheel */
  .wheel-canvas-wrap{width:160px;height:160px}

  /* Palette tabs */
  .pal-tab{padding:10px 6px;font-size:.78rem;letter-spacing:.1em}

  /* Dossier */
  .dossier-wrap{padding:20px 14px 32px}
}

/* ── 380px — Small phones (iPhone SE 1st gen, Galaxy A series) ── */
@media(max-width:380px){
  .ptab{padding:10px 6px;font-size:var(--text-ui);letter-spacing:.04em}
  .ptab-dot{display:none}

  .hdr-logo{font-size:.78rem;letter-spacing:.18em}
  .hdr-top{padding:10px 12px}

  .brief-hero{padding:20px 12px 18px}
  .pkg-strip{padding:10px 12px}
  .form-wrap{padding:28px 12px 48px}

  .suite-iframe-wrap{margin:0 12px 16px}
  .suite-iframe-wrap iframe{height:50vh}
  .piece-tabs-container{margin:0 12px 6px}
  .suite-sample-label{margin:0 12px}
  .approval-section{margin:8px 12px 0;padding:24px 14px 20px}
  .annotate-toolbar{margin:0 12px}
  .annotations-list{margin:0 12px}
  .rev-submit-bar{margin:0 12px 8px}
  .revision-history{margin:6px 12px 0}
  .moodboard-ref{margin:6px 12px 0}
  .message-thread{margin:6px 12px 0}
  .v2-section{margin:0 12px 8px}
  .download-section{margin:16px 12px 0}
  #pieceDescription{margin:0 12px}
  .brief-prog{padding:8px 12px}
  .brief-prefilled{padding:10px 12px}

  .submit-block{padding:28px 12px}
  .rsvp-hero{padding:20px 12px 16px}
  .rsvp-add-form{padding:16px 12px 20px}
  .rsvp-list-hdr-outer{padding:14px 12px}
  .rsvp-table th{padding:8px 6px 8px 12px}
  .rsvp-table td{padding:9px 6px 9px 12px}

  .event-countdown-hero{padding:20px 12px}
  .ech-unit{padding:0 6px}
  .final-suite-cover{padding:20px 12px}
  .keepsake-grid{padding:16px 12px 32px}
  .live-hero{padding:36px 12px}
  .dossier-wrap{padding:16px 12px 28px}

  .piece-dl-card{padding:16px 12px}
  .download-section{margin:14px 12px 0}

  .login-box{padding:20px 14px!important}
}

/* ── Landscape phone: prevent fixed header from eating too much space ── */
/* 2026-07-29 mobile audit (H-4): padding-top MUST be 0 here, not var(--hdr-h).
   This is the SECOND landscape block in this file — the first one, at
   "LANDSCAPE ORIENTATION SUPPORT" above, sets `.portal-hdr{position:relative}`,
   which takes the header OUT of fixed positioning and puts it in normal flow.
   Once it is in flow it occupies its own height, so any body padding-top is
   pure dead space on top of it. This rule used to say var(--hdr-h,60px) —
   written on the assumption the header was still fixed — and because it comes
   later in the file it silently overrode the 80px in the first block. With
   --hdr-h measured at 129px by syncHeaderPad(), landscape opened with 129px of
   blank cream, the header at 129-239px, and the first real content at y=421 —
   31px BELOW the bottom of a 390px viewport. The client rotated their phone and
   saw an empty screen. Do not reintroduce a header offset here without first
   checking whether the header is still position:relative above. */
@media(max-height:500px) and (orientation:landscape){
  body{padding-top:0}
  .portal-tabs .ptab{padding:8px 10px}
  .suite-iframe-wrap iframe{height:80vh}
  .event-countdown-hero{padding:16px 20px}
  /* The header is position:relative in landscape, so it scrolls away and there
     is nothing to clear — stick the brief progress bar to the very top instead
     of offsetting it by a header that is no longer fixed (see H-1 above). */
  .brief-mobile-progress{top:0}
}

/* ── Touch-friendly tap targets ── */
@media(max-width:900px){
  .ptab,.btn-approve,.btn-decline,.submit-btn,.login-btn,
  .rsvp-add-btn,.rsvp-export-cta,.fsc-view-suite-btn,
  .keepsake-btn,.keepsake-btn-dark,.approval-send-btn,
  .upload-zone,.check-item,.lang-opt,.dp-pill{
    min-height:44px;
  }
  /* Ensure all interactive pills have comfortable tap size */
  .dp-pill{padding:10px 14px}
  .lang-opt{padding:10px 16px}
}

/* ─────────────────────────────────────────────────────────────
   TWO-COLUMN LAYOUT — LIVE CONTEXT ASIDE (desktop ≥1025px)
───────────────────────────────────────────────────────────── */
.tab-split-aside{display:none}

@media(min-width:1025px){
  .tab-panel.active{
    display:block!important;
    min-height:calc(100vh - 56px);
    padding-right:0;
    box-sizing:border-box;
  }
  /* Only indent content when the aside is actually visible */
  body.portal-aside-visible .tab-panel.active{
    padding-right:420px;
  }
  /* 2026-07-31 — the two full-width bars that sit OUTSIDE the tab panels need
     the same 420px reserved, and did not have it. #nextStepCard and
     #archivedBanner are siblings of the .tab-panel sections (see
     client-portal.html, just above <section id="tab-briefing">), so the rule
     above never reached them: they stayed 1440px wide and ran straight under
     the fixed .tab-split-aside, which starts 400px in from the right.
     Both bars right-align their most important element — the next-step card
     puts the "Waiting on you" / "In our hands" status pill at the right end of
     .nsc-top (justify-content:space-between), the archived bar puts its
     "Download Suite" / "My Events" buttons there. Measured at 1440x900 on the
     Designs step: the pill ran x=911→1228 while the aside began at x=1040, so
     188px of "IN OUR HANDS — NOTHING NEEDED FROM YOU" was hidden behind the
     At a Glance card and the client read "IN OUR HANDS — NOTHIN". Owner
     reported it 2026-07-31.
     Padding goes on the OUTER bar, not on .nsc-inner: the bar draws the white
     background and bottom rule full-bleed and must keep doing so, while
     .nsc-inner is max-width:1080px;margin:0 auto and re-centres itself inside
     whatever width is left — so the card stays visually centred on the free
     space exactly like the tab content above it. Putting the padding on
     .nsc-inner instead would squeeze the text to 660px and leave the pill
     where it was.
     #portalFooter deliberately not included: it is position:fixed with
     z-index:100 against the aside's z-index:10, so it paints OVER the aside
     rather than under it, and it has no content in the overlap band. */
  body.portal-aside-visible #nextStepCard{
    padding-right:420px;
    box-sizing:border-box;
  }
  /* #archivedBanner needs !important and cannot lose it: the element carries an
     inline `padding:12px 24px` shorthand in client-portal.html, and an inline
     shorthand outranks any id selector here, so the plain rule above silently
     did nothing for it. Verified by mutation — drop the !important and the
     "Download Suite" button goes straight back under the aside. */
  body.portal-aside-visible #archivedBanner{
    padding-right:420px!important;
    box-sizing:border-box;
  }
  /* Concept tab was display:flex — keep as block */
  #tab-concept.active{
    display:block!important;
    height:auto;
    min-height:calc(100vh - 56px);
  }
  /* Aside: floating card — no border lines, card sits on cream page background */
  .tab-split-aside{
    display:block;
    position:fixed;
    right:20px;
    top:calc(var(--hdr-h,120px) + var(--beta-h,0px) + 20px);
    bottom:20px;
    width:380px;
    overflow:hidden!important;
    overflow-y:hidden!important;
    overscroll-behavior:none;
    scrollbar-width:none;
    background:var(--ivory);
    border:0.5px solid rgba(45,16,21,.14);
    border-radius:0;
    z-index:10;
  }
  .tab-split-aside::-webkit-scrollbar{display:none}
  /* ── AT A GLANCE — FORMAT B ADAPTIVE ── */
  .gs-glance{height:100%;display:flex;flex-direction:column;background:var(--ivory);overflow:hidden;}
  .gs-glance-hdr{
    flex-shrink:0;display:flex;align-items:center;justify-content:space-between;
    padding:.7em 1.2em;border-bottom:2px solid var(--onyx-dk);
  }
  .gs-glance-hdr-title{
    font-family:'Montserrat',sans-serif;font-size:.58em;letter-spacing:.26em;
    text-transform:uppercase;font-weight:700;color:var(--onyx-dk);
  }
  .gs-glance-hdr-tag{
    font-family:'Montserrat',sans-serif;font-size:.52em;letter-spacing:.12em;
    text-transform:uppercase;font-weight:700;color:var(--white);
    background:var(--sage-dk);padding:.28em .7em;
  }
  /* 2026-07-21: overflow-y:auto (was hidden) — the JS font-fit binary search
     that used to squeeze content into view is retired; long content scrolls. */
  .gs-glance-body{flex:1;display:flex;flex-direction:column;overflow-y:auto;min-height:0;scrollbar-width:thin;scrollbar-color:rgba(58,53,48,.25) transparent;}
  .gs-glance-body::-webkit-scrollbar{width:5px;}
  .gs-glance-body::-webkit-scrollbar-thumb{background:rgba(58,53,48,.25);border-radius:0;}
  .gs-glance-body::-webkit-scrollbar-track{background:transparent;}

  /* ── PRE-BRIEFING RAIL — "The Ledger", colourway C3 ───────────────────────
     Owner choice, 2026-07-31 (docs/BRIEFING_SUBMIT_COLOURWAYS.html).
     Deliberately its OWN namespace rather than restyled .gs-* : those classes
     serve the full At a Glance shown AFTER a briefing is submitted, and that
     panel must keep working untouched. The only .gs-* class this rail borrows
     is .gs-next-line, so the sentence inherits the owner's typography choice
     from one rule instead of a copy that can drift.
     Cream ground, bloodstone ruling, ink as TYPE ONLY — never a dark field. */
  .pbr{height:100%;display:flex;flex-direction:column;background:var(--ivory);overflow:hidden;}
  .pbr-hdr{
    flex-shrink:0;display:flex;align-items:baseline;justify-content:space-between;gap:.75em;
    padding:.95em 1.25em;border-bottom:2px solid var(--bloodstone);
  }
  .pbr-hdr-ttl{
    font-family:'Montserrat',sans-serif;font-size:.58em;letter-spacing:.24em;
    text-transform:uppercase;font-weight:700;color:var(--onyx);
  }
  .pbr-hdr-tag{
    font-family:'Cormorant Garamond',serif;font-size:1.05em;font-style:italic;color:var(--bloodstone);
  }
  .pbr-date{
    flex-shrink:0;display:flex;align-items:baseline;justify-content:space-between;gap:.75em;
    padding:.85em 1.25em;border-bottom:1px solid rgba(146,38,48,.1);
  }
  /* .62 not .45 — ink on ivory needs alpha >= .60 to clear AA 4.5:1
     (solved numerically, verified with scripts/contrast-check.mjs). */
  .pbr-date-l{
    font-family:'Montserrat',sans-serif;font-size:.55em;letter-spacing:.22em;
    text-transform:uppercase;font-weight:700;color:rgba(45,16,21,.62);
  }
  .pbr-date-d{font-family:'Libre Baskerville',serif;font-size:.88em;color:var(--onyx);}
  .pbr-stages{flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto;}
  .pbr-stage{
    flex:none;display:grid;grid-template-columns:1.9em 1fr auto;gap:.9em;align-items:baseline;
    padding:1.05em 1.25em;border-bottom:1px solid rgba(146,38,48,.1);
  }
  /* The three unstarted stages are quiet but must stay READABLE — they are
     information, not disabled controls, so they hold AA against the ivory. */
  .pbr-n,.pbr-st{
    font-family:'Montserrat',sans-serif;font-size:.55em;font-weight:600;
    letter-spacing:.18em;color:rgba(45,16,21,.62);
  }
  .pbr-st{letter-spacing:.22em;text-transform:uppercase;}
  .pbr-nm{font-family:'Libre Baskerville',serif;font-size:.88em;color:rgba(45,16,21,.62);}
  .pbr-stage.live{background:rgba(146,38,48,.05);border-bottom-color:rgba(146,38,48,.16);}
  .pbr-stage.live .pbr-n,.pbr-stage.live .pbr-st{color:var(--bloodstone);}
  .pbr-stage.live .pbr-nm{color:var(--onyx);}
  .pbr-open{
    flex:none;padding:0 1.25em 1.15em;
    background:rgba(146,38,48,.05);border-bottom:1px solid rgba(146,38,48,.16);
  }
  /* Layout only — the face, size and upright style come from .gs-next-line. */
  .pbr-open .gs-next-line{
    display:block;padding:0 0 .85em;border-bottom:none;margin:0;
  }
  .pbr-begin{
    display:inline-flex;align-items:center;gap:.6em;
    font-family:'Montserrat',sans-serif;font-size:.62em;font-weight:600;
    letter-spacing:.24em;text-transform:uppercase;
    color:var(--ivory);background:var(--bloodstone);
    border:none;border-radius:0;padding:1.1em 1.9em;cursor:pointer;
    transition:background .3s;
  }
  .pbr-begin:hover{background:var(--bloodstone-dk);}
  .pbr-meta{
    margin-top:auto;flex-shrink:0;display:flex;justify-content:space-between;gap:.75em;
    padding:.9em 1.25em;border-top:1px solid rgba(146,38,48,.12);
    font-family:'Montserrat',sans-serif;font-size:.58em;letter-spacing:.16em;
    text-transform:uppercase;color:rgba(45,16,21,.62);
  }

  /* "What happens next" line (2026-07-21)
     2026-07-31: was Cormorant Garamond italic .82em. Two problems, both visible
     side-by-side in artifacts/glance-next-line-typography-options.html: the most
     important line on the card was its SMALLEST text (13px vs the .95-.96em
     Libre Baskerville venue and cell values right beneath it), and Cormorant's
     short x-height made it read smaller still than 13px suggests. Full-sentence
     italic also reads as a caption — in this card italic is the accent voice for
     names and palettes (.gs-cal-venue, .gs-swatch-name), not for a status. Now
     matches the card's other content text and sits upright. Keep the padding in
     em so it scales with the size. */
  .gs-next-line{
    font-family:'Libre Baskerville',serif;font-size:.95em;font-style:normal;
    line-height:1.45;
    color:var(--onyx-dk);padding:.7em 1.5em;border-bottom:1px solid var(--border-d);
    display:flex;align-items:center;justify-content:space-between;gap:.8em;flex:none;
  }
  .gs-next-line .gs-link-chip{flex-shrink:0;}
  .gs-glance::after{content:'';display:block;flex-shrink:0;height:.7em;}
  .gs-sec{flex:none;padding:.7em 1.2em;border-bottom:1px solid var(--border-d);}
  .gs-sec:last-child{border-bottom:none;flex:1;}
  .gs-sec-lbl{
    font-family:'Montserrat',sans-serif;font-size:.5em;letter-spacing:.22em;
    text-transform:uppercase;font-weight:700;color:rgba(58,53,48,.3);margin-bottom:.6em;
  }
  /* Calendar */
  .gs-cal{
    display:flex;align-items:center;gap:.7em;padding:.6em .8em;
    background:var(--white);border:1px solid var(--border-d);margin-bottom:.5em;
  }
  .gs-cal-box{text-align:center;flex-shrink:0;}
  .gs-cal-month{
    font-family:'Montserrat',sans-serif;font-size:.5em;letter-spacing:.18em;
    text-transform:uppercase;font-weight:700;background:var(--bloodstone-dk);
    color:var(--white);display:block;padding:.22em .7em;
  }
  .gs-cal-day{
    font-family:'Libre Baskerville',serif;font-size:1.75em;font-weight:600;
    color:var(--onyx-dk);line-height:1;display:flex;align-items:center;justify-content:center;
    padding:.2em .4em .1em;border:1px solid var(--border-d);border-top:none;
  }
  .gs-cal-info{flex:1;min-width:0;}
  .gs-cal-dow{
    font-family:'Montserrat',sans-serif;font-size:.5em;letter-spacing:.16em;
    text-transform:uppercase;font-weight:700;color:var(--sage);margin-bottom:.2em;
  }
  .gs-cal-venue{
    font-family:'Libre Baskerville',serif;font-size:.95em;
    font-style:italic;color:var(--onyx);line-height:1.28;
  }
  /* Event grid */
  .gs-grid{
    display:grid;grid-template-columns:1fr 1fr;gap:1px;
    background:var(--border-d);border:1px solid var(--border-d);
  }
  .gs-cell{background:var(--white);padding:.48em .65em;}
  .gs-cell-full{grid-column:1/-1;}
  .gs-cell-lbl{
    font-family:'Montserrat',sans-serif;font-size:.5em;letter-spacing:.16em;
    text-transform:uppercase;font-weight:700;color:rgba(58,53,48,.3);margin-bottom:.16em;
  }
  .gs-cell-val{font-family:'Libre Baskerville',serif;font-size:.96em;color:var(--onyx);}
  .gs-swatches{display:flex;align-items:center;gap:5px;margin-top:.15em;}
  .gs-swatch{
    width:14px;height:14px;border-radius:50%;
    border:1px solid rgba(0,0,0,.15);flex-shrink:0;display:inline-block;
  }
  .gs-swatch-name{
    font-family:'Libre Baskerville',serif;font-size:.58em;
    font-style:italic;color:rgba(58,53,48,.55);
  }
  /* Link rows (Creative Direction, file opens) */
  .gs-link-row{
    display:flex;align-items:center;justify-content:space-between;
    padding:.48em .65em;background:var(--white);border:1px solid var(--border-d);
    margin-bottom:.32em;text-decoration:none;cursor:pointer;transition:background .12s;
  }
  .gs-link-row:last-child{margin-bottom:0;}
  .gs-link-row:hover{background:var(--ivory-dk,#F0EBE3);}
  .gs-link-name{
    font-family:'Libre Baskerville',serif;font-size:.8em;color:var(--onyx);flex:1;min-width:0;
  }
  .gs-link-chip{
    font-family:'Montserrat',sans-serif;font-size:.5em;letter-spacing:.1em;
    text-transform:uppercase;font-weight:700;padding:.22em .6em;flex-shrink:0;
  }
  .gs-link-chip.done{color:var(--success);background:rgba(45,80,80,.08);}
  .gs-link-chip.open{color:var(--sage);background:rgba(64,100,95,.08);}
  /* File rows */
  .gs-file-row{
    display:flex;align-items:center;gap:.52em;
    padding:.46em 0;border-bottom:1px solid var(--border);
    color:var(--onyx);text-decoration:none;
  }
  .gs-file-row:last-child{border-bottom:none;}
  .gs-file-icon{
    width:1.65em;height:1.65em;background:var(--white);border:1px solid var(--border-d);
    display:flex;align-items:center;justify-content:center;flex-shrink:0;
    font-family:'Montserrat',sans-serif;font-size:.5em;font-weight:700;color:var(--sage);
  }
  .gs-file-name{
    flex:1;font-family:'Libre Baskerville',serif;font-size:.82em;
    color:var(--onyx);min-width:0;
  }
  .gs-file-arrow{
    font-family:'Montserrat',sans-serif;font-size:.54em;
    color:rgba(58,53,48,.55);flex-shrink:0;
  }
  /* Pieces */
  .gs-pieces-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:.4em;}
  .gs-count-pills{display:flex;}
  .gs-count-pill{
    font-family:'Montserrat',sans-serif;font-size:.64em;letter-spacing:.08em;
    text-transform:uppercase;font-weight:700;padding:.32em .72em;
    border:1px solid var(--border-d);margin-right:-1px;background:var(--white);
  }
  .gs-count-pill.approved{color:var(--success);background:rgba(45,80,80,.06);}
  .gs-count-pill.review{color:var(--bloodstone);}
  .gs-count-pill.progress{color:var(--gold,#B8935A);}
  .gs-piece{
    display:flex;align-items:center;gap:.52em;height:2.05em;
    padding:0 .6em;background:var(--white);border-left:2px solid transparent;
    margin-bottom:2px;cursor:pointer;transition:background .1s;
  }
  .gs-piece:last-child{margin-bottom:0;}
  .gs-piece:hover{background:var(--ivory-dk,#F0EBE3);}
  .gs-piece.approved{border-left-color:rgba(45,80,80,.45);}
  .gs-piece.review{border-left-color:rgba(146,38,60,.45);}
  .gs-piece.progress{border-left-color:rgba(184,147,90,.55);}
  .gs-piece-name{
    flex:1;font-family:'Libre Baskerville',serif;font-size:.74em;color:var(--onyx);
    min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  }
  .gs-piece-badge{
    font-family:'Montserrat',sans-serif;font-size:.5em;letter-spacing:.1em;
    text-transform:uppercase;font-weight:700;padding:.22em .55em;flex-shrink:0;
  }
  .gs-piece-badge.approved{color:var(--success);background:rgba(45,80,80,.08);}
  .gs-piece-badge.review{color:var(--bloodstone);background:rgba(146,38,60,.07);}
  .gs-piece-badge.progress{color:#9A6A20;background:rgba(184,147,90,.1);}
  .gs-empty-note{
    font-family:'Libre Baskerville',serif;font-size:.72em;
    color:rgba(45,16,21,.55);font-style:italic;line-height:1.6;padding:.4em 0;
  }
  .gs-cal-countdown{font-size:.7em;color:var(--gold,#B8935A);letter-spacing:.04em;margin-top:.2em;}
  .gs-sec-ts{float:right;font-size:.72em;color:rgba(45,16,21,.38);font-weight:400;letter-spacing:.02em;font-family:'Montserrat',sans-serif;font-style:normal;}
  .gs-rev-dots{display:inline-flex;gap:3px;align-items:center;margin-left:5px;vertical-align:middle;flex-shrink:0;}
  .gs-rev-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:rgba(45,16,21,.28);}
  .gs-rev-dot.used{background:#C4A882;}
  .gs-rev-dot.at-limit{background:var(--bloodstone,#922630);}
  /* ── Suite Progress Ring ── */
  .gs-ring-wrap{display:flex;align-items:center;gap:.85em;padding:.3em 0 .1em;}
  .gs-ring-svg{flex-shrink:0;width:3.4em;height:3.4em;}
  .gs-ring-track{fill:none;stroke:rgba(45,16,21,.09);stroke-width:5;}
  .gs-ring-bar{fill:none;stroke:var(--success);stroke-width:5;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;}
  .gs-ring-count{font-family:'Montserrat',sans-serif;font-size:.88em;font-weight:700;fill:var(--onyx-dk);text-anchor:middle;dominant-baseline:middle;}
  .gs-ring-of{font-family:'Montserrat',sans-serif;font-size:.32em;font-weight:600;letter-spacing:.06em;fill:rgba(58,53,48,.45);text-anchor:middle;}
  .gs-ring-info{flex:1;min-width:0;}
  .gs-ring-stat{font-family:'Montserrat',sans-serif;font-size:.62em;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--onyx-dk);margin-bottom:.25em;}
  .gs-ring-line{font-family:'Libre Baskerville',serif;font-size:.92em;color:rgba(58,53,48,.65);line-height:1.55;}

  /* ── Docs grid: 5→3 cols in narrower main column ── */
  .tab-panel.active .docs-grid{
    grid-template-columns:repeat(3,1fr)!important;
    padding:20px 64px 28px!important;
    gap:14px!important;
  }
  /* 5 cards: single row */
  .tab-panel.active .docs-grid[data-count="5"]{grid-template-columns:repeat(5,1fr)!important;}
  .tab-panel.active .docs-section-hdr{
    padding:18px 64px 14px!important;
  }
  .tab-panel.active .doc-card{
    aspect-ratio:auto!important;
    padding:22px 18px 20px!important;
    min-height:0!important;
  }
  .tab-panel.active .doc-big-num{
    font-size:2.6rem!important;
    margin-bottom:0!important;
  }
  .tab-panel.active .doc-title{
    font-size:var(--text-md)!important;
    margin-bottom:6px!important;
  }
  .tab-panel.active .doc-sub{
    font-size:var(--text-ui)!important;
    line-height:1.6!important;
  }
  .tab-panel.active .doc-status-tag{
    font-size:.63rem!important;
    margin-bottom:10px!important;
  }

  /* ── Brandbook cards: tighter in narrower main column ── */
  .tab-panel.active .brandbook-grid{
    padding:36px 28px;
    gap:28px;
    max-width:none;
  }
  .tab-panel.active .bb-meta{
    padding:26px 22px 22px;
  }
  .tab-panel.active .bb-meta-top{
    gap:12px;
    margin-bottom:18px;
  }
  .tab-panel.active .bb-piece-name{
    font-size:1.1rem;
  }
  .tab-panel.active .bb-status-pill{
    font-size:var(--text-ui);
    padding:8px 13px;
  }
  .tab-panel.active .bb-piece-sub{
    font-size:.72rem;
  }
  .tab-panel.active .bb-piece-desc{
    padding:12px 14px;
  }
  .tab-panel.active .bb-actions{
    gap:8px;
  }
  .tab-panel.active .bb-action-approve,
  .tab-panel.active .bb-action-revise{
    padding:13px 6px;
    font-size:.71rem;
  }
  .tab-panel.active .bb-file-btns{
    margin-top:16px;
  }
  .tab-panel.active .bb-file-btn{
    padding:9px 16px;
    font-size:.78rem;
  }
}

/* ── Pending compact row (no file released yet) ── */
.bb-pending-row{
  grid-column:1/-1;
  display:flex;align-items:center;justify-content:space-between;
  padding:18px 28px;background:#fff;
  border:1px solid rgba(45,16,21,.08);gap:20px;
  transition:background .18s;
}
.bb-pending-row:hover{background:rgba(64,100,95,.025);}
.bb-pending-row+.bb-pending-row{border-top:none;}
.bb-pending-row+.bb-pending-row{margin-top:-1px;}
.bb-pr-left{display:flex;align-items:center;gap:22px;flex:1;min-width:0;}
.bb-pr-num{
  font-family:'Montserrat',sans-serif;font-size:var(--text-micro);letter-spacing:.22em;
  color:rgba(64,100,95,.35);font-weight:700;min-width:22px;flex-shrink:0;
}
.bb-pr-info{display:flex;flex-direction:column;gap:4px;min-width:0;}
.bb-pending-row .bb-piece-name{font-size:.98rem!important;font-style:normal!important;}
.bb-pr-specs{
  font-family:'Montserrat',sans-serif;font-size:var(--text-xs);color:var(--sage);
  font-weight:300;letter-spacing:.05em;
}
@media(max-width:600px){
  .bb-pending-row{flex-wrap:wrap;gap:10px;}
  .bb-pr-num{display:none;}
}

/* ── Hide reCAPTCHA v3 badge (disclosure in portal footer) ── */
.grecaptcha-badge{visibility:hidden!important;}

/* ── L-04: WCAG AA contrast — sage text on ivory requires ≥4.5:1 ── */
/* --sage:#40645F ≈3.8:1 on #FAF6EE — use --sage-dk (#2D6A4F ≈5.9:1) for text */
.fld-lbl,.sec-num,.pkg-lbl,.hdr-client-label,.hdr-ref,
.dp-bundled-tag,.dp-bar-clear,.pal-mood,.submit-note,.suc-card-lbl,
.login-fld label,.login-hint,.login-legal,.status-step span,
.suite-title-block p,.bsp-fld-lbl,.rev-meta,.lang-lbl,.feeling-name,
.check-txt,.check-sub,.bsp-hero-eyebrow,.bsp-hero-sub,
.bsp-status-date,.bsp-readonly-sub{color:var(--onyx)}.col-label-name{color:var(--sage-dk)}

/* ── EFFECT: Checkbox spring bounce ── */
.check-box{transition:background .2s,border-color .2s,transform .28s cubic-bezier(.34,1.56,.64,1)!important}
.check-item.chk .check-box{transform:scale(1.2) rotate(-4deg)}
.check-item:not(.chk) .check-box{transform:scale(1) rotate(0deg)}
.check-mark{transition:opacity .15s .04s,transform .22s .04s cubic-bezier(.34,1.56,.64,1)!important}
.check-item.chk .check-mark{transform:scale(1)}
.check-item:not(.chk) .check-mark{transform:scale(0)}

/* ── EFFECT: In-progress dot pulse glow ── */
.item-sdot.in_progress{animation:px-glow-sage 1.8s ease-out infinite}
.ds-spill-dot.progress{animation:px-glow-gold 1.8s ease-out infinite}
@keyframes px-glow-sage{
  0%{box-shadow:0 0 0 0 rgba(64,100,95,.6)}
  70%{box-shadow:0 0 0 6px rgba(64,100,95,0)}
  100%{box-shadow:0 0 0 0 rgba(64,100,95,0)}
}
@keyframes px-glow-gold{
  0%{box-shadow:0 0 0 0 rgba(184,147,90,.65)}
  70%{box-shadow:0 0 0 6px rgba(184,147,90,0)}
  100%{box-shadow:0 0 0 0 rgba(184,147,90,0)}
}

/* ── EFFECT: Design card hover lift ── */
.item-card{transition:transform .2s cubic-bezier(0.22,0.61,0.36,1),box-shadow .2s,border-color .2s,background .2s!important}

/* ═══════════════════════════════════════════════════════════════════
   Migrated from inline <style> blocks in client-portal.html (2026-07-06)
   — same rules, same order as they appeared in the document, just moved
   out of the HTML file so edits to styling no longer risk colliding with
   edits to the briefing form or dashboard logic in the same file. See
   app/CLAUDE.md.
   ═══════════════════════════════════════════════════════════════════ */

/* ── from client-portal.html line 200 ── */
.ptab-locked{opacity:.42;cursor:not-allowed;position:relative}
.ptab-locked .ptab-dot{background:transparent;border:1px dashed currentColor}
.ptab-locked::after{content:'🔒';font-size:0.56rem;margin-left:6px;opacity:.7}
.fld-warn textarea, .fld-warn input { border-color: var(--warn) !important; }
.fld-warn-msg { display:block; font-size:.68rem; color:var(--warn); margin-top:4px; font-family:'Montserrat',sans-serif; letter-spacing:.04em; }
/* .fld-date-warn was re-declared here (inlined from client-portal.html) and, having identical specificity and coming ~4,900 lines later, silently overrode the designed callout at the top of this file: font-size .74rem -> .6rem and colour #7a5c1e -> var(--warn) #B7791F, while leaving that rule's amber tint, border and 9px padding in place. Removed 2026-08-06. The callout near line 557 is the designed form; if a small inline variant is ever wanted, give it its own class (.fld-date-warn--inline). */
.brief-resubmit-banner{background:var(--ivory);border-left:3px solid var(--warn);color:#2D1015;padding:14px 22px;margin:0 0 22px;font-family:'Montserrat',sans-serif;font-size:.78rem;letter-spacing:.04em;line-height:1.5;display:flex;gap:14px;align-items:center}
.brief-resubmit-banner em{font-style:italic;color:var(--warn)}
.brief-resubmit-banner strong{font-weight:600;color:#2D1015}

.direction-tab-wrap{max-width:820px;margin:0 auto;padding:48px 24px 64px}
.dir-state{width:100%}
/* Lock state */
.dir-lock-hero{text-align:center;padding:48px 0 32px}
.dir-lock-eyebrow{font-family:Montserrat,sans-serif;font-size:.65rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ash);margin-bottom:16px}
.dir-lock-title{font-family:'Libre Baskerville',Georgia,serif;font-size:2rem;font-weight:400;color:var(--onyx);line-height:1.25;margin:0 0 16px}
.dir-lock-title em{font-style:italic;color:var(--bloodstone)}
.dir-lock-sub{font-size:.95rem;color:var(--ash);max-width:540px;margin:0 auto 40px;line-height:1.65}
.dir-lock-pricing{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin-top:8px}
.dir-price-card{background:#fff;border:1px solid var(--border);border-radius:0;padding:24px 20px;width:200px;text-align:center;position:relative}
.dir-price-card--featured{border-color:var(--bloodstone);background:#fdf8f4}
.dir-price-badge{position:absolute;top:-10px;left:50%;transform:translateX(-50%);background:var(--bloodstone);color:#FAF6EE;font-family:Montserrat,sans-serif;font-size:.6rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:3px 10px;border-radius:2px;white-space:nowrap}
.dir-price-label{font-family:Montserrat,sans-serif;font-size:.65rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ash);margin-bottom:10px}
.dir-price-amount{font-family:'Libre Baskerville',Georgia,serif;font-size:1.8rem;font-weight:400;color:var(--onyx);margin-bottom:16px}
.dir-price-was{font-size:1rem;color:var(--ash);text-decoration:line-through;margin-left:4px}
.dir-buy-btn{width:100%;padding:10px 0;background:var(--onyx);color:#FAF6EE;border:none;font-family:Montserrat,sans-serif;font-size:.65rem;letter-spacing:.14em;text-transform:uppercase;cursor:pointer;transition:background .2s}
.dir-buy-btn:hover{background:var(--bloodstone)}
.dir-buy-btn--gold{background:var(--bloodstone)}
.dir-buy-btn--gold:hover{background:#5a1520}
/* Pending state */
.dir-pending-hero{text-align:center;padding:80px 0 64px}
.dir-pending-eyebrow{font-family:Montserrat,sans-serif;font-size:.65rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ash);margin-bottom:20px}
.dir-pending-icon{font-size:2rem;color:var(--bloodstone);margin-bottom:20px}
.dir-pending-title{font-family:'Libre Baskerville',Georgia,serif;font-size:1.9rem;font-weight:400;color:var(--onyx);line-height:1.3;margin:0 0 16px}
.dir-pending-title em{font-style:italic;color:var(--bloodstone)}
.dir-pending-sub{font-size:.9rem;color:var(--ash);max-width:460px;margin:0 auto;line-height:1.65}
/* Released / content state */
.dir-content-hero{margin-bottom:36px}
.dir-content-eyebrow{font-family:Montserrat,sans-serif;font-size:.65rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ash);margin-bottom:12px}
.dir-content-title{font-family:'Libre Baskerville',Georgia,serif;font-size:1.9rem;font-weight:400;color:var(--onyx);line-height:1.25;margin:0 0 10px}
.dir-content-title em{font-style:italic;color:var(--bloodstone)}
.dir-content-sub{font-size:.9rem;color:var(--ash);line-height:1.65;margin:0 0 20px}
.dir-download-btn{display:inline-block;padding:12px 28px;background:var(--onyx);color:#FAF6EE;border:none;font-family:Montserrat,sans-serif;font-size:.7rem;letter-spacing:.18em;text-transform:uppercase;cursor:pointer;transition:background .2s}
.dir-download-btn:hover{background:var(--bloodstone)}
/* Direction content sections */
.dir-sections{display:flex;flex-direction:column;gap:0}
.dir-section-row{border-top:1px solid var(--border);padding:20px 0}
.dir-section-lbl{font-family:Montserrat,sans-serif;font-size:.65rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ash);margin-bottom:8px}
.dir-section-val{font-size:.95rem;color:var(--onyx);line-height:1.7}
.dir-section-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}
.dir-section-list li{font-size:.95rem;color:var(--onyx);line-height:1.6;padding-left:14px;position:relative}
.dir-section-list li::before{content:'—';position:absolute;left:0;color:var(--ash)}

/* ── Delivery celebration hero (Tab 04, status=delivered) ── */
.delivered-hero-block{padding:52px 64px 28px;border-bottom:1px solid var(--border-d,rgba(45,16,21,.1));background:linear-gradient(180deg,rgba(45,106,79,.04) 0%,transparent 100%)}
.dhb-eyebrow{font-family:'Montserrat',sans-serif;font-size:0.69rem;letter-spacing:.22em;text-transform:uppercase;color:var(--sage,#9FB2AC);font-weight:700;margin-bottom:20px}

/* ── THE SEAL — DORMANT IN THE PORTAL SINCE 2026-07-31 ────────────────
   ⚠️ The owner removed the "M" seal from BOTH portal moments on 2026-07-31
   ("take the M seal too, i dont like it"): #approvedSealUnit is gone from
   #reviewHeroBlock and the mark is gone from #deliveredHeroBlock, which now
   carries a plain ash "Delivered · <date>" line instead. These rules are
   therefore UNUSED by client-portal.html and are kept only so the styling
   is not lost — do NOT re-apply them to the portal without asking the owner.
   The mark itself still lives in the brand system and lifecycle emails.

   The house's ceremonial mark: a hairline gold circle around a Cormorant
   M. It appears ONLY at moments that deserve weight — an approved design,
   a delivery, the close of a project. Used everywhere it would stop
   meaning anything (brand/brand.json -> tokens.color.gold: "ceremony only").

   Until 2026-07-24 the seal shipped in every lifecycle email but nowhere in
   the product, so the two most ceremonial moments in the whole relationship
   — your design is approved, your suite is delivered — were confirmed with
   the same grey status chip as "brief received".

   Gold measures 2.65:1 on ivory and must never be the sole carrier of
   meaning, so the mark is always paired with a text caption. */
.mdf-seal{
  width:58px;height:58px;border:1px solid var(--gold,#B8935A);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-family:'Cormorant Garamond',Georgia,'Times New Roman',serif;
  font-size:1.6rem;line-height:1;color:var(--gold,#B8935A);
  padding-bottom:.06em;          /* a serif M sits visually low — raise it */
  flex-shrink:0;
}
.mdf-seal-cap{
  font-family:'Montserrat',sans-serif;font-size:.56rem;letter-spacing:.3em;
  text-transform:uppercase;color:var(--gold,#B8935A);margin-top:12px;display:block;
}
.mdf-seal-unit{display:flex;flex-direction:column;align-items:flex-start;margin-bottom:26px}

/* The seal is the ONLY element in the house permitted to scale, because it
   is the only one being pressed. 900ms — the ceremonial duration. */
@keyframes mdf-seal-press{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.mdf-seal--press{animation:mdf-seal-press 900ms cubic-bezier(.22,.61,.36,1) both}
@media (prefers-reduced-motion:reduce){
  .mdf-seal--press{animation:none;opacity:1;transform:none}
}
.dhb-heading{font-family:'Libre Baskerville',serif;font-size:clamp(1.75rem,4vw,2.4rem);font-weight:400;color:var(--onyx,#2D1015);margin:0 0 16px;line-height:1.15}
.dhb-heading em{display:block;font-style:italic;color:var(--sage-dk)}
.dhb-sub{font-family:'Montserrat',sans-serif;font-size:0.82rem;line-height:1.8;color:var(--sage);max-width:720px;margin:0 0 32px}
.dhb-actions{display:flex;gap:14px;justify-content:flex-start;flex-wrap:wrap;margin-bottom:32px}
.dhb-btn-primary{background:var(--onyx,#2D1015);color:#FAF6EE;border:none;font-family:'Montserrat',sans-serif;font-size:0.62rem;letter-spacing:.24em;text-transform:uppercase;padding:16px 36px;cursor:pointer;transition:opacity .18s}
.dhb-btn-primary:hover{opacity:.82}
.dhb-btn-secondary{background:transparent;color:var(--onyx,#2D1015);border:1px solid currentColor;font-family:'Montserrat',sans-serif;font-size:0.62rem;letter-spacing:.24em;text-transform:uppercase;padding:16px 36px;cursor:pointer;transition:opacity .18s}
.dhb-btn-secondary:hover{opacity:.7}
.dhb-divider{border:none;border-top:1px solid var(--border-d,rgba(45,16,21,.1));margin:0 0 28px}
.dhb-referral{font-family:'Montserrat',sans-serif;font-size:0.82rem;color:var(--sage);margin:0}
.dhb-ref-link{color:var(--bloodstone);text-decoration:none;border-bottom:1px solid rgba(93,13,24,.25)}
.dhb-ref-link:hover{border-bottom-color:var(--bloodstone)}
.dhb-btn-referral{background:transparent;color:var(--bloodstone,#922630);border:2px solid var(--bloodstone,#922630);font-family:'Montserrat',sans-serif;font-size:0.62rem;letter-spacing:.24em;text-transform:uppercase;padding:16px 36px;cursor:pointer;transition:opacity .18s}
.dhb-btn-referral:hover{opacity:.8}
.dhb-or{font-family:'Montserrat',sans-serif;font-size:0.65rem;letter-spacing:.1em;color:rgba(45,16,21,.3);text-transform:uppercase;align-self:center}
@media(max-width:600px){
  .delivered-hero-block{padding:40px 24px 32px}
  .dhb-actions{flex-direction:column;align-items:stretch}
}


/* Atelier Live curated progress feed removed 2026-07-17 per owner request
   (.atl-wrap/.atl-eyebrow/.atl-heading/.atl-timeline/.atl-item/.atl-dot/
   .atl-narrative/.atl-date, plus the reveal ceremony's milestone timeline
   below) — see app/scripts/portal-atelier-live.js header. */

/* ── Reveal ceremony modal — one-time delivery threshold (Product P1) ── */
.atl-reveal-overlay{position:fixed;inset:0;z-index:9998;background:rgba(45,16,21,.88);display:flex;align-items:center;justify-content:center;padding:24px;opacity:0;transition:opacity .35s ease}
.atl-reveal-overlay.on{opacity:1}
.atl-reveal-card{position:relative;max-width:520px;width:100%;background:var(--ivory,#FAF6EE);padding:56px 48px;text-align:center;transform:translateY(16px) scale(.98);transition:transform .4s cubic-bezier(.2,.8,.2,1)}
.atl-reveal-overlay.on .atl-reveal-card{transform:translateY(0) scale(1)}
.atl-reveal-c{position:absolute;width:20px;height:20px;border-color:var(--bloodstone,#922630);opacity:.5}
.atl-reveal-c.tl{top:12px;left:12px;border-top:1px solid;border-left:1px solid}
.atl-reveal-c.tr{top:12px;right:12px;border-top:1px solid;border-right:1px solid}
.atl-reveal-c.bl{bottom:12px;left:12px;border-bottom:1px solid;border-left:1px solid}
.atl-reveal-c.br{bottom:12px;right:12px;border-bottom:1px solid;border-right:1px solid}
.atl-reveal-eyebrow{font-family:'Montserrat',sans-serif;font-size:0.62rem;letter-spacing:.28em;text-transform:uppercase;color:var(--sage,#9FB2AC);font-weight:700;margin-bottom:18px}
.atl-reveal-heading{font-family:'Libre Baskerville',serif;font-size:clamp(1.8rem,4vw,2.5rem);font-weight:400;color:var(--onyx,#2D1015);margin:0 0 18px;line-height:1.15}
.atl-reveal-heading em{font-style:italic;color:var(--sage-dk)}
.atl-reveal-sub{font-family:'Montserrat',sans-serif;font-size:0.84rem;line-height:1.8;color:var(--sage,#9FB2AC);max-width:420px;margin:0 auto 32px}
.atl-reveal-btn{background:var(--onyx,#2D1015);color:#FAF6EE;border:none;font-family:'Montserrat',sans-serif;font-size:0.64rem;letter-spacing:.24em;text-transform:uppercase;padding:16px 36px;cursor:pointer;transition:opacity .18s}
.atl-reveal-btn:hover{opacity:.82}
.atl-reveal-card-full{max-width:640px;max-height:88vh;overflow-y:auto;text-align:left}
.atl-reveal-card-full .atl-reveal-eyebrow,.atl-reveal-card-full .atl-reveal-heading,.atl-reveal-card-full .atl-reveal-sub{text-align:center}
.atl-reveal-hero{margin:0 0 28px;border:1px solid var(--border-d,rgba(45,16,21,.13))}
.atl-reveal-hero iframe{width:100%;height:360px;border:none;display:block}
.atl-reveal-note{background:rgba(159,178,172,.12);padding:20px 24px;margin:0 0 28px}
.atl-reveal-note-label{font-family:'Montserrat',sans-serif;font-size:0.6rem;letter-spacing:.2em;text-transform:uppercase;color:var(--sage-dk);font-weight:700;margin-bottom:8px}
.atl-reveal-note p{font-family:'Libre Baskerville',serif;font-style:italic;font-size:0.88rem;line-height:1.7;color:var(--onyx,#2D1015);margin:0}
@media(max-width:600px){ .atl-reveal-card{padding:40px 24px} .atl-reveal-hero iframe{height:260px} }


/* ── Testimonial section ── */
.testi-wrap{padding:48px 48px 40px;border-top:1px solid var(--border-d,rgba(45,16,21,.1));background:var(--ivory)}
.testi-eyebrow{font-family:'Montserrat',sans-serif;font-size:0.56rem;letter-spacing:.32em;text-transform:uppercase;color:var(--sage,#9FB2AC);margin-bottom:14px}
.testi-title{font-family:'Libre Baskerville',serif;font-size:clamp(1.4rem,3vw,1.9rem);font-weight:400;color:var(--onyx,#2D1015);margin:0 0 10px;line-height:1.2}
.testi-title em{font-style:italic;color:var(--bloodstone)}
.testi-sub{font-family:'Montserrat',sans-serif;font-size:0.82rem;line-height:1.8;color:var(--sage);margin:0 0 24px;max-width:480px}
.testi-stars-row{display:flex;gap:6px;margin-bottom:20px}
.tstar{background:none;border:none;font-size:1.75rem;color:var(--border-d,rgba(45,16,21,.2));cursor:pointer;padding:2px;line-height:1;transition:color .12s;-webkit-tap-highlight-color:transparent}
.tstar.filled,.tstar:hover{color:var(--bloodstone,#922630)}
.testi-textarea{width:100%;max-width:540px;min-height:110px;border:1px solid var(--border-d,rgba(45,16,21,.15));padding:14px 16px;font-family:'Montserrat',sans-serif;font-size:0.82rem;line-height:1.8;color:var(--onyx,#2D1015);background:var(--ivory,#FAF6EE);resize:vertical;display:block;margin-bottom:14px;box-sizing:border-box}
.testi-textarea:focus{outline:none;border-color:var(--sage,#9FB2AC)}
.testi-public-label{display:flex;gap:10px;align-items:flex-start;font-family:'Montserrat',sans-serif;font-size:0.72rem;color:var(--sage);line-height:1.6;max-width:540px;margin-bottom:22px;cursor:pointer}
.testi-public-check{margin-top:2px;flex-shrink:0;accent-color:var(--sage,#9FB2AC)}
.testi-submit-btn{font-family:'Montserrat',sans-serif;font-size:0.6rem;letter-spacing:.22em;text-transform:uppercase;padding:14px 32px;background:var(--onyx,#2D1015);color:#FAF6EE;border:none;cursor:pointer;transition:opacity .18s}
.testi-submit-btn:hover{opacity:.8}
.testi-thanks{margin-top:20px;display:flex;align-items:center;gap:12px;font-family:'Montserrat',sans-serif;font-size:0.82rem;color:var(--sage-dk);line-height:1.6}
.testi-thanks-icon{color:var(--sage,#9FB2AC);font-size:1rem;flex-shrink:0}
@media(max-width:600px){.testi-wrap{padding:36px 20px 32px}.testi-textarea{max-width:100%}}

/* ── Menu dish builder (Section 10) ── */
.menu-course-block{margin-bottom:24px}
.menu-course-label{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--onyx);font-weight:600;margin-bottom:10px;display:block}
.menu-dish-row{display:flex;align-items:flex-start;gap:10px;margin-bottom:8px;padding:12px 14px;border:1px solid var(--border);background:var(--white);}
.menu-dish-row:hover{border-color:var(--border-d)}
.menu-dish-input{flex:1 1 auto;border:none;background:transparent;font-family:'Montserrat',sans-serif;font-size:.8rem;color:var(--onyx);padding:0;min-width:0;outline:none;resize:none;line-height:1.45;overflow:hidden;display:block;width:100%}
.menu-dish-input::placeholder{color:rgba(45,16,21,.32);font-style:italic}
.menu-dc-wrap{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.menu-dc{font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.06em;padding:3px 8px;border:1px solid var(--border);cursor:pointer;color:var(--onyx,#2D1015);transition:all .12s;user-select:none}
.menu-dc:hover{border-color:var(--border-d);color:var(--onyx)}
.menu-dc.on{background:var(--onyx);color:var(--cream);border-color:var(--onyx)}
.menu-dish-inner{flex:1 1 auto;min-width:0}
.menu-del-btn{flex-shrink:0;background:none;border:none;cursor:pointer;color:rgba(45,16,21,.28);font-family:'Montserrat',sans-serif;font-size:var(--text-body);padding:0 0 0 8px;line-height:1;margin-top:1px;transition:color .12s}
.menu-del-btn:hover{color:var(--bloodstone)}
.menu-add-dish{display:inline-flex;align-items:center;gap:5px;font-family:'Montserrat',sans-serif;font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;font-weight:600;color:var(--sage);background:none;border:none;cursor:pointer;padding:2px 0;margin-top:4px;transition:color .12s}
.menu-add-dish:hover{color:var(--bloodstone)}
/* Fix 6 — table capacity */
.table-card-over { border-color: rgba(146,38,48,.4); background: rgba(146,38,48,.04); }
.table-card-count.is-over { color: #8b4444; font-weight: 600; }
/* TNG mode tabs */
.tng-mode-tabs{display:flex;gap:0;margin-bottom:12px;border:1px solid var(--border);border-radius:0;overflow:hidden;width:fit-content}
.tng-mode-tab{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.1em;text-transform:uppercase;padding:7px 16px;border:none;background:transparent;color:rgba(45,16,21,.5);cursor:pointer;transition:background .15s,color .15s}
.tng-mode-tab.active{background:var(--onyx,#2D1015);color:#FAF6EE}
.tng-write-hint{font-family:'Montserrat',sans-serif;font-size:.72rem;color:rgba(45,16,21,.5);margin:0 0 8px;line-height:1.5}
.tng-write-textarea{width:100%;border:1px solid var(--border);padding:10px 12px;font-family:'Montserrat',sans-serif;font-size:.82rem;color:var(--onyx);background:var(--white,#fff);resize:vertical;box-sizing:border-box;margin-bottom:10px;min-height:100px}
.tng-write-textarea:focus{outline:none;border-color:var(--sage)}
/* Fix 8 — bulk actions */
.bulk-bar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; padding:10px 16px; background:rgba(45,16,21,.04); border-radius:0; margin-bottom:10px; border:1px solid var(--border); }
.bulk-bar-count { font-family:'Montserrat',sans-serif; font-size:.72rem; font-weight:600; letter-spacing:.06em; color:rgba(45,16,21,.7); }
/* Fix 9 — RSVP tracker */
.rsvp-tracker-stats { display:flex; gap:12px; flex-wrap:wrap; }
.rsvp-tracker-chip { display:flex; flex-direction:column; align-items:center; padding:12px 20px; border-radius:0; border:1px solid var(--border); min-width:90px; }
.rsvp-tracker-chip.is-responded { background:rgba(159,178,172,.1); }
.rsvp-tracker-chip.is-pending   { background:rgba(200,180,140,.1); }
.rsvp-tracker-chip.is-rate      { background:rgba(45,16,21,.04); }
.rsvp-chip-num { font-family:'Libre Baskerville',serif; font-size:1.6rem; font-weight:600; color:var(--onyx); }
.rsvp-chip-lbl { font-family:'Montserrat',sans-serif; font-size:.65rem; letter-spacing:.1em; text-transform:uppercase; color:rgba(45,16,21,.5); margin-top:2px; }
.rsvp-deadline-warn { background:rgba(181,72,52,.08); border:1px solid rgba(181,72,52,.25); border-radius:0; padding:10px 14px; font-family:'Montserrat',sans-serif; font-size:.78rem; color:var(--bad); margin-bottom:14px; }
/* 2026-07-29 mobile audit (H-2): gap + min-width:0 + flex:0 0 auto are all
   load-bearing. This was a plain non-wrapping flex row, so a guest's name and
   email were free to grow and shove the action button past the row's right
   edge. body{overflow-x:clip} then swallowed it with NO horizontal scroll, so
   the clipped part could never be brought into view. Measured with 214 realistic
   guests (hyphenated surnames, ordinary addresses): at 360px wide — the common
   Android width — 123 of 128 rows were affected and the worst lost 58px of a
   95px button, 61% of the control. At 390px it was 65 of 128.
   min-width:0 is the important one: a flex item defaults to min-width:auto,
   which refuses to shrink below its content, which is exactly how the text won
   the fight against the button. */
.rsvp-pending-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 0; border-bottom:1px solid rgba(45,16,21,.06); }
.rsvp-pending-name { font-family:'Montserrat',sans-serif; font-size:.78rem; color:var(--onyx); min-width:0; flex:1 1 auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.rsvp-pending-email { color:rgba(45,16,21,.45); }
.rsvp-chase-btn { font-family:'Montserrat',sans-serif; font-size:.68rem; letter-spacing:.08em; text-transform:uppercase; padding:4px 10px; border:1px solid var(--border); background:transparent; cursor:pointer; border-radius:0; color:rgba(45,16,21,.6); flex:0 0 auto; }
.rsvp-chase-btn.is-chased { background:rgba(159,178,172,.2); border-color:rgba(159,178,172,.5); color:var(--sage,#6b8f7c); font-weight:600; }
/* Guest list table */
.rsvp-table-wrap { overflow-x:auto; }
#rsvpTable th { white-space:nowrap; }
.meal-badge { white-space:nowrap; display:inline-flex; align-items:center; gap:5px; font-size:0.8rem; color:var(--onyx); }
.meal-dot { width:8px; height:8px; border-radius:50%; display:inline-block; flex-shrink:0; }
/* 2026-08-06 palette audit: these four carried raw Tailwind hexes (#D97706
   amber-600, #3B82F6 blue-500, #16A34A/#15803D green-600/700) — a second,
   off-house palette living inside a client-facing stylesheet. Retokenised onto
   house values (kept, not deleted — Nothing-is-deleted rule).
   Two things measured while doing it, so nobody re-litigates them:
   (1) NOTHING renders these class combinations — `grep -rn meal-dot app api
       test` returns only app/scripts/portal-exports.js, and that file
       ships its own `.meal-dot` rule plus an inline `style="background:…"` from
       its own `_defaultMealColors` array (portal-exports.js:110). So these
       rules are orphaned; the swap is hygiene and changes no pixel anywhere.
   (2) vegetarian and vegan therefore both land on --forest. That is a real
       collision if this block is ever wired to markup — at that point ask the
       owner for a fourth house-legal hue rather than reintroducing a Tailwind
       one. Documented here rather than fixed silently — and note this block is
       the SECOND `.meal-dot.<type>` set in this file (the first is ~line 1725,
       in house browns/blues); being later, this one wins the cascade, so the
       first is what a reader is likely to find and the wrong one to edit. */
.meal-dot.chicken    { background:var(--ochre); }
.meal-dot.fish       { background:var(--sage-dk); }
.meal-dot.vegetarian { background:var(--forest); }
.meal-dot.vegan      { background:var(--forest); }
.meal-dot.kids       { background:var(--ash); }
/* 2026-07-17 UX review (accessibility): this late block silently overrode the
   earlier, higher-contrast .ag-* definitions. Values below now meet WCAG AA on
   their backgrounds — notably the per-row edit/delete icons, which sat at
   ~1.4:1 (#D1D5DB on white) and were nearly invisible: the primary "fix a
   mistake" control in the guest list. Sub-0.63rem sizes bumped to the
   stylesheet's own stated minimum. */
.ag-badge-yes     { display:inline-flex; flex-direction:column; background:rgba(45,106,79,.1); border:1px solid rgba(45,106,79,.3); border-radius:0; padding:4px 10px; font-size:0.63rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--success); white-space:nowrap; }
.ag-badge-no      { display:inline-flex; flex-direction:column; background:rgba(181,72,52,.1); border:1px solid rgba(181,72,52,.3); border-radius:0; padding:4px 10px; font-size:0.63rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bad); white-space:nowrap; }
.ag-badge-pending { display:inline-flex; align-items:center; background:rgba(183,121,31,.1); border:1px solid rgba(183,121,31,.3); border-radius:0; padding:4px 10px; font-size:0.63rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--warn); white-space:nowrap; }
.ag-table-chip    { display:inline-block; font-size:0.68rem; font-weight:600; color:var(--ash); background:var(--greige); border:1px solid var(--border); border-radius:0; padding:3px 9px; white-space:nowrap; }
.rsvp-email-sub   { font-size:0.67rem; color:var(--ash); margin-top:2px; }
.ag-party-txt     { font-size:0.68rem; color:var(--ash); }
.rsvp-dash        { color:rgba(159,178,172,.4); }
/* 2026-08-06 palette audit: the five rules below still held raw Tailwind hexes
   after the earlier pass retokenised the greys (#6B7280/#374151/#9CA3AF → --ash,
   now 0 occurrences). #B45309 amber-700, #1C2B4A navy, #B91C1C red-700 and
   #FAFAFA neutral-50 are all off-house and all on the guest list — a screen
   clients use. Now --ochre / --sage-dk / --brick / --greige, every one defined
   in app/styles/tokens.css (:61,:62,:88,:90). --brick is the house's
   errors-only red, which is exactly what a delete hover is. */
.ag-alert-chip    { font-size:0.63rem; font-weight:700; color:var(--ochre); letter-spacing:0.04em; margin-top:2px; }
.ag-pdf-link      { font-size:0.7rem; color:var(--sage-dk); text-decoration:underline; }
.rel-chip         { display:inline-block; font-size:0.62rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--ash); border:1px solid var(--border); border-radius:0; padding:2px 7px; white-space:nowrap; }
.rsvp-edit-btn,.rsvp-del-btn { background:none; border:none; cursor:pointer; font-size:13px; padding:3px 4px; line-height:1; color:var(--ash); transition:color .15s; }
.rsvp-edit-btn:hover { color:var(--onyx); }
.rsvp-del-btn:hover  { color:var(--brick); }
.rsvp-empty-cell  { padding:28px; text-align:center; color:var(--ash); font-size:0.72rem; }
.ag-footer        { display:flex; justify-content:space-between; align-items:center; padding:9px 14px; border-top:1px solid var(--border); background:var(--greige); font-family:'Montserrat',sans-serif; }
.ag-footer-count  { font-size:0.63rem; letter-spacing:0.1em; text-transform:uppercase; color:var(--ash); }
.ag-footer-link   { font-size:0.6rem; letter-spacing:0.1em; text-transform:uppercase; color:var(--sage-dk); font-weight:600; background:none; border:none; cursor:pointer; font-family:'Montserrat',sans-serif; text-decoration:none; }

/* ── from client-portal.html line 372 ── */
.review-vision-modal{position:fixed;inset:0;background:rgba(45,16,21,.78);backdrop-filter:blur(6px);z-index:9999;display:none;align-items:flex-start;justify-content:center;padding:40px 20px;overflow-y:auto}
.review-vision-modal.show{display:flex}
.rvm-card{background:#FAF6EE;color:#2D1015;max-width:680px;width:100%;padding:42px 44px;border:1px solid rgba(45,16,21,.1);box-shadow:0 30px 80px rgba(0,0,0,.4);font-family:'Montserrat',sans-serif}
.rvm-eyebrow{font-size:0.68rem;letter-spacing:.32em;text-transform:uppercase;color:#7a6248;margin-bottom:14px;text-align:center}
.rvm-title{font-family:'Libre Baskerville',serif;font-size:1.875rem;line-height:1.2;text-align:center;margin:0 0 8px;font-weight:400}
.rvm-title em{font-style:italic;color:#922630}
.rvm-sub{text-align:center;font-size:0.88rem;color:#5b4836;margin:0 0 26px;line-height:1.8}
.rvm-body{max-height:55vh;overflow-y:auto;border-top:1px solid rgba(45,16,21,.1);border-bottom:1px solid rgba(45,16,21,.1);padding:20px 4px}
.rvm-sec{font-size:0.68rem;letter-spacing:.28em;text-transform:uppercase;color:#922630;font-weight:600;margin:18px 0 10px;padding-bottom:6px;border-bottom:1px dashed rgba(93,13,24,.25)}
.rvm-sec:first-child{margin-top:0}
.rvm-row{display:flex;gap:14px;padding:6px 0;font-size:0.88rem;line-height:1.6}
.rvm-lbl{flex:0 0 38%;color:#7a6248;font-size:0.82rem}
.rvm-val{flex:1;color:#2D1015;word-break:break-word;white-space:pre-wrap}
.rvm-actions{display:flex;gap:12px;margin-top:24px;flex-wrap:wrap}
.rvm-btn{flex:1;min-width:180px;padding:14px 20px;border:none;font-family:'Montserrat',sans-serif;font-size:0.82rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;cursor:pointer;transition:opacity .2s}
.rvm-btn-primary{background:#2D1015;color:#FAF6EE}
.rvm-btn-primary:hover{opacity:.86}
.rvm-btn-secondary{background:transparent;color:#2D1015;border:1px solid #2D1015}
.rvm-btn-secondary:hover{background:rgba(45,16,21,.06)}
.rvm-warn{font-size:0.76rem;color:var(--warn);text-align:center;margin-top:14px;line-height:1.6;font-style:italic}
@media(max-width:540px){
  .rvm-card{padding:30px 22px}
  .rvm-title{font-size:1.5rem}
  .rvm-row{flex-direction:column;gap:2px}
  .rvm-lbl{flex:0 0 auto}
}

/* ── from client-portal.html line 952 ── */
.brief-section-nav{display:none}
@media(min-width:1180px){
  .form-wrap{position:relative}
  .brief-section-nav{display:block;position:sticky;top:90px;float:left;width:210px;margin-left:-238px;font-family:Montserrat,sans-serif;font-size:12px;letter-spacing:.04em;line-height:1.4}
  .bsn-title{font-size:10px;letter-spacing:.28em;text-transform:uppercase;color:rgba(250,246,238,.5);margin-bottom:14px}
  .bsn-list{list-style:none;padding:0;margin:0;border-left:1px solid rgba(250,246,238,.18)}
  .bsn-item{padding:9px 14px;color:rgba(250,246,238,.62);cursor:pointer;border-left:2px solid transparent;margin-left:-1px;transition:color .2s,border-color .2s,background .2s;display:flex;align-items:center;gap:8px;text-decoration:none}
  .bsn-item:hover{color:#FAF6EE;background:rgba(250,246,238,.04)}
  .bsn-item.active{color:#B8935A;border-left-color:#B8935A;background:rgba(184,147,90,.06)}
  .bsn-item.done{color:rgba(250,246,238,.85)}
  .bsn-num{font-size:10px;opacity:.5;width:18px;flex:0 0 18px;font-variant-numeric:tabular-nums}
  .bsn-item.done .bsn-num::before{content:'✓ ';color:#7fa67a;opacity:1}
  .bsn-item.done .bsn-num{font-size:0}
  /* Optional-section cue + standing autosave reassurance (2026-07-23 adoption-risk fix) */
  .bsn-item.bsn-optional>span:last-child::after{content:'optional';margin-left:7px;font-size:8.5px;letter-spacing:.06em;font-style:italic;opacity:.5}
  .bsn-foot{margin:16px 0 0;padding:12px 2px 0;border-top:1px solid rgba(250,246,238,.1);font-size:10px;line-height:1.5;letter-spacing:.02em;color:rgba(250,246,238,.42);font-style:italic}
}
.brief-mobile-progress{display:none}
@media(max-width:1179px){
  /* 2026-07-29 mobile audit (H-1): top and z-index are load-bearing.
     This used to be `top:0;z-index:50` while .portal-hdr is position:fixed,
     129px tall, z-index:200 — so the moment the bar stuck it parked UNDERNEATH
     the header and lost the z fight. Measured at y=1200/2000/3000/4500: 51 of
     51px occluded, fullyHidden at every position. That meant the whole
     ten-section brief was filled in with no section counter, no progress bar
     and no reachable "NEXT ↓" — the only wayfinding the mobile form has.
     Sticking below the header requires the header's real measured height, which
     only syncHeaderPad() knows, hence the same calc() body uses. */
  .brief-mobile-progress{display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:calc(var(--hdr-h,120px) + var(--beta-h,0px));z-index:210;background:rgba(45,16,21,.94);backdrop-filter:blur(8px);padding:8px 12px 8px 16px;border-bottom:1px solid rgba(250,246,238,.12);font-family:Montserrat,sans-serif;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:rgba(250,246,238,.7);text-align:left}
  .brief-mobile-progress strong{color:#B8935A;font-weight:500}
  /* Save state, mirrored into the one strip that is on screen for the whole
     form (2026-07-29 mobile audit, M-3). Deliberately quiet — it is reassurance,
     not a headline — but _setSyncState() recolours it if the sync goes stale. */
  .bmp-save-state{margin-left:6px;font-size:9px;letter-spacing:.1em;color:rgba(250,246,238,.55);text-transform:uppercase;white-space:nowrap}
  /* Sticky next/submit action (2026-07-17 UX review): the submit button lives
     at the bottom of a very long form — this keeps the next move one tap away. */
  .bmp-next-btn{flex-shrink:0;font-family:Montserrat,sans-serif;font-size:10px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;padding:8px 14px;background:var(--bloodstone,#922630);color:#FAF6EE;border:none;cursor:pointer;min-height:34px}
  .bmp-next-btn.bmp-ready{background:#3E6B4E}
}

/* ── from client-portal.html line 1225 ── */
.sc-wrap{position:relative}
.sc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
.sc-dots{display:flex;gap:8px;align-items:center}
/* 2026-07-29 mobile audit (M-4): the dot is a 26x4px bar, which as a tap target
   is eleven times under the 44px guideline — measured at 4px tall on a phone.
   The bar stays 4px visually; the BUTTON is padded out to a 44px-tall hit area
   with a transparent box, and background-clip:content-box keeps the paint on
   the 4px strip so nothing looks different. Negative margin absorbs the extra
   height so the row does not grow. */
.sc-dot{width:26px;height:4px;border-radius:2px;background:rgba(45,16,21,.12);cursor:pointer;transition:background .22s,transform .18s;border:none;padding:20px 0;margin:-20px 0;box-sizing:content-box;background-clip:content-box}
.sc-dot.sc-cur{background:var(--bloodstone,#922630);background-clip:content-box;transform:scaleX(1.18)}
.sc-dot.sc-dn{background:rgba(45,16,21,.35);background-clip:content-box}
.sc-ctr{font-family:'Montserrat',sans-serif;font-size:.65rem;letter-spacing:.1em;color:var(--sage,#9FB2AC);text-transform:uppercase}
.sc-chapter{display:none}
.sc-chapter.sc-active{display:block;animation:scfadein .22s ease}
@keyframes scfadein{from{opacity:0;transform:translateX(10px)}to{opacity:1;transform:translateX(0)}}
.sc-chapter-hdr{margin-bottom:18px}
.sc-chapter-num{font-family:'Montserrat',sans-serif;font-size:.58rem;letter-spacing:.24em;text-transform:uppercase;color:var(--bloodstone,#922630);margin-bottom:5px}
.sc-chapter-title{font-family:'Libre Baskerville',serif;font-size:1.35rem;font-style:italic;color:var(--onyx,#2D1015);line-height:1.2}
.sc-next-btn{display:inline-block;margin-top:22px;font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;padding:11px 28px;background:var(--onyx,#2D1015);color:#FAF6EE;border:none;cursor:pointer;transition:opacity .18s}
.sc-next-btn:hover{opacity:.8}
.upload-grid--3{grid-template-columns:repeat(3,1fr)}
@media(max-width:640px){.upload-grid--3{grid-template-columns:1fr}}
.sc-divider{border:none;border-top:1px solid rgba(45,16,21,.1);margin:32px 0}
.treat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;margin-top:10px}
.treat-opt{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border:1px solid rgba(45,16,21,.14);cursor:pointer;transition:border-color .18s,background .18s}
.treat-opt:hover{border-color:rgba(146,38,48,.35);background:rgba(146,38,48,.03)}
.treat-opt input[type="radio"]{margin-top:3px;accent-color:var(--bloodstone,#922630);flex-shrink:0}
.treat-opt:has(input:checked){border-color:var(--bloodstone,#922630);background:rgba(146,38,48,.04)}
.treat-opt:has(input:checked) .treat-label{color:var(--bloodstone,#922630)}
.treat-label{font-family:'Montserrat',sans-serif;font-size:.72rem;letter-spacing:.06em;color:var(--onyx,#2D1015);display:flex;flex-direction:column;gap:3px}
.treat-desc{font-family:'Montserrat',sans-serif;font-size:.72rem;font-style:italic;color:var(--onyx,#2D1015);opacity:.6;letter-spacing:0;font-weight:300}

/* ── from client-portal.html line 1858 ── */
.mat-card{border:1px solid var(--border);cursor:pointer;transition:border-color .22s,box-shadow .22s;background:var(--white);user-select:none}
.mat-card:hover{border-color:var(--sage)}
.mat-card.selected{border-color:var(--bloodstone);box-shadow:inset 0 0 0 1px var(--bloodstone)}
.mat-card-swatch{width:100%;height:48px}
.mat-card-body{padding:12px 14px}
.mat-card-name{font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--onyx);margin-bottom:4px}
.mat-card-desc{font-size:.78rem;color:var(--ash);line-height:1.5;margin-bottom:5px}
.mat-card-feel{font-family:'Montserrat',sans-serif;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--sage-dk);opacity:.7}
.tech-card{border:1px solid var(--border);cursor:pointer;transition:border-color .22s,box-shadow .22s;background:var(--white);user-select:none;padding:14px}
.tech-card:hover{border-color:var(--sage)}
.tech-card.selected{border-color:var(--bloodstone);box-shadow:inset 0 0 0 1px var(--bloodstone)}
.tone-card-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:10px}
.tone-card{display:flex;flex-direction:column;gap:4px;padding:11px 12px;border:1px solid var(--border);cursor:pointer;transition:border-color .2s,background .2s;background:var(--white);user-select:none;border-radius:2px;min-height:80px}
.tone-card:hover{border-color:var(--sage)}
.tone-card.selected{border-color:var(--bloodstone);background:rgba(125,64,71,.04);box-shadow:inset 0 0 0 1px var(--bloodstone)}
.tone-card-name{font-family:'Montserrat',sans-serif;font-size:.55rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--onyx)}
.tone-card-sample{font-family:'Cormorant Garamond',Georgia,serif;font-size:.82rem;font-style:italic;color:rgba(58,53,48,.65);line-height:1.4}
.tech-demo{height:52px;display:flex;align-items:center;justify-content:center;margin-bottom:10px;border-bottom:1px solid rgba(45,16,21,.06)}
.tech-name{font-family:'Montserrat',sans-serif;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--onyx);margin-bottom:3px}
.tech-desc{font-size:.75rem;color:var(--ash);line-height:1.45}
#matOptionsWrap.mat-dimmed{opacity:.4;pointer-events:none}

/* ── from client-portal.html line 3204 ── */
#certPrint{font-family:'Libre Baskerville',serif;padding:60px;background:white;max-width:700px;margin:0 auto}
.cert-header{text-align:center;margin-bottom:40px}
.cert-logo{font-family:'Libre Baskerville',serif;font-size:.7rem;letter-spacing:.18em;text-transform:uppercase;color:#7D4047;margin-bottom:16px}
.cert-title{font-size:1.8rem;color:#2E2E2E;margin-bottom:8px}
.cert-sub{font-size:.75rem;color:#B6A697;letter-spacing:.1em}
.cert-rule{width:80px;height:1px;background:#DDD5CD;margin:20px auto}
.cert-body{text-align:center;margin-bottom:40px}
.cert-names{font-size:2rem;color:#2E2E2E;font-style:italic;margin-bottom:8px}
.cert-detail{font-size:.75rem;color:#B6A697;line-height:2;letter-spacing:.06em}
.cert-palette{display:flex;justify-content:center;gap:8px;margin:24px 0}
.cert-swatch{width:48px;height:48px;border:1px solid rgba(0,0,0,.08)}
.cert-sig-line{border-top:1px solid #DDD5CD;margin:40px 60px 0;padding-top:12px;text-align:center;font-size:.55rem;color:#B6A697;letter-spacing:.14em;text-transform:uppercase}
.cert-footer{text-align:center;font-size:.5rem;color:#DDD5CD;letter-spacing:.18em;text-transform:uppercase;margin-top:32px}

/* ── from client-portal.html line 16721 ── */
/* Footer: always full-width so text stays centered on the viewport regardless of sidebar */
/* Tab entrance animation — fill:backwards keeps the pre-animation opacity:0 but does NOT
   persist transform:translateY(0) after the animation ends, preventing a CSS stacking
   context that would break position:fixed on the footer */
/* 2026-07-29 mobile audit — DO NOT remove `backwards`, and do not "simplify"
   this to an opacity-only fade. Both were tried during the audit and both are
   worse. This animation can sit in a state where it is reported as `running`
   with currentTime pinned at 0 (the panel is display:none at the moment
   `.active` is applied, so the animation never advances), and in that state the
   element renders its FROM keyframe. With `backwards` present the browser
   settles it correctly and the tab paints; with the fill mode removed the same
   frozen animation applied `opacity:0` to the whole active tab panel and the
   entire guests tab rendered invisible. Verified live, then reverted.
   The known side effect is that `transform: translateY(10px)` can linger on the
   active panel. A transformed ancestor shifts the offsets of sticky descendants,
   which is why the sticky guest filter bar (M-2) pins ~11px below the header
   rather than flush against it. That is cosmetic and was accepted; a real fix
   means changing how showTab() reveals panels (reveal, then add .active on the
   next frame) rather than touching this rule. */
.tab-panel.active{animation:px-tab-in .38s cubic-bezier(.16,1,.3,1) backwards}
@keyframes px-tab-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}

/* Cursor sparkle */
.px-spark{
  position:fixed;pointer-events:none;z-index:99990;
  font-size:9px;line-height:1;color:rgba(184,147,90,.85);
  transform:translate(-50%,-50%);user-select:none;
  animation:px-float .85s ease-out forwards
}
@keyframes px-float{
  0%  {opacity:.9;transform:translate(-50%,-50%) scale(1.1) rotate(0deg)}
  100%{opacity:0;transform:translate(-50%,calc(-50% - 22px)) scale(.2) rotate(40deg)}
}

/* Button ripple */
.px-ripple-wrap{position:relative;overflow:hidden}
.px-ripple{
  position:absolute;border-radius:50%;
  width:120px;height:120px;margin-top:-60px;margin-left:-60px;
  background:rgba(255,255,255,.2);
  transform:scale(0);pointer-events:none;
  animation:px-ripple-go .7s ease-out forwards
}
@keyframes px-ripple-go{to{transform:scale(5);opacity:0}}

/* Palette card 3D tilt */
.pal-card{will-change:transform}

/* Star burst petals */
.px-star-petal{
  position:fixed;pointer-events:none;z-index:99991;
  font-size:9px;line-height:1;user-select:none;
  animation:px-star-fly .65s ease-out forwards
}
@keyframes px-star-fly{
  0%  {opacity:1;transform:translate(-50%,-50%) rotate(var(--a,0deg)) translateY(0) scale(1.1)}
  100%{opacity:0;transform:translate(-50%,-50%) rotate(var(--a,0deg)) translateY(-34px) scale(.15)}
}

/* ── from client-portal.html line 16904 ── */
@keyframes cffall{0%{transform:translateY(0) rotate(0deg);opacity:1}100%{transform:translateY(100vh) rotate(720deg);opacity:0}}
.cf-piece{position:fixed;top:-12px;width:8px;height:8px;border-radius:2px;pointer-events:none;z-index:99998;animation:cffall linear forwards}
.item-card:hover{transform:translateY(-4px) scale(1.015);box-shadow:0 10px 28px rgba(45,16,21,.1);border-color:rgba(45,16,21,.18)!important;background:var(--white)!important;z-index:2;position:relative}

/* ── MOBILE AUDIT 2026-07-16: Tab 05 touch & wrapping fixes (additive, ≤700px only) ── */
@media(max-width:700px){
  /* nowrap intro/security lines ran off-screen on phones — let them wrap */
  .rsvp-hero-sub{white-space:normal}
  .rsvp-security-tip{white-space:normal}
  /* guest-card edit/delete and table-row reorder/edit/delete icons were ~15-20px tap targets */
  .rsvp-edit-btn,.rsvp-del-btn{padding:10px;font-size:1rem;min-width:40px;min-height:40px}
  .table-card-del{padding:8px;font-size:.95rem;min-width:36px;min-height:36px;opacity:.7}
}

/* ── Review-before-submit — "Read it back" (2026-07-17 UX review §4.4) ── */
.brv-row{display:grid;grid-template-columns:150px 1fr auto;gap:14px;align-items:baseline;padding:13px 2px;border-bottom:1px solid var(--border,rgba(45,16,21,.08));}
.brv-lbl{font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--sage,#9FB2AC);font-weight:600;}
.brv-val{font-family:'Montserrat',sans-serif;font-size:.8rem;line-height:1.65;color:var(--onyx,#2D1015);}
.brv-edit{font-family:'Montserrat',sans-serif;font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--bloodstone,#922630);text-decoration:none;border-bottom:1px solid rgba(146,38,48,.35);padding-bottom:1px;white-space:nowrap;}
.brv-edit:hover{border-bottom-color:var(--bloodstone,#922630);}
@media(max-width:700px){.brv-row{grid-template-columns:1fr auto;}.brv-lbl{grid-column:1 / -1;margin-bottom:-6px;}}

/* ── Concept: named direction cards (2026-07-17 UX review §7) ── */
.cdl-dir-cards{display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:640px;}
.cdl-dir-card{border:1px solid var(--border,rgba(45,16,21,.1));background:var(--white,#fff);padding:18px 20px;display:flex;flex-direction:column;gap:8px;align-items:flex-start;}
.cdl-dir-card-eyebrow{font-family:'Montserrat',sans-serif;font-size:.58rem;letter-spacing:.24em;text-transform:uppercase;color:var(--sage,#9FB2AC);}
.cdl-dir-card-name{font-family:'Libre Baskerville',serif;font-size:1.05rem;font-style:italic;color:var(--onyx,#2D1015);line-height:1.3;}
.cdl-dir-card-essence{font-family:'Montserrat',sans-serif;font-size:.74rem;line-height:1.6;color:rgba(45,16,21,.6);}
.cdl-dir-card .cdl-approve-btn{margin-top:auto;}
@media(max-width:640px){.cdl-dir-cards{grid-template-columns:1fr;}}

/* ═══ REVISION ROUNDS — banner + waiting badge formatting (2026-07-31, owner review)
   Two formatting faults the owner screenshotted:

   1. The remaining-rounds banner (#revRemainingBanner) was one run-on sentence set
      across the full container width — "One round of changes left. A round covers
      every piece at once — gather all your notes…" — so the FACT (how many rounds
      are left) and the ADVICE (batch your notes) had no separation and the line ran
      to ~1130px, well past a readable measure. Now a two-line block: an uppercase
      status line, then the guidance beneath at a capped measure.

   2. The banner used the same alarm-gold left rule at every level, so "2 of 2 left"
      looked as urgent as "none left". The rule and the head now take their tone from
      the state: calm sage when rounds remain, gold at the last one, bloodstone at zero.

   Kept on its own class rather than restyling .brief-resubmit-banner — that class is
   named for a briefing flow this banner is no longer part of. The old rules stay.  ═══ */
/* align-items stays `stretch` (the default) — flex-start makes each child
   shrink-to-fit, which collapsed the text block to its widest word. The reading
   measure is set by max-width on .rev-rem-body, not by starving the container. */
.rev-remaining-banner{background:var(--ivory);border-left:3px solid var(--sage-lt);color:var(--onyx);padding:16px 22px 17px;margin:0 0 22px;font-family:'Montserrat',sans-serif;display:flex;flex-direction:column;gap:12px;}
.rev-remaining-banner.is-low{border-left-color:var(--warn);}
.rev-remaining-banner.is-out{border-left-color:var(--bloodstone);}
/* display:block on the parts themselves, NOT flex-column on #revRemainingText —
   these are <span>s, and as inline boxes they ran head and body together on one
   line (and silently ignored the max-width measure) in any container that wasn't
   that one ID. The stacking has to belong to the parts, not to their wrapper. */
.rev-rem-head{display:block;font-size:var(--text-xs);font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--sage);line-height:1.4;}
.rev-remaining-banner.is-low .rev-rem-head{color:var(--warn);}
.rev-remaining-banner.is-out .rev-rem-head{color:var(--bloodstone);}
.rev-rem-body{display:block;margin-top:7px;font-size:.78rem;line-height:1.65;letter-spacing:.01em;color:rgba(45,16,21,.68);max-width:62ch;}
.rev-rem-body strong{font-weight:600;color:rgba(45,16,21,.85);}

/* ── "WHAT HAPPENS NEXT" — the waiting strip (owner picked Option 2, 2026-07-31) ──
   Replaces the faint status word that used to sit at the bottom of a piece card in
   the states where the client has no button to press. That word repeated the card's
   own status pill, and in one state ("In Progress", alone in the strip with no
   sibling button and no .bb-action-reassure child to hold it open) .bb-action-disabled
   being flex:0 1 0% collapsed it to its widest word and it rendered as "IN / PROGRESS"
   on two lines. ALL FOUR waiting states now carry this block: in_review with a sent
   note (which previously rendered a completely EMPTY bordered strip), revision_requested,
   in_design, and — after a second owner review — pending, whose card had been saying the
   same thing three times over ("Awaiting Start" pill, "Not Yet Started" label, a ghosted
   "Not yet available" badge). That badge is dropped, not restyled: it restated the pill
   at .4 opacity and named the absence of buttons that are self-evidently absent.

   ⚠️ CONSEQUENCE: `.bb-action-disabled` and `.bb-action-reassure` (defined further up
   this file) now have NO live call site in the portal — every state that used them emits
   .bb-next instead. They are left in place rather than removed, but do not treat their
   presence as evidence that the badge layout is still reachable. The earlier fix from
   this same session — nowrap + flex-basis scoped to `.bb-actions-compact` — was removed
   for the same reason: it had stopped matching anything. */
.bb-actions.bb-actions-next{display:block!important;padding:0!important;margin-top:0!important;border-top:none!important;}
.bb-next{padding:15px 22px 17px;border-top:1px solid rgba(45,16,21,.07);background:var(--ivory);}
.bb-next-lbl{font-family:'Montserrat',sans-serif;font-size:.6rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:8px;}
.bb-next--rev .bb-next-lbl{color:var(--bloodstone);}
.bb-next-txt{font-family:'Montserrat',sans-serif;font-size:.79rem;line-height:1.62;color:rgba(45,16,21,.72);max-width:62ch;}
.bb-next-txt strong{font-weight:600;color:rgba(45,16,21,.88);}
@media(max-width:640px){.bb-next{padding:14px 16px 15px;}}


/* ── Final print approval panel (M-7, 2026-08-06) ──────────────────────────
   The client's sign-off before an irreversible print run. Sits at the top of
   the download list; the markup is built in client-portal.html by
   renderPrintApproval(). Deliberately quiet rather than alarming — this is a
   last courteous check, not a warning, and a panel that shouts gets dismissed
   without being read. */
.ndl-approval{background:#FDFBF6;border:1px solid #E0D9CC;border-left:4px solid #B7791F;
  border-radius:0 6px 6px 0;padding:20px 24px;margin:0 0 22px}
.ndl-approval.is-approved{border-left-color:#1E6F50;background:#F4F9F6}
.ndl-ap-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:12px}
.ndl-ap-lock,.ndl-ap-tick{font-size:1.1rem;line-height:1.3}
.ndl-ap-tick{color:#1E6F50}
.ndl-ap-head strong{font-family:Georgia,serif;font-size:1.05rem;color:#1B2A41}
.ndl-ap-sub{font-size:.82rem;color:#6B6B6B;margin-top:3px;line-height:1.5}
.ndl-ap-note{font-size:.85rem;color:#4A4A4A;margin:6px 0 0}
.ndl-ap-stale{font-size:.85rem;color:#922630;background:#FBF1F1;border:1px solid #EBD3D3;
  padding:9px 12px;border-radius:4px;margin:0 0 12px}
.ndl-ap-pieces{margin:0 0 14px;padding-left:20px;font-size:.85rem;color:#4A4A4A}
.ndl-ap-pieces li{margin:3px 0}
.ndl-ap-spec{color:#8A8A8A;font-size:.92em}
.ndl-ap-rows{display:grid;gap:9px;margin-bottom:16px}
.ndl-ap-row{display:flex;gap:10px;align-items:flex-start;font-size:.88rem;color:#2B2B2B;cursor:pointer;line-height:1.45}
.ndl-ap-row input{margin-top:3px;flex:0 0 auto;width:16px;height:16px;cursor:pointer}
.ndl-ap-sign{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.ndl-ap-sign input{flex:1 1 220px;min-width:0;padding:10px 12px;font:inherit;font-size:.88rem;
  border:1px solid #D8D0C2;border-radius:4px;background:#fff}
.ndl-ap-btn{padding:10px 20px;font:inherit;font-size:.86rem;font-weight:600;color:#fff;
  background:#1B2A41;border:none;border-radius:4px;cursor:pointer;white-space:nowrap}
.ndl-ap-btn:disabled{background:#C6C1B7;cursor:not-allowed}
.ndl-ap-err{margin-top:10px;font-size:.84rem;color:#922630}
@media(max-width:560px){.ndl-approval{padding:16px 16px}.ndl-ap-btn{width:100%}}


/* ── PHONE: TWO ROWS THAT CANNOT SHRINK, AND SO PUSHED THE PAGE ──
   Added 2026-08-06 (capacity-audit mobile pass). MEASURED at 375px on a real
   logged-in portal, persona at `delivered` so both tabs are reachable:
   Designs scrolled sideways 98px (body 473) and Suite 52px (body 427).

   Each was proven by ELIMINATION, not by eye — hiding the element and watching
   document.body.scrollWidth fall back to exactly 375:
     · Designs → `.item-status-row` (14 of them, right edge 473 = the scroll width)
     · Suite   → `.ndl-piece-hdr-right` / `.ndl-approved-badge` (right edge 427)

   BOTH ARE THE SAME BUG. A flex row whose right-hand block is `flex-shrink:0`
   and whose text is uppercase with .15–.18em letter-spacing, inside a card
   carrying a desktop-luxury inset (`.item-card` is `padding:15px 64px`, i.e.
   128px of it). At 375px the fixed block plus the padding exceed the viewport,
   and because the block cannot shrink the row pushes the whole document.

   ⚠️ AN EARLIER ATTEMPT AT THIS BUG WAS WRONG AND WAS REVERTED. It targeted
   `.bb-version-strip` with `overflow-x:auto`, on a reading that turned out to
   be a stale layout snapshot — re-measured, that strip sits at 39→336, fully
   inside the viewport, and `.bb-slot` already clips. The rule was inert. The
   lesson: find the element whose right edge EQUALS body.scrollWidth, then prove
   it by hiding it; anything else is a guess.

   WHY WRAP RATHER THAN SHRINK THE TEXT. "FILES READY" and "✓ APPROVED" are the
   words telling a client where their order stands; truncating or shrinking them
   on the one screen where they approve work is the wrong trade. Wrapping keeps
   them whole and simply lets them fall below the name. The padding reduction is
   the other half: 64px of inset is a desktop grace note, not a phone one.
   Verified after: all five portal panes report body.scrollWidth === 375, and the
   badge still reads "✓ APPROVED". */
@media(max-width:640px), (max-height:500px) and (orientation:landscape){
  .item-card{ padding:15px 18px !important; flex-wrap:wrap !important; gap:10px 14px !important; }
  .item-name{ flex:1 1 auto; min-width:0; }
  .item-status-row{ flex-shrink:1; min-width:0; }

  .ndl-piece-hdr{ flex-wrap:wrap; padding:16px 18px; }
  .ndl-piece-hdr-right{ flex-shrink:1; min-width:0; flex-wrap:wrap; }
}
