/* ============================================================================
   Augurea · tokens.css — design tokens + self-hosted type
   Slice 4a foundation. This is the ONLY place raw hex/font files are declared;
   every other stylesheet consumes the CSS custom properties below.

   Palette evolution (Slice 4):
     • --burgundy is THE single locked accent (buttons, links, focus, active).
     • Neutrals cooled away from the old warm cream toward a calmer paper.
     • --gold is RETIRED (owner 5th escalation 2026-07-08 "that golden is awful"):
       the legacy gold token NAMES now resolve to the replacement system
       (oxblood / muted / cream) — see the :root block. No gold hex renders anywhere.
     • No pure #000 / #fff anywhere. AA (4.5:1 body / 3:1 large + UI) holds for
       every text/bg pair shipped (ratios verified in the build report).
   ============================================================================ */

/* ---- Self-hosted fonts (latin + latin-ext woff2; no Google CDN) ---------- */
/* Bodoni Moda — display serif (400, 600, italic 400)
   D4 (SEO/GEO R2, 2026-10-07): the 400 and 600 files were the SAME bytes (sha256
   c1de3473… latin, 41d1b533… latin-ext): one variable font (wght 400-900) that the
   browser instantiates at the weight each face declares. Both weights now read ONE
   file per range, so the page downloads (and base.html preloads) it once instead of
   twice (-25,804 B). The two weight declarations are kept on purpose: 21 selectors
   on the serif ask for weight 500 and today fall back to the 400 face; a single
   `font-weight:400 600` face would paint all of them at wght 500, a visible change
   nobody asked for. Family count unchanged (Bodoni Moda, Hanken Grotesk, JetBrains Mono). */
@font-face{
  font-family:'Bodoni Moda';font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/bodoni-400-latin.530e21dc0628.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Bodoni Moda';font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/bodoni-400-latin-ext.26376fd79d81.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Bodoni Moda';font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/bodoni-400-latin.530e21dc0628.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Bodoni Moda';font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/bodoni-400-latin-ext.26376fd79d81.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Bodoni Moda';font-style:italic;font-weight:400;font-display:swap;
  src:url("../fonts/bodoni-400-italic-latin.5604463d7cee.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Bodoni Moda';font-style:italic;font-weight:400;font-display:swap;
  src:url("../fonts/bodoni-400-italic-latin-ext.8b1007975aa9.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* Hanken Grotesk — UI sans (400, 500, 600) */
@font-face{
  font-family:'Hanken Grotesk';font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/hanken-400-latin.a6b899943e31.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Hanken Grotesk';font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/hanken-400-latin-ext.a3a0917757d7.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Hanken Grotesk';font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/hanken-500-latin.a6b899943e31.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Hanken Grotesk';font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/hanken-500-latin-ext.a3a0917757d7.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Hanken Grotesk';font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/hanken-600-latin.a6b899943e31.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Hanken Grotesk';font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/hanken-600-latin-ext.a3a0917757d7.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* JetBrains Mono — mono / labels (400, 500) */
@font-face{
  font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/jetbrains-400-latin.570751c5f8b4.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/jetbrains-400-latin-ext.e6155c5cfacf.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/jetbrains-500-latin.570751c5f8b4.woff2") format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/jetbrains-500-latin-ext.e6155c5cfacf.woff2") format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* ---- Design tokens ------------------------------------------------------- */
:root{
  /* Accent — the ONE locked color (buttons, links, focus, active states). */
  --burgundy:#591C2A; --burgundy-deep:#4A1622;

  /* Neutrals — OWNER DIRECTIVE 2026-07-07: the page canvas is PURE WHITE.
     No sand, no warm beige, ever. Depth comes from cool neutral grays only.
     --bg is the page canvas; --surface is cards/rails/summaries. Legacy names
     (--paper, --cream, --cream-2) are preserved as aliases so every
     faithfully-migrated selector resolves unchanged (single source of truth). */
  --bg:#FFFFFF; --surface:#FFFFFF;
  --paper:#FFFFFF;          /* legacy alias of --surface (cards, summaries, inputs) */
  --ink:#1A1518;            /* near-black body text — never pure #000 */
  /* Achromatic grays (designer-blessed, AA-verified on #FFF): R==G==B exactly,
     zero hue cast — the owner's no-warm-tints law, un-escalatable. */
  --muted:#555555;          /* AA body muted on white (7.46) */
  --warm-grey:#6E6E6E;      /* AA labels/eyebrows/meta (5.10); name is legacy */
  --line:#E5E5E5; --line-2:#D4D4D4;   /* hairlines / stronger dividers */
  /* WCAG 1.4.11 non-text contrast (>=3:1 vs white; measured ~3.03:1) — interactive
     component borders ONLY (form inputs, qty steppers, size-selector buttons).
     --line/--line-2 stay on decorative hairlines, which 1.4.11 doesn't cover. */
  --line-ui:#949494;

  /* Dual-role neutral: light text on burgundy surfaces AND soft fill on --bg
     (buttons-ghost, chips, meter tracks, card mats). Achromatic. */
  --cream:#F5F5F5; --cream-2:#EBEBEB;
  /* Placeholder-gradient companions, achromatic to match the white canvas. */
  --ph-1:#E5E5E5; --ph-2:#DBDBDB; --sk-1:#F5F5F5;

  /* Gold RETIRED — owner 5th warmth escalation (2026-07-08): gold rejected at the
     PALETTE level ("that golden is awful"). These legacy token NAMES now resolve to the
     replacement system so every consumer updates with no re-sweep: guilloché/engraving
     -> oxblood (--burgundy-deep), amber-status -> --muted, footer-on-burgundy -> --cream.
     No gold hex renders anywhere. Signature burgundy #591C2A stays scarce; the darker
     oxblood does only reduced-opacity hairline/engraving work, never a solid mass. */
  --gold:var(--burgundy-deep); --gold-ink:var(--muted); --gold-light:var(--cream);

  /* Support */
  --good:#4F6B4F;

  /* Ultra-diffuse hover lift — the "expensive-by-detail" shadow the brief reserves
     for cards, CTA and the acta (BRAND_BRIEF §Expensive-by-detail). Ink-tinted,
     achromatic, ~7% on the white canvas so it reads as depth, never as a box. */
  --lift:0 10px 28px rgba(26,21,24,.07);

  /* Type */
  --serif:'Bodoni Moda',Georgia,'Times New Roman',serif;
  --sans:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,sans-serif;
  --mono:'JetBrains Mono','Courier New',monospace;

  --wrap:1320px;
  /* F1/F2-auto-fill-huecos-vacios (ATLAS-FIX-03, 2026-07-26): the single
     card-width floor the >=1600px wide-screen grid rule uses — shared so
     components.css (home/featured/PDP-related) and catalog.css (/catalogo/)
     read the SAME value instead of two independent magic numbers that can
     silently drift out of sync (see catalog.css:30's own pre-existing
     200px floor, which stayed untouched below 1600px on purpose). */
  --grid-wide-floor:290px;

  /* Brand component aliases (Intaglio) — semantic names mapping the CLOSED palette
     to brand roles; NO new color values. Guilloché hairlines are decorative only
     (gold is never small text); acta band text is --cream on --brand-band. */
  --brand-seal:var(--burgundy); --brand-seal-hover:var(--burgundy-deep);
  --brand-verified:var(--good); --brand-folio:var(--burgundy);
  --brand-folio-chip:var(--cream-2); --brand-mat:var(--cream-2);
  --brand-guillo:var(--gold); --brand-band:var(--burgundy-deep);
}

/* ---- Wide-screen container: fluid (repara la sierra de escalones) ---------
   The owner reviews on a 3840px monitor. The previous DISCRETE tiers
   (1680@1920 / 2040@2560 / 2400@3200) left "sawtooth" dead zones right before
   each step (~31% of the viewport dead at 1919px) and a hard 2400px ceiling
   that wasted ~35% per side at 3840 (owner order 2026-07-25: "márgenes
   extremadamente grandes... no llega a usar el espacio al 100%"). One fluid
   formula replaces them: 88vw tracks the old 1920 step almost exactly
   (1690 vs 1680) and keeps ~6% gutters per side all the way up; the 3400px
   ceiling only binds past ~3860px. Guarded at >=1600 so the <=1599px look
   stays byte-for-byte unchanged. Grids must gain columns, not stretch cards:
   components.css switches .grid to auto-fill at the same 1600 boundary. */
@media(min-width:1600px){:root{--wrap:min(88vw,3400px)}}

/* ---- Alpine's cloak, declared in the HEAD ---------------------------------
   `fiscal-10`. This rule used to live in the <style> block near the END of
   base.html's body, which means the browser had already laid out and painted
   everything above it. Every node marked `x-cloak` — the two nav menus, the
   mobile search panel, the drawer, and on 40 multi-size product pages the
   reference-price label and its empty discount badge — flashed on screen for
   one frame before the rule arrived to hide them, and any text extractor that
   reads the served HTML (including the crawl that produced the validation
   report) reads them whether or not they were ever visible.

   tokens.css is the FIRST stylesheet base.html links, so the rule is in the
   CSSOM before the first paint. It is a file and not an inline <style>: the
   CSP for this release allows no new inline styles. It sits here rather than
   in base.css because base.css is foundation-owned and shared with other lanes
   this release; this is one global display rule with no design surface. */
[x-cloak]{display:none!important}
