/* QCK site — theme system + bento grid + glass widgets + editor chrome.
   Lifted from nxtwk's liquid-glass bento. A "theme" = a token scope below;
   add a new [data-theme="x"] block to add a theme. */
/* ── self-hosted variable fonts (served from /fonts) ── */
@font-face { font-family:'Satoshi'; src:url(/fonts/Satoshi-Variable.woff2) format('woff2'); font-weight:300 900; font-display:swap; }
@font-face { font-family:'Mona Sans'; src:url(/fonts/MonaSans-VF.woff2) format('woff2'); font-weight:200 900; font-stretch:75% 125%; font-display:swap; }
@font-face { font-family:'Montserrat'; src:url(/fonts/Montserrat.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'Space Grotesk'; src:url(/fonts/SpaceGrotesk.woff2) format('woff2'); font-weight:300 700; font-display:swap; }
@font-face { font-family:'Fraunces'; src:url(/fonts/Fraunces.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'Awesome Serif'; src:url(/fonts/AwesomeSerif-VF.woff2) format('woff2'); font-weight:100 700; font-style:normal; font-display:swap; }
@font-face { font-family:'Awesome Serif'; src:url(/fonts/AwesomeSerif-Italic-VF.woff2) format('woff2'); font-weight:100 700; font-style:italic; font-display:swap; }
@font-face { font-family:'Victor Mono'; src:url(/fonts/VictorMono.woff2) format('woff2'); font-weight:100 700; font-display:swap; }
@font-face { font-family:'Inter'; src:url(/fonts/Inter.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'Anton'; src:url(/fonts/Anton.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'Pixelify Sans'; src:url(/fonts/PixelifySans.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'Sora'; src:url(/fonts/Sora.woff2) format('woff2'); font-weight:100 800; font-display:swap; }
@font-face { font-family:'JetBrains Mono'; src:url(/fonts/JetBrainsMono.woff2) format('woff2'); font-weight:100 800; font-display:swap; }
@font-face { font-family:'Bricolage Grotesque'; src:url(/fonts/Bricolage.woff2) format('woff2'); font-weight:200 800; font-display:swap; }
@font-face { font-family:'Instrument Serif'; src:url(/fonts/InstrumentSerif.woff2) format('woff2'); font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'Instrument Serif'; src:url(/fonts/InstrumentSerif-Italic.woff2) format('woff2'); font-weight:400; font-style:italic; font-display:swap; }
@font-face { font-family:'Space Mono'; src:url(/fonts/SpaceMono.woff2) format('woff2'); font-weight:400 700; font-display:swap; }
@font-face { font-family:'Gabarito'; src:url(/fonts/Gabarito.woff2) format('woff2'); font-weight:400 900; font-display:swap; }
@font-face { font-family:'QCK Area'; src:url(/fonts/ic-area.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Ashford'; src:url(/fonts/ic-fontspringdemoashf.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Bentona'; src:url(/fonts/ic-bentonawilson.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Benzin'; src:url(/fonts/ic-benzinregular.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Causten'; src:url(/fonts/ic-caustenregular.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Chloe'; src:url(/fonts/ic-chloe.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK F37 Moon'; src:url(/fonts/ic-f37moon.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Fifties'; src:url(/fonts/ic-vvdsfifties.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Flatline'; src:url(/fonts/ic-flatlinesans.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Genty'; src:url(/fonts/ic-gentydemo.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Growth'; src:url(/fonts/ic-growth.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Gunterz Round'; src:url(/fonts/ic-fontspringdemogunt.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Gunterz'; src:url(/fonts/ic-gunterz.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Inge'; src:url(/fonts/ic-inge.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Kapra Neue'; src:url(/fonts/ic-kapraneuepro.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Lapoya'; src:url(/fonts/ic-lapoya.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Lemon'; src:url(/fonts/ic-lemon.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Love'; src:url(/fonts/ic-love.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Mathreal'; src:url(/fonts/ic-mathreal.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Morning'; src:url(/fonts/ic-morningmemories.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Neiko'; src:url(/fonts/ic-neiko.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Nimbus'; src:url(/fonts/ic-nimbus.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Didot'; src:url(/fonts/ic-nndidotmodernstd.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Right Slab'; src:url(/fonts/ic-pprightslab.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Runalto'; src:url(/fonts/ic-runalto.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Sigurd'; src:url(/fonts/ic-sigurd.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Simplicité'; src:url(/fonts/ic-hvsimplicite.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Singleton'; src:url(/fonts/ic-singleton.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Swell'; src:url(/fonts/ic-swell.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Versailles'; src:url(/fonts/ic-versailles.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
@font-face { font-family:'QCK Voyage'; src:url(/fonts/ic-voyage.woff2) format('woff2'); font-weight:100 900; font-display:swap; }
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
:root {
  --gutter: clamp(12px, 3vw, 26px);
  --maxw: 1100px;
  /* QCK app chrome — FIXED, never follows the site theme */
  --qck: #FB5A2D;
  --qck-ink: #1a0a04;
  --qck-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  /* page background (per-site) */
  --page-bg: #07070a;
  /* site-theme fallbacks (the real values are injected on .wrap) */
  --ink: #F4F2EE; --ink-dim: rgba(244,242,238,0.62); --ink-faint: rgba(244,242,238,0.34);
  --hair: rgba(255,255,255,0.10); --accent: #FB5A2D; --on-accent: #1a0a04;
  --card-bg: rgba(255,255,255,0.06); --card-border: rgba(255,255,255,0.14);
  --card-shadow: 0 22px 50px -24px rgba(0,0,0,0.55); --radius: 30px; --gap: 14px; --blur: 22px;
  --font: var(--qck-font);
}
/* ------------------------------- base ------------------------------- */
body {
  min-height: 100dvh;
  background: var(--page-bg);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  font: 16px/1.5 var(--qck-font);           /* chrome default font */
  -webkit-font-smoothing: antialiased;
  padding: var(--gutter);
  transition: background-color .3s;
}
a { color: inherit; }
/* the SITE CANVAS — theme tokens are injected here, so the site changes but the
   QCK chrome (toolbar, modals) outside it never does */
.wrap {
  max-width: var(--maxw); margin: 0 auto;
  color: var(--ink);
  font-family: var(--font);
  container-type: inline-size;            /* so device preview triggers the real layout */
  transition: max-width .45s cubic-bezier(.32,.72,0,1);
}
/* leave room under the last block so the floating editor bar never covers it (editor only, not preview) */
body.is-owner:not(.preview) .wrap { padding-bottom: 96px; }
/* device preview (desktop only) — constrain the canvas width */
body.dev-mobile .wrap { max-width: 400px; }
body.dev-tablet .wrap { max-width: 800px; }
/* site header (logo + name) */
.site-head {
  display: flex; align-items: center; gap: 14px;
  padding: 8px 4px 22px;
}
.site-logo {
  width: 48px; height: 48px; border-radius: 14px; object-fit: cover;
  background: var(--card-bg); border: 1px solid var(--card-border);
  display: grid; place-items: center; font-weight: 700; font-size: 20px;
}
.site-id { min-width: 0; }
.site-name { font-family: var(--h1-font, var(--font)); font-size: clamp(20px, 4vw, 30px); font-weight: 650; letter-spacing: -0.02em; }
.site-tagline { font-family: var(--ds-font, var(--font)); color: var(--ink-dim); font-size: clamp(13px, 2vw, 15px); margin-top: 2px; }
/* ------------------------------- grid ------------------------------- */
/* nxtwk-style bento: 12 cols + a FIXED row track so width and height are
   independent tiers. Height tiers span whole rows, so "1 tall = 2 short
   stacked" always lines up (4 rows + 3 gaps === two ×(2 rows + 1 gap) + gap). */
.qck-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr)); /* minmax(0,..) prevents min-content blowout */
  grid-auto-rows: var(--row, 94px);
  grid-auto-flow: row dense;
  gap: var(--gap);
}
/* width tiers: small=4 (1/3) · medium=8 (2/3) · large=12 (full) */
.w { grid-column: span 8; min-width: 0; }
.w.s { grid-column: span 4; }
.w.m { grid-column: span 8; }
.w.l { grid-column: span 12; }
/* height tiers: compact · short · medium · tall (every .w carries exactly one) */
.w.h-xs { grid-row: span 1; }
.w.h-s { grid-row: span 2; }
.w.h-m { grid-row: span 3; }
.w.h-l { grid-row: span 4; }
/* v23: the portrait tier. Additive — every span above is unchanged, so nothing that already
   exists moves. 7 rows = 742px, which at the narrow width is the 0.5-ish portrait the widgets
   were drawn against. */
.w.h-xl { grid-row: span 8; }
/* mobile: single column. Height tiers still apply (short/medium/tall) so the height
   tool works on the phone too — a min-height per tier, content can grow past it. */
@container (max-width: 720px) {
  .qck-grid { grid-auto-rows: auto; }
  .w, .w.s, .w.m, .w.l { grid-column: 1 / -1; }
  .w.h-xs, .w.h-s, .w.h-m, .w.h-l, .w.h-xl { grid-row: auto; }
  .w.h-xs { min-height: 0; }
  .w.h-s { min-height: 150px; }
  .w.h-m { min-height: 240px; }
  .w.h-l { min-height: 360px; }
}
/* ===== BENTO (P1): 3-col positioned grid · fixed square-ish cells · gaps show the themed backdrop ===== */
#grid.bento { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-auto-rows: var(--bcell, 300px); grid-auto-flow: row dense; gap: 20px; max-width: 1200px; margin: 0 auto; }
#grid.bento .w { margin: 0; width: auto; min-width: 0; min-height: 0; height: auto; }
#grid.bento .w > .card, #grid.bento .w > .wg-image, #grid.bento .w > .wg-gallery, #grid.bento .w > .wg-map, #grid.bento .w > .wg-header, #grid.bento .w > .wg-hero { height: 100%; min-height: 0; }
/* filler tile — one of the business's photos, fills a leftover slot so the grid is never holey */
#grid.bento .wg-filler { height: 100%; border-radius: var(--radius, 20px); background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--accent, #FB5A2D) 14%, rgba(255,255,255,0.045)); box-shadow: inset 0 1px 0 rgba(255,255,255,.08); }
#grid.bento .bx-filler[data-filler] { opacity: .96; }
/* layout gallery picker */
.gp-modal { max-width: 540px; width: 92vw; }
.gp-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 2px; }
.gp-item { display: flex; flex-direction: column; gap: 9px; padding: 11px; border-radius: 15px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.045); color: #fff; cursor: pointer; font: inherit; }
.gp-item:hover { background: rgba(255,255,255,0.08); }
/* QCK chrome → always the QCK orange, never the site's theme accent */
.gp-item.on { border-color: #FB5A2D; box-shadow: 0 0 0 2px color-mix(in srgb, #FB5A2D 60%, transparent); }
.gp-prevwrap { aspect-ratio: 1 / 1; width: 100%; }
.gp-prev { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(var(--rows, 1), 1fr); gap: 3px; height: 100%; }
.gp-prev > span { background: rgba(255,255,255,0.30); border-radius: 3px; }
.gp-item.on .gp-prev > span { background: color-mix(in srgb, #FB5A2D 75%, #fff); }
.gp-name { font-size: 12px; font-weight: 650; text-align: center; color: rgba(255,255,255,0.85); }
/* mobile: one column, stacked, full-width; positions ignored */
/* BAND — the tenth layout. Full-width cards, capped at 1200, stacked, height from content.
   This is the one layout where the card is not a box: `grid-auto-rows` never applies because the
   container is a flex column, so `height: 100%` on the card has nothing to resolve against and is
   released to `auto`. Everything that assumed a definite height needs a floor instead of a track,
   which is what --band-min is for — without it an empty-ish widget collapses to a sliver and a
   full-bleed media child (image, gallery, map) resolves to zero and disappears. */
#grid.bento.stacked { display: flex; flex-direction: column; gap: 64px; max-width: 1200px; margin: 0 auto; }
#grid.bento.stacked > .sec-band { width: 100%; }
#grid.bento.stacked .w { grid-column: auto !important; grid-row: auto !important;
  width: auto; min-width: 0; height: auto; min-height: var(--band-min, 200px); }
#grid.bento.stacked .w > .card, #grid.bento.stacked .w > .wg-image, #grid.bento.stacked .w > .wg-gallery,
#grid.bento.stacked .w > .wg-map, #grid.bento.stacked .w > .wg-header, #grid.bento.stacked .w > .wg-hero {
  height: auto; min-height: var(--band-min, 200px); }
/* Media that filled a definite-height box now needs its own floor, or it resolves to nothing. */
#grid.bento.stacked .wg-image, #grid.bento.stacked .wg-gallery, #grid.bento.stacked .wg-map { min-height: 340px; }
#grid.bento.stacked .wg-header, #grid.bento.stacked .wg-hero { min-height: 380px; }

/* SECTIONS IN BAND — eyebrow · title · description · CTA · image · content. Every part is
   rendered only when filled, so an absent part costs nothing: there is no empty box to collapse.
   Paint is untouched here — every colour reads a preset variable, as the guards require. */
.sec-band { position: relative; display: grid; gap: var(--sec-gap, 26px); background-size: cover;
  background-position: center; border-radius: var(--radius, 20px);
  /* the surface itself — the preset's, resolved onto the section in buildSection */
  background-color: var(--card-bg, rgba(255,255,255,.04));
  border: 1px solid var(--card-border, transparent);
  color: var(--ink, #fff); font-family: var(--font, inherit);
  padding: var(--sec-pad, 40px); }
/* ONE SURFACE, NOT TWO. Inside a section the widget's card stops being a card: the section is
   already the surface, and a card on a card is the box-in-a-box that made the head look like it
   was floating above the content rather than sitting on it. */
/* NOT `.sec-content > .w > .card` — that is (0,2,1) and the paint comes from
   `.w[data-i][data-fill="solid"] .card`, which is (0,3,1) and declared later. It never applied, so
   the section rendered a card inside a card. It is also `outline`, not `border`, so `border: 0`
   removed nothing. Scoped through #grid to win outright, and every surface property named. */
#grid.bento.stacked .sec-content > .w.in-sec > .card,
#grid.bento.stacked .sec-content > .w.in-sec > .wg-image,
#grid.bento.stacked .sec-content > .w.in-sec > .wg-gallery,
#grid.bento.stacked .sec-content > .w.in-sec > .wg-map,
#grid.bento.stacked .sec-content > .w.in-sec > .wg-hero {
  background: none; outline: 0; border: 0; box-shadow: none; padding: 0;
  backdrop-filter: none; -webkit-backdrop-filter: none; border-radius: 0; }
.sec-band[data-density="tight"] { --sec-gap: 18px; --sec-pad: 28px; }
.sec-band[data-density="generous"] { --sec-gap: 30px; --sec-pad: 48px; }
/* TITLE ABOVE — head, then content. TITLE LEFT — head in a column beside it. NONE — content only. */
.sec-band[data-title="above"], .sec-band[data-title="none"] { grid-template-columns: 1fr; }
.sec-band[data-title="left"] { grid-template-columns: minmax(220px, 28%) 1fr; align-items: start; column-gap: 40px; }
.sec-band[data-align="centred"] .sec-head { text-align: center; margin-inline: auto; max-width: 62ch; }
.sec-band[data-align="centred"][data-title="left"] { grid-template-columns: 1fr; }   /* a left rail cannot also be centred */

.sec-head { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.sec-band[data-align="centred"] .sec-head { align-items: center; }
.sec-eyebrow { font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--ink, #fff); opacity: .45; }
.sec-title { margin: 0; font-family: var(--ds-font, var(--font, inherit)); font-size: clamp(24px, 3.2vw, 40px);
  line-height: 1.1; letter-spacing: -.02em; color: var(--ink, #fff); }
.sec-desc { margin: 0; max-width: 62ch; font-size: 16px; line-height: 1.5; color: var(--ink, #fff); opacity: .68; }
.sec-cta { display: inline-flex; align-items: center; justify-content: center; margin-top: 4px;
  padding: 12px 22px; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer;
  text-decoration: none; border: 0; border-radius: var(--btn-radius, 999px);
  background: var(--accent, #FB5A2D); color: var(--on-accent, #fff); }

/* IMAGE PLACEMENTS — five real arrangements, built once and reused by every section. This is
   where themes differ: same widget, same data, a full-bleed background versus a square beside the
   text reads as a different site. A placement is a COMPONENT, not a toggle. */
.sec-img { border-radius: var(--in-radius, 16px); background-size: cover; background-position: center; }

/* background — full-bleed behind the whole section, with a scrim so any photo stays legible */
.sec-band[data-image="background"] { background-size: cover; background-position: center; }
.sec-band[data-image="background"]::before { content: ""; position: absolute; inset: 0; z-index: 0;
  border-radius: inherit; background: linear-gradient(180deg, rgba(0,0,0,.18), rgba(0,0,0,.66)); }
.sec-band[data-image="background"] > * { position: relative; z-index: 1; }

/* left-square — a square beside the text. The square is the point: it never stretches. */
.sec-band[data-image="left-square"] { grid-template-columns: minmax(200px, 34%) 1fr; column-gap: 40px; align-items: center; }
.sec-band[data-image="left-square"] > .sec-img { grid-column: 1; grid-row: 1 / span 2; aspect-ratio: 1; align-self: center; }
.sec-band[data-image="left-square"] > .sec-head, .sec-band[data-image="left-square"] > .sec-content { grid-column: 2; }

/* left-full — full height beside the text, so the section reads as two panels */
.sec-band[data-image="left-full"] { grid-template-columns: minmax(220px, 40%) 1fr; column-gap: 40px;
  align-items: stretch; padding: 0; overflow: hidden; }
.sec-band[data-image="left-full"] > .sec-img { grid-column: 1; grid-row: 1 / span 2;
  border-radius: 0; align-self: stretch; min-height: 340px; }
.sec-band[data-image="left-full"] > .sec-head { grid-column: 2; padding: var(--sec-pad, 48px) var(--sec-pad, 48px) 0 0; }
.sec-band[data-image="left-full"] > .sec-content { grid-column: 2; padding: 0 var(--sec-pad, 48px) var(--sec-pad, 48px) 0; }

/* behind-text — full width with the text over it. The image belongs to the HEAD, not the section:
   the content below stays on the card surface and readable. */
.sec-band[data-image="behind-text"] > .sec-head { position: relative; isolation: isolate;
  padding: 44px; border-radius: var(--in-radius, 16px); overflow: hidden; color: #fff; }
.sec-band[data-image="behind-text"] > .sec-head::before { content: ""; position: absolute; inset: 0; z-index: -2;
  background-image: var(--sec-photo); background-size: cover; background-position: center; }
.sec-band[data-image="behind-text"] > .sec-head::after { content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(0,0,0,.22), rgba(0,0,0,.7)); }
.sec-band[data-image="behind-text"] > .sec-head .sec-eyebrow,
.sec-band[data-image="behind-text"] > .sec-head .sec-title,
.sec-band[data-image="behind-text"] > .sec-head .sec-desc { color: #fff; opacity: 1; }
.sec-band[data-image="behind-text"] > .sec-head .sec-desc { opacity: .84; }

/* CONTENT — the widget, and only its rows/cards/media. Its card chrome is released: inside a
   section the surface belongs to the section, not to a tile. */
.sec-content { min-width: 0; }
/* Media in a section is a band, not a tile: it gets a height of its own rather than the 200px
   floor a stacked card falls back to, which made the map read as a letterbox strip. */
.sec-content .wg-map, .sec-content .wg-gallery { min-height: 420px; }
.sec-content > .w { width: auto; min-height: 0; }
.sec-content > .w > .card { height: auto; min-height: 0; }
/* SHOW LESS RATHER THAN SHRINK — a cap, not a smaller type size. */
.sec-band[style*="--sec-cap"] .sec-content .gal-cell:nth-child(n + var(--sec-cap)) { display: none; }

/* At 390 everything is one column — the left rail and the left image both fold. */
@media (max-width: 560px) {
  .sec-band[data-title="left"], .sec-band[data-image^="left"] { grid-template-columns: 1fr; }
  .sec-band[data-image^="left"] > .sec-head, .sec-band[data-image^="left"] > .sec-content { grid-column: 1; }
  .sec-band[data-image="left-full"] > .sec-head, .sec-band[data-image="left-full"] > .sec-content { padding-inline: 24px; }
  .sec-band[data-image="behind-text"] > .sec-head { padding: 24px; }
  .sec-band[data-image="background"] { padding: 24px; }
  .sec-img { min-height: 200px; }
}

#grid.bento.m-stack { display: flex; flex-direction: column; gap: 16px; max-width: 520px; }
#grid.bento.m-stack .w { grid-column: auto !important; grid-row: auto !important; min-height: 150px; }
#grid.bento.m-stack .w > .card { height: auto; }
body.is-dragging #grid.bento .w { transition: none; }
/* ------------------------- smart layout (sections) ------------------------- */
/* #grid in sections mode is a vertical stack of bento blocks; each .sec is its own
   12-col × N-row grid with fixed slots — no auto-flow, so nothing ever reflows on resize. */
.qck-grid.sec-mode { display: flex; flex-direction: column; gap: var(--gap); grid-template-columns: none; grid-auto-flow: initial; }
.sec { position: relative; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); grid-template-rows: repeat(var(--rows, 1), minmax(var(--rowmin, 200px), auto)); gap: var(--gap); }
.sec-slot { position: relative; min-width: 0; min-height: 0; }
.sec-slot > .w { height: 100%; width: 100%; margin: 0; min-height: 0; }
.sec-slot > .w, .sec-slot > .w.s, .sec-slot > .w.m, .sec-slot > .w.l { grid-column: auto; grid-row: auto; }
/* the SECTION/slot drives height in smart mode — clear the widgets' intrinsic min-heights so the
   chosen section height actually applies (the row's --rowmin is the floor; tall content still grows). */
.qck-grid.sec-mode .sec-slot .card, .qck-grid.sec-mode .sec-slot .wg-image, .qck-grid.sec-mode .sec-slot .wg-gallery, .qck-grid.sec-mode .sec-slot .wg-map { min-height: 0; }
/* empty slot — invisible on the live site, a dashed "add" target in the editor */
.sec-empty { border-radius: var(--radius); }
body.is-owner:not(.preview) .sec-empty { border: 1.5px dashed rgba(255,255,255,0.26); background: rgba(15,15,18,0.28); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); display: grid; place-items: center; }
.sec-add { display: inline-flex; align-items: center; gap: 7px; background: rgba(255,255,255,0.1); color: rgba(255,255,255,0.85); border: 0; border-radius: 999px; padding: 9px 15px 9px 12px; font: inherit; font-size: 13px; font-weight: 650; cursor: pointer; }
/* editor chrome lives inside the themed grid — always QCK UI font, never the site's theme font */
.sec-add, .sec-addrow, .sec-addrow span, .sec-tray, .sec-tray-h, .sec-chip, .sec-tools, .w-tools, .w-hidebadge, .m-infobox { font-family: var(--qck-font) !important; }
.sec-add svg { width: 17px; height: 17px; }
.sec-add:hover { background: color-mix(in srgb, var(--accent) 30%, rgba(255,255,255,0.1)); color: #fff; }
body.preview .sec-empty, body:not(.is-owner) .sec-empty { display: none; }
/* a fully-empty section collapses on the LIVE site (owner keeps it visible to fill it) */
body:not(.is-owner) .sec:not(:has(.sec-slot .w)), body.preview .sec:not(:has(.sec-slot .w)) { display: none; }
/* section toolbar (owner) — floats top-center INSIDE the section (so a backdrop's overflow:hidden
   never clips it), appears on hover, clear of the widget tools (top-right) and hide badge (top-left) */
.sec-tools { display: none; }
/* only on real hover/mouse devices — never on touch (so phones never get stuck-hover section chrome) */
@media (hover: hover) and (pointer: fine) {
  /* desktop-only: a vertical strip STRADDLING the section's left edge — half in the gutter, half over the
     edge, so it touches the section (hover never drops) and never clips off-screen. Top-aligned for short
     sections. The whole left edge is a reliable hover+click zone. */
  body.is-owner:not(.preview):not(.dev-mobile):not(.dev-tablet) .sec > .sec-tools { display: none; position: absolute; top: 10px; left: 10px; z-index: 14; flex-direction: column; gap: 6px; }
  body.is-owner:not(.preview):not(.dev-mobile):not(.dev-tablet) .sec:hover > .sec-tools,
  body.is-owner:not(.preview):not(.dev-mobile):not(.dev-tablet) .sec-tools:hover { display: flex; }
}
.sec-btn { display: inline-flex; align-items: center; gap: 5px; height: 30px; padding: 0 10px; border-radius: 9px; border: 1px solid rgba(255,255,255,0.16); background: rgba(18,18,20,0.92); color: #fff; backdrop-filter: blur(8px); cursor: pointer; font: inherit; font-size: 12px; font-weight: 600; }
.sec-btn svg { width: 15px; height: 15px; }
.sec-btn:hover { background: #000; }
.sec-btn.sec-del:hover { background: #e0392b; border-color: #e0392b; }
.sec-btn[disabled] { opacity: .35; pointer-events: none; }
.sec-slot.drop { outline: 2px dashed var(--accent); outline-offset: -3px; border-radius: var(--radius); }
.sec-dragsrc { opacity: .35; }
/* section background — styled by a chosen PRESET (full card system; glass/gradient/image all work) */
.sec.has-bg { position: relative; border-radius: var(--radius); overflow: hidden; padding: clamp(16px, 2.2cqw, 30px); }
.sec.has-bg > .sec-slot { z-index: 1; }
.sec.has-bg > .sec-tools { z-index: 9; }
.sec-bg { position: absolute; inset: 0; z-index: 0; border-radius: var(--radius); background-size: cover; background-position: center; }
/* dock "+" chooser popover */
.add-chooser { position: fixed; z-index: 65; width: 230px; background: #161617; border: 1px solid rgba(255,255,255,0.14); border-radius: 16px; padding: 7px; box-shadow: 0 22px 50px -16px rgba(0,0,0,0.7); display: flex; flex-direction: column; gap: 4px; }
.add-chooser button { display: flex; align-items: center; gap: 12px; width: 100%; padding: 11px 12px; border: 0; border-radius: 12px; background: transparent; color: #fff; font: inherit; cursor: pointer; text-align: left; }
.add-chooser button:hover { background: rgba(255,255,255,0.08); }
.add-chooser .ac-ic { width: 34px; height: 34px; border-radius: 10px; background: color-mix(in srgb, var(--qck) 16%, transparent); color: var(--qck); display: grid; place-items: center; flex: 0 0 auto; }
.add-chooser .ac-ic svg { width: 17px; height: 17px; }
.add-chooser .ac-tx { display: flex; flex-direction: column; }
.add-chooser .ac-tx b { font-size: 14.5px; font-weight: 700; }
.add-chooser .ac-tx small { font-size: 12px; color: rgba(255,255,255,0.5); }
/* "Add section" CTA in the add-mode modal */
.sm-addbtn { width: 100%; margin-top: 16px; display: inline-flex; align-items: center; justify-content: center; gap: 8px; }
.sm-addbtn[disabled] { opacity: .45; cursor: default; }
.sm-addbtn svg { width: 17px; height: 17px; }
/* section background preset tiles + "New style" */
/* layout panel: action row + saved-layout delete badge */
.lay-row2 { display: flex; gap: 10px; margin: 14px 0; }
.lay-row2 .btn { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 7px; white-space: nowrap; padding: 12px 10px; }
.lay-bico { display: inline-flex; }
.lay-bico svg { width: 16px; height: 16px; }
.tpl-opt { position: relative; }
.tpl-x { position: absolute; top: 6px; right: 6px; width: 22px; height: 22px; border: 0; border-radius: 50%; background: rgba(0,0,0,0.55); color: #fff; cursor: pointer; display: grid; place-items: center; opacity: 0; transition: opacity .12s; }
.tpl-opt:hover .tpl-x, .tpl-opt.saved .tpl-x { opacity: 1; }
.tpl-x svg { width: 12px; height: 12px; }
/* section editor modal */
.sec-modal { max-width: 440px; width: 92vw; }
.sec-modal .sm-body { margin: 0 -4px; padding: 0 4px; max-height: 68vh; overflow-y: auto; }
/* filter the shapes by how many widgets they hold */
.sm-cnt { display: flex; flex-wrap: wrap; gap: 7px; margin: 2px 0 14px; }
.sm-cntpill { min-width: 38px; height: 34px; padding: 0 14px; border-radius: 999px; border: 0; cursor: pointer; font: inherit; font-weight: 700; font-size: 13.5px; background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.6); transition: background .15s, color .15s; white-space: nowrap; }
.sm-cntpill:hover { color: #fff; }
.sm-cntpill.on { background: var(--qck, #FB5A2D); color: #fff; }
.sm-lbl { font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: rgba(255,255,255,0.45); margin: 4px 0 10px; }
.sm-lbl .ep-mut { color: rgba(255,255,255,0.3); }
/* smaller shape icons; ~2.5 rows visible then scrolls. align-items:start so the cards keep
   their aspect ratio instead of stretching to fill the (auto) grid-row height. */
.sm-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; align-items: start; max-height: 380px; overflow-y: auto; padding: 2px 6px 2px 2px; }
.sm-grid .sec-pat { aspect-ratio: 1.5; height: auto; align-self: start; }
.sm-grid .sec-pat-prev { gap: 2px; padding: 5px; }
.sm-bgrow { display: flex; align-items: center; gap: 9px; }
.sm-bgthumb { width: 56px; height: 40px; border-radius: 9px; background-size: cover; background-position: center; flex: 0 0 auto; }
.sm-bgbtn { flex: 1; }
.sm-bgbtn.ghost { flex: 0 0 auto; opacity: .75; }
.sm-bgadd { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 13px; border: 1px dashed rgba(255,255,255,0.24); border-radius: 12px; background: transparent; color: rgba(255,255,255,0.72); font: inherit; font-size: 13.5px; font-weight: 600; cursor: pointer; }
.sm-bgadd:hover { border-color: rgba(255,255,255,0.45); color: #fff; }
.sm-bgadd svg { width: 18px; height: 18px; }
/* the preset tiles inside the section modal — a touch tighter */
.sm-vibes { display: grid; grid-template-columns: repeat(2, 1fr); gap: 9px; max-height: 230px; overflow-y: auto; padding: 2px; }
/* preview mode: editor-only section chrome is hidden */
body.preview .sec-addrow, body.preview .sec-tray { display: none; }
/* "change widget type" row at the top of a widget's settings */
.wtype-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 13px; padding: 11px 13px; cursor: pointer; font: inherit; color: #fff; margin-bottom: 16px; }
.wtype-row:hover { border-color: rgba(255,255,255,0.28); }
.wtype-l { display: flex; align-items: center; gap: 11px; }
.wtype-ic { width: 30px; height: 30px; border-radius: 9px; background: rgba(255,255,255,0.08); display: grid; place-items: center; }
.wtype-ic svg { width: 16px; height: 16px; }
.wtype-l > span:last-child { display: flex; flex-direction: column; text-align: left; }
.wtype-lbl { font-size: 11px; color: rgba(255,255,255,0.45); font-weight: 600; }
.wtype-cur { font-size: 14px; font-weight: 700; }
.wtype-go { display: inline-flex; align-items: center; gap: 3px; font-size: 13px; font-weight: 650; color: var(--qck); }
.wtype-go svg { width: 14px; height: 14px; }
/* unplaced-widgets tray + add-section button (owner only) */
.sec-tray { margin-top: 6px; border: 1.5px dashed rgba(255,255,255,0.28); border-radius: 16px; padding: 12px 14px; background: rgba(15,15,18,0.5); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
.sec-tray .sec-chip-t { color: #fff; }
.sec-tray .sec-chip-n { color: rgba(255,255,255,0.55); }
.sec-tray .sec-chip { background: rgba(255,255,255,0.1); }
.sec-tray-h { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 650; color: rgba(255,255,255,0.72); margin-bottom: 10px; }
.sec-tray-h svg { width: 16px; height: 16px; }
.sec-tray-row { display: flex; flex-wrap: wrap; gap: 8px; }
.sec-chip { display: inline-flex; align-items: center; gap: 8px; background: color-mix(in srgb, var(--ink) 7%, transparent); border-radius: 11px; padding: 8px 8px 8px 12px; cursor: grab; user-select: none; }
.sec-chip-t { font-size: 12.5px; font-weight: 700; color: var(--ink); }
.sec-chip-n { font-size: 12px; color: var(--ink-dim); max-width: 130px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.sec-chip-x { width: 22px; height: 22px; border: 0; border-radius: 50%; background: color-mix(in srgb, var(--ink) 10%, transparent); color: var(--ink-dim); cursor: pointer; display: grid; place-items: center; }
.sec-chip-x svg { width: 12px; height: 12px; }
.sec-addrow { margin-top: 4px; display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 14px; border: 1.5px dashed rgba(255,255,255,0.34); border-radius: 16px; background: rgba(15,15,18,0.5); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); color: rgba(255,255,255,0.85); font: inherit; font-size: 13.5px; font-weight: 650; cursor: pointer; }
.sec-addrow:hover { border-color: var(--accent); color: #fff; }
.sec-addrow svg { width: 18px; height: 18px; }
/* pattern picker popover */
.sec-pop { position: fixed; z-index: 120; width: 268px; background: #161617; border: 1px solid rgba(255,255,255,0.14); border-radius: 16px; padding: 14px; box-shadow: 0 28px 60px -20px rgba(0,0,0,0.7); }
.sec-pop-h { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: rgba(255,255,255,0.5); margin-bottom: 10px; }
.sec-pop-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.sec-pat { aspect-ratio: 1.3; padding: 0; border: 1px solid rgba(255,255,255,0.14); border-radius: 10px; background: #1f1f22; cursor: pointer; overflow: hidden; }
.sec-pat.on { border-color: var(--qck, #FB5A2D); box-shadow: 0 0 0 1px var(--qck, #FB5A2D); }
.sec-pat-prev { display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(var(--rows, 1), 1fr); gap: 3px; width: 100%; height: 100%; padding: 6px; }
.sec-pat-prev > span { background: rgba(255,255,255,0.34); border-radius: 3px; }
/* templates gallery (Layout panel) */
.tpl-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-bottom: 14px; }
.tpl-opt { padding: 10px; border: 1px solid rgba(255,255,255,0.12); border-radius: 14px; background: #161617; cursor: pointer; font: inherit; color: #fff; display: flex; flex-direction: column; gap: 8px; }
.tpl-opt:hover { border-color: rgba(255,255,255,0.34); }
.tpl-prev { display: flex; flex-direction: column; gap: 4px; height: 76px; }
.tpl-row { display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(var(--rows, 1), 1fr); gap: 4px; flex: 1; }
.tpl-row > span { background: rgba(255,255,255,0.22); border-radius: 4px; }
.lay-smart { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 14px; border: 1px solid rgba(255,255,255,0.14); border-radius: 14px; background: #161617; margin-bottom: 16px; }
.lay-smart-tx { display: flex; flex-direction: column; gap: 3px; }
.lay-smart-tx b { font-size: 14px; color: #fff; }
.lay-smart-tx span { font-size: 12px; color: rgba(255,255,255,0.55); }
.lay-hint { font-size: 12.5px; color: rgba(255,255,255,0.5); margin-bottom: 10px; }
/* undo / redo dock — top-left, owner editor */
.undo-dock { position: fixed; top: 16px; left: 16px; z-index: 70; display: flex; gap: 8px; }
body.preview .undo-dock { display: none; }
.ud-btn { width: 40px; height: 40px; border-radius: 12px; border: 1px solid rgba(255,255,255,0.16); background: rgba(18,18,20,0.86); color: #fff; backdrop-filter: blur(10px); cursor: pointer; display: grid; place-items: center; box-shadow: 0 10px 26px -12px rgba(0,0,0,0.6); transition: opacity .12s, background .12s; }
.ud-btn svg { width: 18px; height: 18px; }
.ud-btn:hover { background: #000; }
.ud-btn:disabled { opacity: .3; pointer-events: none; }
/* mobile: sections collapse to a single stacked column. Section EDITING is desktop-only for now —
   on a phone we just show clean stacked widgets (each with its gear); no section tools/slots/add/tray. */
@container (max-width: 720px) {
  .sec { display: flex; flex-direction: column; height: auto; gap: var(--gap); }
  .sec-slot { grid-column: auto !important; grid-row: auto !important; }
  .sec-slot > .w { height: auto; }
  .sec-empty, .sec-tools, .sec-addrow, .sec-tray { display: none !important; }
  body:not(.is-owner) .sec-slot:has(> .w.hide-mobile), body.preview .sec-slot:has(> .w.hide-mobile) { display: none; }
}
/* real phones + device-preview — same cleanup regardless of how the breakpoint resolves */
@media (max-width: 700px) { .sec-empty, .sec-tools, .sec-addrow, .sec-tray, .undo-dock { display: none !important; } }
body.dev-mobile .sec-empty, body.dev-mobile .sec-tools, body.dev-mobile .sec-addrow, body.dev-mobile .sec-tray,
body.dev-tablet .sec-tools { display: none !important; }
/* ===== mobile editor — the m-stack render: a flat single column of widgets (no sections) ===== */
#grid.m-stack .m-list { display: flex; flex-direction: column; gap: var(--gap); }
#grid.m-stack .m-list > .w { width: 100%; margin: 0; }
body.preview .w-mtools { display: none !important; }
body.preview .m-infobox, body:not(.is-owner) .m-infobox { display: none !important; } /* mobile-editing hint is owner-only — never on a draft/visitor */
/* a generated DRAFT is a clean preview (claim → then edit): no editor chrome, just the Save & edit button */
/* small hint at the bottom of the mobile editor — point users to a bigger screen for desktop */
.m-infobox { display: flex; align-items: center; gap: 11px; padding: 13px 15px; margin-top: 4px; border-radius: 14px; border: 1px dashed color-mix(in srgb, var(--ink) 22%, transparent); background: color-mix(in srgb, var(--ink) 4%, transparent); color: var(--ink-dim, rgba(130,130,140,0.85)); font-size: 12.5px; line-height: 1.45; }
.m-infobox b { color: var(--ink, inherit); font-weight: 700; }
.m-info-ic { display: inline-flex; flex: 0 0 auto; opacity: .8; }
.m-info-ic svg { width: 19px; height: 19px; }
/* mobile stack: cards size to content by default (no desktop min-height bleed); JS sets an inline
   min-height only for visual widgets + explicit mobile-height overrides (inline wins over this) */
#grid.m-stack .w.h-xs, #grid.m-stack .w.h-s, #grid.m-stack .w.h-m, #grid.m-stack .w.h-l { min-height: 0; }
/* explicit mobile height: media FILLS the card (no empty gap); content CENTRES so a taller card looks intentional */
#grid.m-stack .card.m-fill { overflow: hidden; }
#grid.m-stack .card.m-fill .wg-body, #grid.m-stack .card.m-fill .wg-strip { flex: 1 1 auto; min-height: 0; }
#grid.m-stack .card.m-fill .wg-shot { height: 100%; aspect-ratio: auto; }
#grid.m-stack .card.m-center .wg-body { justify-content: safe center; }
/* the section modal is a dark sheet — keep its text readable on any theme (was inheriting theme ink) */
/* floating "which view am I editing" toggle — top-center, edit mode only */
body:not(.is-owner) .dev-float, body.preview .dev-float, body.tilt .dev-float { display: none !important; }
/* desktop only — on a phone you're inherently editing mobile, so no switch is shown there */
@media (max-width: 760px) { .dev-float { display: none !important; } }
/* Layout (sections/templates) is a desktop-only surface — mobile is a flat list, so hide it there */
body.dev-mobile #ed-bar [data-act="layout"] { display: none !important; }
@media (max-width: 760px) { #ed-bar [data-act="layout"] { display: none !important; } }
/* clear the floating toggle so it never overlaps the first section (desktop edit only) */
@media (min-width: 761px) { body.is-owner:not(.preview):not(.tilt) .wrap { padding-top: 56px; } }
/* with the floating toggle handling edit, the dock's device row is just for Preview */
body:not(.preview) .ed-bar .ed-devices { display: none !important; }
/* --------- card: the look is driven by the theme's FILL style --------- */
.card {
  position: relative; height: 100%;
  border-radius: var(--radius);
  overflow: hidden; isolation: isolate;
  padding: clamp(18px, 2.4cqw, 26px);
  transition: transform .18s cubic-bezier(.32,.72,0,1), border-radius .25s, box-shadow .2s;
}
a.card:hover { filter: brightness(1.04); }
/* button/anchor cards (teasers, link, map-compact) — kill the UA button chrome so there's no double border */
button.card { -webkit-appearance: none; appearance: none; border: 0; font: inherit; text-align: inherit; color: inherit; }
.card.w-openable { cursor: pointer; }
/* Squircle corner tier = continuous curvature (iOS superellipse), not a circular arc with
   dead-straight sides. corner-shape needs a non-zero border-radius (already set) and falls
   back to normal rounding on browsers without support (Chrome 139+). */
[data-corner="squircle"] .card { corner-shape: squircle; }
.vibe-card.is-squircle, .tmini-card.is-squircle, .preset-btn.is-squircle { corner-shape: squircle; }
/* fill styles are set per-widget (.w[data-i][data-fill]) so a widget can override the theme */
/* GLASS — nxtwk "liquid glass": multi-layer inset bevel + soft drop + radial sheen */
.w[data-i][data-fill="glass"] .card {
  background: var(--card-bg); outline: var(--border-w, 1px) solid var(--card-border); outline-offset: 0;
  backdrop-filter: blur(22px) saturate(140%); -webkit-backdrop-filter: blur(22px) saturate(140%);
  box-shadow:
    inset 0 1px 0 0 rgba(255,255,255,0.25),
    inset 0 -1px 0 0 rgba(0,0,0,0.30),
    inset 1px 0 0 0 rgba(255,255,255,0.04),
    inset -1px 0 0 0 rgba(0,0,0,0.10),
    var(--card-drop, 0 20px 50px -20px rgba(0,0,0,0.55)),
    var(--card-glow, 0 0 transparent);
}
.w[data-i][data-fill="glass"] .card::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: radial-gradient(140% 100% at 0% 0%, rgba(255,255,255,0.08), transparent 45%); }
.w[data-i][data-fill="solid"] .card { background: var(--card-bg); outline: var(--border-w, 1px) solid var(--card-border); outline-offset: 0; box-shadow: var(--card-drop, 0 16px 40px -30px rgba(0,0,0,0.4)), var(--card-glow, 0 0 transparent); }
.w[data-i][data-fill="gradient"] .card {
  --ink: #fff; --ink-dim: rgba(255,255,255,0.82); --ink-faint: rgba(255,255,255,0.62); --hair: rgba(255,255,255,0.28);
  color: #fff;
  background: var(--card-grad, linear-gradient(150deg, hsl(var(--w-hue, 18) 88% 60%), hsl(calc(var(--w-hue, 18) + 34) 82% 46%)));
  border: 1px solid rgba(255,255,255,0.16);
  box-shadow: var(--card-drop, 0 26px 54px -24px hsl(var(--w-hue, 18) 80% 40% / .55)), var(--card-glow, 0 0 transparent);
}
.w[data-i][data-fill="gradient"] .card::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: radial-gradient(120% 100% at 0 0, rgba(255,255,255,0.24), transparent 45%); }
.w[data-i][data-fill="gradient"] .wg-header .btn-cta { background: rgba(255,255,255,0.92); color: #111; }
.w[data-i][data-fill="outline"] .card { background: var(--card-bg); outline: var(--border-w, 2px) solid var(--card-border); outline-offset: 0; box-shadow: var(--card-drop, none), var(--card-glow, 0 0 transparent); }
/* bold = filled block, no border, heavy drop shadow (punchy/elevated) */
.w[data-i][data-fill="bold"] .card { background: var(--card-bg); border: var(--border-w, 0) solid var(--card-border); box-shadow: var(--card-drop, 0 24px 50px -22px rgba(0,0,0,0.6)), var(--card-glow, 0 0 transparent); }
.w[data-i][data-fill="plain"] .card { background: var(--card-bg); border: 0; box-shadow: none; border-radius: 0; padding: clamp(6px,1.2cqw,12px) clamp(2px,1cqw,8px) clamp(16px,2cqw,22px); border-bottom: 1px solid var(--card-border); }
/* gradglow — translucent glass surface with a coloured radial glow inside (refs #166/#168) */
.w[data-i][data-fill="gradglow"] .card { background: var(--card-bg); outline: var(--border-w, 1px) solid var(--card-border); outline-offset: 0; backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.18), var(--card-drop, 0 22px 54px -24px rgba(0,0,0,0.55)), var(--card-glow, 0 0 transparent); overflow: hidden; }
.w[data-i][data-fill="gradglow"] .card::before { content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0; background: radial-gradient(120% 120% at 18% 0%, color-mix(in srgb, var(--accent) 34%, transparent), transparent 58%), radial-gradient(120% 120% at 100% 100%, color-mix(in srgb, var(--accent) 20%, transparent), transparent 60%); }
.w[data-i][data-fill="gradglow"] .card > *:not(.wim):not(.ti-bg):not(.ti-scrim):not(.w-expand):not(.w-tools):not(.w-hidebadge):not(.lk-ext) { position: relative; z-index: 1; }
.w[data-i][data-fill="gradglow"] .wg-image > .wim, .w[data-i][data-fill="gradglow"] .wg-gallery .wim, .w[data-i][data-fill="gradglow"] .wg-hero .ti-bg, .w[data-i][data-fill="gradglow"] .wg-hero .ti-scrim { z-index: 1; } /* keep absolute-fill backgrounds (image widget + hero poster) — glow must not collapse them */
/* duotone — a hard two-tone split block (--card-grad carries the split) */
.w[data-i][data-fill="duotone"] .card { background: var(--card-grad, linear-gradient(180deg, var(--card-bg) 52%, var(--accent) 52%)); border: 0; box-shadow: var(--card-drop, 0 20px 46px -24px rgba(0,0,0,0.5)), var(--card-glow, 0 0 transparent); }
/* bare — no card at all, just the content (cardless header / section label) */
.w[data-i][data-fill="bare"] .card { background: none !important; outline: 0 !important; border: 0 !important; box-shadow: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; padding: clamp(4px,1cqw,10px) clamp(2px,0.8cqw,6px); }
.wm-card[data-fill="gradglow"] { outline: var(--border-w, 1px) solid var(--card-border); backdrop-filter: blur(24px) saturate(150%); -webkit-backdrop-filter: blur(24px) saturate(150%); box-shadow: var(--card-drop, 0 24px 60px -24px rgba(0,0,0,0.6)), var(--card-glow, 0 0 transparent); }
.wm-card[data-fill="duotone"] { background: var(--card-grad, var(--card-bg)); }
/* multi = each card a different colour from the theme palette; ink derives per card */
.w[data-i][data-fill="multi"] .card {
  background: var(--w-card, #1c1c22);
  border: var(--border-w, 0) solid var(--card-border, transparent); /* honors the Border tab */
  --ink: var(--w-cardink, #fff); --ink-dim: var(--w-carddim, rgba(255,255,255,0.7)); --ink-faint: var(--w-cardfaint, rgba(255,255,255,0.45));
  --hair: var(--w-cardhair, rgba(255,255,255,0.18));
  color: var(--w-cardink, #fff);
  box-shadow: var(--card-drop, 0 22px 50px -26px rgba(0,0,0,0.5)), var(--card-glow, 0 0 transparent);
}
.w[data-i][data-fill="multi"] .wg-header p, .w[data-i][data-fill="multi"] .wg-dsc, .w[data-i][data-fill="multi"] .lk-desc { color: var(--w-carddim, rgba(255,255,255,0.7)); }
.w[data-i][data-fill="multi"] .ic, .w[data-i][data-fill="multi"] .wg-ico { background: var(--w-cardhair, rgba(255,255,255,0.16)); border-color: var(--w-cardhair, rgba(255,255,255,0.22)); color: var(--w-cardink); }
/* accent-driven bits (hours time, link arrow) read as the card ink on a coloured card */
.w[data-i][data-fill="multi"] .hr-time, .w[data-i][data-fill="multi"] .hr-s-time, .w[data-i][data-fill="multi"] .lk-go { color: var(--w-cardink, #fff); opacity: .9; }
/* IMAGE — an uploaded image as the card background, with a darken scrim for legibility */
.w[data-i][data-fill="image"] .card {
  background-image: var(--card-img); background-size: cover; background-position: center;
  --ink: #fff; --ink-dim: rgba(255,255,255,0.84); --ink-faint: rgba(255,255,255,0.62); --hair: rgba(255,255,255,0.22); --card-border: rgba(255,255,255,0.22);
  color: #fff; outline: var(--border-w, 0) solid var(--card-border); outline-offset: 0;
  box-shadow: var(--card-drop, 0 22px 50px -26px rgba(0,0,0,0.5)), var(--card-glow, 0 0 transparent);
}
.w[data-i][data-fill="image"] .card::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: linear-gradient(180deg, rgba(0,0,0,calc(var(--card-scrim, 0.4) * 0.45)), rgba(0,0,0,var(--card-scrim, 0.4))); }
/* lift TEXT/content above the scrim — but never clobber absolutely-positioned helpers
   (.wim = the widget's own picture, the expand +, the editor tools/badge) */
.w[data-i][data-fill="image"] .card > *:not(.wim):not(.ti-bg):not(.ti-scrim):not(.w-expand):not(.w-tools):not(.w-hidebadge):not(.lk-ext) { position: relative; z-index: 1; }
.w[data-i][data-fill="image"] .wg-hero .ti-bg, .w[data-i][data-fill="image"] .wg-hero .ti-scrim { z-index: 1; }
/* ── the expand modal wears the OPENING widget's fill style (matches the card it came from) ── */
.wm-card[data-fill="glass"] { outline: var(--border-w, 1px) solid var(--card-border); backdrop-filter: blur(26px) saturate(140%); -webkit-backdrop-filter: blur(26px) saturate(140%); box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.22), inset 0 -1px 0 0 rgba(0,0,0,0.3), var(--card-drop, 0 24px 60px -24px rgba(0,0,0,0.6)), var(--card-glow, 0 0 transparent); }
.wm-card[data-fill="solid"] { outline: var(--border-w, 1px) solid var(--card-border); box-shadow: var(--card-drop, 0 24px 60px -30px rgba(0,0,0,0.5)), var(--card-glow, 0 0 transparent); }
.wm-card[data-fill="bold"] { box-shadow: var(--card-drop, 0 24px 60px -22px rgba(0,0,0,0.6)), var(--card-glow, 0 0 transparent); }
.wm-card[data-fill="outline"] { background: var(--wm-solid); outline: var(--border-w, 2px) solid var(--card-border); }
.wm-card[data-fill="gradient"] { color: #fff; background: var(--card-grad, linear-gradient(150deg, hsl(var(--w-hue, 18) 88% 60%), hsl(calc(var(--w-hue, 18) + 34) 82% 46%))); }
.wm-card[data-fill="image"] { color: #fff; background-image: var(--card-img); background-size: cover; background-position: center; }
.wm-card[data-fill="image"]::after { content: ""; position: absolute; inset: 0; z-index: 0; border-radius: inherit; pointer-events: none; background: linear-gradient(180deg, rgba(0,0,0,calc(var(--card-scrim, 0.4) * 0.5)), rgba(0,0,0,var(--card-scrim, 0.4))); }
.wm-card[data-fill="image"] > * { position: relative; z-index: 1; }
/* a Link block whose card fill is an image → clean featured-link look: label bottom, badge corner, no extra thumbnail */
.w[data-i][data-fill="image"] .wg-link { flex-direction: column; align-items: flex-start; justify-content: flex-end; min-height: 130px; }
.w[data-i][data-fill="image"] .wg-link .lk-ic { background: rgba(0,0,0,0.42); color: #fff; backdrop-filter: blur(4px); border: 1px solid rgba(255,255,255,0.18); }
.w[data-i][data-fill="image"] .wg-link .lk-ic svg { color: #fff; }
/* media widgets render their OWN picture full-bleed — it sits above the theme card-image + scrim */
.w[data-i][data-fill="image"] .wg-image > .wim, .w[data-i][data-fill="image"] .wg-gallery .wim { z-index: 1; }
.w[data-i][data-fill="image"] .wg-image::after { display: none; }
/* ── button styles (per-preset, set via data-btnstyle) ── */
[data-btnstyle="soft"] .btn-cta, [data-btnstyle="soft"] .wg-btn { background: color-mix(in srgb, var(--btn-bg) 18%, transparent) !important; color: var(--btn-bg) !important; }
[data-btnstyle="outline"] .btn-cta, [data-btnstyle="outline"] .wg-btn { background: transparent !important; border: 1.5px solid var(--btn-bg); color: var(--btn-bg) !important; }
[data-btnstyle="arrow"] .btn-cta { border-radius: 999px; padding: 8px 8px 8px 22px; gap: 12px; }
[data-btnstyle="arrow"] .btn-cta::after { content: "→"; display: inline-grid; place-items: center; width: 30px; height: 30px; flex: 0 0 auto; border-radius: 50%; background: var(--btn-text, #fff); color: var(--btn-bg, #111); font-size: 16px; font-weight: 700; line-height: 1; }
[data-btnstyle="arrow"] .wg-btn { position: relative; border-radius: 999px; padding-right: 46px; }
[data-btnstyle="arrow"] .wg-btn::after { content: "→"; position: absolute; right: 7px; top: 50%; transform: translateY(-50%); width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; background: var(--btn-text, #111); color: var(--btn-bg, #fff); font-size: 16px; font-weight: 700; line-height: 1; }
/* soft / outline button styles apply to the Buttons widget too */
[data-btnstyle="soft"] .wg-btn { background: color-mix(in srgb, var(--btn-bg) 18%, transparent) !important; color: var(--btn-bg) !important; }
[data-btnstyle="outline"] .wg-btn { background: transparent !important; border: 1.5px solid var(--btn-bg); color: var(--btn-bg) !important; }
/* ── shared content elements themes can use ── */
.badge-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 700; letter-spacing: .02em; padding: 4px 10px; border-radius: 999px; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); white-space: nowrap; }
.badge-pill svg { width: 13px; height: 13px; }
.circ-btn { width: 46px; height: 46px; flex: 0 0 auto; border-radius: 50%; display: grid; place-items: center; background: var(--accent); color: var(--on-accent); border: 0; cursor: pointer; text-decoration: none; transition: transform .14s, filter .14s; }
.circ-btn:hover { transform: translateY(-2px); filter: brightness(1.05); }
.circ-btn svg { width: 20px; height: 20px; }
.circ-row { display: flex; gap: 10px; flex-wrap: wrap; }
/* inner group: image + gradient fills, optional glow */
[data-infill="image"] .wg-inner { background-image: var(--in-img); background-size: cover; background-position: center; }
.wg-inner { box-shadow: var(--in-glow, none); }
/* icon chip style */
[data-icons="solid"] .wg-link .ic { background: var(--icon-color, var(--accent)); border-color: transparent; color: #fff; }
[data-icons="line"] .wg-link .ic svg { color: var(--icon-color, var(--ink)); }
.w[data-i][data-fill="gradient"] .wg-link .ic { background: rgba(255,255,255,0.22); border-color: rgba(255,255,255,0.3); color: #fff; }
/* ------------------------- widget: header ------------------------- */
.wg-header { display: flex; flex-direction: column; justify-content: center; gap: 10px; }
.wg-header h1 { margin: 0; font-family: var(--h1-font, var(--font)); font-size: calc(clamp(28px, 5cqw, 48px) * var(--h1-scale, 1)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); color: var(--h1-color, var(--ink)); text-shadow: var(--h1-glow, none); letter-spacing: -0.03em; line-height: 1.05; }
.wg-header p { margin: 0; font-family: var(--h2-font, var(--font)); color: var(--h2-color, var(--ink-dim)); font-size: calc(clamp(15px, 2cqw, 19px) * var(--h2-scale, 1)); font-weight: var(--h2-weight, 600); font-style: var(--h2-style, normal); text-shadow: var(--h2-glow, none); max-width: 34ch; }
[data-display="huge"] .wg-header h1 { font-size: calc(clamp(34px, 8cqw, 66px) * var(--h1-scale, 1)); letter-spacing: -0.045em; text-transform: uppercase; line-height: .92; }
[data-display="serif"] .wg-header h1 { letter-spacing: -0.012em; font-size: calc(clamp(32px, 6.5cqw, 58px) * var(--h1-scale, 1)); }
.wg-header .btn-cta {
  align-self: flex-start; margin-top: 8px;
  background: var(--btn-bg, #fff); color: var(--btn-text, #111);
  text-decoration: none; font-family: var(--btn-font, var(--lb-font, var(--font))); font-weight: var(--btn-weight, 650); font-size: calc(15px * var(--btn-size, 1));
  padding: 12px 20px; border-radius: var(--btn-radius, calc(var(--radius) * 0.55 + 6px));
  transition: transform .18s var(--ease, ease), filter .18s, box-shadow .18s; will-change: transform;
}
/* button hover animations (set per theme via data-bthover on .wrap) */
[data-bthover="lift"] .wg-header .btn-cta:hover { transform: translateY(-2px); box-shadow: 0 10px 22px -10px rgba(0,0,0,.5); }
[data-bthover="grow"] .wg-header .btn-cta:hover { transform: scale(1.05); }
[data-bthover="fade"] .wg-header .btn-cta:hover { filter: brightness(.9); }
[data-fill="gradient"] .wg-header .btn-cta { background: rgba(255,255,255,0.92); color: #111; }
/* header with an image — reuses the text+image layout (.wg-textimage), styled as a hero */
.wg-hero .ti-text { gap: 11px; }
.wg-hero .ti-text > .wg-social, .wg-hero .ti-overtext > .wg-social { margin-top: 6px; }
.wg-hero .ti-text > h1 { margin: 0; font-family: var(--h1-font, var(--font)); font-size: calc(clamp(26px, 4.6cqw, 44px) * var(--h1-scale, 1)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); color: var(--h1-color, var(--ink)); text-shadow: var(--h1-glow, none); letter-spacing: -0.03em; line-height: 1.05; }
[data-display="huge"] .wg-hero .ti-text > h1 { font-size: calc(clamp(30px, 6.5cqw, 56px) * var(--h1-scale, 1)); letter-spacing: -0.045em; text-transform: uppercase; line-height: .94; }
[data-display="serif"] .wg-hero .ti-text > h1 { letter-spacing: -0.012em; }
.wg-hero .ti-text > p, .wg-hero .ti-overtext > p { margin: 0; font-family: var(--h2-font, var(--font)); color: var(--h2-color, var(--ink-dim)); font-size: calc(clamp(14px, 1.9cqw, 17px) * var(--h2-scale, 1)); font-weight: var(--h2-weight, 600); font-style: var(--h2-style, normal); max-width: 40ch; }
.wg-hero .ti-overtext { display: flex; flex-direction: column; gap: 11px; align-items: flex-start; }
.wg-hero.ti-over .ti-overtext > p { color: rgba(255,255,255,0.9); }
.wg-hero .ti-overtext > h1 { margin: 0; font-family: var(--h1-font, var(--font)); font-size: calc(clamp(26px, 5cqw, 46px) * var(--h1-scale, 1)); font-weight: var(--h1-weight, 700); color: #fff; letter-spacing: -0.03em; line-height: 1.05; }
[data-display="huge"] .wg-hero .ti-overtext > h1 { letter-spacing: -0.045em; text-transform: uppercase; line-height: .94; }
.wg-hero.ti-over .ti-bg { position: absolute; inset: 0; background-size: cover; background-position: center; }
/* stacked hero (image on top / below) — a banner sized to the card's height tier (never a deep
   tall crop that cuts faces, never taller than the block). Text fills + centres in the rest. */
.wg-hero.ti-below:not(.sz-l) .ti-img, .wg-hero.ti-above:not(.sz-l) .ti-img { flex: 0 0 auto; min-height: 0; aspect-ratio: auto; }
.wg-hero.h-s.ti-below:not(.sz-l) .ti-img, .wg-hero.h-s.ti-above:not(.sz-l) .ti-img { height: 78px; }
.wg-hero.h-m.ti-below:not(.sz-l) .ti-img, .wg-hero.h-m.ti-above:not(.sz-l) .ti-img { height: 146px; }
.wg-hero.h-l.ti-below:not(.sz-l) .ti-img, .wg-hero.h-l.ti-above:not(.sz-l) .ti-img { height: 224px; }
.wg-hero:not(.sz-l):not(.ti-over) .ti-text { flex: 1 1 auto; justify-content: center; }
.wg-hero.ti-over .wg-ov { color: rgba(255,255,255,0.82); }
.wg-hero.ti-over .ws-tx { color: rgba(255,255,255,0.9); }
.wg-hero.ti-over .ws-tx b { color: #fff; }
.wg-hero .btn-cta {
  align-self: flex-start; margin-top: 11px;
  background: var(--btn-bg, #fff); color: var(--btn-text, #111);
  text-decoration: none; font-family: var(--btn-font, var(--lb-font, var(--font))); font-weight: var(--btn-weight, 650); font-size: calc(15px * var(--btn-size, 1));
  padding: 12px 20px; border-radius: var(--btn-radius, calc(var(--radius) * 0.55 + 6px));
  transition: transform .18s var(--ease, ease), filter .18s, box-shadow .18s;
}
[data-bthover="lift"] .wg-hero .btn-cta:hover { transform: translateY(-2px); box-shadow: 0 10px 22px -10px rgba(0,0,0,.5); }
[data-bthover="grow"] .wg-hero .btn-cta:hover { transform: scale(1.05); }
[data-bthover="fade"] .wg-hero .btn-cta:hover { filter: brightness(.9); }
/* ---- header sizing: read well at every block size ---- */
.wg-hero { overflow: hidden; }
/* large (wide) — side by side, big title */
.wg-hero.sz-l .ti-text > h1 { font-size: calc(clamp(28px, 4.4cqw, 46px) * var(--h1-scale, 1)); }
/* medium — stacked banner + text, moderate title */
.wg-hero.sz-m .ti-text > h1, .wg-hero.sz-m .ti-overtext > h1 { font-size: calc(clamp(21px, 3cqw, 30px) * var(--h1-scale, 1)); }
.wg-hero.sz-m .ti-text > p, .wg-hero.sz-m .ti-overtext > p { font-size: calc(clamp(13.5px, 1.6cqw, 16px) * var(--h2-scale, 1)); }
/* small — compact poster: smaller title, tighter padding, smaller button + social */
.wg-hero.sz-s .ti-overtext > h1 { font-size: calc(clamp(18px, 2.4cqw, 24px) * var(--h1-scale, 1)); line-height: 1.08; }
.wg-hero.sz-s .ti-overtext { padding: 14px; gap: 7px; }
.wg-hero.sz-s .btn-cta, .wg-hero.sz-m.h-s .btn-cta { padding: 9px 14px; font-size: calc(13px * var(--btn-size, 1)); margin-top: 6px; }
.wg-hero.sz-s .ti-text > .wg-social, .wg-hero.sz-s .ti-overtext > .wg-social { margin-top: 3px; }
.wg-hero.sz-s .ws-star { width: 13px; height: 13px; }
.wg-hero.sz-s .ws-tx { font-size: 12px; }
.wg-hero.sz-s .ws-av { width: 24px; height: 24px; margin-left: -8px; }
/* no-image header: sane title size for a small block (fit shrinks further if needed) */
.wg-header.sz-s h1 { font-size: calc(clamp(20px, 2.6cqw, 28px) * var(--h1-scale, 1)); }
/* narrow canvas (mobile) — the wide side-by-side hero stacks (image on top, text below) so it never cramps */
@container (max-width: 560px) {
  .wg-hero.sz-l:not(.ti-over) { flex-direction: column !important; align-items: stretch; gap: 14px; }
  .wg-hero.sz-l:not(.ti-over) .ti-img { width: 100% !important; flex: 0 0 auto !important; height: 200px; min-height: 0; }
  .wg-hero.sz-l:not(.ti-over) .ti-text { flex: 1 1 auto; width: 100%; min-width: 0; }
  .wg-hero.sz-l .ti-text > h1 { font-size: calc(clamp(26px, 8cqw, 38px) * var(--h1-scale, 1)); }
}
/* social-proof line (header) — star rating OR stacked avatars + a count/label */
.wg-social { display: inline-flex; align-items: center; gap: 9px; margin: 2px 0; flex-wrap: wrap; }
.ws-stars { display: inline-flex; gap: 2px; }
.ws-star { width: 15px; height: 15px; display: inline-grid; place-items: center; color: color-mix(in srgb, var(--ink) 26%, transparent); }
.ws-star.on { color: #f5a623; }
.ws-star svg { width: 100%; height: 100%; }
.ws-avs { display: inline-flex; padding-left: 2px; }
.ws-av { width: 32px; height: 32px; border-radius: 50%; background-size: cover; background-position: center; box-shadow: 0 0 0 2.5px var(--card-bg, #fff), 0 2px 5px -1px rgba(0,0,0,.28); margin-left: -11px; }
.ws-avs .ws-av:first-child { margin-left: 0; }
.wg-hero.ti-over .ws-av { box-shadow: 0 0 0 2.5px rgba(0,0,0,.35), 0 2px 5px -1px rgba(0,0,0,.4); }
.ws-tx { font-family: var(--ds-font, var(--font)); font-size: 14px; color: var(--ink-dim); font-weight: 600; }
.ws-tx b { color: var(--ink); font-weight: 750; }
/* ------------------------- widget: link ------------------------- */
a.wg-link { display: flex; flex-direction: column; gap: 10px; text-decoration: none; }
.ic {
  width: 44px; height: 44px; flex: 0 0 auto; border-radius: calc(var(--radius) * 0.4 + 4px);
  background: var(--icon-chip, color-mix(in srgb, var(--ink) 9%, transparent)); border: 1px solid var(--card-border);
  display: grid; place-items: center;
}
.ic svg { width: 22px; height: 22px; }
.wg-link .lk-label { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); color: var(--h1-color, var(--ink)); font-size: 18px; letter-spacing: -0.01em; }
.wg-link .lk-desc { font-family: var(--ds-font, var(--font)); color: var(--ds-color, var(--ink-dim)); font-size: calc(14px * var(--ds-scale, 1)); font-weight: var(--ds-weight, 400); font-style: var(--ds-style, normal); }
.wg-link .lk-host { font-family: var(--ds-font, var(--font)); color: var(--ink-faint); font-size: 12px; margin-top: auto; word-break: break-all; }
.w.s a.wg-link .lk-desc { display: none; }
/* ------------------------- widget: hours ------------------------- */
/* inner card: a styled group inside the widget (theme-controlled via Cards/Border → Inner) */
.wg-inner { background: var(--in-bg); border: var(--in-border-w, 0) solid var(--in-border, transparent); border-radius: var(--in-radius, 18px); padding: 6px 12px; margin: 14px 0 2px; }
[data-infill="glass"] .wg-inner { backdrop-filter: blur(var(--in-blur, 20px)) saturate(140%); -webkit-backdrop-filter: blur(var(--in-blur, 20px)) saturate(140%); box-shadow: inset 0 1px 0 rgba(255,255,255,0.12), inset 0 -1px 0 rgba(0,0,0,0.30), 0 8px 24px -14px rgba(0,0,0,0.5), var(--in-glow, 0 0 transparent); }
[data-infill="glass"] .wg-hours .row { border-bottom-color: rgba(255,255,255,0.08); }
.wg-hours .row { display: flex; justify-content: space-between; padding: 9px 0; border-bottom: 1px solid var(--hair); font-family: var(--lb-font, var(--font)); font-size: calc(15px * var(--lb-scale, 1)); font-weight: var(--lb-weight, 400); font-style: var(--lb-style, normal); color: var(--lb-color, var(--ink)); }
.wg-hours .row:last-child { border-bottom: 0; }
.wg-hours .row.today { color: var(--accent); font-weight: 600; }
.wg-hours .row .cl { font-family: var(--ds-font, var(--font)); color: var(--ds-color, var(--ink-dim)); font-weight: var(--ds-weight, 400); font-size: calc(1em * var(--ds-scale, 1) / var(--lb-scale, 1)); }
.wg-hours .row.closed .cl { color: var(--ink-faint); }
.w.s .wg-hours .row:nth-child(n+4) { display: none; } /* compact in square */
/* ===================== widgets v2 — every widget × every size its own layout ===================== */
.wg-link, .wg-text, .wg-contact, .wg-whatsapp, .wg-form, .wg-map, .wg-icons, .wg-gallery, .wg-hours { display: flex; flex-direction: column; }
/* universal heading (overline) — consistent across every widget */
.wg-h { margin: 0 0 12px; font-family: var(--lb-font, var(--font)); font-size: 11.5px; text-transform: uppercase; letter-spacing: .1em; font-weight: 700; color: var(--lb-color, var(--ink-faint)); }
.wg-bighead { margin: 0 0 6px; font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 800); font-style: var(--h1-style, normal); font-size: clamp(22px, 3.4cqw, 34px); color: var(--h1-color, var(--ink)); letter-spacing: -0.02em; line-height: 1.05; }
/* shared base head: overline LABEL · TITLE · DESCRIPTION — each hidden when empty.
   Typography tracks the theme's per-element roles (label/title/description). */
.wg-head2 { flex: 0 0 auto; display: flex; flex-direction: column; gap: 4px; margin: 0 0 12px; min-width: 0; }
.wg-head2:last-child { margin-bottom: 0; }
/* ── unified body: pinned head above, body fills the remaining card height ──
   so widgets never leave a dead gap at the bottom and never overlap themselves. */
.wg-body { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.wg-body.bd-top { justify-content: flex-start; }
.wg-body.bd-center { justify-content: safe center; } /* "safe" → never spill content over the head when it doesn't fit */
.wg-body.bd-between { justify-content: space-between; }
.wg-body.bd-fill > * { flex: 1 1 auto; min-height: 0; }
/* text widget: even breathing room between overline / title / paragraph (was cramped) */
.wg-text .wg-body { gap: 10px; }
.wg-text .wg-bighead, .wg-text .wg-ttl { margin-bottom: 0; }
.wg-ov { font-family: var(--lb-font, var(--font)); font-size: 11.5px; text-transform: uppercase; letter-spacing: .1em; font-weight: 700; color: var(--lb-color, var(--ink-faint)); }
.wg-ttl { margin: 0; font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); color: var(--h1-color, var(--ink)); text-shadow: var(--h1-glow, none); letter-spacing: -0.02em; line-height: 1.08; font-size: calc(clamp(18px, 2.4cqw, 23px) * var(--h1-scale, 1)); }
.wg-dsc { margin: 0; font-family: var(--ds-font, var(--font)); color: var(--ds-color, var(--ink-dim)); font-weight: var(--ds-weight, 400); font-style: var(--ds-style, normal); font-size: calc(14px * var(--ds-scale, 1)); line-height: 1.5; }
/* per-role text case (Aa / UPPER / lower / Title) — set per element in Design → Text, and on buttons in Design → Buttons */
.wg-header p, .wg-hero .ti-text > p, .wg-hero .ti-overtext > p { text-transform: var(--h2-transform, none); }
.wg-dsc, .wg-sub { text-transform: var(--ds-transform, none); }
.sz-l .wg-ttl { font-size: calc(clamp(22px, 3.2cqw, 32px) * var(--h1-scale, 1)); }
.sz-l .wg-dsc { font-size: calc(15px * var(--ds-scale, 1)); }
.sz-s .wg-ttl { font-size: calc(16px * var(--h1-scale, 1)); }
.sz-s .wg-head2 { margin-bottom: 8px; }
.ic.sm { width: 36px; height: 36px; }
.ic.sm svg { width: 18px; height: 18px; }
.lk-fav { width: 22px; height: 22px; border-radius: 5px; object-fit: cover; }
.wim-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 130px; color: var(--ink-faint); background: color-mix(in srgb, var(--ink) 5%, transparent); }
.wim-empty svg { width: 36px; height: 36px; }
/* "Add an image / Add photos" hint under the placeholder icon */
.wim-hint { display: block; font-family: var(--ds-font, var(--font)); font-size: 12px; font-weight: 600; letter-spacing: .01em; margin-top: 7px; opacity: .85; text-align: center; }
/* ---- LINK — the whole card IS the button (one destination, opens a new tab) ---- */
.wg-link { position: relative; text-decoration: none; cursor: pointer; transition: transform .15s, filter .15s; }
.wg-link:hover { transform: translateY(-2px); }
/* icon chip uses the same --icon-bg/-bd/-fg tokens as every other widget (contact, form, …) so the Icons setting is consistent */
.wg-link .lk-ic { width: 42px; height: 42px; flex: 0 0 auto; border-radius: calc(var(--radius) * 0.3 + 4px); display: grid; place-items: center; background: var(--icon-bg, color-mix(in srgb, var(--accent) 14%, transparent)); border: 1px solid var(--icon-bd, transparent); color: var(--icon-fg, var(--accent)); overflow: hidden; }
.wg-link .lk-ic svg { width: 22px; height: 22px; }
.wg-link .lk-ic.lk-img { background-size: cover; background-position: center; border: 0; }
.wg-link .lk-label { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); color: var(--h1-color, var(--ink)); font-size: clamp(16px, 2cqw, 19px); letter-spacing: -0.01em; min-width: 0; }
/* external-link badge — top-right corner, like the + (signals: opens a new tab) */
.wg-link .lk-ext { position: absolute; top: 12px; right: 12px; z-index: 2; width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; background: color-mix(in srgb, var(--ink) 9%, transparent); color: var(--ink); border: 1px solid color-mix(in srgb, var(--ink) 16%, transparent); opacity: .85; transition: opacity .15s; }
.wg-link:hover .lk-ext { opacity: 1; }
.wg-link .lk-ext svg { width: 15px; height: 15px; }
/* link bar — thumb left · label (wide & short); reserve room for the corner badge */
.wg-link.lk-bar { flex-direction: row; align-items: center; gap: 14px; padding-right: clamp(50px, 7cqw, 58px); }
.wg-link.lk-bar .lk-label { flex: 1; }
/* link tile — thumb on top · label under (small square, or any tall block) */
.wg-link.lk-tile { flex-direction: column; align-items: flex-start; justify-content: center; gap: 12px; }
.wg-link.lk-tile .lk-ic { width: 50px; height: 50px; }
.wg-link.lk-tile .lk-ic svg { width: 26px; height: 26px; }
.wg-link.lk-tile.sz-s { justify-content: space-between; }
.wg-link.lk-tile .lk-label { font-size: clamp(17px, 2.2cqw, 22px); }
/* ---- TEXT ---- */
.wg-text { gap: 8px; justify-content: center; min-height: 0; }
.wg-text .wg-body { min-height: 0; max-height: 100%; overflow: hidden; position: relative; }
.wg-p { margin: 0; font-family: var(--ds-font, var(--font)); color: var(--ds-color, var(--ink-dim)); font-size: calc(15px * var(--ds-scale, 1)); line-height: 1.55; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; }
/* clipped text fades out at the bottom so it's clear there's more — tap the card to read it all */
.wg-text.is-clamped .wg-body::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 36px; background: linear-gradient(transparent, var(--card-bg, rgba(0,0,0,0.4))); pointer-events: none; }
.wg-text.sz-l .wg-p { font-size: 17px; }
/* ---- IMAGE ---- */
.wg-image { padding: 0 !important; position: relative; min-height: 150px; }
.wg-image.sz-l { min-height: 320px; }
.wim { position: absolute; inset: 0; background-size: cover; background-position: center; z-index: 1; }
/* INSET frame (preset "Media edge → Padded"): the photo becomes a rounded block inside the card padding */
.w[data-frame="inset"] .wg-image { --fpad: clamp(14px, 2.2cqw, 20px); padding: var(--fpad) !important; background: var(--card-bg); }
.w[data-frame="inset"] .wg-image > .wim, .w[data-frame="inset"] .wg-image > .wim-empty { inset: var(--fpad); border-radius: var(--in-radius, 16px); overflow: hidden; }
.w[data-frame="inset"] .wg-image .wg-imgcap { padding: 0 var(--fpad) var(--fpad); }
/* deferred (lazy) photo placeholder — a faint fill until the image scrolls into view */
.lbg-ph { background-color: color-mix(in srgb, var(--ink) 7%, transparent); }
/* blurhash placeholder — the photo's own decoded low-res preview, upscaled (soft) until it loads */
.lbg-bh { background-size: cover !important; background-position: center !important; }
/* ── QR widget ── */
.wg-qr { display: flex; align-items: center; gap: clamp(12px, 3cqw, 22px); }
.qr-img { flex: 0 0 auto; width: clamp(92px, 34%, 160px); aspect-ratio: 1; display: block; }
.qr-img svg { width: 100%; height: 100%; display: block; }
.qr-empty { width: 100%; height: 100%; display: grid; place-items: center; border-radius: 16px; background: color-mix(in srgb, var(--ink) 8%, transparent); color: var(--ink-faint); }
.qr-tx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 9px; }
.qr-ov { white-space: nowrap; }
.qr-title { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); font-size: clamp(18px, 2.4cqw, 25px); color: var(--h1-color, var(--ink)); line-height: 1.1; letter-spacing: -0.01em; }
.qr-desc { margin: 0; }
.wg-qr.sz-s { gap: 12px; }
.wg-qr.sz-s .qr-img { width: clamp(74px, 40%, 96px); }
.wg-qr.sz-s .qr-title { font-size: 16px; }
/* tall/portrait cards → stack the QR on top, text centred below */
.wg-qr.h-l { flex-direction: column; text-align: center; justify-content: center; }
.wg-qr.h-l .qr-img { width: clamp(120px, 52cqw, 220px); }
.wg-qr.h-l .qr-tx { align-items: center; }
/* styled dropdown (app-native replacement for native <select>) */
/* QR preview in the preset design tab */
.qr-prevbox { display: grid; place-items: center; padding: 18px; border-radius: 16px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.08); margin-bottom: 16px; }
.qr-prevbox svg { width: 156px; height: 156px; max-width: 100%; }
/* master-template editor banner */
.tpl-banner { position: fixed; top: 12px; left: 50%; transform: translateX(-50%); z-index: 120; display: inline-flex; align-items: center; gap: 8px; max-width: calc(100vw - 24px); background: rgba(15,15,18,0.82); color: rgba(255,255,255,0.9); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(255,255,255,0.16); border-radius: 999px; padding: 9px 18px; font-family: var(--qck-font); font-size: 13px; line-height: 1.3; box-shadow: 0 12px 36px -12px rgba(0,0,0,0.6); pointer-events: none; }
.tpl-banner b { color: #fff; }
.tpl-banner svg { width: 15px; height: 15px; flex: 0 0 auto; }
body.is-template .undo-dock { top: 56px; }
/* the image widget's picture covers the card edge-to-edge — never blur it through the card fill */
.w[data-i] .card.wg-image { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
.card.wg-image::before { display: none; }
.wg-cap { font-family: var(--ds-font, var(--font)); position: absolute; left: 0; right: 0; bottom: 0; padding: 26px 18px 14px; color: #fff; font-size: 13.5px; font-weight: 500; background: linear-gradient(transparent, rgba(0,0,0,.65)); }
.wg-imgcap { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; display: flex; flex-direction: column; gap: 3px; padding: 30px 18px 16px; background: linear-gradient(transparent, rgba(0,0,0,.74)); }
.wg-imgcap .wg-ov { color: rgba(255,255,255,0.82); }
.wg-imgttl { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); font-size: clamp(17px, 2cqw, 23px); color: #fff; letter-spacing: -0.01em; line-height: 1.1; }
.wg-imgdsc { font-family: var(--ds-font, var(--font)); font-size: 13.5px; color: rgba(255,255,255,0.84); }
/* ---- TEXT + IMAGE ---- */
.wg-textimage { display: flex; flex-direction: column; gap: 14px; }
.wg-textimage .ti-text { display: flex; flex-direction: column; justify-content: center; }
.wg-textimage .ti-text .wg-head2 { margin: 0; }
.ti-img { width: 100%; flex: 1 1 auto; min-height: 120px; background-size: cover; background-position: center; border-radius: 16px; }
/* Image shape + shadow now come from the PRESET (Design → Images), via the .w node's data-img-shape / data-img-shadow. */
[data-img-shape="square"] .ti-img { border-radius: 0; }
[data-img-shape="round"] .ti-img { border-radius: 16px; }
[data-img-shape="squircle"] .ti-img { border-radius: 34px; corner-shape: squircle; }
[data-img-shape="pill"] .ti-img { border-radius: 999px; }
/* circle = a perfect circle: lock 1:1 and drop the min-height that was making it an oval */
[data-img-shape="circle"] .ti-img { border-radius: 50%; aspect-ratio: 1 / 1; min-height: 0; flex: 0 0 auto; width: clamp(160px, 74%, 340px); height: auto; align-self: center; }
[data-img-shadow="soft"] .ti-img { box-shadow: 0 14px 34px -18px rgba(0,0,0,0.45); }
[data-img-shadow="strong"] .ti-img { box-shadow: 0 22px 50px -18px rgba(0,0,0,0.6); }
/* link logo / favicon image follows the same shape */
[data-img-shape="square"] .wg-link .lk-ic { border-radius: 6px; }
[data-img-shape="squircle"] .wg-link .lk-ic { corner-shape: squircle; }
[data-img-shape="circle"] .wg-link .lk-ic, [data-img-shape="pill"] .wg-link .lk-ic { border-radius: 50%; }
[data-img-shadow="soft"] .wg-link .lk-ic.lk-img { box-shadow: 0 8px 20px -10px rgba(0,0,0,0.45); }
[data-img-shadow="strong"] .wg-link .lk-ic.lk-img { box-shadow: 0 12px 26px -10px rgba(0,0,0,0.6); }
/* below = image then text (default column); above = text then image */
.wg-textimage.ti-above:not(.sz-l) { flex-direction: column-reverse; }
/* large = side by side; align left → image left, right → image right */
.wg-textimage.sz-l:not(.ti-over) { flex-direction: row; align-items: stretch; gap: clamp(18px, 2.5cqw, 32px); }
.wg-textimage.sz-l.ti-al-right:not(.ti-over) { flex-direction: row-reverse; }
.wg-textimage.sz-l .ti-img { width: 46%; flex: 0 0 46%; min-height: 100%; }
[data-img-shape="circle"] .wg-textimage.sz-l .ti-img { width: clamp(160px, 40%, 340px); min-height: 0; height: auto; flex: 0 0 auto; align-self: center; }
.wg-textimage.sz-l .ti-text { flex: 1; min-width: 0; }
/* over = image as full background, text overlaid (poster) */
.wg-textimage.ti-over { padding: 0 !important; position: relative; overflow: hidden; background-size: cover; background-position: center; }
.ti-scrim { position: absolute; inset: 0; background: linear-gradient(0deg, rgba(0,0,0,.62), rgba(0,0,0,.12) 55%, transparent); }
.ti-noimg { position: absolute; inset: 0; display: grid; place-items: center; color: var(--ink-faint); background: color-mix(in srgb, var(--ink) 6%, transparent); }
.ti-noimg svg { width: 40px; height: 40px; }
.ti-overtext { position: relative; z-index: 1; margin-top: auto; padding: clamp(18px, 2.4cqw, 28px); }
.ti-over .ti-overtext .wg-ttl, .ti-over .ti-overtext .wg-ov { color: #fff; }
.ti-over .ti-overtext .wg-dsc { color: rgba(255,255,255,0.82); }
.ti-over .ti-overtext .wg-head2 { margin: 0; }
/* ── Image + text (the universal maker) ──────────────────────────────────────
   Photo · title · description · button, any of them optional. Scoped to .wg-timaker
   so the header — which reuses .wg-textimage as a hero — keeps its own layout. */
.wg-timaker .ti-overtext, .wg-timaker .ti-text { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
/* The scrim rides on the TEXT block, not the card, so however tall the text grows it always
   carries its own contrast — a card-anchored gradient leaves text stranded on a bright photo
   as soon as the card is short (mobile, 1×1 tiles). Fades out above the first line.
   Colour comes from the CARD, so the fade reads as part of the theme instead of a generic black
   wash. It's mixed INTO black rather than layered over it: light themes have white/cream cards,
   and overlaying those would wash the scrim out from under the white text. A red card gives a
   deep red, a cream card a warm charcoal — tinted, always dark enough to read on.
   Many stops on purpose: a 3-stop alpha ramp visibly bands over flat colour. */
.wg-timaker.ti-over .ti-overtext {
  --ti-tint: color-mix(in srgb, var(--card-bg, #101014) 24%, #000);
  background: linear-gradient(to top,
    color-mix(in srgb, var(--ti-tint) 84%, transparent) 0%,
    color-mix(in srgb, var(--ti-tint) 78%, transparent) 16%,
    color-mix(in srgb, var(--ti-tint) 66%, transparent) 33%,
    color-mix(in srgb, var(--ti-tint) 48%, transparent) 50%,
    color-mix(in srgb, var(--ti-tint) 29%, transparent) 66%,
    color-mix(in srgb, var(--ti-tint) 14%, transparent) 81%,
    color-mix(in srgb, var(--ti-tint) 5%, transparent) 92%,
    transparent 100%);
  padding-top: clamp(30px, 7cqw, 64px); }
.wg-timaker .ti-overtext > .wg-head2, .wg-timaker .ti-text > .wg-head2 { width: 100%; }
/* over a photo the button spans the card (it's the tile's one action); on a text-only card it hugs */
.wg-timaker.ti-over .ti-btn { align-self: stretch; justify-content: center; text-align: center; }
.wg-timaker .ti-btn { margin-top: 2px; }
/* small tiles: tighten the overlay so title + button still fit a 1×1 */
.wg-timaker.sz-s .ti-overtext { padding: 14px; gap: 8px; }
/* The maker is title-led, so its headline runs bigger than the generic widget title and steps
   up with the tile — otherwise a wide card reads as a small title floating in a lot of photo. */
.wg-timaker .wg-ttl { font-size: calc(clamp(20px, 2.9cqw, 27px) * var(--h1-scale, 1)); }
.wg-timaker.sz-m .wg-ttl { font-size: calc(clamp(23px, 3.6cqw, 34px) * var(--h1-scale, 1)); }
.wg-timaker.sz-l .wg-ttl { font-size: calc(clamp(27px, 4.4cqw, 42px) * var(--h1-scale, 1)); }
/* Text sits at the BOTTOM whether or not there's a photo — centring the text-only state made the
   copy jump the moment you removed the image. */
.wg-timaker.ti-textonly { justify-content: flex-end; }
/* INSET frame (preset "Media edge → Padded") — the photo becomes a rounded block inside the
   card's own padding, and the text overlay rides inside it so the copy still sits on the photo
   rather than on the card edge. Matches how .wg-image / .wg-map already read this preset. */
.w[data-frame="inset"] .wg-timaker.ti-over {
  --fpad: clamp(14px, 2.2cqw, 20px); padding: var(--fpad) !important; background: var(--card-bg); }
/* [data-i] is carried here only to out-specify the base .ti-photo fill rule further down the
   sheet — without it the two selectors tie and source order keeps the photo edge-to-edge. */
.w[data-i][data-frame="inset"] .wg-timaker.ti-over .ti-photo {
  inset: var(--fpad); border-radius: var(--in-radius, 16px); corner-shape: round; }
.w[data-frame="inset"] .wg-timaker.ti-over .ti-overtext {
  border-bottom-left-radius: var(--in-radius, 16px); border-bottom-right-radius: var(--in-radius, 16px); }
/* text-only (image removed) — a tidy themed card, no empty image box */
.wg-textimage.ti-textonly .ti-text { flex: 0 1 auto; }
.wg-textimage.ti-al-center.ti-textonly .ti-text { text-align: center; align-items: center; }
.wg-textimage.ti-al-right.ti-textonly .ti-text { text-align: right; align-items: flex-end; }
/* keep the icon + hint grouped and centered in the empty image box (.wim-hint styled globally) */
.ti-noimg { display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--ink-faint); }
/* ---- GALLERY ---- */
.wg-gallery.sz-s { padding: 0 !important; position: relative; min-height: 150px; }
.gal-badge { font-family: var(--ds-font, var(--font)); position: absolute; right: 10px; bottom: 10px; z-index: 2; background: rgba(0,0,0,.6); color: #fff; font-size: 12px; font-weight: 700; padding: 3px 9px; border-radius: 999px; }
.wg-gallery { display: flex; flex-direction: column; }
.wg-strip { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; margin: 0 -2px; padding: 2px; flex: 1 1 auto; min-height: 0; }
.wg-strip::-webkit-scrollbar { display: none; }
.wg-shot { flex: 0 0 auto; width: 33%; min-width: 120px; height: 100%; min-height: 0; aspect-ratio: 4 / 3; border-radius: 14px; background-size: cover; background-position: center; scroll-snap-align: start; }
.wg-gallery.sz-m .wg-shot { width: 44%; }
/* smallest gallery → cover image with the title overlaid */
.wg-gallery.gal-cover { padding: 0 !important; position: relative; overflow: hidden; background-size: cover; background-position: center; justify-content: flex-end; --ink: #fff; --lb-color: #fff; --ink-dim: rgba(255,255,255,0.86); --ink-faint: rgba(255,255,255,0.72); }
.gal-cover .gal-scrim { position: absolute; inset: 0; background: linear-gradient(transparent 35%, rgba(0,0,0,0.7)); }
.gal-cover .gal-overtext { position: relative; z-index: 1; padding: clamp(14px, 2.5cqw, 18px); }
.gal-cover .gal-overtext .wg-head2 { margin: 0; }
.gal-cover .wim-empty { position: absolute; inset: 0; }
/* small gallery → 2×2 photo mosaic (shows the gallery, not one over-zoomed crop) */
.wg-gallery.gal-mosaic { padding: 0 !important; position: relative; display: grid; gap: 3px; overflow: hidden; }
.gal-mosaic.m-1 { grid-template-columns: 1fr; }
.gal-mosaic.m-2 { grid-template-columns: 1fr 1fr; }
.gal-mosaic.m-3, .gal-mosaic.m-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
.gal-mosaic.m-3 .gal-cell:first-child { grid-row: span 2; }
.gal-cell { background-size: cover; background-position: center; width: 100%; height: 100%; min-height: 0; }
.gal-more { font-family: var(--ds-font, var(--font)); position: absolute; right: 8px; bottom: 8px; z-index: 2; background: rgba(0,0,0,0.62); color: #fff; border-radius: 8px; padding: 3px 8px; font-size: 12px; font-weight: 700; }
/* gallery lightbox modal — one big image + thumbnails to pick from */
.wx-lightbox { display: flex; flex-direction: column; gap: 14px; }
.wx-main { width: 100%; aspect-ratio: 16/10; border-radius: 16px; background-size: cover; background-position: center; background-color: rgba(255,255,255,0.05); }
.wx-thumbs { display: flex; gap: 10px; overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
.wx-thumbs::-webkit-scrollbar { display: none; }
.wx-thumb { flex: 0 0 auto; width: 96px; height: 72px; border-radius: 10px; background-size: cover; background-position: center; border: 2px solid transparent; cursor: pointer; padding: 0; opacity: .6; transition: opacity .15s, border-color .15s; }
.wx-thumb:hover { opacity: 1; }
.wx-thumb.on { opacity: 1; border-color: var(--ink, #fff); }
/* gallery editor — reorder arrows on each photo */
.wg-mini { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.wg-mcell { aspect-ratio: 1; border-radius: 12px; background-size: cover; background-position: center; min-height: 64px; }
/* ---- HOURS ---- */
.wg-htop { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 14px; padding-right: 34px; }
.wg-htop .wg-h { margin: 0; }
/* ============================ OPENING HOURS (redesign) ============================ */
/* status block: red/green dot + bold label + accent "Opens 09:00" sub-line */
/* day = an inner-card row (wears the preset's inner-card design). today = accent. */
/* on mobile (real device AND the editor's mobile preview) a 2-col week never fits — go single column */
@media (max-width: 600px) { .hr-days.grid2 { grid-template-columns: 1fr; } }
/* today = the inner group filled with the accent + light text (works on every theme) */
/* card layouts — status on top, days fill the rest */
/* small · short → status + big today time + sub */
/* small · medium → upcoming relative rows (plain, no card) */
/* wide · short → banner: status left, big today time right */
/* large · tall → ring + week list side by side */
/* 24h ring dial */
.hr-ring { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.hr-ring-dial { position: relative; width: 100%; max-width: 220px; aspect-ratio: 1; }
.hr-ring-svg { width: 100%; height: 100%; display: block; }
.hr-ring-bg { fill: none; stroke: color-mix(in srgb, var(--ink) 13%, transparent); stroke-width: 8; }
.hr-ring-fg { fill: none; stroke: var(--accent); stroke-width: 8; stroke-linecap: round; }
.hr-ring-c { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; }
/* The markup has emitted `.on` / `.off` here since the ring was written and only one of them was
   ever styled, so CLOSED NOW rendered in the open colour. Pre-existing — byte-identical before this
   session — and fixed here rather than left, since it is one line and it says the wrong thing.
   On the preset pair, like the tile's dot. */
.hr-ring-st { font-family: var(--lb-font, var(--font)); font-size: 12px; font-weight: 800; letter-spacing: .05em; color: var(--status-open, #34C759); }
.hr-ring-st.off { color: var(--status-closed, #F0563C); }
.hr-ring-h { font-family: var(--h1-font, var(--font)); font-weight: 700; font-size: clamp(34px, 7cqw, 52px); color: var(--ink); line-height: 1; }
.hr-ring-sub { font-family: var(--ds-font, var(--font)); font-size: 13px; color: var(--ink-dim); }
.hr-ring-now { font-family: var(--ds-font, var(--font)); font-size: 14px; color: var(--ink-dim); }
/* modal content — ring left + full week list right (uses the standard modal chrome) */
.hr-modal { display: grid; grid-template-columns: minmax(160px, 230px) 1fr; gap: 32px; align-items: center; }
.hr-modal-left { display: flex; justify-content: center; }
.hr-modal-right .wx-head { margin-bottom: 16px; }
.hr-modal .hr-ring-dial { max-width: 200px; }
@media (max-width: 680px) { .hr-modal { grid-template-columns: 1fr; gap: 22px; } .hr-modal-right .wx-head { justify-content: center; } .wg-hours.hr-showcase { grid-template-columns: 1fr; gap: 18px; } }
.wx-cal { display: flex; flex-direction: column; }
.wx-cal-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 6px; border-bottom: 1px solid var(--hair); }
.wx-cal-row:last-child { border-bottom: 0; }
.wx-cal-day { display: flex; align-items: baseline; gap: 10px; font-family: var(--lb-font, var(--font)); }
.wx-cal-day b { font-weight: 650; font-size: 17px; color: var(--ink); }
.wx-cal-row.today .wx-cal-day b { color: var(--accent); }
.wx-cal-date { font-family: var(--ds-font, var(--font)); font-size: 13px; color: var(--ink-faint); }
.wx-cal-time { font-family: var(--ds-font, var(--font)); font-size: 16px; color: var(--ink-dim); }
.wx-cal-row.today .wx-cal-time { color: var(--accent); font-weight: 650; }
.wx-cal-time.shut { color: var(--ink-faint); }
.wk-list { display: flex; flex-direction: column; }
.wk-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--hair); }
.wk-row:last-child { border-bottom: 0; }
.wk-row.today { color: var(--accent); }
.wk-day { display: flex; align-items: baseline; gap: 8px; font-family: var(--lb-font, var(--font)); }
.wk-day b { font-weight: 650; }
.wk-date { font-family: var(--ds-font, var(--font)); font-size: 12px; color: var(--ink-faint); }
.wk-row.today .wk-date { color: var(--accent); }
.wk-time { font-family: var(--ds-font, var(--font)); color: var(--ink-dim); }
.wk-row.today .wk-time { color: var(--accent); font-weight: 650; }
/* ---- CONTACT ---- */
/* accent icon chip (rounded square) — the shared element across every contact layout */
.ct-chip { width: 44px; height: 44px; flex: 0 0 auto; border-radius: min(var(--in-radius, 14px), 14px); display: grid; place-items: center; background: var(--icon-bg, color-mix(in srgb, var(--accent) 14%, transparent)); border: 1px solid var(--icon-bd, transparent); color: var(--icon-fg, var(--accent)); }
.ct-chip svg { width: 22px; height: 22px; }
.ct-chip.lg { width: 50px; height: 50px; }
.ct-chip.lg svg { width: 24px; height: 24px; }
.ct-title { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-size: clamp(20px, 2.4cqw, 26px); color: var(--h1-color, var(--ink)); margin-bottom: 6px; }
/* value rows (chip + value) — floating, no tile */
.ct-rows { display: flex; flex-direction: column; gap: 14px; width: 100%; }
.ct-rows.two { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 20px; }
.ct-row { display: flex; align-items: center; gap: 14px; min-width: 0; }
.ct-val { font-family: var(--lb-font, var(--font)); font-weight: 650; font-size: 16px; color: var(--lb-color, var(--ink)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* horizontal label banner (chip + LABEL/value) — wide + short */
.ct-banner { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 40px; width: 100%; }
.ct-lrow { display: flex; align-items: center; gap: 14px; min-width: 0; }
.ct-lr-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ct-lr-l { font-family: var(--lb-font, var(--font)); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--ds-color, var(--ink-faint)); }
.ct-lr-v { font-family: var(--lb-font, var(--font)); font-weight: 650; font-size: 16px; color: var(--lb-color, var(--ink)); white-space: nowrap; }
/* labelled groups (chip + label/value) — spacious, large + tall */
.ct-groups { display: flex; flex-direction: column; gap: 18px; width: 100%; }
.ct-groups.two { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 28px; }
.ct-groups .ct-chip { width: 48px; height: 48px; }
.ct-groups .ct-lr-v { font-size: clamp(17px, 2cqw, 21px); }
.ct-groups.two .ct-lr-v { font-size: 17px; }
/* teaser (chat chip + title + subtitle) — medium + short */
.wg-contact.ct-teaser .wg-body { flex-direction: row; align-items: center; gap: 16px; }
.ct-teaser-tx { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.ct-teaser-t { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-size: clamp(19px, 2.2cqw, 24px); color: var(--h1-color, var(--ink)); }
.ct-teaser-s { font-family: var(--ds-font, var(--font)); font-size: 14px; color: var(--ds-color, var(--ink-dim)); text-transform: capitalize; }
/* contact modal — big tappable icon-chip rows (chip · label/value · chevron) */
.ct-mlist { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
.ct-mrow { display: flex; align-items: center; gap: 16px; padding: 12px 8px; text-decoration: none; border-radius: 14px; transition: background .12s; }
.ct-mrow:hover { background: color-mix(in srgb, var(--ink) 7%, transparent); }
.ct-mrow-tx { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }
.ct-mrow-l { font-family: var(--lb-font, var(--font)); font-size: 11.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--ds-color, var(--ink-faint)); }
.ct-mrow-v { font-family: var(--lb-font, var(--font)); font-weight: 650; font-size: 17px; color: var(--lb-color, var(--ink)); word-break: break-word; }
.ct-mrow-go { flex: 0 0 auto; color: var(--ink-faint); display: grid; }
.ct-mrow-go svg { width: 18px; height: 18px; }
.wx-sub { font-family: var(--ds-font, var(--font)); font-size: 15px; color: var(--ink-dim); margin: 6px 0 0; }
/* ---- WHATSAPP ---- */
/* ============================ WHATSAPP (chat) — accent-coloured ============================ */
.wg-whatsapp { gap: 14px; }
.wa-head { display: flex; align-items: center; gap: 13px; }
.wa-ic { width: 46px; height: 46px; flex: 0 0 auto; border-radius: 13px; background: var(--icon-bg, var(--accent)); border: 1px solid var(--icon-bd, transparent); color: var(--icon-fg, var(--on-accent)); display: grid; place-items: center; }
.wa-ic svg { width: 24px; height: 24px; }
.wa-ic.lg { width: 56px; height: 56px; border-radius: 16px; }
.wa-ic.lg svg { width: 28px; height: 28px; }
.wa-htx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.wa-title, .wa-mtitle { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); font-size: clamp(18px, 2.1cqw, 22px); color: var(--h1-color, var(--ink)); }
.wa-status { display: flex; align-items: center; gap: 7px; font-family: var(--ds-font, var(--font)); font-size: 13.5px; color: var(--accent); }
.wa-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); flex: 0 0 auto; }
/* faux message input (display only — the whole card opens the modal) */
.wa-faux { font-family: var(--ds-font, var(--font)); flex: 1; min-width: 0; display: flex; align-items: center; padding: 0 16px; height: 48px; border-radius: min(var(--input-radius, 12px), 24px); background: var(--input-bg, color-mix(in srgb, var(--ink) 6%, transparent)); border: 1px solid var(--input-bd, var(--card-border)); color: color-mix(in srgb, var(--input-ink, var(--ink)) 55%, transparent); font-size: 15px; }
/* the send button wears the preset's BUTTON style */
.wa-sendbtn { width: 48px; height: 48px; flex: 0 0 auto; border-radius: var(--btn-radius, 12px); background: var(--btn-bg); color: var(--btn-text); display: grid; place-items: center; }
.wa-sendbtn svg { width: 20px; height: 20px; }
.wa-bar { display: flex; align-items: center; gap: 10px; }
.wa-bar.grow { flex: 1; }
/* banner (wide · short) */
.wg-whatsapp.wa-banner .wg-body { flex-direction: row; align-items: center; justify-content: space-between; gap: 16px; }
.wg-whatsapp.wa-banner .wa-head { flex: 0 0 auto; }
/* chat layout (header + greeting bubble + message bar) */
.wg-whatsapp.wa-chat { gap: 14px; }
.wa-stream { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.wg-whatsapp.wa-chat .wa-bar { margin-top: auto; }
/* greeting bubble = the INNER CARD (styleable via the Inner card design) */
.wa-bubble { align-self: flex-start; max-width: 92%; background: var(--in-bg, color-mix(in srgb, var(--ink) 8%, transparent)); border: var(--in-border-w, 1px) solid var(--in-border, var(--card-border)); border-radius: min(var(--in-radius, 16px), 20px); border-bottom-left-radius: 5px; padding: 11px 15px; font-family: var(--ds-font, var(--font)); font-size: 15px; color: var(--in-ink, var(--ink)); }
.wa-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.wg-sub { margin: 0 0 14px; font-family: var(--ds-font, var(--font)); color: var(--ink-dim); font-size: 14.5px; line-height: 1.5; }
/* ---- FORM ---- */
/* form widget — a clean PREVIEW (opens the form modal, like WhatsApp) + small teaser */
.wg-form { gap: 12px; justify-content: flex-start; }
.wg-form.form-teaser { flex-direction: row; align-items: center; gap: 14px; cursor: pointer; text-align: left; font: inherit; color: var(--ink); width: 100%; -webkit-appearance: none; appearance: none; }
.form-teaser .ct-teaser-s { text-transform: none; }
.ff-head { display: flex; flex-direction: column; gap: 3px; flex: 0 0 auto; }
.ff-title { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-size: clamp(18px, 2.3cqw, 24px); color: var(--h1-color, var(--ink)); letter-spacing: -0.01em; line-height: 1.1; }
.ff-sub { font-family: var(--ds-font, var(--font)); font-size: 14px; color: var(--ds-color, var(--ink-dim)); }
/* preview fields (non-interactive faux inputs that mirror the real form) */
.ff-preview { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; flex: 1 1 auto; min-height: 0; align-content: start; }
.ff-field { min-width: 0; }
.ff-field.wide { grid-column: 1 / -1; }
.ff-faux { width: 100%; background: var(--input-bg, color-mix(in srgb, var(--ink) 6%, transparent)); border: 1px solid var(--input-bd, var(--card-border)); border-radius: min(var(--input-radius, 14px), 22px); color: color-mix(in srgb, var(--input-ink, var(--ink)) 50%, transparent); padding: 13px 15px; font-family: var(--ds-font, var(--font)); font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pointer-events: none; }
.ff-faux.ff-area { min-height: 64px; }
.ff-choice.faux { display: flex; gap: 8px; flex-wrap: wrap; pointer-events: none; }
.ff-choice.faux .ff-opt { display: inline-block; }
/* corner send pill — small, bottom-right, wears the preset button tokens */
.ff-send { align-self: flex-end; } /* styling comes from .btn-cta + the preset's data-btnstyle */
.ff-send-ic { display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: color-mix(in srgb, var(--btn-text, #111) 16%, transparent); }
.ff-send-ic svg { width: 15px; height: 15px; color: var(--btn-text, #111); }
/* MODAL form (the real, functional one) */
.wg-forminline { display: flex; flex-direction: column; gap: 10px; }
.ff-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.wg-input { width: 100%; background: var(--input-bg, color-mix(in srgb, var(--ink) 6%, transparent)); border: 1px solid var(--input-bd, var(--card-border)); border-radius: min(var(--input-radius, 14px), 22px); color: var(--input-ink, var(--ink)); padding: 13px 15px; font: inherit; font-size: 15px; outline: none; transition: border-color .12s; }
.wg-input::placeholder { color: color-mix(in srgb, var(--input-ink, var(--ink)) 48%, transparent); }
.wg-input:focus { border-color: var(--input-color, var(--ink)); }
textarea.wg-input { resize: vertical; min-height: 88px; line-height: 1.45; }
.ff-choice { display: flex; gap: 8px; flex-wrap: wrap; }
.ff-opt { flex: 1 1 auto; min-width: 84px; padding: 12px 14px; border-radius: min(var(--input-radius, 14px), 22px); border: 1px solid var(--input-bd, var(--card-border)); background: var(--input-bg, color-mix(in srgb, var(--ink) 6%, transparent)); color: var(--input-ink, var(--ink)); font: inherit; font-weight: 600; font-size: 14px; cursor: pointer; transition: border-color .12s, background .12s, color .12s; }
.ff-opt:hover { border-color: var(--accent); }
.ff-opt.on { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); font-weight: 700; }
.ff-submit { width: 100%; margin-top: 2px; }
/* short height → one inline row: head · fields · send */
.wg-form.form-banner { flex-direction: row; align-items: center; gap: 16px; }
.form-banner .ff-head { max-width: 34%; }
/* lowest height → no fields, just title + Send (title grows so Send sits on the right) */
.wg-form.form-bannerteaser { cursor: pointer; }
.form-bannerteaser .ff-head { flex: 1 1 auto; max-width: none; }
.form-bannerteaser .ff-send { align-self: center; flex: 0 0 auto; }
.form-banner .ff-preview { display: flex; flex: 1 1 auto; gap: 10px; align-items: center; min-width: 0; }
.form-banner .ff-field { flex: 1 1 0; min-width: 0; }
.form-banner .ff-field.wide { display: none; }
.form-banner .ff-faux.ff-area { display: none; }
.form-banner .ff-send { align-self: center; flex: 0 0 auto; }
/* whatsapp preset shown as a chat bubble */
.wa-bubble { align-self: flex-start; max-width: 90%; background: color-mix(in srgb, var(--ink) 8%, transparent); border: 1px solid var(--card-border); border-radius: 14px 14px 14px 4px; padding: 10px 13px; font-family: var(--ds-font, var(--font)); font-size: 14px; color: var(--ds-color, var(--ink-dim)); margin: 2px 0 10px; }
/* ---- COUNTDOWN ---- */
/* ============================ COUNTDOWN (redesign) ============================ */
/* the big hero number (accent gradient) */
/* unit tiles (inner-card style; last/most-urgent = accent) */
/* s·s big */
/* s·m hero + tiles */
/* s·l stacked rows */
/* l·s inline banner */
/* tiles row (m·s / m·m / l·m) */
/* showcase (tall) */
/* end state — message replaces the countdown */
/* ---- MAP ---- */
.wg-map { gap: 12px; }
/* themeable faux-map illustration (land + roads + accent pin) */
.map-art-wrap { position: relative; display: block; width: 100%; height: 100%; border-radius: 14px; overflow: hidden; background: var(--map-land); }
/* the map makes its own rounded rect (border-radius + overflow), so it won't follow a squircle card on its own — match the corner shape */
[data-corner="squircle"] .map-art-wrap, [data-corner="squircle"] .map-pill { corner-shape: squircle; }
.map-art { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
/* real-tile basemap (static slippy-map mosaic) */
.map-tiles { position: absolute; inset: 0; overflow: hidden; }
.map-tile { position: absolute; width: 256px; height: 256px; max-width: none; user-select: none; -webkit-user-drag: none; }
.map-attr { position: absolute; right: 4px; bottom: 2px; z-index: 2; font-size: 8.5px; line-height: 1; color: rgba(0,0,0,0.45); background: rgba(255,255,255,0.5); padding: 1px 3px; border-radius: 3px; pointer-events: none; font-family: var(--font); }
.map-art-wrap.has-tiles { background: #e8eaed; }
.map-pin { position: absolute; left: 50%; top: 50%; width: 24px; transform: translate(-50%, -88%); filter: drop-shadow(0 4px 5px rgba(0,0,0,0.35)); pointer-events: none; z-index: 1; }
.map-pin svg { width: 100%; height: auto; display: block; }
/* marker with a photo (a rounded image card above a glowing dot) */
.map-dot { position: absolute; left: 50%; top: 50%; width: 16px; height: 16px; border-radius: 50%; transform: translate(-50%, -50%); background: var(--map-pin, var(--accent)); border: 3px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,0.12), 0 0 16px 2px color-mix(in srgb, var(--map-pin, var(--accent)) 70%, transparent); z-index: 1; pointer-events: none; }
.map-photo { position: absolute; left: 50%; bottom: calc(50% + 14px); transform: translateX(-50%); width: 84px; height: 60px; border-radius: 12px; background-size: cover; background-position: center; border: 3px solid #fff; box-shadow: 0 10px 22px -6px rgba(0,0,0,0.45); z-index: 2; pointer-events: none; }
.map-photo::after { content: ""; position: absolute; left: 50%; bottom: -7px; transform: translateX(-50%); border: 5px solid transparent; border-top-color: #fff; }
/* custom photo marker — the image IS the marker, clipped to the shape, sized to fit (never overflows) */
.map-imark { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: clamp(40px, 22%, 54px); aspect-ratio: 1 / 1; background-size: cover; background-position: center; border: 3px solid #fff; box-shadow: 0 6px 16px -5px rgba(0,0,0,0.5); z-index: 2; pointer-events: none; }
.map-imark.mim-circle { border-radius: 50%; }
.map-imark.mim-square { border-radius: 12px; }
.map-imark .mim-tail { position: absolute; left: 50%; bottom: -7px; transform: translateX(-50%); width: 0; height: 0; border: 5px solid transparent; border-top-color: #fff; }
/* standalone marker shapes (Design → Map → Marker shape) */
.map-dot.solo { width: 18px; height: 18px; }
.map-square { position: absolute; left: 50%; top: 50%; width: 22px; height: 22px; border-radius: 7px; transform: translate(-50%, -50%); background: var(--map-pin, var(--accent)); border: 3px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,0.12), 0 6px 14px -4px color-mix(in srgb, var(--map-pin, var(--accent)) 70%, transparent); z-index: 1; pointer-events: none; }
/* blinking marker — a pulsing ring under the pin/dot, centred on the marker point */
.map-pulse { position: absolute; left: 50%; top: 50%; width: 14px; height: 14px; border-radius: 50%; transform: translate(-50%, -50%); background: var(--map-pin, var(--accent)); z-index: 1; pointer-events: none; animation: mapPulse 1.9s ease-out infinite; }
@keyframes mapPulse { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--map-pin, var(--accent)) 55%, transparent); opacity: .85; } 70% { box-shadow: 0 0 0 16px transparent; opacity: 0; } 100% { box-shadow: 0 0 0 0 transparent; opacity: 0; } }
/* with a custom photo marker, sit the pulse at the marker's base so the ring radiates below it (not hidden behind) */
.map-pulse.mp-img { top: calc(50% + clamp(20px, 11%, 27px)); }
@media (prefers-reduced-motion: reduce) { .map-pulse { animation: none; opacity: 0; } }
.map-tx { display: block; min-width: 0; }
/* titles/addresses WRAP (up to 2 lines) instead of truncating to one ellipsis'd line */
.map-ot { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-size: clamp(16px, 2.1cqw, 20px); color: var(--h1-color, var(--ink)); letter-spacing: -0.01em; line-height: 1.2; text-wrap: balance; }
.map-os { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-family: var(--ds-font, var(--font)); color: var(--ds-color, var(--ink-dim)); font-size: 14px; margin-top: 3px; line-height: 1.3; }
/* ---- MAP: the map core fills the card; text/button carve space out of it (overlay when wide,
   a bottom panel when small). Two frames, theme-decided: BLEED = map is the card surface
   (edge-to-edge) · INSET = a rounded map sitting inside the card's padding. ---- */
.wg-map.map-full { gap: 0; position: relative; overflow: hidden; display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 150px; }
.map-hit { position: absolute; inset: 0; z-index: 1; background: transparent; border: 0; padding: 0; cursor: pointer; }
/* the map art */
.map-full .map-art-wrap { position: relative; flex: 1 1 auto; min-height: 0; z-index: 0; }
/* scrims + overlaid text/button (wide) */
.map-scrim { position: absolute; left: 0; right: 0; z-index: 2; pointer-events: none; }
.map-scrim-top { top: 0; height: 46%; background: linear-gradient(to bottom, rgba(0,0,0,0.6), transparent); }
.map-scrim-bot { bottom: 0; height: 56%; background: linear-gradient(to top, rgba(0,0,0,0.66), transparent); }
.map-head { position: absolute; top: 0; left: 0; right: 0; z-index: 3; padding: clamp(16px, 2.4cqw, 26px); pointer-events: none; }
.map-foot { position: absolute; bottom: 0; left: 0; right: 0; z-index: 3; padding: clamp(14px, 2.2cqw, 22px); display: flex; justify-content: flex-end; pointer-events: none; }
.map-wide.map-bleed .map-ot { color: #fff; font-size: clamp(20px, 3.4cqw, 34px); }
.map-wide.map-bleed .map-os { color: rgba(255,255,255,0.85); font-size: clamp(13px, 1.7cqw, 16px); }
.map-wide .map-ot { font-size: clamp(20px, 3.4cqw, 34px); }
.map-btn { pointer-events: auto; flex: 0 0 auto; }
/* small (tall / square) → content sits in a bottom panel; the map fills (and centres) above it */
.map-sm .map-panel { position: relative; z-index: 3; padding: clamp(15px, 5cqw, 20px); display: flex; flex-direction: column; gap: 11px; }
.map-sm .map-panel .map-btn { align-self: stretch; text-align: center; justify-content: center; }
/* ---- BLEED frame: the map IS the card surface ---- */
.wg-map.map-bleed { padding: 0 !important; background: var(--map-land); }
.w[data-i] .card.map-bleed, .wm-card.map-bleed { outline: none !important; border: 0 !important; box-shadow: var(--card-drop, 0 16px 40px -30px rgba(0,0,0,0.4)) !important; }
.wg-map.map-bleed::after { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 1px solid color-mix(in srgb, var(--map-ink) 12%, transparent); pointer-events: none; z-index: 4; }
.map-bleed .map-art-wrap { border-radius: inherit; }
.map-bleed.map-wide .map-art-wrap { position: absolute; inset: 0; } /* wide: overlays float on the full map */
.map-bleed.map-sm .map-art-wrap { border-radius: 0; } /* small: bottom sits flush against the panel (card overflow rounds the top) — no corner notch */
.map-bleed.map-sm .map-panel { background: var(--card-bg); border-top: 1px solid var(--card-border); }
.map-bleed.map-sm .map-panel .map-ot { color: var(--h1-color, var(--ink)); }
.map-bleed.map-sm .map-panel .map-os { color: var(--ds-color, var(--ink-dim)); }
/* ---- INSET frame: a rounded map inside the card's own padding + surface ---- */
.wg-map.map-inset { --map-pad: clamp(14px, 2.2cqw, 20px); padding: var(--map-pad) !important; background: var(--card-bg); }
.map-inset .map-art-wrap { border-radius: var(--in-radius, 16px); overflow: hidden; }
.map-inset.map-wide .map-art-wrap { position: absolute; inset: var(--map-pad); } /* wide: map fills the padded area, overlays float on it */
.map-inset.map-wide .map-head { padding: calc(var(--map-pad) + 12px); }
.map-inset.map-wide .map-foot { padding: calc(var(--map-pad) + 12px); }
.map-inset.map-wide .map-ot { color: #fff; }
.map-inset.map-wide .map-os { color: rgba(255,255,255,0.85); }
/* inset small → map on top, content below inside the card surface (no separate solid strip) */
.map-inset.map-sm .map-panel { padding: clamp(13px, 3cqw, 16px) 2px 2px; }
.map-inset.map-sm .map-panel .map-ot { color: var(--h1-color, var(--ink)); }
.map-inset.map-sm .map-panel .map-os { color: var(--ds-color, var(--ink-dim)); }
/* map preview in the preset Map tab */
.map-prevbox { position: relative; width: 100%; height: 92px; border-radius: 12px; overflow: hidden; margin-bottom: 6px; }
/* empty-space block — invisible on the live site, a faint guide in the editor */
.wg-spacer { position: relative; width: 100%; height: 100%; min-height: 32px; display: flex; align-items: center; justify-content: center; }
.wg-spacer.is-edit { min-height: 44px; border: 1.5px dashed var(--hair, rgba(255,255,255,0.16)); border-radius: 14px; }
.wg-spacer .sp-hint { font-family: var(--font); font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--ink-faint, rgba(255,255,255,0.4)); pointer-events: none; }
/* in Preview / on the live site the spacer is pure whitespace — no guide, no label */
body.preview .wg-spacer.is-edit { border: none; }
body.preview .wg-spacer .sp-hint { display: none; }
/* ---- BUTTONS (multiple links) ---- */
.wg-buttons { gap: 10px; justify-content: center; }
.wg-btnstack { display: flex; flex-direction: column; gap: 9px; }
.wg-btn { display: flex; align-items: center; justify-content: center; gap: 9px; text-decoration: none; padding: 14px 16px; border-radius: var(--btn-radius, calc(var(--radius) * 0.55 + 6px)); background: var(--btn-bg, #fff); color: var(--btn-text, #111); font-family: var(--btn-font, var(--lb-font, var(--font))); font-weight: var(--btn-weight, 650); font-size: calc(15px * var(--btn-size, 1)); transition: transform .15s, filter .15s; }
.wg-btn:hover { transform: translateY(-1px); filter: brightness(.96); }
.wg-btn-ic { display: grid; }
.wg-btn-ic svg { width: 18px; height: 18px; }
/* ---- INSTAGRAM (profile) ---- */
/* ---- ICONS ---- */
.wg-icons { justify-content: center; }
.wg-iconrow { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.wg-ico { width: 46px; height: 46px; border-radius: calc(var(--radius) * 0.4 + 4px); display: grid; place-items: center; background: var(--icon-bg, color-mix(in srgb, var(--ink) 8%, transparent)); border: 1px solid var(--icon-bd, var(--card-border)); color: var(--icon-fg, var(--icon-color, var(--ink))); transition: transform .15s; }
.wg-ico:hover { transform: translateY(-2px); }
.wg-ico svg { width: 22px; height: 22px; }
/* buttons everywhere: keep their icon small (was rendering giant) */
/* base CTA button — wears the preset's button tokens (incl. pill radius) everywhere */
/* + expand affordance — TOP-right, like nxtwk */
/* + expand: derives from the card's own ink, so it auto-matches every card style
   (glass, solid, coloured multi…) with no separate setting. */
.w-expand { position: absolute; right: 12px; top: 12px; width: 32px; height: 32px; border-radius: 50%; border: 1px solid color-mix(in srgb, var(--ink) 20%, transparent); cursor: pointer; display: grid; place-items: center; background: color-mix(in srgb, var(--ink) 12%, transparent); color: var(--ink); backdrop-filter: blur(10px); opacity: .9; transition: opacity .15s, transform .15s; z-index: 6; }
.w-expand:hover { opacity: 1; transform: scale(1.08); }
.w-expand svg { width: 17px; height: 17px; }
body.is-owner .w-expand { display: none; } /* hide while editing (tools take the corner); shows in preview/public */
body.is-owner.preview .w-expand { display: grid; }
/* ===================== expand modal — centered, max 1240, themed glass (nxtwk morph) ===================== */
/* scrim itself scrolls; the card centres via margin:auto when it fits, and top-aligns (top reachable)
   when it's taller than the viewport — align-items:center would clip the top out of the scroll area */
.wm-scrim { position: fixed; inset: 0; z-index: 200; display: none; overflow-y: auto; padding: clamp(14px, 3cqw, 40px); background: rgba(4,4,8,0.42); opacity: 0; transition: opacity .26s ease; }
.wm-scrim.on { display: flex; opacity: 1; }
.wm-card { margin: auto; }
/* opaque element background so a low-opacity / glass card never shows the page through the modal (scroll-safe, covers every fill; image/gradient/duotone paint their own opaque bg on top) */
.wm-card { display: block; position: relative; width: min(1240px, 100%); max-height: 100%; overflow-y: auto; -webkit-overflow-scrolling: touch; border-radius: clamp(22px, 3cqw, 34px); color: var(--ink); padding: clamp(26px, 4cqw, 52px); background: var(--wm-solid, #15151b); }
/* the morph: source card (name set inline in JS, old state) and modal share a
   name so the browser tweens card → modal. */
.wm-card { view-transition-name: wmorph; }
::view-transition-group(wmorph) { animation-duration: .42s; animation-timing-function: cubic-bezier(.32,.72,0,1); }
::view-transition-old(wmorph), ::view-transition-new(wmorph) { border-radius: clamp(22px, 3cqw, 34px); overflow: clip; height: 100%; }
/* siblings recede while a card is expanded */
body.wm-open #grid .w { transition: opacity .3s ease, transform .3s ease; }
body.wm-open #grid .w.wm-source { opacity: 0; }
/* the modal mirrors a big glass card so it reads as part of the theme */
/* fallback glass — only when the modal has no specific fill (otherwise the fill rules above win) */
[data-base="dark"] .wm-card:not([data-fill]) { background: rgba(18,18,24,0.5); border: 1px solid rgba(255,255,255,0.16); box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.22), inset 0 -1px 0 0 rgba(0,0,0,0.25), 0 50px 100px -30px rgba(0,0,0,0.7); backdrop-filter: blur(44px) saturate(160%); -webkit-backdrop-filter: blur(44px) saturate(160%); }
[data-base="light"] .wm-card:not([data-fill]) { background: rgba(252,250,247,0.72); border: 1px solid rgba(0,0,0,0.08); box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.6), 0 50px 100px -30px rgba(0,0,0,0.3); backdrop-filter: blur(44px) saturate(150%); -webkit-backdrop-filter: blur(44px) saturate(150%); }
.wm-body { max-width: 1040px; margin: 0 auto; }
/* text-led modals read better narrow; media-led ones use the full width */
.wg-contact .wm-body, .wg-whatsapp .wm-body, .wg-form .wm-body, .wg-hours .wm-body { max-width: 680px; }
/* sticky top bar keeps the close button visible while the modal scrolls */
.wm-top { position: sticky; top: 0; height: 0; z-index: 20; pointer-events: none; }
.wm-x { position: absolute; top: 4px; right: 0; width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--card-border); background: color-mix(in srgb, var(--wm-solid, #15151b) 88%, var(--ink)); color: var(--ink); display: grid; place-items: center; cursor: pointer; z-index: 20; pointer-events: auto; backdrop-filter: blur(6px); }
/* keep the expanded map a sensible size (not full-screen) */
.wx-mapart { aspect-ratio: 16 / 9; max-height: min(46vh, 380px); margin-left: auto; margin-right: auto; }
.wm-x:hover { background: color-mix(in srgb, var(--ink) 16%, transparent); }
.wm-x svg { width: 17px; height: 17px; }
/* ---- REVIEWS ---- */
.wg-reviews { display: flex; flex-direction: column; gap: 14px; justify-content: center; }
.rv-rating { display: flex; align-items: center; gap: 14px; }
.rv-num { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 800); font-size: clamp(34px, 7cqw, 54px); line-height: 1; color: var(--ink); letter-spacing: -0.02em; }
.rv-rmeta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.rv-stars { display: inline-flex; gap: 2px; color: color-mix(in srgb, var(--ink) 28%, transparent); flex: 0 0 auto; }
.rv-star { width: 16px; height: 16px; display: inline-grid; place-items: center; }
.rv-star svg { width: 100%; height: 100%; }
.rv-star.on { color: #f5a623; }
.rv-stars.sm .rv-star { width: 13px; height: 13px; }
.rv-count { font-family: var(--ds-font, var(--font)); font-size: 13px; color: var(--ink-dim); }
.rv-cards { display: flex; flex-direction: column; gap: 10px; }
.wg-reviews.sz-l .rv-cards { display: grid; grid-template-columns: 1fr 1fr; }
.rv-card { background: var(--in-bg, color-mix(in srgb, var(--ink) 6%, transparent)); border: var(--in-border-w, 1px) solid var(--in-border, transparent); border-radius: min(var(--in-radius, 16px), 18px); padding: 14px 15px; display: flex; flex-direction: column; gap: 8px; }
.rv-quote { font-family: var(--ds-font, var(--font)); font-size: 14.5px; line-height: 1.5; color: var(--in-ink, var(--ink)); margin: 0; }
/* truncate long reviews on the CARD; the popup shows them in full */
.wg-reviews .rv-quote { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.rv-card-full .rv-quote { display: block; -webkit-line-clamp: unset; overflow: visible; }
.rv-by { display: flex; align-items: center; gap: 8px; }
.rv-av { width: 24px; height: 24px; border-radius: 50%; background-size: cover; background-position: center; flex: 0 0 auto; background-color: color-mix(in srgb, var(--ink) 12%, transparent); }
.rv-author { font-family: var(--lb-font, var(--font)); font-weight: 650; font-size: 13px; color: var(--lb-color, var(--ink)); }
.rv-when { font-family: var(--ds-font, var(--font)); font-size: 12px; color: var(--ink-faint); }
.rv-invite { font-family: var(--ds-font, var(--font)); font-size: 14px; color: var(--ink-dim); margin: 0; }
/* popup: content-sized panel — card stays display:block so the sticky .wm-top keeps the X pinned
   to the top while the reviews list scrolls (a flex card breaks position:sticky on its scroller) */
/* the MODAL reviews card must stay block (the inline .wg-reviews rule above flexes + centres it, which
   pushes a tall review list's top out of the scroll area — top becomes unreachable). Block = top-aligned. */
.wm-card.wg-reviews { display: block; }
.wm-card.wg-reviews .wm-body { display: flex; flex-direction: column; }
.rv-modal { display: flex; flex-direction: column; gap: 18px; }
.wm-card.wg-reviews .rv-cta { margin-top: 4px; }
.rv-mhead { display: flex; align-items: center; gap: 16px; margin: 0; }
.rv-bignum { font-family: var(--h1-font, var(--font)); font-weight: 800; font-size: clamp(40px, 9cqw, 62px); line-height: 1; color: var(--ink); }
.rv-bigmeta { display: flex; flex-direction: column; gap: 6px; }
.rv-bigmeta .rv-star { width: 20px; height: 20px; }
.rv-mlist { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; align-content: start; }
.rv-mfoot { display: flex; flex-direction: column; align-items: center; gap: 16px; margin-top: 22px; }
.rv-modal .rv-cta { justify-content: center; min-width: 240px; } /* use the preset's button style (colour/style/radius), not a hardcoded accent */
.rv-cta svg { width: 16px; height: 16px; }
.rv-seeall { font-family: var(--ds-font, var(--font)); color: var(--ink-dim); font-size: 13.5px; font-weight: 600; text-decoration: none; }
.rv-seeall:hover { color: var(--ink); }
@container (max-width: 720px) { .wg-reviews.sz-l .rv-cards { grid-template-columns: 1fr; } }
/* ── Menu widget — themed rows, inset (never-bleeding) thumbnail, accent price ── */
.wg-menu .mn-list { display: flex; flex-direction: column; }
.mn-row { display: flex; align-items: center; gap: 14px; padding: 9px 0; border-bottom: 1px solid var(--hair); }
.mn-list .mn-row:last-child { border-bottom: 0; }
.mn-thumb { width: 56px; height: 56px; flex: 0 0 auto; background-size: cover; background-position: center; border-radius: 14px; }
.mn-tx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.mn-nm { font-family: var(--lb-font, var(--font)); font-weight: 700; color: var(--lb-color, var(--ink)); display: flex; align-items: center; gap: 8px; font-size: 16px; line-height: 1.2; }
.mn-desc { font-family: var(--ds-font, var(--font)); color: var(--ink-dim); font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mn-price { font-family: var(--lb-font, var(--font)); flex: 0 0 auto; font-weight: 700; color: var(--accent); font-size: 15px; }
.mn-tag { font-size: 10.5px; font-weight: 800; letter-spacing: .02em; padding: 2px 8px; border-radius: 999px; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); }
.mn-min { gap: 8px; }
.mn-min .mn-dots { flex: 1 1 auto; align-self: flex-end; border-bottom: 1.5px dotted var(--ink-faint); margin: 0 4px 6px; }
.mn-min .mn-nm { font-size: 15px; }
.mn-more { margin-top: 13px; align-self: flex-start; background: none; border: 0; cursor: pointer; color: var(--accent); font-weight: 700; font-family: inherit; font-size: 14px; display: inline-flex; align-items: center; gap: 7px; padding: 0; }
.mn-more-ar, .mn-more-ar svg { width: 16px; height: 16px; display: inline-grid; }
.mn-empty { display: flex; flex-direction: column; align-items: center; gap: 10px; color: var(--ink-faint); padding: 18px 0; }
.mn-empty svg { width: 28px; height: 28px; }
/* thumbnails follow the preset's image shape/shadow (Design → Images), like .ti-img */
[data-img-shape="square"] .mn-thumb { border-radius: 4px; }
[data-img-shape="round"] .mn-thumb { border-radius: 14px; }
[data-img-shape="squircle"] .mn-thumb { border-radius: 20px; corner-shape: squircle; }
[data-img-shape="pill"] .mn-thumb, [data-img-shape="circle"] .mn-thumb { border-radius: 50%; }
[data-img-shadow="soft"] .mn-thumb { box-shadow: 0 8px 18px -10px rgba(0,0,0,.45); }
[data-img-shadow="strong"] .mn-thumb { box-shadow: 0 12px 26px -10px rgba(0,0,0,.6); }
/* expand modal — the full menu (left-aligned head, category pills, zoomable photos) */
.mn-modal .mn-htx { display: flex; flex-direction: column; align-items: flex-start; gap: 5px; }
.mn-modal .mn-mlist { display: flex; flex-direction: column; }
.mn-modal .mn-row { padding: 14px 0; }
/* tag section titles — shown only under "All" (hidden when a single tag is filtered) */
.mn-grouph { font-family: var(--lb-font, var(--font)); font-size: 12.5px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em; color: var(--accent); margin: 20px 0 4px; }
.mn-group:first-child .mn-grouph { margin-top: 2px; }
.mn-modal .mn-thumb { width: 64px; height: 64px; }
.mn-group { display: none; }
.mn-group.on { display: block; }
.mn-zoomable { cursor: zoom-in; }
.mn-zoom { position: fixed; inset: 0; z-index: 400; background: rgba(0,0,0,0.82); backdrop-filter: blur(8px); display: grid; place-items: center; padding: 24px; cursor: zoom-out; animation: mnZoomIn .16s ease; }
@keyframes mnZoomIn { from { opacity: 0; } to { opacity: 1; } }
.mn-zoom img { max-width: min(92vw, 720px); max-height: 86vh; border-radius: 22px; box-shadow: 0 30px 80px -20px rgba(0,0,0,.7); }
.mn-zoom-x { position: absolute; top: 18px; right: 18px; width: 42px; height: 42px; border-radius: 50%; border: 0; background: rgba(255,255,255,0.16); color: #fff; cursor: pointer; display: grid; place-items: center; }
.mn-zoom-x svg { width: 20px; height: 20px; }
/* item editor: multi-select tag chips (+ add new) + tag chips on a settings row */
.mn-tagsel { display: flex; flex-wrap: wrap; gap: 7px; align-items: center; }
.mn-tchip { padding: 7px 13px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.14); background: rgba(255,255,255,0.04); color: rgba(255,255,255,0.72); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; transition: background .12s, color .12s, border-color .12s; }
.mn-tchip:hover { background: rgba(255,255,255,0.1); color: #fff; }
.mn-tchip.on { background: #fff; color: #111; border-color: #fff; }
.mn-tagadd { display: inline-flex; align-items: center; gap: 5px; }
.mn-taginput { height: 36px !important; width: 124px; padding: 6px 12px !important; font-size: 13px !important; border-radius: 999px !important; }
.mn-tagaddbtn { width: 36px; height: 36px; flex: 0 0 auto; border-radius: 50%; border: 1px dashed rgba(255,255,255,0.26); background: transparent; color: rgba(255,255,255,0.7); cursor: pointer; display: grid; place-items: center; }
.mn-tagaddbtn:hover { color: #fff; border-color: rgba(255,255,255,0.5); }
.mn-tagaddbtn svg { width: 16px; height: 16px; }
/* settings rows + item modal */
.fm-2col { display: flex; gap: 10px; }
.fm-2col .field { flex: 1 1 0; min-width: 0; }
/* picker preview + settings editor */
.pk-rvnum { font-weight: 800; font-size: 15px; color: var(--ink, #fff); }
.pk-rvstars { color: var(--qck, #FB5A2D); font-size: 10px; letter-spacing: 1px; }
.rv-edit { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 12px; padding: 10px; margin-bottom: 8px; }
.rv-edit-top { display: flex; gap: 8px; margin-bottom: 8px; }
.rv-edit-top .input { flex: 1; min-width: 0; }
.rv-rate-stars { display: inline-flex; gap: 1px; flex: 0 0 auto; }
.rv-rs { width: 26px; height: 26px; padding: 4px; background: none; border: 0; cursor: pointer; color: rgba(255,255,255,0.18); display: grid; place-items: center; }
.rv-rs svg { width: 100%; height: 100%; }
.rv-rs.on { color: var(--qck, #FB5A2D); }
.rv-rate-lg .rv-rs { width: 38px; height: 38px; padding: 5px; }
/* settings: compact review rows (tap to edit in a modal) */
.rv-row { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 12px; padding: 11px 12px; margin-bottom: 8px; cursor: pointer; color: inherit; font: inherit; }
.rv-row:hover { border-color: rgba(255,255,255,0.2); }
.rv-row-stars { flex: 0 0 auto; }
.rv-row-stars .rv-star { width: 12px; height: 12px; }
.rv-row-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.rv-row-author { font-weight: 650; font-size: 13px; color: #fff; }
.rv-row-snippet { font-size: 12.5px; color: rgba(255,255,255,0.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rv-row-del { flex: 0 0 auto; width: 28px; height: 28px; border: 0; background: none; color: rgba(255,255,255,0.4); cursor: pointer; border-radius: 8px; display: grid; place-items: center; }
.rv-row-del:hover { background: rgba(255,255,255,0.1); color: #fff; }
.rv-row-del svg { width: 15px; height: 15px; }
/* card — collect mode */
.rv-collect { gap: 12px; }
.rv-fakebtn { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; padding: 11px 18px; border-radius: var(--btn-radius, 999px); background: var(--btn-bg, var(--accent)); color: var(--btn-text, #fff); font-family: var(--btn-font, var(--font)); font-weight: 700; font-size: 14px; }
.rv-fakebtn svg { width: 15px; height: 15px; }
.rv-tag { font-family: var(--ds-font, var(--font)); display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--accent); font-weight: 650; margin-top: 6px; }
.rv-tag svg { width: 12px; height: 12px; }
/* modal — write panel (collect) */
.rv-write { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center; padding: 22px; border-radius: 18px; background: var(--in-bg, color-mix(in srgb, var(--ink) 6%, transparent)); }
.rv-write-t { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-size: 20px; color: var(--ink); }
.rv-write .rv-stars.big .rv-star { width: 30px; height: 30px; }
.rv-write .rv-cta { align-self: stretch; }
.rv-write-note { font-family: var(--ds-font, var(--font)); font-size: 12px; color: var(--ink-faint); }
.wx-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 24px; }
.wx-head h2 { margin: 0; font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); font-size: clamp(28px, 5cqw, 44px); color: var(--ink); letter-spacing: -0.02em; }
/* hours week */
.wx-week { display: flex; flex-direction: column; }
.wk-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 4px; border-bottom: 1px solid var(--hair); }
.wk-row:last-child { border-bottom: 0; }
.wk-row.today { color: var(--accent); }
.wk-day { display: flex; align-items: baseline; gap: 8px; font-family: var(--lb-font, var(--font)); }
.wk-day b { font-weight: 650; }
.wk-date { font-family: var(--ds-font, var(--font)); font-size: 12px; color: var(--ink-faint); }
.wk-row.today .wk-date { color: var(--accent); }
.wk-time { font-family: var(--ds-font, var(--font)); color: var(--ink-dim); }
.wk-row.today .wk-time { color: var(--accent); font-weight: 650; }
/* image / gallery expanded */
.wx-image { width: 100%; aspect-ratio: 4/3; border-radius: 16px; background-size: cover; background-position: center; }
/* expanded image modal: centered, as big as fits the screen, natural aspect */
.wx-image-box { display: grid; place-items: center; width: 100%; }
.wx-image-img { max-width: 100%; max-height: 72vh; border-radius: 14px; display: block; object-fit: contain; }
/* "Open full screen" means FULL screen: max-width alone never scales a photo UP, so a modest
   source sat tiny in the middle of a big empty sheet. Fill the width, cap on height. */
.wx-photo { width: 100%; height: auto; }
.wx-cap { font-family: var(--ds-font, var(--font)); margin-top: 12px; color: var(--ink-dim); font-size: 14px; }
.wx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 12px; }
.wx-cell { aspect-ratio: 1; border-radius: 14px; background-size: cover; background-position: center; }
/* whatsapp / form expanded */
.wx-form { display: flex; flex-direction: column; gap: 14px; }
/* whatsapp modal — chat composer */
/* whatsapp modal — a real chat window: header + bubble + chips at top, composer pinned bottom */
.wg-whatsapp .wm-body { height: 100%; display: flex; flex-direction: column; }
.wa-modal { display: flex; flex-direction: column; gap: 18px; flex: 1 1 auto; min-height: 0; }
.wa-mhead { display: flex; align-items: center; gap: 14px; flex: 0 0 auto; }
.wa-mstream { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; flex: 1 1 auto; min-height: 0; overflow-y: auto; }
.wa-composer { flex: 0 0 auto; }
.wa-mstream .wa-bubble { font-size: 16px; padding: 13px 17px; }
/* quick replies wear the preset's BUTTON style (sized as chips) */
.wa-qr { padding: 9px 16px; font-size: 14px; min-width: 0; }
.wa-composer { display: flex; align-items: stretch; gap: 10px; margin-top: 6px; }
.wa-input2 { flex: 1; min-width: 0; height: 54px; border-radius: min(var(--input-radius, 14px), 27px); background: var(--input-bg, color-mix(in srgb, var(--ink) 6%, transparent)); border: 1px solid var(--input-bd, var(--card-border)); color: var(--input-ink, var(--ink)); padding: 0 18px; font: inherit; font-size: 16px; outline: none; }
.wa-input2::placeholder { color: color-mix(in srgb, var(--input-ink, var(--ink)) 50%, transparent); }
/* focus colour follows the input's own Colour setting (not the accent) */
.wa-input2:focus, .wg-input:focus { border-color: var(--input-color, var(--ink)); }
/* generic themeable input class (for the preview + future fields) */
.wg-input { background: var(--input-bg); border: 1px solid var(--input-bd); border-radius: min(var(--input-radius, 14px), 27px); color: var(--input-ink); }
.wa-send2 { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 9px; height: 54px; padding: 0 22px; }
.wa-send2 svg { width: 20px; height: 20px; }
/* whatsapp settings: quick-reply rows (subtle remove, tidy spacing) */
.wa-presets { display: flex; flex-direction: column; gap: 10px; margin-bottom: 10px; }
.wa-prow { display: flex; align-items: center; gap: 8px; }
.wa-prow .input { flex: 1; }
.wa-prow .wa-px { width: 38px; height: 46px; flex: 0 0 auto; border: 0; background: transparent; color: rgba(255,255,255,0.4); display: grid; place-items: center; border-radius: 9px; cursor: pointer; transition: background .12s, color .12s; }
.wa-prow .wa-px:hover { background: rgba(255,255,255,0.08); color: #fff; }
.wa-prow .wa-px svg { width: 16px; height: 16px; }
.ff { display: flex; flex-direction: column; gap: 7px; }
.ff > span { font-family: var(--lb-font, var(--font)); font-size: 13px; font-weight: 600; color: var(--ink-dim); }
.wx-form .input, .wa-compose .input { background: color-mix(in srgb, var(--ink) 5%, transparent); border: 1px solid var(--card-border); color: var(--ink); border-radius: 12px; padding: 12px 14px; font: inherit; font-family: var(--ds-font, var(--font)); }
/* map expanded */
.wx-mapart { position: relative; width: 100%; aspect-ratio: 16/10; border-radius: 16px; overflow: hidden; margin-bottom: 14px; }
.wx-mapart .map-art-wrap { width: 100%; height: 100%; border-radius: 16px; }
.wx-mapart .map-pin { width: 30px; }
.wx-addr { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 12px; background: color-mix(in srgb, var(--ink) 5%, transparent); margin-bottom: 12px; }
.wx-addr-ic { color: var(--accent); display: grid; place-items: center; flex: 0 0 auto; }
.wx-addr-ic svg { width: 20px; height: 20px; }
.wx-addr-tx { font-family: var(--ds-font, var(--font)); flex: 1 1 auto; min-width: 0; font-size: 14px; color: var(--ink-dim); line-height: 1.4; }
.wx-copy { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 5px; background: var(--btn-bg, #fff); color: var(--btn-text, #111); border: 0; border-radius: 9px; padding: 8px 12px; font-family: var(--font); font-weight: 650; font-size: 13px; cursor: pointer; }
.wx-copy svg { width: 15px; height: 15px; color: var(--btn-text, #111); }
.wx-copy:hover { filter: brightness(1.05); }
/* instagram expanded */
.wm-body .btn-cta { align-self: center; margin-top: 4px; }
/* widget content editor extras */
.gal-add { aspect-ratio: 1; border: 1px dashed rgba(255,255,255,0.22); background: rgba(255,255,255,0.04); border-radius: 10px; color: rgba(255,255,255,0.6); cursor: pointer; display: grid; place-items: center; }
.ff-row, .ic-row { display: flex; gap: 7px; align-items: center; margin-bottom: 8px; position: relative; }
.ff-row .input, .ic-row .input { flex: 1; min-width: 0; }
.ff-row .th-seg { flex: 0 0 auto; }
.ff-row .gal-x, .ic-row .gal-x { position: static; flex: 0 0 auto; background: rgba(255,255,255,0.1); }
.ic-sel { flex: 0 0 110px; }
/* ------------------------- editor chrome ------------------------- */
.w { position: relative; }
.w-tools { display: none; }
body.is-owner .w-tools {
  display: flex; gap: 6px; position: absolute; top: 10px; right: 10px; z-index: 5;
}
body.is-owner .w[data-i] { cursor: grab; user-select: none; -webkit-user-select: none; }
body.is-owner .w[data-i] a, body.is-owner .w[data-i] img { -webkit-user-drag: none; user-select: none; }
body.is-dragging .w[data-i] { cursor: grabbing; }
body.preview .w[data-i] { cursor: default; user-select: auto; }
.w.dragging .card { opacity: .28; outline: 2px dashed var(--accent); outline-offset: -2px; }
.w-ghost { border-radius: var(--radius); transform: scale(1.03); opacity: .96; box-shadow: 0 34px 70px -22px rgba(0,0,0,0.78); }
.w-ghost .w-tools { display: none; }
/* ── per-block device visibility ── public site hides; editor keeps it (dimmed + badge) */
/* public site AND Preview mode hide the block (grid reflows); the editor keeps it (dimmed + badge) */
/* simulated device preview (owner picks Mobile/Tablet — shrinks the canvas, not the viewport)
   → class-based and authoritative so the right blocks hide regardless of real screen width */
body.preview.dev-mobile .w.hide-mobile { display: none !important; }
body.preview.dev-tablet .w.hide-tablet { display: none !important; }
/* real viewport — the public site, and preview with no device simulation (desktop / actual phone) */
@media (max-width: 600px) { body:not(.is-owner) .w.hide-mobile, body.preview:not(.dev-mobile):not(.dev-tablet):not(.dev-desktop):not(.tilt) .w.hide-mobile { display: none !important; } }
@media (min-width: 601px) and (max-width: 1024px) { body:not(.is-owner) .w.hide-tablet, body.preview:not(.dev-mobile):not(.dev-tablet):not(.dev-desktop):not(.tilt) .w.hide-tablet { display: none !important; } }
@media (min-width: 1025px) { body:not(.is-owner) .w.hide-desktop, body.preview:not(.dev-mobile):not(.dev-tablet):not(.dev-desktop):not(.tilt) .w.hide-desktop { display: none !important; } }
/* tilt = a desktop-width canvas previewed on a phone → treat as desktop: show mobile/tablet-hidden, hide desktop-hidden */
body.preview.tilt .w.hide-desktop { display: none !important; }
/* "off" — a block disabled for everyone. Visitors + preview never see it; owner sees it dimmed with an Off badge so it can be turned back on. */
body:not(.is-owner) .w.w-off, body.preview .w.w-off { display: none !important; }
body:not(.is-owner) .sec-slot:has(> .w.w-off), body.preview .sec-slot:has(> .w.w-off) { display: none; }
body.is-owner:not(.preview) .w.w-off > .card { opacity: .42; filter: grayscale(.4); }
.w-offbadge { background: rgba(0,0,0,.78) !important; }
/* payment celebration: confetti + thank-you toast */
.qck-confetti { position: fixed; inset: 0; z-index: 300; pointer-events: none; overflow: hidden; }
.qck-confetti i { position: absolute; top: -24px; display: block; border-radius: 2px; animation-name: confFall; animation-timing-function: cubic-bezier(.25,.6,.55,1); animation-fill-mode: forwards; }
@keyframes confFall { 0% { transform: translateY(0) rotate(0); opacity: 1; } 100% { transform: translateY(108vh) rotate(560deg); opacity: .5; } }
.thanks-toast { position: fixed; left: 50%; bottom: 24px; transform: translate(-50%, 160%); z-index: 301; display: flex; align-items: center; gap: 13px; width: max-content; max-width: min(460px, calc(100vw - 28px)); padding: 13px 14px 13px 17px; border-radius: 16px; background: rgba(20,20,22,0.96); border: 1px solid rgba(255,255,255,0.12); box-shadow: 0 18px 50px -16px rgba(0,0,0,0.7); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); transition: transform .32s cubic-bezier(.2,.8,.2,1); }
.thanks-toast.on { transform: translate(-50%, 0); }
.tt-emoji { font-size: 26px; flex: 0 0 auto; line-height: 1; }
.tt-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.tt-tx b { color: #fff; font-size: 14.5px; }
.tt-tx > span { color: rgba(255,255,255,0.6); font-size: 12.5px; }
.tt-share { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; background: #fff; color: #111; border: 0; border-radius: 10px; padding: 9px 13px; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.tt-share svg { width: 15px; height: 15px; }
.tt-x { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 50%; border: 0; background: rgba(255,255,255,0.1); color: rgba(255,255,255,0.7); cursor: pointer; display: grid; place-items: center; }
.tt-x:hover { background: rgba(255,255,255,0.18); color: #fff; }
.tt-x svg { width: 14px; height: 14px; }
/* Pro-widget heads-up toast (owner, free site) */
.pro-toast { position: fixed; left: 50%; top: 16px; transform: translate(-50%, -180%); z-index: 301; display: flex; align-items: center; gap: 13px; width: max-content; max-width: min(480px, calc(100vw - 28px)); padding: 13px 14px 13px 16px; border-radius: 16px; background: rgba(20,20,22,0.96); border: 1px solid rgba(255,255,255,0.12); box-shadow: 0 18px 50px -16px rgba(0,0,0,0.7); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); transition: transform .32s cubic-bezier(.2,.8,.2,1); }
.pro-toast.on { transform: translate(-50%, 0); }
.pt-ic { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; background: rgba(251,90,45,0.16); color: #fb5a2d; }
.pt-ic svg { width: 18px; height: 18px; }
.pt-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pt-tx b { color: #fff; font-size: 14px; }
.pt-tx > span { color: rgba(255,255,255,0.6); font-size: 12.5px; line-height: 1.4; }
.pt-up { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; background: #fb5a2d; color: #fff; border: 0; border-radius: 10px; padding: 9px 14px; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.pt-up svg { width: 15px; height: 15px; }
.pt-up:hover { filter: brightness(1.06); }
.pt-x { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 50%; border: 0; background: rgba(255,255,255,0.1); color: rgba(255,255,255,0.7); cursor: pointer; display: grid; place-items: center; }
.pt-x:hover { background: rgba(255,255,255,0.18); color: #fff; }
.pt-x svg { width: 14px; height: 14px; }
@media (max-width: 520px) { .pro-toast { flex-wrap: wrap; max-width: calc(100vw - 24px); } .pt-tx { flex: 1 1 100%; order: 2; } }
/* hidden blocks keep full opacity in the editor (the badge tells the story) so you can still design them; check the real layout in Preview */
/* on mobile the editor is a single column — the width tool does nothing, so hide it (height + reorder + settings stay) */
@media (max-width: 600px) { body.is-owner .w-tools [data-act="resize"] { display: none; } }
.w-hidebadge { position: absolute; left: 10px; top: 10px; z-index: 5; display: inline-flex; align-items: center; gap: 6px; background: rgba(0,0,0,0.62); color: #fff; border: 1px solid rgba(255,255,255,0.18); border-radius: 999px; padding: 5px 11px 5px 9px; font-size: 11.5px; font-weight: 650; backdrop-filter: blur(8px); text-transform: capitalize; }
.w-hidebadge svg { width: 14px; height: 14px; }
body.preview .w-hidebadge { display: none; }
/* visibility tab toggles */
.vis-offrow { display: flex; align-items: center; gap: 14px; width: 100%; text-align: left; background: #161617; border: 1px solid rgba(255,255,255,0.1); border-radius: 14px; padding: 14px 16px; margin-bottom: 22px; cursor: pointer; font: inherit; color: #fff; transition: border-color .12s; }
.vis-offrow:hover { border-color: rgba(255,255,255,0.26); }
.vis-offrow.off { border-color: rgba(251,90,45,.45); background: rgba(251,90,45,.07); }
.vis-offtx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.vis-offtx b { font-size: 14px; font-weight: 700; }
.vis-offtx span { font-size: 12.5px; color: rgba(255,255,255,0.55); line-height: 1.35; }
.vis-switch { flex: 0 0 auto; width: 46px; height: 28px; border-radius: 999px; background: rgba(255,255,255,0.16); position: relative; transition: background .15s; }
.vis-switch.on { background: #30D158; }
.vis-knob { position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; transition: transform .15s; }
.vis-switch.on .vis-knob { transform: translateX(18px); }
.dev-toggles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.dev-tog { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 16px 8px 12px; border: 1px solid rgba(255,255,255,0.12); border-radius: 14px; background: #161617; color: rgba(255,255,255,0.55); cursor: pointer; font: inherit; position: relative; transition: border-color .12s, color .12s; }
.dev-tog .dev-ic svg { width: 26px; height: 26px; }
.dev-tog .dev-l { font-size: 13px; font-weight: 650; }
.dev-tog:hover { border-color: rgba(255,255,255,0.3); }
.dev-tog.on { color: #fff; border-color: #fff; }
.dev-ck { position: absolute; top: 7px; right: 7px; color: var(--qck); }
.dev-ck svg { width: 15px; height: 15px; }
.dev-preset-row { display: flex; align-items: center; gap: 11px; width: 100%; margin-bottom: 10px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; padding: 11px 13px; cursor: pointer; font: inherit; color: #fff; }
.dev-preset-row:hover { border-color: rgba(255,255,255,0.28); }
.dev-preset-row > svg:first-child { width: 19px; height: 19px; color: rgba(255,255,255,0.55); flex: 0 0 auto; }
.dev-preset-row .dpr-l { font-size: 14px; font-weight: 650; }
.dev-preset-row .dpr-cur { margin-left: auto; font-size: 13px; color: var(--qck); font-weight: 650; }
.dev-preset-row > svg:last-child { width: 14px; height: 14px; color: rgba(255,255,255,0.4); flex: 0 0 auto; }
body.is-dragging { user-select: none; -webkit-user-select: none; cursor: grabbing; }
.w-btn {
  width: 32px; height: 32px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.2);
  background: rgba(0,0,0,0.5); color: #fff; backdrop-filter: blur(8px);
  display: grid; place-items: center; cursor: pointer; padding: 0;
}
.w-btn:hover { background: rgba(0,0,0,0.72); }
.w-btn svg { width: 16px; height: 16px; }
.w-btn:disabled { opacity: .35; pointer-events: none; }
/* desktop: drag to reorder, so hide the up/down arrows; keep the height control */
.w-move { display: none; }
/* mobile: drag is unreliable → show up/down arrows. Keep the height tool (it sets the
   desktop height tier, worth editing from the phone even though mobile is single-column). */
@media (max-width: 700px) {
  body.is-owner .w-move { display: grid; }
}
/* owner toolbar — centered pill in edit mode; collapses to a corner "Edit"
   button in preview mode (animated). */
/* claim-this-site (pre-built outreach sites) */
.claim-fab { position: fixed; left: 50%; bottom: 18px; z-index: 50; display: inline-flex; align-items: center; gap: 9px; padding: 13px 18px; border-radius: 999px; border: 0; cursor: pointer; background: #fff; color: #111; font: inherit; font-weight: 700; font-size: 15px; white-space: nowrap; box-shadow: 0 12px 30px -8px rgba(0,0,0,0.5); transform: translateX(-50%); animation: claimpulse 2.6s ease-in-out infinite; }
.claim-fab svg { width: 18px; height: 18px; }
@keyframes claimpulse { 0%,100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(-3px); } }
.claim-ov { position: fixed; inset: 0; z-index: 70; background: rgba(4,4,8,0.55); backdrop-filter: blur(6px); display: flex; align-items: flex-end; justify-content: center; }
.claim-card { width: 100%; max-width: 540px; background: #161617; border: 1px solid rgba(255,255,255,0.1); border-bottom: 0; border-radius: 26px 26px 0 0; padding: 14px 22px calc(22px + env(safe-area-inset-bottom)); color: #f4f3f0; text-align: left; animation: claimUp .26s cubic-bezier(.2,.8,.2,1); }
@keyframes claimUp { from { transform: translateY(100%); } to { transform: translateY(0); } }
.claim-card h2 { margin: 4px 0 6px; font-size: 22px; }
.claim-card p { margin: 0 0 16px; color: rgba(255,255,255,0.6); font-size: 14px; line-height: 1.5; }
.cb-ic { width: 32px; height: 32px; border-radius: 9px; background: color-mix(in srgb, var(--qck) 16%, transparent); color: var(--qck); display: grid; place-items: center; flex: 0 0 auto; }
.cb-ic svg { width: 17px; height: 17px; }
.claim-fine { margin: 11px 0 0 !important; text-align: center; color: rgba(255,255,255,0.42) !important; font-size: 12px !important; }
.claim-card .input { width: 100%; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.14); border-radius: 12px; color: #fff; font: inherit; font-size: 15px; padding: 13px 15px; outline: none; }
.claim-go { width: 100%; margin-top: 12px; background: #fff; color: #111; border: 0; border-radius: 12px; padding: 14px; font-weight: 700; font-size: 15px; cursor: pointer; }
.claim-google { width: 100%; margin-top: 12px; display: flex; align-items: center; justify-content: center; gap: 11px; background: #fff; color: #1f1f1f; border: 0; border-radius: 12px; padding: 14px; font: inherit; font-weight: 650; font-size: 15.5px; cursor: pointer; }
.claim-google:hover { background: #f3f3f3; }
.claim-google .g-logo { width: 20px; height: 20px; flex: 0 0 auto; }
.claim-peek { display: block; margin: 14px auto 2px; background: none; border: 0; color: rgba(255,255,255,0.55); font: inherit; font-size: 14px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.claim-peek:hover { color: rgba(255,255,255,0.85); }
.claim-err { color: #ff8a8a; font-size: 13px; min-height: 16px; margin-top: 8px; }
.claim-x { background: none; border: 0; color: rgba(255,255,255,0.5); font: inherit; cursor: pointer; margin-top: 6px; }
/* no-signup draft: the "save & edit" fab is the primary action — orange, bottom-centre */
.draft-fab { left: 50%; transform: translateX(-50%); bottom: 22px; background: var(--qck, #FB5A2D); color: #fff; padding: 13px 22px; font-size: 15px; white-space: nowrap; box-shadow: 0 14px 34px -12px rgba(251,90,45,.55); }
@media (max-width: 560px) { .draft-fab { bottom: 16px; padding: 11px 19px; font-size: 14px; gap: 7px; animation: none; box-shadow: 0 10px 26px -10px rgba(251,90,45,.5); } .draft-fab svg { width: 16px; height: 16px; } }
/* Draft "lite editor" bar — Design · Layout · Save(orange). Mirrors the editor pill so a pre-signup
   visitor can restyle their generated site (and it persists through the Google claim). */
.draft-bar { display: flex; position: fixed; left: 50%; bottom: 18px; transform: translateX(-50%); z-index: 60; gap: 2px; padding: 7px; border-radius: 999px; align-items: center; max-width: calc(100vw - 20px); background: rgba(0,0,0,0.72); border: 1px solid rgba(255,255,255,0.16); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); font-family: var(--qck-font); box-shadow: 0 16px 40px -14px rgba(0,0,0,0.6); }
.draft-bar .db-btn { border: 0; cursor: pointer; font: inherit; font-size: 13.5px; font-weight: 600; color: #fff; background: transparent; padding: 10px 15px; border-radius: 999px; display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
.draft-bar .db-btn:hover { background: rgba(255,255,255,0.12); }
.draft-bar .db-btn svg { width: 16px; height: 16px; flex: 0 0 16px; }
.draft-bar .db-save { background: var(--qck,#FB5A2D); color: #fff; margin-left: 4px; }
.draft-bar .db-save:hover { background: var(--qck,#FB5A2D); filter: brightness(1.07); }
@media (max-width: 560px) { .draft-bar { bottom: 14px; } .draft-bar .db-btn { padding: 10px 13px; } }
.draft-info { position: fixed; left: 18px; bottom: 24px; z-index: 50; width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,0.16); background: rgba(20,20,23,0.9); color: #fff; backdrop-filter: blur(10px); cursor: pointer; display: grid; place-items: center; box-shadow: 0 12px 30px -8px rgba(0,0,0,0.5); }
.draft-info svg { width: 21px; height: 21px; }
.draft-info:hover { background: #000; }
.claim-bullets { list-style: none; text-align: left; margin: 2px 0 18px; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.claim-bullets li { display: flex; align-items: center; gap: 11px; font-size: 14px; font-weight: 550; color: #fff; line-height: 1.35; }
.claim-card .fm-phone { display: flex; gap: 8px; }
.claim-card .fm-phone .wa-cc { flex: 0 0 auto; }
.claim-card .fm-phone .input { flex: 1; }
/* narrow screens: the nav buttons go icon-only so the whole bar always fits the pill */
/* collapsible group (Add / Settings / separator) — margin gives the spacing so a
   collapsed group leaves NO phantom gap before the Edit button. */
/* device-preview group (desktop only) — reverse-collapses IN during preview */
.ed-dev { width: 38px; height: 38px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: transparent; border: 0; color: rgba(255,255,255,0.55); cursor: pointer; padding: 0; line-height: 0; flex: 0 0 38px; }
.ed-dev:hover { background: rgba(255,255,255,0.10); color: #fff; }
.ed-dev.on { background: rgba(255,255,255,0.26); color: #fff; }
.ed-dev svg { width: 19px; height: 19px; display: block; }
/* preview mode: slide pill to bottom-right, collapse Add/Settings out, devices in */
body.preview .ed-bar { transform: translateX(calc(50vw - 18px - 100%)); }
body.preview .ed-bar .ed-collapse { max-width: 0; opacity: 0; gap: 0; margin-right: 0; }
body.preview .ed-bar .ed-devices { max-width: 140px; opacity: 1; margin-right: 8px; }
@media (max-width: 760px) {
  .ed-bar .ed-devices { display: none !important; }   /* on a phone there's no desktop preview — just preview mobile on mobile */
}
/* hide per-widget editor chrome smoothly in preview */
.w-tools { transition: opacity .3s ease; }
body.preview .w-tools { opacity: 0; pointer-events: none; }
body.preview .w { cursor: default; }
/* save pill */
/* ------------------------- modal / sheet ------------------------- */
/* QCK builder chrome: black surfaces, warm top-glow, vivid orange (--qck). */
@media (min-width: 640px) {
  .scrim { place-items: center; padding: 24px; }
  .sheet { border-radius: 26px; }
}
/* big inputs */
/* contact settings: compact list of fields + per-field edit bottom-sheet */
.ic-trigger { width: 66px; height: 66px; border-radius: 16px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.05); color: #fff; display: grid; place-items: center; cursor: pointer; transition: background .12s, border-color .12s; }
.ic-trigger:hover { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.32); }
.ic-trigger svg { width: 26px; height: 26px; }
.cf-list { display: flex; flex-direction: column; gap: 10px; margin: 4px 0 10px; }
.cf-row { display: flex; align-items: center; gap: 11px; padding: 10px 11px; border-radius: 14px; background: #141415; border: 1px solid rgba(255,255,255,0.08); }
.cf-row.cf-off { opacity: .5; }
.cf-icon { width: 44px; height: 44px; flex: 0 0 auto; border-radius: 12px; }
.cf-icon svg { width: 20px; height: 20px; }
.cf-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.cf-name { font-size: 15px; font-weight: 700; color: #fff; }
.cf-val { font-size: 12.5px; color: rgba(255,255,255,0.5); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cf-val.empty { color: rgba(255,255,255,0.3); font-style: italic; }
.cf-acts { display: flex; gap: 5px; flex: 0 0 auto; }
.cf-mv, .cf-gear { width: 32px; height: 32px; border-radius: 9px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.04); color: #fff; display: grid; place-items: center; cursor: pointer; transition: background .12s; }
.cf-mv:hover:not(:disabled), .cf-gear:hover { background: rgba(255,255,255,0.12); }
.cf-mv:disabled { opacity: 0.28; cursor: default; }
.cf-mv svg, .cf-gear svg { width: 16px; height: 16px; }
.cf-icon-static { display: grid; place-items: center; background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.85); }
.cf-icon-static svg { width: 20px; height: 20px; }
/* Calendar-sync entry card (booking settings) — opens the sync wizard */
.cal-card { width: 100%; display: flex; align-items: center; gap: 12px; padding: 12px 13px; border-radius: 14px; background: #141415; border: 1px solid rgba(255,255,255,0.08); color: inherit; cursor: pointer; text-align: left; transition: border-color .12s, background .12s; }
.cal-card:hover { border-color: rgba(255,255,255,0.2); background: #18181a; }
.cal-card-ic { width: 42px; height: 42px; flex: 0 0 auto; border-radius: 12px; display: grid; place-items: center; background: color-mix(in srgb, #FB5A2D 16%, transparent); color: #FB5A2D; }
.cal-card-ic svg { width: 20px; height: 20px; }
.cal-card-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.cal-card-t { font-size: 15px; font-weight: 700; color: #fff; }
.cal-card-s { font-size: 12.5px; color: rgba(255,255,255,0.5); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cal-card-go { flex: 0 0 auto; font-size: 13px; font-weight: 650; color: #FB5A2D; padding: 6px 12px; border-radius: 999px; background: color-mix(in srgb, #FB5A2D 14%, transparent); }
/* field-modal: required toggle + choice options editor */
.fm-reqrow { margin: 14px 0 4px; }
.fm-opts { display: flex; flex-direction: column; gap: 8px; margin: 4px 0 10px; }
.fm-orow { display: flex; align-items: center; gap: 8px; }
.fm-oinp { flex: 1; min-width: 0; }
.fm-ox { flex: 0 0 auto; width: 36px; height: 36px; border-radius: 9px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.04); color: rgba(255,255,255,0.7); display: grid; place-items: center; cursor: pointer; }
.fm-ox:hover { background: rgba(255,255,255,0.12); }
.fm-ox svg { width: 15px; height: 15px; }
.fm-oadd { margin-top: 2px; }
/* field edit bottom-sheet */
/* image picker (Your photos / Stock / Upload) */
/* uploads manager: search · filter · grid badges (bg flag, colour strip, multi quick-add) */
/* ── Desktop tilt preview (phone) ── */
.tilt-fab { position: fixed; bottom: 84px; right: 16px; z-index: 90; display: inline-flex; align-items: center; gap: 8px; padding: 11px 18px; border-radius: 999px; border: 0; background: rgba(20,20,22,0.94); color: #fff; font: inherit; font-weight: 650; cursor: pointer; box-shadow: 0 8px 30px rgba(0,0,0,.5); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.tilt-fab svg { width: 18px; height: 18px; }
body.tilt { overflow: hidden; background: #000; }
body.tilt .ed-fab { display: none !important; } /* keep the 📱/🖥 pill visible so you can flip back */
body.tilt .wrap { position: fixed; top: 0; left: 0; width: var(--tdw, 1180px); height: var(--tth); transform-origin: top left; overflow-y: auto; -webkit-overflow-scrolling: touch; z-index: 1; }
body.tilt:not(.tilt-flat) .wrap { transform: translateX(var(--tvw)) rotate(90deg) scale(var(--tts)); }
body.tilt.tilt-flat .wrap { transform: scale(var(--tts)); }
.tilt-exit { position: fixed; bottom: 18px; left: 50%; transform: translateX(-50%); z-index: 100002; display: inline-flex; align-items: center; gap: 8px; padding: 11px 20px; border-radius: 999px; border: 0; background: rgba(20,20,22,0.94); color: #fff; font: inherit; font-weight: 650; cursor: pointer; box-shadow: 0 8px 30px rgba(0,0,0,.5); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.tilt-exit svg { width: 16px; height: 16px; }
.tilt-hint { position: fixed; inset: 0; z-index: 100003; display: grid; place-items: center; background: rgba(0,0,0,0.72); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); padding: 24px; }
.tilt-hint-card { background: #18181b; color: #fff; border-radius: 22px; padding: 30px 26px; max-width: 330px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 16px; }
.tilt-hint-card > svg { width: 42px; height: 42px; color: #fff; }
.tilt-hint-card span { font-size: 16px; line-height: 1.5; color: rgba(255,255,255,.85); }
.tilt-hint-card .btn-cta { background: #fff; color: #111; border-radius: 12px; padding: 12px 26px; border: 0; font-weight: 700; cursor: pointer; }
.w-probadge { position: absolute; left: 10px; bottom: 10px; z-index: 6; display: inline-flex; align-items: center; gap: 5px; background: #FB5A2D; color: #fff; border: 0; border-radius: 999px; padding: 5px 11px 5px 10px; font-size: 11.5px; font-weight: 700; cursor: pointer; box-shadow: 0 4px 14px rgba(251,90,45,.4); font-family: var(--qck-font); }
.w-probadge svg { width: 13px; height: 13px; }
body.preview .w-probadge { display: none; }
.conflict-ov { z-index: 100050; }
/* ── Pricing modal ── */
.pricing-card { width: min(600px, 94vw); max-width: none; } /* fixed so the card never resizes when the currency/price changes */
.pr-social { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; color: rgba(255,255,255,.62); margin: 0 0 18px; }
.pr-dot { width: 8px; height: 8px; border-radius: 50%; background: #30D158; box-shadow: 0 0 0 4px rgba(48,209,88,.18); flex: 0 0 auto; }
.pr-plans { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.pr-plans { margin-top: 22px; } /* breathing room between the title/social and the card (badge sits above it) */
.pr-plans.pr-one { grid-template-columns: 1fr; width: 100%; max-width: 520px; margin: 22px auto 0; } /* single Pro plan — fills the fixed-width modal */
.pr-one .pr-plan { padding: 26px 26px 24px; }
.pr-one .pr-pricerow { display: flex; gap: 34px; align-items: center; margin-bottom: 22px; flex-wrap: wrap; }
.pr-one .pr-priceblock { flex: 0 0 auto; }
.pr-one .pr-bill { margin: 6px 0 0; }
.pr-one .pr-feats { margin: 0; flex: 1 1 180px; }
/* currency selector (custom dropdown, app style) + header row */
.pr-headr { display: flex; align-items: center; gap: 10px; }
.pr-cursel { position: relative; }
.pr-curbtn { display: inline-flex; align-items: center; gap: 6px; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.14); color: #fff; font: inherit; font-size: 13px; font-weight: 650; border-radius: 999px; padding: 8px 13px; cursor: pointer; }
.pr-curbtn:hover { border-color: rgba(255,255,255,.28); }
.pr-curcar { display: inline-flex; opacity: .6; transition: transform .15s; }
.pr-curcar svg { width: 14px; height: 14px; }
.pr-cursel.open .pr-curcar { transform: rotate(180deg); }
.pr-curmenu { position: absolute; top: calc(100% + 6px); right: 0; z-index: 5; min-width: 130px; padding: 5px; border-radius: 13px; background: #1b1b20; border: 1px solid rgba(255,255,255,.12); box-shadow: 0 16px 40px -12px rgba(0,0,0,.6); display: flex; flex-direction: column; gap: 2px; }
.pr-curmenu[hidden] { display: none; }
.pr-curopt { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; text-align: left; background: transparent; border: 0; color: rgba(255,255,255,.82); font: inherit; font-size: 13.5px; font-weight: 600; padding: 9px 11px; border-radius: 9px; cursor: pointer; }
.pr-curopt:hover { background: rgba(255,255,255,.08); color: #fff; }
.pr-curopt.on { color: #fff; }
.pr-curck { display: inline-flex; color: var(--accent, #FB5A2D); }
.pr-curck svg { width: 15px; height: 15px; }
.pr-plan { position: relative; border: 1px solid rgba(255,255,255,.12); border-radius: 20px; padding: 22px 20px; background: rgba(255,255,255,.03); display: flex; flex-direction: column; }
.pr-plan.pro { border-color: rgba(251,90,45,.5); background: linear-gradient(180deg, rgba(251,90,45,.12), rgba(255,255,255,.02)); }
.pr-badge { position: absolute; top: -10px; left: 20px; font-size: 11px; font-weight: 800; padding: 3px 10px; border-radius: 999px; background: #FB5A2D; color: #fff; }
.pr-feats li::before { color: #FB5A2D; }
.pr-name { font-size: 15px; font-weight: 700; color: rgba(255,255,255,.7); margin-bottom: 8px; }
.pr-price { display: flex; align-items: baseline; gap: 4px; }
.pr-amt { font-size: 40px; font-weight: 800; letter-spacing: -.03em; color: #fff; line-height: 1; }
.pr-per { font-size: 15px; color: rgba(255,255,255,.5); font-weight: 600; }
.pr-bill { font-size: 13px; color: rgba(255,255,255,.45); margin: 6px 0 16px; }
.pr-feats { list-style: none; margin: 0 0 20px; padding: 0; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.pr-feats li { position: relative; padding-left: 24px; font-size: 14px; color: rgba(255,255,255,.78); line-height: 1.4; }
.pr-feats li::before { content: "✓"; position: absolute; left: 0; top: 0; color: #30D158; font-weight: 800; }
.pr-go { width: 100%; border: 0; cursor: pointer; font: inherit; font-weight: 700; font-size: 15px; padding: 14px; border-radius: 13px; background: rgba(255,255,255,.1); color: #fff; }
.pr-go:hover { background: rgba(255,255,255,.16); }
.pr-go.primary { background: #FB5A2D; color: #fff; }
.pr-go.primary:hover { background: #FB5A2D; filter: brightness(1.06); }
.pr-go.pr-current { background: rgba(48,209,88,.15); color: #30D158; cursor: default; }
.pr-badge.cur { background: #30D158; }
.pr-plan.current { border-color: rgba(48,209,88,.4); }
.pr-plan.current.pro { background: linear-gradient(180deg, rgba(48,209,88,.08), rgba(255,255,255,.02)); }
.pr-go:disabled { opacity: .6; cursor: default; }
.pr-note { text-align: center; font-size: 13px; color: rgba(255,255,255,.4); margin-top: 16px; }
/* monthly / yearly interval toggle */
.pr-ivtog { display: flex; width: fit-content; gap: 4px; padding: 4px; margin: 20px auto 0; border-radius: 999px; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1); }
.pr-ivopt { border: 0; background: transparent; color: rgba(255,255,255,.6); font: inherit; font-weight: 650; font-size: 13.5px; padding: 8px 18px; border-radius: 999px; cursor: pointer; transition: background .15s, color .15s; }
.pr-ivopt.on { background: #FB5A2D; color: #fff; }
.pr-exvat { text-align: center; font-size: 12px; color: rgba(255,255,255,.4); margin-top: 10px; }
@media (max-width: 600px) { .pr-plans { grid-template-columns: 1fr; } .pr-amt { font-size: 34px; } }
.upgrade-fab { position: fixed; left: 18px; bottom: 18px; z-index: 70; display: inline-flex; align-items: center; gap: 8px; background: #FB5A2D; color: #fff; border: 0; border-radius: 999px; padding: 12px 20px; font-weight: 700; font-size: 14px; cursor: pointer; box-shadow: 0 8px 30px rgba(251,90,45,.45); font-family: var(--qck-font); }
.upgrade-fab svg { width: 17px; height: 17px; }
body.preview .upgrade-fab, body.panel-open .upgrade-fab, body.tilt .upgrade-fab { display: none; }
/* mobile: collapse the activate fab to a tidy circle so it never crowds the dock */
@media (max-width: 700px) { .upgrade-fab { padding: 0; width: 56px; height: 56px; justify-content: center; } .upgrade-fab span { display: none; } .upgrade-fab svg { width: 21px; height: 21px; } }
#acc-upgrade { background: #FB5A2D !important; color: #fff !important; border: 0; }
#acc-upgrade:hover { filter: brightness(1.06); }
/* "Made with QCK" badge — free sites, on the live page + preview, hidden while editing. Wears the site's
   own resolved tokens (set inline by renderBadge) so it matches the theme. */
.qck-badge { position: fixed; left: 50%; bottom: 18px; transform: translateX(-50%); z-index: 60; display: none; align-items: center; gap: 8px; height: 46px; padding: 0 20px 0 16px; white-space: nowrap; max-width: calc(100vw - 24px); border-radius: 999px; font-family: var(--lb-font, var(--font)); font-size: 13.5px; font-weight: 650; line-height: 1; text-decoration: none; color: var(--ink, #f4f3f1); background: var(--card-bg, rgba(20,20,22,0.92)); border: 1px solid var(--card-border, rgba(255,255,255,0.14)); box-shadow: 0 10px 30px -12px rgba(0,0,0,0.55); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); transition: transform .15s ease; }
.qck-badge:hover { transform: translateX(-50%) translateY(-2px); }
.qck-badge .qb-mark { width: 27px; height: 27px; flex: 0 0 auto; border-radius: 50%; background: var(--accent, #FB5A2D); display: grid; place-items: center; margin-left: -6px; }
.qck-badge .qb-mark svg { width: 16px; height: 16px; color: #fff; display: block; }
.qck-badge b { font-weight: 800; }
body:not(.is-owner) .qck-badge, body.preview .qck-badge { display: inline-flex; }
body.panel-open .qck-badge { display: none; } /* don't fight the settings panel while it's open */
/* reserve room at the bottom so the centred badge never covers the last widget when scrolled all the way down */
body.has-qbadge:not(.is-owner) .wrap, body.has-qbadge.preview .wrap { padding-bottom: 96px; }
/* Design → Badge tab + Domain upsell (panel context — light ink on the dark panel) */
.badge-up, .dom-up { display: flex; gap: 12px; align-items: flex-start; margin-top: 14px; padding: 14px; border-radius: 14px; border: 1px solid rgba(251,90,45,.32); background: rgba(251,90,45,.09); }
.badge-up .bu-ic, .dom-up .du-ic { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; background: rgba(251,90,45,.18); color: #FB5A2D; }
.badge-up .bu-ic svg, .dom-up .du-ic svg { width: 16px; height: 16px; }
.bu-tx, .du-tx { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.bu-tx b, .du-tx b { font-size: 14px; font-weight: 700; color: #f4f3f1; }
.bu-tx span, .du-tx span { font-size: 12.5px; line-height: 1.45; color: rgba(244,243,241,.62); }
/* pricing: pro-widgets-on-your-site warning */
.pr-prowarn { display: flex; align-items: center; gap: 10px; margin: 0 0 16px; padding: 11px 14px; border-radius: 12px; background: rgba(251,90,45,.12); border: 1px solid rgba(251,90,45,.3); font-size: 13px; line-height: 1.4; color: rgba(255,255,255,.84); }
.pr-prowarn svg { width: 16px; height: 16px; flex: 0 0 auto; color: #FB5A2D; }
.pr-prowarn b { font-weight: 800; color: #fff; }
.acc-plan { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border: 1px solid rgba(255,255,255,.1); border-radius: 14px; background: rgba(255,255,255,.03); }
.acc-plan-l { display: flex; flex-direction: column; gap: 2px; }
.acc-plan-name { font-weight: 700; font-size: 15px; color: #fff; }
.acc-plan-sub { font-size: 12.5px; color: rgba(255,255,255,.5); }
.acc-plan-dot { width: 10px; height: 10px; border-radius: 50%; background: rgba(255,255,255,.25); flex: 0 0 auto; }
.acc-plan-dot.live { background: #30D158; box-shadow: 0 0 0 4px rgba(48,209,88,.18); }
.conflict-list { list-style: none; margin: 0 0 18px; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.conflict-list li { position: relative; padding-left: 18px; font-size: 14px; line-height: 1.5; color: rgba(255,255,255,0.66); }
.conflict-list li::before { content: ""; position: absolute; left: 2px; top: 8px; width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,0.4); }
.conflict-list b { color: #fff; font-weight: 700; }
/* image detail sheet */
.im-detail .im-big { width: 100%; aspect-ratio: 16 / 10; border-radius: 16px; background-size: cover; background-position: center; margin-bottom: 14px; }
.im-colors { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; min-height: 34px; align-items: center; }
.im-sw { width: 34px; height: 34px; border-radius: 9px; border: 1px solid rgba(255,255,255,0.16); cursor: pointer; position: relative; transition: transform .12s; }
.im-sw:hover { transform: scale(1.08); }
.im-sw.copied::after { content: "✓"; position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font-weight: 800; text-shadow: 0 1px 3px rgba(0,0,0,.7); }
.im-toggle { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 0 2px; cursor: pointer; font-weight: 600; color: #fff; }
.im-toggle input { width: 20px; height: 20px; accent-color: var(--qck, #FB5A2D); cursor: pointer; }
.im-foot { display: flex; gap: 10px; }
.im-foot .btn-cta { flex: 1; justify-content: center; }
.fm-lbl { font-size: 13px; font-weight: 500; color: rgba(255,255,255,0.5); margin: 16px 0 8px; }
.confirm-msg { color: rgba(255,255,255,0.6); font-size: 14px; line-height: 1.5; margin: 6px 4px 18px; }
.confirm-sub { margin: -4px 0 18px; color: rgba(255,255,255,0.55); font-size: 13.5px; line-height: 1.5; font-family: var(--qck-font); }
.confirm-acts { display: flex; gap: 10px; padding-bottom: 4px; }
.confirm-acts > button { flex: 1; justify-content: center; padding: 14px; border-radius: 12px; font-weight: 650; }
/* bottom-sheets (confirm, item editors, pickers) are QCK chrome — they live inside
   .wrap, so override the site theme's button colour/style (arrow/soft/outline + themed
   accent) and keep our standard white-on-black CTA. The widget PREVIEW modal (.wm-card)
   is intentionally themed and unaffected. */
/* ── Calendar-sync wizard (inside .fm-card) ── */
.cal-wiz .cal-dots { display: flex; gap: 6px; justify-content: center; margin: 2px 0 16px; flex: 0 0 auto; }
.cal-dot { width: 22px; height: 4px; border-radius: 99px; background: rgba(255,255,255,0.14); transition: background .18s; }
.cal-dot.on { background: #FB5A2D; }
.cal-dot.done { background: rgba(251,90,45,0.5); }
.cal-h2 { font-size: 20px; font-weight: 800; color: #fff; margin: 2px 0 4px; }
.cal-sub { font-size: 13.5px; line-height: 1.5; color: rgba(255,255,255,0.55); margin: 0 0 16px; }
.cal-opt { display: block; width: 100%; text-align: left; padding: 15px 16px; margin-bottom: 10px; border-radius: 15px; border: 1px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.03); color: #fff; cursor: pointer; transition: border-color .12s, background .12s; }
.cal-opt:hover { border-color: rgba(251,90,45,0.5); background: rgba(251,90,45,0.06); }
.cal-opt-t { display: block; font-size: 16px; font-weight: 700; color: #fff; margin-bottom: 3px; }
.cal-opt-s { display: block; font-size: 13px; line-height: 1.45; color: rgba(255,255,255,0.55); }
.cal-provs { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.cal-prov { padding: 15px; border-radius: 14px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.03); color: #fff; font: inherit; font-size: 15px; font-weight: 650; cursor: pointer; transition: border-color .12s, background .12s; }
.cal-prov:hover { border-color: rgba(255,255,255,0.28); }
.cal-prov.on { border-color: #FB5A2D; background: color-mix(in srgb, #FB5A2D 12%, transparent); }
.cal-steps { font-size: 14px; line-height: 1.6; color: rgba(255,255,255,0.72); background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 13px; padding: 14px 15px; margin: 0 0 14px; }
.cal-copy { display: flex; gap: 8px; align-items: stretch; }
.cal-copy .input { flex: 1; min-width: 0; }
.cal-copybtn { flex: 0 0 auto; padding: 0 18px; border-radius: 14px; border: 0; background: #fff; color: #111; font: inherit; font-weight: 700; cursor: pointer; }
.cal-copybtn:hover { filter: brightness(0.94); }
.cal-err { font-size: 13.5px; color: #ff6b6b; margin: 10px 2px 0; line-height: 1.45; }
.cal-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 16px; flex: 0 0 auto; }
.cal-back { padding: 12px 18px; border-radius: 12px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.05); color: #fff; font: inherit; font-weight: 650; cursor: pointer; }
.cal-back:hover { background: rgba(255,255,255,0.1); }
.cal-next { padding: 13px 24px; border-radius: 12px !important; }
.cal-next[disabled] { opacity: 0.6; cursor: default; }
.fm-typewrap { position: relative; }
.fm-typesel { width: 100%; display: flex; align-items: center; gap: 12px; padding: 8px 14px; height: 60px; border-radius: 14px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.04); color: #fff; cursor: pointer; }
.fm-typesel:focus-visible { outline: 2px solid #3b82f6; }
.fm-type-ic { width: 42px; height: 42px; flex: 0 0 auto; border-radius: 11px; display: grid; place-items: center; background: color-mix(in srgb, #f0563c 18%, transparent); color: #f0563c; }
.fm-type-ic svg { width: 20px; height: 20px; }
.fm-type-n { flex: 1; text-align: left; font-size: 17px; font-weight: 700; }
.fm-type-ch { flex: 0 0 auto; color: rgba(255,255,255,0.4); display: grid; }
.fm-type-ch svg { width: 18px; height: 18px; }
.fm-typemenu { position: absolute; z-index: 5; top: calc(100% + 6px); left: 0; right: 0; background: #1d1d1f; border: 1px solid rgba(255,255,255,0.14); border-radius: 14px; box-shadow: 0 20px 44px -16px rgba(0,0,0,0.75); padding: 6px; display: grid; grid-template-columns: 1fr 1fr; gap: 4px; }
.fm-typemenu[hidden] { display: none; }
.fm-type { display: flex; align-items: center; gap: 9px; padding: 12px 13px; border-radius: 11px; border: 0; background: rgba(255,255,255,0.03); color: #fff; cursor: pointer; font-size: 14.5px; font-weight: 700; }
.fm-type:hover { background: rgba(255,255,255,0.09); }
.fm-type.on { box-shadow: inset 0 0 0 1.5px #3b82f6; }
.fm-type svg { width: 18px; height: 18px; color: #f0563c; flex: 0 0 auto; }
.fm-phone { display: grid; grid-template-columns: 124px 1fr; gap: 10px; }
.fm-cc { padding: 0 10px; }
.fm-searchwrap { position: relative; }
.fm-searchwrap > svg { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: rgba(255,255,255,0.4); pointer-events: none; }
.fm-search { padding-left: 44px !important; }
.fm-spin { position: absolute; right: 16px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; border: 2px solid rgba(255,255,255,0.16); border-top-color: #f0563c; border-radius: 50%; animation: fm-spin .7s linear infinite; display: none; }
.fm-searchwrap.busy .fm-spin { display: block; }
@keyframes fm-spin { to { transform: translateY(-50%) rotate(360deg); } }
.fm-results { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.fm-result { display: flex; align-items: center; gap: 13px; width: 100%; text-align: left; padding: 11px 13px; border-radius: 14px; border: 1px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.03); color: #fff; cursor: pointer; }
.fm-result:hover { background: rgba(255,255,255,0.08); }
.fm-result-ic, .fm-addr-ic { width: 42px; height: 42px; flex: 0 0 auto; border-radius: 11px; display: grid; place-items: center; background: color-mix(in srgb, #f0563c 18%, transparent); color: #f0563c; }
.fm-result-ic svg, .fm-addr-ic svg { width: 19px; height: 19px; }
.fm-result-tx, .fm-addr-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.fm-result-n, .fm-addr-n { font-size: 15px; font-weight: 700; }
.fm-result-a, .fm-addr-a { font-size: 13px; color: rgba(255,255,255,0.5); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-addr { display: flex; align-items: center; gap: 13px; padding: 11px 13px; border-radius: 14px; border: 1px solid color-mix(in srgb, #f0563c 45%, transparent); background: color-mix(in srgb, #f0563c 7%, transparent); }
.fm-addr-ok { flex: 0 0 auto; color: #f0563c; }
.fm-addr-ok svg { width: 20px; height: 20px; }
.fm-change { display: block; width: 100%; text-align: center; margin-top: 12px; padding: 0; background: transparent; border: 0; color: #f0563c; font-size: 14.5px; font-weight: 600; cursor: pointer; }
.fm-foot { display: flex; gap: 12px; margin-top: 18px; flex: 0 0 auto; }
.fm-foot .btn { height: 56px; font-size: 16px; font-weight: 700; }
.fm-del { flex: 0 0 auto; min-width: 124px; display: flex; align-items: center; justify-content: center; gap: 8px; }
.fm-del svg { width: 18px; height: 18px; }
.fm-done { flex: 1; }
/* date+time picker trigger + calendar */
.dp-trigger { display: flex; align-items: center; justify-content: space-between; gap: 10px; cursor: pointer; text-align: left; }
.dp-trigger svg { width: 19px; height: 19px; color: rgba(255,255,255,0.45); flex: 0 0 auto; }
.dp-trigger.empty span { color: rgba(255,255,255,0.4); }
.dp-card { max-width: 420px; }
.dp-nav { display: flex; align-items: center; justify-content: space-between; margin: 14px 0 10px; }
.dp-title { font-size: 16px; font-weight: 700; color: #fff; }
.dp-prev, .dp-next { width: 38px; height: 38px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.04); color: #fff; display: grid; place-items: center; cursor: pointer; }
.dp-prev:hover, .dp-next:hover { background: rgba(255,255,255,0.1); }
.dp-prev svg, .dp-next svg { width: 18px; height: 18px; }
.dp-wd { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 4px; }
.dp-wd span { text-align: center; font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: rgba(255,255,255,0.35); padding: 4px 0; }
.dp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.dp-cell { aspect-ratio: 1; display: grid; place-items: center; border-radius: 10px; border: 0; background: transparent; color: #fff; font-size: 14px; font-weight: 600; cursor: pointer; }
.dp-cell.empty { visibility: hidden; }
.dp-cell:not(.empty):hover { background: rgba(255,255,255,0.09); }
.dp-cell.on { background: #f0563c; color: #fff; }
.dp-time { display: flex; align-items: center; gap: 8px; }
.dp-time .input { width: auto; flex: 1; height: 52px; text-align: center; font-size: 18px; font-weight: 700; }
.dp-colon { font-size: 22px; font-weight: 800; color: rgba(255,255,255,0.4); }
/* wide variant (link widget): icon + label */
.ic-trigger-wide { width: 100%; height: 56px; display: flex; align-items: center; justify-content: flex-start; gap: 12px; padding: 0 18px; }
.ic-trigger-wide svg { width: 24px; height: 24px; color: var(--accent, #f0563c); flex: 0 0 auto; }
.ic-trigger-wide span { font-size: 14px; font-weight: 600; color: rgba(255,255,255,0.7); }
/* place-search suggestions */
.place-sug { position: absolute; z-index: 30; top: calc(100% + 4px); left: 0; right: 0; max-height: 240px; overflow-y: auto; background: #1b1b1d; border: 1px solid rgba(255,255,255,0.14); border-radius: 12px; box-shadow: 0 18px 40px -16px rgba(0,0,0,0.7); padding: 4px; }
.place-opt { display: flex; flex-direction: column; gap: 1px; width: 100%; text-align: left; padding: 9px 11px; border-radius: 8px; background: transparent; color: #fff; cursor: pointer; }
.place-opt:hover { background: rgba(255,255,255,0.08); }
.place-n { font-size: 13.5px; font-weight: 600; }
.place-a { font-size: 12px; color: rgba(255,255,255,0.5); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* scrollable icon picker (Heroicons) */
.ipick-scrim { position: fixed; inset: 0; z-index: 260; display: flex; align-items: flex-end; justify-content: center; background: rgba(4,4,8,0.55); }
.ipick-card { width: 100%; max-width: 540px; max-height: 88vh; display: flex; flex-direction: column; background: #161617; border: 1px solid rgba(255,255,255,0.1); border-bottom: 0; border-radius: 26px 26px 0 0; padding: 14px 20px 20px; }
.ipick-head { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.ipick-var { flex: 0 0 auto; }
.ipick-search { flex: 1; }
.ipick-x { width: 38px; height: 38px; flex: 0 0 auto; border-radius: 11px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.05); color: #fff; display: grid; place-items: center; cursor: pointer; }
.ipick-x:hover { background: rgba(255,255,255,0.12); }
.ipick-x svg { width: 16px; height: 16px; }
.ipick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(56px, 1fr)); gap: 8px; overflow-y: auto; padding: 2px; }
.ipick-cell { aspect-ratio: 1; display: grid; place-items: center; border-radius: 12px; border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03); color: #fff; cursor: pointer; transition: background .1s, border-color .1s; }
.ipick-cell:hover { background: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.3); }
.ipick-cell.on { border-color: #f0563c; color: #f0563c; }
.ipick-cell svg { width: 24px; height: 24px; }
/* selects: strip the native control + add a consistent chevron (Safari was ugly) */
select.input { appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 40px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-opacity='0.5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat: no-repeat; background-position: right 13px center; background-size: 16px; }
select.input::-ms-expand { display: none; }
.dp-time select.input { padding-right: 32px; background-position: right 9px center; }
/* upload field (logo / favicon / meta image) */
.upl { display: flex; align-items: center; gap: 14px; padding: 11px 13px; border: 1px solid rgba(255,255,255,0.10); border-radius: 14px; background: #161617; cursor: pointer; transition: border-color .15s, background .15s; }
.upl:hover { border-color: rgba(255,255,255,0.28); background: #1c1c1e; }
.upl-prev { width: 48px; height: 48px; border-radius: 11px; background: rgba(255,255,255,0.05); display: grid; place-items: center; overflow: hidden; flex: 0 0 48px; color: rgba(255,255,255,0.4); }
.upl-prev img { width: 100%; height: 100%; object-fit: cover; }
.upl-prev svg { width: 22px; height: 22px; }
.upl-main { flex: 1; min-width: 0; }
.upl-t { font-size: 15px; font-weight: 600; display: flex; align-items: center; gap: 7px; }
.upl-t svg { width: 15px; height: 15px; color: rgba(255,255,255,0.6); }
.upl-h { font-size: 12px; color: rgba(255,255,255,0.42); margin-top: 2px; }
.upl-x { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.12); background: transparent; color: rgba(255,255,255,0.6); cursor: pointer; display: grid; place-items: center; }
.upl-x:hover { background: rgba(255,138,138,0.14); color: #ff8a8a; border-color: #4a2a2a; }
.upl-x svg { width: 15px; height: 15px; }
/* 2-col field grid (mobile collapses) */
.fgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; }
.fgrid .wide { grid-column: 1 / -1; }
@media (max-width: 560px) { .fgrid { grid-template-columns: 1fr; } }
/* tabbed settings modal */
.m-head { position: relative; padding: 24px clamp(20px, 3vw, 28px) 0; }
.m-head h2 { margin: 0 0 4px; font-size: 26px; }
.m-head .sub { margin: 0; }
.m-close {
  position: absolute; top: 20px; right: 20px; width: 38px; height: 38px; border-radius: 50%;
  border: 1px solid rgba(255,255,255,0.10); background: rgba(255,255,255,0.05); color: #fff;
  display: grid; place-items: center; cursor: pointer;
}
.m-close:hover { background: rgba(255,255,255,0.12); }
.m-close svg { width: 18px; height: 18px; }
.m-tabs { display: flex; gap: 22px; padding: 16px clamp(20px, 3vw, 28px) 0; border-bottom: 1px solid rgba(255,255,255,0.07); overflow-x: auto; }
.m-tab { background: none; border: 0; color: rgba(255,255,255,0.5); font: inherit; font-size: 15px; font-weight: 650; padding: 2px 0 14px; cursor: pointer; position: relative; white-space: nowrap; }
.m-tab.on { color: #fff; }
.m-tab.on::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--qck); border-radius: 2px; }
.m-body { padding: 22px clamp(20px, 3vw, 28px); overflow-y: auto; flex: 1; min-height: 170px; }
.m-foot { display: flex; justify-content: flex-end; gap: 10px; padding: 16px clamp(20px, 3vw, 28px) calc(18px + env(safe-area-inset-bottom)); border-top: 1px solid rgba(255,255,255,0.07); }
.m-foot .btn { min-width: 120px; }
/* theme tab — vibes + make-it-yours */
.th-label { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: rgba(255,255,255,0.45); margin: 0 0 12px; }
.vibe-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
@media (max-width: 560px) { .vibe-grid { grid-template-columns: repeat(2, 1fr); } }
.vibe { text-align: left; cursor: pointer; border: 2px solid rgba(255,255,255,0.10); border-radius: 18px; background: #161617; padding: 12px; transition: border-color .12s ease; }
.vibe:hover { border-color: rgba(255,255,255,0.3); }
.vibe.on { border-color: var(--qck); }
.vibe-prev { height: 140px; border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; justify-content: center; padding: 9px; gap: 6px; }
.vibe-prev.grid { padding: 0; }
.vibe-card { padding: 10px 11px; display: flex; flex-direction: column; gap: 6px; }
/* preview top row: icon chip + title bar */
.vibe-top { display: flex; align-items: center; gap: 7px; }
.vibe-chip { width: 15px; height: 15px; border-radius: 5px; flex: 0 0 auto; display: block; }
.vibe-top .vibe-bar { flex: 0 0 auto; }
.vibe-card.big { padding: 12px 12px; gap: 6px; }
.vibe-card2 { padding-top: 8px; padding-bottom: 8px; }
/* bento theme preview — real-styled cards (header + row of 3) over the theme's page background */
.tpv { display: flex; flex-direction: column; gap: 7px; padding: 12px; height: 100%; justify-content: center; background-size: cover; background-position: center; }
.tpv-b { height: 4px; border-radius: 99px; display: block; }
.tpv-head { flex: 0 0 auto; display: flex; align-items: center; gap: 9px; padding: 11px 12px; position: relative; overflow: hidden; }
.tpv-av { width: 22px; height: 22px; border-radius: 50%; flex: 0 0 auto; box-shadow: 0 2px 6px -2px rgba(0,0,0,0.35); }
.tpv-htx { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 0; }
.tpv-row { flex: 0 0 auto; display: flex; gap: 7px; }
.tpv-card { flex: 1; min-width: 0; min-height: 48px; display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: 8px; padding: 10px; position: relative; overflow: hidden; }
.tpv-dot { width: 14px; height: 14px; border-radius: 50%; flex: 0 0 auto; }
.tpv-head.is-squircle, .tpv-card.is-squircle { corner-shape: squircle; }
/* button chip in preset card preview */
.preset-btn { height: 9px; width: 34%; margin-top: 3px; display: block; }
.vibe-bar { height: 5px; border-radius: 3px; display: block; }
.vibe-meta { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 11px 2px 1px; }
.vibe-name { font-size: 15px; font-weight: 700; color: #fff; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vibe-ck, .vibe-x { flex: 0 0 auto; }
.vibe-ck { width: 17px; height: 17px; color: var(--qck); flex: 0 0 auto; }
.vibe-x { width: 20px; height: 20px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 6px; color: rgba(255,255,255,0.5); background: rgba(255,255,255,0.06); }
.vibe-x:hover { color: #fff; background: rgba(255,255,255,0.16); }
.vibe-x svg { width: 13px; height: 13px; }
.th-seg { display: flex; gap: 4px; background: #161617; border: 1px solid rgba(255,255,255,0.10); border-radius: 12px; padding: 4px; }
.th-seg button { flex: 1; border: 0; cursor: pointer; font: inherit; font-size: 13px; font-weight: 600; color: rgba(255,255,255,0.6); background: transparent; padding: 9px 6px; border-radius: 9px; white-space: nowrap; }
.th-seg button.on { background: #fff; color: #111; }
.th-seg-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.th-seg-scroll::-webkit-scrollbar { display: none; }
.th-seg-scroll button { flex: 0 0 auto; }
/* card-style picker has 6 options — let it wrap to 2 rows instead of overflowing */
#d-fill { flex-wrap: wrap; }
#d-fill button { flex: 1 1 28%; }
/* buttons-editor link rows — a card per link with a visual icon picker */
.link-edit { background: #161617; border: 1px solid rgba(255,255,255,0.08); border-radius: 14px; padding: 10px; margin-bottom: 10px; }
.link-row { display: flex; gap: 8px; align-items: center; }
#biz-links { display: flex; flex-direction: column; gap: 10px; margin-bottom: 10px; }
.link-ico { width: 46px; height: 46px; flex: 0 0 auto; border-radius: 12px; border: 1px solid rgba(255,255,255,0.14); background: #1f1f21; color: #fff; display: grid; place-items: center; cursor: pointer; transition: border-color .12s, background .12s; }
.link-ico:hover { border-color: rgba(255,255,255,0.34); background: #262628; }
.link-ico svg { width: 21px; height: 21px; }
.link-row .input { flex: 1; min-width: 0; }
.link-del { width: 32px; height: 32px; flex: 0 0 auto; border: 0; border-radius: 9px; background: rgba(255,255,255,0.07); color: rgba(255,255,255,0.55); cursor: pointer; display: grid; place-items: center; padding: 0; }
.link-del:hover { background: rgba(255,138,138,0.16); color: #ff8a8a; }
.link-del svg { width: 15px; height: 15px; }
.link-url { margin-top: 8px; }
.link-icons { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; margin-top: 10px; padding-top: 10px; border-top: 1px solid rgba(255,255,255,0.07); }
.link-icons .ic-opt { aspect-ratio: 1; display: grid; place-items: center; border: 1px solid rgba(255,255,255,0.12); border-radius: 10px; background: transparent; color: #fff; cursor: pointer; padding: 0; }
.link-icons .ic-opt:hover { border-color: rgba(255,255,255,0.4); }
.link-icons .ic-opt.on { background: #fff; color: #111; border-color: #fff; }
.link-icons .ic-opt svg { width: 18px; height: 18px; }
/* accent — swatches + hue slider (QCK style, no native picker) */
.sw-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.sw { width: 30px; height: 30px; border-radius: 50%; border: 2px solid transparent; box-shadow: 0 0 0 1px rgba(255,255,255,0.12) inset; cursor: pointer; padding: 0; }
.sw.on { border-color: #fff; box-shadow: 0 0 0 2px rgba(0,0,0,0.3) inset; }
.hue { -webkit-appearance: none; appearance: none; width: 100%; height: 14px; border-radius: 999px; outline: none; cursor: pointer;
  background: linear-gradient(to right,#ff0000,#ff8000,#ffff00,#00ff00,#00ffff,#0080ff,#8000ff,#ff00ff,#ff0000); }
.hue::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; border-radius: 50%; background: #fff; border: 2px solid rgba(0,0,0,0.25); cursor: pointer; }
.hue::-moz-range-thumb { width: 20px; height: 20px; border-radius: 50%; background: #fff; border: 2px solid rgba(0,0,0,0.25); cursor: pointer; }
#d-bgbody { margin-top: 16px; }
.bg-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; align-content: start; }
.bg-scroll { overflow-y: auto; overscroll-behavior: contain; padding-right: 4px; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.25) transparent; }
.bg-scroll::-webkit-scrollbar { width: 6px; }
.bg-scroll::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.22); border-radius: 4px; }
@media (max-width: 560px) { .bg-grid { grid-template-columns: repeat(5, 1fr); } }
.bg-sw { aspect-ratio: 1; border-radius: 11px; border: 2px solid rgba(255,255,255,0.12); cursor: pointer; padding: 0; position: relative; display: grid; place-items: center; color: rgba(255,255,255,0.7); overflow: hidden; }
.bg-sw.on { border-color: var(--qck); }
.bg-sw.bg-none { background: rgba(255,255,255,0.05); }
.bg-sw.bg-none svg { width: 40%; height: 40%; }
.bg-up svg { width: 18px; height: 18px; }
/* ===================== slide-out on-page editor panel ===================== */
/* push the page out of the way so you SEE the change (desktop) */
@media (min-width: 700px) { body.panel-open { padding-right: calc(min(380px, 92vw) + var(--gutter)); } }
body.panel-open .ed-bar { transform: translateX(calc(-50% - min(190px, 46vw))); }
/* inline Design sub-tabs: pin below the main Content/Design/Visibility tabs while scrolling */
/* only the panel's very first label hugs the top — nested/conditional sub-blocks
   (e.g. "Card image", "Glow colour") keep their normal breathing room */
/* sub-tabs (e.g. Text → Title/Subtitle/Body) — same language as the top tabs */
/* font picker — each chip rendered in its own typeface */
.font-grid { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; max-height: 336px; overflow-y: auto; padding-right: 4px; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.25) transparent; }
.font-grid::-webkit-scrollbar { width: 6px; }
.font-grid::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.22); border-radius: 4px; }
.font-chip { display: flex; flex-direction: column; gap: 3px; background: #161617; border: 1px solid rgba(255,255,255,0.10); color: #fff; border-radius: 11px; padding: 11px 12px; cursor: pointer; text-align: left; overflow: hidden; transition: border-color .12s; }
.font-chip .fc-name { font-size: 18px; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.font-chip .fc-lbl { font-family: var(--qck-font); font-size: 10.5px; font-weight: 600; letter-spacing: .01em; color: rgba(255,255,255,0.42); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.font-chip:hover { border-color: rgba(255,255,255,0.3); }
.font-chip.on { border-color: #fff; box-shadow: inset 0 0 0 1px #fff; }
.font-chip.on .fc-lbl { color: rgba(255,255,255,0.7); }
.lay-info { display: flex; gap: 12px; align-items: flex-start; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 14px; padding: 14px; margin-top: 2px; }
.lay-info > svg { width: 20px; height: 20px; color: rgba(255,255,255,0.5); flex: 0 0 auto; margin-top: 1px; }
.lay-info > div { display: flex; flex-direction: column; gap: 4px; }
.lay-info b { font-size: 13.5px; font-weight: 650; color: #fff; }
.lay-info span { font-size: 12.5px; line-height: 1.5; color: rgba(255,255,255,0.55); }
/* match the Add-a-widget card chrome: solid card, inset preview, label row below */
.theme-list .vibe { background: #161617; border: 2px solid rgba(255,255,255,0.10); border-radius: 18px; padding: 12px; transition: border-color .12s ease; }
.theme-list .vibe:hover { border-color: rgba(255,255,255,0.30); }
.theme-list .vibe.on { border-color: var(--qck); }
.theme-list .vibe-prev { height: 150px; border-radius: 12px; overflow: hidden; }
.theme-list .vibe-meta { margin: 11px 2px 1px; }
.theme-list .vibe-name { font-size: 16px; font-weight: 700; flex: 0 1 auto; }
.vibe-tag { font-size: 13px; color: rgba(255,255,255,0.45); flex: 1; text-align: right; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.theme-list .vibe.on .vibe-tag { margin-right: 6px; }
.theme-list .vibe-ck { width: 16px; height: 16px; }
/* multi-colour palette editor rows */
.pal-row { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; }
.pal-row .cf { flex: 1; min-width: 0; margin-top: 0; }
.pal-x { flex: 0 0 auto; background: rgba(255,255,255,0.1); }
.pal-tx { display: flex; gap: 2px; flex: 0 0 auto; background: #161617; border: 1px solid rgba(255,255,255,0.1); border-radius: 9px; padding: 3px; }
.pal-tx button { width: 26px; height: 26px; border: 0; border-radius: 6px; background: transparent; color: rgba(255,255,255,0.6); font-size: 13px; cursor: pointer; padding: 0; }
.pal-tx button.on { background: #fff; color: #111; }
.saved-row { display: flex; flex-wrap: wrap; gap: 8px; }
.saved-chip { display: inline-flex; align-items: center; gap: 6px; background: #18181a; border: 1px solid rgba(255,255,255,0.12); color: #fff; border-radius: 10px; padding: 8px 10px; font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; }
.saved-chip:hover { border-color: rgba(255,255,255,0.3); }
.saved-x { display: grid; place-items: center; opacity: .5; }
.saved-x:hover { opacity: 1; }
.saved-x svg { width: 12px; height: 12px; }
.saved-add { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; background: transparent; border: 1px dashed rgba(255,255,255,0.2); color: rgba(255,255,255,0.6); border-radius: 12px; padding: 14px; font: inherit; font-size: 14px; font-weight: 600; cursor: pointer; transition: border-color .12s, color .12s; }
.saved-add:hover { color: rgba(255,255,255,0.9); border-color: rgba(255,255,255,0.38); }
.saved-add svg { width: 16px; height: 16px; }
.saved-add-top { margin-bottom: 16px; }
/* the preset-library "Add preset" gets breathing room */
#d-presetadd { margin-top: 12px; }
/* grid layout shuffler modal */
.lay-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 10px 0 16px; }
.lay-opt { position: relative; display: flex; flex-direction: column; gap: 11px; background: #161617; border: 2px solid rgba(255,255,255,0.1); border-radius: 18px; padding: 12px; cursor: pointer; color: #fff; transition: border-color .12s ease; }
.lay-opt:hover { border-color: rgba(255,255,255,0.3); }
.lay-opt.on { border-color: var(--qck); box-shadow: none; }
.lay-prev { display: flex; flex-direction: column; gap: 6px; height: 92px; padding: 12px; border-radius: 12px; background: #0e0e0f; }
.lay-row { display: flex; gap: 6px; flex: 1; min-height: 0; }
.lay-cell { flex: 1; border-radius: 6px; background: rgba(255,255,255,0.14); }
.lay-cell.acc { background: rgba(240,86,30,0.55); }
.lay-name { font-size: 16px; font-weight: 700; text-align: left; padding-left: 2px; }
.lay-ck { position: absolute; top: 20px; right: 20px; width: 22px; height: 22px; border-radius: 99px; background: var(--qck); display: none; place-items: center; color: #111; }
.lay-ck svg { width: 13px; height: 13px; }
.lay-opt.on .lay-ck { display: grid; }
.lay-shuffle { width: 100%; display: flex; align-items: center; justify-content: center; gap: 9px; }
.lay-shuffle svg { width: 18px; height: 18px; }
/* preset library tiles */
.preset-grid { display: grid; grid-template-columns: 1fr; gap: 12px; }
.preset-prev { height: 96px; }
.preset-tile { border: 2px solid rgba(255,255,255,0.10); border-radius: 18px; background: #161617; padding: 12px; transition: border-color .12s ease; }
.preset-tile:hover { border-color: rgba(255,255,255,0.3); }
.preset-tile.on { border-color: var(--qck); }
.preset-prev { width: 100%; height: 86px; border: 0; cursor: pointer; display: flex; flex-direction: column; justify-content: center; padding: 12px; gap: 6px; border-radius: 12px; overflow: hidden; }
.preset-prev .vibe-card { padding: 9px 10px; display: flex; flex-direction: column; gap: 5px; }
.preset-meta { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin: 11px 2px 1px; }
.preset-name { font-size: 15px; font-weight: 700; color: #fff; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1; }
.preset-acts { display: flex; gap: 5px; flex: 0 0 auto; }
.preset-acts button { width: 28px; height: 28px; border: 1px solid rgba(255,255,255,0.12); border-radius: 8px; background: rgba(255,255,255,0.05); color: rgba(255,255,255,0.55); cursor: pointer; display: grid; place-items: center; padding: 0; transition: background .12s, color .12s; }
.preset-acts button:hover { background: rgba(255,255,255,0.14); color: #fff; }
.preset-acts button.on { background: var(--qck); border-color: var(--qck); color: #fff; }
.preset-acts svg { width: 14px; height: 14px; }
/* inline (widget) Design tab — already inside the padded #ep-body, so drop the extra inset */
/* the design content body must NOT be its own scroll container (it's nested inside #ep-body) — that
   nested scroll let the sub-tabs and the content scroll apart, leaving a gap. Make it a plain block. */
#ep-dbody { overflow: visible; flex: none; padding: 16px 0 40px; }
.preset-star { color: var(--qck); font-size: 9px; vertical-align: middle; }
/* selected widget highlight while its panel is open */
.w.selected .card { outline: 2px solid var(--qck); outline-offset: 2px; }
/* compact colour field — swatch + hex, expands to the full picker on tap */
.cf { margin: 10px 0 6px; }
.cf-head { display: flex; align-items: center; gap: 11px; width: 100%; background: #161617; border: 1px solid rgba(255,255,255,0.10); border-radius: 12px; padding: 9px 12px; cursor: pointer; font: inherit; }
.cf-head:hover { border-color: rgba(255,255,255,0.2); }
.cf-sw { width: 26px; height: 26px; border-radius: 7px; border: 1px solid rgba(255,255,255,0.18); flex: 0 0 auto; }
.cf-hex { color: #fff; font-size: 14px; font-weight: 600; letter-spacing: .02em; }
.cf-caret { margin-left: auto; color: rgba(255,255,255,0.4); display: grid; transition: transform .2s; }
.cf-caret svg { width: 16px; height: 16px; }
.cf.open .cf-caret { transform: rotate(90deg); }
.cf-body { margin-top: 10px; }
/* range slider (opacity, angle) */
/* clear "upload your own" button */
/* settings/domain inside the side panel: left-aligned, stacked actions that fit the narrow width */
.copy-row { display: flex; align-items: center; gap: 8px; background: #161617; border: 1px solid rgba(255,255,255,0.10); border-radius: 12px; padding: 6px 6px 6px 13px; }
.copy-url { flex: 1; min-width: 0; color: #fff; font-size: 14px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dom-live { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: #161617; border: 1px solid rgba(255,255,255,0.10); border-radius: 12px; padding: 13px 15px; }
.dom-name { color: #fff; font-size: 15px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; }
.dom-ok { display: inline-flex; align-items: center; gap: 5px; color: #75FB90; font-size: 13px; font-weight: 600; flex: 0 0 auto; }
.dom-ok svg { width: 15px; height: 15px; }
.dom-remove { margin-top: 12px; width: 100%; color: #ff8a8a; }
/* colour target toggle + colour picker */
.cp-target { flex-wrap: wrap; }
.cp-target button { flex: 1 1 22%; min-width: 68px; }
.cp-target-label { font-size: 13px; font-weight: 650; color: #fff; margin: 14px 0 10px; }
.cp-sub { margin-bottom: 6px; }
.cp-sub-lbl { font-size: 12px; font-weight: 600; color: rgba(255,255,255,0.55); margin: 12px 0 8px; }
.cp-sub-lbl:first-child { margin-top: 4px; }
.cp { margin-top: 4px; }
.cp-swatches { margin-bottom: 14px; }
.cp-sw-lbl { font-size: 12px; font-weight: 600; color: rgba(255,255,255,0.55); margin: 0 0 8px; }
.cp-sw-row { display: flex; flex-wrap: wrap; gap: 8px; }
.cp-dot { width: 26px; height: 26px; border-radius: 50%; cursor: pointer; padding: 0; flex: 0 0 auto; border: 1px solid rgba(255,255,255,0.18); box-shadow: inset 0 0 0 2px rgba(0,0,0,0.12); transition: transform .1s; }
.cp-dot:hover { transform: scale(1.12); }
.cp-dot.on { box-shadow: 0 0 0 2px #161617, 0 0 0 4px #fff; }
.cp-sv { position: relative; width: 100%; height: 140px; border-radius: 12px; cursor: crosshair; margin-bottom: 12px; touch-action: none; }
.cp-thumb { position: absolute; width: 15px; height: 15px; border-radius: 50%; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,0.45); transform: translate(-50%, -50%); pointer-events: none; }
.cp-hue { margin: 0 0 12px; }
.cp-foot { display: flex; align-items: center; gap: 10px; }
.cp-prev { width: 36px; height: 36px; border-radius: 9px; border: 1px solid rgba(255,255,255,0.18); flex: 0 0 auto; }
.cp-hex { flex: 1; background: #161617; border: 1px solid rgba(255,255,255,0.10); border-radius: 10px; color: #fff; font: inherit; font-family: ui-monospace, Menlo, monospace; text-transform: uppercase; padding: 10px 12px; outline: none; }
.cp-hex:focus { border-color: rgba(255,255,255,0.34); }
.cp-or { font-size: 12px; color: rgba(255,255,255,0.4); margin: 16px 0 0; }
/* ---- mobile ---- */
@media (max-width: 700px) {
  .ed-panel { width: 100vw; max-height: 82dvh; top: auto; bottom: 0; border-left: 0; border-top: 1px solid rgba(255,255,255,0.12); border-radius: 22px 22px 0 0; transform: translateY(102%); box-shadow: 0 -24px 60px -24px rgba(0,0,0,0.7); }
  .ed-panel.open { transform: translateY(0); }
  body.panel-open { padding-right: var(--gutter) !important; }
  body.panel-open .ed-bar { display: none; }
}
@media (max-width: 560px) {
  .ed-bar button span { display: none; }
  .ed-bar button { padding: 11px; }
  .ed-bar { gap: 2px; }
}
.bg-up svg { width: 18px; height: 18px; }
/* address tab columns */
.addr-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
@media (max-width: 560px) { .addr-grid { grid-template-columns: 1fr; } }
.sub-field { display: flex; align-items: center; gap: 8px; }
.sub-field .input { text-align: right; font-weight: 600; }
.sub-field .suffix { color: rgba(255,255,255,0.5); white-space: nowrap; font-weight: 600; }
/* widget-type picker grid (add widget) */
.type-grid { display: grid; grid-template-columns: 1fr; gap: 12px; --pk: #f0561e; }
.type-card { text-align: left; cursor: pointer; border: 1px solid rgba(255,255,255,0.10); background: #161617; border-radius: 18px; padding: 12px; color: #fff; transition: border-color .12s ease, transform .12s ease; }
.type-card:hover { border-color: rgba(255,255,255,0.42); }
.type-card:active { transform: scale(0.985); }
.tc-label { font-weight: 700; font-size: 16px; margin-top: 11px; padding-left: 2px; display: flex; align-items: center; gap: 8px; }
.tc-pro { font-size: 10.5px; font-weight: 800; letter-spacing: .02em; padding: 2px 8px; border-radius: 999px; background: #FB5A2D; color: #fff; }
.type-card.is-pro { border-color: rgba(251,90,45,0.32); }
.type-card.is-soon { opacity: .5; cursor: default; }
.type-card.is-soon .tc-pro { background: rgba(255,255,255,0.16); color: rgba(255,255,255,0.8); }
.type-card.is-soon:hover { border-color: rgba(255,255,255,0.10); }
.addpro-note { width: 100%; margin-top: 14px; display: flex; align-items: center; gap: 12px; text-align: left; background: linear-gradient(135deg, rgba(251,90,45,0.14), rgba(251,90,45,0.05)); border: 1px solid rgba(251,90,45,0.3); color: #fff; border-radius: 16px; padding: 13px 15px; cursor: pointer; font-family: var(--qck-font); }
.apn-ic { width: 34px; height: 34px; flex: 0 0 auto; border-radius: 10px; display: grid; place-items: center; background: #FB5A2D; color: #fff; }
.apn-ic svg { width: 18px; height: 18px; }
.apn-tx { flex: 1; font-size: 13px; line-height: 1.4; color: rgba(255,255,255,0.78); }
.apn-tx b { color: #fff; font-weight: 700; }
.apn-go { flex: 0 0 auto; font-size: 13px; font-weight: 800; color: #FB5A2D; }
/* preview panel */
.tc-prev { position: relative; display: flex; flex-direction: column; justify-content: center; gap: 7px; height: 96px; padding: 16px; border-radius: 12px; background: #0e0e0f; overflow: hidden; }
.pk-bar { display: block; height: 7px; border-radius: 99px; background: rgba(255,255,255,0.16); }
.pk-qr { width: 20px; height: 20px; flex: 0 0 auto; border-radius: 5px; background: #fff; background-image: radial-gradient(rgba(0,0,0,0.82) 1px, transparent 1.4px); background-size: 4px 4px; }
.pk-bar.acc { background: var(--pk); }
.pk-bar.h8 { height: 8px; } .pk-bar.h9 { height: 9px; }
.pk-bar.w34 { width: 34%; } .pk-bar.w36 { width: 36%; } .pk-bar.w40 { width: 40%; }
.pk-bar.w45 { width: 45%; } .pk-bar.w50 { width: 50%; } .pk-bar.w55 { width: 55%; }
.pk-bar.w60 { width: 60%; } .pk-bar.w66 { width: 66%; } .pk-bar.w70 { width: 70%; }
.pk-row { display: flex; align-items: center; gap: 10px; }
.pk-col { display: flex; flex-direction: column; gap: 7px; flex: 1; min-width: 0; }
.pk-li { display: flex; align-items: center; gap: 9px; }
.pk-dot { width: 7px; height: 7px; border-radius: 99px; flex: none; background: rgba(255,255,255,0.3); }
.pk-dot.acc { background: var(--pk); } .pk-dot.green { background: #34c759; }
.pk-chip { width: 30px; height: 30px; border-radius: 9px; flex: none; background: rgba(255,255,255,0.2); }
.pk-chip.acc { background: var(--pk); }
.pk-arrow { width: 15px; height: 15px; color: rgba(255,255,255,0.45); margin-left: auto; flex: none; }
.pk-img { display: block; border-radius: 9px; background: #222 center/cover no-repeat; }
.pk-img.big { width: 100%; height: 64px; background-image: url('/bg/bg-mq07xtv7uws.jpg'); }
.pk-img.sq { width: 42px; height: 42px; flex: none; background-image: url('/bg/bg-mpzms547qrv.jpg'); }
.pk-row.g3 { gap: 8px; }
.pk-row.g3 .pk-img { flex: 1; height: 52px; }
.pk-app { display: flex; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: 13px; margin: 0 auto; }
.pk-app svg { width: 28px; height: 28px; }
.pk-app.wa { background: #25d366; }
.pk-map { display: block; width: 100%; height: 64px; border-radius: 9px; background: radial-gradient(120% 100% at 50% 0%, #1e2a1e, #14160f); display: flex; align-items: center; justify-content: center; }
.pk-pin { width: 26px; height: 26px; fill: var(--pk); }
/* icon picker (link widget) */
.icon-pick { display: flex; flex-wrap: wrap; gap: 8px; }
.ic-opt { width: 46px; height: 42px; display: grid; place-items: center; border: 1px solid rgba(255,255,255,0.12); border-radius: 11px; background: transparent; color: #fff; cursor: pointer; font: inherit; font-size: 12px; font-weight: 600; }
.ic-opt:hover { border-color: rgba(255,255,255,0.34); }
.ic-opt.on { background: #fff; color: #111; border-color: #fff; }
.ic-opt svg { width: 18px; height: 18px; }
/* hours editor rows */
.hours-row { display: grid; grid-template-columns: 54px 1fr auto; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.07); }
.hours-row .d { font-weight: 600; }
.hours-row .times { display: flex; gap: 8px; align-items: center; }
.hours-row .times .input { padding: 9px 10px; font-size: 14px; }
.hours-row.is-closed .times { opacity: .35; pointer-events: none; }
.toggle { display: inline-flex; align-items: center; cursor: pointer; }
.toggle input { display: none; }
.toggle .track { width: 46px; height: 28px; border-radius: 999px; background: rgba(255,255,255,0.16); position: relative; transition: background .18s; }
.toggle .track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; transition: transform .18s; }
.toggle input:checked + .track { background: var(--qck); }
.toggle input:checked + .track::after { transform: translateX(18px); }
/* custom-domain stepper */
.dstepper { display: flex; align-items: center; justify-content: center; margin: 4px 0 22px; }
.dnode { display: flex; align-items: center; gap: 8px; color: rgba(255,255,255,0.4); font-size: 14px; font-weight: 600; }
.dnode .num { width: 26px; height: 26px; border-radius: 50%; border: 1px solid rgba(255,255,255,0.18); display: grid; place-items: center; font-size: 13px; }
.dnode.on { color: #fff; } .dnode.on .num { background: #fff; color: #111; border-color: #fff; }
.dnode.done .num { background: var(--qck); color: var(--qck-ink); border-color: var(--qck); }
.dnode.done .num svg { width: 14px; height: 14px; }
.dline { width: 34px; height: 1px; background: rgba(255,255,255,0.14); margin: 0 8px; }
.dctr { text-align: center; }
.dctr h2 { text-align: center; }
.dctr .sub { text-align: center; }
.drec { background: #161617; border: 1px solid rgba(255,255,255,0.08); border-radius: 16px; overflow: hidden; margin: 16px 0; text-align: left; }
.drec .r { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-bottom: 1px solid rgba(255,255,255,0.06); }
.drec .r:last-child { border-bottom: 0; }
.drec .k { width: 56px; color: rgba(255,255,255,0.4); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
.drec .v { flex: 1; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 14px; word-break: break-all; }
.drec .cp { border: 1px solid rgba(255,255,255,0.14); background: transparent; color: #fff; font: inherit; font-size: 12px; font-weight: 600; padding: 6px 12px; border-radius: 9px; cursor: pointer; }
.drec .cp:hover { background: rgba(255,255,255,0.1); }
.dbadge { width: 64px; height: 64px; border-radius: 50%; display: grid; place-items: center; margin: 0 auto 14px; }
.dbadge.ok { background: rgba(95,208,138,0.14); color: #5fd08a; }
.dbadge.err { background: rgba(255,138,138,0.14); color: #ff8a8a; }
.dbadge svg { width: 30px; height: 30px; display: block; }
/* ============================== BOOKING WIDGET ============================== */
.wg-booking { container-type: inline-size; display: flex; flex-direction: column; gap: 14px; padding: clamp(16px, 3cqw, 26px); }
.bk-clickable { cursor: pointer; }
.bk-empty, .bk-noslots { color: var(--ink-faint); font-size: 14px; padding: 10px 2px; }
.bk-ic { width: 46px; height: 46px; border-radius: 14px; flex: 0 0 auto; display: grid; place-items: center; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); }
.bk-ic svg { width: 22px; height: 22px; }
.bk-thumb { width: 46px; height: 46px; border-radius: 14px; flex: 0 0 auto; background-size: cover; background-position: center; }
/* your-booking banner */
.bk-mine { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 14px; border-radius: 14px; background: color-mix(in srgb, var(--accent) 12%, transparent); }
.bk-mine-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.bk-mine-tx b { font-size: 13px; } .bk-mine-tx span { font-size: 12px; color: var(--ink-dim); }
.bk-mine-btn { flex: 0 0 auto; border: 0; cursor: pointer; font: inherit; font-weight: 700; font-size: 13px; padding: 8px 14px; border-radius: 999px; background: var(--accent); color: var(--on-accent); }
/* compact (s) */
.bk-srow { display: flex; align-items: center; gap: 13px; }
.bk-ctx { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.bk-nm { font-weight: 700; font-size: clamp(16px, 4cqw, 20px); color: var(--ink); }
.bk-meta { font-size: 13px; color: var(--ink-dim); }
.bk-bookbtn, .bk-allbtn { width: 100%; }
.bk-allbtn { border: 0; cursor: pointer; font: inherit; font-weight: 700; background: transparent; color: var(--accent); padding: 6px; }
/* list (multi-service) */
.bk-listttl { font-weight: 800; font-size: clamp(17px, 3cqw, 22px); color: var(--ink); margin-bottom: 2px; }
.bk-list { display: flex; flex-direction: column; gap: 10px; }
.bk-row { display: flex; align-items: center; gap: 13px; width: 100%; text-align: left; cursor: pointer; border: 1px solid color-mix(in srgb, var(--ink) 9%, transparent); background: color-mix(in srgb, var(--ink) 3%, transparent); border-radius: 16px; padding: 12px 14px; font: inherit; }
.bk-row:hover { border-color: color-mix(in srgb, var(--ink) 18%, transparent); }
.bk-row-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.bk-row-nm { font-weight: 700; color: var(--ink); }
.bk-row-meta { font-size: 13px; color: var(--ink-dim); }
.bk-row-go { flex: 0 0 auto; padding: 9px 18px; font-size: 14px; }
/* mid (m) */
.bk-midhead { display: flex; flex-direction: column; gap: 3px; margin-bottom: 2px; }
.bk-chips { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }
.bk-chip { border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent); background: color-mix(in srgb, var(--ink) 6%, transparent); color: var(--ink); border-radius: 14px; padding: 14px 8px; font: inherit; font-weight: 700; cursor: pointer; }
.bk-chip:hover, .bk-tbtn:hover, .bk-cd:not(.off):not(.on):hover { border-color: var(--accent); }
.bk-chip.on, .bk-tbtn.on { background: var(--accent); color: var(--on-accent); border-color: transparent; }
/* large (detail + calendar + times) */
.bk-large { display: flex; flex-direction: column; gap: 16px; align-items: stretch; }
.bk-next { display: flex; align-items: center; gap: 9px; color: var(--ink-dim); font-size: 14px; font-weight: 600; }
.bk-next svg { width: 17px; height: 17px; opacity: .8; }
.bk-next.off { opacity: .55; }
.bk-bookbtn { width: 100%; }
.bk-detail { display: flex; flex-direction: column; gap: 14px; }
.bk-detail .bk-ic { width: 52px; height: 52px; }
.bk-dt { display: flex; flex-direction: column; gap: 12px; }
.bk-dt .bk-nm { font-size: clamp(22px, 4cqw, 30px); font-weight: 800; line-height: 1.05; }
.bk-facts { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.bk-facts li { display: flex; align-items: center; gap: 11px; color: var(--ink-dim); font-size: 15px; }
.bk-facts svg { width: 18px; height: 18px; flex: 0 0 auto; opacity: .8; }
.bk-desc { color: var(--ink-faint); font-size: 14px; line-height: 1.5; margin: 0; }
/* calendar */
.bk-cal-h { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.bk-cal-h b { font-size: 19px; font-weight: 800; color: var(--ink); }
.bk-cal-nav { display: flex; gap: 8px; }
.bk-nav { width: 34px; height: 34px; border-radius: 10px; border: 1px solid color-mix(in srgb, var(--ink) 12%, transparent); background: transparent; color: var(--ink); cursor: pointer; display: grid; place-items: center; }
.bk-nav svg { width: 16px; height: 16px; }
.bk-cal-dh { display: grid; grid-template-columns: repeat(7, 1fr); margin-bottom: 6px; }
.bk-cdh { text-align: center; font-size: 11px; font-weight: 700; letter-spacing: .04em; color: var(--ink-faint); text-transform: uppercase; }
.bk-cal-days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.bk-cd { aspect-ratio: 1; border: 0; background: transparent; color: var(--ink); font: inherit; font-weight: 600; font-size: 15px; border-radius: 12px; cursor: pointer; display: grid; place-items: center; }
.bk-cd.empty { pointer-events: none; }
.bk-cd.off { color: var(--ink-faint); opacity: .45; cursor: default; }
.bk-cd.on { background: var(--accent); color: var(--on-accent); font-weight: 800; }
/* times column */
.bk-times { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.bk-times-h { font-weight: 700; color: var(--ink); font-size: 15px; }
.bk-tlist { display: flex; flex-direction: column; gap: 9px; }
.bk-tbtn { border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent); background: color-mix(in srgb, var(--ink) 6%, transparent); color: var(--ink); border-radius: 14px; padding: 13px 10px; font: inherit; font-weight: 700; cursor: pointer; }
/* ---- booking flow modal — a centred, theme-coloured card (like the other widgets' modal) ---- */
.bk-flowcard { width: min(960px, 100%); padding: clamp(22px, 3cqw, 38px); }
.bk-mbody { display: flex; flex-direction: column; gap: 16px; max-width: none; }
.bk-formcol { width: 100%; max-width: 460px; margin: 0 auto; display: flex; flex-direction: column; gap: 16px; }
.bk-mhead { font-size: clamp(20px, 3cqw, 26px); font-weight: 800; letter-spacing: -.02em; margin: 0; color: var(--ink); }
.bk-flow-pick { display: grid; gap: clamp(18px, 2.6cqw, 30px); grid-template-columns: 1fr; }
@media (min-width: 560px) and (max-width: 819px) { .bk-flow-pick { grid-template-columns: 1.5fr 1fr; align-items: start; } .bk-flow-pick .bk-cal { display: none; } }
@media (min-width: 820px) { .bk-flow-pick { grid-template-columns: 0.9fr 1.4fr 0.85fr; align-items: start; } }
.bk-flowcard .bk-detail .bk-nm { font-size: 22px; }
.bk-flowcard .bk-detail .bk-thumb, .bk-flowcard .bk-detail .bk-ic { width: 100%; height: 150px; border-radius: 16px; }
.bk-flowcard .bk-cont { width: 100%; margin-top: 4px; }
.bk-flowcard .input { width: 100%; height: 54px; border-radius: 14px; border: 1px solid color-mix(in srgb, var(--ink) 16%, transparent); background: color-mix(in srgb, var(--ink) 5%, transparent); color: var(--ink); font: inherit; font-size: 16px; font-weight: 600; padding: 0 16px; }
.bk-flowcard .input::placeholder { color: var(--ink-dim, rgba(128,128,128,.7)); }
.bk-flowcard .input:focus { outline: none; border-color: var(--accent); }
.bk-sum { border: 1px solid color-mix(in srgb, var(--ink, #fff) 10%, transparent); border-radius: 16px; padding: 14px 16px; display: flex; flex-direction: column; gap: 3px; }
.bk-sum-nm { font-weight: 800; font-size: 17px; }
.bk-sum-when { color: var(--accent); font-weight: 700; font-size: 14px; }
.bk-sum-meta { color: var(--ink-dim, #999); font-size: 13px; }
.bk-in { width: 100%; }
.bk-pay { display: flex; align-items: center; gap: 10px; color: var(--ink-dim, #999); font-size: 14px; }
.bk-pay svg { width: 18px; height: 18px; }
.bk-err { color: #ff8a8a; font-size: 13px; font-weight: 600; }
/* confirmation */
.bk-done { display: flex; flex-direction: column; align-items: center; gap: 14px; text-align: center; padding-top: 6px; }
.bk-done-ic { color: var(--accent); } .bk-done-ic svg { width: 52px; height: 52px; }
.bk-done-h { font-size: 24px; font-weight: 800; margin: 0; }
.bk-done .bk-sum { width: 100%; text-align: left; }
.bk-done-acts { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; width: 100%; }
.bk-cal-btn { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; }
.bk-cal-btn svg { width: 17px; height: 17px; }
.bk-done-note { font-size: 13px; color: var(--ink-faint, #888); margin: 0; }
.bk-done-note a { color: var(--accent); }
/* manage modal */
.bk-mlist { display: flex; flex-direction: column; gap: 10px; }
.bk-mrow { display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 1px solid color-mix(in srgb, var(--ink, #fff) 10%, transparent); border-radius: 14px; padding: 12px 14px; }
.bk-mrow.past { opacity: .5; }
.bk-mrow-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.bk-mrow-tx span { font-size: 13px; color: var(--ink-dim, #999); }
.bk-mcancel { flex: 0 0 auto; border: 1px solid color-mix(in srgb, #ff8a8a 50%, transparent); background: transparent; color: #ff8a8a; border-radius: 999px; padding: 7px 13px; font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; }
.bk-mhint { color: var(--ink-dim, #999); font-size: 14px; margin: 0 0 4px; }
/* booking settings (owner) */
.bk-days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; margin-bottom: 14px; }
.bk-daychip { border: 1px solid rgba(255,255,255,0.12); background: #161617; color: rgba(255,255,255,0.6); border-radius: 10px; padding: 10px 2px; font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; }
.bk-daychip.on { background: var(--brand-accent, #fb5a2d); color: #fff; border-color: transparent; }
.bk-calrow { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; background: #1d1d22; border: 1px solid rgba(255,255,255,.1); border-radius: 14px; padding: 12px 14px; cursor: pointer; font: inherit; color: inherit; transition: border-color .15s, background .15s; }
.bk-calrow:hover { border-color: rgba(255,255,255,.28); background: rgba(255,255,255,.04); }
.bk-calrow.on { cursor: default; }
.bk-calic { flex: 0 0 auto; width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center; background: rgba(255,255,255,.07); }
.bk-calic svg { width: 20px; height: 20px; }
.bk-calic.ok { background: rgba(48,209,88,.14); color: #30D158; }
.bk-caltx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.bk-caltx b { font-size: 14px; font-weight: 600; }
.bk-caltx span { font-size: 12.5px; color: rgba(255,255,255,.55); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bk-calgo { flex: 0 0 auto; color: rgba(255,255,255,.4); display: grid; place-items: center; }
.bk-calgo svg { width: 18px; height: 18px; }
.bk-caldis { flex: 0 0 auto; border: 1px solid rgba(255,255,255,.16); background: transparent; color: rgba(255,255,255,.6); border-radius: 999px; padding: 7px 13px; font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer; }
.bk-caldis:hover { border-color: rgba(255,138,138,.5); color: #ff8a8a; }
.bk-set-empty { text-align: center; padding: 30px 10px; }
.bk-set-emic { color: var(--accent, #fb5a2d); display: inline-flex; margin-bottom: 12px; } .bk-set-emic svg { width: 44px; height: 44px; }
.bk-set-empty h3 { margin: 0 0 8px; font-size: 18px; }
.bk-set-empty p { color: rgba(255,255,255,.55); font-size: 14px; line-height: 1.5; margin: 0 0 6px; }
/* ============================ SHOP widget ============================ */
.wg-shop { container-type: inline-size; display: flex; flex-direction: column; gap: 18px; padding: clamp(16px, 3cqw, 26px); }
.sh-empty { color: var(--ink-faint, rgba(255,255,255,.4)); text-align: center; padding: 24px; font-size: 14px; }
/* storefront header band — text (natural width) · thumbnail strip (fills the gap, clips extras) · CTA.
   Stacks to a tidy vertical card when the widget is narrow (compact size). */
.sh-head { display: flex; align-items: center; gap: 16px; min-width: 0; }
.sh-thumbs { display: flex; gap: 8px; flex: 1 1 auto; min-width: 0; overflow: hidden; }
.sh-thumb, .sh-noimg { width: clamp(46px, 7cqw, 72px); aspect-ratio: 1; border-radius: 14px; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--ink) 8%, transparent); display: block; flex: 0 0 auto; }
.sh-noimg { display: grid; place-items: center; overflow: hidden; }
/* no image → a soft accent block with the product's initial (same height, on-brand, never a broken-looking box) */
.sh-mono { background: linear-gradient(145deg, color-mix(in srgb, var(--accent) 26%, var(--card-bg, #1a1a1f)), color-mix(in srgb, var(--accent) 8%, var(--card-bg, #1a1a1f))); }
.sh-headtx { flex: 0 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.sh-over { font-size: 11.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--accent); }
.sh-storenm { font-size: clamp(19px, 3cqw, 28px); font-weight: 800; letter-spacing: -.02em; line-height: 1.1; color: var(--ink); margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sh-meta { font-size: 14px; color: var(--ink-dim, rgba(255,255,255,.6)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sh-headcta { flex: 0 0 auto; }
.sh-browse { flex: 0 0 auto; white-space: nowrap; }
.sh-headonly { justify-content: center; }
/* narrow + TALL (compact size, roomy height) → stack: thumbnail row on top, identity, full-width CTA */
.sh-stack .sh-head { flex-wrap: wrap; gap: 13px; }
.sh-stack .sh-headtx { flex: 1 1 100%; order: 1; }
.sh-stack .sh-thumbs { flex: 1 1 100%; order: 0; }
.sh-stack .sh-thumbs .sh-thumb, .sh-stack .sh-thumbs .sh-noimg { flex: 1 1 0; width: auto; }
.sh-stack .sh-thumbs .sh-thumb:nth-child(n+4), .sh-stack .sh-thumbs .sh-noimg:nth-child(n+4) { display: none; }
.sh-stack .sh-headcta { flex: 1 1 100%; order: 2; }
.sh-stack .sh-headcta .sh-browse, .sh-stack .sh-headcta .sh-cartpill { width: 100%; justify-content: center; }
/* narrow + SHORT → one tidy row, drop the thumbnails so nothing overflows */
.sh-tight .sh-thumbs { display: none; }
.sh-tight .sh-headtx { flex: 1 1 auto; }
.sh-cartpill { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 8px; border: 1px solid color-mix(in srgb, var(--ink) 14%, transparent); background: color-mix(in srgb, var(--ink) 5%, transparent); color: var(--ink); border-radius: 999px; padding: 9px 15px; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; }
.sh-cartpill svg { width: 17px; height: 17px; }
.sh-cartpill:hover { border-color: color-mix(in srgb, var(--ink) 30%, transparent); }
/* grid head */
.sh-gridhead { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.sh-gridttl { margin: 0; font-size: clamp(18px, 2.6cqw, 24px); font-weight: 800; letter-spacing: -.02em; color: var(--ink); }
.sh-viewall { display: inline-flex; align-items: center; gap: 5px; border: 0; background: none; color: var(--accent); font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }
.sh-viewall svg { width: 15px; height: 15px; }
/* product grid */
.sh-grid { display: grid; gap: clamp(10px, 1.6cqw, 16px); grid-template-columns: repeat(2, 1fr); }
@container (min-width: 540px) { .sh-grid { grid-template-columns: repeat(3, 1fr); } }
@container (min-width: 760px) { .sh-grid { grid-template-columns: repeat(4, 1fr); } }
.sh-card { display: flex; flex-direction: column; gap: 0; border: 1px solid color-mix(in srgb, var(--ink) 9%, transparent); border-radius: 16px; overflow: hidden; background: color-mix(in srgb, var(--ink) 3%, transparent); cursor: pointer; transition: border-color .14s, transform .14s; text-align: left; }
.sh-card:hover { border-color: color-mix(in srgb, var(--ink) 22%, transparent); transform: translateY(-2px); }
.sh-cardimg { width: 100%; aspect-ratio: 16/10; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--ink) 7%, transparent); display: block; }
.sh-card .sh-noimg { width: 100%; aspect-ratio: 16/10; border-radius: 0; }
.sh-cardbody { display: flex; flex-direction: column; gap: 10px; padding: 13px 14px 14px; flex: 1 1 auto; }
.sh-cardtx { display: flex; flex-direction: column; gap: 2px; }
.sh-cardnm { font-weight: 700; font-size: 15px; color: var(--ink); }
.sh-cardsub { font-size: 12.5px; color: var(--ink-dim, rgba(255,255,255,.55)); }
.sh-cardfoot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto; }
.sh-price { font-weight: 800; font-size: 17px; color: var(--ink); }
.sh-add { display: inline-flex; align-items: center; gap: 6px; border: 0; background: var(--accent); color: var(--on-accent, #fff); border-radius: 11px; padding: 8px 12px; font: inherit; font-weight: 700; font-size: 13.5px; cursor: pointer; }
.sh-add svg { width: 16px; height: 16px; }
.sh-add .sh-addtx { display: none; }
@container (min-width: 540px) { .sh-add { padding: 8px 14px; } .sh-add .sh-addtx { display: inline; } .sh-add svg { display: none; } }
/* ---- shop modals (themed wm-card) ---- */
.sh-prodcard { width: min(980px, 100%); padding: clamp(20px, 3cqw, 38px); }
.sh-prodbody { display: grid; gap: clamp(20px, 3cqw, 36px); grid-template-columns: 1fr; max-width: none; }
@media (min-width: 720px) { .sh-prodbody { grid-template-columns: 1fr 1fr; align-items: start; } }
.sh-gallery { display: flex; flex-direction: column; gap: 12px; }
.sh-galimg, .sh-gallery .sh-noimg { display: block; width: 100%; aspect-ratio: 1; border-radius: 18px; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--ink) 8%, transparent); }
.sh-galthumbs { display: flex; gap: 10px; }
.sh-galt { flex: 1 1 0; aspect-ratio: 1; border-radius: 12px; overflow: hidden; border: 2px solid transparent; background: none; padding: 0; cursor: pointer; }
.sh-galt.on { border-color: var(--accent); }
.sh-galtimg, .sh-galt .sh-noimg { display: block; width: 100%; height: 100%; border-radius: 0; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--ink) 8%, transparent); }
.sh-prodinfo { display: flex; flex-direction: column; gap: 14px; }
.sh-bcrumb { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--accent); }
.sh-bcrumb span { color: var(--ink-faint, rgba(255,255,255,.45)); font-weight: 600; }
.sh-badge { align-self: flex-start; font-size: 11.5px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: var(--accent); }
.sh-prodttl { margin: 0; font-size: clamp(26px, 4cqw, 38px); font-weight: 800; letter-spacing: -.02em; line-height: 1.02; color: var(--ink); }
.sh-rating { display: flex; align-items: center; gap: 9px; font-size: 14px; color: var(--ink-dim, rgba(255,255,255,.6)); }
.sh-stars { display: inline-flex; letter-spacing: 1px; }
.sh-star { color: color-mix(in srgb, var(--ink) 22%, transparent); } .sh-star.on { color: var(--accent); }
.sh-proddsc { margin: 0; font-size: 15px; line-height: 1.55; color: var(--ink-dim, rgba(255,255,255,.7)); }
.sh-optgrp { display: flex; flex-direction: column; gap: 9px; }
.sh-optlbl { font-size: 11.5px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: var(--ink-faint, rgba(255,255,255,.5)); }
.sh-optrow { display: flex; flex-wrap: wrap; gap: 9px; }
.sh-swatch { width: 38px; height: 38px; border-radius: 11px; border: 2px solid transparent; outline: 1px solid color-mix(in srgb, var(--ink) 14%, transparent); outline-offset: -1px; cursor: pointer; padding: 0; }
.sh-swatch.on { border-color: var(--ink); outline-color: var(--ink); }
.sh-optbtn { border: 1px solid color-mix(in srgb, var(--ink) 16%, transparent); background: transparent; color: var(--ink); border-radius: 11px; padding: 9px 16px; font: inherit; font-weight: 700; font-size: 14px; cursor: pointer; }
.sh-optbtn.on { background: var(--accent); color: var(--on-accent, #fff); border-color: transparent; }
.sh-check { display: flex; align-items: center; gap: 9px; font-size: 14px; color: var(--ink-dim, rgba(255,255,255,.65)); }
.sh-check svg { width: 17px; height: 17px; flex: 0 0 auto; }
.sh-check.ok svg { color: #30D158; }
.sh-check.off { color: #ff8a8a; font-weight: 600; }
.sh-prodbuy { display: flex; align-items: center; gap: 14px; margin-top: 6px; flex-wrap: wrap; }
.sh-prodprice { font-size: 30px; font-weight: 800; color: var(--ink); }
.sh-qty { display: inline-flex; align-items: center; gap: 4px; border: 1px solid color-mix(in srgb, var(--ink) 14%, transparent); border-radius: 12px; padding: 4px; }
.sh-qty button { width: 34px; height: 34px; border: 0; background: none; color: var(--ink); font: inherit; font-size: 19px; cursor: pointer; border-radius: 9px; }
.sh-qty button:hover { background: color-mix(in srgb, var(--ink) 8%, transparent); }
.sh-qty span { min-width: 26px; text-align: center; font-weight: 700; color: var(--ink); }
.sh-addcart { flex: 1 1 auto; min-width: 160px; }
.sh-addcart[disabled] { opacity: .5; pointer-events: none; }
/* cart modal */
.sh-cartcard { width: min(460px, 100%); padding: clamp(22px, 3cqw, 34px); }
.sh-mhead { margin: 0; font-size: clamp(20px, 3cqw, 26px); font-weight: 800; letter-spacing: -.02em; color: var(--ink); }
.sh-clist { display: flex; flex-direction: column; gap: 12px; }
.sh-citem { display: flex; align-items: center; gap: 13px; border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent); border-radius: 14px; padding: 11px 13px; }
.sh-cthumbimg, .sh-citem .sh-noimg { display: block; width: 46px; height: 46px; border-radius: 11px; flex: 0 0 auto; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--ink) 8%, transparent); }
.sh-ctx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.sh-ctx b { font-size: 14.5px; color: var(--ink); } .sh-ctx span { font-size: 12.5px; color: var(--ink-dim, rgba(255,255,255,.55)); }
.sh-cqty { display: inline-flex; align-items: center; gap: 2px; flex: 0 0 auto; }
.sh-cqty button { width: 28px; height: 28px; border: 1px solid color-mix(in srgb, var(--ink) 14%, transparent); background: none; color: var(--ink); border-radius: 8px; font: inherit; font-size: 16px; cursor: pointer; }
.sh-cqty span { min-width: 24px; text-align: center; font-weight: 700; font-size: 14px; color: var(--ink); }
.sh-ctotal { display: flex; align-items: center; justify-content: space-between; padding: 4px 2px; }
.sh-ctotal span { color: var(--ink-dim, rgba(255,255,255,.6)); font-size: 15px; }
.sh-ctotal b { font-size: 24px; font-weight: 800; color: var(--ink); }
.sh-checkout { display: inline-flex; align-items: center; justify-content: center; gap: 9px; width: 100%; }
.sh-checkout svg { width: 18px; height: 18px; }
/* browse modal */
.sh-browsecard { width: min(1080px, 100%); padding: clamp(20px, 3cqw, 38px); }
.sh-browsebody { display: flex; flex-direction: column; gap: 18px; max-width: none; }
.sh-browsehead { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.sh-browsen { font-size: 13px; color: var(--ink-faint, rgba(255,255,255,.45)); }
.sh-browsegrid { grid-template-columns: repeat(2, 1fr); }
@media (min-width: 620px) { .sh-browsegrid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 900px) { .sh-browsegrid { grid-template-columns: repeat(4, 1fr); } }
.sh-browsecart { position: sticky; bottom: 0; }
/* product editor (owner sub-modal, inside fm-card) */
.sh-edopt { border: 1px solid rgba(255,255,255,.1); border-radius: 14px; margin-bottom: 9px; overflow: hidden; }
.sh-edopt.open { background: rgba(255,255,255,.02); }
.sh-edopthd { display: flex; align-items: center; gap: 10px; width: 100%; padding: 13px 14px; background: none; border: 0; font: inherit; color: #fff; cursor: pointer; text-align: left; }
.sh-edchev { flex: 0 0 auto; display: inline-flex; color: rgba(255,255,255,.45); transition: transform .15s; }
.sh-edchev svg { width: 16px; height: 16px; }
.sh-edopt.open .sh-edchev { transform: rotate(90deg); }
.sh-edopttx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.sh-edopttx b { font-size: 14px; font-weight: 700; }
.sh-edopttx span { font-size: 12.5px; color: rgba(255,255,255,.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sh-edoptbody { padding: 0 14px 14px; display: flex; flex-direction: column; gap: 10px; }
.sh-edopt .input, .sh-edoptn { height: 44px !important; font-size: 14px !important; border-radius: 11px !important; }
.sh-edtype { display: inline-flex; gap: 4px; background: rgba(255,255,255,.05); border-radius: 11px; padding: 4px; align-self: flex-start; }
.sh-edtypebtn { border: 0; background: none; color: rgba(255,255,255,.6); font: inherit; font-size: 13px; font-weight: 700; padding: 7px 18px; border-radius: 8px; cursor: pointer; }
.sh-edtypebtn.on { background: #fff; color: #111; }
.sh-edx { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 9px; border: 0; background: rgba(255,255,255,.06); color: rgba(255,255,255,.55); cursor: pointer; display: grid; place-items: center; }
.sh-edx:hover { background: rgba(255,138,138,.18); color: #ff8a8a; }
.sh-edx svg { width: 13px; height: 13px; }
.sh-edvals { display: flex; flex-direction: column; gap: 7px; }
/* wraps so the colour field can expand to the full picker on its own line */
.sh-edval { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sh-edvaln { flex: 1 1 140px; min-width: 0; }
/* holds our own colour field (swatch + hex + caret), not a native 44px colour box */
.sh-edcolor { flex: 0 1 auto; min-width: 118px; }
.sh-edcolor .cf { width: 100%; }
.sh-edcolor .cf.open { flex: 1 1 100%; }
.sh-edval:has(.cf.open) .sh-edcolor { flex: 1 1 100%; order: 2; }
.sh-edvaladd { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; border: 1px dashed rgba(255,255,255,.2); background: none; color: rgba(255,255,255,.6); border-radius: 10px; padding: 8px 13px; font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; }
.sh-edvaladd svg { width: 15px; height: 15px; }
/* floating cart bar — flows at the top of the page whenever the cart has items */
.sh-cartbar { position: fixed; top: 14px; left: 50%; transform: translateX(-50%); z-index: 150; display: inline-flex; align-items: center; gap: 9px; border: 0; cursor: pointer; font: inherit; font-weight: 700; font-size: 14px; padding: 11px 20px; border-radius: 999px; background: var(--sh-bar-bg, #fb5a2d); color: var(--sh-bar-fg, #fff); box-shadow: 0 10px 30px -8px rgba(0,0,0,.45); animation: sh-bar-in .26s cubic-bezier(.2,.9,.3,1); }
.sh-cartbar svg { width: 18px; height: 18px; }
.sh-cartbar:hover { filter: brightness(1.05); }
@keyframes sh-bar-in { from { opacity: 0; transform: translate(-50%, -12px); } to { opacity: 1; transform: translate(-50%, 0); } }
body.wm-open .sh-cartbar { opacity: 0; pointer-events: none; }
/* ============================ FAQ widget ============================ */
.wg-faq { container-type: inline-size; display: flex; flex-direction: column; gap: 14px; padding: clamp(14px, 2.5cqw, 22px); }
.faq-head { font-size: clamp(18px, 2.6cqw, 24px); font-weight: 800; letter-spacing: -.02em; color: var(--ink); }
.faq-list { display: flex; flex-direction: column; gap: 10px; }
.faq-item { border: 1px solid color-mix(in srgb, var(--ink) 9%, transparent); border-radius: 16px; overflow: hidden; background: color-mix(in srgb, var(--ink) 3%, transparent); transition: background .15s, border-color .15s; }
.faq-item.open { background: color-mix(in srgb, var(--ink) 6%, transparent); border-color: color-mix(in srgb, var(--ink) 13%, transparent); }
.faq-q { display: flex; align-items: center; gap: 14px; width: 100%; text-align: left; background: none; border: 0; font: inherit; color: var(--ink); cursor: pointer; padding: 16px 18px; }
.faq-qtx { flex: 1 1 auto; min-width: 0; font-family: var(--h1-font, var(--font)); font-weight: 700; font-size: clamp(15px, 1.8cqw, 17px); line-height: 1.3; }
.faq-tog { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; background: color-mix(in srgb, var(--ink) 8%, transparent); color: var(--ink); transition: background .15s, color .15s; }
.faq-tog svg { width: 18px; height: 18px; }
.faq-item.open .faq-tog { background: var(--accent); color: var(--on-accent, #fff); }
.faq-a { padding: 0 18px 18px; color: var(--ink-dim, rgba(255,255,255,.62)); font-size: clamp(14px, 1.6cqw, 15px); line-height: 1.6; max-width: 62ch; }
.faq-empty { color: var(--ink-faint, rgba(255,255,255,.4)); text-align: center; padding: 22px; font-size: 14px; }
/* card preview → whole card opens the modal; items don't capture clicks */
.faq-clickable { cursor: pointer; }
.faq-clickable .faq-item { pointer-events: none; }
.faq-more { font-size: 13.5px; font-weight: 700; color: var(--accent); padding: 6px 4px 0; }
/* compact → opens the modal */
.wg-faq-compact { padding: clamp(14px, 2.5cqw, 20px); }
.faq-compact { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; background: none; border: 0; font: inherit; color: var(--ink); cursor: pointer; }
.faq-ctx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.faq-cover { font-size: clamp(18px, 3cqw, 24px); font-weight: 800; letter-spacing: -.02em; }
.faq-cmeta { font-size: 13.5px; color: var(--ink-dim, rgba(255,255,255,.55)); }
.faq-cgo { flex: 0 0 auto; color: var(--ink-dim, rgba(255,255,255,.45)); display: grid; place-items: center; }
.faq-cgo svg { width: 18px; height: 18px; }
/* modal */
.faq-modalcard { width: min(680px, 100%); padding: clamp(22px, 3cqw, 38px); }
.faq-modalbody { display: flex; flex-direction: column; gap: 18px; max-width: none; }
.faq-mhead { margin: 0; font-size: clamp(22px, 3cqw, 28px); font-weight: 800; letter-spacing: -.02em; color: var(--ink); }
/* ===================== Onboarding tour (spotlight) ===================== */
#onb { position: fixed; inset: 0; z-index: 9000; pointer-events: none; font-family: var(--qck-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif); }
.onb-mask { position: fixed; background: rgba(6,6,10,.66); pointer-events: auto; transition: all .28s cubic-bezier(.2,.8,.2,1); -webkit-backdrop-filter: blur(1px); backdrop-filter: blur(1px); }
.onb-ring { position: fixed; border-radius: 14px; box-shadow: 0 0 0 2px #fb5a2d, 0 0 0 6px rgba(251,90,45,.25), 0 0 28px 4px rgba(251,90,45,.35); pointer-events: none; transition: all .28s cubic-bezier(.2,.8,.2,1); }
.onb-tip { position: fixed; z-index: 9002; background: #161617; color: #fff; border: 1px solid rgba(255,255,255,.12); border-radius: 16px; padding: 15px 16px; box-shadow: 0 24px 60px -18px rgba(0,0,0,.75); pointer-events: auto; transition: top .28s cubic-bezier(.2,.8,.2,1), left .28s cubic-bezier(.2,.8,.2,1); }
.onb-tip::before { content: ""; position: absolute; top: -7px; left: 28px; width: 14px; height: 14px; background: #161617; border-left: 1px solid rgba(255,255,255,.12); border-top: 1px solid rgba(255,255,255,.12); transform: rotate(45deg); }
.onb-tip.above::before { top: auto; bottom: -7px; transform: rotate(225deg); }
.onb-tx { font-size: 14.5px; line-height: 1.5; font-weight: 500; margin-bottom: 12px; }
.onb-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.onb-step { font-size: 12px; font-weight: 700; color: rgba(255,255,255,.4); }
.onb-acts { display: inline-flex; align-items: center; gap: 6px; }
.onb-skip { background: none; border: 0; color: rgba(255,255,255,.5); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; padding: 7px 10px; border-radius: 9px; }
.onb-skip:hover { color: #fff; }
.onb-next { background: #fb5a2d; border: 0; color: #fff; font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer; padding: 8px 16px; border-radius: 9px; }
.onb-next:hover { filter: brightness(1.06); }
/* centred welcome / finish card */
#onb.onb-center { background: rgba(6,6,10,.74); pointer-events: auto; -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
.onb-center .onb-mask, .onb-center .onb-ring { display: none; }
.onb-center .onb-tip { left: 50% !important; top: 50% !important; transform: translate(-50%,-50%); width: min(440px, 92vw) !important; padding: 26px; text-align: center; }
.onb-center .onb-tip::before { display: none; }
.onb-card h3, .onb-tip h3 { margin: 0 0 8px; font-size: 22px; font-weight: 800; letter-spacing: -.02em; }
.onb-card p, .onb-tip p { margin: 0 0 20px; font-size: 15px; line-height: 1.55; color: rgba(255,255,255,.62); }
.onb-cardacts { display: flex; align-items: center; justify-content: center; gap: 12px; }
.onb-never { display: block; margin: 16px auto 0; background: none; border: 0; color: rgba(255,255,255,.4); font: inherit; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.onb-never:hover { color: rgba(255,255,255,.7); }
.onb-cardacts .btn-cta, .onb-done { background: #fb5a2d !important; color: #fff !important; border: 0 !important; border-radius: 12px !important; padding: 13px 22px !important; font-weight: 700 !important; font-size: 15px; cursor: pointer; }
.onb-cardacts .btn-cta::after, .onb-done::after { content: none !important; }
.onb-finrow { display: flex; gap: 8px; margin-bottom: 16px; }
.onb-url { flex: 1 1 auto; min-width: 0; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.14); border-radius: 11px; color: #fff; font: inherit; font-size: 14px; padding: 11px 13px; outline: none; }
.onb-copy { flex: 0 0 auto; background: rgba(255,255,255,.1); border: 0; color: #fff; border-radius: 11px; padding: 0 16px; font: inherit; font-weight: 700; font-size: 13.5px; cursor: pointer; }
.onb-copy:hover { background: rgba(255,255,255,.18); }
.onb-done { width: 100%; }
/* ===================== Sites switcher + add-site ===================== */
.site-list { display: flex; flex-direction: column; gap: 8px; }
.site-row { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.09); border-radius: 13px; padding: 10px 12px; cursor: pointer; font: inherit; color: #fff; transition: border-color .12s, background .12s; }
.site-row:hover:not(:disabled) { border-color: rgba(255,255,255,.26); background: rgba(255,255,255,.06); }
.site-row.on { border-color: rgba(251,90,45,.5); background: rgba(251,90,45,.08); cursor: default; }
.site-thumb { flex: 0 0 auto; width: 42px; height: 42px; border-radius: 10px; background-size: cover; background-position: center; background-color: rgba(255,255,255,.08); display: grid; place-items: center; overflow: hidden; }
.site-mono { font-weight: 800; font-size: 17px; color: rgba(255,255,255,.6); }
.site-tx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.site-nm { font-weight: 700; font-size: 14.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.site-sub { font-size: 12.5px; color: rgba(255,255,255,.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.site-cur { flex: 0 0 auto; font-size: 12px; font-weight: 700; color: #fb5a2d; }
.site-go { flex: 0 0 auto; color: rgba(255,255,255,.4); } .site-go svg { width: 18px; height: 18px; }
/* add-site modal */
.as-card { max-width: 520px; }
.as-modes { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; background: rgba(255,255,255,.05); border-radius: 12px; padding: 4px; margin-bottom: 14px; }
.as-mode { border: 0; background: none; color: rgba(255,255,255,.6); font: inherit; font-size: 13.5px; font-weight: 700; padding: 9px; border-radius: 9px; cursor: pointer; }
.as-mode.on { background: #fff; color: #111; }
.as-results { display: flex; flex-direction: column; gap: 7px; margin-top: 8px; max-height: 260px; overflow-y: auto; }
.as-picked { display: flex; align-items: center; gap: 9px; margin-top: 10px; color: #30D158; font-size: 14px; font-weight: 600; }
.as-picked svg { width: 18px; height: 18px; }
.as-tstrip { display: flex; gap: 12px; overflow-x: auto; padding: 4px 2px 14px; scroll-snap-type: x proximity; }
.as-tstrip::-webkit-scrollbar { height: 0; }
.as-tcard { flex: 0 0 140px; scroll-snap-align: start; border-radius: 16px; border: 1.5px solid rgba(255,255,255,.08); background: rgba(255,255,255,.03); cursor: pointer; overflow: hidden; padding: 0; position: relative; display: flex; flex-direction: column; transition: border-color .15s, transform .15s, box-shadow .15s; }
.as-tcard:hover { transform: translateY(-3px); border-color: rgba(255,255,255,.22); }
.as-tcard.on { border-color: var(--qck, #FB5A2D); box-shadow: 0 0 0 3px color-mix(in srgb, var(--qck, #FB5A2D) 26%, transparent); }
.as-tcard .tprev { height: 110px; overflow: hidden; }
.as-tcard.on::after { content: "✓"; position: absolute; top: 8px; right: 8px; width: 22px; height: 22px; border-radius: 50%; background: var(--qck, #FB5A2D); color: #fff; font-size: 12px; font-weight: 800; display: grid; place-items: center; box-shadow: 0 2px 8px rgba(0,0,0,.45); }
.as-tname { display: block; padding: 9px 11px; color: #fff; font-size: 12.5px; font-weight: 700; letter-spacing: -.01em; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.as-tcard.on .as-tname { color: var(--qck, #FB5A2D); }
/* ===================== Subscribe widget ===================== */
.wg-subscribe { container-type: inline-size; display: flex; flex-direction: column; gap: 12px; padding: clamp(16px, 3cqw, 24px); }
.sub-ttl { margin: 0; }
.sub-dsc { margin: 0; }
.sub-form { display: flex; flex-direction: column; gap: 10px; margin-top: 2px; }
.sub-names { display: grid; grid-template-columns: 1fr; gap: 10px; }
.sub-names.two { grid-template-columns: 1fr 1fr; }
.sub-mainrow { display: flex; gap: 10px; }
.sub-in { flex: 1 1 auto; min-width: 0; width: 100%; background: color-mix(in srgb, var(--ink) 6%, transparent); border: 1px solid color-mix(in srgb, var(--ink) 14%, transparent); color: var(--ink); border-radius: 12px; font: inherit; font-size: 15px; padding: 13px 15px; outline: none; }
.sub-in::placeholder { color: color-mix(in srgb, var(--ink) 42%, transparent); }
.sub-in:focus { border-color: var(--accent); }
.sub-btn { flex: 0 0 auto; white-space: nowrap; }
.sub-err { color: #ff8a8a; font-size: 13px; font-weight: 600; }
.sub-done { display: flex; align-items: center; justify-content: center; gap: 10px; text-align: center; padding: 10px 4px; color: var(--ink); font-weight: 600; font-size: 15px; min-height: 40px; }
.sub-done svg { width: 22px; height: 22px; color: var(--accent); flex: 0 0 auto; }
/* narrow → stack the button under the input */
@container (max-width: 360px) { .sub-mainrow { flex-direction: column; } .sub-btn { width: 100%; } .sub-names.two { grid-template-columns: 1fr; } }
/* short heights → hide the description so it fits */
.wg-subscribe.h-xs .sub-dsc, .wg-subscribe.h-s .sub-dsc { display: none; }
/* Assets tab — compact business-info overview card (details open in a modal) */
.ai-card { display:block; width:100%; text-align:left; background:rgba(255,255,255,0.045); border:1px solid rgba(255,255,255,0.12); border-radius:15px; padding:14px 15px; color:#fff; cursor:pointer; font:inherit; margin-bottom:20px; }
.ai-card:hover { background:rgba(255,255,255,0.08); }
.ai-card-h { display:flex; align-items:center; justify-content:space-between; margin-bottom:9px; }
.ai-card-h b { font-size:15px; }
.ai-edit { font-size:13px; color:var(--accent,#FB5A2D); font-weight:650; display:inline-flex; align-items:center; gap:3px; }
.ai-rows { display:flex; flex-direction:column; gap:8px; }
.ai-row { display:flex; align-items:center; gap:9px; font-size:13.5px; color:rgba(255,255,255,0.82); }
.ai-row svg { width:16px; height:16px; opacity:.7; flex:none; }
.ai-row span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* ===== Floating top nav (site menu) ===== */
#site-nav { position: sticky; top: 12px; z-index: 40; width: 100%; max-width: 1200px; margin: 0 auto 14px; padding: 0 4px; box-sizing: border-box; }
#site-nav .snav-inner { display: flex; align-items: center; gap: 14px; padding: 9px 14px; border-radius: 999px; background: color-mix(in srgb, var(--ink,#111) 82%, transparent); backdrop-filter: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); border: 1px solid rgba(255,255,255,0.12); box-shadow: 0 12px 34px -18px rgba(0,0,0,0.55); }
:root:not([data-x]) #site-nav .snav-inner { background: rgba(20,20,24,0.72); }
.snav-brand { display: inline-flex; align-items: center; flex: none; text-decoration: none; color: var(--paper,#fff); font-weight: 800; font-size: 16px; }
.snav-brand img { height: 26px; width: auto; max-width: 120px; object-fit: contain; display: block; }
.snav-brandtx { letter-spacing: -0.01em; }
.snav-links { display: flex; align-items: center; justify-content: flex-start; gap: 4px; flex: 1 1 auto; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; }
.snav-links::-webkit-scrollbar { display: none; }
.snav-link { flex: none; text-decoration: none; color: var(--paper,#fff); opacity: .82; font-weight: 600; font-size: 13.5px; padding: 7px 12px; border-radius: 999px; white-space: nowrap; cursor: pointer; transition: opacity .15s, background .15s; }
.snav-link:hover { opacity: 1; background: rgba(255,255,255,0.08); }
.snav-gear { flex: none; width: 34px; height: 34px; display: grid; place-items: center; border-radius: 999px; border: 0; background: rgba(255,255,255,0.08); color: var(--paper,#fff); cursor: pointer; }
.snav-gear:hover { background: rgba(255,255,255,0.16); }
.snav-gear svg { width: 17px; height: 17px; }
@media (min-width: 641px) { body.is-owner:not(.preview) #site-nav { top: 74px; } }   /* sit below the Desktop/Mobile toggle in edit mode only (desktop) */
body.is-owner:not(.preview) #site-nav.nav-off .snav-inner { opacity: .5; outline: 1px dashed rgba(255,255,255,.3); }
body.preview .snav-gear, body.preview .sfoot-gear { display: none; }   /* no editor gear in preview/live */
body.preview #site-nav.nav-off, body.preview #site-footer.nav-off { display: none; }
/* [+] add card in an empty layout slot (owner only) — opaque, rounded like the other cards */
.bx-add { display: flex; }
.wg-addcard { width: 100%; height: 100%; min-height: 90px; display: grid; place-items: center; border-radius: var(--radius, 20px); border: 1.5px dashed color-mix(in srgb, var(--ink,#fff) 22%, transparent); background: color-mix(in srgb, var(--ink,#fff) 5%, transparent); color: color-mix(in srgb, var(--ink,#fff) 55%, transparent); cursor: pointer; transition: background .15s, color .15s, border-color .15s; }
.wg-addcard:hover { background: color-mix(in srgb, var(--accent,#FB5A2D) 14%, transparent); border-color: var(--accent,#FB5A2D); color: var(--accent,#FB5A2D); }
.wg-addcard svg { width: 26px; height: 26px; }
body.preview .bx-add, body:not(.is-owner) .bx-add { display: none; }
/* Absorbed remainder: a lone trailing widget spans the FULL row — its card fills the whole width (so its
   background covers the row, no empty gaps) while the content inside stays a centred ~2×1 column. If the
   card has no background it just reads as content centred in the middle, which is fine. Desktop bento only. */
.w.w-fillrow > .card { width: 100%; box-sizing: border-box; padding-inline: max(22px, calc((100% - 720px) / 2)); }
.snav-burger { display: none; flex: none; width: 34px; height: 34px; border: 0; background: rgba(255,255,255,0.08); border-radius: 999px; cursor: pointer; padding: 0; flex-direction: column; align-items: center; justify-content: center; gap: 4px; }
.snav-burger span { display: block; width: 16px; height: 2px; border-radius: 2px; background: var(--paper,#fff); transition: transform .2s, opacity .2s; }
#site-nav.nav-open .snav-burger span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
#site-nav.nav-open .snav-burger span:nth-child(2) { opacity: 0; }
#site-nav.nav-open .snav-burger span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }
/* Mobile nav = hamburger. Triggered by the .snav-mobile class (set from JS whenever the RENDER is mobile —
   real phones AND the desktop editor's Mobile preview), not by viewport width, so it shows in both. */
#site-nav.snav-mobile .snav-inner { gap: 10px; padding: 8px 11px; position: relative; }
#site-nav.snav-mobile .snav-brand img { height: 22px; }
#site-nav.snav-mobile .snav-burger { display: flex; margin-left: auto; }
#site-nav.snav-mobile .snav-links { position: absolute; top: calc(100% + 8px); left: 0; right: 0; flex-direction: column; align-items: stretch; gap: 2px; overflow: visible; padding: 8px; border-radius: 18px; background: rgba(20,20,24,0.97); border: 1px solid rgba(255,255,255,0.12); box-shadow: 0 18px 40px -18px rgba(0,0,0,0.6); backdrop-filter: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); display: none; }
#site-nav.snav-mobile .snav-link { color: #fff; font-size: 14.5px; padding: 11px 14px; }
#site-nav.snav-mobile.nav-open .snav-links { display: flex; }
/* ===== Footer ===== */
#site-footer { width: 100%; max-width: 1200px; margin: 30px auto 0; padding: 0 4px; box-sizing: border-box; }
#site-footer .sfoot-inner { padding: 26px 22px 20px; border-radius: 20px 20px 0 0; background: rgba(20,20,24,0.55); border: 1px solid rgba(255,255,255,0.08); border-bottom: 0; }
.sfoot-proof { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 18px; color: var(--paper,#fff); font-size: 14px; opacity: .9; }
.sfoot-stars { color: #FFC93C; letter-spacing: 1px; }
.sfoot-avs { display: inline-flex; }
.sfoot-avs span { width: 24px; height: 24px; border-radius: 999px; background-size: cover; background-position: center; margin-left: -6px; border: 2px solid rgba(20,20,24,1); }
.sfoot-avs span:first-child { margin-left: 0; }
.sfoot-cols { display: flex; flex-wrap: wrap; gap: 34px 60px; }
.sfoot-col { display: flex; flex-direction: column; gap: 8px; min-width: 120px; }
.sfoot-t { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; opacity: .55; color: var(--paper,#fff); margin-bottom: 3px; }
.sfoot-link { text-decoration: none; color: var(--paper,#fff); opacity: .78; font-size: 14px; cursor: pointer; }
.sfoot-link:hover { opacity: 1; }
.sfoot-base { display: flex; align-items: center; gap: 12px; margin-top: 24px; padding-top: 16px; border-top: 1px solid rgba(255,255,255,0.08); color: var(--paper,#fff); }
.sfoot-brand img { height: 24px; width: auto; }
.sfoot-brand span { font-weight: 800; }
.sfoot-copy { opacity: .5; font-size: 13px; }
.sfoot-gear { margin-left: auto; color: var(--ink,#fff); background: color-mix(in srgb, var(--ink) 10%, transparent); }
.sfoot-gear:hover { background: color-mix(in srgb, var(--ink) 18%, transparent); }
.sfoot-gear svg { color: var(--ink,#fff); }
#site-footer.nav-off .sfoot-inner { opacity: .5; outline: 1px dashed rgba(255,255,255,.25); }
/* footer settings modal */
.footset-group { border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; padding: 10px 12px; margin-bottom: 12px; }
.footset-ghead { display: flex; gap: 8px; align-items: center; margin-bottom: 4px; }
.footset-title { flex: 1 1 auto; font-weight: 650; }
/* cf-row icon as a button (assets link cards) */
.cf-iconbtn { border: 0; cursor: pointer; padding: 0; background: rgba(255,255,255,0.06); color: #fff; transition: background .12s; }
.cf-iconbtn:hover { background: rgba(255,255,255,0.14); }
/* no icon set → a faded dashed "+" so deselecting is clearly visible (not a fallback link icon) */
.cf-icon.cf-icon-empty { background: transparent; border: 1.5px dashed rgba(255,255,255,0.22); color: rgba(255,255,255,0.5); }
.cf-icon.cf-icon-empty:hover { border-color: rgba(255,255,255,0.4); color: rgba(255,255,255,0.8); }
.snav-ic { display: inline-flex; margin-right: 6px; vertical-align: -2px; }
.snav-ic svg { width: 15px; height: 15px; }
/* footer as one clean line (nxtwk-style) */
#site-footer .sfoot-inner.sfoot-line { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 12px; padding: 20px 22px; border-radius: 20px 20px 0 0; }
.sfoot-line .sfoot-brand img { height: 22px; }
.sfoot-line .sfoot-copy { opacity: .6; font-size: 13.5px; color: var(--paper,#fff); }
.sfoot-line .sfoot-copy-end { margin-left: auto; } /* menu links sit left; copyright + gear pushed right */
.sfoot-line .sfoot-sep { opacity: .3; color: var(--paper,#fff); }
.sfoot-line .sfoot-link { font-size: 13.5px; display: inline-flex; align-items: center; }
.sfoot-lic { display: inline-flex; margin-right: 5px; opacity: .8; }
.sfoot-lic svg { width: 14px; height: 14px; }
.sfoot-line .sfoot-socialwrap { margin-left: 6px; }
.sfoot-line .sfoot-proof { margin: 0; }
.sfoot-line .sfoot-gear { margin-left: auto; }
/* Footer = cardless: no background, text uses the theme ink (contrasts the page bg) */
#site-footer .sfoot-inner.sfoot-line { background: none !important; border: 0 !important; box-shadow: none !important; border-radius: 0; backdrop-filter: none; -webkit-backdrop-filter: none; padding: 22px 8px; }
#site-footer .sfoot-line .sfoot-copy, #site-footer .sfoot-line .sfoot-link, #site-footer .sfoot-line .sfoot-sep, #site-footer .sfoot-line .sfoot-proof span { color: var(--ink, #fff); }
#site-footer .sfoot-line .sfoot-link { opacity: .8; }
#site-footer .sfoot-line .sfoot-link:hover { opacity: 1; }
/* ── Phase 3 · Theme photo treatments — applied PER WIDGET (data-imgfilter /
   data-imgoverlay on each .w node) so a preset can override the theme default.
   Targets content photos only (hero/gallery/text-image/menu-thumb/image) — never
   logos, avatars, maps, icons. FILTERS = tonal grade (filter:). OVERLAYS = a layer
   on top (::after). Both are non-destructive; the photo file is never touched. */
.w :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { transition: filter .25s ease; }
.w[data-imgfilter="bw"]    :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: grayscale(1) contrast(1.04); }
.w[data-imgfilter="film"]  :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: sepia(.26) contrast(1.07) saturate(.9) brightness(1.01); }
.w[data-imgfilter="fade"]  :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: contrast(.9) saturate(.8) brightness(1.06); }
.w[data-imgfilter="warm"]  :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: sepia(.2) saturate(1.14) contrast(1.02); }
.w[data-imgfilter="cool"]  :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: saturate(1.06) hue-rotate(-8deg) brightness(1.02); }
.w[data-imgfilter="vivid"] :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: saturate(1.24) contrast(1.06); }
.w[data-imgfilter="grain"] :is(.ti-img, .ti-bg, .wg-shot, .gal-cell, .mn-thumb, .wim) { filter: contrast(1.05) saturate(1.02); }
/* film-grain veil over the whole canvas when the theme default filter is grain */
.wrap[data-imgfilter="grain"]::after { content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 60; opacity: .07; mix-blend-mode: overlay; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); background-size: 140px 140px; }
/* Overlays — a colour/gradient/pixel layer ON TOP of the photo (::after). */
.w[data-imgoverlay]:not([data-imgoverlay="none"]) :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim) { position: relative; isolation: isolate; }
.w[data-imgoverlay]:not([data-imgoverlay="none"]) :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; z-index: 1; }
.w[data-imgoverlay="scrim"]      :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { background: linear-gradient(to top, rgba(0,0,0,.52), rgba(0,0,0,0) 58%); }
.w[data-imgoverlay="dark"]       :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { background: rgba(0,0,0,.26); }
.w[data-imgoverlay="accent"]     :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { background: var(--accent, #FB5A2D); opacity: .22; mix-blend-mode: multiply; }
.w[data-imgoverlay="accentGrad"] :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { background: linear-gradient(145deg, color-mix(in srgb, var(--accent, #FB5A2D) 60%, transparent), transparent 68%); mix-blend-mode: multiply; }
.w[data-imgoverlay="duotone"]    :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { background: linear-gradient(150deg, var(--accent, #FB5A2D), #0a0a12); mix-blend-mode: color; opacity: .62; }
.w[data-imgoverlay="vignette"]   :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after { background: radial-gradient(120% 120% at 50% 38%, transparent 54%, rgba(0,0,0,.5)); }
/* Pixel dissolve — the photo breaks into a grid of squares toward the edges; the
   focal centre stays solid. The square "gaps" are the page colour (--pxc), so the
   photo appears to dissolve into the background. Pure mask — photo untouched. */
.w[data-imgoverlay="pixel"] :is(.ti-img, .ti-photo, .gal-cell, .wg-shot, .mn-thumb, .wim)::after {
  background-image: conic-gradient(var(--pxc, #101014) 0.75turn, transparent 0); background-size: 8px 8px;
  -webkit-mask-image: radial-gradient(132% 132% at 68% 58%, transparent 24%, #000 74%);
          mask-image: radial-gradient(132% 132% at 68% 58%, transparent 24%, #000 74%); }
/* The Image+text photo layer fills its card. Declared AFTER the treatments above and with
   enough specificity to beat them: they set `position: relative` on photo elements, which
   would drop this layer out of its absolute fill. */
.w[data-i] .wg-timaker.ti-over .ti-photo {
  position: absolute; inset: 0;
  /* corner-shape must be inherited alongside the radius: squircle themes set it on .card only,
     so a photo with the same radius but a plain round corner lets the card's fill leak past it. */
  border-radius: inherit; corner-shape: inherit;
  background-size: cover; background-position: center; background-repeat: no-repeat; }
/* ── Phase 4 · Adaptive Shop tile (image-forward showcase / themed list) ──────
   The tile opens the browse modal on click; add-to-cart lives in the modal. */
.sh-ov, .sh-sv, .sh-sh { padding: 0; gap: 0; }
.sh-media { position: relative; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--ink) 8%, transparent); }
.sh-body { padding: clamp(15px, 3cqw, 22px); display: flex; flex-direction: column; gap: 7px; height: 100%; box-sizing: border-box; min-width: 0; }
.sh-tt { font-size: clamp(19px, 3cqw, 28px); font-weight: 800; letter-spacing: -.02em; line-height: 1.05; margin: 0; color: var(--ink); }
.sh-ds { color: var(--ink-dim, rgba(255,255,255,.6)); font-size: 14px; line-height: 1.35; margin: 0; overflow: hidden; }
.sh-tag { color: var(--accent); font-weight: 650; font-size: 14px; }
.sh-body .sh-browse, .sh-body .sh-cartpill { margin-top: auto; }
/* tall (1×2): media top grows, text below */
.sh-sv { display: grid; grid-template-rows: 1fr auto; }
.sh-sv .sh-media { min-height: 0; }
/* wide: media left, text right */
.sh-sh { display: grid; grid-template-columns: 46% 1fr; }
.sh-sh .sh-media { height: 100%; }
/* overlay (square / large): media full-bleed, name+price over a scrim */
.sh-ov { position: relative; display: block; }
.sh-ov .sh-media { position: absolute; inset: 0; }
.sh-scrim { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,.72), rgba(0,0,0,0) 52%); z-index: 1; }
.sh-ovbody { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: clamp(15px, 3cqw, 22px); display: flex; flex-direction: column; gap: 4px; }
.sh-ov .sh-tt, .sh-onimg { color: #fff; }
/* carousel dots — clear of text: on the media (split) or at the TOP in overlay */
.sh-dots { position: absolute; display: flex; gap: 5px; z-index: 3; bottom: 12px; left: 14px; }
.sh-dots i { width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,.42); }
.sh-dots i.on { background: #fff; }
.sh-ov .sh-dots { top: 14px; bottom: auto; }
/* NO photos → themed list (menu-style, dotted leaders) in the inner-card surface. Shared by Shop + Menu. */
.sh-listtile { padding: clamp(15px, 3cqw, 24px); display: flex; flex-direction: column; gap: 14px; }
.sh-lthead { display: flex; flex-direction: column; gap: 2px; }
.mlist { display: flex; flex-direction: column; background: var(--in-bg); border: var(--in-border-w, 0) solid var(--in-border, transparent); border-radius: var(--in-radius, 18px); -webkit-backdrop-filter: blur(var(--in-blur, 0)); backdrop-filter: blur(var(--in-blur, 0)); padding: 4px clamp(14px, 2.4cqw, 20px); }
.mlist-row { display: flex; align-items: baseline; gap: 8px; padding: 12px 0; }
.mlist-row + .mlist-row { border-top: 1px solid color-mix(in srgb, var(--ink) 9%, transparent); }
.mlist-nm { font-weight: 650; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto; }
.mlist-lead { flex: 1 1 auto; min-width: 14px; align-self: center; border-bottom: 1.5px dotted color-mix(in srgb, var(--ink) 26%, transparent); }
.mlist-pr { color: var(--accent); font-weight: 750; white-space: nowrap; flex: 0 0 auto; }
.sh-listtile .sh-browse, .sh-listtile .sh-cartpill { margin-top: auto; width: 100%; justify-content: center; text-align: center; }
/* shop list tile: a small subdued label (not a header) so the LIST is the widget */
.sh-ltlabel { font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-dim, rgba(255,255,255,.55)); }
/* ── Phase 4 · Adaptive Reviews layouts ──────────────────────────────────────
   square = rating + one quote · wide = title/rating/CTA beside a quote ·
   tall/large = title+rating over stacked quotes. Cards keep the inner-card surface. */
.wg-reviews.rv-split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 0; padding: 0; align-items: stretch; }
.rv-left { padding: clamp(15px, 3cqw, 22px); display: flex; flex-direction: column; gap: 10px; justify-content: center; min-width: 0; }
.rv-left .rv-seebtn { align-self: flex-start; margin-top: 4px; }
.rv-right { padding: clamp(12px, 2.2cqw, 16px); display: flex; align-items: center; min-width: 0; }
.rv-right .rv-card { width: 100%; }
.wg-reviews.rv-tile, .wg-reviews.rv-stack { gap: 12px; }
.rv-topline { display: flex; flex-direction: column; gap: 8px; }
.rv-dots { position: static; margin-top: 2px; justify-content: center; }
.rv-seebtn { display: inline-flex; align-items: center; }
@media (max-width: 560px) { .wg-reviews.rv-split { grid-template-columns: 1fr; } .rv-right { display: none; } }
.wg-reviews.rv-stack { justify-content: flex-start; }

/* ======================= v23 · OPENING TIMES ==============================
   Three designs, twelve shapes. NOT ONE COLOUR IS SET HERE — every value below is a preset
   variable, which is the rule this widget is the first to be held to. The status dot included:
   the status dot included — it reads --status-open / --status-closed, a preset pair that defaults
   to green and red, so the semantic survives every theme while a theme can still make it legible
   on its own surface. */
/* A WIDGET NEVER EXCEEDS ITS TILE. A tile is a fixed rectangle in a grid, so a design that renders
   taller either spills over its neighbour or gets clipped, and both are wrong in a way that only
   shows on the one shape nobody opened. `scripts/check-fit.mjs` holds this across every widget,
   every shape and both polarities. */
.wg-hours.hr-v23 { display: flex; flex-direction: column; gap: var(--gap-row, 12px);
  height: 100%; min-height: 0; overflow: hidden;
  /* `size`, not `inline-size`: the rules below use cqh, which silently falls back to the
     viewport under inline-size — the same fault as the title sized off the wrong axis. */
  container-type: size; }
.hr-v23 .hr-st { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.hr-v23 .hr-st-top { display: flex; align-items: center; gap: 9px; }
/* Open/closed is the one thing a visitor reads without reading, so it keeps green and red — as a
   PRESET pair, not a hard-code. A theme can shift both to stay legible on its own surface; what it
   cannot do is collapse them into one colour, because the distinction is the information. */
.hr-v23 .hr-st-dot { width: 9px; height: 9px; flex: 0 0 auto; border-radius: 50%;
  background: var(--status-open); }
.hr-v23 .hr-st-dot.off { background: var(--status-closed); }
.hr-v23 .hr-st-label { font-family: var(--lb-font, var(--font)); font-weight: 700;
  font-size: clamp(13px, 1.6cqw, 15px); color: var(--ink); }
.hr-v23 .hr-st-sub { font-family: var(--ds-font, var(--font)); font-size: clamp(12px, 1.4cqw, 13.5px);
  color: var(--accent); }
/* the hours in display type. mono comes from the preset when it names one — a theme decision */
/* sized against the tile's HEIGHT as well as its width: at the shortest tier the tile is 94px and
   40px display type cannot fit inside it however wide the tile is */
.hr-v23 .hr-bigtime { font-family: var(--mono-font, var(--h1-font, var(--font)));
  font-weight: var(--h1-weight, 800); font-size: min(clamp(20px, 5.2cqw, 40px), 26cqh);
  line-height: 1.05; letter-spacing: -0.01em; color: var(--ink); font-variant-numeric: tabular-nums; }

/* GAP 2px, NOT 8. The reference puts 1px between a 185px row — half a percent — and 8px on a
   64px row is twelve. That is the "more gap than row" fault: rows in this widget nearly touch. */
.hr-v23 .hr-days { display: flex; flex-direction: column; gap: 2px; min-height: 0; }
.hr-v23 .hr-day { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 11px 14px; border-radius: min(var(--in-radius, 14px), 10px);
  background: var(--in-bg, color-mix(in srgb, var(--ink) 6%, transparent));
  border: var(--in-border-w, 0px) solid var(--in-border, transparent); }
/* the reference sets the day name in the same mono face as the time, not in the label face —
   a row reads as one line of a timetable rather than as a label with a value beside it */
.hr-v23 .hr-day-n { font-family: var(--mono-font, var(--ds-font, var(--font))); font-weight: 600;
  font-size: clamp(12px, 1.5cqw, 14px); color: var(--in-ink, var(--ink)); }
.hr-v23 .hr-day-t { font-family: var(--mono-font, var(--ds-font, var(--font)));
  font-size: clamp(12px, 1.5cqw, 14px); color: var(--in-ink-dim, var(--ink-dim));
  font-variant-numeric: tabular-nums; }
.hr-v23 .hr-day-t.shut { color: var(--ink-faint); }
/* today is the one row the accent claims */
.hr-v23 .hr-day.today { background: var(--accent); }
.hr-v23 .hr-day.today .hr-day-n, .hr-v23 .hr-day.today .hr-day-t { color: var(--on-accent); }

/* wide: status left, three days right. The days column takes the room it needs and the status
   block takes the rest, so a long "Opens Monday 09:00" never squeezes the rows. */
.hr-v23.hr-wide { flex-direction: row; align-items: center; gap: var(--gap-section, 20px); }
.hr-v23.hr-wide .hr-st { flex: 1 1 0; }
.hr-v23.hr-wide .hr-days { flex: 0 1 46%; }
/* tall: rows stack at their own height and the leftover space falls at the BOTTOM. They were
   `justify-content: space-between`, which spread seven rows down the full tile and gave a gap
   bigger than a row — the reference has them nearly touching. A row's height is the row's, not the
   tile's.

   ROW HEIGHT AGAINST THE PORTRAIT TIER. The reference puts seven rows at a pitch of 186 into a card
   of 1381–1520 reference px — so the week occupies 86–94% of the card, and each row is an eighth of
   it rather than a fixed pixel value. Stated as a share of the tile so it holds at whatever the
   portrait tier's height settles at, instead of being retuned every time that number moves. */
.hr-v23.hr-tall .hr-days { flex: 1 1 auto; min-height: 0; }
/* The ROWS grow, the gaps do not — which is the difference between this and the
   `justify-content: space-between` it replaced. That spread seven content-height rows down the
   tile and put the space between them; this grows each row to fill the tile and leaves the 2px
   between them alone, which is the reference: tall rows, hairline gaps. It also cannot overflow,
   because the rows divide the space that exists rather than asking for space that does not. */
.hr-v23.hr-tall .hr-day { flex: 1 1 0; min-height: 0; }
.hr-v23.hr-small { justify-content: center; }
@media (max-width: 700px) {
  .hr-v23.hr-wide { flex-direction: column; align-items: stretch; }
  .hr-v23.hr-wide .hr-days { flex: 0 0 auto; }
}

/* ======================= v23 · IMAGE + TEXT ===============================
   One arrangement at every shape — what shows is what the owner filled in. The only colour set
   here is the SCRIM, which is the widget's by decision: it keeps text legible over any photo,
   under any preset, and a preset that could make it illegible would break the widget rather than
   restyle it. Card surface, text and the button are all preset. */
/* padding:0 on the CARD, stated strongly enough to beat `.card`'s own — the button is the card's
   bottom edge, and a card that keeps its padding leaves a band of photo under the button. */
.wg-timaker.ti-v23, .w .card.wg-timaker.ti-v23 { position: relative; display: flex;
  flex-direction: column; justify-content: flex-end; overflow: hidden; padding: 0;
  height: 100%; min-height: 0; }
.ti-v23 .ti-overtext { position: relative; z-index: 2; padding: var(--pad, 18px);
  display: flex; flex-direction: column; gap: 4px; }
/* the scrim rides ON the text block, so it always covers the text however tall the block gets —
   a card-anchored gradient only fades in at the bottom and short cards push text out of it */
/* THE SCRIM IS ANCHORED TO THE CARD, not to the text block. Anchored to the block it ended at the
   block's lower edge — and with a button below it, that edge is mid-photo, which drew a hard
   horizontal line across the picture. It now runs to the bottom of the card and fades upward, so
   it has no edge anywhere a visitor can see. */
/* THE SCRIM STOPS WHERE THE BUTTON STARTS. It ran to the card's bottom edge and under the button,
   so the button read as part of the photograph rather than as a control sitting clear of it. The
   scrim exists to make TEXT legible; a button carries its own surface and needs no help. */
/* 40%, NOT 78%. The reference starts darkening 55% down the card and reaches the button at 91%,
   so the scrim covers about 36% of the height — a band behind the words. At 78% it began 15% down
   and dimmed most of the photograph, which is the opposite of the point: the scrim is there so the
   TEXT reads, not so the picture is quieter. */
.ti-v23.ti-over::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0;
  height: 40%; z-index: 1; pointer-events: none;
  background: linear-gradient(to top, rgba(0,0,0,.72), rgba(0,0,0,.34) 42%, rgba(0,0,0,0)); }
.ti-v23.ti-over.ti-hasbtn::after { bottom: calc(var(--pad, 18px) + 2.9em); }
.ti-v23.ti-over .ti-overtext { color: #fff; }
.ti-v23.ti-over .ti-overtext .wg-ttl, .ti-v23.ti-over .ti-overtext h2 { color: #fff; }
.ti-v23.ti-over .ti-overtext .wg-dsc, .ti-v23.ti-over .ti-overtext p { color: rgba(255,255,255,0.88); }
/* text-only: same position, on the preset's own surface, so it reads as the same widget */
.ti-v23.ti-textonly .ti-overtext { color: var(--ink); }
/* TYPE SIZED AGAINST THE TILE, measured by cap-height ratio against the reference: its title band
   is 10.90% of card width and its description 4.27%, against 6.46% and 2.58% here — both 1.68x too
   small, uniformly, which is what says it is one error and not two.
   Expressed as a share of the tile because that relationship is LAYOUT, which is the widget's;
   the face, the weight and the colour stay the preset's. Clamped so a 1200px-wide tile does not
   set a 180px headline. */
/* THE SHORTER SIDE, NOT THE WIDTH. Measured on both reference cards:

     tall 679x1519  title band 74px = 10.90% of width, 4.87% of height, 10.90% of the shorter side
     wide 1104x558  title band 57px =  5.16% of width, 10.22% of height, 10.22% of the shorter side

   Only the shorter side is constant. I derived 15.1cqw from the TALL card alone and applied it to
   all twelve shapes, so on a wide tile the title came out 62px inside a 353px-tall card — right on
   the one shape I measured and grossly oversized on the shape production actually shows. That is
   why the numbers said it matched: I measured the shape that did.

   `cqmin` is the shorter side, and it needs `container-type: size` rather than `inline-size` —
   which the same mistake makes silently: `cqh` and `cqmin` fall back to the viewport without it. */
.ti-v23 { container-type: size; }
.ti-v23 .ti-overtext .wg-ttl, .ti-v23 .ti-overtext h1,
.ti-v23 .ti-overtext h2, .ti-v23 .ti-overtext h3 {
  font-size: clamp(18px, 14.6cqmin, 64px); line-height: 1.04; margin: 0; }
.ti-v23 .ti-overtext .wg-dsc, .ti-v23 .ti-overtext p {
  font-size: clamp(11px, 5.9cqmin, 24px); line-height: 1.3; margin: 0; }
/* the old v21 maker rule put 64px of top padding on this block; the v23 one owns its own spacing */
.ti-v23 .ti-overtext { padding: 14px 16px !important; }
.ti-v23.ti-hasbtn .ti-overtext { padding-bottom: 10px !important; }
.ti-v23.ti-blank { min-height: 0; }

/* THE BUTTON IS THE CARD'S BOTTOM EDGE. Full width, flush, at every size — never inline in the
   text block, which is what made it look like a size decision in the reference. */
/* THE BUTTON TAKES THE THEME'S RADIUS. It was `border-radius: 0` — hard-coded, so square under
   every theme including the pill ones, which is the same fault as the status dot: a value written
   here that the preset should own. It reads `--btn-radius` now, the variable every other button in
   the product reads.
   A radius needs room to be seen, so the button is inset by the card's padding rather than bleeding
   to the edges. Still full width of the text column, still the last thing in the card. */
/* MEASURED against the reference, which puts a 120px button inside a 1519px card with a 20/19/19
   inset — 69px and 12px at this card's scale. It was 51 tall and inset 18, so the button was both
   too small and too far in from the edges it is supposed to sit against. */
.ti-v23 .ti-btn { position: relative; z-index: 3; display: flex; align-items: center;
  justify-content: center; width: auto; margin: 0 12px 12px;
  border-radius: var(--btn-radius, 12px);
  padding: 25px 18px; line-height: 1; text-decoration: none; }
.ti-v23.ti-hasbtn .ti-overtext { padding-bottom: 12px; }

/* ---- the shortest tier shows less, which is the design, not a truncation -----
   At h-xs a tile is 94px and the preset's own card padding is 52 of them. A widget shows less at
   its smallest and what gets dropped is a decision per widget (phase-1 brief): Opening times keeps
   the dot, the words and the hours, and drops the "opens tomorrow" line — the one part that is a
   detail rather than the answer. Image + text drops nothing; it simply has less room for type. */
.h-xs .hr-v23, .h-xs .ti-v23 { padding: 10px 14px; }
.h-xs .hr-v23 { gap: 2px; }
.h-xs .hr-v23 .hr-st-sub { display: none; }
.h-xs .hr-v23 .hr-bigtime { font-size: min(clamp(16px, 4cqw, 26px), 34cqh); line-height: 1; }
.h-xs .ti-v23 .ti-overtext { padding: 10px 14px; gap: 2px; }
/* wide at the shortest tier is a 94px BANNER: the status block lies along it rather than stacking,
   because three stacked lines cannot fit 94px however small the type gets. Same three parts, laid
   on the axis the tile actually has. */
.h-xs .hr-v23.hr-wide { flex-direction: row; align-items: center; gap: 14px; }
.h-xs .hr-v23.hr-wide .hr-st { flex-direction: row; align-items: center; gap: 12px; }
.h-xs .hr-v23.hr-wide .hr-days { display: none; }
/* and Image + text clamps its description to one line there, rather than growing the card */
.h-xs .ti-v23 .wg-dsc, .h-xs .ti-v23 .ti-overtext p {
  display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; margin: 0; }
/* the title is display type and scales with the tile's WIDTH, so at full width in a 94px tile it
   asked for more height than the tile has. Capped against the height as well, same as the hours. */
.h-xs .ti-v23 .ti-overtext .wg-ttl, .h-xs .ti-v23 .ti-overtext h2,
.h-xs .ti-v23 .ti-overtext h1 { font-size: min(1em, 30cqh); line-height: 1.15; margin: 0; }
.h-xs .ti-v23 .ti-btn { padding: 7px 12px; margin: 0 10px 10px; }

/* ================= OPENING TIMES — THE MODAL ==============================
   RESTORED. These rules were shared between the seven old tile designs and `exHours`, and I
   deleted them with the tile designs — so the modal's markup was untouched but its styling was
   gone. It read as a rewrite (a bare progress ring, "Now 20:53", a serif heading) because those
   parts had always been there and were suddenly unstyled, and "Monday09:00 – 17:00" is simply
   `.hr-day` losing its flex.

   Nothing here is new. It is what `exHours` rendered before this session, verbatim from git.
   The tile's own rules are all `.hr-v23`-scoped and outrank these, so the two do not meet.

   The lesson for the rest of phase 1: a widget's tile and its modal share CSS, so deleting a tile
   design is not a local act. Check what else reads a rule before removing it. */
.hr-st { display: flex; align-items: flex-start; gap: 9px; }
.hr-st.inline { align-items: center; flex-wrap: wrap; }
.hr-st-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; margin-top: 5px; }
.hr-st.inline .hr-st-dot { margin-top: 0; }
.hr-st-dot.off { background: #F0563C; box-shadow: 0 0 0 3px color-mix(in srgb, #F0563C 22%, transparent); }
.hr-st-dot.on { background: #34C759; box-shadow: 0 0 0 3px color-mix(in srgb, #34C759 22%, transparent); }
.hr-st-tx { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.hr-st-label { font-family: var(--h1-font, var(--font)); font-weight: var(--h1-weight, 700); font-style: var(--h1-style, normal); color: var(--h1-color, var(--ink)); font-size: 17px; line-height: 1.15; }
.hr-st-sub { font-family: var(--ds-font, var(--font)); color: var(--accent); font-size: 13.5px; }
.hr-st.inline .hr-st-sub { margin-left: 4px; }
.hr-days { flex: 1 1 auto; min-height: 0; }
.hr-days.col { display: flex; flex-direction: column; gap: 8px; }
.hr-days.col .hr-day { flex: 1 1 0; min-height: 0; }
.hr-days.grid2 { display: grid; grid-template-columns: 1fr 1fr; grid-auto-rows: 1fr; gap: 8px; }
.hr-days.grid2 .hr-day { min-width: 0; }
.hr-day { font-family: var(--ds-font, var(--font)); display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 18px; border-radius: var(--in-radius, 16px); background: var(--in-bg, color-mix(in srgb, var(--ink) 6%, transparent)); border: var(--in-border-w, 1px) solid var(--in-border, color-mix(in srgb, var(--ink) 10%, transparent)); }
.hr-day-n { font-family: var(--lb-font, var(--font)); font-weight: 600; color: var(--in-ink, var(--ink)); white-space: nowrap; }
.hr-day-t { font-family: var(--ds-font, var(--font)); color: var(--in-ink-dim, var(--ink-dim)); white-space: nowrap; }
.hr-day-t.shut { color: var(--in-ink-dim, var(--ink-faint)); }
.hr-day.today { background: var(--accent); border-color: var(--accent); }
.hr-day.today .hr-day-n { color: var(--on-accent, #fff); font-weight: 700; }
.hr-day.today .hr-day-t { color: var(--on-accent, #fff); font-weight: 700; }
.wg-hours.hr-list, .wg-hours.hr-grid, .wg-hours.hr-upcoming { gap: 14px; }
.hr-mini .hr-mini-top { display: flex; align-items: center; gap: 8px; }
.hr-mini .hr-bigtime { font-family: var(--h1-font, var(--font)); font-weight: 700; font-size: clamp(24px, 8cqw, 32px); color: var(--ink); line-height: 1.05; margin: 6px 0 4px; }
.hr-mini .hr-st-sub { color: var(--accent); font-size: 14px; }
.hr-rel { display: flex; flex-direction: column; }
.hr-rel-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--hair); }
.hr-rel-row:last-child { border-bottom: 0; }
.hr-rel-d { font-family: var(--lb-font, var(--font)); font-weight: 600; color: var(--lb-color, var(--ink)); }
.hr-rel-t { font-family: var(--ds-font, var(--font)); color: var(--ink-dim); white-space: nowrap; }
.hr-rel-t.shut { color: var(--ink-faint); }
.wg-hours.hr-banner .wg-body { flex-direction: row; align-items: center; justify-content: space-between; gap: 16px; }
.hr-banner-today { display: flex; flex-direction: column; align-items: flex-end; text-align: right; }
.hr-banner-lbl { font-family: var(--lb-font, var(--font)); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--lb-color, var(--ink-dim)); }
.hr-banner-time { font-family: var(--h1-font, var(--font)); font-weight: 700; font-size: clamp(24px, 4cqw, 40px); color: var(--ink); line-height: 1; white-space: nowrap; }
.wg-hours.hr-showcase { display: grid; grid-template-columns: minmax(170px, 260px) 1fr; gap: 28px; align-items: center; }
.hr-show-list { min-width: 0; align-self: stretch; display: flex; }
.hr-show-list .hr-days.col { flex: 1; }
.hr-modal .hr-days.col { gap: 11px; }
.hr-modal .hr-days.col .hr-day { flex: 0 0 auto; padding: 17px 22px; font-size: 16px; }

/* ═══ CONTENT REDESIGNED FOR WIDTH ═══
   A row list built for a 391px tile does not work at 1200 — it becomes a long thin ladder with a
   metre of empty gutter beside it. At this width the same data becomes columns, or gains room for
   the description it never had space for. This is not the tile restyled; it is a different
   arrangement of the same content, and it is why a section reads as a page rather than a card.

   ONE LAYOUT ONLY for now: eyebrow and title above, content full width beneath. */
#grid.bento.stacked .sec-content { --sec-cols: 3; }

/* Opening times — the week across two columns, so the day rows stop being a ladder. */
/* `columns` is ignored on a flex container, and these are flex — the first version of this rule
   changed nothing at all and the week stayed a ladder. Grid says the same thing and survives. */
#grid.bento.stacked .sec-content .hr-days,
#grid.bento.stacked .sec-content .wk-list {
  display: grid; grid-template-columns: 1fr 1fr; column-gap: 48px; row-gap: 2px; }
#grid.bento.stacked .sec-content .hr-day,
#grid.bento.stacked .sec-content .wk-row { break-inside: avoid; }
/* the status stops being a small corner note and becomes the section's opening statement */
#grid.bento.stacked .sec-content .hr-bigtime { font-size: clamp(28px, 3.4vw, 44px); }

/* FAQ — two columns of questions. An accordion 1200 wide is one question and a lot of nothing. */
#grid.bento.stacked .sec-content .faq-list {
  display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-content: start; }
#grid.bento.stacked .sec-content .faq-item, #grid.bento.stacked .sec-content .faq-row { break-inside: avoid; }

/* Shop and Menu — rows become a card grid, which is the arrangement the data always wanted:
   at this width there is finally room for the description and the price on the same line. */
#grid.bento.stacked .sec-content .sh-grid,
#grid.bento.stacked .sec-content .mlist,
#grid.bento.stacked .sec-content .mn-list,
#grid.bento.stacked .sec-content .menu-list {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 20px; }
#grid.bento.stacked .sec-content .mn-item, #grid.bento.stacked .sec-content .menu-item {
  display: flex; flex-direction: column; gap: 6px; padding: 18px 0; border-top: 1px solid var(--card-border, rgba(128,128,128,.22)); }

/* Reviews — three across, the shape they are actually written for. */
#grid.bento.stacked .sec-content .rv-list, #grid.bento.stacked .sec-content .rev-list {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; }
#grid.bento.stacked .sec-content .rv-item, #grid.bento.stacked .sec-content .rev-item { break-inside: avoid; }

/* Gallery — a real grid, not one hero with a count badge on it. */
#grid.bento.stacked .sec-content .gal-grid, #grid.bento.stacked .sec-content .wg-shots {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; }
#grid.bento.stacked .sec-content .gal-cell, #grid.bento.stacked .sec-content .wg-shot {
  width: auto; aspect-ratio: 4 / 3; }

/* Booking — services across, so choosing one is a glance instead of a scroll. */
#grid.bento.stacked .sec-content .bk-list {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 18px; }

/* Subscribe — the field and the button sit on one line with room to breathe. */
#grid.bento.stacked .sec-content .sub-form { max-width: 620px; }

/* Map — a band, not a strip. */
#grid.bento.stacked .sec-content .wg-map { min-height: 460px; }

/* SHOW LESS RATHER THAN SHRINK holds at width too: more columns, never smaller type. */
@media (max-width: 900px) {
  #grid.bento.stacked .sec-content .hr-days, #grid.bento.stacked .sec-content .wk-list,
  #grid.bento.stacked .sec-content .faq-list { grid-template-columns: 1fr; }
}

/* Section tools sit on the section, because the section is the card. */
#grid.bento.stacked .sec-band > .w-tools.sec-tools { position: absolute; top: 12px; right: 12px; z-index: 3; }
