/* FizzyTools site pages (home + 404). Design guide v2.0 "Fresh Can + fizz" (D39), tokens and D31 sizes copied (D12: copy, never import).
   Built from the approved home mockup v3 (docs/apps/site/mockup.html). Fonts self-hosted (OFL). */
@font-face{font-family:"DM Sans";src:url("/fonts/dm-sans-latin.woff2") format("woff2");font-weight:400 700;font-style:normal;font-display:swap}
@font-face{font-family:"Bricolage Grotesque";src:url("/fonts/bricolage-grotesque-latin.woff2") format("woff2");font-weight:200 800;font-style:normal;font-display:swap}
/* Layout: FizzyTools home = white page, bento hero (lime headline tile + pale-teal can tile, both fizzing), tool catalogue as category rows (D29 wide), "Why" row, footer.
   Tokens copied from design guide v2.0 "Fresh Can + fizz" (D39) + D31 "Smallest" scale (D12: copy, never import). */
:root{
  --color-page:#FFFFFF; --color-surface:#F1F5F3; --color-surface-alt:#FFFFFF;
  --color-primary:#0E1A17; --color-primary-strong:#24332F; --color-on-primary:#C8F53B;
  --color-primary-text:#0A6F66; --color-primary-line:#0E8F83; --color-primary-soft:#E6F9B0;
  --color-pop:#C8F53B; --color-pop-tile:#D7F3EE; --color-hot:#FF6B35; --color-soon:#FFE7DC; --color-on-soon:#9A3412;
  --color-badge:#C8F53B; --color-on-badge:#0E1A17; --color-ink:#0E1A17; --color-ink-muted:#4D5E59; --color-border:#D6E0DC; --color-note:#FEF9C3;
  --field-on-pop:#FFFFFF; --field-on-tile:#0E8F83; --can-body:#0E8F83;
  --font-display:"Bricolage Grotesque", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-body:"DM Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --fs-sm:11.5px; --fs-ui:12px; --fs-body:13px; --fs-lead:14px; --fs-h3:14px; --fs-h2:16px; --fs-h1:22px; --ctl-h:28px;
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:24px; --space-6:32px; --space-7:48px;
  --radius-md:14px; --radius-lg:24px; --radius-xl:28px; --radius-pill:999px;
  --shadow-md:0 14px 30px rgb(14 26 23 / .10);
  --glow:0 0 0 3px #C8F53B,0 0 34px rgb(200 245 59 / .75);
  --can-metal:#C9D4D0; --can-metal-dark:#93A69F; --can-tab:#E8EEEB; --can-light:#FFFFFF;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --color-page:#0B1311; --color-surface:#15211E; --color-surface-alt:#0F1A17;
  --color-primary:#C8F53B; --color-primary-strong:#D8FA6E; --color-on-primary:#0E1A17;
  --color-primary-text:#5FE0D2; --color-primary-line:#3FD3C3; --color-primary-soft:#22361C;
  --color-pop:#C8F53B; --color-pop-tile:#14A394; --color-hot:#FF8A5C; --color-soon:#3A2418; --color-on-soon:#FFB08A;
  --color-badge:#C8F53B; --color-on-badge:#0E1A17; --color-ink:#ECF6F1; --color-ink-muted:#9BB0A9; --color-border:#26372F; --color-note:#2E2A0B;
  --field-on-pop:#FFFFFF; --field-on-tile:#FFFFFF; --can-body:#0E1A17;
  --shadow-md:0 14px 30px rgb(0 0 0 / .4); --glow:0 0 0 3px #C8F53B,0 0 36px rgb(200 245 59 / .45); color-scheme:dark}}
:root[data-theme="dark"]{
  --color-page:#0B1311; --color-surface:#15211E; --color-surface-alt:#0F1A17;
  --color-primary:#C8F53B; --color-primary-strong:#D8FA6E; --color-on-primary:#0E1A17;
  --color-primary-text:#5FE0D2; --color-primary-line:#3FD3C3; --color-primary-soft:#22361C;
  --color-pop:#C8F53B; --color-pop-tile:#14A394; --color-hot:#FF8A5C; --color-soon:#3A2418; --color-on-soon:#FFB08A;
  --color-badge:#C8F53B; --color-on-badge:#0E1A17; --color-ink:#ECF6F1; --color-ink-muted:#9BB0A9; --color-border:#26372F; --color-note:#2E2A0B;
  --field-on-pop:#FFFFFF; --field-on-tile:#FFFFFF; --can-body:#0E1A17;
  --shadow-md:0 14px 30px rgb(0 0 0 / .4); --glow:0 0 0 3px #C8F53B,0 0 36px rgb(200 245 59 / .45); color-scheme:dark}
@media (max-width:1023px){:root{--fs-ui:14px;--fs-body:14px;--fs-lead:15px;--fs-sm:12px;--fs-h3:15px;--fs-h2:17px}}
@media (any-pointer:coarse),(max-width:599px){:root{--ctl-h:44px}}

*{box-sizing:border-box}
body{margin:0;background:var(--color-page);color:var(--color-ink);font-family:var(--font-body);font-size:var(--fs-body);line-height:1.5;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:0 var(--space-5)}
@media (min-width:1024px){body{padding-left:max(32px,env(safe-area-inset-left,0px));padding-right:max(32px,env(safe-area-inset-right,0px))}}
h1,h2,h3{font-family:var(--font-display);text-wrap:balance;margin:0;color:var(--color-ink)}
p{margin:0}
a{color:var(--color-primary-text)}
:focus-visible{outline:3px solid var(--color-primary-line);outline-offset:2px;border-radius:6px}
.wrap{max-width:1760px;margin-inline:auto}


/* header (same as the tools) */
header.site{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);height:56px}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--color-ink);font-family:var(--font-display);font-weight:800;font-size:1.25rem;letter-spacing:-.01em}
.logo img{width:28px;height:28px;flex:none}
.icon-btn{min-width:var(--ctl-h);height:var(--ctl-h);font:inherit;font-size:var(--fs-ui);font-weight:500;border-radius:var(--radius-pill);border:1px solid var(--color-border);
  background:var(--color-surface);color:var(--color-ink);display:inline-flex;align-items:center;justify-content:center;padding:0 12px;cursor:pointer}
.icon-btn:hover{border-color:var(--color-primary-line)}

/* hero: bento tiles (design guide v2.0) with a live bubble field in each tile */
.hero{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:var(--space-3);padding-block:var(--space-3) var(--space-6)}
.tile{position:relative;overflow:hidden;border-radius:var(--radius-xl)}
.tile > :not(canvas){position:relative;z-index:1}
.tile canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.hero-txt{background:var(--color-pop);color:#0E1A17;padding:clamp(20px,3vw,36px);display:grid;gap:var(--space-3);align-content:center}
.hero-txt h1{font-size:var(--fs-h1);font-weight:800;line-height:1.2;color:#0E1A17}
.hero-txt p{font-size:var(--fs-lead);color:#24332F;max-width:58ch}
.chips{display:flex;flex-wrap:wrap;gap:var(--space-2);padding:0;margin:0;list-style:none}
.chips li{display:inline-flex;align-items:center;padding:4px 12px;border-radius:var(--radius-pill);background:#FFFFFF;color:#0E1A17;font-size:var(--fs-sm);font-weight:700}
.hero-art{background:var(--color-pop-tile);display:grid;place-items:center;min-height:180px}
.hero-art .can{width:96px;height:auto}
@media (max-width:699px){.hero{grid-template-columns:1fr}.hero-art{min-height:150px}.hero-art .can{width:76px}}
/* soda can (shared with the tools' loader); here it bobs with a fixed fill */
.can .body{fill:var(--can-body)}.can .liquid{fill:var(--color-pop);transform-box:fill-box;transform-origin:50% 100%;transform:scaleY(var(--fill,.72))}
.can .shine{fill:var(--can-light);opacity:.22}.can .top{fill:var(--can-metal)}.can .rim,.can .bottom{fill:var(--can-metal-dark)}.can .tab{fill:var(--can-tab)}
.can .word{font-family:var(--font-display);font-weight:800;font-size:20px;fill:var(--can-light);letter-spacing:.04em}
.can .wob{transform-box:fill-box;transform-origin:50% 100%;animation:bob 3.2s ease-in-out infinite}
.can .ib circle{fill:var(--can-light);opacity:0;animation:inrise var(--d) linear var(--dl) infinite}
@keyframes bob{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-6px) rotate(3deg)}}
@keyframes inrise{0%{transform:translateY(0);opacity:0}20%{opacity:.9}100%{transform:translateY(-130px);opacity:0}}

/* catalogue */
.catalogue{display:grid;gap:var(--space-6)}
.cat{display:grid;gap:var(--space-3)}
.cat-head{display:flex;align-items:baseline;gap:var(--space-3);flex-wrap:wrap}
.cat-head h2{font-size:var(--fs-h2);font-weight:800}
.cat-head span{font-size:var(--fs-sm);color:var(--color-ink-muted)}
/* up to 4 columns: rows fill on desktop, cards never get too narrow for name + badge */
.grid{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(max(260px,calc((100% - 3 * var(--space-3)) / 4)),1fr))}
.tcard{height:100%;display:grid;grid-template-columns:40px 1fr;gap:var(--space-3);align-items:start;padding:var(--space-4);border-radius:var(--radius-md);text-decoration:none;color:inherit}
.tcard .ticon{width:40px;height:40px;border-radius:12px;display:grid;place-items:center}
.tcard .ticon svg{width:22px;height:22px}
.tname{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;font-family:var(--font-display);font-weight:800;font-size:var(--fs-h3);line-height:1.3}
.tdesc{display:block;margin-top:2px;color:var(--color-ink-muted);font-size:var(--fs-body)}
.live{background:var(--color-surface);border:1px solid transparent;transition:box-shadow .18s,transform .18s cubic-bezier(.3,1.6,.5,1)}
.live .ticon{background:var(--color-pop);color:#0E1A17}
.live .tname{color:var(--color-primary-text)}
.live .tname::after{content:"→";font-family:var(--font-body);font-weight:700;transition:transform .15s}
.live:hover,.live:focus-visible{box-shadow:var(--glow);transform:translateY(-3px)}
.live:hover .tname::after{transform:translateX(3px)}
.soon{background:var(--color-page);border:1px dashed var(--color-border)}
.soon .ticon{background:var(--color-surface);color:var(--color-primary-text)}
.soon .tname{color:var(--color-ink)}
.badge{display:inline-flex;align-items:center;padding:1px 8px;border-radius:var(--radius-pill);background:var(--color-soon);color:var(--color-on-soon);font-family:var(--font-body);font-weight:700;font-size:var(--fs-sm)}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.live:hover{transform:none}}

/* why */
.why{margin-top:var(--space-7);display:grid;gap:var(--space-4)}
.why h2{font-size:var(--fs-h2);font-weight:800}
.why ul{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.why li{display:grid;grid-template-columns:32px 1fr;gap:var(--space-3);align-items:start}
.why .dot{width:32px;height:32px;border-radius:50%;background:var(--color-pop);color:#0E1A17;display:grid;place-items:center}
.why .dot svg{width:18px;height:18px}
.why h3{font-size:var(--fs-h3);font-weight:800}
.why p{color:var(--color-ink-muted);max-width:44ch}

footer{margin-top:var(--space-7);border-top:1px solid var(--color-border);padding-block:var(--space-5) 0;display:flex;flex-wrap:wrap;gap:var(--space-3);justify-content:space-between;font-size:var(--fs-sm);color:var(--color-ink-muted)}

/* privacy page (PRJ39): one reading column, 70ch (D29 reading text) */
.doc-body{max-width:70ch;margin-top:var(--space-6)}
.doc-body h1{font-size:var(--fs-h1);font-weight:800;line-height:1.2}
.doc-body .updated{color:var(--color-ink-muted);font-size:var(--fs-sm);margin-top:var(--space-2)}
.doc-body h2{font-size:var(--fs-h2);font-weight:800;margin-top:var(--space-6)}
.doc-body p{margin-top:var(--space-2);line-height:1.6}

/* 404 page: one centred card (a standalone page, slightly larger type) */
body.page-404{min-height:100vh;display:grid;place-items:center;font-size:15px;padding-block:32px}
.card{position:relative;max-width:440px;width:100%;background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);
  padding:32px;display:grid;gap:12px;justify-items:start;overflow:hidden}
.card::before,.card::after{content:"";position:absolute;border-radius:50%;pointer-events:none}
.card::before{width:72px;height:72px;right:-18px;top:-18px;background:var(--color-pop);opacity:.9}
.card::after{width:28px;height:28px;right:44px;top:36px;background:var(--color-primary-line);opacity:.8}
.card .logo{margin-bottom:8px}
.card h1{font-weight:800;font-size:24px;line-height:1.2}
.card p{color:var(--color-ink-muted);max-width:60ch}
.btn{margin-top:8px;display:inline-flex;align-items:center;min-height:44px;padding:0 20px;border-radius:var(--radius-pill);text-decoration:none;
  background:var(--color-primary);color:var(--color-on-primary);font-weight:700}
.btn:hover{background:var(--color-primary-strong)}
