/* Generative-UI widgets (ui/widgets.js). Every colour, radius and font is a design token from app.css,
   so cards follow the light and dark themes. Chart colours are set in widgets.js from the same tokens. */
.wg-holder{min-width:0}
.wg{border-radius:var(--r16);box-shadow:var(--sh-1);background:var(--bg);padding:var(--sp-3) var(--sp-4) var(--sp-3);min-width:0;display:flex;flex-direction:column;gap:var(--sp-2)}
.wg-loading .wg-skel{display:flex;align-items:center;gap:var(--sp-2);color:var(--fg-3);font-size:var(--fs-2);height:120px;justify-content:center}
.wg-h{display:flex;align-items:flex-start;gap:var(--sp-2);min-width:0}
.wg-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;padding-top:2px}
.wg-t b{font-size:var(--fs-4);font-weight:600;line-height:20px;overflow-wrap:anywhere}
.wg-t span{font-size:var(--fs-2);color:var(--fg-2);line-height:18px}
.wg-h .seg{flex:none}.wg-h .icon-btn{flex:none;width:26px;height:26px}
.wg-h .icon-btn svg.i{width:15px;height:15px}
.wg-note{font-size:var(--fs-1);line-height:16px;color:var(--fg-3);padding-top:var(--sp-1);border-top:1px solid var(--line-soft)}
.wg-filters{display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-4);align-items:center;padding:var(--sp-1) 0}
.wg-filter{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-2);color:var(--fg-2)}
.wg-filter>span{font-family:var(--mono);font-size:var(--fs-1);letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3)}
.wg-filter select{height:26px;border-radius:var(--r8);border:0;box-shadow:0 0 0 1px var(--line-2);background:var(--bg);padding:0 var(--sp-2);font-size:var(--fs-2)}
.wg-filter .dd{min-width:140px}
.wg-main{min-width:0;display:flex;flex-direction:column;gap:var(--sp-2)}
.wg-body{min-width:0;position:relative}
.wg-body.wg-wait{min-height:120px}
.wg-body>svg{display:block;max-width:100%;overflow:visible}
.wg-body .marks{font-variant-numeric:tabular-nums}
.wg-body svg .role-legend-entry{cursor:pointer}

/* dashboard grid */
.wg-main.wg-grid{display:grid;grid-template-columns:repeat(var(--wg-cols,2),minmax(0,1fr));gap:var(--sp-3)}
.wg-cell{grid-column:span min(var(--wg-span,1),var(--wg-cols,2));min-width:0;border-radius:var(--r12);box-shadow:0 0 0 1px var(--line);padding:var(--sp-2) var(--sp-3) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1)}
.wg-ch{display:flex;align-items:center;gap:var(--sp-2);min-height:24px;min-width:0}
.wg-ch b{font-size:var(--fs-2);font-weight:600;color:var(--fg-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wg-ch span:not(.grow){font-size:var(--fs-1);color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wg-ch .icon-btn{width:22px;height:22px;opacity:0}.wg-cell:hover .wg-ch .icon-btn,.wg-ch .icon-btn:focus-visible{opacity:1}
.wg-ch .icon-btn svg.i{width:13px;height:13px}
.wg-cell .wg-note{border-top:0;padding-top:0}
.wg.compact .wg-main.wg-grid,.wg-pane .wg-main.wg-grid{grid-template-columns:minmax(0,1fr)}
.wg-pane .wg-cell,.wg.compact .wg-cell{grid-column:auto}
@container (max-width:520px){.wg-main.wg-grid{grid-template-columns:minmax(0,1fr)}.wg-cell{grid-column:auto}}
.wg-holder{container-type:inline-size}

/* KPI tiles */
.wg-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:var(--sp-2)}
.wg-kpi{border-radius:var(--r12);background:var(--bg-2);padding:var(--sp-3);min-width:0}
.wg-cell .wg-kpi{background:var(--bg-2)}
.wg-kpi .l{font:500 var(--fs-1)/16px var(--mono);letter-spacing:.07em;text-transform:uppercase;color:var(--fg-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wg-kpi .v{font:600 var(--fs-6)/28px var(--mono);font-variant-numeric:tabular-nums;margin-top:var(--sp-h);letter-spacing:-.01em;overflow-wrap:anywhere}
.wg-kpi .v small{font:400 var(--fs-2) var(--font);color:var(--fg-2);margin-left:var(--sp-1);letter-spacing:0}
.wg-kpi .s{display:flex;flex-wrap:wrap;gap:2px var(--sp-2);font-size:var(--fs-2);color:var(--fg-3);margin-top:2px;line-height:18px}
.wg-delta{font-family:var(--mono);font-size:var(--fs-1);color:var(--fg-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.wg-delta.good{color:var(--ok)}.wg-delta.bad{color:var(--err)}

/* table */
.wg-tbar{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-2)}
.wg-search{display:flex;align-items:center;gap:var(--sp-1);height:26px;padding:0 var(--sp-2);border-radius:var(--r8);box-shadow:0 0 0 1px var(--line);color:var(--fg-3);width:200px;max-width:60%}
.wg-search svg.i{width:13px;height:13px}
.wg-search input{border:0;outline:0;background:transparent;flex:1;min-width:0;font-size:var(--fs-2)}
.wg-search:focus-within{box-shadow:0 0 0 1px var(--accent)}
.wg-scroll{overflow:auto;max-height:420px;border-radius:var(--r8);box-shadow:0 0 0 1px var(--line)}
.wg-table table{border-collapse:collapse;width:max-content;min-width:100%;font-size:var(--fs-2)}
.wg-table th{position:sticky;top:0;background:var(--bg-2);text-align:left;font:600 var(--fs-1)/16px var(--mono);letter-spacing:.04em;color:var(--fg-2);padding:6px 10px;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer;user-select:none}
.wg-table th:hover,.wg-table th.on{color:var(--fg)}
.wg-table th.r{text-align:right}
.wg-table th i{display:inline-block;width:12px;height:12px;vertical-align:-2px;margin-left:2px;color:var(--accent)}
.wg-table th i svg.i{width:12px;height:12px;stroke-width:2}
.wg-table td{padding:5px 10px;border-bottom:1px solid var(--line-soft);white-space:nowrap;max-width:340px;overflow:hidden;text-overflow:ellipsis}
.wg-table td.r{text-align:right}.wg-table td.n{font-family:var(--mono);font-variant-numeric:tabular-nums}
.wg-table tbody tr:last-child td{border-bottom:0}
.wg-table tbody tr:hover td{background:var(--bg-2)}
.wg-table td.wg-none{text-align:center;color:var(--fg-3);padding:var(--sp-4)}
.wg-pager{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-1);margin-top:var(--sp-1)}
.wg-pager .btn.sm{padding:0 4px}.wg-pager svg.i{width:13px;height:13px}
.wg-src{padding:2px 0 var(--sp-1)}

/* spec view */
.wg-code{border-radius:var(--r12);box-shadow:0 0 0 1px var(--line);overflow:hidden;background:var(--bg-2)}
.wg-codeh,.wg-code summary{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-2) var(--sp-1) var(--sp-3);min-height:30px;font-size:var(--fs-1);color:var(--fg-2)}
.wg-code summary{cursor:pointer;list-style:none}.wg-code summary::-webkit-details-marker{display:none}
.wg-code summary::before{content:'›';color:var(--fg-3);transition:transform .12s}.wg-code[open] summary::before{transform:rotate(90deg)}
.wg-code pre{padding:var(--sp-2) var(--sp-3) var(--sp-3);max-height:340px;overflow:auto;white-space:pre;border-top:1px solid var(--line);background:var(--bg)}
.wg-errs{padding:var(--sp-1) 0}.wg-errs .hint{color:var(--signal);padding:1px 0}

/* tooltip and menu */
.wg-tip{position:fixed;z-index:90;pointer-events:none;background:var(--bg);color:var(--fg);border-radius:var(--r12);box-shadow:var(--sh-2);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-2);line-height:18px;max-width:320px}
.wg-tip-t{font-weight:600;margin-bottom:2px;overflow-wrap:anywhere}
.wg-tip-r{display:flex;justify-content:space-between;gap:var(--sp-4)}
.wg-tip-r span{color:var(--fg-2)}.wg-tip-r b{font:500 var(--fs-2) var(--mono);font-variant-numeric:tabular-nums}
.menu.wg-menu{width:200px}.menu.wg-menu button{flex-direction:row;min-height:28px;align-items:center;font-size:var(--fs-2)}

/* side pane */
.wg-pane{display:flex;flex-direction:column;gap:var(--sp-2);min-height:100%}
.wg-pbar{display:flex;align-items:center;gap:var(--sp-1)}
.wg-pbar .btn.sm svg.i{width:13px;height:13px}.wg-pbar .btn.sm{gap:var(--sp-1);padding:0 6px}
.wg-row{display:flex;align-items:center;gap:var(--sp-2);width:100%;text-align:left;padding:var(--sp-2) var(--sp-3);border-radius:var(--r12);box-shadow:var(--sh-1);background:var(--bg);margin-bottom:var(--sp-2)}
.wg-row:hover{background:var(--bg-2)}
.wg-ric{width:26px;height:26px;border-radius:var(--r8);background:var(--accent-soft);color:var(--accent-deep);display:grid;place-items:center;flex:none}
.wg-ric svg.i{width:14px;height:14px}
.wg-rt{flex:1;min-width:0;display:flex;flex-direction:column}
.wg-rt b{font-weight:600;font-size:var(--fs-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wg-rt small{font-size:var(--fs-1);color:var(--fg-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wg-pane .wg{box-shadow:var(--sh-1)}
@media print{.wg-h .seg,.wg-h .icon-btn{display:none}}
