/* =============================================================================
 * File:     assets/app.css
 * Purpose:  Shared stylesheet for every page.
 * Phase:    0 (Foundation)
 * Used by:  core/layout.php page_head().
 *
 * Rules:
 *   - Use the CSS variables below. Brand colours (--brand-*) are injected per
 *     client by core/theme.php, so never hard-code a brand colour here.
 *   - Neutral colours (ink, hairline, surfaces) are platform-wide.
 *   - Mobile first: no fixed widths, tables scroll inside .card, forms stack.
 *   - Print rules at the bottom hide navigation for report printing.
 *
 * Look: the GVDF look (0.12.0). Arial, navy ink on cool grey, the GVDF
 * menu, white figure tiles, panels whose title row is tinted with the
 * section colour (--pc), full-colour banners, amber tips. Dimension colours
 * come from the assessment (--pc set per element, shaded for readable
 * white text by core/theme.php shade_for_white()).
 *
 * Change log:
 *   2026-10-01 Created (visual language from GVDF).
 *   2026-10-01 0.12.0: GVDF look (tokens, menu, tiles, panels, banners, chips).
 *   2026-10-04 alpha.24: row banding and list filters.
 *   2026-10-04 alpha.23: coloured band on top of cards, sections, panels and tiles; role pills in Admin > Users.
 *   2026-10-02 Value stream builder (.gv-cards, .grid3, .vs-wrap).
 *   2026-10-02 Main menu drop-downs (.menubar, .dd-bar, .dd-menu).
 *   2026-10-02 2.0 phase 4b: analysis tab (.scroll, .prewrap, ul.patterns).
 * ========================================================================== */

:root{
  /* GVDF engagement palette */
  --ink:#1A1A2E; --ink-soft:#444444; --ink-faint:#666666;
  --hairline:#E3E4EA; --hairline-soft:#EEEEEE;
  --bg:#F4F5F8; --surface:#FFFFFF; --field:#FCFCFD; --field-border:#B9BCC8;
  --ok:#1F6B44; --bad:#C2342A; --warn:#8A5B0B; --tip:#FBAE40;
  --ph-d:#1DB0EA; --ph-a:#7F36A3; --ph-r:#BA3BD7; --ph-i:#D63791; --ph-v:#E74F40;
  --font-body:Arial,"Helvetica Neue",Helvetica,sans-serif;
  --font-head:var(--font-body);
  --font-mono:ui-monospace,"SF Mono","Cascadia Code","Roboto Mono",Menlo,Consolas,monospace;
  --gutter:clamp(12px,2.4vw,40px); --r:8px;
}
*{box-sizing:border-box;}
body{margin:0;font-family:var(--font-body);font-size:15px;line-height:1.55;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;}
a{color:var(--brand-secondary);}

/* ---- menu (GVDF appnav) -------------------------------------------------
 * Row 1 (.navrow): ring mark, client logo, platform name and crumbs, account.
 * Row 2 (.phases): main sections as pills. Buttons and tabs share the look.
 * ------------------------------------------------------------------------ */
.appnav{position:sticky;top:0;z-index:70;background:#fff;border-top:3px solid var(--brand-primary);border-bottom:1px solid var(--hairline);}
.appnav .inner{padding:6px var(--gutter) 8px;display:flex;flex-direction:column;gap:6px;}
.appnav .navrow{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-family:var(--font-mono);font-size:12px;}
.appnav .crumb{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-right:auto;min-width:0;}
.appnav .crumb a{color:var(--ink-soft);text-decoration:none;} .appnav .crumb a:hover{text-decoration:underline;}
.appnav .crumb .appname{color:var(--ink);font-weight:700;letter-spacing:.04em;text-transform:uppercase;}
.appnav .crumb .sep{color:var(--ink-faint);}
.gv-mark{display:inline-flex;margin-right:2px;} .gv-mark img{display:block;}
.client-logo{background:#fff;border:1px solid var(--hairline);border-radius:4px;padding:2px 6px;display:inline-flex;} .client-logo img{height:24px;width:auto;max-width:150px;display:block;}
.appnav .acct{display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
.appnav .acct a,.appnav .acct .navbtn{font-family:var(--font-mono);font-size:12px;color:var(--ink);text-decoration:none;border:1px solid var(--hairline);border-radius:5px;padding:4px 10px;background:#fff;cursor:pointer;transition:.15s;}
.appnav .acct a:hover,.appnav .acct .navbtn:hover{background:var(--ink);color:#fff;border-color:var(--ink);}
.appnav .acct a.on{background:var(--brand-accent);color:var(--brand-accent-fg);border-color:var(--brand-accent);}
.appnav form.inline{display:inline;margin:0;}
.phases{display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-family:var(--font-mono);font-size:12px;}
.phases a{display:inline-flex;align-items:center;gap:7px;text-decoration:none;color:var(--ink);border:1px solid var(--hairline);border-radius:6px;padding:5px 10px;background:#fff;white-space:nowrap;transition:.15s;}
.phases a:hover{border-color:var(--ink);}
.phases a.on{background:var(--brand-accent);color:var(--brand-accent-fg);border-color:var(--brand-accent);}
/* Coloured pills (respondent sections): letter circle in the section colour, count, current one filled. */
.phases a.ph .l{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--pc);color:#fff;font-weight:700;font-size:11px;}
.phases a.ph .cnt{font-size:10.5px;color:var(--ink-faint);}
.phases a.ph.on{background:var(--pc);color:#fff;border-color:var(--pc);} .phases a.ph.on .l{background:#fff;color:var(--pc);} .phases a.ph.on .cnt{color:rgba(255,255,255,.9);}
.phases a.ph.done .cnt::after{content:" ✓";}
.tabs a,.btn{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.02em;color:var(--ink);background:var(--surface);border:1px solid var(--hairline);text-decoration:none;padding:6px 11px;border-radius:5px;cursor:pointer;display:inline-block;transition:.15s;}
.tabs a:hover,.btn:hover{background:var(--ink);color:#fff;border-color:var(--ink);}
.tabs a.on,.btn.primary{background:var(--brand-accent);color:var(--brand-accent-fg);border-color:var(--brand-accent);}
.tabs a.on{font-weight:700;}
.btn.primary:hover{filter:brightness(.9);}
.btn:disabled{opacity:.45;cursor:not-allowed;}
.btn:focus-visible,.tabs a:focus-visible,.phases a:focus-visible{outline:2px solid var(--brand-accent);outline-offset:2px;}
.btn.small{padding:3px 8px;font-size:10.5px;}
@media (max-width:760px){ .phases:not(.menubar){flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;max-width:100%;} .appnav .navrow{font-size:11px;} }

/* ---- page body ---------------------------------------------------------- */
.wrap{padding:22px var(--gutter) 60px;}
.narrow{max-width:440px;margin:60px auto;}
h1{font-family:var(--font-head);font-size:30px;letter-spacing:-.02em;margin:4px 0 6px;line-height:1.15;color:var(--ink);}
h2{font-family:var(--font-head);font-size:19px;margin:0 0 8px;letter-spacing:-.01em;}
h3{font-size:15.5px;margin:0 0 6px;}
.eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;color:var(--ink-faint);}
.eyebrow a{color:var(--ink-faint);}
.lede{color:var(--ink-soft);margin:0 0 18px;}
.card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--r);padding:16px 20px;margin:0 0 16px;overflow-x:auto;}
.card.band{border-top:3px solid var(--brand-accent);}
/* GVDF panel title row: a card's first heading becomes a full-width strip
   tinted with the section colour (--pc, default the accent). */
.card > h2:first-child,.card > h3:first-child{margin:-16px -20px 14px;padding:11px 20px;font-size:15.5px;border-bottom:1px solid var(--hairline-soft);
  background:linear-gradient(90deg,color-mix(in srgb,var(--pc,var(--brand-accent)) 9%,#fff),#fff);}
.card.band > h2:first-child{margin-top:-16px;}
.tabs{display:flex;gap:6px;border-bottom:1px solid var(--hairline);margin:0 0 18px;padding:0 0 12px;flex-wrap:wrap;}
.lede{color:var(--ink-soft);margin:0 0 16px;}
/* GVDF full-colour banner (respondent sections, step headers). --pc is the
   readable shade of the section colour, so white text passes 4.5:1. */
.gband{border-radius:var(--r);padding:18px 22px;color:#fff;background:var(--pc,var(--ink));margin:0 0 16px;}
.gband .eyebrow{color:#fff;opacity:.9;} .gband h1,.gband h2{color:#fff;margin:4px 0;} .gband p{margin:4px 0 0;opacity:.95;}
/* GVDF tip box. */
.tip{border-left:4px solid var(--tip);background:#FFF8EC;padding:10px 14px;border-radius:0 6px 6px 0;font-size:14px;margin:0 0 14px;}
.tip b{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:#8A5B0B;display:block;}
/* Maturity chips L1-L5 (GVDF band-chip colours). */
.lvchip{font-family:var(--font-mono);font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:12px;background:#EEF0F5;white-space:nowrap;}
.lvchip.l1{background:#FBE5E3;color:#9B2A21;} .lvchip.l2{background:#FFF1DA;color:#8A5B0B;} .lvchip.l3{background:#E6F3FC;color:#0F5E9C;} .lvchip.l4{background:#E4F3EA;color:#1F6B44;} .lvchip.l5{background:#F1E9F7;color:#6B2F8A;}
/* Dimension cards (results): coloured top edge like the GVDF phase cards. */
.dimcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin:0 0 16px;}
.dimcard{background:var(--surface);border:1px solid var(--hairline);border-top:5px solid var(--pc);border-radius:var(--r);padding:12px 14px;}
.dimcard .nm{font-weight:700;margin:0 0 6px;} .dimcard .sc{font-size:24px;font-weight:800;color:var(--pc-text,var(--ink));line-height:1.1;}
.dimcard .bar{height:6px;background:#EEF0F5;border-radius:4px;overflow:hidden;margin:8px 0 4px;} .dimcard .bar > i{display:block;height:100%;background:var(--pc);border-radius:4px;}

/* ---- forms -------------------------------------------------------------- */
label{display:block;font-size:13px;font-weight:650;margin:0 0 4px;}
input[type=text],input[type=password],input[type=email],input[type=number],input[type=date],input[type=datetime-local],select,textarea{width:100%;font:inherit;font-size:14.5px;color:var(--ink);background:var(--field);border:1.5px solid var(--field-border);border-radius:5px;padding:8px 10px;}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand-accent);box-shadow:0 0 0 3px rgba(19,119,196,.15);}
.field{margin:0 0 14px;}
.hint{font-size:12.5px;color:var(--ink-faint);margin:3px 0 0;}
.row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.btn.danger{color:var(--bad);border-color:#E9B7BD;}
.btn.danger:hover{background:var(--bad);color:#fff;}

/* ---- messages and tables ------------------------------------------------ */
.msg{padding:10px 14px;border-radius:6px;margin:0 0 16px;font-size:14px;}
.msg.ok{background:#E4F3EA;color:var(--ok);border:1px solid #BFE0CC;}
.msg.err{background:#FBE7E9;color:#8E2A36;border:1px solid #E9B7BD;}
.msg.warn{background:#FDF1DC;color:var(--warn);border:1px solid #F0D9A8;}
table.t{width:100%;border-collapse:collapse;font-size:13.5px;}
table.t th{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);text-align:left;padding:8px 10px;background:var(--hairline-soft);border-bottom:1px solid var(--hairline);}
table.t td{padding:8px 10px;border-bottom:1px solid var(--hairline-soft);vertical-align:top;}
table.t tbody tr:hover td{background:#F7F8FB;}
.pill{font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase;padding:2px 8px;border-radius:20px;font-weight:700;background:#EEF0F5;color:#666;white-space:nowrap;display:inline-block;vertical-align:middle;}

/* ---- footer and print --------------------------------------------------- */
.foot{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-faint);padding:14px clamp(12px,2.4vw,40px);border-top:1px solid var(--hairline);}
.foot .warn{color:var(--bad);font-weight:700;}
@media print{.appnav,.foot,.phases,.tabs,.actions,.no-print{display:none!important;}body{background:#fff;}.card{border:none;padding:0;}.card > h2:first-child{margin:0 0 8px;padding:0;background:none;border:0;}}
.foot{text-align:center;}

/* ---- Phase 1: tenancy screens --------------------------------------------
 * Inline forms (archive / delete buttons in table rows), pop-out edit forms
 * opened with <details>, grant chips in the people table, muted archived cards.
 * ------------------------------------------------------------------------ */
form.inline{display:inline;}
details.inline{display:inline-block;position:relative;}
details.inline>summary{list-style:none;}
details.inline>summary::-webkit-details-marker{display:none;}
.pop{position:absolute;right:0;z-index:5;background:var(--surface);border:1px solid var(--hairline);border-radius:8px;padding:12px;box-shadow:0 8px 24px rgba(0,0,0,.12);min-width:260px;display:grid;gap:6px;}
.card.muted{opacity:.7;}
.grant{margin:0 0 4px;}
.link-btn{background:none;border:none;color:var(--bad);cursor:pointer;font-size:12px;text-decoration:underline;padding:0 0 0 4px;}
code{font-family:var(--font-mono);font-size:12.5px;background:var(--hairline-soft);padding:1px 5px;border-radius:4px;}
@media (max-width:600px){.pop{position:static;min-width:0;}}

/* ---- Phase 2: template builder --------------------------------------------
 * Status pills, colour swatches for scale levels, the dimension / sub-dimension
 * tree, per-level rows on the question page, and the respondent-style level
 * cards used by Preview (Phase 3 reuses .lvlcard for the real questionnaire).
 * ------------------------------------------------------------------------ */
.pill.st-draft{background:#FDF1DC;color:var(--warn);} .pill.st-published{background:#E4F3EA;color:var(--ok);} .pill.st-retired{background:#EEF0EF;color:#7B8785;}
.pill.good{background:#E4F3EA;color:var(--ok);} .pill.bad{background:#FBE7E9;color:#8E2A36;}
.swatch{display:inline-block;width:11px;height:11px;border-radius:3px;margin:0 5px 0 0;vertical-align:-1px;}
.card.dim{border-left:4px solid var(--pc,var(--brand-accent));}
.sub{border-top:1px solid var(--hairline-soft);padding:12px 0 4px;margin-top:10px;}
.sub h3{font-size:15px;margin:0;}
.addrow{margin:10px 0 0;} .addrow input[type=text]{max-width:420px;}
fieldset.plain{border:0;padding:0;margin:0;min-width:0;}
.levelrow{border-left:4px solid var(--hairline);padding:4px 0 2px 12px;margin:0 0 14px;}
.lvlname{font-weight:700;margin:0 0 6px;}
.pq{padding:14px 0;border-top:1px solid var(--hairline-soft);}
.qtext{font-size:16px;margin:0 0 10px;}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;}
.lvlcard{display:flex;flex-direction:column;gap:6px;border:1.5px solid var(--hairline);border-top:5px solid var(--lc,var(--hairline));border-radius:8px;padding:10px 12px;cursor:pointer;font-weight:400;font-size:13.5px;background:var(--surface);}
.lvlcard input{position:absolute;opacity:0;pointer-events:none;}
.lvlcard:has(input:checked){border-color:var(--lc,var(--brand-accent));box-shadow:0 0 0 3px color-mix(in srgb,var(--lc,var(--brand-accent)) 25%,transparent);}
.lvlcard:has(input:focus-visible){outline:2px solid var(--brand-accent);outline-offset:2px;}
.lvltitle{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;}
.lvlcard.na{--lc:#9AA5A3;}
ul.tight{margin:0;padding-left:18px;}

/* ---- 0.5.0: labels and Recommendations view --------------------------------
 * .labels: six label inputs in a compact grid. .reclvl: one level's action box,
 * coloured by its scale level. .savebar: Save button that stays in view while
 * scrolling long pages.
 * ------------------------------------------------------------------------ */
.row.labels{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));}
.reclvl{border-top:4px solid var(--hairline);padding-top:6px;margin:0;}
.reclvl textarea{font-size:13px;}
/* GVDF sticky save bar. */
.savebar{position:sticky;bottom:0;z-index:40;background:rgba(255,255,255,.96);padding:10px 16px;border:1px solid var(--hairline);border-radius:var(--r);box-shadow:0 -6px 18px rgba(26,26,46,.06);margin-top:10px;}

/* ---- Phase 3: rounds, codes, respondent pages -------------------------------
 * Filter buttons (.filters .btn.on), round status pills (.rs-*), code status
 * pills (.cs-*), headline numbers (.stats), progress bars (.progbar), team
 * picker (.teampick), and the respondent layout (.take, .takebar, .codebox,
 * .saved). Respondent pages use the client's brand colours via --brand-*.
 * ------------------------------------------------------------------------ */
.filters{margin:0 0 12px;}
.btn.on{background:var(--brand-accent);color:var(--brand-accent-fg);border-color:var(--brand-accent);}
.nowrap{white-space:nowrap;}
.pill.rs-draft{background:#FDF1DC;color:var(--warn);} .pill.rs-open{background:#E4F3EA;color:var(--ok);} .pill.rs-closed{background:#EEF0EF;color:#5B6866;}
.pill.cs-not_opened{background:#EEF0EF;color:#5B6866;} .pill.cs-started{background:#FDF1DC;color:var(--warn);} .pill.cs-submitted{background:#E4F3EA;color:var(--ok);}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin:14px 0;}
/* GVDF figure tiles: white, bordered, big number, small capital label. */
.stats div{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--r);padding:10px 14px;display:flex;flex-direction:column;}
.stats strong{font-size:24px;font-weight:700;line-height:1.1;color:var(--ink);} .stats span{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin-top:3px;}
.progbar{display:inline-block;width:110px;height:6px;background:#EEF0F5;border-radius:4px;overflow:hidden;vertical-align:middle;}
.progbar>span{display:block;height:100%;background:var(--brand-accent);}
.teampick{border:1px solid var(--hairline);border-radius:8px;padding:8px 14px 10px;margin:0 0 12px;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:4px;}
.teampick legend{padding:0 6px;font-weight:700;}
.take{max-width:980px;margin:0 auto;}
.narrowish{max-width:520px;margin:30px auto;}
.takebar{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px;font-size:14px;}
.takebar .prog{display:flex;align-items:center;gap:8px;color:var(--ink-soft);}
.codebox{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;font-size:18px;}
fieldset.takeq{border:0;margin:0;padding:14px 0;min-width:0;}
fieldset.takeq legend{padding:0;}
.comment{margin:10px 0 0;} .comment textarea{margin-top:6px;}
.saved{font-size:12px;color:var(--ok);display:block;min-height:16px;margin-top:4px;} .saved.err{color:var(--bad);}

/* ---- Phase 4: results -------------------------------------------------------
 * SVG charts scale to the card width. Heatmap cells carry their own fill from
 * modules/assess/lib/charts.php (ordinal blue ramp) and always print the number. .dist is the
 * per-question answer distribution bar. Charts print in colour.
 * ------------------------------------------------------------------------ */
svg.chart{width:100%;height:auto;max-width:820px;display:block;font-family:var(--font-body);}
svg.chart text{fill:#1A1A2E;}
.radarwrap svg.chart{max-width:760px;margin:0 auto;}
.stats strong.small{font-size:16px;line-height:1.3;}
.heatwrap{overflow-x:auto;}
table.heat{border-collapse:separate;border-spacing:2px;font-size:12.5px;}
table.heat th{font-weight:600;text-align:left;padding:4px 8px;white-space:nowrap;}
table.heat thead th{vertical-align:bottom;height:130px;}
table.heat:not(.compare) thead th span{writing-mode:vertical-rl;transform:rotate(180deg);font-size:11.5px;color:var(--ink-soft);}
table.heat td{min-width:40px;text-align:center;padding:7px 4px;border-radius:4px;font-variant-numeric:tabular-nums;}
.legendrow{display:flex;gap:14px;flex-wrap:wrap;margin:10px 0 0;}
.legendrow i{display:inline-block;width:14px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px;}
.dist{display:inline-flex;width:110px;height:10px;gap:2px;vertical-align:middle;}
.dist span{display:block;border-radius:2px;min-width:3px;} .dist span.na{background:repeating-linear-gradient(45deg,#C9D2CF 0 2px,#EEF2F1 2px 4px);}
tr.grouprow td{background:var(--hairline-soft);font-weight:700;font-size:12.5px;}
details.rec{border-top:1px solid var(--hairline-soft);padding:10px 0;}
details.rec summary{cursor:pointer;font-weight:600;}
@media print{svg.chart,table.heat td,.dist span{-webkit-print-color-adjust:exact;print-color-adjust:exact;}details.rec{display:block;}}

/* ---- Phase 5: trend and compare ---------------------------------------------
 * Compare and trend tables: indented rows by level (lvl0 overall, lvl1 top
 * level, lvl2 second level), highlighted column for the cycle being viewed,
 * change column with arrow text (colour only reinforces the arrow).
 * ------------------------------------------------------------------------ */
table.compare thead th{height:auto;vertical-align:bottom;white-space:normal;min-width:90px;}
table.compare th[scope],table.compare tbody th{text-align:left;}
tr.lvl0 th{font-weight:800;} tr.lvl1 th{font-weight:700;padding-left:8px;} tr.lvl2 th{font-weight:400;padding-left:24px;color:var(--ink-soft);}
table.trend th,table.trend td{white-space:nowrap;}
table.trend .here,table.compare.cycles th.here{background:#EEF4FC;}
table.trend td.up{color:var(--ok);font-weight:700;} table.trend td.down{color:var(--bad);font-weight:700;}
table.trend tbody th{font-family:var(--font-body);font-size:13.5px;text-transform:none;letter-spacing:0;color:var(--ink);background:none;}
table.trend tbody tr.lvl2 th{color:var(--ink-soft);}

/* ---- Phase 6: printable report ----------------------------------------------
 * Narrow reading column on screen; on paper A4 portrait with 15 mm margins.
 * Sections start on a new page where they'd otherwise split badly, table rows
 * and recommendations never split across pages, and colours print exactly.
 * ------------------------------------------------------------------------ */
.report{max-width:900px;margin:0 auto;}
.rep-cover{border-bottom:3px solid var(--brand-primary);padding:0 0 14px;margin:0 0 18px;}
.rep-cover h1{font-size:30px;margin:4px 0;}
.rep-logo{max-height:56px;max-width:220px;float:right;}
.rep-block{margin:0 0 22px;overflow-x:auto;}            /* wide tables scroll on phones; print overrides below */
.rep-block h2{border-bottom:1px solid var(--hairline);padding-bottom:4px;}
.rep-rec{border-top:1px solid var(--hairline-soft);padding:8px 0;}
.rep-rec h3{font-size:15px;margin:0;}
.rep-foot{margin-top:26px;padding-top:8px;border-top:1px solid var(--hairline);font-size:11.5px;color:var(--ink-faint);}
@page{size:A4 portrait;margin:15mm;}
@media print{
  body{font-size:11.5pt;}
  .wrap{padding:0;}
  .rep-block{overflow:visible;}
  .report .radarwrap svg.chart{max-width:440px;}   /* smaller radar on paper so its table fits the same page */
  .page-break{break-before:page;}
  tr,.rep-rec,.stats{break-inside:avoid;}
  .rep-block h2{break-after:avoid;}
  .stats div,.pill,table.t th,tr.grouprow td{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
}

/* ---- Phase 6b: branding tab ---------------------------------------------- */
/* Visually hidden but read by screen readers (labels for compact controls). */
.sr{position:absolute;left:0;top:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}
.logo-box{padding:12px;border:1px solid var(--hairline);border-radius:6px;display:inline-block;background:#fff;}
.logo-box img{max-height:64px;max-width:100%;display:block;}
input[type=color]{width:44px;height:36px;padding:2px;border:1px solid var(--hairline);border-radius:4px;background:#fff;}
/* Preview uses its own --bp-* variables, set live by assets/branding.js. */
.brand-preview{border:1px solid var(--hairline);border-radius:6px;overflow:hidden;margin-bottom:18px;max-width:520px;}
.bp-strip{background:var(--bp-primary,var(--brand-primary));color:var(--bp-on-primary,#fff);padding:10px 14px;font-family:var(--font-mono);font-size:12px;font-weight:700;text-transform:uppercase;}
.bp-strip img{height:24px;width:auto;display:block;}
.bp-body{padding:14px;background:#fff;}
.bp-h{color:var(--bp-primary,var(--brand-primary));font-weight:700;font-size:18px;margin-bottom:6px;}
.bp-body a{color:var(--bp-secondary,var(--brand-secondary));}
.bp-btn{display:inline-block;padding:8px 14px;border-radius:4px;background:var(--bp-accent,var(--brand-accent));color:var(--bp-on-accent,#fff);font-weight:600;}
.hint.bad{color:#8E2A36;font-weight:600;}
/* Colour swatches found in a scanned document (0.10.1). Class renamed from
   .swatch in 0.12.0: it clashed with the small scale-level swatches. */
.swatches{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px;}
.docswatch{border:1px solid var(--hairline);border-radius:4px;padding:10px 12px;height:auto;min-height:40px;line-height:1.3;display:inline-flex;align-items:center;justify-content:center;text-transform:none;font-family:var(--font-mono);font-size:12px;cursor:pointer;min-width:84px;}
.docswatch:focus-visible{outline:2px solid var(--ink);outline-offset:2px;}

/* Phase 7: Admin > System check. */
.pill.warnpill{background:#FDF1DC;color:var(--warn);}
table.health td.st{width:70px;vertical-align:top;}
/* Phase 8: GVDF send status pills. */
.pill.gs-sent,.pill.gs-duplicate{background:#E4F3EA;color:var(--ok);} .pill.gs-failed,.pill.gs-pending{background:#FFF3DC;color:var(--warn);} .pill.gs-gave_up{background:#FBE5E3;color:#9B2A21;}
/* 2.0 phase 3a: .sr is pinned at left:0 so screen-reader text inside a wide, scrolling table never widens the page. */
/* 2.0 phase 2: descriptions inside a tick-box label stay normal weight. */
.check .hint{font-weight:400;}

/* ---- 2.0 phase 3a.1: Delivery module in the GVDF 1.2 look ---------------
 * Same layout and styling as GVDF before the integration: engagement menu
 * (phase pills with done counts, sub-step trail), phase tiles, KPI tiles,
 * coloured phase bands, sub-step cards in status columns, tip box, checklist,
 * status bar. --pc is the phase colour (D #1DB0EA, A #7F36A3, R #BA3BD7,
 * I #D63791, V #E74F40), set per element from steps_data.php.
 */
.gv-engnav{display:flex;flex-direction:column;gap:6px;margin:-8px 0 18px;padding:0 0 10px;border-bottom:1px solid var(--hairline);}
.gv-engrow{font-family:var(--font-mono);font-size:12px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.role-pill{font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:2px 8px;border-radius:20px;}
.role-pill.full{background:#E4F3EA;color:#1F6B44;} .role-pill.restricted{background:#FDF1DC;color:#9A6A12;}
.gv-phases{display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-family:var(--font-mono);font-size:12px;}
.gv-phases a{display:inline-flex;align-items:center;gap:7px;text-decoration:none;color:var(--ink);border:1px solid var(--hairline);border-radius:6px;padding:5px 10px;background:#fff;white-space:nowrap;}
.gv-phases a:hover{border-color:var(--ink);}
.gv-phases a.ph .l{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--pc);color:#fff;font-weight:700;font-size:11px;}
.gv-phases a.ph .cnt{font-size:10.5px;color:var(--ink-faint);}
.gv-phases a.ph.on{background:var(--pc);color:#fff;border-color:var(--pc);} .gv-phases a.ph.on .l{background:#fff;color:var(--pc);} .gv-phases a.ph.on .cnt{color:rgba(255,255,255,.85);}
.gv-phases a.ph.now:not(.on){box-shadow:inset 0 -3px 0 var(--pc);}
.gv-phases a.ph-home.on,.gv-phases a.xp.on{background:var(--brand-accent);color:var(--brand-accent-fg,#fff);border-color:var(--brand-accent);}
.gv-phases .sep{width:1px;height:22px;background:var(--hairline);margin:0 4px;}
.gv-trail ol{list-style:none;margin:0;padding:0;display:flex;gap:6px;flex-wrap:wrap;}
.gv-trail a{display:inline-flex;align-items:center;gap:7px;white-space:nowrap;font-family:var(--font-mono);font-size:11.5px;text-decoration:none;color:var(--ink);border:1px solid var(--hairline);border-radius:5px;padding:4px 9px;background:#fff;}
.gv-trail a .n{font-weight:700;color:var(--pc);}
.gv-trail a.st-done,.gv-trail a.st-skipped{background:#F3F4F7;} .gv-trail a.st-done .n::after{content:" ✓";}
.gv-trail a.st-in_progress .n::after,.gv-trail a.st-review .n::after{content:" •";}
.gv-trail a.on{background:var(--pc);color:#fff;border-color:var(--pc);} .gv-trail a.on .n{color:#fff;}
.gv-panel{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--r);margin:0 0 16px;overflow:hidden;}
.gv-panel .body{padding:16px 20px;}
.gv-band{padding:18px 22px;color:#fff;background:var(--pc,#1A1A2E);}
.gv-band .step{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;opacity:.9;}
.gv-band h1,.gv-band h2{color:#fff;font-size:22px;margin:4px 0;letter-spacing:-.01em;} .gv-band p{margin:0;opacity:.95;}
.gv-band .pill.gv-st{vertical-align:middle;}
.gv-section{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--r);margin:0 0 14px;overflow:hidden;}
.gv-section > .sh{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:11px 16px;border-bottom:1px solid var(--hairline-soft);background:linear-gradient(90deg,color-mix(in srgb,var(--pc,var(--brand-accent)) 9%,#fff),#fff);}
.gv-section > .sh h3{margin:0;margin-right:auto;font-size:15px;}
.gv-section > .sh .tag{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);}
.gv-section > .sb{padding:14px 16px;overflow-x:auto;}
.gv-tip{border-left:4px solid #FBAE40;background:#FFF8EC;padding:10px 14px;border-radius:0 6px 6px 0;font-size:14px;margin:0 0 14px;}
.gv-tip b{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:#9A6A12;display:block;}
.gv-note{background:#F3F4F7;border:1px dashed var(--hairline);border-radius:6px;padding:10px 14px;margin:0 0 14px;font-size:14px;}
.gv-checklist{list-style:none;margin:0;padding:0;}
.gv-checklist li{display:flex;gap:9px;align-items:flex-start;padding:6px 0;border-bottom:1px dashed var(--hairline);}
.gv-checklist input{margin-top:4px;width:17px;height:17px;flex:0 0 auto;}
.gv-checklist label{font-weight:400;margin:0;}
.gv-checklist li.on span{color:var(--ink-soft);text-decoration:line-through;text-decoration-color:rgba(0,0,0,.25);}
.dv-outputs{margin:0;padding-left:18px;} .dv-outputs li{margin:2px 0;}
.gv-statusbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:12px 16px;border-top:1px solid var(--hairline-soft);background:#FAFAFC;}
.gv-statusbar select,.gv-statusbar input{width:auto;min-width:150px;}
.gv-statusbar .hint{margin:0;}
.pill.gv-st.not_started{background:#EEF0F5;color:#666;} .pill.gv-st.in_progress{background:#E6F3FC;color:#0F5E9C;} .pill.gv-st.review{background:#FFF3DC;color:#8A5B0B;}
.pill.gv-st.done{background:#E4F3EA;color:#1F6B44;} .pill.gv-st.skipped{background:#F1E9F7;color:#6B2F8A;}
.gv-bar{height:6px;background:#EEF0F5;border-radius:4px;overflow:hidden;flex:1;} .gv-bar > i{display:block;height:100%;background:var(--pc,var(--brand-accent));border-radius:4px;}
.gv-progress{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11.5px;}
.gv-kpis{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 14px;}
.gv-kpi{background:var(--surface);border:1px solid var(--hairline);border-radius:8px;padding:10px 14px;min-width:130px;flex:1 1 130px;}
.gv-kpi .n{font-size:24px;font-weight:700;line-height:1.1;} .gv-kpi .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);}
.gv-dariv{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:0 0 18px;}
.gv-dariv a{display:block;text-decoration:none;color:var(--ink);background:var(--surface);border:1px solid var(--hairline);border-top:5px solid var(--pc);border-radius:8px;padding:12px 14px;}
.gv-dariv a:hover{box-shadow:0 4px 14px rgba(26,26,46,.08);} .gv-dariv a.now{outline:2px solid var(--pc);}
.gv-dariv .l{font-size:28px;font-weight:800;color:var(--pc);line-height:1;} .gv-dariv .nm{font-weight:700;margin:2px 0 6px;}
.gv-stepcards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;}
.gv-stepcol h4{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 8px;}
.gv-scard{display:block;text-decoration:none;color:var(--ink);background:var(--surface);border:1px solid var(--hairline);border-left:4px solid var(--pc);border-radius:7px;padding:10px 12px;margin:0 0 8px;}
.gv-scard:hover{box-shadow:0 4px 14px rgba(26,26,46,.08);} .gv-scard .k{font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--pc);}
.gv-scard .t{font-weight:700;font-size:14px;margin:1px 0 6px;} .gv-scard .meta{font-size:12px;color:var(--ink-faint);margin-top:6px;}
table.gv-data{width:100%;border-collapse:collapse;font-size:13.5px;} table.gv-data td{padding:6px 6px;border-bottom:1px solid var(--hairline-soft);vertical-align:middle;}
table.gv-data a.plain{color:var(--ink);text-decoration:none;} table.gv-data a.plain:hover{text-decoration:underline;}
.gv-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:4px 14px;} .gv-fields .field.wide{grid-column:1/-1;}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;}
.meter{height:8px;border-radius:6px;background:#EEF0F5;overflow:hidden;min-width:80px;}
.meter span{display:block;height:100%;background:var(--brand-accent);}
.danger-zone{border-color:#E9B7BD;}
h2.dv-ph{border-left:5px solid var(--ph);padding-left:8px;margin-top:22px;}
.dv-chip{display:inline-flex;gap:6px;align-items:center;margin:4px 8px 4px 0;padding:4px 10px;border-radius:20px;border:1px solid var(--hairline);}
.dv-chip b{color:var(--ph);}
@media (max-width:980px){ .gv-stepcards{grid-template-columns:repeat(2,minmax(0,1fr));} .gv-dariv{grid-template-columns:repeat(2,1fr);} }
@media (max-width:760px){ .gv-phases,.gv-trail ol{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;max-width:100%;} }
@media (max-width:640px){ .gv-stepcards,.gv-dariv{grid-template-columns:1fr;} .gv-band{padding:14px 16px;} .gv-statusbar select,.gv-statusbar input{min-width:0;width:100%;} .gv-section > .sb{padding:12px;} }
@media print{.gv-band,.gv-bar,.gv-dariv a,h2.dv-ph{-webkit-print-color-adjust:exact;print-color-adjust:exact;}}

/* ---- 2.0 phase 4a: growth plan (Assessments results, Growth plan tab), after GVDF 1.2 ---- */
details.gp-sub{border:1px solid var(--hairline);border-left:4px solid var(--pc,var(--brand-accent));border-radius:8px;margin:0 0 8px;background:#fff;}
details.gp-sub > summary{cursor:pointer;padding:10px 14px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:linear-gradient(90deg,color-mix(in srgb,var(--pc,var(--brand-accent)) 8%,#fff),#fff);border-radius:8px;}
.gp-q{padding:4px 14px 2px;border-top:1px solid var(--hairline-soft);}
.gp-q p{margin:8px 0 4px;}
.gp-actions{list-style:none;margin:0 0 8px;padding:0;}
.gp-actions li{display:flex;gap:8px;align-items:flex-start;padding:5px 0;border-bottom:1px dashed var(--hairline);font-size:13.5px;}
.gp-actions li .lvl{font-family:var(--font-mono);font-size:10px;color:var(--ink-faint);white-space:nowrap;padding-top:3px;min-width:92px;}
.gp-actions li .tx{flex:1;}
.gp-actions li.picked .tx{color:var(--ink-faint);}
.gp-custom{padding:8px 14px 12px;} .gp-custom input{flex:1;min-width:200px;}
table.growth td{vertical-align:top;} table.growth textarea{min-width:180px;font-size:13px;}
table.growth tr.gs-done td{background:#F4FAF6;} table.growth tr.gs-dropped td{opacity:.6;}
table.growth select{min-width:112px;} table.growth input[type=date]{min-width:140px;} table.growth input[type=number]{min-width:60px;}

/* ---- Assessment analysis (2.0 phase 4b) ---- */
.scroll{overflow-x:auto;}
.prewrap{white-space:pre-wrap;}
ul.patterns{list-style:none;padding:0;margin:0 0 12px;}
ul.patterns li{border-left:3px solid var(--hairline);padding:6px 10px;margin:0 0 8px;}

/* ---- Main menu drop-downs (2.0 improvements) ----------------------------
   Top items open on hover and keyboard focus; sub-menus open to the right.
   Touch screens: assets/app.js opens on the first tap (li.open). Phones:
   menus drop below their item and sub-menus fold in under their parent. */
.menubar ul{list-style:none;margin:0;padding:0;}
.dd-bar{display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
.dd-bar li{position:relative;}
.dd-bar > li.on > a.top{background:var(--brand-accent);color:var(--brand-accent-fg);border-color:var(--brand-accent);}
.menubar .caret{font-size:10px;opacity:.75;}
.dd-menu{display:none;position:absolute;top:100%;left:0;z-index:90;min-width:230px;max-width:min(360px,calc(100vw - 32px));background:#fff;border:1px solid var(--hairline);border-radius:6px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:4px;}
.dd-bar > li > .dd-menu{margin-top:0;}
.dd-bar > li.has-dd::after{content:"";position:absolute;left:0;right:0;top:100%;height:6px;}   /* hover bridge to the menu */
li.has-dd:hover > .dd-menu,li.has-dd:focus-within > .dd-menu,li.has-dd.open > .dd-menu{display:block;}
.dd-menu.sub{top:-5px;left:100%;}
.phases .dd-menu a.dd-item{display:flex;justify-content:space-between;gap:12px;width:100%;box-sizing:border-box;border:0;border-radius:4px;padding:6px 10px;background:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.phases .dd-menu a.dd-item:hover,.phases .dd-menu a.dd-item:focus-visible,.dd-menu li.open > a.dd-item{background:#EEF2F1;color:var(--ink);}
.phases .dd-menu a.dd-item.on{font-weight:700;}
@media (max-width:760px){
  .dd-menu{left:0;min-width:200px;}
  .dd-bar > li:nth-last-child(-n+2) > .dd-menu{left:auto;right:0;}
  .dd-menu.sub{position:static;box-shadow:none;border:0;border-left:2px solid var(--hairline);border-radius:0;margin-left:10px;padding:0 0 0 4px;}
}

/* ---- Compare: choose the groups to show ---- */
.cmp-pick{margin:0 0 12px;} .cmp-pick fieldset{display:flex;flex-wrap:wrap;gap:4px 16px;margin:0 0 6px;} .cmp-pick label.check{margin:0;}
/* ---- Value stream builder (A2) ---- */
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;}
.gv-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:0 0 16px;}
.gv-cards a.card{text-decoration:none;color:var(--ink);margin:0;} .gv-cards a.card:hover{border-color:var(--ink);}
.gv-cards h3{margin:0 0 4px;}
.vs-wrap{border:1px solid var(--hairline);border-radius:6px;background:#fff;}
.vs-wrap svg{display:block;max-width:none;}
.vs-thumb{max-height:260px;overflow:auto;}
.grid3 fieldset.plain label.check{display:block;margin:2px 0;}
/* Forms on a fixed grid: one row across the screen, labels on the bottom line so every input lines up. */
.vs-form{display:grid;gap:12px;align-items:end;}
.vs-form .field{display:flex;flex-direction:column;justify-content:flex-end;min-width:0;}
.vs-form input,.vs-form select{height:40px;box-sizing:border-box;}
.vs-row1{grid-template-columns:110px minmax(220px,1fr) 190px 230px;}
.vs-row1.no-path{grid-template-columns:110px minmax(220px,1fr) 190px;}
.vs-row2{grid-template-columns:repeat(3,minmax(150px,1fr));}
.vs-srow1{grid-template-columns:minmax(220px,2fr) minmax(200px,1.2fr) minmax(220px,1.4fr) 150px;}
.vs-srow2{grid-template-columns:1fr 1fr;}
.vs-picks{align-items:start;} .vs-pick input[type=text]{height:40px;box-sizing:border-box;margin:4px 0 8px;}
table.vs-next td:first-child{width:50%;} table.vs-next td:last-child{width:110px;}
@media (max-width:900px){ .vs-row1,.vs-row1.no-path,.vs-srow1{grid-template-columns:110px 1fr;} .vs-row1 .field:nth-child(2),.vs-srow1 .field:first-child{grid-column:span 1;} }
@media (max-width:560px){ .vs-form,.vs-row1,.vs-row1.no-path,.vs-row2,.vs-srow1,.vs-srow2{grid-template-columns:1fr;} }
@media print{ .vs-wrap{overflow:visible;border:0;} .vs-wrap svg{max-width:100%;height:auto;} }

/* Act as user (alpha.22): a bar on every page while a platform admin acts as someone. */
.sudo-banner{background:#7A2E0E;color:#fff;font-size:14px;}
.sudo-banner .inner{max-width:1200px;margin:0 auto;padding:8px 16px;display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap;}
.sudo-banner .btn{background:#fff;color:#7A2E0E;border-color:#fff;}

/* Coloured band on top of every layout card (alpha.23). The phase colour (--pc) where a card has one, else the
   brand accent; warning and danger cards keep their own colour. .card.band keeps working (same band). */
.card, .gv-section{border-top:5px solid var(--pc, var(--brand-accent));}
.card.danger-zone{border-top-color:#B23A48;}
.card.muted{border-top-color:var(--hairline);}
.card.dim{border-top-color:var(--pc, var(--brand-accent));}

/* Roles in Admin > Users (alpha.23). */
.roles-cell .pill{margin:0 4px 2px 0;}
.pill.role-consultant{background:#E3EEF9;border-color:#B5CFEA;color:#174A7A;}
.pill.role-client_rep{background:#F3EAF8;border-color:#D7BEE6;color:#5B2C78;}
.pill.role-team_member{background:#E6F4EE;border-color:#B7DCCA;color:#1F5A40;}
.pill.role-sponsor, .pill.role-approver{background:#FDF1DC;border-color:#F0D49A;color:#7A5410;}
/* Smaller tiles get a thinner band of the same colour. */
.gv-kpi, .stats div{border-top:3px solid var(--pc, var(--brand-accent));}

/* Lists (alpha.24): light alternate row banding and a filter box per column (assets/app.js setupLists()). */
table.t:not(.growth) tbody tr:nth-child(even) > td{background:#F8F9FB;}          /* without JavaScript */
table.t.zr tbody tr:nth-child(even) > td{background:transparent;}
table.t.zr tbody tr.alt > td{background:#F6F8FB;}
table.t:not(.growth) tbody tr:hover > td{background:#EEF3FA;}
table.t .filter-row th{background:var(--surface);padding:4px 6px;border-bottom:1px solid var(--hairline);}
table.t .filter-row input{width:100%;min-width:70px;padding:4px 6px;font-size:12.5px;font-family:var(--font-body);text-transform:none;letter-spacing:0;}
.filter-bar{display:flex;align-items:center;gap:10px;margin:0 0 8px;font-size:13px;color:var(--ink-soft);}
@media print{.filter-row,.filter-bar{display:none !important;}}
.filter-bar[hidden]{display:none;}

/* Module launcher (phase 6): ring logo opens tiles; the home page shows the same tiles. */
.launcher{position:relative;display:inline-block;}
.launcher > summary{list-style:none;cursor:pointer;display:inline-flex;}
.launcher > summary::-webkit-details-marker{display:none;}
.launcher[open] > summary{outline:2px solid var(--brand-accent);outline-offset:2px;border-radius:50%;}
.launch-menu{position:absolute;left:0;top:36px;z-index:90;background:#fff;border:1px solid var(--hairline);border-radius:10px;box-shadow:0 10px 30px rgba(26,26,46,.15);padding:10px;display:grid;grid-template-columns:repeat(2,minmax(180px,1fr));gap:8px;width:min(440px,92vw);font-family:var(--font-body);text-transform:none;letter-spacing:0;}
.lt{display:flex;flex-direction:column;gap:2px;text-decoration:none;color:var(--ink);border:1px solid var(--hairline);border-top:4px solid var(--brand-accent);border-radius:8px;padding:9px 12px;background:var(--surface);}
.lt:hover,.lt:focus-visible{box-shadow:0 4px 14px rgba(26,26,46,.10);}
.lt b{font-size:14px;} .lt span{font-size:12px;color:var(--ink-soft);}
.lt-assessments{border-top-color:#2a78d6;} .lt-delivery{border-top-color:#1F8A70;} .lt-clientorganisations{border-top-color:#7A5410;} .lt-admin{border-top-color:#5B2C78;}
.launch-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px;margin:0 0 18px;}
.launch-tiles .lt{padding:14px 16px;} .launch-tiles .lt b{font-size:16px;}
@media (max-width:600px){.launch-menu{grid-template-columns:1fr;}}

/* Delivery reports (phase 6). */
.report-bar{margin:0 0 14px;flex-wrap:wrap;}
.rep-phases{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;}
.rep-phase{border:1px solid var(--hairline);border-top:4px solid var(--pc);border-radius:8px;padding:10px 12px;}
.rep-phase .meter span{background:var(--pc);}
@media print{.rep-part{break-inside:auto;} .rep-part h2{break-after:avoid;} table.t{font-size:11px;}}
.sudo-pill{background:#7A2E0E;color:#fff;border-radius:999px;padding:2px 10px;font-size:13px;margin-right:8px;white-space:nowrap;}
.sudo-pill b,.sudo-banner b[data-sudo-left]{font-variant-numeric:tabular-nums;}
.sudo-pill.low{background:#B42318;}
/* 2.0.1: question lists in the builder share fixed columns so every sub-dimension lines up */
table.qtable{table-layout:fixed;}
table.qtable col.qc-code{width:64px;} table.qtable col.qc-pills{width:210px;} table.qtable col.qc-act{width:200px;}
table.qtable td.qc-pills,table.qtable td.qc-act{white-space:nowrap;} table.qtable td.qc-act{text-align:right;}
table.qtable td{overflow-wrap:anywhere;}
@media (max-width:700px){table.qtable col.qc-pills{width:120px;} table.qtable col.qc-act{width:110px;} table.qtable td.qc-pills,table.qtable td.qc-act{white-space:normal;}}
