/* ──────────────────────────────────────────────
   THE AMSTERDAMIAN — shared stylesheet
   ────────────────────────────────────────────── */

:root{
  --black:#0a0806;
  --dark:#110e0a;
  --rich:#1a1510;
  --card:#1f1a14;
  --gold:#c9a84c;
  --gold-light:#e8c97a;
  --gold-dim:#8a6f32;
  --cream:#f5edd8;
  --cream-dim:#c4b896;
  --text:#d8cdb8;
  --muted:#7a7060;
  --border:rgba(201,168,76,0.2);
  --border-hi:rgba(201,168,76,0.5);
  --red:#8b2020;
  --green:#2a5a1a;

  /* Semantic accent palette. Status pills, badges, schedule flags,
     checklist note types, etc. all reach for these instead of raw hex
     so a light-mode override (below) flips every accent at once.
     Naming: <hue>     = legible foreground/icon color
             <hue>-bg  = translucent panel background
             <hue>-bd  = subtle border tint */
  --accent-success:    #8fc46a;
  --accent-success-bg: rgba(95,160,90,.12);
  --accent-success-bd: rgba(143,196,106,.30);
  --accent-warn:       #e8c97a;
  --accent-warn-bg:    rgba(132,106,27,.30);
  --accent-warn-bd:    rgba(201,168,76,.40);
  --accent-danger:     #f5b5b5;
  --accent-danger-bg:  rgba(139,32,32,.30);
  --accent-danger-bd:  rgba(200,80,80,.40);
  --accent-info:       #7ab5e8;
  --accent-info-bg:    rgba(122,181,232,.10);
  --accent-info-bd:    rgba(122,181,232,.30);
  /* Typography stacks. Display serif for headlines; sans-serif for UI
     density on dashboards; mono for time/date/label runs. */
  --display: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
  --ui:      'Manrope', system-ui, -apple-system, 'Helvetica Neue', sans-serif;
  --mono:    'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;
}

/* ── Light theme (dashboard-only, opt-in via toggle) ─────────────────
   Overrides the same variable names so the existing rules across the
   stylesheet automatically pick up new values. Names are kept (--black,
   --cream, etc.) for minimal-diff churn — semantically they mean
   "darkest/lightest in the active theme," not literal colors. Gold
   stays untouched as the brand anchor; the dark/cream scale flips.

   Activated by setting `data-theme="light"` on the <html> element. JS
   handles persistence (localStorage) and the inline script in admin.html
   / staff.html applies it before paint to avoid a flash of dark theme. */
html[data-theme="light"] {
  --black:    #e8e6e1;   /* page background — slightly warmer & darker grey */
  --dark:     #f0eeea;   /* secondary surfaces */
  --rich:     #f5f3ee;   /* tertiary surfaces (header/footer strips) */
  --card:     #ffffff;   /* card backgrounds — pure white for crisp contrast */
  --cream:    #1f1a14;   /* primary text — was light, now near-black */
  --cream-dim:#4a4035;   /* secondary text */
  --text:     #1f1a14;
  --muted:    #8a8275;
  --border:   rgba(40, 30, 10, 0.18);
  --border-hi:rgba(138, 111, 50, 0.55);
  --gold-dim: #6e5824;   /* darker gold reads better on light bg */

  /* Semantic accents flipped to darker variants — same purpose, but
     legible against light backgrounds. */
  --accent-success:    #2f6f1f;
  --accent-success-bg: rgba(47,111,31,.13);
  --accent-success-bd: rgba(47,111,31,.40);
  --accent-warn:       #8a6a18;
  --accent-warn-bg:    rgba(138,106,24,.16);
  --accent-warn-bd:    rgba(138,106,24,.45);
  --accent-danger:     #a52a2a;
  --accent-danger-bg:  rgba(165,42,42,.12);
  --accent-danger-bd:  rgba(165,42,42,.45);
  --accent-info:       #1c5e94;
  --accent-info-bg:    rgba(28,94,148,.10);
  --accent-info-bd:    rgba(28,94,148,.40);
}

/* Logo inversion in light mode. The logo PNG is white/cream on a
   transparent background, so on a light page bg it would disappear.
   Using invert(1) + hue-rotate(180deg) preserves the gold tones in
   the brand mark while flipping light pixels to dark. The
   .pwa-install-trigger is excluded — its icon stays as-is. */
/* Logo inversion runs only when the BACKGROUND is light. The logo PNG is
   cream-on-transparent, so it disappears on light bgs without an invert.
   Hawthorne defaults to dark (Slate) — so DON'T invert there. Only when
   Hawthorne flips to light (Linen via the personal toggle) do we invert. */
html[data-theme="light"] .adm-sb-logo img,
html[data-brand-theme="hawthorne"][data-theme="light"] .adm-sb-logo img,
html[data-brand-theme="custom"][data-theme="light"] .adm-sb-logo img {
  filter: invert(1) hue-rotate(180deg);
}

/* Several dashboard surfaces hardcode dark backgrounds rather than
   using the theme variables (legacy from before light mode existed).
   These overrides flip them so light mode renders correctly without
   refactoring every rule. */

/* Page background of the dashboard */
html[data-theme="light"] .adm-wrap,
html[data-brand-theme="hawthorne"] .adm-wrap,
html[data-brand-theme="custom"] .adm-wrap {
  background: var(--black);
}

/* Today panel's hero card — was a dark-to-darker gradient. In light
   mode we use the standard --card surface so it sits naturally above
   the page bg. */
html[data-theme="light"] .today-hero,
html[data-brand-theme="hawthorne"] .today-hero,
html[data-brand-theme="custom"] .today-hero {
  background: var(--card);
}

/* Sidebar surface — the existing rule pulls from --dark in light
   mode, but we want a touch of warmth + a clear edge against the
   slightly different page bg. */
html[data-theme="light"] .adm-sidebar,
html[data-brand-theme="hawthorne"] .adm-sidebar,
html[data-brand-theme="custom"] .adm-sidebar {
  background: var(--card);
  border-right: 1px solid var(--border);
}

/* Modal overlays are pure-black-with-alpha by default. Keep them
   dark in light mode too (overlays are meant to recede the bg) but
   slightly softer. */
html[data-theme="light"] .modal-ov,
html[data-brand-theme="hawthorne"] .modal-ov,
html[data-brand-theme="custom"] .modal-ov {
  background: rgba(20, 20, 20, 0.6);
}

/* (Per-state .todo-status colors now flow from the semantic accent
   palette defined in :root + html[data-theme="light"] above, so no
   hardcoded overrides needed here.) */

/* Message bubbles hardcode dark backgrounds for the bubble surfaces
   so they pop against the dark dashboard. In light mode we replace
   each bubble bg with a soft tint and bump the borders so bubbles
   still feel distinct. The "mine" bubble's gold gradient holds up
   on light, just with darker tones for legibility. */
/* Speakeasy light-mode bubble overrides — force white bg + dark text.
   The :root msg-bubble defaults are dark-brown for Speakeasy's dark look,
   which would be unreadable on Speakeasy's light theme. */
html[data-theme="light"]:not([data-brand-theme="hawthorne"]):not([data-brand-theme="custom"]) .msg-bubble {
  background: #ffffff;
  border-color: rgba(40, 30, 10, 0.16);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}
html[data-theme="light"]:not([data-brand-theme="hawthorne"]):not([data-brand-theme="custom"]) .msg-bubble.mine {
  background: linear-gradient(180deg, rgba(201, 168, 76, 0.22), rgba(201, 168, 76, 0.10));
  border-color: var(--gold);
  color: #1f1a14;
}
html[data-theme="light"]:not([data-brand-theme="hawthorne"]):not([data-brand-theme="custom"]) .msg-bubble.mine,
html[data-theme="light"]:not([data-brand-theme="hawthorne"]):not([data-brand-theme="custom"]) .msg-bubble.mine * {
  color: #1f1a14;
}
html[data-theme="light"]:not([data-brand-theme="hawthorne"]):not([data-brand-theme="custom"]) .msg-bubble.broadcast {
  background: var(--accent-info-bg);
  border-color: var(--accent-info-bd);
}
html[data-theme="light"]:not([data-brand-theme="hawthorne"]):not([data-brand-theme="custom"]) .msg-bubble.broadcast .msg-bubble-body {
  color: var(--accent-info);
}

/* Hawthorne (Slate + Linen) bubble styles — variable-driven so they
   auto-adapt to whichever light/dark mode is active. --card is the
   surface (white in Linen, slate in Slate); --cream is the inverse
   ink color; --gold is the brand accent. The "mine" bubble blends
   the accent INTO the card surface so it reads as a subtle tinted
   variant of the normal bubble rather than a separate component. */
html[data-brand-theme="hawthorne"] .msg-bubble,
html[data-brand-theme="custom"] .msg-bubble {
  background: var(--card);
  border-color: var(--border);
  color: var(--cream);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}
html[data-brand-theme="hawthorne"] .msg-bubble *,
html[data-brand-theme="custom"] .msg-bubble * {
  color: var(--cream);
}
html[data-brand-theme="hawthorne"] .msg-bubble.mine,
html[data-brand-theme="custom"] .msg-bubble.mine {
  background: color-mix(in oklch, var(--gold) 18%, var(--card));
  border-color: var(--gold);
}
html[data-brand-theme="hawthorne"] .msg-bubble.mine,
html[data-brand-theme="hawthorne"] .msg-bubble.mine *,
html[data-brand-theme="custom"] .msg-bubble.mine,
html[data-brand-theme="custom"] .msg-bubble.mine * {
  color: var(--cream);
}
html[data-brand-theme="hawthorne"] .msg-bubble.broadcast,
html[data-brand-theme="custom"] .msg-bubble.broadcast {
  background: var(--accent-info-bg);
  border-color: var(--accent-info-bd);
}
html[data-brand-theme="hawthorne"] .msg-bubble.broadcast .msg-bubble-body,
html[data-brand-theme="custom"] .msg-bubble.broadcast .msg-bubble-body {
  color: var(--accent-info);
}
/* The bubble meta (timestamps, sender name) needs dimmer text — same
   muted variable our other components use. */
html[data-brand-theme="hawthorne"] .msg-bubble-meta,
html[data-brand-theme="custom"] .msg-bubble-meta {
  color: var(--cream-dim);
}
html[data-brand-theme="hawthorne"] .msg-bubble-meta strong,
html[data-brand-theme="custom"] .msg-bubble-meta strong {
  color: var(--gold);
}

/* The email preview pane is intentionally dark — that's how the
   email will render to recipients. Keep it dark in both themes by
   force-applying the dark surface inside the panel. */
html[data-theme="light"] .eb-prev {
  background: #0a0806;
  border-color: rgba(201, 168, 76, 0.4);
}

/* Image cropper stage stays black — it's a media canvas, intentional. */

/* Group avatar pile gradient — keep readable on light cards. */
html[data-theme="light"] .emp-photo-group,
html[data-brand-theme="hawthorne"] .emp-photo-group,
html[data-brand-theme="custom"] .emp-photo-group {
  background: linear-gradient(135deg, #d8d3c7, #b8b1a3);
  color: #1f1a14;
}

*{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  background:var(--black);
  color:var(--text);
  font-family:'Cormorant Garamond',serif;
  font-size:18px;
  line-height:1.7;
  min-height:100vh;
}
.hidden{display:none!important;}
a{color:inherit;text-decoration:none;}

/* ── NAV ──
   Split horizontal layout (BotB-style): all-caps Cinzel links on each side,
   prominent logo in the middle as the brand centerpiece. */
:root{--nav-h:160px;}
nav.site-nav{
  position:fixed;top:0;left:0;right:0;z-index:1000;
  background:rgba(10,8,6,0.97);
  border-bottom:1px solid var(--border);
  padding:1.2rem 2rem;
  display:flex;flex-direction:row;align-items:center;justify-content:center;
  gap:2.4rem;height:auto;
}
.nav-logo{cursor:pointer;display:block;text-align:center;flex:0 0 auto;}
.nav-logo img{
  height:118px;width:auto;
  opacity:.97;transition:opacity .3s;display:block;margin:0 auto;
}
.nav-logo img:hover{opacity:1;}
/* Sentence-case nav with underline-from-left animation on hover —
   BotB-flavored. Larger, less aggressive tracking than the old uppercase
   pattern. The `::after` pseudo-element draws a 1px gold line beneath
   each link that grows in from the left on hover/active. */
.nav-links{
  display:flex;gap:1.5rem;align-items:center;flex-wrap:wrap;
}
.nav-links-left{flex:1;justify-content:flex-end;}
.nav-links-right{flex:1;justify-content:flex-start;}
.nav-links a{
  position:relative;
  font-family:'Cinzel',serif;font-weight:400;
  /* Bumped from .74rem to .96rem (~30% larger) for a more confident,
     less timid header. Still well within range for Cinzel as a display
     face. If the labels start crowding on narrow desktop widths
     (~1280-1366px), we can either:
       • drop letter-spacing from .16em → .12em (subtle de-crowd)
       • OR tighten .nav-links gap from 1.5rem to 1.2rem
     Both kick in only if the user complains. */
  font-size:.96rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--cream);cursor:pointer;transition:color .25s;
  padding:.25rem 0;
}
.nav-links a::after{
  content:'';position:absolute;left:0;bottom:-2px;
  width:100%;height:1px;background:var(--gold);
  transform:scaleX(0);transform-origin:left center;
  transition:transform .35s ease;
}
.nav-links a:hover{color:var(--gold);}
.nav-links a:hover::after,.nav-links a.active::after{transform:scaleX(1);}
.nav-links a.active{color:var(--gold);}

.nav-cta{ /* legacy, no longer rendered in nav — kept for backward compat */
  font-family:'Josefin Sans',sans-serif;font-weight:300;
  font-size:.62rem;letter-spacing:.24em;text-transform:uppercase;
  background:transparent;border:1px solid var(--gold-dim);color:var(--gold);
  padding:.55rem 1.3rem;cursor:pointer;transition:all .3s;
}
.nav-cta:hover{background:var(--gold);color:var(--black);border-color:var(--gold);}

/* Hero CTA — outlined gold button, more visually prominent than the
   tiny .text-link variant. Used on the homepage hero where Reserve a Table
   is the dominant call-to-action. */
.btn-hero{
  display:inline-block;
  font-family:'Josefin Sans',sans-serif;font-weight:300;
  font-size:.85rem;letter-spacing:.42em;text-transform:uppercase;
  color:var(--gold);background:transparent;
  border:1px solid var(--gold);
  padding:1.15rem 2.8rem;cursor:pointer;
  transition:background .3s,color .3s;
}
.btn-hero:hover{background:var(--gold);color:var(--black);}

.nav-toggle{
  display:none;background:none;border:none;color:var(--gold);
  font-size:1.4rem;cursor:pointer;position:absolute;top:50%;right:1.1rem;
  transform:translateY(-50%);
}

@media (max-width:880px){
  :root{--nav-h:108px;}
  nav.site-nav{
    padding:1rem 1.1rem;flex-direction:row;justify-content:center;align-items:center;
    position:fixed;
  }
  .nav-logo img{height:78px;}
  .nav-toggle{display:block;}
  /* Hide the split groups by default on mobile — the logo stands alone. */
  .nav-links-left,.nav-links-right{display:none;}
  /* When the user taps the hamburger, the nav itself becomes a column
     and reveals both link groups stacked beneath the logo. Single gap
     on the parent gives uniform spacing — items in left, the boundary
     between left and right, and items in right all feel identical. */
  nav.site-nav.open{
    flex-direction:column;padding:1rem 1.1rem 1.6rem;gap:1.1rem;
  }
  nav.site-nav.open .nav-links-left,
  nav.site-nav.open .nav-links-right{
    display:flex;flex-direction:column;width:100%;
    align-items:center;gap:1.1rem;padding:0;margin:0;
    flex:0 0 auto;justify-content:flex-start;
  }
  nav.site-nav.open .nav-logo{order:1;margin-bottom:.5rem;}
  nav.site-nav.open .nav-links-left{order:2;}
  nav.site-nav.open .nav-links-right{order:3;}
}

/* ── PAGE WRAPPER ── */
.page{padding-top:var(--nav-h);min-height:100vh;}

/* ── HERO ── */
.hero{position:relative;height:calc(100vh - var(--nav-h));display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;overflow:hidden;}
.hero-bg{position:absolute;inset:0;background-position:center;background-size:cover;filter:brightness(.28);}
.hero-glow{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 65%,rgba(201,168,76,.07) 0%,transparent 60%);}
.hero-content{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;padding:0 1rem;}
.hero-content img{
  width:260px;max-width:80vw;height:auto;
  margin-bottom:1.4rem;
}
.orn{font-family:'Josefin Sans',sans-serif;font-size:.58rem;letter-spacing:.4em;color:var(--gold-dim);text-transform:uppercase;display:flex;align-items:center;gap:1.2rem;margin-bottom:.8rem;}
.orn::before,.orn::after{content:'';display:block;width:44px;height:1px;background:linear-gradient(90deg,transparent,var(--gold-dim));}
.orn::after{transform:scaleX(-1);}
.hero-sub{font-family:'Josefin Sans',sans-serif;font-size:.58rem;letter-spacing:.5em;color:var(--gold);text-transform:uppercase;margin-bottom:1.6rem;}
.hero-tag{font-size:1.05rem;font-style:italic;color:var(--cream-dim);margin-bottom:2.2rem;max-width:370px;}
.hero-btns{display:flex;gap:1.2rem;flex-wrap:wrap;justify-content:center;}

/* ── BUTTONS ── */
.btn-p,.btn-g,.f-submit,.nav-cta{
  font-family:'Josefin Sans',sans-serif;font-weight:300;
  text-transform:uppercase;cursor:pointer;transition:all .3s;
}
.btn-p{
  font-size:.6rem;letter-spacing:.25em;
  background:var(--gold);color:var(--black);border:none;
  padding:.85rem 2rem;
}
.btn-p:hover{background:var(--gold-light);}
.btn-g{
  font-size:.6rem;letter-spacing:.25em;
  background:transparent;color:var(--cream-dim);border:1px solid var(--muted);
  padding:.85rem 2rem;
}
.btn-g:hover{border-color:var(--cream-dim);color:var(--cream);}

.scroll-hint{position:absolute;bottom:1.8rem;z-index:1;font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.28em;color:var(--muted);text-transform:uppercase;display:flex;flex-direction:column;align-items:center;gap:.55rem;}
.scroll-line{width:1px;height:40px;background:linear-gradient(to bottom,var(--gold-dim),transparent);animation:sp 2s infinite;}
@keyframes sp{0%,100%{opacity:.3}50%{opacity:1}}

/* ── PHOTO STRIP / ABOUT STRIP ── */
.photo-strip{display:grid;grid-template-columns:repeat(4,1fr);height:260px;}
.ps-item{overflow:hidden;}
.ps-item img{width:100%;height:100%;object-fit:cover;filter:brightness(.7);transition:transform .5s,filter .4s;}
.ps-item:hover img{transform:scale(1.05);filter:brightness(.9);}

.about-strip{background:var(--rich);border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:3.5rem 3rem;display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;}
.about-col{text-align:center;}
.about-col .num{font-family:'Playfair Display',serif;font-size:2.8rem;font-style:italic;color:var(--gold);display:block;margin-bottom:.3rem;}
.about-col p{font-size:.87rem;color:var(--cream-dim);max-width:200px;margin:0 auto;}

@media (max-width:760px){
  .photo-strip{grid-template-columns:repeat(2,1fr);height:auto;}
  .ps-item{height:180px;}
  .about-strip{grid-template-columns:1fr;padding:2.4rem 1.5rem;gap:1.5rem;}
}

/* ── SECTIONS ── */
.section{padding:4.5rem 3rem;max-width:1100px;margin:0 auto;}
@media (max-width:760px){.section{padding:3rem 1.3rem;}}

.sec-label{font-family:'Josefin Sans',sans-serif;font-size:.56rem;letter-spacing:.4em;text-transform:uppercase;color:var(--gold);margin-bottom:.65rem;}
.sec-title{font-family:'Playfair Display',serif;font-size:clamp(1.8rem,3.5vw,3rem);font-weight:400;color:var(--cream);line-height:1.15;margin-bottom:1rem;}
.divider{width:48px;height:1px;background:var(--gold-dim);margin:1rem 0;}
.divider.c{margin:1rem auto;}

/* ── PHOTO BREAK ── */
.photo-break{position:relative;height:400px;overflow:hidden;}
.photo-break img{width:100%;height:100%;object-fit:cover;filter:brightness(.38);}
.pb-text{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem;}
.pb-text h2{font-family:'Playfair Display',serif;font-size:clamp(1.8rem,4vw,3.2rem);font-style:italic;color:var(--cream);margin-bottom:.8rem;}
.pb-text p{font-size:.95rem;font-style:italic;color:var(--cream-dim);max-width:420px;}

/* ── GALLERY ── */
.gallery{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.6rem;margin:1.5rem 0;}
.gallery img{width:100%;height:250px;object-fit:cover;filter:brightness(.78);transition:filter .3s;}
.gallery img:hover{filter:brightness(1);}
.gallery img.wide{grid-column:span 2;}
@media (max-width:760px){.gallery{grid-template-columns:1fr 1fr;}.gallery img{height:170px;}.gallery img.wide{grid-column:span 2;}}

/* ── PAGE HEADER (sub-pages) ── */
.page-hero{position:relative;height:240px;overflow:hidden;}
.page-hero img{width:100%;height:100%;object-fit:cover;filter:brightness(.32);}
.page-hero-text{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 1rem;}
.page-hero-text h1{font-family:'Playfair Display',serif;font-size:clamp(2rem,5vw,2.8rem);font-style:italic;color:var(--cream);font-weight:400;}

/* ── MENU ── */
.menu-tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid var(--border);margin-bottom:2.5rem;}
.menu-tab{font-family:'Josefin Sans',sans-serif;font-size:.58rem;letter-spacing:.18em;text-transform:uppercase;background:none;border:none;color:var(--muted);padding:.65rem 1.4rem;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .3s;}
.menu-tab.active{color:var(--gold);border-bottom-color:var(--gold);}
.menu-tab:hover{color:var(--cream-dim);}
.menu-section-hidden{display:none;}

.menu-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  column-gap:2.5rem;
  position:relative;
}
.menu-grid::before{
  content:'';position:absolute;
  left:50%;top:0;bottom:0;
  width:1px;background:rgba(201,168,76,.12);
  pointer-events:none;
}
@media (max-width:680px){
  .menu-grid{grid-template-columns:1fr;column-gap:0;}
  .menu-grid::before{display:none;}
}

.mi{
  padding:1.05rem 0;
  border-bottom:1px solid rgba(201,168,76,.1);
  display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;
}
.mi > :first-child{flex:1;min-width:0;}
.mi-body{min-width:0;flex:1;}
.mi-name{font-family:'Playfair Display',serif;font-size:.98rem;color:var(--cream);line-height:1.25;}
.mi-desc{font-size:.82rem;color:var(--muted);font-style:italic;margin-top:.18rem;line-height:1.45;}
.mi-price{
  font-family:'Josefin Sans',sans-serif;font-size:.82rem;
  color:var(--gold);white-space:nowrap;
  padding-top:.22rem;flex-shrink:0;
}

/* Generic two-column section that collapses on mobile (used for wine/beer split) */
.menu-2col{
  display:grid;
  grid-template-columns:1fr 1fr;
  column-gap:2.5rem;
  position:relative;
}
.menu-2col::before{
  content:'';position:absolute;
  left:50%;top:0;bottom:0;
  width:1px;background:rgba(201,168,76,.12);
  pointer-events:none;
}
@media (max-width:680px){
  .menu-2col{grid-template-columns:1fr;column-gap:0;row-gap:1.5rem;}
  .menu-2col::before{display:none;}
}
.menu-subhead{
  text-align:center;padding:.4rem 0 1rem;
}
.menu-subhead .icon{font-size:1.3rem;margin-bottom:.3rem;}
.menu-subhead .lbl{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;
  letter-spacing:.25em;text-transform:uppercase;color:var(--gold);
}

/* Feature card (image + text) that collapses on mobile */
.feature-split{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:1.5rem;
  align-items:center;
  margin-top:2.2rem;
}
.feature-split img{
  width:100%;height:300px;object-fit:cover;
  filter:brightness(.85);display:block;
}
@media (max-width:680px){
  .feature-split{grid-template-columns:1fr;gap:1.1rem;}
  .feature-split img{height:220px;}
}

/* HAPPY HOUR */
.hh-wrap{background:var(--rich);border:1px solid var(--border-hi);padding:2.5rem;margin-bottom:3rem;position:relative;overflow:hidden;}
.hh-wrap::before{content:'HAPPY HOUR';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-family:'Playfair Display',serif;font-size:7rem;font-style:italic;color:rgba(201,168,76,.04);white-space:nowrap;pointer-events:none;letter-spacing:.05em;}
.hh-top{display:flex;align-items:center;gap:1.5rem;margin-bottom:1.5rem;flex-wrap:wrap;}
.hh-badge{font-family:'Josefin Sans',sans-serif;font-size:.52rem;letter-spacing:.2em;text-transform:uppercase;background:var(--gold);color:var(--black);padding:.28rem .75rem;}
.hh-title{font-family:'Playfair Display',serif;font-size:1.5rem;font-style:italic;color:var(--cream);}
.hh-time{font-family:'Josefin Sans',sans-serif;font-size:.56rem;letter-spacing:.2em;color:var(--gold-dim);text-transform:uppercase;margin-top:.1rem;}
.hh-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.2rem;}
@media (max-width:760px){.hh-grid{grid-template-columns:1fr;}.hh-wrap{padding:1.6rem;}.hh-wrap::before{font-size:4rem;}}
.hh-card{background:var(--card);border:1px solid var(--border);padding:1.1rem 1.4rem;}
.hh-label{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-dim);margin-bottom:.5rem;}
.hh-item{font-size:.87rem;color:var(--cream-dim);padding:.22rem 0;border-bottom:1px solid rgba(201,168,76,.07);display:flex;justify-content:space-between;}
.hh-item:last-child{border-bottom:none;}
.hh-item span{color:var(--gold);font-family:'Josefin Sans',sans-serif;font-size:.78rem;}

/* ── EVENTS LISTING ── */
.events-grid{display:grid;gap:1.1rem;}
.ev-card-link{text-decoration:none;color:inherit;display:block;}
.ev-card-v2{
  background:var(--card);border:1px solid var(--border);
  padding:1.4rem 1.6rem;
  display:grid;grid-template-columns:minmax(0,260px) 1fr;
  gap:1.6rem;align-items:center;
  transition:border-color .3s;
}
.ev-card-v2:hover{border-color:var(--border-hi);}
.ev-flyer-col{display:flex;align-items:center;justify-content:center;background:var(--rich);border:1px solid var(--border);padding:.8rem;}
.ev-flyer-img{
  width:100%;max-width:260px;height:auto;
  display:block;object-fit:contain;
}
.ev-date-block{
  width:100%;text-align:center;padding:1.6rem 0;
}
.ev-info-col{display:flex;flex-direction:column;min-width:0;}
.ev-tag-line{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.25em;text-transform:uppercase;color:var(--gold);margin-bottom:.45rem;}
.ev-card-title{font-family:'Playfair Display',serif;font-style:italic;font-weight:400;font-size:1.4rem;color:var(--cream);line-height:1.2;margin-bottom:.4rem;}
.ev-when-row{font-family:'Cormorant Garamond',serif;font-size:.92rem;color:var(--cream-dim);margin-bottom:.3rem;}
.ev-detail-row{font-size:.85rem;color:var(--muted);font-style:italic;margin-bottom:.85rem;line-height:1.55;}
.ev-month{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);}
.ev-day{font-family:'Playfair Display',serif;font-size:2.4rem;color:var(--cream);line-height:1;margin-top:.2rem;}

.ev-cta-row{
  display:flex;align-items:center;flex-wrap:wrap;gap:.8rem;
  margin-top:.6rem;padding-top:.7rem;
  border-top:1px solid rgba(201,168,76,.1);
}
.ev-price{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:1.25rem;}
.ev-price-unit{font-family:'Cormorant Garamond',serif;font-style:normal;font-size:.75rem;color:var(--cream-dim);margin-left:.2rem;}
.ev-stock-warn{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:#e8c97a;
  border:1px solid rgba(232,201,122,.4);background:rgba(232,201,122,.1);
  padding:.18rem .45rem;
}
.ev-buy-btn{
  margin-left:auto;
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;
  text-transform:uppercase;background:var(--gold);color:var(--black);
  padding:.55rem 1.1rem;transition:background .2s;
}
.ev-card-link:hover .ev-buy-btn{background:var(--gold-light);}
.ev-soldout-pill{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;
  text-transform:uppercase;color:#f5b5b5;
  background:rgba(139,32,32,.18);border:1px solid rgba(224,92,92,.4);
  padding:.45rem 1rem;
}
.ev-rsvp-note{font-size:.78rem;color:var(--muted);font-style:italic;}

@media (max-width:680px){
  .ev-card-v2{grid-template-columns:1fr;padding:1.2rem 1.3rem;gap:1rem;}
  .ev-flyer-col{padding:.6rem;}
  .ev-flyer-img{max-width:340px;margin:0 auto;}
  .ev-date-block{padding:.8rem 0;}
  .ev-buy-btn{margin-left:0;width:100%;text-align:center;}
}

/* ── PRIVATE ── */
.priv-hero{position:relative;height:360px;overflow:hidden;}
.priv-hero img{width:100%;height:100%;object-fit:cover;filter:brightness(.4);}
.priv-hero-text{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2.5rem 1.5rem;}
.feat-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem;margin-bottom:2.5rem;}
@media (max-width:680px){.feat-grid{grid-template-columns:1fr;}}
.feat-card{background:var(--card);border:1px solid var(--border);padding:1.6rem;}
.feat-title{font-family:'Playfair Display',serif;font-size:1rem;color:var(--cream);margin-bottom:.35rem;}
.feat-desc{font-size:.86rem;color:var(--muted);}

/* ── FORMS ── */
.res-wrap{max-width:600px;margin:0 auto;}
.f-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem;}
@media (max-width:580px){.f-row{grid-template-columns:1fr;}}
.fg{display:flex;flex-direction:column;gap:.32rem;margin-bottom:.85rem;}
.fg label{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-dim);}
.fg input:not([type=checkbox]):not([type=radio]),
.fg select,.fg textarea{
  background:var(--card);border:1px solid var(--border);color:var(--cream);
  padding:.68rem .88rem;font-family:'Cormorant Garamond',serif;font-size:1rem;
  outline:none;transition:border-color .3s;appearance:none;
}
.fg input:not([type=checkbox]):not([type=radio]):focus,
.fg select:focus,.fg textarea:focus{border-color:var(--gold-dim);}
.fg select option{background:var(--dark);}
.fg textarea{resize:vertical;min-height:85px;}
.fg input[type=checkbox],.fg input[type=radio]{accent-color:var(--gold);cursor:pointer;}

/* Structured "Hours of Operation" row in Site Settings.
   Layout: a Closed checkbox + open time + dash + close time, all on
   one row. Time inputs collapse to readable widths; on narrow screens
   the controls wrap and the dash hides for clarity. */
.fg.hours-row{margin-bottom:.6rem;}
.hours-row-controls{
  display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;
}
.hours-row-controls input[type=time]{
  background:var(--card);border:1px solid var(--border);color:var(--cream);
  padding:.5rem .65rem;font-family:'Cormorant Garamond',serif;font-size:.95rem;
  outline:none;transition:border-color .2s;appearance:none;
  min-width:7rem;
  color-scheme:dark;
}
.hours-row-controls input[type=time]:focus{border-color:var(--gold-dim);}
/* When the day is marked Closed, mute and disable the time fields so
   the row visually communicates "no hours apply here." */
.hours-row-controls input[type=time]:disabled{
  opacity:.4;cursor:not-allowed;
}
.hours-closed{
  display:inline-flex;align-items:center;gap:.4rem;cursor:pointer;
  font-family:'Cormorant Garamond',serif;font-size:.92rem;color:var(--cream-dim);
  letter-spacing:0;text-transform:none;
  /* Override .fg label which would force this into Josefin caps. */
}
.hours-closed input[type=checkbox]{margin:0;}
.hours-dash{color:var(--gold-dim);font-size:1.1rem;line-height:1;padding:0 .15rem;}
@media (max-width: 520px){
  .hours-dash{display:none;}
  .hours-row-controls input[type=time]{min-width:0;flex:1;}
}

/* Toggle row pattern (used by Ticketed event toggle) */
.toggle-row{
  display:flex;align-items:center;gap:.8rem;cursor:pointer;
  padding:.4rem 0;
  font-family:'Cormorant Garamond',serif;font-size:.98rem;color:var(--cream);
  text-transform:none;letter-spacing:0;
}
.toggle-row input[type=checkbox]{
  width:18px;height:18px;flex-shrink:0;
  accent-color:var(--gold);cursor:pointer;
  appearance:auto;-webkit-appearance:checkbox;
  margin:0;
}
.toggle-row .toggle-title{
  font-family:'Playfair Display',serif;font-style:italic;
}
.toggle-row .toggle-hint{
  color:var(--muted);font-size:.85rem;font-style:normal;
  font-family:'Cormorant Garamond',serif;
}
.f-submit{
  width:100%;font-size:.62rem;letter-spacing:.3em;
  background:var(--gold);color:var(--black);border:none;
  padding:1rem;margin-top:.3rem;
}
.f-submit:hover{background:var(--gold-light);}
.ok-msg{text-align:center;padding:2.2rem;background:var(--card);border:1px solid var(--border);}
.ok-msg .ck{font-size:1.6rem;color:var(--gold);margin-bottom:.7rem;}
.ok-msg h3{font-family:'Playfair Display',serif;font-size:1.35rem;color:var(--cream);margin-bottom:.35rem;}

/* ── CONTACT ── */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:2.5rem;align-items:start;}
@media (max-width:780px){.contact-grid{grid-template-columns:1fr;gap:2rem;}}
.info-card{background:var(--card);border:1px solid var(--border);padding:1.8rem 2rem;}
.info-block{padding:.9rem 0;border-bottom:1px solid rgba(201,168,76,.1);}
.info-block:last-child{border-bottom:none;}
.info-lbl{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-dim);margin-bottom:.35rem;}
.info-val{color:var(--cream);font-size:.97rem;}
.info-val a:hover{color:var(--gold);}
.map-wrap{aspect-ratio:4/3;border:1px solid var(--border);overflow:hidden;background:var(--card);position:relative;}
.map-wrap iframe{width:100%;height:100%;border:0;filter:invert(.92) hue-rotate(180deg) brightness(.9);}
/* Leaflet container fills the wrapper. The dark CartoDB tiles already
   match our brand, so no filter needed (unlike the legacy iframe). */
.map-wrap .leaflet-container{width:100%;height:100%;background:var(--rich);font-family:'Cormorant Garamond',serif;}
/* Tame Leaflet's default popup chrome to feel a touch more bar-elegant. */
.leaflet-popup-content-wrapper{border-radius:2px;background:var(--cream);box-shadow:0 6px 28px rgba(0,0,0,.45);}
.leaflet-popup-content{margin:.85rem 1rem;line-height:1.5;}
.leaflet-popup-tip{background:var(--cream);}
.leaflet-control-attribution{background:rgba(10,8,6,.7)!important;color:var(--cream-dim)!important;font-size:.62rem!important;}
.leaflet-control-attribution a{color:var(--gold)!important;}

/* ── CAREERS ── */
.careers-intro{max-width:680px;}
.role-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.1rem;margin-bottom:2.5rem;}
@media (max-width:680px){.role-grid{grid-template-columns:1fr;}}
.role-card{background:var(--card);border:1px solid var(--border);padding:1.6rem 1.8rem;cursor:pointer;transition:border-color .3s;}
.role-card:hover,.role-card.selected{border-color:var(--gold-dim);}
.role-tag{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:.4rem;}
.role-title{font-family:'Playfair Display',serif;font-size:1.18rem;color:var(--cream);margin-bottom:.35rem;}
.role-meta{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;color:var(--muted);text-transform:uppercase;margin-bottom:.7rem;}
.role-desc{font-size:.86rem;color:var(--cream-dim);}

/* ── FOOTER ── */
footer.site-footer{background:var(--rich);border-top:1px solid var(--border);padding:2.5rem;text-align:center;}
footer.site-footer img{height:40px;width:auto;opacity:.55;margin-bottom:.55rem;}
.f-addr{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;color:var(--muted);text-transform:uppercase;line-height:2;}
.f-links{display:flex;gap:1.6rem;justify-content:center;margin-top:1.3rem;flex-wrap:wrap;}
.f-links a{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);cursor:pointer;transition:color .3s;}
.f-links a:hover{color:var(--gold);}

/* ── LOGIN ── */
.login-keep{
  display:flex;align-items:center;gap:.55rem;cursor:pointer;
  margin:0 0 1rem;
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cream-dim);user-select:none;
}
.login-keep input[type=checkbox]{
  position:absolute;opacity:0;width:0;height:0;pointer-events:none;
}
.login-keep .login-keep-mark{
  width:18px;height:18px;border:1px solid var(--gold-dim);
  display:inline-flex;align-items:center;justify-content:center;
  background:transparent;flex-shrink:0;transition:all .15s;
  position:relative;
}
.login-keep input[type=checkbox]:checked + .login-keep-mark{
  background:var(--gold);border-color:var(--gold);
}
.login-keep input[type=checkbox]:checked + .login-keep-mark::after{
  content:'';position:absolute;
  width:5px;height:9px;border:solid var(--black);
  border-width:0 2px 2px 0;transform:rotate(45deg) translate(-1px,-1px);
}
.login-keep input[type=checkbox]:focus-visible + .login-keep-mark{
  box-shadow:0 0 0 2px rgba(201,168,76,.4);
}
.login-keep:hover .login-keep-mark{border-color:var(--gold);}
.login-keep .login-keep-text{line-height:1.2;}

.login-pg{min-height:100vh;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;padding:1.5rem;}
.login-bg{position:absolute;inset:0;background:url('../images/DSC01817.jpg') center/cover;filter:brightness(.18);}
.login-box{background:rgba(31,26,20,.97);border:1px solid var(--border);padding:2.6rem;width:380px;max-width:100%;text-align:center;position:relative;z-index:1;}
.login-box img{width:170px;height:auto;margin-bottom:1.1rem;}
.login-sub{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.28em;color:var(--muted);text-transform:uppercase;margin-bottom:1.6rem;}
.role-toggle{display:flex;border:1px solid var(--border);margin-bottom:1.4rem;}
.role-toggle button{
  flex:1;background:none;border:none;color:var(--muted);
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;
  text-transform:uppercase;padding:.65rem;cursor:pointer;transition:all .3s;
}
.role-toggle button.active{background:var(--gold);color:var(--black);}
.login-hint{font-size:.7rem;color:var(--muted);margin-top:.85rem;line-height:1.5;}
.login-back{display:inline-block;margin-top:1rem;font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);cursor:pointer;}
.login-back:hover{color:var(--gold);}

/* PWA install trigger on the login page — only visible on devices
   that can install AND haven't already done so. Hidden by JS otherwise. */
.pwa-install-trigger{
  display:flex;align-items:center;gap:.7rem;width:100%;
  margin-top:1.2rem;padding:.85rem 1rem;
  background:linear-gradient(135deg,rgba(201,168,76,.14),rgba(201,168,76,.04));
  border:1px solid rgba(201,168,76,.45);
  color:var(--cream);
  cursor:pointer;font-family:'Cormorant Garamond',serif;text-align:left;
  transition:background .15s ease,border-color .15s ease;
}
.pwa-install-trigger:hover{
  background:linear-gradient(135deg,rgba(201,168,76,.22),rgba(201,168,76,.08));
  border-color:var(--gold);
}
.pwa-install-icon{font-size:1.5rem;line-height:1;}
.pwa-install-copy{display:flex;flex-direction:column;gap:.15rem;flex:1;}
.pwa-install-title{
  font-family:'Josefin Sans',sans-serif;
  font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold);
}
.pwa-install-sub{
  font-size:.85rem;color:var(--cream-dim);font-style:italic;line-height:1.4;
}

/* "Running on Hawthorne" credit — small platform-attribution stamp
   shown in the admin sidebar footer + the login page. Copper is
   Hawthorne's signature brand color (#c08552 -> --hawthorne) so the
   mark reads as a distinct platform brand instead of fading into
   the Amsterdamian gold. Public-site footer can reuse this class
   once Hawthorne is ready for outward-facing attribution. */
.hawthorne-credit{
  font-family:'Josefin Sans',sans-serif;
  font-size:.55rem;letter-spacing:.22em;text-transform:uppercase;
  color:rgba(232,224,200,.32);
  text-align:center;
  line-height:1.4;
  margin-top:1.1rem;
}
.hawthorne-credit a{
  color:#c08552;
  text-decoration:none;
  transition:color .15s ease;
}
.hawthorne-credit a:hover{
  color:#d99e6c;
}
.hawthorne-mark{
  font-family:'Playfair Display',serif;
  font-weight:500;
  letter-spacing:.04em;
  text-transform:none;
  font-size:.78rem;
  vertical-align:-1px;
}

/* Image variant of the Hawthorne mark — hot-linked from gethawthorne.io
   so we have a single canonical logo across all bars hosted on the
   platform. The PNG ships with a dark wordmark on white, but we render
   everywhere on dark surfaces here, so:
     - filter: invert(1)   flips the wordmark to near-white and the white bg to black
     - brightness(1.05)    nudges the wordmark all the way to clean white
     - mix-blend-mode:screen makes pure-black (the inverted bg) transparent against
       any dark background, so the logo reads as floating type instead of a chip.
   Height-only sizing keeps the aspect ratio intact at any width. */
.hawthorne-mark-img{
  display:inline-block;
  /* Default sized for sidebar/login placements — small surfaces. The
     public footer (.site-footer) overrides this with a smaller value
     so the logo doesn't dominate the wider context. */
  height:20px;
  width:auto;
  vertical-align:middle;
  margin-left:.5rem;
  filter:invert(1) brightness(1.05);
  mix-blend-mode:screen;
  opacity:.85;
  transition:opacity .15s ease;
}
.hawthorne-credit a:hover .hawthorne-mark-img{
  opacity:1;
}
/* Public-footer override — wider context = needs a smaller mark so it
   doesn't out-shout the Amsterdamian logo above it. Also drop the
   left margin since the footer credit centers the image on its own
   line (no inline "Running on" label sitting next to it visually). */
.site-footer .hawthorne-mark-img{
  height:19px;
  margin-left:0;
}
/* Stack "RUNNING ON" above the logo (instead of trying to align them
   inline). The all-caps small-tracked label and the wordmark have
   different visual baselines that never line up cleanly side-by-side
   — putting the logo on its own line below the label is both prettier
   and more readable. */
.site-footer .hawthorne-credit a{
  display:block;
  margin-top:.6rem;
}
/* Login-card override — logo-only treatment. 20px keeps it discreet
   relative to the Amsterdamian wordmark up top. Have to explicitly
   re-assert width:auto + margin:0 here because the legacy
   `.login-box img{ width:170px; ... }` rule above was written for the
   Amsterdamian wordmark and would otherwise stretch our logo flat. */
.login-box .hawthorne-mark-img{
  height:20px;
  width:auto;
  margin:0;
}
.login-box .hawthorne-credit{
  margin-top:1.4rem;
}

/* ── ADMIN / STAFF DASHBOARD ── */
:root{
  --adm-sb-w: 240px;
}
.adm-wrap{background:#0d0b09;min-height:100vh;padding-top:0;}

/* Sidebar (desktop) */
.adm-sidebar{
  position:fixed;top:0;left:0;height:100vh;width:var(--adm-sb-w);
  background:var(--dark);border-right:1px solid var(--border);
  display:flex;flex-direction:column;
  z-index:90;overflow-y:auto;overflow-x:hidden;
  transition:transform .25s ease;
}
.adm-sb-head{
  padding:1.5rem 1.2rem 1.1rem;border-bottom:1px solid var(--border);
  display:flex;flex-direction:column;align-items:center;text-align:center;
  position:relative;
}
.adm-sb-logo{display:block;}
.adm-sb-logo img{height:64px;display:block;}
.adm-sb-title{
  font-family:'Playfair Display',serif;font-size:1rem;font-style:italic;
  color:var(--gold);margin-top:.7rem;
}
.adm-sb-userline{
  display:flex;align-items:center;gap:.45rem;margin-top:.55rem;flex-wrap:wrap;justify-content:center;
}
.adm-sb-userline .user-greeting{
  font-family:var(--chat-font);color:var(--cream);font-size:.92rem;
  text-decoration:none;cursor:pointer;
}
.adm-sb-userline .user-greeting:hover{color:var(--gold);}

/* Bell button */
.adm-bell{
  position:absolute;top:1.2rem;right:1rem;
  width:36px;height:36px;background:transparent;
  border:1px solid var(--border);color:var(--gold);cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:all .15s;
}
.adm-bell:hover{border-color:var(--gold);background:rgba(201,168,76,.08);}

/* Theme controls now live in Site Settings → Display Preferences
   instead of the sidebar header (less visually intrusive). The
   data-theme-toggle handler in dashboard-shared.js still binds to
   any element with that attribute, so any button placement works. */
.theme-segmented{
  display:inline-flex;border:1px solid var(--border);overflow:hidden;
  background:var(--card);
  /* Without align-self the segmented control inherits `align-items:
     stretch` from its parent `.fg` flex column and the inline-flex
     ends up stretched to the column's full width — leaving a visible
     empty strip after the last button. align-self:flex-start makes
     it size to its actual content. */
  align-self:flex-start;
  width:max-content;
}
.theme-segmented button{
  background:transparent;border:none;cursor:pointer;
  padding:.55rem 1.1rem;
  font-family:'Josefin Sans',sans-serif;font-size:.62rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--cream-dim);
  transition:background .15s,color .15s;
}
.theme-segmented button:not(:last-child){border-right:1px solid var(--border);}
.theme-segmented button:hover{color:var(--gold);}
.theme-segmented button.active{background:var(--gold);color:var(--black);}
.theme-segmented .theme-seg-icon{
  display:inline-block;vertical-align:middle;margin-right:.4rem;
}

/* ── Pull-to-refresh indicator (mobile only) ──────────────────────────
   A small gold circle with a refresh icon. Sits offscreen above the top
   of the viewport by default; transform translates it down as the user
   pulls. Wired in dashboard-shared.js. */
#ptr-indicator{
  position:fixed;
  top:-44px;
  left:50%;
  transform:translate(-50%, 0);
  width:38px;height:38px;border-radius:50%;
  background:var(--card);
  border:1px solid var(--gold);
  color:var(--gold);
  display:flex;align-items:center;justify-content:center;
  z-index:9999;
  box-shadow:0 4px 14px rgba(0,0,0,.35);
  pointer-events:none;
  opacity:.85;
  transition:opacity .2s ease, transform .25s cubic-bezier(.2,.8,.2,1);
}
/* While actively dragging we want the transform to follow the finger
   without easing — JS sets transform inline; we override the transition
   only when committing or springing back. */
#ptr-indicator.ptr-ready{opacity:1;}
#ptr-indicator.ptr-committing svg{animation:ptr-spin .8s linear infinite;}
@keyframes ptr-spin{
  to{transform:rotate(360deg);}
}
.adm-bell-icon{display:block;}
.adm-bell-count{
  position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;
  background:var(--red);color:#fff;
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;font-weight:700;
  border-radius:9px;display:flex;align-items:center;justify-content:center;
  line-height:1;letter-spacing:.02em;
}

/* Bell dropdown */
.adm-bell-dropdown{
  position:absolute;top:calc(100% + .35rem);right:.6rem;left:.6rem;
  max-height:60vh;overflow-y:auto;
  background:var(--card);border:1px solid var(--gold-dim);
  z-index:120;box-shadow:0 14px 36px rgba(0,0,0,.55);
  display:flex;flex-direction:column;
}
.adm-bell-dropdown-head{
  padding:.7rem .85rem;border-bottom:1px solid var(--border);
  display:flex;justify-content:space-between;align-items:center;
}
.adm-bell-dropdown-title{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);
}
.adm-bell-dropdown-clear{
  background:transparent;border:none;color:var(--muted);cursor:pointer;
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;text-transform:uppercase;
}
.adm-bell-dropdown-clear:hover{color:var(--gold);}
.adm-bell-empty{padding:1.2rem;text-align:center;color:var(--muted);font-style:italic;font-size:.85rem;}
.adm-bell-item{
  position:relative;
  display:flex;gap:.6rem;align-items:flex-start;padding:.65rem .85rem;
  border-bottom:1px solid rgba(201,168,76,.08);cursor:pointer;
  border-left:3px solid transparent;
  transition:background .15s;
}
.adm-bell-item:last-child{border-bottom:none;}
.adm-bell-item:hover{background:rgba(201,168,76,.08);}

/* UNREAD ("new") — strong gold accent, lit text, gold dot, NEW pill */
.adm-bell-item.unread{
  background:rgba(201,168,76,.07);
  border-left-color:var(--gold);
}
.adm-bell-item.unread .adm-bell-item-dot{
  background:var(--gold);box-shadow:0 0 0 3px rgba(201,168,76,.18);
}
.adm-bell-item.unread .adm-bell-item-title{
  color:var(--cream);font-weight:500;
}
.adm-bell-item.unread .adm-bell-item-meta{color:var(--gold);}

/* READ ("seen") — demoted, neutral, hollow dot */
.adm-bell-item.read{opacity:.78;}
.adm-bell-item.read .adm-bell-item-dot{background:transparent;border:1px solid var(--border);}
.adm-bell-item.read .adm-bell-item-title{color:var(--cream-dim);font-style:normal;}

.adm-bell-item-dot{
  width:8px;height:8px;border-radius:50%;background:var(--gold);
  margin-top:.45rem;flex-shrink:0;transition:all .15s;
}
.adm-bell-item-body{flex:1;min-width:0;}
.adm-bell-item-title-row{
  display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;
}
.adm-bell-item-title{
  font-family:'Cormorant Garamond',serif;font-size:1rem;color:var(--cream);
  font-style:italic;line-height:1.3;
}
.adm-bell-item-pill{
  font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.18em;
  text-transform:uppercase;font-weight:700;
  background:var(--gold);color:var(--black);
  padding:.12rem .35rem;border-radius:2px;line-height:1;
}
.adm-bell-item-kind{
  font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);
  border:1px solid var(--gold-dim);
  padding:.12rem .35rem;line-height:1;
}
.adm-bell-item.read .adm-bell-item-kind{color:var(--muted);border-color:var(--border);}
.adm-bell-item-text{
  color:var(--cream-dim);font-size:.85rem;margin-top:.22rem;line-height:1.35;
  white-space:normal;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.adm-bell-item-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);margin-top:.3rem;
}
.adm-sb-nav{flex:1;padding:.85rem 0;display:flex;flex-direction:column;gap:.4rem;}
.adm-sb-group{display:flex;flex-direction:column;}
.adm-sb-group-label{
  font-family:'Josefin Sans',sans-serif;font-size:.48rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold-dim);
  padding:.55rem 1.2rem .25rem;
}
.adm-sidebar .adm-ntab{
  font-family:'Josefin Sans',sans-serif;font-size:.62rem;letter-spacing:.16em;
  text-transform:uppercase;background:none;border:none;
  color:var(--cream-dim);padding:.62rem 1.2rem;
  cursor:pointer;text-align:left;width:100%;display:flex;align-items:center;gap:.5rem;
  border-left:3px solid transparent;transition:all .15s ease;
  text-decoration:none;line-height:1.1;
}
.adm-sidebar .adm-ntab:hover:not(.active){
  background:rgba(201,168,76,.05);color:var(--gold);
}
.adm-sidebar .adm-ntab.active{
  background:rgba(201,168,76,.1);color:var(--gold);
  border-left-color:var(--gold);
}
.adm-sidebar .adm-ntab .ntab-badge{
  background:var(--gold);color:var(--black);
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;font-weight:700;
  padding:.1rem .4rem;border-radius:8px;letter-spacing:.05em;line-height:1;
}
/* Sidebar nav icons (injected by dashboard-shared.js → injectAdminNavIcons).
   Inherit currentColor from the button so they match the active/hover
   gold tint. The .nav-icon wrapper is flex-aligned with the label. */
.adm-sidebar .adm-ntab .nav-icon{
  width:14px;height:14px;
  color:var(--cream-dim);
  transition:color .15s ease,opacity .15s ease;
}
.adm-sidebar .adm-ntab:hover:not(.active) .nav-icon,
.adm-sidebar .adm-ntab.active .nav-icon{
  color:var(--gold);opacity:1;
}

/* Quick-search bar at the top of the admin body. Searches across
   reservations, staff, events, reviews — dropdown shows grouped
   results. Click a result to jump to the relevant panel. */
.adm-topsearch{
  position:sticky;top:0;z-index:60;
  /* Solid background — sticky positioning was already correct, but the
     previous `transparent` let panel content scroll visibly through the
     bar so it read as if the search itself was moving with the page.
     Match the .adm-wrap fill + add a subtle bottom edge so content
     scrolling under it gets a clean cut-off line. */
  background:#0d0b09;
  border-bottom:1px solid var(--border);
  box-shadow:0 4px 10px rgba(0,0,0,.35);
  padding:.7rem 1rem .9rem;
  margin:0 -1rem .6rem;   /* bleed into the .adm-body padding for full-width cover */
}
/* Light theme: match the panel background instead so the sticky bar
   doesn't look like a dark slab in the middle of a cream page. */
:root[data-theme="light"] .adm-topsearch{
  background:var(--bg, #f6efe2);
}
.adm-topsearch-wrap{
  position:relative;max-width:520px;
}
.adm-topsearch-icon{
  position:absolute;left:.85rem;top:50%;transform:translateY(-50%);
  color:var(--muted);pointer-events:none;
}
.adm-topsearch-input{
  width:100%;background:var(--card);
  border:1px solid var(--border);
  color:var(--cream);
  padding:.55rem .85rem .55rem 2.2rem;
  font-family:inherit;font-size:.88rem;
  border-radius:3px;outline:none;
  transition:border-color .15s ease,background .15s ease;
}
.adm-topsearch-input::placeholder{color:var(--muted);font-style:italic;}
.adm-topsearch-input:focus{
  border-color:var(--gold-dim);
  background:var(--rich);
}
.adm-topsearch-input:focus + .adm-topsearch-clear,
.adm-topsearch-input:not(:placeholder-shown) ~ .adm-topsearch-clear{
  display:inline-flex;
}
.adm-topsearch-clear{
  position:absolute;right:.55rem;top:50%;transform:translateY(-50%);
  background:transparent;border:none;color:var(--muted);
  font-size:1.3rem;line-height:1;cursor:pointer;
  width:24px;height:24px;
  display:none;align-items:center;justify-content:center;
  border-radius:3px;
}
.adm-topsearch-clear:hover{color:var(--cream);background:rgba(255,255,255,.04);}
.adm-topsearch-clear.hidden{display:none !important;}

.adm-topsearch-results{
  position:absolute;top:100%;left:0;
  width:100%;max-width:520px;
  background:var(--card);
  border:1px solid var(--border);
  border-top:none;
  max-height:60vh;overflow-y:auto;
  margin-top:-1px;
  box-shadow:0 8px 28px rgba(0,0,0,.4);
}
.adm-topsearch-group{
  padding:.5rem 0;
  border-top:1px solid var(--border);
}
.adm-topsearch-group:first-child{border-top:none;}
.adm-topsearch-group-label{
  font-family:'Josefin Sans',sans-serif;
  font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold-dim);
  padding:.3rem .85rem .45rem;
}
.adm-topsearch-row{
  padding:.5rem .85rem;cursor:pointer;
  display:flex;justify-content:space-between;align-items:center;gap:.7rem;
  transition:background .12s ease;
}
.adm-topsearch-row:hover,.adm-topsearch-row.active{
  background:rgba(201,168,76,.08);
}
.adm-topsearch-row-main{flex:1;min-width:0;}
.adm-topsearch-row-title{
  color:var(--cream);font-size:.88rem;font-weight:500;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.adm-topsearch-row-sub{
  color:var(--muted);font-size:.74rem;margin-top:.1rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.adm-topsearch-row-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;
  letter-spacing:.16em;text-transform:uppercase;color:var(--gold-dim);
  flex-shrink:0;
}
.adm-topsearch-empty{
  padding:1.2rem .85rem;text-align:center;
  color:var(--muted);font-style:italic;font-size:.85rem;
}
.adm-sb-foot{
  padding:.95rem 1.2rem;border-top:1px solid var(--border);
  display:flex;flex-direction:column;gap:.5rem;
}
.adm-sb-foot .user-greeting{
  font-family:var(--chat-font);color:var(--cream);font-size:.95rem;
  text-decoration:none;cursor:pointer;
}
.adm-sb-foot .user-greeting:hover{color:var(--gold);}
.adm-sb-foot .adm-badge{align-self:flex-start;}
.adm-sb-foot-actions{display:flex;gap:.4rem;flex-wrap:wrap;}
.adm-sb-foot-actions .abtn{flex:1;text-align:center;padding:.45rem .6rem;font-size:.55rem;}

.adm-badge{font-family:'Josefin Sans',sans-serif;font-size:.52rem;letter-spacing:.13em;background:var(--red);color:#f5b5b5;padding:.23rem .65rem;text-transform:uppercase;display:inline-block;}
.adm-badge.staff{background:var(--accent-warn-bg);color:var(--accent-warn);}

/* Main body shifts to make room for sidebar */
.adm-body{padding:1.6rem 2.2rem;margin-left:var(--adm-sb-w);}

/* Mobile burger + slide-in sidebar */
.adm-burger{
  display:none;position:fixed;top:.85rem;left:.85rem;z-index:95;
  width:42px;height:42px;background:var(--dark);
  border:1px solid var(--border);cursor:pointer;
  flex-direction:column;align-items:center;justify-content:center;gap:5px;
}
.adm-burger span{display:block;width:20px;height:2px;background:var(--gold);}
.adm-sb-overlay{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);
  z-index:85;
}
.adm-sb-overlay.show{display:block;}

@media (max-width:900px){
  .adm-sidebar{transform:translateX(-100%);box-shadow:0 0 24px rgba(0,0,0,.7);}
  .adm-sidebar.open{transform:translateX(0);}
  .adm-burger{display:flex;}
  .adm-body{margin-left:0;padding:4.2rem 1rem 1.4rem;}
}

.adm-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:1.6rem;}
@media (max-width:760px){.adm-stats{grid-template-columns:repeat(2,1fr);}}
.stat{background:var(--card);border:1px solid var(--border);padding:1rem 1.3rem;cursor:default;transition:border-color .3s,transform .2s;}
.stat.clickable{cursor:pointer;}
.stat.clickable:hover{border-color:var(--gold-dim);transform:translateY(-2px);}
.stat-lbl{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);margin-bottom:.35rem;display:flex;align-items:center;gap:.4rem;}
.stat-lbl .arrow{color:var(--gold-dim);font-size:.6rem;opacity:0;transition:opacity .2s;}
.stat.clickable:hover .stat-lbl .arrow{opacity:1;}
.stat-num{font-family:'Playfair Display',serif;font-size:1.85rem;color:var(--gold);}

.adm-panel{display:none;}
.adm-panel.active{display:block;}

.tbl-wrap{background:var(--card);border:1px solid var(--border);overflow:hidden;overflow-x:auto;}
.tbl-head{padding:.85rem 1.3rem;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;}
.tbl-ttl{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.17em;text-transform:uppercase;color:var(--cream-dim);}
table{width:100%;border-collapse:collapse;}
th{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:.6rem 1.3rem;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;}
td{padding:.8rem 1.3rem;border-bottom:1px solid rgba(201,168,76,.07);font-size:.87rem;}
tr:last-child td{border-bottom:none;}
tr:hover td{background:rgba(201,168,76,.03);}
/* Status pill — purely an indicator, not a button. Cursor stays
   default and a small leading dot reinforces "this is a label." Used
   on pickup cards and elsewhere to communicate state. The variant
   classes (.s-confirmed, .s-pending, .s-private, etc.) layer the
   semantic accent colors on top of this base. */
.sbadge{
  font-family:'Josefin Sans',sans-serif;font-size:.48rem;letter-spacing:.09em;
  text-transform:uppercase;padding:.2rem .5rem;display:inline-flex;
  align-items:center;gap:.4rem;cursor:default;user-select:none;
}
.sbadge::before{
  content:'';display:inline-block;width:6px;height:6px;border-radius:50%;
  background:currentColor;opacity:.8;flex-shrink:0;
}
.s-confirmed{background:var(--accent-success-bg);color:var(--accent-success);border:1px solid var(--accent-success-bd);}
.s-pending{background:var(--accent-warn-bg);color:var(--accent-warn);border:1px solid var(--accent-warn-bd);}
.s-private{background:var(--accent-danger-bg);color:var(--accent-danger);border:1px solid var(--accent-danger-bd);}
.s-approved{background:var(--accent-success-bg);color:var(--accent-success);border:1px solid var(--accent-success-bd);}
.s-denied{background:var(--accent-danger-bg);color:var(--accent-danger);border:1px solid var(--accent-danger-bd);}
.abtn{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.09em;text-transform:uppercase;background:none;border:1px solid var(--muted);color:var(--muted);padding:.2rem .52rem;cursor:pointer;transition:all .2s;margin-right:.22rem;}
.abtn:hover{border-color:var(--gold);color:var(--gold);}
.abtn.danger:hover{border-color:#e05c5c;color:#e05c5c;}
.abtn.msg:hover{border-color:var(--accent-info);color:var(--accent-info);}
.abtn.primary{background:var(--gold);color:var(--black);border-color:var(--gold);}
.abtn.primary:hover{background:var(--gold-light);color:var(--black);border-color:var(--gold-light);}
.ftabs{display:flex;gap:0;margin-bottom:1.3rem;flex-wrap:wrap;}
.ftab{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.12em;text-transform:uppercase;background:none;border:1px solid var(--border);color:var(--muted);padding:.4rem 1.05rem;cursor:pointer;margin-right:-1px;transition:all .2s;}
.ftab.active{background:var(--gold);color:var(--black);border-color:var(--gold);z-index:1;}
.ftab:hover:not(.active){color:var(--cream-dim);}

/* ── MODAL ── */
.modal-ov{position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:200;display:flex;align-items:center;justify-content:center;padding:1rem;}
.modal-box{background:var(--dark);border:1px solid var(--border);padding:1.8rem;width:560px;max-width:96vw;max-height:88vh;overflow-y:auto;}
.modal-title{font-family:'Playfair Display',serif;font-size:1.25rem;color:var(--cream);margin-bottom:.25rem;}
.modal-sub{font-size:.83rem;color:var(--muted);margin-bottom:1.3rem;}
.msg-tpls{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;margin-bottom:1.1rem;}
@media (max-width:580px){.msg-tpls{grid-template-columns:1fr;}}
.mtpl{background:var(--card);border:1px solid var(--border);padding:.75rem;cursor:pointer;transition:border-color .2s;}
.mtpl:hover,.mtpl.sel{border-color:var(--gold-dim);}
.mtpl-title{font-family:'Josefin Sans',sans-serif;font-size:.52rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);margin-bottom:.2rem;}
.mtpl-prev{font-size:.78rem;color:var(--muted);}
.modal-acts{display:flex;gap:.7rem;margin-top:1.1rem;flex-wrap:wrap;}

/* Credentials card — shown after "+ Add Employee" succeeds. Lists the
   new hire's name, username, email, the one-time temp password (large
   monospace + copy button), and the sign-in URL. */
.emp-cred-card{
  margin:1rem 0 .9rem;
  background:var(--card);
  border:1px solid var(--border);
  border-left:3px solid var(--gold);
  padding:.9rem 1.1rem;
  display:flex;flex-direction:column;gap:.55rem;
}
.emp-cred-row{
  display:flex;align-items:center;gap:.7rem;
  flex-wrap:wrap;
}
.emp-cred-label{
  font-family:'Josefin Sans',sans-serif;
  font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);
  flex-shrink:0;width:96px;
}
.emp-cred-val{
  color:var(--cream);font-size:.92rem;flex:1;min-width:0;
  word-break:break-all;
}
.emp-cred-pw{
  font-family:'Courier New',monospace;
  background:rgba(201,168,76,.12);
  color:var(--gold);
  padding:.35rem .55rem;
  font-size:1rem;letter-spacing:.04em;
  user-select:all;
  border:1px dashed rgba(201,168,76,.4);
  border-radius:3px;
}
.emp-cred-url{font-size:.82rem;color:var(--muted);}
.emp-cred-copy{padding:.3rem .65rem;font-size:.72rem;flex-shrink:0;}
.emp-cred-status{
  font-size:.82rem;margin:.6rem 0 .2rem;min-height:1em;
}
.chip-ok{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.12em;text-transform:uppercase;background:var(--accent-success-bg);color:var(--accent-success);border:1px solid var(--accent-success-bd);padding:.23rem .65rem;display:inline-block;}

/* ── EMAIL / EVENT BUILDER ── */
.eb{background:var(--card);border:1px solid var(--border);overflow:hidden;}
.eb-toolbar{background:var(--rich);border-bottom:1px solid var(--border);padding:.7rem 1.1rem;display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;}
.eb-tlbl{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);margin-right:.4rem;}
.eb-btn{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.11em;text-transform:uppercase;background:none;border:1px solid var(--border);color:var(--cream-dim);padding:.27rem .62rem;cursor:pointer;transition:all .2s;}
.eb-btn:hover{border-color:var(--gold-dim);color:var(--gold);}
.eb-btn.act{background:var(--gold);color:var(--black);border-color:var(--gold);}
.eb-body{display:grid;grid-template-columns:1fr 320px;min-height:500px;}
@media (max-width:880px){.eb-body{grid-template-columns:1fr;}}
.eb-canvas{padding:1.3rem;border-right:1px solid var(--border);overflow-y:auto;max-height:640px;}
@media (max-width:880px){.eb-canvas{border-right:none;border-bottom:1px solid var(--border);}}
.eb-side{padding:1.1rem;overflow-y:auto;max-height:640px;}
.eb-side-ttl{font-family:'Josefin Sans',sans-serif;font-size:.51rem;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);margin-bottom:.9rem;}
.eb-prev{background:#161210;border:1px solid var(--border);min-height:340px;overflow:hidden;}
.tpl-card{background:var(--dark);border:1px solid var(--border);padding:.88rem;margin-bottom:.7rem;cursor:pointer;transition:border-color .2s;position:relative;}
.tpl-card:hover{border-color:var(--gold-dim);}
.tpl-card.sel{border-color:var(--gold);}
.tpl-card-name{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);margin-bottom:.22rem;}
.tpl-card-desc{font-size:.78rem;color:var(--muted);}
.tpl-mark{position:absolute;top:.62rem;right:.62rem;width:15px;height:15px;background:var(--gold);border-radius:50%;display:none;align-items:center;justify-content:center;font-size:8px;color:var(--black);}
.tpl-card.sel .tpl-mark{display:flex;}
.eb-field{margin-bottom:.9rem;}
.eb-field label{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-dim);display:block;margin-bottom:.28rem;}
.eb-field input,.eb-field textarea,.eb-field select{
  width:100%;background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.5rem .7rem;font-family:'Cormorant Garamond',serif;font-size:.92rem;
  outline:none;transition:border-color .2s;
}
.eb-field input:focus,.eb-field textarea:focus,.eb-field select:focus{border-color:var(--gold-dim);}
.eb-field textarea{resize:vertical;min-height:72px;}

/* Image upload */
.img-zone{border:1px dashed var(--border-hi);padding:1.1rem;text-align:center;cursor:pointer;position:relative;background:var(--black);transition:border-color .2s;}
.img-zone:hover{border-color:var(--gold);}
.img-zone input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;}
.img-zone p{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);}
.img-zone p span{color:var(--gold);}
.img-thumb{width:100%;max-height:170px;object-fit:cover;display:block;margin-top:.65rem;border:1px solid var(--border);}
.img-rmv{font-family:'Josefin Sans',sans-serif;font-size:.47rem;letter-spacing:.1em;text-transform:uppercase;background:none;border:1px solid var(--muted);color:var(--muted);padding:.18rem .48rem;cursor:pointer;margin-top:.35rem;transition:all .2s;}
.img-rmv:hover{border-color:#e05c5c;color:#e05c5c;}

/* Rich text editor */
.rt-toolbar{display:flex;flex-wrap:wrap;gap:.3rem;padding:.45rem;background:var(--dark);border:1px solid var(--border);border-bottom:none;}
.rt-btn{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;
  background:none;border:1px solid transparent;color:var(--cream-dim);
  width:28px;height:26px;cursor:pointer;border-radius:2px;transition:all .15s;
}
.rt-btn:hover{border-color:var(--gold-dim);color:var(--gold);}
.rt-btn.b{font-weight:700;}
.rt-btn.i{font-style:italic;}
.rt-btn.u{text-decoration:underline;}
.rt-divider{width:1px;background:var(--border);margin:.15rem .25rem;}
.rt-area{
  width:100%;min-height:130px;background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.7rem .85rem;font-family:'Cormorant Garamond',serif;font-size:.95rem;line-height:1.6;
  outline:none;transition:border-color .2s;overflow-y:auto;
}
.rt-area:focus{border-color:var(--gold-dim);}
.rt-area p{margin-bottom:.5rem;}
.rt-area:empty::before{content:attr(data-placeholder);color:var(--muted);font-style:italic;}

/* ── MAILING ── */
.ml-row{display:flex;justify-content:space-between;align-items:center;padding:.55rem 0;border-bottom:1px solid rgba(201,168,76,.08);font-size:.87rem;gap:.5rem;flex-wrap:wrap;}
.ml-row:last-child{border-bottom:none;}
.ml-email{color:var(--cream-dim);word-break:break-all;}
.ml-date{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.09em;color:var(--muted);}

/* ── SCHEDULE ── */
.sched-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.4rem;}
@media (max-width:760px){.sched-grid{grid-template-columns:1fr;}}
.sched-day{background:var(--card);border:1px solid var(--border);padding:.85rem .9rem;min-height:130px;}
.sched-day.today{border-color:var(--gold-dim);}
.sched-dnum{font-family:'Playfair Display',serif;font-size:1.2rem;color:var(--cream);}
.sched-dlbl{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);margin-bottom:.5rem;}
.sched-shift{font-size:.78rem;color:var(--cream-dim);background:rgba(201,168,76,.07);padding:.28rem .42rem;margin-bottom:.32rem;border-left:2px solid var(--gold-dim);}
.sched-shift .who{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.1em;color:var(--gold);text-transform:uppercase;display:block;}
.sched-off{font-size:.72rem;color:var(--accent-danger);background:var(--accent-danger-bg);padding:.2rem .42rem;margin-top:.3rem;border-left:2px solid var(--red);}

/* Admin Today landing — roster + action-required */
.adm-roster-row{
  display:grid;grid-template-columns:auto 1fr auto auto;gap:.7rem;align-items:center;
  padding:.55rem .8rem;border-left:3px solid var(--emp-color, var(--gold-dim));
  background:rgba(201,168,76,.04);margin-bottom:.4rem;flex-wrap:wrap;
}
.adm-roster-dot{
  width:8px;height:8px;border-radius:50%;background:var(--emp-color,var(--gold));
  flex-shrink:0;
}
.adm-roster-name{
  color:var(--emp-color,var(--cream));
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.18em;
  text-transform:uppercase;font-weight:500;
}
.adm-roster-role{color:var(--cream-dim);font-size:.85rem;}
.adm-roster-time{color:var(--cream);font-size:.85rem;font-family:var(--chat-font);}
@media (max-width:580px){
  .adm-roster-row{grid-template-columns:auto 1fr;gap:.5rem;}
  .adm-roster-role,.adm-roster-time{grid-column:2;font-size:.78rem;}
}

.adm-action-row{
  display:flex;justify-content:space-between;align-items:center;gap:.8rem;
  padding:.7rem .9rem;background:rgba(232,201,122,.06);
  border:1px solid rgba(232,201,122,.3);border-left:3px solid #e8c97a;
  margin-bottom:.5rem;flex-wrap:wrap;
}
.adm-action-row:last-child{margin-bottom:0;}
.adm-action-title{color:var(--cream);font-size:.92rem;flex:1;min-width:0;}

.tor-form{background:var(--card);border:1px solid var(--border);padding:1.4rem 1.6rem;max-width:560px;}
.warn-box{background:var(--accent-warn-bg);border:1px solid var(--accent-warn-bd);padding:.8rem 1rem;font-size:.82rem;color:var(--accent-warn);margin-bottom:1rem;}
.warn-box strong{color:var(--gold);}

/* ── TODAY LANDING ── */
.today-hero{
  background:linear-gradient(180deg,rgba(31,26,20,.9),rgba(17,14,10,.95));
  border:1px solid var(--border);padding:2rem 2.2rem;margin-bottom:1.6rem;
  display:flex;justify-content:space-between;align-items:flex-end;gap:1.4rem;flex-wrap:wrap;
}
.today-hero h1{
  font-family:'Playfair Display',serif;font-style:italic;font-weight:400;
  color:var(--cream);font-size:clamp(1.7rem,3vw,2.4rem);line-height:1.1;
}
.today-hero .date-line{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.32em;
  text-transform:uppercase;color:var(--gold);margin-bottom:.5rem;
}
/* Quick stats — when sitting as their own row (new admin Today layout),
   give them a bordered tile so they don't float in dead space. Each
   stat gets a thin separator instead of independent tile borders, so
   it reads as one unit. */
.quick-stats{
  background:var(--card);
  border:1px solid var(--border);
  padding:1.2rem 1.6rem;
  display:flex;
  gap:0;
  flex-wrap:wrap;
  margin-bottom:1.3rem;
}
.qs{
  flex:1;
  text-align:center;
  padding:0 1rem;
  border-left:1px solid var(--border);
  min-width:80px;
}
.qs:first-child{border-left:none;}
.qs-num{
  font-family:'Playfair Display',serif;
  font-style:italic;font-weight:600;
  font-size:2.1rem;color:var(--gold);line-height:1;
}
.qs-lbl{
  font-family:'JetBrains Mono','Josefin Sans',sans-serif;
  font-size:.55rem;font-weight:500;
  letter-spacing:.2em;text-transform:uppercase;
  color:var(--muted);margin-top:.45rem;
}
/* Legacy: when .quick-stats sits INSIDE .today-hero (original layout),
   strip the new tile chrome so it doesn't double up. */
.today-hero .quick-stats{
  background:transparent;border:none;padding:0;margin-bottom:0;
}
.today-hero .qs{border-left:none;}

.today-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:1.3rem;margin-bottom:1.3rem;}
@media (max-width:980px){.today-grid{grid-template-columns:1fr;}}

.today-card{background:var(--card);border:1px solid var(--border);padding:1.4rem 1.6rem;}
.today-card h2{
  font-family:'Playfair Display',serif;font-size:1.18rem;font-style:italic;
  color:var(--cream);margin-bottom:1rem;display:flex;justify-content:space-between;align-items:center;gap:.6rem;
}
.today-card h2 .count{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold);font-style:normal;
  background:rgba(201,168,76,.1);border:1px solid var(--border);padding:.22rem .55rem;
}
.today-empty{font-style:italic;color:var(--muted);padding:1.2rem 0;text-align:center;font-size:.86rem;}

/* Events row */
.today-events{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.9rem;}
.tev{background:var(--rich);border:1px solid var(--border);padding:1rem 1.2rem;border-left:3px solid var(--gold);}
.tev-time{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;color:var(--gold);text-transform:uppercase;}
.tev-title{font-family:'Playfair Display',serif;font-size:1rem;color:var(--cream);margin:.25rem 0 .35rem;}
.tev-detail{font-size:.82rem;color:var(--cream-dim);}
.tev-tag{display:inline-block;font-family:'Josefin Sans',sans-serif;font-size:.48rem;letter-spacing:.13em;
  text-transform:uppercase;color:var(--gold);border:1px solid var(--gold-dim);padding:.14rem .42rem;margin-top:.5rem;}

/* Reservation list */
.tres-list{display:flex;flex-direction:column;}
.tres-row{display:grid;grid-template-columns:80px 1fr auto;gap:1rem;padding:.85rem 0;border-bottom:1px solid rgba(201,168,76,.08);align-items:start;}
.tres-row:last-child{border-bottom:none;}

/* Clickable variant — used on the Today dashboard so admins can jump
   straight to the matching row in the Reservations panel. */
.tres-row--clickable{cursor:pointer;padding:.85rem .75rem;margin:0 -.75rem;border-bottom:1px solid rgba(201,168,76,.08);transition:background .15s ease;}
.tres-row--clickable:hover{background:rgba(201,168,76,.05);}
.tres-row--clickable:focus-visible{outline:1px solid var(--gold);outline-offset:-1px;background:rgba(201,168,76,.08);}

/* Flash highlight applied briefly to the destination row in the
   Reservations table after the user clicks through from Today.
   Animation gradient draws attention without being garish. */
@keyframes row-flash-fade{
  0%   { background-color: rgba(201,168,76,.35); }
  100% { background-color: transparent; }
}
.row-flash{animation: row-flash-fade 1.8s ease-out;}
.tres-time{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:1rem;line-height:1.1;}
.tres-time .ampm{font-family:'Josefin Sans',sans-serif;font-style:normal;font-size:.6rem;letter-spacing:.15em;color:var(--gold-dim);text-transform:uppercase;display:block;margin-top:.1rem;}
.tres-name{color:var(--cream);font-size:.95rem;}
.tres-meta{font-size:.78rem;color:var(--muted);margin-top:.18rem;}
.tres-notes{font-size:.78rem;color:var(--cream-dim);font-style:italic;margin-top:.32rem;border-left:2px solid var(--gold-dim);padding-left:.55rem;}
.tres-party{
  background:var(--rich);border:1px solid var(--border);
  padding:.32rem .65rem;text-align:center;min-width:46px;
}
.tres-party .num{font-family:'Playfair Display',serif;font-size:1.1rem;color:var(--gold);line-height:1;}
.tres-party .lbl{font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.15em;color:var(--muted);text-transform:uppercase;display:block;margin-top:.15rem;}
.tres-private-tag{display:inline-block;font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.13em;color:var(--accent-danger);border:1px solid var(--accent-danger-bd);background:var(--accent-danger-bg);padding:.13rem .42rem;margin-left:.4rem;text-transform:uppercase;vertical-align:middle;}

/* Specials */
.tspec-list{display:flex;flex-direction:column;gap:.8rem;}
.tspec{background:var(--rich);border:1px solid var(--border);padding:.95rem 1.1rem;border-left:3px solid var(--gold);position:relative;}
.tspec.t-drink{border-left-color:var(--gold);}
.tspec.t-promo{border-left-color:var(--accent-info);}
.tspec.t-note {border-left-color:#e05c5c;}
.tspec-tag{font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.18em;text-transform:uppercase;
  display:inline-block;padding:.14rem .42rem;margin-bottom:.42rem;}
.tspec.t-drink .tspec-tag{color:var(--gold);background:rgba(201,168,76,.1);border:1px solid var(--border);}
.tspec.t-promo .tspec-tag{color:var(--accent-info);background:var(--accent-info-bg);border:1px solid var(--accent-info-bd);}
.tspec.t-note  .tspec-tag{color:#e05c5c;background:rgba(224,92,92,.1);border:1px solid rgba(224,92,92,.3);}
.tspec-title{font-family:'Playfair Display',serif;font-size:.97rem;color:var(--cream);margin-bottom:.28rem;}
.tspec-note{font-size:.83rem;color:var(--cream-dim);line-height:1.55;}
.tspec-actions{position:absolute;top:.55rem;right:.55rem;display:flex;gap:.25rem;opacity:0;transition:opacity .15s;}
.tspec:hover .tspec-actions{opacity:1;}

/* Specials editor row */
.spec-editor-row{display:grid;grid-template-columns:120px 1fr 1.6fr auto;gap:.6rem;align-items:start;padding:.7rem 0;border-bottom:1px solid rgba(201,168,76,.07);}
.spec-editor-row:last-child{border-bottom:none;}
@media (max-width:760px){.spec-editor-row{grid-template-columns:1fr;}}

/* Roles editor row (admin Careers panel) */
.role-editor-row{
  display:grid;
  grid-template-columns:130px 1fr 1fr 1fr 2fr auto;
  gap:.55rem;align-items:start;
  padding:.85rem 0;border-bottom:1px solid rgba(201,168,76,.07);
}
.role-editor-row:last-child{border-bottom:none;}
@media (max-width:980px){
  .role-editor-row{grid-template-columns:1fr 1fr;gap:.5rem;}
  .role-editor-row textarea{grid-column:1/-1;}
  .role-editor-row [data-role-rmv]{grid-column:1/-1;justify-self:end;}
}
.role-toggle-label{
  display:flex;align-items:center;gap:.45rem;cursor:pointer;
  background:var(--rich);border:1px solid var(--border);
  padding:.5rem .65rem;
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--cream-dim);
  align-self:start;
}
.role-toggle-label input[type=checkbox]{
  accent-color:var(--gold);cursor:pointer;
  appearance:auto;-webkit-appearance:checkbox;
  width:14px;height:14px;margin:0;
}
.role-editor-row input[type=text],
.role-editor-row textarea,
.spec-editor-row input[type=text],
.spec-editor-row textarea,
.spec-editor-row select{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.55rem .7rem;font-family:'Cormorant Garamond',serif;font-size:.92rem;
  outline:none;transition:border-color .2s;width:100%;
}
.role-editor-row input[type=text]:focus,
.role-editor-row textarea:focus,
.spec-editor-row input[type=text]:focus,
.spec-editor-row textarea:focus,
.spec-editor-row select:focus{border-color:var(--gold-dim);}
.role-editor-row textarea,
.spec-editor-row textarea{resize:vertical;font-family:'Cormorant Garamond',serif;line-height:1.5;}

/* ── User greeting in header ── */
.user-greeting{
  color:var(--cream-dim);font-size:.85rem;cursor:pointer;
  text-decoration:none;transition:color .2s;
}
.user-greeting #user-name{color:var(--gold);}
.user-greeting:hover{color:var(--cream);}
.user-greeting:hover #user-name{color:var(--gold-light);}

/* ── Team directory ── */
.team-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:1rem;
}
.team-card{
  background:var(--card);border:1px solid var(--border);
  padding:1.1rem;display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:start;
}
.team-avatar{flex-shrink:0;}
.team-info{min-width:0;}
.team-name{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:1.1rem;line-height:1.2;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;}
.team-color-dot{
  display:inline-block;width:10px;height:10px;border-radius:50%;
  background:var(--emp-color,var(--gold-dim));
  flex-shrink:0;
  box-shadow:0 0 0 1px rgba(0,0,0,.3) inset;
}
.team-role{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin-top:.3rem;}
.team-contact{margin-top:.55rem;display:flex;flex-direction:column;gap:.18rem;}
.team-contact-link{
  color:var(--cream-dim);font-size:.8rem;text-decoration:none;
  word-break:break-all;
}
.team-contact-link:hover{color:var(--gold);}
.team-actions{display:flex;gap:.4rem;margin-top:.7rem;flex-wrap:wrap;}

/* Avatars */
.emp-photo{
  width:64px;height:64px;border-radius:50%;display:block;object-fit:cover;
  border:1px solid var(--gold-dim);
}
.emp-photo-initials{
  background:linear-gradient(135deg,var(--gold-dim),var(--gold));
  color:var(--black);font-family:'Playfair Display',serif;font-style:italic;
  font-size:1.4rem;
  display:flex;align-items:center;justify-content:center;
}
.emp-photo-broadcast{
  background:var(--rich);border-color:var(--gold);
  display:flex;align-items:center;justify-content:center;font-size:1.5rem;
}
.emp-photo-group{
  background:linear-gradient(135deg,#3a3527,#2a2418);
  border-color:var(--gold-dim);
  display:flex;align-items:center;justify-content:center;
  font-size:1.4rem;color:var(--gold);
}
/* Custom group photo: replaces the gradient with a cover-fit image */
.emp-photo-group.has-photo{
  background-size:cover;background-position:center;
  font-size:0;color:transparent;
}

/* Editable group avatar (creator only) — clickable circle with hover overlay */
.group-avatar-editable{position:relative;cursor:pointer;}
.group-avatar-editable .emp-photo{transition:transform .18s, box-shadow .18s;}
.group-avatar-editable:hover .emp-photo{
  transform:scale(1.04);
  box-shadow:0 0 0 2px var(--gold), 0 6px 18px rgba(0,0,0,.45);
}
/* Camera-pip badge that always shows in the corner — strong cue this is editable */
.group-avatar-editable::after{
  content:'📷';position:absolute;right:-3px;bottom:-3px;
  width:20px;height:20px;border-radius:50%;
  background:var(--gold);color:var(--black);
  display:flex;align-items:center;justify-content:center;
  font-size:.7rem;line-height:1;
  border:2px solid var(--rich);
  transition:transform .15s;
  z-index:1;
}
.group-avatar-editable:hover::after{transform:scale(1.12);}
/* Soft "Change photo" overlay on hover (covers the photo with a tint) */
.group-avatar-editable::before{
  content:'Change';position:absolute;inset:0;border-radius:inherit;
  background:rgba(0,0,0,.55);color:var(--gold);
  font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.16em;
  text-transform:uppercase;
  display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .18s;
  pointer-events:none;border-radius:50%;
}
.group-avatar-editable:hover::before{opacity:1;}
.group-icon-edit{
  margin-left:.5rem;background:transparent;border:1px solid var(--gold-dim);
  color:var(--gold);padding:.18rem .55rem;
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;cursor:pointer;
}
.group-icon-edit:hover{background:rgba(201,168,76,.1);border-color:var(--gold);}

/* ── Profile view ── */
.profile-wrap{max-width:680px;}
.profile-hero{
  display:flex;gap:1.4rem;align-items:flex-start;
  padding:1.4rem 0;
}
.profile-photo-wrap{position:relative;flex-shrink:0;}
.profile-photo-wrap .emp-photo{width:120px;height:120px;font-size:2.5rem;}
.profile-photo-upload{
  display:block;margin-top:.55rem;text-align:center;
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);cursor:pointer;
  position:relative;
}
.profile-photo-upload input[type=file]{
  position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;
}
.profile-photo-upload:hover{color:var(--gold);}
.profile-meta{flex:1;min-width:0;}
.profile-role{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.25em;
  text-transform:uppercase;color:var(--gold);margin-bottom:.25rem;
}
.profile-name{
  font-family:'Playfair Display',serif;font-style:italic;font-weight:400;
  color:var(--cream);font-size:clamp(1.6rem,3.5vw,2.1rem);line-height:1.1;margin:.1rem 0 .3rem;
}
.profile-joined{font-size:.82rem;color:var(--muted);font-style:italic;}
.profile-body{margin-top:.6rem;}
.profile-fields{
  display:grid;grid-template-columns:1fr 1fr;gap:.8rem;
  background:var(--card);border:1px solid var(--border);
  padding:1.1rem 1.3rem;
}
@media (max-width:680px){.profile-fields{grid-template-columns:1fr;}}
.profile-row{display:flex;flex-direction:column;gap:.32rem;}
.profile-row-full{grid-column:1/-1;}
.profile-label{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold-dim);
}
.profile-input{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.55rem .7rem;font-family:'Cormorant Garamond',serif;font-size:.95rem;
  outline:none;transition:border-color .2s;
}
.profile-input:focus{border-color:var(--gold-dim);}
.profile-fields.read .profile-row{padding:.55rem 0;border-bottom:1px solid rgba(201,168,76,.07);}
.profile-fields.read .profile-row:last-child{border-bottom:none;}
.profile-value{color:var(--cream);font-size:.95rem;}
.profile-value.bio{font-style:italic;line-height:1.65;color:var(--cream-dim);}
.profile-edit-hint{
  font-size:.74rem;color:var(--muted);font-style:italic;margin-top:.5rem;text-align:right;
}
.profile-actions{margin-top:1.2rem;}
.profile-empty{color:var(--muted);font-style:italic;padding:2rem;text-align:center;}

/* ── Team toolbar + admin pill ── */
.team-toolbar{
  display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;
  margin-bottom:1rem;
}
.team-toolbar-hint{font-size:.78rem;color:var(--muted);font-style:italic;}
.team-admin-pill{
  display:inline-block;font-family:'Josefin Sans',sans-serif;font-size:.42rem;
  letter-spacing:.18em;text-transform:uppercase;color:var(--gold);
  border:1px solid var(--gold-dim);background:rgba(201,168,76,.08);
  padding:.06rem .35rem;margin-left:.35rem;vertical-align:middle;
}
.team-archive{
  margin-top:1.6rem;padding-top:1.2rem;
  border-top:1px solid var(--border);
}
.team-archive-row{
  display:flex;justify-content:space-between;align-items:center;gap:.6rem;
  padding:.55rem 0;border-bottom:1px solid rgba(201,168,76,.06);flex-wrap:wrap;
}
.team-archive-name{color:var(--cream-dim);font-size:.92rem;}

/* ── HR section (admin-only) ── */
.hr-section{
  margin-top:2rem;padding-top:1.6rem;
  border-top:1px solid var(--border);
}
.hr-section-title{
  font-family:'Playfair Display',serif;font-style:italic;font-weight:400;
  color:var(--cream);font-size:1.18rem;margin:.2rem 0 .9rem;
}
.hr-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:.75rem;
  background:var(--card);border:1px solid var(--border);
  padding:1.1rem 1.3rem;
}
@media (max-width:680px){.hr-grid{grid-template-columns:1fr;}}
.hr-row{display:flex;flex-direction:column;gap:.32rem;}
.hr-row-full{grid-column:1/-1;}
.hr-label{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold-dim);
  display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;
}
.hr-secure{
  font-family:'Josefin Sans',sans-serif;font-size:.42rem;letter-spacing:.15em;
  text-transform:uppercase;color:var(--accent-warn);
  border:1px solid var(--accent-warn-bd);background:var(--accent-warn-bg);
  padding:.06rem .35rem;
}
.hr-ssn-row{display:flex;gap:.4rem;align-items:center;}
.hr-ssn-row input{flex:1;font-family:var(--chat-font);letter-spacing:.05em;}
.hr-empty{
  color:var(--muted);font-style:italic;font-size:.85rem;padding:.45rem 0;
}
.hr-file-chip{
  display:flex;align-items:center;gap:.6rem;
  background:var(--rich);border:1px solid var(--border);
  padding:.55rem .65rem;flex-wrap:wrap;
}

.hr-note-add{
  display:grid;grid-template-columns:1fr auto;gap:.5rem;
  margin-bottom:.9rem;
}
.hr-note-add textarea{
  background:var(--card);border:1px solid var(--border);color:var(--cream);
  padding:.55rem .7rem;font-family:var(--chat-font);font-size:.95rem;
  outline:none;resize:vertical;min-height:48px;
}
.hr-note-add textarea:focus{border-color:var(--gold-dim);}
.hr-notes-list{display:flex;flex-direction:column;gap:.5rem;}
.hr-note{
  background:var(--card);border:1px solid var(--border);
  padding:.7rem .9rem;position:relative;
}
.hr-note-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  color:var(--gold-dim);text-transform:uppercase;margin-bottom:.35rem;
}
.hr-note-body{
  color:var(--cream-dim);font-size:.92rem;line-height:1.55;
  font-family:var(--chat-font);white-space:pre-wrap;
}
.hr-note-rm{
  position:absolute;top:.4rem;right:.4rem;
  width:24px;height:24px;font-size:.95rem;line-height:1;padding:0;
  opacity:.5;
}
.hr-note:hover .hr-note-rm{opacity:1;}

.hr-account{
  background:var(--card);border:1px solid var(--border);
  padding:1rem 1.3rem;
}
.hr-account-row{
  display:flex;justify-content:space-between;align-items:center;
  padding:.5rem 0;border-bottom:1px solid rgba(201,168,76,.05);gap:.6rem;flex-wrap:wrap;
}
.hr-account-row:last-of-type{border-bottom:none;}
.hr-account-row > span:first-child{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold-dim);
}
.hr-account-row strong{color:var(--cream);font-weight:500;}
.hr-account-actions{
  display:flex;gap:.5rem;margin-top:.7rem;padding-top:.7rem;
  border-top:1px solid var(--border);flex-wrap:wrap;
}

/* ── Schedule day calendar row (holidays + events) ── */
.sched-cal-row{
  display:flex;flex-direction:column;gap:.3rem;
  margin:.45rem 0 .2rem;padding:.4rem .5rem;
  background:rgba(201,168,76,.05);border:1px solid rgba(201,168,76,.12);
}
.sched-holiday{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold);
}
.sched-event-link{
  display:block;
  font-family:var(--chat-font);font-size:.82rem;color:var(--cream);
  text-decoration:none;
  border-left:2px solid var(--gold-dim);padding:.18rem .45rem;
  background:rgba(201,168,76,.07);
  word-wrap:break-word;
}
.sched-event-link:hover{background:rgba(201,168,76,.14);color:var(--gold-light);}

/* ── Messages panel ── */
.msg-grid{
  display:grid;grid-template-columns:300px 1fr;gap:0;
  background:var(--card);border:1px solid var(--border);
  min-height:520px;overflow:hidden;
}
@media (max-width:780px){.msg-grid{grid-template-columns:1fr;}}
.msg-sidebar{
  border-right:1px solid var(--border);
  display:flex;flex-direction:column;
}
@media (max-width:780px){.msg-sidebar{border-right:none;border-bottom:1px solid var(--border);}}
.msg-side-head{
  display:flex;justify-content:space-between;align-items:center;gap:.6rem;
  padding:.85rem 1rem;border-bottom:1px solid var(--border);
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold-dim);
}
.msg-conv-list{flex:1;overflow-y:auto;max-height:480px;}
.msg-conv-item{
  display:grid;grid-template-columns:auto 1fr auto;gap:.7rem;align-items:center;
  padding:.7rem 1rem;border-bottom:1px solid rgba(201,168,76,.05);
  cursor:pointer;transition:background .15s;
}
.msg-conv-item:hover{background:rgba(201,168,76,.04);}
.msg-conv-item.active{background:rgba(201,168,76,.08);border-left:2px solid var(--gold);padding-left:calc(1rem - 2px);}
.msg-conv-avatar .emp-photo{width:36px;height:36px;font-size:.9rem;}
.msg-conv-avatar .emp-photo-broadcast{font-size:.95rem;}
.msg-conv-info{min-width:0;}
.msg-conv-name{
  font-family:var(--chat-font);font-weight:600;color:var(--cream);font-size:.95rem;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.01em;
}
.msg-conv-snippet{
  font-family:var(--chat-font);
  font-size:.82rem;color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:.15rem;
}
.msg-bcast-pill{
  display:inline-block;font-family:'Josefin Sans',sans-serif;font-size:.42rem;
  letter-spacing:.18em;text-transform:uppercase;color:var(--gold);
  border:1px solid var(--gold-dim);padding:.06rem .35rem;background:rgba(201,168,76,.08);
}
.msg-bcast-pill.group{
  color:var(--accent-info);border-color:var(--accent-info-bd);background:var(--accent-info-bg);
}
.msg-unread-dot{
  background:var(--gold);color:var(--black);
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;font-weight:bold;
  min-width:18px;height:18px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;padding:0 .35rem;
}
.msg-conv-empty{color:var(--muted);font-style:italic;padding:1.4rem;text-align:center;font-size:.85rem;}

.msg-thread-pane{display:flex;flex-direction:column;}
.msg-thread-empty{
  flex:1;display:flex;align-items:center;justify-content:center;
  color:var(--muted);font-style:italic;padding:2rem;text-align:center;
}
.msg-thread-head{
  display:flex;align-items:center;gap:.7rem;
  padding:.85rem 1.1rem;border-bottom:1px solid var(--border);background:var(--rich);
}
.msg-thread-avatar{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;}
.msg-thread-avatar .emp-photo{width:38px;height:38px;font-size:.9rem;}
/* When the avatar is a <label> (creator only), ensure it sizes around the photo, not stretched */
label.msg-thread-avatar{width:38px;height:38px;}
.msg-thread-name{
  font-family:var(--chat-font);font-weight:600;color:var(--cream);font-size:1.05rem;letter-spacing:.01em;
}
.msg-thread-body{
  flex:1;overflow-y:auto;
  min-height:380px;max-height:380px;
  padding:1rem;display:flex;flex-direction:column;gap:.7rem;
}
/* Pin messages to the bottom of the body when the conversation is short,
   without breaking scroll-up when it's long. The classic flexbox + overflow
   trick: `margin-top:auto` on the first child absorbs the empty space when
   content is shorter than the container, and collapses to 0 when content
   overflows — so the older messages above stay reachable via scroll.
   (Using justify-content:flex-end here would push overflow off the top of
   the scroll container, making earlier messages permanently unreachable.) */
.msg-thread-body > :first-child{margin-top:auto;}

/* Message row layout: avatar next to bubble */
.msg-row{
  display:flex;align-items:flex-end;gap:.55rem;max-width:90%;
}
.msg-row.mine{flex-direction:row-reverse;align-self:flex-end;}
.msg-row.theirs{align-self:flex-start;}
.msg-row-avatar{flex-shrink:0;}
.msg-row-avatar .emp-photo{
  width:32px;height:32px;font-size:.7rem;
  border-color:var(--emp-color, var(--gold-dim));
}
.msg-row-bubble-wrap{
  display:flex;flex-direction:column;
  min-width:0;flex:1;
  align-items:flex-start;
}
.msg-row.mine .msg-row-bubble-wrap{align-items:flex-end;}
.msg-row .msg-bubble{max-width:100%;align-self:auto;position:relative;}

/* Per-bubble action row (React + Reply) */
.msg-bubble-actions{
  position:absolute;top:-12px;
  display:flex;gap:.2rem;
  opacity:0;transition:opacity .15s;
}
.msg-row.mine .msg-bubble-actions{right:.4rem;}
.msg-row.theirs .msg-bubble-actions{left:.4rem;}
.msg-bubble:hover .msg-bubble-actions,
.msg-row:focus-within .msg-bubble-actions{opacity:1;}
.msg-bubble-act{
  background:var(--card);border:1px solid var(--border);color:var(--cream-dim);
  font-size:.7rem;padding:.18rem .4rem;cursor:pointer;
  border-radius:14px;line-height:1;
  transition:all .15s;
}
.msg-bubble-act:hover{border-color:var(--gold-dim);color:var(--gold);}
.msg-bubble-act-active{border-color:var(--gold);color:var(--gold);background:rgba(201,168,76,.12);}

/* @mention chip — gold-tinted span inside the message body. The "me"
   variant is brighter so a viewer can spot mentions of themselves
   in a busy thread. */
.msg-mention{
  color:var(--gold);background:rgba(201,168,76,.10);
  padding:.05rem .35rem;border-radius:3px;font-weight:500;
}
.msg-mention.me{
  background:rgba(201,168,76,.28);color:var(--cream);
  box-shadow:inset 0 0 0 1px var(--gold-dim);
}

/* "(edited)" suffix in the bubble meta line. */
.msg-bubble-edited{
  color:var(--muted);font-style:italic;font-size:.7rem;margin-left:.3rem;
}

/* Soft-deleted message placeholder. */
.msg-bubble-deleted{
  background:rgba(255,255,255,.02) !important;
  border:1px dashed var(--border) !important;
  color:var(--muted);font-style:italic;
}

/* Pinned bubble subtle treatment — gold inset stroke. */
.msg-bubble.pinned{
  box-shadow:inset 0 0 0 1px var(--gold-dim);
}
.msg-pinned-pill{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);
  padding:.1rem .4rem;border:1px solid var(--gold-dim);border-radius:2px;
}

/* Pinned-strip at top of thread — compact list of pinned messages
   with a gold-tinted background and click-to-jump behavior. */
.msg-pinned-strip{
  background:rgba(201,168,76,.05);
  border-bottom:1px solid var(--gold-dim);
  padding:.5rem .9rem;
  flex-shrink:0;
}
.msg-pinned-head{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);margin-bottom:.4rem;
}
.msg-pinned-item{
  display:flex;gap:.6rem;align-items:baseline;
  padding:.3rem .55rem;font-size:.85rem;color:var(--cream-dim);
  cursor:pointer;border-radius:3px;line-height:1.4;
  transition:background .15s;
}
.msg-pinned-item:hover{background:rgba(201,168,76,.08);}
.msg-pinned-from{color:var(--cream);font-weight:500;flex-shrink:0;}
.msg-pinned-body{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;
}

/* Brief flash when jumping to a pinned message from the strip. */
.msg-row-flash > .msg-row-bubble-wrap > .msg-bubble{
  animation: msg-flash 1.4s ease-out;
}
@keyframes msg-flash {
  0%   { box-shadow: 0 0 0 0 rgba(201,168,76,.6); }
  30%  { box-shadow: 0 0 0 4px rgba(201,168,76,.5); }
  100% { box-shadow: 0 0 0 0 rgba(201,168,76,0); }
}

/* @mention autocomplete popup — appears as user types @ in the message
   textarea. Floats above the textarea. Active row highlighted in gold;
   keyboard nav (↑/↓) and Enter to select. */
.msg-mention-popup{
  position:fixed;
  z-index:2000;
  background:var(--card);
  border:1px solid var(--gold-dim);
  max-height:240px;
  overflow-y:auto;
  min-width:240px;
  box-shadow:0 10px 32px rgba(0,0,0,.55);
}
.msg-mention-item{
  display:flex;align-items:center;gap:.55rem;
  padding:.5rem .75rem;
  cursor:pointer;
  border-bottom:1px solid var(--border);
  transition:background .15s;
}
.msg-mention-item:last-child{border-bottom:none;}
.msg-mention-item:hover,
.msg-mention-item.active{background:rgba(201,168,76,.15);}
.msg-mention-item-color{
  display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;
}
.msg-mention-item-name{
  color:var(--cream);font-size:.95rem;
  font-family:'Cormorant Garamond',serif;flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.msg-mention-item-role{
  color:var(--muted);font-size:.65rem;
  font-family:'Josefin Sans',sans-serif;letter-spacing:.14em;
  text-transform:uppercase;flex-shrink:0;
}

/* Online-presence dot — overlaid on staff avatars. */
.emp-online-dot{
  position:absolute;bottom:0;right:0;
  width:12px;height:12px;border-radius:50%;
  background:var(--accent-success);border:2px solid var(--card);
  box-shadow:0 0 0 1px rgba(143,196,106,.4);
}

/* Inline online-presence indicator — used after names in lists where
   we don't render an avatar (Tonight's Roster, sidebar greeting, etc.).
   A small green dot with a gentle pulse so it's noticeable but not
   distracting. */
.presence-pulse{
  display:inline-block;width:7px;height:7px;border-radius:50%;
  background:var(--accent-success);
  margin-left:.45rem;vertical-align:middle;
  box-shadow:0 0 0 0 rgba(143,196,106,.7);
  animation:presencePulse 2.2s infinite;
}
@keyframes presencePulse{
  0%   { box-shadow:0 0 0 0 rgba(143,196,106,.55); }
  70%  { box-shadow:0 0 0 6px rgba(143,196,106,0); }
  100% { box-shadow:0 0 0 0 rgba(143,196,106,0); }
}

/* Inline anchor links inside message bodies — gold underline so URLs
   stand out from regular text without screaming. */
.msg-link{
  color:var(--gold);text-decoration:underline;
  text-decoration-color:rgba(201,168,76,.5);
  text-underline-offset:2px;word-break:break-word;
}
.msg-link:hover{text-decoration-color:var(--gold);}
.msg-bubble.mine .msg-link{color:#f1e3b4;text-decoration-color:rgba(241,227,180,.55);}
.msg-bubble.mine .msg-link:hover{text-decoration-color:#f1e3b4;}

/* Link preview cards — stack under the message body, one per detected
   URL (capped at 3 in data.js). Compact horizontal card with thumb
   on the left and site/title/description on the right. */
.msg-link-preview{
  display:flex;gap:.7rem;
  margin-top:.55rem;padding:.55rem .65rem;
  background:rgba(201,168,76,.08);
  border:1px solid rgba(201,168,76,.25);
  border-left:3px solid var(--gold);
  border-radius:8px;
  text-decoration:none;color:inherit;
  max-width:480px;overflow:hidden;
  transition:background .15s ease,border-color .15s ease;
}
.msg-link-preview:hover{
  background:rgba(201,168,76,.14);
  border-color:rgba(201,168,76,.45);
}
.msg-link-preview + .msg-link-preview{margin-top:.4rem;}
.msg-bubble.mine .msg-link-preview{
  background:rgba(255,255,255,.08);
  border-color:rgba(255,255,255,.18);
  border-left-color:#f1e3b4;
}
.msg-bubble.mine .msg-link-preview:hover{background:rgba(255,255,255,.14);}
.msg-link-preview-img{
  width:72px;height:72px;flex-shrink:0;
  object-fit:cover;border-radius:5px;
  background:rgba(0,0,0,.15);
}
.msg-link-preview-body{
  display:flex;flex-direction:column;gap:.15rem;
  min-width:0;flex:1;
}
.msg-link-preview-site{
  font-family:'Josefin Sans',sans-serif;
  font-size:.62rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--muted);
}
.msg-bubble.mine .msg-link-preview-site{color:rgba(255,255,255,.7);}
.msg-link-preview-title{
  font-weight:600;font-size:.88rem;line-height:1.3;
  color:var(--ink);
  overflow:hidden;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.msg-bubble.mine .msg-link-preview-title{color:#fff;}
.msg-link-preview-desc{
  font-size:.78rem;line-height:1.35;color:var(--muted);
  overflow:hidden;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.msg-bubble.mine .msg-link-preview-desc{color:rgba(255,255,255,.78);}

/* Emoji picker popup */
.msg-react-picker{
  position:absolute;top:-44px;
  background:var(--card);border:1px solid var(--gold-dim);
  border-radius:20px;padding:.32rem .4rem;
  display:flex;gap:.15rem;z-index:10;
  box-shadow:0 4px 16px rgba(0,0,0,.4);
}
.msg-row.mine .msg-react-picker{right:.4rem;}
.msg-row.theirs .msg-react-picker{left:.4rem;}
.msg-react-picker button{
  background:none;border:none;font-size:1.05rem;cursor:pointer;
  padding:.18rem .3rem;line-height:1;border-radius:50%;
  transition:transform .12s,background .12s;
}
.msg-react-picker button:hover{transform:scale(1.25);background:rgba(201,168,76,.12);}

/* Reaction chips below bubble */
.msg-reactions{
  display:flex;flex-wrap:wrap;gap:.25rem;
  margin-top:.3rem;
}
.msg-react-chip{
  background:var(--rich);border:1px solid var(--border);
  display:inline-flex;align-items:center;gap:.25rem;
  font-size:.78rem;padding:.15rem .42rem;cursor:pointer;
  border-radius:14px;line-height:1;color:var(--cream-dim);
  transition:all .15s;font-family:inherit;
}
.msg-react-chip:hover{border-color:var(--gold-dim);}
.msg-react-chip.active{
  background:rgba(201,168,76,.14);border-color:var(--gold);color:var(--gold-light);
}
.msg-react-emoji{font-size:.95rem;line-height:1;}
.msg-react-count{font-family:'Josefin Sans',sans-serif;font-size:.62rem;font-weight:500;}

/* Read receipts */
.msg-receipt-row{margin-top:.2rem;}
.msg-receipt{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted);
}
.msg-receipt.read{color:var(--accent-success);}
.msg-receipt.partial{color:var(--gold-dim);}

/* Reply quote inside bubble */
.msg-reply-quote{
  background:rgba(0,0,0,.18);border-left:2px solid var(--gold);
  padding:.4rem .55rem;margin-bottom:.4rem;
  font-size:.82rem;
}
.msg-bubble.mine .msg-reply-quote{background:rgba(0,0,0,.28);border-left-color:#fff;}
.msg-reply-quote-head{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);margin-bottom:.18rem;
}
.msg-bubble.mine .msg-reply-quote-head{color:rgba(255,255,255,.85);}
.msg-reply-quote-body{
  color:var(--cream-dim);font-style:italic;line-height:1.4;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.msg-bubble.mine .msg-reply-quote-body{color:#fff;}

/* Reply quote preview in the compose form */
/* "Replying to X" preview pinned above the reply textarea. Bold
   gold-tinted treatment so it's unmissable that you're targeting a
   specific message rather than just sending a new one. */
.msg-reply-quote-preview{
  position:relative;
  background:rgba(201,168,76,.14);
  border:1px solid var(--gold-dim);
  border-left:3px solid var(--gold);
  padding:.65rem .85rem .7rem;
  margin:.5rem .8rem 0;
  font-size:.85rem;
  /* Subtle pulse on first appearance so the user notices the state change. */
  animation: msg-reply-quote-in .35s ease-out;
}
@keyframes msg-reply-quote-in {
  0%   { transform: translateY(-4px); opacity: 0; }
  100% { transform: translateY(0);    opacity: 1; }
}
.msg-reply-quote-preview .msg-reply-quote-head{
  margin-bottom:.25rem;
  font-family:'Josefin Sans',sans-serif;
  font-size:.55rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold);
}
.msg-reply-quote-preview .msg-reply-quote-body{
  color:var(--cream);font-style:italic;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  padding-right:1.8rem; /* keep clear of the close button */
}
.msg-reply-quote-cancel{
  position:absolute;top:.5rem;right:.5rem;
  width:24px;height:24px;background:transparent;
  border:1px solid var(--border);color:var(--muted);
  font-size:.95rem;line-height:1;cursor:pointer;
  border-radius:50%;
  transition:all .15s ease;
}
.msg-reply-quote-cancel:hover{color:#e05c5c;border-color:#e05c5c;}

/* When a reply is in progress, give the textarea a subtle gold border
   accent so the entire reply area visually reads as "this isn't a new
   message, you're answering one". */
.msg-reply-wrap.replying #msg-reply-body{
  border:1px solid var(--gold-dim);
  background:rgba(201,168,76,.04);
}
.msg-reply-wrap.replying #msg-reply-body:focus{
  border-color:var(--gold);
}
/* Calibri-first font stack for chat content (falls back gracefully on Mac/Linux). */
:root{
  --chat-font:'Calibri','Segoe UI',system-ui,-apple-system,'Helvetica Neue',sans-serif;
}

/* Sent (mine) vs received (theirs) bubbles — distinct background + tail. */
.msg-bubble{
  max-width:82%;padding:.75rem 1rem;
  position:relative;
  border-radius:14px 14px 14px 4px;
  background:#2a241c;
  border:1px solid rgba(201,168,76,.18);
  box-shadow:0 1px 0 rgba(0,0,0,.25);
  font-family:var(--chat-font);
}
.msg-bubble.mine{
  align-self:flex-end;
  border-radius:14px 14px 4px 14px;
  background:linear-gradient(180deg,rgba(201,168,76,.22),rgba(201,168,76,.12));
  border-color:var(--gold-dim);
}
.msg-bubble.broadcast{
  background:#1a2538;
  border-color:rgba(122,181,232,.35);
}
.msg-bubble.broadcast.mine{
  background:linear-gradient(180deg,rgba(201,168,76,.22),rgba(201,168,76,.12));
  border-color:var(--gold-dim);
}
.msg-bubble-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.14em;
  color:var(--cream-dim);text-transform:uppercase;margin-bottom:.35rem;
  display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;
}
.msg-bubble.mine .msg-bubble-meta{color:rgba(255,255,255,.75);}
.msg-bubble.mine .msg-bubble-meta strong{color:#fff;font-weight:500;}
.msg-bubble-meta strong{color:var(--gold);font-weight:500;}
.msg-bubble-time{color:inherit;opacity:.7;}
.msg-bubble-subject{
  font-family:var(--chat-font);font-weight:600;
  color:var(--cream);font-size:1rem;margin-bottom:.3rem;letter-spacing:.01em;
}
.msg-bubble.mine .msg-bubble-subject{color:#fff;}
.msg-bubble-body{
  font-family:var(--chat-font);
  color:var(--cream);font-size:.97rem;line-height:1.55;white-space:pre-wrap;
  word-wrap:break-word;letter-spacing:.005em;
}
.msg-bubble.mine .msg-bubble-body{color:#fff;}
.msg-bubble.broadcast .msg-bubble-body{color:#d8e4f5;}
.msg-reply-form{
  display:grid;grid-template-columns:1fr auto;gap:.5rem;
  padding:.8rem;border-top:1px solid var(--border);background:var(--rich);
}
.msg-reply-form textarea{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.55rem .7rem;font-family:var(--chat-font);font-size:.97rem;
  outline:none;resize:vertical;min-height:42px;line-height:1.5;
}
.msg-reply-form textarea:focus{border-color:var(--gold-dim);}
.msg-readonly-note{
  padding:.8rem;border-top:1px solid var(--border);background:var(--rich);
  text-align:center;color:var(--muted);font-style:italic;font-size:.85rem;
}

/* ── Attachment UI ── */
.msg-attach-row{
  display:flex;align-items:center;gap:.6rem;padding:.5rem 0;flex-wrap:wrap;
  margin-bottom:.5rem;
}
.msg-attach-btn{
  display:inline-flex;align-items:center;gap:.4rem;
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);cursor:pointer;
  border:1px solid var(--border);padding:.4rem .7rem;
  background:var(--card);transition:all .2s;
  white-space:nowrap;
}
.msg-attach-btn:hover{border-color:var(--gold);color:var(--gold);}
.msg-attach-btn.small{font-size:.85rem;letter-spacing:0;padding:.5rem .65rem;border-radius:6px;}
.msg-attach-hint{font-size:.74rem;color:var(--muted);font-style:italic;}

.msg-attach-chips{
  display:flex;flex-direction:column;gap:.4rem;
  margin-top:.55rem;
}
.msg-attach-chip{
  display:flex;align-items:center;gap:.6rem;
  background:var(--rich);border:1px solid var(--border);
  padding:.45rem .55rem;
  position:relative;
}
.msg-attach-thumb{
  width:48px;height:48px;object-fit:cover;
  border:1px solid var(--border);flex-shrink:0;
}
.msg-attach-icon{
  width:48px;height:48px;flex-shrink:0;
  background:var(--card);border:1px solid var(--gold-dim);
  display:flex;align-items:center;justify-content:center;
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.12em;
  color:var(--gold);text-transform:uppercase;
}
.msg-attach-meta{flex:1;min-width:0;}
.msg-attach-name{
  color:var(--cream);font-size:.86rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.msg-attach-size{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  color:var(--muted);text-transform:uppercase;margin-top:.15rem;
}
.msg-attach-rm{
  background:transparent;border:1px solid var(--border);color:var(--muted);
  width:24px;height:24px;cursor:pointer;font-size:.95rem;line-height:1;
  flex-shrink:0;transition:all .15s;
}
.msg-attach-rm:hover{color:#e05c5c;border-color:#e05c5c;}

/* Inline attachments inside bubbles */
.msg-bubble-attachments{
  display:flex;flex-direction:column;gap:.4rem;
  margin-top:.5rem;
}
.msg-bubble-image-link{
  display:block;line-height:0;
}
.msg-bubble-image{
  max-width:280px;max-height:200px;width:100%;
  border:1px solid rgba(255,255,255,.1);border-radius:6px;
  display:block;
}
.msg-bubble.mine .msg-bubble-image{border-color:rgba(0,0,0,.2);}
.msg-bubble-file{
  display:flex;align-items:center;gap:.55rem;
  background:rgba(0,0,0,.18);border:1px solid rgba(255,255,255,.1);
  padding:.5rem .65rem;text-decoration:none;
  transition:background .15s;
}
.msg-bubble.mine .msg-bubble-file{
  background:rgba(0,0,0,.12);border-color:rgba(0,0,0,.2);
}
.msg-bubble-file:hover{background:rgba(0,0,0,.28);}
.msg-bubble-file .msg-attach-name{color:inherit;}
.msg-bubble.mine .msg-bubble-file .msg-attach-name{color:#fff;}
.msg-bubble.mine .msg-bubble-file .msg-attach-size{color:rgba(255,255,255,.7);}

/* Reply form with attachment row */
.msg-reply-wrap{border-top:1px solid var(--border);background:var(--rich);}
.msg-reply-attach-row{
  display:flex;align-items:center;gap:.55rem;
  padding:.5rem .8rem 0;flex-wrap:wrap;
}
.msg-reply-att-preview{flex:1;min-width:0;}
.msg-reply-att-preview .msg-attach-chips{margin-top:0;flex-direction:row;flex-wrap:wrap;}
.msg-reply-att-preview .msg-attach-chip{padding:.3rem .4rem;}
.msg-reply-att-preview .msg-attach-thumb,
.msg-reply-att-preview .msg-attach-icon{width:32px;height:32px;font-size:.5rem;}

.msg-reply-form{margin-top:.4rem;}

/* Compact TO DO block on Today landing */
.todo-block{display:flex;flex-direction:column;gap:.5rem;}
.todo-row{
  display:grid;grid-template-columns:auto 1fr auto;gap:.85rem;align-items:center;
  background:var(--rich);border:1px solid var(--border);
  padding:.75rem 1rem;cursor:pointer;text-align:left;
  font-family:var(--chat-font);transition:all .15s;
  width:100%;
}
.todo-row:hover{border-color:var(--gold-dim);background:rgba(201,168,76,.05);}
/* Green when complete with no flags */
.todo-row.todo-done{
  background:rgba(95,160,90,.12);
  border-color:rgba(143,196,106,.55);
}
.todo-row.todo-done:hover{
  background:rgba(95,160,90,.18);
  border-color:#8fc46a;
}
/* Red when any item is flagged for redo */
.todo-row.todo-flagged{
  background:rgba(224,92,92,.14);
  border-color:rgba(224,92,92,.55);
}
.todo-row.todo-flagged:hover{
  background:rgba(224,92,92,.2);
  border-color:#e05c5c;
}
.todo-check{
  width:24px;height:24px;flex-shrink:0;
  border:1.5px solid var(--gold-dim);background:transparent;
  display:flex;align-items:center;justify-content:center;
  color:var(--gold);font-size:.95rem;font-family:'Josefin Sans',sans-serif;
}
.todo-row.todo-done .todo-check{
  background:linear-gradient(135deg,#5a8a3e,#3f6428);
  border-color:#5a8a3e;color:#fff;
}
.todo-row.todo-partial .todo-check{
  border-color:var(--gold);color:var(--gold);
  background:rgba(201,168,76,.12);
}
.todo-label{display:flex;flex-direction:column;gap:.18rem;min-width:0;}
.todo-title{
  font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);
  font-size:1rem;line-height:1.2;
}
.todo-status{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);
}
.todo-row.todo-done .todo-check{
  background:linear-gradient(135deg,#5a8a3e,#3f6428);
  border-color:#5a8a3e;color:#fff;
}
.todo-row.todo-partial .todo-check{
  border-color:var(--gold);color:var(--gold);
  background:rgba(201,168,76,.12);
}
.todo-row.todo-flagged .todo-check{
  background:linear-gradient(135deg,#c4453f,#8e2a26);
  border-color:#c4453f;color:#fff;
}
.todo-row.todo-done .todo-status{color:var(--accent-success);}
.todo-row.todo-open .todo-status{color:var(--accent-warn);}
.todo-row.todo-flagged .todo-status{color:var(--accent-danger);}
.todo-arrow{color:var(--gold);font-size:1rem;flex-shrink:0;}
.todo-row:hover .todo-arrow{color:var(--gold-light);}
.todo-row.todo-flagged .todo-arrow{color:var(--accent-danger);}
.todo-row.todo-flagged:hover .todo-arrow{color:var(--accent-danger);}

/* Inline checklist card on the Today landing */
.checklist-card-head{
  display:flex;justify-content:space-between;align-items:flex-start;
  gap:.6rem;flex-wrap:wrap;margin-bottom:.75rem;
}
.checklist-card-title{
  font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);
  font-size:1.18rem;line-height:1.2;
}
.checklist-card-sub{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);margin-top:.3rem;
}
.checklist-card-link{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold);text-decoration:none;
  align-self:flex-end;
}
.checklist-card-link:hover{color:var(--gold-light);}

/* ── Checklists (opening / closing) ── */
.checklist-progress{
  height:4px;background:var(--rich);border:1px solid var(--border);
  margin:0 0 1rem;overflow:hidden;
}
.checklist-progress-bar{
  height:100%;background:linear-gradient(90deg,var(--gold-dim),var(--gold));
  transition:width .3s;
}
.checklist-items{
  background:var(--card);border:1px solid var(--border);
  display:flex;flex-direction:column;
}
.checklist-item{
  display:grid;grid-template-columns:auto 1fr auto;gap:.85rem;align-items:start;
  padding:.85rem 1rem;
  border-bottom:1px solid rgba(201,168,76,.06);
  transition:background .15s;
}
/* Admin variant — adds a leading column for the drag handle. Without
   this override, the dragHandle steals the 1fr column from the body
   and the label gets pushed to the right with FLAG/× wrapping below. */
.checklist-item.has-drag{
  grid-template-columns:auto auto 1fr auto;
}
.checklist-item:last-child{border-bottom:none;}
.checklist-item:hover{background:rgba(201,168,76,.03);}
.checklist-item.done{background:rgba(143,196,106,.04);}
.checklist-item.flagged{background:rgba(224,92,92,.08);}
.checklist-check{
  width:26px;height:26px;flex-shrink:0;
  border:1.5px solid var(--gold-dim);background:transparent;
  color:var(--gold);font-size:1rem;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:all .15s;margin-top:.05rem;
  font-family:'Josefin Sans',sans-serif;
}
.checklist-check:hover{border-color:var(--gold);background:rgba(201,168,76,.08);}
.checklist-item.done .checklist-check{
  background:linear-gradient(135deg,#5a8a3e,#3f6428);
  border-color:#5a8a3e;color:#fff;
}
.checklist-item.flagged .checklist-check{
  background:rgba(224,92,92,.18);border-color:#e05c5c;color:#e05c5c;
}
.checklist-body{min-width:0;}
.checklist-label{
  color:var(--cream);font-size:.95rem;line-height:1.4;
  font-family:var(--chat-font);
}
.checklist-item.done .checklist-label{color:var(--cream-dim);}
.checklist-item.flagged .checklist-label{color:var(--accent-danger);text-decoration:line-through;text-decoration-color:rgba(224,92,92,.5);}
.checklist-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);margin-top:.4rem;
  display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;
}
.checklist-flag-pill{
  background:rgba(224,92,92,.18);border:1px solid rgba(224,92,92,.5);color:#e05c5c;
  padding:.1rem .35rem;letter-spacing:.13em;
}
.checklist-flag-note{
  margin-top:.45rem;padding:.55rem .65rem;
  background:rgba(224,92,92,.1);border-left:3px solid #e05c5c;
  font-size:.82rem;color:#f5b5b5;font-family:var(--chat-font);
  line-height:1.45;
}
.checklist-flag-note strong{color:#fff;font-weight:500;font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;text-transform:uppercase;}
.checklist-admin-actions{
  display:flex;gap:.3rem;align-items:flex-start;flex-shrink:0;
}
.checklist-admin-add{
  display:grid;grid-template-columns:1fr auto;gap:.5rem;
  margin-top:1rem;
}

/* Per-item staff notes */
.checklist-notes{
  margin-top:.5rem;display:flex;flex-direction:column;gap:.4rem;
}
.checklist-note{
  background:var(--accent-info-bg);
  border-left:3px solid var(--accent-info);
  padding:.5rem .65rem;position:relative;
}
.checklist-note-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--accent-info);margin-bottom:.25rem;
}
.checklist-note-meta strong{color:var(--accent-info);font-weight:500;}
.checklist-note-body{
  font-family:var(--chat-font);color:var(--cream);font-size:.88rem;
  line-height:1.5;white-space:pre-wrap;
}
.checklist-note-rm{
  position:absolute;top:.3rem;right:.3rem;
  width:22px;height:22px;background:transparent;border:1px solid var(--border);
  color:var(--muted);font-size:.85rem;line-height:1;cursor:pointer;
  opacity:.5;transition:all .15s;
}
.checklist-note:hover .checklist-note-rm{opacity:1;}
.checklist-note-rm:hover{color:#e05c5c;border-color:#e05c5c;}
.checklist-add-note-btn{
  display:inline-flex;align-items:center;gap:.3rem;
  margin-top:.5rem;background:none;
  border:1px dashed var(--border);color:var(--gold-dim);
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;padding:.32rem .6rem;cursor:pointer;
  transition:all .15s;
}
.checklist-add-note-btn:hover{border-color:var(--gold);color:var(--gold);background:rgba(201,168,76,.04);}

/* End-of-shift wrap-up notes (closing list) */
.shift-notes-section{
  margin-top:1.6rem;padding-top:1.4rem;
  border-top:1px solid var(--border);
}
.shift-notes-head{margin-bottom:.9rem;}
.shift-notes-title{
  font-family:'Playfair Display',serif;font-style:italic;font-weight:400;
  color:var(--cream);font-size:1.18rem;margin:.2rem 0 .35rem;
}
.shift-notes-sub{color:var(--cream-dim);font-size:.85rem;}
.shift-notes-list{
  display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;
}
.shift-note{
  background:var(--card);border:1px solid var(--border);
  border-left:3px solid var(--gold);
  padding:.7rem .85rem;position:relative;
}
.shift-note-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);margin-bottom:.32rem;
}
.shift-note-meta strong{color:var(--gold);font-weight:500;}
.shift-note-body{
  font-family:var(--chat-font);color:var(--cream);font-size:.93rem;
  line-height:1.55;white-space:pre-wrap;
}
.shift-notes-form{
  display:grid;grid-template-columns:1fr auto;gap:.5rem;align-items:end;
}
.shift-notes-form textarea{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.6rem .8rem;font-family:var(--chat-font);font-size:.95rem;
  outline:none;resize:vertical;min-height:64px;line-height:1.5;
}
.shift-notes-form textarea:focus{border-color:var(--gold-dim);}
@media (max-width:580px){
  .shift-notes-form{grid-template-columns:1fr;}
  .checklist-admin-add{grid-template-columns:1fr;}
}
.checklist-admin-add input{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.6rem .8rem;font-family:var(--chat-font);font-size:.95rem;
  outline:none;transition:border-color .2s;
}
.checklist-admin-add input:focus{border-color:var(--gold-dim);}
@media (max-width:580px){
  .checklist-item{grid-template-columns:auto 1fr;}
  .checklist-admin-actions{grid-column:1/-1;justify-self:end;margin-top:.4rem;}
  .checklist-admin-add{grid-template-columns:1fr;}
}

/* Inbox sub-tab badges */
.inbox-subtabs{margin-bottom:1.2rem;}
.inbox-subtabs .ftab .ntab-badge{margin-left:.4rem;}

/* Make the compose modal's Subject + Message inputs match the chat font so what you type matches what you read */
#msg-new-modal #msg-new-subj,
#msg-new-modal #msg-new-body{
  font-family:var(--chat-font);font-size:.97rem;line-height:1.5;
}

/* Recipient picker (multi-select chips) */
.recipients-picker{
  display:flex;flex-wrap:wrap;gap:.4rem;
  background:var(--black);border:1px solid var(--border);
  padding:.55rem;
}
.recipient-chip{
  display:inline-flex;align-items:center;gap:.4rem;
  background:var(--rich);border:1px solid var(--border);color:var(--cream-dim);
  padding:.42rem .7rem;cursor:pointer;transition:all .15s;
  font-family:var(--chat-font);font-size:.88rem;
}
.recipient-chip:hover{border-color:var(--gold-dim);color:var(--cream);}
.recipient-chip.selected{
  background:linear-gradient(180deg,rgba(201,168,76,.22),rgba(201,168,76,.12));
  border-color:var(--gold);color:#fff;
}
.recipient-chip.selected::before{
  content:'✓';color:var(--gold);font-weight:700;margin-right:.15rem;
}
.recipient-chip.selected:hover{border-color:var(--gold-light);}
.recipient-name{font-weight:500;}
.recipient-role{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);opacity:.85;
}
.recipient-chip.selected .recipient-role{color:rgba(255,255,255,.7);}
.recipients-count{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);margin-left:.4rem;
}
.recipients-hint{
  font-size:.74rem;color:var(--muted);font-style:italic;margin-top:.4rem;
}

/* Compose modal */
.msg-mode-toggle{
  display:flex;border:1px solid var(--border);margin-bottom:1rem;
}
.role-toggle-btn{
  flex:1;background:none;border:none;color:var(--muted);
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;padding:.6rem;cursor:pointer;transition:all .2s;
}
.role-toggle-btn.active{background:var(--gold);color:var(--black);}

/* Sched flags + conflict + per-day edit button */
.sched-flag{
  display:inline-block;font-family:'Josefin Sans',sans-serif;
  font-size:.42rem;letter-spacing:.2em;text-transform:uppercase;
  padding:.1rem .35rem;margin-left:.3rem;
  border:1px solid var(--gold-dim);color:var(--gold);background:rgba(201,168,76,.06);
}
.sched-flag.add{border-color:var(--accent-info);color:var(--accent-info);background:var(--accent-info-bg);}
.sched-flag.skipped{border-color:#888;color:#aaa;background:rgba(170,170,170,.08);}
.sched-flag.released{border-color:var(--accent-warn);color:var(--accent-warn);background:var(--accent-warn-bg);}
.sched-shift.released .who{text-decoration:line-through;text-decoration-color:rgba(232,201,122,.5);text-decoration-thickness:1px;}
.sched-shift.conflict{border-left-color:#e05c5c;background:rgba(224,92,92,.08);}

/* Per-employee color coding on schedule shifts (overrides default gold accent) */
.sched-shift{border-left-color:var(--emp-color, var(--gold-dim));}
.sched-shift .who{color:var(--emp-color, var(--gold));}
/* Conflict + released visual states still take precedence over the personal color */
.sched-shift.conflict{border-left-color:#e05c5c;}
.sched-shift.released{border-left-color:var(--accent-warn);}
.sched-conflict-note{
  display:block;font-size:.65rem;color:#e05c5c;margin-top:.15rem;
  font-style:italic;
}
.sched-edit-btn{
  display:block;margin-top:.65rem;width:100%;
  background:none;border:1px solid var(--border);color:var(--gold-dim);
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;padding:.4rem;cursor:pointer;transition:all .2s;
}
.sched-edit-btn:hover{border-color:var(--gold);color:var(--gold);}

/* Day editor modal */
.day-ed-shift{
  background:var(--rich);border:1px solid var(--border);
  padding:.85rem 1rem;margin-bottom:.6rem;
}
.day-ed-shift.conflict{border-left:3px solid #e05c5c;}
/* Skipped state: greyed out + strikethrough on the person + role + time
   so the row reads as inactive at a glance. The Restore button stays
   full-strength so the eye finds it. */
.day-ed-shift.skipped{
  opacity:.55;
  border-left:3px solid #888;
}
.day-ed-shift.skipped .day-ed-who,
.day-ed-shift.skipped .day-ed-role,
.day-ed-shift.skipped .day-ed-time{
  text-decoration:line-through;
  text-decoration-color:rgba(255,255,255,.35);
}
.day-ed-shift.skipped .day-ed-acts{opacity:1;}
.day-ed-line{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;}
.day-ed-who{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:1rem;}
.day-ed-role{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);}
.day-ed-time{color:var(--cream-dim);font-size:.85rem;}
.day-ed-warn{color:#e05c5c;font-size:.78rem;font-style:italic;margin-top:.35rem;}
.day-ed-acts{display:flex;gap:.4rem;margin-top:.55rem;flex-wrap:wrap;}
.day-ed-sub-form{
  display:grid;grid-template-columns:1fr 1fr auto auto;gap:.4rem;
  margin-top:.7rem;padding-top:.7rem;border-top:1px solid var(--border);
}
.day-ed-sub-form input[type=text]{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.45rem .65rem;font-family:'Cormorant Garamond',serif;font-size:.9rem;
  outline:none;
}
.day-ed-sub-form input[type=text]:focus{border-color:var(--gold-dim);}
@media (max-width:680px){
  .day-ed-sub-form{grid-template-columns:1fr 1fr;}
  .day-ed-sub-form button{grid-column:auto;}
}
.day-ed-offs{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.9rem;}
.day-ed-off-pill{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.15em;
  text-transform:uppercase;color:#f5b5b5;
  background:rgba(139,32,32,.18);border:1px solid rgba(224,92,92,.4);
  padding:.22rem .55rem;
}

/* Pickup cards (staff + admin) */
.pickup-card{
  background:var(--card);border:1px solid var(--border);
  padding:1rem 1.2rem;margin-bottom:.75rem;
}
.pickup-head{
  display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;
  flex-wrap:wrap;
}
.pickup-title{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:1.05rem;}
.pickup-meta{font-size:.82rem;color:var(--cream-dim);margin-top:.2rem;}
.pickup-reason{
  display:inline-block;font-family:'Josefin Sans',sans-serif;
  font-size:.45rem;letter-spacing:.18em;text-transform:uppercase;
  border:1px solid var(--border);color:var(--muted);
  padding:.14rem .42rem;margin-left:.4rem;
}
.pickup-reason.auto{border-color:var(--accent-warn);color:var(--accent-warn);background:var(--accent-warn-bg);}
.pickup-body{margin-top:.85rem;padding-top:.7rem;border-top:1px solid rgba(201,168,76,.08);}
.pickup-released{font-size:.74rem;color:var(--muted);margin-bottom:.6rem;}
.pickup-applicants-label{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold-dim);margin-bottom:.4rem;
}
.pickup-applicant{
  display:flex;justify-content:space-between;align-items:center;gap:.6rem;
  padding:.55rem .8rem;background:var(--rich);border:1px solid var(--border);
  margin-bottom:.4rem;flex-wrap:wrap;
}
.pickup-applicant.assigned{border-color:var(--accent-success-bd);background:var(--accent-success-bg);}

/* My Schedule rows */
.my-sched-day{
  background:var(--card);border:1px solid var(--border);
  padding:.8rem 1.1rem;margin-bottom:.6rem;
}
.my-sched-date{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gold);margin-bottom:.5rem;
}
.my-sched-row{
  display:flex;justify-content:space-between;align-items:center;gap:.8rem;
  padding:.45rem 0;border-top:1px solid rgba(201,168,76,.07);flex-wrap:wrap;
}
.my-sched-row:first-of-type{border-top:none;}
.my-sched-role{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:.95rem;}
.my-sched-time{font-size:.83rem;color:var(--cream-dim);margin-top:.15rem;}

/* Inbox items */
.inbox-item{
  display:grid;grid-template-columns:14px 1fr auto;gap:.8rem;align-items:start;
  background:var(--card);border:1px solid var(--border);
  padding:.85rem 1rem;margin-bottom:.5rem;
}
.inbox-item.read{opacity:.65;}
.inbox-dot{
  width:8px;height:8px;border-radius:50%;background:transparent;
  margin-top:.45rem;
}
.inbox-dot.unread{background:var(--gold);box-shadow:0 0 6px rgba(201,168,76,.6);}
.inbox-title{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:1rem;line-height:1.2;}
.inbox-text{font-size:.85rem;color:var(--cream-dim);margin-top:.25rem;line-height:1.55;}
.inbox-time{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;color:var(--muted);text-transform:uppercase;margin-top:.4rem;}
.inbox-acts{display:flex;flex-direction:column;gap:.3rem;}

/* Tab badge (count chip on nav buttons) */
.ntab-badge{
  display:inline-block;
  background:var(--gold);color:var(--black);
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.05em;
  padding:.08rem .3rem;margin-left:.3rem;border-radius:8px;
  min-width:14px;text-align:center;
}

/* Shift editor (admin Schedule panel) */
.shift-day-group{
  padding:.7rem 0;
  border-bottom:1px solid rgba(201,168,76,.08);
}
.shift-day-group:last-child{border-bottom:none;}
.shift-day-head{
  display:flex;align-items:center;gap:.7rem;
  padding:.45rem 0 .7rem;flex-wrap:wrap;
}
.shift-day-name{
  font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);
  font-size:1.05rem;
}
.shift-day-count{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold-dim);
  border:1px solid var(--border);padding:.18rem .45rem;
}
.shift-day-head .abtn{margin-left:auto;}
.shift-day-empty{
  font-size:.82rem;color:var(--muted);font-style:italic;padding:.4rem 0;
}
.shift-editor-row{
  display:grid;
  grid-template-columns:130px 1.2fr 130px 1fr auto;
  gap:.55rem;align-items:center;
  padding:.55rem 0;
  border-top:1px solid rgba(201,168,76,.05);
}
.shift-editor-row:first-of-type{border-top:none;}
@media (max-width:880px){
  .shift-editor-row{grid-template-columns:1fr 1fr;}
  .shift-editor-row [data-shift-rmv]{grid-column:1/-1;justify-self:end;}
}
.shift-editor-row select,
.shift-editor-row input[type=text]{
  background:var(--black);border:1px solid var(--border);color:var(--cream);
  padding:.5rem .65rem;
  font-family:'Cormorant Garamond',serif;font-size:.92rem;
  outline:none;transition:border-color .2s;width:100%;
}
.shift-editor-row select:focus,
.shift-editor-row input[type=text]:focus{border-color:var(--gold-dim);}
.shift-editor-row select option{background:var(--dark);}

/* Public careers — empty state */
.role-empty-card{
  background:var(--card);border:1px solid var(--border);
  padding:2.5rem 2rem;text-align:center;
  max-width:560px;margin:0 auto 2rem;
}
.role-empty-icon{
  font-size:1.6rem;color:var(--gold);margin-bottom:.7rem;
}
.role-empty-title{
  font-family:'Playfair Display',serif;font-style:italic;font-weight:400;
  color:var(--cream);font-size:1.4rem;margin-bottom:.6rem;
}
.role-empty-body{
  color:var(--cream-dim);font-size:.95rem;line-height:1.65;
  max-width:440px;margin:0 auto;
}

/* ── EVENT DETAIL ── */
.event-header-block{text-align:center;margin-bottom:1.6rem;}
.event-detail-title{
  font-family:'Playfair Display',serif;font-style:italic;font-weight:400;
  color:var(--cream);font-size:clamp(1.9rem,4.5vw,2.6rem);line-height:1.15;
  margin:.5rem 0 .6rem;
}
.event-when-line{
  font-family:'Cormorant Garamond',serif;font-size:1rem;color:var(--cream-dim);
}
.event-flyer-wrap{
  display:flex;justify-content:center;
  margin:0 0 2rem;
}
.event-flyer{
  display:block;width:100%;max-width:460px;height:auto;
  border:1px solid var(--border);background:var(--rich);
}

.event-detail-grid{display:flex;flex-direction:column;gap:1.6rem;}
.event-meta-block{background:var(--card);border:1px solid var(--border);padding:1.2rem 1.5rem;}
.event-meta-row{display:grid;grid-template-columns:120px 1fr;gap:1rem;padding:.6rem 0;border-bottom:1px solid rgba(201,168,76,.08);}
.event-meta-row:last-child{border-bottom:none;}
@media (max-width:580px){.event-meta-row{grid-template-columns:1fr;gap:.2rem;}}
.event-meta-lbl{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-dim);align-self:start;padding-top:.18rem;}
.event-meta-val{color:var(--cream);font-size:.95rem;line-height:1.55;}
.event-body{font-size:1rem;line-height:1.8;color:var(--cream-dim);padding:.4rem 0;}
.event-body p{margin-bottom:.7rem;}
.event-body a{color:var(--gold);text-decoration:underline;}

/* Ticket CTA */
.ticket-cta-wrap{
  background:linear-gradient(180deg,rgba(201,168,76,.08),rgba(201,168,76,.02));
  border:1px solid var(--border-hi);padding:1.6rem 1.8rem;text-align:center;
}
.ticket-meta{display:flex;align-items:baseline;justify-content:center;gap:1.4rem;margin-bottom:1rem;flex-wrap:wrap;}
.ticket-price{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:1.9rem;}
.ticket-price span{font-family:'Cormorant Garamond',serif;font-style:normal;font-size:.9rem;color:var(--cream-dim);margin-left:.2rem;}
.ticket-stock{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-dim);}
.ticket-btn{font-size:.7rem!important;padding:1rem 2.4rem!important;letter-spacing:.28em!important;}
.ticket-fineprint{font-size:.82rem;color:var(--cream-dim);font-style:italic;margin-top:1rem;max-width:480px;margin-left:auto;margin-right:auto;}
.ticket-cta.sold-out{
  background:rgba(139,32,32,.12);border:1px solid rgba(224,92,92,.4);
  padding:1.4rem;text-align:center;
  font-family:'Playfair Display',serif;font-style:italic;color:#f5b5b5;font-size:1.4rem;
  letter-spacing:.05em;
}

/* ── CHECKOUT ── */
.checkout-grid{display:grid;grid-template-columns:1fr 1.3fr;gap:1.4rem;}
@media (max-width:780px){.checkout-grid{grid-template-columns:1fr;}}
.checkout-summary,.checkout-form{background:var(--card);border:1px solid var(--border);padding:1.4rem 1.6rem;}
.checkout-row{display:flex;justify-content:space-between;padding:.4rem 0;font-size:.9rem;color:var(--cream-dim);border-bottom:1px solid rgba(201,168,76,.08);}
.checkout-row:last-child{border-bottom:none;}
.qty-control{margin:1.2rem 0 1rem;}
.qty-control label{font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold-dim);display:block;margin-bottom:.5rem;}
.qty-buttons{display:flex;align-items:center;gap:.7rem;}
.qty-btn{
  background:var(--rich);border:1px solid var(--border);color:var(--gold);
  width:36px;height:36px;font-size:1.1rem;cursor:pointer;transition:all .15s;
}
.qty-btn:hover{border-color:var(--gold-dim);background:var(--card);}
.qty-num{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:1.3rem;min-width:28px;text-align:center;}
.qty-hint{font-size:.74rem;color:var(--muted);margin-top:.4rem;}
.checkout-total{
  display:flex;justify-content:space-between;align-items:baseline;
  margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border);
  font-family:'Josefin Sans',sans-serif;font-size:.62rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--cream-dim);
}
.total-amount{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:1.7rem;letter-spacing:0;}
.stripe-card-mock{
  background:var(--rich);border:1px solid var(--border);padding:1rem 1.2rem;
}
.stripe-badge{
  display:flex;align-items:center;gap:.4rem;
  font-family:Helvetica,Arial,sans-serif;font-size:.78rem;color:var(--cream-dim);
  margin-top:.7rem;justify-content:flex-end;
}
.checkout-meta{text-align:center;margin-top:.9rem;font-size:.78rem;}
.demo-notice{
  background:rgba(132,106,27,.15);border:1px solid rgba(201,168,76,.3);
  padding:.85rem 1.1rem;font-size:.82rem;color:#e8c97a;margin-top:1.4rem;
}
.demo-notice code{color:var(--gold);font-family:'Josefin Sans',sans-serif;font-size:.78rem;}

/* ── CONFIRMATION ── */
.confirm-hero{text-align:center;padding:1.6rem 0 2rem;}
.confirm-check{
  display:inline-flex;align-items:center;justify-content:center;
  width:62px;height:62px;border-radius:50%;
  background:rgba(143,196,106,.2);border:1px solid rgba(143,196,106,.5);
  color:#8fc46a;font-size:1.7rem;margin-bottom:.6rem;
}
.tickets-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.1rem;margin-bottom:2.2rem;}
.ticket-card{
  background:var(--card);border:1px solid var(--border-hi);padding:1.3rem 1.4rem;text-align:center;
  position:relative;
}
.ticket-card::before,.ticket-card::after{
  content:'';position:absolute;width:18px;height:18px;border-radius:50%;
  background:var(--black);top:50%;transform:translateY(-50%);
}
.ticket-card::before{left:-10px;}
.ticket-card::after{right:-10px;}
.ticket-num{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.25em;color:var(--gold);text-transform:uppercase;margin-bottom:.4rem;}
.ticket-event{font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);font-size:1rem;line-height:1.2;}
.ticket-when{font-size:.8rem;color:var(--cream-dim);margin:.25rem 0 .9rem;}
.ticket-qr-wrap{padding:.6rem;background:var(--cream);display:inline-block;border:1px solid var(--gold-dim);}
.ticket-qr-wrap canvas{display:block;}
.ticket-id{font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.18em;color:var(--gold);margin-top:.7rem;text-transform:uppercase;}
.ticket-name{font-size:.85rem;color:var(--cream-dim);margin-top:.3rem;}
.email-preview-wrap{margin-top:1.4rem;padding-top:1.4rem;border-top:1px solid var(--border);}
.email-preview{border:1px solid var(--border);overflow:hidden;}
.email-stub-note{color:var(--gold-dim);font-style:italic;}

@media print{
  .site-nav,.site-footer,.email-preview-wrap,#print-btn,.btn-g{display:none!important;}
  body{background:#fff;color:#000;}
  .ticket-card{break-inside:avoid;border:1px solid #000;}
}

/* ── CHECK-IN SCANNER ── */
.scanner-wrap{
  background:var(--card);border:1px solid var(--border);padding:1.2rem;margin-bottom:1.2rem;
}
.scanner-frame{
  position:relative;background:var(--black);
  border:1px solid var(--border);overflow:hidden;
  aspect-ratio:1;max-width:480px;margin:0 auto;
}
.scanner-frame video{width:100%;height:100%;object-fit:cover;display:block;}
.scanner-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;}
.scanner-reticle{
  width:65%;aspect-ratio:1;
  border:2px solid var(--gold);
  box-shadow:0 0 0 9999px rgba(0,0,0,.45);
  position:relative;
}
.scanner-reticle::before,.scanner-reticle::after{
  content:'';position:absolute;width:24px;height:24px;border:3px solid var(--gold-light);
}
.scanner-reticle::before{top:-3px;left:-3px;border-right:none;border-bottom:none;}
.scanner-reticle::after{bottom:-3px;right:-3px;border-left:none;border-top:none;}
/* Scanner hint — sits BELOW the camera frame (not overlaid inside)
   so it doesn't crowd the gold reticle and stays readable against
   the panel background in both themes. */
.scanner-hint{
  display:block;
  margin:.85rem auto 0;
  max-width:480px;
  text-align:center;
  font-family:'Cormorant Garamond',serif;
  font-size:.95rem;line-height:1.45;
  color:var(--cream);
  background:var(--card);
  border:1px solid var(--border);
  border-left:3px solid var(--gold);
  padding:.65rem 1rem;
}
.scanner-actions{display:flex;gap:.7rem;justify-content:center;margin-top:1rem;}
.scanner-manual{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border);}
.scanner-manual summary{
  cursor:pointer;font-family:'Josefin Sans',sans-serif;font-size:.55rem;
  letter-spacing:.22em;text-transform:uppercase;color:var(--gold-dim);
}
.scanner-manual summary:hover{color:var(--gold);}

.result-panel{
  border:1px solid var(--border);background:var(--card);
  padding:1.4rem 1.6rem;text-align:center;margin-bottom:1.2rem;
  transition:all .2s;
}
.result-empty{color:var(--muted);font-style:italic;}
.result-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:54px;height:54px;border-radius:50%;font-size:1.6rem;font-weight:bold;
  margin-bottom:.5rem;
}
.result-title{font-family:'Playfair Display',serif;font-style:italic;font-size:1.4rem;color:var(--cream);margin-bottom:.3rem;}
.result-body{font-size:.92rem;color:var(--cream-dim);}
.result-body code{font-family:'Josefin Sans',sans-serif;background:var(--rich);padding:.15rem .45rem;color:var(--gold);font-size:.82rem;}

.result-success{border-color:var(--accent-success-bd);background:var(--accent-success-bg);}
.result-success .result-icon{background:var(--accent-success-bg);color:var(--accent-success);border:1px solid var(--accent-success-bd);}
.result-warn{border-color:var(--accent-warn-bd);background:var(--accent-warn-bg);}
.result-warn .result-icon{background:var(--accent-warn-bg);color:var(--accent-warn);border:1px solid var(--accent-warn-bd);}
.result-error{border-color:rgba(224,92,92,.5);background:rgba(224,92,92,.06);}
.result-error .result-icon{background:rgba(224,92,92,.18);color:#e05c5c;border:1px solid rgba(224,92,92,.5);}

.result-meta{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border);text-align:left;display:flex;flex-direction:column;gap:.4rem;font-size:.85rem;}
.result-meta div{display:grid;grid-template-columns:90px 1fr;gap:.7rem;}
.result-meta span{color:var(--gold-dim);font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;text-transform:uppercase;align-self:center;}
.result-meta strong{color:var(--cream);font-weight:400;}

.recent-wrap{background:var(--card);border:1px solid var(--border);padding:1.1rem 1.3rem;}
.recent-row{display:flex;justify-content:space-between;align-items:center;padding:.55rem 0;border-bottom:1px solid rgba(201,168,76,.06);}
.recent-row:last-child{border-bottom:none;}

/* ── Image Cropper Modal ── */
.cropper-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.78);
  z-index:9999;display:flex;align-items:center;justify-content:center;
  padding:1rem;
}
.cropper-modal{
  background:var(--card);border:1px solid var(--border);
  padding:1.1rem 1.1rem 1rem;max-width:380px;width:100%;
  display:flex;flex-direction:column;gap:.85rem;
  box-shadow:0 18px 48px rgba(0,0,0,.5);
}
.cropper-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.6rem;}
.cropper-title{
  font-family:'Cormorant Garamond',serif;font-size:1.35rem;color:var(--cream);
  letter-spacing:.02em;
}
.cropper-hint{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--muted);margin-top:.18rem;
}
.cropper-close{
  background:transparent;border:1px solid var(--border);color:var(--muted);
  width:28px;height:28px;font-size:1.1rem;line-height:1;cursor:pointer;
}
.cropper-close:hover{border-color:var(--gold);color:var(--gold);}
.cropper-stage{
  position:relative;overflow:hidden;background:#000;
  margin:0 auto;cursor:grab;user-select:none;touch-action:none;
}
.cropper-stage:active{cursor:grabbing;}
.cropper-img{
  position:absolute;top:0;left:0;
  max-width:none;max-height:none;
  pointer-events:none;user-select:none;-webkit-user-drag:none;
}
.cropper-frame{
  position:absolute;inset:0;pointer-events:none;
  box-shadow:0 0 0 9999px rgba(0,0,0,.0);
  border:1px solid rgba(201,168,76,.85);
  outline:1px dashed rgba(255,255,255,.22);outline-offset:-1px;
}
.cropper-controls{display:flex;align-items:center;gap:.6rem;}
.cropper-zoom-label{display:flex;align-items:center;gap:.5rem;flex:1;}
.cropper-zoom-label span{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);
}
.cropper-zoom{flex:1;accent-color:var(--gold);}
.cropper-actions{display:flex;justify-content:flex-end;gap:.5rem;}

/* Profile photo upload size hint */
.profile-photo-upload-hint{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted);margin-top:.35rem;text-align:center;
}

/* ── Admin Menu editor ── */
.menu-row{
  background:var(--card);border:1px solid var(--border);
  padding:.95rem 1.1rem;margin-bottom:.7rem;
  display:flex;gap:1rem;flex-wrap:wrap;align-items:flex-end;
}
.menu-row-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:.5rem .9rem;flex:1;min-width:260px;
}
.menu-row-actions{display:flex;gap:.4rem;align-items:flex-end;}
.menu-row-actions .abtn{padding:.45rem .7rem;}

/* ── Admin Site Images editor ── */
.site-img-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;
}
.site-img-card{
  background:var(--card);border:1px solid var(--border);
  padding:.85rem;display:flex;flex-direction:column;gap:.65rem;
}
.site-img-meta .site-img-label{
  font-family:'Cormorant Garamond',serif;font-size:1.15rem;color:var(--cream);font-style:italic;
}
.site-img-meta .site-img-hint{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);margin-top:.18rem;
}
.site-img-preview{
  background:var(--black);border:1px solid var(--border);
  height:140px;display:flex;align-items:center;justify-content:center;overflow:hidden;
  /* min-width:0 lets the preview shrink inside grid columns instead of
     forcing the column wider than its allotted width */
  min-width:0;
}
.site-img-preview img,
.site-img-preview video{
  width:100%;height:100%;object-fit:cover;display:block;
  /* max-width is the safety net for Firefox/Safari that occasionally
     ignore width:100% on <video> when the natural size is large */
  max-width:100%;
}
.site-img-empty{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted);
}
.site-img-actions{display:flex;gap:.4rem;}
.site-img-actions .abtn{
  flex:1;text-align:center;
  /* Thicker buttons in the Site Images panel — easier to hit, more
     visually balanced against the larger preview tile above. */
  padding:.55rem .8rem;
  font-size:.58rem;
  letter-spacing:.14em;
}

/* Inner halves of the Home Hero combo card. Same vertical rhythm as
   a standalone .site-img-card so the layout reads as a paired set. */
.site-img-card-inner{
  display:flex;flex-direction:column;gap:.65rem;
  min-width:0;
}

/* ── Branded "Choose File" wrapper for resume upload (and any opt-in file input) ── */
.file-picker{
  display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;
  background:var(--rich);border:1px dashed var(--border-hi);
  padding:.7rem .9rem;
  transition:border-color .2s, background .2s;
}
.file-picker:hover{border-color:var(--gold);background:rgba(201,168,76,.05);}
.file-picker input[type=file]{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0;
}
.file-picker-btn{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.18em;
  text-transform:uppercase;background:var(--gold);color:var(--black);
  padding:.55rem 1rem;cursor:pointer;display:inline-block;border:none;
  transition:background .2s;
}
.file-picker:hover .file-picker-btn{background:var(--gold-light, #e8c97a);}
.file-picker-name{
  font-family:var(--chat-font);color:var(--cream-dim);font-size:.88rem;
  font-style:italic;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.file-picker-name.empty{color:var(--muted);}
.file-picker-clear{
  background:transparent;border:1px solid var(--border);color:var(--muted);
  width:24px;height:24px;font-size:.85rem;line-height:1;cursor:pointer;
}
.file-picker-clear:hover{color:#e05c5c;border-color:#e05c5c;}

/* ── Loyalty join page (public sign-up) ── */
.join-card{
  background:var(--card);border:1px solid var(--gold-dim);
  padding:1.6rem 1.5rem;margin-bottom:1.4rem;
}
.join-rewards-card{
  background:rgba(201,168,76,.04);border:1px solid var(--border);
  padding:1.4rem 1.5rem;
}
.join-rewards-list{display:flex;flex-direction:column;gap:.55rem;}
.join-reward-row{
  display:flex;align-items:center;gap:.85rem;
  padding:.55rem .65rem;background:var(--black);
  border-left:2px solid var(--gold-dim);
}
.join-reward-num{
  font-family:'Playfair Display',serif;font-size:1.5rem;color:var(--gold);
  min-width:42px;text-align:right;line-height:1;
}
.join-reward-text{
  font-family:var(--chat-font);color:var(--cream);font-size:.95rem;
}

/* ── Loyalty pass (guest-facing public page) ── */
.pass-page{
  min-height:100vh;background:#0d0b09;
  display:flex;align-items:center;justify-content:center;padding:1.2rem;
}
.pass-frame{width:100%;max-width:420px;}
.pass-card{
  background:linear-gradient(155deg,#1a1410 0%,#0c0907 100%);
  border:1px solid var(--gold-dim);
  padding:1.5rem 1.4rem 1.6rem;
  box-shadow:0 18px 48px rgba(0,0,0,.7);
}
.pass-head{display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:.85rem;}
.pass-logo img{height:54px;display:block;}
.pass-eyebrow{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.28em;
  text-transform:uppercase;color:var(--gold);margin-top:.65rem;
}
.pass-name{
  font-family:'Cormorant Garamond',serif;font-size:1.6rem;font-style:italic;color:var(--cream);
  text-align:center;margin-top:.5rem;
}
.pass-email{
  font-family:var(--chat-font);font-size:.85rem;color:var(--cream-dim);
  text-align:center;margin-bottom:1.1rem;
}
.pass-qr-wrap{
  /* Transparent card with a soft gold frame. The QR's "light" squares
     are rendered in the page background color (#0a0806) so the QR
     visually floats on the dark backdrop without any actual transparency. */
  background:transparent;
  padding:1.4rem 1rem 1.1rem;
  display:flex;flex-direction:column;align-items:center;gap:.7rem;
  border:1px solid rgba(201,168,76,.25);
}
.pass-qr{display:flex;justify-content:center;}
.pass-qr canvas, .pass-qr img{display:block;}
.pass-qr-hint{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cream-dim);
}
.pass-stat{
  display:flex;flex-direction:column;align-items:center;margin:1.2rem 0 .8rem;
}
.pass-stat-num{
  font-family:'Playfair Display',serif;font-size:3rem;color:var(--gold);line-height:1;
}
.pass-stat-lbl{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--cream-dim);margin-top:.25rem;
}
.pass-rewards-banner{
  background:rgba(201,168,76,.14);border:1px solid var(--gold);
  padding:.85rem 1rem;margin-bottom:1rem;
}
.pass-rewards-head{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);margin-bottom:.4rem;font-weight:700;
}
.pass-rewards-banner ul{margin:0;padding-left:1.1rem;color:var(--cream);font-size:.92rem;line-height:1.5;}
.pass-rewards-banner ul strong{color:var(--gold);}
.pass-rewards-hint{margin-top:.5rem;color:var(--cream-dim);font-size:.78rem;font-style:italic;}

/* ── Tickets tab on the loyalty pass ──
   Each event groups its tickets in a panel; each ticket renders as a
   distinct card with metadata on the left and an action on the right.
   Read-only states (checked in, sent) replace the button with a
   colored status label. */
.pass-ticket-event{
  margin-bottom:1.5rem;
}
.pass-ticket-event:last-child{margin-bottom:0;}
.pass-ticket-event-head{
  padding:.95rem 1.1rem 1rem;
  background:rgba(201,168,76,.05);
  border:1px solid var(--gold-dim);
  border-bottom:none;
}
.pass-ticket-event-title{
  font-family:'Italiana',serif;font-size:1.3rem;color:var(--cream);
  line-height:1.2;margin-bottom:.25rem;
}
.pass-ticket-event-date{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);
}
.pass-ticket-event-count{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--muted);margin-top:.45rem;
}
.pass-ticket-list{
  border:1px solid var(--gold-dim);
  border-top:none;
}
.pass-ticket-card{
  display:flex;align-items:center;gap:.7rem;
  padding:.75rem 1rem;
  border-top:1px solid var(--border);
  background:var(--card);
}
.pass-ticket-card:first-child{border-top:none;}
.pass-ticket-meta{flex:1;min-width:0;}
.pass-ticket-num{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);margin-bottom:.18rem;
}
.pass-ticket-name{
  font-family:'Cormorant Garamond',serif;font-size:1.05rem;color:var(--cream);
  line-height:1.3;
}
.pass-ticket-sub{
  color:var(--muted);font-size:.78rem;font-family:'Cormorant Garamond',serif;
  margin-top:.1rem;
  /* truncate long emails so the layout doesn't push the status off the row */
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.pass-ticket-status{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;flex-shrink:0;
}
.pass-ticket-btn{
  font-size:.6rem;padding:.55rem .9rem;letter-spacing:.16em;flex-shrink:0;
}
.pass-ticket-you-tag{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-dim);margin-left:.35rem;
}
.pass-progress{margin-bottom:1.2rem;}
.pass-progress-bar{
  height:6px;background:rgba(201,168,76,.12);border:1px solid var(--gold-dim);
  margin-bottom:.55rem;
}
.pass-progress-fill{
  height:100%;background:linear-gradient(90deg,#c9a84c,#e8c97a);transition:width .3s ease;
}
.pass-progress-text{
  font-family:var(--chat-font);font-size:.88rem;color:var(--cream);text-align:center;
}
/* Save to my phone — single neutral CTA */
.pass-save{margin-bottom:.85rem;}
.pass-save-btn{
  width:100%;background:linear-gradient(135deg,rgba(201,168,76,.18),rgba(201,168,76,.06));
  color:var(--cream);border:1px solid var(--gold);
  padding:1rem 1.1rem;cursor:pointer;
  display:flex;align-items:center;gap:.85rem;
  text-align:left;transition:all .15s;
}
.pass-save-btn:hover{background:linear-gradient(135deg,rgba(201,168,76,.26),rgba(201,168,76,.1));}
.pass-save-icon{font-size:1.7rem;line-height:1;flex-shrink:0;}
.pass-save-title{
  display:block;
  font-family:'Josefin Sans',sans-serif;font-size:.65rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);font-weight:700;
}
.pass-save-sub{
  display:block;margin-top:.25rem;
  font-family:var(--chat-font);font-size:.85rem;color:var(--cream-dim);
  text-transform:none;letter-spacing:0;line-height:1.35;
}

/* Save instructions modal */
.pass-modal-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.78);z-index:9999;
  display:flex;align-items:center;justify-content:center;padding:1rem;
}
.pass-modal{
  background:var(--card);border:1px solid var(--gold);
  padding:1.6rem 1.4rem 1.3rem;max-width:420px;width:100%;
  position:relative;box-shadow:0 18px 48px rgba(0,0,0,.6);
}
.pass-modal h3{
  font-family:'Playfair Display',serif;font-style:italic;color:var(--cream);
  font-size:1.3rem;margin-bottom:1rem;padding-right:1.5rem;
}
.pass-modal-close{
  position:absolute;top:.7rem;right:.85rem;
  background:transparent;border:1px solid var(--border);color:var(--muted);
  width:30px;height:30px;font-size:1.15rem;line-height:1;cursor:pointer;
}
.pass-modal-close:hover{border-color:var(--gold);color:var(--gold);}
.pass-modal-steps{
  list-style:none;padding:0;margin:0 0 1rem;
  display:flex;flex-direction:column;gap:.7rem;
}
.pass-modal-steps li{
  display:flex;gap:.7rem;align-items:flex-start;
  font-family:var(--chat-font);color:var(--cream);font-size:.95rem;line-height:1.45;
}
.pass-modal-num{
  flex-shrink:0;width:28px;height:28px;border-radius:50%;
  background:var(--gold);color:var(--black);
  display:flex;align-items:center;justify-content:center;
  font-family:'Josefin Sans',sans-serif;font-weight:700;font-size:.85rem;
}
.pass-modal-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;border:1px solid var(--gold-dim);
  vertical-align:middle;margin:0 .15rem;color:var(--gold);
  border-radius:4px;
}
.pass-modal-foot{
  font-family:var(--chat-font);font-size:.82rem;color:var(--cream-dim);
  font-style:italic;line-height:1.5;
  border-top:1px solid var(--border);padding-top:.75rem;
}
.pass-foot{text-align:center;margin-top:.5rem;}
.pass-foot a{color:var(--gold-dim);font-size:.82rem;text-decoration:none;}
.pass-foot a:hover{color:var(--gold);}
.pass-error{
  text-align:center;padding:2rem 1.5rem;background:var(--card);border:1px solid var(--border);
}
.pass-error h2{font-family:'Playfair Display',serif;color:var(--cream);font-size:1.25rem;margin:.85rem 0 .55rem;}
.pass-error p{color:var(--cream-dim);font-size:.92rem;margin-bottom:1rem;}

/* ── Loyalty scanner result + reward toast ── */
.scan-result{
  background:var(--card);border:1px solid var(--border);
  padding:1rem 1.1rem;
}
.scan-result.ok{border-color:var(--gold);}
.scan-result.err{border-color:#e05c5c;}
.scan-result.warn{border-color:#e8c97a;}
.scan-result-head{
  font-family:'Cormorant Garamond',serif;font-size:1.2rem;font-style:italic;color:var(--cream);
  margin-bottom:.4rem;
}
.scan-result.ok .scan-result-head{color:var(--gold);}
.scan-result.err .scan-result-head{color:#f3b9b9;}
.scan-result-body{font-family:var(--chat-font);color:var(--cream-dim);font-size:.92rem;line-height:1.5;}
.scan-reward-banner{
  background:rgba(201,168,76,.14);border:1px solid var(--gold);
  color:var(--gold);padding:.55rem .75rem;margin:.55rem 0;
  font-family:var(--chat-font);font-size:.92rem;
}
.scan-log-line{padding:.3rem .5rem;border-left:2px solid var(--border);}
.scan-log-line.log-ok{border-left-color:var(--gold-dim);color:var(--cream-dim);}
.scan-log-line.log-err{border-left-color:#e05c5c;color:#f3b9b9;}

.reward-toast{
  position:fixed;bottom:1.2rem;left:50%;transform:translate(-50%,1rem);
  background:linear-gradient(135deg,#3a3527,#1f1a14);border:1px solid var(--gold);
  padding:1rem 1.2rem;max-width:380px;width:calc(100% - 2rem);
  font-family:var(--chat-font);color:var(--cream);
  opacity:0;pointer-events:none;transition:opacity .25s, transform .25s;
  box-shadow:0 14px 36px rgba(0,0,0,.65);z-index:9999;
}
.reward-toast.show{opacity:1;transform:translate(-50%,0);}
.reward-toast-head{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);font-weight:700;margin-bottom:.3rem;
}
.reward-toast-body{font-size:.92rem;line-height:1.5;}

/* ── Admin Loyalty panel ── */
.loy-visit-badge{
  display:inline-block;background:rgba(201,168,76,.14);border:1px solid var(--gold-dim);
  color:var(--gold);font-family:'Josefin Sans',sans-serif;font-weight:700;
  padding:.2rem .55rem;font-size:.7rem;
}
.loy-reward-pill{
  display:inline-block;background:var(--gold);color:var(--black);
  padding:.1rem .4rem;font-size:.55rem;letter-spacing:.1em;font-weight:700;
  margin-left:.4rem;font-family:'Josefin Sans',sans-serif;
}
.loy-reward-banner{
  background:rgba(201,168,76,.14);border:1px solid var(--gold);
  padding:.95rem 1.1rem;margin-bottom:1.2rem;
}
.loy-reward-banner-head{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);font-weight:700;margin-bottom:.55rem;
}
.loy-reward-banner ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.45rem;}
.loy-reward-banner li{
  display:flex;justify-content:space-between;align-items:center;gap:.6rem;flex-wrap:wrap;
  color:var(--cream);font-size:.92rem;
}
.loy-reward-banner li strong{color:var(--gold);}
.loy-profile-card{
  background:var(--card);border:1px solid var(--border);
  padding:1.4rem 1.5rem;
}
.loy-profile-head{
  display:flex;justify-content:space-between;align-items:flex-start;
  gap:1rem;flex-wrap:wrap;margin-bottom:1rem;
}
.loy-bigvisit{
  background:linear-gradient(135deg,rgba(201,168,76,.18),rgba(201,168,76,.06));
  border:1px solid var(--gold-dim);padding:.6rem 1rem;text-align:center;
}
.loy-bigvisit-num{font-family:'Playfair Display',serif;font-size:2.2rem;color:var(--gold);line-height:1;}
.loy-bigvisit-lbl{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.18em;text-transform:uppercase;color:var(--cream-dim);margin-top:.25rem;}
.loy-progress-block{margin:1rem 0;}
.loy-progress-bar{height:6px;background:rgba(201,168,76,.12);border:1px solid var(--gold-dim);}
.loy-progress-fill{height:100%;background:linear-gradient(90deg,#c9a84c,#e8c97a);transition:width .3s ease;}
.loy-progress-text{font-family:var(--chat-font);color:var(--cream);font-size:.9rem;margin-top:.55rem;text-align:center;}
.loy-profile-meta{
  display:grid;grid-template-columns:1fr 1fr 1fr;gap:.85rem;
  background:rgba(0,0,0,.2);padding:.85rem 1rem;
  font-family:var(--chat-font);
}
.loy-profile-meta > div{display:flex;flex-direction:column;gap:.2rem;}
.loy-meta-label{font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-dim);}
.loy-visit-log{display:flex;flex-direction:column;gap:.35rem;}
.loy-visit-line{
  display:flex;gap:.85rem;align-items:baseline;
  padding:.4rem .55rem;border-left:2px solid var(--gold-dim);
  font-family:var(--chat-font);
}
.loy-visit-stamp{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.12em;
  text-transform:uppercase;color:var(--gold-dim);min-width:90px;
}
.loy-visit-action{color:var(--cream-dim);font-size:.88rem;}
@media (max-width:680px){
  .loy-profile-meta{grid-template-columns:1fr;}
}

/* ── Floor Plan visual editor ── */
:root{
  --fp-pill-r: 9999px;
  --fp-square-r: 4px;
}
.fp-canvas-wrap{
  display:flex;flex-direction:column;gap:.7rem;
  background:var(--card);border:1px solid var(--border);
  padding:.85rem;
}
.fp-canvas-toolbar{
  display:flex;justify-content:space-between;align-items:center;
  flex-wrap:wrap;gap:.6rem;
}
.fp-canvas-hint{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-dim);
}
.fp-canvas-stage{
  position:relative;width:100%;
  /* 16:10 ratio room — gives wider tables more visual breathing room */
  aspect-ratio: 16 / 10;
  min-height:340px;
  background:
    linear-gradient(0deg, rgba(201,168,76,.04) 1px, transparent 1px) 0 0 / 100% 6.66%,
    linear-gradient(90deg, rgba(201,168,76,.04) 1px, transparent 1px) 0 0 / 6.66% 100%,
    radial-gradient(ellipse at 50% 30%, rgba(201,168,76,.04), transparent 70%),
    var(--black);
  border:1px solid var(--gold-dim);
  overflow:hidden;
  user-select:none;
}
.fp-table{
  position:absolute;
  background:var(--rich);
  border:1.5px solid var(--gold-dim);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  cursor:grab;
  transition:border-color .12s, box-shadow .12s;
  box-shadow:0 2px 6px rgba(0,0,0,.35);
  font-family:var(--chat-font);
  text-align:center;
  padding:.2rem;
  box-sizing:border-box;
  touch-action:none;
  overflow:hidden;
  /* IMPORTANT: flex containers default to `min-height:auto`, which lets
     the box grow taller than its declared height to fit content. When
     the content (Table label + capacity caption) is taller than the
     aspect-ratio square, the table stretches into a vertical oval. We
     force min-height:0 so aspect-ratio is the final word on the box
     shape; the `overflow:hidden` above clips any content that doesn't
     fit, which is exactly what we want on narrow screens. */
  min-height:0;
  min-width:0;
}
.fp-table:hover{border-color:var(--gold);}
.fp-table.fp-dragging{cursor:grabbing;border-color:var(--gold);box-shadow:0 6px 18px rgba(0,0,0,.55);}
.fp-table.fp-selected{
  border-color:var(--gold);
  box-shadow:0 0 0 2px rgba(201,168,76,.35), 0 6px 18px rgba(0,0,0,.55);
}

/* Per-kind shape + background tint
   - Booths render as crisp squares (the stored width drives both dimensions)
   - Tables render as perfect circles (aspect-ratio:1 forces a pixel-square box,
     border-radius:50% then makes a circle regardless of canvas aspect ratio)
   - Bar keeps its long pill shape via stored w/h */
.fp-table-booth{
  background:linear-gradient(135deg,#3a3527,#2a2418);
  border-radius:var(--fp-square-r);
  aspect-ratio:1 / 1;
  height:auto !important; /* width determines size; height auto-derives */
}
.fp-table-table{
  border-radius:50%;
  aspect-ratio:1 / 1;
  height:auto !important;
}
.fp-table-bar{
  background:linear-gradient(135deg,#1f1814,#16110d);
  border-radius:50%;
  aspect-ratio:1 / 1;
  height:auto !important;
}
/* Walk-in only seats — visually distinct from reservable ones */
.fp-table.fp-walkin{
  border-style:dashed;
  border-color:rgba(201,168,76,.4);
  opacity:.78;
  background:linear-gradient(135deg,#16110d,#0e0a08);
}
.fp-table.fp-walkin .fp-table-label{color:var(--cream-dim);}
.fp-table.fp-walkin .fp-table-cap{color:rgba(201,168,76,.55);}
.fp-table.fp-walkin:hover{opacity:1;border-color:var(--gold-dim);}

.fp-table-label{
  font-family:'Cormorant Garamond',serif;font-style:italic;
  color:var(--cream);font-size:1rem;line-height:1.1;
}
.fp-table-cap{
  font-family:'Josefin Sans',sans-serif;font-size:.45rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-dim);margin-top:.15rem;
}
/* Hide tiny captions on very small tables to keep them readable */
.fp-table[style*="width: 9%"] .fp-table-cap,
.fp-table[style*="width: 10%"] .fp-table-cap{display:none;}

/* On phones the canvas + every table inside it gets much smaller, so a
   1rem label is too big to fit inside the circle once we honor the
   aspect-ratio (no more vertical oval expansion to accomodate text).
   Shrink the label + drop the capacity caption to keep tables legible. */
@media (max-width:720px){
  .fp-canvas-stage .fp-table-label{
    font-size:.7rem;line-height:1.05;
  }
  .fp-canvas-stage .fp-table-cap{
    font-size:.4rem;letter-spacing:.1em;
  }
  /* Tables under ~12% width on a phone genuinely can't hold a 2-word
     label like "Table 101" plus a caption — hide the caption to save
     room for the label itself. */
  .fp-canvas-stage .fp-table[style*="width: 1"] .fp-table-cap,
  .fp-canvas-stage .fp-table[style*="width: 9"] .fp-table-cap{display:none;}
}

/* Bar stools are tiny by design — compact label, no caption visible */
.fp-table-bar .fp-table-label{
  font-family:'Josefin Sans',sans-serif;font-style:normal;
  font-size:.7rem;font-weight:700;color:var(--gold);letter-spacing:.04em;
}
.fp-table-bar .fp-table-cap{display:none;}

/* Light-mode override: booths (and bars) keep their permanent dark
   gradient backgrounds in both themes because they're meant to
   visually contrast with the lighter tables and walk-in seats. But
   .fp-table-label uses `var(--cream)`, which flips to near-black in
   light mode — putting near-black text on the dark booth gradient
   makes the label invisible. Force the label + caption back to light
   tones inside dark-background tables in light mode. */
html[data-theme="light"] .fp-table-booth .fp-table-label,
html[data-theme="light"] .fp-table-bar .fp-table-label,
html[data-brand-theme="hawthorne"] .fp-table-booth .fp-table-label,
html[data-brand-theme="hawthorne"] .fp-table-bar .fp-table-label,
html[data-brand-theme="custom"] .fp-table-booth .fp-table-label,
html[data-brand-theme="custom"] .fp-table-bar .fp-table-label{
  color:#f5efe2;
}
html[data-theme="light"] .fp-table-booth .fp-table-cap,
html[data-brand-theme="hawthorne"] .fp-table-booth .fp-table-cap,
html[data-brand-theme="custom"] .fp-table-booth .fp-table-cap{
  color: var(--gold);
}

/* Edit panel — slides in below the canvas on narrow screens, beside on wide */
.fp-edit-panel{
  background:var(--card);border:1px solid var(--gold-dim);
  padding:1rem 1.1rem;margin-top:1rem;
  max-width:520px;
}
.fp-edit-head{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:.85rem;padding-bottom:.6rem;border-bottom:1px solid var(--border);
}
.fp-edit-title{
  font-family:'Cormorant Garamond',serif;font-size:1.25rem;font-style:italic;color:var(--gold);
}
.fp-edit-close{
  background:transparent;border:1px solid var(--border);color:var(--muted);
  width:26px;height:26px;font-size:1.05rem;line-height:1;cursor:pointer;
}
.fp-edit-close:hover{border-color:var(--gold);color:var(--gold);}
.fp-edit-body{display:flex;flex-direction:column;gap:.6rem;}
.fp-edit-row{display:grid;grid-template-columns:1fr 1fr;gap:.6rem;}
.fp-edit-actions{display:flex;justify-content:space-between;gap:.5rem;margin-top:.4rem;}
.fp-edit-toggle{
  display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.5rem .65rem;
  background:rgba(201,168,76,.05);border:1px solid var(--border);
  padding:.55rem .75rem;cursor:pointer;
}
.fp-edit-toggle input[type=checkbox]{accent-color:var(--gold);width:18px;height:18px;cursor:pointer;}
.fp-edit-toggle-label{
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cream);
}
.fp-edit-toggle-hint{
  grid-column:2;color:var(--cream-dim);font-size:.78rem;font-style:italic;
}
.fp-list-reservable{
  display:flex;align-items:center;gap:.5rem;cursor:pointer;
  font-family:var(--chat-font);font-size:.85rem;color:var(--cream-dim);
}
.fp-list-reservable input[type=checkbox]{accent-color:var(--gold);width:16px;height:16px;cursor:pointer;}
.fp-list-reservable span{font-family:var(--chat-font);}

/* ── Staff Floor view (read-only canvas, drag-to-reassign) ── */
.fp-canvas-readonly{position:relative;}
/* Read-only tables can be clicked + dragged but not visually edited (no resize handles, etc.) */
.fp-table-readonly{cursor:pointer;}
.fp-table-readonly:hover{
  border-color:var(--gold);
  box-shadow:0 6px 14px rgba(0,0,0,.45);
}
/* Occupied = a booking exists tonight on this table (any time slot).
   The state-* class below tints it further (gold for Reserved, green for
   Seated, orange for Finishing). Open = the default unstyled appearance.
   Occupied tables also get overflow:visible so the corner badges (cover
   count, floating seated-time pill) can extend outside the table border
   without being clipped. Empty tables keep overflow:hidden so a long
   label can't spill onto neighboring tables — they don't have badges
   anyway so there's nothing to lose. */
.fp-table.fp-occupied{
  background:linear-gradient(135deg,rgba(201,168,76,.32),rgba(201,168,76,.18));
  border-color:var(--gold);
  box-shadow:0 0 0 1px rgba(201,168,76,.35), 0 4px 12px rgba(0,0,0,.4);
  overflow:visible;
}
.fp-table.fp-occupied.fp-table-bar{
  background:linear-gradient(135deg,rgba(201,168,76,.42),rgba(201,168,76,.22));
}

/* ── Tier-1 floor states ───────────────────────────────────────────────
   Color identity for at-a-glance scanning of the room:
     Open       — default (cream/border, no tint)
     Reserved   — gold (matches the existing occupied appearance)
     Seated     — green (party is dining)
     Finishing  — orange w/ subtle pulse (cross the 75-min threshold)
   The state-* class always sits on top of the kind-* class so it can
   override the kind-specific occupied gradients above. */
.fp-table.fp-table-state-seated{
  background:linear-gradient(135deg,rgba(76,170,98,.34),rgba(76,170,98,.18));
  border-color:#62b67a;
  box-shadow:0 0 0 1px rgba(76,170,98,.4), 0 4px 12px rgba(0,0,0,.4);
}
.fp-table.fp-table-state-finishing{
  background:linear-gradient(135deg,rgba(232,140,60,.36),rgba(232,140,60,.18));
  border-color:#e88c3c;
  box-shadow:0 0 0 1px rgba(232,140,60,.45), 0 4px 12px rgba(0,0,0,.4);
  animation:fp-finishing-pulse 2.4s ease-in-out infinite;
}
@keyframes fp-finishing-pulse{
  0%,100%{box-shadow:0 0 0 1px rgba(232,140,60,.45), 0 4px 12px rgba(0,0,0,.4);}
  50%   {box-shadow:0 0 0 2px rgba(232,140,60,.7),  0 6px 18px rgba(232,140,60,.25);}
}

/* Cover badge — small number circle in the top-right corner. Shows the
   party size so a host can see "table 4 has a 6-top coming up" without
   reading the booking text. */
.fp-cover-badge{
  position:absolute;top:-6px;right:-6px;
  min-width:18px;height:18px;padding:0 5px;
  background:var(--card);border:1px solid var(--gold);color:var(--gold);
  border-radius:50%;
  font-family:'Josefin Sans',sans-serif;font-size:.6rem;font-weight:700;
  display:flex;align-items:center;justify-content:center;
  pointer-events:none;z-index:2;
}
.fp-table-state-seated    .fp-cover-badge{border-color:#62b67a;color:#9be0ad;}
.fp-table-state-finishing .fp-cover-badge{border-color:#e88c3c;color:#f5c79a;}

/* Live timer badge — "23m" on seated/finishing tables. Floats ABOVE the
   table (bottom:100%) and centered horizontally so it stays visible
   even on small tables (bar stools, 2-tops) where the previous
   corner-anchored placement got hidden behind adjacent tables.
   z-index above the cover badge so it always sits on top in overlaps. */
.fp-timer-badge{
  position:absolute;
  bottom:100%; left:50%;
  transform: translateX(-50%);
  margin-bottom:5px;
  padding:2px 9px;
  background:rgba(15,15,15,.92);
  border:1px solid rgba(98,182,122,.55);
  color:#d8f0e0;
  font-family:'Josefin Sans',sans-serif;
  font-size:.66rem; font-weight:600;
  letter-spacing:.1em; text-transform:uppercase;
  white-space:nowrap;
  pointer-events:none;
  z-index:10;
  box-shadow:0 2px 6px rgba(0,0,0,.45);
}
/* Small downward-pointing arrow connecting the floating pill to its
   table, so the relationship is unambiguous even when tables sit close
   together on a dense floor plan. */
.fp-timer-badge::after{
  content:'';
  position:absolute;
  top:100%; left:50%;
  transform:translateX(-50%);
  border:4px solid transparent;
  border-top-color:rgba(98,182,122,.55);
}
.fp-table-state-finishing .fp-timer-badge{
  border-color:#e88c3c;
  color:#ffd2a4;
  /* Subtle pulse on finishing — adds a "look at this" cue without being
     loud. Slower than the table border pulse so they don't sync up
     and feel mechanical. */
  animation: fp-timer-pulse 2.4s ease-in-out infinite;
}
.fp-table-state-finishing .fp-timer-badge::after{
  border-top-color:#e88c3c;
}
@keyframes fp-timer-pulse{
  0%, 100% { box-shadow: 0 2px 6px rgba(0,0,0,.45); }
  50%      { box-shadow: 0 2px 10px rgba(232,140,60,.55); }
}

/* The currently-seated party name renders larger than upcoming bookings
   — it's the most important info on the table right now. */
.fp-booking-active{
  font-weight:600;font-size:.74rem;color:var(--cream);
  text-align:center;
}

/* Popover action group — keeps the two/three buttons aligned and wrapping
   nicely on narrow popovers. */
.staff-floor-booking-actions{
  display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem;align-items:center;
}
.staff-floor-seated-pill{
  display:inline-flex;align-items:center;
  padding:.22rem .55rem;
  background:rgba(76,170,98,.18);border:1px solid rgba(76,170,98,.55);color:#9be0ad;
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;
  letter-spacing:.14em;text-transform:uppercase;
}
.staff-floor-booking-active{
  background:rgba(76,170,98,.08);border-left:2px solid #62b67a;padding-left:.55rem;
}
.staff-floor-booking-departed{opacity:.6;}

/* Stacked bookings inside an occupied table */
.fp-bookings{
  display:flex;flex-direction:column;gap:.12rem;
  width:100%;padding:0 .15rem;
  font-family:var(--chat-font);
}
.fp-booking-line{
  font-size:.65rem;line-height:1.15;color:var(--cream);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.fp-booking-time{
  color:var(--gold);font-family:'Josefin Sans',sans-serif;
  font-size:.5rem;letter-spacing:.08em;text-transform:uppercase;font-weight:700;
}
.fp-booking-more{
  color:var(--gold-dim);font-style:italic;font-size:.6rem;text-align:center;
}
/* On bar stools, the booking shows the guest first name only */
.fp-table-bar.fp-occupied .fp-table-label{display:none;}
.fp-table-bar .fp-bookings{align-items:center;justify-content:center;height:100%;}
.fp-table-bar .fp-booking-line{font-size:.55rem;text-align:center;}
.fp-table-bar .fp-booking-time{display:none;}

/* Stat tiles in the floor header */
.floor-stat{
  background:var(--card);border:1px solid var(--border);
  padding:.55rem .85rem;display:flex;flex-direction:column;align-items:center;gap:.15rem;
  min-width:78px;
}
.floor-stat-num{
  font-family:'Playfair Display',serif;font-size:1.4rem;color:var(--gold);line-height:1;
}
.floor-stat-lbl{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cream-dim);
}
.floor-stat.warn{border-color:#e05c5c;}
.floor-stat.warn .floor-stat-num{color:var(--accent-danger);}

/* Toast inside the canvas wrap for reassign feedback */
.fp-floor-toast{
  position:absolute;bottom:.85rem;left:50%;transform:translate(-50%, .5rem);
  padding:.55rem 1rem;background:var(--card);border:1px solid var(--gold);
  font-family:var(--chat-font);font-size:.88rem;color:var(--cream);
  opacity:0;pointer-events:none;transition:opacity .2s, transform .2s;
  box-shadow:0 8px 22px rgba(0,0,0,.55);
  z-index:30;max-width:80%;text-align:center;
}
.fp-floor-toast.show{opacity:1;transform:translate(-50%, 0);}
.fp-floor-toast.err{border-color:#e05c5c;color:var(--accent-danger);}
.fp-floor-toast.ok{border-color:var(--gold);color:var(--gold);}

/* Staff click popover (reuses .move-table-popover styles + extras) */
.staff-floor-popover{min-width:300px;max-width:360px;}
.staff-floor-bookings{display:flex;flex-direction:column;}
.staff-floor-booking{
  padding:.65rem .85rem;border-bottom:1px solid rgba(201,168,76,.06);
  display:flex;flex-direction:column;gap:.3rem;
}
.staff-floor-booking:last-child{border-bottom:none;}
.staff-floor-booking-head{
  display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap;
}
.staff-floor-booking-time{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold);font-weight:700;
}
.staff-floor-booking-name{
  font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;color:var(--cream);
}
.staff-floor-booking-party{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-dim);
}
.staff-floor-booking-meta{
  font-family:var(--chat-font);font-size:.8rem;color:var(--cream-dim);
}
.staff-floor-booking-notes{font-style:italic;color:var(--cream);}
.staff-floor-booking .abtn{align-self:flex-start;margin-top:.2rem;}

/* ── Reservation capacity / table-assignment badges + banner (admin) ── */
.cap-badge{
  display:inline-block;
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.14em;
  text-transform:uppercase;padding:.18rem .45rem;line-height:1.1;
  border:1px solid var(--border);
}
.cap-badge.cap-over{
  color:#fff;background:#a52a2a;border-color:#a52a2a;
  font-weight:700;
}

/* Table column on the admin reservations table */
.res-table-cell{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;}
.res-table-pill{
  display:inline-block;background:var(--rich);border:1px solid var(--gold-dim);
  color:var(--gold);font-family:'Josefin Sans',sans-serif;font-size:.6rem;
  letter-spacing:.14em;text-transform:uppercase;padding:.22rem .55rem;
}
tr.res-row-unassigned td{background:rgba(224,92,92,.08);}
tr.res-row-unassigned:hover td{background:rgba(224,92,92,.14);}

/* Move-table popover */
.move-table-popover{
  position:absolute;z-index:140;background:var(--card);
  border:1px solid var(--gold-dim);min-width:260px;max-width:320px;
  box-shadow:0 14px 36px rgba(0,0,0,.55);
  font-family:var(--chat-font);
}
.move-table-head{
  display:flex;justify-content:space-between;align-items:center;
  padding:.7rem .85rem;border-bottom:1px solid var(--border);
}
.move-table-title{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold);
}
.move-table-close{
  background:transparent;border:1px solid var(--border);color:var(--muted);
  width:24px;height:24px;font-size:1rem;line-height:1;cursor:pointer;
}
.move-table-close:hover{border-color:var(--gold);color:var(--gold);}
.move-table-meta{
  padding:.55rem .85rem;color:var(--cream-dim);font-size:.82rem;
  border-bottom:1px solid var(--border);
}
.move-table-list{display:flex;flex-direction:column;}
.move-table-empty{padding:1rem;color:var(--muted);font-style:italic;text-align:center;font-size:.85rem;}
.move-table-opt{
  display:flex;justify-content:space-between;align-items:center;
  padding:.55rem .85rem;background:transparent;border:none;
  border-bottom:1px solid rgba(201,168,76,.06);cursor:pointer;width:100%;text-align:left;
  transition:background .15s;
}
.move-table-opt:hover{background:rgba(201,168,76,.08);}
.move-table-opt-label{
  font-family:'Cormorant Garamond',serif;font-size:1rem;color:var(--cream);font-style:italic;
}
.move-table-opt-meta{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--gold-dim);
}
.move-table-clear{margin:.5rem .85rem .7rem;}
.move-table-walkin-toggle{
  display:flex;align-items:center;gap:.5rem;cursor:pointer;
  padding:.45rem .85rem;border-bottom:1px solid var(--border);
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-dim);
}
.move-table-walkin-toggle input[type=checkbox]{accent-color:var(--gold);width:14px;height:14px;}
.move-table-opt-walkin .move-table-opt-meta{color:var(--accent-warn);font-style:italic;}

.cap-banner-warn{
  background:var(--accent-danger-bg);border:1px solid var(--accent-danger);
  padding:.85rem 1rem;margin-bottom:1rem;
  font-family:var(--chat-font);
}
.cap-banner-head{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--accent-danger);margin-bottom:.4rem;font-weight:700;
}
.cap-banner-warn ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.3rem;}
.cap-banner-warn li{color:var(--accent-danger);font-size:.9rem;line-height:1.4;}

/* Calm informational variant — used for "awaiting table assignment" while
   tables haven't migrated to Supabase yet. Same shape as the warn banner
   but in the brand's gold rather than red. */
.cap-banner-info{
  background:rgba(201,168,76,.07);border:1px solid var(--gold-dim);
  padding:.85rem 1rem;margin-bottom:1rem;
  font-family:var(--chat-font);
}
.cap-banner-info .cap-banner-head{color:var(--gold);}
.cap-banner-info ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.3rem;}
.cap-banner-info li{color:var(--cream-dim);font-size:.9rem;line-height:1.4;}

/* ── Time-off decision form + note ── */
.to-decision{
  margin-top:.4rem;padding:.45rem .6rem;
  background:rgba(0,0,0,.22);border-left:2px solid var(--gold-dim);
  font-family:var(--chat-font);
}
.to-decision-note{color:var(--cream);font-style:italic;font-size:.88rem;line-height:1.4;}
.to-decision-by{
  font-family:'Josefin Sans',sans-serif;font-size:.5rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gold-dim);margin-top:.25rem;
}
.to-form-row td{padding:0;background:rgba(201,168,76,.04);}
.to-form{
  padding:.85rem 1rem;border-top:1px solid var(--border);
  display:flex;flex-direction:column;gap:.5rem;
}
.to-form-label{
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gold-dim);
}
.to-form-note{
  width:100%;min-height:64px;resize:vertical;
  background:var(--black);border:1px solid var(--border);
  padding:.55rem .65rem;color:var(--cream);font-family:var(--chat-font);
  font-size:.92rem;line-height:1.4;
}
.to-form-note:focus{border-color:var(--gold);outline:none;}
.to-form-actions{display:flex;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;}

/* Inline image inserted in rich-text body */
.rt-area img{max-width:100%;height:auto;display:block;margin:.4rem 0;cursor:pointer;}
.rt-area img.rt-img-selected{outline:2px solid var(--gold);outline-offset:2px;}

/* Floating image resize/align popover */
.rt-img-popover{
  position:absolute;z-index:9998;background:var(--card);
  border:1px solid var(--gold-dim);padding:.5rem .55rem;
  display:flex;flex-direction:column;gap:.3rem;
  box-shadow:0 14px 36px rgba(0,0,0,.55);
  font-family:'Josefin Sans',sans-serif;
}
.rt-img-row{display:flex;align-items:center;gap:.25rem;}
.rt-img-label{
  font-size:.5rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold-dim);min-width:36px;
}
.rt-img-btn{
  background:var(--rich);border:1px solid var(--border);color:var(--cream-dim);
  padding:.32rem .5rem;font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;
  font-family:'Josefin Sans',sans-serif;cursor:pointer;line-height:1;
}
.rt-img-btn:hover{border-color:var(--gold-dim);color:var(--gold);}
.rt-img-btn.active{background:rgba(201,168,76,.18);border-color:var(--gold);color:var(--gold);}
.rt-img-btn.danger{color:#e09090;border-color:rgba(224,144,144,.35);}
.rt-img-btn.danger:hover{background:rgba(224,90,90,.14);color:#ff9c9c;border-color:#e05c5c;}

/* ──────────────────────────────────────────────
   STRUCTURAL REFRESH — Belly-of-the-Beast-inspired
   patterns. Cinematic spacing, restrained ornament,
   sparing typographic furniture, photographic depth.
   ────────────────────────────────────────────── */

/* Cinematic hero variant — used by the new homepage. Larger, more breathing room. */
.hero-c{
  position:relative;height:calc(100vh - var(--nav-h));min-height:560px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;overflow:hidden;
}
.hero-c .hero-bg{position:absolute;inset:0;background-position:center;background-size:cover;filter:brightness(.32) saturate(.92);}
/* Video version of the hero background — same look as .hero-bg, just animated. */
.hero-c .hero-bg-video{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  filter:brightness(.32) saturate(.92);
}
.hero-c .hero-vignette{position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 35%,rgba(0,0,0,.55) 90%);}
.hero-c .hero-content{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;padding:0 1.4rem;max-width:680px;}
.hero-c .hero-content img{max-width:280px;width:62%;opacity:.95;margin-bottom:2.4rem;}
.hero-c .hero-tag-line{
  font-family:'Italiana',serif;font-weight:400;
  font-size:clamp(1.4rem,2.8vw,1.85rem);
  color:var(--cream);max-width:560px;line-height:1.35;letter-spacing:.01em;
  margin-bottom:2.8rem;
}

/* The signature "tiny gold caps with side line" — section label refresh.
   Replaces the existing .sec-label when used inside the new structural pages. */
.eyebrow{
  display:flex;align-items:center;justify-content:center;gap:.9rem;
  font-family:'Josefin Sans',sans-serif;font-size:.58rem;font-weight:300;
  letter-spacing:.42em;text-transform:uppercase;color:var(--gold);
  margin-bottom:1.4rem;
}
.eyebrow::before,.eyebrow::after{
  content:'';display:block;width:38px;height:1px;
  background:linear-gradient(90deg,transparent,var(--gold-dim));
}
.eyebrow::after{transform:scaleX(-1);}
.eyebrow.left{justify-content:flex-start;}
.eyebrow.left::before{display:none;}

/* Text-link CTA — replaces the chunky button look on the homepage.
   Lets photography and typography do the work; the link is quiet but
   unmistakable. */
.text-link{
  display:inline-block;font-family:'Josefin Sans',sans-serif;font-weight:300;
  font-size:.65rem;letter-spacing:.34em;text-transform:uppercase;color:var(--gold);
  padding:.55rem 0;border-bottom:1px solid rgba(201,168,76,.4);
  transition:color .25s,border-color .25s;
}
.text-link:hover{color:var(--gold-light);border-bottom-color:var(--gold);}
.text-link.lg{font-size:.72rem;letter-spacing:.36em;padding:.7rem 0;}

/* Quiet generous-spacing section. Replaces the .section padding with more
   breathing room and centered narrow content. */
.story-section{
  max-width:680px;margin:0 auto;padding:7rem 1.4rem;text-align:center;
}
.story-section .story-title{
  font-family:'Italiana',serif;font-weight:400;
  font-size:clamp(2rem,3.8vw,2.9rem);color:var(--cream);line-height:1.2;
  letter-spacing:.005em;margin-bottom:1.8rem;
}
.story-section .story-body{
  font-family:'Cormorant Garamond',serif;font-size:1.08rem;line-height:1.85;
  color:var(--cream-dim);
}
.story-section .story-body p + p{margin-top:1.1rem;}
.story-section .story-cta{margin-top:2.6rem;}
@media (max-width:680px){.story-section{padding:4.5rem 1.2rem;}}

/* Photo break — bigger, more cinematic */
.photo-break-c{position:relative;height:520px;overflow:hidden;}
.photo-break-c img{width:100%;height:100%;object-fit:cover;filter:brightness(.42) saturate(.95);}
.photo-break-c .pb-text{
  position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;padding:0 1.4rem;
}
.photo-break-c .pb-text .eyebrow{margin-bottom:1rem;}
.photo-break-c .pb-text h2{
  font-family:'Italiana',serif;font-weight:400;
  font-size:clamp(2rem,4.4vw,3rem);color:var(--cream);max-width:560px;
  letter-spacing:.005em;line-height:1.2;
}
.photo-break-c .pb-text .pb-sub{
  font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:300;
  font-size:1.05rem;color:var(--cream-dim);margin-top:1rem;max-width:420px;
}
@media (max-width:600px){.photo-break-c{height:380px;}}

/* Quiet facts strip — three columns of plain typographic facts.
   No card backgrounds, no bordered box, just rhythm. */
.facts-strip{
  border-top:1px solid var(--border);border-bottom:1px solid var(--border);
  padding:3.5rem 2rem;display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem;
  text-align:center;
}
.facts-strip .fact-num{
  display:block;font-family:'Playfair Display',serif;font-style:italic;
  font-size:clamp(1.6rem,3vw,2.1rem);color:var(--gold);margin-bottom:.4rem;
}
.facts-strip .fact-label{
  font-family:'Cormorant Garamond',serif;font-size:.95rem;color:var(--cream-dim);
  line-height:1.5;max-width:240px;margin:0 auto;
}
@media (max-width:760px){.facts-strip{grid-template-columns:1fr;gap:2rem;padding:2.6rem 1.4rem;}}

/* Two-up gallery — replaces the busier 4-image grid with a quieter pair. */
.gallery-pair{
  display:grid;grid-template-columns:1fr 1fr;gap:.5rem;max-width:1200px;
  margin:0 auto;padding:0 .5rem;
}
.gallery-pair img{width:100%;height:480px;object-fit:cover;filter:brightness(.78) saturate(.95);transition:filter .4s;}
.gallery-pair img:hover{filter:brightness(.95);}
@media (max-width:760px){.gallery-pair{grid-template-columns:1fr;}.gallery-pair img{height:340px;}}

/* Subtle invitation block — for the loyalty pitch that should feel like
   a discovery, not a sales push. */
.invite{
  text-align:center;padding:6rem 1.4rem;max-width:560px;margin:0 auto;
}
.invite .invite-line{
  font-family:'Italiana',serif;font-weight:400;
  font-size:clamp(1.55rem,3vw,2.1rem);color:var(--cream);line-height:1.3;
  letter-spacing:.005em;margin-bottom:1.6rem;
}
.invite .invite-sub{
  font-family:'Cormorant Garamond',serif;font-size:1rem;color:var(--cream-dim);
  margin-bottom:2rem;
}

/* Cinematic page hero — for sub-pages (menu, events, reserve, etc).
   Taller than the old .page-hero (240px), with vignette and centered
   editorial typography. */
.page-hero-c{position:relative;height:420px;overflow:hidden;}
.page-hero-c img{width:100%;height:100%;object-fit:cover;filter:brightness(.34) saturate(.95);}
.page-hero-c::after{
  content:'';position:absolute;inset:0;
  background:radial-gradient(ellipse at center,transparent 40%,rgba(0,0,0,.55) 95%);
  pointer-events:none;
}
.page-hero-c-text{
  position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;padding:0 1.4rem;
  z-index:1;
}
.page-hero-c-text h1{
  font-family:'Italiana',serif;font-weight:400;
  font-size:clamp(2.6rem,6vw,3.8rem);color:var(--cream);
  line-height:1.05;letter-spacing:.01em;margin-bottom:.7rem;
}
.page-hero-c-text .page-hero-tag{
  font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:300;
  font-size:1rem;color:var(--cream-dim);max-width:440px;line-height:1.55;
}
@media (max-width:600px){.page-hero-c{height:340px;}}

/* Happy hour — typographic refresh (no card chrome, just rhythmic lists). */
.hh-c{
  max-width:1000px;margin:0 auto;padding:5rem 1.4rem 1rem;
}
.hh-c .hh-c-time{
  font-family:'Cormorant Garamond',serif;font-style:italic;font-size:1.1rem;
  color:var(--cream-dim);text-align:center;margin-bottom:2.6rem;
}
.hh-c .hh-c-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:3rem;}
.hh-c .hh-c-col-label{
  font-family:'Josefin Sans',sans-serif;font-size:.58rem;letter-spacing:.32em;
  text-transform:uppercase;color:var(--gold);text-align:center;
  padding-bottom:.7rem;border-bottom:1px solid var(--border);
  margin-bottom:1rem;
}
.hh-c .hh-c-row{
  display:flex;justify-content:space-between;align-items:baseline;
  padding:.45rem 0;font-family:'Cormorant Garamond',serif;font-size:1rem;
  color:var(--cream);
}
.hh-c .hh-c-row span{color:var(--gold);font-family:'Josefin Sans',sans-serif;font-size:.8rem;letter-spacing:.06em;}
@media (max-width:760px){.hh-c .hh-c-grid{grid-template-columns:1fr;gap:2rem;}}

/* Contained photo strip — the catering triptych from theamsterdamian.com.
   Sits inside the page with breathing room on all sides instead of bleeding
   edge-to-edge, with soft gradient fades on the left/right so the image
   melts into the page background rather than terminating in a hard line. */
.photo-strip-triptych{
  position:relative;
  max-width:1180px;
  margin:5rem auto;
  padding:0 2rem;
  line-height:0;
}
.photo-strip-triptych img{
  width:100%;height:auto;display:block;
  filter:brightness(.85) saturate(.92) contrast(1.02);
  transition:filter .6s ease;
}
/* Soft gradient masks left/right so the image fades into the page rather
   than ending in a hard vertical edge. Uses the page background color so it
   blends seamlessly. */
.photo-strip-triptych::before,
.photo-strip-triptych::after{
  content:"";
  position:absolute;top:0;bottom:0;width:90px;
  pointer-events:none;
  z-index:2;
}
.photo-strip-triptych::before{
  left:0;
  background:linear-gradient(to right, var(--black) 0%, rgba(10,8,6,0) 100%);
}
.photo-strip-triptych::after{
  right:0;
  background:linear-gradient(to left, var(--black) 0%, rgba(10,8,6,0) 100%);
}
.photo-strip-triptych:hover img{filter:brightness(1) saturate(1);}
@media (max-width:760px){
  .photo-strip-triptych{margin:3rem auto;padding:0 1rem;}
  .photo-strip-triptych::before,
  .photo-strip-triptych::after{width:40px;}
}

/* Dutch Apple Pie feature — two-column illustration + text block.
   Replaces the older photo-break composition for the home page so the
   section reads as a poster-style feature rather than a hero image. The
   illustration is original line art (black on white) — we invert it and
   tint via sepia/hue-rotate so it lands as warm cream/gold on the dark
   page background, matching the site palette without re-rendering the
   asset. */
.dutch-apple-feature{
  display:grid;
  grid-template-columns:1fr 1.1fr;
  gap:4rem;
  align-items:center;
  max-width:1100px;
  margin:5rem auto 6rem;
  padding:0 2rem;
}
.dutch-apple-feature .feat-illustration{
  display:flex;
  justify-content:center;
  align-items:center;
}
.dutch-apple-feature .feat-illustration img{
  width:100%;max-width:294px;height:auto;display:block;
  transition:transform .8s ease;
}
.dutch-apple-feature:hover .feat-illustration img{transform:scale(1.02);}
.dutch-apple-feature .feat-text .eyebrow{margin-bottom:1.2rem;}
.dutch-apple-feature .feat-headline{
  font-family:'Italiana',serif;font-weight:400;
  font-size:clamp(2rem,4vw,2.9rem);color:var(--cream);
  line-height:1.18;letter-spacing:.005em;
  margin-bottom:1.4rem;max-width:520px;
}
.dutch-apple-feature .feat-body{
  font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:300;
  font-size:1.1rem;line-height:1.7;color:var(--cream-dim);
  max-width:480px;margin-bottom:1.6rem;
}
.dutch-apple-feature .feat-price{
  font-family:'Cinzel',serif;font-weight:500;
  font-size:1.3rem;letter-spacing:.18em;color:var(--gold);
}
@media (max-width:760px){
  .dutch-apple-feature{
    grid-template-columns:1fr;
    gap:2.4rem;
    margin:3.5rem auto 4rem;
    text-align:center;
  }
  .dutch-apple-feature .feat-illustration img{max-width:168px;}
  .dutch-apple-feature .feat-headline,
  .dutch-apple-feature .feat-body{margin-left:auto;margin-right:auto;}
}

/* Reservation nudge — small fixed card that slides up from the bottom-right
   on content pages to suggest a reservation. Built by js/main.js so it
   appears site-wide except where it would be redundant or out of context.
   Sits BELOW the nav (z-index 1000) so the hamburger menu can still drop
   over it cleanly. */
.reserve-nudge{
  position:fixed;right:1.6rem;bottom:1.6rem;z-index:900;
  width:280px;max-width:calc(100vw - 2rem);
  background:linear-gradient(165deg, #1f1a14 0%, #14100c 100%);
  border:1px solid var(--border);
  padding:1.5rem 1.6rem 1.4rem;
  font-family:'Cormorant Garamond',serif;
  box-shadow:
    0 14px 44px rgba(0,0,0,.55),
    0 0 0 1px rgba(201,168,76,.06),
    inset 0 1px 0 rgba(245,237,216,.04);
  opacity:0;transform:translateY(24px) scale(.97);
  transition:opacity .8s ease, transform .8s ease;
  pointer-events:none;
}
.reserve-nudge.visible{
  opacity:1;transform:translateY(0) scale(1);pointer-events:auto;
}
.reserve-nudge.dismissed{
  opacity:0;transform:translateY(24px) scale(.97);
}
.reserve-nudge .rn-close{
  position:absolute;top:.45rem;right:.6rem;
  background:none;border:none;color:var(--muted);
  font-size:1.5rem;line-height:1;font-family:inherit;
  cursor:pointer;padding:.2rem .45rem;
  transition:color .25s ease;
}
.reserve-nudge .rn-close:hover{color:var(--gold);}
.reserve-nudge .rn-eyebrow{
  font-family:'Josefin Sans',sans-serif;
  font-size:.55rem;letter-spacing:.32em;text-transform:uppercase;
  color:var(--gold);margin-bottom:.7rem;
}
.reserve-nudge .rn-title{
  font-family:'Italiana',serif;font-weight:400;
  font-size:1.45rem;color:var(--cream);
  line-height:1.2;margin-bottom:.55rem;letter-spacing:.005em;
}
.reserve-nudge .rn-body{
  font-style:italic;font-weight:300;
  font-size:.95rem;line-height:1.55;color:var(--cream-dim);
  margin-bottom:1.1rem;
}
.reserve-nudge .rn-cta{
  display:inline-block;
  font-family:'Cinzel',serif;font-weight:500;
  font-size:.7rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--gold);
  border-bottom:1px solid var(--gold-dim);
  padding-bottom:.15rem;
  transition:color .25s ease, border-color .25s ease;
}
.reserve-nudge .rn-cta:hover{color:var(--gold-light);border-color:var(--gold);}
@media (max-width:600px){
  .reserve-nudge{
    right:1rem;bottom:1rem;
    width:calc(100vw - 2rem);
  }
}

/* ──────────────────────────────────────────────
   Tier 1 + 2 polish — typography overlays + Today modules.

   Selectively applied so existing Cormorant/Josefin styling persists
   where it works; Playfair italic is added on prominent headlines,
   JetBrains Mono on date/time/label strips, and Manrope is reserved
   for the dense admin dashboards if/when we adopt it more broadly.
   ────────────────────────────────────────────── */

/* Admin/staff dashboard: the .today-hero is the today landing block */
.today-hero h1 {
  font-family: var(--display);
  font-style: italic;
  font-weight: 600;
  font-size: 2.4rem;
  line-height: 1.15;
  letter-spacing: 0.005em;
  color: var(--cream);
  margin: 0;
}

/* Mono date strip — replaces the plain "—" placeholder */
.date-line {
  font-family: var(--mono);
  font-weight: 500;
  font-size: 0.74rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 0.55rem;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
}
.date-line .sep {
  color: var(--gold-dim);
  opacity: 0.7;
}

/* The italic sub-copy under the greeting. Bold-gold spans are the
   accent values (covers count, etc.). */
.today-hero-sub {
  font-family: 'Cormorant Garamond', serif;
  font-style: italic;
  font-size: 1.05rem;
  color: var(--cream-dim);
  line-height: 1.5;
  margin-top: 0.7rem;
  max-width: 640px;
}
.today-hero-sub b,
.today-hero-sub strong {
  color: var(--gold);
  font-weight: 600;
  font-style: normal;
}

/* Mono small-caps section labels — sec-label gets the JetBrains treatment */
.sec-label {
  font-family: var(--mono);
  font-weight: 500;
  font-size: 0.66rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold-dim);
}

/* Card h2 headlines on Today — Playfair italic medium */
.today-card h2 {
  font-family: var(--display);
  font-style: italic;
  font-weight: 600;
  font-size: 1.18rem;
  letter-spacing: 0.005em;
  color: var(--cream);
}

/* ── Service Pulse card ─────────────────────────────────────────── */
.service-pulse {
  background: var(--card);
  border: 1px solid var(--border);
  padding: 1rem 1.2rem;
  flex-shrink: 0;
  min-width: 280px;
}
/* Mobile: full width, drop the min so it doesn't force horizontal
   scroll on phones. The hero flex layout already wraps. */
@media (max-width: 720px) {
  .service-pulse {
    min-width: 0;
    width: 100%;
  }
  .today-hero {
    flex-direction: column;
    padding: 1.4rem 1.2rem !important;
  }
  .today-hero h1 {
    font-size: 1.7rem;
  }
  .today-hero-sub {
    font-size: 0.95rem;
  }
  /* Date row wraps cleanly instead of forcing one giant line. */
  .date-line {
    font-size: 0.62rem;
    letter-spacing: 0.12em;
  }
  /* Quick stats: 2x2 grid on phones, hairlines only between columns */
  .quick-stats {
    padding: 0.9rem 0.6rem;
    gap: 0.4rem;
  }
  .qs {
    flex: 1 1 calc(50% - 0.4rem);
    padding: 0.7rem 0.4rem;
    border-left: none;
    border-top: 1px solid var(--border);
  }
  .qs:nth-child(-n+2) {
    border-top: none;
  }
  .qs-num {
    font-size: 1.7rem;
  }
  /* Today cards: tighter padding so content isn't crowded against the
     edge, and ensure long names/values wrap cleanly. */
  .today-card {
    padding: 1rem 1.1rem;
  }
  .today-card h2 {
    font-size: 1.05rem;
  }
  .tres-list, .tspec-list {
    overflow-wrap: anywhere;
  }
  /* The today-grid already collapses to one column at 980px (existing
     rule); reaffirm here in case some layout breaks at narrower widths. */
  .today-grid {
    grid-template-columns: 1fr;
    gap: 1rem;
  }
}
.service-pulse-title {
  font-family: var(--mono);
  font-size: 0.65rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold-dim);
  margin-bottom: 0.7rem;
}
.service-pulse-bar {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 4px;
  margin-bottom: 0.55rem;
}
.service-pulse-seg {
  height: 6px;
  background: rgba(201, 168, 76, 0.1);
  border-radius: 1px;
  transition: background 0.2s ease;
}
.service-pulse-seg.done {
  background: rgba(201, 168, 76, 0.45);
}
.service-pulse-seg.now {
  background: var(--gold);
  box-shadow: 0 0 12px rgba(201, 168, 76, 0.5);
}
.service-pulse-stages {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 4px;
  font-family: var(--mono);
  font-size: 0.55rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--mute-2, var(--muted));
  margin-bottom: 0.6rem;
}
.service-pulse-stages .now-stage {
  color: var(--gold);
}
.service-pulse-time {
  font-family: var(--mono);
  font-size: 0.72rem;
  color: var(--cream-dim);
  letter-spacing: 0.04em;
}
.service-pulse-time .countdown {
  color: var(--gold);
  margin-left: 0.4em;
}

/* Closed-today state — when bar_info.hours marks today as Closed, the
   per-phase countdown is irrelevant. The phase strip is dimmed, and a
   clear CLOSED TODAY badge replaces the time line. */
.service-pulse.is-closed-today .service-pulse-stages,
.service-pulse.is-closed-today .service-pulse-bar {
  opacity: 0.4;
}
.service-pulse-time .closed-today-label {
  display: inline-block;
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  border: 1px solid rgba(201, 168, 76, 0.45);
  padding: 0.28rem 0.7rem;
  background: rgba(201, 168, 76, 0.06);
}

/* ── Pulsing "Live" dot on sidebar TONIGHT section label ──────── */
.adm-sb-group-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.adm-sb-live-pulse {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-family: var(--mono);
  font-size: 0.55rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: #8aa86b;
  font-weight: 500;
  transition: opacity 0.6s ease;
}
/* Off state: applied by dashboard-shared.js when the bar isn't in
   Service or Late stage. Hidden rather than dimmed so the sidebar
   reads cleanly outside of operating hours — "Tonight" alone, no
   misleading "Live" badge. */
.adm-sb-live-pulse.is-off {
  display: none;
}
.adm-sb-live-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #8aa86b;
  animation: liveBlip 1.6s infinite;
}
@keyframes liveBlip {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.3; }
}

/* ── Latest Praise card on Today ────────────────────────────── */
.praise-card {
  background: var(--card);
  border: 1px solid var(--border);
  padding: 1.1rem 1.3rem;
}
.praise-row {
  padding: 0.7rem 0;
  border-top: 1px solid var(--border);
}
.praise-row:first-child {
  border-top: none;
  padding-top: 0;
}
.praise-row:last-child {
  padding-bottom: 0;
}
.praise-meta {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 0.45rem;
}
.praise-stars {
  color: var(--gold);
  font-size: 0.85rem;
  letter-spacing: 0.06em;
}
.praise-quote {
  font-family: var(--display);
  font-style: italic;
  font-weight: 500;
  font-size: 1.02rem;
  line-height: 1.5;
  color: var(--cream);
  margin: 0;
}
.praise-quote::before {
  content: '“';
  color: var(--gold);
  font-size: 1.3em;
  line-height: 0;
  vertical-align: -0.18em;
  margin-right: 0.06em;
}
.praise-quote::after {
  content: '”';
  color: var(--gold);
  font-size: 1.3em;
  line-height: 0;
  vertical-align: -0.18em;
  margin-left: 0.04em;
}
.praise-byline {
  font-size: 0.78rem;
  color: var(--muted);
  font-style: italic;
  margin-top: 0.4rem;
}

/* ── Footer italic quote (public site) ──────────────────────── */
.site-footer-quote {
  text-align: center;
  font-family: var(--display);
  font-style: italic;
  font-weight: 500;
  font-size: 0.95rem;
  color: var(--cream-dim);
  margin: 1.2rem 0 0.4rem;
  letter-spacing: 0.01em;
}
.site-footer-quote .dot {
  color: var(--gold-dim);
  margin: 0 0.3em;
}

/* ════════════════════════════════════════════════════════════════════
   MOBILE DASHBOARD POLISH
   Below 900px the sidebar is already a slide-in panel (toggled via the
   #adm-burger). This block adds:
     • A proper top banner (logo + title + menu) replacing the floating
       burger icon.
     • Responsive tables — non-essential columns hide on phones so
       Reservations, Team, etc. stop scrolling horizontally.
     • Tighter padding + stacked grids for the Today panel, Loyalty,
       Menu editor, Site Settings, and Schedule.
     • Mobile-first Inbox: tapping a conversation slides the thread
       over the conversation list (full-screen chat); a back button
       returns you to the list. (Wired in JS via .msg-grid.show-thread.)
   ════════════════════════════════════════════════════════════════════ */

/* Mobile top banner — desktop-hidden by default. */
.adm-mobile-banner{display:none;}
@media (max-width:900px){
  .adm-mobile-banner{
    display:flex;align-items:center;gap:.65rem;
    position:fixed;top:0;left:0;right:0;height:54px;z-index:90;
    padding:.45rem .9rem;
    background:var(--dark);
    border-bottom:1px solid var(--border);
  }
  .adm-mobile-banner-logo{display:flex;align-items:center;}
  .adm-mobile-banner-logo img{height:34px;display:block;}
  .adm-mobile-banner-title{
    flex:1;text-align:center;
    font-family:'Josefin Sans',sans-serif;font-size:.62rem;letter-spacing:.22em;
    text-transform:uppercase;color:var(--gold);
  }
  /* In light mode the logo PNG needs inversion (same as the sidebar). */
  html[data-theme="light"] .adm-mobile-banner-logo img{
    filter:invert(1) hue-rotate(180deg);
  }
  /* Re-position the burger inside the banner (was floating). */
  .adm-burger{
    position:static;width:38px;height:38px;
    background:transparent;border:1px solid var(--border);
    flex-shrink:0;
  }
  /* Back-arrow variant used on standalone pages (scanner, scan, checkin)
     where there's no sidebar to slide in — just a way home. */
  .adm-mobile-banner-back{
    display:inline-flex;align-items:center;justify-content:center;
    width:38px;height:38px;flex-shrink:0;
    background:transparent;border:1px solid var(--border);
    color:var(--gold);text-decoration:none;
    font-family:'Cormorant Garamond',serif;font-size:1.35rem;line-height:1;
  }
  /* The body needs room for the fixed banner. */
  .adm-body{padding-top:4.5rem!important;}
}

/* ── Mobile table responsiveness ──
   Hide secondary columns on narrow screens so tables fit without
   horizontal scroll. Driven by data-col attributes; columns without
   attributes stay visible. Specific tables hide specific cells. */
@media (max-width:720px){
  /* Reservations table — hide Email line (inside the Name cell sub-
     span), Occasion, and Type. Keep Name / Date / Time / Guests /
     Status / Actions. */
  #res-tbody td:nth-child(5){display:none;} /* guests col, optional hide */
  /* Actually: keep guests, hide occasion + type columns instead.
     Reset the rule above and do this targeted set. */
}
@media (max-width:720px){
  /* Reset the over-eager rule above and hide the right columns. */
  #res-tbody td:nth-child(5){display:table-cell;}
  /* Reservation rows: Name(1) Date(2) Time(3) Table(4 if shown) Guests
     Occasion Type Status Actions. With showTable=true on admin:
       1=Name, 2=Date, 3=Time, 4=Table, 5=Guests, 6=Occasion, 7=Type,
       8=Status, 9=Actions. Hide 6 + 7 on mobile. */
  #panel-res table thead th:nth-child(6),
  #panel-res table thead th:nth-child(7),
  #panel-res table tbody td:nth-child(6),
  #panel-res table tbody td:nth-child(7){display:none;}
  /* Tighter cell padding on phones so we get more horizontal room. */
  table th, table td{padding:.55rem .7rem;font-size:.82rem;}
  /* Action buttons in the last cell stack vertically so they don't
     blow out the cell width. */
  #res-tbody td:last-child{display:flex;flex-direction:column;gap:.3rem;align-items:stretch;}
  #res-tbody td:last-child .abtn{flex:none;width:100%;text-align:center;}
  /* Stop ALL tables from forcing horizontal scroll — they'll wrap
     content instead of stretching the wrap. */
  .tbl-wrap{overflow-x:auto;}
  table{min-width:0;}
  th, td{white-space:normal;}
}

/* ── Today panel + various grids stack on phones ── */
@media (max-width:720px){
  .today-hero{padding:1.2rem 1rem;}
  .quick-stats{padding:1rem .6rem;}
  .qs{padding:0 .5rem;min-width:64px;}
  .qs-num{font-size:1.5rem;}
  .qs-lbl{font-size:.5rem;}
  .today-card{padding:1.1rem 1.1rem;}
  .today-card h2{font-size:1rem;}
  .adm-roster-row{
    grid-template-columns:auto 1fr auto;gap:.55rem;
    font-size:.85rem;
  }
  .adm-roster-role{display:none;} /* role hidden on phones — name/time still visible */
  /* Settings panel: collapse the auto-fit grid to single column. */
  #panel-settings > div[style*="grid-template-columns"]{
    grid-template-columns:1fr!important;
  }
  /* Site-search box on mobile — full width. */
  .adm-topsearch-wrap{max-width:100%;}
}

/* ── Loyalty section: stack the customer card list + buttons ── */
@media (max-width:720px){
  #panel-loyalty .ftab-strip{flex-wrap:wrap;gap:.3rem;}
  #panel-loyalty table th:nth-child(2),
  #panel-loyalty table td:nth-child(2){display:none;} /* hide Email col */
  #panel-loyalty table th:nth-child(5),
  #panel-loyalty table td:nth-child(5){display:none;} /* hide Next reward */
  /* Action buttons on each customer row stack vertically. */
  #panel-loyalty table td:last-child{
    display:flex;flex-direction:column;gap:.3rem;align-items:stretch;
  }
  #panel-loyalty table td:last-child .abtn{width:100%;text-align:center;font-size:.62rem;}
}

/* ── Menu editor + Floor Plan list: stack rows on phones ──
   Both panels render their list as `.menu-row` (flex container of a
   `.menu-row-grid` + `.menu-row-actions`). The grid has `min-width:260px`
   which pushes past phone viewports; the inputs inside the grid cells
   also have natural min-widths that overflow 1fr columns. Inline styles
   like `style="grid-column:span 2"` on Name/Description cells force the
   2-col layout. We fix all three:
     1) force the grid to 1 column on phones (overrides inline span)
     2) clear min-widths so grid items can shrink
     3) stack the row vertically with actions stretched beneath
   Scoped to both #panel-menu and #panel-floorplan since they share
   markup. */
@media (max-width:720px){
  #panel-menu .menu-edit-grid,
  #panel-menu [style*="grid-template-columns"]{
    grid-template-columns:1fr!important;
  }
  /* The shared row layout — applies to both panels. */
  #panel-menu .menu-item-row,
  #panel-menu .menu-row,
  #panel-floorplan .menu-row{
    flex-direction:column;align-items:stretch;gap:.65rem;
    min-width:0;
  }
  #panel-menu .menu-row-grid,
  #panel-floorplan .menu-row-grid{
    grid-template-columns:1fr!important;
    min-width:0!important;
    width:100%;
  }
  /* Cells with inline `grid-column:span 2` need to drop back to 1 col. */
  #panel-menu .menu-row-grid > [style*="grid-column"],
  #panel-floorplan .menu-row-grid > [style*="grid-column"]{
    grid-column:1 / -1!important;
  }
  /* Grid items + inputs/selects must allow themselves to shrink below
     their natural content width, otherwise long defaults push past the
     container. */
  #panel-menu .menu-row-grid > *,
  #panel-floorplan .menu-row-grid > *{min-width:0;}
  /* Broader: ALL inputs/selects/textareas inside these two panels —
     covers the JS-rendered `.menu-row` list cells AND the "Add a New
     Item" / "Add a Table" cards that use their own inline grids. */
  #panel-menu input,
  #panel-menu select,
  #panel-menu textarea,
  #panel-floorplan input,
  #panel-floorplan select,
  #panel-floorplan textarea{
    min-width:0;max-width:100%;width:100%;box-sizing:border-box;
  }
  /* Same span-2 inline override, but broader so it catches Name +
     Description in the "Add a New Item" card (which has its own grid,
     not `.menu-row-grid`). */
  #panel-menu [style*="grid-column"],
  #panel-floorplan [style*="grid-column"]{
    grid-column:1 / -1!important;
  }
  #panel-menu .menu-row-actions,
  #panel-floorplan .menu-row-actions{
    display:grid;grid-template-columns:auto auto 1fr;gap:.4rem;
  }
  #panel-menu .menu-row-actions .abtn,
  #panel-floorplan .menu-row-actions .abtn{
    padding:.5rem .7rem;width:100%;
  }
  #panel-menu .abtn,
  #panel-floorplan .abtn{font-size:.6rem;}
  /* Section tabs (Menu only): shrink type and drop the visual divider. */
  #panel-menu .ftab-strip .ftab{font-size:.55rem;padding:.45rem .65rem;}
  #panel-menu .ftab-strip > span{display:none;}
  /* The list wrapper should never be horizontally scrollable on phones
     now that rows always stack. */
  #panel-menu .tbl-wrap,
  #panel-floorplan #fp-list-view .tbl-wrap{
    overflow-x:hidden;padding:.4rem .7rem!important;
  }
  /* Floor Plan "Add a Table" 2-col grid stacks too. */
  #panel-floorplan #fp-list-view .card[style*="grid-template-columns"],
  #panel-floorplan #fp-list-view [style*="grid-template-columns"]{
    grid-template-columns:1fr!important;
  }
}

/* ── Site Settings: collapse ALL nested 2-col / 3-col grids on phones ──
   The earlier rule only matched DIRECT children of #panel-settings. The
   Reservation Nudge block (and a few other cards) lives one level
   deeper inside a `.tbl-wrap`, so its 2-col + 3-col input grids weren't
   stacking. Match anything inside the settings panel that uses inline
   `grid-template-columns`. Also ensure inputs/textareas inside settings
   don't overflow their cell on narrow widths. */
@media (max-width:720px){
  #panel-settings [style*="grid-template-columns"]{
    grid-template-columns:1fr!important;
  }
  #panel-settings input,
  #panel-settings select,
  #panel-settings textarea{
    min-width:0;max-width:100%;width:100%;box-sizing:border-box;
  }
  /* The tbl-wrap cards inside settings shouldn't scroll horizontally —
     content always stacks now. */
  #panel-settings .tbl-wrap{overflow-x:hidden;}
}

/* ── Mailing List: stack the Add Subscriber row + let subscriber rows
   wrap on phones. The "Add Subscriber" uses a 4-col grid
   (name | email | phone | button) — collapses to 1col here. Subscriber
   rows are rendered JS-side with a nested flex row that doesn't wrap;
   force wrap so long emails + phone + date + Remove fit on small
   screens without horizontal scroll. */
@media (max-width:720px){
  #panel-mail [style*="grid-template-columns"]{
    grid-template-columns:1fr!important;
  }
  #panel-mail input{
    min-width:0;max-width:100%;width:100%;box-sizing:border-box;
  }
  /* Header (Search box + count): stack instead of going side-by-side. */
  #panel-mail .tbl-head{flex-direction:column;align-items:stretch;gap:.5rem;}
  #panel-mail #ml-search{width:100%!important;max-width:100%;}
  /* JS-rendered subscriber rows: the inner flex (name+email vs.
     phone+date+Remove) must wrap on phones. */
  #panel-mail .ml-row > div[style*="justify-content:space-between"]{
    flex-wrap:wrap;gap:.5rem;
  }
  #panel-mail .ml-row .ml-email{
    overflow-wrap:anywhere;word-break:break-word;
  }
  #panel-mail .tbl-wrap{overflow-x:hidden;}
}

/* ── Time-Off Approvals table: hide secondary columns on phones ──
   Columns: 1=Staff, 2=Date, 3=Reason, 4=Status, 5=Submitted, 6=Actions.
   Hide Reason + Submitted so Staff/Date/Status/Actions fit comfortably. */
@media (max-width:720px){
  #panel-timeoff table thead th:nth-child(3),
  #panel-timeoff table thead th:nth-child(5),
  #panel-timeoff table tbody td:nth-child(3),
  #panel-timeoff table tbody td:nth-child(5){display:none;}
  /* Actions cell — stack buttons vertically so they don't push width. */
  #panel-timeoff #to-tbody td:last-child{
    display:flex;flex-direction:column;gap:.3rem;align-items:stretch;
  }
  #panel-timeoff #to-tbody td:last-child .abtn{width:100%;text-align:center;font-size:.6rem;}
}

/* ── Event Manager table: hide secondary columns on phones ──
   Columns: 1=Flyer, 2=Title, 3=When, 4=Detail, 5=Tickets, 6=Actions.
   User complaint: TICKETS column gets cut off on mobile. Drop the
   Flyer thumbnail + Detail blurb so Title/When/Tickets/Actions fit. */
@media (max-width:720px){
  #ev-tbody td:nth-child(1),
  #ev-tbody td:nth-child(4),
  #panel-events table thead th:nth-child(1),
  #panel-events table thead th:nth-child(4){display:none;}
  /* Actions cell — vertical stack. */
  #ev-tbody td:last-child{
    display:flex;flex-direction:column;gap:.3rem;align-items:stretch;
  }
  #ev-tbody td:last-child .abtn{width:100%;text-align:center;font-size:.6rem;}
  /* The event form itself uses .f-row (2-col on desktop) — let it stack
     so phone keyboards don't fight cramped inputs. */
  #panel-events .f-row{grid-template-columns:1fr!important;}
}

/* ── Schedule grid: stack on small screens ── */
@media (max-width:720px){
  .sched-grid{grid-template-columns:1fr!important;gap:.55rem;}
}

/* ── Inbox mobile: full-screen thread when a conversation is open ──
   The .show-thread class is added by JS when a conversation gets
   focused. Below 780px we hide the sidebar list and show the thread
   alone, with a back button at the top that returns to the list. */
@media (max-width:780px){
  .msg-grid.show-thread .msg-sidebar{display:none;}
  .msg-grid:not(.show-thread) .msg-thread-pane{display:none;}
  .msg-grid{min-height:0;}
  .msg-thread-pane{min-height:calc(100vh - 220px);}
  .msg-thread-body{max-height:none;min-height:50vh;}
  /* The back button — only relevant on mobile. */
  .msg-thread-back{
    display:inline-flex;align-items:center;gap:.4rem;
    background:transparent;border:none;color:var(--gold);
    font-family:'Josefin Sans',sans-serif;font-size:.55rem;
    letter-spacing:.2em;text-transform:uppercase;
    padding:.35rem .55rem .35rem 0;cursor:pointer;
  }
}
/* Back-to-conversations button. Visible whenever a thread is shown
   so the admin always has a clear exit — previously it only appeared
   in mobile + show-thread mode, which meant users opening a chat at
   a narrow desktop width had no obvious way back to the list. */
.msg-thread-back{
  display:inline-flex;align-items:center;gap:.4rem;
  background:transparent;border:1px solid var(--border);color:var(--gold);
  font-family:'Josefin Sans',sans-serif;font-size:.55rem;
  letter-spacing:.18em;text-transform:uppercase;
  padding:.35rem .65rem;cursor:pointer;
  margin-right:.6rem;flex-shrink:0;transition:all .15s;
}
.msg-thread-back:hover{border-color:var(--gold);background:rgba(201,168,76,.08);}

/* ════════════════════════════════════════════════════════════════════
   ANTI-SIDE-SCROLL SAFETY NET (mobile)
   Catches any element that would push past the viewport edge on a
   phone — long URLs, oversized images, wide grids that didn't collapse,
   tables that escaped their wrapper, modals that overflowed. We clamp
   max-width to the viewport and wrap text aggressively. Defensive
   pass: anything we missed in targeted rules still can't push past
   the right edge.
   ════════════════════════════════════════════════════════════════════ */
@media (max-width:900px){
  html, body{
    overflow-x:hidden;
    max-width:100vw;
  }
  .adm-wrap, .adm-body{
    max-width:100vw;
    overflow-x:hidden;
  }
  /* Media never wider than its container. */
  img, video, iframe, canvas{
    max-width:100%;
    height:auto;
  }
  /* Long URLs / monospace blocks must wrap, not expand the page. */
  pre, code{
    white-space:pre-wrap;
    word-break:break-word;
    overflow-wrap:anywhere;
  }
  /* Modal boxes shouldn't be wider than the viewport. */
  .modal-box, .modal-ov > *{
    max-width:calc(100vw - 1.4rem);
    box-sizing:border-box;
  }
  /* Long names / words in cells, bubbles, etc. break instead of
     stretching their container.
     IMPORTANT: use `break-word`, NOT `anywhere`. The two look almost
     identical at first glance but differ in min-content sizing:
       • `anywhere` participates in the browser's min-content width
         calculation — it tells layout that this cell could be as narrow
         as 1 character. For colspan cells (e.g. the "No reservations
         match this filter." empty-state row) this collapses the cell to
         a single character column and the text wraps vertically letter
         by letter. We saw this in the reservations panel on mobile.
       • `break-word` only breaks when content actually overflows the
         final width. Min-content sizing is unaffected, so colspan'd
         empty-state cells keep their natural width and stay readable.
     Same goes for `word-break:break-word` (deprecated alias of
     `overflow-wrap:break-word`) — we drop it to avoid confusion. */
  td, .msg-bubble, .pickup-title, .pickup-meta,
  .tres-name, .tres-meta, .tres-notes,
  .adm-roster-name{
    overflow-wrap:break-word;
  }
  /* Tables — keep the wrapper as the only horizontal-scroll surface
     (already overflow-x:auto). If we missed a column that's still
     too wide, this lets the wrapper scroll alone without pushing the
     whole page sideways. */
  .tbl-wrap{max-width:100%;}
  /* Inline-flex action groups (toolbars, ftab strips, etc.) wrap
     instead of overflowing. */
  .ftabs, .ftab-strip, .adm-stats, .adm-sb-foot-actions{
    flex-wrap:wrap!important;
  }
}

/* ── Tier-2 floor: pacing strip + queue rail ────────────────────────────
   Both helpers live in dashboard-shared.js (renderFloorPacingStrip /
   renderFloorQueueRail). These rules style the rendered markup. */

/* Pacing strip — slim bar chart, covers per 30-min slot. */
.pacing-strip{
  display:flex; align-items:flex-end; height:100%;
}
.pacing-strip-inner{
  display:flex; align-items:flex-end;
  width:100%; height:100%; gap:2px;
}
.pacing-slot{
  flex:1 1 0; min-width:0;
  display:flex; flex-direction:column; align-items:center; gap:.18rem;
  height:100%; padding:.1rem 0;
  cursor:default;
}
.pacing-bar-wrap{
  flex:1 1 auto; width:100%;
  display:flex; align-items:flex-end; justify-content:center;
  min-height:0;
}
.pacing-bar{
  width:70%;
  background:linear-gradient(180deg, rgba(120,180,140,.85), rgba(80,140,100,.7));
  border:1px solid rgba(120,180,140,.7);
  border-bottom:none;
  transition:height .25s ease;
}
.pacing-label{
  font-family:'Josefin Sans', sans-serif;
  font-size:.48rem; letter-spacing:.06em; color:var(--cream-dim);
  white-space:nowrap;
}

/* Load-based bar colours — green → yellow → orange → red as the slot
   fills toward room capacity. Border colour follows the fill so it
   reads clearly on both light and dark themes. */
.pacing-load-low  .pacing-bar{background:linear-gradient(180deg,rgba(120,180,140,.85),rgba(80,140,100,.7));border-color:rgba(120,180,140,.7);}
.pacing-load-med  .pacing-bar{background:linear-gradient(180deg,rgba(220,200,90,.85),rgba(180,160,60,.7));border-color:rgba(220,200,90,.7);}
.pacing-load-high .pacing-bar{background:linear-gradient(180deg,rgba(232,140,60,.9),rgba(200,110,40,.7));border-color:rgba(232,140,60,.75);}
.pacing-load-over .pacing-bar{background:linear-gradient(180deg,rgba(224,92,92,.92),rgba(180,60,60,.75));border-color:rgba(224,92,92,.8);}

/* Past slots fade so they don't compete with what's coming up. */
.pacing-slot.pacing-past{opacity:.45;}
/* Current slot gets a gold underline so the host's eye snaps to "now". */
.pacing-slot.pacing-now{position:relative;}
.pacing-slot.pacing-now::after{
  content:''; position:absolute; left:8%; right:8%; bottom:0;
  height:2px; background:var(--gold);
}
.pacing-slot.pacing-now .pacing-label{color:var(--gold);}

/* Queue rail — vertical list of bookings waiting to be placed/seated. */
.floor-queue{
  display:flex; flex-direction:column; gap:.8rem; height:100%;
}
.floor-queue-section{display:flex; flex-direction:column; gap:.4rem;}
.floor-queue-label{
  font-family:'Josefin Sans', sans-serif;
  font-size:.58rem; letter-spacing:.18em; text-transform:uppercase;
  color:var(--gold-dim);
  padding-bottom:.25rem; border-bottom:1px solid var(--border);
  display:flex; align-items:center; gap:.4rem;
}
.floor-queue-count{
  background:var(--gold); color:var(--bg, #0a0806);
  font-family:'Josefin Sans',sans-serif; font-size:.55rem; font-weight:700;
  padding:.05rem .42rem;
}
.floor-queue-empty{
  font-style:italic; color:var(--muted); font-size:.7rem;
  padding:.5rem 0;
}
.floor-queue-card{
  background:var(--card); border:1px solid var(--border);
  padding:.55rem .65rem;
  cursor:grab;
  user-select:none;
  touch-action:none;        /* let pointer drag override native scrolling */
  transition: transform .15s ease, border-color .15s ease;
}
.floor-queue-card:hover{ border-color:var(--gold); }
.floor-queue-card-head{
  display:flex; align-items:baseline; gap:.5rem;
  font-family:'Manrope', sans-serif;
}
.floor-queue-card-time{
  font-family:'Josefin Sans',sans-serif; font-size:.55rem;
  letter-spacing:.12em; text-transform:uppercase;
  color:var(--gold); font-weight:700;
  white-space:nowrap;
}
.floor-queue-card-name{
  flex:1 1 auto; color:var(--cream); font-size:.85rem;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.floor-queue-card-party{
  min-width:20px; height:20px; padding:0 .35rem;
  background:rgba(201,168,76,.18);
  border:1px solid rgba(201,168,76,.5);
  color:var(--gold);
  font-family:'Josefin Sans',sans-serif; font-size:.6rem; font-weight:700;
  display:flex; align-items:center; justify-content:center;
}
.floor-queue-card-meta{
  /* Bumped from .62rem so the host can read these from an arm's length
     at the iPad host stand. Still smaller than the guest name above so
     the visual hierarchy stays — name dominant, meta supporting. */
  font-size:.82rem;
  line-height:1.35;
  color:var(--cream-dim);
  margin-top:.3rem;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.floor-queue-card-meta-occ{color:var(--gold-dim);}
/* Notes can carry useful detail ("peanut allergy", "window booth pls")
   so let them wrap up to two lines instead of clipping at the right edge.
   The JS already caps the visible text at 40 chars — wrapping just makes
   those 40 chars readable when they don't fit on one line. */
.floor-queue-card-meta-note{
  font-style:italic;
  white-space:normal;
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
}

/* Drag states. The original card dims while the ghost is being moved
   so the host can tell which one is in flight. */
.floor-queue-card-dragging{opacity:.35;}
.floor-queue-card-ghost{
  border-color:var(--gold) !important;
  box-shadow:0 12px 24px rgba(0,0,0,.45), 0 0 0 1px var(--gold);
  transform: translate(0, 0);
}

/* Drop-target outlines on the floor canvas. fp-droptarget = drop fits the
   party; fp-droptarget-bad = too small, dropping will be rejected with a
   "won't fit" toast. */
.fp-table.fp-droptarget{
  outline: 3px solid var(--gold);
  outline-offset: -3px;
  filter: brightness(1.15);
}
.fp-table.fp-droptarget-bad{
  outline: 3px dashed #e05c5c;
  outline-offset: -3px;
  filter: brightness(.7) saturate(.6);
}

/* ── Tier-3 floor: server sections ───────────────────────────────────────
   Stripe at the bottom of each table + horizontal legend chips above the
   pacing strip. Stripe color is set inline from section.color. */
.fp-section-stripe{
  position:absolute;left:6%;right:6%;bottom:2px;
  height:4px;
  border-radius:0;
  pointer-events:none;
  z-index:1;
  box-shadow:0 0 4px rgba(0,0,0,.45);
}

/* Dim state — applied when a section chip is active in the legend and
   this table is NOT in that section. Keeps the canvas readable while
   visually emphasizing the focused section. */
.fp-table.fp-section-dimmed{ opacity:.32; }

/* Legend strip — horizontal scroller of chips. Each chip is a button so
   it's keyboard-accessible. Active chip gets a gold outline. */
.floor-legend{
  display:flex; align-items:center; gap:.4rem;
  flex-wrap:nowrap; min-height:36px;
}
.floor-legend-empty{
  font-family:'Josefin Sans', sans-serif;
  font-size:.6rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--muted); font-style:normal;
  padding:.6rem 0;
}
.floor-legend-chip{
  display:inline-flex; align-items:center; gap:.45rem;
  background:var(--card);
  border:1px solid var(--border);
  color:var(--cream);
  padding:.38rem .7rem;
  cursor:pointer;
  font-family:'Manrope', sans-serif;
  font-size:.72rem;
  white-space:nowrap;
  transition: border-color .15s ease, transform .12s ease;
}
.floor-legend-chip:hover{ border-color:var(--gold-dim); }
.floor-legend-chip-active{
  border-color:var(--gold);
  box-shadow: 0 0 0 1px var(--gold);
}
.floor-legend-dot{
  display:inline-block; width:10px; height:10px;
  border-radius:50%;
  box-shadow: 0 0 4px rgba(0,0,0,.4) inset, 0 0 0 1px rgba(255,255,255,.15);
}
.floor-legend-label{ font-weight:600; }
.floor-legend-server{ color:var(--cream-dim); }
.floor-legend-counts{
  color:var(--gold-dim);
  font-family:'Josefin Sans', sans-serif;
  font-size:.55rem; letter-spacing:.12em; text-transform:uppercase;
  margin-left:.2rem;
}

/* ── Reservation-row color coding ──────────────────────────────────────
   Status sets a left-edge color stripe via inset box-shadow on the
   first cell. Section sets a right-edge stripe via the last cell using
   the row's --res-section-color custom property (set inline per row).
   "Starting soon" overlays a soft gold glow. All four cues can stack. */

tr.res-row-pending   td:first-child{ box-shadow: inset 4px 0 0 #d2a93e; }
tr.res-row-confirmed td:first-child{ box-shadow: inset 4px 0 0 #62b67a; }
tr.res-row-cancelled td:first-child{ box-shadow: inset 4px 0 0 #d06060; }
tr.res-row-private   td:first-child{ box-shadow: inset 4px 0 0 #a07ec9; }

tr.res-row-cancelled td{ opacity:.55; }   /* fade cancelled rows */

/* Section stripe on the trailing edge of the row — matches the section
   color on the floor view so the same booking reads identically across
   both surfaces. */
tr.res-row-has-section td:last-child{
  box-shadow: inset -4px 0 0 var(--res-section-color, var(--gold));
}

/* "Starting soon" — confirmed bookings arriving within the next 30 min
   get a subtle gold background tint so the host's eye lands on them. */
tr.res-row-starting-soon{
  background: linear-gradient(90deg, rgba(201,168,76,.10), rgba(201,168,76,.02) 35%, transparent 70%);
}
tr.res-row-starting-soon td:first-child{
  /* Stronger gold accent on the left edge for "starting soon" — wins
     over the status color since it's the more urgent signal. */
  box-shadow: inset 4px 0 0 var(--gold), inset 0 0 0 1px rgba(201,168,76,.18);
}

/* Move-picker secondary footer (Edit / Cancel). Sits below the table
   list with a thin divider so it reads as a separate, less-frequent
   set of actions. */
.move-table-foot{
  display:flex; justify-content:space-between; gap:.5rem;
  margin-top:.7rem; padding-top:.7rem;
  border-top:1px solid var(--border);
}
.move-table-foot .abtn{ flex:1 1 auto; }

/* Queue rail sort toggle. Two pills (Time / Party) sit above the
   Unassigned + Arriving sections. Style mirrors the .theme-segmented
   pattern from Site Settings so it reads as a deliberate control. */
.floor-queue-sort{
  display:flex; align-items:center; gap:.4rem;
  margin-bottom:.7rem;
  padding-bottom:.55rem;
  border-bottom:1px solid var(--border);
}
.floor-queue-sort-label{
  font-family:'Josefin Sans', sans-serif;
  font-size:.55rem; letter-spacing:.18em; text-transform:uppercase;
  color:var(--gold-dim);
  margin-right:.15rem;
}
.floor-queue-sort-btn{
  flex:1 1 auto;
  background:transparent;
  border:1px solid var(--border);
  color:var(--cream-dim);
  padding:.32rem .55rem;
  cursor:pointer;
  font-family:'Josefin Sans', sans-serif;
  font-size:.6rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  transition: border-color .12s ease, color .12s ease, background .12s ease;
}
.floor-queue-sort-btn:hover{ border-color:var(--gold-dim); color:var(--cream); }
.floor-queue-sort-btn.active{
  background: rgba(201,168,76,.14);
  border-color: var(--gold);
  color: var(--gold);
}

/* ── Bar seat row (Option B per-stool tracking) ───────────────────────
   The bar canvas card now renders a horizontal strip of small stool
   dots instead of generic "X parties at the bar" copy. Each dot is
   a tiny circle; occupied dots are filled with the party's deterministic
   color (see _colorForBarParty); walk-in dots get a dashed border. */

.fp-table-bar.fp-occupied .fp-table-label{ display: block; }
.fp-bar-label{
  font-family:'Josefin Sans',sans-serif;
  font-size:.5rem; letter-spacing:.18em; text-transform:uppercase;
  color:var(--gold-dim);
  margin-bottom:.18rem;
}
.fp-bar-seat-row{
  display:flex; flex-wrap:nowrap;
  gap:2px; width:100%;
  justify-content:center; align-items:center;
}
.fp-bar-seat{
  flex:1 1 0; min-width:0;
  aspect-ratio: 1 / 1;
  max-width: 22px;
  border:1.5px solid var(--gold-dim);
  background:transparent;
  color:var(--cream-dim);
  border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  font-family:'Josefin Sans',sans-serif;
  font-size:.52rem; font-weight:600;
  line-height:1;
}
.fp-bar-seat-walkin{
  border-style:dashed;
  border-color:rgba(120,120,120,.6);
  color:var(--muted);
}
.fp-bar-seat-occupied{
  border-style:solid;
  color:#0a0806;
}
.fp-bar-seat-finishing{
  animation: fp-finishing-pulse 2.4s ease-in-out infinite;
}
.fp-bar-pool{
  font-family:'Josefin Sans',sans-serif;
  font-size:.5rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--muted);
  text-align:center;
  margin-top:.2rem;
}

/* ── Bar seat picker modal ────────────────────────────────────────────
   Renders the 1..N stools as a wrap-friendly grid. Selected stools get
   a gold ring; occupied stools are locked + tinted with the owning
   party's color. Walk-in stools have a dashed border. */
.bsp-grid{
  display:grid;
  grid-template-columns: repeat(auto-fit, minmax(48px, 1fr));
  gap:.6rem;
  padding:.4rem 0;
}
.bsp-stool{
  aspect-ratio: 1 / 1;
  min-height: 48px;
  border:2px solid var(--border);
  background:transparent;
  color:var(--cream);
  border-radius:50%;
  font-family:'Josefin Sans',sans-serif;
  font-size:1rem; font-weight:600;
  cursor:pointer;
  transition: border-color .12s, transform .12s, background .12s;
}
.bsp-stool:hover:not(.bsp-stool-occupied){
  border-color:var(--gold-dim);
  transform: translateY(-1px);
}
.bsp-stool-walkin{
  border-style:dashed;
  border-color:rgba(120,120,120,.55);
  color:var(--cream-dim);
}
.bsp-stool-selected{
  border-color:var(--gold) !important;
  border-style:solid !important;
  box-shadow: 0 0 0 2px rgba(201,168,76,.35);
  color:var(--gold);
}
.bsp-stool-occupied{
  cursor:not-allowed;
  opacity:.85;
}

/* Legend strip under the grid */
.bsp-legend{
  display:flex; gap:.4rem; align-items:center;
  font-family:'Josefin Sans',sans-serif;
  font-size:.55rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--cream-dim);
}
.bsp-legend-dot{
  display:inline-block;
  width:10px; height:10px;
  border-radius:50%;
  margin:0 .15rem;
}
.bsp-legend-dot-free{ border:1.5px solid var(--gold-dim); }
.bsp-legend-dot-walkin{ border:1.5px dashed rgba(120,120,120,.6); }
.bsp-legend-dot-taken{ background:var(--gold); border:1.5px solid var(--gold); }

/* ── Backend (admin / staff / floor) font override ─────────────────────
   The public-facing pages (homepage, menu, reserve, event detail) keep
   the branded serif stack (Playfair Display + Cormorant Garamond + the
   small Josefin Sans accents) — those are part of the bar's identity.
   The internal dashboards do not need to feel like dinner; they need
   to feel like a tool. So inside .adm-wrap (admin + staff dashboards)
   and body.floor-body (host stand), everything that ISN'T explicitly
   monospace or an accent label gets Manrope — a geometric sans-serif
   that reads cleanly at any size and matches the visual register of
   modern operations tools (Supabase, Linear, Notion, etc.).

   We use !important here because dozens of admin HTML files set inline
   `style="font-family:'Playfair Display',serif"` on individual headings.
   Without !important the CSS would lose to inline. The scope is tight
   (.adm-wrap descendant or body.floor-body descendant) so this never
   leaks to the public site. */

.adm-wrap, .adm-wrap input, .adm-wrap textarea, .adm-wrap select, .adm-wrap button,
body.floor-body, body.floor-body input, body.floor-body textarea, body.floor-body select, body.floor-body button {
  font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;
}

.adm-wrap h1, .adm-wrap h2, .adm-wrap h3, .adm-wrap h4, .adm-wrap h5,
body.floor-body h1, body.floor-body h2, body.floor-body h3, body.floor-body h4, body.floor-body h5 {
  font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;
  font-weight: 600;
  letter-spacing: -0.01em;
}

/* Keep the small accent labels (".sec-label", eyebrow caps, ftab pills,
   schedule day headers) on Josefin Sans — they read as deliberate UI
   chrome at uppercase + tracked-out letter-spacing. */
.adm-wrap .sec-label,
.adm-wrap .ftab, .adm-wrap .ftab-strip button,
.adm-wrap .toggle-title,
body.floor-body .sec-label,
body.floor-body .ftab {
  font-family: 'Josefin Sans', sans-serif !important;
}

/* Code / monospace elements stay on JetBrains Mono (already inline-styled
   that way in most places — this is just a fallback safety net). */
.adm-wrap code, .adm-wrap pre, .adm-wrap kbd,
body.floor-body code, body.floor-body pre, body.floor-body kbd {
  font-family: 'JetBrains Mono', 'Courier New', monospace !important;
}

/* ════════════════════════════════════════════════════════════════════════
   HAWTHORNE BRAND THEMES — bar-wide, set in Site Settings → Operations
   ════════════════════════════════════════════════════════════════════════

   Three brand themes:
     • Speakeasy (default — current Amsterdamian look)  → no class needed,
       just uses the existing :root and html[data-theme="light"] variables
     • Hawthorne (neutral light/forest green/Manrope)   → body.theme-hawthorne
     • Custom    (Hawthorne base + tenant accent color) → body.theme-custom
       with --brand-accent set inline by JS from site_settings.brand.custom_accent

   Mechanism: overrides the same --gold / --border / --display variables
   the rest of the stylesheet already references. Existing rules pick up
   the new values automatically — no per-component rewrites needed.

   The personal Dark/Light toggle (data-theme on <html>) is orthogonal to
   the brand theme. A bar can pick "Hawthorne" + a staff member can still
   toggle dark mode on their own device. Recommended pairings:
     • Speakeasy + dark  = Amsterdamian's current default
     • Hawthorne + light = Hawthorne's natural state (most polished)
     • Custom    + light = a tenant's branded look
   ════════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════════════
   HAWTHORNE BRAND THEMES — "Slate" (dark default) + "Linen" (light variant)
   ════════════════════════════════════════════════════════════════════════
   Design system imported from Claude Design's theme-settings mockup.
   Geist (UI) + Geist Mono (eyebrows/numerals) — clean, modern, geometric.
   Hairline borders. Rounded cards. 8pt spacing. Single forest-green accent.

   Two palettes, switched by the user's personal Dark/Light toggle:
     • Default (no data-theme attr, or data-theme="dark"):
         SLATE — cool deep slate page bg, soft cream text, lighter
         sage accent. Mirrors the screenshot you liked.
     • data-theme="light":
         LINEN — warm paper page bg, deep ink text, forest green accent.

   Custom uses the same palettes with the tenant's accent in place of
   forest green. Speakeasy is unaffected by this entire block. */

/* ── SLATE (dark — default Hawthorne look) ───────────────────────────── */
html[data-brand-theme="hawthorne"],
html[data-brand-theme="custom"],
html[data-brand-theme="hawthorne"] body,
html[data-brand-theme="custom"] body {
  /* Slate surface hierarchy — cool deep neutrals */
  --black:     oklch(15% 0.005 240);    /* page bg — deep slate */
  --dark:      oklch(19% 0.005 240);    /* primary surface */
  --rich:      oklch(22% 0.005 240);    /* tertiary surface */
  --card:      oklch(19% 0.005 240);    /* card bg */

  /* Cream ink hierarchy for legibility on slate */
  --cream:     oklch(97% 0.005 90);     /* primary text — soft warm cream */
  --cream-dim: oklch(82% 0.005 90);     /* secondary */
  --text:      oklch(97% 0.005 90);
  --muted:     oklch(62% 0.005 90);     /* muted / tertiary */

  /* Hairlines */
  --border:    oklch(30% 0.006 240);
  --border-hi: oklch(38% 0.008 240);

  /* Brand accent — lighter sage on dark for AA contrast */
  --gold:       var(--brand-accent, oklch(76% 0.10 158));
  --gold-light: color-mix(in oklch, var(--brand-accent, oklch(76% 0.10 158)) 60%, white);
  --gold-dim:   color-mix(in oklch, var(--brand-accent, oklch(76% 0.10 158)) 50%, black);

  /* Type — single-typeface design move */
  --display: 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
  --ui:      'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
  --mono:    'Geist Mono', ui-monospace, 'SF Mono', Menlo, monospace;

  /* Semantic accents — recolored for AA contrast on slate */
  --accent-success:    oklch(72% 0.10 145);
  --accent-success-bg: oklch(28% 0.04 145);
  --accent-success-bd: oklch(40% 0.06 145);
  --accent-warn:       oklch(80% 0.08 75);
  --accent-warn-bg:    oklch(28% 0.04 70);
  --accent-warn-bd:    oklch(40% 0.06 70);
  --accent-danger:     oklch(72% 0.10 25);
  --accent-danger-bg:  oklch(28% 0.04 25);
  --accent-danger-bd:  oklch(40% 0.06 25);
  --accent-info:       oklch(75% 0.08 235);
  --accent-info-bg:    oklch(28% 0.04 235);
  --accent-info-bd:    oklch(40% 0.06 235);
}

/* ── LINEN (light — when user toggles to light personal mode) ────────── */
html[data-brand-theme="hawthorne"][data-theme="light"],
html[data-brand-theme="custom"][data-theme="light"],
html[data-brand-theme="hawthorne"][data-theme="light"] body,
html[data-brand-theme="custom"][data-theme="light"] body {
  /* Linen surface hierarchy — warm paper */
  --black:     #f7f6f1;
  --dark:      #faf9f5;
  --rich:      #f1efe7;
  --card:      #ffffff;

  /* Near-black ink */
  --cream:     #111111;
  --cream-dim: oklch(38% 0.005 90);
  --text:      #111111;
  --muted:     oklch(56% 0.005 90);

  /* Hairlines on warm paper */
  --border:    oklch(89% 0.005 90);
  --border-hi: oklch(82% 0.008 90);

  /* Forest green accent — deeper for AA contrast on cream */
  --gold:       var(--brand-accent, oklch(42% 0.06 158));
  --gold-light: color-mix(in oklch, var(--brand-accent, oklch(42% 0.06 158)) 35%, white);
  --gold-dim:   color-mix(in oklch, var(--brand-accent, oklch(42% 0.06 158)) 60%, black);

  /* Semantic accents — warm/legible on linen */
  --accent-success:    oklch(45% 0.10 145);
  --accent-success-bg: oklch(95% 0.025 145);
  --accent-success-bd: oklch(78% 0.05 145);
  --accent-warn:       oklch(50% 0.10 70);
  --accent-warn-bg:    oklch(96% 0.04 70);
  --accent-warn-bd:    oklch(82% 0.06 70);
  --accent-danger:     oklch(48% 0.13 25);
  --accent-danger-bg:  oklch(95% 0.03 25);
  --accent-danger-bd:  oklch(78% 0.07 25);
  --accent-info:       oklch(48% 0.08 235);
  --accent-info-bg:    oklch(95% 0.02 235);
  --accent-info-bd:    oklch(78% 0.05 235);
}

/* ── Geist typography (applies to both Slate and Linen) ──────────────── */
html[data-brand-theme="hawthorne"] body,
html[data-brand-theme="custom"] body,
html[data-brand-theme="hawthorne"] .adm-wrap,
html[data-brand-theme="custom"] .adm-wrap,
html[data-brand-theme="hawthorne"] body.floor-body,
html[data-brand-theme="custom"] body.floor-body {
  font-family: var(--ui);
  font-feature-settings: "ss01", "cv11";  /* Geist stylistic alternates */
  letter-spacing: -0.005em;
}

/* ── Component polish: rounded cards, hairlines, soft shadows ────────── */
/* The signature look of the design — bigger border-radius (14px not 3px),
   subtle box-shadow lift, generous padding rhythm. */
html[data-brand-theme="hawthorne"] .tbl-wrap,
html[data-brand-theme="custom"] .tbl-wrap {
  border-radius: 14px;
  border: 1px solid var(--border);
  background: var(--card);
  box-shadow: 0 1px 0 rgba(0,0,0,.04), 0 1px 2px rgba(0,0,0,.03);
}
html[data-brand-theme="hawthorne"][data-theme="light"] .tbl-wrap,
html[data-brand-theme="custom"][data-theme="light"] .tbl-wrap {
  box-shadow: 0 1px 0 rgba(17,17,17,.04), 0 1px 2px rgba(17,17,17,.03);
}

/* Filter tabs — small radius, segmented look */
html[data-brand-theme="hawthorne"] .ftab,
html[data-brand-theme="custom"] .ftab {
  border-radius: 7px;
  border: 1px solid transparent;
  font-family: var(--mono);
  font-size: .72rem;
  letter-spacing: .04em;
  text-transform: none;
}
html[data-brand-theme="hawthorne"] .ftab.active,
html[data-brand-theme="custom"] .ftab.active {
  background: var(--gold);
  color: var(--card);
  border-color: var(--gold);
}

/* Sec-label eyebrow — mono uppercase tracked, the design signature */
html[data-brand-theme="hawthorne"] .sec-label,
html[data-brand-theme="custom"] .sec-label,
html[data-brand-theme="hawthorne"] .adm-wrap .sec-label,
html[data-brand-theme="custom"] .adm-wrap .sec-label {
  font-family: var(--mono) !important;
  font-size: .68rem;
  letter-spacing: .08em;
  font-weight: 500;
  color: var(--muted);
}

/* Buttons (.abtn) — match the design's button style */
html[data-brand-theme="hawthorne"] .abtn,
html[data-brand-theme="custom"] .abtn {
  border-radius: 7px;
  font-family: var(--ui);
  font-size: .82rem;
  font-weight: 500;
  letter-spacing: -0.005em;
  text-transform: none;
  padding: .45rem .85rem;
  border: 1px solid var(--border-hi);
  background: var(--card);
  color: var(--cream);
}
html[data-brand-theme="hawthorne"] .abtn:hover,
html[data-brand-theme="custom"] .abtn:hover {
  background: var(--dark);
  border-color: var(--border-hi);
  color: var(--cream);
}
html[data-brand-theme="hawthorne"] .abtn.primary,
html[data-brand-theme="custom"] .abtn.primary {
  background: var(--cream);
  color: var(--card);
  border-color: var(--cream);
}
html[data-brand-theme="hawthorne"] .abtn.primary:hover,
html[data-brand-theme="custom"] .abtn.primary:hover {
  background: var(--cream-dim);
  border-color: var(--cream-dim);
}

/* Form inputs — rounded, subtle */
html[data-brand-theme="hawthorne"] input[type="text"],
html[data-brand-theme="hawthorne"] input[type="email"],
html[data-brand-theme="hawthorne"] input[type="tel"],
html[data-brand-theme="hawthorne"] input[type="number"],
html[data-brand-theme="hawthorne"] input[type="date"],
html[data-brand-theme="hawthorne"] input[type="time"],
html[data-brand-theme="hawthorne"] input[type="url"],
html[data-brand-theme="hawthorne"] textarea,
html[data-brand-theme="hawthorne"] select,
html[data-brand-theme="custom"] input[type="text"],
html[data-brand-theme="custom"] input[type="email"],
html[data-brand-theme="custom"] input[type="tel"],
html[data-brand-theme="custom"] input[type="number"],
html[data-brand-theme="custom"] input[type="date"],
html[data-brand-theme="custom"] input[type="time"],
html[data-brand-theme="custom"] input[type="url"],
html[data-brand-theme="custom"] textarea,
html[data-brand-theme="custom"] select {
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--dark);
  color: var(--cream);
  font-family: var(--ui);
  padding: .5rem .7rem;
  transition: border-color 120ms;
}
html[data-brand-theme="hawthorne"] input:focus,
html[data-brand-theme="hawthorne"] textarea:focus,
html[data-brand-theme="hawthorne"] select:focus,
html[data-brand-theme="custom"] input:focus,
html[data-brand-theme="custom"] textarea:focus,
html[data-brand-theme="custom"] select:focus {
  border-color: var(--gold);
  outline: none;
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--gold) 18%, transparent);
}

/* Sidebar nav items — softer, more padding, rounded */
html[data-brand-theme="hawthorne"] .adm-sidebar .adm-ntab,
html[data-brand-theme="custom"] .adm-sidebar .adm-ntab {
  border-radius: 7px;
  font-family: var(--ui);
  font-size: .85rem;
  font-weight: 450;
  letter-spacing: -0.005em;
  text-transform: none;
  padding: .55rem .7rem;
  margin-bottom: 1px;
}
html[data-brand-theme="hawthorne"] .adm-sidebar .adm-ntab.active,
html[data-brand-theme="custom"] .adm-sidebar .adm-ntab.active {
  background: var(--rich);
  color: var(--cream);
  font-weight: 500;
}
html[data-brand-theme="hawthorne"] .adm-sidebar .adm-ntab:hover:not(.active),
html[data-brand-theme="custom"] .adm-sidebar .adm-ntab:hover:not(.active) {
  background: var(--rich);
}

/* Tables — clean hairline borders */
html[data-brand-theme="hawthorne"] .tbl-wrap table th,
html[data-brand-theme="custom"] .tbl-wrap table th {
  font-family: var(--mono);
  font-size: .65rem;
  font-weight: 500;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--muted);
  border-bottom: 1px solid var(--border);
  padding: .85rem 1rem;
}
html[data-brand-theme="hawthorne"] .tbl-wrap table td,
html[data-brand-theme="custom"] .tbl-wrap table td {
  border-bottom: 1px solid var(--border);
  padding: .85rem 1rem;
  font-family: var(--ui);
}

/* Modals — rounded, slightly elevated */
html[data-brand-theme="hawthorne"] .modal-ov > div,
html[data-brand-theme="custom"] .modal-ov > div {
  border-radius: 14px;
  border: 1px solid var(--border);
  box-shadow: 0 8px 32px -10px rgba(0,0,0,.5);
}

/* Force the dashboard sec-label + ftab + toggle-title onto Manrope when
   Hawthorne is active (overrides the Josefin Sans dashboard fallback
   defined above). Single typeface = the Hawthorne signature move. */
html[data-brand-theme="hawthorne"] .adm-wrap .sec-label,
html[data-brand-theme="hawthorne"] .adm-wrap .ftab, html[data-brand-theme="hawthorne"] .adm-wrap .ftab-strip button,
html[data-brand-theme="hawthorne"] .adm-wrap .toggle-title,
html[data-brand-theme="hawthorne"] body.floor-body .sec-label,
html[data-brand-theme="hawthorne"] body.floor-body .ftab,
html[data-brand-theme="custom"] .adm-wrap .sec-label,
html[data-brand-theme="custom"] .adm-wrap .ftab, html[data-brand-theme="custom"] .adm-wrap .ftab-strip button,
html[data-brand-theme="custom"] .adm-wrap .toggle-title,
html[data-brand-theme="custom"] body.floor-body .sec-label,
html[data-brand-theme="custom"] body.floor-body .ftab {
  font-family: 'Manrope', system-ui, sans-serif !important;
  /* Slightly tighter tracking than Josefin's wide caps — Manrope already
     has the right operator-tool density at uppercase. */
  letter-spacing: .22em;
}

/* Override any inline-styled Playfair Display headings in dashboard
   pages. Playfair is a public-site face — it has no place in the
   operator tool when Hawthorne is active. The serif drops out, the
   line-height tightens slightly to match Manrope's metrics, and the
   weight bumps up since Manrope semibold reads at roughly the same
   visual weight as Playfair regular. */
html[data-brand-theme="hawthorne"] .adm-wrap [style*="Playfair"],
html[data-brand-theme="hawthorne"] .adm-wrap [style*="playfair"],
html[data-brand-theme="hawthorne"] body.floor-body [style*="Playfair"],
html[data-brand-theme="custom"] .adm-wrap [style*="Playfair"],
html[data-brand-theme="custom"] .adm-wrap [style*="playfair"],
html[data-brand-theme="custom"] body.floor-body [style*="Playfair"] {
  font-family: 'Manrope', system-ui, sans-serif !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em;
}

/* Cormorant Garamond italic accents — same treatment. Where it's used
   as an italic flourish, replace with Manrope italic at the same size. */
html[data-brand-theme="hawthorne"] .adm-wrap [style*="Cormorant"],
html[data-brand-theme="hawthorne"] body.floor-body [style*="Cormorant"],
html[data-brand-theme="custom"] .adm-wrap [style*="Cormorant"],
html[data-brand-theme="custom"] body.floor-body [style*="Cormorant"] {
  font-family: 'Manrope', system-ui, sans-serif !important;
}

/* Pre-paint helper variables — only matter for Custom theme.
   Optionally set by JS via document.documentElement.style.setProperty
   based on site_settings.brand.custom_accent. If not set, the var()
   fallbacks above kick in (forest green = Hawthorne default).
   Keeping the *-light, *-dim, *-border variants derived from the same
   accent means the theme stays internally consistent regardless of
   what color the bar picks. */
