/*
Theme Name: Joe Tennis 2026 (Neve Child)
Theme URI:
Description: Neve child theme for joetennis-2026. Exists solely to install the Documentation Export production template (single-project.php/.css/.js) and future case-study templates without modifying the parent Neve theme. Carries the parent's Customizer theme_mods (palette, typography, nav_menu_locations) forward on first activation — see functions.php's after_switch_theme hook.
Author: Joe Tennis
Author URI:
Template: neve
Version: 2.0.2
Text Domain: joetennis-2026
*/

/*
 * Page-specific styles do NOT live here. Styles for the `project` CPT
 * singular template live in single-project.css, enqueued conditionally by
 * functions.php only on is_singular('project') — not loaded here, so
 * nothing in this stylesheet affects any other post type or template.
 *
 * WHAT DOES LIVE HERE, AND WHY IT IS THE ONLY THING THAT DOES
 * ----------------------------------------------------------
 * `--band-gutter`: the horizontal inset every banded element on the site
 * shares. This file is the right home for exactly one reason -- it is
 * `joetennis-child-style`, the `$deps` root of every other child sheet
 * (functions.php:240), so a token declared here is resolvable from all of
 * them with no new enqueue and no new `$deps` edge to forget. Nothing else
 * belongs here; a second rule would make this a fourth sitewide sheet by
 * accident.
 */

/* =====================================================================
   THE SITEWIDE BAND GUTTER
   v1.14.0. Replaces the flat `15px` that ten declarations across nine
   sheets each carried as a hand-copy of Neve's own `.container` padding.

   WHAT IT COMPUTES TO, WHICH IS THE WHOLE DESIGN:

     viewport      gutter    what is binding
     < 500px       20px      the floor
     500-1400px    4vw       the ramp, 20px -> 56px
     >= 1400px     56px      the ceiling

   THE CEILING LANDS ON THE BAND CAP ON PURPOSE. `4vw` IS `56px` at exactly
   1400px, which is `neve_container_width`'s desktop tier -- so the gutter
   stops growing at precisely the width the content stops growing. That
   makes 56 a derived number rather than a taste one: change the cap and the
   honest ceiling is `cap * 0.04`. The floor is taste, and 20px is this
   site's established rhythm unit (archive toolbar, footer vertical padding).

   WHY `vw` AND NOT `%`, WHICH IS THE TRAP THIS REPLACED A PLAN TO USE.
   Percentage padding resolves against the CONTAINING BLOCK's inline size,
   not the viewport. On a capped, centred band that gives the wrong curve
   in the wrong direction: past the cap the gutter keeps growing while the
   band does not, so the content box gets NARROWER as the viewport gets
   wider. `vw` reads the viewport, which is what a margin is about.

   `100vw` INCLUDES THE SCROLLBAR and `4vw` inherits that error -- about
   0.6px on a 15px scrollbar at 1400. Noted rather than corrected: it is
   below the threshold at which any of this is visible, and the two
   alternatives (`100%` on a full-width ancestor, or `dvw`) each buy that
   0.6px at the cost of a dependency worth more than it.

   EVERY CONSUMER READS IT AS `var(--band-gutter, 15px)`. The fallback is
   not decoration and it is not the usual Neve-variable caution -- this is
   our own token, declared here, so it resolves whenever this file loads.
   It is there because the consumers state it inside a `padding` SHORTHAND
   and a `min()`/`calc()`: an unresolved custom property in either is
   invalid at computed-value time, which drops the WHOLE declaration --
   losing the vertical padding too, or dropping a measure back to `none`
   and going full-bleed. With the fallback, this file failing to load
   degrades to the exact behaviour that shipped through v1.13.41 instead of
   to a broken page.
   ===================================================================== */
:root {
	--band-gutter: clamp(20px, 4vw, 56px);
}

/* NEVE'S OWN `.container` TAKES THE SAME GUTTER, AND THIS RULE IS THE
   LOAD-BEARING HALF OF THE CHANGE.

   Five elements per page carry the bare class -- two header rows
   (desktop + mobile) and three Neve footer rows -- measured live on
   /about/, /projects/, /contact/ and /privacy/ on 2026-09-28. The three
   footer rows are the zero-height ones CLAUDE.md records
   (`hfg_footer_layout_*_height` are all 0), so what actually moves here is
   THE HEADER: the logo's left edge and the nav/CTA's right edge. Without
   this rule the header would keep a flat 15px while every band beneath it
   ramped to 56px, which is the sitewide misalignment
   spec-sitewide-alignment-band exists to prevent, arriving from a new
   direction.

   `body .container` AT (0,1,1) IS DELIBERATE AND IS NOT TIDYABLE. Neve
   paints `.container{padding-right:15px;padding-left:15px}` at (0,1,0) as
   a LITERAL -- not a custom property, so there is no value to re-bind the
   way site-interactive-states.css re-binds `--rowbcolor`, and specificity
   is the only lever available. It has to be a lever at all because
   `neve-style-css` (style-main-new.min.css) loads AFTER every child sheet:
   a plain `.container` rule here would tie on specificity and lose on
   source order, silently. Same reasoning, and the same deliberate `body`
   prefix, as the raised rules in site-interactive-states.css.

   Longhands, not `padding-inline`, to match the longhands Neve states --
   a logical/physical pair resolves correctly here, but stating the same
   axis the same way makes the override legible next to the rule it beats.

   No `!important` and no touch to `width`/`max-width`/`margin`: Neve's own
   `max-width: var(--container)` is exactly the band this theme wants and
   is left to do its job. */
body .container {
	padding-right: var(--band-gutter, 15px);
	padding-left: var(--band-gutter, 15px);
}
