/* RevUp N+1 Portal visual reconciliation.
   Final application-only layer: it must load after legacy and enterprise CSS. */
body[data-visual-system="nplus1"]{
  --rv-n1-navy:#031b3f;
  --rv-n1-blue:#0969e8;
  --rv-n1-cyan:#13bfe8;
  --rv-n1-canvas:var(--bg,#f5f8fc);
  --rv-n1-panel:var(--panel,#ffffff);
  --rv-n1-line:var(--line,#dce5f0);
  --rv-n1-text:var(--text,#0b172a);
  --rv-n1-muted:var(--muted,#617086);
}
body[data-visual-system="nplus1"] .sidebar{
  background:linear-gradient(180deg,#02152f 0%,var(--rv-n1-navy) 56%,#06244d 100%)!important;
  border-right:1px solid rgba(121,181,255,.18)!important;
  box-shadow:12px 0 32px rgba(3,27,63,.12)!important;
}
body[data-visual-system="nplus1"] .sideBtn{
  border:1px solid transparent!important;border-radius:10px!important;
  transition:background-color .16s ease,border-color .16s ease,color .16s ease,transform .12s ease!important;
}
.revupIconSprite{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
body[data-visual-system="nplus1"] .sideBtnIcon{width:19px;height:19px;flex:0 0 19px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
body[data-sidebar-collapsed="1"][data-visual-system="nplus1"] .sideBtnIcon{margin:0 auto}
body[data-visual-system="nplus1"] .sideBtn:hover{background:rgba(62,143,255,.13)!important;border-color:rgba(126,187,255,.2)!important}
body[data-visual-system="nplus1"] .sideBtn:active{transform:translateY(1px)}
body[data-visual-system="nplus1"] .sideBtn.active{
  color:#fff!important;background:linear-gradient(135deg,#0759d6,#087bf0)!important;
  border-color:rgba(137,198,255,.55)!important;box-shadow:0 8px 20px rgba(0,91,220,.28)!important;
}
body[data-visual-system="nplus1"] .shell{background:var(--rv-n1-canvas)!important}
body[data-visual-system="nplus1"] .topbar{
  border:1px solid var(--rv-n1-line)!important;border-radius:16px!important;
  background:var(--rv-n1-panel)!important;box-shadow:0 8px 24px rgba(20,47,82,.07)!important;
}
body[data-visual-system="nplus1"] :is(.panel,.heroCard,.ruPreferenceCard,.clientCard,.savedKpiCard){
  border:1px solid var(--rv-n1-line)!important;background:var(--rv-n1-panel)!important;
  box-shadow:0 8px 22px rgba(20,47,82,.065)!important;color:var(--text)!important;
}
body[data-visual-system="nplus1"] :is(.panel,.heroCard,.ruPreferenceCard,.clientCard,.savedKpiCard):hover{border-color:color-mix(in srgb,var(--rv-n1-blue) 28%,var(--rv-n1-line))!important}
body[data-visual-system="nplus1"] .tabPane>.heroCard:first-child{background:linear-gradient(135deg,var(--rv-n1-panel) 0%,color-mix(in srgb,var(--rv-n1-blue) 4%,var(--rv-n1-panel)) 100%)!important}
body[data-visual-system="nplus1"] :is(.btn.primary,button.primary){
  background:linear-gradient(135deg,#075bd8,var(--rv-n1-blue))!important;border-color:#075bd8!important;
  color:#fff!important;box-shadow:0 6px 14px rgba(9,105,232,.18)!important;
}
body[data-visual-system="nplus1"] :is(.btn.primary,button.primary):hover{filter:brightness(1.04);box-shadow:0 8px 18px rgba(9,105,232,.24)!important}
body[data-visual-system="nplus1"] :is(.btn,button,input,select,textarea):disabled{opacity:1;cursor:not-allowed;box-shadow:none!important}
body[data-visual-system="nplus1"] .revenueCopilotResult{
  margin-top:12px!important;padding:14px!important;border:1px solid color-mix(in srgb,var(--rv-n1-blue) 24%,var(--rv-n1-line))!important;border-radius:12px!important;
  background:linear-gradient(135deg,var(--rv-n1-panel),color-mix(in srgb,var(--rv-n1-blue) 7%,var(--rv-n1-panel)))!important;color:var(--rv-n1-text)!important;line-height:1.55;
}
body[data-visual-system="nplus1"] .revenueCopilotResult.loading{opacity:.72;cursor:progress}

/* Portal-wide contrast reconciliation.
   Legacy modules used fixed dark surfaces; the N+1 light canvas must replace
   those surfaces and their control colors as a single visual-system concern. */
body[data-visual-system="nplus1"] .sidebar,
body[data-visual-system="nplus1"] .sidebar :is(.sideBtn,.sideBtnLabel,.sideGroup,.sideBottom,.sidebarUser,.sidebarControlBtn,strong,small,span){color:#f7fbff!important}
body[data-visual-system="nplus1"] .sidebar .sideBtn{color:#f7fbff!important}
body[data-visual-system="nplus1"] .sidebar .sideBtn:hover{color:#fff!important}
body[data-visual-system="nplus1"] .sidebar .sideGroup{color:#bcd3ef!important}

body[data-visual-system="nplus1"] .tabPane :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),select,textarea),
body[data-visual-system="nplus1"] .topbar :is(input,select,textarea){
  border-color:var(--input-border,#c6d5e6)!important;background:var(--input-background,#fff)!important;color:var(--input-text,#0b172a)!important;
  -webkit-text-fill-color:var(--input-text,#0b172a)!important;box-shadow:none!important
}
body[data-visual-system="nplus1"] :is(input,textarea)::placeholder{color:var(--theme-textSecondary,#718097)!important;opacity:1}
body[data-visual-system="nplus1"] :is(input,select,textarea):focus-visible{border-color:var(--theme-inputFocus,#0969e8)!important;outline:3px solid var(--theme-inputFocus,rgba(9,105,232,.18))!important;outline-offset:1px}
body[data-visual-system="nplus1"] select option{background:var(--input-background,#fff);color:var(--input-text,#0b172a)}

body[data-visual-system="nplus1"] .tabBtn{border-color:#cbd9e8!important;background:#f7faff!important;color:#42536a!important}
body[data-visual-system="nplus1"] .tabBtn:hover{border-color:#8fb9ed!important;background:#edf5ff!important;color:#0b4f9f!important}
body[data-visual-system="nplus1"] .tabBtn.active{border-color:#0969e8!important;background:#0969e8!important;color:#fff!important}

body[data-visual-system="nplus1"] .tabPane :is(
  .kpi,.qualityMetric,.qualityHelp,.statMini,.notice,.aiBox,.sync .status,
  .importModeOption,.masterRow,.contactRow,.contactAdd,.userAccordion,
  .userSummaryStrip>div,.masterAccordion,.permissionGrid label,.savedKpiCard,
  .healthCard,.smartAlert,.kpiTargetCard,.temporalCard,.objectivePanel,
  .helpCalcCard,.manualIntro,.manualCard,.roleCategoryCard,.pivotFieldCard,
  .performanceHoursTotal,.performanceHourRow
){border-color:#d6e1ed!important;background:#fff!important;color:#0b172a!important}
body[data-visual-system="nplus1"] .tabPane :is(.kpi,.qualityMetric,.statMini) :is(span,small,em){color:var(--vcard-text,#617086)!important}
body[data-visual-system="nplus1"] .tabPane :is(.kpi,.qualityMetric,.statMini) strong{color:var(--vcard-text,#0b172a)!important}
body[data-visual-system="nplus1"] .tabPane :is(.healthCard,.kpiTargetCard,.temporalCard) :is(span,small,em){color:#617086!important}
body[data-visual-system="nplus1"] .tabPane :is(.healthCard,.kpiTargetCard,.temporalCard) strong{color:#0b172a!important}
body[data-visual-system="nplus1"] table th{border-color:#d6e1ed!important;background:#edf4fc!important;color:#24364c!important}
body[data-visual-system="nplus1"] table td{border-color:#e1e8f0!important;background:#fff;color:#42536a!important}
body[data-visual-system="nplus1"] table tbody tr:hover td{background:#f3f8fe!important;color:#0b172a!important}

/* Record cards use a dark interactive hover; keep every label readable. */
body[data-visual-system="nplus1"] :is(.userAccordionSummary,.masterAccordion>summary,.clientCardHead):is(:hover,:focus-visible),
body[data-visual-system="nplus1"] :is(.userAccordionSummary,.masterAccordion>summary,.clientCardHead):is(:hover,:focus-visible) *{
  color:#fff!important;
}
body[data-visual-system="nplus1"] :is(.btn,.iconBtn,button):focus-visible{outline:3px solid rgba(9,105,232,.28)!important;outline-offset:2px}

@media(max-width:1279px){body[data-visual-system="nplus1"] :is(.grid3,.revenueOsGrid.three){grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:767px){
  body[data-visual-system="nplus1"] :is(.grid2,.grid3,.revenueOsGrid.two,.revenueOsGrid.three){grid-template-columns:1fr!important}
  body[data-visual-system="nplus1"] .topbar{border-radius:13px!important}
  body[data-visual-system="nplus1"] :is(.panel,.heroCard){box-shadow:0 5px 16px rgba(20,47,82,.06)!important}
}
/* N+1 Wave 8 · Executive Intelligence */
.n1ExecutiveIntelligence{margin-top:18px}.n1ExecutiveDataState{border:1px solid var(--line);border-radius:999px;padding:5px 10px;color:var(--muted);font-size:.78rem}.n1ExecutiveMetricGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.n1ExecutiveMetricGrid article,.n1ExecutiveDetailGrid article{border:1px solid var(--line);border-radius:14px;background:var(--card);padding:14px}.n1ExecutiveMetricGrid span{display:block;color:var(--muted);font-size:.8rem}.n1ExecutiveMetricGrid strong{display:block;margin-top:6px;font-size:1.55rem}.n1ExecutiveDetailGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px}.n1ExecutiveDetailGrid h4{margin:0 0 10px}.n1ExecutiveDetailGrid ul{margin:0;padding-left:20px}.n1ExecutiveDetailGrid li{margin:7px 0}.n1ExecutiveDetailGrid li span{display:inline-flex;min-width:10rem}.n1ExecutiveDetailGrid li strong{float:right;color:var(--muted)}
@media(max-width:900px){.n1ExecutiveMetricGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.n1ExecutiveDetailGrid{grid-template-columns:1fr}}@media(max-width:520px){.n1ExecutiveMetricGrid{grid-template-columns:1fr}.n1ExecutiveDetailGrid li strong{float:none;display:block;margin-top:2px}}

/* N+1 Wave 9 · canonical AI usage analytics */
.openaiCanonicalControls{display:flex;align-items:end;justify-content:space-between;gap:12px;margin:12px 0}.openaiCanonicalControls label{display:grid;gap:5px;min-width:240px}.openaiCanonicalControls label span{font-size:.8rem;color:var(--muted)}.openaiReconciliationStatus{font-size:.78rem;color:var(--muted);overflow-wrap:anywhere}.openaiCanonicalGrid{display:grid;grid-template-columns:1.35fr 1fr;gap:14px;margin-top:14px}.openaiCanonicalGrid>section{min-width:0;border:1px solid var(--line);border-radius:14px;padding:14px;background:var(--card)}.openaiCanonicalGrid h4{margin:0 0 12px}.openaiHistoryBars{display:flex;align-items:stretch;gap:7px;min-height:220px;overflow-x:auto;padding:8px 2px}.openaiHistoryBars button{appearance:none;border:0;background:transparent;min-width:58px;display:grid;grid-template-rows:1fr auto auto;gap:5px;align-items:end;color:var(--text);cursor:help}.openaiHistoryBars button i{display:block;width:65%;height:var(--bar);max-height:155px;min-height:4px;margin:auto;background:linear-gradient(180deg,var(--rv-n1-cyan),var(--rv-n1-blue));border-radius:7px 7px 3px 3px}.openaiHistoryBars button span,.openaiHistoryBars button strong{font-size:.7rem;white-space:nowrap}.openaiHistoryBars button:focus-visible{outline:2px solid var(--rv-n1-blue);outline-offset:2px;border-radius:7px}.openaiFeatureBars{display:grid;gap:10px}.openaiFeatureBars>div{display:grid;grid-template-columns:minmax(90px,1fr) 2fr auto;gap:8px;align-items:center;font-size:.78rem}.openaiFeatureBars i{height:8px;background:color-mix(in srgb,var(--rv-n1-blue) 12%,var(--panel));border-radius:99px;overflow:hidden}.openaiFeatureBars b{display:block;height:100%;background:linear-gradient(90deg,var(--rv-n1-blue),var(--rv-n1-cyan));border-radius:inherit}
@media(max-width:900px){.openaiCanonicalGrid{grid-template-columns:1fr}}@media(max-width:620px){.openaiCanonicalControls{align-items:stretch;flex-direction:column}.openaiCanonicalControls label{min-width:0}.openaiHistoryBars{min-height:190px}}
.sideGroupInNav{margin-top:12px;pointer-events:none}
.performanceSectionNav{position:sticky;top:10px;z-index:20;display:flex;gap:8px;overflow-x:auto;margin:0 0 16px;padding:8px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--panel) 92%,transparent);box-shadow:0 8px 24px rgba(8,36,68,.08);backdrop-filter:blur(12px);scrollbar-width:thin}
.performanceSectionNav button{flex:0 0 auto;min-height:40px;padding:8px 14px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--muted);font:inherit;font-weight:750;cursor:pointer}
.performanceSectionNav button:hover{background:var(--panel2);color:var(--text)}
.performanceSectionNav button[aria-current="true"]{border-color:color-mix(in srgb,var(--primary) 40%,var(--line));background:color-mix(in srgb,var(--primary) 12%,var(--panel));color:var(--primary)}
.performanceSectionNav button:focus-visible{outline:3px solid color-mix(in srgb,var(--primary) 34%,transparent);outline-offset:2px}
#performanceOverview,#performanceGoals,#performanceForecast,#performanceIntelligence,#performanceKpis{scroll-margin-top:86px}
@media(max-width:720px){.performanceSectionNav{top:6px;margin-inline:0;padding:6px}.performanceSectionNav button{min-height:44px;padding-inline:12px}}
@media(prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}}
.revupSrOnly{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}

/* Opportunity Kanban · N+2 readability and information hierarchy. */
body[data-visual-system="nplus1"] .opportunityKanban{
  grid-auto-columns:minmax(310px,350px)!important;gap:16px!important;padding:6px 4px 20px!important;
  scroll-snap-type:x proximity;scroll-padding-inline:4px
}
body[data-visual-system="nplus1"] .kanbanCol{
  min-width:310px!important;padding:12px!important;border:1px solid var(--rv-n1-line)!important;
  border-radius:16px!important;background:color-mix(in srgb,var(--rv-n1-panel) 94%,var(--rv-n1-blue) 6%)!important;
  box-shadow:0 8px 22px rgba(20,47,82,.06)!important;scroll-snap-align:start
}
body[data-visual-system="nplus1"] .kanbanColHead{min-height:58px;margin-bottom:12px!important;padding:2px 2px 10px;border-bottom:1px solid var(--rv-n1-line)}
body[data-visual-system="nplus1"] .kanbanColHead h4{color:var(--rv-n1-text)!important;font-size:16px!important;line-height:1.25!important}
body[data-visual-system="nplus1"] .kanbanColHead small{color:#53657c!important;font-size:11px!important;font-weight:650}
body[data-visual-system="nplus1"] .kanbanColHead>span{background:#e8f2ff!important;color:#0759c7!important;border:1px solid #c9def8;font-size:12px!important}
body[data-visual-system="nplus1"] .kanbanColCards{gap:12px!important}
body[data-visual-system="nplus1"] .kanbanCard{
  margin:0!important;padding:15px!important;border:1px solid #cbd9e8!important;border-left-width:5px!important;
  border-radius:14px!important;background:#fff!important;color:var(--rv-n1-text)!important;
  box-shadow:0 7px 18px rgba(27,58,94,.09)!important;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease
}
body[data-visual-system="nplus1"] .kanbanCard:hover{border-color:#93b9e8!important;box-shadow:0 11px 25px rgba(27,58,94,.14)!important;transform:translateY(-1px)}
body[data-visual-system="nplus1"] .kanbanCard.aging-red{border-left-color:#e64c5c!important}
body[data-visual-system="nplus1"] .kanbanCard.aging-yellow{border-left-color:#d99a13!important}
body[data-visual-system="nplus1"] .kanbanCard.aging-green{border-left-color:#1aa376!important}
body[data-visual-system="nplus1"] .kanbanBadgeRow{gap:6px!important;margin-bottom:10px!important}
body[data-visual-system="nplus1"] :is(.kanbanSource,.kanbanStatus,.kanbanApproval){font-size:9px!important;font-weight:850!important;line-height:1!important;padding:5px 7px!important}
body[data-visual-system="nplus1"] .kanbanStatus{background:#edf2f8!important;color:#44566d!important}
body[data-visual-system="nplus1"] .kanbanProject{display:block!important;color:#0b172a!important;font-size:15px!important;line-height:1.35!important;margin-bottom:4px}
body[data-visual-system="nplus1"] .kanbanClient{color:#49647f!important;font-size:11px!important;font-weight:650;margin:0 0 9px!important}
body[data-visual-system="nplus1"] .kanbanMotive{color:#586b82!important;font-size:11px!important;line-height:1.45!important;margin:7px 0!important}
body[data-visual-system="nplus1"] .kanbanPrice{
  display:grid!important;grid-template-columns:1fr!important;gap:3px!important;padding:11px 12px!important;margin:10px 0!important;
  border-color:#bfd4ed!important;background:linear-gradient(135deg,#f3f8ff,#eef5ff)!important
}
body[data-visual-system="nplus1"] .kanbanPrice strong{color:#071a33!important;font-size:18px!important;letter-spacing:-.01em}
body[data-visual-system="nplus1"] .kanbanPrice :is(small,em){color:#566b84!important;font-size:10px!important;text-align:left!important}
body[data-visual-system="nplus1"] .kanbanProducts{color:#526b83!important;font-size:11px!important;font-weight:600}
body[data-visual-system="nplus1"] .kanbanMeta{gap:5px!important;margin:9px 0!important}
body[data-visual-system="nplus1"] .kanbanMeta span{border-color:#cad9e9!important;background:#f7faff!important;color:#50637a!important;font-size:9px!important;font-weight:700}
body[data-visual-system="nplus1"] .kanbanMeta .pipelineIntelligenceBadge{border-color:#a8c7eb!important;background:#edf5ff!important;color:#0759b8!important}
body[data-visual-system="nplus1"] .kanbanAging{padding:7px 9px!important;background:#f8fafc!important;border:1px solid #e0e7ef;font-size:10px!important;font-weight:650}
body[data-visual-system="nplus1"] .kanbanAging.red{color:#bf2637!important;background:#fff3f4!important;border-color:#f4c8cd!important}
body[data-visual-system="nplus1"] .kanbanAging.yellow{color:#8c5a00!important;background:#fff9e8!important;border-color:#efd99c!important}
body[data-visual-system="nplus1"] .kanbanAging.green{color:#087653!important;background:#edfbf6!important;border-color:#b9e7d6!important}
body[data-visual-system="nplus1"] .kanbanNext{gap:4px!important;padding:10px 11px!important;margin:9px 0!important;border:1px solid #d0e0f3;background:#f1f6fd!important}
body[data-visual-system="nplus1"] .kanbanNext b{color:#172a42!important;font-size:11px!important}
body[data-visual-system="nplus1"] .kanbanNext :is(small,em){color:#566b84!important;font-size:10px!important;line-height:1.35}
body[data-visual-system="nplus1"] .kanbanNext .warn{color:#a86800!important;font-weight:750}
body[data-visual-system="nplus1"] .kanbanCommentsMini{max-height:78px;overflow:auto;border-color:#d8e3ef!important}
body[data-visual-system="nplus1"] .kanbanCommentsMini p{color:#586b82!important;font-size:10px!important;line-height:1.4!important}
body[data-visual-system="nplus1"] .kanbanCommentsMini b{color:#172a42!important}
body[data-visual-system="nplus1"] .kanbanStage{min-height:42px!important;margin-top:10px!important;border-color:#aebfd2!important;background:#fff!important;font-weight:700}
body[data-visual-system="nplus1"] .kanbanActions{gap:7px!important;margin-top:8px!important}
body[data-visual-system="nplus1"] .kanbanActions .btn{
  min-height:36px!important;padding:7px 8px!important;border-color:#c4d4e6!important;background:#f8fbff!important;
  color:#263b55!important;font-size:10px!important;font-weight:750!important
}
body[data-visual-system="nplus1"] .kanbanActions .btn:hover{border-color:#79aae3!important;background:#edf5ff!important;color:#0759b8!important}
body[data-visual-system="nplus1"] .kanbanActions .btn.danger{border-color:#f0c8cd!important;background:#fff7f8!important;color:#b42334!important}
body[data-visual-system="nplus1"] .kanbanWatch{color:#698097!important}.kanbanWatch:hover{color:#d09000!important}
body[data-visual-system="nplus1"] .kanbanEmpty{min-height:92px;display:grid;place-items:center;color:#60738a!important;background:#fff!important;border-color:#cbd9e8!important;font-weight:650}
@media(max-width:700px){
  body[data-visual-system="nplus1"] .opportunityKanban{grid-auto-columns:minmax(280px,88vw)!important}
  body[data-visual-system="nplus1"] .kanbanCol{min-width:280px!important}
  body[data-visual-system="nplus1"] .kanbanCard{padding:13px!important}
}

/* Dynamic category cards accept 0..N configured categories without fixed widths. */
.categoryKpiRow{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))!important}
.categoryKpiRow .categoryMetricCard{appearance:none;text-align:left;cursor:pointer;color:inherit;font:inherit;width:100%}
.categoryKpiRow .categoryMetricCard:focus-visible{outline:3px solid var(--accent,#1473e6);outline-offset:2px}
.categoryKpiRow .categoryEmptyState{grid-column:1/-1}
.activityMetricGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:18px;align-items:stretch;margin-top:18px}
.activityMetricCategories{display:contents}
.activityMetricGrid .categoryMetricCard{appearance:none;text-align:left;cursor:pointer;color:inherit;font:inherit;width:100%}
.activityMetricGrid .categoryMetricCard:focus-visible{outline:3px solid var(--accent,#1473e6);outline-offset:2px}
.activityMetricGrid .categoryEmptyState{grid-column:1/-1}
@media(max-width:700px){.activityMetricGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:430px){.activityMetricGrid{grid-template-columns:1fr}}

/* Portal-wide card alignment contract.
   The legacy layers used a mix of start/stretch alignment and sibling margins.
   Direct cards now share one row box without forcing unrelated rows to a
   global fixed height. */
body[data-visual-system="nplus1"] :is(
  .hero,.myDayKpis,.myDayGrid,.grid2,.grid3,.grid4,.analyticsGrid,.opsGrid,
  .pkGridTop,.pkGridMiddle,.pkGridInsights,.pkFeatureGrid,.pkFeatureGrid2,.pkFeatureGrid3,
  .riKpiStrip,.riKpiStrip4,.riExecMainGrid,.riExecBottomGrid,.riDashGrid4,
  .revenueOsKpis,.revenueOsGrid,.licenseSummary,.governanceControlsGrid,
  .forecastScenarioGrid,.revenueReviewGrid,.n1ExecutiveMetricGrid,.n1ExecutiveDetailGrid,
  .openaiCanonicalGrid,.ruPreferenceGrid,.ruHoursSummary,.userSummaryStrip,
  .canonicalKpiGrid,.duplicateAlertList,.favoritesWorkspace,
  .activitySummary,.adminDataSummary,.categoryKpiRow,.clevelDashboardGrid,.clientOpsGrid,
  .contactCardGrid,.goalsWeightSummary,.healthGrid,.helpCalcGrid,.kpiTargetGrid,
  .maintenanceConfigGrid,.manualGrid,.openaiUsageCards,.oppForecastGrid,.oppSummaryCards,
  .opsCompareGrid,.opsStatGrid,.opsTechGrid,.pkMetricCards,.productHierarchyGrid,.qualityGrid,
  .revenueKpiCards,.riCanonicalKpis,.riOppCards,.riSignalStrip,.roleCategoryGrid,
  .savedKpiGrid,.statStrip,.temporalGrid,.testCenterSummary,.themeModeCards
){align-items:stretch!important}
body[data-visual-system="nplus1"] :is(
  .myDayKpis,.myDayGrid,.grid2,.grid3,.grid4,.analyticsGrid,.opsGrid,
  .pkGridTop,.pkGridMiddle,.pkGridInsights,.pkFeatureGrid,.pkFeatureGrid2,.pkFeatureGrid3,
  .riKpiStrip,.riKpiStrip4,.riExecMainGrid,.riExecBottomGrid,.riDashGrid4,
  .revenueOsKpis,.revenueOsGrid,.licenseSummary,.governanceControlsGrid,
  .forecastScenarioGrid,.revenueReviewGrid,.n1ExecutiveMetricGrid,.n1ExecutiveDetailGrid,
  .openaiCanonicalGrid,.ruPreferenceGrid,.ruHoursSummary,.userSummaryStrip,
  .canonicalKpiGrid,.duplicateAlertList,.favoritesWorkspace,
  .activitySummary,.adminDataSummary,.categoryKpiRow,.clevelDashboardGrid,.clientOpsGrid,
  .contactCardGrid,.goalsWeightSummary,.healthGrid,.helpCalcGrid,.kpiTargetGrid,
  .maintenanceConfigGrid,.manualGrid,.openaiUsageCards,.oppForecastGrid,.oppSummaryCards,
  .opsCompareGrid,.opsStatGrid,.opsTechGrid,.pkMetricCards,.productHierarchyGrid,.qualityGrid,
  .revenueKpiCards,.riCanonicalKpis,.riOppCards,.riSignalStrip,.roleCategoryGrid,
  .savedKpiGrid,.statStrip,.temporalGrid,.testCenterSummary,.themeModeCards
) > :is(.panel,.heroCard,.card,.kpi,.metric,.pkPanel,.riKpiCard,.licenseMetric,
  .governanceControlCard,.revenueReviewCard,.canonicalKpiTile,.ruPreferenceCard,
  .savedKpiCard,.favoriteCard,article,section){
  align-self:stretch!important;height:100%!important;min-height:0;margin-block:0!important;box-sizing:border-box!important
}
body[data-visual-system="nplus1"] .hero{align-items:stretch!important}
body[data-visual-system="nplus1"] .hero>.heroCard{align-self:stretch!important;height:auto!important;margin:0!important}
body[data-visual-system="nplus1"] .myDayKpis{align-items:stretch!important;grid-auto-rows:minmax(122px,auto)!important}
body[data-visual-system="nplus1"] .myDayKpis>article{
  display:flex!important;flex-direction:column;justify-content:center;min-height:122px!important;
  margin:0!important;padding:20px!important
}
body[data-visual-system="nplus1"] .myDayKpis>article>span{min-height:22px;display:flex!important;align-items:center}
body[data-visual-system="nplus1"] .myDayKpis>article>strong{margin-top:8px!important;line-height:1!important}
body[data-visual-system="nplus1"] .myDayGrid{align-items:stretch!important}

/* My Day KPI row: percentage heights from the portal-wide card contract can
   resolve against different intrinsic card boxes. Let CSS Grid own the row
   height so every KPI starts and ends on the same horizontal guides. */
body[data-visual-system="nplus1"] #tab-myday .myDayKpis{
  grid-auto-rows:1fr!important;align-items:stretch!important
}
body[data-visual-system="nplus1"] #tab-myday .myDayKpis>article.panel{
  height:auto!important;min-height:122px!important;align-self:stretch!important;
  margin:0!important
}

/* Categories by role: reconcile legacy dark chips with the N+1 light canvas. */
body[data-visual-system="nplus1"] .roleCategoryGrid{
  grid-template-columns:repeat(2,minmax(0,1fr));gap:16px!important
}
body[data-visual-system="nplus1"] .roleCategoryCard{
  position:relative;display:flex;flex-direction:column;gap:16px;min-height:164px!important;
  padding:20px!important;border:1px solid #cfdeed!important;border-radius:18px!important;
  background:linear-gradient(145deg,#fff 0%,#f8fbff 100%)!important;
  box-shadow:0 8px 22px rgba(31,67,105,.07)!important;overflow:hidden
}
body[data-visual-system="nplus1"] .roleCategoryCard::before{
  content:"";position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,#1473e6,#28cdb0)
}
body[data-visual-system="nplus1"] .roleCategoryHead{align-items:flex-start!important;gap:18px!important}
body[data-visual-system="nplus1"] .roleCategoryHead>div{gap:6px!important;min-width:0}
body[data-visual-system="nplus1"] .roleCategoryHead strong{color:#0b172a!important;font-size:1.05rem!important;line-height:1.25}
body[data-visual-system="nplus1"] .roleCategoryMeta{
  display:flex;align-items:center;gap:6px;color:#617086!important;font-size:.78rem!important;text-transform:none
}
body[data-visual-system="nplus1"] .roleCategoryStatus{width:8px;height:8px;border-radius:50%;background:#22a95a;box-shadow:0 0 0 3px rgba(34,169,90,.12)}
body[data-visual-system="nplus1"] .roleCategoryStatus.inactive{background:#98a5b5;box-shadow:0 0 0 3px rgba(152,165,181,.15)}
body[data-visual-system="nplus1"] .roleCategoryCount{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;padding:6px 10px;border:1px solid #c9dcf2;
  border-radius:999px;background:#edf5ff;color:#36546f!important;font-size:.75rem!important;white-space:nowrap
}
body[data-visual-system="nplus1"] .roleCategoryCount strong{font-size:.82rem!important;color:#095fc3!important}
body[data-visual-system="nplus1"] .roleCategoryChips{gap:8px!important;margin-top:auto!important;align-content:flex-start}
body[data-visual-system="nplus1"] .roleCategoryChip{
  display:inline-flex;align-items:center;min-height:30px;padding:6px 11px!important;border:1px solid #b9d4f1!important;
  border-radius:999px!important;background:#eaf4ff!important;color:#123f6d!important;font-size:.75rem!important;
  font-weight:650;line-height:1.25;overflow-wrap:anywhere
}
body[data-visual-system="nplus1"] .roleCategoryChip:hover{
  border-color:#1473e6!important;background:#1473e6!important;color:#fff!important
}
body[data-visual-system="nplus1"] .roleCategoryChip.inactive{
  border-style:dashed!important;background:#f1f3f6!important;color:#5e6877!important;opacity:1!important;text-decoration:line-through
}
@media(max-width:900px){body[data-visual-system="nplus1"] .roleCategoryGrid{grid-template-columns:1fr!important}}
@media(max-width:520px){
  body[data-visual-system="nplus1"] .roleCategoryCard{min-height:0!important;padding:16px!important}
  body[data-visual-system="nplus1"] .roleCategoryHead{flex-direction:column;gap:10px!important}
  body[data-visual-system="nplus1"] .roleCategoryCount{align-self:flex-start}
}

/* RevUp canonical UI primitives.
   Semantic tokens isolate consumers from legacy palette values and guarantee
   complete light/branding and dark-mode states. */
body[data-visual-system="nplus1"]{
  --surface-primary:var(--rv-n1-canvas,#f5f8fc);
  --surface-secondary:var(--rv-n1-panel,#fff);
  --surface-elevated:var(--rv-n1-panel,#fff);
  --text-primary:var(--rv-n1-text,#0b172a);
  --text-secondary:#50627a;--text-muted:#66768b;
  --border-default:#cfdeed;--border-strong:#9eb9d5;
  --interactive-primary:#0969e8;--interactive-primary-text:#fff;
  --status-success:#168348;--status-warning:#9a6500;--status-danger:#c5303d;--status-info:#0969e8;
  --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;
  --radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:20px;
  --shadow-card:0 8px 22px rgba(20,47,82,.07);
  --focus-ring:0 0 0 3px color-mix(in srgb,var(--interactive-primary) 24%,transparent);
  --control-sm:36px;--control-md:44px;--control-lg:52px;--icon-action:20px;
  background:var(--surface-primary)!important;color:var(--text-primary)!important
}
body[data-visual-system="nplus1"][data-theme-mode="dark"]{
  --surface-primary:#07111f;--surface-secondary:#0d1b2a;--surface-elevated:#11263a;
  --text-primary:#eef6ff;--text-on-canvas:#eef6ff;--text-secondary:#c3d2e3;--text-muted:#9eb2c8;
  --border-default:#304a65;--border-strong:#587592;--interactive-primary:#39a9ff;--interactive-primary-text:#06111d;
  --status-success:#65dc98;--status-warning:#ffd273;--status-danger:#ff8994;--status-info:#68baff;
  --shadow-card:0 10px 28px rgba(0,0,0,.25)
}

/* Dark mode is a complete semantic theme, never a text-only recolor.  These
   selectors cover legacy overlays and dynamically-created records that live
   outside .tabPane and therefore did not consume the canonical controls. */
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .modal,.modalCard,.processModal,.stableWizardCard,.modalBackdrop>.modal,
  .calendarEventModalCard,.calendarCreateModalCard,.kanbanModalForm,
  .opportunityChecklist,.notificationPanel,.globalSearchResults
){background:var(--surface-secondary)!important;color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .modal,.modalCard,.processModal,.stableWizardCard,.kanbanModalForm,.opportunityChecklist,
  .calendarEventModalCard,.calendarCreateModalCard
) :is(h1,h2,h3,h4,h5,p,span,strong,b,label,legend,dt,dd,li){color:var(--text-primary)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .modal,.modalCard,.processModal,.stableWizardCard,.kanbanModalForm,.opportunityChecklist,
  .calendarEventModalCard,.calendarCreateModalCard
) :is(small,.muted,.helper,.caption){color:var(--text-secondary)!important;opacity:1!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .modal,.modalCard,.processModal,.stableWizardCard,.kanbanModalForm,.opportunityChecklist,
  .calendarEventModalCard,.calendarCreateModalCard
) :is(input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),select,textarea){
  background:var(--surface-elevated)!important;color:var(--text-primary)!important;
  -webkit-text-fill-color:var(--text-primary)!important;border-color:var(--border-strong)!important
}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(.modalClose,.iconBtn){background:var(--surface-elevated)!important;color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .myDayLine,.favoriteCard,.healingRow,.slaRow,.checklistIntro,.opportunityChecklist>label,
  .commentRow,.kanbanComment,.clientRow,.masterRow,.recordRow,.emptyState
){background:var(--surface-elevated)!important;color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .myDayLine,.favoriteCard,.healingRow,.slaRow,.checklistIntro,.opportunityChecklist>label,
  .commentRow,.kanbanComment,.clientRow,.masterRow,.recordRow
) :is(h3,h4,strong,b){color:var(--text-primary)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .myDayLine,.favoriteCard,.healingRow,.slaRow,.checklistIntro,.opportunityChecklist>label,
  .commentRow,.kanbanComment,.clientRow,.masterRow,.recordRow
) :is(p,span,small){color:var(--text-secondary)!important;opacity:1!important}

/* RIVA is a global drawer appended to body.  It must use the same theme as the
   active portal instead of retaining a fixed white canvas with light text. */
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(.riCanonicalRiva,.riCanonicalRivaBody,.riCanonicalComposer){background:var(--surface-secondary)!important;color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] .riCanonicalRiva :is(h2,h3,strong,p,li,span){color:var(--text-primary)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] .riCanonicalRivaBubble strong,
body[data-visual-system="nplus1"][data-theme-mode="dark"] .riCanonicalEvidence span{background:var(--surface-elevated)!important;color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] .riCanonicalComposer input{background:var(--surface-elevated)!important;color:var(--text-primary)!important;-webkit-text-fill-color:var(--text-primary)!important}

/* Keep configured theme text authoritative.  Legacy --rv-n1-* aliases were
   bound before the user preference loaded and otherwise preserved light-mode
   colors on cards. */
body[data-visual-system="nplus1"]{
  --rv-n1-canvas:var(--surface-primary);--rv-n1-panel:var(--surface-secondary);
  --rv-n1-text:var(--text-primary);--rv-n1-muted:var(--text-muted);--rv-n1-line:var(--border-default)
}

/* Tenant branding owns the primary action color in both modes. */
body[data-visual-system="nplus1"] :is(.btn.primary,button.primary){
  background:var(--interactive-primary)!important;
  border-color:var(--interactive-primary)!important;
  color:var(--interactive-primary-text)!important;
}

/* BaseCard family shared by panels, summaries, metrics and charts. */
body[data-visual-system="nplus1"] :is(.panel,.heroCard,.card,.kpi,.metric,.statMini,.qualityMetric,.savedKpiCard,.healthCard,.temporalCard,.kpiTargetCard,.roleCategoryCard){
  border-color:var(--border-default)!important;background:var(--surface-secondary)!important;
  color:var(--text-primary)!important;border-radius:var(--radius-lg)!important;box-shadow:var(--shadow-card)!important;
  min-width:0;overflow-wrap:anywhere
}
body[data-visual-system="nplus1"] :is(.kpi,.metric,.statMini,.qualityMetric,.healthCard,.temporalCard,.kpiTargetCard){
  display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4)!important;min-height:132px;height:100%
}
body[data-visual-system="nplus1"] :is(.kpi,.metric,.statMini,.qualityMetric,.healthCard,.temporalCard,.kpiTargetCard) :is(strong,.qualityValue,[data-metric-value]){
  color:var(--text-primary)!important;font-size:clamp(1.55rem,2.6vw,2.15rem)!important;line-height:1.08;
  letter-spacing:-.025em;overflow-wrap:anywhere;word-break:normal
}
body[data-visual-system="nplus1"] :is(.sectionTitle,.qualityMetricTop,.savedKpiHead){align-items:flex-start!important;min-width:0}
body[data-visual-system="nplus1"] :is(.sectionTitle,.qualityMetricTop,.savedKpiHead)>:first-child{min-width:0}
body[data-visual-system="nplus1"] :is(h1,h2,h3,h4,strong,label){color:var(--text-primary)}
body[data-visual-system="nplus1"] .toggleLine{background:var(--surface-elevated)!important;border-color:var(--border-default)!important;color:var(--text-primary)!important}
body[data-visual-system="nplus1"] .toggleLine span{color:var(--text-primary)!important;-webkit-text-fill-color:var(--text-primary)!important;opacity:1!important}
body[data-visual-system="nplus1"] :is(small,.muted,.mutedText,.helper,.caption,.sectionTitle small,.field small){color:var(--text-muted)!important;opacity:1!important}

/* Canonical controls: visual icon size is independent from its click target. */
body[data-visual-system="nplus1"] :is(.btn,.iconBtn,.tabBtn,.sidebarControlBtn,.favoriteStar,.kanbanWatch){
  min-height:var(--control-md);border-radius:var(--radius-md);font-weight:650;line-height:1.2;
  transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .12s ease
}
body[data-visual-system="nplus1"] .iconBtn,
body[data-visual-system="nplus1"] :is(.favoriteStar,.kanbanWatch){min-width:var(--control-md);padding:10px;display:inline-flex;align-items:center;justify-content:center}
body[data-visual-system="nplus1"] :is(.btn,.iconBtn,.tabBtn):hover:not(:disabled){border-color:var(--interactive-primary)!important;transform:translateY(-1px)}
body[data-visual-system="nplus1"] :is(button,a,input,select,textarea,[role="button"],[tabindex="0"]):focus-visible{
  outline:2px solid var(--interactive-primary)!important;outline-offset:2px!important;box-shadow:var(--focus-ring)!important
}
body[data-visual-system="nplus1"] :is(.btn,.iconBtn,.tabBtn):disabled{
  opacity:1!important;background:color-mix(in srgb,var(--theme-inputBackground,var(--surface-secondary)) 92%,var(--theme-inputText,var(--text-primary)))!important;
  border-color:var(--border-default)!important;border-style:dashed!important;color:var(--theme-inputText,var(--text-primary))!important
}
body[data-visual-system="nplus1"] :is(.btn.danger,button.danger){color:var(--status-danger)!important;border-color:color-mix(in srgb,var(--status-danger) 45%,var(--border-default))!important}

/* Inputs, tables and notices consume the same semantic theme. */
body[data-visual-system="nplus1"] .tabPane :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),select,textarea){
  min-height:var(--control-md);background:var(--theme-inputBackground,var(--surface-elevated))!important;color:var(--theme-inputText,var(--text-primary))!important;
  -webkit-text-fill-color:var(--theme-inputText,var(--text-primary))!important;border-color:var(--theme-inputBorder,var(--border-default))!important
}
body[data-visual-system="nplus1"] :is(input,textarea)::placeholder{color:var(--theme-inputPlaceholder,var(--text-muted))!important;-webkit-text-fill-color:var(--theme-inputPlaceholder,var(--text-muted))!important;opacity:1!important}
body[data-visual-system="nplus1"] table th{background:color-mix(in srgb,var(--surface-secondary) 88%,var(--interactive-primary))!important;color:var(--text-primary)!important}
body[data-visual-system="nplus1"] table td{background:var(--surface-secondary)!important;color:var(--text-secondary)!important}
body[data-visual-system="nplus1"] table tbody tr:hover td{background:color-mix(in srgb,var(--surface-secondary) 92%,var(--interactive-primary))!important;color:var(--text-primary)!important}
body[data-visual-system="nplus1"] :is(.notice,.aiBox,.qualityHelp,.sync .status){background:var(--surface-elevated)!important;color:var(--text-secondary)!important;border-color:var(--border-default)!important}

/* Shared accessible tooltip primitive. */
.dsTooltip{position:fixed;z-index:1000;width:min(360px,calc(100vw - 24px));padding:14px 16px;border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface-elevated);color:var(--text-primary);box-shadow:0 14px 36px rgba(5,20,40,.24);font-size:.86rem;line-height:1.5}
.dsTooltip[hidden]{display:none}.dsTooltip strong{display:block;margin-bottom:6px}.dsTooltip p{margin:0;color:var(--text-secondary)}
body[data-visual-system="nplus1"] .canonicalKpiHelpActions{
  position:sticky!important;z-index:2;bottom:0!important;margin:18px 0 0!important;padding:14px 0 2px!important;
  background:var(--panel)!important;box-shadow:0 -10px 18px var(--panel)
}
body[data-visual-system="nplus1"] .canonicalKpiHelpActions .btn:hover{transform:none!important}

/* Useful empty/loading/error states retain layout and tell the user what next. */
body[data-visual-system="nplus1"] :is(.emptyState,.categoryEmptyState,.openaiZeroState){min-height:112px;display:grid;place-content:center;text-align:center;padding:var(--space-6);color:var(--text-secondary)}
body[data-visual-system="nplus1"] :is(.loading,.skeleton)[aria-busy="true"]{min-height:44px;border-radius:var(--radius-md);background:linear-gradient(90deg,var(--surface-elevated),color-mix(in srgb,var(--surface-elevated) 82%,var(--interactive-primary)),var(--surface-elevated));background-size:220% 100%;animation:dsSkeleton 1.4s ease infinite}
@keyframes dsSkeleton{to{background-position:-220% 0}}
@media(prefers-reduced-motion:reduce){body[data-visual-system="nplus1"] *,body[data-visual-system="nplus1"] *::before,body[data-visual-system="nplus1"] *::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
@media(max-width:575px){
  body[data-visual-system="nplus1"] :is(.btn,.tabBtn){min-height:44px;padding:10px 12px}
  body[data-visual-system="nplus1"] :is(.kpi,.metric,.statMini,.qualityMetric,.healthCard,.temporalCard,.kpiTargetCard){min-height:116px}
}
body[data-visual-system="nplus1"] .myDayGrid>.panel{height:100%!important;margin:0!important}
body[data-visual-system="nplus1"] :is(.grid2,.grid3,.grid4,.analyticsGrid,.opsGrid,.revenueOsGrid)>.panel{
  align-self:stretch!important;height:100%!important;margin:0!important
}
body[data-visual-system="nplus1"] :is(.panel,.card,.kpi,.metric,.pkPanel,.riKpiCard)>.sectionTitle:first-child{
  width:100%;box-sizing:border-box
}
@media(max-width:760px){
  body[data-visual-system="nplus1"] :is(.myDayKpis,.myDayGrid,.grid2,.grid3,.grid4,.analyticsGrid,.opsGrid,
    .pkGridTop,.pkGridMiddle,.pkGridInsights,.pkFeatureGrid,.pkFeatureGrid2,.pkFeatureGrid3,
    .riExecMainGrid,.riExecBottomGrid,.riDashGrid4,.revenueOsGrid,.licenseSummary,
    .governanceControlsGrid,.forecastScenarioGrid,.revenueReviewGrid,.openaiCanonicalGrid){
    align-items:stretch!important
  }
  body[data-visual-system="nplus1"] .myDayKpis{grid-auto-rows:auto!important}
  body[data-visual-system="nplus1"] .myDayKpis>article{min-height:104px!important}
}

/* Card action rail: contextual help and favorites own layout space instead of
   floating over titles, descriptions or charts. */
body[data-visual-system="nplus1"] .cardActionRail{
  display:flex;align-items:center;justify-content:flex-end;gap:var(--space-2);
  flex:0 0 auto;min-width:max-content;margin-left:auto
}
body[data-visual-system="nplus1"] .favoriteEligible>.cardActionRail:first-child{
  width:100%;margin:0 0 var(--space-3);padding:0
}
body[data-visual-system="nplus1"] .cardActionRail :is(.favoriteStar,.revupHelpButton){
  position:static!important;inset:auto!important;margin:0!important;transform:none!important;
  width:44px!important;height:44px!important;min-width:44px!important;flex:0 0 44px
}
body[data-visual-system="nplus1"] .favoriteEligible{padding-top:var(--space-4)!important}
body[data-visual-system="nplus1"] .sectionTitle>.cardActionRail{align-self:flex-start}
@media(max-width:575px){
  body[data-visual-system="nplus1"] .sectionTitle{display:grid!important;grid-template-columns:minmax(0,1fr) auto!important}
  body[data-visual-system="nplus1"] .sectionTitle>.actions{grid-column:1/-1;width:100%}
  body[data-visual-system="nplus1"] .cardActionRail{align-self:start}
}

/* Theme-safe nested surfaces. Legacy light cards inside a dark container must
   not retain pale-on-pale foregrounds. */
body[data-visual-system="nplus1"] :is(
  .userAccordionSummary,.userAccordionBody,.licenseSummary,.licenseMetric,
  .governanceControlCard,.integrityControlCard,.pivotFieldPool,.pivotDropZone,
  .pivotChip,.openaiCanonicalGrid>section,.openaiUsageCard,.userSummaryStrip>div
){color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .userAccordion,.userAccordionSummary,.userAccordionBody,.licenseSummary,.licenseMetric,
  .governanceControlCard,.integrityControlCard,.pivotFieldPool,.pivotDropZone,
  .pivotChip,.openaiCanonicalGrid>section,.openaiUsageCard,.userSummaryStrip>div
){background:var(--surface-secondary)!important;color:var(--text-primary)!important;border-color:var(--border-default)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .userAccordion,.licenseSummary,.governanceControlsGrid,.pivotFieldPool,.pivotDropGrid,
  .openaiCanonicalGrid,.integrityControlsGrid
) :is(h1,h2,h3,h4,h5,strong,b,label,legend,dt,dd){color:var(--text-primary)!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] :is(
  .userAccordion,.licenseSummary,.governanceControlsGrid,.pivotFieldPool,.pivotDropGrid,
  .openaiCanonicalGrid,.integrityControlsGrid
) :is(p,span,small,em){color:var(--text-secondary)!important;opacity:1!important}
body[data-visual-system="nplus1"][data-theme-mode="dark"] .userAccordionSummary:is(:hover,:focus-visible),
body[data-visual-system="nplus1"][data-theme-mode="dark"] .userAccordionSummary:is(:hover,:focus-visible) *{
  background:var(--interactive-primary)!important;color:var(--interactive-primary-text)!important
}

/* Native multi-select menus cannot inherit a dark foreground on their white
   popup surface across browsers. */
body[data-visual-system="nplus1"] select[multiple] option{background:#fff!important;color:#0b172a!important;-webkit-text-fill-color:#0b172a!important}
body[data-visual-system="nplus1"] select[multiple] option:checked{background:#dcecff!important;color:#073d80!important}

/* AI analytics use bounded, readable cards even when datasets are empty. */
body[data-visual-system="nplus1"] #tab-openai :is(.panel,.openaiUsageCard,.openaiCanonicalGrid>section){min-height:0!important;height:auto!important}
body[data-visual-system="nplus1"] #tab-openai :is(.openaiUsageChart,.openaiHistoryBars){max-height:320px;min-height:180px}
