/* css/catalogue.css — rules for /catalogue/ only (loads after css/site.css, which supplies the tokens,
   the header, buttons and footer). Scoped to #site, so nothing here can reach the app. Not precached
   by the service worker: the app never shows this page. No 4-digit z-index (CHECK 1). */

/* standalone-page base: the homepage gets these from the app's styles.css, this page loads none of it */
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;background:#fff}
body{margin:0;background:#fff;color:#0E1116}
#site a,#site button,#site input{touch-action:manipulation}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

#site{--cat-bar:61px;--cat-ink:#2A313C;--cat-well-bg:#F4F3F0;--cat-icon:#8A93A5}

/* intro: title, lede, the search box and its live status */
#site .cat-intro{padding:clamp(32px,4.5vw,56px) 0 clamp(22px,3vw,34px);border-bottom:1px solid var(--site-line);background:var(--site-paper)}
#site .cat-intro h1{margin-bottom:14px;font-size:clamp(2.4rem,4vw + 1rem,4rem);line-height:1.04;letter-spacing:-.02em}
#site .cat-lede{max-width:40em;color:var(--site-muted);font-size:clamp(1.0625rem,.3vw + 1rem,1.1875rem)}
#site .cat-search{position:relative;display:block;max-width:760px;margin-top:24px}
#site .cat-search-icon{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:var(--site-muted);pointer-events:none}
#site .cat-search input{display:block;width:100%;height:58px;padding:0 54px 0 54px;border:1px solid rgba(11,27,63,.3);border-radius:8px;background:#fff;color:var(--site-ink);font:400 17px/1.2 var(--site-sans);-webkit-appearance:none;appearance:none}
#site .cat-search input::placeholder{color:#656D79;opacity:1}
#site .cat-search input::-webkit-search-cancel-button,#site .cat-search input::-webkit-search-decoration{-webkit-appearance:none;display:none}
#site .cat-search input:focus{border-color:var(--site-navy);outline:2px solid var(--site-navy);outline-offset:2px}
#site .cat-clear{position:absolute;right:9px;top:50%;transform:translateY(-50%);width:40px;height:40px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--site-navy);font:400 28px/1 var(--site-sans);cursor:pointer}
#site .cat-clear:hover{background:rgba(11,27,63,.08)}
#site .cat-status{min-height:1.65em;margin-top:12px;color:var(--site-muted);font-size:14px;font-weight:500}

/* layout: a sticky chip bar under the header on phones, a sticky sidebar from 1024px */
#site .cat-layout{padding-bottom:clamp(40px,5vw,64px)}
#site .cat-nav{position:sticky;top:var(--site-head);z-index:1;margin:0 -16px 8px;padding:0 16px;overflow-x:auto;border-bottom:1px solid var(--site-line);background:#fff;scrollbar-width:none;-webkit-overflow-scrolling:touch}
#site .cat-nav::-webkit-scrollbar{display:none}
#site .cat-nav-title{display:none}
#site .cat-nav ul{display:flex;gap:8px;width:max-content;padding:10px 0}
#site .cat-link{display:flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;border:1px solid var(--site-line);border-radius:999px;background:#fff;color:var(--site-ink);font-size:14px;font-weight:500;text-decoration:none;white-space:nowrap}
#site .cat-link:hover{border-color:rgba(11,27,63,.4)}
#site .cat-link-n{color:var(--site-muted);font-variant-numeric:tabular-nums}
#site .cat-link.is-active{border-color:var(--site-navy);background:var(--site-navy);color:#fff}
#site .cat-link.is-active .cat-link-n{color:rgba(255,255,255,.8)}
#site .cat-link.is-zero{display:none}

/* one section per category, every product shown */
/* section.cat-group, not .cat-group: it must out-rank site.css's  #site section[id]  scroll-margin rule */
#site section.cat-group{scroll-margin-top:calc(var(--site-head) + var(--cat-bar) + 12px)}
#site .cat-group+.cat-group{margin-top:clamp(28px,4vw,44px)}
#site .cat-group h2{display:flex;align-items:baseline;gap:12px;margin:18px 0 14px;padding-bottom:10px;border-bottom:1px solid var(--site-line);font-size:clamp(1.6rem,1.4vw + 1.1rem,2.1rem)}
#site .cat-count{color:var(--site-gold-ink);font:600 14px/1 var(--site-sans);letter-spacing:.04em;font-variant-numeric:tabular-nums}
#site .cat-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}

/* ═══ THE CARDS ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
   Children of every card, in order: .cat-photo | .cat-tile · .cat-head · .cat-body (only when there is something to say) · and, added at run
   time by js/quote-request.js, the button.qr-add. The WHOLE note is always shown: nothing in this file clamps, truncates or hides text, and the
   note is never smaller than 14.5px or paler than #2A313C. Three layouts share this markup:
     · a FIXED item (a ready-made product): on a phone a compact card (image well on the left, text and button on the right); from 720px a single
       "spec row" — well | code, name, size | Notes | button — so every row is as tall as its own content and nothing floats in empty space;
     · a lone CONFIGURABLE product (.cat-card-feature): a wide featured card — see below;
     · several configurable products in one category (.cat-grid-multi): a row of featured cards side by side.                                   */

/* the compact card (phones): well | head, body, button — and no well at all for a product that has no photo yet */
#site .cat-card{--cat-well:80px;display:grid;grid-template-columns:var(--cat-well) minmax(0,1fr);grid-template-rows:auto 1fr auto;row-gap:8px;overflow:hidden;border:1px solid var(--site-line);border-radius:6px;background:#fff;transition:border-color .2s,box-shadow .2s}
#site .cat-card:hover{border-color:rgba(11,27,63,.3);box-shadow:0 10px 28px rgba(11,27,63,.07)}
#site .cat-card.is-hidden,#site .cat-group.is-empty{display:none}

/* the image well: soft neutral ground, the photo contained at the top with its caption at the bottom, or the category icon */
#site .cat-photo,#site .cat-tile{grid-column:1;grid-row:1 / -1;position:relative;display:block;min-height:116px;margin:0;border-right:1px solid var(--site-line);background:var(--cat-well-bg)}
#site .cat-photo img{position:absolute;top:0;left:0;width:100%;height:100%;padding:10px 8px 34px;object-fit:contain;object-position:center top}
#site .cat-photo figcaption{position:absolute;left:4px;right:4px;bottom:7px;color:var(--site-muted);font-size:10.5px;line-height:1.25;letter-spacing:.01em;text-align:center}
#site .cat-tile{display:flex;align-items:flex-start;justify-content:center;padding-top:16px;color:var(--cat-icon)}
#site .cat-tile .cat-ic{width:32px;height:32px}

#site .cat-card > .cat-head{grid-column:2;grid-row:1;padding:12px 12px 0;overflow-wrap:break-word}
#site .cat-card > .cat-body{grid-column:2;grid-row:2;margin:0 12px;padding:8px 10px 10px;border:1px solid var(--site-line);border-radius:4px;background:var(--site-paper);overflow-wrap:break-word}
#site .cat-card > .qr-add{grid-column:2;grid-row:3}

#site .cat-code{margin:0 0 3px;color:var(--site-gold-ink);font:600 11.5px/1.2 var(--site-sans);letter-spacing:.12em;text-transform:uppercase}
#site .cat-code.cat-tag{display:inline-block;margin:0 0 10px;padding:4px 10px;border-radius:999px;background:var(--site-navy);color:#fff;letter-spacing:.1em}
#site .cat-card h3{margin:0 0 3px;color:var(--site-ink);font:600 16px/1.3 var(--site-sans);letter-spacing:0}
#site .cat-meta{margin:0;color:#4A5260;font-size:14px;line-height:1.45}
/* the labels above the notes: small gold caps, clearly a heading for what follows */
#site .cat-label{margin:0 0 4px;color:var(--site-gold-ink);font:600 11.5px/1.2 var(--site-sans);letter-spacing:.12em;text-transform:uppercase}
#site .cat-label:not(:first-child){margin-top:10px}
/* the notes: 14.5px, near-black on the pale panel (about 12:1) — the owner's first priority, so never smaller or paler than this */
#site .cat-notes,#site .cat-lead{margin:0;color:var(--cat-ink);font-size:14.5px;line-height:1.55}

/* the specification rows. In a narrow card each row reads "Label: value" (the most compact form); from 720px, where there is room, the
   labels line up in one column with a hairline per row (see the 720px block) */
#site .cat-specs{margin:0;font-size:14px;line-height:1.5}
#site .cat-specs > div{padding:4px 0;border-top:1px solid var(--site-line)}
#site .cat-specs > div:first-child{padding-top:0;border-top:0}
#site .cat-specs > div:last-child{padding-bottom:0}
#site .cat-specs dt,#site .cat-specs dd{display:inline}
#site .cat-specs dt{color:var(--site-ink);font-weight:600}
#site .cat-specs dt::after{content:": "}
#site .cat-specs dd{color:var(--cat-ink)}
/* a configurable card's "Learn more" link to its product page (SEO build, 2026-10-22): under the specification rows, inside the same panel */
#site .cat-learn{margin:12px 0 0;font-size:14.5px;line-height:1.5}

/* a CONFIGURABLE card on a phone: the normal stacked card at the full width — photo on top, then the text, then the button */
#site .cat-card-feature{grid-column:1 / -1;display:flex;flex-direction:column}
#site .cat-card-feature > .cat-photo,#site .cat-card-feature > .cat-tile{aspect-ratio:16/9;min-height:0;border-right:0;border-bottom:1px solid var(--site-line)}
#site .cat-card-feature > .cat-photo img{padding:12px 14px 30px;object-position:center}
#site .cat-card-feature > .cat-photo figcaption{left:14px;right:auto;bottom:9px;font-size:11px;text-align:left}
#site .cat-card-feature > .cat-tile{aspect-ratio:3/1;align-items:center;padding-top:0}
#site .cat-card-feature > .cat-tile .cat-ic{width:48px;height:48px}
#site .cat-card-feature > .cat-head{padding:14px 14px 0}
#site .cat-card-feature > .cat-body{margin:12px 14px 0}

/* phones: a fixed item with no photo yet has no image well at all — the text uses the whole width of the card, and its "Notes" label runs in
   at the start of the note instead of taking a line of its own */
@media (max-width:719px){
  #site .cat-grid{gap:8px}
  #site .cat-card:not(.cat-card-feature) > .cat-body > .cat-label:first-child{display:inline;margin:0 8px 0 0}
  /* the name first, then the code and the size line side by side — one line shorter than code / name / size */
  #site .cat-card:not(.cat-card-feature) > .cat-head{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:10px;align-items:baseline}
  #site .cat-card:not(.cat-card-feature) > .cat-head > h3{grid-column:1 / -1;grid-row:1}
  #site .cat-card:not(.cat-card-feature) > .cat-head > .cat-code{grid-column:1;grid-row:2;margin:0}
  #site .cat-card:not(.cat-card-feature) > .cat-head > .cat-meta{grid-column:2;grid-row:2}
  /* beside a photo the text column is narrower, so the code and the size line each keep a row (no orphaned "pc") */
  #site .cat-card.has-photo:not(.cat-card-feature) > .cat-head > .cat-code{grid-column:1 / -1;grid-row:2}
  #site .cat-card.has-photo:not(.cat-card-feature) > .cat-head > .cat-meta{grid-column:1 / -1;grid-row:3}
  /* a configurable card: the "Configurable" tag shares the name's line (at the right) instead of taking a row of its own */
  #site .cat-card-feature > .cat-head{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:10px;align-items:center}
  #site .cat-card-feature > .cat-head > h3{grid-column:1;grid-row:1;margin:0}
  #site .cat-card-feature > .cat-head > .cat-tag{grid-column:2;grid-row:1;margin:0}
  #site .cat-card-feature > .cat-head > .cat-lead{grid-column:1 / -1;grid-row:2;margin-top:8px}
  #site .cat-card:not(.cat-card-feature) > .cat-body > .cat-label:first-child + .cat-notes{display:inline}
  #site .cat-card:not(.has-photo):not(.cat-card-feature){grid-template-columns:minmax(0,1fr)}
  #site .cat-card:not(.has-photo):not(.cat-card-feature) > .cat-tile{display:none}
  #site .cat-card:not(.has-photo):not(.cat-card-feature) > .cat-head,#site .cat-card:not(.has-photo):not(.cat-card-feature) > .cat-body,#site .cat-card:not(.has-photo):not(.cat-card-feature) > .qr-add{grid-column:1}
}

/* no results */
#site .cat-empty{max-width:34rem;padding:44px 0 12px}
#site .cat-empty-title{margin-bottom:10px;color:var(--site-navy);font:500 1.5rem/1.3 var(--site-serif)}
#site .cat-empty p{color:var(--site-muted)}
#site .cat-empty-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}

/* "can't find it?" call to action */
#site .cat-cta{padding:clamp(44px,6vw,72px) 0}
#site .cat-cta-in{display:grid;grid-template-columns:minmax(0,1fr);gap:28px;align-items:center}
#site .cat-cta-actions{display:flex;flex-wrap:wrap;align-items:center;gap:18px 26px}
#site .cat-cta-or{color:var(--site-muted);font-size:15px}
#site .cat-cta-or a{font-weight:600;text-decoration:none}
#site .cat-cta-or a:hover{text-decoration:underline;text-decoration-color:var(--site-gold);text-underline-offset:4px}

/* back to top */
#site .cat-top{position:fixed;right:max(16px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));z-index:2;display:grid;place-items:center;width:48px;height:48px;padding:0;border:1px solid rgba(11,27,63,.22);border-radius:50%;background:#fff;color:var(--site-navy);box-shadow:0 8px 24px rgba(11,27,63,.14);cursor:pointer;transition:background-color .2s,color .2s}
#site .cat-top:hover{background:var(--site-navy);color:#fff}

@media (min-width:720px){
  #site .cat-grid{gap:8px}
  /* a FIXED item is one spec row: well | code, name, size | Notes | button. The columns are shares of the row (not of their content), so the
     Notes column starts at the same x in every row; the code / name / size column never gets narrower than the size line (244px); the
     button column is reserved before the script adds the button, so nothing jumps. */
  #site .cat-card{--cat-well:88px;grid-template-columns:var(--cat-well) minmax(244px,40fr) minmax(0,46fr) minmax(172px,auto);grid-template-rows:auto;row-gap:0}
  #site .cat-photo,#site .cat-tile{grid-row:1;min-height:92px}
  #site .cat-photo{min-height:112px}
  #site .cat-tile{align-items:center;padding-top:0}
  #site .cat-card > .cat-head{grid-column:2;grid-row:1;align-self:center;padding:12px 12px 12px 16px}
  #site .cat-card > .cat-body{grid-column:3;grid-row:1;align-self:center;margin:10px 0;padding:9px 12px 10px}
  #site .cat-card > .qr-add{grid-column:4;grid-row:1;align-self:center;white-space:nowrap}
  /* spec rows with the labels in one column (the two bakery cabinets carry them) */
  #site .cat-specs{display:grid;grid-template-columns:max-content minmax(0,1fr)}
  #site .cat-specs > div{display:contents}
  #site .cat-specs dt,#site .cat-specs dd{display:block;padding:5px 0;border-top:1px solid var(--site-line)}
  #site .cat-specs dt{padding-right:14px}
  #site .cat-specs dt::after{content:none}
  #site .cat-specs > div:first-child > dt,#site .cat-specs > div:first-child > dd{padding-top:0;border-top:0}
  #site .cat-specs > div:last-child > dd,#site .cat-specs > div:last-child > dt{padding-bottom:0}

  /* THE FEATURED CARD (a lone configurable product): a wide row — the photo on the left (about 45%, contained on the soft neutral ground, with
     its caption) and on the right the tag, the name in the serif, the description, the labelled Specifications and "Configure & add", centred. */
  #site .cat-card-feature{grid-column:1 / -1;display:grid;grid-template-columns:minmax(0,45fr) minmax(0,55fr);grid-template-rows:minmax(22px,1fr) auto auto auto minmax(22px,1fr);row-gap:0}
  #site .cat-card-feature > .cat-photo,#site .cat-card-feature > .cat-tile{grid-column:1;grid-row:1 / -1;aspect-ratio:auto;min-height:300px;border-right:1px solid var(--site-line);border-bottom:0}
  #site .cat-card-feature > .cat-photo img{padding:20px 20px 36px}
  #site .cat-card-feature > .cat-photo figcaption{left:20px;bottom:12px}
  #site .cat-card-feature > .cat-tile .cat-ic{width:64px;height:64px}
  #site .cat-card-feature > .cat-head{grid-column:2;grid-row:2;align-self:auto;padding:0 clamp(22px,3vw,40px)}
  #site .cat-card-feature > .cat-body{grid-column:2;grid-row:3;align-self:auto;margin:16px clamp(22px,3vw,40px) 0;padding:10px 14px 12px}
  #site .cat-card-feature > .qr-add{grid-column:2;grid-row:4;align-self:auto;justify-self:start}
  #site .cat-card-feature h3{margin:0 0 10px;color:var(--site-navy);font:500 clamp(1.7rem,1.1vw + 1.35rem,2.15rem)/1.1 var(--site-serif);font-optical-sizing:auto;letter-spacing:-.015em}
  #site .cat-card-feature .cat-lead{max-width:36em;font-size:15.5px;line-height:1.6}
  #site .cat-card-feature .cat-specs{font-size:14.5px}
}
@media (min-width:900px){
  #site .cat-cta-in{grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:72px}
}
/* SEVERAL configurable products in one category (a .cat-grid-multi): where the column is wide enough for three, they sit side by side as stacked
   featured cards (photo on top, 4:3; serif name; the Specifications panel grows so the cards in the row are one height). Narrower than that the
   wide featured rows above take over. */
@media (min-width:820px) and (max-width:1023px),(min-width:1100px){
  #site .cat-grid-multi{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
  #site .cat-grid-multi > .cat-card-feature{grid-column:auto;display:flex;flex-direction:column}
  #site .cat-grid-multi > .cat-card-feature > .cat-photo,#site .cat-grid-multi > .cat-card-feature > .cat-tile{aspect-ratio:4/3;min-height:0;border-right:0;border-bottom:1px solid var(--site-line)}
  #site .cat-grid-multi > .cat-card-feature > .cat-photo img{padding:12px 12px 30px}
  #site .cat-grid-multi > .cat-card-feature > .cat-photo figcaption{left:12px;bottom:8px}
  #site .cat-grid-multi > .cat-card-feature > .cat-tile .cat-ic{width:56px;height:56px}
  #site .cat-grid-multi > .cat-card-feature > .cat-head{padding:16px 16px 0}
  #site .cat-grid-multi > .cat-card-feature > .cat-body{flex:1;margin:14px 16px 0;padding:10px 12px 12px}
  #site .cat-grid-multi > .cat-card.cat-card-feature > .qr-add{margin:14px 16px 16px}
  #site .cat-grid-multi h3{font-size:clamp(1.45rem,.7vw + 1.2rem,1.7rem)}
  #site .cat-grid-multi .cat-lead{font-size:14.5px;line-height:1.55}
  #site .cat-grid-multi .cat-specs{display:block;font-size:14px}
  #site .cat-grid-multi .cat-specs > div{display:block;padding:5px 0;border-top:1px solid var(--site-line)}
  #site .cat-grid-multi .cat-specs > div:first-child{padding-top:0;border-top:0}
  #site .cat-grid-multi .cat-specs > div:last-child{padding-bottom:0}
  #site .cat-grid-multi .cat-specs dt,#site .cat-grid-multi .cat-specs dd{display:inline;padding:0;border:0}
  #site .cat-grid-multi .cat-specs dt::after{content:": "}
}
@media (min-width:1024px){
  #site .cat-layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:clamp(40px,5vw,72px);align-items:start;padding-top:clamp(28px,3.4vw,44px)}
  #site .cat-nav{top:calc(var(--site-head) + 24px);max-height:calc(100vh - var(--site-head) - 48px);max-height:calc(100dvh - var(--site-head) - 48px);margin:0;padding:0;overflow-x:visible;overflow-y:auto;border-bottom:0}
  #site .cat-nav-title{display:block;margin-bottom:12px;color:var(--site-muted);font:600 11px/1.4 var(--site-sans);letter-spacing:.16em;text-transform:uppercase}
  #site .cat-nav ul{display:block;width:auto;padding:0}
  #site .cat-link{justify-content:space-between;min-height:44px;padding:0 4px 0 16px;border:0;border-left:2px solid var(--site-line);border-radius:0;background:transparent;font-size:15px}
  #site .cat-link:hover{border-left-color:rgba(201,162,39,.65);color:var(--site-navy)}
  #site .cat-link.is-active{border-left-color:var(--site-gold);background:transparent;color:var(--site-navy);font-weight:600}
  #site .cat-link.is-active .cat-link-n{color:var(--site-gold-ink)}
  #site section.cat-group{scroll-margin-top:calc(var(--site-head) + 24px)}
  #site .cat-group:first-child h2{margin-top:0}
}
@media (prefers-reduced-motion:reduce){
  #site .cat-card,#site .cat-top,#site .cat-link{transition:none}
}
