/* ============================================================================
   Sunarcode demo pack — typography foundation
   ----------------------------------------------------------------------------
   Real typefaces, zero network. Every stack below resolves to a genuine
   licensed face already installed on the presenting machine (macOS first,
   Windows second) and degrades to a generic family last. Nothing here loads.

   Do not add a @font-face or a fonts.googleapis.com link to this file. The pack
   must render identically from a USB stick with the Wi-Fi switched off.
   ========================================================================= */
:root{
  /* Geometric sans — engineered, precise, a little cold. Headings for
     industrial / technical brands. */
  --f-geo:Futura,"Century Gothic","Avenir Next",Avenir,"Trebuchet MS",sans-serif;

  /* Humanist sans — calligraphic stress, warm. Care, health, hospitality. */
  --f-hum:Optima,Candara,"Gill Sans","Gill Sans MT",Seravek,"Segoe UI",sans-serif;

  /* Workhorse UI sans — neutral without being anonymous. Body copy, controls. */
  --f-ui:"Avenir Next",Avenir,"Helvetica Neue",Helvetica,"Segoe UI",Arial,sans-serif;

  /* Condensed sans — dense operational screens, table headers, tickers. */
  --f-cond:"Avenir Next Condensed","Roboto Condensed","Arial Narrow","Segoe UI",sans-serif;

  /* Didone display — high stroke contrast. Luxury, property, editorial. */
  --f-display:Didot,"Bodoni 72","Bodoni MT","Hoefler Text",Georgia,serif;

  /* Book serif — long-form reading, warm and sturdy. Craft, heritage, legal. */
  --f-book:Charter,"Iowan Old Style","Bitstream Charter",Georgia,"Times New Roman",serif;

  /* Slab — blunt, mechanical. Signage, stamps, wordmarks. */
  --f-slab:Rockwell,"Roboto Slab","Bodoni 72 Oldstyle",Georgia,serif;

  /* Mono — identifiers, timestamps, money in data grids. */
  --f-mono:Menlo,"SF Mono",Consolas,"DejaVu Sans Mono",monospace;
}

/* Money, quantities, dates and anything that sits in a column: fixed-advance
   digits so the numbers stop dancing when a value updates. */
.tnum,td,th,.price,.amt,.num,[data-num]{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}

/* ---------------------------------------------------------------------------
   Icons. See assets/icons.js — a <symbol> sprite injected at the top of <body>.
   Sized on the 24px grid, coloured by `currentColor`, stroked at 1.6 so the
   weight sits with Avenir/Optima text rather than shouting over it.
   ------------------------------------------------------------------------ */
.i{width:1.15em;height:1.15em;flex:none;display:inline-block;vertical-align:-.18em;
   fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.i-sm{width:1em;height:1em}
.i-lg{width:1.5em;height:1.5em;stroke-width:1.5}
.i-xl{width:26px;height:26px;stroke-width:1.4}
/* Solid variants for marks that read better filled (star, heart, pin). */
.i-fill{fill:currentColor;stroke:none}
