/*
 * style.css — Quadratura (The Hub Srls)
 * Design system estratto dal mockup approvato: estetica da registro
 * contabile (carta a righe verde, numeri in monospace, codice colore
 * inchiostro verde/ambra/rosso/viola per abbinato/da verificare/
 * anomalia/nota di credito).
 */

:root{
  --ink:#1F2C24; --ink-soft:#5C6A5F;
  --paper:#F6F7F1; --panel:#FFFFFF; --stripe:#EDF1E7; --line:#D3DBCB;
  --forest:#2F5D42; --forest-soft:#E3ECE3;
  --amber:#A9762F; --amber-soft:#F4EBDA;
  --rust:#A0402C; --rust-soft:#F5E4DD;
  --neutral:#8A9788; --neutral-soft:#EFEFEB;
  --credit:#6B4E8E; --credit-soft:#ECE5F1;
  --sidebar:#182019; --sidebar-soft:#9FB0A2;
  --radius:10px;
  --shadow:0 1px 2px rgba(31,44,36,0.06), 0 4px 14px rgba(31,44,36,0.05);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{background:var(--paper); color:var(--ink); font-family:'Inter',system-ui,sans-serif; font-size:14px; line-height:1.5; -webkit-font-smoothing:antialiased;}
h1,h2,h3{font-family:'Fraunces',serif; font-weight:600; margin:0; letter-spacing:-0.01em;}
.mono{font-family:'IBM Plex Mono',monospace;}
a{color:inherit;}

/* ---------- layout ---------- */
.app{display:flex; min-height:100vh;}
.sidebar{width:230px; flex-shrink:0; background:var(--sidebar); color:var(--sidebar-soft); padding:22px 14px; display:flex; flex-direction:column; position:sticky; top:0; height:100vh; overflow-y:auto;}
.brand{display:flex; align-items:center; gap:9px; padding:0 8px 20px 8px; color:#F2F4EF;}
.brand-mark{width:26px; height:26px; border-radius:6px; background:linear-gradient(155deg,#3C6E4F,#20402C); display:flex; align-items:center; justify-content:center; font-family:'Fraunces',serif; font-weight:700; font-size:14px; color:#F2F4EF; flex-shrink:0;}
.brand-name{font-family:'Fraunces',serif; font-size:17px; font-weight:600;}
.brand-sub{font-size:10.5px; color:#7C8C7E; letter-spacing:.04em; text-transform:uppercase; margin-top:-2px;}
nav{display:flex; flex-direction:column; gap:2px; margin-top:6px;}
.navlink{display:flex; align-items:center; gap:11px; padding:9px 10px; border-radius:7px; font-size:13.5px; font-weight:500; color:var(--sidebar-soft); cursor:pointer; user-select:none; border:1px solid transparent; text-decoration:none;}
.navlink svg{width:16px; height:16px; flex-shrink:0; opacity:.85;}
.navlink:hover{background:rgba(255,255,255,0.05); color:#EDEFE9;}
.navlink.active{background:rgba(255,255,255,0.09); color:#F4F5F0; border-color:rgba(255,255,255,0.08);}
.navlink .count{margin-left:auto; font-family:'IBM Plex Mono',monospace; font-size:10.5px; background:rgba(255,255,255,0.10); padding:1px 6px; border-radius:20px; color:#D9E0D6;}
.navlink.warn .count{background:rgba(200,140,50,0.35); color:#F2D9AE;}
.navlink.danger .count{background:rgba(180,70,50,0.35); color:#F4C6BA;}
.navlink.plum .count{background:rgba(107,78,142,0.35); color:#DCCBEE;}
.sidebar-foot{margin-top:auto; padding-top:14px; border-top:1px solid rgba(255,255,255,0.08); font-size:11.5px; color:#71816F;}
main{flex:1; min-width:0; padding:30px 38px 60px 38px;}
.page-head{display:flex; align-items:flex-end; justify-content:space-between; margin-bottom:22px; gap:20px; flex-wrap:wrap;}
.page-head h1{font-size:26px;}
.page-head .sub{color:var(--ink-soft); font-size:13.5px; margin-top:4px;}
.disclaimer{font-size:11.5px; color:var(--neutral); margin:6px 0 22px 0; font-style:italic;}

/* ---------- bottoni ---------- */
.btn{display:inline-flex; align-items:center; gap:7px; background:var(--ink); color:#F4F5F0; border:none; padding:9px 15px; border-radius:7px; font-size:13px; font-weight:600; cursor:pointer; font-family:'Inter',sans-serif; text-decoration:none;}
.btn.secondary{background:var(--panel); color:var(--ink); border:1px solid var(--line);}
.btn.forest{background:var(--forest);}
.btn.plum{background:var(--credit);}
.btn.rust{background:var(--rust);}
.btn svg{width:14px;height:14px;}
.btn.small{padding:6px 12px; font-size:12px;}
.btn:disabled{opacity:.5; cursor:not-allowed;}

/* ---------- kpi ---------- */
.kpi-row{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:26px;}
.kpi{background:var(--panel); border:1px solid var(--line); border-radius:var(--radius); padding:16px 17px; box-shadow:var(--shadow);}
.kpi .lbl{font-size:11.5px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.05em; font-weight:600;}
.kpi .val{font-family:'Fraunces',serif; font-size:25px; margin-top:6px; font-weight:600;}
.kpi .sum{font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:var(--ink-soft); margin-top:2px;}
.kpi.forest{border-left:3px solid var(--forest);} .kpi.amber{border-left:3px solid var(--amber);}
.kpi.rust{border-left:3px solid var(--rust);} .kpi.neutral{border-left:3px solid var(--neutral);}
.kpi.credit{border-left:3px solid var(--credit);}

/* ---------- pannelli e tabelle ---------- */
.panel{background:var(--panel); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); overflow:hidden;}
.panel-head{padding:14px 18px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; gap:12px;}
.panel-head h3{font-size:15.5px;}
.panel-head .hint{font-size:12px; color:var(--ink-soft); text-align:right;}
table{width:100%; border-collapse:collapse; font-size:13px;}
thead th{text-align:left; font-size:10.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink-soft); font-weight:600; padding:9px 16px; border-bottom:1px solid var(--line); background:#FBFBF8;}
tbody td{padding:10px 16px; border-bottom:1px solid #EEF1EA; vertical-align:middle;}
tbody tr:nth-child(even){background:var(--stripe);}
tbody tr:hover{background:#E7EEE3;}
td.num{font-family:'IBM Plex Mono',monospace; text-align:right; white-space:nowrap;}
td.num.pos{color:var(--forest);}
td.num.credit{color:var(--credit);}
.cell-sub{color:var(--ink-soft); font-size:11.5px; margin-top:1px;}

/* ---------- badge ---------- */
.badge{display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:600; padding:3px 9px; border-radius:20px; white-space:nowrap;}
.badge.forest{background:var(--forest-soft); color:var(--forest);}
.badge.amber{background:var(--amber-soft); color:var(--amber);}
.badge.rust{background:var(--rust-soft); color:var(--rust);}
.badge.neutral{background:var(--neutral-soft); color:var(--neutral);}
.badge.credit{background:var(--credit-soft); color:var(--credit);}
.badge.dot::before{content:''; width:5px; height:5px; border-radius:50%; background:currentColor;}

/* ---------- controlli piccoli ---------- */
.icon-btn{width:26px; height:26px; border-radius:6px; border:1px solid var(--line); background:var(--panel); display:inline-flex; align-items:center; justify-content:center; cursor:pointer; color:var(--ink-soft);}
.icon-btn svg{width:13px; height:13px;}
.icon-btn:hover{background:var(--stripe); color:var(--ink);}
.icon-btn.danger:hover{background:var(--rust-soft); color:var(--rust); border-color:var(--rust-soft);}
.row-actions{display:flex; gap:6px; justify-content:flex-end;}
.filters{display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin-bottom:16px;}
.filters input, .filters select{font-family:'Inter',sans-serif; font-size:12.5px; padding:8px 11px; border:1px solid var(--line); border-radius:7px; background:var(--panel); color:var(--ink);}
.filters .search{flex:1; min-width:180px;}
.tabs{display:flex; gap:4px; background:var(--stripe); padding:3px; border-radius:8px; width:fit-content; margin-bottom:16px;}
.tab{padding:7px 15px; border-radius:6px; font-size:12.5px; font-weight:600; cursor:pointer; color:var(--ink-soft);}
.tab.active{background:var(--panel); color:var(--ink); box-shadow:var(--shadow);}

/* ---------- import ---------- */
.import-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:16px; margin-bottom:24px;}
.dropzone{background:var(--panel); border:1.5px dashed var(--line); border-radius:var(--radius); padding:26px 18px; text-align:center; box-shadow:var(--shadow);}
.dropzone svg{width:26px; height:26px; color:var(--ink-soft); margin-bottom:10px;}
.dropzone h3{font-size:14.5px; margin-bottom:5px;}
.dropzone p{font-size:12px; color:var(--ink-soft); margin:0 0 14px 0;}
.dropzone .btn{width:100%; justify-content:center;}
.dropzone .filetypes{font-size:10.5px; color:#8A9788; margin-top:10px; letter-spacing:.02em; line-height:1.5;}
.import-result{padding:18px;}
.diff-strip{display:flex; gap:10px; margin-bottom:16px;}
.diff-chip{flex:1; border-radius:8px; padding:11px 14px; border:1px solid var(--line);}
.diff-chip .n{font-family:'IBM Plex Mono',monospace; font-size:19px; font-weight:600;}
.diff-chip .l{font-size:11px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.04em; margin-top:2px;}
.diff-chip.new{background:var(--forest-soft);} .diff-chip.new .n{color:var(--forest);}
.diff-chip.dup{background:#F0F1EC;} .diff-chip.dup .n{color:var(--ink-soft);}
.diff-chip.err{background:var(--rust-soft);} .diff-chip.err .n{color:var(--rust);}
.dedupe-note{font-size:12px; color:var(--ink-soft); background:#FBFBF8; border:1px solid var(--line); border-radius:7px; padding:10px 13px; margin-bottom:16px; display:flex; gap:8px; align-items:flex-start;}
.dedupe-note svg{width:14px; height:14px; flex-shrink:0; margin-top:1px; color:var(--amber);}
.dedupe-note b{color:var(--ink);}

/* ---------- match-card (riconciliazione, storni note di credito) ---------- */
.match-card{border:1px solid var(--line); border-radius:var(--radius); background:var(--panel); box-shadow:var(--shadow); margin-bottom:12px; overflow:hidden;}
.match-body{display:grid; grid-template-columns:1fr 118px 1fr; align-items:stretch;}
.match-side{padding:14px 18px;}
.match-side .kind{font-size:10px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-soft); font-weight:600; margin-bottom:5px;}
.match-side .title{font-size:13.5px; font-weight:600;}
.match-side .meta{font-size:12px; color:var(--ink-soft); margin-top:2px;}
.match-side .amt{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:600; margin-top:8px;}
.match-side.bank .amt{color:var(--forest);}
.match-side.invoice{border-left:1px dashed var(--line);}
.stitch{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:4px; background:#FBFBF8; position:relative; padding:8px 4px;}
.stitch::before, .stitch::after{content:''; width:1px; flex:1; border-left:1.5px dashed var(--line);}
.stitch .score{font-family:'IBM Plex Mono',monospace; font-size:19px; font-weight:700; line-height:1;}
.stitch .score-lbl{font-size:9px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.05em;}
.stitch .tier{font-size:10px; font-weight:700; padding:2px 8px; border-radius:20px; margin-top:2px;}
.stitch.alta .score, .stitch.alta .tier{color:var(--forest);} .stitch.alta .tier{background:var(--forest-soft);}
.stitch.media .score, .stitch.media .tier{color:var(--amber);} .stitch.media .tier{background:var(--amber-soft);}
.stitch.storno .score, .stitch.storno .tier{color:var(--credit);} .stitch.storno .tier{background:var(--credit-soft);}
.stitch.bassa .score, .stitch.bassa .tier{color:var(--neutral);} .stitch.bassa .tier{background:var(--neutral-soft);}
.score-chips{display:flex; gap:5px; flex-wrap:wrap; margin-top:9px;}
.score-chip{font-family:'IBM Plex Mono',monospace; font-size:10px; padding:2px 7px; border-radius:5px; background:var(--forest-soft); color:var(--forest); white-space:nowrap;}
.score-chip.miss{background:var(--neutral-soft); color:var(--neutral); text-decoration:line-through;}
.match-foot{display:flex; align-items:center; justify-content:space-between; padding:9px 18px; background:#FBFBF8; border-top:1px solid var(--line); gap:12px; flex-wrap:wrap;}
.match-foot .delta{font-size:12px; color:var(--ink-soft);}
.match-foot .delta b{font-family:'IBM Plex Mono',monospace; color:var(--ink);}
.match-foot .actions{display:flex; gap:8px;}

/* ---------- abbinamenti confermati ---------- */
.confirmed-row{display:flex; align-items:center; gap:12px; padding:11px 18px; border-bottom:1px solid #EEF1EA;}
.confirmed-row:last-child{border-bottom:none;}
.confirmed-row:nth-child(even){background:var(--stripe);}
.confirmed-row .ok-icon{width:22px; height:22px; border-radius:50%; background:var(--forest-soft); color:var(--forest); display:flex; align-items:center; justify-content:center; flex-shrink:0;}
.confirmed-row .ok-icon svg{width:12px; height:12px;}
.confirmed-row .desc{flex:1; min-width:0; font-size:12.5px;}
.confirmed-row .desc .t{font-weight:600;}
.confirmed-row .desc .s{color:var(--ink-soft); font-size:11.5px; margin-top:1px;}
.confirmed-row .amt{font-family:'IBM Plex Mono',monospace; font-weight:600; white-space:nowrap;}

/* ---------- abbinamento manuale ---------- */
.manual-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px;}
.pick-list{max-height:300px; overflow-y:auto;}
.pick-row{display:flex; align-items:center; gap:11px; padding:10px 16px; border-bottom:1px solid #EEF1EA; font-size:12.5px;}
.pick-row:nth-child(even){background:var(--stripe);}
.pick-row input[type=checkbox]{width:14px; height:14px; accent-color:var(--forest);}
.pick-row .desc{flex:1; min-width:0;}
.pick-row .desc .t{font-weight:600;}
.pick-row .desc .s{color:var(--ink-soft); font-size:11.5px;}
.pick-row .amt{font-family:'IBM Plex Mono',monospace; font-weight:600; white-space:nowrap;}
.quadratura-bar{position:sticky; bottom:16px; margin-top:18px; background:var(--ink); color:#F2F4EF; border-radius:12px; padding:14px 22px; display:flex; align-items:center; gap:26px; box-shadow:0 10px 30px rgba(20,30,22,0.25); flex-wrap:wrap;}
.quadratura-bar .qitem .l{font-size:10px; text-transform:uppercase; letter-spacing:.05em; color:#9FB0A2;}
.quadratura-bar .qitem .v{font-family:'IBM Plex Mono',monospace; font-size:16px; margin-top:2px;}
.quadratura-bar .qitem .v.ok{color:#7FCB9C;}
.quadratura-bar .spacer{flex:1;}

/* ---------- anomalie ---------- */
.anom-card{display:flex; gap:14px; padding:16px 18px; border:1px solid var(--line); border-radius:var(--radius); background:var(--panel); margin-bottom:12px; box-shadow:var(--shadow); align-items:flex-start;}
.anom-card .flag{width:34px; height:34px; border-radius:8px; background:var(--rust-soft); color:var(--rust); display:flex; align-items:center; justify-content:center; flex-shrink:0;}
.anom-card.structural .flag{background:var(--amber-soft); color:var(--amber);}
.anom-card .flag svg{width:17px; height:17px;}
.anom-card .body{flex:1;}
.anom-card .t{font-weight:600; font-size:14.5px; font-family:'Fraunces',serif;}
.anom-card .amt{font-family:'IBM Plex Mono',monospace; font-weight:600; font-size:15px; color:var(--rust); margin-left:14px; white-space:nowrap;}
.anom-card .s{font-size:12.5px; color:var(--ink-soft); margin-top:5px; line-height:1.55;}
.anom-card .breakdown{margin-top:8px; display:flex; gap:6px; flex-wrap:wrap;}
.anom-card .breakdown span{font-family:'IBM Plex Mono',monospace; font-size:10.5px; background:var(--stripe); color:var(--ink-soft); padding:2px 8px; border-radius:5px;}
.anom-card .acts{display:flex; gap:8px; margin-top:12px;}
.resolve-row{display:flex; gap:10px; align-items:center; margin-top:12px; padding-top:12px; border-top:1px solid var(--line); flex-wrap:wrap;}
.resolve-row input[type=text]{flex:1; min-width:200px; font-size:12px; padding:7px 10px; border:1px solid var(--line); border-radius:6px; font-family:'Inter',sans-serif;}
.resolve-row label{font-size:11px; color:var(--ink-soft); display:flex; align-items:center; gap:5px; white-space:nowrap;}
.resolve-row input[type=checkbox]{width:13px; height:13px; accent-color:var(--forest);}
.anom-card.resolved{background:#FBFBF8;}
.anom-card.resolved .t{color:var(--ink-soft);}
.anom-card.resolved .flag{background:var(--forest-soft); color:var(--forest);}
.resolved-note{margin-top:10px; font-size:12px; background:var(--forest-soft); color:var(--forest); padding:9px 12px; border-radius:7px; display:flex; gap:8px; align-items:flex-start; line-height:1.5;}

/* ---------- impostazioni (sola lettura) ---------- */
.settings-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px;}
.field-row{padding:13px 18px; border-bottom:1px solid #EEF1EA; display:flex; align-items:center; justify-content:space-between; gap:14px;}
.field-row:last-child{border-bottom:none;}
.field-row .lab{font-size:13px; font-weight:600;}
.field-row .desc{font-size:11.5px; color:var(--ink-soft); margin-top:2px;}
.field-row input[type=text], .field-row input[type=number]{font-family:'IBM Plex Mono',monospace; font-size:12.5px; padding:7px 10px; border:1px solid var(--line); border-radius:6px; width:90px; text-align:right; background:#F3F4EF; color:var(--ink-soft);}
.switch{width:36px; height:20px; border-radius:20px; background:var(--forest); position:relative; flex-shrink:0; opacity:.55;}
.switch::after{content:''; width:16px; height:16px; border-radius:50%; background:#fff; position:absolute; top:2px; right:2px;}
.switch.off{background:#D8DED2;}
.switch.off::after{right:auto; left:2px;}
.causale-table td{font-size:12.5px;}
.causale-table td.code{font-family:'IBM Plex Mono',monospace; font-weight:600;}
.causale-table .sw{width:32px; height:18px; border-radius:20px; background:var(--forest); position:relative; opacity:.55;}
.causale-table .sw::after{content:''; width:14px; height:14px; border-radius:50%; background:#fff; position:absolute; top:2px; right:2px;}
.causale-table .sw.off{background:#D8DED2;}
.causale-table .sw.off::after{right:auto; left:2px;}
.note-inline{font-size:11.5px; color:var(--ink-soft); padding:12px 18px; border-top:1px solid var(--line); background:#FBFBF8;}
.readonly-banner{display:flex; align-items:center; gap:9px; background:var(--stripe); border:1px solid var(--line); border-radius:8px; padding:11px 16px; font-size:12.5px; color:var(--ink-soft); margin-bottom:18px;}
.readonly-banner svg{width:15px; height:15px; flex-shrink:0; color:var(--ink-soft);}
.readonly-banner code{font-family:'IBM Plex Mono',monospace; background:#E4E8DF; padding:1px 6px; border-radius:4px; color:var(--ink);}

/* ---------- controparti ---------- */
.cp-search{display:flex; gap:8px; margin-bottom:16px;}
.cp-search input{flex:1; font-family:'Inter',sans-serif; font-size:13px; padding:10px 14px; border:1px solid var(--line); border-radius:8px;}
.cp-chip{font-size:11.5px; padding:5px 12px; border-radius:20px; background:var(--stripe); color:var(--ink-soft); cursor:pointer; white-space:nowrap; text-decoration:none; display:inline-block;}
.cp-chip.active{background:var(--ink); color:#F4F5F0;}
.cp-chips{display:flex; gap:6px; margin-bottom:18px; flex-wrap:wrap;}
.cp-header{display:flex; align-items:center; gap:16px; padding:18px; margin-bottom:16px;}
.cp-avatar{width:46px; height:46px; border-radius:10px; background:var(--ink); color:#F4F5F0; display:flex; align-items:center; justify-content:center; font-family:'Fraunces',serif; font-weight:700; font-size:18px; flex-shrink:0;}
.cp-header h2{font-family:'Fraunces',serif; font-size:19px; font-weight:600;}
.cp-header .piva{font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:var(--ink-soft); margin-top:2px;}
.cp-header .badges{margin-left:auto; display:flex; gap:6px;}
.cp-kpi-row{display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin-bottom:18px;}

/* ---------- andamenti / grafici ---------- */
.chart-bars{display:flex; align-items:flex-end; gap:16px; height:150px; padding:0 6px 0 6px; overflow-x:auto;}
.chart-col{display:flex; flex-direction:column; align-items:center; gap:7px; flex-shrink:0; width:36px;}
.bars-pair{display:flex; align-items:flex-end; gap:3px; height:150px;}
.bars-pair .bar{width:14px; border-radius:3px 3px 0 0;}
.bars-pair .bar.entrate{background:var(--forest);}
.bars-pair .bar.uscite{background:var(--rust);}
.chart-col .lbl{font-size:10.5px; color:var(--ink-soft); font-family:'IBM Plex Mono',monospace;}
.chart-legend{display:flex; gap:16px; margin-top:14px; font-size:11.5px; color:var(--ink-soft); align-items:center;}
.chart-legend .sw-dot{display:inline-block; width:8px; height:8px; border-radius:2px; margin-right:5px; vertical-align:middle;}
.chart-totals{display:flex; gap:26px; margin-top:12px; padding-top:12px; border-top:1px solid var(--line);}
.chart-totals .l{font-size:10.5px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.05em;}
.chart-totals .v{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:600; margin-top:2px;}
.rank-row{display:flex; align-items:center; gap:12px; padding:11px 18px; border-bottom:1px solid #EEF1EA;}
.rank-row:nth-child(even){background:var(--stripe);}
.rank-row .name{width:210px; flex-shrink:0; font-size:12.5px; font-weight:600;}
.rank-row .bar-track{flex:1; height:10px; background:var(--stripe); border-radius:5px; overflow:hidden;}
.rank-row .bar-fill{height:100%; border-radius:5px;}
.rank-row .bar-fill.uscita{background:var(--rust);}
.rank-row .bar-fill.entrata{background:var(--forest);}
.rank-row .amt{width:110px; text-align:right; font-family:'IBM Plex Mono',monospace; font-size:12.5px; font-weight:600; flex-shrink:0;}

/* ---------- console SQL e diagnostica ---------- */
.diag-row{display:flex; align-items:center; gap:12px; padding:11px 18px; border-bottom:1px solid #EEF1EA; font-size:13px;}
.diag-row:last-child{border-bottom:none;}
.diag-row:nth-child(even){background:var(--stripe);}
.diag-row .diag-icon{width:20px; height:20px; border-radius:50%; display:flex; align-items:center; justify-content:center; flex-shrink:0;}
.diag-row .diag-icon svg{width:12px; height:12px;}
.diag-row.ok .diag-icon{background:var(--forest-soft); color:var(--forest);}
.diag-row.warn .diag-icon{background:var(--amber-soft); color:var(--amber);}
.diag-row.fail .diag-icon{background:var(--rust-soft); color:var(--rust);}
.diag-row .label{flex:1; font-weight:600;}
.diag-row .detail{color:var(--ink-soft); font-size:12px; font-family:'IBM Plex Mono',monospace;}
.console-textarea{width:100%; min-height:140px; font-family:'IBM Plex Mono',monospace; font-size:13px; padding:12px 14px; border:1px solid var(--line); border-radius:8px; resize:vertical; background:#FBFBF8;}
.console-result-wrap{overflow-x:auto; max-height:480px; overflow-y:auto;}
.console-meta{font-size:12px; color:var(--ink-soft); padding:10px 18px; border-top:1px solid var(--line); background:#FBFBF8;}
.console-error{background:var(--rust-soft); color:var(--rust); padding:12px 16px; border-radius:8px; font-family:'IBM Plex Mono',monospace; font-size:12.5px; white-space:pre-wrap; word-break:break-word;}
