/* BUDGETGRID — Intelligence plane (.portal-app .ai-*) · plum is the AI hue */

/* ---- ask your budget */
.portal-app .ai-ask { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 18px; align-items: start; }
.portal-app .ai-chat { display: flex; flex-direction: column; padding: 0; overflow: hidden; min-height: 520px; }
.portal-app .ai-log { flex: 1; overflow-y: auto; padding: 20px; display: flex; flex-direction: column; gap: 14px; max-height: calc(100vh - 340px); min-height: 320px; scroll-behavior: smooth; }
.portal-app .ai-msg { display: flex; gap: 10px; align-items: flex-start; }
.portal-app .ai-msg-q { flex-direction: row-reverse; }
.portal-app .ai-msg-who { flex: none; }
.portal-app .ai-who-ai { width: 28px; height: 28px; border-radius: 50%; background: var(--plum); color: var(--on-fill); display: grid; place-items: center; flex: none; }
.portal-app .ai-who-ai .ic { width: 16px; height: 16px; }
.portal-app .ai-bubble { max-width: min(760px, 90%); padding: 10px 14px; border-radius: var(--r-3); background: var(--ink); color: var(--inverse); font-weight: 600; animation: popIn .3s var(--ease-spring) both; border-bottom-right-radius: 6px; }
.portal-app .ai-bubble-a { background: var(--plum-wash); color: var(--ink); font-weight: 400; border-bottom-left-radius: 6px; border-bottom-right-radius: var(--r-3); width: 100%; min-width: 0; }
.portal-app .ai-bubble-a p { margin: 0 0 10px; font-size: 14.5px; line-height: 1.6; }
.portal-app .ai-bubble-a .chips-row { margin-bottom: 8px; }
.portal-app .ai-bubble-a button.chip { cursor: pointer; border: 1px solid transparent; font: inherit; font-size: 12px; font-weight: 700; transition: border-color var(--t-fast), transform var(--t-fast); }
.portal-app .ai-bubble-a button.chip:hover { border-color: var(--plum); transform: translateY(-1px); }
.portal-app .ai-foot { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 8px; font-size: 12px; color: var(--ink-3); }
.portal-app .ai-explain { margin-top: 8px; border-top: 1px dashed var(--line-2); padding-top: 6px; font-size: 13px; }
.portal-app .ai-explain summary { cursor: pointer; display: inline-flex; align-items: center; gap: 6px; font-weight: 700; color: var(--plum-ink); list-style: none; padding: 2px 0; }
.portal-app .ai-explain summary::-webkit-details-marker { display: none; }
.portal-app .ai-explain summary .ic { width: 15px; height: 15px; }
.portal-app .ai-explain dl { display: grid; grid-template-columns: 118px minmax(0, 1fr); gap: 4px 10px; margin: 8px 0 0; }
.portal-app .ai-explain dt { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; font-weight: 700; color: var(--ink-3); }
.portal-app .ai-explain dd { margin: 0; color: var(--ink-2); }
.portal-app .ai-explain p { margin: 6px 0 0; color: var(--ink-2); }
.portal-app .ai-welcome { margin: auto; text-align: center; max-width: 520px; padding: 20px 0; }
.portal-app .ai-welcome-ic { width: 44px; height: 44px; margin: 0 auto 12px; animation: float 5s ease-in-out infinite; }
.portal-app .ai-welcome-ic .ic { width: 24px; height: 24px; }
.portal-app .ai-welcome h3 { font-size: 24px; }
.portal-app .ai-welcome p { color: var(--ink-2); }
.portal-app .ai-sugg { display: flex; gap: 6px; flex-wrap: wrap; padding: 10px 20px; border-top: 1px solid var(--line); background: var(--card-2); }
.portal-app .ai-sugg .chip { cursor: pointer; border: 1px solid var(--line); background: var(--card); font: inherit; font-size: 12px; font-weight: 600; color: var(--ink-2); transition: border-color var(--t-fast), color var(--t-fast); }
.portal-app .ai-sugg .chip:hover { border-color: var(--plum); color: var(--plum-ink); }
.portal-app .ai-sugg .chip.is-pidgin { border-style: dashed; }
.portal-app .ai-sugg .chip.is-pidgin .ic { color: var(--plum-ink); }
.portal-app .ai-ask-form { display: flex; gap: 8px; padding: 12px 20px 16px; border-top: 1px solid var(--line); align-items: center; }
.portal-app .ai-ask-form .input { flex: 1; min-width: 0; }
.portal-app .ai-mic { flex: none; border: 1px solid var(--line-2); color: var(--plum-ink); width: 40px; height: 40px; }
.portal-app .ai-ask-side { display: flex; flex-direction: column; gap: 14px; }
.portal-app .ai-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.portal-app .ai-steps li { display: flex; gap: 10px; font-size: 13px; color: var(--ink-2); align-items: flex-start; }
.portal-app .ai-steps i { flex: none; width: 22px; height: 22px; border-radius: 50%; background: var(--plum-wash); color: var(--plum-ink); font-style: normal; font-weight: 800; font-size: 12px; display: grid; place-items: center; }
.portal-app .ai-steps-plain .ic { flex: none; width: 18px; height: 18px; color: var(--plum-ink); margin-top: 1px; }

/* ---- forecasts */
.portal-app .ai-fc { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.portal-app .ai-fc .table-wrap { max-height: 680px; overflow: auto; }
.portal-app .ai-fc .table td { vertical-align: middle; }
.portal-app .ai-fc .table td:nth-child(3) { min-width: 110px; }
.portal-app .ai-fc tr.is-sel td { background: var(--cobalt-wash); }
.portal-app .ai-fc tr[data-act]:focus-visible { outline-offset: -2px; }
.portal-app .ai-fc .spark { display: inline-block; vertical-align: middle; }
.portal-app .ai-fc-detail { position: sticky; top: 0; }
.portal-app .ai-fc-detail .card-head h3 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.portal-app .ai-fc-nums { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin: 8px 0 12px; }
.portal-app .ai-fc-nums > div { background: var(--card-2); border: 1px solid var(--line); border-radius: var(--r-2); padding: 8px 10px; min-width: 0; }
.portal-app .ai-fc-nums small { display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); font-weight: 700; }
.portal-app .ai-fc-nums b { font-size: 16px; display: block; overflow-wrap: anywhere; }
.portal-app .ai-legend { display: flex; gap: 12px; flex-wrap: wrap; font-size: 11.5px; color: var(--ink-3); margin: 6px 0 12px; }
.portal-app .ai-legend span { display: inline-flex; align-items: center; gap: 5px; }
.portal-app .ai-legend i { width: 14px; height: 3px; border-radius: 2px; display: inline-block; }
.portal-app .ai-legend .l-line { background: var(--ink); }
.portal-app .ai-legend .l-band { background: var(--cobalt); opacity: .3; height: 8px; }
.portal-app .ai-legend .l-bud { background: repeating-linear-gradient(90deg, var(--grid) 0 4px, transparent 4px 8px); }
.portal-app .ai-legend .l-now { background: var(--amber); }
.portal-app .ai-fc-detail h4 { margin: 14px 0 6px; }
.portal-app .ai-why { margin: 0 0 12px; padding-left: 18px; font-size: 13px; line-height: 1.55; color: var(--ink-2); }
.portal-app .ai-why li { margin-bottom: 5px; }
.portal-app .ai-why .spark { vertical-align: middle; display: inline-block; }

/* ---- anomalies */
.portal-app .ai-an-strip { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; border-left: 4px solid var(--plum); }
.portal-app .ai-an-strip p { margin: 0; flex: 1; min-width: 240px; font-size: 13.5px; color: var(--ink-2); }
.portal-app .ai-an-strip p .ic { color: var(--plum-ink); }
.portal-app .ai-sev { display: flex; flex-direction: column; align-items: center; min-width: 58px; }
.portal-app .ai-sev b { font-family: var(--font-display); font-size: 28px; line-height: 1; }
.portal-app .ai-sev small { font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em; font-weight: 700; color: var(--ink-3); }
.portal-app .ai-sev-high b { color: var(--brick-ink); }
.portal-app .ai-sev-medium b { color: var(--amber-ink); }
.portal-app .ai-sev-low b { color: var(--cobalt-ink); }
.portal-app .ai-an-gh { display: flex; align-items: center; gap: 8px; margin: 4px 0 10px; color: var(--plum-ink); }
.portal-app .ai-an-gh h3 { margin: 0; color: var(--ink); }
.portal-app .ai-an-gh .ic { width: 20px; height: 20px; }
.portal-app .ai-an-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 14px; }
.portal-app .ai-an { background: var(--card); border: 1px solid var(--line); border-radius: var(--r-3); padding: 16px; box-shadow: var(--shadow-1); display: flex; flex-direction: column; gap: 8px; min-width: 0; transition: opacity var(--t-base), filter var(--t-base); }
.portal-app .ai-an.is-reviewed { opacity: .55; filter: grayscale(.7); }
.portal-app .ai-an.is-reviewed:hover, .portal-app .ai-an.is-reviewed:focus-within { opacity: .95; filter: none; }
.portal-app .ai-an h4 { margin: 0; font-size: 15px; }
.portal-app .ai-an p { margin: 0; color: var(--ink-2); }
.portal-app .ai-an-top { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.portal-app .ai-an-rev { margin-left: auto; }
.portal-app .ai-an .ai-explain { margin-top: 2px; }
.portal-app .ai-an-act { font-size: 13px; background: var(--plum-wash); padding: 8px 10px; border-radius: var(--r-1); color: var(--ink); }
.portal-app .ai-an-btns { gap: 6px; margin-top: auto; }
.portal-app .ai-an-btns button.chip { cursor: pointer; border: 1px solid var(--line); background: var(--card); font: inherit; font-family: var(--font-mono); font-size: 11.5px; font-weight: 600; }
.portal-app .ai-an-btns button.chip:hover { border-color: var(--plum); color: var(--plum-ink); }

/* ---- board pack */
.portal-app .ai-pack { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 18px; align-items: start; }
.portal-app .ai-ent { width: 260px; font-weight: 700; }
.portal-app .ai-doc { max-width: 880px; min-width: 0; }
.portal-app .ai-doc-kicker { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; text-transform: uppercase; letter-spacing: .08em; font-weight: 800; color: var(--plum-ink); margin-bottom: 8px; }
.portal-app .ai-doc-h h2 { font-size: clamp(24px, 3vw, 34px); margin: 0 0 6px; }
.portal-app .ai-doc-kpis { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; margin: 18px 0 22px; }
.portal-app .ai-doc-kpi { padding: 10px 12px; border-radius: var(--r-2); border: 1px solid var(--line); background: var(--card-2); min-width: 0; }
.portal-app .ai-doc-kpi small { display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: .05em; font-weight: 700; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.portal-app .ai-doc-kpi b { font-family: var(--font-display); font-size: 20px; font-variant-numeric: tabular-nums; }
.portal-app .ai-doc-kpi.is-ok { border-color: var(--grid); background: var(--grid-wash); }
.portal-app .ai-doc-kpi.is-ok b { color: var(--grid-ink); }
.portal-app .ai-doc-kpi.is-bad { border-color: var(--brick); background: var(--brick-wash); }
.portal-app .ai-doc-kpi.is-bad b { color: var(--brick-ink); }
.portal-app .ai-doc-s { padding: 16px 0; border-top: 1px solid var(--line); }
.portal-app .ai-doc-s h3 { font-family: var(--font-display); font-size: 21px; display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.portal-app .ai-doc-n { width: 26px; height: 26px; border-radius: 50%; background: var(--plum); color: var(--on-fill); font-family: var(--font-ui); font-size: 12px; font-weight: 800; display: grid; place-items: center; flex: none; }
.portal-app .ai-doc-s p { margin: 0; font-size: 15px; line-height: 1.7; color: var(--ink-2); max-width: 74ch; }
.portal-app .ai-doc-f { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); font-size: 12px; color: var(--ink-3); display: flex; gap: 8px; align-items: flex-start; }
.portal-app .ai-doc-f .ic { flex: none; color: var(--plum-ink); margin-top: 2px; }
.portal-app .ai-pack-side { position: sticky; top: 0; display: flex; flex-direction: column; gap: 14px; }
.portal-app .ai-dec { padding: 10px 0; border-bottom: 1px solid var(--line); }
.portal-app .ai-dec:last-child { border-bottom: none; padding-bottom: 0; }
.portal-app .ai-dec b { display: block; }
.portal-app .ai-dec p { margin: 2px 0 8px; }

/* ---- bankability */
.portal-app .ai-bank { display: grid; grid-template-columns: 340px minmax(0, 1fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.portal-app .ai-bank-score { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 12px; background: linear-gradient(160deg, var(--card), var(--plum-wash)); }
.portal-app .ai-bank-ring .ring-l { display: flex; flex-direction: column; align-items: center; line-height: 1; }
.portal-app .ai-bank-n { font-size: 46px; }
.portal-app .ai-bank-ring small { font-size: 11px; color: var(--ink-3); font-family: var(--font-ui); font-weight: 700; margin-top: 4px; text-transform: uppercase; letter-spacing: .05em; }
.portal-app .ai-bank-ring .ring-fg { animation: ringIn 1.2s var(--ease-out) both; }
@keyframes ringIn { from { stroke-dashoffset: 999; } }
.portal-app .ai-bank-grade h3 { margin: 8px 0 4px; }
.portal-app .ai-bank-grade p { margin: 0; }
.portal-app .ai-bank-note { max-width: 260px; }
.portal-app .ai-factor { padding: 10px 0; border-bottom: 1px solid var(--line); }
.portal-app .ai-factor:last-child { border-bottom: none; padding-bottom: 0; }
.portal-app .ai-factor .meter { margin: 6px 0 4px; }
.portal-app .ai-pack-list { list-style: none; margin: 0 0 12px; padding: 0; }
.portal-app .ai-pack-list li { display: flex; gap: 8px; align-items: center; padding: 8px 0; border-bottom: 1px solid var(--line); font-size: 13.5px; }
.portal-app .ai-pack-list li:last-child { border-bottom: none; }
.portal-app .ai-pack-list .ic { color: var(--teal-ink); flex: none; }
.portal-app .ai-scope label { align-items: flex-start; gap: 8px; flex-wrap: nowrap; }
.portal-app .ai-scope input, .portal-app .ai-consent input { margin-top: 3px; flex: none; }
.portal-app .ai-consent { align-items: flex-start; gap: 8px; flex-wrap: nowrap; padding: 10px 12px; background: var(--plum-wash); border-radius: var(--r-2); font-weight: 600; cursor: pointer; }

/* ---- nudges */
.portal-app .ai-nudges { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 14px; }
.portal-app .ai-nudge { background: var(--card); border: 1px solid var(--line); border-radius: var(--r-3); padding: 16px; box-shadow: var(--shadow-1); display: flex; flex-direction: column; gap: 8px; min-width: 0; transition: transform var(--t-fast) var(--ease-out), box-shadow var(--t-fast); }
.portal-app .ai-nudge:hover { transform: translateY(-2px); box-shadow: var(--shadow-2); }
.portal-app .ai-nudge-ic { width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; background: var(--plum-wash); color: var(--plum-ink); flex: none; }
.portal-app .ai-nudge-ic .ic { width: 19px; height: 19px; }
.portal-app .ai-nudge h4 { margin: 0; font-size: 15px; }
.portal-app .ai-nudge p { margin: 0; color: var(--ink-2); }
.portal-app .ai-nudge-pos { display: flex; flex-direction: column; gap: 4px; margin-top: 2px; }
.portal-app .ai-nudge > .row:last-child { margin-top: auto; }
.portal-app .ai-bench-wrap { margin-top: 6px; }
.portal-app .ai-bench .card { display: flex; flex-direction: column; gap: 8px; }
.portal-app .ai-bench h4 { margin: 0; display: flex; gap: 8px; align-items: center; }
.portal-app .ai-bench h4 .ic { color: var(--plum-ink); }
.portal-app .ai-bench p { margin: 0; font-size: 13px; color: var(--ink-2); flex: 1; }
.portal-app .ai-bench .btn { max-width: 100%; white-space: normal; text-align: left; }

/* ---- responsive */
@media (max-width: 1200px) {
  .portal-app .ai-bank { grid-template-columns: 300px minmax(0, 1fr); }
  .portal-app .ai-bank > .card:last-child { grid-column: 1 / -1; }
  .portal-app .ai-doc-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .portal-app .ai-fc { grid-template-columns: 1fr; }
  .portal-app .ai-fc-detail { position: static; }
}
@media (max-width: 900px) {
  .portal-app .ai-ask, .portal-app .ai-pack, .portal-app .ai-bank { grid-template-columns: 1fr; }
  .portal-app .ai-pack-side { position: static; }
  .portal-app .ai-log { max-height: 52vh; min-height: 240px; }
  .portal-app .ai-chat { min-height: 0; }
  .portal-app .ai-bubble { max-width: 100%; }
  .portal-app .ai-explain dl { grid-template-columns: 1fr; gap: 2px; }
  .portal-app .ai-fc-nums { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .portal-app .ai-ent { width: 100%; }
  .portal-app .ai-an-cards, .portal-app .ai-nudges { grid-template-columns: 1fr; }
  .portal-app .ai-doc-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .portal-app .ai-doc-s p { max-width: none; }
  .portal-app .ai-an-strip { gap: 12px; }
  .portal-app .ai-sugg { padding: 10px 14px; }
  .portal-app .ai-ask-form { padding: 10px 14px 14px; }
  .portal-app .ai-log { padding: 14px; }
  .portal-app .ai-bank-score { background: linear-gradient(135deg, var(--card), var(--plum-wash)); }
}

/* board-pack KPI tiles: let the label wrap rather than truncate the metric's name */
.portal-app .ai-doc-kpis .kpi-l { white-space: normal; overflow: visible; text-overflow: clip; line-height: 1.25; }
