/*
 * PESS ONE V4.0.4 — Global Contrast & Theme Stability Layer
 * Loaded AFTER Branding & Theme Studio variables so component readability
 * cannot be broken by a light/dark brand colour combination.
 * Principle: dark surface = light copy; light/surface card = dark copy.
 */

:root{
  --contrast-on-dark:#f8fff9;
  --contrast-on-dark-muted:#d5e6db;
  --contrast-on-dark-soft:#bcd1c3;
  --contrast-on-light:#17221c;
  --contrast-on-light-strong:#0f1e16;
  --contrast-on-light-muted:#66736c;
  --contrast-field-bg:#ffffff;
  --contrast-field-text:#17221c;
  --contrast-field-placeholder:#819087;
}
html[data-theme="dark"]{
  --contrast-on-light:#e8f2ec;
  --contrast-on-light-strong:#f4faf6;
  --contrast-on-light-muted:#9caea4;
  --contrast-field-bg:#13261d;
  --contrast-field-text:#eef7f1;
  --contrast-field-placeholder:#879a90;
}

/* ======================================================================
   ERP — authoritative surface contrast
   ====================================================================== */
body:not(.pp-public-body){color:var(--ink-900)!important;background:var(--canvas)!important}
body:not(.pp-public-body) .content-area,
body:not(.pp-public-body) .panel,
body:not(.pp-public-body) .stats article,
body:not(.pp-public-body) .table-wrap,
body:not(.pp-public-body) .modal-card,
body:not(.pp-public-body) .dropdown-menu,
body:not(.pp-public-body) .fatal-card,
body:not(.pp-public-body) .v400-kpis article,
body:not(.pp-public-body) .v400-tabs,
body:not(.pp-public-body) .v400-flow-cards a,
body:not(.pp-public-body) .v400-opportunity,
body:not(.pp-public-body) .v400-public-form,
body:not(.pp-public-body) .v400-status-form,
body:not(.pp-public-body) .v400-verify-card{
  color:var(--ink-900)!important;
}
body:not(.pp-public-body) .page-title,
body:not(.pp-public-body) .page-identity h1,
body:not(.pp-public-body) .panel h1,
body:not(.pp-public-body) .panel h2,
body:not(.pp-public-body) .panel h3,
body:not(.pp-public-body) .panel h4,
body:not(.pp-public-body) .stats strong,
body:not(.pp-public-body) td b,
body:not(.pp-public-body) .v400-kpis strong,
body:not(.pp-public-body) .v400-flow-cards b,
body:not(.pp-public-body) .v400-opportunity h3,
body:not(.pp-public-body) .v400-public-form legend,
body:not(.pp-public-body) .v400-verify-card h1{
  color:var(--ink-950)!important;
}
body:not(.pp-public-body) .page-subtitle,
body:not(.pp-public-body) .panel-head>span,
body:not(.pp-public-body) .stats article>span,
body:not(.pp-public-body) .stats article>small,
body:not(.pp-public-body) .empty,
body:not(.pp-public-body) .empty-state,
body:not(.pp-public-body) .v400-kpis span,
body:not(.pp-public-body) .v400-verify-card footer{
  color:var(--ink-500)!important;
}

/* Forms must always be readable against the active ERP surface. */
body:not(.pp-public-body) input:not([type="checkbox"]):not([type="radio"]):not([type="color"]),
body:not(.pp-public-body) select,
body:not(.pp-public-body) textarea{
  background:var(--surface)!important;
  color:var(--ink-900)!important;
  border-color:var(--line)!important;
}
body:not(.pp-public-body) input::placeholder,
body:not(.pp-public-body) textarea::placeholder{color:var(--ink-400)!important;opacity:1}
body:not(.pp-public-body) label{color:var(--ink-700)}
body:not(.pp-public-body) th{background:var(--surface-muted)!important;color:var(--ink-500)!important}
body:not(.pp-public-body) td{color:var(--ink-900)}
body:not(.pp-public-body) tbody tr:hover{background:var(--green-50)!important}

/* Header is a surface; keep copy readable for both white and dark theme header tokens. */
body:not(.pp-public-body) .topbar{color:var(--ink-900)!important}
body:not(.pp-public-body) .topbar .page-identity h1,
body:not(.pp-public-body) .topbar .user-copy b{color:var(--ink-950)!important}
body:not(.pp-public-body) .topbar .breadcrumb,
body:not(.pp-public-body) .topbar .user-copy small{color:var(--ink-500)!important}
body:not(.pp-public-body) .icon-button{background:var(--surface)!important;color:var(--ink-900)!important;border-color:var(--line)!important}

/* ERP dark brand surfaces: never inherit heading/body tokens from light cards. */
body:not(.pp-public-body) .sidebar,
body:not(.pp-public-body) .sidebar .brand,
body:not(.pp-public-body) .sidebar .workspace-chip,
body:not(.pp-public-body) .hero,
body:not(.pp-public-body) .v400-int-hero{
  color:var(--contrast-on-dark)!important;
}
body:not(.pp-public-body) .sidebar .brand strong,
body:not(.pp-public-body) .sidebar .brand-copy strong,
body:not(.pp-public-body) .sidebar .workspace-chip b,
body:not(.pp-public-body) .hero h1,
body:not(.pp-public-body) .hero h2,
body:not(.pp-public-body) .hero h3,
body:not(.pp-public-body) .hero b,
body:not(.pp-public-body) .hero strong,
body:not(.pp-public-body) .v400-int-hero h1,
body:not(.pp-public-body) .v400-int-hero h2,
body:not(.pp-public-body) .v400-int-hero h3,
body:not(.pp-public-body) .v400-int-hero b,
body:not(.pp-public-body) .v400-int-hero strong{
  color:var(--contrast-on-dark)!important;
}
body:not(.pp-public-body) .hero p,
body:not(.pp-public-body) .hero small,
body:not(.pp-public-body) .v400-int-hero p,
body:not(.pp-public-body) .sidebar .workspace-chip small,
body:not(.pp-public-body) .sidebar .security small,
body:not(.pp-public-body) .sidebar-nav-label,
body:not(.pp-public-body) .sidebar-nav-label small{
  color:var(--contrast-on-dark-muted)!important;
}
body:not(.pp-public-body) .sidebar .nav-item,
body:not(.pp-public-body) .sidebar .nav-department-toggle,
body:not(.pp-public-body) .sidebar .nav-main-toggle,
body:not(.pp-public-body) .sidebar .nav-subitem,
body:not(.pp-public-body) .sidebar .signout{
  color:#d7e8de!important;
}
body:not(.pp-public-body) .sidebar .nav-item:hover,
body:not(.pp-public-body) .sidebar .nav-item.active,
body:not(.pp-public-body) .sidebar .nav-department-toggle:hover,
body:not(.pp-public-body) .sidebar .nav-main-toggle:hover,
body:not(.pp-public-body) .sidebar .nav-subitem:hover{
  color:#fff!important;
}
body:not(.pp-public-body) .sidebar .nav-subitem.active{
  background:#f0f6e9!important;
  color:#163b24!important;
}
body:not(.pp-public-body) .sidebar .nav-subitem.active *{color:#365e46!important}
body:not(.pp-public-body) .sidebar .nav-quick-dashboard{color:#eaf6ed!important}
body:not(.pp-public-body) .sidebar .nav-quick-dashboard:hover,
body:not(.pp-public-body) .sidebar .nav-quick-dashboard.active{color:#183922!important}

/* Filled controls. */
body:not(.pp-public-body) .btn.primary,
body:not(.pp-public-body) .quick-create,
body:not(.pp-public-body) .v400-tabs a.active,
body:not(.pp-public-body) .v400-tabs a:hover,
body:not(.pp-public-body) .fin-doc-totals .final,
body:not(.pp-public-body) .fin-draft-totals .total{
  color:#fff!important;
}
body:not(.pp-public-body) .btn.primary *,
body:not(.pp-public-body) .quick-create *{color:inherit!important}

/* White/light embedded cards inside otherwise dark or coloured modules. */
body:not(.pp-public-body) .v400-pvc,
body:not(.pp-public-body) .v400-pvc.back,
body:not(.pp-public-body) .fin-draft-paper,
body:not(.pp-public-body) .finance-doc{
  color:#19382a!important;
}
body:not(.pp-public-body) .v400-pvc h1,
body:not(.pp-public-body) .v400-pvc h2,
body:not(.pp-public-body) .v400-pvc h3,
body:not(.pp-public-body) .fin-draft-paper h1,
body:not(.pp-public-body) .fin-draft-paper h2,
body:not(.pp-public-body) .fin-draft-paper h3{color:#173a28!important}

/* ======================================================================
   PUBLIC PORTAL — public pages intentionally remain light-mode with dark
   PESS brand bands. The rules below load after Branding Studio CSS.
   ====================================================================== */
.pp-public-body{background:#f4f8f5!important;color:var(--contrast-on-light)!important}
.pp-public-body .pp-header{background:#fff!important;color:#17221c!important}
.pp-public-body .pp-header .pp-brand,
.pp-public-body .pp-header .pp-brand strong,
.pp-public-body .pp-nav a{color:#294337!important}
.pp-public-body .pp-header .pp-brand small{color:#66796e!important}
.pp-public-body .pp-nav a:hover,
.pp-public-body .pp-nav a[aria-current="page"]{color:var(--pess-primary,#0a4929)!important}
.pp-public-body .pp-staff-link{background:var(--pess-primary,#0a4929)!important;color:#fff!important}
.pp-public-body .pp-staff-link *{color:#fff!important}

/* Public dark surfaces — light copy, with deliberate lime accents retained. */
.pp-public-body .pp-hero,
.pp-public-body .pp-enquiry-side,
.pp-public-body .pp-footer,
.pp-public-body .v402-hero,
.pp-public-body .v402-overview-band,
.pp-public-body .v402-apply-aside,
.pp-public-body .v402-status-check{
  color:var(--contrast-on-dark)!important;
}
.pp-public-body .pp-hero h1,
.pp-public-body .pp-hero h2,
.pp-public-body .pp-hero h3,
.pp-public-body .pp-hero h4,
.pp-public-body .pp-hero b,
.pp-public-body .pp-hero strong,
.pp-public-body .pp-enquiry-side h1,
.pp-public-body .pp-enquiry-side h2,
.pp-public-body .pp-enquiry-side h3,
.pp-public-body .pp-enquiry-side b,
.pp-public-body .pp-enquiry-side strong,
.pp-public-body .v402-hero h1,
.pp-public-body .v402-hero h2,
.pp-public-body .v402-hero h3,
.pp-public-body .v402-hero b,
.pp-public-body .v402-hero strong,
.pp-public-body .v402-overview-band h1,
.pp-public-body .v402-overview-band h2,
.pp-public-body .v402-overview-band h3,
.pp-public-body .v402-overview-band b,
.pp-public-body .v402-overview-band strong,
.pp-public-body .v402-apply-aside h1,
.pp-public-body .v402-apply-aside h2,
.pp-public-body .v402-apply-aside h3,
.pp-public-body .v402-apply-aside b,
.pp-public-body .v402-apply-aside strong,
.pp-public-body .v402-status-check h1,
.pp-public-body .v402-status-check h2,
.pp-public-body .v402-status-check h3,
.pp-public-body .v402-status-check b,
.pp-public-body .v402-status-check strong,
.pp-public-body .pp-footer h1,
.pp-public-body .pp-footer h2,
.pp-public-body .pp-footer h3,
.pp-public-body .pp-footer h4,
.pp-public-body .pp-footer b,
.pp-public-body .pp-footer strong{
  color:var(--contrast-on-dark)!important;
}
.pp-public-body .pp-hero p,
.pp-public-body .pp-hero small,
.pp-public-body .pp-hero .pp-hero-foot,
.pp-public-body .pp-enquiry-side p,
.pp-public-body .pp-enquiry-side li,
.pp-public-body .v402-hero p,
.pp-public-body .v402-hero small,
.pp-public-body .v402-overview-band p,
.pp-public-body .v402-overview-band small,
.pp-public-body .v402-apply-aside p,
.pp-public-body .v402-status-check p,
.pp-public-body .pp-footer p,
.pp-public-body .pp-footer li,
.pp-public-body .pp-footer small{
  color:var(--contrast-on-dark-muted)!important;
}
.pp-public-body .pp-hero .pp-eyebrow,
.pp-public-body .v402-kicker,
.pp-public-body .v402-overview-band .pp-section-label,
.pp-public-body .v402-apply-aside .pp-section-label,
.pp-public-body .v402-status-check .pp-section-label,
.pp-public-body .pp-footer .pp-footer-column h3{
  color:#dceca1!important;
}
.pp-public-body .pp-footer a,
.pp-public-body .pp-footer span{color:#e5f1e9!important}

/* Public light surfaces — dark copy. */
.pp-public-body .pp-hero-aside,
.pp-public-body .pp-entry-card,
.pp-public-body .pp-programme-grid a,
.pp-public-body .pp-quick-enquiry,
.pp-public-body .pp-enquiry-card,
.pp-public-body .pp-enquiry-form,
.pp-public-body .public-register-card,
.pp-public-body .public-success,
.pp-public-body .v400-verify-card,
.pp-public-body .v402-status-card,
.pp-public-body .v402-success,
.pp-public-body .v402-empty,
.pp-public-body .v402-opportunity-card,
.pp-public-body .v402-opportunity-side,
.pp-public-body .v402-placement-row article,
.pp-public-body .v402-timeline article,
.pp-public-body .v402-programme-bottom article,
.pp-public-body .v402-form-card,
.pp-public-body .v402-final-cta{
  color:var(--contrast-on-light)!important;
}
.pp-public-body .pp-hero-aside h1,
.pp-public-body .pp-hero-aside h2,
.pp-public-body .pp-hero-aside h3,
.pp-public-body .pp-entry-card h1,
.pp-public-body .pp-entry-card h2,
.pp-public-body .pp-entry-card h3,
.pp-public-body .pp-quick-enquiry h1,
.pp-public-body .pp-quick-enquiry h2,
.pp-public-body .pp-quick-enquiry h3,
.pp-public-body .pp-enquiry-card h1,
.pp-public-body .pp-enquiry-card h2,
.pp-public-body .pp-enquiry-form h1,
.pp-public-body .pp-enquiry-form h2,
.pp-public-body .pp-enquiry-form h3,
.pp-public-body .public-register-card h1,
.pp-public-body .public-register-card h2,
.pp-public-body .public-register-card h3,
.pp-public-body .v400-verify-card h1,
.pp-public-body .v400-verify-card h2,
.pp-public-body .v402-status-card h1,
.pp-public-body .v402-status-card h2,
.pp-public-body .v402-opportunity-card h1,
.pp-public-body .v402-opportunity-card h2,
.pp-public-body .v402-opportunity-card h3,
.pp-public-body .v402-placement-row h3,
.pp-public-body .v402-timeline h3,
.pp-public-body .v402-programme-bottom h3,
.pp-public-body .v402-form-card h1,
.pp-public-body .v402-form-card h2,
.pp-public-body .v402-form-card h3,
.pp-public-body .v402-final-cta h2{
  color:var(--contrast-on-light-strong)!important;
}
.pp-public-body .pp-entry-card p,
.pp-public-body .pp-quick-enquiry p,
.pp-public-body .pp-enquiry-card p,
.pp-public-body .pp-enquiry-form p,
.pp-public-body .public-register-card p,
.pp-public-body .v400-verify-card p,
.pp-public-body .v402-status-card p,
.pp-public-body .v402-opportunity-card p,
.pp-public-body .v402-placement-row p,
.pp-public-body .v402-timeline p,
.pp-public-body .v402-programme-bottom p,
.pp-public-body .v402-programme-bottom li,
.pp-public-body .v402-form-card p,
.pp-public-body .v402-final-cta span{
  color:var(--contrast-on-light-muted)!important;
}

/* Internship translucent cards are on a dark band, therefore remain light. */
.pp-public-body .v402-overview-band .v402-overview-card,
.pp-public-body .v402-overview-band .v402-overview-card b{color:#fff!important}
.pp-public-body .v402-overview-band .v402-overview-card small{color:#c9dad0!important}
.pp-public-body .v402-overview-band .v402-overview-card>span{color:#ddeb9e!important}
/* But placement cards inside that band are deliberately white. */
.pp-public-body .v402-overview-band .v402-placement-row article,
.pp-public-body .v402-overview-band .v402-placement-row article h3,
.pp-public-body .v402-overview-band .v402-placement-row article b{color:#17221c!important}
.pp-public-body .v402-overview-band .v402-placement-row article p{color:#66736c!important}
.pp-public-body .v402-overview-band .v402-placement-row article>span{color:#63816d!important}

/* Inputs on light public forms. */
.pp-public-body .pp-enquiry-form input,
.pp-public-body .pp-enquiry-form select,
.pp-public-body .pp-enquiry-form textarea,
.pp-public-body .public-register-card input:not([type="checkbox"]):not([type="radio"]),
.pp-public-body .public-register-card select,
.pp-public-body .public-register-card textarea,
.pp-public-body .v400-verify-card input,
.pp-public-body .v402-form-card input:not([type="checkbox"]):not([type="radio"]),
.pp-public-body .v402-form-card select,
.pp-public-body .v402-form-card textarea{
  background:#fff!important;
  color:#17221c!important;
  border-color:#d9e4dc!important;
}
.pp-public-body .pp-enquiry-form input::placeholder,
.pp-public-body .pp-enquiry-form textarea::placeholder,
.pp-public-body .public-register-card input::placeholder,
.pp-public-body .public-register-card textarea::placeholder,
.pp-public-body .v400-verify-card input::placeholder,
.pp-public-body .v402-form-card input::placeholder,
.pp-public-body .v402-form-card textarea::placeholder{color:#829087!important;opacity:1}
.pp-public-body .pp-enquiry-form label,
.pp-public-body .public-register-card label,
.pp-public-body .v400-verify-card label,
.pp-public-body .v402-form-card label{color:#354d40!important}

/* Inputs intentionally placed on a dark public status panel. */
.pp-public-body .v402-status-check input{
  background:rgba(255,255,255,.11)!important;
  color:#fff!important;
  border-color:rgba(255,255,255,.28)!important;
}
.pp-public-body .v402-status-check input::placeholder{color:#c0d2c6!important;opacity:1}
.pp-public-body .v402-status-check label{color:#e2eee6!important}
.pp-public-body .v402-status-check .v402-status-result,
.pp-public-body .v402-status-check .v402-status-result h1,
.pp-public-body .v402-status-check .v402-status-result h2,
.pp-public-body .v402-status-check .v402-status-result h3,
.pp-public-body .v402-status-check .v402-status-result p{
  color:#17221c!important;
}
.pp-public-body .v402-status-check .v402-status-result strong{color:var(--pess-primary,#0a4929)!important}

/* Registration split hero: left dark panel / right white information panel. */
.pp-public-body .public-registration-hero>div:first-child,
.pp-public-body .public-registration-hero>section:first-child{
  color:#fff!important;
}
.pp-public-body .public-registration-hero>div:first-child h1,
.pp-public-body .public-registration-hero>div:first-child h2,
.pp-public-body .public-registration-hero>div:first-child h3,
.pp-public-body .public-registration-hero>div:first-child p,
.pp-public-body .public-registration-hero>div:first-child li{
  color:#fff!important;
}
.pp-public-body .public-registration-hero aside,
.pp-public-body .public-registration-hero aside h1,
.pp-public-body .public-registration-hero aside h2,
.pp-public-body .public-registration-hero aside h3,
.pp-public-body .public-registration-hero aside li{
  color:#17221c!important;
}
.pp-public-body .public-registration-hero aside p,
.pp-public-body .public-registration-hero aside small{color:#66736c!important}

/* Login account pages: dark promo side + white auth card. */
.pp-auth-screen .pp-auth-side,
.pp-auth-screen .pp-auth-side h1,
.pp-auth-screen .pp-auth-side h2,
.pp-auth-screen .pp-auth-side h3,
.pp-auth-screen .pp-auth-side b,
.pp-auth-screen .pp-auth-side strong{color:#fff!important}
.pp-auth-screen .pp-auth-side p,
.pp-auth-screen .pp-auth-side small{color:#d8e8dd!important}
.pp-auth-screen .pp-auth-card,
.pp-auth-screen .pp-auth-card h1,
.pp-auth-screen .pp-auth-card h2,
.pp-auth-screen .pp-auth-card h3{color:#17221c!important}
.pp-auth-screen .pp-auth-card>p{color:#66736c!important}
.pp-auth-screen .pp-auth-form label{color:#344d3e!important}
.pp-auth-screen .pp-auth-form input{background:#fff!important;color:#17221c!important}

/* Buttons: retain intentional contrast regardless of inherited text rules. */
.pp-public-body .pp-button-primary,
.pp-public-body .v402-submit{color:#fff!important}
.pp-public-body .pp-button-primary *,
.pp-public-body .v402-submit *{color:#fff!important}
.pp-public-body .pp-button-lime,
.pp-public-body .v402-btn-accent{color:#14361d!important}
.pp-public-body .pp-button-lime *,
.pp-public-body .v402-btn-accent *{color:#14361d!important}
.pp-public-body .pp-button-outline,
.pp-public-body .v402-btn-ghost{color:#fff!important}

/* Focus visibility without changing component theme. */
.pp-public-body a:focus-visible,
.pp-public-body button:focus-visible,
.pp-public-body input:focus-visible,
.pp-public-body select:focus-visible,
.pp-public-body textarea:focus-visible,
body:not(.pp-public-body) a:focus-visible,
body:not(.pp-public-body) button:focus-visible,
body:not(.pp-public-body) input:focus-visible,
body:not(.pp-public-body) select:focus-visible,
body:not(.pp-public-body) textarea:focus-visible{
  outline:3px solid var(--pess-accent,#afc936)!important;
  outline-offset:2px!important;
}

/* Print must stay white-paper / dark-copy except deliberate branded headers. */
@media print{
  body{background:#fff!important;color:#111!important}
  body:not(.pp-public-body) .content-area,
  body:not(.pp-public-body) .panel,
  body:not(.pp-public-body) .table-wrap{color:#111!important}
}

/* Additional ERP feature heroes from department, command, marketing and template workspaces. */
body:not(.pp-public-body) .login-brand,
body:not(.pp-public-body) .p210-dept-hero,
body:not(.pp-public-body) .p220-command-hero,
body:not(.pp-public-body) .v23-hero,
body:not(.pp-public-body) .v27-hero{
  color:#fff!important;
}
body:not(.pp-public-body) .login-brand h1,
body:not(.pp-public-body) .login-brand h2,
body:not(.pp-public-body) .login-brand h3,
body:not(.pp-public-body) .p210-dept-hero h1,
body:not(.pp-public-body) .p210-dept-hero h2,
body:not(.pp-public-body) .p210-dept-hero h3,
body:not(.pp-public-body) .p210-dept-hero b,
body:not(.pp-public-body) .p210-dept-hero strong,
body:not(.pp-public-body) .p220-command-hero h1,
body:not(.pp-public-body) .p220-command-hero h2,
body:not(.pp-public-body) .p220-command-hero h3,
body:not(.pp-public-body) .p220-command-hero b,
body:not(.pp-public-body) .p220-command-hero strong,
body:not(.pp-public-body) .v23-hero h1,
body:not(.pp-public-body) .v23-hero h2,
body:not(.pp-public-body) .v23-hero h3,
body:not(.pp-public-body) .v23-hero b,
body:not(.pp-public-body) .v23-hero strong,
body:not(.pp-public-body) .v27-hero h1,
body:not(.pp-public-body) .v27-hero h2,
body:not(.pp-public-body) .v27-hero h3,
body:not(.pp-public-body) .v27-hero b,
body:not(.pp-public-body) .v27-hero strong{color:#fff!important}
body:not(.pp-public-body) .login-brand p,
body:not(.pp-public-body) .p210-dept-hero p,
body:not(.pp-public-body) .p210-dept-hero small,
body:not(.pp-public-body) .p220-command-hero p,
body:not(.pp-public-body) .p220-command-hero small,
body:not(.pp-public-body) .v23-hero p,
body:not(.pp-public-body) .v27-hero p,
body:not(.pp-public-body) .v27-hero small{color:#d9e9df!important}
/* Accent buttons on dark heroes are intentionally dark text on lime/white fills. */
body:not(.pp-public-body) .v23-hero .btn.primary,
body:not(.pp-public-body) .v27-hero .v27-bright{color:#173a24!important}
body:not(.pp-public-body) .v23-hero .btn.soft,
body:not(.pp-public-body) .v27-hero .v27-light{color:#10492d!important}
