/* ==========================================================================
   ESP Expo - Exhibitor & Admin Portal
   One stylesheet, light theme, ESP blue (per-expo --accent override in head.php).
   Fonts: Sora (display) + Inter (body). Product-UI system: calm, crisp, polished.
   Every class name here is a contract the PHP renders against - do not rename.
   ========================================================================== */

:root{
  /* brand blue ramp */
  --blue:#0B5FFF; --blue-600:#0A4FD6; --blue-700:#0840AD;
  --blue-50:#EEF4FF; --blue-100:#DBE7FF; --blue-200:#C2D6FF;
  --accent:var(--blue);

  /* cool-slate neutrals (subtle blue undertone to sit under the brand) */
  --bg:#F4F7FC; --bg-2:#EEF2F9;
  --surface:#FFFFFF; --surface-2:#F8FAFD;
  --fg:#0C1424; --fg-soft:#26324A;
  --muted:#586074; --muted-2:#6B7382;
  --border:#E4E9F2; --border-2:#D8E0EC; --hair:#EDF1F7;

  /* semantic */
  --success:#067647; --success-bg:#E7F6EF; --success-bd:#BFE6D3;
  --warning:#B45309; --warning-bg:#FBF2E3; --warning-bd:#EEDCBA;
  --danger:#C2342B;  --danger-bg:#FBECEA;  --danger-bd:#F1CBC7;

  /* geometry - one radius scale (controls 10, cards 14, big surfaces 18, pills 999) */
  --radius:14px; --radius-sm:10px; --radius-lg:18px; --radius-pill:999px;
  --ring:var(--accent);

  /* elevation - shadows tinted to slate-blue, never pure black */
  --shadow-sm:0 1px 2px rgba(16,33,68,.05), 0 1px 3px rgba(16,33,68,.05);
  --shadow:0 1px 2px rgba(16,33,68,.04), 0 10px 28px -12px rgba(16,33,68,.16);
  --shadow-lg:0 24px 60px -20px rgba(16,33,68,.30), 0 8px 18px -10px rgba(16,33,68,.16);
  --ring-shadow:0 0 0 3px rgba(11,95,255,.18);

  /* motion */
  --ease:cubic-bezier(0.16,1,0.3,1);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  font-family:'Inter',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  background:var(--bg); color:var(--fg); font-size:15px; line-height:1.55;
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
}
/* gentle ambient wash behind the app so the light theme reads as designed, not blank */
body::before{
  content:""; position:fixed; inset:0; z-index:-1; pointer-events:none;
  background:
    radial-gradient(120% 80% at 100% 0%, rgba(11,95,255,.05), transparent 60%),
    radial-gradient(90% 70% at 0% 100%, rgba(11,95,255,.035), transparent 55%);
}
h1,h2,h3,.display{font-family:'Sora','Inter',sans-serif;letter-spacing:-.02em;color:var(--fg)}
a{color:var(--blue);text-decoration:none;transition:color .14s ease}
a:hover{color:var(--blue-700);text-decoration:underline;text-underline-offset:2px}
.muted{color:var(--muted)}
.tabnum{font-variant-numeric:tabular-nums}
::selection{background:rgba(11,95,255,.16)}
/* native-square checkboxes (markup carries inline width:auto), just brand-tinted */
input[type=checkbox],input[type=radio]{accent-color:var(--accent);cursor:pointer}
/* keyboard focus: a visible brand ring on interactive elements (WCAG 2.4.7 Focus
   Visible). Form fields keep their own :focus box-shadow ring below and are excluded. */
a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sidebar a:focus-visible,.sidebar button:focus-visible,.lightbox-close:focus-visible{outline-color:#fff}

/* ---- layout ---- */
.shell{display:flex;min-height:100vh}
.sidebar{
  width:252px;flex-shrink:0;position:sticky;top:0;height:100vh;overflow-y:auto;
  display:flex;flex-direction:column;color:#e6ebf3;
  background:linear-gradient(185deg,#111f38 0%,#0d1729 60%,#0b1425 100%);
  border-right:1px solid rgba(255,255,255,.07);
  box-shadow:inset -1px 0 0 rgba(255,255,255,.03);
}
.sidebar::-webkit-scrollbar{width:8px}
.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:8px}
.sidebar .brand{display:flex;align-items:center;gap:11px;padding:20px 20px 16px}
.sidebar .brand .logo{
  width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
  color:#fff;font-family:'Sora';font-weight:700;font-size:17px;background:var(--accent);
  box-shadow:0 6px 16px -4px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.25);
}
.sidebar .brand strong{color:#fff;font-family:'Sora';font-weight:700;letter-spacing:-.01em}
.sidebar .brand small{display:block;color:rgba(255,255,255,.5);font-size:11.5px;letter-spacing:.02em;margin-top:1px}
.sidebar nav{flex:1;padding:8px 12px}
.sidebar nav a{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;
  color:rgba(255,255,255,.72);font-weight:500;font-size:14px;text-decoration:none;margin-bottom:2px;
  position:relative;transition:background .16s ease,color .16s ease,transform .16s var(--ease);
}
.sidebar nav a:hover{background:rgba(255,255,255,.08);color:#fff;text-decoration:none}
.sidebar nav a.active{
  background:var(--accent);color:#fff;font-weight:600;
  box-shadow:0 8px 18px -8px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.18);
}
.sidebar nav a.active::before{
  content:"";position:absolute;left:-12px;top:50%;transform:translateY(-50%);
  width:3px;height:20px;border-radius:0 3px 3px 0;background:#fff;opacity:.9;
}
.sidebar nav .group{
  font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;
  color:rgba(255,255,255,.55);padding:16px 12px 6px;font-weight:700;
}
/* sidebar activity notification: a plain red dot = unreviewed exhibitor activity; clears when the page is opened */
.sidebar nav a .nav-dot{
  margin-left:auto;flex:none;width:9px;height:9px;border-radius:50%;
  background:#E5484D;box-shadow:0 0 0 3px rgba(229,72,77,.20);
}
.sidebar nav a.active .nav-dot{background:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.30)}
.sidebar .foot{border-top:1px solid rgba(255,255,255,.09);padding:12px;margin-top:auto}
.sidebar .muted{color:rgba(255,255,255,.55)}
.sidebar .foot .btn{color:rgba(255,255,255,.8);border-radius:10px}
.sidebar .foot .btn:hover{background:rgba(255,255,255,.09);color:#fff}
.main{flex:1;min-width:0}
.container{max-width:960px;margin:0 auto;padding:30px 30px 64px}
.container.wide{max-width:1200px}

/* ---- page header ---- */
.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:24px}
.page-head h1{font-size:26px;font-weight:700;margin:0;line-height:1.15}
.page-head p{margin:6px 0 0;color:var(--muted);font-size:14px;max-width:62ch;line-height:1.5}
.deadline{
  display:inline-flex;align-items:center;gap:6px;background:var(--warning-bg);
  color:var(--warning);border:1px solid var(--warning-bd);border-radius:var(--radius-pill);
  padding:6px 13px;font-size:12.5px;font-weight:600;white-space:nowrap;box-shadow:var(--shadow-sm);
}
.deadline::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.85}

/* ---- cards ---- */
.card{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:24px;margin-bottom:20px;
}
.card h2{
  font-size:15px;font-weight:700;font-family:'Sora';letter-spacing:-.01em;margin:0 0 16px;
  padding-bottom:12px;border-bottom:1px solid var(--hair);
}
.grid{display:grid;gap:16px}
.grid-2{grid-template-columns:1fr 1fr}
.grid>.card{margin-bottom:0} /* grid gap already spaces cards - avoid double gap */
@media(max-width:640px){.grid-2{grid-template-columns:1fr}}

/* ---- forms ---- */
.field{margin-bottom:0}
.field label{display:block;font-size:13px;font-weight:600;margin-bottom:7px;color:var(--fg-soft)}
.field .req{color:var(--danger)}
.field .hint,.field .err{font-size:12px;margin-top:6px;line-height:1.45}
.field .hint{color:var(--muted)}
.field .err{color:var(--danger);font-weight:500}
/* company-logo preview + recommended-sizes chip (profile page) */
.logo-media{display:flex;gap:14px;align-items:stretch;flex-wrap:wrap}
.logo-preview{
  flex:0 0 auto;height:88px;width:auto;max-width:200px;object-fit:contain;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;padding:9px;box-shadow:var(--shadow-sm);
}
.logo-guide{
  flex:1 1 220px;min-width:200px;border:1px solid var(--border);border-radius:var(--radius-sm);
  background:var(--surface-2);padding:11px 14px;font-size:12px;color:var(--muted);line-height:1.5;
}
.logo-guide strong{display:block;color:var(--fg);font-size:12.5px;font-weight:600;margin-bottom:5px}
.logo-guide .lg-row{display:flex;justify-content:space-between;gap:12px;padding:2px 0}
.logo-guide .lg-row.lg-fmt{margin-top:5px;padding-top:6px;border-top:1px dashed var(--border-2)}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],
input[type=tel],input[type=url],input[type=search],select,textarea{
  width:100%;padding:10px 13px;border:1px solid var(--border-2);border-radius:var(--radius-sm);
  font:inherit;font-size:14.5px;color:var(--fg);background:#fff;
  transition:border-color .14s ease,box-shadow .14s ease,background .14s ease;
}
input::placeholder,textarea::placeholder{color:var(--muted-2)}
input:hover,select:hover,textarea:hover{border-color:#C4CEDD}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--accent);background:#fff;box-shadow:var(--ring-shadow);
}
textarea{resize:vertical;min-height:96px;line-height:1.5}
/* custom select caret - scoped to real form selects (raw admin utility selects with
   inline padding keep the native arrow, so long option text never sits under the caret) */
.field select{
  -webkit-appearance:none;appearance:none;padding-right:38px;cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23586074' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;background-size:15px;
}
.readonly{
  display:flex;align-items:center;min-height:42px;padding:10px 13px;border:1px solid var(--border);
  border-radius:var(--radius-sm);background:var(--surface-2);color:var(--fg-soft);font-size:14.5px;
}

/* ---- buttons ---- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 17px;
  border-radius:var(--radius-sm);font:inherit;font-weight:600;font-size:14px;cursor:pointer;
  border:1px solid transparent;text-decoration:none;white-space:nowrap;position:relative;overflow:hidden;
  transition:transform .12s var(--ease),background .16s ease,box-shadow .16s ease,border-color .16s ease,filter .16s ease;
}
.btn:active{transform:translateY(1px)}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.btn-primary{
  background:var(--accent);color:#fff;
  box-shadow:0 6px 18px -6px rgba(11,95,255,.5),inset 0 1px 0 rgba(255,255,255,.22);
}
.btn-primary:hover{filter:brightness(.95);text-decoration:none;box-shadow:0 9px 22px -7px rgba(11,95,255,.55),inset 0 1px 0 rgba(255,255,255,.22)}
.btn-outline{background:#fff;border-color:var(--border-2);color:var(--fg-soft);box-shadow:var(--shadow-sm)}
.btn-outline:hover{background:var(--surface-2);border-color:#C4CEDD;color:var(--fg);text-decoration:none}
.btn-ghost{background:transparent;color:var(--muted)}
.btn-ghost:hover{background:rgba(16,33,68,.055);color:var(--fg);text-decoration:none}
.btn-danger{background:var(--danger);color:#fff;box-shadow:0 6px 16px -7px rgba(194,52,43,.6),inset 0 1px 0 rgba(255,255,255,.16)}
.btn-danger:hover{filter:brightness(.95);text-decoration:none}
.btn-sm{padding:6px 12px;font-size:13px;border-radius:9px;gap:6px}
.btn-block{width:100%}
.btn:disabled,.btn.is-busy{opacity:.6;cursor:default;box-shadow:none;pointer-events:none}
.row-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}

/* ---- badges ---- */
.badge{
  display:inline-flex;align-items:center;gap:5px;border-radius:var(--radius-pill);
  padding:3px 11px;font-size:12px;font-weight:600;border:1px solid;line-height:1.4;
}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.8;flex:none}
.badge.success{background:var(--success-bg);color:var(--success);border-color:var(--success-bd)}
.badge.warning{background:var(--warning-bg);color:var(--warning);border-color:var(--warning-bd)}
.badge.danger{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-bd)}
.badge.neutral{background:#EEF1F7;color:var(--muted);border-color:var(--border-2)}

/* ---- tables ---- */
.table-wrap{
  background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);overflow-x:auto;
}
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{text-align:left;padding:12px 16px;border-bottom:1px solid var(--hair);white-space:nowrap;vertical-align:middle}
th{
  font-size:11.5px;color:var(--muted);font-weight:700;background:var(--surface-2);
  text-transform:uppercase;letter-spacing:.05em;
}
thead th{border-bottom:1px solid var(--border)}
tbody tr{transition:background .12s ease}
tbody tr:last-child td,tr:last-child td{border-bottom:none}
tbody tr:hover td{background:var(--surface-2)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
td{color:var(--fg-soft)}
/* grouped tables: a company summary header row + its individual rows */
tr.g-head > td{background:var(--blue-50);border-top:2px solid var(--border-2);color:var(--fg)}
tr.g-head:hover > td{background:var(--blue-100)}
tr.g-head{cursor:pointer}
tr.g-head .g-caret{display:inline-block;margin-right:7px;color:var(--muted);font-size:10px;transition:transform .16s var(--ease)}
tr.g-head.collapsed .g-caret{transform:rotate(-90deg)}
tr.g-sub > td:first-child{padding-left:24px}
@media (prefers-reduced-motion:reduce){tr.g-head .g-caret{transition:none}}
.empty{padding:52px 24px;text-align:center;color:var(--muted);font-size:14px}
.empty::before{
  content:"";display:block;width:44px;height:44px;margin:0 auto 14px;border-radius:12px;
  background:var(--bg-2);border:1px solid var(--border);
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23A6B0C0' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='4' width='18' height='16' rx='2'/><path d='M3 9h18M8 4v16'/></svg>");
  background-repeat:no-repeat;background-position:center;
}

/* ---- misc components ---- */
.info-note{
  background:var(--warning-bg);border:1px solid var(--warning-bd);color:#5c3d12;
  border-radius:var(--radius-sm);padding:14px 16px 14px 44px;font-size:14px;margin-bottom:20px;
  position:relative;line-height:1.5;box-shadow:var(--shadow-sm);
}
.info-note::before{
  content:"i";position:absolute;left:14px;top:14px;width:20px;height:20px;border-radius:50%;
  background:var(--warning);color:#fff;font-family:'Sora';font-weight:700;font-size:13px;
  display:grid;place-items:center;font-style:normal;
}
.rate-row{
  display:flex;align-items:center;gap:8px;background:var(--blue-50);border:1px solid var(--blue-100);
  color:var(--blue-700);border-radius:var(--radius-sm);padding:11px 14px;font-size:14px;font-weight:500;
}
.total-cost{
  display:flex;justify-content:space-between;align-items:center;gap:14px;
  background:linear-gradient(180deg,var(--blue-50),#fff);
  border:1px solid var(--blue-100);border-left:3px solid var(--accent);
  border-radius:var(--radius-sm);padding:16px 18px;box-shadow:var(--shadow-sm);
}
.total-cost .val{font-family:'Sora';font-size:27px;font-weight:800;color:var(--accent);letter-spacing:-.02em}
.total-cost small{color:var(--muted);max-width:18rem;text-align:right;display:block;line-height:1.4}
.contact{border-top:1px solid var(--hair);margin-top:22px;padding-top:18px;font-size:14px}
.contact .lbl{font-weight:600;margin-bottom:8px;color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.05em}
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(184px,1fr));gap:16px;margin-bottom:24px}
.stat{
  background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:20px;position:relative;overflow:hidden;
}
.stat::after{
  content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--accent),transparent 70%);opacity:.7;
}
.stat .k{font-size:13px;color:var(--muted);font-weight:600}
.stat .v{font-family:'Sora';font-size:30px;font-weight:800;margin-top:8px;letter-spacing:-.02em;line-height:1}
/* clickable stat card (e.g. Pending approvals -> jumps to the list below) */
a.stat-link{display:block;text-decoration:none;color:inherit;cursor:pointer;transition:transform .18s var(--ease),box-shadow .18s ease,border-color .18s ease}
a.stat-link:hover{border-color:var(--blue-200);box-shadow:var(--shadow-lg);transform:translateY(-3px)}
a.stat-link:active{transform:translateY(-1px)}
a.stat-link:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(11,95,255,.4)}
.stat-cta{margin-top:12px;font-size:12px;font-weight:700;color:var(--accent);display:inline-flex;align-items:center;gap:5px}
.stat-cta::after{content:"\2192";transition:transform .18s var(--ease)}
a.stat-link:hover .stat-cta::after{transform:translateX(3px)}
#pending-approvals{scroll-margin-top:80px;border-radius:10px}
#pending-approvals:target{animation:pendingFlash 1.8s ease}
@keyframes pendingFlash{0%,100%{background:transparent}12%{background:rgba(214,158,46,.20)}}
@media (prefers-reduced-motion:reduce){
  a.stat-link{transition:none}
  #pending-approvals:target{animation:none}
  html{scroll-behavior:auto}
}
/* ---- admin dashboard: "Action needed" + "Deadlines" cards ---- */
.dash-group{padding:14px 0;border-top:1px solid var(--hair)}
.dash-group:first-of-type{border-top:0;padding-top:4px}
.dash-head{display:flex;align-items:center;gap:12px}
.dash-ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center}
.dash-ic svg{width:18px;height:18px;stroke-width:1.9}
.dash-ic.tone-warn{background:var(--warning-bg);color:var(--warning)}
.dash-ic.tone-ok{background:var(--success-bg);color:var(--success)}
.dash-ic.tone-accent{background:var(--blue-50);color:var(--accent)}
.dash-ic.tone-danger{background:var(--danger-bg);color:var(--danger)}
.dash-head .t{flex:1;min-width:0}
.dash-head .t b{display:block;font-size:14px;font-weight:600;color:var(--fg);line-height:1.3}
.dash-head .t small{color:var(--muted);font-size:12px}
.count-chip{flex:none;font-family:'Sora';font-weight:700;font-size:12px;padding:3px 11px;border-radius:999px;border:1px solid transparent}
.count-chip.tone-warn{background:var(--warning-bg);color:var(--warning);border-color:var(--warning-bd)}
.count-chip.tone-ok{background:var(--success-bg);color:var(--success);border-color:var(--success-bd)}
.chip-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:11px;padding-left:46px}
.chip-row .chip{font-size:12.5px;font-weight:500;color:var(--fg-soft);background:var(--surface-2);border:1px solid var(--border);border-radius:999px;padding:4px 11px;text-decoration:none;transition:border-color .15s ease,color .15s ease,transform .15s var(--ease)}
.chip-row .chip:hover{border-color:var(--accent);color:var(--accent);text-decoration:none;transform:translateY(-1px)}
.appr-list{margin-top:8px;padding-left:46px}
.appr-row{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 0;font-size:14px;border-top:1px solid var(--hair)}
.appr-row:first-child{border-top:0}
.dl-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--hair)}
.dl-row:first-child{border-top:0;padding-top:4px}
.dl-row .t{flex:1;min-width:0}
.dl-row .t b{display:block;font-size:14px;font-weight:600;color:var(--fg);line-height:1.3}
.dl-row .t small{color:var(--muted);font-size:12px}
.days-pill{flex:none;font-family:'Sora';font-weight:700;font-size:12px;padding:4px 11px;border-radius:999px;white-space:nowrap;border:1px solid transparent}
.days-pill.tone-danger{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-bd)}
.days-pill.tone-warn{background:var(--warning-bg);color:var(--warning);border-color:var(--warning-bd)}
.days-pill.tone-ok{background:var(--blue-50);color:var(--accent);border-color:var(--blue-100)}
@media (prefers-reduced-motion:reduce){.chip-row .chip{transition:none}}
@media (max-width:600px){.chip-row,.appr-list{padding-left:0}}
/* animated countdown */
.cd{display:flex;gap:8px;margin-top:8px}
.cd-cell{
  min-width:56px;text-align:center;background:linear-gradient(180deg,var(--blue-50),#fff);
  border:1px solid var(--blue-100);border-radius:12px;padding:9px 6px;overflow:hidden;box-shadow:var(--shadow-sm);
}
.cd-num{display:block;font-family:'Sora';font-weight:800;font-size:24px;line-height:1;color:var(--accent);font-variant-numeric:tabular-nums}
.cd-lbl{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-top:6px;font-weight:600}
.cd-num.tick{animation:cdtick .45s var(--ease)}
@keyframes cdtick{0%{transform:translateY(45%);opacity:0}100%{transform:translateY(0);opacity:1}}
@media (prefers-reduced-motion:reduce){.cd-num.tick{animation:none}}
.thumb{width:44px;height:44px;border-radius:10px;border:1px solid var(--border);object-fit:cover;background:var(--bg-2);display:grid;place-items:center;color:#9aa3b2}
.furn-thumb{width:64px;height:64px;border-radius:10px;border:1px solid var(--border);object-fit:contain;background:#fff;display:block;cursor:zoom-in;box-shadow:var(--shadow-sm);transition:transform .18s var(--ease),box-shadow .18s ease}
.furn-thumb:hover{transform:scale(1.06);box-shadow:var(--shadow)}
.furn-ph{width:64px;height:64px;border-radius:10px;border:1px solid var(--border);display:grid;place-items:center;color:#9aa3b2;background:var(--surface-2);font-size:20px}

/* ---- furniture catalogue picker (exhibitor): tabs + product grid ---- */
.furn-head{margin:4px 0 14px}
.furn-head h2{margin:0}
/* category tabs (pills, scroll horizontally if they overflow) */
.furn-tabs{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 14px;margin:0 -2px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.furn-tabs::-webkit-scrollbar{display:none}
.furn-tab{flex:none;display:inline-flex;align-items:center;gap:7px;cursor:pointer;font:inherit;font-size:13.5px;
  font-weight:600;color:var(--fg-soft);background:var(--surface);border:1px solid var(--border);
  padding:8px 14px;border-radius:var(--radius-pill);box-shadow:var(--shadow-sm);
  transition:background .16s var(--ease),border-color .16s,color .16s,transform .1s var(--ease)}
.furn-tab:hover{background:var(--surface-2);border-color:var(--border-2)}
.furn-tab:active{transform:translateY(1px)}
.furn-tab:focus-visible{outline:none;box-shadow:var(--ring-shadow)}
.furn-tab.is-active{background:var(--accent);border-color:var(--accent);color:#fff;
  box-shadow:0 8px 18px -8px color-mix(in srgb,var(--accent) 60%,transparent)}
.furn-tab-n{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;
  font-size:11px;font-weight:700;background:var(--blue-50);color:var(--blue-700)}
.furn-tab.is-active .furn-tab-n{background:rgba(255,255,255,.24);color:#fff}
/* product grid */
.furn-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:14px}
.furn-card{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);
  transition:transform .16s var(--ease),box-shadow .16s ease,border-color .16s}
.furn-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:var(--border-2)}
.furn-card.is-selected{border-color:var(--accent);box-shadow:0 0 0 2px rgba(11,95,255,.18),var(--shadow)}
.furn-card-media{position:relative;aspect-ratio:11/10;display:grid;place-items:center;overflow:hidden;
  background:linear-gradient(180deg,var(--surface-2),#fff);border-bottom:1px solid var(--hair)}
/* object-fit:contain shows the WHOLE image (never cropped); the box matches the photos'
   ~1.1 aspect ratio so the image fills the frame edge-to-edge with no letterbox bars. */
.furn-card-media img{width:100%;height:100%;object-fit:contain;padding:8px;display:block}
.furn-ph2{color:#aab2c0;font-size:34px}
.furn-zoom{position:absolute;top:8px;right:8px;width:28px;height:28px;display:grid;place-items:center;
  border-radius:8px;background:rgba(255,255,255,.85);border:1px solid var(--border);color:var(--muted);
  font-size:14px;text-decoration:none;box-shadow:var(--shadow-sm);backdrop-filter:blur(3px)}
.furn-zoom:hover{color:var(--fg);text-decoration:none;background:#fff}
.furn-card-body{padding:12px 14px 4px;flex:1}
.furn-name{font-weight:600;font-size:14px;line-height:1.3}
.furn-dim{font-size:12px;margin-top:3px}
.furn-rate{font-family:'Sora','Inter',sans-serif;font-weight:700;font-size:15px;color:var(--fg);margin-top:9px}
.furn-card-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:11px 14px 13px}
.furn-qty{display:inline-flex;align-items:center;flex:none;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;background:#fff}
.furn-step{width:30px;height:32px;border:0;background:var(--surface-2);color:var(--fg-soft);font-size:16px;line-height:1;cursor:pointer;transition:background .14s,color .14s}
.furn-step:hover{background:var(--blue-50);color:var(--blue-700)}
.furn-qty input{width:40px;height:32px;text-align:center;border:0;border-left:1px solid var(--border);border-right:1px solid var(--border);padding:0;border-radius:0;font-weight:600;-moz-appearance:textfield}
.furn-qty input::-webkit-outer-spin-button,.furn-qty input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
/* "Add to cart" button on each card */
.furn-add{flex:1 1 auto;min-width:112px;cursor:pointer;font:inherit;font-size:13px;font-weight:700;
  padding:8px 14px;border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--accent);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;transition:filter .14s,transform .1s var(--ease),background .16s,border-color .16s}
.furn-add:hover{filter:brightness(1.06)}
.furn-add:active{transform:translateY(1px)}
.furn-add:focus-visible{outline:none;box-shadow:var(--ring-shadow)}
.furn-add.is-added{background:var(--success);border-color:var(--success);filter:none}

/* floating cart button */
.furn-cart-btn{position:fixed;right:20px;bottom:20px;z-index:45;display:inline-flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:var(--radius-pill);border:0;cursor:pointer;color:#fff;background:var(--accent);
  box-shadow:0 14px 30px -8px color-mix(in srgb,var(--accent) 66%,transparent),0 4px 10px rgba(16,33,68,.18);
  transition:transform .16s var(--ease),box-shadow .16s ease}
.furn-cart-btn:hover{transform:translateY(-2px)}
.furn-cart-btn:active{transform:translateY(0)}
.furn-cart-btn:focus-visible{outline:none;box-shadow:var(--ring-shadow)}
.furn-cart-count{position:absolute;top:-5px;right:-5px;min-width:22px;height:22px;padding:0 6px;border-radius:999px;
  background:#fff;color:var(--accent);font-size:12px;font-weight:800;display:grid;place-items:center;border:2px solid var(--accent)}

/* cart drawer */
.furn-cart-backdrop{position:fixed;inset:0;z-index:55;background:rgba(8,14,26,.5);opacity:0;visibility:hidden;
  transition:opacity .28s ease,visibility .28s ease;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.furn-cart-backdrop.open{opacity:1;visibility:visible}
.furn-cart{position:fixed;top:0;right:0;bottom:0;z-index:60;width:min(400px,92vw);display:flex;flex-direction:column;
  background:var(--surface);box-shadow:-24px 0 60px -20px rgba(16,33,68,.42);
  transform:translateX(100%);transition:transform .3s var(--ease)}
.furn-cart.open{transform:translateX(0)}
.furn-cart-head{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--border)}
.furn-cart-head h3{margin:0;font-size:18px}
.furn-cart-close{width:34px;height:34px;border:1px solid var(--border);background:#fff;border-radius:var(--radius-sm);
  font-size:20px;line-height:1;color:var(--muted);cursor:pointer;display:grid;place-items:center;transition:background .14s,color .14s}
.furn-cart-close:hover{background:var(--surface-2);color:var(--fg)}
.furn-cart-items{flex:1;overflow-y:auto;padding:6px 20px}
.furn-cart-empty{padding:52px 12px;text-align:center;color:var(--fg-soft)}
.furn-cart-item{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:4px 12px;padding:14px 0;border-bottom:1px solid var(--hair)}
.furn-cart-info{min-width:0}
.furn-cart-name{font-weight:600;font-size:14px;line-height:1.3}
.furn-cart-unit{font-size:12px;margin-top:2px}
.furn-cart-qty{display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;background:#fff}
.furn-cart-qty span{min-width:30px;text-align:center;font-weight:600;font-size:13px}
.furn-cart-step{width:28px;height:30px;border:0;background:var(--surface-2);color:var(--fg-soft);font-size:15px;cursor:pointer;transition:background .14s,color .14s}
.furn-cart-step:hover{background:var(--blue-50);color:var(--blue-700)}
.furn-cart-line{font-weight:700;font-size:14px;font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end}
.furn-cart-remove{grid-column:3;justify-self:end;width:26px;height:26px;border:0;background:transparent;color:var(--muted);
  font-size:18px;line-height:1;cursor:pointer;border-radius:6px;transition:background .14s,color .14s}
.furn-cart-remove:hover{background:var(--danger-bg);color:var(--danger)}
.furn-cart-foot{padding:16px 20px calc(18px + env(safe-area-inset-bottom));border-top:1px solid var(--border);background:var(--surface-2)}
.furn-cart-totals{margin-bottom:14px}
.furn-cart-row{display:flex;justify-content:space-between;font-size:14px;padding:3px 0;color:var(--fg-soft)}
.furn-cart-grand{font-weight:800;font-size:16px;color:var(--fg);border-top:1px solid var(--border);margin-top:6px;padding-top:9px}
.furn-cart-note{font-size:12px;margin-top:6px;text-align:right}
/* order-limit bar + "Your orders" modal */
.furn-orderbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.furn-orderbar .info-note{margin:0;flex:1 1 260px}
.furn-modal-backdrop{position:fixed;inset:0;z-index:55;background:rgba(8,14,26,.5);opacity:0;visibility:hidden;
  transition:opacity .25s ease,visibility .25s ease;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.furn-modal-backdrop.open{opacity:1;visibility:visible}
.furn-modal{position:fixed;z-index:60;top:50%;left:50%;transform:translate(-50%,-46%);opacity:0;visibility:hidden;
  width:min(680px,94vw);max-height:88vh;display:flex;flex-direction:column;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);
  transition:opacity .25s var(--ease),transform .25s var(--ease),visibility .25s}
.furn-modal.open{opacity:1;visibility:visible;transform:translate(-50%,-50%)}
.furn-modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}
.furn-modal-head h3{margin:0;font-size:18px}
.furn-modal-body{padding:16px 20px;overflow-y:auto}
@media (prefers-reduced-motion:reduce){.furn-modal,.furn-modal-backdrop{transition:none}}
.furn-cart-field{margin-bottom:13px}
.furn-cart-field>label{display:block;font-size:12.5px;font-weight:600;color:var(--fg-soft);margin-bottom:7px}
/* segmented day / time chips (radio buttons styled as selectable pills) */
.furn-choice{display:flex;flex-wrap:wrap;gap:8px}
.furn-chip{position:relative;flex:0 0 auto;cursor:pointer}
.furn-chip input{position:absolute;opacity:0;width:0;height:0}
.furn-chip-ui{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-width:60px;
  padding:7px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--fg-soft);
  font-size:13.5px;font-weight:700;line-height:1.2;transition:background .14s,border-color .14s,color .14s,transform .1s var(--ease)}
.furn-chip-ui small{font-size:10.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.furn-chip:hover .furn-chip-ui{border-color:var(--border-2);background:var(--surface-2)}
.furn-chip:active .furn-chip-ui{transform:translateY(1px)}
.furn-chip input:checked~.furn-chip-ui{background:var(--accent);border-color:var(--accent);color:#fff;
  box-shadow:0 7px 15px -7px color-mix(in srgb,var(--accent) 58%,transparent)}
.furn-chip input:checked~.furn-chip-ui small{color:rgba(255,255,255,.82)}
.furn-chip input:focus-visible~.furn-chip-ui{box-shadow:var(--ring-shadow)}
.furn-choice.is-time .furn-chip-ui{min-width:0;padding:8px 13px;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}
@media (prefers-reduced-motion:reduce){.furn-chip-ui{transition:none}}
@media (prefers-reduced-motion:reduce){
  .furn-card,.furn-tab,.furn-step,.furn-add,.furn-cart,.furn-cart-backdrop,.furn-cart-btn{transition:none}
  .furn-card:hover{transform:none}
}
/* image lightbox */
.lightbox{position:fixed;inset:0;z-index:1000;display:none;align-items:center;justify-content:center;background:rgba(9,14,27,.84);padding:32px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.lightbox.open{display:flex;animation:lbFade .2s ease}
@keyframes lbFade{from{opacity:0}to{opacity:1}}
.lightbox img{max-width:92vw;max-height:86vh;border-radius:14px;background:#fff;box-shadow:0 30px 80px rgba(0,0,0,.6)}
.lightbox-close{position:absolute;top:18px;right:24px;width:46px;height:46px;border-radius:var(--radius-pill);border:none;background:rgba(255,255,255,.16);color:#fff;font-size:26px;line-height:1;cursor:pointer;display:grid;place-items:center;transition:background .16s ease,transform .16s var(--ease)}
.lightbox-close:hover{background:rgba(255,255,255,.3);transform:rotate(90deg)}
@media (prefers-reduced-motion:reduce){.lightbox.open{animation:none}.lightbox-close:hover{transform:none}}
.flash{
  padding:13px 16px 13px 44px;border-radius:var(--radius-sm);margin-bottom:16px;font-size:14px;font-weight:500;
  position:relative;border:1px solid transparent;box-shadow:var(--shadow-sm);line-height:1.45;
}
.flash::before{position:absolute;left:15px;top:50%;transform:translateY(-50%);font-family:'Sora';font-weight:800;font-size:15px;width:18px;text-align:center}
.flash.success{background:var(--success-bg);color:#065f3a;border-color:var(--success-bd)}
.flash.success::before{content:"\2713"}
.flash.error{background:var(--danger-bg);color:#9e2820;border-color:var(--danger-bd)}
.flash.error::before{content:"!"}
.flash.info{background:var(--blue-50);color:var(--blue-700);border-color:var(--blue-100)}
.flash.info::before{content:"i";font-style:normal}
.save-bar{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;padding-top:18px;border-top:1px solid var(--hair)}
.mobile-top{display:none}

/* ---- auth pages ---- */
.auth{min-height:100vh;display:flex}
.auth .brandpane{
  flex:1;position:relative;overflow:hidden;color:#fff;
  background:linear-gradient(160deg,var(--blue-700),var(--blue));
  padding:56px 52px;display:flex;flex-direction:column;justify-content:center;
}
/* layered light so the inline gradient on login.php reads with real depth */
.auth .brandpane::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(80% 55% at 85% 8%, rgba(255,255,255,.22), transparent 60%),
    radial-gradient(70% 60% at 0% 100%, rgba(255,255,255,.10), transparent 55%);
}
.auth .brandpane>*{position:relative;z-index:1}
.auth .brandpane .logo{width:56px;height:56px;border-radius:16px;background:rgba(255,255,255,.16);display:grid;place-items:center;font-family:'Sora';font-weight:800;font-size:22px;margin-bottom:26px;box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}
.auth .brandpane h1{font-size:32px;line-height:1.2;margin:30px 0 12px;color:#fff;font-weight:800;max-width:20ch}
.auth .brandpane h1::after{content:"";display:block;width:52px;height:3px;margin-top:16px;border-radius:3px;
  background:rgba(255,255,255,.8);transform:scaleX(0);transform-origin:left;animation:bpLine .7s var(--ease) .45s both}
.auth .brandpane p{opacity:.9;max-width:40ch;line-height:1.55;font-size:15px}
.auth .brandpane ul{list-style:none;padding:0;margin:26px 0 0;display:grid;gap:14px}
.auth .brandpane li{opacity:1;display:flex;align-items:center;gap:13px;font-size:15.5px;font-weight:500;transition:transform .18s var(--ease)}
.auth .brandpane li::before{content:"";flex:none;width:27px;height:27px;border-radius:8px;
  background:rgba(255,255,255,.15) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>") center/15px no-repeat;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.28);transition:background-color .18s ease}
.auth .brandpane li:hover{transform:translateX(5px)}
.auth .brandpane li:hover::before{background-color:rgba(255,255,255,.3)}
.auth .formpane{flex:1;display:flex;align-items:center;justify-content:center;padding:40px;background:var(--surface)}
.auth .formcard{width:100%;max-width:392px;animation:authIn .6s var(--ease) both}
.auth .formcard h2{font-size:24px;margin:0 0 5px;font-weight:700}
.auth .formcard .sub{color:var(--muted);margin-bottom:26px;line-height:1.5}
.auth-mobilebrand{display:none}   /* desktop shows the brand pane instead */
@keyframes authIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@media(max-width:820px){
  /* Mobile sign-in: the brand pane is hidden, so make the screen itself ESP-branded -
     blue gradient + white logo + a crisp white card, mirroring the desktop brand pane. */
  .auth{min-height:100dvh;background:linear-gradient(160deg,var(--blue-700),var(--blue))}
  .auth .brandpane{display:none}
  .auth .formpane{background:transparent;flex-direction:column;
    padding:40px 20px calc(36px + env(safe-area-inset-bottom))}
  .auth-mobilebrand{display:flex;justify-content:center;width:100%;max-width:392px;
    margin-bottom:24px;animation:bpImg .6s var(--ease) both}
  .auth-mobilebrand img{width:min(200px,64%);height:auto}
  .auth .formcard{background:var(--surface);border-radius:var(--radius);padding:28px 22px;
    box-shadow:0 26px 60px rgba(6,16,44,.36),0 2px 8px rgba(6,16,44,.22)}
}
@media (prefers-reduced-motion:reduce){.auth .formcard,.auth-mobilebrand{animation:none}}

/* ---- expo picker (landing) ---- */
.picker{max-width:640px;margin:0 auto;padding:72px 24px}
.picker h1{font-size:32px;margin:0 0 6px;letter-spacing:-.025em}
.picker .expo{
  display:flex;align-items:center;gap:16px;background:#fff;border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px;margin-top:14px;
  transition:transform .18s var(--ease),box-shadow .18s ease,border-color .18s ease;
  animation:authIn .55s var(--ease) both;
}
.picker .expo:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:var(--blue-200);text-decoration:none}
.picker .expo .logo{width:48px;height:48px;border-radius:12px;display:grid;place-items:center;color:#fff;font-family:'Sora';font-weight:700;font-size:20px;box-shadow:0 6px 16px -6px rgba(16,33,68,.4),inset 0 1px 0 rgba(255,255,255,.25);flex:none}
.picker .expo .meta{flex:1;min-width:0}
.picker .expo .meta b{display:block;color:var(--fg);font-size:16px;font-family:'Sora';font-weight:600}
.picker .expo .meta span{color:var(--muted);font-size:13px}
.picker .expo:hover .meta b{color:var(--accent)}
@media (prefers-reduced-motion:reduce){.picker .expo{animation:none}}

/* ---- admin console sign-in (standalone page, no auto-refresh so entrance motion is safe) ---- */
.admin-auth{
  min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:24px;
  position:relative;overflow:hidden;
  background:linear-gradient(160deg,#0b1322 0%,#102a63 48%,#0b45c0 100%);
}
.admin-auth::before{content:"";position:absolute;inset:-10%;pointer-events:none;
  background:
    radial-gradient(46% 42% at 82% 10%, rgba(45,130,255,.55), transparent 62%),
    radial-gradient(44% 40% at 8% 96%, rgba(11,95,255,.42), transparent 60%);
  animation:aaGlow 22s ease-in-out infinite alternate;
}
.admin-auth::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(130% 100% at 50% -12%, transparent 52%, rgba(3,9,26,.5))}
@keyframes aaGlow{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(-4%,3%,0) scale(1.14)}}

.admin-auth-card{
  position:relative;z-index:1;width:100%;max-width:400px;
  background:var(--surface);border-radius:var(--radius-lg);
  box-shadow:0 34px 90px -28px rgba(3,10,30,.7),0 10px 30px -14px rgba(3,10,30,.5);
  padding:30px 30px 24px;animation:aaCard .6s var(--ease) both;
}
@keyframes aaCard{from{opacity:0;transform:translateY(20px) scale(.985)}to{opacity:1;transform:none}}
.admin-auth-card>*{animation:aaUp .5s var(--ease) both}
.admin-auth-card>.aa-head{animation-delay:.12s}
.admin-auth-card>form{animation-delay:.24s}
.admin-auth-card>.aa-foot{animation-delay:.34s}
@keyframes aaUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* centered logo lockup - "Admin Console" is the card title */
.aa-head{display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:24px}
.aa-mark{width:150px;height:auto;display:block}
.aa-console{margin-top:14px;font-family:'Sora';font-size:16px;font-weight:700;letter-spacing:.02em;color:var(--fg)}
.aa-console::after{content:"";display:block;width:40px;height:3px;margin:12px auto 0;border-radius:3px;
  background:var(--accent);transform:scaleX(0);transform-origin:center;animation:aaLine .7s var(--ease) .5s both}
@keyframes aaLine{to{transform:scaleX(1)}}
.aa-foot{margin:18px 0 0;font-size:13px;text-align:center}
.aa-foot a{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-weight:500;
  transition:gap .18s var(--ease),color .16s ease}
.aa-foot a:hover{color:var(--accent);gap:9px;text-decoration:none}
@media (prefers-reduced-motion:reduce){
  .admin-auth::before{animation:none}
  .admin-auth-card,.admin-auth-card>*{animation:none}
  .aa-console::after{animation:none;transform:none}
  .aa-foot a:hover{gap:6px}
}

/* ---- fascia sign preview ---- */
.fascia-preview{
  display:grid;place-items:center;
  background:linear-gradient(180deg,#fff,var(--surface-2));
  border:1px solid var(--border-2);border-radius:var(--radius);
  padding:34px 24px;font-family:'Sora';font-weight:700;font-size:30px;
  text-transform:uppercase;letter-spacing:.06em;color:var(--fg);text-align:center;
  box-shadow:inset 0 2px 0 rgba(11,95,255,.14),inset 0 -3px 0 rgba(16,33,68,.05),var(--shadow-sm);
}
.fascia-preview .ph{color:#6E778C;font-weight:600;letter-spacing:.02em;text-transform:none;font-size:22px}

/* Team & Badges table: let long cells wrap so the Badge status (approve/pending/
   reject) column stays on-screen instead of being pushed off to the right. */
.team-badges td{white-space:normal;overflow-wrap:anywhere;vertical-align:top}
.team-badges th:last-child,.team-badges td:last-child{white-space:nowrap}

/* ================= micro-interactions (motion) ================= */
/* Interaction-triggered only, so nothing loops with the 20s auto-refresh. Entrance
   motion lives on .auth + .picker (they do not auto-refresh); the one-shot .flash is
   consumed after first view so it never replays. Only transform/opacity are animated. */

/* primary button: a soft light sweep on hover (tactile feedback) */
.btn-primary::after{
  content:"";position:absolute;top:0;left:0;width:60%;height:100%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.30),transparent);
  transform:translateX(-150%) skewX(-14deg);
}
.btn-primary:hover::after{transform:translateX(250%) skewX(-14deg);transition:transform .6s var(--ease)}

/* sidebar nav: a gentle indent on hover (non-active links) */
.sidebar nav a:not(.active):hover{transform:translateX(3px)}

/* flash message: slides in once when it appears after an action */
.flash{animation:flashIn .42s var(--ease) both}
@keyframes flashIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

/* login brand pane: a short entrance choreography (banner, headline, list cascade) */
.auth .brandpane img{animation:bpImg .7s var(--ease) both}
.auth .brandpane h1{animation:bpUp .6s var(--ease) .12s both}
.auth .brandpane p{animation:bpUp .6s var(--ease) .2s both}
.auth .brandpane li{animation:bpIn .55s var(--ease) backwards}
.auth .brandpane li:nth-child(1){animation-delay:.32s}
.auth .brandpane li:nth-child(2){animation-delay:.42s}
.auth .brandpane li:nth-child(3){animation-delay:.52s}
@keyframes bpImg{from{opacity:0;transform:translateY(16px) scale(.985)}to{opacity:1;transform:none}}
@keyframes bpUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes bpIn{from{opacity:0;transform:translateX(-12px)}to{opacity:1;transform:none}}
@keyframes bpLine{to{transform:scaleX(1)}}

/* picker: expo cards cascade in */
.picker .expo:nth-of-type(2){animation-delay:.09s}
.picker .expo:nth-of-type(3){animation-delay:.18s}
.picker .expo:nth-of-type(4){animation-delay:.27s}
.picker .expo:nth-of-type(5){animation-delay:.36s}

@media (prefers-reduced-motion:reduce){
  .btn-primary::after{display:none}
  .sidebar nav a:not(.active):hover{transform:none}
  .flash{animation:none}
  .auth .brandpane img,.auth .brandpane h1,.auth .brandpane p,.auth .brandpane li{animation:none}
  .auth .brandpane h1::after{animation:none;transform:none}
  .auth .brandpane li:hover{transform:none}
}

/* per-expo accent coherence: tint the focus ring, primary-button glow, selection and
   ambient wash from --accent where supported; the ESP-blue rgba above is the fallback. */
@supports (color: color-mix(in srgb, red, blue)){
  :root{--ring-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
  ::selection{background:color-mix(in srgb,var(--accent) 18%,transparent)}
  .btn-primary{box-shadow:0 6px 18px -6px color-mix(in srgb,var(--accent) 50%,transparent),inset 0 1px 0 rgba(255,255,255,.22)}
  .btn-primary:hover{box-shadow:0 9px 22px -7px color-mix(in srgb,var(--accent) 55%,transparent),inset 0 1px 0 rgba(255,255,255,.22)}
  body::before{background:
    radial-gradient(120% 80% at 100% 0%, color-mix(in srgb,var(--accent) 6%,transparent), transparent 60%),
    radial-gradient(90% 70% at 0% 100%, color-mix(in srgb,var(--accent) 4%,transparent), transparent 55%);}
}

/* ================= mobile / responsive ================= */
/* Media never overflows its column; smooth table swipe on touch */
img,svg,video,iframe,embed,object{max-width:100%;height:auto}
.table-wrap{-webkit-overflow-scrolling:touch}
body.drawer-lock{overflow:hidden}

/* Hamburger button (animates to X) - lives in the mobile top bar */
.hamburger{display:inline-flex;flex-direction:column;justify-content:center;gap:4px;width:42px;height:42px;
  border-radius:11px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.07);cursor:pointer;padding:0 10px;flex-shrink:0;transition:background .16s ease,transform .12s var(--ease)}
.hamburger span{display:block;height:2px;background:#e6ebf3;border-radius:2px;transition:transform .25s var(--ease),opacity .2s ease}
.hamburger:hover{background:rgba(255,255,255,.13)}
.hamburger:active{transform:scale(.96)}
.hamburger:focus-visible{outline:2px solid #fff;outline-offset:2px}
.hamburger.open span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.hamburger.open span:nth-child(2){opacity:0}
.hamburger.open span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
.sidebar .drawer-close{display:none}

@media(max-width:900px){
  .shell{display:block}
  .mobile-top{display:flex;align-items:center;justify-content:center;gap:12px;position:fixed;top:0;left:0;right:0;z-index:40;
    background:linear-gradient(180deg,#111f38,#0d1729);color:#e6ebf3;padding:10px 14px;border-bottom:1px solid rgba(255,255,255,.08);box-shadow:0 4px 16px -8px rgba(0,0,0,.5)}
  .mobile-top .hamburger{position:absolute;left:14px;top:50%;margin-top:-21px}
  .mobile-top .mt-brand{font-family:'Sora';font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mobile-top .mt-logo{height:38px;width:auto;display:block}
  .sidebar{position:fixed;top:0;left:0;bottom:0;height:100dvh;width:min(84vw,300px);z-index:60;
    transform:translateX(-100%);transition:transform .28s var(--ease);
    box-shadow:0 0 44px rgba(0,0,0,.5)}
  .sidebar.open{transform:translateX(0)}
  .sidebar .drawer-close{display:grid;place-items:center;position:absolute;top:14px;right:12px;
    width:34px;height:34px;border-radius:9px;border:1px solid rgba(255,255,255,.16);
    background:transparent;color:#e6ebf3;font-size:20px;line-height:1;cursor:pointer;transition:background .16s ease}
  .sidebar .drawer-close:hover{background:rgba(255,255,255,.09)}
  .drawer-backdrop{position:fixed;inset:0;background:rgba(8,14,26,.55);opacity:0;visibility:hidden;
    transition:opacity .28s ease,visibility .28s ease;z-index:50;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
  .drawer-backdrop.open{opacity:1;visibility:visible}
  .main{width:100%;overflow-x:hidden;padding-top:59px}
  .container{padding:22px 16px 52px}
  .page-head{flex-direction:column}
  .auth .brandpane{padding:36px 24px}
}
@media(max-width:600px){
  /* Exhibitor + admin service tables collapse to polished stacked cards (opt-in via .cards-sm).
     Mobile only - all inside @media(max-width:600px); desktop tables are untouched. */
  /* the .table-wrap is itself a white box; behind the white cards it reads as one long white
     slab. Strip it (only when it wraps cards) so the cards float on the page's --bg. */
  .table-wrap:has(.cards-sm){background:transparent;border:0;box-shadow:none;border-radius:0;overflow:visible}
  .cards-sm thead{display:none}
  .cards-sm,.cards-sm tbody,.cards-sm tr,.cards-sm td{display:block;width:100%}
  .cards-sm tr{border:1px solid var(--border);border-radius:var(--radius);margin:14px 0;padding:0;
    background:#fff;overflow:hidden;box-shadow:0 1px 2px rgba(16,33,68,.05),0 10px 22px rgba(16,33,68,.08)}
  .cards-sm td{display:flex;justify-content:space-between;align-items:center;gap:14px;
    padding:11px 16px;white-space:normal;text-align:right;color:var(--fg);font-weight:600}
  /* first cell = the row title: a tinted ESP-blue card header */
  .cards-sm td:first-child{background:linear-gradient(180deg,var(--blue-50),#fff);
    font-family:'Sora','Inter',sans-serif;font-size:15px;letter-spacing:-.01em;padding:13px 16px}
  .cards-sm td:first-child a{color:var(--fg)}
  .cards-sm td+td{border-top:1px solid var(--hair)}
  .cards-sm td.muted{color:var(--muted);font-weight:500}
  .cards-sm td::before{content:attr(data-label);font-weight:500;color:var(--muted);text-align:left;flex-shrink:0}
  .cards-sm td.no-label{text-align:left}
  .cards-sm td.no-label::before{content:none}
  .cards-sm td.sm-hide{display:none}
  .picker{padding:48px 20px}
  .auth .formcard h2{font-size:22px}
}
@media(max-width:560px){
  .save-bar{flex-direction:column-reverse}
  .save-bar .btn{width:100%}
}
@media (prefers-reduced-motion:reduce){
  .sidebar,.drawer-backdrop,.hamburger span{transition:none}
  *{scroll-behavior:auto}
}
