/* ==========================================================================
   Nowills PMS Design System  — v1.0
   Zero-dependency, build-free CSS. Tokens → base → layout → components → utilities
   ========================================================================== */
:root {
  --c-primary: #1d4ed8; --c-primary-600: #1e40af; --c-primary-50: #eff6ff; --c-primary-100: #dbeafe;
  --c-accent: #0d9488; --c-accent-50: #f0fdfa;
  --c-green: #16a34a; --c-green-50: #f0fdf4; --c-red: #dc2626; --c-red-50: #fef2f2;
  --c-amber: #d97706; --c-amber-50: #fffbeb; --c-blue: #2563eb; --c-blue-50: #eff6ff;
  --c-purple: #7c3aed; --c-purple-50: #f5f3ff; --c-slate: #475569; --c-slate-50: #f1f5f9;
  --c-bg: #f4f6fb; --c-surface: #ffffff; --c-border: #e3e8f0; --c-border-strong: #cbd5e1;
  --c-text: #0f172a; --c-text-2: #475569; --c-muted: #94a3b8;
  --c-side: #0b1b3a; --c-side-2: #10244b; --c-side-text: #b8c4dd; --c-side-active: #ffffff;
  --radius: 10px; --radius-sm: 6px; --radius-lg: 14px;
  --shadow-sm: 0 1px 2px rgba(15,23,42,.06); --shadow: 0 1px 3px rgba(15,23,42,.08), 0 4px 14px rgba(15,23,42,.05);
  --shadow-lg: 0 20px 50px rgba(15,23,42,.18);
  --font: "Inter", "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif;
  --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --side-w: 250px; --top-h: 60px;
}
*, *::before, *::after { box-sizing: border-box; }
html { font-size: 14px; -webkit-text-size-adjust: 100%; }
body { margin: 0; font-family: var(--font); color: var(--c-text); background: var(--c-bg); line-height: 1.5; }
body.dark {
  --c-bg: #0b1220; --c-surface: #132033; --c-border: #1e3a66; --c-border-strong: #2a4a78;
  --c-text: #e8eef8; --c-text-2: #c9d6ee; --c-muted: #8aa0c2;
  --c-primary-50: #1a3158; --c-primary-100: #1e3a66; --c-slate-50: #1a3158;
  color-scheme: dark;
}
body.dark .topbar,
body.dark .search-suggest,
body.dark .dropdown,
body.dark .hotel-switch select,
body.dark input,
body.dark select,
body.dark textarea,
body.dark .table th,
body.dark .table tfoot td,
body.dark .modal-box,
body.dark .pagination a,
body.dark .pagination span { background: #132033; color: #e8eef8; border-color: #1e3a66; }
body.dark .table td { border-bottom-color: #1e3a66; }
body.dark .table tbody tr:hover,
body.dark .search-suggest a:hover,
body.dark .dropdown a:hover,
body.dark .dropdown button:hover { background: #1a3158; }
body.dark .top-search input { background: #0b1220; color: #e8eef8; }
@media print {
  body.dark { --c-bg: #fff; --c-surface: #fff; --c-text: #0f172a; --c-text-2: #475569; --c-border: #e3e8f0; color-scheme: light; }
  body.dark .topbar, body.dark input, body.dark select, body.dark textarea, body.dark .table th { background: #fff; color: #0f172a; }
}
a { color: var(--c-primary); text-decoration: none; }
a:hover { text-decoration: underline; }
h1, h2, h3, h4 { margin: 0 0 .5rem; line-height: 1.25; font-weight: 650; }
h1 { font-size: 1.5rem; } h2 { font-size: 1.2rem; } h3 { font-size: 1.05rem; } h4 { font-size: .95rem; }
p { margin: 0 0 .75rem; }
hr { border: 0; border-top: 1px solid var(--c-border); margin: 1rem 0; }
code, .mono { font-family: var(--mono); font-size: .9em; }
svg.i { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; vertical-align: middle; }
svg.i-sm { width: 15px; height: 15px; }

/* ---------- App shell ---------- */
.app { display: flex; min-height: 100vh; }
.sidebar { width: var(--side-w); background: linear-gradient(180deg, var(--c-side) 0%, #0a1630 100%); color: var(--c-side-text); position: fixed; inset: 0 auto 0 0; display: flex; flex-direction: column; z-index: 40; transition: width .2s ease, transform .2s ease; }
.brand { height: var(--top-h); display: flex; align-items: center; gap: .6rem; padding: 0 .9rem 0 1.1rem; color: #fff; font-weight: 700; font-size: 1.02rem; border-bottom: 1px solid rgba(255,255,255,.06); }
.brand-mark { width: 32px; height: 32px; border-radius: 9px; background: linear-gradient(135deg, #3b82f6, #14b8a6); display: grid; place-items: center; font-size: .95rem; color: #fff; box-shadow: 0 4px 12px rgba(59,130,246,.4); flex-shrink: 0; }
.brand-copy { min-width: 0; line-height: 1.1; white-space: nowrap; }
.brand-copy strong { display: block; letter-spacing: .04em; }
.brand small { display: block; font-size: .58rem; font-weight: 500; color: var(--c-side-text); letter-spacing: .05em; margin-top: .22rem; }
.sidebar-collapse { margin-left: auto; display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 1px solid rgba(255,255,255,.12); border-radius: 7px; color: #b8c4dd; background: rgba(255,255,255,.04); cursor: pointer; }
.sidebar-collapse:hover, .sidebar-collapse:focus-visible { color: #fff; background: rgba(255,255,255,.1); outline: none; }
.sidebar-collapse .i { width: 15px; height: 15px; transition: transform .2s; transform: rotate(180deg); }
.nav-search { margin: .65rem .65rem .15rem; position: relative; display: flex; align-items: center; gap: .45rem; color: #8da1c2; }
.nav-search > svg { position: absolute; left: .65rem; width: 14px; height: 14px; }
.nav-search input { width: 100%; padding: .45rem 1.8rem .45rem 2rem; border: 1px solid rgba(148,163,184,.2); border-radius: 8px; background: rgba(255,255,255,.06); color: #fff; font: inherit; font-size: .78rem; }
.nav-search input::placeholder { color: #8da1c2; }
.nav-search input:focus { outline: 2px solid #60a5fa; outline-offset: -1px; background: rgba(255,255,255,.1); }
.nav-search-clear { display: none; position: absolute; right: .35rem; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: #9aaccb; font-size: 1rem; line-height: 1; cursor: pointer; }
.nav-search:focus-within .nav-search-clear, .nav-search.has-value .nav-search-clear { display: grid; place-items: center; }
.nav-search-clear:hover { color: #fff; background: rgba(255,255,255,.1); }
.nav { flex: 1; overflow-y: auto; padding: .55rem .6rem 1rem; scrollbar-width: thin; scrollbar-color: #1e3a6b transparent; }
.nav.nav-searching .nav-sub { display: block; }
.nav.nav-searching .nav-search-hidden { display: none !important; }
.nav-section-label {
 padding: .85rem .75rem .35rem; color: #6f83aa; font-size: .65rem; font-weight: 750; letter-spacing: .1em; }
.nav-section-label:first-child { padding-top: .35rem; }
.nav-item { position: relative; }
.nav-item > a, .nav-item > button { width: 100%; display: flex; align-items: center; gap: .65rem; padding: .5rem .7rem; border-radius: 8px; color: var(--c-side-text); font: inherit; background: none; border: 0; cursor: pointer; text-align: left; font-size: .88rem; }
.nav-item > a:hover, .nav-item > button:hover { background: rgba(255,255,255,.06); color: #fff; text-decoration: none; }
.nav-item > a:focus-visible, .nav-item > button:focus-visible { outline: 2px solid #60a5fa; outline-offset: -2px; }
.nav-item.active > a, .nav-item.open > button { color: #fff; }
.nav-item.active > a { background: linear-gradient(90deg, rgba(59,130,246,.35), rgba(59,130,246,.08)); box-shadow: inset 3px 0 0 #60a5fa; }
.nav-item .chev { margin-left: auto; transition: transform .2s; width: 14px; height: 14px; }
.nav-item.open > button .chev { transform: rotate(90deg); }
.nav-category > button { padding-top: .58rem; padding-bottom: .58rem; font-weight: 650; }
.nav-category > button .nav-label { letter-spacing: .01em; }
.nav-category > button > .i { color: #8db9ff; }
.nav-category.open > button { background: rgba(59,130,246,.11); }
.nav-module > button { font-size: .86rem; }
.nav-sub { display: none; padding: .1rem 0 .35rem 1.45rem; }
.nav-item.open > .nav-sub { display: block; }
.nav-category > .nav-sub { padding-left: .75rem; border-left: 1px solid rgba(148,163,184,.16); margin-left: .9rem; }
.nav-module > .nav-sub { padding-left: 1.2rem; }
.nav-sub .nav-item > a, .nav-sub .nav-item > button { padding: .4rem .6rem; font-size: .84rem; }
.nav-sub .nav-link-item > a { display: flex; align-items: center; gap: .55rem; }
.nav-sub .nav-link-item > a > .i { width: 15px; height: 15px; color: #8295b7; }
.nav-sub .nav-link-item > a:hover > .i, .nav-sub .nav-link-item.active > a > .i { color: #9ec5ff; }
.nav-sub a:hover { color: #fff; background: rgba(255,255,255,.05); text-decoration: none; }
.nav-sub a.active { color: #fff; background: rgba(96,165,250,.16); }
.side-profile { display: flex; align-items: center; gap: .45rem; padding: .65rem .75rem; border-top: 1px solid rgba(255,255,255,.06); }
.side-profile > a { min-width: 0; flex: 1; display: flex; align-items: center; gap: .55rem; color: #fff; text-decoration: none; }
.side-profile > a:hover { color: #fff; }
.side-profile .avatar { width: 30px; height: 30px; flex-shrink: 0; font-size: .72rem; }
.side-profile-copy { min-width: 0; line-height: 1.15; }
.side-profile-copy b, .side-profile-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.side-profile-copy b { font-size: .78rem; }
.side-profile-copy small { color: #8fa2c4; font-size: .68rem; margin-top: .18rem; }
.side-profile form { margin: 0; }
.side-profile button { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 7px; background: transparent; color: #9aaccb; cursor: pointer; }
.side-profile button:hover { background: rgba(255,255,255,.08); color: #fff; }
.side-foot { padding: .55rem 1rem .75rem; font-size: .7rem; border-top: 1px solid rgba(255,255,255,.06); color: #6b7fa6; }

/* Desktop compact mode: icons remain visible and groups open as fly-outs. */
body.sidebar-collapsed .sidebar { width: 72px; }
body.sidebar-collapsed .main { margin-left: 72px; }
body.sidebar-collapsed .brand { position: relative; justify-content: center; padding: 0; }
body.sidebar-collapsed .brand-copy { display: none; }
body.sidebar-collapsed .sidebar-collapse { display: grid; position: absolute; right: -12px; top: 16px; width: 24px; height: 28px; z-index: 90; }
body.sidebar-collapsed .sidebar-collapse .i { transform: none; }
body.sidebar-collapsed .nav { padding-left: .55rem; padding-right: .55rem; overflow: visible; }
body.sidebar-collapsed .nav-search { margin: .6rem .5rem .15rem; }
body.sidebar-collapsed .nav-search input { height: 32px; padding: 0; color: transparent; cursor: text; }
body.sidebar-collapsed .nav-search input:focus { color: #fff; position: absolute; left: 2.3rem; top: 0; width: 220px; padding: .45rem .7rem; background: #0f2348; z-index: 90; }
body.sidebar-collapsed .nav-search > svg { left: .55rem; z-index: 1; }
body.sidebar-collapsed .nav-search-clear { display: none !important; }
body.sidebar-collapsed .nav-section-label, body.sidebar-collapsed .nav-label, body.sidebar-collapsed .nav-item .chev, body.sidebar-collapsed .nav-badge { display: none; }
body.sidebar-collapsed .nav-item > a, body.sidebar-collapsed .nav-item > button { justify-content: center; padding: .65rem; }
body.sidebar-collapsed .nav-item > a > .i, body.sidebar-collapsed .nav-item > button > .i { width: 19px; height: 19px; }
body.sidebar-collapsed .nav-item.active > a, body.sidebar-collapsed .nav-category.open > button { box-shadow: none; background: rgba(59,130,246,.27); }
body.sidebar-collapsed .nav-sub { display: none !important; }
body.sidebar-collapsed .nav-item.nav-group:hover > .nav-sub { display: block !important; position: absolute; left: calc(100% + .45rem); top: 0; width: 260px; max-height: calc(100vh - 1rem); overflow-y: auto; padding: .45rem; margin: 0; border: 1px solid #203c6b; border-radius: 10px; background: #0f2348; box-shadow: var(--shadow-lg); z-index: 80; }
body.sidebar-collapsed .nav-item.nav-group:hover > .nav-sub .nav-sub { position: static; width: auto; max-height: none; border: 0; box-shadow: none; padding-left: 1rem; background: transparent; }
body.sidebar-collapsed .side-profile { justify-content: center; padding-left: .55rem; padding-right: .55rem; }
body.sidebar-collapsed .side-profile-copy, body.sidebar-collapsed .side-profile > form { display: none; }
body.sidebar-collapsed .side-foot { padding-left: 0; padding-right: 0; text-align: center; font-size: 0; }
body.sidebar-collapsed .side-foot::after { content: 'N'; font-size: .7rem; color: #6b7fa6; }

.main { flex: 1; margin-left: var(--side-w); min-width: 0; display: flex; flex-direction: column; }
.topbar { height: var(--top-h); background: var(--c-surface); border-bottom: 1px solid var(--c-border); display: flex; align-items: center; gap: 1rem; padding: 0 1.25rem; position: sticky; top: 0; z-index: 30; }
.topbar .menu-btn { display: none; }
.top-search { flex: 1; max-width: 420px; position: relative; }
.top-search input { width: 100%; padding: .5rem .8rem .5rem 2.2rem; border: 1px solid var(--c-border); border-radius: 999px; background: var(--c-bg); font: inherit; }
.top-search svg { position: absolute; left: .75rem; top: 50%; transform: translateY(-50%); color: var(--c-muted); }
.search-suggest { position: absolute; top: calc(100% + 6px); left: 0; right: 0; background: #fff; border: 1px solid var(--c-border); border-radius: 12px; box-shadow: var(--shadow-lg); z-index: 50; max-height: 360px; overflow: auto; }
.search-suggest a { display: flex; justify-content: space-between; gap: .5rem; padding: .4rem .75rem; color: var(--c-text); text-decoration: none; }
.search-suggest a:hover { background: var(--c-primary-50); }
.search-suggest small { color: var(--c-muted); }
.sg-title { padding: .35rem .75rem .1rem; font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; color: var(--c-muted); }
.top-right { margin-left: auto; display: flex; align-items: center; gap: .75rem; }
.top-tools { display: flex; align-items: center; gap: .2rem; }
.top-tool { display: inline-flex; align-items: center; gap: .35rem; padding: .25rem .35rem; border: 1px solid transparent; border-radius: 8px; color: var(--c-text-2); background: transparent; font: inherit; font-size: .78rem; font-weight: 650; line-height: 1.2; text-decoration: none; cursor: pointer; white-space: nowrap; transition: background .15s, border-color .15s, color .15s; }
.top-tool:hover, .top-tool:focus-visible { background: var(--c-slate-50); border-color: var(--c-border); color: var(--c-text); text-decoration: none; outline: none; }
.top-tool:focus-visible { box-shadow: 0 0 0 3px var(--c-primary-100); }
.top-tool-icon { width: 27px; height: 27px; display: grid; place-items: center; border-radius: 8px; }
.top-tool-icon svg { width: 15px; height: 15px; }
.top-tool-icon-moon { background: var(--c-slate-50); color: var(--c-slate); }
.top-tool-icon-blue { background: var(--c-blue-50); color: var(--c-blue); }
.top-tool-icon-amber { background: var(--c-amber-50); color: var(--c-amber); }
.top-tool-icon-purple { background: var(--c-purple-50); color: var(--c-purple); }
.top-tool-icon-teal { background: var(--c-accent-50); color: var(--c-accent); }
body.dark .top-tool:hover, body.dark .top-tool:focus-visible { background: var(--c-primary-50); border-color: var(--c-border-strong); }
.bdate { display: flex; align-items: center; gap: .45rem; background: var(--c-primary-50); color: var(--c-primary-600); border: 1px solid var(--c-primary-100); padding: .35rem .75rem; border-radius: 999px; font-weight: 600; font-size: .85rem; white-space: nowrap; }
.hotel-switch select { border: 1px solid var(--c-border); border-radius: 8px; padding: .35rem .5rem; font: inherit; background: #fff; max-width: 200px; }
.user-chip { display: flex; align-items: center; gap: .5rem; cursor: pointer; position: relative; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: linear-gradient(135deg, #1d4ed8, #0d9488); color: #fff; display: grid; place-items: center; font-weight: 700; font-size: .85rem; }
.user-chip .meta { line-height: 1.15; } .user-chip .meta b { font-size: .88rem; display: block; } .user-chip .meta span { font-size: .75rem; color: var(--c-text-2); }
.dropdown { position: absolute; right: 0; top: calc(100% + 8px); background: #fff; border: 1px solid var(--c-border); border-radius: var(--radius); box-shadow: var(--shadow-lg); min-width: 200px; padding: .35rem; display: none; z-index: 60; }
.dropdown.show { display: block; }
.dropdown a, .dropdown button { display: flex; gap: .5rem; align-items: center; width: 100%; padding: .5rem .7rem; border-radius: 6px; color: var(--c-text); background: none; border: 0; font: inherit; cursor: pointer; text-align: left; }
.dropdown a:hover, .dropdown button:hover { background: var(--c-bg); text-decoration: none; }

.content { padding: 1.25rem 1.5rem 3rem; flex: 1; }
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem; margin-bottom: 1.1rem; flex-wrap: wrap; }
.page-head h1 { margin: 0; }
.crumbs { font-size: .8rem; color: var(--c-muted); margin-bottom: .2rem; }
.crumbs a { color: var(--c-text-2); }
.actions { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; }

/* ---------- Cards ---------- */
.card { background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); box-shadow: var(--shadow-sm); margin-bottom: 1.1rem; }
.card-head { display: flex; justify-content: space-between; align-items: center; gap: .75rem; padding: .85rem 1.1rem; border-bottom: 1px solid var(--c-border); flex-wrap: wrap; }
.card-head h3 { margin: 0; font-size: .98rem; }
.card-body { padding: 1.1rem; }
.card-foot { padding: .75rem 1.1rem; border-top: 1px solid var(--c-border); background: #fafbfd; border-radius: 0 0 var(--radius) var(--radius); }
.card.flush .card-body { padding: 0; }

.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 1rem; margin-bottom: 1.1rem; }
.stat { background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 1rem 1.1rem; display: flex; gap: .9rem; align-items: center; box-shadow: var(--shadow-sm); position: relative; overflow: hidden; }
.stat .ico { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; flex-shrink: 0; }
.stat .ico svg { width: 22px; height: 22px; }
.stat .v { font-size: 1.45rem; font-weight: 700; line-height: 1.1; }
.stat .l { color: var(--c-text-2); font-size: .82rem; }
.stat a.cover { position: absolute; inset: 0; }
.tone-blue .ico { background: var(--c-blue-50); color: var(--c-blue); } .tone-green .ico { background: var(--c-green-50); color: var(--c-green); }
.tone-red .ico { background: var(--c-red-50); color: var(--c-red); } .tone-amber .ico { background: var(--c-amber-50); color: var(--c-amber); }
.tone-purple .ico { background: var(--c-purple-50); color: var(--c-purple); } .tone-teal .ico { background: var(--c-accent-50); color: var(--c-accent); }
.tone-slate .ico { background: var(--c-slate-50); color: var(--c-slate); }

/* ---------- Grid ---------- */
.grid { display: grid; gap: 1rem; }
.g-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .g-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-2 { display: grid; gap: 1rem; grid-template-columns: repeat(2, minmax(0, 1fr)); } /* used bare and with .grid on 15 pages */
@media (max-width: 900px) { .grid-2 { grid-template-columns: 1fr; } }
.g-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .g-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.g-2-1 { grid-template-columns: 2fr 1fr; } .g-1-2 { grid-template-columns: 1fr 2fr; } .g-3-1 { grid-template-columns: 3fr 1fr; }
.span-2 { grid-column: span 2; } .span-3 { grid-column: span 3; } .span-all { grid-column: 1 / -1; }

/* ---------- Forms ---------- */
.field { display: flex; flex-direction: column; gap: .3rem; min-width: 0; }
.field label, .lbl { font-size: .8rem; font-weight: 600; color: var(--c-text-2); }
.field label .req { color: var(--c-red); }
.input, .field input:not([type=checkbox]):not([type=radio]), .field select, .field textarea, select.input, textarea.input {
  width: 100%; padding: .52rem .7rem; border: 1px solid var(--c-border-strong); border-radius: var(--radius-sm); font: inherit; color: var(--c-text); background: #fff; transition: border-color .15s, box-shadow .15s; }
.field textarea, textarea.input { min-height: 80px; resize: vertical; }
.input:focus, .field input:focus, .field select:focus, .field textarea:focus { outline: none; border-color: var(--c-primary); box-shadow: 0 0 0 3px rgba(29,78,216,.15); }
.field input[readonly], .input[readonly] { background: var(--c-bg); }
.field .hint { font-size: .75rem; color: var(--c-muted); }
.field .err, .err { font-size: .76rem; color: var(--c-red); }
.is-invalid { border-color: var(--c-red) !important; }
.check { display: inline-flex; align-items: center; gap: .45rem; cursor: pointer; font-size: .9rem; }
.check input { width: 16px; height: 16px; accent-color: var(--c-primary); }
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .9rem 1rem; }
.form-section { font-size: .78rem; text-transform: uppercase; letter-spacing: .06em; color: var(--c-muted); font-weight: 700; margin: 1.1rem 0 .6rem; padding-bottom: .35rem; border-bottom: 1px dashed var(--c-border); grid-column: 1 / -1; }
.filters { display: flex; gap: .6rem; flex-wrap: wrap; align-items: flex-end; }
.filters .field { min-width: 150px; }
.input-sm { padding: .35rem .55rem !important; font-size: .85rem; }

/* ---------- Buttons ---------- */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: .4rem; padding: .52rem .95rem; border-radius: var(--radius-sm); border: 1px solid transparent; font: inherit; font-weight: 600; font-size: .88rem; cursor: pointer; background: var(--c-surface); color: var(--c-text); border-color: var(--c-border-strong); white-space: nowrap; transition: all .15s; line-height: 1.2; }
.btn:hover { text-decoration: none; background: var(--c-bg); }
.btn:disabled { opacity: .55; cursor: not-allowed; }
.btn-primary { background: var(--c-primary); color: #fff; border-color: var(--c-primary); }
.btn-primary:hover { background: var(--c-primary-600); }
.btn-success { background: var(--c-green); color: #fff; border-color: var(--c-green); } .btn-success:hover { background: #15803d; }
.btn-danger { background: var(--c-red); color: #fff; border-color: var(--c-red); } .btn-danger:hover { background: #b91c1c; }
.btn-warning { background: var(--c-amber); color: #fff; border-color: var(--c-amber); } .btn-warning:hover { background: #b45309; }
.btn-accent { background: var(--c-accent); color: #fff; border-color: var(--c-accent); } .btn-accent:hover { background: #0f766e; }
.btn-ghost { background: transparent; border-color: transparent; color: var(--c-text-2); } .btn-ghost:hover { background: var(--c-slate-50); }
.btn-soft { background: var(--c-primary-50); color: var(--c-primary); border-color: var(--c-primary-100); }
.btn-sm { padding: .32rem .6rem; font-size: .8rem; } .btn-lg { padding: .75rem 1.3rem; font-size: 1rem; }
.btn-block { width: 100%; }
.btn-icon { padding: .4rem; }

/* ---------- Tables ---------- */
.table-wrap { overflow-x: auto; }
table.table { width: 100%; border-collapse: collapse; font-size: .88rem; }
.table th { text-align: left; font-weight: 600; font-size: .76rem; text-transform: uppercase; letter-spacing: .04em; color: var(--c-text-2); background: #f8fafc; padding: .65rem .85rem; border-bottom: 1px solid var(--c-border); white-space: nowrap; }
.table td { padding: .62rem .85rem; border-bottom: 1px solid #eef2f7; vertical-align: middle; }
.table tbody tr:hover { background: #fafcff; }
.table tfoot td { font-weight: 700; background: #f8fafc; border-top: 2px solid var(--c-border); }
.table .num, .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.table tr.void td { text-decoration: line-through; color: var(--c-muted); }
.table-compact td, .table-compact th { padding: .42rem .6rem; }
.empty { text-align: center; padding: 2.5rem 1rem; color: var(--c-muted); }
.empty svg { width: 40px; height: 40px; margin-bottom: .5rem; opacity: .5; }

/* ---------- Badges & alerts ---------- */
.badge { display: inline-flex; align-items: center; gap: .3rem; padding: .16rem .55rem; border-radius: 999px; font-size: .72rem; font-weight: 650; white-space: nowrap; border: 1px solid transparent; }
.badge-blue { background: var(--c-blue-50); color: #1d4ed8; border-color: #bfdbfe; } .badge-green { background: var(--c-green-50); color: #15803d; border-color: #bbf7d0; }
.badge-red { background: var(--c-red-50); color: #b91c1c; border-color: #fecaca; } .badge-amber { background: var(--c-amber-50); color: #b45309; border-color: #fde68a; }
.badge-slate { background: var(--c-slate-50); color: #475569; border-color: #e2e8f0; } .badge-purple { background: var(--c-purple-50); color: #6d28d9; border-color: #ddd6fe; }
.alert { padding: .8rem 1rem; border-radius: var(--radius-sm); margin-bottom: 1rem; border: 1px solid; display: flex; gap: .6rem; align-items: flex-start; }
.alert-success { background: var(--c-green-50); border-color: #bbf7d0; color: #166534; } .alert-error { background: var(--c-red-50); border-color: #fecaca; color: #991b1b; }
.alert-info { background: var(--c-blue-50); border-color: #bfdbfe; color: #1e40af; } .alert-warn { background: var(--c-amber-50); border-color: #fde68a; color: #92400e; }
.alert ul { margin: 0; padding-left: 1.1rem; }

/* ---------- Tabs ---------- */
.tabs { display: flex; gap: .25rem; border-bottom: 1px solid var(--c-border); margin-bottom: 1rem; overflow-x: auto; }
.tabs a, .tabs button { padding: .6rem .95rem; color: var(--c-text-2); border: 0; background: none; font: inherit; font-weight: 600; cursor: pointer; border-bottom: 2px solid transparent; white-space: nowrap; }
.tabs a.active, .tabs button.active { color: var(--c-primary); border-bottom-color: var(--c-primary); }
.tabs a:hover { text-decoration: none; color: var(--c-text); }
.tab-pane { display: none; } .tab-pane.active { display: block; }

/* ---------- Modal ---------- */
.modal { position: fixed; inset: 0; background: rgba(15,23,42,.5); display: none; align-items: flex-start; justify-content: center; z-index: 100; padding: 5vh 1rem; overflow-y: auto; backdrop-filter: blur(2px); }
.modal.show { display: flex; }
.modal-box { background: #fff; border-radius: var(--radius-lg); width: 100%; max-width: 560px; box-shadow: var(--shadow-lg); animation: pop .15s ease-out; }
.modal-box.lg { max-width: 820px; }
.modal-head { padding: 1rem 1.2rem; border-bottom: 1px solid var(--c-border); display: flex; justify-content: space-between; align-items: center; }
.modal-head h3 { margin: 0; } .modal-body { padding: 1.2rem; } .modal-foot { padding: .9rem 1.2rem; border-top: 1px solid var(--c-border); display: flex; justify-content: flex-end; gap: .5rem; }
@keyframes pop { from { transform: translateY(8px); opacity: 0; } to { transform: none; opacity: 1; } }

/* ---------- Room view tiles ---------- */
.legend { display: flex; flex-wrap: wrap; gap: .9rem; font-size: .8rem; color: var(--c-text-2); }
.legend span { display: inline-flex; align-items: center; gap: .35rem; }
.legend i { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.floor-block { margin-bottom: 1.2rem; }
.floor-title { font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--c-text-2); margin-bottom: .55rem; display: flex; align-items: center; gap: .5rem; }
.floor-title::after { content: ""; flex: 1; height: 1px; background: var(--c-border); }
.rooms { display: grid; grid-template-columns: repeat(auto-fill, minmax(138px, 1fr)); gap: .65rem; }
.room { border-radius: var(--radius); padding: .6rem .7rem; border: 1px solid; position: relative; min-height: 96px; display: flex; flex-direction: column; cursor: pointer; transition: transform .12s, box-shadow .12s; background: #fff; }
.room:hover { transform: translateY(-2px); box-shadow: var(--shadow); }
.room .no { font-size: 1.15rem; font-weight: 750; }
.room .type { font-size: .72rem; color: var(--c-text-2); }
.room .guest { font-size: .78rem; font-weight: 600; margin-top: auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.room .hk { position: absolute; top: .55rem; right: .6rem; width: 9px; height: 9px; border-radius: 50%; }
.room.st-vacant { background: #f0fdf4; border-color: #86efac; } .room.st-vacant .no { color: #15803d; }
.room.st-occupied { background: #fef2f2; border-color: #fca5a5; } .room.st-occupied .no { color: #b91c1c; }
.room.st-reserved { background: #eff6ff; border-color: #93c5fd; } .room.st-reserved .no { color: #1d4ed8; }
.room.st-due_out { background: #fffbeb; border-color: #fcd34d; } .room.st-due_out .no { color: #b45309; }
.room.st-out_of_order, .room.st-out_of_service { background: #f1f5f9; border-color: #cbd5e1; } .room.st-out_of_order .no { color: #475569; }
.hk-clean { background: #16a34a; } .hk-dirty { background: #dc2626; } .hk-inspected { background: #2563eb; } .hk-touch_up { background: #d97706; }
.room-menu { position: absolute; top: 100%; left: 0; z-index: 20; min-width: 180px; }

/* ---------- Tape chart ---------- */
.tape { overflow-x: auto; border: 1px solid var(--c-border); border-radius: var(--radius); background: #fff; }
.tape table { border-collapse: separate; border-spacing: 0; min-width: 100%; }
.tape th, .tape td { border-right: 1px solid #eef2f7; border-bottom: 1px solid #eef2f7; height: 38px; padding: 0; font-size: .78rem; }
.tape thead th { background: #f8fafc; position: sticky; top: 0; z-index: 2; text-align: center; padding: .35rem .2rem; min-width: 62px; font-weight: 600; }
.tape thead th.today { background: var(--c-primary-50); color: var(--c-primary); }
.tape thead th.wknd { background: #fdf6ec; }
.tape .rlabel { position: sticky; left: 0; background: #fff; z-index: 3; padding: 0 .7rem; min-width: 130px; font-weight: 600; white-space: nowrap; }
.tape .rlabel small { color: var(--c-muted); font-weight: 500; margin-left: .3rem; }
.tape .grp td { background: #f1f5f9; font-weight: 700; font-size: .75rem; text-transform: uppercase; color: var(--c-text-2); padding: .3rem .7rem; height: auto; }
.tape td.cell { position: relative; }
.tape td.cell a.new { position: absolute; inset: 0; } .tape td.cell a.new:hover { background: var(--c-primary-50); }
.bar { position: absolute; top: 5px; bottom: 5px; left: 2px; border-radius: 6px; color: #fff; font-size: .73rem; font-weight: 600; padding: 0 .45rem; display: flex; align-items: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; z-index: 1; box-shadow: var(--shadow-sm); }
.bar:hover { text-decoration: none; filter: brightness(1.08); }
.bar.b-reserved { background: linear-gradient(90deg, #2563eb, #3b82f6); } .bar.b-checked_in { background: linear-gradient(90deg, #dc2626, #ef4444); }
.bar.b-checked_out { background: linear-gradient(90deg, #64748b, #94a3b8); } .bar.b-tentative { background: linear-gradient(90deg, #d97706, #f59e0b); }
.bar.b-block { background: repeating-linear-gradient(45deg, #475569, #475569 6px, #64748b 6px, #64748b 12px); }

/* ---------- POS ---------- */
.pos-workspace-nav { display: flex; gap: .18rem; align-items: stretch; overflow-x: auto; margin-bottom: 1rem; padding: .35rem; background: var(--c-surface, #fff); border: 1px solid var(--c-border); border-radius: 12px; box-shadow: var(--shadow-sm); }
.pos-workspace-link { display: inline-flex; align-items: center; gap: .42rem; min-height: 2.25rem; padding: .45rem .72rem; border-bottom: 3px solid transparent; color: var(--c-text-2); text-decoration: none; font-size: .78rem; font-weight: 650; white-space: nowrap; }
.pos-workspace-link:hover { color: var(--c-primary); background: var(--c-primary-50, #eff6ff); text-decoration: none; }
.pos-workspace-link.active { color: var(--c-primary); border-bottom-color: var(--c-primary); background: var(--c-primary-50, #eff6ff); }
.pos-workspace-link .i { width: 15px; height: 15px; flex: none; }
.pos-mode-tabs { display: flex; gap: .35rem; margin: -.35rem 0 1rem; padding: .28rem; background: var(--c-surface, #fff); border: 1px solid var(--c-border); border-radius: 10px; width: fit-content; max-width: 100%; overflow-x: auto; }
.pos-mode-tab { display: inline-flex; align-items: center; gap: .38rem; border: 0; border-bottom: 3px solid transparent; border-radius: 7px; background: transparent; color: var(--c-text-2); padding: .52rem 1.1rem; font: inherit; font-size: .8rem; font-weight: 700; white-space: nowrap; cursor: pointer; }
.pos-mode-tab:hover { color: var(--c-primary); background: var(--c-primary-50, #eff6ff); }
.pos-mode-tab.active { color: var(--c-primary); border-bottom-color: var(--c-primary); background: var(--c-primary-50, #eff6ff); }
.pos-mode-tab .i { width: 15px; height: 15px; }
.pos-order-context { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: .45rem; margin-bottom: 1rem; padding: .45rem; background: var(--c-surface, #fff); border: 1px solid var(--c-border); border-radius: 12px; box-shadow: var(--shadow-sm); }
.pos-context-cell { display: flex; align-items: center; gap: .5rem; min-width: 0; padding: .55rem .62rem; border-right: 1px solid var(--c-border); }
.pos-context-cell:last-child { border-right: 0; }
.pos-context-cell .i { color: var(--c-primary); flex: none; }
.pos-context-action { cursor: pointer; border-radius: 8px; }
.pos-context-action:hover, .pos-context-action:focus-visible { background: var(--c-primary-50, #eff6ff); outline: 0; }
.pos-context-cell span { display: grid; min-width: 0; gap: .12rem; }
.pos-context-cell small { color: var(--c-muted); font-size: .67rem; line-height: 1; }
.pos-context-cell b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .8rem; }
.pos { display: grid; grid-template-columns: 1fr 400px; gap: 1rem; align-items: start; }
.pos-catalog { display: grid; grid-template-columns: 154px minmax(0, 1fr); gap: .8rem; align-items: start; }
.pos-cats { display: flex; flex-direction: column; gap: .32rem; max-height: 66vh; overflow-y: auto; position: sticky; top: calc(var(--top-h) + 1rem); padding-right: .15rem; }
.pos-cats button { border: 1px solid var(--c-border); background: var(--c-surface, #fff); border-radius: 8px; padding: .5rem .65rem; font: inherit; font-weight: 600; font-size: .78rem; cursor: pointer; color: var(--c-text-2); text-align: left; }
.pos-cats button:hover { border-color: var(--c-primary); color: var(--c-primary); }
.pos-cats button.active { background: var(--c-primary); color: #fff; border-color: var(--c-primary); }
.pos-items { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: .6rem; }
.pos-menu-empty { grid-column: 1 / -1; display: grid; justify-items: center; gap: .35rem; padding: 2.5rem 1rem; color: var(--c-muted); text-align: center; border: 1px dashed var(--c-border); border-radius: 12px; }
.pos-menu-empty .i { width: 28px; height: 28px; opacity: .55; }
.pos-menu-empty b { color: var(--c-text-2); }
.pos-item { background: #fff; border: 1px solid var(--c-border); border-radius: var(--radius); padding: 0 0 .6rem; cursor: pointer; text-align: left; font: inherit; display: flex; flex-direction: column; gap: .15rem; min-height: 148px; overflow: hidden; transition: all .12s; }
.pos-item:hover { border-color: var(--c-primary); box-shadow: 0 0 0 3px rgba(29,78,216,.1); transform: translateY(-1px); }
.pos-item b { font-size: .86rem; line-height: 1.25; padding: .3rem .65rem 0; } .pos-item .p { margin-top: auto; font-weight: 700; color: var(--c-primary); padding: 0 .65rem; }
.pos-item .pos-meta { padding: .35rem .65rem 0; }
.pos-photo { display: block; height: 96px; background: linear-gradient(160deg, #f8fafc, #e2e8f0); overflow: hidden; }
.pos-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pos-photo-empty { display: grid; place-items: center; }
.cart-photo { width: 36px; height: 36px; object-fit: cover; border-radius: 8px; flex: none; }
.menu-thumb { width: 42px; height: 42px; object-fit: cover; border-radius: 8px; display: block; background: #f1f5f9; }
.qm-photo { width: 72px; height: 72px; object-fit: cover; border-radius: 10px; flex: none; background: #f1f5f9; }
.veg-dot { width: 12px; height: 12px; border: 1.5px solid; display: inline-grid; place-items: center; border-radius: 2px; }
.veg-dot::after { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.veg-dot.veg { color: #16a34a; } .veg-dot.non_veg { color: #b91c1c; } .veg-dot.egg { color: #d97706; } .veg-dot.beverage { color: #2563eb; }
.cart { position: sticky; top: calc(var(--top-h) + 1rem); }
.cart-table-head { display: grid; grid-template-columns: 1fr auto auto; gap: .5rem; padding: .45rem .8rem .35rem; color: var(--c-muted); font-size: .65rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; border-bottom: 1px solid var(--c-border); }
.cart-table-head span:nth-child(n+2) { text-align: right; }
.cart-lines { max-height: 42vh; overflow-y: auto; }
.cart-line { display: grid; grid-template-columns: 1fr auto auto; gap: .5rem; align-items: center; padding: .5rem 0; border-bottom: 1px dashed var(--c-border); }
.qty { display: inline-flex; align-items: center; border: 1px solid var(--c-border); border-radius: 6px; }
.qty button { border: 0; background: none; width: 26px; height: 26px; cursor: pointer; font-size: 1rem; }
.qty span { min-width: 22px; text-align: center; font-weight: 700; }
.tables-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: .7rem; }
.ptable { border: 2px solid; border-radius: var(--radius); padding: .8rem; text-align: center; background: #fff; cursor: pointer; font: inherit; width: 100%; }
.ptable .tn { font-size: 1.2rem; font-weight: 750; }
.ptable.free { border-color: #86efac; background: #f0fdf4; } .ptable.busy { border-color: #fca5a5; background: #fef2f2; } .ptable.billed { border-color: #fcd34d; background: #fffbeb; }

/* ---------- Misc ---------- */
.kv { display: grid; grid-template-columns: 140px 1fr; gap: .45rem .75rem; font-size: .88rem; }
.kv dt { color: var(--c-text-2); } .kv dd { margin: 0; font-weight: 550; }
.divider-v { width: 1px; background: var(--c-border); align-self: stretch; }
.muted { color: var(--c-muted); } .text-2 { color: var(--c-text-2); } .small { font-size: .8rem; } .tiny { font-size: .72rem; }
.text-green { color: var(--c-green); } .text-red { color: var(--c-red); } .text-amber { color: var(--c-amber); } .text-blue { color: var(--c-blue); }
.bold { font-weight: 700; } .right { text-align: right; } .center { text-align: center; } .nowrap { white-space: nowrap; }
.flex { display: flex; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-1 { gap: .5rem; } .gap-2 { gap: 1rem; } .wrap { flex-wrap: wrap; }
.mt-0 { margin-top: 0; } .mt-1 { margin-top: .5rem; } .mt-2 { margin-top: 1rem; } .mt-3 { margin-top: 1.5rem; } .mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: .5rem; } .mb-2 { margin-bottom: 1rem; }
.ml-auto { margin-left: auto; } .w-100 { width: 100%; } .hidden { display: none !important; }
.bar-chart { display: flex; align-items: flex-end; gap: 6px; height: 180px; padding-top: 10px; }
.bar-chart .col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; height: 100%; justify-content: flex-end; }
.bar-chart .col .b { width: 100%; max-width: 34px; background: linear-gradient(180deg, #3b82f6, #1d4ed8); border-radius: 5px 5px 0 0; min-height: 2px; position: relative; }
.bar-chart .col .b:hover::after { content: attr(data-v); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background: #0f172a; color: #fff; font-size: .7rem; padding: 2px 6px; border-radius: 4px; white-space: nowrap; margin-bottom: 4px; }
.bar-chart .col small { font-size: .68rem; color: var(--c-muted); }
.progress { height: 8px; background: var(--c-slate-50); border-radius: 999px; overflow: hidden; }
.progress > span { display: block; height: 100%; background: linear-gradient(90deg, #1d4ed8, #0d9488); border-radius: 999px; }
.donut { width: 140px; height: 140px; border-radius: 50%; display: grid; place-items: center; }
.donut > div { width: 98px; height: 98px; border-radius: 50%; background: #fff; display: grid; place-items: center; text-align: center; }
.list { list-style: none; margin: 0; padding: 0; }
.list li { display: flex; justify-content: space-between; align-items: center; gap: .5rem; padding: .55rem 0; border-bottom: 1px solid #f1f5f9; font-size: .88rem; }
.list li:last-child { border-bottom: 0; }
.quick { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: .6rem; }
.quick a { display: flex; flex-direction: column; align-items: center; gap: .4rem; padding: .85rem .5rem; border: 1px solid var(--c-border); border-radius: var(--radius); color: var(--c-text); font-weight: 600; font-size: .82rem; background: #fff; text-align: center; }
.quick a:hover { border-color: var(--c-primary); color: var(--c-primary); text-decoration: none; background: var(--c-primary-50); }
.quick a svg { width: 22px; height: 22px; color: var(--c-primary); }
.pagination { display: flex; gap: .3rem; justify-content: flex-end; padding: .8rem 1rem; flex-wrap: wrap; }
.pagination a, .pagination span { padding: .3rem .65rem; border: 1px solid var(--c-border); border-radius: 6px; font-size: .82rem; color: var(--c-text-2); background: #fff; }
.pagination .active { background: var(--c-primary); color: #fff; border-color: var(--c-primary); }
.pagination .disabled { opacity: .45; }
.toast { position: fixed; right: 1.25rem; bottom: 1.25rem; z-index: 200; display: flex; flex-direction: column; gap: .5rem; }
.toast .alert { box-shadow: var(--shadow-lg); min-width: 280px; animation: pop .2s; }
.perm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1rem; }
.perm-grid fieldset { border: 1px solid var(--c-border); border-radius: var(--radius); padding: .7rem .9rem; margin: 0; }
.perm-grid legend { font-weight: 700; font-size: .85rem; padding: 0 .3rem; }
.perm-grid .check { display: flex; padding: .2rem 0; font-size: .85rem; }
.cal { display: grid; grid-template-columns: repeat(7, 1fr); border-left: 1px solid var(--c-border); border-top: 1px solid var(--c-border); }
.cal > div { border-right: 1px solid var(--c-border); border-bottom: 1px solid var(--c-border); min-height: 104px; padding: .35rem; font-size: .78rem; background: #fff; }
.cal .dh { min-height: auto; background: #f8fafc; font-weight: 700; text-align: center; color: var(--c-text-2); }
.cal .off { background: #fafbfc; color: var(--c-muted); }
.cal .today { background: var(--c-primary-50); }
.cal .ev { display: block; margin-top: .2rem; padding: .15rem .35rem; border-radius: 4px; font-size: .72rem; color: #fff; background: var(--c-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cal .ev.enquiry, .cal .ev.tentative { background: var(--c-amber); } .cal .ev.completed { background: var(--c-slate); } .cal .ev.cancelled { background: var(--c-red); text-decoration: line-through; }
.avail td.low { background: #fef2f2; color: #b91c1c; font-weight: 700; } .avail td.mid { background: #fffbeb; } .avail td.ok { background: #f0fdf4; color: #15803d; }

/* ---------- Auth ---------- */
.auth { min-height: 100vh; display: grid; grid-template-columns: minmax(0, 1.18fr) minmax(390px, .82fr); background: #fff; }
.auth-art { background: #08152f; color: #fff; padding: 2.25rem clamp(1.5rem, 4vw, 4.5rem) 2rem; display: flex; flex-direction: column; gap: 1.25rem; position: relative; overflow: hidden; isolation: isolate; }
.auth-art::before, .auth-art::after { content: ''; position: absolute; z-index: -1; border-radius: 999px; pointer-events: none; filter: blur(4px); }
.auth-art::before { width: 34rem; height: 34rem; top: -20rem; left: -12rem; background: rgba(31, 147, 255, .22); }
.auth-art::after { width: 28rem; height: 28rem; right: -14rem; bottom: -14rem; background: rgba(29, 206, 177, .18); }
.auth-art-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; position: relative; z-index: 2; }
.auth-art .brand { color: #fff; }
.auth-art .brand small { color: #91a7ca; }
.auth-live { display: inline-flex; align-items: center; gap: .45rem; color: #b9c9e5; font-size: .72rem; letter-spacing: .04em; white-space: nowrap; }
.auth-live i { width: .45rem; height: .45rem; border-radius: 50%; background: #36d399; box-shadow: 0 0 0 .25rem rgba(54,211,153,.12); }
.auth-intro { position: relative; z-index: 1; max-width: 580px; padding-top: .25rem; }
.auth-eyebrow { margin: 0 0 .65rem; color: #61d5d1 !important; text-transform: uppercase; letter-spacing: .14em; font-size: .66rem !important; font-weight: 800; }
.auth-art h1 { font-size: clamp(1.8rem, 3vw, 2.85rem); line-height: 1.08; max-width: 600px; margin: 0 0 .8rem; letter-spacing: -.035em; }
.auth-art p { color: #b8c4dd; max-width: 560px; font-size: .95rem; line-height: 1.6; margin: 0; }
.auth-slider { position: relative; z-index: 1; width: min(100%, 680px); margin: .2rem 0 0; flex: 1 1 auto; min-height: 300px; display: flex; flex-direction: column; }
.auth-slides { position: relative; flex: 1 1 auto; min-height: 300px; overflow: hidden; isolation: isolate; border: 1px solid rgba(255,255,255,.18); border-radius: 24px; background: #122344; box-shadow: 0 22px 55px rgba(0,0,0,.27); -webkit-mask-image: -webkit-radial-gradient(white, black); }
.auth-slide { position: absolute; inset: 0; margin: 0; opacity: 0; border-radius: inherit; transform: scale(1.035); transition: opacity .7s ease, transform 7s ease; pointer-events: none; }
.auth-slide.is-active { opacity: 1; transform: scale(1); pointer-events: auto; }
.auth-slide::after { content: ''; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(180deg, rgba(3,12,31,.02) 30%, rgba(3,12,31,.88) 100%); }
.auth-slide img { width: 100%; height: 100%; display: block; border-radius: inherit; object-fit: cover; object-position: center; }
.auth-slide figcaption { position: absolute; z-index: 1; left: 1.2rem; right: 1.2rem; bottom: 1rem; display: flex; flex-direction: column; gap: .15rem; }
.auth-slide figcaption strong { font-size: 1rem; letter-spacing: -.01em; }
.auth-slide figcaption span { color: #d5e0f5; font-size: .76rem; }
.auth-slider-bar { display: flex; align-items: center; gap: .7rem; margin-top: .7rem; }
.auth-slider-buttons { display: flex; gap: .35rem; }
.auth-slider-btn { display: grid; place-items: center; width: 2rem; height: 2rem; padding: 0 0 .16rem; border: 1px solid rgba(255,255,255,.22); border-radius: 50%; color: #fff; background: rgba(255,255,255,.08); font-size: 1.35rem; line-height: 1; cursor: pointer; transition: background .2s, border-color .2s, transform .2s; }
.auth-slider-btn:hover, .auth-slider-btn:focus-visible { background: rgba(255,255,255,.2); border-color: rgba(255,255,255,.5); transform: translateY(-1px); }
.auth-dots { display: flex; align-items: center; gap: .35rem; }
.auth-dot { width: 1.45rem; height: .25rem; padding: 0; border: 0; border-radius: 99px; background: rgba(255,255,255,.3); cursor: pointer; transition: width .25s, background .25s; }
.auth-dot.is-active { width: 2.15rem; background: #5eead4; }
.auth-slider-count { margin-left: auto; color: #aebed8; font-size: .68rem; letter-spacing: .12em; }
.auth-tiles { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: .55rem; max-width: 680px; margin-top: 0; flex: 0 0 auto; }
.auth-tiles div { background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1); border-radius: 12px; padding: .62rem .3rem; text-align: center; font-size: .68rem; color: #dbe4f5; }
.auth-tiles div:hover { background: rgba(255,255,255,.1); }
.auth-tiles svg { width: 21px; height: 21px; margin-bottom: .28rem; color: #7dd3fc; }
.auth-form { display: flex; align-items: center; justify-content: center; padding: 2rem clamp(1.25rem, 5vw, 5rem); background: linear-gradient(135deg, #fff 0%, #f8fbff 100%); }
.auth-card { width: 100%; max-width: 400px; }
.auth-form-kicker { color: var(--c-primary); font-size: .7rem; font-weight: 800; letter-spacing: .13em; text-transform: uppercase; margin-bottom: .55rem; }
.auth-card h2 { font-size: 1.65rem; margin-bottom: .25rem; letter-spacing: -.02em; }
.auth-card .field { margin-bottom: .9rem; }
.auth-card .input { padding: .7rem .85rem; background: rgba(255,255,255,.92); }

/* ---------- Print ---------- */
.print-page { background: #fff; max-width: 820px; margin: 1.5rem auto; padding: 2rem 2.2rem; border: 1px solid var(--c-border); border-radius: var(--radius); }
.print-page.thermal { max-width: 320px; padding: 1rem; font-family: var(--mono); font-size: 12px; }
.print-page.kot-sheet { max-width: 860px; }
.kot-slip { max-width: 320px; margin: 0 auto 1rem; padding: 1rem; background: #fff; border: 1px solid #e2e8f0; font-family: var(--mono); font-size: 12px; }
.kot-slip.w58 { max-width: 220px; }
.kot-void { border: 2px solid #111; }
.kot-picks { display: flex; flex-wrap: wrap; gap: .45rem; }
.kot-pick { display: flex; gap: .4rem; align-items: flex-start; border: 1px solid var(--c-border); border-radius: 8px; padding: .4rem .6rem; background: #fff; min-width: 180px; }
@media print {
  .print-page.kot-sheet { max-width: 320px; padding: 0; box-shadow: none; }
  .kot-slip { border: 0 !important; margin: 0; max-width: none; break-after: page; }
  .kot-slip:last-child { break-after: auto; }
}
.print-head { display: flex; justify-content: space-between; gap: 1rem; border-bottom: 2px solid var(--c-text); padding-bottom: .8rem; margin-bottom: 1rem; }
.print-head h2 { margin: 0; }
.print-bar { max-width: 820px; margin: 1rem auto 0; display: flex; gap: .5rem; justify-content: flex-end; }
.print-only { display: none; }
@media print {
  .print-only { display: flex !important; }
  .sidebar, .topbar, .print-bar, .no-print, .page-head .actions { display: none !important; }
  .main { margin: 0 !important; } .content { padding: 0 !important; }
  body { background: #fff; } .print-page { border: 0; margin: 0; max-width: none; padding: 0; }
  .card { box-shadow: none; border-color: #ddd; break-inside: avoid; }
}

/* ---------- Responsive ---------- */
@media (max-width: 1100px) {
  .g-4, .g-6 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .g-2-1, .g-1-2, .g-3-1, .pos { grid-template-columns: 1fr; }
  .cart { position: static; }
  .pos-order-context { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .pos-context-cell:nth-child(3) { border-right: 0; }
  .top-tool { padding: .3rem; }
  .top-tool-label { display: none; }
}

@media (max-width: 860px) {
  .sidebar { transform: translateX(-100%); } body.nav-open .sidebar { transform: none; box-shadow: var(--shadow-lg); }
  .main { margin-left: 0; } .topbar .menu-btn { display: inline-flex; }
  .g-2, .g-3 { grid-template-columns: 1fr; } .span-2, .span-3 { grid-column: auto; }
  .auth { grid-template-columns: 1fr; }
  .auth-art { min-height: auto; padding: 1.35rem 1rem 1.1rem; gap: 1rem; }
  .auth-intro, .auth-tiles { display: none; }
  .auth-slides { height: 245px; min-height: 245px; border-radius: 18px; }
  .auth-slider { flex: 0 0 auto; min-height: 0; margin-top: .1rem; }
  .auth-form { padding: 2rem 1.15rem 2.5rem; min-height: auto; }
  .user-chip .meta, .hotel-switch { display: none; } .content { padding: 1rem; }
  body.sidebar-collapsed .sidebar { width: var(--side-w); }
  body.sidebar-collapsed .main { margin-left: 0; }
  body.sidebar-collapsed .brand { justify-content: flex-start; padding: 0 .9rem 0 1.1rem; }
  body.sidebar-collapsed .brand-copy { display: block; }
  body.sidebar-collapsed .sidebar-collapse { display: grid; position: static; width: 28px; height: 28px; }
  body.sidebar-collapsed .nav { padding-left: .6rem; padding-right: .6rem; overflow-y: auto; }
  body.sidebar-collapsed .nav-section-label, body.sidebar-collapsed .nav-label, body.sidebar-collapsed .nav-item .chev, body.sidebar-collapsed .nav-badge { display: initial; }
  body.sidebar-collapsed .nav-item > a, body.sidebar-collapsed .nav-item > button { justify-content: flex-start; padding: .5rem .7rem; }
  body.sidebar-collapsed .nav-item > a > .i, body.sidebar-collapsed .nav-item > button > .i { width: 18px; height: 18px; }
  body.sidebar-collapsed .nav-sub { display: none; }
  body.sidebar-collapsed .side-profile { justify-content: flex-start; padding: .65rem .75rem; }
  body.sidebar-collapsed .side-profile-copy, body.sidebar-collapsed .side-profile > form { display: block; }
  body.sidebar-collapsed .side-foot { padding-left: 1rem; padding-right: 1rem; text-align: left; font-size: .7rem; }
  body.sidebar-collapsed .side-foot::after { content: none; }
}
.flex-1 { flex: 1; } .ml-1 { margin-left: .5rem; }
.bar-chart .col small { white-space: nowrap; overflow: hidden; max-width: 100%; }

/* ---- Phase 2: tape chart drag & drop */
.bar[draggable=true] { cursor: grab; } .bar[draggable=true]:active { cursor: grabbing; }
.chip-drag { display: inline-flex; gap: .35rem; align-items: center; padding: .3rem .6rem; border-radius: 999px; background: linear-gradient(90deg, #2563eb, #3b82f6); color: #fff; font-size: .78rem; font-weight: 600; cursor: grab; box-shadow: var(--shadow-sm); }
.chip-drag .tiny { opacity: .85; font-weight: 500; }
body.dragging .tape td.cell a.new { pointer-events: none; }
.tape tr.drop-over td { background: #dbeafe !important; } .tape tr.drop-over .rlabel { box-shadow: inset 4px 0 0 var(--c-primary); }
/* rate calendar */
.ratecal td[data-type]:hover { outline: 2px solid var(--c-primary); outline-offset: -2px; }

/* ---- Phase 6: mobile housekeeping, spa calendar */
.hk-wrap { max-width: 720px; margin: 0 auto; }
.hk-summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: .5rem; margin-bottom: 1rem; }
.hk-summary div { background: var(--c-surface); border: 1px solid var(--c-border); border-radius: 12px; padding: .6rem; text-align: center; }
.hk-summary b { display: block; font-size: 1.35rem; } .hk-summary span { font-size: .72rem; color: var(--c-text-2); text-transform: uppercase; letter-spacing: .03em; }
.hk-card { background: var(--c-surface); border: 1px solid var(--c-border); border-left: 5px solid var(--c-border-strong); border-radius: 14px; padding: .85rem 1rem; margin-bottom: .75rem; box-shadow: var(--shadow-sm); }
.hk-card.st-in_progress { border-left-color: var(--c-primary); } .hk-card.st-pending { border-left-color: var(--c-amber); } .hk-card.st-completed { border-left-color: var(--c-green); opacity: .85; }
.hk-card.is-dnd { border-left-color: var(--c-purple, #7c3aed); } .hk-card.is-reclean { border-left-color: var(--c-red); }
.hk-card .hk-room { font-size: 1.6rem; font-weight: 800; line-height: 1; letter-spacing: -.02em; }
.hk-card .acts { display: grid; grid-template-columns: repeat(3, 1fr); gap: .45rem; margin-top: .75rem; }
.hk-card .acts .btn { padding: .7rem .4rem; font-size: .9rem; }
.hk-card .more { display: flex; gap: .4rem; flex-wrap: wrap; margin-top: .5rem; }
.checklist label { display: flex; gap: .6rem; align-items: center; padding: .7rem .2rem; border-bottom: 1px solid var(--c-border); font-size: 1rem; }
.checklist input { width: 22px; height: 22px; accent-color: var(--c-green); }
.mb-grid { display: grid; grid-template-columns: 1fr auto; gap: .5rem .75rem; align-items: center; }
.mb-grid input { width: 80px; text-align: center; font-size: 1.05rem; }
.spa-cal { overflow: auto; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); }
.spa-cal table { border-collapse: separate; border-spacing: 0; width: 100%; min-width: 640px; table-layout: fixed; }
.spa-cal th { position: sticky; top: 0; background: var(--c-slate-50); z-index: 2; padding: .55rem .4rem; font-size: .8rem; border-bottom: 1px solid var(--c-border); border-left: 1px solid var(--c-border); }
.spa-cal td { height: 34px; border-left: 1px solid var(--c-border); border-bottom: 1px dashed var(--c-border); padding: 1px 3px; vertical-align: top; }
.spa-cal td.t { width: 64px; font-size: .72rem; color: var(--c-text-2); text-align: right; padding-right: .4rem; border-left: 0; background: var(--c-slate-50); }
.spa-cal td.free:hover { background: var(--c-primary-50); cursor: pointer; }
.spa-cal .appt { display: block; height: 100%; border-radius: 7px; padding: .25rem .4rem; font-size: .74rem; line-height: 1.25; overflow: hidden; color: #0f172a; background: #dbeafe; border-left: 4px solid #2563eb; text-decoration: none; }
.spa-cal .appt.st-in_progress { background: #fef3c7; border-left-color: #d97706; } .spa-cal .appt.st-completed { background: #dcfce7; border-left-color: #16a34a; }
.spa-cal .appt b { display: block; font-size: .78rem; }
@media (max-width: 600px) {
  .hk-summary { grid-template-columns: repeat(2, 1fr); }
  .hk-card .acts .btn { font-size: .85rem; }
  .pos-order-context { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pos-context-cell { border-right: 0; }
  .pos-catalog { grid-template-columns: 1fr; }
  .pos-cats { flex-direction: row; max-height: none; overflow-x: auto; overflow-y: hidden; position: static; padding-bottom: .15rem; }
  .pos-cats button { white-space: nowrap; text-align: center; }
  .pos-context-cell:nth-child(odd) { border-right: 1px solid var(--c-border); }
}

/* ---------- v1.6 general ledger ---------- */
.table tr.row-head td { background: var(--c-slate-50); font-weight: 750; letter-spacing: .02em; color: var(--c-text); }
.table tr.row-sub td { font-weight: 650; color: var(--c-text-2); }
.table tr.row-total td { font-weight: 750; border-top: 2px solid var(--c-border-strong); }
.gl-type td { background: var(--c-slate-50); font-weight: 700; text-transform: uppercase; font-size: .74rem; letter-spacing: .05em; color: var(--c-text-2); }
.gl-lines input, .gl-lines select { width: 100%; }
.gl-lines td { vertical-align: middle; padding: .35rem .4rem; }
.gl-balance { display: flex; gap: 1.2rem; align-items: center; justify-content: flex-end; font-weight: 650; padding: .6rem 0; }
.gl-balance .off { color: var(--c-red); } .gl-balance .ok { color: var(--c-green); }
.dr-cr { font-size: .7rem; color: var(--c-muted); margin-left: .2rem; }
.ctl-ok { color: var(--c-green); font-weight: 650; } .ctl-bad { color: var(--c-red); font-weight: 650; } .ctl-info { color: var(--c-amber); font-weight: 650; }

/* v1.7 guest portal / requests */
.m-0{margin:0}
form.inline{display:inline}
.req-overdue td{background:#fff5f5}
.req-overdue td:first-child{box-shadow:inset 3px 0 0 #dc2626}
.nav-badge{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;margin-left:.4rem;border-radius:999px;background:#dc2626;color:#fff;font-size:.68rem;font-weight:700;vertical-align:1px}
.portal-qr svg{width:100%;height:auto;display:block}
.portal-link{font-family:ui-monospace,monospace;font-size:.8rem;word-break:break-all;background:var(--c-slate-50);border:1px solid var(--c-border);border-radius:8px;padding:.5rem .6rem}
.portal-grid{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:1rem;align-items:start}
@media (max-width:900px){.portal-grid{grid-template-columns:1fr}}

/* ---- v1.8 accounts payable ---- */
.pad-input { padding: .5rem .7rem; background: var(--c-slate-50, #f8fafc); border: 1px dashed var(--c-border, #e2e8f0); border-radius: var(--radius-sm); font-weight: 600; }
.match-box { display: flex; gap: 1.2rem; flex-wrap: wrap; align-items: center; padding: .8rem 1rem; margin-top: .8rem; border-radius: var(--radius-sm); background: var(--c-slate-50, #f8fafc); border: 1px solid var(--c-border, #e2e8f0); }
.match-box b { font-size: 1.05rem; }
.ap-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: .6rem; }
.ap-summary > div { padding: .7rem .9rem; border-radius: var(--radius-sm); background: var(--c-slate-50, #f8fafc); border: 1px solid var(--c-border, #e2e8f0); }
.ap-summary .l { font-size: .75rem; color: var(--c-text-2, #64748b); text-transform: uppercase; letter-spacing: .03em; }
.ap-summary .v { font-size: 1.15rem; font-weight: 700; }
.ap-summary .v.red { color: var(--c-red); } .ap-summary .v.green { color: var(--c-green); }
.ap-alloc td input { max-width: 130px; margin-left: auto; }
.ap-alloc tr.picked { background: var(--c-blue-50, #eff6ff); }
.age-bad { color: var(--c-red); font-weight: 700; }
.stmt-open td, .stmt-close td { font-weight: 700; background: var(--c-slate-50, #f8fafc); }

/* ---- v1.9 revenue management ---- */
.rm-tag { font-size: .58rem; font-weight: 800; color: #6d28d9; margin-left: .15rem; letter-spacing: .02em; }
.rm-tag.fixed { color: #475569; }
.rm-chart { width: 100%; height: auto; display: block; }
.rm-chart text { font-size: 11px; fill: #64748b; }
.rm-chart .wk { fill: #fff7ed; }
.rm-chart .grid-l { stroke: #e2e8f0; stroke-width: 1; }
.rm-chart .cap { stroke: #dc2626; stroke-width: 1.2; stroke-dasharray: 5 4; }
.rm-chart .b-otb { fill: #2563eb; } .rm-chart .b-held { fill: #8b5cf6; } .rm-chart .b-fc { fill: #fbbf24; opacity: .55; }
.rm-chart .fc-line { fill: none; stroke: #d97706; stroke-width: 2; }
.rm-mode { display: inline-flex; align-items: center; gap: .35rem; padding: .2rem .6rem; border-radius: 999px; font-size: .75rem; font-weight: 700; border: 1px solid; }
.rm-mode.off { background: #f8fafc; color: #475569; border-color: #e2e8f0; }
.rm-mode.recommend { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
.rm-mode.auto { background: #f5f3ff; color: #6d28d9; border-color: #ddd6fe; }
.rm-grid th, .rm-grid td { text-align: center; vertical-align: top; min-width: 84px; }
.rm-grid th:first-child, .rm-grid td:first-child { text-align: left; min-width: 150px; position: sticky; left: 0; background: #fff; z-index: 1; }
.rm-grid .occ-row td { font-size: .72rem; font-weight: 700; padding-top: .3rem; padding-bottom: .3rem; }
.rm-cell .cur { font-size: .74rem; color: var(--c-text-2, #64748b); }
.rm-cell .cur s { opacity: .8; }
.rm-cell input[type=number] { width: 78px; padding: .2rem .3rem; text-align: right; font-weight: 700; font-size: .82rem; }
.rm-cell.up input[type=number] { border-color: #f59e0b; background: #fffbeb; }
.rm-cell.down input[type=number] { border-color: #22c55e; background: #f0fdf4; }
.rm-cell .delta { font-size: .68rem; font-weight: 700; }
.rm-cell.up .delta { color: #b45309; } .rm-cell.down .delta { color: #15803d; }
.rm-cell.fixed { background: #f8fafc; color: #64748b; }
.rm-cell.stop { background: #fef2f2; }
.rm-cell .meta { font-size: .66rem; color: var(--c-muted, #94a3b8); }
.rm-cell label.check { justify-content: center; font-size: .68rem; gap: .2rem; margin-top: .15rem; }
.occ-hi { color: #b91c1c; } .occ-mid { color: #b45309; } .occ-lo { color: #15803d; }
.pickup-pos { color: var(--c-green); font-weight: 700; } .pickup-neg { color: var(--c-red); font-weight: 700; }
.rule-off td { opacity: .5; }
.rm-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: .8rem; }
.rm-steps > div { padding: .8rem .9rem; border: 1px solid var(--c-border, #e2e8f0); border-radius: var(--radius-sm); background: var(--c-slate-50, #f8fafc); font-size: .85rem; }
.rm-steps b { display: block; margin-bottom: .2rem; }

/* v2.0 HR & payroll */
.payslips .slip { padding-bottom: 1.2rem; margin-bottom: 1.6rem; border-bottom: 2px dashed #cbd5e1; }
.payslips .slip:last-child { border-bottom: 0; margin-bottom: 0; }
@media print { .payslips .slip { page-break-after: always; border-bottom: 0; } .payslips .slip:last-child { page-break-after: auto; } }
.slip-info { width: 100%; border-collapse: collapse; margin: .6rem 0 .8rem; font-size: .82rem; }
.slip-info td { border: 1px solid #e2e8f0; padding: .35rem .5rem; vertical-align: top; width: 25%; }
.slip-info td span { display: block; font-size: .68rem; color: #64748b; text-transform: uppercase; letter-spacing: .03em; }
.slip-lines th:nth-child(3), .slip-lines td:nth-child(3) { border-left: 2px solid #e2e8f0; }
.slip-net { display: flex; justify-content: space-between; align-items: center; gap: 1rem; margin-top: .6rem; padding: .6rem .9rem; background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; }
.slip-net span { font-size: .75rem; color: #1d4ed8; text-transform: uppercase; font-weight: 700; margin-right: .6rem; }
.slip-net b { font-size: 1.3rem; }
.att-grid { font-size: .74rem; }
.att-grid th, .att-grid td { padding: .28rem .2rem; text-align: center; min-width: 26px; }
.att-grid th:nth-child(-n+2), .att-grid td:nth-child(-n+2) { text-align: left; position: sticky; background: #fff; z-index: 1; }
.att-grid th:first-child, .att-grid td:first-child { left: 0; min-width: 58px; }
.att-grid th:nth-child(2), .att-grid td:nth-child(2) { left: 58px; min-width: 150px; box-shadow: 1px 0 0 #e2e8f0; }
.att-grid th.we { background: #f8fafc; }
.att-grid .s-P { color: #15803d; } .att-grid .s-A { color: #fff; background: #ef4444; font-weight: 700; border-radius: 4px; }
.att-grid .s-L { color: #fff; background: #8b5cf6; border-radius: 4px; } .att-grid .s-H { color: #7c2d12; background: #fed7aa; border-radius: 4px; }
.att-grid .s-WO { color: #94a3b8; } .att-grid .s-OT { box-shadow: inset 0 -3px 0 #f59e0b; } .att-grid .s-U { color: #cbd5e1; }
.att-grid .s-PH { color: #fff; background: #0ea5e9; border-radius: 4px; font-weight: 700; } .att-grid th.ph { background: #e0f2fe; }
.att-grid td.sum { font-weight: 700; min-width: 44px; }
.leave-bal { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: .6rem; }
.leave-bal > div { padding: .7rem .9rem; border: 1px solid var(--c-border, #e2e8f0); border-radius: var(--radius-sm); background: #fff; }
.leave-bal .code { font-size: .72rem; font-weight: 700; color: var(--c-text-2, #64748b); text-transform: uppercase; }
.leave-bal .v { font-size: 1.5rem; font-weight: 700; line-height: 1.2; }
.leave-bal .meta { font-size: .72rem; color: var(--c-muted, #94a3b8); }
.comp-off td { opacity: .5; }

/* v2.1 online payments */
.kv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));column-gap:1.4rem}
.kv-grid>.span-all{grid-column:1/-1}
.kv-grid>div{padding:.55rem 0;border-bottom:1px dashed var(--c-border);min-width:0}
.kv-grid>div>span:first-child{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--c-text-2,#64748b);margin-bottom:.1rem}
.timeline{list-style:none;margin:0;padding:0 0 0 1.1rem;border-left:2px solid var(--c-border)}
.timeline li{position:relative;padding:.1rem 0 .85rem .4rem}
.timeline li::before{content:"";position:absolute;left:-1.52rem;top:.3rem;width:.7rem;height:.7rem;border-radius:50%;background:#94a3b8;border:2px solid #fff;box-shadow:0 0 0 1px var(--c-border)}
.timeline li.tl-ok::before{background:#16a34a}.timeline li.tl-bad::before{background:#dc2626}.timeline li.tl-info::before{background:#3b82f6}
.qr-box{width:190px;margin:0 auto .4rem}.qr-box svg{width:100%;height:auto;display:block}
.hook-url{font-family:ui-monospace,monospace;font-size:.78rem;background:#f1f5f9;border-radius:6px;padding:.3rem .5rem;word-break:break-all;display:block}

.stats.wide { grid-template-columns: repeat(auto-fit, minmax(245px, 1fr)); }
.stats.wide .stat .v { white-space: nowrap; }

/* v2.2 laundry & linen */
.table tr.row-warn td { background: #fff7ed; }
.table tr.group-row td { background: var(--c-bg, #f5f7fb); font-weight: 700; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(--c-text-2); }
.list-link { display: block; padding: .45rem .6rem; border-radius: 8px; color: inherit; text-decoration: none; border: 1px solid transparent; }
.list-link:hover { background: var(--c-bg, #f5f7fb); }
.list-link.active { border-color: var(--c-primary, #1d4ed8); background: #eff6ff; }
.cover-bar { height: 6px; border-radius: 3px; background: #e5e7eb; overflow: hidden; min-width: 70px; }
.cover-bar > span { display: block; height: 100%; background: #16a34a; }
.cover-bar.low > span { background: #dc2626; }
.cover-bar.mid > span { background: #d97706; }
.loc-pill { display: inline-block; min-width: 2.4rem; text-align: right; font-variant-numeric: tabular-nums; }
.gp-table { width: 100%; border-collapse: collapse; }
.gp-table th, .gp-table td { padding: .28rem .35rem; border-bottom: 1px solid #f1f5f9; }
.gp-table th { font-size: .72rem; color: #64748b; text-align: right; }
.kv-grid>div>.tiny, .kv-grid>div>.badge { display: block; margin-top: .1rem; width: fit-content; }
#loTimeline li b { display: block; }
#loTimeline li span { font-size: .8rem; color: var(--c-text-2); }

/* ───────── v2.3 fixed assets & preventive maintenance ───────── */
.justify-end { justify-content: flex-end; }
.form-grid.one { grid-template-columns: 1fr; }
.seg { display: flex; flex-wrap: wrap; gap: .4rem; }
.seg .check { border: 1px solid var(--c-border, #e2e8f0); border-radius: 8px; padding: .45rem .7rem; background: #fff; cursor: pointer; }
.seg .check:has(input:checked) { border-color: #1d4ed8; background: #eff6ff; color: #1e3a8a; font-weight: 600; }
.asset-hero { display: flex; gap: 1.2rem; align-items: flex-start; }
.asset-hero .qr { width: 118px; flex: 0 0 118px; border: 1px solid #e2e8f0; border-radius: 10px; padding: 6px; background: #fff; }
.asset-hero .qr svg { width: 100%; height: auto; display: block; }
.bv-bar { height: 10px; border-radius: 999px; background: #fde68a; overflow: hidden; display: flex; }
.bv-bar > span { display: block; height: 100%; }
.bv-bar .bv-nbv { background: linear-gradient(90deg, #16a34a, #0d9488); }
.bv-bar .bv-res { background: #94a3b8; }
.bv-legend { display: flex; gap: 1rem; flex-wrap: wrap; font-size: .75rem; color: var(--c-text-2); margin-top: .35rem; }
.bv-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: .3rem; vertical-align: -1px; }
.pm-state { display: inline-block; min-width: 76px; text-align: center; }
.chk-list { margin: .2rem 0 0; padding-left: 1.1rem; font-size: .78rem; color: var(--c-text-2); }
.spark { display: flex; align-items: flex-end; gap: 3px; height: 54px; }
.spark span { flex: 1; background: #93c5fd; border-radius: 3px 3px 0 0; min-height: 2px; position: relative; }
.spark span.past { background: #1d4ed8; }
/* printable QR asset tags */
.tag-sheet { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.tag { border: 1px dashed #94a3b8; border-radius: 8px; padding: 8px; display: flex; gap: 8px; align-items: center; break-inside: avoid; page-break-inside: avoid; background: #fff; }
.tag .tq { width: 84px; flex: 0 0 84px; } .tag .tq svg { width: 100%; height: auto; display: block; }
.tag .tn { font-weight: 800; font-size: 1rem; letter-spacing: .02em; }
.tag .th { font-size: .66rem; text-transform: uppercase; letter-spacing: .08em; color: #64748b; }
.tag .td { font-size: .78rem; line-height: 1.25; }
@media print { .tag-sheet { gap: 4px; } .no-print { display: none !important; } }
.chk-list { font-weight: 400; }

/* v2.4 store requisitions */
.grow { flex: 1 1 auto; min-width: 0; }
.text-purple { color: #7c3aed; }
.muted-row td { color: #94a3b8; }
.budget-bar { display: flex; height: 12px; background: var(--c-slate-50, #f1f5f9); border-radius: 999px; overflow: hidden; margin-bottom: .6rem; box-shadow: inset 0 0 0 1px var(--c-border, #e2e8f0); }
.budget-bar.sm { height: 8px; margin-bottom: .2rem; }
.budget-bar .bb-used { background: #0d9488; }
.budget-bar .bb-this { background: repeating-linear-gradient(45deg, #60a5fa, #60a5fa 5px, #93c5fd 5px, #93c5fd 10px); }
.budget-bar .bb-this.over, .budget-bar .bb-used.over { background: repeating-linear-gradient(45deg, #dc2626, #dc2626 5px, #f87171 5px, #f87171 10px); }
.approve-bar { display: flex; flex-wrap: wrap; gap: .6rem; align-items: flex-end; border-top: 1px solid var(--c-border, #e2e8f0); background: #f8fafc; }
.approve-bar .field { margin: 0; }
.approve-bar .check { padding-bottom: .55rem; }
.issue-note { padding: .7rem 1rem; border-bottom: 1px dashed var(--c-border, #e2e8f0); }
.issue-note:first-child { padding-top: 0; }
.issue-note:last-child { border-bottom: 0; padding-bottom: 0; }
.issue-note .i { width: 14px; height: 14px; vertical-align: -2px; }
#lineTable td { vertical-align: middle; }
#lineTable .line-item { min-width: 220px; }
#lineTable.no-to .col-to { display: none; }
.btn[hidden] { display: none !important; }
.stats.req5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.stats.req5 .stat .v { font-size: 1.2rem; overflow-wrap: anywhere; }
@media (max-width: 1100px) { .stats.req5 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.grid.g-2-1 > * { min-width: 0; }
#lineTable .line-rem { min-width: 120px; }

/* ---------- v2.5 banquet & conference sales ---------- */
.bq-list { list-style: none; margin: 0 0 .6rem; padding: 0; }
.bq-list li { display: flex; justify-content: space-between; gap: .75rem; padding: .42rem 0; border-bottom: 1px dashed var(--c-border); font-size: .88rem; }
.bq-list li:last-child { border-bottom: 0; } .bq-list li b { white-space: nowrap; }
.bq-bar { height: 8px; border-radius: 99px; background: var(--c-slate-50); overflow: hidden; } .bq-bar span { display: block; height: 100%; background: var(--c-amber); } .bq-bar span.ok { background: var(--c-green); }
.sticky-side { position: sticky; top: 76px; }
.items-end { align-items: flex-end; }
.fn-card .card-head { background: var(--c-slate-50); }
.fn-card .fn-items td { padding: .3rem .4rem; } .fn-card .fn-items .input-sm { width: 100%; }
.fn-pax { display: grid; grid-template-columns: repeat(4, 1fr); gap: .5rem; }
.fn-pax > div { background: var(--c-slate-50); border-radius: 8px; padding: .5rem .7rem; } .fn-pax span { display: block; font-size: .72rem; color: var(--c-text-2); text-transform: uppercase; letter-spacing: .03em; }
.fn-pax b { font-size: 1.25rem; } .fn-pax em { display: block; font-style: normal; font-size: .72rem; color: var(--c-text-2); }
.menu-list { font-size: .82rem; color: var(--c-text-2); margin-top: .5rem; }
.diary { border-collapse: collapse; width: 100%; table-layout: fixed; min-width: 900px; }
.diary th, .diary td { border: 1px solid var(--c-border); vertical-align: top; padding: 3px; font-size: .75rem; }
.diary thead th { background: var(--c-slate-50); text-align: center; font-weight: 600; } .diary thead th div { font-weight: 400; color: var(--c-text-2); }
.diary .diary-hall { width: 150px; text-align: left; background: #fff; position: sticky; left: 0; z-index: 1; font-size: .82rem; }
.diary td { height: 64px; position: relative; } .diary .we { background: #fafbfd; } .diary thead th.today, .diary td.today { background: var(--c-primary-50); }
.dfn { display: block; border-radius: 5px; padding: 2px 5px; margin-bottom: 3px; border-left: 3px solid; text-decoration: none; color: var(--c-text); line-height: 1.25; overflow: hidden; }
.dfn span { display: block; color: var(--c-text-2); font-size: .68rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dfn-definite { background: var(--c-green-50); border-color: var(--c-green); } .dfn-tentative { background: var(--c-amber-50); border-color: var(--c-amber); }
.dfn-enquiry { background: #fff; border: 1px dashed var(--c-border-strong); border-left: 3px dashed var(--c-slate); } .dfn-completed { background: var(--c-blue-50); border-color: var(--c-blue); }
.diary-legend .dfn { display: inline-block; margin: 0; }
.dadd { position: absolute; right: 3px; bottom: 2px; width: 18px; height: 18px; line-height: 16px; text-align: center; border-radius: 50%; color: var(--c-muted); text-decoration: none; opacity: 0; }
.diary td:hover .dadd { opacity: 1; background: var(--c-primary-50); color: var(--c-primary); }
@media (max-width: 1100px) { .sticky-side { position: static; } .fn-pax { grid-template-columns: repeat(2, 1fr); } }
.filters > .input { width: auto; flex: 1 1 180px; max-width: 280px; }
.fn-grid .flex > .input { min-width: 0; flex: 1 1 0; width: auto; }
/* v2.9 privacy */
.row-alert td{background:#fff5f5}
.big{font-size:1.9rem;line-height:1.1}
.pii{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.02em}
.pii.revealed{background:#fef3c7;border-radius:4px;padding:0 .25rem}
.plan-list{list-style:none;margin:0;padding:0}.plan-list li{display:flex;justify-content:space-between;gap:1rem;padding:.35rem 0;border-bottom:1px dashed var(--c-border);font-size:.86rem}
.plan-list li b{font-variant-numeric:tabular-nums}.plan-list li.zero{color:#94a3b8}
.notice-text{white-space:pre-line;line-height:1.6}
.bold-row td { font-weight: 600; }
/* v3.1: .kv also accepts <div><span>label</span><b>value</b></div> rows */
.kv > div { display: contents; }
.kv > div > span:first-child { color: var(--c-text-2); }
.kv > div > b { font-weight: 550; min-width: 0; overflow-wrap: anywhere; }
.card-body .kv { grid-template-columns: minmax(90px, 120px) 1fr; }

/* v3.2 table reservations: day timeline, floor plan, waitlist, slot pills */
.tb-tl { overflow-x: auto; border: 1px solid var(--c-border); border-radius: var(--radius); background: #fff; }
.tb-tl-inner { min-width: calc(120px + var(--hours) * 74px); }
.tb-tl-row { display: grid; grid-template-columns: 120px 1fr; border-bottom: 1px solid #eef2f7; min-height: 40px; }
.tb-tl-row:last-child { border-bottom: 0; }
.tb-tl-label { position: sticky; left: 0; background: #fff; z-index: 3; padding: .45rem .7rem; font-weight: 650; font-size: .82rem; border-right: 1px solid #e2e8f0; white-space: nowrap; }
.tb-tl-label small { color: var(--c-muted); font-weight: 500; margin-left: .25rem; }
.tb-tl-track { position: relative; background-image: repeating-linear-gradient(to right, #eef2f7 0 1px, transparent 1px calc(100% / var(--hours))); }
.tb-tl-head { background: #f8fafc; position: sticky; top: 0; z-index: 4; }
.tb-tl-head .tb-tl-label { background: #f8fafc; }
.tb-tl-head .tb-tl-track { display: grid; grid-template-columns: repeat(var(--hours), 1fr); font-size: .72rem; color: var(--c-text-2); font-weight: 600; background: none; }
.tb-tl-head .tb-tl-track span { padding: .55rem .35rem; border-left: 1px solid #e2e8f0; }
.tb-tl-sec { background: #f1f5f9; font-size: .72rem; font-weight: 700; text-transform: uppercase; color: var(--c-text-2); padding: .3rem .7rem; letter-spacing: .04em; }
.tb-blk { position: absolute; top: 4px; bottom: 4px; border-radius: 6px; padding: .15rem .45rem; font-size: .72rem; line-height: 1.25; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: #0f172a; border: 1px solid; border-left-width: 4px; z-index: 2; }
.tb-blk:hover { z-index: 3; box-shadow: 0 2px 8px rgba(15, 23, 42, .15); text-decoration: none; }
.tb-blk.booked { background: #fef3c7; border-color: #f59e0b; } .tb-blk.confirmed { background: #dbeafe; border-color: #3b82f6; }
.tb-blk.seated { background: #dcfce7; border-color: #16a34a; } .tb-blk.completed { background: #f1f5f9; border-color: #cbd5e1; color: #64748b; }
.tb-blk.flag { box-shadow: inset 0 -3px 0 #dc2626; }
.tb-period { position: absolute; top: 0; bottom: 0; background: rgba(29, 78, 216, .04); border-left: 1px dashed #bfdbfe; border-right: 1px dashed #bfdbfe; }
.tb-now { position: absolute; top: 0; bottom: 0; width: 2px; background: #dc2626; z-index: 2; pointer-events: none; }
.floor { position: relative; height: 580px; background: #f8fafc radial-gradient(#dfe5ee 1px, transparent 1px) 0 0 / 22px 22px; border: 1px solid var(--c-border); border-radius: var(--radius); overflow: hidden; user-select: none; }
.floor-sec { position: absolute; top: .55rem; font-size: .7rem; text-transform: uppercase; color: var(--c-muted); font-weight: 700; letter-spacing: .06em; }
.floor-div { position: absolute; top: 0; bottom: 0; border-left: 2px dashed #dbe2ea; }
.ft { position: absolute; width: 96px; height: 80px; border: 2px solid; border-radius: 12px; background: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center;
  cursor: pointer; font: inherit; padding: .2rem; text-align: center; box-shadow: 0 1px 3px rgba(15, 23, 42, .08); transition: box-shadow .15s, transform .15s; color: var(--c-text); }
.ft:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(15, 23, 42, .12); }
.ft.round { border-radius: 50%; width: 88px; height: 88px; } .ft.rect { width: 138px; } .ft.booth { border-radius: 22px 22px 6px 6px; width: 116px; }
.ft .no { font-weight: 750; font-size: 1.05rem; line-height: 1.1; } .ft .meta { font-size: .68rem; color: var(--c-text-2); line-height: 1.2; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ft .cap { position: absolute; top: 3px; right: 7px; font-size: .62rem; color: var(--c-muted); font-weight: 600; }
.ft.free { border-color: #86efac; background: #f0fdf4; } .ft.reserved { border-color: #60a5fa; background: #eff6ff; } .ft.late { border-color: #f59e0b; background: #fffbeb; }
.ft.seated { border-color: #f87171; background: #fef2f2; } .ft.billed { border-color: #eab308; background: #fef9c3; } .ft.clearing { border-color: #a78bfa; background: #f5f3ff; }
.ft.blocked { border-color: #cbd5e1; background: repeating-linear-gradient(45deg, #f1f5f9 0 6px, #e2e8f0 6px 12px); color: #64748b; }
.ft.overdue .meta b { color: #dc2626; } .ft.sel { box-shadow: 0 0 0 3px var(--c-primary), 0 4px 12px rgba(15, 23, 42, .15); }
.ft.pick { box-shadow: 0 0 0 3px #16a34a; }
.floor.editing .ft { cursor: move; border-style: dashed; } .floor.editing .ft:hover { transform: none; }
.floor.editing { background-color: #fffbeb; }
.fl-legend i.free { background: #bbf7d0; } .fl-legend i.reserved { background: #bfdbfe; } .fl-legend i.late { background: #fde68a; } .fl-legend i.seated { background: #fecaca; }
.fl-legend i.billed { background: #fef08a; } .fl-legend i.clearing { background: #ddd6fe; } .fl-legend i.blocked { background: #e2e8f0; }
.tb-panel .kv { margin-bottom: .6rem; }
.wl-item { display: flex; gap: .6rem; align-items: flex-start; padding: .6rem 0; border-bottom: 1px solid #eef2f7; }
.wl-item:last-child { border-bottom: 0; }
.wl-pos { width: 26px; height: 26px; border-radius: 50%; background: var(--c-primary-50); color: var(--c-primary); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: .78rem; flex: none; }
.wl-over { color: #dc2626; font-weight: 700; }
.slot-pills { display: flex; flex-wrap: wrap; gap: .35rem; }
.slot-pills input { position: absolute; opacity: 0; pointer-events: none; }
.slot-pills label, .slot-pills button { padding: .4rem .75rem; border: 1px solid #cbd5e1; border-radius: 999px; background: #fff; cursor: pointer; font: inherit; font-size: .85rem; font-weight: 600; }
.slot-pills input:checked + label, .slot-pills button.on { background: var(--c-primary); color: #fff; border-color: var(--c-primary); }
.slot-pills input:focus-visible + label { outline: 2px solid var(--c-primary); outline-offset: 2px; }
.slot-pills .off { color: #94a3b8; background: #f8fafc; text-decoration: line-through; cursor: not-allowed; font-weight: 500; }
.slot-group { margin-bottom: .7rem; } .slot-group h4 { font-size: .75rem; text-transform: uppercase; color: var(--c-muted); margin: 0 0 .35rem; letter-spacing: .05em; }
.tbl-picks { display: flex; flex-wrap: wrap; gap: .3rem; }
.tbl-picks label { display: inline-flex; align-items: center; gap: .25rem; padding: .25rem .55rem; border: 1px solid #cbd5e1; border-radius: 6px; font-size: .8rem; cursor: pointer; background: #fff; }
.tbl-picks input:checked + span { font-weight: 700; color: var(--c-primary); }
.tb-tag { display: inline-block; font-size: .72rem; font-weight: 600; padding: .12rem .5rem; border-radius: 999px; background: #eef2ff; color: #3730a3; margin: 0 .25rem .25rem 0; }

/* ───────── v3.3 transport & fleet desk ───────── */
.tr-blk { position: absolute; top: 4px; bottom: 4px; border-radius: 6px; padding: .15rem .45rem; font-size: .72rem; line-height: 1.25; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: #0f172a; border: 1px solid; border-left-width: 4px; z-index: 2; }
.tr-blk:hover { z-index: 3; box-shadow: 0 2px 8px rgba(15, 23, 42, .15); text-decoration: none; }
.tr-blk.requested, .tr-blk.confirmed { background: #fef3c7; border-color: #f59e0b; }
.tr-blk.assigned { background: #ede9fe; border-color: #7c3aed; }
.tr-blk.en_route, .tr-blk.onboard { background: #dcfce7; border-color: #16a34a; }
.tr-blk.completed { background: #f1f5f9; border-color: #94a3b8; color: #475569; }
.tr-blk.no_show { background: #fee2e2; border-color: #dc2626; text-decoration: line-through; }
.tr-blk .tick { position: absolute; top: -4px; bottom: -4px; width: 2px; background: #0f172a; opacity: .35; }
.tr-row-off .tb-tl-track { background-color: #f8fafc; background-image: repeating-linear-gradient(45deg, #f1f5f9 0 6px, transparent 6px 12px); }
.tr-queue { display: flex; flex-direction: column; gap: .5rem; }
.tr-q { border: 1px solid var(--c-border); border-left: 4px solid #f59e0b; border-radius: 10px; padding: .55rem .7rem; background: #fff; }
.tr-q.requested { border-left-color: #dc2626; }
.tr-q .t { font-weight: 700; font-size: .9rem; } .tr-q .m { font-size: .75rem; color: var(--c-text-2); }
.tr-q .acts { display: flex; gap: .35rem; margin-top: .4rem; flex-wrap: wrap; }
.paper { display: inline-block; font-size: .68rem; font-weight: 650; padding: .05rem .4rem; border-radius: 999px; margin: 0 .2rem .2rem 0; white-space: nowrap; border: 1px solid; }
.paper.ok { background: #f0fdf4; color: #166534; border-color: #bbf7d0; } .paper.due { background: #fffbeb; color: #92400e; border-color: #fde68a; }
.paper.exp { background: #fef2f2; color: #991b1b; border-color: #fecaca; } .paper.none { background: #f8fafc; color: #94a3b8; border-color: #e2e8f0; }
.tr-route { display: flex; align-items: center; gap: .4rem; font-weight: 600; flex-wrap: wrap; } .tr-route .arrow { color: var(--c-muted); }
.tr-opt-note { font-size: .75rem; margin-top: .25rem; }
.tr-type { display: inline-flex; gap: .3rem; flex-wrap: wrap; } .tr-type label { border: 1px solid var(--c-border); border-radius: 999px; padding: .3rem .8rem; cursor: pointer; font-weight: 600; font-size: .85rem; }
.tr-type input { display: none; } .tr-type input:checked + span { color: var(--c-primary); } .tr-type label:has(input:checked) { border-color: var(--c-primary); background: #eff6ff; }
.hk-card.st-assigned { border-left-color: #7c3aed; } .hk-card.st-en_route, .hk-card.st-onboard { border-left-color: var(--c-green); } .hk-card.st-no_show { border-left-color: var(--c-red); opacity: .8; }
.drv-board { font-size: 2.1rem; font-weight: 800; letter-spacing: .02em; text-align: center; border: 3px solid #0f172a; border-radius: 12px; padding: .6rem; margin: .6rem 0; }
.name-board { border: 6px solid #0f172a; border-radius: 18px; padding: 2.2rem 1rem; text-align: center; margin-top: 1.2rem; }
.name-board .who { font-size: 3.4rem; font-weight: 900; letter-spacing: .02em; line-height: 1.1; word-break: break-word; }
.name-board .hotel { font-size: 1.4rem; font-weight: 700; margin-top: .8rem; color: #334155; }
@media print { .name-board { page-break-before: always; } }

/* v3.6 budgeting */
.bg-grid .bg-cell { width: 92px; min-width: 80px; text-align: right; font-variant-numeric: tabular-nums; }
.bg-grid .bg-note { display: block; width: 100%; margin-top: .2rem; font-size: .74rem !important; padding: .15rem .4rem !important; border-style: dashed; }
.bg-grid td.bg-locked, .bg-grid th.bg-locked { background: #f1f5f9; color: var(--c-text-2); }
.bg-grid .bg-dirty { background: #fffbeb; border-color: #f59e0b; }
.bg-grid .derived td, #bvaTable .derived td { background: #f0fdfa; }
.bva-comment { background: #f8fafc; border-left: 3px solid #0d9488; padding: .3rem .55rem; margin-top: .3rem; border-radius: 4px; }
#bvaTable tr.flag-done td { background: #fefce8; }
.btn-link { background: none; border: 0; padding: 0; cursor: pointer; color: var(--c-primary); }

/* v3.9 engineering: utilities & compliance */
.kpi { border: 1px solid var(--c-border); border-radius: 10px; padding: .7rem .9rem; background: #fff; }
.kpi-v { font-size: 1.45rem; font-weight: 700; margin: .15rem 0; }
.kpi-v small { font-size: .75rem; font-weight: 500; color: var(--c-muted); }
.cal-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .8rem; }
.cal-month { border: 1px solid var(--c-border); border-radius: 10px; padding: .6rem .75rem; background: #fff; min-height: 90px; }
.cal-month h4 { margin: 0 0 .4rem; font-size: .9rem; display: flex; justify-content: space-between; }
.cal-month .it { font-size: .8rem; padding: .2rem 0; border-top: 1px dashed var(--c-border); display: flex; justify-content: space-between; gap: .4rem; }
@media (max-width: 800px) { .g-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* v4.0 API & webhooks console */
.secret-box { border: 2px solid #f59e0b; background: #fffbeb; border-radius: 10px; padding: .8rem 1rem; margin-bottom: 1rem; }
.secret-box .val { display: flex; gap: .5rem; align-items: center; margin-top: .45rem; }
.secret-box input { flex: 1; font-family: var(--mono); font-size: .9rem; background: #fff; }
.http { display: inline-block; min-width: 3.6rem; text-align: center; font: 700 .68rem/1.5 var(--mono); border-radius: 5px; padding: .05rem .35rem; color: #fff; }
.http-GET { background: #2563eb; } .http-POST { background: #059669; } .http-PATCH { background: #d97706; } .http-DELETE { background: #dc2626; }
pre.codeblock { background: #0f172a; color: #e2e8f0; border-radius: 8px; padding: .75rem .9rem; overflow: auto; font: .78rem/1.5 var(--mono); margin: .4rem 0; white-space: pre; max-height: 420px; }
.scope-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: .15rem .9rem; }
.scope-grid .check { font-size: .84rem; padding: .15rem 0; align-items: flex-start; }
.scope-grid .check small { display: block; color: var(--c-text-2); font-size: .72rem; }
.ep-doc { border-top: 1px solid var(--c-border); padding: .9rem 1.1rem; }
.ep-doc h4 { margin: 0 0 .3rem; font-size: .95rem; display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; }
.card.flush .card-body.pad { padding: .9rem 1.1rem; }
/* v4.1 upselling */
.offer-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1rem; }
.offer-card { background: #fff; border: 1px solid var(--c-border, #e2e8f0); border-radius: 12px; padding: 1.1rem; display: flex; flex-direction: column; box-shadow: 0 1px 2px rgba(15, 23, 42, .04); }
.offer-card h3 { margin: .4rem 0 .1rem; font-size: 1.05rem; }
.offer-card form { margin-top: auto; }
.offer-ic { width: 40px; height: 40px; border-radius: 10px; background: #eff6ff; color: #1d4ed8; display: flex; align-items: center; justify-content: center; }
.offer-price b { font-size: 1.25rem; }
.upsell-row { display: grid; grid-template-columns: 1fr auto auto; gap: .6rem; align-items: center; padding: .5rem 0; border-top: 1px solid var(--c-border, #e2e8f0); }
.upsell-row:first-child { border-top: 0; }

/* v4.2 security & gate management */
.table tr.row-overstay td { background: #fff1f2; }
.sec-mini { display: flex; justify-content: space-between; align-items: center; gap: .6rem; padding: .5rem .6rem; border: 1px solid var(--c-border); border-radius: 10px; margin-bottom: .4rem; background: #fff; }
#visitorModal .host-pane[hidden] { display: none; }

/* v4.9 workforce */
.roster-grid td.roster-cell{min-width:88px;padding:.3rem .35rem;vertical-align:middle}
.roster-grid th.today{background:rgba(59,130,246,.12)}
.roster-select{width:100%;font-size:.78rem;padding:.2rem .25rem;min-width:78px}
.clock-big{font-size:2.6rem;font-weight:700;letter-spacing:.02em;font-variant-numeric:tabular-nums}
.kiosk-wrap{max-width:460px;margin:1rem auto;text-align:center}
.kiosk-wrap input{font-size:1.4rem;text-align:center;letter-spacing:.15em}
.st-on_duty{color:#16a34a}.st-no_show,.st-missing_out{color:#dc2626}.st-upcoming,.st-off{color:#64748b}.st-leave{color:#2563eb}.st-done{color:#0f766e}.st-unrostered{color:#d97706}
.print-page.landscape{max-width:1120px}
@media print{.print-page.landscape{max-width:none}}

/* v5.0 food safety & allergens */
.allergen-codes{display:inline-block;font-size:.6rem;font-weight:800;letter-spacing:.03em;padding:.02rem .3rem;border-radius:4px;background:var(--c-amber-50,#fffbeb);color:#92400e;border:1px solid #fcd34d;margin-left:auto}
.pos-item.allergy-hit{border-color:var(--c-red);background:var(--c-red-50,#fef2f2)}
.pos-item.allergy-hit .allergen-codes{background:var(--c-red);color:#fff;border-color:var(--c-red)}
.allergen-picks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.35rem 1rem;margin-bottom:1rem}
.allergen-picks label{display:flex;gap:.45rem;align-items:center;font-size:.86rem;cursor:pointer}
.allergen-picks .allergen-codes{margin-left:0;min-width:1.9rem;text-align:center}
.fs-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:.8rem}
.fs-unit{background:var(--c-surface);border:1px solid var(--c-border);border-left:5px solid var(--c-amber);border-radius:var(--radius);padding:.75rem .85rem;display:flex;flex-direction:column;gap:.3rem}
.fs-unit.done{border-left-color:var(--c-green)} .fs-unit.breach{border-left-color:var(--c-red);background:var(--c-red-50,#fef2f2)}
.fs-unit .t{font-size:1.6rem;font-weight:800;font-family:var(--mono);line-height:1.1}
.fs-unit .t.bad{color:var(--c-red)} .fs-unit .dots{display:flex;gap:.25rem}
.fs-unit .dots i{width:.6rem;height:.6rem;border-radius:50%;background:var(--c-border);display:inline-block} .fs-unit .dots i.on{background:var(--c-green)} .fs-unit .dots i.bad{background:var(--c-red)}
.fs-matrix th.al,.fs-matrix td.al{text-align:center;padding-left:.2rem;padding-right:.2rem;width:2.3rem}
.fs-matrix th.al span{writing-mode:vertical-rl;transform:rotate(180deg);font-size:.68rem;white-space:nowrap;display:inline-block;max-height:9rem}
.fs-matrix td.al input{width:1rem;height:1rem;cursor:pointer}
.fs-matrix td.al.recipe{background:var(--c-amber-50,#fffbeb)} .fs-matrix td.al.miss{background:var(--c-red-50,#fef2f2);outline:2px solid var(--c-red);outline-offset:-2px}
.fs-matrix select.may{font-size:.7rem;padding:.1rem .2rem}
.fs-check{display:grid;grid-template-columns:1fr auto;gap:.5rem 1rem;align-items:center;padding:.6rem .2rem;border-bottom:1px solid var(--c-border)}
.fs-check .yn{display:flex;gap:.3rem} .fs-check .yn label{border:1px solid var(--c-border);border-radius:8px;padding:.3rem .8rem;cursor:pointer;font-weight:700;font-size:.85rem}
.fs-check .yn input{display:none} .fs-check .yn input:checked+span.ok{color:var(--c-green)} .fs-check .yn input:checked+span.no{color:var(--c-red)}
.fs-check .yn label:has(input:checked){background:var(--c-slate-50)} .fs-check .note{grid-column:1/-1}
@media (max-width:700px){.allergen-picks{grid-template-columns:1fr}}
.fs-split{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:1rem;align-items:start}
@media (max-width:1000px){.fs-split{grid-template-columns:1fr}}
/* v5.1 health club */
.club-occ{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.6rem}
.club-occ .fac{border:1px solid var(--c-border);border-radius:10px;padding:.6rem .75rem;background:#fff;position:relative}
.club-occ .fac .n{font-size:1.35rem;font-weight:750}.club-occ .fac .progress{margin-top:.35rem}
.club-occ .fac.full{border-color:#fecaca;background:var(--c-red-50)}.club-occ .fac.busy{border-color:#fde68a;background:var(--c-amber-50)}
.club-occ .fac.sel{outline:2px solid var(--c-primary)}
.club-person{display:flex;gap:1rem;align-items:flex-start}
.club-photo{width:96px;height:112px;border-radius:10px;object-fit:cover;background:linear-gradient(135deg,#1d4ed8,#0d9488);color:#fff;display:flex;align-items:center;justify-content:center;font-size:2rem;font-weight:800;flex:none}
.club-photo.sm{width:40px;height:40px;font-size:.95rem;border-radius:50%}
.club-verdict{border-radius:12px;padding:.9rem 1rem;margin:.75rem 0;font-weight:650;display:flex;gap:.6rem;align-items:flex-start}
.club-verdict.ok{background:var(--c-green-50);color:#15803d;border:1px solid #bbf7d0}
.club-verdict.no{background:var(--c-red-50);color:#b91c1c;border:1px solid #fecaca}
.club-verdict .big{font-size:1.25rem;display:block}
.club-scan{font-size:1.15rem;padding:.7rem .9rem;letter-spacing:.04em}
.club-tt{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.5rem}
.club-tt .day{background:#fff;border:1px solid var(--c-border);border-radius:10px;padding:.5rem;min-height:140px}
.club-tt .day.today{border-color:var(--c-primary);box-shadow:0 0 0 1px var(--c-primary) inset}
.club-tt .day h4{margin:0 0 .4rem;font-size:.8rem;text-transform:uppercase;color:var(--c-text-2)}
.club-tt .sess{display:block;border-radius:8px;padding:.4rem .5rem;margin-bottom:.4rem;background:var(--c-blue-50);border-left:4px solid #1d4ed8;font-size:.78rem;color:inherit}
.club-tt .sess:hover{text-decoration:none;filter:brightness(.97)}
.club-tt .sess.full{background:var(--c-amber-50);border-left-color:#d97706}.club-tt .sess.past{opacity:.6}
@media (max-width:1000px){.club-tt{grid-template-columns:1fr 1fr}}
.club-card{width:85.6mm;height:54mm;border-radius:3.2mm;overflow:hidden;position:relative;color:#fff;background:linear-gradient(135deg,#0f172a 0%,#1d4ed8 60%,#0d9488 100%);box-shadow:0 2px 10px rgba(15,23,42,.25);break-inside:avoid;font-family:inherit}
.club-card .top{display:flex;justify-content:space-between;align-items:center;padding:3mm 3.5mm 0}
.club-card .top b{font-size:10pt;letter-spacing:.03em}.club-card .top span{font-size:6.5pt;text-transform:uppercase;letter-spacing:.12em;opacity:.85}
.club-card .mid{display:flex;gap:3mm;padding:2.5mm 3.5mm}
.club-card .ph{width:17mm;height:21mm;border-radius:1.6mm;object-fit:cover;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;font-size:14pt;font-weight:800;flex:none}
.club-card .who{flex:1;min-width:0;font-size:7pt;line-height:1.35}.club-card .who .nm{font-size:10.5pt;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.club-card .qr{width:19mm;height:19mm;background:#fff;border-radius:1.4mm;padding:.8mm;flex:none}.club-card .qr svg{width:100%;height:100%;display:block}
.club-card .no{position:absolute;left:3.5mm;bottom:2.6mm;font-size:10pt;font-weight:700;letter-spacing:.14em;font-family:ui-monospace,Menlo,monospace}
.club-card .exp{position:absolute;right:3.5mm;bottom:2.8mm;font-size:6.5pt;text-align:right;opacity:.9}
.club-cards{display:grid;grid-template-columns:repeat(2,85.6mm);gap:6mm}
@media print{.club-card{-webkit-print-color-adjust:exact;print-color-adjust:exact;box-shadow:none}}
.field[hidden],tr[hidden],.club-hide[hidden]{display:none!important}

/* v5.1 enrol: card-holder rows fit the card */
.club-persons input:not([type=checkbox]), .club-persons select { width: 100%; min-width: 0; }
.club-persons td:nth-child(1) { min-width: 150px; } .club-persons td:nth-child(4) { min-width: 130px; }

/* v5.2 apartments & leases: unit board */
.lease-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:.6rem}
.lease-board .u{border:1px solid var(--c-border);border-radius:10px;padding:.6rem .75rem;background:#fff;display:block;color:inherit;text-decoration:none;border-left-width:4px}
.lease-board .u:hover{box-shadow:0 2px 8px rgba(15,23,42,.08)}
.lease-board .u.vacant{border-left-color:#22c55e}.lease-board .u.leased{border-left-color:#3b82f6}.lease-board .u.reserved{border-left-color:#a855f7}.lease-board .u.maintenance{border-left-color:#94a3b8;background:var(--c-slate-50)}
.lease-board .u.notice{border-left-color:#f59e0b}.lease-board .u.arrears{background:var(--c-red-50)}
.lease-board .u .code{font-weight:750}.lease-board .u .t{font-size:.8rem;color:#64748b}
.lease-items td{padding:.25rem .4rem!important}.lease-items input,.lease-items select{width:100%;min-width:0}
.lease-hide[hidden]{display:none!important}

/* v5.3 income audit – room count sheet */
.rc-opts { white-space: nowrap; }
.rc-opt { display: inline-flex; align-items: center; gap: .25rem; margin-right: .8rem; font-size: .85rem; cursor: pointer; }
.rc-opt input { width: auto; margin: 0; }

/* v5.4 report automation */
.table tr.row-red td { background: #fef2f2; } .table tr.row-amber td { background: #fffbeb; }
details.card > summary { list-style: none; } details.card > summary::-webkit-details-marker { display: none; }
details.card > summary h3::after { content: ' ▸'; color: var(--c-muted); font-weight: 400; } details.card[open] > summary h3::after { content: ' ▾'; }
details.card:not([open]) > summary.card-head { border-bottom: 0; }

/* v5.5 packages & meal plans */
.row-today td { background: var(--c-blue-50); }
.strike td { text-decoration: line-through; }
.pkg-tabs { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1rem; }
.pkg-tab { display: inline-flex; align-items: center; gap: .45rem; padding: .5rem .9rem; border: 1px solid var(--c-border); border-radius: 999px; background: #fff; color: inherit; text-decoration: none; font-weight: 600; font-size: .9rem; }
.pkg-tab:hover { border-color: var(--c-primary, #2563eb); }
.pkg-tab.active { background: var(--c-primary, #2563eb); border-color: var(--c-primary, #2563eb); color: #fff; }
.pkg-tab.active .badge { background: rgba(255,255,255,.2); color: #fff; border-color: transparent; }
.desk-form { align-items: center; flex-wrap: nowrap; }
#deskTable td.big, #deskTable .big { font-size: 1.15rem; }
.pkg-matrix td.center, .pkg-matrix th.center { text-align: center; }
.pkg-matrix input[type=checkbox] { width: 1.1rem; height: 1.1rem; }
.pkg-included { background: var(--c-amber-50); border: 1px solid #fde68a; border-radius: 8px; padding: .45rem .7rem; margin-bottom: .6rem; }
.pkg-forecast td b { font-size: 1.05rem; }
@media (max-width: 900px) { .desk-form { flex-wrap: wrap; } }

/* v5.6 financial close: fiscal-year month tiles, highlighted / due rows */
.fy-month{display:flex;flex-direction:column;min-width:5.4rem;padding:.45rem .6rem;border:1px solid var(--c-border);border-radius:10px;background:#fff;text-decoration:none;color:inherit;border-left:4px solid #cbd5e1}
.fy-month b{font-size:.9rem}.fy-month span{font-size:.7rem;color:#64748b}
.fy-month.st-closed{border-left-color:#16a34a;background:#f0fdf4}.fy-month.st-review{border-left-color:#2563eb;background:#eff6ff}
.fy-month.st-open,.fy-month.st-none{border-left-color:#d97706}.fy-month.st-pre{opacity:.55;border-left-style:dashed}
tr.row-hl>td{background:#fefce8}
tr.row-due>td{background:#fffbeb}
#checklist tr[data-status="fail"]>td:first-child{box-shadow:inset 3px 0 0 #dc2626}
#checklist tr[data-status="waived"]>td:first-child{box-shadow:inset 3px 0 0 #7c3aed}

/* v5.7 treasury: forecast chart & grid, denomination count, cash-flow statement */
.tr-chart{width:100%;height:auto;display:block}
.fc-table td,.fc-table th{white-space:nowrap;font-size:.8rem;padding:.35rem .5rem}
.fc-table .sticky{position:sticky;left:0;background:#fff;z-index:1;min-width:12rem}
.fc-table tr.bold-row .sticky{background:#f8fafc}
.fc-table td.fc-short{background:#fee2e2;color:#b91c1c}
.den-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(6.5rem,1fr));gap:.4rem}
.den-grid label{display:flex;flex-direction:column;gap:.15rem}
.cf-table td{padding:.4rem .75rem}
.cf-table tr.cf-head td{font-weight:700;background:#f8fafc;padding-top:.7rem}
.cf-table tr.cf-sub td{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#64748b}
.cf-table td.cf-in{padding-left:1.6rem}
.cf-table tr.cf-total td{font-weight:700;border-top:1px solid var(--c-border)}
.cf-table tr.cf-grand td{font-weight:800;border-top:2px solid #0f172a}
.tr-stats .stat .v{font-size:1.15rem;white-space:nowrap}
.tr-stats{grid-template-columns:repeat(auto-fit,minmax(13rem,1fr))}
.tr-pos td:first-child{min-width:15rem}
.tr-pos td:last-child{white-space:nowrap}
.tr-pos .badge{font-size:.65rem;padding:.05rem .4rem}
.tr-stats .stat{padding:.8rem .85rem;gap:.6rem}
.tr-stats .stat .ico{width:34px;height:34px;flex:0 0 34px}
.tr-stats .stat .v{font-size:1.02rem}
.tr-stats .stat > div:nth-child(2){min-width:0}

/* v5.8 owner reporting: USALI statement, schedules, owner packs & queries */
.usali-table{font-size:.8rem}
.usali-table td,.usali-table th{padding:.3rem .5rem;white-space:nowrap}
.usali-table td:first-child{white-space:normal;min-width:15rem}
.usali-table tr.usali-grp th{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:#64748b;border-bottom:0;padding-bottom:0}
.usali-table .usali-ytd{border-left:2px solid var(--c-border)}
.usali-table td.pct,.usali-sched td.pct{color:#64748b;font-size:.72rem}
tr.usali-head td{font-weight:700;background:#f8fafc;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#334155;padding-top:.55rem}
tr.usali-line td:first-child,.usali-in{padding-left:1.3rem!important}
tr.usali-total td{font-weight:700;border-top:1px solid var(--c-border)}
tr.usali-strong td{font-weight:800;background:#eff6ff;border-top:1px solid #bfdbfe}
td.var-good{color:#15803d}td.var-bad{color:#b91c1c}
.usali-note{margin:.4rem .75rem .6rem}
.between-row{display:flex;justify-content:space-between;align-items:center;gap:.6rem;padding:.3rem 0}
.between-row + .between-row{border-top:1px dashed var(--c-border)}
.lg{display:inline-block;width:.7rem;height:.7rem;border-radius:2px;vertical-align:middle;margin:0 .15rem 0 .5rem}
.lg-tor{background:#93c5fd}.lg-gop{background:#16a34a}.lg-bud{border:2px solid #7c3aed;border-radius:50%;background:#fff}
.oq-mini{padding:.35rem 0}.oq-mini + .oq-mini{border-top:1px dashed var(--c-border)}
.oq{border:1px solid var(--c-border);border-radius:10px;padding:.6rem .75rem;margin-bottom:.6rem}
.oq-q > div:last-child,.oq-a > div:last-child{white-space:pre-line;margin-top:.2rem}
.oq-a{margin:.5rem 0 0 1.2rem;padding:.45rem .6rem;background:#f0f9ff;border-left:3px solid #0284c7;border-radius:6px}
.oq-form{display:flex;gap:.5rem;align-items:flex-end;margin-top:.5rem}.oq-form textarea{flex:1}
.pack-commentary{white-space:pre-line;line-height:1.5}
.cp-bar{height:.6rem;border-radius:999px;background:#e2e8f0;overflow:hidden}.cp-bar span{display:block;height:100%}
.chip-lite{display:inline-block;border:1px solid var(--c-border);border-radius:999px;padding:.15rem .6rem;margin:0 .3rem .3rem 0}
.ffe-step{display:flex;flex-direction:column;gap:.15rem;width:6.5rem}
.owner-print .usali-table{font-size:.68rem}.owner-print .usali-table td:first-child{min-width:11rem}
.op-h{font-size:.95rem;margin:1rem 0 .4rem;border-bottom:2px solid #1d4ed8;padding-bottom:.2rem}
@media print{.op-avoid{break-inside:avoid}.usali-table{font-size:.62rem}}
.own-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:900px){.own-stats{grid-template-columns:1fr}}
.usali-table{font-size:.74rem}
.usali-table td,.usali-table th{padding:.28rem .35rem}
.usali-table td:first-child{min-width:12.5rem}
.usali-table th{font-size:.66rem}
.usali-table td.pct{padding-left:.15rem;padding-right:.15rem}
/* ── v6.0 learning & development ── */
.mx-cell{display:inline-flex;align-items:center;gap:.15rem;border-radius:6px;padding:.08rem .4rem;font-size:.68rem;font-weight:600;white-space:nowrap;line-height:1.35}
.mx-cell svg{width:.7rem;height:.7rem}
.mx-current{background:#dcfce7;color:#166534}.mx-expiring{background:#fef3c7;color:#92400e}.mx-expired{background:#fee2e2;color:#991b1b}
.mx-overdue{background:#dc2626;color:#fff}.mx-due{background:#dbeafe;color:#1e40af}.mx-na{background:transparent;color:#cbd5e1;font-weight:400}
.mx-wrap{max-height:72vh;overflow:auto}
.mx-table th,.mx-table td{padding:.3rem .35rem}
.mx-table thead th{position:sticky;top:0;background:#f8fafc;z-index:2}
.mx-table .mx-sticky{position:sticky;left:0;background:#fff;z-index:1;min-width:12rem;box-shadow:1px 0 0 var(--c-border)}
.mx-table thead .mx-sticky{z-index:3;background:#f8fafc}
.mx-head{text-align:center;min-width:5.2rem;font-size:.7rem}
@media print{.mx-table{font-size:.6rem}.mx-cell{font-size:.55rem;padding:0 .2rem}}
.sop-body{line-height:1.6;font-size:.88rem}
.sop-body h1,.sop-body h2,.sop-body h3{margin:1rem 0 .35rem;font-size:1rem;color:#1e3a8a}
.sop-body h2{border-bottom:1px solid var(--c-border);padding-bottom:.15rem}
.sop-body ol,.sop-body ul{padding-left:1.3rem;margin:.3rem 0 .6rem}.sop-body li{margin:.15rem 0}
.sop-body p{margin:.35rem 0}.sop-body blockquote{margin:.5rem 0;padding:.4rem .7rem;border-left:3px solid #f59e0b;background:#fffbeb}
.sop-body code{background:#f1f5f9;padding:0 .25rem;border-radius:4px}
.sop-body table{border-collapse:collapse;margin:.5rem 0}.sop-body th,.sop-body td{border:1px solid var(--c-border);padding:.25rem .5rem}
.cert{border:6px double #1d4ed8;padding:2.2rem 2rem;text-align:center;margin:.5rem}
.cert-hotel{font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1d4ed8}
.cert-title{font-size:1.9rem;font-weight:800;margin:.6rem 0 1rem;font-family:Georgia,serif}
.cert-sub{color:#475569;font-size:.9rem}.cert-name{font-size:1.6rem;font-weight:700;font-family:Georgia,serif;margin:.3rem 0;border-bottom:1px solid #cbd5e1;display:inline-block;padding:0 1.5rem .2rem}
.cert-course{font-size:1.25rem;font-weight:700;color:#0f172a;margin:.3rem 0}
.cert-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;margin:1.6rem 0 1rem;font-size:.8rem}.cert-grid span{display:block;color:#64748b;font-size:.7rem;text-transform:uppercase}
.cert-sign{display:flex;justify-content:space-around;margin-top:2.2rem;font-size:.8rem}.cert-sign span{color:#64748b}
/* v6.0: list rows inside flush cards keep the card's side padding */
.card.flush > .card-body > .between-row{padding-left:1rem;padding-right:1rem}
.card.flush > .card-body > .muted.small{padding:.6rem 1rem}

/* v6.1 sales & marketing */
.sa-owner { margin-bottom: .75rem; }
.sa-funnel { display: grid; grid-template-columns: 9.5rem 1fr 12rem; gap: .75rem; align-items: center; padding: .45rem 0; border-bottom: 1px dashed var(--c-border); }
.sa-funnel:last-child { border-bottom: 0; }
.sa-funnel-bar { height: .8rem; background: var(--c-bg, #f1f5f9); border-radius: 999px; overflow: hidden; }
.sa-funnel-bar span { display: block; height: 100%; border-radius: 999px; }
.sa-funnel-num { text-align: right; }
.sa-bar-slate { background: #64748b; } .sa-bar-blue { background: #2563eb; } .sa-bar-purple { background: #7c3aed; } .sa-bar-amber { background: #f59e0b; } .sa-bar-green { background: #16a34a; } .sa-bar-red { background: #dc2626; }
.sa-board { display: grid; grid-template-columns: repeat(6, minmax(12rem, 1fr)); gap: .75rem; overflow-x: auto; align-items: start; }
.sa-lane { background: var(--c-bg, #f1f5f9); border: 1px solid var(--c-border); border-radius: 10px; padding: .6rem; min-height: 10rem; }
.sa-lane-head { display: flex; justify-content: space-between; align-items: center; gap: .5rem; }
.sa-lane-sub { margin: .2rem 0 .5rem; }
.sa-card { display: block; background: var(--c-surface, #fff); border: 1px solid var(--c-border); border-radius: 8px; padding: .55rem .65rem; margin-bottom: .5rem; color: inherit; box-shadow: 0 1px 2px rgba(0,0,0,.04); }
.sa-card:hover { text-decoration: none; border-color: var(--c-primary); }
.sa-card .between, .sa-act .between { display: flex; justify-content: space-between; align-items: center; gap: .5rem; }
.mt-05 { margin-top: .4rem; }
.gap-05 { gap: .3rem; }
.sa-stages { display: flex; gap: 2px; margin-bottom: 1rem; }
.sa-step { flex: 1; text-align: center; padding: .5rem .25rem; background: var(--c-bg, #f1f5f9); color: var(--c-text-2); font-weight: 600; font-size: .82rem; clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 50%, calc(100% - 10px) 100%, 0 100%, 10px 50%); }
.sa-step.past { background: #dbeafe; color: #1e40af; }
.sa-step.current { background: var(--c-primary); color: #fff; }
.sa-step.won { background: #16a34a; color: #fff; }
.sa-step.lost { background: #dc2626; color: #fff; }
.sa-act { display: flex; gap: .75rem; padding: .6rem .9rem; border-bottom: 1px solid var(--c-border); }
.sa-act:last-child { border-bottom: 0; }
.sa-act-icon { width: 2rem; height: 2rem; border-radius: 50%; background: #e0e7ff; color: #3730a3; display: flex; align-items: center; justify-content: center; flex: none; }
.sa-act-done .sa-act-icon { background: #dcfce7; color: #166534; }
.sa-act-cancelled { opacity: .6; }
.sa-act-overdue .sa-act-icon { background: #fee2e2; color: #991b1b; }
.sa-act-main { flex: 1; min-width: 0; }
.sa-outcome, .sa-notes { background: var(--c-bg, #f8fafc); border-left: 3px solid var(--c-border); padding: .35rem .6rem; margin-top: .3rem; white-space: pre-line; }
.sa-chart { display: flex; gap: .4rem; align-items: flex-end; height: 11rem; }
.sa-col { flex: 1; display: flex; flex-direction: column; align-items: center; height: 100%; text-align: center; }
.sa-col-bars { flex: 1; width: 100%; display: flex; flex-direction: column-reverse; justify-content: flex-start; }
.sa-act-bar { display: block; width: 100%; background: #2563eb; border-radius: 3px 3px 0 0; }
.sa-otb { display: block; width: 100%; background: repeating-linear-gradient(45deg, #93c5fd, #93c5fd 4px, #dbeafe 4px, #dbeafe 8px); }
.sa-follow { border: 1px dashed var(--c-border); border-radius: 8px; padding: .5rem .75rem; }
.mk-cal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.mk-cal .mk-day { min-height: 5.5rem; background: var(--c-surface, #fff); border: 1px solid var(--c-border); padding: .25rem; font-size: .75rem; }
.mk-cal .mk-day.out { opacity: .45; }
.mk-cal .mk-day.today { outline: 2px solid var(--c-primary); }
.mk-cal .mk-head { font-weight: 700; text-align: center; font-size: .75rem; padding: .25rem; }
.mk-ev { display: block; border-radius: 4px; padding: 1px 4px; margin-top: 2px; color: #fff; background: #7c3aed; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mk-ev:hover { text-decoration: none; opacity: .9; }
.mk-ev.st-planned { background: #64748b; } .mk-ev.st-confirmed { background: #2563eb; } .mk-ev.st-done { background: #16a34a; } .mk-ev.st-cancelled { background: #cbd5e1; color: #334155; text-decoration: line-through; }
@media (max-width: 900px) { .sa-funnel { grid-template-columns: 1fr; } .sa-funnel-num { text-align: left; } }

#salesStats .stat .v, #mkStats .stat .v, #accStats .stat .v, #budgetStats .stat .v, #eventStats .stat .v, #diaryStats .stat .v { font-size: 1.15rem; white-space: nowrap; }
.sa-lane-head { flex-wrap: wrap; }

/* v6.2 digital marketing */
.mk-ev.ps-draft { background: #94a3b8; } .mk-ev.ps-review { background: #d97706; } .mk-ev.ps-approved { background: #2563eb; } .mk-ev.ps-rejected { background: #dc2626; }
.mk-ev.ps-published { background: #16a34a; } .mk-ev.ps-missed { background: #7f1d1d; }
.dm-dot { display: inline-block; width: .6rem; height: .6rem; border-radius: 50%; vertical-align: middle; margin-right: 2px; }
.dm-bar { height: 6px; background: var(--c-border, #e2e8f0); border-radius: 3px; overflow: hidden; margin-bottom: 2px; min-width: 4rem; }
.dm-bar span { display: block; height: 100%; background: #16a34a; }
.dm-bar.over span { background: #dc2626; }
.dm-item { display: block; padding: .5rem .9rem; border-bottom: 1px solid var(--c-border, #e2e8f0); color: inherit; }
.dm-item:hover { background: rgba(37, 99, 235, .04); text-decoration: none; }
.dm-item:last-child { border-bottom: 0; }
.dm-check { display: inline-flex; align-items: center; gap: .35rem; font-weight: 400; cursor: pointer; }
.dm-check.block { display: flex; padding: .3rem 0; }
.dm-caption { white-space: pre-wrap; background: #f8fafc; border: 1px solid var(--c-border, #e2e8f0); border-radius: 8px; padding: .8rem 1rem; font-size: .92rem; }
.dm-qr svg { width: 180px; height: 180px; }
.dm-hc { padding: .2rem 0; }
#dmStats .stat .v, #campStats .stat .v, #campaignStats .stat .v, #linkStats .stat .v, #infStats .stat .v { font-size: 1.15rem; white-space: nowrap; }
/* v6.2 layout fixes: bare g-* column classes are grids too; calendar columns never stretch with long titles */
.g-2, .g-3, .g-4, .g-6, .g-2-1, .g-1-2, .g-3-1 { display: grid; gap: 1rem; }
.g-2-1 > *, .g-1-2 > *, .g-3-1 > *, .g-2 > *, .g-3 > * { min-width: 0; }
.mk-cal { grid-template-columns: repeat(7, minmax(0, 1fr)); }

/* v6.3 Business Development */
.bd-grid th, .bd-grid td { white-space: nowrap; }
.bd-grid td:first-child, .bd-grid th:first-child { position: sticky; left: 0; background: #fff; z-index: 1; }
.bd-grid .bd-we { background: #f8fafc; }
.bd-grid .bd-dear { color: #15803d; }
.bd-grid .bd-cheap { color: #b91c1c; font-weight: 600; }
.bd-grid tr.bold-row td { background: #f1f5f9; }
.bd-x { display: inline; margin-left: .15rem; }
.bd-x button { border: 0; background: none; color: #94a3b8; cursor: pointer; padding: 0 .15rem; font-size: .8rem; line-height: 1; }
.bd-x button:hover { color: #b91c1c; }
.mt-05 { margin-top: .5rem; }

/* v6.4 central reservations */
.cro-hotel.cro-asked { border-color: var(--c-primary, #2563eb); }
.cro-demand { position: relative; height: .7rem; background: #f1f5f9; border-radius: 3px; display: flex; overflow: visible; }
.cro-demand .cro-sold { background: #3b82f6; height: 100%; }
.cro-demand .cro-denied { background: #ef4444; height: 100%; }
.cro-demand i { position: absolute; top: -.2rem; bottom: -.2rem; width: 2px; background: #0f172a; }

/* v6.5 quality assurance */
.qa-seg { display: inline-flex; border: 1px solid var(--c-border); border-radius: 6px; overflow: hidden; }
.qa-seg label { margin: 0; cursor: pointer; }
.qa-seg input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.qa-seg span { display: inline-block; padding: .25rem .6rem; font-size: .78rem; border-left: 1px solid var(--c-border); user-select: none; }
.qa-seg label:first-child span { border-left: 0; }
.qa-seg .qa-pass input:checked + span { background: #16a34a; color: #fff; }
.qa-seg .qa-fail input:checked + span { background: #dc2626; color: #fff; }
.qa-seg .qa-na input:checked + span { background: #64748b; color: #fff; }
.qa-seg input:focus-visible + span { outline: 2px solid #2563eb; outline-offset: -2px; }
.qa-items td input:not([type=radio]) { width: 100%; min-width: 10rem; padding: .35rem .55rem; border: 1px solid var(--c-border); border-radius: 6px; font: inherit; font-size: .82rem; background: #fff; }
.qa-items td input:not([type=radio]):focus { outline: 2px solid #93c5fd; border-color: #3b82f6; }
.qa-std-list { max-height: 22rem; overflow: auto; border: 1px solid var(--c-border); border-radius: 6px; padding: .4rem .6rem; }
.qa-std-list label { display: flex; gap: .4rem; align-items: flex-start; font-weight: normal; margin: .15rem 0; font-size: .82rem; }
.qa-std-list .grp { font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: var(--c-muted); margin-top: .4rem; }
@media print { .qa-print-hide { display: none !important; } }

/* v6.6 parking & valet */
.pk-board { display: grid; grid-template-columns: 1fr 1fr 1.2fr; gap: 1rem; align-items: start; }
.pk-car { border: 1px solid var(--border, #e2e8f0); border-left: 4px solid #f59e0b; border-radius: 10px; padding: .6rem .75rem; margin-bottom: .6rem; background: #fff; }
.pk-car.late { border-left-color: #dc2626; background: #fef2f2; }
.pk-car.ready { border-left-color: #7c3aed; }
.pk-car .mono { font-size: 1.05rem; letter-spacing: .04em; }
@media (max-width: 1100px) { .pk-board { grid-template-columns: 1fr; } }
.pk-trend .col { min-width: 0; }
.pk-trend .col small { font-size: .62rem; }
#pkActiveTable td { vertical-align: middle; }

/* v6.7 health, safety & fire */
ul.plain{list-style:none;margin:0;padding:0}ul.plain li{padding:.3rem 0;border-bottom:1px solid var(--c-border)}ul.plain li:last-child{border-bottom:0}
.hse-shift{display:flex;justify-content:space-between;align-items:center;gap:.6rem;padding:.45rem 0;border-bottom:1px solid var(--c-border)}.hse-shift:last-child{border-bottom:0}
.hse-heat{display:grid;grid-template-columns:1.4rem repeat(5,1fr);gap:4px;max-width:340px}
.hse-heat .hh,.hse-heat .hl{font-size:.7rem;color:var(--c-muted);display:flex;align-items:center;justify-content:center}
.hse-heat .hc{aspect-ratio:1/1;border-radius:6px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.95rem;color:#0f172a}
.hc-low{background:#bbf7d0}.hc-medium{background:#fef08a}.hc-high{background:#fdba74}.hc-very_high{background:#fca5a5}
.hse-trend .col{min-width:0}
.hse-stack{width:100%;max-width:34px;display:flex;flex-direction:column;border-radius:5px 5px 0 0;overflow:hidden;min-height:0}
.hse-stack i{display:block;min-height:3px}.hse-stack i.n,.hse-key.n{background:#93c5fd}.hse-stack i.i,.hse-key.i{background:#f59e0b}.hse-stack i.d,.hse-key.d{background:#dc2626}
.hse-key{display:inline-block;width:.7rem;height:.7rem;border-radius:2px;vertical-align:middle;margin:0 .15rem 0 .6rem}
.hse-item{display:flex;gap:.5rem;align-items:flex-start;padding:.35rem 0;font-size:.88rem;border-bottom:1px dashed var(--c-border);cursor:pointer}
.hse-item input{margin-top:.2rem}
.hse-prec{list-style:none;margin:0;padding:0}.hse-prec li{padding:.35rem 0 .35rem 1.6rem;position:relative;font-size:.88rem}
.hse-prec li::before{content:'☐';position:absolute;left:0;color:var(--c-muted)}.hse-prec li.ok::before{content:'☑';color:#16a34a}
.hse-rate{display:flex;align-items:center;justify-content:space-around;gap:.6rem;text-align:center}
.hse-score{font-size:2rem;font-weight:800;border-radius:12px;padding:.4rem 1rem;margin:.3rem auto;display:inline-block}
.hse-arrow{font-size:1.6rem;color:var(--c-muted)}
#hseRoundTable input[type=radio]{width:1.2rem;height:1.2rem}

/* v6.8 F&B cost control */
.fbc-flash { position: relative; display: flex; align-items: flex-end; gap: 3px; height: 190px; padding: 0 0 18px; border-bottom: 1px solid var(--border, #e2e8f0); }
.fbc-flash .col { position: relative; flex: 1; min-width: 0; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; }
.fbc-flash .fbc-bar { width: 100%; max-width: 18px; background: #60a5fa; border-radius: 3px 3px 0 0; }
.fbc-flash .fbc-bar.over { background: #f87171; }
.fbc-flash .dot { position: absolute; left: 50%; width: 7px; height: 7px; margin: 0 0 -3px -3.5px; border-radius: 50%; background: #7c3aed; }
.fbc-flash small { position: absolute; bottom: -17px; font-size: .62rem; color: var(--text-3, #94a3b8); }
.fbc-flash .fbc-target { position: absolute; left: 0; right: 0; border-top: 1px dashed #dc2626; z-index: 1; pointer-events: none; }
.fbc-flash .fbc-target.bev { border-top-color: #7c3aed; }
.fbc-flash .fbc-target span { position: absolute; right: 0; top: -15px; font-size: .62rem; color: #dc2626; background: rgba(255,255,255,.8); padding: 0 3px; }
.fbc-flash .fbc-target.bev span { color: #7c3aed; left: 0; right: auto; }
.fbc-quad { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.fbc-quad .q { display: flex; flex-direction: column; align-items: center; padding: .7rem .4rem; border-radius: 8px; text-decoration: none; color: inherit; }
.fbc-quad .q b { font-size: 1.5rem; line-height: 1.1; } .fbc-quad .q span { font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; }
.fbc-quad .q-puzzle { background: #dbeafe; order: 1; } .fbc-quad .q-star { background: #dcfce7; order: 2; } .fbc-quad .q-dog { background: #fee2e2; order: 3; } .fbc-quad .q-plowhorse { background: #fef3c7; order: 4; }
.fbc-matrix { width: 100%; height: auto; }
.fbc-matrix .q { font-size: 11px; font-weight: 700; fill: #64748b; letter-spacing: .06em; }
.fbc-matrix .ax { font-size: 10px; fill: #64748b; } .fbc-matrix .lbl { font-size: 9.5px; fill: #334155; }
.fbc-spark { width: 100%; height: 90px; background: #f8fafc; border-radius: 6px; }
.fbc-method { white-space: normal; line-height: 1.55; }
.fbc-stmt td:first-child { width: 60%; }

/* v6.9 talent management */
.pre-line { white-space: pre-line; }
.tal-funnel-row { display: grid; grid-template-columns: 150px 1fr 36px; gap: .5rem; align-items: center; margin-bottom: .35rem; }
.tal-funnel-bar { background: var(--c-bg, #f1f5f9); border-radius: 6px; height: 12px; overflow: hidden; }
.tal-funnel-bar i { display: block; height: 100%; background: #6366f1; border-radius: 6px; }
.tal-funnel-bar i.tal-applied { background: #94a3b8; } .tal-funnel-bar i.tal-screening { background: #3b82f6; } .tal-funnel-bar i.tal-interview { background: #8b5cf6; }
.tal-funnel-bar i.tal-offer { background: #f59e0b; } .tal-funnel-bar i.tal-hired { background: #16a34a; } .tal-funnel-bar i.tal-rejected { background: #ef4444; }
.tal-funnel-bar i.tal-band1 { background: #ef4444; } .tal-funnel-bar i.tal-band2 { background: #f59e0b; } .tal-funnel-bar i.tal-band3 { background: #3b82f6; } .tal-funnel-bar i.tal-band4 { background: #22c55e; } .tal-funnel-bar i.tal-band5 { background: #15803d; }
.tal-board { display: grid; grid-template-columns: repeat(6, minmax(170px, 1fr)); gap: .6rem; overflow-x: auto; padding-bottom: .5rem; }
.tal-col { background: #f1f5f9; border-radius: 10px; padding: .5rem; min-height: 160px; }
.tal-col-head { font-weight: 700; font-size: .85rem; margin-bottom: .4rem; display: flex; justify-content: space-between; align-items: center; }
.tal-card { display: block; background: #fff; border: 1px solid var(--c-border); border-radius: 8px; padding: .45rem .55rem; margin-bottom: .4rem; color: inherit; font-size: .85rem; }
.tal-card:hover { border-color: var(--c-primary); text-decoration: none; }
.tal-prog { height: 6px; background: #e2e8f0; border-radius: 4px; overflow: hidden; margin-bottom: .15rem; max-width: 140px; }
.tal-prog i { display: block; height: 100%; background: #16a34a; }
.tal-sel { padding: .2rem .35rem; font-size: .82rem; max-width: 190px; }
.tal-num { width: 72px; text-align: right; padding: .2rem .35rem; }
.tal-wide { width: 100%; padding: .25rem .4rem; }
.tal-note { width: 110px; padding: .2rem .35rem; font-size: .8rem; }
.tal-sel, .tal-num, .tal-wide, .tal-note { border: 1px solid var(--c-border); border-radius: 6px; background: #fff; font-family: inherit; color: inherit; }
.tal-sel:focus, .tal-num:focus, .tal-wide:focus, .tal-note:focus { outline: none; border-color: var(--c-primary); box-shadow: 0 0 0 2px rgba(29,78,216,.15); }
.tal-inline-form { display: inline-flex; gap: .3rem; align-items: center; flex-wrap: wrap; margin-top: .3rem; }
.tal-inline-form input { padding: .3rem .45rem; }
.tal-score { font-size: 1.1rem; color: var(--c-primary); }
.tal-letter { font-size: .95rem; line-height: 1.55; margin-top: 1rem; }
.tal-terms { width: 100%; border-collapse: collapse; margin: .8rem 0; font-size: .9rem; }
.tal-terms th, .tal-terms td { border: 1px solid #cbd5e1; padding: .4rem .55rem; text-align: left; vertical-align: top; }
.tal-terms th { background: #f1f5f9; width: 30%; }
.tal-sig { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; margin-top: 2.2rem; font-size: .85rem; }
.tal-sig div { border-top: 1px solid #334155; padding-top: .3rem; }
.tal-jobs { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .7rem; margin-top: .8rem; }
.tal-job { display: block; border: 1px solid var(--c-border); border-radius: 10px; padding: .8rem; color: inherit; background: #fff; }
.tal-job:hover { border-color: var(--c-primary); text-decoration: none; }

/* v7.0 sustainability & ESG */
.esg-stack{width:100%;max-width:34px;display:flex;flex-direction:column;border-radius:5px 5px 0 0;overflow:hidden;min-height:0}
.esg-stack i{display:block;min-height:2px}.esg-s1{background:#f59e0b}.esg-s2{background:#3b82f6}.esg-s3{background:#94a3b8}.esg-div{background:#16a34a}.esg-land{background:#a8a29e}
.esg-key{display:inline-block;width:10px;height:10px;border-radius:2px;margin:0 .25rem 0 .7rem;vertical-align:middle}
.esg-trend .col{min-width:0}
.esg-big{font-size:2rem;font-weight:750;line-height:1.1;color:#15803d}.esg-big small{font-size:.85rem;font-weight:500;color:var(--c-muted)}
.esg-hcmi{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.8rem}
.esg-hcmi > div{border:1px solid var(--c-border);border-radius:10px;padding:.7rem .8rem;background:#f8fafc}
.esg-hcmi .l{font-size:.78rem;color:var(--c-muted)}.esg-hcmi .v{font-size:1.35rem;font-weight:700}.esg-hcmi .u{font-size:.78rem;color:var(--c-muted)}
.esg-scope{display:flex;height:14px;border-radius:7px;overflow:hidden;background:#e2e8f0;margin:.3rem 0 .5rem}
.esg-scope i{display:block;height:100%}
.esg-prog{height:8px;background:#e2e8f0;border-radius:4px;overflow:hidden;min-width:90px}
.esg-prog i{display:block;height:100%;background:#16a34a}.esg-prog i.behind{background:#f59e0b}.esg-prog i.no_data{background:#cbd5e1}
.esg-matrix td,.esg-matrix th{text-align:right}.esg-matrix td:first-child,.esg-matrix th:first-child{text-align:left}
.esg-sel{padding:.25rem .4rem;font-size:.82rem;border:1px solid var(--c-border);border-radius:6px;background:#fff;font-family:inherit}
.esg-ev{width:100%;min-width:180px;padding:.25rem .4rem;font-size:.82rem;border:1px solid var(--c-border);border-radius:6px;font-family:inherit}
.esg-sec{display:flex;justify-content:space-between;align-items:center;gap:.5rem}
.esg-report h2{font-size:1.15rem;margin:1.2rem 0 .4rem;color:#15803d;border-bottom:2px solid #bbf7d0;padding-bottom:.2rem}
.esg-report table{width:100%;border-collapse:collapse;font-size:.86rem;margin:.3rem 0 .6rem}
.esg-report th,.esg-report td{border:1px solid #cbd5e1;padding:.3rem .45rem;text-align:left;vertical-align:top}
.esg-report th{background:#f1f5f9}.esg-report td.n{text-align:right;white-space:nowrap}
.esg-report .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem;margin:.4rem 0}
.esg-report .kpis div{border:1px solid #bbf7d0;background:#f0fdf4;border-radius:8px;padding:.45rem .55rem}
.esg-report .kpis b{display:block;font-size:1.15rem}.esg-report .kpis span{font-size:.75rem;color:#475569}
@media (max-width:760px){.esg-report .kpis{grid-template-columns:repeat(2,1fr)}}
/* v7.0 ESG – row action popover */
.esg-pop{position:relative;display:inline-block}
.esg-pop>summary{list-style:none;cursor:pointer}
.esg-pop>summary::-webkit-details-marker{display:none}
.esg-pop>form{position:absolute;right:0;top:calc(100% + 4px);z-index:20;background:#fff;border:1px solid var(--border,#e2e8f0);border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.12);padding:.5rem;display:flex;gap:.4rem;width:320px}
.esg-pop>form .input{flex:1;min-width:0}
/* v7.1 IPTV & guest welcome */
.tv-key{display:inline-block;width:10px;height:10px;border-radius:2px;margin:0 .25rem 0 .7rem;vertical-align:middle}
.tv-key.tv-on,.tv-tile.tv-on{background:#dcfce7;border-color:#16a34a}.tv-key.tv-idle,.tv-tile.tv-idle{background:#eff6ff;border-color:#93c5fd}
.tv-key.tv-off,.tv-tile.tv-off{background:#fee2e2;border-color:#ef4444}.tv-key.tv-none,.tv-tile.tv-none{background:#f8fafc;border-color:#cbd5e1;border-style:dashed}
.tv-floor{margin-bottom:.8rem}.tv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:.45rem;margin-top:.3rem}
.tv-tile{position:relative;display:flex;flex-direction:column;border:1.5px solid;border-radius:8px;padding:.35rem .5rem;color:inherit;min-height:48px}
a.tv-tile:hover{text-decoration:none;filter:brightness(.97)}.tv-tile small{font-size:.7rem;color:var(--c-muted,#64748b);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tv-star{position:absolute;top:2px;right:5px;color:#d97706;font-style:normal;font-size:.8rem}
.tv-em-banner{display:flex;gap:.8rem;align-items:center;background:#b91c1c;color:#fff;border-radius:10px;padding:.8rem 1rem;margin-bottom:1rem;animation:tvAdmPulse 2s infinite}
.tv-em-banner .grow{flex:1}.tv-em-clear{display:flex;gap:.4rem}.tv-em-clear .input{min-width:240px}
@keyframes tvAdmPulse{0%,100%{box-shadow:0 0 0 0 rgba(185,28,28,.5)}50%{box-shadow:0 0 0 8px rgba(185,28,28,0)}}
.tv-em-card{border-color:#fecaca}.tv-em-card .card-head h3{color:#b91c1c}
.tv-url{display:block;word-break:break-all;background:#f1f5f9;border-radius:6px;padding:.45rem .6rem;font-size:.8rem;margin-bottom:.4rem}
.tv-code{font-family:ui-monospace,monospace;letter-spacing:.1em}.tv-code-in{font-size:1.4rem;letter-spacing:.3em;font-family:ui-monospace,monospace;text-align:center}
.tv-steps{padding-left:1.1rem;margin:0 0 .8rem}.tv-steps li{margin-bottom:.35rem}
.tv-cb{display:inline-flex;align-items:center;gap:.3rem;margin:0 1rem .35rem 0}
.tv-hbar{display:grid;grid-template-columns:minmax(0,1.3fr) 1fr auto;gap:.5rem;align-items:center;font-size:.82rem;margin-bottom:.35rem}.tv-hbar span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tv-sw{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:middle}
.tv-th-gold{background:radial-gradient(circle at 80% 10%,#b7791f 0,#7c2d12 38%,#1c1917 100%)}.tv-th-ocean{background:radial-gradient(circle at 80% 10%,#0e7490 0,#1e3a8a 40%,#0b1220 100%)}
.tv-th-forest{background:radial-gradient(circle at 80% 10%,#15803d 0,#14532d 42%,#052e16 100%)}.tv-th-sunset{background:radial-gradient(circle at 80% 10%,#f59e0b 0,#be185d 42%,#312e81 100%)}
.tv-th-night{background:radial-gradient(circle at 80% 10%,#4338ca 0,#1e1b4b 45%,#020617 100%)}
.tv-prev{aspect-ratio:16/9;border-radius:12px;color:#fff;padding:5% 6%;display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden;margin:.8rem 0 .4rem}
.tv-prev h2{font-size:1.7rem;margin:.2rem 0 .5rem;text-shadow:0 2px 10px rgba(0,0,0,.35)}.tv-prev p{font-size:.9rem;line-height:1.45;margin:0;opacity:.95}
.tv-prev-top{position:absolute;top:4%;left:6%;right:6%;display:flex;justify-content:space-between;font-size:.75rem;opacity:.85}
.tv-prev-foot{position:absolute;bottom:5%;left:6%;font-size:.72rem;opacity:.75}

/* v7.2 self-service kiosk (back office) */
.check-row { display: flex; flex-wrap: wrap; gap: .4rem 1.2rem; }
.ksk-queue-live { border: 1.5px solid #f3b4a8; box-shadow: 0 0 0 3px rgba(194,65,45,.08); }
.ksk-queue-live .card-head h3 { color: #b42318; }
.ksk-fun { display: grid; grid-template-columns: 11rem 1fr 2.4rem 2.6rem; align-items: center; gap: .6rem; padding: .28rem 0; }
.ksk-fun-bar { height: 12px; background: var(--c-bg, #f1f5f4); border-radius: 99px; overflow: hidden; }
.ksk-fun-bar i { display: block; height: 100%; background: linear-gradient(90deg, #1f8a5b, #3fb27f); border-radius: 99px; }
.ksk-dev { display: flex; gap: .6rem; align-items: flex-start; padding: .45rem 0; border-bottom: 1px solid var(--c-border, #e5e7eb); }
.ksk-dev:last-child { border-bottom: 0; }
.ksk-dev .badge { flex: none; min-width: 5.2rem; text-align: center; }
@media (min-width: 1000px) { .stats.ksk6 { grid-template-columns: repeat(3, 1fr); } }
.ksk-anon { color: var(--c-muted, #64748b); font-style: italic; font-weight: 500; }
#kskList td.ksk-name { min-width: 11rem; }
#kskList td.ksk-acts { width: 12.5rem; }
#kskList td.ksk-acts > *, #kskList td.ksk-acts form { display: inline-block; margin: 0 .2rem .3rem 0; }

/* v7.3 Guest Messaging inbox */
.inb-tabs { margin-bottom: .75rem; }
.inb-count { display: inline-block; margin-left: .35rem; min-width: 1.35rem; padding: 0 .35rem; border-radius: 99px; background: var(--c-bg, #eef2f1); color: var(--c-text-2); font-size: .72rem; text-align: center; line-height: 1.35rem; }
.inb-count.hot { background: #dc2626; color: #fff; }
.inb { display: grid; grid-template-columns: minmax(270px, 330px) minmax(0, 1fr) minmax(230px, 280px); gap: .9rem; align-items: start; }
.inb > .card { margin: 0; }
.inb-list { display: flex; flex-direction: column; max-height: calc(100vh - 200px); overflow: hidden; }
.inb-filter { padding: .6rem; border-bottom: 1px solid var(--c-border); display: grid; gap: .4rem; }
.inb-filter-row { display: grid; grid-template-columns: 1fr 1fr; gap: .4rem; }
.inb-filter .input { padding: .4rem .55rem; font-size: .85rem; }
.inb-items { overflow-y: auto; flex: 1; }
.inb-item { display: grid; grid-template-columns: 2.4rem 1fr auto; gap: .6rem; padding: .65rem .7rem; border-bottom: 1px solid var(--c-border); color: var(--c-text); align-items: start; }
.inb-item:hover { background: var(--c-bg, #f6f8f7); text-decoration: none; }
.inb-item.on { background: #e8f4ee; box-shadow: inset 3px 0 0 var(--c-primary); }
.inb-item.unread .inb-it-snip { color: var(--c-text); font-weight: 600; }
.inb-av { position: relative; width: 2.4rem; height: 2.4rem; border-radius: 50%; background: #dbe7e1; color: #1d5a40; display: grid; place-items: center; font-weight: 700; font-size: .8rem; }
.inb-av i { position: absolute; right: -3px; bottom: -3px; width: 1.1rem; height: 1.1rem; border-radius: 50%; display: grid; place-items: center; background: #fff; border: 1px solid var(--c-border); color: var(--c-text-2); }
.inb-av i .i { width: .7rem; height: .7rem; }
.inb-ch-whatsapp i { background: #25d366; color: #fff; border-color: #25d366; }
.inb-ch-sms i { background: #2563eb; color: #fff; border-color: #2563eb; }
.inb-ch-email i { background: #7c3aed; color: #fff; border-color: #7c3aed; }
.inb-ch-portal i { background: #0f766e; color: #fff; border-color: #0f766e; }
.inb-it-main { min-width: 0; display: grid; gap: .1rem; }
.inb-it-top { display: flex; gap: .35rem; align-items: center; }
.inb-it-top b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .9rem; }
.inb-it-top time { margin-left: auto; font-size: .72rem; color: var(--c-muted, #64748b); }
.inb-it-sub { font-size: .72rem; color: var(--c-muted, #64748b); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.inb-it-snip { font-size: .8rem; color: var(--c-text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.inb-it-side { display: grid; justify-items: end; gap: .25rem; }
.inb-unread { background: var(--c-primary); color: #fff; border-radius: 99px; font-size: .7rem; min-width: 1.2rem; padding: 0 .3rem; text-align: center; line-height: 1.2rem; }
.inb-wait { font-size: .7rem; font-weight: 700; color: #b45309; background: #fef3c7; border-radius: 4px; padding: 0 .3rem; }
.inb-wait.over { color: #fff; background: #dc2626; }
.inb-pages { padding: .4rem .6rem; border-top: 1px solid var(--c-border); font-size: .8rem; }
.inb-pages:empty { display: none; }
.inb-conv { display: flex; flex-direction: column; height: calc(100vh - 200px); min-height: 480px; }
.inb-head { display: flex; justify-content: space-between; gap: .75rem; padding: .7rem .9rem; border-bottom: 1px solid var(--c-border); align-items: center; flex-wrap: wrap; }
.inb-head h3 { font-size: 1.02rem; }
.inb-head-act { display: flex; gap: .35rem; align-items: center; flex-wrap: wrap; }
.inb-dd { position: relative; display: inline-block; }
.inb-dd-menu { position: absolute; right: 0; top: 110%; z-index: 20; background: #fff; border: 1px solid var(--c-border); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.12); padding: .35rem; display: grid; gap: .25rem; min-width: 10rem; }
.inb-dd-menu[hidden] { display: none; }
.inb-thread { flex: 1; overflow-y: auto; padding: 1rem; background: #f5f7f6; display: flex; flex-direction: column; gap: .55rem; }
.inb-msg { max-width: 78%; padding: .55rem .75rem; border-radius: 12px; background: #fff; border: 1px solid var(--c-border); font-size: .9rem; }
.inb-in { align-self: flex-start; border-bottom-left-radius: 4px; }
.inb-out { align-self: flex-end; background: #dff3e8; border-color: #bfe3cf; border-bottom-right-radius: 4px; }
.inb-out.inb-auto { background: #eef2ff; border-color: #c7d2fe; }
.inb-note { align-self: stretch; max-width: none; background: #fffbeb; border: 1px dashed #f59e0b; }
.inb-note-tag { font-size: .7rem; font-weight: 700; color: #b45309; margin-bottom: .2rem; display: flex; gap: .25rem; align-items: center; }
.inb-failed { border-color: #fca5a5; background: #fef2f2; }
.inb-body { white-space: pre-wrap; word-wrap: break-word; }
.inb-meta { margin-top: .25rem; font-size: .7rem; color: var(--c-muted, #64748b); display: flex; gap: .3rem; flex-wrap: wrap; align-items: center; }
.inb-st-failed { color: #dc2626; font-weight: 700; }
.inb-st-read, .inb-st-delivered { color: #0f766e; }
.inb-err { color: #b91c1c; margin-top: .2rem; }
.inb-sys { align-self: center; font-size: .72rem; color: var(--c-muted, #64748b); background: #e9eeec; border-radius: 99px; padding: .15rem .7rem; text-align: center; max-width: 90%; }
.inb-sys time { opacity: .75; margin-left: .25rem; }
.inb-wa { border-radius: 0; }
.inb-compose { border-top: 1px solid var(--c-border); padding: .6rem .8rem; display: grid; gap: .45rem; }
.inb-compose.note textarea { background: #fffbeb; border-color: #f59e0b; }
.inb-modes { display: flex; gap: .8rem; align-items: center; font-size: .82rem; }
.inb-mode { display: flex; gap: .3rem; align-items: center; cursor: pointer; font-weight: 600; }
.inb-mode.note { color: #b45309; }
.inb-qr-pick { margin-left: auto; max-width: 16rem; padding: .3rem .5rem; font-size: .8rem; }
.inb-send { display: flex; gap: .45rem; align-items: center; justify-content: flex-end; }
.inb-send .tiny { margin-right: auto; }
.inb-none { margin: auto; text-align: center; color: var(--c-muted, #64748b); padding: 2rem; }
.inb-none > .i { width: 2.6rem; height: 2.6rem; opacity: .45; }
.inb-side .card { margin-bottom: .8rem; }
.inb-kv { display: flex; justify-content: space-between; gap: .5rem; padding: .22rem 0; align-items: center; }
.inb-kv span:first-child { color: var(--c-text-2); }
.inb-hr { border: 0; border-top: 1px solid var(--c-border); margin: .55rem 0; }
.inb-row-form { display: grid; grid-template-columns: 4.6rem 1fr; align-items: center; gap: .4rem; margin-bottom: .4rem; }
.inb-row-form .input { padding: .3rem .45rem; font-size: .82rem; }
.inb-row-form label { font-size: .78rem; color: var(--c-text-2); }
.inb-reach { background: var(--c-bg, #f1f5f4); border-radius: 8px; padding: .55rem .7rem; }
.inb-fun { grid-template-columns: 8rem 1fr 2.4rem; }
.text-red { color: #dc2626; }
.pre-wrap { white-space: pre-wrap; }
@media (max-width: 1280px) { .inb { grid-template-columns: minmax(250px, 300px) minmax(0, 1fr); } .inb-side { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: .8rem; } .inb-side .card { margin: 0; } }
@media (max-width: 800px) { .inb { grid-template-columns: 1fr; } .inb-list { max-height: 45vh; } }

/* ---------- v7.4 corporate & travel-agent portal ---------- */
.ptn-body { background: var(--bg, #f5f7fb); min-height: 100vh; display: flex; flex-direction: column; }
.ptn-wrap { max-width: 1180px; margin: 0 auto; padding-left: 20px; padding-right: 20px; width: 100%; box-sizing: border-box; }
.ptn-top { background: #0f2747; color: #fff; box-shadow: 0 2px 10px rgba(15, 39, 71, .25); }
.ptn-bar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-top: 12px; padding-bottom: 10px; flex-wrap: wrap; }
.ptn-brand { display: flex; align-items: center; gap: 10px; color: #fff; text-decoration: none; font-weight: 700; font-size: 16px; }
.ptn-brand small { display: block; font-size: 10px; letter-spacing: .12em; opacity: .7; font-weight: 600; }
.ptn-who { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.ptn-co { font-size: 13px; opacity: .9; display: inline-flex; align-items: center; gap: 6px; }
.ptn-user { display: flex; align-items: center; gap: 8px; color: #fff; text-decoration: none; font-size: 13px; }
.ptn-user small { display: block; opacity: .7; font-size: 11px; }
.ptn-user .avatar { width: 32px; height: 32px; border-radius: 50%; background: #2f6fd6; display: grid; place-items: center; font-weight: 700; }
.ptn-who .btn-ghost { color: #fff; border-color: rgba(255, 255, 255, .35); }
.ptn-nav { display: flex; gap: 4px; overflow-x: auto; }
.ptn-nav a { color: rgba(255, 255, 255, .78); text-decoration: none; padding: 10px 14px; font-size: 14px; border-bottom: 3px solid transparent; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.ptn-nav a:hover { color: #fff; }
.ptn-nav a.active { color: #fff; border-bottom-color: #f5b301; font-weight: 600; }
.ptn-main { padding-top: 22px; padding-bottom: 30px; flex: 1; }
.ptn-foot { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; font-size: 12px; color: #64748b; padding-top: 14px; padding-bottom: 18px; border-top: 1px solid #e2e8f0; }
.ptn-hero { background: linear-gradient(120deg, #0f2747, #1d4ed8); color: #fff; border-radius: 14px; padding: 20px 24px; margin-bottom: 18px; display: flex; justify-content: space-between; gap: 16px; align-items: center; flex-wrap: wrap; }
.ptn-hero h2 { margin: 0 0 4px; font-size: 20px; color: #fff; }
.ptn-hero p { margin: 0; opacity: .85; }
.ptn-hero .btn { background: #f5b301; border-color: #f5b301; color: #0f2747; font-weight: 700; }
.ptn-search { display: grid; grid-template-columns: repeat(4, minmax(120px, 1fr)) auto; gap: 12px; align-items: end; }
.ptn-search .field { margin: 0; }
.ptn-rooms { display: grid; gap: 12px; }
.ptn-room { display: grid; grid-template-columns: 1fr auto; gap: 16px; align-items: center; background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 16px 18px; }
.ptn-room.off { opacity: .6; }
.ptn-room.sel { border-color: #1d4ed8; box-shadow: 0 0 0 3px rgba(29, 78, 216, .12); }
.ptn-room h3 { margin: 0 0 4px; font-size: 16px; }
.ptn-price { text-align: right; }
.ptn-price .big { font-size: 22px; font-weight: 800; color: #0f2747; }
.ptn-price s { color: #94a3b8; font-size: 13px; }
.ptn-save { color: #15803d; font-weight: 600; font-size: 12px; }
.ptn-nights { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.ptn-nights span { background: #f1f5f9; border-radius: 6px; padding: 3px 8px; font-size: 12px; }
.ptn-pay { display: flex; gap: 10px; align-items: end; flex-wrap: wrap; }
.ptn-pay .field { margin: 0; }
.ptn-radio { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; }
.ptn-radio label { border: 1px solid #cbd5e1; border-radius: 10px; padding: 10px 12px; display: flex; gap: 8px; align-items: flex-start; cursor: pointer; background: #fff; }
.ptn-radio label:has(input:checked) { border-color: #1d4ed8; background: #eff6ff; }
.ptn-invoice { background: #fff; max-width: 820px; }
@media (max-width: 760px) { .ptn-search { grid-template-columns: 1fr 1fr; } .ptn-room { grid-template-columns: 1fr; } .ptn-price { text-align: left; } }
@media print { .ptn-top, .ptn-foot, .page-head .actions, .no-print { display: none !important; } .ptn-body { background: #fff; } }
.ptn-warn { color: #b91c1c; }
.ptn-main th.right, .ptn-main td.right { text-align: right; }
