/* ─────────────────────────────────────────────────────────────────────────────
 * TOGRA — Page-shell component library (2026-05-13)
 *
 * Canonical primitives for the standalone PHP-page pattern (the surfaces
 * outside the main SPA). Replaces the ~80 lines of duplicated heredoc CSS
 * that every new surface used to inline in its `pageStyle` block.
 *
 * Naming: every component class is prefixed `tg-` so it can't collide with
 * the existing classes in app.css (.kpi-bar, .alert-bar, .empty-state,
 * .form-grid, .form-group). Body / main / h1 / h2 scoping uses the
 * `.tg-page` wrapper applied to <body> by togra_page_open() so element-
 * selector rules can't leak out and affect non-shell pages.
 *
 * To opt in, a page does nothing — togra_page_open() now applies the
 * `tg-page` body class and includes this stylesheet automatically. Then
 * use the canonical classes in markup:
 *
 *   <main>
 *     <h1>Page title</h1>
 *     <p class="tg-lead">One-line orientation.</p>
 *     <div class="tg-toast">✓ Saved.</div>
 *
 *     <div class="tg-kpis">
 *       <div class="tg-kpi"><div class="tg-kpi__lbl">Cues</div>
 *                          <div class="tg-kpi__v">42</div></div>
 *     </div>
 *
 *     <table class="tg-table">…</table>
 *
 *     <form class="tg-form">
 *       <div class="tg-form__row">
 *         <div><label>Field</label><input name="…"></div>
 *       </div>
 *       <button type="submit">Save</button>
 *     </form>
 *   </main>
 * ───────────────────────────────────────────────────────────────────────── */

/* ─── Shell ──────────────────────────────────────────────────────────────── */
/* Shell-level rules are wrapped in :where() so they carry zero specificity.
   Any page that still inlines its own `body {…}` / `main {…}` / `h1 {…}`
   heredoc CSS continues to win automatically — these defaults only kick
   in for pages that have fully migrated to the component library. */
:where(body.tg-page) {
  background: var(--bg);
  color: var(--text);
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  font-size: 13px;
  min-height: 100vh;
  margin: 0;
}
:where(body.tg-page) main {
  max-width: 1180px;
  margin: 22px auto;
  padding: 0 20px 60px;
}
:where(body.tg-page) main.tg-main-wide { max-width: 1280px; }
:where(body.tg-page) main.tg-main-narrow { max-width: 920px; }

:where(body.tg-page) h1 { font-size: 22px; margin-bottom: 4px; }
:where(body.tg-page) h2 {
  font-size: 12px; font-weight: 800; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: 0.6px;
  margin: 22px 0 8px;
}

.tg-lead {
  color: var(--text-muted); font-size: 13px;
  margin-bottom: 14px; line-height: 1.55;
}

/* ─── Toast (inline feedback) ───────────────────────────────────────────── */
.tg-toast {
  background: rgba(76,175,125,.15); color: var(--green);
  padding: 9px 14px; border-radius: 6px; margin-bottom: 14px;
  font-size: 13px; border-left: 3px solid var(--green); font-weight: 600;
}
.tg-toast.tg-toast--warn { background: rgba(232,131,58,.15); color: var(--orange); border-left-color: var(--orange); }
.tg-toast.tg-toast--err  { background: rgba(220,68,68,.15);  color: var(--red);    border-left-color: var(--red); }

/* ─── Empty state ───────────────────────────────────────────────────────── */
.tg-empty {
  text-align: center; color: var(--text-muted);
  padding: 24px 16px; font-size: 14px;
  background: var(--surface); border: 1px dashed var(--border);
  border-radius: 7px;
}

/* ─── Alert callout ─────────────────────────────────────────────────────── */
.tg-alert {
  background: rgba(232,131,58,.10); border: 1px solid var(--orange);
  padding: 10px 14px; border-radius: 7px; margin-bottom: 14px;
  font-size: 12.5px;
}
.tg-alert strong { color: var(--orange); }

/* ─── KPI strip ─────────────────────────────────────────────────────────── */
.tg-kpis {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 10px; margin-bottom: 14px;
}
.tg-kpi {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 7px; padding: 10px 12px;
}
.tg-kpi__lbl {
  font-size: 10.5px; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: 0.4px; font-weight: 800;
}
.tg-kpi__v {
  font-size: 22px; font-weight: 800; margin-top: 4px;
  font-feature-settings: 'tnum'; font-variant-numeric: tabular-nums;
}
.tg-kpi__v--green { color: var(--green); }
.tg-kpi__v--amber { color: var(--orange); }
.tg-kpi__v--red   { color: var(--red); }

/* ─── Data table ────────────────────────────────────────────────────────── */
table.tg-table {
  width: 100%; border-collapse: collapse; font-size: 12.5px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 7px; overflow: hidden;
}
table.tg-table th {
  text-align: left; padding: 8px 10px; color: var(--text-muted);
  font-weight: 800; font-size: 10.5px;
  text-transform: uppercase; letter-spacing: 0.4px;
  border-bottom: 1px solid var(--border);
  background: var(--surface2, var(--surface));
}
table.tg-table td {
  padding: 8px 10px; border-bottom: 1px solid var(--border);
  vertical-align: top;
}
table.tg-table tr.tg-row-archived { opacity: 0.5; }
table.tg-table td.tg-num,
table.tg-table th.tg-num { text-align: right; font-feature-settings: 'tnum'; font-variant-numeric: tabular-nums; }

/* ─── Row card (alternative to table for prose-heavy lists) ─────────────── */
.tg-row-card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; padding: 12px 14px; margin-bottom: 10px;
}
.tg-row-card.tg-row-archived { opacity: 0.5; }

/* ─── Forms ─────────────────────────────────────────────────────────────── */
.tg-form {
  background: var(--surface2, var(--surface)); border: 1px solid var(--border);
  padding: 12px 14px; border-radius: 6px; margin-top: 8px;
}
.tg-form label {
  display: block; font-size: 10.5px; color: var(--text-muted);
  margin-bottom: 2px; text-transform: uppercase; letter-spacing: 0.4px; font-weight: 700;
}
.tg-form input,
.tg-form select,
.tg-form textarea {
  width: 100%; padding: 6px 8px; box-sizing: border-box;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border); border-radius: 4px; font-size: 13px;
}
.tg-form input[type="checkbox"] { width: auto; }
.tg-form__row {
  display: grid; gap: 10px; margin-bottom: 10px;
  grid-template-columns: repeat(4, 1fr);
}
.tg-form__row--3 { grid-template-columns: repeat(3, 1fr); }
.tg-form__row--2 { grid-template-columns: repeat(2, 1fr); }
.tg-form__row .tg-col-span-2 { grid-column: span 2; }
.tg-form__row .tg-col-span-3 { grid-column: span 3; }
.tg-form button {
  background: var(--accent); color: #fff; border: 0;
  padding: 7px 14px; border-radius: 5px;
  font-weight: 700; cursor: pointer; font-size: 12.5px;
}
.tg-form button.tg-btn-muted {
  background: var(--surface); color: var(--text-muted); border: 1px solid var(--border);
}
.tg-form button.tg-btn-danger {
  background: transparent; color: var(--red); border: 1px solid var(--red);
}

/* ─── Filters bar ───────────────────────────────────────────────────────── */
.tg-filters {
  display: flex; gap: 8px; align-items: center;
  padding: 10px 14px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 7px; margin-bottom: 14px; flex-wrap: wrap;
}
.tg-filters label {
  font-size: 11px; color: var(--text-muted);
  text-transform: uppercase; letter-spacing: 0.4px; font-weight: 700;
}
.tg-filters select,
.tg-filters input {
  padding: 5px 8px; font-size: 12.5px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border); border-radius: 4px;
}

/* ─── Status pill / chip ────────────────────────────────────────────────── */
.tg-pill {
  display: inline-block; padding: 2px 8px; border-radius: 10px;
  font-size: 10px; font-weight: 800;
  text-transform: uppercase; letter-spacing: 0.4px;
  background: var(--surface2, var(--surface)); color: var(--text-muted);
}
.tg-pill--green   { background: var(--green);  color: #fff; }
.tg-pill--amber   { background: var(--orange); color: #fff; }
.tg-pill--red     { background: var(--red);    color: #fff; }
.tg-pill--blue    { background: var(--blue);   color: #fff; }
.tg-pill--grey    { background: #888;          color: #fff; }
.tg-pill--neutral { background: var(--blue);   color: #fff; }

/* ─── Inline-edit details/summary affordance ────────────────────────────── */
details.tg-edit > summary {
  cursor: pointer; font-size: 12px; color: var(--accent); list-style: none;
}
details.tg-edit > summary::-webkit-details-marker { display: none; }
details.tg-edit[open] > summary { color: var(--text); font-weight: 700; }
