/*
 * Ported from the vendor parent theme:
 * wp-content/themes/photome/css/reset.css (ThemeGoods "Photome" v5.7.2).
 * Loaded unconditionally on every front-end page load via
 * wp_enqueue_style("reset-css", .../css/reset.css", ...) (functions.php,
 * pp_enqueue_front_page_scripts()), first among the theme's own stylesheets
 * (before wordpress.css, animation.css, screen.css, grid.css).
 *
 * None of the original reset rules use any left/right-style property (no
 * margin-left/right, padding-left/right, border-left/right, text-align, or
 * bare left/right position offsets appear anywhere in this file) - there is
 * nothing here that a CSS logical property would apply to.
 *
 * Because this file loads first, it's also the natural home for this ported
 * design system's shared CSS custom properties ("design tokens") - not
 * present in the original vendor file. These alias the small set of colors
 * that recur dozens of times across screen.css and wordpress.css, so a
 * future maintainer (or a future Kirki-driven customizer field) has one
 * place to see/change them. This is a pure aliasing operation: each token
 * is set to the exact literal value already used at every one of its call
 * sites, so substituting var(--token) for the literal changes nothing about
 * how anything renders - see screen.css's and wordpress.css's own header
 * comments for exactly which literals were replaced with which token and
 * how many times.
 *
 * Per this project's own established pattern for Kirki-sourced values
 * (wp-content/themes/photome-child/header.php sets `style="--logo-src: url(...)"`
 * inline per-request from a theme_mod, consumed via var(--logo-src) in
 * css/site-logo.css) - these :root tokens are the natural next place a
 * future functions.php could plug live Kirki customizer values into, by
 * overriding one of these custom properties via an inline style on <html>
 * or <body> instead of duplicating Kirki's current pattern of writing whole
 * ad hoc override rules into templates/custom-css.php. Not wired up to
 * Kirki that way yet (a separate, larger change) - this just prepares the
 * CSS side of that pattern.
 */

:root {
	/* Design tokens ported out of repeated literals in screen.css / wordpress.css. */
	--color-white: #fff;           /* screen.css: 119x "#fff" + 5x "#ffffff"; also this file's own ::selection color in wordpress.css */
	--color-border: #e1e1e1;       /* screen.css: 52x - the theme's near-universal hairline border/divider gray. Matches tg_hr_color's code-declared default exactly (customizer.lib.php) - not live-checked against production's actual saved value the way --color-body-text is below, since a matching default isn't proof Kedyn hasn't changed it; worth a quick wp.customize('tg_hr_color').get() check the next time the Customizer is open. */
	/*
	 * ACCENT DECISION 2026-08-23 (Kedyn, via the Ballot artifact): the stock
	 * template gold #efc337 is retired in favor of a MUTED wordmark sienna -
	 * the orange family already in his hand-lettered logo, desaturated to
	 * "option 3 quietness" per his exact instruction: "we dont want these
	 * colors to be shouting."
	 *
	 * Three-value family, all chosen against real contrast math:
	 *   --color-accent      #92573b  core; white/cream text on it = 5.4:1 (AA)
	 *   --color-accent-deep #77452e  hover/active darkening of the core
	 *   --color-accent-dark #c48f6a  the SAME sienna lifted for dark grounds
	 *                                (pswp lightbox, darkroom surfaces) where
	 *                                the core would read muddy
	 * Cutover pairs with a Customizer flip (link color #030044 -> sienna,
	 * nav hover slate -> neutral) - tokens alone don't move Kirki-driven
	 * colors; see the token docblock above.
	 */
	--color-accent: #92573b;
	--color-accent-deep: #77452e;
	--color-accent-dark: #c48f6a;
	/* The warm limestone loading tone, promoted from 4 scattered literals
	   (portfolio-grid.css x2, blocks.css, ten-years-later-galleries.css) to
	   the site's designed paper surface - Field Plan Phase 1. */
	--surface-warm: #edebe7;
	/*
	 * One reading measure, Field Plan Phase 1 (2026-08-23): replaces three
	 * independent prose max-widths (contact intro 520px, homepage statement
	 * 640px, content-bg-image teaser copy 720px) that agreed with nothing.
	 * 640px sits close to the Lato/Work Sans body-font ~75-character-per-
	 * line ideal at the site's 16-17px body sizes. The contact FORM's own
	 * 680px wrapper is a layout width, not a prose measure - deliberately
	 * left alone.
	 */
	--measure-reading: 640px;
	--shadow-soft: rgba(0, 0, 0, 0.1);   /* screen.css: 29x - the theme's most common drop-shadow/overlay tint */
	--shadow-strong: rgba(0, 0, 0, 0.6); /* screen.css: 16x - the theme's second most common drop-shadow/overlay tint */

	/*
	 * Semantic type tokens (font-family-body/-heading, font-size-body,
	 * color-body-text/-heading-text, heading-letter-spacing, button-*): part
	 * of PARENT-THEME-FORK-PLAN.md §8.9's design-modernization phase - see
	 * docs/specs/DESIGN.md for the real-value extraction these come from.
	 * Same pure-aliasing rule as the color tokens above: each value here is
	 * the exact literal already rendering today, so substituting var(--token)
	 * changes nothing about how anything renders. Intentionally NOT deriving
	 * a spacing-scale token set here - DESIGN.md explicitly found no such
	 * system exists yet ("don't infer one from the button padding... that's
	 * one component, not a system") - only the one real, existing
	 * button-padding value is tokenized below.
	 *
	 * A general trap worth flagging for anyone touching Kirki fields in
	 * customizer.lib.php: grepping theme PHP for a kirki_get_option()/
	 * get_theme_mod() call is not sufficient to prove a field's value is
	 * still the CSS stock default. Any Kirki field configured with a
	 * top-level 'output' array (tg_body_font_size and tg_header_font both
	 * are) has its live value generated and printed by Kirki itself, straight
	 * from the field config, entirely independent of whether the theme's own
	 * PHP ever reads it back out. Concretely: --font-size-body's real,
	 * currently-live value is 16px (a Kirki override, confirmed via
	 * getComputedStyle() on a real page and Kirki's own generated <style>
	 * tag in <head>), not the 14px CSS stock default. --font-family-body/
	 * -heading are unaffected by this - DESIGN.md's "never explicitly
	 * overridden" finding for tg_body_font/tg_header_font came from direct
	 * DB-value inspection, so Lato/Oswald stand as genuinely correct today.
	 * Practical upshot: tg_header_font/tg_body_font already make heading/body
	 * typography live-editable via the Customizer today, with no
	 * var(--token) wiring needed on this file's part - Kirki's own mechanism
	 * wins the cascade regardless of what these tokens say. These two tokens
	 * remain useful as the documented current values and as what any *new*
	 * CSS (e.g. the content-builder's block styles) should read by default,
	 * not as the live-override mechanism itself.
	 *
	 * This is the scaffolding a future content-builder plugin's block CSS
	 * should read from day one instead of hardcoding values that would need
	 * a retrofit later.
	 *
	 * The same applies to nav/footer/link colors: tg_menu_font_color,
	 * tg_footer_font_color, the link-color field, and in fact every color
	 * control in customizer.lib.php, already have their own 'output' array,
	 * exactly like tg_body_font/tg_header_font do. Kirki's own
	 * `#kirki-styles-global-inline-css` <style> tag on a real page load
	 * already contains real, live rules for all of them (`#menu_wrapper .nav
	 * ul li a{...color:#848484;}`, `a{color:#000000;}`, `.footer_bar .button
	 * {...background-color:#888888;}`). There is no wiring work left to do
	 * for this category of value - these are already fully live and
	 * Kirki-driven today, same as the font fields.
	 */
	/*
	 * TYPE DECISION 2026-08-23 (Kedyn, via the Ballot artifact): candidate B.
	 * Work Sans replaces Lato as the working sans; Fraunces (a warm
	 * editorial serif with a true italic) replaces Oswald as the display/
	 * heading voice - chosen to partner the hand-lettered wordmark and carry
	 * the expedition prose's epigraph italic. NOTE the token docblock above:
	 * Kirki's tg_header_font/tg_body_font output wins the cascade on vendor
	 * selectors, so this token change only fully lands when the Customizer
	 * fields flip to the same families at cutover. Buttons deliberately move
	 * OFF the heading stack (a serif button reads costume-y) onto the body
	 * sans - see --font-family-button below.
	 */
	--font-family-body: 'Work Sans', 'Helvetica Neue', Arial, Verdana, sans-serif;
	--font-family-heading: Fraunces, Georgia, 'Times New Roman', serif;
	--font-family-button: 'Work Sans', 'Helvetica Neue', Arial, Verdana, sans-serif;
	--font-size-body: 16px; /* live Kirki override (tg_body_font_size) - see the note above, this is not the 14px CSS stock default */
	--color-body-text: #000; /* live Kirki override (tg_font_color) - wp.customize('tg_font_color').get() and getComputedStyle() both agree on rgb(0,0,0); screen.css's own #444 static literal is overridden live by Kirki here, same trap as --font-size-body above. */
	--color-heading-text: #222; /* matches tg_h1_font_color's live value (#222222) exactly */
	--heading-letter-spacing: 1px;
	--button-font-size: 13px;
	--button-letter-spacing: 2px;
	--button-padding: .4em 1.5em;

	/*
	 * Motion tokens - same pure-aliasing rule as every token above: each
	 * value here is a literal that already repeats verbatim across this
	 * project's own hand-authored CSS (hero-slideshow.css, logo-showcase.css,
	 * portfolio-grid.css, site-logo.css - the hardcoded RevSlider/Isotope
	 * replacements, not the vendor-ported files); substituting var(--token)
	 * changes nothing about how anything renders. Deliberately NOT a full
	 * duration "scale" (0.2s/0.25s/0.6s/0.45s/910ms/5000ms all also appear,
	 * each exactly once, each tuned for its own specific interaction per that
	 * file's own comments - forcing those onto a ladder would be a real
	 * visual change with no screen to verify it on, not a rename). Only
	 * values that are identical in more than one place get a name:
	 *   --duration-base: 0.35s - portfolio-grid.css's box-shadow/opacity/
	 *     transform hover transitions (3 call sites, 6 property mentions)
	 *     plus logo-showcase.css's logo-grayscale-on-hover filter/opacity.
	 *   --duration-moderate: 500ms - logo-showcase.css's scroll-reveal
	 *     fade-in and portfolio-grid.css's per-tile scroll-reveal (written
	 *     as 500ms and 0.5s respectively - same value, different unit).
	 *   --ease-signature: cubic-bezier(0.22, 1, 0.36, 1) - this project's
	 *     one recurring custom easing curve, used identically in 3 places
	 *     across 2 files (site-logo.css's color-trace sweep and underline,
	 *     portfolio-grid.css's classic-tile image zoom) with 3 different
	 *     durations - the curve repeats, the duration doesn't, so only the
	 *     curve is tokenized.
	 */
	--duration-base: 0.35s;
	--duration-moderate: 500ms;
	--ease-signature: cubic-bezier(0.22, 1, 0.36, 1);
}

/*
 * ============================================================================
 * MOTION CHARTER (Field Plan Phase 1, 2026-08-23)
 * ============================================================================
 * Codifies the motion identity design audit found nascent-but-diluted in
 * this codebase, so future additions extend it deliberately instead of
 * reinventing a curve. Not a rewrite of existing motion - see the
 * "deliberate exceptions" note below before "fixing" anything that already
 * has its own documented reasoning.
 *
 * THE SENTENCE: photos settle, they never zoom in at the viewer. New UI
 * enters by fading and rising slightly (opacity + a small translateY),
 * never sliding in from off-screen or overshooting past its rest state.
 *
 * THE DEFAULT CURVE: --ease-signature (cubic-bezier(0.22,1,0.36,1)), a hard-
 * deceleration "settle" - starts fast, eases hard into rest, never
 * overshoots. This is the curve for any NEW entrance/reveal/hover
 * transition on this site, full stop, unless the animation is one of the
 * documented exceptions below.
 *
 * THE DURATION LADDER: --duration-base (0.35s) for hover/focus micro-
 * interactions and tile reveals; --duration-moderate (500ms) for scroll-
 * triggered reveals of larger elements; longer ambient/ken-burns-style
 * motion (multi-second) is scoped per-component, not tokenized, because it
 * is tuned to the specific photograph/viewport, not reusable.
 *
 * DELIBERATE EXCEPTIONS - do not "fix" these into --ease-signature:
 *   - css/hero-slideshow.css's three custom cubics (910ms opacity
 *     crossfade, 300ms parallax transform, 5000ms Ken Burns scale) are
 *     reverse-engineered to MATCH a specific prior Slider Revolution
 *     export (documented in that file's own header, verified against
 *     SR7_56_1.json). They predate this charter and are a deliberate
 *     reference match, not an unconsidered one-off - changing them is a
 *     real creative decision (does the hero still look/feel the same?),
 *     not a mechanical token swap.
 *   - The content-builder plugin's authorable Animate effects (wipes,
 *     iris, scattered-tilt, coverflow, focus-pull, monochrome-bloom)
 *     exist so Kedyn can choose a different feel for a specific block on
 *     purpose. They are correctly NOT part of the site's ambient/default
 *     motion language and don't need to match --ease-signature - they're
 *     opt-in variety, not drift. (Backlog idea from the design audit,
 *     not done here: group them under a "More effects" disclosure in the
 *     canvas Animate tab, separate from a short default list built on
 *     --ease-signature, so the PALETTE itself communicates "these five are
 *     the house style, these are for when you want something different" -
 *     a canvas.js/UI change, not a motion-values change.)
 */

html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td
{
	margin:0;
	padding:0;
	border:0;
	font-weight:inherit;
	font-style:inherit;
	font-size:100%;
	font-family:inherit;
	vertical-align:baseline;
}
body
{
	line-height:1.5;
}
blockquote:before, blockquote:after, q:before, q:after
{
	content:"";
}
blockquote, q
{
	quotes:"" "";
}
a img
{
	border:none;
}

/*
 * Sitewide prefers-reduced-motion safety net. This project's own
 * hand-authored animation files (hero-slideshow.css, logo-showcase.css,
 * portfolio-grid.css, site-logo.css) each already have their own targeted
 * @media (prefers-reduced-motion: reduce) block - that per-component
 * pattern is correct and untouched here. The gap this closes is different:
 * the 3 vendored interaction libraries this theme still ships
 * (magnific-popup.css's lightbox zoom/fade, tooltipster.css's
 * tooltip show/hide, odometer-theme-minimal.css's counter roll) have zero
 * prefers-reduced-motion handling of their own, confirmed by grep - not a
 * judgment call, a real absence. Re-authoring three separate vendor
 * stylesheets (one of them using pre-2015 vendor-prefixed transition
 * syntax) to add matching reduced-motion blocks would mean hand-editing
 * files this project otherwise leaves alone; this is the standard umbrella
 * technique instead (collapse every animation/transition to a single
 * imperceptible frame rather than removing the properties), loaded first
 * (this file), so anything more specific loaded later still wins normally
 * for sighted users with no preference set.
 *
 * animation-iteration-count:1 is deliberately included: an infinite
 * animation (e.g. a spinner) reduced to near-zero duration would otherwise
 * still visibly flash/repeat forever, just very fast, instead of
 * effectively stopping.
 */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}

/* ---------------------------------------------------------------------------
 * Phone tap targets for buttons (2026-08-29).
 *
 * The stock tokens above (13px text, .4em vertical padding) render every
 * button on the site about 32px tall. Measured live at 375px: the
 * homepage's primary call to action "Read the expedition" came out
 * 175x32, and the contact form's Submit 275x32 - both under the ~44px a
 * fingertip needs, on the two controls that matter most commercially and
 * on the devices most of this site's readers use.
 *
 * Retuned here at the TOKEN rather than per-button, because the base rule
 * in screen.css already reads both values - so this reaches every button
 * (including input[type=submit], which contact-page.css deliberately
 * leaves to screen.css) without adding a single new selector or winning
 * any specificity fight. 14px text with .85em padding measures ~45px.
 *
 * Phones only: on desktop the 13px/.4em button is a deliberate part of
 * the type system and pointer targets have no 44px floor.
 * ------------------------------------------------------------------------ */
@media only screen and (max-width: 767px) {
	:root {
		--button-font-size: 14px;
		--button-padding: .85em 1.6em;
	}
}
