/* BUDGETGRID — Finance workspace · Budget plane (.bd-*) — tokens only, both themes */

/* ---- toolbar */
.portal-app .bd-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.portal-app .bd-toolbar .search { min-width: 220px; }
.portal-app .bd-toolbar .input { min-width: 0; }
.portal-app .bd-toolbar select.input { width: auto; }
.portal-app .bd-check { display: inline-flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: 600; color: var(--ink-2); padding: 8px 12px; border: 1px solid var(--line); border-radius: var(--r-2); background: var(--card); cursor: pointer; min-height: 40px; }
.portal-app .bd-check input { accent-color: var(--grid); width: 16px; height: 16px; }

/* ---- envelope tree */
.portal-app .bd-tree { display: flex; flex-direction: column; gap: 14px; }
.portal-app .bd-ent { padding: 0; overflow: hidden; }
.portal-app .bd-ent-h, .portal-app .bd-dept-h, .portal-app .bd-row { display: grid; grid-template-columns: minmax(0, 1fr) 34px 220px 150px 64px; gap: 12px; align-items: center; }
.portal-app .bd-row { grid-template-columns: 84px minmax(0, 1fr) 34px 220px 150px 64px; padding: 10px 16px; border-top: 1px solid var(--line); cursor: pointer; transition: background var(--t-fast); }
.portal-app .bd-row:hover, .portal-app .bd-row:focus-visible { background: var(--neutral-wash); }
.portal-app .bd-ent-h { padding: 14px 16px; background: var(--card-2); }
.portal-app .bd-dept-h { padding: 9px 16px 9px 28px; background: var(--bg-2); border-top: 1px solid var(--line); }
.portal-app .bd-deptg:first-of-type .bd-dept-h { border-top: 1px solid var(--line); }
.portal-app .bd-tg { display: flex; align-items: center; gap: 10px; min-width: 0; border: none; background: transparent; padding: 0; font: inherit; color: var(--ink); cursor: pointer; text-align: left; }
.portal-app .bd-tg > .ic { width: 16px; height: 16px; flex: none; color: var(--ink-4); transition: transform var(--t-fast) var(--ease-out); transform: rotate(90deg); }
.portal-app .is-closed .bd-tg > .ic { transform: rotate(0deg); }
.portal-app .bd-tg-t { min-width: 0; }
.portal-app .bd-tg-t b { display: block; font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.portal-app .bd-dept-h .bd-tg-t b { font-size: 13.5px; }
.portal-app .bd-tg-t small { display: block; font-size: 12px; color: var(--ink-3); }
.portal-app .bd-code { font-size: 12px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.portal-app .bd-name { min-width: 0; }
.portal-app .bd-name b { display: block; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.portal-app .bd-chips { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 3px; }
.portal-app .bd-chips .chip { font-size: 11px; padding: 1px 7px; }
.portal-app .bd-owner { display: flex; justify-content: center; }
.portal-app .bd-bar { min-width: 0; }
.portal-app .bd-avail { text-align: right; line-height: 1.2; }
.portal-app .bd-avail .money { font-size: 15px; display: block; }
.portal-app .bd-avail small { display: block; font-size: 11px; color: var(--ink-3); white-space: nowrap; }
.portal-app .bd-pct { display: flex; justify-content: flex-end; }
.portal-app .bd-pctc { min-width: 52px; justify-content: center; font-variant-numeric: tabular-nums; }
.portal-app .bd-rev .bd-ent-h { background: var(--teal-wash); }

/* ---- 12-month grid (also the version editor) */
.portal-app .bd-grid-wrap { overflow-x: auto; overflow-y: visible; max-width: 100%; border: 1px solid var(--line); border-radius: var(--r-3); background: var(--card); }
.portal-app .bd-grid { border-collapse: separate; border-spacing: 0; min-width: 980px; width: 100%; font-size: 12.5px; }
.portal-app .bd-grid th, .portal-app .bd-grid td { padding: 6px 8px; border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); text-align: right; vertical-align: middle; white-space: nowrap; }
.portal-app .bd-grid thead th { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); background: var(--card-2); position: sticky; top: 0; z-index: 2; }
.portal-app .bd-grid thead th.is-cur { color: var(--cobalt-ink); box-shadow: inset 0 -2px 0 var(--cobalt); }
.portal-app .bd-grid thead th.is-future { color: var(--ink-4); }
.portal-app .bd-grid .bd-first { position: sticky; left: 0; z-index: 1; text-align: left; background: var(--card); min-width: 210px; max-width: 260px; box-shadow: 1px 0 0 var(--line); }
.portal-app .bd-grid thead .bd-first { z-index: 3; background: var(--card-2); }
.portal-app .bd-grid .bd-first b { display: block; font-weight: 600; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.portal-app .bd-grid .bd-first small { display: block; font-size: 11px; color: var(--ink-3); }
.portal-app .bd-grid tbody tr[data-act] { cursor: pointer; }
.portal-app .bd-grid tbody tr[data-act]:hover td, .portal-app .bd-grid tbody tr[data-act]:hover .bd-first, .portal-app .bd-grid tbody tr[data-act]:focus-visible .bd-first { filter: brightness(0.97); }
:root[data-theme="dark"] .portal-app .bd-grid tbody tr[data-act]:hover td, :root[data-theme="dark"] .portal-app .bd-grid tbody tr[data-act]:hover .bd-first { filter: brightness(1.15); }
.portal-app .bd-gdept th { background: var(--bg-2); color: var(--ink-3); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; font-weight: 700; padding: 5px 8px; }
.portal-app .bd-gdept td { background: var(--bg-2); }
.portal-app .bd-c b { display: block; font-size: 12.5px; }
.portal-app .bd-c small { display: block; font-size: 10.5px; color: var(--ink-3); }
.portal-app .bd-h0 { background: var(--grid-wash); }
.portal-app .bd-h1 { background: var(--amber-wash); }
.portal-app .bd-h1 b { color: var(--amber-ink); }
.portal-app .bd-h2 { background: var(--brick-wash); }
.portal-app .bd-h2 b { color: var(--brick-ink); }
.portal-app .bd-hz { background: transparent; }
.portal-app .bd-hz b { color: var(--ink-4); }
.portal-app .bd-c.is-future { opacity: .55; }
.portal-app .bd-c.is-cur { box-shadow: inset 2px 0 0 var(--cobalt), inset -2px 0 0 var(--cobalt); opacity: 1; }
.portal-app .bd-fy { background: var(--card-2); font-weight: 600; }
.portal-app .bd-gtot th, .portal-app .bd-gtot td { background: var(--card-2); border-top: 2px solid var(--line-2); font-weight: 700; position: sticky; bottom: 0; }
.portal-app .bd-gtot .bd-first { z-index: 2; }
.portal-app .bd-tc { opacity: 1; }
.portal-app .bd-key { display: inline-block; width: 14px; height: 14px; border-radius: 4px; border: 1px solid var(--line-2); vertical-align: -2px; margin: 0 2px 0 8px; }
.portal-app .bd-key.is-future { background: var(--bg-3); opacity: .6; }
.portal-app .bd-key.is-cur { box-shadow: inset 2px 0 0 var(--cobalt), inset -2px 0 0 var(--cobalt); background: var(--card); }

/* ---- versions */
.portal-app .bd-vers tr.is-on td { background: var(--grid-wash); }
.portal-app .bd-vers td { vertical-align: middle; }
.portal-app .bd-editor { scroll-margin-top: 120px; }
.portal-app .bd-editor .card-head h3 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.portal-app .bd-ed { min-width: 1240px; }
.portal-app .bd-ed td { padding: 4px 6px; }
.portal-app .bd-ed .bd-ro { background: var(--bg-2); color: var(--ink-3); }
.portal-app .bd-ed td.is-cur { box-shadow: inset 2px 0 0 var(--cobalt), inset -2px 0 0 var(--cobalt); }
.portal-app .bd-in { width: 112px; padding: 6px 8px; font-size: 12.5px; text-align: right; font-variant-numeric: tabular-nums; min-height: 0; height: 32px; }
.portal-app .bd-in.is-bad { border-color: var(--brick); background: var(--brick-wash); }
.portal-app .bd-lnk { border: none; background: transparent; padding: 0; font: inherit; color: var(--ink); cursor: pointer; text-align: left; max-width: 100%; }
.portal-app .bd-lnk:hover b { color: var(--grid-ink); text-decoration: underline; }
.portal-app .bd-lnk b { font-weight: 600; }
.portal-app .bd-pctcell { text-align: left; }
.portal-app .bd-pctw { display: inline-flex; gap: 4px; align-items: center; }
.portal-app .bd-pcti { width: 68px; padding: 6px 8px; font-size: 12.5px; min-height: 0; height: 32px; }
.portal-app .bd-ed-foot { margin-top: 16px; }
.portal-app .bd-ed-foot h4 { margin: 0 0 8px; }
.portal-app .bd-hist li b { text-transform: capitalize; }
.portal-app .bd-diff-pick { gap: 12px; margin-bottom: 12px; }
.portal-app .bd-difflist { margin: 10px 0 0; padding-left: 18px; font-size: 13px; }
.portal-app .bd-difflist li { margin: 2px 0; }
.portal-app .delta.good { color: var(--grid-ink); } .portal-app .delta.bad { color: var(--brick-ink); }

/* ---- virements */
.portal-app .bd-arrow { color: var(--ink-4); display: flex; padding: 2px 0; }
.portal-app .bd-arrow .ic { width: 14px; height: 14px; transform: rotate(90deg); }
.portal-app .bd-sugg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.portal-app .bd-sugg-i { border: 1px solid var(--line); border-radius: var(--r-2); padding: 12px 14px; background: var(--plum-wash); display: flex; flex-direction: column; gap: 6px; }
.portal-app .bd-sugg-i p { margin: 0; }
.portal-app .bd-sugg-i .btn { align-self: flex-start; margin-top: 4px; }
.portal-app .bd-sugg-i .ic { width: 14px; height: 14px; }

/* ---- excel round-trip */
.portal-app .bd-xl-list { margin: 0; padding-left: 18px; font-size: 13.5px; line-height: 1.55; color: var(--ink-2); }
.portal-app .bd-xl-list li { margin: 6px 0; }
.portal-app .bd-import { width: 100%; min-height: 150px; font-size: 12.5px; line-height: 1.5; resize: vertical; white-space: pre; overflow: auto; }
.portal-app .bd-imp-sum { display: flex; flex-direction: column; gap: 12px; margin-top: 14px; }
.portal-app .bd-imp-act { margin-top: 4px; }

/* ---- responsive */
@media (max-width: 1100px) {
  .portal-app .bd-row { grid-template-columns: 72px minmax(0, 1fr) 30px 160px 130px 60px; }
  .portal-app .bd-ent-h, .portal-app .bd-dept-h { grid-template-columns: minmax(0, 1fr) 30px 160px 130px 60px; }
}
@media (max-width: 760px) {
  .portal-app .bd-toolbar .search { flex-basis: 100%; }
  .portal-app .bd-row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name avail" "bar bar"; gap: 6px 10px; padding: 10px 12px; }
  .portal-app .bd-row .bd-code, .portal-app .bd-row .bd-owner, .portal-app .bd-row .bd-pct { display: none; }
  .portal-app .bd-row .bd-name { grid-area: name; } .portal-app .bd-row .bd-avail { grid-area: avail; } .portal-app .bd-row .bd-bar { grid-area: bar; }
  .portal-app .bd-ent-h, .portal-app .bd-dept-h { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "t avail" "bar bar"; gap: 6px 10px; padding-left: 12px; padding-right: 12px; }
  .portal-app .bd-ent-h .bd-owner, .portal-app .bd-dept-h .bd-owner, .portal-app .bd-ent-h .bd-pct, .portal-app .bd-dept-h .bd-pct { display: none; }
  .portal-app .bd-ent-h .bd-tg, .portal-app .bd-dept-h .bd-tg { grid-area: t; } .portal-app .bd-ent-h .bd-avail, .portal-app .bd-dept-h .bd-avail { grid-area: avail; } .portal-app .bd-ent-h .bd-bar, .portal-app .bd-dept-h .bd-bar { grid-area: bar; }
  .portal-app .bd-grid .bd-first { min-width: 150px; max-width: 170px; }
  .portal-app .bd-grid { min-width: 900px; }
  .portal-app .bd-diff-pick { grid-template-columns: 1fr; }
  .portal-app .bd-xl { grid-template-columns: 1fr; }
}
