Files
Leantime/public/assets/css/components/report-deck.css

1058 lines
87 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Stakeholder report deck — the `.rd-*` scoped design system for the strategy /
* program report (Overview / Logic Model / Resources / Impact Journey / Programs).
*
* Extracted from the blade partials' inline <style> blocks into one stylesheet
* (imported via main.less). Everything is scoped under `.rd-scope` (with
* `.rd-scope.rd-dark` dark-mode overrides) so it can't collide with the app's
* Bootstrap / legacy CSS. Order matters: `deck` defines the `.rd-scope` tokens
* and base layout first; the page sections build on them.
*/
/* ───────────────────────────── deck ───────────────────────────── */
/*
* Report deck — scoped styles. `.rd-*` class prefix isolates from the app's
* Bootstrap / legacy CSS. Layout discipline (§2): `minmax(0,1fr)` on every
* grid track, `min-width:0` on every grid/flex child, so nothing pushes the
* deck wider than the viewport.
*/
.rd-scope {
--rd-accent:#004766;
--rd-text-1:#182831;
--rd-text-2:#4a5a63;
--rd-text-3:#67747d; /* AA 4.5:1 — RA a11y-floor value, canonical */
--rd-text-4:#aab4bb;
--rd-line:#e3e8ea;
--rd-line-soft:#eef1f3;
--rd-bg:#fafbfb;
--rd-panel:#fff;
--rd-ok:#3E937A;
--rd-warn:#C09035;
--rd-warn-bg:#FBF3E4;
--rd-warn-tx:#8a6212;
--rd-danger:#C2295B;
--rd-danger-bg:#FBE9EF;
--rd-r-sm:11px;
--rd-r-xs:8px;
--rd-sh-sm:0 1px 3px rgba(20,40,50,.06);
--rd-sh-lg:0 20px 56px rgba(20,40,50,.16);
color:var(--rd-text-1);
}
/* Dark mode — server-stamped .rd-dark (mirrors the RA tab's .ra-dark).
Overriding the token layer adapts everything that reads var(--rd-*);
the few hardcoded literals in the page partials carry their own
.rd-dark overrides alongside their light rules. */
.rd-scope.rd-dark {
--rd-accent:#7fc1e0;
--rd-text-1:#e8eaec;
--rd-text-2:#b6bec4;
--rd-text-3:#97a1a8;
--rd-text-4:#6a747c;
--rd-line:#3a3f44;
--rd-line-soft:#313539;
--rd-bg:#222426;
--rd-panel:#292b2d;
--rd-ok:#57b598;
--rd-warn:#d9a441;
--rd-warn-bg:rgba(217,164,65,.14);
--rd-warn-tx:#d9a441;
--rd-danger:#e46589;
--rd-danger-bg:rgba(228,101,137,.14);
--rd-sh-sm:0 1px 3px rgba(0,0,0,.4);
--rd-sh-lg:0 20px 56px rgba(0,0,0,.5);
/* Stage tints as low-alpha overlays so they read as dark surfaces on the
panel instead of the light pastels used in light mode. */
--rd-s1-bg:rgba(74,133,181,.16);
--rd-s2-bg:rgba(62,147,122,.16);
--rd-s3-bg:rgba(192,144,53,.16);
--rd-s4-bg:rgba(142,106,173,.16);
--rd-s5-bg:rgba(45,125,94,.16);
}
/* Dark overrides for deck literals that bypass the token layer. */
.rd-scope.rd-dark .rd-kcell.has-detail:hover,
.rd-scope.rd-dark .rd-kcell.has-detail.open,
.rd-scope.rd-dark .rd-cardx{background:var(--rd-panel);}
.rd-scope.rd-dark .rd-kcell .kv .up{color:#57b598;background:rgba(87,181,152,.16);}
.rd-scope.rd-dark .rd-kcell .kv .down{color:#e46589;background:rgba(228,101,137,.16);}
.rd-scope *{min-width:0;}
/* Persistent header — one vertically-centered row. LEFT = orientation
(crumb / title); RIGHT = freshness → verdict → ⋮. */
.rd-hdr{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:18px;align-items:center;padding:12px 20px;background:var(--rd-panel);border-radius:var(--rd-r-sm);box-shadow:var(--rd-sh-sm);margin-bottom:10px;}
.rd-hdr .st{min-width:0;}
/* Title = <h1> + switcher, at the left edge (aligns with breadcrumb + meta). */
/* Title matches the Tasks pageheader treatment exactly (18px / 400 / text-1)
— headers stay consistent across views (review feedback 2026-08-03). */
.rd-hdr .st .h{margin:0;font-size:18px;font-weight:400;line-height:1.2;color:var(--rd-text-1);display:inline-flex;align-items:center;gap:8px;}
.rd-hdr .st .h .crumb-sep{color:var(--rd-text-4);}
/* Visually-hidden but screen-reader-available heading (switcher case). */
.rd-visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}
.rd-hdr .dropdown-menu .rd-hdr .dropdown-menu li a .fa-circle-dot{color:var(--rd-accent);}
.rd-hdr .prov{font-size:12px;color:var(--rd-text-3);margin:0;white-space:nowrap;}
/* Verdict + freshness stack right-aligned; the grid centers the pair
as one group against the title (review feedback 2026-08-03). */
.rd-hdr .verdict{min-width:0;display:flex;flex-direction:column;align-items:flex-end;gap:2px;}
/* ⋮ is its own column, centered with the rest of the row. */
.rd-hdr .rd-actions{line-height:1;display:flex;align-items:center;}
.rd-hdr .rd-actions .dropdown{margin:0 !important;padding:0 !important;line-height:1 !important;display:inline-flex !important;}
.rd-hdr .rd-actions .dropdown-toggle.btn{padding:0 4px !important;margin:0 !important;height:auto !important;line-height:1.4 !important;min-width:0 !important;border:none !important;background:transparent !important;color:var(--rd-text-4) !important;font-size:16px !important;box-shadow:none !important;}
.rd-hdr .rd-actions .dropdown-toggle.btn:hover{color:var(--rd-text-2) !important;background:rgba(0,0,0,.04) !important;border-radius:6px;}
.rd-hdr .verdict .v{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:600;color:var(--rd-text-1);}
.rd-hdr .verdict .v .dot{width:10px;height:10px;border-radius:50%;flex:none;}
/* Compact period picker — one button showing current period; click opens a
dropdown with the 3 quarter presets + a custom-range mini-form. Replaces the
inline pill row; the design (§3 + board mockup p1) calls for a stated period
with a single affordance to change it, not four always-visible options. */
.rd-picker{position:relative;}
.rd-picker-btn{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:13px;color:var(--rd-text-1);background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:22px;padding:7px 14px;cursor:pointer;box-shadow:var(--rd-sh-sm);}
.rd-picker-btn:hover{border-color:var(--rd-text-4);}
.rd-picker-btn .rd-picker-q{font-weight:600;}
.rd-picker-btn .rd-picker-range{color:var(--rd-text-3);font-size:12px;}
.rd-picker-btn i{font-size:11px;color:var(--rd-text-3);}
/* Picker dropdown — sized defensively against the app's global anchor/input
styles that would otherwise inflate everything (Bootstrap 2.x menus, form
inputs, etc.). Fixed width + explicit font-size on every text element. */
.rd-picker-menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);box-shadow:var(--rd-sh-lg);width:280px;padding:4px;z-index:100;font-size:12px;line-height:1.3;}
.rd-picker-menu[hidden]{display:none;}
.rd-picker-menu *{box-sizing:border-box;}
.rd-picker-opt{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;border-radius:6px;text-decoration:none;color:var(--rd-text-1);gap:10px;font-size:12px;line-height:1.3;}
.rd-picker-opt:hover{background:var(--rd-bg);color:var(--rd-text-1);text-decoration:none;}
.rd-picker-opt.on{background:rgba(0,71,102,.06);color:var(--rd-accent);}
.rd-picker-opt .l{font-size:12.5px;font-weight:500;color:inherit;}
.rd-picker-opt.on .l{font-weight:600;}
.rd-picker-opt .d{font-size:10.5px;color:var(--rd-text-3);font-weight:400;}
.rd-picker-sep{height:1px;background:var(--rd-line-soft);margin:4px 4px;}
.rd-picker-custom{padding:6px 10px 8px;margin:0;}
.rd-picker-cl{display:block;font-size:9.5px;color:var(--rd-text-3);text-transform:uppercase;letter-spacing:.4px;margin:0 0 5px;font-weight:600;}
.rd-picker-crow{display:flex;align-items:center;gap:5px;}
.rd-picker-cinput{flex:1;min-width:0;width:auto;font:inherit;font-size:11.5px;line-height:1.2;padding:5px 7px;height:26px;border:1px solid var(--rd-line);border-radius:5px;background:var(--rd-panel);color:var(--rd-text-1);margin:0;box-shadow:none;}
.rd-picker-cinput:focus{outline:none;border-color:var(--rd-accent);}
.rd-picker-cdash{color:var(--rd-text-3);font-size:11px;flex:none;}
.rd-picker-capply{font:inherit;font-size:11px;font-weight:500;color:#fff;background:var(--rd-accent);border:none;border-radius:5px;padding:5px 9px;height:26px;cursor:pointer;flex:none;}
.rd-arrows{display:flex;gap:4px;}
.rd-arrow{background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--rd-text-2);}
.rd-arrow:hover{color:var(--rd-text-1);border-color:var(--rd-text-4);}
.rd-arrow[disabled]{opacity:.4;cursor:not-allowed;}
/* Deck — one panel that sizes to the active page (no dead space on short pages).
Pages are stacked in a horizontal track; we translate the track and only the
active page's content contributes to height. */
.rd-deck{background:var(--rd-panel);border-radius:var(--rd-r-sm);box-shadow:var(--rd-sh-lg);overflow:hidden;position:relative;}
.rd-deck-viewport{overflow:hidden;position:relative;}
.rd-deck-track{display:flex;align-items:flex-start;transition:transform .28s cubic-bezier(.4,.15,.25,1);}
.rd-page{flex:0 0 100%;padding:24px 26px;min-width:100%;width:100%;}
.rd-page:not(.on){visibility:hidden;height:0;padding-top:0;padding-bottom:0;}
/* Page-1 KPI band — value-first, delta inline, lowercase label beneath.
Matches the mockup: big number reads first, the "what" is a quiet caption. */
.rd-kpi{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:16px;}
.rd-kcell{padding:13px 16px;border-radius:var(--rd-r-xs);background:var(--rd-bg);}
/* KV row: center-align vertically so the delta pill and the /X subscript
both sit at the number's optical center instead of dropping to its baseline
(which made them look "small next to" the big number). */
.rd-kcell .kv{font-size:28px;font-weight:600;letter-spacing:-.6px;line-height:1;display:flex;align-items:center;gap:10px;color:var(--rd-text-1);}
.rd-kcell .kv small{font-size:15px;color:var(--rd-text-3);font-weight:500;align-self:flex-end;margin-bottom:2px;margin-left:-2px;letter-spacing:.5px;}
/* Delta pills — the "vs prior" signal needs to READ, not hide. Green pill for
gains, red pill for losses. Bigger + backed + weighted so it's not lost next
to the big number. */
.rd-kcell .kv .up,
.rd-kcell .kv .down{display:inline-flex;align-items:center;gap:3px;font-size:12px;font-weight:700;padding:4px 10px;border-radius:20px;line-height:1;letter-spacing:.2px;}
.rd-kcell .kv .up{color:#1a7d52;background:#dcf1e6;}
.rd-kcell .kv .down{color:#a11a44;background:#fbe0e8;}
.rd-kcell .kv .up i,
.rd-kcell .kv .down i{font-size:9px;}
.rd-kcell .kl{font-size:12.5px;color:var(--rd-text-2);margin-top:5px;display:flex;align-items:center;gap:6px;}
.rd-kcell.risk .kv{color:var(--rd-danger);}
/* KPI drill-down — hover the whole cell to see the list of items behind the
count (which milestones completed, which goals off-track, etc.). Compact
popover; won't render if the count is zero.
Affordance: cursor:pointer + subtle hover treatment + a visible "see list"
chevron at the top-right so the interactivity is discoverable, not a
guess-the-dot. */
.rd-kcell{position:relative;transition:background .12s,box-shadow .12s;}
.rd-kcell.has-detail{cursor:pointer;}
.rd-kcell.has-detail:hover{background:#fff;box-shadow:var(--rd-sh-sm);}
.rd-kcell.has-detail .see-list{position:absolute;top:8px;right:10px;display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:600;color:var(--rd-text-3);text-transform:uppercase;letter-spacing:.4px;opacity:.7;transition:opacity .12s,color .12s;pointer-events:none;}
.rd-kcell.has-detail .see-list i{font-size:9px;}
.rd-kcell.has-detail:hover .see-list{opacity:1;color:var(--rd-accent);}
.rd-kcell .kdrill{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);box-shadow:var(--rd-sh-lg);padding:8px;z-index:20;opacity:0;visibility:hidden;transform:translateY(-3px);transition:opacity .12s,transform .12s,visibility .12s;font-size:11.5px;line-height:1.4;text-align:left;letter-spacing:0;}
.rd-kcell.has-detail.open .kdrill{opacity:1;visibility:visible;transform:translateY(0);}
.rd-kcell.has-detail.open{background:#fff;box-shadow:var(--rd-sh-sm);}
.rd-kcell.has-detail.open .see-list{opacity:1;color:var(--rd-accent);}
.rd-kcell.has-detail.open .see-list i{transform:rotate(180deg);}
.rd-kcell.has-detail .see-list i{transition:transform .18s;}
.rd-kcell .kdrill .kd-hd{font-size:9.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--rd-text-3);padding:2px 6px 6px;}
.rd-kcell .kdrill ul{list-style:none;margin:0;padding:0;}
.rd-kcell .kdrill li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;color:var(--rd-text-1);font-weight:400;}
.rd-kcell .kdrill li:hover{background:var(--rd-bg);}
.rd-kcell .kdrill li .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1;}
.rd-kcell .kdrill li .mt{color:var(--rd-text-3);font-size:10.5px;flex:none;}
.rd-kcell .kdrill .kd-more{font-size:10.5px;color:var(--rd-text-3);font-style:italic;padding:4px 6px 2px;}
/* Section container inside a page. */
.rd-section{margin-top:20px;}
.rd-section:first-child{margin-top:0;}
.rd-section .hd{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;}
.rd-section .hd .t{font-size:14px;font-weight:600;color:var(--rd-text-1);}
.rd-section .hd .sub{font-size:12px;color:var(--rd-text-3);}
.rd-empty{padding:22px;text-align:center;color:var(--rd-text-3);font-size:13px;background:var(--rd-bg);border-radius:var(--rd-r-xs);}
/* Stage colors — five Logic Model stages, matching the canvas board. Used
across Page 1 (ToC narrative colored spans), Page 2 (5-stage board), and
Page 3 (coverage matrix rows tied to stages). */
.rd-scope{
--rd-s1:#4A85B5; --rd-s1-bg:#e5eef6;
--rd-s2:#3E937A; --rd-s2-bg:#e2efe9;
--rd-s3:#C09035; --rd-s3-bg:#f6ecd7;
--rd-s4:#8E6AAD; --rd-s4-bg:#eee5f4;
--rd-s5:#2D7D5E; --rd-s5-bg:#dbeae1;
}
/* Task-card standard (from the canvas board): title left, status icon +
owner avatar top-right, assumption line beneath, optional read-out
fold below. Used on Page 2 for the 5-stage LM cards. Tight padding —
5 columns share the deck width so cards can't afford bulk. */
.rd-cardx{border-radius:var(--rd-r-xs);padding:8px 10px;background:#fff;border:1px solid var(--rd-line-soft);border-left:3px solid var(--rd-text-4);min-width:0;}
.rd-cx-top{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;}
.rd-cx-t{font-size:12.5px;font-weight:600;line-height:1.3;min-width:0;color:var(--rd-text-1);flex:1;}
.rd-cx-t .cd{display:none;} /* colored border already carries stage identity */
.rd-cx-corner{display:flex;align-items:center;gap:5px;flex-shrink:0;}
/* Icon-only status pill — compact, hover for full label. Colored circle
maps to the LM canvas status icons (fa-circle-check / -exclamation / etc). */
.rd-pill-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:var(--rd-bg);flex:none;cursor:help;}
.rd-pill-icon i{font-size:14px;line-height:1;}
.rd-pill-ok i{color:#3E937A;}
.rd-pill-wip i{color:#4A85B5;}
.rd-pill-draft i{color:#9aa4ab;}
.rd-pill-flag i{color:var(--rd-danger);}
.rd-avatar{width:18px;height:18px;border-radius:50%;background:#5aa889;color:#fff;font-size:8px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;flex:none;text-decoration:none;}
.rd-cx-hyp{font-size:10.5px;color:var(--rd-text-3);line-height:1.4;margin-top:5px;font-style:italic;}
.rd-cx-hyp .hl{font-style:normal;font-weight:600;color:var(--rd-text-2);}
.rd-cx-status{font-size:11.5px;color:var(--rd-text-3);margin-top:7px;display:inline-flex;align-items:center;gap:5px;}
.rd-cx-status .sd{width:7px;height:7px;border-radius:50%;}
.rd-cx-empty{border:1px dashed var(--rd-line);border-radius:var(--rd-r-xs);padding:10px 11px;font-size:11.5px;color:var(--rd-text-3);text-align:center;}
/* Placeholder for pages not yet built. Removed as each page lands. */
.rd-placeholder{padding:38px 24px;text-align:center;color:var(--rd-text-3);font-size:13px;line-height:1.5;background:repeating-linear-gradient(135deg,#fafbfb,#fafbfb 8px,#f4f6f7 8px,#f4f6f7 16px);border-radius:var(--rd-r-xs);}
.rd-placeholder .h{font-size:15px;font-weight:600;color:var(--rd-text-2);margin-bottom:6px;}
.rd-placeholder .coming{display:inline-block;font-size:10px;font-weight:600;color:var(--rd-accent);background:rgba(0,71,102,.08);border-radius:10px;padding:2px 8px;text-transform:uppercase;letter-spacing:.4px;margin-bottom:12px;}
/* Print (§7) — expand all pages, hide screen affordances. */
@media print {
.rd-deck { box-shadow: none; }
.rd-deck-viewport { overflow: visible !important; }
.rd-deck-track { transform: none !important; display: block !important; }
.rd-page { min-width: 0 !important; width: 100% !important; padding: 12px 0 24px; border-top: 1px solid var(--rd-line-soft); page-break-inside: avoid; }
.rd-page:first-child { border-top: 0; padding-top: 0; }
.rd-page:not(.on) { visibility: visible !important; height: auto !important; padding-top: 12px !important; padding-bottom: 24px !important; }
}
/* ───────────────────────────── page-overview ───────────────────────────── */
.rd-scope .p1-topband{display:grid;grid-template-columns:1.55fr minmax(0,1fr);gap:12px;margin-bottom:14px;align-items:stretch;}
.rd-scope .p1-hero{border:1px solid #d3e4dc;border-radius:var(--rd-r-sm);background:linear-gradient(180deg,var(--rd-s5-bg) 0%,#fff 80px);padding:14px 16px;}
.rd-scope .p1-hero .eye{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.rd-scope .p1-hero .slabel{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-s5);}
.rd-scope .p1-hero .rec{font-size:11px;font-weight:500;color:var(--rd-text-3);display:flex;align-items:center;gap:6px;}
.rd-scope .p1-hero .rec i{font-size:11px;color:var(--rd-ok);}
.rd-scope .p1-hero .rec-note{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--rd-text-3);font-style:italic;}
.rd-scope .p1-hero .rec-note i{font-size:10px;color:var(--rd-text-4);}
.rd-scope .p1-hero h3{font-size:17px;font-weight:600;letter-spacing:-.2px;line-height:1.3;color:var(--rd-text-1);margin:0;}
.rd-scope .p1-hero p{font-size:13px;color:var(--rd-text-2);line-height:1.5;margin-top:6px;margin-bottom:0;}
.rd-scope .p1-hero .hf{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap;}
.rd-scope .p1-hero .badge-goal{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:500;padding:3px 10px;border-radius:20px;background:var(--rd-s3-bg);color:#7d5c18;}
.rd-scope .p1-hero .badge-goal i{font-size:9px;}
.rd-scope .p1-hero .hm{font-size:11.5px;color:var(--rd-text-3);}
.rd-scope .p1-hero.empty{background:none;border-style:dashed;color:var(--rd-text-3);font-size:12.5px;text-align:center;padding:20px 16px;}
.rd-scope .p1-hero.empty .h{font-size:13.5px;font-weight:600;color:var(--rd-text-2);margin-bottom:4px;}
.rd-scope .p1-hero.empty .p1-hero-cta{display:inline-flex;align-items:center;gap:7px;margin-top:12px;font-size:12.5px;font-weight:600;color:var(--rd-accent);text-decoration:none;background:rgba(0,71,102,.06);border-radius:20px;padding:7px 16px;transition:background .12s;}
.rd-scope .p1-hero.empty .p1-hero-cta:hover{background:rgba(0,71,102,.12);text-decoration:none;color:var(--rd-accent);}
.rd-scope .p1-hero.empty .p1-hero-cta i{font-size:11px;}
.rd-scope.rd-dark .p1-hero.empty .p1-hero-cta{background:rgba(127,193,224,.12);}
.rd-scope.rd-dark .p1-hero.empty .p1-hero-cta:hover{background:rgba(127,193,224,.2);}
/* Dark: the hero gradient and border are hardcoded light literals (var(--rd-s5-bg) → #fff,
#d3e4dc). Land the fade on the panel instead of white, dark the border, and keep the
goal badge legible now that --rd-s3-bg is a dark overlay. */
.rd-scope.rd-dark .p1-hero{border-color:var(--rd-line);background:linear-gradient(180deg,var(--rd-s5-bg) 0%,var(--rd-panel) 80px);}
.rd-scope.rd-dark .p1-hero .badge-goal{color:var(--rd-warn);}
.rd-scope .p1-needs{background:var(--rd-danger-bg);border-radius:var(--rd-r-sm);border-left:4px solid var(--rd-danger);padding:14px 16px;}
.rd-scope .p1-needs.calm{background:var(--rd-bg);border-left-color:var(--rd-ok);}
.rd-scope .p1-needs .nt{margin-bottom:7px;display:flex;align-items:center;gap:7px;font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-danger);}
.rd-scope .p1-needs.calm .nt{color:var(--rd-ok);}
.rd-scope .p1-needs .nt i{font-size:10px;}
.rd-scope .p1-needs .nx{font-size:13px;color:var(--rd-text-1);line-height:1.55;}
.rd-scope .p1-needs .na-grp{margin-top:10px;}
.rd-scope .p1-needs .na-grp:first-child{margin-top:0;}
.rd-scope .p1-needs .na-hd{font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--rd-danger);margin-bottom:5px;}
.rd-scope .p1-needs.calm .na-hd{color:var(--rd-ok);}
.rd-scope .p1-needs .na-items{list-style:none;margin:0;padding:0;}
.rd-scope .p1-needs .na-items li{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:3px 0;font-size:12.5px;color:var(--rd-text-1);}
.rd-scope .p1-needs .na-name{font-weight:600;}
.rd-scope .p1-needs .na-badge{display:inline-flex;align-items:center;font-size:10px;font-weight:700;padding:2px 8px;border-radius:20px;background:var(--rd-warn-bg);color:var(--rd-warn-tx);text-transform:none;letter-spacing:.2px;}
.rd-scope .p1-needs .na-badge.miss{background:var(--rd-danger-bg);color:var(--rd-danger);}
.rd-scope .p1-needs .na-meta{color:var(--rd-text-3);font-size:11.5px;font-weight:400;}
.rd-scope .p1-needs .na-more{color:var(--rd-text-3);font-size:11.5px;font-style:italic;padding-top:2px;}
.rd-scope .p1-toc{border:1px solid var(--rd-line);border-left:4px solid var(--rd-s5);border-radius:var(--rd-r-sm);padding:13px 17px;margin-bottom:10px;}
.rd-scope .p1-toc .tl{margin-bottom:6px;font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-s5);display:flex;align-items:center;gap:6px;}
.rd-scope .p1-toc .tl .lbl-inner{display:inline-flex;align-items:center;gap:6px;flex:1;}
.rd-scope .p1-toc .tl .toc-toggle{background:none;border:none;padding:2px 6px;margin-left:auto;cursor:pointer;color:var(--rd-text-3);font-size:10px;line-height:1;border-radius:4px;}
.rd-scope .p1-toc .tl .toc-toggle:hover{background:var(--rd-bg);color:var(--rd-text-1);}
.rd-scope .p1-toc .tl .toc-toggle i{transition:transform .18s;display:inline-block;}
.rd-scope .p1-toc.collapsed .tl .toc-toggle i{transform:rotate(-90deg);}
.rd-scope .p1-toc .tx{font-size:13.5px;line-height:1.6;color:var(--rd-text-2);overflow:hidden;max-height:600px;transition:max-height .22s ease,opacity .18s ease,margin .18s ease,padding .18s ease;margin-top:6px;}
.rd-scope .p1-toc.collapsed .tx{max-height:0;opacity:0;margin:0;padding:0;pointer-events:none;}
.rd-scope .p1-toc.collapsed{padding-bottom:8px;}
.rd-scope .p1-toc .n1{color:var(--rd-s1);font-weight:600;}
.rd-scope .p1-toc .n2{color:var(--rd-s2);font-weight:600;}
.rd-scope .p1-toc .n3{color:var(--rd-s3);font-weight:600;}
.rd-scope .p1-toc .n4{color:var(--rd-s4);font-weight:600;}
.rd-scope .p1-toc .n5{color:var(--rd-s5);font-weight:600;}
.rd-scope .p1-toc.empty{color:var(--rd-text-3);font-style:italic;border-left-color:var(--rd-line);}
/* Color legend popover — hover the info icon on the ToC label to show
which color maps to which stage. Vanilla CSS hover; no JS needed. */
.rd-scope .p1-info{position:relative;display:inline-flex;}
.rd-scope .p1-info .ii{width:14px;height:14px;border-radius:50%;background:var(--rd-line-soft);color:var(--rd-text-3);display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;cursor:help;text-transform:none;letter-spacing:0;}
.rd-scope .p1-info .ii:hover{background:var(--rd-line);color:var(--rd-text-1);}
.rd-scope .p1-info .pop{position:absolute;top:calc(100% + 8px);left:-6px;background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);box-shadow:var(--rd-sh-lg);padding:10px 12px;width:220px;font-size:11.5px;line-height:1.4;color:var(--rd-text-2);z-index:50;opacity:0;visibility:hidden;transform:translateY(-3px);transition:opacity .12s,transform .12s,visibility .12s;text-transform:none;letter-spacing:0;font-weight:400;}
.rd-scope .p1-info:hover .pop,
.rd-scope .p1-info:focus-within .pop{opacity:1;visibility:visible;transform:translateY(0);}
.rd-scope .p1-info .pop .h{font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:6px;}
.rd-scope .p1-info .pop .lg{display:flex;align-items:center;gap:8px;padding:3px 0;}
.rd-scope .p1-info .pop .lg .sw{width:12px;height:12px;border-radius:3px;flex:none;}
.rd-scope .p1-info .pop .lg .nm{font-weight:600;color:var(--rd-text-1);}
.rd-scope .p1-info .pop .lg .sub{color:var(--rd-text-3);margin-left:auto;font-size:10.5px;}
/* Strategic goals — a compact goal-per-row list. Progress bar + status pill
+ current/target read. Enough detail for a board to grok how the goals sit,
without a full goal-board dive (that's Goals & Outcomes). */
.rd-scope .p1-goals{margin-bottom:14px;}
.rd-scope .p1-goals-hd{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px;}
.rd-scope .p1-goals-hd .l{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-accent);}
.rd-scope .p1-goals-hd .sub{font-size:11.5px;color:var(--rd-text-3);}
.rd-scope .p1-goals-list{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);overflow:hidden;background:var(--rd-panel);}
.rd-scope .p1-goal{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) 84px 78px;gap:12px;align-items:center;padding:11px 14px;border-top:1px solid var(--rd-line-soft);}
.rd-scope .p1-goal:first-child{border-top:none;}
.rd-scope .p1-goal .gn{min-width:0;}
.rd-scope .p1-goal .gn .t{font-size:13px;font-weight:600;color:var(--rd-text-1);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rd-scope .p1-goal .gn .m{font-size:11px;color:var(--rd-text-3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rd-scope .p1-goal .gbar-wrap{min-width:0;}
.rd-scope .p1-goal .gbar{height:6px;background:#eef1f3;border-radius:3px;overflow:hidden;}
.rd-scope .p1-goal .gbar > i{display:block;height:100%;border-radius:3px;background:var(--rd-ok);}
.rd-scope .p1-goal.atrisk .gbar > i{background:var(--rd-warn);}
.rd-scope .p1-goal.miss .gbar > i{background:var(--rd-danger);}
.rd-scope .p1-goal .gvals{font-size:11.5px;color:var(--rd-text-3);margin-top:4px;font-variant-numeric:tabular-nums;}
.rd-scope .p1-goal .gpct{font-size:15px;font-weight:600;color:var(--rd-text-1);text-align:right;font-variant-numeric:tabular-nums;}
.rd-scope .p1-goal .gstat{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;padding:3px 9px;border-radius:20px;text-transform:none;letter-spacing:.2px;justify-self:end;}
.rd-scope .p1-goal .gstat.ontrack{background:#dcf1e6;color:#1a7d52;}
.rd-scope .p1-goal .gstat.atrisk{background:var(--rd-warn-bg);color:var(--rd-warn-tx);}
.rd-scope .p1-goal .gstat.miss{background:var(--rd-danger-bg);color:var(--rd-danger);}
.rd-scope .p1-goal .gstat.none{background:var(--rd-bg);color:var(--rd-text-3);}
.rd-scope .p1-goals-empty{padding:22px;text-align:center;color:var(--rd-text-3);font-size:12.5px;background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);}
/* Theory-health strip — a summary bar showing all 4 stage-to-stage links at
once (segmented by status), plus the detail on any fragile link beneath.
Reads positive-first: the segments read left→right so a healthy chain
shows mostly green; a fragile chain has an amber segment mid-flow. */
.rd-scope .p1-theory{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);padding:11px 15px;background:var(--rd-panel);}
.rd-scope .p1-theory .hd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;}
.rd-scope .p1-theory .hd .l{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);}
.rd-scope .p1-theory .hd .rd{font-size:12px;color:var(--rd-text-2);}
.rd-scope .p1-theory .hd .rd b{color:var(--rd-text-1);font-weight:600;}
.rd-scope .p1-theory .hd .rd.risk b{color:var(--rd-warn-tx);}
/* Chain layout — 5 stage chips with 4 colored connector "arrows" between
them. Each connector is a horizontal band with the health icon as a badge
sitting on top. Reads left-to-right as a mini logic model with per-link
health surfaced by icon color + prominence (not text). */
.rd-scope .p1-theory .segs{display:flex;align-items:center;gap:0;margin-bottom:12px;padding:2px 0;}
.rd-scope .p1-theory .stage{flex:none;padding:5px 10px;border-radius:20px;font-size:11px;font-weight:600;color:#fff;letter-spacing:.1px;white-space:nowrap;}
.rd-scope .p1-theory .stage.s1{background:var(--rd-s1);}
.rd-scope .p1-theory .stage.s2{background:var(--rd-s2);}
.rd-scope .p1-theory .stage.s3{background:var(--rd-s3);}
.rd-scope .p1-theory .stage.s4{background:var(--rd-s4);}
.rd-scope .p1-theory .stage.s5{background:var(--rd-s5);}
.rd-scope .p1-theory .conn{position:relative;flex:1;min-width:24px;height:3px;margin:0 4px;border-radius:2px;cursor:default;}
.rd-scope .p1-theory .conn.ok{background:#3E937A;}
.rd-scope .p1-theory .conn.warning{background:#C09035;}
.rd-scope .p1-theory .conn.risk{background:var(--rd-danger);}
.rd-scope .p1-theory .conn.none{background:var(--rd-line);}
/* Badge — panel-white circle with a small colored icon centered inside. The
badge circle carries the boundary; the icon sits at a uniform size that
works for any glyph shape (circles, triangles, etc.) so no icon looks
larger, smaller, or off-baseline relative to the others. */
.rd-scope .p1-theory .conn .badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;background:var(--rd-panel);display:grid;place-items:center;}
.rd-scope .p1-theory .conn .badge i{font-size:14px;line-height:1;display:block;}
.rd-scope .p1-theory .conn.ok .badge i{color:#3E937A;}
.rd-scope .p1-theory .conn.warning .badge i{color:#C09035;}
.rd-scope .p1-theory .conn.risk .badge i{color:var(--rd-danger);}
.rd-scope .p1-theory .conn.none .badge i{color:var(--rd-text-3);}
.rd-scope .p1-theory .conn .tip{position:absolute;bottom:calc(100% + 12px);left:50%;transform:translateX(-50%) translateY(4px);background:var(--rd-text-1);color:#fff;font-size:11px;font-weight:400;padding:8px 10px;border-radius:6px;line-height:1.4;box-shadow:var(--rd-sh-lg);opacity:0;visibility:hidden;transition:opacity .12s,transform .12s,visibility .12s;z-index:10;text-align:left;pointer-events:none;width:220px;}
.rd-scope .p1-theory .conn .tip::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--rd-text-1);}
.rd-scope .p1-theory .conn .tip b{color:#fff;font-weight:600;display:block;margin-bottom:3px;}
.rd-scope .p1-theory .conn .tip em{font-style:italic;color:rgba(255,255,255,.85);}
.rd-scope .p1-theory .conn:hover .tip{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0);}
.rd-scope .p1-theory .detail{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;color:var(--rd-warn-tx);background:var(--rd-warn-bg);border-radius:var(--rd-r-xs);padding:12px 15px;line-height:1.55;}
.rd-scope .p1-theory .detail.crit{color:var(--rd-danger);background:var(--rd-danger-bg);}
.rd-scope .p1-theory .detail.crit i{color:var(--rd-danger);}
.rd-scope .p1-theory .detail i{font-size:13px;color:#b8860b;margin-top:3px;flex:none;}
.rd-scope .p1-theory .detail b{font-weight:600;}
.rd-scope .p1-theory .detail b{color:var(--rd-text-1);font-weight:600;}
.rd-scope .p1-theory .detail em{font-style:italic;color:var(--rd-text-2);}
.rd-scope .p1-theory .calm-line{display:flex;gap:8px;align-items:center;font-size:12.5px;color:var(--rd-text-2);}
.rd-scope .p1-theory .calm-line i{color:var(--rd-ok);font-size:12px;}
/* "Assumption unproven" pill — a proper visible state chip on its own line,
not an inline dashed-underlined phrase. Icon + label reads as a status,
hover reveals the "how to fix" explainer. */
.rd-scope .p1-theory .detail-info{position:relative;display:inline-flex;align-items:center;gap:5px;margin-left:0;}
/* Sits inline with the assumption text — vertical-align:middle + a small left
margin keeps it on the same visual line without pushing to a new row. */
.rd-scope .p1-theory .detail-info.evidence-tag{display:inline-flex;vertical-align:middle;margin:0 0 0 6px;padding:3px 10px;border-radius:20px;background:rgba(194,41,91,.11);cursor:help;font-weight:600;font-size:12px;color:var(--rd-danger);line-height:1.2;}
.rd-scope .p1-theory .detail:not(.crit) .detail-info.evidence-tag{background:rgba(192,144,53,.13);color:var(--rd-warn-tx);}
.rd-scope .p1-theory .detail-info.evidence-tag i{font-size:11px;opacity:.9;}
.rd-scope .p1-theory .detail-info.evidence-tag .tag{font-weight:600;border-bottom:none;opacity:1;font-size:12px;letter-spacing:.1px;}
.rd-scope .p1-theory .detail-info .lk{font-weight:600;color:inherit;border-bottom:1px dashed currentColor;cursor:help;opacity:.75;font-size:12.5px;}
/* Reset top to auto — without this, the .p1-info base rule's `top: calc(100% + 8px)`
still applies (both classes are on the element), and the popover stretches
across the trigger instead of anchoring to bottom. */
.rd-scope .p1-theory .detail-info .pop{position:absolute;top:auto;bottom:calc(100% + 6px);left:0;background:var(--rd-text-1);color:#fff;font-size:12.5px;font-weight:400;padding:10px 12px;border-radius:6px;line-height:1.5;box-shadow:var(--rd-sh-lg);opacity:0;visibility:hidden;transform:translateY(3px);transition:opacity .12s,transform .12s,visibility .12s;z-index:10;text-align:left;pointer-events:none;width:280px;font-style:normal;letter-spacing:0;}
/* These tooltips use var(--rd-text-1) as their fill — which INVERTS to a
light bg in dark mode, hiding the white text. Pin a fixed dark fill. */
.rd-scope.rd-dark .p1-theory .conn .tip,
.rd-scope.rd-dark .p1-theory .detail-info .pop{background:#0d0e0f;color:#e8eaec;}
/* The tooltip arrow inherits var(--rd-text-1) too — pin it to the dark fill so
it doesn't render as a light triangle under the dark tooltip. */
.rd-scope.rd-dark .p1-theory .conn .tip::after{border-top-color:#0d0e0f;}
.rd-scope .p1-theory .detail-info:hover .pop,
.rd-scope .p1-theory .detail-info:focus-within .pop{opacity:1;visibility:visible;transform:translateY(0);}
.rd-scope .p1-theory .detail-info .pop .h{font-size:10.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:rgba(255,255,255,.7);display:block;margin-bottom:6px;}
.rd-scope .p1-theory .detail-info .pop .lg{display:flex;align-items:center;gap:8px;padding:4px 0;font-weight:400;color:#fff;}
.rd-scope .p1-theory .detail-info .pop .lg i{font-size:13px;flex:none;}
.rd-scope .p1-theory .detail-info .pop .lg .nm{font-weight:600;color:#fff;flex:1;min-width:0;font-size:12.5px;}
.rd-scope .p1-theory .detail-info .pop .lg .sub{color:rgba(255,255,255,.65);font-size:11.5px;text-transform:none;}
/* "Also fragile" chip row — sits under the primary callout, one chip per
additional fragile link so all fragile signals are visible without a hover. */
.rd-scope .p1-theory .also-fragile{display:flex;align-items:center;gap:8px;margin-top:8px;padding:0 3px;font-size:12.5px;flex-wrap:wrap;}
.rd-scope .p1-theory .also-fragile .lbl{font-size:10.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--rd-text-3);}
.rd-scope .p1-theory .af-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:500;cursor:default;}
.rd-scope .p1-theory .af-chip i{font-size:11px;}
.rd-scope .p1-theory .af-chip.warning{background:var(--rd-warn-bg);color:var(--rd-warn-tx);}
.rd-scope .p1-theory .af-chip.warning i{color:#C09035;}
.rd-scope .p1-theory .af-chip.risk{background:var(--rd-danger-bg);color:var(--rd-danger);}
.rd-scope .p1-theory .af-chip.risk i{color:var(--rd-danger);}
.rd-scope .p1-narrative{margin:14px 0;border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);background:var(--rd-panel);padding:14px 18px;}
.rd-scope .p1-narrative .lb{font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:10px;display:flex;align-items:center;gap:7px;}
.rd-scope .p1-narrative .lb i{font-size:11px;}
.rd-scope .p1-narrative .nn{display:flex;flex-direction:column;gap:10px;}
.rd-scope .p1-narrative .nr{font-size:13.5px;line-height:1.55;color:var(--rd-text-2);}
.rd-scope .p1-narrative .nr.portfolio{padding-bottom:10px;border-bottom:1px solid var(--rd-line-soft);}
.rd-scope .p1-narrative .nr b{color:var(--rd-text-1);font-weight:600;}
.rd-scope .p1-narrative .nr .dt{font-size:11.5px;color:var(--rd-text-4);margin-left:8px;font-style:italic;}
/* Empty-state nudge — the section stays visible with no updates so the team
knows it exists and is prompted to keep status current. */
.rd-scope .p1-narrative .nempty{font-size:13px;line-height:1.55;color:var(--rd-text-3);}
.rd-scope .p1-narrative .nempty b{color:var(--rd-text-2);font-weight:600;}
/* ───────────────────────────── page-lm ───────────────────────────── */
.rd-scope .p2-wrap{margin:0 auto;}
.rd-scope .p2-wrap *{min-width:0;}
.rd-scope .p2-subhead{font-size:12.5px;color:var(--rd-text-3);margin:0 0 14px 2px;line-height:1.5;}
/* Belief — quiet card at top with see-more expand */
.rd-scope .p2-believe{background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);padding:16px 20px;margin-bottom:14px;font-size:13.5px;line-height:1.55;color:var(--rd-text-3);}
.rd-scope .p2-believe .lb{font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--rd-text-4);display:block;margin-bottom:6px;}
.rd-scope .p2-believe b{color:var(--rd-text-2);font-weight:600;}
/* Stage card */
.rd-scope .p2-stage{background:var(--rd-panel);border:1px solid var(--rd-line);border-left:3px solid var(--rd-s3);border-radius:var(--rd-r-sm);padding:18px 22px;margin-bottom:14px;}
.rd-scope .p2-stage.outcomes{border-left-color:var(--rd-s4);}
.rd-scope .p2-stage .stage-hd{display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.rd-scope .p2-stage .frame{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;display:flex;align-items:center;gap:7px;flex:1;min-width:0;}
.rd-scope .p2-stage.outputs .frame{color:var(--rd-s3);}
.rd-scope .p2-stage.outcomes .frame{color:var(--rd-s4);}
.rd-scope .p2-stage .frame i{font-size:11px;}
/* Verdict badge — fixed color map, no cream. */
.rd-scope .p2-vbadge{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;border-radius:22px;padding:5px 13px;flex:none;}
.rd-scope .p2-vbadge.ok{background:#E7F5EE;color:var(--rd-ok);}
.rd-scope .p2-vbadge.wip{background:#EAF1F9;color:#3F72B0;}
.rd-scope .p2-vbadge.risk{background:#fff;color:var(--rd-danger);box-shadow:inset 0 0 0 1.5px var(--rd-danger);}
.rd-scope .p2-vbadge.pending{background:rgba(140,140,140,.08);color:var(--rd-text-3);}
.rd-scope .p2-vbadge .sd{width:7px;height:7px;border-radius:50%;background:currentColor;}
/* Read — templated 1-2 lines with dot leads */
.rd-scope .p2-read{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;}
.rd-scope .p2-readline{font-size:14px;line-height:1.6;color:var(--rd-text-2);display:flex;gap:10px;align-items:flex-start;}
.rd-scope .p2-readline .dot{width:8px;height:8px;border-radius:50%;flex:none;margin-top:8px;}
.rd-scope .p2-readline.good .dot{background:var(--rd-ok);}
.rd-scope .p2-readline.watch .dot{background:#9A6A11;}
.rd-scope .p2-readline.risk .dot{background:var(--rd-danger);}
.rd-scope .p2-readline b{color:var(--rd-text-1);font-weight:600;}
.rd-scope .p2-readline .g{color:var(--rd-ok);font-weight:600;}
.rd-scope .p2-readline .w{color:#9A6A11;font-weight:600;}
.rd-scope .p2-readline .r{color:var(--rd-danger);font-weight:600;}
.rd-scope .p2-readline .mute{color:var(--rd-text-3);}
.rd-scope .p2-readline .lead-label{font-weight:700;}
.rd-scope .p2-readline.watch .lead-label{color:#9A6A11;}
.rd-scope .p2-readline.risk .lead-label{color:var(--rd-danger);}
/* Unresolved-work data-quality note — muted, non-prose, not a bullet */
.rd-scope .p2-unresolved{font-size:12px;color:var(--rd-text-3);margin:6px 0 12px;padding-left:2px;font-style:italic;}
/* Status basis footer — one-line, muted; explains why a status is what it is */
.rd-scope .p2-basis{font-size:11.5px;color:var(--rd-text-4);margin:8px 0 2px;padding-left:2px;}
/* Evidence rows — compact, one per LM item */
.rd-scope .p2-rows{display:flex;flex-direction:column;}
.rd-scope .p2-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:baseline;padding:9px 0;}
.rd-scope .p2-row + .p2-row{border-top:1px solid var(--rd-line-soft);}
.rd-scope .p2-row-title{font-size:14px;color:var(--rd-text-1);line-height:1.5;min-width:0;}
.rd-scope .p2-row-title .lead{font-weight:700;font-size:15.5px;}
.rd-scope .p2-stage.outputs .p2-row-title .lead{color:var(--rd-s3);}
.rd-scope .p2-stage.outcomes .p2-row-title .lead{color:var(--rd-s4);}
.rd-scope .p2-row-title .planof{color:var(--rd-text-3);font-size:12.5px;margin-left:4px;}
.rd-scope .p2-row-value{color:var(--rd-text-2);font-size:12.5px;margin-left:10px;font-weight:600;font-variant-numeric:tabular-nums;}
.rd-scope .p2-row-status{font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:6px;white-space:nowrap;flex:none;}
.rd-scope .p2-row-status .sd{width:7px;height:7px;border-radius:50%;background:currentColor;}
.rd-scope .p2-row-status.ok{color:var(--rd-ok);}
.rd-scope .p2-row-status.wip{color:#3F72B0;}
.rd-scope .p2-row-status.risk{color:var(--rd-danger);}
.rd-scope .p2-row-status.pending{color:var(--rd-text-4);font-style:italic;font-weight:500;}
/* Show the breakdown */
.rd-scope .p2-brk{margin-top:6px;padding-top:8px;border-top:1px solid var(--rd-line-soft);}
.rd-scope .p2-brk summary{list-style:none;cursor:pointer;display:inline-flex;gap:8px;align-items:center;font-size:11px;font-weight:600;color:var(--rd-text-3);letter-spacing:.3px;text-transform:uppercase;padding:2px 0;}
.rd-scope .p2-brk summary::-webkit-details-marker{display:none;}
.rd-scope .p2-brk summary:focus{outline:none;}
.rd-scope .p2-brk summary:focus-visible{outline:2px solid var(--rd-accent);outline-offset:2px;border-radius:3px;}
.rd-scope .p2-brk summary i{font-size:10px;transition:transform .15s ease;}
.rd-scope .p2-brk[open] > summary i{transform:rotate(90deg);}
.rd-scope .p2-brk-body{margin-top:10px;}
.rd-scope .p2-brk-prog{padding:8px 0;}
.rd-scope .p2-brk-prog + .p2-brk-prog{border-top:1px solid var(--rd-line-soft);}
.rd-scope .p2-brk-progrow{display:grid;grid-template-columns:13px minmax(0,1fr) 120px 44px 82px;gap:12px;align-items:center;}
.rd-scope .p2-brk-progrow.single{grid-template-columns:13px minmax(0,1fr) 82px;}
.rd-scope .p2-brk-progrow .pdot{width:10px;height:10px;border-radius:3px;justify-self:center;background:var(--rd-accent);}
.rd-scope .p2-brk-progrow .pn{font-size:13px;font-weight:600;color:var(--rd-text-1);}
.rd-scope .p2-brk-progrow .pmeta{font-size:10.5px;color:var(--rd-text-4);}
.rd-scope .p2-brk-progrow .pbar{height:6px;border-radius:3px;background:#eef1f3;overflow:hidden;}
.rd-scope .p2-brk-progrow .pbar > i{display:block;height:100%;border-radius:3px;background:var(--rd-accent);}
.rd-scope .p2-brk-progrow .pshare{text-align:right;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--rd-text-1);}
.rd-scope .p2-brk-progrow .pstat{justify-self:end;display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;border-radius:20px;padding:3px 9px;white-space:nowrap;}
.rd-scope .p2-brk-progrow .pstat.ok{background:#E7F5EE;color:var(--rd-ok);}
.rd-scope .p2-brk-progrow .pstat.wip{background:#EAF1F9;color:#3F72B0;}
.rd-scope .p2-brk-progrow .pstat.risk{background:#fff;color:var(--rd-danger);box-shadow:inset 0 0 0 1.5px var(--rd-danger);}
.rd-scope .p2-brk-progrow .pstat .sd{width:6px;height:6px;border-radius:50%;background:currentColor;}
.rd-scope .p2-brk-projs{margin:6px 0 0 25px;padding-left:14px;border-left:2px solid var(--rd-line-soft);}
.rd-scope .p2-brk-pj{display:grid;grid-template-columns:minmax(0,1fr) 12px;gap:12px;align-items:center;padding:4px 0;}
.rd-scope .p2-brk-pj .pjn{font-size:12.5px;color:var(--rd-text-3);}
.rd-scope .p2-brk-pj .pjd{justify-self:center;width:7px;height:7px;border-radius:50%;}
.rd-scope .p2-brk-pj .pjd.ok{background:var(--rd-ok);}
.rd-scope .p2-brk-pj .pjd.wip{background:#3F72B0;}
.rd-scope .p2-brk-pj .pjd.risk{background:var(--rd-danger);}
.rd-scope .p2-brk-more{font-size:11.5px;color:#3F72B0;padding:6px 0 0;}
/* Impact — the purpose */
.rd-scope .p2-impact{background:#f4f9f6;border:1px solid #dcebe3;border-radius:var(--rd-r-sm);padding:16px 20px;margin-bottom:14px;}
.rd-scope .p2-impact .lb{font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--rd-s5);margin-bottom:5px;display:flex;align-items:center;gap:7px;}
.rd-scope .p2-impact .goal{font-size:15px;font-weight:600;color:var(--rd-text-1);line-height:1.4;}
.rd-scope .p2-impact .horizon{font-size:11.5px;color:var(--rd-text-3);margin-top:8px;}
/* Risk — the ONE fragile link */
.rd-scope .p2-risk{background:#FBEAEF;border:1px solid #f2d3dd;border-radius:var(--rd-r-sm);padding:14px 18px;display:flex;gap:12px;margin-bottom:14px;}
/* Dark overrides for LM read-out literals that bypass the token layer. */
.rd-scope.rd-dark .p2-vbadge.ok,.rd-scope.rd-dark .p2-brk-progrow .pstat.ok{background:rgba(87,181,152,.16);}
.rd-scope.rd-dark .p2-vbadge.wip,.rd-scope.rd-dark .p2-brk-progrow .pstat.wip{background:rgba(63,114,176,.22);color:#8fb4e0;}
.rd-scope.rd-dark .p2-vbadge.risk,.rd-scope.rd-dark .p2-brk-progrow .pstat.risk{background:transparent;}
.rd-scope.rd-dark .p2-impact{background:rgba(87,181,152,.10);border-color:rgba(87,181,152,.25);}
.rd-scope.rd-dark .p2-risk{background:var(--rd-danger-bg);border-color:rgba(228,101,137,.30);}
.rd-scope .p2-risk i.ri{color:var(--rd-danger);margin-top:2px;font-size:14px;flex:none;}
.rd-scope .p2-risk .rb{font-size:13.5px;line-height:1.55;color:var(--rd-text-2);}
.rd-scope .p2-risk .rb .rl{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--rd-danger);display:block;margin-bottom:3px;}
.rd-scope .p2-risk .rb b{color:var(--rd-text-1);font-weight:600;}
/* Off-strategy drift */
.rd-scope .p2-drift{padding:10px 14px;background:#FBF3E4;border-radius:var(--rd-r-xs);color:#9A6A11;font-size:12.5px;line-height:1.5;display:flex;gap:9px;align-items:flex-start;}
.rd-scope .p2-drift i{color:#b8860b;font-size:11px;margin-top:2px;flex:none;}
.rd-scope .p2-drift b{color:var(--rd-text-1);font-weight:600;}
/* Empty-state (rendered only when the Logic Model has no items). Colors are
set for WCAG AA on white (the --rd-text-3/-4 tokens are ~3:1 and fail as
body copy), so the invitation stays legible. Scoped under .p2-lm-empty so
these rules stay inert until the empty-state markup is present. */
.rd-scope .p2-lm-emptyzone{margin:24px auto 8px;max-width:640px;}
.rd-scope .p2-lm-empty{margin:0 auto;text-align:center;padding:16px 24px 8px;}
.rd-scope .p2-lm-empty .found{display:flex;width:fit-content;max-width:100%;align-items:center;gap:10px;font-size:13px;line-height:1.4;color:#356f5b;background:#eef7f2;border:1px solid #d8ece2;border-radius:22px;padding:10px 20px;margin:0 auto 26px;}
.rd-scope .p2-lm-empty .found i{color:#3E937A;font-size:12px;flex:none;}
.rd-scope .p2-lm-empty .found b{color:#2c5f4d;font-weight:700;}
.rd-scope .p2-lm-empty .found .sep{color:#9ec7b6;margin:0 5px;font-weight:400;}
.rd-scope .p2-lm-empty .ic{width:62px;height:62px;border-radius:18px;background:linear-gradient(135deg,var(--rd-s3,#3F72B0),var(--rd-s4,#3E937A));display:inline-flex;align-items:center;justify-content:center;margin-bottom:22px;box-shadow:0 8px 20px rgba(62,147,122,.24);}
.rd-scope .p2-lm-empty .ic i{color:#fff;font-size:26px;}
.rd-scope .p2-lm-empty h2.t{font-size:22px;font-weight:600;color:var(--rd-text-1);margin:0 0 12px;letter-spacing:-.2px;line-height:1.25;}
.rd-scope .p2-lm-empty .b{font-size:14.5px;line-height:1.65;color:#54636b;margin:0 auto 28px;max-width:462px;}
.rd-scope .p2-lm-empty .cta{display:inline-flex;align-items:center;gap:10px;font-size:14px;font-weight:600;color:#fff;background:var(--rd-accent);border-radius:26px;padding:13px 27px;text-decoration:none;box-shadow:0 5px 16px rgba(0,71,102,.24);transition:transform .12s ease,box-shadow .12s ease,filter .12s ease;}
.rd-scope .p2-lm-empty .cta:hover{filter:brightness(1.08);transform:translateY(-1px);box-shadow:0 7px 20px rgba(0,71,102,.28);text-decoration:none;color:#fff;}
.rd-scope .p2-lm-empty .cta:focus-visible{outline:2px solid var(--rd-accent);outline-offset:3px;}
.rd-scope .p2-lm-empty .cta i{font-size:13px;}
.rd-scope .p2-lm-empty .hint{font-size:12.5px;color:#69767d;margin-top:18px;line-height:1.55;max-width:420px;margin-left:auto;margin-right:auto;}
/* Dark overrides for the empty-state literals that bypass the token layer. */
.rd-scope.rd-dark .p2-lm-empty .found{color:#8fd3ba;background:rgba(87,181,152,.12);border-color:rgba(87,181,152,.28);}
.rd-scope.rd-dark .p2-lm-empty .found b{color:#b7e6d3;}
.rd-scope.rd-dark .p2-lm-empty .found .sep{color:rgba(143,211,186,.5);}
.rd-scope.rd-dark .p2-lm-empty .b{color:var(--rd-text-2);}
.rd-scope.rd-dark .p2-lm-empty .hint{color:var(--rd-text-3);}
.rd-scope .p2-also{margin-top:14px;padding:10px 14px;background:var(--rd-bg);border-radius:var(--rd-r-xs);border:1px solid var(--rd-line);}
.rd-scope .p2-also .lb{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:8px;display:flex;align-items:center;gap:7px;}
.rd-scope .p2-also .lb i{font-size:11px;}
.rd-scope .p2-also .row{font-size:12.5px;line-height:1.55;color:var(--rd-text-2);padding:3px 0;}
.rd-scope .p2-also .row b{color:var(--rd-text-1);font-weight:600;}
.rd-scope .p2-also .row .metric{color:var(--rd-text-3);}
.rd-scope .p2-also .more{font-size:11.5px;color:var(--rd-text-3);margin-top:4px;font-style:italic;}
/* ───────────────────────────── page-resources ───────────────────────────── */
/* Hours / Days unit toggle — top of Page 3. Vanilla-JS controlled. */
.rd-scope .p3-unit-toggle{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-bottom:14px;}
.rd-scope .p3-unit-toggle .p3-unit-lbl{font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;color:var(--rd-text-3);}
.rd-scope .p3-unit-toggle .p3-unit-pill{display:inline-flex;border:1px solid var(--rd-line);border-radius:100px;padding:2px;background:var(--rd-panel);}
.rd-scope .p3-unit-toggle .p3-unit-btn{background:transparent;border:0;padding:5px 14px;border-radius:100px;font-size:12px;font-weight:600;color:var(--rd-text-3);cursor:pointer;letter-spacing:.2px;transition:background .1s ease, color .1s ease;}
.rd-scope .p3-unit-toggle .p3-unit-btn.is-active{background:var(--rd-accent);color:#fff;}
.rd-scope .p3-unit-toggle .p3-unit-btn:hover:not(.is-active){color:var(--rd-text-1);}
.rd-scope .p3-sec{margin-bottom:40px;}
.rd-scope .p3-sec-hd{margin-bottom:16px;padding:0 0 11px 14px;border-bottom:1px solid var(--rd-line);position:relative;}
.rd-scope .p3-sec-hd::before{content:'';position:absolute;left:0;top:2px;width:4px;height:calc(100% - 13px);min-height:26px;background:var(--rd-accent);border-radius:2px;}
.rd-scope .p3-sec-hd .l{font-size:13.5px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--rd-accent);display:block;margin-bottom:4px;}
.rd-scope .p3-sec-hd .s{font-size:13px;color:var(--rd-text-2);}
/* Placeholder strip (only when no ResourcesGateway is registered). */
.rd-scope .p3-res-strip{border:1px dashed var(--rd-line);border-radius:var(--rd-r-sm);padding:20px 22px;background:var(--rd-bg);display:flex;align-items:center;gap:16px;}
.rd-scope .p3-res-strip .icn{width:48px;height:48px;border-radius:12px;background:#eef4f3;color:var(--rd-accent);display:flex;align-items:center;justify-content:center;font-size:20px;flex:none;}
.rd-scope .p3-res-strip .cnt{flex:1;min-width:0;}
.rd-scope .p3-res-strip .cnt .h{font-size:15px;font-weight:600;color:var(--rd-text-1);margin-bottom:3px;}
.rd-scope .p3-res-strip .cnt .d{font-size:13.5px;color:var(--rd-text-3);line-height:1.5;}
.rd-scope .p3-res-strip .tag{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-accent);background:rgba(0,71,102,.08);border-radius:10px;padding:4px 10px;flex:none;}
.rd-scope .p3-res-strip .p3-res-cta{flex:none;display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:#fff;background:var(--rd-accent);border-radius:100px;padding:9px 17px;text-decoration:none;white-space:nowrap;transition:opacity .12s ease;}
.rd-scope .p3-res-strip .p3-res-cta:hover{opacity:.9;color:#fff;}
/* Three-card resource summary — larger, roomier, higher contrast. */
.rd-scope .p3-res-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;}
.rd-scope .p3-rcard{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);padding:14px 18px;background:var(--rd-panel);min-width:0;display:flex;flex-direction:column;}
.rd-scope .p3-rcard .rhead{display:flex;align-items:center;gap:7px;margin-bottom:9px;}
.rd-scope .p3-rcard .rhead .ricn{width:18px;height:18px;background:transparent;color:var(--rd-accent);display:grid;place-items:center;font-size:13px;flex:none;}
.rd-scope .p3-rcard .rhead .rlbl{font-size:11px;font-weight:700;color:var(--rd-text-3);letter-spacing:.6px;text-transform:uppercase;}
.rd-scope .p3-rcard .rv{font-size:26px;font-weight:600;letter-spacing:-.4px;line-height:1.05;color:var(--rd-text-1);}
.rd-scope .p3-rcard .rv small{font-size:13px;color:var(--rd-text-3);font-weight:500;margin-left:4px;letter-spacing:0;}
.rd-scope .p3-rcard .rsub{font-size:12.5px;color:var(--rd-text-2);margin-top:6px;line-height:1.45;}
.rd-scope .p3-rcard .rsub .risk{color:var(--rd-danger);font-weight:600;}
.rd-scope .p3-rcard .rsub .muted{color:var(--rd-text-3);}
.rd-scope .p3-rcard .bar{height:5px;background:var(--rd-line);border-radius:3px;margin-top:9px;overflow:hidden;}
.rd-scope .p3-rcard .bar > i{display:block;height:100%;border-radius:3px;}
.rd-scope .p3-rcard .bar.ok > i{background:var(--rd-s1);}
.rd-scope .p3-rcard .bar.spend > i{background:var(--rd-ok);}
.rd-scope .p3-rcard .bar.spend.at-risk > i{background:var(--rd-warn);}
.rd-scope .p3-rcard .bar.spend.over > i{background:var(--rd-danger);}
.rd-scope .p3-rcard .rtail{font-size:12px;color:var(--rd-text-3);margin-top:7px;display:flex;flex-wrap:wrap;gap:4px 12px;}
.rd-scope .p3-rcard .rtail .rp{display:inline-flex;align-items:center;gap:6px;}
.rd-scope .p3-rcard .rtail .dd{width:9px;height:9px;border-radius:50%;flex:none;display:inline-block;}
.rd-scope .p3-rcard .rtail .dd.ok{background:var(--rd-ok);}
.rd-scope .p3-rcard .rtail .dd.warn{background:var(--rd-warn);}
.rd-scope .p3-rcard.empty .rv{color:var(--rd-text-4);}
/* Per-project breakdown — the "where's it going?" answer. Grid table so the
columns line up regardless of name length. Row hover lifts a bit for scan. */
.rd-scope .p3-bd{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);overflow:hidden;background:var(--rd-panel);}
.rd-scope .p3-bd-row{display:grid;grid-template-columns:2fr 1.2fr 1.6fr 1.4fr;gap:14px;padding:11px 18px;align-items:center;}
.rd-scope .p3-bd-row + .p3-bd-row{border-top:1px solid var(--rd-line-soft);}
.rd-scope .p3-bd-row.head{background:var(--rd-bg);border-bottom:1px solid var(--rd-line);padding:9px 18px;}
.rd-scope .p3-bd-row.head .p3-bd-cell{font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);}
.rd-scope .p3-bd-cell{min-width:0;font-size:14px;color:var(--rd-text-1);}
.rd-scope .p3-bd-cell .name{font-weight:600;color:var(--rd-text-1);line-height:1.3;word-wrap:break-word;}
.rd-scope .p3-bd-cell .type{font-size:11.5px;color:var(--rd-text-3);text-transform:uppercase;letter-spacing:.4px;margin-top:2px;}
.rd-scope .p3-bd-cell .num{font-size:18px;font-weight:600;color:var(--rd-text-1);line-height:1.1;}
.rd-scope .p3-bd-cell .num small{font-size:12.5px;color:var(--rd-text-3);font-weight:500;margin-left:3px;}
.rd-scope .p3-bd-cell .sublabel{font-size:12px;color:var(--rd-text-3);margin-top:2px;}
.rd-scope .p3-bd-cell .minibar{height:5px;background:#eef1f3;border-radius:3px;overflow:hidden;margin-top:6px;}
.rd-scope .p3-bd-cell .minibar > i{display:block;height:100%;border-radius:3px;background:var(--rd-s1);}
.rd-scope .p3-bd-cell .minibar.spend > i{background:var(--rd-ok);}
.rd-scope .p3-bd-cell .minibar.spend.at-risk > i{background:var(--rd-warn);}
.rd-scope .p3-bd-cell .minibar.spend.over > i{background:var(--rd-danger);}
.rd-scope .p3-bd-cell .zero{color:var(--rd-text-4);font-style:italic;font-size:13px;}
.rd-scope .p3-bd-empty{padding:24px;color:var(--rd-text-3);font-style:italic;text-align:center;font-size:14px;}
/* Program-rollup rendering (strategy scope): each program is a <details> with
summary as the program row and child project rows revealed on expand.
Uses native <details>/<summary> for a11y — keyboard-accessible, no JS. */
.rd-scope .p3-bd-program{display:block;}
.rd-scope .p3-bd-program + .p3-bd-program{border-top:1px solid var(--rd-line);}
.rd-scope .p3-bd-program summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:2fr 1.2fr 1.6fr 1.4fr;gap:14px;padding:11px 18px;align-items:center;transition:background .1s ease;}
.rd-scope .p3-bd-program summary::-webkit-details-marker{display:none;}
.rd-scope .p3-bd-program summary:hover{background:var(--rd-bg);}
.rd-scope .p3-bd-program summary .name-cell{display:flex;align-items:flex-start;gap:10px;}
.rd-scope .p3-bd-program summary .expand-chevron{width:20px;padding-top:2px;color:var(--rd-text-3);font-size:11px;transition:transform .15s ease;flex:none;}
.rd-scope .p3-bd-program[open] > summary .expand-chevron{transform:rotate(90deg);}
.rd-scope .p3-bd-program[open] > summary{background:var(--rd-bg);border-bottom:1px solid var(--rd-line-soft);}
.rd-scope .p3-bd-program summary .name{font-weight:600;color:var(--rd-text-1);line-height:1.3;}
.rd-scope .p3-bd-program summary .type{font-size:11.5px;color:var(--rd-text-3);text-transform:uppercase;letter-spacing:.4px;margin-top:2px;}
.rd-scope .p3-bd-row.child-row{background:var(--rd-bg);padding:9px 18px 9px 32px;}
.rd-scope .p3-bd-row.child-row + .child-row{border-top:1px solid var(--rd-line-soft);}
.rd-scope .p3-bd-row.child-row .name-cell{display:flex;align-items:flex-start;gap:10px;}
.rd-scope .p3-bd-row.child-row .child-indent{color:var(--rd-text-4);font-size:14px;flex:none;padding-top:1px;}
.rd-scope .p3-bd-row.child-row .name{font-weight:500;font-size:13.5px;color:var(--rd-text-2);}
.rd-scope .p3-bd-row.child-row .num{font-size:15px;}
/* Capacity vs. demand — per-project deep read. Each card compares three
independent estimates (budgeted hours, effort points × conversion, people
× weeks × allocation) and shows the sensitivity between them so the board
can see *how much* off, not just *that* it's off. Rebalance levers land at
the bottom of each card so the discussion has options, not just alarms. */
.rd-scope .p3-cap-stack{display:flex;flex-direction:column;gap:12px;}
.rd-scope .p3-cap{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);background:var(--rd-panel);overflow:hidden;}
.rd-scope .p3-cap.critical{border-color:rgba(220,60,60,.35);}
.rd-scope .p3-cap.tight{border-color:rgba(245,166,35,.4);}
.rd-scope .p3-cap.balanced{border-color:var(--rd-line);}
.rd-scope .p3-cap.buffer{border-color:rgba(46,164,79,.3);}
.rd-scope .p3-cap-hd{display:flex;align-items:center;gap:14px;padding:12px 20px 10px;border-bottom:1px solid var(--rd-line-soft);}
.rd-scope .p3-cap-hd .verdict{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:100px;font-size:11.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;flex:none;}
.rd-scope .p3-cap-hd .verdict.critical{background:rgba(220,60,60,.10);color:var(--rd-danger);}
.rd-scope .p3-cap-hd .verdict.tight{background:rgba(245,166,35,.14);color:var(--rd-warn-tx);}
.rd-scope .p3-cap-hd .verdict.balanced{background:rgba(0,71,102,.09);color:var(--rd-accent);}
.rd-scope .p3-cap-hd .verdict.buffer{background:rgba(46,164,79,.11);color:var(--rd-ok);}
.rd-scope .p3-cap-hd .verdict.no_work,
.rd-scope .p3-cap-hd .verdict.no_capacity{background:rgba(140,140,140,.10);color:var(--rd-text-3);}
.rd-scope .p3-cap-hd .name{font-size:16px;font-weight:600;color:var(--rd-text-1);flex:1;min-width:0;line-height:1.3;}
.rd-scope .p3-cap-hd .headline-num{font-size:15px;font-weight:600;flex:none;}
.rd-scope .p3-cap-hd .headline-num.critical{color:var(--rd-danger);}
.rd-scope .p3-cap-hd .headline-num.tight{color:var(--rd-warn-tx);}
.rd-scope .p3-cap-hd .headline-num.buffer{color:var(--rd-ok);}
.rd-scope .p3-cap-hd .headline-num.balanced{color:var(--rd-text-2);}
/* Trust confidence indicator — small icon-only pill in the header. Hover for
the full explanation. Green = both estimates agree; amber = fallback/mixed.
Kept subtle so it doesn't compete with the verdict pill. */
.rd-scope .p3-cap-hd .trust{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:100px;font-size:10.5px;font-weight:600;letter-spacing:.3px;cursor:help;flex:none;}
.rd-scope .p3-cap-hd .trust.good{background:rgba(46,164,79,.10);color:var(--rd-ok);}
.rd-scope .p3-cap-hd .trust.warn{background:rgba(245,166,35,.14);color:var(--rd-warn-tx);}
.rd-scope .p3-cap-hd .trust i{font-size:10px;}
.rd-scope .p3-cap-body{padding:12px 20px 14px;}
.rd-scope .p3-cap-row{display:grid;grid-template-columns:90px 1fr;gap:14px;padding:10px 0;align-items:baseline;}
.rd-scope .p3-cap-row + .p3-cap-row{border-top:1px dashed var(--rd-line-soft);}
.rd-scope .p3-cap-row .lbl{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);padding-top:2px;}
.rd-scope .p3-cap-row .val{font-size:14px;color:var(--rd-text-1);line-height:1.55;}
.rd-scope .p3-cap-row .val .primary{font-weight:600;color:var(--rd-text-1);}
.rd-scope .p3-cap-row .val .muted{color:var(--rd-text-3);}
.rd-scope .p3-cap-row .val .divider{color:var(--rd-text-4);margin:0 6px;}
.rd-scope .p3-cap-row .val .note{display:block;font-size:12.5px;color:var(--rd-text-3);margin-top:3px;font-style:italic;}
.rd-scope .p3-cap-row .val .note.warn{color:var(--rd-warn-tx);font-style:normal;font-weight:500;}
.rd-scope .p3-cap-row .val .note.good{color:var(--rd-ok);font-style:normal;font-weight:500;}
.rd-scope .p3-cap-bar{margin-top:8px;}
.rd-scope .p3-cap-bar .track{position:relative;height:10px;background:#eef1f3;border-radius:5px;overflow:hidden;}
/* Supply segment — 0 → available. Always green ("we've got this much"). */
.rd-scope .p3-cap-bar .track .supply{position:absolute;top:0;left:0;bottom:0;background:var(--rd-ok);opacity:.9;}
/* Deficit segment — available → needed. Colored by verdict so the shortfall
reads at the same visual weight as the verdict pill above. */
.rd-scope .p3-cap-bar .track .deficit{position:absolute;top:0;bottom:0;background:var(--rd-danger);opacity:.85;}
.rd-scope .p3-cap-bar .track.tight .deficit{background:var(--rd-warn);}
.rd-scope .p3-cap-bar .track.critical .deficit{background:var(--rd-danger);}
.rd-scope .p3-cap-bar .track .marker{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--rd-text-1);z-index:2;}
.rd-scope .p3-cap-bar .track .marker::after{content:'';position:absolute;top:-2px;left:-3px;width:8px;height:8px;background:var(--rd-text-1);border-radius:50%;}
.rd-scope .p3-cap-bar .legend{display:flex;justify-content:space-between;font-size:11.5px;color:var(--rd-text-3);margin-top:6px;}
.rd-scope .p3-cap-rebalance{margin-top:10px;padding-top:12px;border-top:1px solid var(--rd-line-soft);}
.rd-scope .p3-cap-rebalance .hd{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:8px;}
.rd-scope .p3-cap-rebalance .opts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
.rd-scope .p3-cap-rebalance .opt{border:1px solid var(--rd-line);border-radius:var(--rd-r-xs);padding:10px 12px;background:var(--rd-bg);}
.rd-scope .p3-cap-rebalance .opt .icn{color:var(--rd-accent);font-size:14px;margin-bottom:6px;}
.rd-scope .p3-cap-rebalance .opt .lever{font-size:14.5px;font-weight:600;color:var(--rd-text-1);line-height:1.3;}
.rd-scope .p3-cap-rebalance .opt .lever b{font-size:17px;color:var(--rd-danger);}
.rd-scope .p3-cap-rebalance .opt .detail{font-size:12px;color:var(--rd-text-3);margin-top:4px;line-height:1.5;}
/* Compact one-liner for balanced/buffer projects — no full card, just a row */
.rd-scope .p3-cap-compact{display:flex;align-items:center;gap:14px;padding:12px 18px;border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);background:var(--rd-panel);}
.rd-scope .p3-cap-compact .verdict{padding:4px 10px;border-radius:100px;font-size:10.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;flex:none;}
.rd-scope .p3-cap-compact .verdict.balanced{background:rgba(0,71,102,.09);color:var(--rd-accent);}
.rd-scope .p3-cap-compact .verdict.buffer{background:rgba(46,164,79,.11);color:var(--rd-ok);}
.rd-scope .p3-cap-compact .verdict.no_work{background:rgba(140,140,140,.10);color:var(--rd-text-3);}
.rd-scope .p3-cap-compact .name{font-size:14.5px;font-weight:600;color:var(--rd-text-1);flex:1;min-width:0;}
.rd-scope .p3-cap-compact .summary{font-size:13px;color:var(--rd-text-3);flex:none;}
/* Capacity program-rollup: program-level card wrapped in <details> so click
expands to reveal child project cards inline. Chevron rotates on open — the
chevron lives in the .subname of the card header (not absolute-positioned)
so it doesn't collide with the trust pill or headline gap number. */
.rd-scope .p3-cap-program{display:block;}
.rd-scope .p3-cap-program summary{list-style:none;cursor:pointer;}
.rd-scope .p3-cap-program summary::-webkit-details-marker{display:none;}
.rd-scope .p3-cap-hd .name .subname{font-size:12px;color:var(--rd-text-3);font-weight:500;margin-top:3px;text-transform:uppercase;letter-spacing:.4px;display:flex;align-items:center;gap:6px;}
.rd-scope .p3-cap-hd .name .subname .expand-hint{font-size:10px;color:var(--rd-text-3);transition:transform .15s ease;}
.rd-scope .p3-cap-program[open] > summary .p3-cap-hd .name .subname .expand-hint{transform:rotate(90deg);}
.rd-scope .p3-cap-hd .headline-num .headline-days{font-size:12.5px;color:var(--rd-text-3);font-weight:500;margin-left:6px;letter-spacing:0;}
/* Bar marker: always-visible label above the tick so board readers don't have
to hover to understand what the marker means. */
.rd-scope .p3-cap-bar .track{overflow:visible;position:relative;}
.rd-scope .p3-cap-bar .track .marker .marker-label{position:absolute;top:-18px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:10.5px;font-weight:600;color:var(--rd-text-2);background:var(--rd-panel);padding:1px 6px;border-radius:3px;letter-spacing:.3px;text-transform:uppercase;}
.rd-scope .p3-cap-bar{margin-top:22px;}
/* Info icon on "pts" — subtle, clickable-ish. */
.rd-scope .p3-cap-row .val .pts-info{cursor:help;border-bottom:1px dotted var(--rd-text-4);}
.rd-scope .p3-cap-row .val .pts-info i{font-size:11px;margin-left:2px;color:var(--rd-text-3);}
.rd-scope .p3-cap-children{padding:12px 20px 20px;background:var(--rd-bg);border-left:3px solid var(--rd-line);margin-left:20px;margin-right:20px;margin-bottom:14px;border-radius:0 0 var(--rd-r-xs) var(--rd-r-xs);}
.rd-scope .p3-cap-children-hd{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:10px;padding-top:4px;}
.rd-scope .p3-cap-children .p3-cap,
.rd-scope .p3-cap-children .p3-cap-compact{margin-bottom:8px;}
.rd-scope .p3-cap-children .p3-cap:last-child,
.rd-scope .p3-cap-children .p3-cap-compact:last-child{margin-bottom:0;}
/* Dependencies — dedicated section rendering each external commitment with
owner + decision date + notes. Cards laid out in a 2-column grid on wide
viewports, single column on narrow. Tentative deps get a warmer border
for scanability; the top "urgent" callout surfaces the soonest decision. */
.rd-scope .p3-dep-urgent{display:flex;gap:12px;align-items:center;padding:12px 16px;border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);margin-bottom:14px;background:var(--rd-panel);}
.rd-scope .p3-dep-urgent.soon{background:var(--rd-warn-bg);border-color:rgba(245,166,35,.35);}
.rd-scope .p3-dep-urgent .ic{width:30px;height:30px;border-radius:8px;background:rgba(245,166,35,.15);color:var(--rd-warn-tx);display:grid;place-items:center;font-size:13px;flex:none;}
.rd-scope .p3-dep-urgent .body{flex:1;min-width:0;}
.rd-scope .p3-dep-urgent .hd{font-size:14.5px;color:var(--rd-text-1);line-height:1.4;}
.rd-scope .p3-dep-urgent .hd strong{color:var(--rd-text-1);font-weight:700;}
.rd-scope .p3-dep-urgent .meta{font-size:12.5px;color:var(--rd-text-3);margin-top:3px;}
.rd-scope .p3-dep-urgent .meta strong{color:var(--rd-text-2);font-weight:600;}
.rd-scope .p3-dep-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;}
.rd-scope .p3-dep{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);background:var(--rd-panel);padding:13px 16px;display:flex;flex-direction:column;gap:8px;}
.rd-scope .p3-dep.tentative{border-color:rgba(245,166,35,.28);}
.rd-scope .p3-dep.confirmed{border-color:rgba(46,164,79,.22);}
.rd-scope .p3-dep-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.rd-scope .p3-dep-hd .status{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;padding:4px 9px;border-radius:100px;flex:none;}
.rd-scope .p3-dep.tentative .p3-dep-hd .status{background:rgba(245,166,35,.14);color:var(--rd-warn-tx);}
.rd-scope .p3-dep.confirmed .p3-dep-hd .status{background:rgba(46,164,79,.11);color:var(--rd-ok);}
.rd-scope .p3-dep-hd .type-badge{font-size:10px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:3px 8px;border-radius:4px;background:var(--rd-bg);color:var(--rd-text-3);flex:none;}
.rd-scope .p3-dep-name{font-size:14.5px;font-weight:600;color:var(--rd-text-1);line-height:1.35;}
.rd-scope .p3-dep-meta{display:flex;flex-direction:column;gap:5px;font-size:13px;}
.rd-scope .p3-dep-meta .row{display:flex;gap:8px;align-items:baseline;}
.rd-scope .p3-dep-meta .row .lbl{font-size:10.5px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--rd-text-3);min-width:82px;flex:none;padding-top:2px;}
.rd-scope .p3-dep-meta .row .val{color:var(--rd-text-1);}
.rd-scope .p3-dep-meta .row .val .soft{color:var(--rd-text-3);font-size:12px;}
.rd-scope .p3-dep-meta .row.urgent .val{color:var(--rd-warn-tx);font-weight:600;}
.rd-scope .p3-dep-meta .row.urgent .val .soft{color:var(--rd-warn-tx);font-weight:500;}
.rd-scope .p3-dep-notes{font-size:13px;color:var(--rd-text-2);line-height:1.55;padding-top:2px;border-top:1px dashed var(--rd-line-soft);padding-top:10px;margin-top:2px;}
.rd-scope .p3-dep-foot{font-size:11.5px;color:var(--rd-text-4);font-style:italic;margin-top:auto;}
@media (max-width:900px){
.rd-scope .p3-dep-grid{grid-template-columns:1fr;}
}
/* Resource gaps & risks — remaining observations that aren't project-level
capacity math (over-allocated people, idle capacity, tentative dependencies). */
.rd-scope .p3-gaps{display:flex;flex-direction:column;gap:10px;}
.rd-scope .p3-gap{border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);background:var(--rd-panel);padding:12px 16px;display:flex;align-items:flex-start;gap:12px;}
.rd-scope .p3-gap .sev{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:13px;flex:none;}
.rd-scope .p3-gap.red .sev{background:rgba(220,60,60,.10);color:var(--rd-danger);}
.rd-scope .p3-gap.yellow .sev{background:rgba(245,166,35,.12);color:var(--rd-warn-tx);}
.rd-scope .p3-gap.blue .sev{background:rgba(0,71,102,.10);color:var(--rd-accent);}
.rd-scope .p3-gap .body{flex:1;min-width:0;}
.rd-scope .p3-gap .body .headline{font-size:14.5px;font-weight:600;color:var(--rd-text-1);line-height:1.4;}
.rd-scope .p3-gap .body .headline b{color:var(--rd-danger);font-weight:700;}
.rd-scope .p3-gap.yellow .body .headline b{color:var(--rd-warn-tx);}
.rd-scope .p3-gap .body .detail{font-size:13px;color:var(--rd-text-3);margin-top:4px;line-height:1.5;}
.rd-scope .p3-gap .body .detail em{font-style:normal;color:var(--rd-text-2);}
.rd-scope .p3-gap.ok{background:#f2faf6;border-color:#cfe8d9;}
.rd-scope .p3-gap.ok .sev{background:rgba(46,164,79,.12);color:var(--rd-ok);}
.rd-scope .p3-gap.ok .body .headline{color:#186c39;}
.rd-scope .p3-gap.ok .body .detail{color:#4a7a5b;}
/* Narrow screens — cards stack, breakdown table becomes single column stack. */
@media (max-width:900px){
.rd-scope .p3-res-grid{grid-template-columns:1fr;}
.rd-scope .p3-bd-row{grid-template-columns:1fr;gap:8px;padding:14px 16px;}
.rd-scope .p3-bd-row.head{display:none;}
.rd-scope .p3-bd-cell::before{content:attr(data-label);display:block;font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:3px;}
.rd-scope .p3-bd-cell.name-cell::before{display:none;}
}
/* ───────────────────────────── page-impact-journey ───────────────────────────── */
.rd-scope .p4-wrap{max-width:900px;margin:0 auto;}
.rd-scope .p4-wrap *{min-width:0;}
/* Lens visibility — active data-lens shows; others hide. One component per
metric renders all three variants server-side; CSS reveals the current
lens's version. Keeps the JS toggle trivial and the DOM stable. */
.rd-scope .p4-wrap[data-active-lens="vision"] [data-lens]:not([data-lens="vision"]) {display:none;}
.rd-scope .p4-wrap[data-active-lens="progress"] [data-lens]:not([data-lens="progress"]) {display:none;}
.rd-scope .p4-wrap[data-active-lens="impact"] [data-lens]:not([data-lens="impact"]) {display:none;}
/* Header — subject + lens toggle */
.rd-scope .p4-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px;flex-wrap:wrap;}
.rd-scope .p4-hd .t{font-size:17px;font-weight:600;color:var(--rd-text-1);letter-spacing:-.2px;}
.rd-scope .p4-hd .s{font-size:12.5px;color:var(--rd-text-3);margin-top:2px;}
/* Lens toggle */
.rd-scope .p4-lens{display:flex;gap:0;margin-bottom:16px;background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:100px;padding:3px;width:fit-content;}
.rd-scope .p4-lens .lopt{background:none;border:0;padding:6px 14px;font-size:12.5px;font-weight:600;color:var(--rd-text-3);cursor:pointer;border-radius:100px;transition:all .12s ease;letter-spacing:.1px;}
.rd-scope .p4-lens .lopt.is-active{background:var(--rd-accent);color:#fff;}
.rd-scope .p4-lens .lopt:hover:not(.is-active):not(.locked){color:var(--rd-text-1);}
.rd-scope .p4-lens .lopt.locked{color:var(--rd-text-4);cursor:not-allowed;}
.rd-scope .p4-lens .lopt.locked i{margin-right:5px;font-size:10px;}
/* Bookend cards */
.rd-scope .p4-bookend{background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);padding:18px 22px;margin-bottom:14px;}
.rd-scope .p4-bookend.started{border-left:3px solid #9A6A11;}
.rd-scope .p4-bookend.different{border-left:3px solid var(--rd-ok);}
.rd-scope .p4-bookend .lb{font-size:10.5px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;margin-bottom:8px;display:flex;align-items:center;gap:7px;}
.rd-scope .p4-bookend.started .lb{color:#9A6A11;}
.rd-scope .p4-bookend.different .lb{color:var(--rd-ok);}
.rd-scope .p4-bookend .txt{font-size:15px;font-weight:600;color:var(--rd-text-1);line-height:1.4;}
.rd-scope .p4-bookend .meaning{font-size:13.5px;color:var(--rd-text-2);margin-top:8px;line-height:1.55;}
.rd-scope .p4-bookend .tense-hint{font-size:11.5px;color:var(--rd-text-3);margin-top:10px;font-style:italic;display:block;}
.rd-scope .p4-bookend .empty{font-size:13px;color:var(--rd-text-3);font-style:italic;}
.rd-scope .p4-bookend .empty .nudge{color:var(--rd-text-2);font-style:normal;font-weight:400;margin-left:4px;}
.rd-scope .p4-bookend .empty .nudge a{color:var(--rd-accent);font-weight:600;text-decoration:none;}
.rd-scope .p4-bookend .empty .nudge a:hover{text-decoration:underline;}
/* Metrics — the arc */
.rd-scope .p4-arc{background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);padding:18px 22px;margin-bottom:14px;}
.rd-scope .p4-arc .lb{font-size:10.5px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:14px;display:flex;align-items:center;gap:7px;}
.rd-scope .p4-arc .lb i{font-size:11px;}
.rd-scope .p4-mgroup{margin-top:18px;}
.rd-scope .p4-mgroup:first-of-type{margin-top:0;}
.rd-scope .p4-mgroup .gh{font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-text-3);margin-bottom:12px;display:flex;align-items:center;gap:7px;}
.rd-scope .p4-mgroup.outputs .gh{color:var(--rd-s3);}
.rd-scope .p4-mgroup.outcomes .gh{color:var(--rd-s4);}
/* Metric row */
.rd-scope .p4-metric{display:grid;grid-template-columns:minmax(0,1.4fr) 200px 140px;gap:16px;align-items:center;padding:12px 0;border-top:1px solid var(--rd-line-soft);}
.rd-scope .p4-metric:first-child{border-top:none;padding-top:2px;}
.rd-scope .p4-metric .mn{font-size:13.5px;font-weight:600;color:var(--rd-text-1);line-height:1.35;}
.rd-scope .p4-metric .mn .tgt{font-size:11.5px;color:var(--rd-text-3);font-weight:400;display:block;margin-top:2px;}
.rd-scope .p4-metric .mn .meaning{font-size:11.5px;color:var(--rd-text-3);font-style:italic;display:block;margin-top:6px;line-height:1.5;}
/* ────────────────────────────────────────────────────────────────────────
The bar is ONE component per metric, persistent across lenses. The lens
changes its STATE (fill amount + label + verdict), never its existence.
Continuity is the reason lenses aren't tabs — the promise fills in as
you switch, and that morph is the moment the page tells its story.
──────────────────────────────────────────────────────────────────────── */
.rd-scope .p4-arc-viz{display:flex;flex-direction:column;gap:6px;}
.rd-scope .p4-arc-viz .p4-scale{display:flex;justify-content:space-between;align-items:baseline;font-size:11px;font-variant-numeric:tabular-nums;line-height:1.2;}
.rd-scope .p4-arc-viz .p4-scale .p4-fill-lbl{font-weight:700;color:var(--rd-text-1);transition:opacity .18s ease;}
.rd-scope .p4-arc-viz .p4-scale .p4-target-lbl{color:var(--rd-text-3);font-size:10.5px;letter-spacing:.2px;}
/* The track: fixed length outline in the stage color at low opacity. This
is the target — always visible, same shape across all lenses. */
.rd-scope .p4-track{position:relative;height:12px;background:#eef1f3;border-radius:6px;overflow:hidden;}
.rd-scope .p4-mgroup.outputs .p4-track{background:rgba(192,144,53,.14);}
.rd-scope .p4-mgroup.outcomes .p4-track{background:rgba(142,106,173,.14);}
/* The fill: rises from 0 to current/target on lens change. Animates via
CSS transition; JS sets the inline width. Respects reduced motion. */
.rd-scope .p4-fill{position:absolute;top:0;left:0;bottom:0;width:0;border-radius:6px;transition:width 700ms cubic-bezier(.22,1,.36,1);}
.rd-scope .p4-mgroup.outputs .p4-fill{background:var(--rd-s3);}
.rd-scope .p4-mgroup.outcomes .p4-fill{background:var(--rd-s4);}
@media (prefers-reduced-motion: reduce) {
.rd-scope .p4-fill,
.rd-scope .p4-arc-viz .p4-scale .p4-fill-lbl {transition:none;}
}
/* Verdict — right column */
.rd-scope .p4-verdict{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;justify-self:end;white-space:nowrap;}
.rd-scope .p4-verdict .sd{width:7px;height:7px;border-radius:50%;background:currentColor;}
.rd-scope .p4-verdict.willbe{color:var(--rd-text-3);}
.rd-scope .p4-verdict.trending{color:#3F72B0;}
.rd-scope .p4-verdict.hit{color:var(--rd-ok);}
.rd-scope .p4-verdict.captured{color:var(--rd-text-3);font-style:italic;font-weight:500;}
/* Encouragement chip */
.rd-scope .p4-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--rd-text-3);background:var(--rd-bg);border-radius:20px;padding:4px 10px;margin-top:10px;}
.rd-scope .p4-chip i{font-size:9px;}
/* Empty state */
.rd-scope .p4-empty{background:var(--rd-panel);border:1px dashed var(--rd-line);border-radius:var(--rd-r-sm);padding:26px 22px;text-align:center;color:var(--rd-text-3);}
.rd-scope .p4-empty .lb{font-size:12.5px;color:var(--rd-text-2);margin-bottom:4px;font-weight:600;}
.rd-scope .p4-empty .s{font-size:12px;color:var(--rd-text-3);}
/* ────────────────────────────────────────────────────────────────────────
Vision lens — three beats. NOT a table. NOT waiting for data. This is
the shareable, screenshot-for-a-funder view: the world today (authored),
the measurable arc as one prose statement (assembled from authored
labels), the world when we've delivered (authored). No tracks, no
status column, no bars — the Vision is complete on day one, by design.
──────────────────────────────────────────────────────────────────────── */
.rd-scope .p4-vision{margin-bottom:14px;}
.rd-scope .p4-vision .beat{background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:var(--rd-r-sm);padding:24px 28px;margin-bottom:14px;}
.rd-scope .p4-vision .beat.today{border-left:3px solid #9A6A11;}
.rd-scope .p4-vision .beat.arc{border-left:3px solid var(--rd-accent);background:var(--rd-bg);}
.rd-scope .p4-vision .beat.delivered{border-left:3px solid var(--rd-ok);}
.rd-scope .p4-vision .beat .lb{font-size:10.5px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;margin-bottom:12px;display:flex;align-items:center;gap:7px;}
.rd-scope .p4-vision .beat.today .lb{color:#9A6A11;}
.rd-scope .p4-vision .beat.arc .lb{color:var(--rd-accent);}
.rd-scope .p4-vision .beat.delivered .lb{color:var(--rd-ok);}
.rd-scope .p4-vision .beat.today .txt,
.rd-scope .p4-vision .beat.delivered .txt{font-size:19px;font-weight:600;color:var(--rd-text-1);line-height:1.45;letter-spacing:-.2px;}
.rd-scope .p4-vision .beat.arc .statement{font-size:16px;font-weight:500;color:var(--rd-text-1);line-height:1.65;letter-spacing:-.05px;}
.rd-scope .p4-vision .beat.delivered .meaning{font-size:14px;color:var(--rd-text-2);margin-top:12px;line-height:1.55;}
.rd-scope .p4-vision .beat .empty{font-size:13.5px;color:var(--rd-text-3);font-style:italic;}
.rd-scope .p4-vision .beat .empty .nudge{color:var(--rd-text-2);font-style:normal;font-weight:400;margin-left:4px;}
.rd-scope .p4-vision .beat .empty .nudge a{color:var(--rd-accent);font-weight:600;text-decoration:none;}
.rd-scope .p4-vision .beat .empty .nudge a:hover{text-decoration:underline;}
/* Block-level lens visibility — the beats show on Vision only, the tracks
block shows on Progress/Impact only. Per-element [data-lens] rules
still apply INSIDE each block (verdicts, tense hints). */
.rd-scope .p4-wrap[data-active-lens="vision"] [data-lens-block="tracks"]{display:none;}
.rd-scope .p4-wrap[data-active-lens="progress"] [data-lens-block="vision"]{display:none;}
.rd-scope .p4-wrap[data-active-lens="impact"] [data-lens-block="vision"]{display:none;}
/* Arrival — when the reader flips Vision → Progress/Impact, the arc
statement recedes (block swap is instant) and the metric rows stagger in.
`.arriving` is added by JS immediately after the block swap; the row is
already opacity:1 in its resting state so SSR-rendered non-Vision pages
(returning readers) never see a flash. */
.rd-scope .p4-metric.arriving{opacity:0;transform:translateY(6px);}
.rd-scope .p4-metric.arrived{opacity:1;transform:none;transition:opacity 260ms ease, transform 260ms ease;}
@media (prefers-reduced-motion: reduce) {
.rd-scope .p4-metric.arriving,
.rd-scope .p4-metric.arrived {opacity:1;transform:none;transition:none;}
}
/* ───────────────────────────── page-programs ───────────────────────────── */
.rd-scope .p4-two{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:30px;}
.rd-scope .p4-lbl{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--rd-accent);margin-bottom:12px;}
.rd-scope .p4-prog{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--rd-line-soft);font-size:14px;}
.rd-scope .p4-prog .pd{width:9px;height:9px;border-radius:50%;flex:none;}
.rd-scope .p4-prog .pn{flex:1;font-weight:500;color:var(--rd-text-1);min-width:0;}
.rd-scope .p4-prog .pm{color:var(--rd-text-3);font-size:12.5px;}
.rd-scope .p4-prog:last-child{border-bottom:none;}
.rd-scope .p4-exec{font-size:13.5px;color:var(--rd-text-2);line-height:1.6;padding:11px 0;border-bottom:1px solid var(--rd-line-soft);}
.rd-scope .p4-exec b{color:var(--rd-text-1);font-weight:600;}
.rd-scope .p4-exec .ed{color:var(--rd-text-4);font-size:12px;margin-left:6px;}
.rd-scope .p4-exec:last-child{border-bottom:none;}
.rd-scope .p4-also{margin-top:22px;padding-top:16px;border-top:1px solid var(--rd-line);font-size:13.5px;color:var(--rd-text-2);}
.rd-scope .p4-also .al-lb{color:var(--rd-text-3);font-weight:600;text-transform:uppercase;letter-spacing:.4px;font-size:11px;}
.rd-scope .p4-empty{color:var(--rd-text-3);font-size:12.5px;font-style:italic;padding:12px 0;}
/* ───────────────────────────── actionsMenu ───────────────────────────── */
/*
* Scoped fixes for the actions dropdown — the app's global .dropdown-menu
* styles size items for the sidebar / nav, not for a compact utility menu.
* Constrain width, left-align text, tighten padding, uniform icon spacing.
*/
.rd-actions-menu{width:220px !important;min-width:220px !important;padding:5px 0 !important;text-align:left !important;letter-spacing:0 !important;}
.rd-actions-menu li{text-align:left !important;}
/* Explicit hex — the `--main-titles-color` variable resolves to white inside
the pageheader (dark-bg context), so items inherit white on the white menu
background and read as invisible. Same reason for hover color. */
.rd-actions-menu li > a{display:flex !important;align-items:center !important;gap:9px !important;padding:7px 14px !important;font-size:13px !important;font-weight:500 !important;color:#182831 !important;line-height:1.3 !important;text-transform:none !important;letter-spacing:0 !important;text-align:left !important;text-decoration:none !important;}
.rd-actions-menu li > a:hover{background:rgba(0,0,0,.04) !important;color:#004766 !important;text-decoration:none !important;}
.rd-actions-menu li > a i{font-size:12px !important;width:14px !important;text-align:center !important;flex:none !important;}
.rd-actions-menu .dropdown-header{padding:8px 14px 6px !important;font-size:10px !important;font-weight:700 !important;letter-spacing:.5px !important;color:#7a8791 !important;text-align:left !important;text-transform:uppercase !important;}
.rd-actions-menu .border{border-top:1px solid #eef1f3 !important;margin:5px 0 !important;height:1px !important;}