/* ============================================================
   tapestree — Platform Component Library
   tap-components.css  ·  Gap layer over shell.css tokens

   Link AFTER shell.css. Adds:
     - .tap-table        branded ledger (§9.3)
     - .card--elev-1/2/3 elevation modifiers on .card (§9.2 / §8.4)
     - .tap-tile         KPI / stat tile (§4 app-dashboard ref)
     - .tap-tag--*       semantic category chips (§9.4)
     - .pill--dot        leading-dot status extension (§9.4)
     - .tap-series-1..6  data-viz fill/stroke helpers (§4.7)
     - .tap-stagebar     deal-stage progress ribbon
     - [data-module]     per-module accent map (§4.4)
     - focus-ring        applied to all inputs globally

   DOES NOT redefine: .btn*, .pill*, .stage*, .card, .tap-field
   (those live in shell.css).
   ============================================================ */

/* ── 1. Ledger table (.tap-table) ──────────────────────────── §9.3 ── */

.tap-table {
  width: 100%;
  border-collapse: collapse;
  border-radius: var(--radius-flat);
  background: var(--surface-card);   /* lighter than warm canvas → table lifts */
  box-shadow: var(--shadow-1);
  font-size: var(--text-sm);
  color: var(--text-body);
}

.tap-table thead tr {
  background: var(--color-khadi-100);
}

.tap-table thead th {
  padding: var(--space-2) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-kohl-300);
  text-align: start;
  border-block-end: 1px solid var(--color-khadi-300);
  white-space: nowrap;
}

.tap-table thead th.num,
.tap-table tbody td.num {
  text-align: end;
}

.tap-table tbody tr {
  border-block-end: 1px solid var(--color-khadi-200);
  transition: background var(--duration-fast) var(--ease-out);
}

.tap-table tbody tr:last-child {
  border-block-end: none;
}

.tap-table tbody tr:hover {
  background: var(--color-khadi-200);
}

.tap-table tbody td {
  padding: var(--space-2) var(--space-4);
  color: var(--text-body);
}

/* Numeric cells: Geist Mono, tabular, right-aligned */
.tap-table tbody td.num {
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
  text-align: end;
  color: var(--text-strong);
}

/* ── 2. Card elevation modifiers (.card--elev-1/2/3) ─────── §9.2/§8.4 */
/* Extend .card from shell.css — do not redefine base .card */

.card--elev-1 {
  background: var(--surface-card);  /* lighter than warm canvas → card lifts */
  box-shadow: var(--shadow-1);
}

.card--elev-2 {
  background: var(--surface-card);
  box-shadow: var(--shadow-2);
}

.card--elev-3 {
  background: var(--surface-card);
  box-shadow: var(--shadow-3);
}

.card--elev-1:hover,
.card--elev-2:hover {
  box-shadow: var(--shadow-2);
  transition: box-shadow var(--duration-base) var(--ease-out);
}

.card--elev-3:hover {
  box-shadow: var(--shadow-3);
}

/* ── 3. KPI / stat tile (.tap-tile) ──────────────────────────── §4 ── */

.tap-tile {
  background: var(--surface-card);
  border: 1px solid var(--color-khadi-300);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-1);
  padding: var(--space-4) var(--space-5);
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  min-block-size: 80px;
}

.tap-tile__eyebrow {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-tertiary);
}

.tap-tile__value {
  font-family: var(--font-display);
  font-size: var(--text-display);
  font-weight: 500;
  line-height: 1.1;
  color: var(--mod-accent, var(--text-strong));
}

.tap-tile__sub {
  font-size: var(--text-xs);
  color: var(--text-secondary);
}

/* ── 4. Semantic tag chips (.tap-tag--*) ─────────────────────── §9.4 ── */
/* Base chip — radius-sm, compact padding, uppercase mono label */

.tap-tag {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: 2px var(--space-2);
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
  line-height: 1.4;
}

/* Product category variants */
.tap-tag--saas {
  background: var(--color-chakra-50);
  color: var(--color-chakra-500);
}

.tap-tag--service {
  background: var(--color-hari-50);
  color: var(--color-hari-500);
}

.tap-tag--physical {
  background: var(--color-kesari-50);
  color: var(--text-on-warn);  /* accessible amber-on-cream (§4.6) */
}

.tap-tag--subscription {
  background: var(--color-sindoor-50);
  color: var(--color-sindoor-500);
}

.tap-tag--consulting {
  background: var(--color-kohl-50);
  color: var(--color-kohl-400);
}

/* Generic semantic colour variants */
.tap-tag--sindoor {
  background: var(--color-sindoor-50);
  color: var(--color-sindoor-500);
}

.tap-tag--kesari {
  background: var(--color-kesari-50);
  color: var(--text-on-warn);  /* Kesari only safe as text ≥18pt/icons §4.6 */
}

.tap-tag--hari {
  background: var(--color-hari-50);
  color: var(--color-hari-500);
}

.tap-tag--chakra {
  background: var(--color-chakra-50);
  color: var(--color-chakra-500);
}

.tap-tag--neutral {
  background: var(--color-khadi-100);
  color: var(--text-secondary);
}

/* Partner / lead-source tier chips */
.tap-tag--gold {
  background: var(--loyalty-gold-bg);
  color: var(--loyalty-gold-fg);
  border: 1px solid var(--loyalty-gold-bd);
}

.tap-tag--silver {
  background: var(--color-khadi-100);
  color: var(--color-kohl-300);
  border: 1px solid var(--color-khadi-400);
}

.tap-tag--bronze {
  background: var(--color-kesari-50);
  color: var(--text-on-warn);
}

/* ── 5. Leading-dot status badge extension (.pill--dot) ─────── §9.4 ── */
/* Extends .pill-* from shell.css; adds a 4px leading dot */

.pill--dot::before {
  content: '';
  display: inline-block;
  inline-size: 6px;
  block-size: 6px;
  border-radius: 50%;
  background: currentColor;
  margin-inline-end: var(--space-1);
  flex-shrink: 0;
}

/* ── 6. Data-viz series helpers (.tap-series-1..6) ────────── §4.7 ── */
/* Use on bar/segment elements — sets fill + stroke via custom props */

.tap-series-1 { --_c: var(--series-1); background: var(--series-1); color: var(--series-1); }
.tap-series-2 { --_c: var(--series-2); background: var(--series-2); color: var(--series-2); }
.tap-series-3 { --_c: var(--series-3); background: var(--series-3); color: var(--series-3); }
.tap-series-4 { --_c: var(--series-4); background: var(--series-4); color: var(--series-4); }
.tap-series-5 { --_c: var(--series-5); background: var(--series-5); color: var(--series-5); }
.tap-series-6 { --_c: var(--series-6); background: var(--series-6); color: var(--series-6); }

/* SVG usage: set fill/stroke from series class via currentColor */
.tap-series-1 svg, .tap-series-2 svg,
.tap-series-3 svg, .tap-series-4 svg,
.tap-series-5 svg, .tap-series-6 svg {
  fill: currentColor;
  stroke: currentColor;
}

/* ── 7. Deal-stage progress ribbon (.tap-stagebar) ──────────── CRM ── */

.tap-stagebar {
  display: flex;
  block-size: 6px;
  border-radius: var(--radius-flat);
  overflow: hidden;
  gap: 2px;
  background: var(--color-khadi-200);
}

.tap-stagebar__seg {
  block-size: 100%;
  border-radius: var(--radius-flat);
  transition: opacity var(--duration-fast) var(--ease-out);
}

.tap-stagebar__seg--active {
  background: var(--mod-accent, var(--color-chakra-500));
}

.tap-stagebar__seg--done {
  background: var(--color-hari-400);
}

.tap-stagebar__seg--blocked {
  background: var(--color-sindoor-400);
}

.tap-stagebar__seg--empty {
  background: var(--color-khadi-300);
}

/* ── 8. Module accent map ────────────────────────────────────── §4.4 ── */
/* Cards, tiles, active states read --mod-accent automatically */

:root {
  --mod-accent:   var(--color-chakra-500);  /* default / CRM */
  --mod-surface:  var(--color-chakra-50);
}

[data-module="crm"] {
  --mod-accent:  var(--color-chakra-400);   /* Chakra lighter — sales sibling */
  --mod-surface: var(--color-chakra-50);
}

[data-module="sales"] {
  --mod-accent:  var(--color-chakra-500);
  --mod-surface: var(--color-chakra-50);
}

[data-module="finance"] {
  --mod-accent:  var(--color-chakra-500);
  --mod-surface: var(--color-chakra-50);
}

[data-module="hr"] {
  --mod-accent:  var(--color-kesari-400);
  --mod-surface: var(--color-kesari-50);
}

[data-module="procurement"],
[data-module="inventory"] {
  --mod-accent:  var(--color-hari-500);
  --mod-surface: var(--color-hari-50);
}

[data-module="hospitality"] {
  --mod-accent:  var(--color-sindoor-500);
  --mod-surface: var(--color-sindoor-50);
}

[data-module="projects"],
[data-module="helpdesk"] {
  --mod-accent:  var(--color-hari-400);
  --mod-surface: var(--color-hari-50);
}

[data-module="compliance"],
[data-module="documents"] {
  --mod-accent:  var(--color-kohl-400);
  --mod-surface: var(--color-kohl-50);
}

/* ── 9. Global focus ring (uniform input focus — §4.6 / accessibility) */

:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
}

input:focus-visible,
textarea:focus-visible,
select:focus-visible,
button:focus-visible,
[tabindex]:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
}

/* ── 10. F-key rail (.tap-fkey-rail) ─────────────── Finance keyboard spine */

.tap-fkey-rail {
  position: fixed;
  inset-block: 120px 0;          /* below topbar */
  inset-inline-end: 0;
  inline-size: 140px;
  background: var(--surface-card);
  border-inline-start: 1px solid var(--surface-border);
  box-shadow: var(--shadow-2);
  display: flex;
  flex-direction: column;
  gap: 0;
  z-index: 40;
  overflow-y: auto;
  overflow-x: hidden;
  transition: inline-size var(--duration-base) var(--ease-out);
  font-size: var(--text-xs);
}

.tap-fkey-rail.is-collapsed {
  inline-size: 40px;
  overflow: hidden;
}

.tap-fkey-rail.is-collapsed .tap-fkey-rail__label {
  display: none;
}

/* Docked rail: reserve the workspace inline-end so content sits beside the rail,
   and clip/scroll wide panels (AP/AR detail) within their own column so they
   never slide under the rail. Scoped to rail presence — other modules unaffected. */
.workspace:has(.tap-fkey-rail) { padding-inline-end: 156px; }
.workspace:has(.tap-fkey-rail.is-collapsed) { padding-inline-end: 52px; }
.workspace:has(.tap-fkey-rail) .content { overflow-x: auto; }

.tap-fkey-rail__ctx {
  border-block-end: 1px solid var(--surface-border);
  background: color-mix(in srgb, var(--mod-color, #1B2C5B) 8%, var(--surface-card));
  padding-block: var(--space-1);
  min-block-size: 0;
}

.tap-fkey-rail__universal {
  flex: 1;
  padding-block: var(--space-1);
}

.tap-fkey-rail__row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  inline-size: 100%;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--text-body);
  text-align: start;
  min-block-size: 44px;
  transition: background var(--duration-fast) var(--ease-out);
  white-space: nowrap;
  overflow: hidden;
}

.tap-fkey-rail__row:hover {
  background: var(--color-khadi-200);
}

.tap-fkey-rail__row:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
}

.tap-fkey-rail__row--ctx {
  color: var(--mod-color, #1B2C5B);
  font-weight: 600;
}

.tap-fkey-rail__label {
  font-size: 11px;
  color: inherit;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.tap-fkey-rail__toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-2);
  block-size: 36px;
  background: var(--color-khadi-100);
  border: none;
  border-block-start: 1px solid var(--surface-border);
  cursor: pointer;
  color: var(--text-secondary);
  font-size: 14px;
  transition: background var(--duration-fast) var(--ease-out);
}

.tap-fkey-rail__toggle:hover {
  background: var(--color-khadi-200);
}

/* ── 11. Command palette (.tap-cmdk) ─────────────────────── Alt+G / ⌘K */

.tap-cmdk {
  position: fixed;
  inset-block-start: 15vh;
  inset-inline-start: 50%;
  transform: translateX(-50%);
  inline-size: min(560px, 90vw);
  max-block-size: 60vh;
  background: var(--surface-card);
  border: 1px solid var(--surface-border);
  border-radius: var(--radius-lg, var(--radius-md));
  box-shadow: var(--shadow-3);
  overflow: hidden;
  padding: 0;
  margin: 0;
  z-index: 200;
}

.tap-cmdk::backdrop {
  background: rgba(0, 0, 0, 0.35);
}

.tap-cmdk__header {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  border-block-end: 1px solid var(--surface-border);
  background: var(--surface-canvas);
}

.tap-cmdk__icon {
  color: var(--mod-color, #1B2C5B);
  font-size: 14px;
  flex-shrink: 0;
}

.tap-cmdk__input {
  flex: 1;
  border: none;
  background: transparent;
  font-size: var(--text-base);
  color: var(--text-strong);
  outline: none;
  padding: var(--space-1) 0;
}

.tap-cmdk__input::placeholder {
  color: var(--text-tertiary);
}

.tap-cmdk__results {
  list-style: none;
  padding: var(--space-2) 0;
  margin: 0;
  overflow-y: auto;
  max-block-size: calc(60vh - 56px);
}

.tap-cmdk__group-label {
  padding: var(--space-1) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-tertiary);
}

.tap-cmdk__item {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-4);
  cursor: pointer;
  min-block-size: 44px;
  color: var(--text-body);
  transition: background var(--duration-fast) var(--ease-out);
}

.tap-cmdk__item:hover,
.tap-cmdk__item[aria-selected="true"] {
  background: color-mix(in srgb, var(--mod-color, #1B2C5B) 8%, var(--surface-canvas));
  color: var(--text-strong);
}

.tap-cmdk__item-label {
  flex: 1;
  font-size: var(--text-sm);
}

.tap-cmdk__item-group {
  font-size: var(--text-xs);
  color: var(--text-tertiary);
}

/* ── 12. Keyboard chip (.tap-kbd) ───────────────── shortcut key indicator */

.tap-kbd {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-inline-size: 28px;
  padding: 2px var(--space-1);
  background: var(--color-khadi-100);
  border: 1px solid var(--color-khadi-400);
  border-block-end-width: 2px;
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 600;
  color: var(--text-secondary);
  white-space: nowrap;
  flex-shrink: 0;
  line-height: 1.4;
  letter-spacing: 0.02em;
}

/* Shortcut chips render in sindoor (brand red) — Tally's highlighted-key cue. */
[data-module="finance"] .tap-kbd,
.tap-fkey-rail .tap-kbd,
.tap-cmdk .tap-kbd {
  border-color: color-mix(in srgb, var(--color-sindoor-500) 35%, var(--color-khadi-400));
  color: var(--color-sindoor-500);
  background: var(--color-sindoor-50);
}

/* Accelerator letter inside a command label — bold sindoor, like Tally. */
.tap-cmdk__accel { color: var(--color-sindoor-500); font-weight: 700; }
.tap-cmdk__group { /* alias the JS-emitted group class onto the styled label */
  padding: var(--space-1) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-tertiary);
}

/* Cheat-sheet group header — Tally convention annotation */
.tap-cheatsheet__header {
  padding: var(--space-4) var(--space-5);
  border-block-end: 1px solid var(--surface-border);
}

.tap-cheatsheet__title {
  font-family: var(--font-display);
  font-size: var(--text-lg, 16px);
  font-weight: 500;
  color: var(--text-strong);
}

.tap-cheatsheet__convention {
  font-size: var(--text-xs);
  color: var(--text-secondary);
  margin-block-start: var(--space-1);
}

.tap-cheatsheet__body {
  padding: var(--space-4) var(--space-5);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-5);
  overflow-y: auto;
  max-block-size: 70vh;
}

.tap-cheatsheet__group-label {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-tertiary);
  margin-block-end: var(--space-2);
}

.tap-cheatsheet__row {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding-block: var(--space-1);
  font-size: var(--text-sm);
  color: var(--text-body);
}

.tap-cheatsheet__row-desc {
  flex: 1;
  color: var(--text-body);
}

/* Dialog for cheat-sheet */
#fin-cheatsheet-dialog {
  padding: 0;
  border: 1px solid var(--surface-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-3);
  max-inline-size: min(680px, 95vw);
  background: var(--surface-card);
}

#fin-cheatsheet-dialog::backdrop {
  background: rgba(0, 0, 0, 0.35);
}
