/* ==========================================================================
   Lucerna Ledger — shared shell stylesheet (live).
   Moved out of htdocs/mockups/assets/ on 2026-09-20: the mockups folder is
   throwaway and no live page may depend on it. The mockups keep their own copy.
   Visual system: midday.ai, pinned full-fidelity (see /DESIGN.md)
   ========================================================================== */

:root {
  /* Colors */
  --color-parchment: #dbdad7;
  --color-paper: #ffffff;
  --color-sand: #e6e4e0;
  --color-ink: #121212;
  --color-smoke: #595959;   /* Midday source is #616161; darkened to clear 4.5:1 on --color-parchment (was 4.43:1) */
  --color-charcoal: #18181b;
  --color-moss: #4caf50;      /* decorative/icon/large-scale use only — see --color-moss-text */
  --color-moss-text: #2e6b31; /* moss darkened for body-text use (positive amounts, links) — raw moss is 2.78:1 on white, fails AA */
  --color-moss-tint: #eef6ef;
  --color-rust: #b3261e;
  --color-rust-tint: #fbecea;
  --color-ochre: #b45309;
  --color-ochre-tint: #fbf1e6;
  --color-harbor: #2f6b66;    /* dashboard chart slice 4 — 6.15:1 on white */
  --color-harbor-tint: #eaf0f0;
  --color-clay: #8a5a33;      /* dashboard chart slice 5 — 5.85:1 on white */
  --color-clay-tint: #f3efeb;

  /* Dashboard charts: fixed-height canvas stage (Chart.js scales to it, so 375px
     never scrolls sideways); hidden until Chart.js initializes it. */
  .chart-wrap { position: relative; height: 220px; margin-top: 12px; }
  .chart-wrap[hidden] { display: none; }

  /* Typography */
  --font-sans: 'Hedvig Letters Sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --font-serif: 'Hedvig Letters Serif', ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;

  --text-caption: 10px;
  --text-body: 14px;
  --text-heading-sm: 20px;
  --text-heading: 24px;
  --text-page-title: 32px;
  --text-heading-lg: 48px;
  --text-display: 72px;

  /* Spacing (4px base) */
  --sp-4: 4px;   --sp-8: 8px;   --sp-12: 12px; --sp-16: 16px;
  --sp-20: 20px; --sp-24: 24px; --sp-28: 28px; --sp-32: 32px;
  --sp-40: 40px; --sp-48: 48px; --sp-64: 64px;

  /* Radius */
  --radius-card: 8px;
  --radius-pill: 12px;

  --page-max-width: 1200px;
  --content-max-width: 896px;
  --nav-width: 240px;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--color-parchment);
  color: var(--color-ink);
  font-family: var(--font-sans);
  font-size: var(--text-body);
  font-weight: 400;
  letter-spacing: 0.7px;
  line-height: 1.43;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4 { margin: 0; font-family: var(--font-serif); font-weight: 400; }

a { color: inherit; text-decoration: none; }

button, input, select, textarea { font-family: inherit; font-size: inherit; color: inherit; }

table { border-collapse: collapse; width: 100%; }

img, svg { display: block; max-width: 100%; }

/* Skip link */
.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 1000;
  background: var(--color-charcoal); color: #fff;
  padding: var(--sp-12) var(--sp-16); border-radius: 0 0 var(--radius-card) 0;
}
.skip-link:focus { left: 0; }

:focus-visible { outline: 2px solid var(--color-charcoal); outline-offset: 2px; }

/* ==========================================================================
   App shell — sidebar + topbar + content
   ========================================================================== */

.app-shell { display: flex; min-height: 100vh; }

.app-shell__sidebar {
  width: var(--nav-width); flex: 0 0 var(--nav-width);
  background: var(--color-paper);
  display: flex; flex-direction: column;
  padding: var(--sp-16) var(--sp-12);
  gap: var(--sp-24);
}

.company-switcher {
  position: relative;
}
.company-switcher__button {
  width: 100%; display: flex; align-items: center; gap: var(--sp-8);
  background: transparent; border: 1px solid var(--color-parchment);
  border-radius: var(--radius-card); padding: var(--sp-8) var(--sp-12);
  cursor: pointer; text-align: left;
}
.company-switcher__mark {
  width: 24px; height: 24px; border-radius: 6px; background: var(--color-charcoal);
  color: #fff; display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 500; flex: 0 0 auto;
}
.company-switcher__name { flex: 1; font-size: 14px; font-weight: 500; letter-spacing: 0.7px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.company-switcher__chevron { flex: 0 0 auto; color: var(--color-smoke); }
.company-switcher__menu {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 40;
  background: var(--color-paper); border: 1px solid var(--color-parchment);
  border-radius: var(--radius-card); box-shadow: none; padding: var(--sp-4);
  display: none;
}
.company-switcher__menu.is-open { display: block; }
.company-switcher__item {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-8);
  padding: var(--sp-8) var(--sp-8); border-radius: 6px; cursor: pointer;
}
.company-switcher__item:hover { background: var(--color-sand); }
.company-switcher__item[aria-current="true"] { background: var(--color-moss-tint); }

.nav-group { display: flex; flex-direction: column; gap: var(--sp-4); }
.nav-group__label {
  font-size: var(--text-caption); text-transform: uppercase; color: var(--color-smoke);
  letter-spacing: 1px; padding: 0 var(--sp-8); margin-bottom: var(--sp-4);
}
.nav-link {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-8);
  padding: var(--sp-8) var(--sp-8); border-radius: var(--radius-card);
  font-size: 14px; font-weight: 500; letter-spacing: 0.7px; color: var(--color-ink);
}
.nav-link:hover { background: var(--color-sand); }
.nav-link[aria-current="page"] { background: var(--color-sand); }
.nav-link__badge {
  font-size: 10px; font-weight: 500; padding: 1px 7px; border-radius: var(--radius-pill);
  background: var(--color-ochre); color: #fff; letter-spacing: 0.5px;
}

.sidebar-footer { margin-top: auto; font-size: 12px; color: var(--color-smoke); padding: var(--sp-8); }

.app-shell__main { flex: 1; display: flex; flex-direction: column; min-width: 0; }

.app-shell__topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--sp-12) var(--sp-24); font-size: 12px; color: var(--color-smoke);
  letter-spacing: 0.5px;
}
.app-shell__topbar .hamburger { display: none; }

.app-shell__content {
  flex: 1; padding: var(--sp-24) var(--sp-24) var(--sp-64);
}

.content-max { width: 90%; margin: 0 auto; }

.page-header {
  display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-16);
  margin-bottom: var(--sp-32); flex-wrap: wrap;
}
.page-header__breadcrumb { font-size: 14px; color: var(--color-smoke); margin: 0 0 var(--sp-4); }
.page-header__title { font-size: var(--text-page-title); letter-spacing: -0.8px; line-height: 1.1; }

/* Workflow sub-nav — ties together pages inside one area (Invoices/Estimates/Customers, History/New Entry) */
.subnav { display: flex; gap: var(--sp-4); margin-bottom: var(--sp-24); border-bottom: 1px solid var(--color-parchment); }
.subnav a {
  padding: var(--sp-8) var(--sp-4); font-size: 14px; font-weight: 500; letter-spacing: 0.5px;
  color: var(--color-smoke); border-bottom: 2px solid transparent; margin-bottom: -1px;
}
.subnav a[aria-current="page"] { color: var(--color-ink); border-bottom-color: var(--color-charcoal); }

/* Verification / warning banner */
.top-banner {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-16);
  background: var(--color-ochre-tint); color: var(--color-ink);
  padding: var(--sp-8) var(--sp-24); font-size: 13px; letter-spacing: 0.5px;
}
.top-banner strong { font-weight: 500; }
.top-banner a { text-decoration: underline; font-weight: 500; }

/* ==========================================================================
   Buttons
   ========================================================================== */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-8);
  border-radius: var(--radius-pill); padding: var(--sp-12) var(--sp-20);
  font-size: 14px; font-weight: 500; letter-spacing: 0.7px; cursor: pointer;
  border: 1px solid transparent; min-height: 44px; white-space: nowrap;
  transition: background-color .12s ease, border-color .12s ease;
}
.btn--primary { background: var(--color-charcoal); color: #fff; }
.btn--primary:hover { background: #000; }
.btn--secondary { background: transparent; border-color: var(--color-parchment); color: var(--color-ink); }
.btn--secondary:hover { background: var(--color-sand); }
.btn--ghost { background: transparent; color: var(--color-smoke); padding-left: var(--sp-12); padding-right: var(--sp-12); min-height: auto; }
.btn--ghost:hover { color: var(--color-ink); }
.btn--destructive { background: transparent; border-color: var(--color-rust); color: var(--color-rust); }
.btn--destructive:hover { background: var(--color-rust-tint); }
.btn--sm { padding: var(--sp-8) var(--sp-16); font-size: 13px; min-height: 32px; }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn[data-loading="true"] { position: relative; color: transparent; }
.btn[data-loading="true"]::after {
  content: ""; position: absolute; width: 16px; height: 16px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.4); border-top-color: #fff; animation: spin .6s linear infinite;
}
.btn--secondary[data-loading="true"]::after { border-color: rgba(18,18,18,.25); border-top-color: var(--color-ink); }
/* Long-wait submit (signup ~2s Stripe calls): spinner sits beside the label, not over it. */
.btn[data-loading="true"][data-loading-keep-label] { color: #fff; }
.btn[data-loading="true"][data-loading-keep-label]::after {
  position: static; width: 14px; height: 14px; order: -1;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ==========================================================================
   Cards
   ========================================================================== */

.card {
  background: var(--color-paper); border: 1px solid var(--color-parchment);
  border-radius: var(--radius-card); padding: var(--sp-20);
}
.card--strong { border-color: var(--color-smoke); }

.category-modal { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: var(--sp-24); }
.category-modal[hidden] { display: none; }
.category-modal__scrim { position: absolute; inset: 0; background: rgba(18, 18, 18, .48); }
.category-modal__dialog { position: relative; width: min(100%, 440px); background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-24); box-shadow: 0 18px 50px rgba(18, 18, 18, .2); }
.category-modal__dialog .section-heading { margin-bottom: var(--sp-8); }
.category-modal__actions { display: flex; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-24); }
.entry-table th, .entry-table td { padding: var(--sp-8) var(--sp-12); }
.entry-table input, .entry-table select { width: 100%; min-height: 36px; border: 1px solid var(--color-parchment); border-radius: 6px; padding: var(--sp-8) 10px; font-size: 13px; background: var(--color-paper); }
.entry-table td.is-numeric input { text-align: right; font-variant-numeric: tabular-nums; }
.entry-totals { display: flex; justify-content: flex-end; gap: var(--sp-32); padding: var(--sp-12) var(--sp-16); font-size: 13px; }
.entry-totals strong { font-size: 14px; font-variant-numeric: tabular-nums; }
.balance-flag { display: flex; align-items: center; gap: var(--sp-8); }
.journal-modal { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: var(--sp-24); }
.journal-modal[hidden] { display: none; }
.journal-modal__scrim { position: absolute; inset: 0; background: rgba(18, 18, 18, .48); }
.journal-modal__dialog { position: relative; width: min(100%, 480px); background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-24); box-shadow: 0 18px 50px rgba(18, 18, 18, .2); }
.journal-modal__dialog .section-heading { margin-bottom: var(--sp-8); }
.journal-modal__actions { display: flex; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-24); }
.membership-modal { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: var(--sp-24); }
.membership-modal[hidden] { display: none; }
.membership-modal__scrim { position: absolute; inset: 0; background: rgba(18, 18, 18, .48); }
.membership-modal__dialog { position: relative; width: min(100%, 480px); background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-24); box-shadow: 0 18px 50px rgba(18, 18, 18, .2); }
.membership-modal__dialog .section-heading { margin-bottom: var(--sp-8); }
.membership-modal__actions { display: flex; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-24); }
.customer-modal { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: var(--sp-24); }
.customer-modal[hidden] { display: none; }
.customer-modal__scrim { position: absolute; inset: 0; background: rgba(18, 18, 18, .48); }
.customer-modal__dialog { position: relative; width: min(100%, 440px); background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-24); box-shadow: 0 18px 50px rgba(18, 18, 18, .2); }
.customer-modal__dialog .section-heading { margin-bottom: var(--sp-8); }
.customer-modal__actions { display: flex; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-24); }

.invoice-modal { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: var(--sp-24); }
.invoice-modal[hidden] { display: none; }
.invoice-modal__scrim { position: absolute; inset: 0; background: rgba(18, 18, 18, .48); }
.invoice-modal__dialog { position: relative; width: min(100%, 440px); background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-24); box-shadow: 0 18px 50px rgba(18, 18, 18, .2); }
.invoice-modal__dialog .section-heading { margin-bottom: var(--sp-8); }
.invoice-modal__actions { display: flex; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-24); }

/* Generic confirm modal — customer-modal/invoice-modal are identical rule-for-rule; this is the
   shared version for anything new (3rd occurrence: subscription switch-plan/cancel confirms). */
.confirm-modal { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; padding: var(--sp-24); }
.confirm-modal[hidden] { display: none; }
.confirm-modal__scrim { position: absolute; inset: 0; background: rgba(18, 18, 18, .48); }
.confirm-modal__dialog { position: relative; width: min(100%, 440px); background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-24); box-shadow: 0 18px 50px rgba(18, 18, 18, .2); }
.confirm-modal__dialog .section-heading { margin-bottom: var(--sp-8); }
.confirm-modal__actions { display: flex; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-24); }

.line-table th, .line-table td { padding: 8px 12px; }
.line-table input, .line-table select { border: 1px solid var(--color-parchment); border-radius: 6px; padding: 8px 10px; font-size: 13px; width: 100%; min-height: 36px; }
.line-table td.is-numeric input { text-align: right; font-variant-numeric: tabular-nums; }
.invoice-summary { display: flex; flex-direction: column; gap: 8px; padding: var(--sp-16); font-size: 14px; max-width: 280px; margin-left: auto; }
.invoice-summary .row--between { font-size: 14px; }
.invoice-summary .total { font-size: 18px; font-weight: 500; border-top: 1px solid var(--color-smoke); padding-top: 8px; }

.kpi-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-16); }
.kpi-card__label { font-size: 12px; color: var(--color-smoke); letter-spacing: 0.6px; margin-bottom: var(--sp-8); }
.kpi-card__value { font-size: var(--text-heading); font-family: var(--font-sans); font-weight: 500; letter-spacing: 0.4px; font-variant-numeric: tabular-nums; }
.kpi-card__meta { font-size: 12px; color: var(--color-smoke); margin-top: var(--sp-4); }
.kpi-card__value--moss { color: var(--color-moss-text); }
.kpi-card__value--rust { color: var(--color-rust); }

/* Books status card (dashboard row 1) */
.status-card {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-24);
  flex-wrap: wrap;
}
.status-card__body { display: flex; align-items: center; gap: var(--sp-16); }
.status-card__icon {
  width: 44px; height: 44px; border-radius: var(--radius-card); flex: 0 0 auto;
  display: flex; align-items: center; justify-content: center; background: var(--color-moss-tint); color: var(--color-moss-text);
}
.status-card__icon.is-warning { background: var(--color-ochre-tint); color: var(--color-ochre); }
.status-card__title { font-size: 18px; font-weight: 500; letter-spacing: 0.4px; margin-bottom: 2px; }
.status-card__subtitle { font-size: 13px; color: var(--color-smoke); }

/* ==========================================================================
   Tables / workbench
   ========================================================================== */

.filter-bar {
  position: sticky; top: 0; z-index: 5; background: var(--color-parchment);
  display: flex; align-items: center; gap: var(--sp-8); flex-wrap: wrap;
  padding: var(--sp-12) 0; margin-bottom: var(--sp-8);
}
.filter-bar__input, .select {
  border: 1px solid var(--color-parchment); background: var(--color-paper);
  border-radius: var(--radius-pill); padding: var(--sp-8) var(--sp-16);
  font-size: 13px; letter-spacing: 0.5px;
}
.filter-bar__tabs { display: flex; gap: var(--sp-4); background: var(--color-sand); border-radius: var(--radius-pill); padding: 2px; }
.filter-bar__tab { padding: var(--sp-8) var(--sp-16); border-radius: var(--radius-pill); font-size: 13px; font-weight: 500; cursor: pointer; }
.filter-bar__tab[aria-selected="true"] { background: var(--color-paper); }
.filter-bar__search { margin-left: auto; }

/* Transaction workbench filters */
.transaction-filters {
  position: sticky; top: 0; z-index: 5; display: flex; flex-direction: column; gap: var(--sp-16);
  background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card);
  padding: var(--sp-16); margin-bottom: var(--sp-16);
}
.transaction-filters__primary {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(220px, 1.35fr); gap: var(--sp-16);
}
.transaction-filter { display: flex; flex-direction: column; gap: var(--sp-8); min-width: 0; }
.transaction-filter__label, .transaction-filter__date-field label {
  display: block; color: var(--color-smoke); font-size: 12px; font-weight: 500; letter-spacing: .5px;
}
.transaction-filter__control {
  width: 100%; min-height: 44px; border: 1px solid var(--color-parchment); border-radius: var(--radius-card);
  background: var(--color-paper); padding: var(--sp-12) var(--sp-16); font-size: 14px; letter-spacing: .3px;
}
.transaction-filter__control:focus { border-color: var(--color-charcoal); }
.transaction-filters__secondary {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(180px, 1fr); align-items: end;
  gap: var(--sp-24); border-top: 1px solid var(--color-parchment); padding-top: var(--sp-16);
}
.transaction-filter__date-group { min-width: 0; border: 0; margin: 0; padding: 0; }
.transaction-filter__date-group legend { margin-bottom: var(--sp-8); padding: 0; }
.transaction-filter__date-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-12); max-width: 480px; }
.transaction-filter__date-field { display: flex; flex-direction: column; gap: var(--sp-8); min-width: 0; }
.transaction-filters__help { align-self: end; max-width: 32ch; margin: 0 0 var(--sp-12); color: var(--color-smoke); font-size: 12px; text-align: right; }

@media (max-width: 1024px) {
  .transaction-filters__primary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .transaction-filter--search { grid-column: 1 / -1; }
  .transaction-filters__secondary { grid-template-columns: 1fr; }
  .transaction-filters__help { align-self: start; max-width: none; margin: 0; text-align: left; }
}

.table-card { background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); overflow: hidden; }
.table-card__title { margin: 0; padding: var(--sp-16) var(--sp-16) var(--sp-8); font-size: var(--text-heading-sm); }
.hub-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 0 var(--sp-16); align-items: start; }
.hub-section { margin-top: var(--sp-24); }
.hub-empty { margin: 0; padding: var(--sp-12) var(--sp-16); font-size: 13px; color: var(--color-smoke); }
.hub-search { display: flex; align-items: center; gap: var(--sp-8); margin-top: var(--sp-16); }
.hub-search__icon { color: var(--color-smoke); flex: 0 0 auto; }
.hub-search__input { flex: 1; border: none; border-bottom: 1px solid var(--color-parchment); background: transparent; padding: var(--sp-8) var(--sp-4); font: inherit; }
.hub-search__input:focus { outline: none; border-bottom-color: var(--color-ink); }
.dense-list { list-style: none; margin: 0; padding: 0; background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: var(--radius-card); overflow: hidden; }
.dense-list__row { display: flex; align-items: center; gap: var(--sp-8); padding: 0 var(--sp-12); border-bottom: 1px solid var(--color-parchment); }
.dense-list__row:last-child { border-bottom: none; }
.dense-list__star { border: none; background: none; cursor: pointer; font-size: 17px; line-height: 1; padding: var(--sp-12) var(--sp-4); color: var(--color-smoke); }
.dense-list__star[aria-pressed="true"] { color: var(--color-moss); }
.dense-list__link { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: var(--sp-8); padding: var(--sp-12) 0; text-decoration: none; color: inherit; overflow: hidden; white-space: nowrap; }
.dense-list__name { font-weight: 500; font-size: 14px; flex: 0 0 auto; }
.dense-list__blurb { font-size: 13px; color: var(--color-smoke); overflow: hidden; text-overflow: ellipsis; }
.dense-list__chev { color: var(--color-smoke); flex: 0 0 auto; }

.member-row { display: flex; align-items: center; gap: var(--sp-12); padding: var(--sp-12) var(--sp-16); border-bottom: 1px solid var(--color-parchment); }
.member-row:last-child { border-bottom: none; }
.member-row__avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--color-sand); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 500; flex: 0 0 auto; }
.member-row__identity { flex: 1; min-width: 0; }
.member-row__name { font-weight: 500; font-size: 14px; }
.member-row__email { font-size: 12px; color: var(--color-smoke); overflow-wrap: anywhere; }
.member-row.is-pending { opacity: .72; }
.member-row__actions { display: flex; align-items: center; gap: var(--sp-8); flex-wrap: wrap; justify-content: flex-end; }
.member-role-form { display: flex; align-items: center; gap: var(--sp-8); }
.member-role-form select { min-height: 36px; border: 1px solid var(--color-parchment); border-radius: var(--radius-pill); padding: 6px 30px 6px 12px; background: var(--color-paper); text-transform: capitalize; }
.member-role-form select:disabled { opacity: .7; }
.member-invite-link { display: inline-block; max-width: 100%; overflow-wrap: anywhere; text-decoration: underline; }

table.data-table thead th {
  text-align: left; font-size: 11px; text-transform: uppercase; letter-spacing: 1px;
  color: var(--color-smoke); font-weight: 500; background: var(--color-sand);
  padding: var(--sp-12) var(--sp-16);
}
table.data-table thead th.is-numeric, table.data-table td.is-numeric { text-align: right; font-variant-numeric: tabular-nums; }
table.data-table tbody tr { min-height: 44px; border-bottom: 1px solid var(--color-parchment); }
table.data-table tbody tr:nth-child(even) { background: var(--color-sand); }
table.data-table tbody tr:hover { background: var(--color-moss-tint); cursor: pointer; }
table.data-table tbody tr.is-selected { background: var(--color-moss-tint); }
table.data-table td { padding: var(--sp-12) var(--sp-16); font-size: 14px; }
table.data-table td.amount--in { color: var(--color-moss-text); font-weight: 500; }
table.data-table td.amount--out { color: var(--color-ink); }
table.data-table .checkbox-cell { width: 32px; }
.report-table tr.is-total td { font-weight: 500; border-top: 1px solid var(--color-smoke); }

.batch-bar {
  display: none; align-items: center; gap: var(--sp-16); background: var(--color-charcoal);
  color: #fff; border-radius: var(--radius-card); padding: var(--sp-12) var(--sp-20);
  margin-bottom: var(--sp-8); font-size: 13px; letter-spacing: 0.5px;
}
.batch-bar.is-visible { display: flex; }
.batch-bar select { background: #fff; border-radius: var(--radius-pill); border: none; padding: 6px 12px; }

/* ==========================================================================
   Pills / badges / status
   ========================================================================== */

.pill {
  display: inline-flex; align-items: center; gap: 6px; border-radius: var(--radius-pill);
  padding: 3px 10px; font-size: 12px; font-weight: 500; letter-spacing: 0.5px;
  background: var(--color-sand); color: var(--color-ink); border: 1px solid transparent;
}
.pill--outline { background: transparent; border: 1px dashed var(--color-parchment); color: var(--color-smoke); }
.pill--moss { background: var(--color-moss-tint); color: #2e6b31; }
.pill--ochre { background: var(--color-ochre-tint); color: var(--color-ochre); }
.pill--rust { background: var(--color-rust-tint); color: var(--color-rust); }
.pill--role { background: var(--color-sand); color: var(--color-smoke); text-transform: capitalize; }
.pill[title] { cursor: help; }

/* ==========================================================================
   Empty / loading states
   ========================================================================== */

.empty-state { text-align: center; padding: var(--sp-64) var(--sp-24); }
.empty-state__title { font-size: 18px; font-weight: 500; margin-bottom: var(--sp-8); }
.empty-state__body { font-size: 14px; color: var(--color-smoke); margin-bottom: var(--sp-20); max-width: 40ch; margin-left: auto; margin-right: auto; }

.skeleton-row { height: 44px; background: var(--color-sand); border-radius: 6px; margin-bottom: var(--sp-8);
  position: relative; overflow: hidden; }
.skeleton-row::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.6), transparent);
  animation: shimmer 1.4s infinite;
}
@keyframes shimmer { from { transform: translateX(-100%); } to { transform: translateX(100%); } }

/* ==========================================================================
   Flash / banner
   ========================================================================== */

.flash {
  display: flex; align-items: center; gap: var(--sp-12); border: 1px solid var(--color-parchment);
  background: var(--color-paper); border-radius: var(--radius-card); padding: var(--sp-12) var(--sp-16);
  margin-bottom: var(--sp-20); font-size: 14px;
}
.flash--success { color: #2e6b31; }
.flash--error { color: var(--color-rust); border-color: var(--color-rust); background: var(--color-rust-tint); }
.flash--warning { color: var(--color-ochre); border-color: var(--color-ochre); background: var(--color-ochre-tint); }
.flash__action { margin-left: auto; font-weight: 500; text-decoration: underline; }

/* ==========================================================================
   Drawer
   ========================================================================== */

.drawer-scrim {
  position: fixed; inset: 0; background: rgba(18,18,18,.35); z-index: 50; display: none;
}
.drawer-scrim.is-open { display: block; }
.drawer {
  position: fixed; top: 0; right: 0; bottom: 0; width: 400px; max-width: 100%;
  background: var(--color-paper); border-left: 1px solid var(--color-parchment);
  z-index: 51; transform: translateX(100%); transition: transform .2s ease-out;
  display: flex; flex-direction: column; padding: var(--sp-24);
  overflow-y: auto;
}
.drawer.is-open { transform: translateX(0); }
.drawer__close { position: absolute; top: var(--sp-16); right: var(--sp-16); }
.drawer__title { font-size: var(--text-heading-sm); margin-bottom: var(--sp-16); padding-right: var(--sp-32); }
.drawer__section { margin-bottom: var(--sp-20); }
.drawer__label { font-size: 11px; text-transform: uppercase; letter-spacing: 1px; color: var(--color-smoke); margin-bottom: var(--sp-8); }

/* ==========================================================================
   Forms
   ========================================================================== */

.field { display: flex; flex-direction: column; gap: var(--sp-8); margin-bottom: var(--sp-16); }
.field label { font-size: 13px; font-weight: 500; letter-spacing: 0.5px; }
.field input, .field select, .field textarea {
  border: 1px solid var(--color-parchment); background: var(--color-paper);
  border-radius: var(--radius-card); padding: var(--sp-12) var(--sp-16); font-size: 14px; letter-spacing: 0.3px;
  min-height: 44px;
}
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--color-charcoal); }
.field--error input { border-color: var(--color-rust); }
.field__error { font-size: 12px; color: var(--color-rust); }
.field__hint { font-size: 12px; color: var(--color-smoke); }
.checkbox-field { display: flex; align-items: flex-start; gap: var(--sp-8); min-height: 44px; padding-top: var(--sp-8); }
.checkbox-field input { flex: 0 0 auto; margin-top: 3px; }
.form-error-summary {
  border: 1px solid var(--color-rust); background: var(--color-rust-tint); border-radius: var(--radius-card);
  padding: var(--sp-12) var(--sp-16); font-size: 13px; margin-bottom: var(--sp-16); color: var(--color-rust);
}
.form-error-summary a { text-decoration: underline; }

/* ==========================================================================
   Auth screens
   ========================================================================== */

.auth-page {
  min-height: 100vh; display: flex; flex-direction: column; padding: var(--sp-40) var(--sp-24);
}
.auth-page__wordmark { font-family: var(--font-serif); font-size: 22px; margin-bottom: var(--sp-64); }
.auth-page__form { max-width: 400px; width: 100%; margin: 0 auto; }
.auth-page__title { font-size: var(--text-page-title); letter-spacing: -0.8px; margin-bottom: var(--sp-8); }
.auth-page__subtitle { font-size: 14px; color: var(--color-smoke); margin-bottom: var(--sp-32); }
.auth-page__foot { text-align: center; margin-top: var(--sp-24); font-size: 13px; color: var(--color-smoke); }
.auth-page__foot a { text-decoration: underline; color: var(--color-ink); }

/* Plan picker */
.plan-picker { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-12); margin-bottom: var(--sp-24); }
.plan-card {
  border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-16);
  cursor: pointer; position: relative;
}
.plan-card[aria-checked="true"] { border-color: var(--color-charcoal); border-width: 2px; }
.plan-card__badge {
  position: absolute; top: -10px; right: 12px; background: var(--color-paper); border: 1px solid var(--color-parchment);
  border-radius: var(--radius-pill); font-size: 10px; padding: 2px 8px; font-weight: 500;
}
.plan-card__name { font-size: 14px; font-weight: 500; margin-bottom: var(--sp-4); }
.plan-card__price { font-size: 22px; font-weight: 500; letter-spacing: 0.4px; }
.plan-card__price small { font-size: 12px; color: var(--color-smoke); font-weight: 400; }

/* ==========================================================================
   Onboarding wizard (/welcome/) — post-signup, company creator only
   ========================================================================== */

.onboard-page { min-height: 100vh; display: flex; flex-direction: column; align-items: center; padding: var(--sp-40) var(--sp-24); }
.onboard-wordmark { font-family: var(--font-serif); font-size: 22px; margin-bottom: var(--sp-40); }
.onboard-steps { display: flex; gap: 8px; margin-bottom: var(--sp-40); }
.onboard-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--color-parchment); transition: width 0.2s ease; }
.onboard-dot.is-active { background: var(--color-charcoal); width: 24px; border-radius: 4px; }
.onboard-panel { max-width: 480px; width: 100%; text-align: center; }
.onboard-panel h1 { font-size: 28px; margin-bottom: 12px; }
.onboard-panel p { color: var(--color-smoke); font-size: 14px; margin-bottom: 32px; }
.onboard-icon {
  width: 56px; height: 56px; border-radius: var(--radius-card); background: var(--color-moss-tint); color: var(--color-moss-text);
  display: flex; align-items: center; justify-content: center; margin: 0 auto 24px; font-size: 22px; font-weight: 500;
}
.sample-plaque { position: relative; }
.sample-plaque::before {
  content: "Sample data"; position: absolute; top: -10px; right: 12px; background: var(--color-ochre);
  color: #fff; font-size: 10px; font-weight: 500; padding: 2px 8px; border-radius: var(--radius-pill); letter-spacing: 0.5px;
}

/* Full-page state block */
.state-block {
  min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; padding: var(--sp-24);
}
.state-block__icon {
  width: 56px; height: 56px; border-radius: var(--radius-card); background: var(--color-ochre-tint);
  color: var(--color-ochre); display: flex; align-items: center; justify-content: center; margin-bottom: var(--sp-20);
}
.state-block__title { font-size: var(--text-heading); margin-bottom: var(--sp-8); }
.state-block__body { font-size: 14px; color: var(--color-smoke); max-width: 42ch; margin-bottom: var(--sp-24); }
.state-block__actions { display: flex; gap: var(--sp-12); align-items: center; }

/* Row/card stack for mobile-pattern lists */
.mobile-card-row { display: none; }

/* ==========================================================================
   Dev state switcher (mockup-only affordance)
   ========================================================================== */

.dev-panel {
  position: fixed; bottom: var(--sp-16); left: calc(var(--nav-width) + var(--sp-16)); z-index: 60;
  background: var(--color-charcoal); color: #fff; border-radius: var(--radius-card);
  padding: var(--sp-8) var(--sp-12); font-size: 12px; display: flex; align-items: center; gap: var(--sp-8);
}
.dev-panel select { background: #fff; color: var(--color-ink); border-radius: var(--radius-pill); border: none; padding: 4px 10px; }
.dev-panel__label { color: rgba(255,255,255,.6); }

/* ==========================================================================
   Utility
   ========================================================================== */

.stack { display: flex; flex-direction: column; gap: var(--sp-16); }
.row { display: flex; align-items: center; gap: var(--sp-12); }
.row--between { justify-content: space-between; }
.muted { color: var(--color-smoke); }
.mt-24 { margin-top: var(--sp-24); }
.mt-32 { margin-top: var(--sp-32); }
.section-heading { font-size: var(--text-heading-sm); margin-bottom: var(--sp-16); }
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-16); }
.progress-bar { height: 6px; background: var(--color-sand); border-radius: var(--radius-pill); overflow: hidden; }
.progress-bar__fill { height: 100%; background: var(--color-moss); }

/* ==========================================================================
   Responsive
   ========================================================================== */

@media (max-width: 768px) {
  .app-shell__sidebar {
    position: fixed; inset: 0 25% 0 0; z-index: 60; transform: translateX(-100%);
    transition: transform .2s ease-out; box-shadow: none; border-right: 1px solid var(--color-parchment);
  }
  .app-shell__sidebar.is-open { transform: translateX(0); }
  .app-shell__topbar { padding: var(--sp-12) var(--sp-16); }
  .app-shell__topbar .hamburger {
    display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px;
    border-radius: 6px; border: 1px solid var(--color-parchment); background: var(--color-paper); cursor: pointer;
  }
  .app-shell__content { padding: var(--sp-16); }
  .kpi-grid, .two-col, .plan-picker { grid-template-columns: 1fr; }
  .hub-cols { grid-template-columns: 1fr; }
  .dense-list__blurb { display: none; }
  .transaction-filters { position: static; padding: var(--sp-12); }
  .transaction-filters__primary, .transaction-filters__secondary { grid-template-columns: 1fr; }
  .transaction-filter--search { grid-column: auto; }
  .transaction-filters__secondary { gap: var(--sp-16); }
  .transaction-filter__date-fields { max-width: none; }
  .transaction-filters__help { max-width: none; margin: 0; text-align: left; }
  table.data-table { display: none; }
  .mobile-card-row {
    display: flex; flex-direction: column; gap: 4px; background: var(--color-paper);
    border: 1px solid var(--color-parchment); border-radius: var(--radius-card); padding: var(--sp-12) var(--sp-16);
    margin-bottom: var(--sp-8);
  }
  .mobile-card-row__line1 { display: flex; justify-content: space-between; font-weight: 500; }
  .mobile-card-row__line2 { display: flex; justify-content: space-between; font-size: 12px; color: var(--color-smoke); }
  .drawer { width: 100%; }
  .dev-panel { left: var(--sp-16); flex-wrap: wrap; }
  .status-card { flex-direction: column; align-items: flex-start; }

  /* Company switcher: sidebar placement is hidden with the drawer; the top-bar copy takes over. */
  .app-shell__sidebar .company-switcher { display: none; }
  .company-switcher--topbar { display: block; flex: 1 1 auto; min-width: 0; }
  .company-switcher--topbar .company-switcher__button { padding: var(--sp-4) var(--sp-8); }
  .topbar-context { display: none; }
}

/* The top-bar switcher is the mobile-only placement (DESIGN.md D6); hidden on desktop. */
.company-switcher--topbar { display: none; }

/* ==========================================================================
   Variant A rail navigation (approved mockup htdocs/mockups/nav/variant-a.html)
   ========================================================================== */

.app-shell__sidebar--rail {
  width: 76px; flex: 0 0 76px;
  align-items: stretch; padding: 12px 8px; gap: 4px;
}
.rail-mark {
  width: 36px; height: 36px; border-radius: 9px; background: var(--color-charcoal);
  color: #fff; display: flex; align-items: center; justify-content: center;
  font-family: var(--font-serif); font-size: 16px; margin: 0 auto 12px;
}
.rail-item {
  display: flex; flex-direction: column; align-items: center; gap: 3px;
  min-height: 44px; justify-content: center; padding: 6px 2px;
  border: 0; border-radius: 8px; background: none; color: var(--color-ink);
  font: inherit; font-size: 10px; font-weight: 500; letter-spacing: .3px;
  cursor: pointer; text-decoration: none; text-align: center; width: 100%;
}
.rail-item svg { width: 22px; height: 22px; }
.rail-item:hover { background: var(--color-sand); }
.rail-item[aria-current="page"], .rail-item[aria-expanded="true"] { background: var(--color-sand); }
.rail-sep { border: 0; border-top: 1px solid var(--color-parchment); margin: 8px 4px; width: auto; }
.rail-caption {
  font-size: 10px; text-transform: uppercase; letter-spacing: 1px;
  color: var(--color-smoke); text-align: center; margin: 4px 0 0;
}
.rail-footer { margin-top: auto; display: flex; flex-direction: column; align-items: center; gap: 8px; }
.rail-avatar {
  width: 32px; height: 32px; border-radius: 50%; background: var(--color-moss-tint);
  color: var(--color-moss-text); display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 500;
}

/* Flyout opens on hover, keyboard focus, or tap — never hover-only. */
.apps-flyout {
  display: none; position: fixed; top: 0; bottom: 0; width: 300px; z-index: 50;
  /* left edge overlaps the rail's 8px right padding (rail is 76px border-box): the All-apps
     button ends at x=68, so any larger left value leaves a dead strip where neither button
     nor flyout is hovered and the panel vanishes mid-travel. */
  left: 68px;
  background: var(--color-paper); border-right: 1px solid var(--color-parchment);
  padding: 16px 8px;
}
body.apps-open-apps #apps-flyout,
body.apps-open-bm #bm-flyout,
.rail-item--apps:hover + .apps-flyout,
.rail-item--bm:hover + .apps-flyout,
.apps-flyout:hover,
.apps-flyout:focus-within { display: block; }
.apps-flyout__title {
  font-size: 11px; text-transform: uppercase; letter-spacing: 1px;
  color: var(--color-smoke); padding: 0 12px; margin-bottom: 8px;
}
.app-group { position: relative; }
.app-group__row {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 9px 12px; border: 0; border-radius: 8px; background: none;
  font: inherit; font-size: 14px; font-weight: 500; color: var(--color-ink);
  cursor: pointer; text-align: left;
}
.app-group__row svg { width: 20px; height: 20px; flex: 0 0 auto; }
.app-group__row:hover { background: var(--color-sand); }
.app-group__name { flex: 1; }
.app-group__chev { color: var(--color-smoke); display: flex; }
.app-group__chev svg { width: 16px; height: 16px; }
.pin-btn {
  border: 0; background: none; padding: 4px; border-radius: 6px; cursor: pointer;
  color: var(--color-smoke); display: flex; line-height: 0; min-width: 44px; min-height: 44px;
  align-items: center; justify-content: center;
}
.pin-btn:hover { background: var(--color-sand); color: var(--color-ink); }
.pin-btn svg { width: 15px; height: 15px; }
.pin-btn[aria-pressed="true"] { color: var(--color-ochre-text, #8a5a33); }
.app-submenu {
  display: none; position: absolute; left: 100%; top: -8px; width: 264px; max-height: 90vh;
  /* pulled 8px left over the flyout's right padding: without this the padding strip between
     the group row and the submenu is hovered-neither and the submenu blinks shut. */
  margin-left: -8px;
  background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: 0 8px 8px 0;
  padding: 16px 8px; overflow-y: auto;
}
.app-group:hover .app-submenu,
.app-group:focus-within .app-submenu,
.app-group.is-open .app-submenu { display: block; }
.app-submenu__row { display: flex; align-items: center; gap: 4px; }
.app-submenu__row > a {
  flex: 1; display: flex; align-items: center; padding: 9px 12px; border-radius: 8px;
  font-size: 14px; color: var(--color-ink); text-decoration: none; min-height: 44px;
}
.app-submenu__row > a:hover { background: var(--color-sand); }
.app-submenu__row > a[aria-current="page"] { background: var(--color-sand); }
.pin-form { margin: 0; }
.apps-flyout__footer { margin-top: 12px; padding: 12px 12px 4px; border-top: 1px solid var(--color-parchment); display: flex; flex-direction: column; gap: 8px; }
.apps-flyout__footer .row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.apps-flyout__user { font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Bookmarks flyout + manager (approved mockup htdocs/mockups/nav/bookmarks.html) */
.bm-flyout__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.bm-flyout__title { font-family: var(--font-serif); font-size: 20px; }
.icon-btn {
  border: 0; background: none; padding: 8px; border-radius: 8px; cursor: pointer;
  color: var(--color-smoke); display: inline-flex; line-height: 0; min-width: 44px; min-height: 44px;
  align-items: center; justify-content: center; font: inherit;
}
.icon-btn:hover { background: var(--color-sand); color: var(--color-ink); }
.icon-btn svg { width: 18px; height: 18px; }
.bm-link {
  display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 8px;
  font-size: 14px; color: var(--color-ink); text-decoration: none; min-height: 44px;
}
.bm-link:hover { background: var(--color-sand); }
.bm-sep { border: 0; border-top: 1px solid var(--color-parchment); margin: 8px 0; width: auto; }
.bm-add {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 12px;
  border: 0; border-radius: 8px; background: none; font: inherit; font-size: 14px;
  color: var(--color-ink); cursor: pointer; text-align: left; min-height: 44px;
}
.bm-add:hover { background: var(--color-sand); }
.bm-add svg { width: 18px; height: 18px; color: var(--color-smoke); }
.bm-empty { font-size: 13px; color: var(--color-smoke); padding: 4px 12px 12px; }
.bm-add-form { margin: 0; }
.bm-noscript-row { display: flex; align-items: center; gap: 8px; padding: 6px 12px; font-size: 13px; }
.bm-noscript-row form { margin: 0; }
.bm-noscript-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bm-modal-scrim {
  position: fixed; inset: 0; z-index: 100; background: rgba(18, 18, 18, .48);
  display: none; align-items: flex-start; justify-content: center; padding: 48px 16px;
}
body.bm-managing .bm-modal-scrim { display: flex; }
.bm-modal {
  width: min(100%, 640px); max-height: calc(100vh - 96px); overflow-y: auto;
  background: var(--color-paper); border: 1px solid var(--color-parchment);
  border-radius: 12px; padding: 24px;
}
.bm-modal h2 { font-family: var(--font-serif); font-size: 22px; font-weight: 400; margin-bottom: 16px; }
.bm-search {
  display: flex; align-items: center; gap: 8px; border: 1px solid var(--color-parchment);
  border-radius: 8px; padding: 8px 12px; margin-bottom: 8px; background: var(--color-paper);
}
.bm-search svg { width: 16px; height: 16px; color: var(--color-smoke); flex: 0 0 auto; }
.bm-search input { border: 0; outline: 0; font: inherit; font-size: 14px; flex: 1; background: none; color: var(--color-ink); }
.bm-hint { font-size: 13px; margin-bottom: 12px; }
.bm-row { display: flex; align-items: center; gap: 10px; padding: 6px 4px; border-radius: 8px; font-size: 14px; }
.bm-row:hover { background: var(--color-sand); }
.bm-row.is-dragging { opacity: .5; }
.bm-grip { color: var(--color-smoke); display: flex; cursor: grab; line-height: 0; padding: 6px 2px; }
.bm-grip svg { width: 14px; height: 14px; }
.bm-row input[type="checkbox"] { width: 20px; height: 20px; accent-color: var(--color-moss-text); flex: 0 0 auto; }
.bm-row__label { flex: 1; }
.bm-row__move { display: flex; gap: 2px; }
.bm-modal__actions { display: flex; justify-content: flex-end; margin-top: 16px; }

/* Top bar carries the company switcher and the user chip now that the rail has no room. */
.company-switcher--topbar { display: block; width: min(300px, 40vw); }
.topbar-context { display: none; }
.topbar-user { display: flex; align-items: center; gap: 8px; margin-left: auto; }
.topbar-user__name { font-size: 13px; max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.topbar-user__form { margin: 0; }

@media (max-width: 768px) {
  .app-shell__sidebar--rail { width: 76px; flex-basis: 76px; inset: 0 auto 0 0; }
  .company-switcher--topbar { width: auto; }
  .topbar-user { display: none; }
  .apps-flyout { left: 0; right: 0; width: auto; }
  .app-submenu { position: static; width: auto; border: 0; border-top: 1px solid var(--color-parchment); border-radius: 0; max-height: none; }
}

/* Global search (topbar + /search/ page). */
.topbar-search { position: relative; flex: 1; max-width: 560px; margin: 0 16px; }
.topbar-search form { display: flex; align-items: center; gap: 8px; border: 1px solid var(--color-parchment); border-radius: 8px; padding: 6px 12px; background: var(--color-paper); }
.topbar-search__icon { color: var(--color-smoke); flex: 0 0 auto; }
.topbar-search__input { border: 0; outline: 0; font: inherit; font-size: 14px; flex: 1; background: none; color: var(--color-ink); min-width: 0; }
.topbar-search-link { display: none; font-size: 18px; text-decoration: none; color: var(--color-ink); padding: 6px 10px; }
.search-dropdown { position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: 90; max-height: min(70vh, 560px); overflow-y: auto; background: var(--color-paper); border: 1px solid var(--color-parchment); border-radius: 12px; padding: 12px; box-shadow: 0 12px 32px rgba(18, 18, 18, .16); }
.search-dropdown__heading { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--color-smoke); margin: 12px 4px 4px; }
.search-dropdown__section:first-child .search-dropdown__heading { margin-top: 0; }
.search-dropdown__row { display: flex; align-items: baseline; gap: 8px; padding: 8px; border-radius: 8px; text-decoration: none; color: var(--color-ink); font-size: 14px; }
.search-dropdown__row:hover, .search-dropdown__row.is-active { background: var(--color-sand); }
.search-dropdown__kind { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--color-smoke); flex: 0 0 64px; }
.search-dropdown__main { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.search-dropdown__empty { font-size: 14px; color: var(--color-smoke); padding: 12px 8px; }
.search-dropdown__footer { border-top: 1px solid var(--color-parchment); margin-top: 8px; padding: 10px 8px 2px; font-size: 13px; }
.search-group { margin-top: 24px; }
.search-group__rows { display: flex; flex-direction: column; gap: 2px; }
.search-row { display: flex; align-items: baseline; gap: 10px; padding: 9px 12px; border-radius: 8px; text-decoration: none; color: var(--color-ink); font-size: 14px; }
.search-row:hover { background: var(--color-sand); }
.search-row__kind { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--color-smoke); flex: 0 0 70px; }
.search-row__main { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.search-row__title { font-weight: 500; }
.search-row__sub { color: var(--color-smoke); }
.search-row__date { color: var(--color-smoke); font-size: 13px; white-space: nowrap; }
.search-row__amount { font-variant-numeric: tabular-nums; white-space: nowrap; }
.search-history { list-style: none; margin: 0; padding: 0; }
.search-history__row { display: flex; align-items: center; gap: 8px; padding: 6px 0; }
.search-history__row a { flex: 1; }
.search-history__remove { margin: 0; }
.search-save { margin: 12px 0 0; }

@media (max-width: 900px) {
  .topbar-search { display: none; }
  .topbar-search-link { display: block; }
}


/* ---- Dashboard redesign (2026-09-24): money-first card grid. Approved mockup: mockups/dashboard/home-a.html ---- */
  .sr-only { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
  .dash-grid { display: grid; gap: var(--sp-16); margin-top: var(--sp-24); }
  .dash-grid > * { min-width: 0; } /* let chart canvases shrink with the column instead of forcing sideways scroll */
  .dash-grid--2 { grid-template-columns: 1fr 1fr; }
  .dash-grid--strip { grid-template-columns: 1.4fr 1fr; }
  .dash-grid--bank { grid-template-columns: 1.6fr 1fr; }
  /* The two KPI cards share the bank card's height equally, so a long account list never leaves them mostly blank. */
  .dash-kpi-stack { display: grid; grid-template-rows: 1fr 1fr; gap: var(--sp-16); }
  @media (max-width: 1023px) { .dash-grid--bank { grid-template-columns: 1fr; } .dash-kpi-stack { grid-template-columns: 1fr 1fr; grid-template-rows: auto; } }
  @media (max-width: 767px) { .dash-grid--2, .dash-grid--strip, .dash-grid--bank, .dash-kpi-stack { grid-template-columns: 1fr; } }

  .dash-card__head { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--sp-12); }
  .dash-card__title { font-family: var(--font-serif); font-size: var(--text-heading-sm); line-height: 1.2; margin: 0; }
  .dash-card__basis { font-size: 12px; color: var(--color-smoke); margin: var(--sp-4) 0 0; }
  .dash-card__tools { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-12); margin-top: var(--sp-16); flex-wrap: wrap; }
  .dash-card__select { font: inherit; font-size: 13px; padding: 6px 28px 6px 12px; min-height: 32px; border: 1px solid var(--color-parchment); border-radius: 8px; background: var(--color-paper); color: var(--color-ink); }
  .dash-card .chart-wrap { height: 240px; }
  .dash-legend { display: flex; gap: var(--sp-16); flex-wrap: wrap; font-size: 13px; color: var(--color-smoke); list-style: none; padding: 0; margin: 0; }
  .dash-legend li { display: inline-flex; align-items: center; gap: 6px; }
  .dash-legend__chip { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
  .dash-legend__chip--in { background: var(--color-moss); }
  .dash-legend__chip--out { background: repeating-linear-gradient(135deg, var(--color-sand) 0 2px, #fff 2px 4px); border: 1px solid var(--color-smoke); }
  .dash-legend__chip--line { height: 2px; width: 14px; background: var(--color-ink); border-radius: 0; }

  .dash-donut-layout { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-16); align-items: center; margin-top: var(--sp-16); }
  @media (max-width: 767px) { .dash-donut-layout { grid-template-columns: 1fr; } }
  .dash-donut-stage { position: relative; height: 260px; }
  .dash-donut-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; pointer-events: none; }
  .dash-donut-center__label { font-size: 12px; color: var(--color-smoke); }
  .dash-donut-center__value { font-size: 18px; font-weight: 500; }
  .dash-donut-center a { pointer-events: auto; font-size: 13px; color: var(--color-ink); text-decoration: underline; }
  .dash-legend--stack { flex-direction: column; gap: 6px; }

  .dash-compare { width: 100%; border-collapse: collapse; margin-top: var(--sp-16); font-size: var(--text-body); }
  .dash-compare th, .dash-compare td { padding: 10px 8px; border-bottom: 1px solid var(--color-parchment); text-align: right; }
  .dash-compare th:first-child, .dash-compare td:first-child { text-align: left; }
  .dash-compare thead th { font-weight: 500; border-bottom: 2px solid var(--color-parchment); }
  .dash-compare a { color: var(--color-ink); text-decoration: underline; text-underline-offset: 3px; }
  .dash-compare .is-total td { font-weight: 500; }
  .dash-compare-chart { height: 150px; }

  .dash-owing { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-24); margin-top: var(--sp-16); }
  @media (max-width: 767px) { .dash-owing { grid-template-columns: 1fr; } }
  .dash-owing h3 { font-size: 14px; font-weight: 500; margin: 0 0 var(--sp-8); }
  .dash-owing table { width: 100%; border-collapse: collapse; font-size: var(--text-body); border-top: 2px solid var(--color-parchment); }
  .dash-owing td { padding: 10px 8px; border-bottom: 1px solid var(--color-parchment); }
  .dash-owing td:last-child { text-align: right; font-variant-numeric: tabular-nums; }
  .dash-owing a { color: var(--color-ink); text-decoration: underline; text-underline-offset: 3px; }
  .dash-owing .is-late td:last-child { color: var(--color-rust); }

  .dash-strip-list { list-style: none; margin: var(--sp-12) 0 0; padding: 0; display: grid; gap: var(--sp-8); font-size: var(--text-body); }
  .dash-strip-list li { display: flex; justify-content: space-between; gap: var(--sp-12); }
  .dash-strip-list a { color: var(--color-ink); text-decoration: underline; text-underline-offset: 3px; }
  .dash-band-title { margin-top: var(--sp-32); }
  .dash-quiet-list { list-style: none; margin: var(--sp-12) 0 0; padding: 0; font-size: var(--text-body); }
  .dash-quiet-list li { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--color-parchment); }

  /* Dashboard cards rendered by dashboard/index.cfm (added on top of the approved mockup rules). */
  .dash-card__range { margin: 0; display: inline-flex; align-items: center; gap: var(--sp-8); }
  .dash-card__hint { font-size: 13px; color: var(--color-smoke); }
  .dash-card__tools--end { justify-content: flex-end; }
  .dash-grid--tight { margin-top: var(--sp-12); }
  .dash-grid-gap { margin-top: var(--sp-16); }
  .dash-legend__chip.dash-slice-1 { background: #4caf50; }
  .dash-legend__chip.dash-slice-2 { background: #b45309; }
  .dash-legend__chip.dash-slice-3 { background: #b3261e; }
  .dash-legend__chip.dash-slice-4 { background: #2f6b66; }
  .dash-legend__chip.dash-slice-other { background: #c9c7c3; }
  .dash-bank-row { align-items: flex-start; gap: var(--sp-12); }
  .dash-bank-row__amount { text-align: right; }
  .dash-bank-row__sub { display: block; font-size: 12px; color: var(--color-smoke); }
  .dash-data { margin-top: var(--sp-12); font-size: 13px; }
  .dash-data summary { cursor: pointer; color: var(--color-smoke); }
  .dash-data__table { width: 100%; border-collapse: collapse; margin-top: var(--sp-8); }
  .dash-data__table th, .dash-data__table td { padding: 6px 8px; border-bottom: 1px solid var(--color-parchment); text-align: right; font-variant-numeric: tabular-nums; }
  .dash-data__table th:first-child, .dash-data__table td:first-child { text-align: left; }
  .dash-data__table tfoot th, .dash-data__table tfoot td { font-weight: 500; }
  .dash-grid--2 > .card:only-child { grid-column: 1 / -1; }

/* Dashboard customize: saved-order flow. The page assigns each card data-span="half|full"
   (DashboardLayoutService.assignWidths); full cards take a row, halves pair up. */
.dash-flow { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-16); margin-top: var(--sp-16); }
.dash-item { min-width: 0; }
.dash-item[data-span="full"] { grid-column: 1 / -1; }
.dash-item > .card, .dash-item > .dash-grid > .card { height: 100%; }
.dash-item > .dash-grid, .dash-item > .dash-grid-gap, .dash-item > .mt-32 { margin-top: 0; }
@media (max-width: 767px) { .dash-flow { grid-template-columns: 1fr; } }
.dash-empty { margin-top: var(--sp-16); text-align: center; padding: var(--sp-48) var(--sp-24); }
.dash-empty__title { font-family: var(--font-serif); font-size: var(--text-heading-sm); font-weight: 400; margin: 0 0 var(--sp-8); }
.dash-empty__body { color: var(--color-smoke); margin: 0 0 var(--sp-16); }

/* Dashboard customize: the no-JS list page at /dashboard/layout/ */
.dash-layout__intro { color: var(--color-smoke); max-width: 60ch; margin: 0 0 var(--sp-16); }
.dash-layout__list { list-style: none; margin: 0; padding: 0; }
.dash-layout__row { display: flex; align-items: center; gap: var(--sp-12); padding: var(--sp-12) var(--sp-16); border-bottom: 1px solid var(--color-parchment); flex-wrap: wrap; }
.dash-layout__row:last-child { border-bottom: 0; }
.dash-layout__label { flex: 1 1 200px; min-width: 0; }
.dash-layout__state { font-size: 12px; color: var(--color-smoke); border: 1px solid var(--color-parchment); border-radius: 999px; padding: 1px 10px; }
.dash-layout__row.is-off .dash-layout__label { color: var(--color-smoke); text-decoration: line-through; text-decoration-thickness: 1px; }
.dash-layout__actions { display: flex; gap: var(--sp-8); }
.dash-layout__actions form { margin: 0; }
.dash-layout__foot { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-12); margin-top: var(--sp-16); }
.dash-layout__foot form { margin: 0; }

/* Dashboard customize (assets/dashboard-layout.js): edit bar, card handles, list panel, toast, drop lines. */
.dash-item { position: relative; }
.dash-editbar { position: sticky; top: 8px; z-index: 30; display: none; align-items: center; gap: var(--sp-12); flex-wrap: wrap; margin-top: var(--sp-16); padding: 12px 16px; background: var(--color-charcoal); color: #fff; border-radius: 12px; }
body.is-dash-editing .dash-editbar { display: flex; }
.dash-editbar__text { flex: 1 1 260px; font-size: 14px; margin: 0; }
.dash-editbar__text strong { font-weight: 500; }
.dash-editbar .btn { border-color: rgba(255,255,255,.35); color: #fff; }
.dash-editbar .btn:hover { background: rgba(255,255,255,.12); }
.dash-editbar .btn--done { background: #fff; color: var(--color-ink); border-color: #fff; }
.dash-editbar .btn--done:hover { background: var(--color-sand); }
.dash-editbar__hint-touch { display: none; }
@media (max-width: 767px), (pointer: coarse) { .dash-editbar__hint-drag { display: none; } .dash-editbar__hint-touch { display: inline; } }
.dash-item__tools { display: none; position: absolute; top: 8px; right: 8px; gap: 4px; z-index: 5; }
body.is-dash-editing .dash-item__tools { display: flex; }
body.is-dash-editing .dash-item > .card, body.is-dash-editing .dash-item > .dash-grid > .card { outline: 2px dashed var(--color-parchment); outline-offset: -2px; }
body.is-dash-editing .dash-item:hover > .card, body.is-dash-editing .dash-item:focus-within > .card { outline-color: var(--color-smoke); }
.dash-tool { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; border: 1px solid var(--color-parchment); border-radius: 8px; background: var(--color-paper); color: var(--color-ink); cursor: pointer; }
.dash-tool:hover { background: var(--color-sand); }
.dash-tool:disabled { opacity: .4; cursor: not-allowed; }
.dash-tool svg { width: 16px; height: 16px; }
.dash-tool--grip { cursor: grab; touch-action: none; }
.dash-item.is-grabbed > .card, .dash-item.is-grabbed > .dash-grid > .card { outline: 2px solid var(--color-charcoal); }
.dash-item.is-dragging, .dash-row.is-dragging { opacity: .55; }
.dash-item.is-drop-before::before, .dash-item.is-drop-after::after { content: ""; position: absolute; top: 0; bottom: 0; width: 4px; border-radius: 2px; background: var(--color-charcoal); z-index: 6; }
.dash-item.is-drop-before::before { left: -10px; }
.dash-item.is-drop-after::after { right: -10px; }
.dash-item[data-span="full"].is-drop-before::before, .dash-item[data-span="full"].is-drop-after::after { top: auto; bottom: auto; left: 0; right: 0; width: auto; height: 4px; }
.dash-item[data-span="full"].is-drop-before::before { top: -10px; }
.dash-item[data-span="full"].is-drop-after::after { bottom: -10px; }
body.is-dash-editing .dash-item .dash-card__head { padding-right: 84px; }
body.is-dash-editing .dash-item .dash-card__head .btn { display: none; }
@media (max-width: 767px), (pointer: coarse) { .dash-item__tools .dash-tool--grip { display: none; } body.is-dash-editing .dash-item .dash-card__head { padding-right: 44px; } }
.dash-tray { display: none; margin-top: var(--sp-16); padding: 12px 16px; border: 1px dashed var(--color-smoke); border-radius: 12px; }
body.is-dash-editing .dash-tray.has-items { display: block; }
.dash-tray h2 { font-size: 13px; font-weight: 500; margin: 0 0 8px; color: var(--color-smoke); text-transform: uppercase; letter-spacing: .04em; }
.dash-tray ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.dash-tray .btn svg { width: 14px; height: 14px; margin-right: 4px; vertical-align: -2px; }
.dash-panel { position: fixed; z-index: 90; top: 0; right: 0; bottom: 0; width: min(100%, 400px); background: var(--color-paper); border-left: 1px solid var(--color-parchment); box-shadow: -8px 0 24px rgba(18,18,18,.08); display: none; flex-direction: column; }
body.is-dash-panel .dash-panel { display: flex; }
.dash-panel__head { display: flex; align-items: center; justify-content: space-between; padding: 20px 20px 12px; }
.dash-panel__head h2 { font-family: var(--font-serif); font-size: 22px; font-weight: 400; margin: 0; }
.dash-panel__intro { padding: 0 20px 12px; font-size: 13px; color: var(--color-smoke); margin: 0; }
.dash-panel__list { list-style: none; margin: 0; padding: 0 12px; overflow-y: auto; flex: 1; }
.dash-panel__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 20px; border-top: 1px solid var(--color-parchment); }
.dash-panel__group { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--color-smoke); padding: 12px 8px 4px; }
.dash-row { position: relative; display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 8px; font-size: 14px; }
.dash-row:hover { background: var(--color-sand); }
.dash-row.is-off .dash-row__label { color: var(--color-smoke); text-decoration: line-through; text-decoration-thickness: 1px; }
.dash-row__label { flex: 1; min-width: 0; }
.dash-row__w { font-size: 11px; color: var(--color-smoke); border: 1px solid var(--color-parchment); border-radius: 999px; padding: 1px 8px; }
.dash-row__move { display: flex; gap: 2px; }
.dash-row--pinned { color: var(--color-smoke); }
.dash-row__lock { width: 16px; height: 16px; margin: 0 8px; flex: 0 0 auto; }
.dash-row input[type="checkbox"] { width: 20px; height: 20px; accent-color: var(--color-moss-text); flex: 0 0 auto; }
.dash-row.is-drop-before::before, .dash-row.is-drop-after::after { content: ""; position: absolute; left: 8px; right: 8px; height: 3px; border-radius: 2px; background: var(--color-charcoal); }
.dash-row.is-drop-before::before { top: -2px; }
.dash-row.is-drop-after::after { bottom: -2px; }
@media (max-width: 767px) { .dash-panel { top: auto; left: 0; width: auto; height: 82vh; border-left: 0; border-top: 1px solid var(--color-parchment); border-radius: 16px 16px 0 0; box-shadow: 0 -8px 24px rgba(18,18,18,.12); } }
.dash-toast { position: fixed; z-index: 120; left: 50%; bottom: 24px; transform: translateX(-50%); display: none; align-items: center; gap: 14px; background: var(--color-charcoal); color: #fff; border-radius: 10px; padding: 12px 16px; font-size: 14px; max-width: calc(100% - 32px); }
.dash-toast.is-shown { display: flex; }
.dash-toast button { background: none; border: 0; color: #fff; font: inherit; font-weight: 500; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; padding: 4px 2px; }
.dash-toast--error { background: var(--color-rust); }
