
/* =========================================================
   FONT COLOUR AUDIT v102
   Portfolio-wide semantic text-color normalization.
   Loaded last on every HTML page.
   ========================================================= */

/* ---------- Redirect / utility fallbacks ---------- */
html[data-theme="light"] body.redirect-page{
  background:#f5f8f8!important;
  color:#102a2e!important;
}
html[data-theme="dark"] body.redirect-page{
  background:#071417!important;
  color:#e8f3f2!important;
}
body.redirect-page{
  margin:0;
  min-height:100vh;
  display:grid;
  place-items:center;
  padding:24px;
  font-family:"Segoe UI",Arial,Helvetica,sans-serif;
}
body.redirect-page p{
  max-width:620px;
  margin:0;
  font-size:.95rem;
  line-height:1.65;
}
html[data-theme="light"] body.redirect-page a{color:#0f766e!important}
html[data-theme="dark"] body.redirect-page a{color:#4fd1c5!important}

/* ---------- Base semantic hierarchy ---------- */
body{
  color:var(--text);
}

.page-hero h1,
.page-hero h2,
.detail-content h2,
.section-head h2,
.simple-head h2,
.portfolio-route-panel h1,
.media-note-title,
.blog-card h3 a,
.gallery-card h3{
  color:var(--primary2)!important;
}

.page-hero .lead,
.page-hero .breadcrumbs,
.detail-content p,
.detail-list,
.blog-excerpt,
.blog-submeta,
.media-note p,
.portfolio-route-panel>p,
.muted{
  color:var(--muted)!important;
}

.page-hero .breadcrumbs a,
.back-link,
.read-more,
.blog-meta,
.detail-content a:not(.button),
.media-note a{
  color:var(--primary)!important;
}

/* ---------- Dynamic detail pages ---------- */
.detail-page .portfolio-meta-line{
  color:var(--accent)!important;
}
.detail-page .detail-content strong{
  color:var(--text)!important;
}
.detail-page .detail-note{
  color:var(--muted)!important;
}
.detail-page .detail-content .tags span{
  color:var(--text)!important;
}

/* ---------- Blog / media / graphic-design ---------- */
.blog-page .blog-meta,
.gallery-card .eyebrow{
  color:var(--accent)!important;
}
.blog-page .blog-card h3 a,
.gallery-card h3{
  color:var(--primary2)!important;
}
.blog-page .blog-excerpt,
.blog-page .blog-submeta,
.gallery-card p,
.gallery-card figcaption{
  color:var(--muted)!important;
}
.blog-page .read-more,
.gallery-card a:not(.button){
  color:var(--primary)!important;
}

/* ---------- StoryMap family ---------- */
body.story-page .story-intro h1,
body.story-page .story-chapter h3,
body.story-page .story-map-caption strong,
body.story-page .story-record-cell strong{
  color:var(--primary2)!important;
}

body.story-page .story-intro>p,
body.story-page .story-summary,
body.story-page .story-chapter-body>p,
body.story-page .story-location,
body.story-page .story-record-cell span,
body.story-page .story-map-head p:not(.story-map-title),
body.story-page .story-map-caption p{
  color:var(--muted)!important;
}

body.story-page .story-map-title,
body.story-page .story-chapter-kicker{
  color:var(--accent)!important;
}

body.story-page .story-more,
body.story-page .story-chapter a:not(.button){
  color:var(--primary)!important;
}

body.story-page .story-chapter .tags span{
  color:var(--text)!important;
}

/* Research marker text is a special contrast case. */
html[data-theme="light"] body[data-story-page="research"] .story-leaflet-icon span{
  color:#fff!important;
}
html[data-theme="dark"] body[data-story-page="research"] .story-leaflet-icon span{
  color:#f4fbfb!important;
}
body[data-story-page="research"] .story-leaflet-icon.active span{
  color:#102635!important;
}

/* ---------- Home: switch the custom palette itself ---------- */
html[data-theme="light"]{
  --ha-navy:#102b42;
  --ha-ink:#1a3348;
  --ha-cream:#f3efe6;
  --ha-paper:#fffdf8;
  --ha-gold:#9a6515;
  --ha-line:#d8cfc1;
  --ha-muted:#60707c;
  --ha-teal:#3f7f82;
}
html[data-theme="dark"]{
  --ha-navy:#d9eeec;
  --ha-ink:#e8f3f2;
  --ha-cream:#071417;
  --ha-paper:#0d2024;
  --ha-gold:#e4b45a;
  --ha-line:#294347;
  --ha-muted:#a0b5b4;
  --ha-teal:#69cdc4;
}

.home-atlas-page .ha-name-row h1,
.home-atlas-page .ha-identity h2,
.home-atlas-page .ha-section-line h2,
.home-atlas-page .ha-publication-copy h2,
.home-atlas-page .ha-finale-title h2,
.home-atlas-page .ha-map-title strong,
.home-atlas-page .ha-research-logic strong{
  color:var(--ha-navy)!important;
}

.home-atlas-page .ha-role,
.home-atlas-page .ha-intro,
.home-atlas-page .ha-section-line p,
.home-atlas-page .ha-finale-title p,
.home-atlas-page .ha-map-title small,
.home-atlas-page .ha-o6-header small,
.home-atlas-page .ha-research-logic small,
.home-atlas-page .ha-professional-roles article>strong{
  color:var(--ha-muted)!important;
}

.home-atlas-page .ha-eyebrow,
.home-atlas-page .ha-section-line>span,
.home-atlas-page .ha-publication-copy>span,
.home-atlas-page .ha-finale-title>span,
.home-atlas-page .ha-map-title span,
.home-atlas-page .ha-research-logic span{
  color:var(--ha-gold)!important;
}

.home-atlas-page .ha-section-line a,
.home-atlas-page .ha-actions a:not(.ha-primary),
.home-atlas-page .ha-finale-track a{
  color:var(--ha-navy)!important;
}

/* Keep intentionally dark/photographic home bands readable. */
.home-atlas-page .ha-signal-strip,
.home-atlas-page .ha-publication-band,
.home-atlas-page .ha-main-caption,
.home-atlas-page .ha-cap,
.home-atlas-page .ha-o6-panel{
  color:#fff!important;
}
.home-atlas-page .ha-signal-strip strong,
.home-atlas-page .ha-publication-band h2,
.home-atlas-page .ha-publication-band a,
.home-atlas-page .ha-main-caption strong,
.home-atlas-page .ha-cap strong,
.home-atlas-page .ha-o6-panel strong{
  color:#fff!important;
}

/* ---------- Academic research detail pages ---------- */
.academic-research-page{
  color:var(--text)!important;
}
.academic-research-page .academic-paper-heading h1,
.academic-research-page .academic-section h2,
.academic-research-page .academic-section h3,
.academic-research-page .research-detail-disclosure summary,
.academic-research-page .research-detail-disclosure-content h2{
  color:var(--primary2)!important;
}
.academic-research-page .academic-author-line,
.academic-research-page .academic-table td:first-child,
.academic-research-page .research-detail-synopsis dd,
.academic-research-page .research-detail-keylines dd{
  color:var(--text)!important;
}
.academic-research-page .academic-breadcrumbs,
.academic-research-page .academic-affiliation,
.academic-research-page .academic-cover-figure figcaption,
.academic-research-page .academic-figure figcaption,
.academic-research-page .academic-section>p,
.academic-research-page .academic-section li,
.academic-research-page .academic-abstract>p:last-child,
.academic-research-page .academic-objectives p,
.academic-research-page .academic-table td,
.academic-research-page .academic-authorship-box dd,
.academic-research-page .academic-authorship-box>p,
.academic-research-page .academic-sidebar-card p,
.academic-research-page .academic-sidebar-dl dd,
.academic-research-page .academic-page-nav a,
.academic-research-page .research-detail-summary,
.academic-research-page .research-detail-visual-caption,
.academic-research-page .research-detail-reading-note{
  color:var(--muted)!important;
}
.academic-research-page .academic-breadcrumbs a,
.academic-research-page .academic-page-nav a:hover,
.academic-research-page .research-detail-back-link{
  color:var(--primary)!important;
}
.academic-research-page .academic-record-label,
.academic-research-page .academic-section-label,
.academic-research-page .academic-objectives span,
.academic-research-page .academic-authorship-box dt,
.academic-research-page .academic-sidebar-dl dt,
.academic-research-page .research-detail-synopsis dt,
.academic-research-page .research-detail-keylines dt{
  color:var(--accent)!important;
}

/* ---------- GIS Automation ---------- */
.automation-compact-page{
  color:var(--text)!important;
}
.automation-compact-page .automation-compact-hero h1,
.automation-compact-page .automation-academic-title h1,
.automation-compact-page .automation-project-tab strong,
.automation-compact-page .automation-project-detail h2,
.automation-compact-page .automation-project-reviewer strong,
.automation-compact-page .automation-compact-source-note strong{
  color:var(--primary2)!important;
}
.automation-compact-page .automation-compact-intro>p,
.automation-compact-page .automation-academic-summary>p,
.automation-compact-page .automation-compact-metrics span,
.automation-compact-page .automation-compact-section-head>p,
.automation-compact-page .automation-project-tab small,
.automation-compact-page .automation-project-format,
.automation-compact-page .automation-project-summary,
.automation-compact-page .automation-project-facts dd,
.automation-compact-page .automation-project-tags span,
.automation-compact-page .automation-project-evidence p,
.automation-compact-page .automation-compact-source-note,
.automation-compact-page .automation-project-github-note,
.automation-compact-page .automation-project-notes p,
.automation-compact-page .automation-project-visual figcaption{
  color:var(--muted)!important;
}
.automation-compact-page .automation-compact-back,
.automation-compact-page .automation-compact-kicker,
.automation-compact-page .automation-compact-section-head>div>span,
.automation-compact-page .automation-project-group h3,
.automation-compact-page .automation-project-tab>span,
.automation-compact-page .automation-project-detail-heading>div>span,
.automation-compact-page .automation-project-facts dt,
.automation-compact-page .automation-project-reviewer span,
.automation-compact-page .automation-project-evidence>span,
.automation-compact-page .automation-project-footer-label,
.automation-compact-page .automation-project-notes span{
  color:var(--accent)!important;
}

/* ---------- UAV / RTK ---------- */
.uav-field-page{
  color:var(--text)!important;
}
.uav-field-page .academic-page-intro h1,
.uav-field-page .section-heading-compact h2,
.uav-field-page .compact-section-head-academic h2,
.uav-field-page .platform-reference-card strong,
.uav-field-page .evidence-record-copy h3,
.uav-field-page .workflow-card figcaption strong{
  color:var(--primary2)!important;
}
.uav-field-page .academic-page-intro p,
.uav-field-page .academic-page-intro .breadcrumbs,
.uav-field-page .platform-reference-card small,
.uav-field-page .evidence-record-copy p,
.uav-field-page .compact-section-head-academic p,
.uav-field-page .workflow-card figcaption span,
.uav-field-page .flightplan-card figcaption span,
.uav-field-page .flightplan-caption,
.uav-field-page .map-caption{
  color:var(--muted)!important;
}
.uav-field-page .academic-page-intro .breadcrumbs a,
.uav-field-page .field-map-head button{
  color:var(--primary)!important;
}
.uav-field-page .academic-label,
.uav-field-page .field-map-head span,
.uav-field-page .method-line b{
  color:var(--accent)!important;
}
.uav-field-page .method-line span{
  color:var(--text)!important;
}

/* ---------- Urban Planning ---------- */
.urban-planning-page{
  color:var(--text)!important;
}
.urban-planning-page .up-v53-intro h1,
.urban-planning-page .up-v53-story-head h2,
.urban-planning-page .up-v53-mini-grid strong,
.urban-planning-page .up-v53-map-status strong,
.urban-planning-page .up-breadcrumbs a{
  color:var(--primary2)!important;
}
.urban-planning-page .up-breadcrumbs,
.urban-planning-page .up-v53-intro p,
.urban-planning-page .up-v53-story-head p,
.urban-planning-page .up-v53-chipwrap span,
.urban-planning-page .up-v53-keywords span,
.urban-planning-page .up-v53-inline-note,
.urban-planning-page .up-v53-copy ul,
.urban-planning-page .up-v53-shorttext,
.urban-planning-page .up-v53-media-row figcaption,
.urban-planning-page .up-v53-map-status small{
  color:var(--muted)!important;
}
.urban-planning-page .up-v53-mini-grid span{
  color:var(--accent)!important;
}
.urban-planning-page .up-v53-youtube-row a{
  color:var(--primary)!important;
}

/* ---------- Education ---------- */
.simple-education-page{
  color:var(--text)!important;
}
.simple-education-page .education-simple-intro h1,
.simple-education-page .education-degree-card h2,
.simple-education-page .education-degree-topline strong{
  color:var(--primary2)!important;
}
.simple-education-page .education-breadcrumbs,
.simple-education-page .education-simple-intro>p,
.simple-education-page .education-institution,
.simple-education-page .education-degree-body p{
  color:var(--muted)!important;
}
.simple-education-page .education-breadcrumbs a,
.simple-education-page .education-simple-footer a+a{
  color:var(--primary)!important;
}
.simple-education-page .education-kicker,
.simple-education-page .education-degree-topline span,
.simple-education-page .education-degree-body span{
  color:var(--accent)!important;
}

/* ---------- Teaching ---------- */
.teaching-capacity-page{
  color:var(--text)!important;
}
.teaching-capacity-page h1,
.teaching-capacity-page h2,
.teaching-capacity-page h3,
.teaching-capacity-page .tc-summary-card strong{
  color:var(--primary2)!important;
}
.teaching-capacity-page .tc-lead,
.teaching-capacity-page .tc-profile-note,
.teaching-capacity-page .tc-provider,
.teaching-capacity-page .tc-record-copy p,
.teaching-capacity-page .tc-evidence-line,
.teaching-capacity-page figcaption,
.teaching-capacity-page .tc-conclusion p,
.teaching-capacity-page .tc-summary-card p{
  color:var(--muted)!important;
}
.teaching-capacity-page .tc-teaching-points li{
  color:var(--text)!important;
}

/* ---------- Credentials ---------- */
.credential-page{
  color:var(--text)!important;
}
.credential-page .credential-hero h1,
.credential-page .credential-group-head h3,
.credential-page .credential-copy h3,
.credential-page .credential-meta dd{
  color:var(--primary2)!important;
}
.credential-page .credential-hero p,
.credential-page .credential-group-head p,
.credential-page .credential-year,
.credential-page .credential-meta dt,
.credential-page .credential-summary{
  color:var(--muted)!important;
}
.credential-page .credential-issuer,
.credential-page .credential-action{
  color:var(--primary)!important;
}

/* ---------- Contact / CV ---------- */
.compact-contact-page{
  color:var(--text)!important;
}
.compact-contact-page .compact-contact-heading h1,
.compact-contact-page .professor-fit-strip strong,
.compact-contact-page .professor-contact-row strong,
.compact-contact-page .professor-resource-row strong{
  color:var(--primary2)!important;
}
.compact-contact-page .compact-contact-heading>p,
.compact-contact-page .professor-contact-row span,
.compact-contact-page .professor-resource-row span,
.compact-contact-page .compact-address-row{
  color:var(--muted)!important;
}
.compact-contact-page a:not(.button){
  color:var(--primary)!important;
}

/* ---------- Route / 404 ---------- */
.portfolio-route-page{
  color:var(--text)!important;
}
.portfolio-route-page .portfolio-route-panel h1{
  color:var(--primary2)!important;
}
.portfolio-route-page .portfolio-route-panel>p{
  color:var(--muted)!important;
}

/* ---------- Footer ---------- */
.site-footer .footer-name{
  color:var(--primary2)!important;
}
.site-footer .footer-role,
.site-footer .footer-academic-meta{
  color:var(--muted)!important;
}

/* ---------- Back to top ---------- */
.back-to-top{
  color:var(--primary2)!important;
}
.back-to-top span{
  color:var(--accent)!important;
}
.back-to-top small{
  color:var(--primary2)!important;
}

/* ---------- Leaflet UI text ---------- */
.leaflet-tooltip,
.leaflet-popup-content,
.leaflet-control-zoom a{
  color:var(--text)!important;
}
.leaflet-control-attribution{
  color:var(--muted)!important;
}
.leaflet-control-attribution a{
  color:var(--primary)!important;
}

/* ---------- Preserve intentionally white text on dark photographic overlays ---------- */
.story-cover,
.story-home-cover,
.research-detail-hero,
.research-detail-footer-cta,
.academic-record-band,
.credential-preview span,
.academic-media figcaption,
.home-atlas-page .ha-map-card,
.home-atlas-page .ha-map-type,
.home-atlas-page .ha-o6-play{
  color:#fff!important;
}
