/* Hallmark · genre: modern-minimal · macrostructure: Workbench (app shell) · theme: Cobalt · enrichment: none · nav: N13 · footer: none */
/* Hallmark · pre-emit critique: P4 H4 E4 S4 R5 V4 */

*, *::before, *::after { box-sizing: border-box; }
html, body { overflow-x: clip; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--color-paper); color: var(--color-ink-2);
  font: 400 var(--text-base)/1.5 var(--font-body);
  font-feature-settings: "tnum" 1, "cv11" 1;
}
h1, h2, h3, h4 { font-family: var(--font-display); font-style: normal; color: var(--color-ink); letter-spacing: -0.02em; margin: 0; line-height: 1.15; }
h1 { font-size: var(--text-2xl); font-weight: 600; }
h2 { font-size: var(--text-xl); font-weight: 600; }
h3 { font-size: var(--text-md); font-weight: 600; }
p { margin: 0; }
a { color: var(--color-ink); text-decoration: none; }
a:hover { color: var(--color-accent); }
button, input, select, textarea { font: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.mono { font-family: var(--font-mono); }
.label { font: 500 var(--text-xs)/1 var(--font-mono); letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-ink-3); }
.num { font-family: var(--font-num); font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1, "zero" 0; font-weight: 500; }
.muted { color: var(--color-ink-3); }

/* ---------- nav (N13) ---------- */
.nav {
  position: sticky; top: 0; z-index: 30; height: var(--nav-h);
  display: flex; align-items: center; gap: var(--space-md);
  padding: 0 var(--space-lg); background: oklch(98.5% 0.004 250 / 0.85);
  backdrop-filter: blur(8px); border-bottom: var(--rule);
}
.nav__brand { display: flex; align-items: center; gap: var(--space-xs); font-family: var(--font-display); font-weight: 600; font-size: var(--text-md); color: var(--color-ink); letter-spacing: -0.01em; white-space: nowrap; }
.nav__brand i { width: 10px; height: 10px; background: var(--color-accent); border-radius: 2px; display: inline-block; }
.nav__crumbs { display: flex; align-items: center; gap: var(--space-xs); min-width: 0; font-size: var(--text-sm); color: var(--color-ink-3); overflow: hidden; }
.nav__crumbs a, .nav__crumbs span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nav__crumbs .sep { color: var(--color-ink-4); }
.nav__spacer { flex: 1; }
.kbtn {
  display: inline-flex; align-items: center; gap: var(--space-xs); height: 32px; padding: 0 var(--space-sm);
  border: var(--rule-2); border-radius: var(--radius-sm); background: var(--color-paper); color: var(--color-ink-3);
  font-size: var(--text-sm); cursor: pointer; transition: border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}
.kbtn:hover, .kbtn.is-hover { border-color: var(--color-accent); color: var(--color-ink); }
.kbtn kbd { font: 500 var(--text-xs) var(--font-mono); padding: 2px 5px; border: var(--rule); border-radius: 4px; background: var(--color-paper-2); color: var(--color-ink-3); }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-xs);
  height: 34px; padding: 0 var(--space-md); border-radius: var(--radius-sm); white-space: nowrap;
  border: var(--rule-2); background: var(--color-paper); color: var(--color-ink); font-weight: 500; font-size: var(--text-sm);
  cursor: pointer; transition: background var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
}
.btn:hover, .btn.is-hover { background: var(--color-paper-2); border-color: var(--color-ink-4); }
.btn:active, .btn.is-active { transform: translateY(1px); }
.btn:disabled, .btn.is-disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.btn[data-state="loading"] { color: transparent; position: relative; pointer-events: none; }
.btn[data-state="loading"]::after { content: ""; position: absolute; inset: 0; margin: auto; width: 14px; height: 14px; border: 2px solid var(--color-ink-4); border-top-color: var(--color-ink); border-radius: 50%; animation: spin 0.7s linear infinite; }
.btn[data-state="error"] { border-color: var(--color-danger); color: var(--color-danger); }
.btn[data-state="success"] { border-color: var(--color-ok); color: var(--color-ok); }
.btn--primary { background: var(--color-accent); border-color: var(--color-accent); color: var(--color-accent-ink); }
.btn--primary:hover, .btn--primary.is-hover { background: var(--color-accent-hover); border-color: var(--color-accent-hover); }
.btn--ghost { border-color: transparent; background: transparent; }
.btn--ghost:hover { background: var(--color-paper-2); border-color: transparent; }
.btn--danger { color: var(--color-danger); }
.btn--danger:hover { background: var(--color-danger-soft); border-color: var(--color-danger); }
.btn--sm { height: 28px; padding: 0 var(--space-sm); font-size: var(--text-xs); }
@keyframes spin { to { transform: rotate(360deg); } }

/* ---------- forms ---------- */
.field { display: flex; flex-direction: column; gap: var(--space-2xs); min-width: 0; }
.field > label { font-size: var(--text-xs); font-weight: 500; color: var(--color-ink-3); }
.input, select.input, textarea.input {
  height: 34px; padding: 0 var(--space-sm); border: var(--rule-2); border-radius: var(--radius-sm); background: var(--color-paper); width: 100%; min-width: 0;
  transition: border-color var(--dur-fast) var(--ease-out);
}
textarea.input { height: auto; min-height: 68px; padding: var(--space-xs) var(--space-sm); resize: vertical; }
.input:hover { border-color: var(--color-ink-4); }
.input:focus-visible { outline: none; border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-soft); }
.input:disabled { background: var(--color-paper-2); color: var(--color-ink-4); cursor: not-allowed; }
.input[aria-invalid="true"] { border-color: var(--color-danger); }
.field__error { font-size: var(--text-xs); color: var(--color-danger); }
.field__hint { font-size: var(--text-xs); color: var(--color-ink-3); min-height: 1em; }
.delta { font-family: var(--font-num); font-variant-numeric: tabular-nums; font-weight: 500; font-size: var(--text-xs); }
.delta.is-up { color: var(--color-warn); }
.delta.is-down { color: var(--color-ok); }
.similar { display: flex; flex-direction: column; gap: var(--space-2xs); margin-top: var(--space-2xs); }
.similar__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0 var(--space-md); text-align: left; padding: var(--space-xs) var(--space-sm); border: var(--rule); border-radius: var(--radius-sm); background: var(--color-paper); cursor: pointer; font-size: var(--text-sm); }
.similar__row:hover { border-color: var(--color-accent); background: var(--color-accent-soft); }
.similar__name { font-weight: 500; color: var(--color-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.similar__meta { grid-column: 1; font-size: var(--text-xs); color: var(--color-ink-3); }
.similar__cost { grid-column: 2; grid-row: 1 / span 2; align-self: center; white-space: nowrap; }
.form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--space-md); }
.form-grid .span-2 { grid-column: span 2; }
.seg { display: inline-flex; width: max-content; border: var(--rule-2); border-radius: var(--radius-sm); overflow: hidden; }
.seg label { min-width: 72px; justify-content: center; }
.seg label { padding: 0 var(--space-sm); height: 32px; display: inline-flex; align-items: center; font-size: var(--text-sm); cursor: pointer; border-right: var(--rule); }
.seg label:last-child { border-right: 0; }
.seg input { position: absolute; opacity: 0; }
.seg input:checked + span { color: var(--color-accent); font-weight: 500; }
.seg label:has(input:focus-visible) { outline: 2px solid var(--color-focus); outline-offset: -2px; }
.seg label:has(input:checked) { background: var(--color-accent-soft); }

/* ---------- layout ---------- */
.page { width: 100%; margin: 0; padding: var(--space-md) var(--space-lg) var(--space-2xl); }
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-lg); flex-wrap: wrap; margin-bottom: var(--space-lg); }
.page-head--compact { align-items: center; margin-bottom: var(--space-xs); flex-wrap: nowrap; }
.page-head--compact .page-head__meta { min-width: 0; flex: 1 1 auto; }
.page-head--compact .page-head__meta h1, .page-head--compact .page-head__meta p { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.page-head--compact .page-head__actions { flex: none; flex-wrap: nowrap; }
@media (max-width: 1100px) { .page-head--compact { flex-wrap: wrap; } }
.page-head--compact h1 { font-size: var(--text-xl); }
.page-head--compact .page-head__meta { gap: 0; }
.page-head--compact .btn { height: 30px; font-size: var(--text-xs); }
.page-head__meta { display: flex; flex-direction: column; gap: var(--space-xs); min-width: 0; }
.page-head__actions { display: flex; gap: var(--space-xs); flex-wrap: wrap; }
.empty { padding: var(--space-3xl) var(--space-lg); text-align: center; border: 1px dashed var(--color-rule-2); border-radius: var(--radius-md); color: var(--color-ink-3); }
.empty h3 { margin-bottom: var(--space-xs); }
.stack { display: flex; flex-direction: column; gap: var(--space-md); }
.row { display: flex; align-items: center; gap: var(--space-sm); flex-wrap: wrap; }
.card { border: var(--rule); border-radius: var(--radius-md); background: var(--color-paper); }
.card__body { padding: var(--space-lg); }

/* list rows (customers / budgets) */
.list { border: var(--rule); border-radius: var(--radius-md); overflow: hidden; }
.list__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-md); align-items: center; padding: var(--space-md) var(--space-lg); border-bottom: var(--rule); transition: background var(--dur-fast) var(--ease-out); }
.list__row:last-child { border-bottom: 0; }
.list__row:hover { background: var(--color-paper-2); }
.list__title { font-family: var(--font-display); font-weight: 600; font-size: var(--text-md); color: var(--color-ink); display: block; overflow-wrap: anywhere; }
.list__sub { font-size: var(--text-sm); color: var(--color-ink-3); display: flex; gap: var(--space-sm); flex-wrap: wrap; margin-top: 2px; }

/* stats */
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-md); }
.stat { border: var(--rule); border-radius: var(--radius-md); padding: var(--space-md) var(--space-lg); }
.stat__value { font: 600 var(--text-xl)/1.1 var(--font-num); font-variant-numeric: tabular-nums; color: var(--color-ink); letter-spacing: -0.02em; margin-top: var(--space-2xs); }
.stat--capex .stat__value::before, .stat--opex .stat__value::before { content: ""; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border-radius: 2px; vertical-align: 2px; }
.stat--capex .stat__value::before { background: var(--color-accent); }
.stat--opex .stat__value::before { border: 1.5px solid var(--color-ink-2); background: var(--color-opex-fill); }

/* tabs */
.tabs { display: flex; gap: var(--space-2xs); border-bottom: var(--rule); margin-bottom: var(--space-sm); overflow: visible; }
.tabs--row { align-items: center; margin-bottom: var(--space-xs); }
.tabs__extra { margin-left: auto; display: flex; align-items: center; }
.tabs__extra .rm-tools { margin: 0; }
.tab { padding: var(--space-sm) var(--space-md); border: 0; background: none; color: var(--color-ink-3); font-weight: 500; font-size: var(--text-sm); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; }
.tab:hover { color: var(--color-ink); }
.tab[aria-selected="true"] { color: var(--color-ink); border-bottom-color: var(--color-accent); }
.toolbar { display: flex; align-items: center; gap: var(--space-xs); flex-wrap: wrap; margin-bottom: var(--space-lg); }
.toolbar .grow { flex: 1; }

/* data table */
.table-wrap { overflow-x: auto; border: var(--rule); border-radius: var(--radius-md); }
table.data { width: 100%; border-collapse: collapse; font-size: var(--text-sm); }
table.data th { text-align: left; font: 500 var(--text-xs)/1 var(--font-mono); letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-ink-3); padding: var(--space-sm) var(--space-md); border-bottom: var(--rule-2); background: var(--color-paper-2); white-space: nowrap; }
table.data td { padding: var(--space-sm) var(--space-md); border-bottom: var(--rule); vertical-align: top; }
table.data tr:last-child td { border-bottom: 0; }
table.data tbody tr:hover { background: var(--color-paper-2); }
table.data td.r, table.data th.r { text-align: right; }
table.data td.num, table.data td.r, table.data td:has(> .chip) { white-space: nowrap; }
table.data tr.group td { background: var(--color-paper-2); font-family: var(--font-display); font-weight: 600; color: var(--color-ink); }
table.data tr.total td { font-weight: 600; color: var(--color-ink); border-top: var(--rule-2); }
.chip { display: inline-flex; align-items: center; height: 20px; padding: 0 7px; border-radius: 4px; font: 500 var(--text-xs)/1 var(--font-mono); letter-spacing: 0.04em; text-transform: uppercase; }
.chip--capex { background: var(--color-accent); color: var(--color-accent-ink); }
.chip--hardware { background: var(--color-type-hardware-soft); color: var(--color-type-hardware); border: 1px solid transparent; }
.chip--software { background: var(--color-type-software-soft); color: var(--color-type-software); border: 1px solid transparent; }
.chip--licensing { background: var(--color-type-licensing-soft); color: var(--color-type-licensing); border: 1px solid transparent; }
.chip--services { background: var(--color-type-services-soft); color: var(--color-type-services); border: 1px solid transparent; }
table.data td.money { font-weight: 600; color: var(--color-ink); }
table.data tr.group td.money { color: var(--color-accent); }
table.data tr.group td:first-child { border-left: 6px solid var(--cat, var(--color-ink-4)); }
table.data tr.group td { background: color-mix(in oklch, var(--cat, var(--color-paper-2)) 16%, var(--color-paper-2)); font-size: var(--text-base); padding-top: var(--space-md); padding-bottom: var(--space-md); }
table.data tr.item td:first-child, table.data tr.vendor td:first-child { position: relative; }
table.data tr.item td:first-child::after, table.data tr.vendor td:first-child::after { content: ""; position: absolute; top: 0; bottom: 0; left: var(--stripe-x, 0); width: 6px; background: color-mix(in oklch, var(--cat, transparent) 30%, transparent); }
table.data tr.vendor td:first-child, table.data tr.indented td:first-child { --stripe-x: 18px; }
table.data tr.vendor td:first-child::after, table.data tr.indented td:first-child::after { background: color-mix(in oklch, var(--cat, transparent) 55%, transparent); }
.chip--opex { border: 1px solid var(--color-ink-3); color: var(--color-ink-2); }
.chip--type { border: var(--rule-2); color: var(--color-ink-3); }
.chip--eos { color: var(--color-accent); border: 1px solid var(--color-accent); font-family: var(--font-num); text-transform: none; letter-spacing: 0; }
.chip--eos.is-soon { background: var(--color-warn); border-color: var(--color-warn); color: var(--color-warn-ink); }
.chip--eos.is-past { color: var(--color-past); border-color: var(--color-past); text-decoration: line-through; }
.chip--term { border: 1px solid var(--color-rule-2); color: var(--color-ink-3); text-transform: none; letter-spacing: 0; font-family: var(--font-body); font-weight: 400; height: auto; min-height: 18px; padding: 1px 6px; line-height: 1.25; white-space: normal; max-width: 160px; display: inline-block; }
.drawer.drawer--wide { width: min(1180px, 100vw); }
.dropzone { display: flex; flex-direction: column; align-items: center; gap: var(--space-2xs); padding: var(--space-xl); border: 1px dashed var(--color-rule-2); border-radius: var(--radius-md); cursor: pointer; font-weight: 500; color: var(--color-ink); transition: border-color var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out); }
.dropzone:hover, .dropzone.is-over { border-color: var(--color-accent); background: var(--color-accent-soft); }
table.data--compact td, table.data--compact th { padding: var(--space-xs) var(--space-sm); }
.caret { display: inline-block; width: 0; height: 0; border: 4px solid transparent; border-left: 6px solid var(--color-ink-3); margin-right: 6px; transition: transform var(--dur-fast) var(--ease-out); }
.caret.is-open { transform: rotate(90deg); }
table.data tr.group td[role=button], table.data tr.vendor td[role=button] { cursor: pointer; }
table.data tr.vendor td { background: color-mix(in oklch, var(--cat, var(--color-paper-2)) 6%, var(--color-paper)); font-weight: 600; color: var(--color-ink); }
table.data tr.vendor td:first-child { padding-left: calc(var(--space-md) + 30px); }
table.data tr.item td:first-child { padding-left: calc(var(--space-md) + 12px); }
table.data tr.item td strong { font-weight: 500; }
table.data tr.indented td:first-child { padding-left: calc(var(--space-md) + 36px); }
.hist { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.hist__row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); padding: var(--space-sm) 0; border-bottom: var(--rule); }
.hist__label { font-weight: 500; color: var(--color-ink); }
.hist__meta { font-size: var(--text-xs); }
.hist__row.is-undone .hist__label { color: var(--color-ink-4); text-decoration: line-through; }
.hist__row.is-undo .hist__label { color: var(--color-ink-3); font-weight: 400; }
.quick { display: inline-flex; gap: 2px; margin-top: 2px; }
.quick .btn { height: 22px; padding: 0 6px; font-family: var(--font-mono); font-size: 10.5px; }
.removed-tag { color: var(--color-danger); font: 500 var(--text-xs) var(--font-mono); letter-spacing: 0.04em; text-transform: uppercase; }
table.data tr.is-removed td { color: var(--color-ink-4); }
table.data tr.is-removed td strong, table.data tr.is-removed td .num { text-decoration: line-through; text-decoration-color: var(--color-danger); }
table.data tr.is-removed .chip { opacity: 0.5; }
.tl .c-label--item.is-removed .name { text-decoration: line-through; text-decoration-color: var(--color-danger); text-decoration-thickness: 2px; color: var(--color-ink-4); }
.tl .bar--removed { background: transparent !important; border: 1px dashed var(--color-danger) !important; color: var(--color-danger) !important; opacity: 0.8; text-decoration: line-through; }
.inline { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); }
.check { display: flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); cursor: pointer; }
.check input { width: 16px; height: 16px; accent-color: var(--color-accent); }
.controls { display: flex; align-items: center; gap: var(--space-sm) var(--space-lg); flex-wrap: wrap; margin-bottom: var(--space-xs); padding: var(--space-xs) var(--space-sm); border: var(--rule); border-radius: var(--radius-md); background: var(--color-paper-2); }
.controls .input, .controls select.input { height: 28px; font-size: var(--text-sm); padding: 0 8px; }
.windowbar { display: flex; align-items: center; gap: var(--space-sm); flex-wrap: wrap; }
.windowbar .label { margin-right: 2px; }
.filterbar { display: flex; align-items: center; gap: var(--space-xs); flex-wrap: wrap; flex: 1 1 520px; }
.filterbar .input { flex: 0 1 260px; min-width: 180px; }
.filterbar #filter-count { min-width: 0; font-size: var(--text-xs); font-variant-numeric: tabular-nums; white-space: nowrap; }
.filterbar .input::-webkit-search-cancel-button { -webkit-appearance: none; }
.chips { display: flex; gap: var(--space-2xs); flex-wrap: wrap; }
.chipbtn { height: 24px; padding: 0 8px; border-radius: 999px; border: var(--rule-2); background: var(--color-paper); font-size: var(--text-xs); font-weight: 500; color: var(--color-ink-2); cursor: pointer; transition: background var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out); }
.chipbtn:hover { border-color: var(--color-ink-4); }
.chipbtn[aria-pressed="true"] { background: var(--color-ink); border-color: var(--color-ink); color: var(--color-paper); }
.chipbtn--capex[aria-pressed="true"] { background: var(--color-accent); border-color: var(--color-accent); }
.chipbtn--hardware[aria-pressed="true"] { background: var(--color-type-hardware); border-color: var(--color-type-hardware); }
.chipbtn--software[aria-pressed="true"] { background: var(--color-type-software); border-color: var(--color-type-software); }
.chipbtn--licensing[aria-pressed="true"] { background: var(--color-type-licensing); border-color: var(--color-type-licensing); }
.chipbtn--services[aria-pressed="true"] { background: var(--color-type-services); border-color: var(--color-type-services); }
.stat--peak { border-color: var(--color-warn); background: var(--color-warn-soft); }
.stat__sub { font-size: var(--text-xs); color: var(--color-ink-3); margin-top: var(--space-2xs); }
.due { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--space-sm); }
.due__item { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--space-sm); align-items: center; padding: var(--space-sm) var(--space-md); border: var(--rule); border-radius: var(--radius-md); border-left-width: 3px; border-left-color: var(--color-accent); }
.due__item.is-soon { border-left-color: var(--color-warn); background: var(--color-warn-soft); }
.due__item.is-past { border-left-color: var(--color-past); color: var(--color-ink-3); }
.due__date { font: 500 var(--text-sm) var(--font-num); font-variant-numeric: tabular-nums; white-space: nowrap; }
.due__name { font-weight: 500; color: var(--color-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.due__meta { grid-column: 2; font-size: var(--text-xs); color: var(--color-ink-3); }
.rowbtns { display: flex; gap: var(--space-2xs); justify-content: flex-end; }

/* drawer */
.drawer-backdrop { position: fixed; inset: 0; background: oklch(24% 0.02 258 / 0.25); z-index: 40; opacity: 0; transition: opacity var(--dur-base) var(--ease-out); }
.drawer-backdrop.is-open { opacity: 1; }
.drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(640px, 100vw); background: var(--color-paper); border-left: var(--rule-2); z-index: 41; display: flex; flex-direction: column; transform: translateX(100%); transition: transform var(--dur-base) var(--ease-out); }
.drawer.is-open { transform: none; }
.drawer__head { display: flex; align-items: center; justify-content: space-between; padding: var(--space-md) var(--space-lg); border-bottom: var(--rule); }
.drawer__body { flex: 1; overflow-y: auto; padding: var(--space-lg); }
.drawer__body--form { padding: 0 var(--space-lg) var(--space-lg); }
.drawer__body--form .input, .drawer__body--form select.input { height: 28px; font-size: var(--text-sm); padding: 0 8px; }
.drawer__body--form textarea.input { height: auto; min-height: 44px; padding: 4px 8px; }
.drawer__body--form .seg label { height: 26px; font-size: var(--text-xs); padding: 0 10px; }
.drawer__body--form .field > label { font-size: 10.5px; line-height: 1.2; }
.drawer__body--form .field { gap: 2px; }
.drawer__head { padding: var(--space-sm) var(--space-lg); }
.drawer__foot { padding: var(--space-sm) var(--space-lg); }
.drawer__body--form .similar__row { padding: 4px 8px; font-size: var(--text-xs); }
.fs { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: var(--space-sm); padding: 10px 0; border-bottom: var(--rule); }
.fs:last-of-type { border-bottom: 0; }
.fs__title { font: 500 10px/1 var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-ink-3); padding-top: 17px; }
.fs__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px 10px; align-items: end; }
.fs__grid .c2 { grid-column: span 2; }
.fs__grid .c3 { grid-column: 1 / -1; }
.fs__hint { display: flex; gap: var(--space-md); flex-wrap: wrap; min-height: 0; }
.fs__hint:empty { display: none; }
.drawer__body--form .field__hint:empty { display: none; }
@media (max-width: 640px) { .fs { grid-template-columns: 1fr; gap: var(--space-xs); } .fs__title { padding-top: 0; } .fs__grid { grid-template-columns: 1fr 1fr; } .fs__grid .c2 { grid-column: 1 / -1; } }
.drawer__foot { display: flex; gap: var(--space-xs); justify-content: space-between; padding: var(--space-md) var(--space-lg); border-top: var(--rule); }
[hidden] { display: none !important; }

/* command palette */
.palette-backdrop { position: fixed; inset: 0; z-index: 50; background: oklch(24% 0.02 258 / 0.3); display: flex; align-items: flex-start; justify-content: center; padding: 12vh var(--space-md) 0; }
.palette { width: min(600px, 100%); background: var(--color-paper); border: var(--rule-2); border-radius: var(--radius-md); box-shadow: 0 20px 60px oklch(24% 0.02 258 / 0.18); overflow: hidden; }
.palette__input { width: 100%; height: 48px; padding: 0 var(--space-lg); border: 0; border-bottom: var(--rule); background: transparent; font-family: var(--font-mono); font-size: var(--text-base); }
.palette__input:focus-visible { outline: none; }
.palette__list { list-style: none; margin: 0; padding: var(--space-xs); max-height: 50vh; overflow-y: auto; }
.palette__item { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); cursor: pointer; font-size: var(--text-sm); }
.palette__item .label { margin-left: auto; }
.palette__item[aria-selected="true"] { background: var(--color-accent-soft); color: var(--color-ink); }
.palette__empty { padding: var(--space-md); color: var(--color-ink-3); font-size: var(--text-sm); }

/* auth */
.page--auth { display: flex; justify-content: center; padding-top: 10vh; }
.auth-card { width: min(420px, 100%); border: var(--rule); border-radius: var(--radius-md); padding: var(--space-xl); background: var(--color-paper); }
.auth-card__brand { display: flex; align-items: center; gap: var(--space-xs); font-family: var(--font-display); font-weight: 600; margin-bottom: var(--space-lg); }
.auth-card__brand i { width: 10px; height: 10px; background: var(--color-accent); border-radius: 2px; }
.auth-card h1 { font-size: var(--text-xl); margin-bottom: var(--space-xs); }
.auth-card .btn--lg { width: 100%; height: 42px; margin-top: var(--space-lg); font-size: var(--text-base); }
.lookup { position: absolute; left: 0; right: 0; top: 100%; z-index: 20; background: var(--color-paper); border: var(--rule-2); border-radius: var(--radius-sm); box-shadow: 0 12px 32px oklch(24% 0.02 258 / 0.14); display: flex; flex-direction: column; max-height: 260px; overflow-y: auto; }
.lookup__row { display: flex; justify-content: space-between; gap: var(--space-md); padding: var(--space-xs) var(--space-sm); background: none; border: 0; border-bottom: var(--rule); text-align: left; font-size: var(--text-sm); cursor: pointer; }
.lookup__row:hover { background: var(--color-accent-soft); }
.lookup__row.is-dim { opacity: 0.55; cursor: default; }
.card--accent { border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-soft); }
.bs-code { display: flex; flex-direction: column; gap: var(--space-sm); font-size: var(--text-sm); }
.bs-code__code { font: 700 var(--text-2xl) var(--font-mono); letter-spacing: 0.18em; color: var(--color-ink); padding: var(--space-sm) var(--space-md); border: var(--rule-2); border-radius: var(--radius-md); background: var(--color-paper-2); width: max-content; user-select: all; }
.auth-ok { margin-top: var(--space-md); padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); background: oklch(94% 0.05 150); color: var(--color-ok); font-size: var(--text-sm); }
.auth-error { margin-top: var(--space-md); padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); background: var(--color-danger-soft); color: var(--color-danger); font-size: var(--text-sm); }
.auth-alt { margin-top: var(--space-lg); border-top: var(--rule); padding-top: var(--space-sm); }
.auth-alt summary { cursor: pointer; font-size: var(--text-xs); color: var(--color-ink-3); }
.umenu { position: relative; }
.umenu summary { list-style: none; display: inline-flex; align-items: center; gap: var(--space-xs); }
.umenu summary::-webkit-details-marker { display: none; }
.umenu__avatar { width: 20px; height: 20px; border-radius: 50%; background: var(--color-accent); color: var(--color-accent-ink); font: 600 11px/20px var(--font-display); text-align: center; }
.umenu__name { max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.umenu__pop { position: absolute; right: 0; top: calc(100% + 6px); min-width: 240px; background: var(--color-paper); border: var(--rule-2); border-radius: var(--radius-md); box-shadow: 0 12px 32px oklch(24% 0.02 258 / 0.14); padding: var(--space-xs); z-index: 40; display: flex; flex-direction: column; }
.umenu__who { padding: var(--space-xs) var(--space-sm); border-bottom: var(--rule); margin-bottom: var(--space-2xs); font-size: var(--text-sm); }
.umenu__pop a, .umenu__pop button { text-align: left; padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); background: none; border: 0; font-size: var(--text-sm); color: var(--color-ink); cursor: pointer; }
.umenu__pop a:hover, .umenu__pop button:hover { background: var(--color-paper-2); }
@media (max-width: 768px) { .umenu__name { display: none; } }
.impersonation { position: sticky; top: var(--nav-h); z-index: 29; background: var(--color-warn); color: var(--color-warn-ink); padding: var(--space-xs) var(--space-lg); font-size: var(--text-sm); display: flex; gap: var(--space-md); align-items: center; }
.impersonation button { margin-left: auto; background: var(--color-paper); color: var(--color-ink); border: 0; border-radius: var(--radius-sm); padding: 4px 10px; font-weight: 500; cursor: pointer; }
/* tooltip */
.tip { position: absolute; z-index: 70; max-width: 320px; background: var(--color-graphite); color: var(--color-graphite-ink); padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); font-size: var(--text-xs); line-height: 1.4; box-shadow: 0 8px 24px oklch(24% 0.02 258 / 0.25); opacity: 0; pointer-events: none; transition: opacity var(--dur-fast) var(--ease-out); }
.tip.is-open { opacity: 1; }
.tip__title { font-weight: 600; color: #fff; margin-bottom: 4px; font-size: var(--text-sm); }
.tip__row { display: flex; justify-content: space-between; gap: var(--space-md); }
.tip__row span { color: oklch(78% 0.01 250); }
.tip__row b { font-family: var(--font-num); font-variant-numeric: tabular-nums; font-weight: 500; color: #fff; text-align: right; }
.tip__note { margin-top: 4px; color: oklch(85% 0.01 250); font-style: normal; border-top: 1px solid oklch(40% 0.02 258); padding-top: 4px; }
/* toast */
.toast { position: fixed; bottom: var(--space-lg); left: 50%; transform: translateX(-50%) translateY(8px); opacity: 0; background: var(--color-graphite); color: var(--color-graphite-ink); padding: var(--space-xs) var(--space-md); border-radius: var(--radius-sm); font-size: var(--text-sm); z-index: 60; transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); pointer-events: none; display: flex; gap: var(--space-md); align-items: center; }
.toast.is-open { opacity: 1; transform: translateX(-50%); pointer-events: auto; }
.toast button { background: none; border: 0; color: var(--color-accent-soft); font-weight: 500; cursor: pointer; padding: 0; }
.toast--error { background: var(--color-danger); color: var(--color-accent-ink); }

/* legend */
.legend { display: flex; gap: var(--space-md); flex-wrap: wrap; font-size: var(--text-xs); color: var(--color-ink-3); align-items: center; }
.legend i { display: inline-block; width: 12px; height: 12px; border-radius: 2px; margin-right: 5px; vertical-align: -2px; }
.legend .i-capex { background: var(--color-capex-3); }
.legend .i-opex { border: 1.5px solid var(--color-ink-2); background: var(--color-opex-fill); }
.legend .i-eos { width: 3px; background: var(--color-accent); border-radius: 0; height: 12px; }
.legend .i-eos--soon { background: var(--color-warn); }
.legend .i-eos--past { background: var(--color-past); }
.legend .i-hw { background: var(--color-type-hardware); } .legend .i-sw { background: var(--color-type-software); } .legend .i-lic { background: var(--color-type-licensing); } .legend .i-svc { background: var(--color-type-services); }
.legend .i-heat { background: linear-gradient(90deg, var(--color-heat-1), var(--color-heat-2), var(--color-heat-3)); border: var(--rule); }
.legend .i-sum { background: var(--color-paper-3); border: 1px dashed var(--color-ink-4); }
.legend .lg-glyph { display: inline-flex; width: 14px; height: 14px; border-radius: 50%; background: var(--color-accent); color: var(--color-accent-ink); font: 700 10px/14px var(--font-num); justify-content: center; margin-right: 4px; }
.legend .lg-glyph--soon { background: var(--color-warn); }
.legend .i-today { width: 2px; height: 12px; background: var(--color-accent); border-radius: 0; }

@media (max-width: 768px) {
  .page { padding: var(--space-lg) var(--space-md) var(--space-2xl); }
  .nav { padding: 0 var(--space-md); }
  .nav__crumbs { display: none; }
  .form-grid .span-2 { grid-column: span 1; }
  .drawer { width: 100vw; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; }
}
