/*
Theme Name: ICPA 2026
Theme URI: https://www.icpainc.org/
Author: Heather Tschirhart
Description: The 2026 ICPA design as a WordPress theme. Carries the design system the overhaul was built on - the colour, type and spacing tokens, the shared page shell, the primary navigation and mobile drawer, and the eight-column footer sitemap - so that ported pages stop having to re-establish all of it inline. Classic theme, no block templates, no parent.
Version: 1.0.0
Requires at least: 6.0
Tested up to: 6.8
Requires PHP: 7.4
License: Proprietary - all rights reserved, International Compliance Professionals Association
Text Domain: icpa-2026
Tags: one-column, full-width-template, custom-menu, accessibility-ready
*/

/*
   This file is the WordPress layer only.

   The 2026 design itself is NOT here. It lives in css/tokens/*.css and
   css/site.css, copied from the static site untouched by
   wordpress/build-theme.js and enqueued ahead of this file, so that the
   two stay one design rather than two that drift. Everything below is
   the part the static site never needed: admin bar clearance, block
   editor alignment classes, and a plain shell for the pages WordPress
   renders that were never designed by us - posts, archives, search
   results, 404, and the plugin screens WP-Members and Gravity Forms put
   inside a page.
   ------------------------------------------------------------------ */

/* ---------- admin bar ----------
   The nav sits position:absolute at the top of .shell, so the admin bar
   pushing <html> down carries it along and needs no help. The drawer and
   the section rail are fixed, and do. */
.admin-bar .mobile-menu { top: 32px; }
.admin-bar .rail { margin-top: 32px; }
@media screen and (max-width: 782px) {
  .admin-bar .mobile-menu { top: 46px; }
  .admin-bar .rail { margin-top: 46px; }
}

/* ---------- hero clearance ----------
   Every ported block ends with a "WordPress placement adjustments" section
   that cuts its hero's top padding from the standalone 148px down to 56px.
   That adjustment is right under the client's 3clicks theme, where the
   header is a real element sitting above the content and the reservation
   would render as a large empty band. It is wrong here: this theme puts
   the nav back where the design has it, position:absolute across the top
   of the page, so 56px lands the nav on the hero's own eyebrow.

   Blocks built from 2026-08-23 scope their adjustment to
   body:not(.icpa-2026) and need nothing from this rule. It exists for the
   ones already deployed that do not, so that a page renders correctly here
   whether or not it has been rebuilt since.

   !important is unavoidable, not laziness. The block's rule is
   `#icpa-x.icpa-x .phero` - one id and two classes - inside a <style> that
   sits further down the document than any stylesheet this theme enqueues,
   so no selector written here can win on either specificity or source
   order. The values below are the standalone site's own, lifted from
   interior.css, usmca.css, kidz-kamp.css and site.css; keep them in step
   with those files rather than tuning them here. */
body.icpa-2026 [id^="icpa-"] .phero,
body.icpa-2026 [id^="icpa-"] .tr-hero,
body.icpa-2026 [id^="icpa-"] .tr-hero--topic,
body.icpa-2026 [id^="icpa-"] .kkhero { padding-top: 148px !important; }
body.icpa-2026 [id^="icpa-"] .hero__content { padding-top: 176px !important; }

@media (max-width: 1199px) {
  body.icpa-2026 [id^="icpa-"] .hero__content { padding-top: 150px !important; }
}
@media (max-width: 767px) {
  body.icpa-2026 [id^="icpa-"] .hero__content { padding-top: 120px !important; }
}
@media (max-width: 640px) {
  body.icpa-2026 [id^="icpa-"] .phero,
  body.icpa-2026 [id^="icpa-"] .tr-hero,
  body.icpa-2026 [id^="icpa-"] .tr-hero--topic,
  body.icpa-2026 [id^="icpa-"] .kkhero { padding-top: 124px !important; }
}

/* ---------- undesigned content ----------
   A page whose content carries none of our markup - a post, a search
   result, a WP-Members form, anything the client writes in the editor
   later - gets this instead of landing naked on the ink background.
   It is deliberately plain: a warm band, a measured column, and the
   site's type. Nothing here should compete with a designed page. */
.wpband {
  background: var(--white);
  padding: 64px var(--frame) 96px;
}
.wpband--warm { background: var(--icpa-zone-warm); }

.wpprose {
  max-width: 72ch;
  color: var(--text-body);
  font-size: 1rem;
  line-height: 1.7;
}
.wpprose > * + * { margin-top: 1.1em; }
.wpprose h2,
.wpprose h3,
.wpprose h4 {
  font-family: var(--font-serif-display);
  color: var(--icpa-dark-navy);
  line-height: 1.2;
  margin-top: 1.8em;
}
.wpprose h2 { font-size: 1.75rem; }
.wpprose h3 { font-size: 1.375rem; }
.wpprose h4 { font-size: 1.125rem; }
.wpprose a { color: var(--icpa-navy); }
.wpprose img,
.wpprose iframe,
.wpprose video { max-width: 100%; height: auto; }
.wpprose ul,
.wpprose ol { padding-left: 1.4em; }
.wpprose li + li { margin-top: .5em; }
/* The site's pull quote, as .abt-quote and .vquote already set it: a 2px gold
   rule at 22px, the display serif in italic, navy rather than meta grey. */
.wpprose blockquote {
  margin-left: 0;
  padding-left: 22px;
  border-left: 2px solid var(--icpa-accent);
  font-family: var(--font-serif-display);
  font-style: italic;
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--icpa-dark-navy);
  text-wrap: pretty;
}
/* The live 3clicks theme hangs a FontAwesome quote mark off blockquote::before
   and indents 45px to clear it, which reads as a second opening quote against
   copy that already types its own. css/volunteer.css suppresses it per page;
   this is the same suppression, once, for every quote WordPress renders. */
.wpprose blockquote::before,
.wpprose blockquote::after { content: none; display: none; }
.wpprose table { width: 100%; border-collapse: collapse; }
.wpprose th,
.wpprose td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--border-rule);
  text-align: left;
  vertical-align: top;
}
.wpprose pre {
  overflow-x: auto;
  padding: 16px;
  background: var(--icpa-zone-warm);
  border: 1px solid var(--border-rule);
}

/* A list of posts (archive, search results, the blog index). */
.wplist { display: grid; gap: 28px; max-width: 78ch; }
.wplist__item { padding-bottom: 28px; border-bottom: 1px solid var(--border-rule); }
.wplist__item:last-child { border-bottom: 0; }
.wplist__title {
  margin: 0;
  font-family: var(--font-serif-display);
  font-size: 1.375rem;
  line-height: 1.25;
}
.wplist__title a { color: var(--icpa-dark-navy); text-decoration: none; }
.wplist__title a:hover { text-decoration: underline; }
.wplist__meta {
  margin: 6px 0 0;
  font-size: .8125rem;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--text-meta);
}
.wplist__excerpt { margin: 10px 0 0; color: var(--text-body); line-height: 1.65; }

.wpnav {
  display: flex;
  gap: 18px;
  margin-top: 48px;
  font-size: .9375rem;
}
.wpnav a { color: var(--icpa-navy); }

/* ---------- block editor alignment ----------
   Only needed by content written in the editor; the ported pages lay
   themselves out. */
.wpprose .alignleft { float: left; margin: 0 1.5em 1em 0; }
.wpprose .alignright { float: right; margin: 0 0 1em 1.5em; }
.wpprose .aligncenter { display: block; margin-left: auto; margin-right: auto; }
.wpprose .alignwide { max-width: min(1100px, 100%); margin-left: calc(50% - min(550px, 50%)); }
.wpprose .alignfull { max-width: none; }
.wpprose figure { margin: 0; }
.wpprose figcaption {
  margin-top: 8px;
  font-size: .8125rem;
  color: var(--text-meta);
}
.wpprose .wp-caption-text { font-size: .8125rem; color: var(--text-meta); }
.wpprose .screen-reader-text {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* ---------- plugin screens ----------
   WP-Members and Gravity Forms both render their own markup inside the
   content. These give them the site's type and spacing without trying
   to restyle controls we do not own - the ported pages that care
   (Login, My Profile, Register, Renew) bring their own rules. */
.wpprose .wpmem_msg,
.wpprose .wpmem_login,
.wpprose .wpmem_register { max-width: 34rem; }
.wpprose input[type="text"],
.wpprose input[type="email"],
.wpprose input[type="url"],
.wpprose input[type="tel"],
.wpprose input[type="password"],
.wpprose input[type="search"],
.wpprose select,
.wpprose textarea {
  width: 100%;
  max-width: 34rem;
  padding: 11px 13px;
  font: inherit;
  color: var(--text-body);
  background: var(--white);
  border: 1px solid var(--border-rule);
  border-radius: 2px;
}
.wpprose button,
.wpprose input[type="submit"] {
  padding: 12px 22px;
  font: inherit;
  font-weight: var(--weight-semibold, 600);
  color: #FCFCFC;
  background: var(--icpa-navy);
  border: 0;
  border-radius: 2px;
  cursor: pointer;
}
.wpprose button:hover,
.wpprose input[type="submit"]:hover { background: var(--icpa-dark-navy); }
