/* The site's component CSS (W74): moved verbatim from the approved mockups (site/docs/mockups/site.css, APPROVED
   2026-10-22, rulings §2.25) — the ONE home of the pages' layout; colours, faces and sizes from fpk_site_tokens.css. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font:400 var(--fs-body)/1.55 var(--text);overflow-wrap:break-word}
img,svg{display:block;max-width:100%}
a{color:var(--brand);text-underline-offset:.18em}
a:hover{text-decoration-thickness:2px}
:focus-visible{outline:3px solid var(--brand);outline-offset:2px;border-radius:4px}
h1,h2,h3{font-family:var(--display);font-optical-sizing:auto;font-variation-settings:"SOFT" 50,"WONK" 0;font-weight:600;line-height:1.12;margin:0;letter-spacing:-.01em}
h1{font-size:var(--fs-display)}h2{font-size:var(--fs-h2)}h3{font-size:var(--fs-h3);line-height:1.25}
p{margin:0}
.skip{position:absolute;left:-999px}.skip:focus{left:var(--gutter);top:.5rem;background:var(--surface);padding:.5rem 1rem;z-index:20}
.wrap{width:100%;max-width:var(--max);margin-inline:auto;padding-inline:var(--gutter)}
.stack{display:grid;gap:var(--gap)}.stack-s{display:grid;gap:.5rem}
.stack>*,.stack-s>*,.page-head>*,.card>*{min-width:0}  /* a grid track never grows past its container */
.btn-row .chip{white-space:normal}
.muted{color:var(--muted)}.small{font-size:.875rem}.caption{font-size:.8125rem;color:var(--muted)}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap}
.tnum{font-variant-numeric:tabular-nums}
.measure{max-width:68ch}
.section{padding-block:clamp(2.5rem,6vw,5rem)}
.band{background:var(--sunk)}
.eyebrow{font-size:.8125rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}

/* Header: logo · cart · menu on a phone; links inline from 56em */
.site-header{position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.site-header .wrap{display:flex;align-items:center;gap:1rem;min-height:3.75rem}
.logo{font-family:var(--display);font-weight:650;font-size:1.25rem;color:var(--ink);text-decoration:none;letter-spacing:-.01em;display:flex;align-items:center;gap:.5rem}
.logo .mark{width:1.75rem;height:1.75rem;border-radius:8px;background:var(--brand);color:var(--brand-ink);display:grid;place-items:center;font-size:.95rem}
.logo span.k{color:var(--muted);font-weight:500}
.nav{display:none;gap:1.5rem;margin-left:auto}.nav a{color:var(--ink);text-decoration:none;font-weight:500}.nav a:hover{color:var(--brand)}
.header-actions{margin-left:auto;display:flex;align-items:center;gap:.5rem}
.menu-btn{display:inline-flex}
.header-actions .btn{padding-inline:.8rem}
@media (max-width:23.5em){.logo .k{display:none}}
@media (min-width:56em){.nav{display:flex}.header-actions{margin-left:1rem}.menu-btn{display:none}}
.preview{background:var(--warn-soft);color:var(--warn);font-size:.8125rem;text-align:center;padding:.375rem var(--gutter)}

/* Buttons and chips */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:44px;padding:.625rem 1.25rem;border-radius:999px;border:1.5px solid var(--brand);color:var(--brand);background:transparent;font:600 1rem/1.2 var(--text);text-decoration:none;cursor:pointer}
.btn.primary{background:var(--brand);color:var(--brand-ink);min-height:52px;padding-inline:1.5rem}
.btn.ghost{border-color:var(--line);color:var(--ink)}
.btn.block{width:100%}
.btn-row{display:flex;flex-wrap:wrap;gap:.75rem}
.btn-row .btn{flex:1 1 14rem}
@media (min-width:56em){.btn-row .btn{flex:0 0 auto}}
.chip{display:inline-flex;align-items:center;gap:.375rem;font-size:.8125rem;font-weight:600;padding:.25rem .625rem;border-radius:999px;background:var(--sunk);color:var(--muted);white-space:nowrap}
.chip.pass{background:var(--pass-soft);color:var(--pass)}.chip.warn{background:var(--warn-soft);color:var(--warn)}
.chip.fail{background:var(--fail-soft);color:var(--fail)}.chip.cold{background:var(--cold-soft);color:var(--cold)}
.chip.heat{background:var(--heat-soft);color:var(--heat)}
.icon{width:1.1em;height:1.1em;flex:none;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}

/* Cards and grids */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:clamp(1rem,2.5vw,1.5rem);display:grid;gap:.75rem;align-content:start}
.grid{display:grid;gap:var(--gap);grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr))}
.grid-4{display:grid;gap:var(--gap);grid-template-columns:1fr}
@media (min-width:37.5em){.grid-4{grid-template-columns:repeat(2,1fr)}}
@media (min-width:64em){.grid-4{grid-template-columns:repeat(4,1fr)}}
.grid-3{display:grid;gap:var(--gap);grid-template-columns:1fr}
@media (min-width:37.5em){.grid-3{grid-template-columns:repeat(2,1fr)}}
@media (min-width:56em){.grid-3{grid-template-columns:repeat(3,1fr)}}
.row{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;flex-wrap:wrap}
.divider{border:0;border-top:1px solid var(--line);margin:0}

/* Frozen note: the same three facts everywhere */
.frozen{display:flex;gap:.625rem;align-items:flex-start;background:var(--cold-soft);color:var(--cold);border-radius:var(--r);padding:.75rem 1rem;font-size:.9375rem}
.frozen b{font-weight:700}

/* Hero */
.hero{display:grid;gap:clamp(1.5rem,4vw,3rem);padding-block:clamp(2rem,6vw,5rem);align-items:center}
.hero .lede{font-size:clamp(1.0625rem,1rem + .4vw,1.25rem);color:var(--muted);max-width:40ch}
@media (min-width:56em){.hero{grid-template-columns:1.05fr .95fr}}
.ph{position:relative;border-radius:var(--r);overflow:hidden;background:
  radial-gradient(120% 90% at 30% 20%,color-mix(in srgb,var(--heat) 22%,transparent),transparent 60%),
  radial-gradient(90% 80% at 80% 90%,color-mix(in srgb,var(--cold) 30%,transparent),transparent 65%),var(--sunk);
  display:grid;place-items:center;color:var(--muted);font-size:.8125rem;text-align:center;padding:1rem}
.ph.box{aspect-ratio:4/3}.ph.square{aspect-ratio:1}.ph.wide{aspect-ratio:16/9}.ph.thumb{width:4.5rem;aspect-ratio:4/3;flex:none;padding:.25rem;font-size:.6875rem}
.hero-visual{position:relative}
.hero-visual .receipt{width:min(88%,20rem);margin:-2.5rem .5rem 0 auto;box-shadow:0 12px 30px -12px rgb(0 0 0 / .35)}
@media (min-width:56em){.hero-visual{padding-bottom:3rem}.hero-visual .receipt{position:absolute;right:-1.5rem;bottom:0;margin:0}}

/* The receipt motif: used once per page, for the ingredient record */
.receipt{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:1rem 1.125rem;font-size:.8125rem;display:grid;gap:.375rem;
  background-image:linear-gradient(var(--surface),var(--surface));position:relative}
.receipt::before{content:"";position:absolute;inset:-1px -1px auto -1px;height:6px;border-radius:var(--r) var(--r) 0 0;
  background:radial-gradient(circle at 6px -2px,var(--paper) 5px,transparent 5.5px) repeat-x;background-size:12px 6px}
.receipt .r-head{font-family:var(--mono);font-size:.75rem;color:var(--muted);letter-spacing:.04em;text-transform:uppercase}
.receipt .r-line{display:flex;justify-content:space-between;gap:.75rem}
.receipt .r-line span:last-child{font-family:var(--mono);text-align:right;white-space:nowrap}
.receipt .tear{border-top:1.5px dashed var(--line);margin:.25rem 0}

/* Steps (how it works) */
.steps{list-style:none;margin:0;padding:0;display:grid;gap:1rem;counter-reset:s}
@media (min-width:37.5em){.steps{grid-template-columns:repeat(2,1fr)}}
@media (min-width:56em){.steps{grid-template-columns:repeat(4,1fr)}}
.steps li{counter-increment:s;display:grid;gap:.375rem;align-content:start}
.steps li::before{content:counter(s);font-family:var(--display);font-weight:650;font-size:1.5rem;color:var(--heat)}

/* Pillars */
.pillar{display:grid;gap:.5rem;align-content:start}
.pillar .icon{width:1.75rem;height:1.75rem;color:var(--brand)}

/* Coming soon */
.soon{border:1.5px dashed color-mix(in srgb,var(--brand) 55%,var(--line));border-radius:var(--r);padding:clamp(1rem,2.5vw,1.5rem);display:grid;gap:.625rem;
  background:linear-gradient(135deg,color-mix(in srgb,var(--cold-soft) 70%,var(--surface)),color-mix(in srgb,var(--heat-soft) 45%,var(--surface)))}
.soon .chip{justify-self:start;background:var(--brand);color:var(--brand-ink)}

/* Footer */
.site-footer{border-top:1px solid var(--line);padding-block:2rem 6rem;font-size:.875rem;color:var(--muted)}
.site-footer .wrap{display:grid;gap:1rem}
@media (min-width:56em){.site-footer .wrap{grid-template-columns:2fr 1fr 1fr}}
.site-footer a{color:var(--ink)}
.site-footer ul{list-style:none;margin:0;padding:0;display:grid;gap:.375rem}

/* Forms */
label.field{display:grid;gap:.375rem;font-size:.875rem;font-weight:600}
input,select{font:400 1rem/1.3 var(--text);color:var(--ink);background:var(--surface);min-height:48px;padding:.625rem .875rem;border:1.5px solid var(--line);border-radius:10px;width:100%}
input:focus,select:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 25%,transparent)}
.choice{display:grid;gap:.75rem}
@media (min-width:37.5em){.choice{grid-template-columns:1fr 1fr}}
.option{display:grid;grid-template-columns:auto 1fr auto;gap:.75rem;align-items:start;border:1.5px solid var(--line);border-radius:var(--r);padding:1rem;background:var(--surface);cursor:pointer}
.option[aria-checked="true"]{border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}
.option .dot{width:1.25rem;height:1.25rem;border-radius:50%;border:2px solid var(--line);margin-top:.15rem}
.option[aria-checked="true"] .dot{border:6px solid var(--brand)}
.qty{display:inline-flex;align-items:center;border:1.5px solid var(--line);border-radius:999px}
.qty button{min-width:44px;min-height:44px;border:0;background:none;color:var(--ink);font-size:1.25rem;cursor:pointer}
.qty b{min-width:2ch;text-align:center}
.totals{display:grid;gap:.375rem}.totals .row{align-items:center}
.totals .grand{font-weight:700;font-size:1.125rem;border-top:1px solid var(--line);padding-top:.5rem}

/* Menu */
.dish{display:grid;gap:.75rem;align-content:start}
.dish .ph{aspect-ratio:4/3}
.dish .row h3{flex:1 1 auto}
a.more{display:inline-flex;align-items:center;gap:.375rem}
.macros{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem;text-align:center}
.macros div{background:var(--sunk);border-radius:10px;padding:.5rem .25rem;display:grid}
.macros b{font-family:var(--mono);font-size:1.0625rem;font-weight:500}
.macros span{font-size:.75rem;color:var(--muted)}

/* Passport */
.passport{display:grid;gap:var(--gap);padding-block:clamp(1.25rem,4vw,3rem)}
.passport .summary{display:grid;gap:1rem;align-content:start}
@media (min-width:75em){.passport{grid-template-columns:23rem 1fr;align-items:start}.passport .summary{position:sticky;top:5rem}}
.status{display:grid;grid-template-columns:auto 1fr;gap:.25rem .75rem;align-items:center;border-radius:var(--r);padding:1rem 1.125rem;background:var(--pass-soft);color:var(--pass)}
.status .icon{width:1.75rem;height:1.75rem;grid-row:span 2}
.status b{font-family:var(--display);font-size:1.375rem;font-weight:650}
.status span{color:var(--ink);font-size:.9375rem}
.sec-head{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;flex-wrap:wrap}
details.ing{border-top:1px solid var(--line)}
details.ing:last-of-type{border-bottom:1px solid var(--line)}
details.ing summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:.75rem;min-height:52px;padding:.5rem 0}
details.ing summary::-webkit-details-marker{display:none}
details.ing summary::after{content:"";width:.6rem;height:.6rem;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);margin:0 .25rem .25rem;flex:none;transition:transform .15s}
details.ing[open] summary::after{transform:rotate(-135deg);margin-bottom:-.15rem}
.ing-name{display:grid}.ing-name b{font-weight:650}
details.ing .body{padding:0 0 1rem;display:grid;gap:.75rem}
.kv{display:grid;grid-template-columns:minmax(7rem,30%) 1fr;gap:.375rem 1rem;font-size:.875rem;margin:0}
.kv dt{color:var(--muted)}.kv dd{margin:0}
.bars{display:grid;gap:.625rem}
.bar{display:grid;grid-template-columns:1fr auto;gap:.25rem .75rem;font-size:.875rem}
.bar .track{grid-column:1/-1;height:.5rem;border-radius:999px;background:var(--sunk);overflow:hidden}
.bar .track i{display:block;height:100%;background:var(--brand);border-radius:999px}
.bar.unknown .track i{background:repeating-linear-gradient(45deg,var(--muted),var(--muted) 3px,transparent 3px,transparent 6px)}
.timeline{list-style:none;margin:0;padding:0;display:grid;gap:0}
.timeline li{display:grid;grid-template-columns:3.75rem 1.25rem 1fr;gap:.75rem;padding-bottom:1rem;position:relative}
.timeline li::after{content:"";position:absolute;left:calc(3.75rem + .75rem + .5625rem);top:1.25rem;bottom:0;width:2px;background:var(--line)}
.timeline li:last-child::after{display:none}
.timeline .t{font-family:var(--mono);font-size:.875rem;color:var(--muted);padding-top:.05rem}
.timeline .dot{width:1.25rem;height:1.25rem;border-radius:50%;display:grid;place-items:center;background:var(--sunk);color:var(--muted)}
.timeline .dot.heat{background:var(--heat-soft);color:var(--heat)}.timeline .dot.cold{background:var(--cold-soft);color:var(--cold)}
.timeline .dot .icon{width:.8rem;height:.8rem}
.temp-heat{color:var(--heat)}.temp-cold{color:var(--cold)}
.seal{display:flex;flex-wrap:wrap;gap:.25rem 1rem;font-size:.8125rem;color:var(--muted);padding-top:.5rem}


@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
@media print{.site-header,.site-footer,.mock-bar,.preview,.btn{display:none!important}body{background:var(--print-paper);color:var(--print-ink)}.passport{grid-template-columns:1fr}.card{break-inside:avoid}}

/* Two columns with an aside (menu, checkout, account) */
.with-aside{display:grid;gap:var(--gap);padding-block:clamp(1.5rem,4vw,3rem)}
@media (min-width:56em){.with-aside{grid-template-columns:1fr 20rem;align-items:start}.with-aside>aside{position:sticky;top:5rem}}
.page-head{display:grid;gap:.75rem;padding-top:clamp(1.5rem,4vw,3rem)}
/* W74: every target at least 44 px tall (visual_design.md §5) without moving anything on the page: the header's links
   and logo sit in its 60 px row; the skip link shows only on focus; the seal's links, a card's "more" link and the
   footer's logo grow their hit area and give the extra height back as a negative margin. */
.nav a,.skip{min-height:var(--touch-min);display:inline-flex;align-items:center}
.site-header .logo{min-height:var(--touch-min)}
.seal a,.more,.site-footer .logo{min-height:var(--touch-min);margin-block:calc((var(--touch-min) - 1lh) / -2)}
.seal a{display:inline-flex;align-items:center}
