/* =========================================================================
   NovusWay design tokens
   Built 11 Sep 2026. Every colour, size and space on the site resolves here.

   THE RULE THIS FILE EXISTS TO ENFORCE:
   No Beaver Builder module sets its own colour, font or size. Modules read
   these variables. Per-module colour pickers are a governance leak - they
   are how a design system becomes forty one-off layouts by year two.
   ========================================================================= */

/* ---------- Typefaces -------------------------------------------------- */
/* Plus Jakarta Sans - PRIMARY. SIL Open Font License, self-hosted.
   Also the face WayFinder uses, so the two systems match on purpose.       */
@font-face{font-family:"Plus Jakarta Sans";src:url("../fonts/PlusJakartaSans-Regular.ttf") format("truetype");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Plus Jakarta Sans";src:url("../fonts/PlusJakartaSans-Medium.ttf") format("truetype");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Plus Jakarta Sans";src:url("../fonts/PlusJakartaSans-SemiBold.ttf") format("truetype");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Plus Jakarta Sans";src:url("../fonts/PlusJakartaSans-Bold.ttf") format("truetype");font-weight:700;font-style:normal;font-display:swap}

/* Coniferous Medium - ACCENT. Licensed to NovusWay Ministries from OH no
   Type Co., 19 May 2026. Web licence covers 500k monthly page views, which
   is roughly 350x current traffic. ONE WEIGHT ONLY - so it is a display
   face, never a text face. Never fake a bold on it.                        */
@font-face{font-family:"Coniferous";src:url("../fonts/Coniferous-Medium.woff2") format("woff2"),url("../fonts/Coniferous-Medium.woff") format("woff");font-weight:500;font-style:normal;font-display:swap}

:root{
  --font-primary:"Plus Jakarta Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --font-accent:"Coniferous","Plus Jakarta Sans",Georgia,serif;

  /* ---------- Type scale (1.25, major third), body 18px --------------- */
  --step--1:0.889rem;   /* 14px - captions, labels, legal                  */
  --step-0:1rem;        /* 16px - small body                               */
  --step-1:1.125rem;    /* 18px - body                                     */
  --step-2:1.406rem;    /* 22px - lead paragraph, card titles              */
  --step-3:1.758rem;    /* 28px - h3                                       */
  --step-4:2.197rem;    /* 35px - h2                                       */
  --step-5:2.746rem;    /* 44px - h1                                       */
  --step-6:3.433rem;    /* 55px - hero display, Coniferous                 */
  --lh-tight:1.12; --lh-snug:1.3; --lh-body:1.6;
  --measure:66ch;       /* running text never exceeds this                 */

  /* ---------- Space (4px base) ---------------------------------------- */
  --s-1:.25rem; --s-2:.5rem; --s-3:.75rem; --s-4:1rem; --s-5:1.5rem;
  --s-6:2rem; --s-7:3rem; --s-8:4rem; --s-9:6rem; --s-10:8rem;

  /* ---------- Organisation palette ------------------------------------ */
  --ground:#f2eadf;          /* cream. CONFIRMED by Carter 11 Sep 2026. Every
                                contrast figure below was recomputed against
                                it - the real cream is darker than assumed,
                                so every dark-on-cream ratio fell.         */
  --surface:#ffffff;         /* 1.19:1 against ground - a card reads as
                                raised by edge and shadow, not by value    */
  --surface-sunk:#eae0cf;
  --ink:#1b1b18;             /* 14.48:1                                    */
  --ink-2:#45443d;           /*  8.20:1                                    */
  --ink-muted:#636158;       /*  5.21:1 - the floor for small text          */
  --line:#d4cab7;
  --line-soft:#e3daca;

  /* ---------- Camp accents ---------------------------------------------
     Three values per camp, never one:
       -accent       the brand colour, for fills, rules and graphics
       -accent-text  a darkened variant that passes WCAG AA as TEXT
       -accent-label the label colour to use ON a filled accent button
     Contrast ratios below were computed against --ground, 11 Sep 2026.   */

  --ridge-accent:#af3327;        /* 5.30:1 as text - passes AA            */
  --ridge-accent-text:#af3327;   /* no darkening needed                   */
  --ridge-accent-deep:#8e2a20;   /* 7.04:1 - AAA, for small or dense text */
  --ridge-accent-label:#ffffff;  /* 6.31:1 on the fill                    */

  --rock-accent:#195c2f;         /* 6.74:1 as text - passes AA            */
  --rock-accent-text:#195c2f;
  --rock-accent-deep:#18592e;    /* 7.02:1 - AAA                          */
  --rock-accent-label:#ffffff;   /* 8.04:1 on the fill                    */

  /* Luther Springs gold measures 1.57:1 as text on the confirmed cream and
     fails AA badly. It is a FILL colour only - rules, graphics, buttons.
     It never carries text. Text and labels use the darkened variants.     */
  --springs-accent:#f9af43;
  --springs-accent-text:#995c05; /* 4.53:1 - passes AA                     */
  --springs-accent-deep:#6f4404; /* 7.03:1 - passes AAA, for small text    */
  --springs-accent-label:#2b1f0d;/* 8.62:1 on the gold fill                */

  /* NovusWay, the organisation. This is the former Lutheranch blue, kept in
     the system after that camp closed - a private continuity, never a public
     claim. It must not be explained in copy, because explaining it would
     make it the reference to Lutheranch that the brand standards rule out.
     It also happens to be the strongest performer in the set: 6.13:1 as
     text with no darkening at all.                                        */
  --org-accent:#375a73;          /* 6.13:1 as text - passes AA            */
  --org-accent-text:#375a73;     /* no darkening needed                   */
  --org-accent-deep:#325168;     /* 7.01:1 - AAA                          */
  --org-accent-label:#ffffff;    /* 7.31:1 on the fill                    */

  /* Org-level pages default to the NovusWay accent. The novusway-core plugin
     overrides these per page from the camp taxonomy term.                 */
  --camp-accent:var(--org-accent);
  --camp-accent-text:var(--org-accent-text);
  --camp-accent-label:var(--org-accent-label);

  /* ---------- Semantic, separate from the accent ----------------------- */
  --ok:#2f6b3d; --warn:#8a5a12; --crit:#a13a2c; --info:#3c566b;

  /* ---------- Form ----------------------------------------------------- */
  --radius:3px; --radius-lg:6px;
  --focus:0 0 0 3px rgba(27,27,24,.18), 0 0 0 1px var(--ink);
  --shadow-card:0 1px 2px rgba(27,27,24,.05),0 4px 14px rgba(27,27,24,.05);
  --tap:44px;               /* minimum touch target                        */
}

/* Per-camp scope. The plugin adds camp-{slug} to <body>, so one template
   renders three visibly different camps with no per-camp CSS anywhere.
   body.camp-org is the organisation and needs no rule - it inherits.

   MEASURED 11 Sep 2026, and the reason identity never rests on colour:
     Lutheridge vs Lutherock  -  dE 3.5 under protanopia (indistinguishable)
     NovusWay   vs Lutherock  -  dE 2.9 under tritanopia (indistinguishable)
   Wordmark, photographic register and page rhythm carry identity. The accent
   is for interactive states and rules, and is never the only signal.       */
body.camp-lutheridge{--camp-accent:var(--ridge-accent);--camp-accent-text:var(--ridge-accent-text);--camp-accent-label:var(--ridge-accent-label)}
body.camp-lutherock{--camp-accent:var(--rock-accent);--camp-accent-text:var(--rock-accent-text);--camp-accent-label:var(--rock-accent-label)}
body.camp-luthersprings{--camp-accent:var(--springs-accent);--camp-accent-text:var(--springs-accent-text);--camp-accent-label:var(--springs-accent-label)}

/* ---------- Base ------------------------------------------------------- */
html{-webkit-text-size-adjust:100%}
body{background:var(--ground);color:var(--ink);font-family:var(--font-primary);font-size:var(--step-1);line-height:var(--lh-body);-webkit-font-smoothing:antialiased}
p,li{max-width:var(--measure)}
h1,h2,h3,h4{font-family:var(--font-primary);font-weight:700;line-height:var(--lh-tight);letter-spacing:-.018em;text-wrap:balance;margin:0 0 var(--s-3)}
h1{font-size:var(--step-5)} h2{font-size:var(--step-4)} h3{font-size:var(--step-3);font-weight:600} h4{font-size:var(--step-2);font-weight:600}

/* Coniferous is the accent voice. Display only, one weight, used sparingly
   - a hero line, a pull quote, a section eyebrow. Never a paragraph.      */
.nw-display{font-family:var(--font-accent);font-weight:500;font-size:var(--step-6);line-height:var(--lh-tight);letter-spacing:-.01em}
.nw-eyebrow{font-family:var(--font-accent);font-weight:500;font-size:var(--step-0);letter-spacing:.06em;text-transform:uppercase;color:var(--camp-accent-text)}
.nw-quote{font-family:var(--font-accent);font-weight:500;font-size:var(--step-3);line-height:var(--lh-snug)}

/* ---------- Accent usage ----------------------------------------------- */
.nw-accent-text{color:var(--camp-accent-text)}
.nw-rule{border:0;border-top:3px solid var(--camp-accent);width:3rem;margin:var(--s-5) 0}
.nw-btn{display:inline-flex;align-items:center;justify-content:center;min-height:var(--tap);padding:var(--s-3) var(--s-5);background:var(--camp-accent);color:var(--camp-accent-label);font-family:var(--font-primary);font-weight:600;font-size:var(--step-0);border:0;border-radius:var(--radius);text-decoration:none;cursor:pointer}
.nw-btn--quiet{background:transparent;color:var(--camp-accent-text);border:1px solid var(--camp-accent)}
.nw-btn:hover{filter:brightness(.92)}

/* ---------- Accessibility ---------------------------------------------- */
a{color:var(--camp-accent-text);text-underline-offset:.18em}
:focus-visible{outline:3px solid var(--ink);outline-offset:2px;box-shadow:var(--focus)}
.nw-skip{position:absolute;left:-9999px}
.nw-skip:focus{left:var(--s-4);top:var(--s-4);z-index:999;background:var(--surface);padding:var(--s-3) var(--s-4);border-radius:var(--radius)}
table{border-collapse:collapse}
.nw-scroll-x{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}

/* ---------- Responsive: mobile first, 640 / 1024 ------------------------ */
@media (max-width:639px){
  :root{--step-5:2.1rem;--step-6:2.5rem;--step-4:1.8rem}
  .nw-btn{width:100%}
}
@media print{
  body{background:#fff;color:#000}
  .nw-btn,nav{display:none}
}
