/* ShareBear "Notes" design system. Paper, butter, ink, handwritten margin notes and crayon marks.
   Mobile first, plain CSS, no frameworks. Fonts (Gabarito, Shantell Sans) are loaded by <link> in ui/layout.tsx.
   Images live in server/public/img and are served at /static/img/ (use the <Img> kit component).

   CLASS CONTRACT (src/pages/*.tsx and src/ui/kit.tsx). Kit components render these; you can also write them by hand.

   Shells (set on <body> by Page):  shell-phone  shell-site  shell-venue  shell-admin  shell-wizard  (+ `wide` on all but phone)
     .phone-col        centred 440px column (phone shell)       .staff-bar     slim staff header
     .site-wrap .site-head .site-main .site-foot                marketing shell: sticky header (.site-links .site-acts .site-menu), 1180px content, footer
     .app .side .side-ink .app-main                             sidebar shells (venue = paper side, admin = ink side)
     .side-brand .loc-switch .side-nav .side-foot .nav-item[aria-current] .nav-ico   sidebar parts
     .admin-strip      thin ink "you are in platform admin" bar
     .wiz-top .wiz-main                                          wizard top bar / centred content
   Surfaces:   .card (paper + texture)   .stack-cards (+ .peek)   .section (card with heading)   .hero   .panel-butter
   Layout:     .stack (vertical gap)  .row (flex wrap)  .spacer  .center  .muted  .small  .mono  .eyebrow  .page-head
               .grid-2 .grid-3 (responsive grids)  .divider (dashed rule)  .list-rows (dashed rows)  .no-print
   Buttons:    .btn (secondary)  .btn-primary (ink)  .btn-big (64px staff)  .btn-block (full width)  .btn-sm  .btn-danger
               .btn-butter  .btn-link  .wallet-btn   (+ .ico-arrow inside a button)
   Forms:      .field (label, input, select, textarea, .hint, .field-error)  .check  .toggle-chip  .tabs / .tab[aria-current]
   Notices:    .notice  .notice-ok  .notice-err  .notice-warn  .fail (staff error panel)  .done (legacy green panel)
   Chips:      .chip .chip-<pending|customer|live|draft|expired|void|cancelled|suspended|paused|active|archived|ok|err>
               (.badge / .badge-<state> are the same thing, kept for old pages)
   Numbers:    .stats (grid)  .stat (dashed row)  .stat-big (butter tile)  .num  .lbl
   Data:       .table-wrap .table (td.num right aligned)  .feed  .bars .bar (chart)  .avatar .avatar-1/2/3
   Hand-drawn: .note (+ .note-wrap .note-flip .arrow-curve/.arrow-loop/.arrow-down)  .circled  .underlined  .steps (.step-done/-current/-todo)
   Screens:    .empty  .err-screen  .err-hero  .serve (green panel)  .pass (Wallet pass replica)
   Motion:     @keyframes land | nudge | pulse | stamp, all disabled under prefers-reduced-motion. Classes: .land .pulse-dot */

:root {
  --cream: #fff6d6;
  --paper: #fffdf6;
  --butter: #ffe48a;
  --butter-soft: #fff0b8;
  --sun: #ffc928;
  --honey: #f2a93b;
  --ink: #2a2416;
  --ink-soft: #6b5b3e;
  --note: #5a3e00;
  --rule: #e8d9a8;
  --rust: #8a3a1e;
  --rust-tint: #f6dccb;
  --go: #256b42;
  --go-tint: #ddebdd;
  --dim: #efe5c8;
  --dim-ink: #7a6b4c;
  --sheet: #f3ead0;
  --r-xl: 30px;
  --r-lg: 24px;
  --r-md: 16px;
  --r-sm: 14px;
  --shadow: 0 1px 0 rgba(42, 36, 22, 0.06), 0 12px 28px rgba(42, 36, 22, 0.1);
  --shadow-sm: 0 1px 0 rgba(42, 36, 22, 0.06), 0 8px 18px rgba(42, 36, 22, 0.08);
  --shadow-btn: 0 1px 0 rgba(42, 36, 22, 0.06), 0 10px 20px rgba(42, 36, 22, 0.18);
  --font: "Gabarito", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --hand: "Shantell Sans", "Gabarito", cursive;
  --ease-land: cubic-bezier(0.2, 0.8, 0.25, 1);
  /* legacy aliases, still used by inline page CSS */
  --yellow: var(--sun);
  --yellow-soft: var(--butter-soft);
  --ink-2: var(--ink-soft);
  --muted: var(--ink-soft);
  --line: var(--rule);
  --bg: var(--cream);
  --card: var(--paper);
  --ok: var(--go);
  --err: var(--rust);
  color-scheme: light;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
html, body { margin: 0; }
body {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh;
  font: 500 16px/1.45 var(--font);
  color: var(--ink);
  background: var(--cream);
  -webkit-font-smoothing: antialiased;
}
/* Paper texture on the ground. A fixed pseudo-element, because iOS ignores background-attachment: fixed. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: url("/static/img/paper.jpg") center / cover;
}
a { color: var(--ink); text-underline-offset: 3px; }
a:hover { color: #000; }
h1, h2, h3, h4 { margin: 0 0 8px; line-height: 1.15; font-weight: 800; letter-spacing: -0.01em; }
h1 { font-size: 30px; line-height: 1.1; }
h2 { font-size: 22px; margin-top: 24px; }
h3 { font-size: 17px; }
p { margin: 0 0 12px; }
img, svg { max-width: 100%; }
img { height: auto; }
button, input, select, textarea { font: inherit; color: inherit; }
::placeholder { color: #8a7a58; opacity: 1; }
:focus-visible { outline: 3px solid var(--ink); outline-offset: 2px; }
.side-ink :focus-visible, .admin-strip :focus-visible { outline-color: var(--sun); }
::selection { background: var(--butter); }

/* ---------- utilities ---------- */
.muted { color: var(--ink-soft); }
.small { font-size: 14px; }
.center { text-align: center; }
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em; word-break: break-all; }
.stack > * + * { margin-top: 12px; }
.row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.spacer { flex: 1; }
.eyebrow { font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); }
.divider { border: 0; border-top: 1.5px dashed var(--rule); margin: 16px 0; }
.grid-2, .grid-3 { display: grid; gap: 20px; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 720px) { .grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.list-rows { list-style: none; margin: 0; padding: 0; }
.list-rows > li { display: flex; align-items: center; gap: 14px; min-height: 54px; border-top: 1.5px dashed var(--rule); font-weight: 600; }
.list-rows > li:first-child { border-top: 0; }

/* ---------- brand mark ---------- */
.brand { display: inline-flex; align-items: center; gap: 10px; min-height: 44px; font-size: 20px; font-weight: 800; text-decoration: none; color: inherit; }
.brand-mark { flex: none; display: inline-flex; width: 40px; }
.brand-mark img { display: block; width: 100%; height: auto; filter: drop-shadow(0 2px 3px rgba(42,36,22,.18)); }

/* ---------- shells ---------- */
/* phone: customer, public and staff pages */
.phone-col { position: relative; z-index: 1; width: 100%; max-width: 440px; margin: 0 auto; padding: 24px 24px 32px; min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; }
.phone-col > main { flex: 1 0 auto; display: flex; flex-direction: column; }
.phone-col > main > * { flex: none; }
.phone-col > main > .grow { flex: 1 0 auto; }
.phone-col .push-bottom { margin-top: auto; }
.footer { margin-top: 28px; display: flex; flex-direction: column; gap: 2px; font-size: 14px; color: var(--ink-soft); text-align: center; }
.footer strong { color: var(--ink); font-weight: 800; }
.footer a { color: var(--ink-soft); }
.staff-bar { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap; margin-bottom: 16px; }
.staff-bar .brand { font-size: 17px; }
.staff-bar .brand-mark { width: 32px; }
.staff-bar .who { font-size: 14px; font-weight: 700; color: var(--ink-soft); }
.staff-bar .btn-link, .staff-bar a.small { font-size: 14px; }

/* marketing site: sticky header, page container and footer of the site shell (SiteShell in ui/layout.tsx).
   Header and footer are full width; .site-head-in / .site-main / .site-foot-in are the same 1180px container. */
.site-wrap { --site-gutter: clamp(16px, 5vw, 24px); --site-pl: max(var(--site-gutter), env(safe-area-inset-left, 0px)); --site-pr: max(var(--site-gutter), env(safe-area-inset-right, 0px)); --site-head-h: 68px; position: relative; z-index: 1; display: flex; flex-direction: column; min-height: 100vh; min-height: 100dvh; }
html:has(.site-wrap) { scroll-padding-top: 84px; }
.site-skip { position: absolute; z-index: 200; left: max(var(--site-pl), calc((100% - 1180px) / 2 + var(--site-pl))); top: 10px; padding: 12px 18px; border-radius: var(--r-sm); background: var(--ink); color: var(--cream); font-size: 15px; font-weight: 700; text-decoration: none; transform: translateY(-250%); }
.site-skip:hover { color: var(--cream); }
.site-skip:focus { transform: none; }
.site-main:focus { outline: none; }
.site-head { position: sticky; top: 0; z-index: 100; padding-top: env(safe-area-inset-top, 0px); background: var(--cream); background: color-mix(in srgb, var(--cream) 94%, transparent); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); border-bottom: 1.5px dashed var(--rule); }
.site-head-in, .site-foot-in { width: 100%; max-width: 1180px; margin: 0 auto; padding-left: var(--site-pl); padding-right: var(--site-pr); }
.site-head-in { position: relative; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 16px; min-height: var(--site-head-h); }
.site-head .brand { justify-self: start; border-radius: 14px; }
.site-links, .site-acts { display: flex; align-items: center; gap: 4px; }
.site-acts { justify-self: end; gap: 6px; }
.site-links a, .site-acts > a:not(.btn) { display: flex; align-items: center; height: 44px; padding: 0 14px; border-radius: 14px; font-size: 15px; font-weight: 700; text-decoration: none; white-space: nowrap; }
.site-links a:hover, .site-acts > a:not(.btn):hover { background: var(--butter-soft); }
.site-head .site-acts .btn-primary { min-height: 44px; padding: 0 18px; font-size: 15px; border-radius: var(--r-sm); white-space: nowrap; }
/* menu button + paper panel (details/summary, no JS needed); shown under 960px for the centre links, under 600px for Your cards + Log in too */
.site-menu { display: none; }
.site-menu summary { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border: 1.5px solid var(--rule); border-radius: 14px; background: var(--paper); cursor: pointer; list-style: none; }
.site-menu summary::-webkit-details-marker { display: none; }
.site-menu summary:hover { border-color: var(--ink-soft); }
.site-menu .ico-close, .site-menu[open] .ico-open { display: none; }
.site-menu[open] .ico-close { display: inline; }
.site-menu[open] summary { background: var(--butter); border-color: var(--ink); }
.site-menu-panel { position: absolute; z-index: 60; top: calc(100% + 8px); left: var(--site-pl); right: var(--site-pr); isolation: isolate; display: flex; flex-direction: column; padding: 6px 20px; background: var(--paper); border-radius: var(--r-lg); box-shadow: var(--shadow); }
.site-menu-panel::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; background: url("/static/img/paper.jpg") center / cover; mix-blend-mode: multiply; opacity: 0.4; pointer-events: none; }
.site-menu-panel a { display: flex; align-items: center; min-height: 52px; border-top: 1.5px dashed var(--rule); font-size: 17px; font-weight: 700; text-decoration: none; }
.site-menu-panel a:first-child { border-top: 0; }
.site-menu-panel a:hover { text-decoration: underline; }
@media (max-width: 959.98px) {
  .site-head-in { grid-template-columns: 1fr auto; gap: 12px; }
  .site-links { display: none; }
  .site-menu { display: block; }
  .site-menu-panel .site-m-small { display: none; }
}
@media (max-width: 599.98px) {
  .site-acts > a:not(.btn) { display: none; }
  .site-menu-panel .site-m-small { display: flex; }
}
@media (max-width: 380px) {
  .site-head-in { gap: 8px; }
  .site-head .brand { gap: 8px; font-size: 17px; }
  .site-head .brand-mark { width: 32px; }
  .site-head .site-acts { gap: 6px; }
  .site-head .site-acts .btn-primary { padding: 0 12px; font-size: 14px; }
}
.site-main { position: relative; flex: 1 0 auto; width: 100%; max-width: 1180px; min-width: 0; margin: 0 auto; padding: 24px var(--site-pr) 40px var(--site-pl); }
/* sign-up / log-in: a plain brand row (not sticky, no band, so the bear art can rise over it); the "other page" button sits in that row */
.site-wrap:has(.ac) .site-head { position: relative; z-index: auto; background: none; border-bottom-color: transparent; -webkit-backdrop-filter: none; backdrop-filter: none; }
@media (min-width: 700px) { .site-wrap:has(.ac) .ac-switch { top: calc((var(--site-head-h) + 44px) / -2); } }
.site-foot { margin-top: auto; border-top: 1.5px dashed var(--rule); }
.site-foot-in { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 32px; padding-top: 24px; padding-bottom: calc(32px + env(safe-area-inset-bottom, 0px)); }
.site-foot .brand { font-size: 18px; border-radius: 14px; }
.site-foot .brand-mark { width: 34px; }
.site-foot .foot-links { display: flex; flex-wrap: wrap; gap: 0 22px; }
.site-foot .foot-links a { display: flex; align-items: center; min-height: 44px; font-size: 15px; font-weight: 600; text-decoration: none; }
.site-foot .foot-links a:hover { text-decoration: underline; }

/* sidebar shells */
.app { position: relative; z-index: 1; max-width: 1400px; margin: 0 auto; display: flex; flex-wrap: wrap; align-items: flex-start; gap: 24px; padding: 20px; }
.side { flex: 1 1 240px; background: var(--paper); border-radius: 28px; box-shadow: var(--shadow); padding: 20px 14px; display: flex; flex-direction: column; gap: 18px; }
.side-ink { background: var(--ink); color: var(--cream); box-shadow: 0 1px 0 rgba(42,36,22,.06), 0 12px 28px rgba(42,36,22,.22); }
.side-ink a { color: var(--cream); }
.side-brand { display: flex; align-items: center; gap: 10px; padding: 0 6px; }
.side-brand .brand { min-height: 36px; }
.app-main { flex: 999 1 560px; min-width: 0; display: flex; flex-direction: column; gap: 24px; padding: 8px 8px 48px; }
.app-main > .card + .card, .app-main > .section + .section { margin-top: 0; }
@media (min-width: 900px) { .side { flex: 0 0 260px; position: sticky; top: 20px; } .side-ink { flex-basis: 260px; } }
.loc-switch { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 56px; padding: 8px 10px; background: var(--cream); border: 1.5px solid var(--rule); border-radius: 16px; color: var(--ink); text-decoration: none; text-align: left; }
.loc-switch:hover { background: var(--butter-soft); }
.loc-switch .loc-ini { flex: none; width: 40px; height: 40px; border-radius: 12px; background: var(--sun); display: flex; align-items: center; justify-content: center; font-size: 15px; font-weight: 800; }
.loc-switch .loc-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.loc-switch .loc-name { font-size: 15px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.loc-switch .loc-sub { font-size: 13px; color: var(--ink-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.loc-switch svg { flex: none; }
.side-nav { display: flex; flex-direction: column; gap: 4px; }
.nav-item { display: flex; align-items: center; gap: 12px; min-height: 44px; padding: 0 12px; border-radius: 14px; font-size: 15px; font-weight: 600; text-decoration: none; color: inherit; transition: background 0.12s ease; }
.nav-item:hover { background: var(--cream); }
.nav-item[aria-current] { background: var(--butter); font-weight: 700; }
.nav-ico { width: 26px; height: 26px; object-fit: contain; flex: none; }
.side-foot { border-top: 1.5px dashed var(--rule); padding-top: 16px; display: flex; flex-direction: column; gap: 6px; }
.side-foot .nav-item { font-size: 14px; min-height: 40px; }
.side-foot .who { padding: 4px 12px 8px; font-size: 13px; color: var(--ink-soft); }
.side-foot form { margin: 0; }
.side-foot .btn { width: 100%; }
/* admin ink variant */
.side-ink .nav-item:hover { background: rgba(255, 246, 214, 0.12); }
.side-ink .nav-item[aria-current] { background: var(--sun); color: var(--ink); }
.side-ink .nav-ico-chip { width: 30px; height: 30px; border-radius: 10px; background: var(--cream); display: flex; align-items: center; justify-content: center; flex: none; }
.side-ink .nav-ico-chip img { width: 22px; height: 22px; object-fit: contain; }
.side-ink .side-foot { border-top-color: rgba(255, 246, 214, 0.3); }
.side-ink .side-foot .who { color: #e3d6ae; }
.side-ink .btn { color: var(--cream); border-color: rgba(255, 246, 214, 0.45); }
.admin-badge { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1.5px dashed rgba(255, 201, 40, 0.6); border-radius: 16px; }
.admin-badge .chip-ico { width: 36px; height: 36px; border-radius: 12px; background: var(--cream); display: flex; align-items: center; justify-content: center; flex: none; }
.admin-badge b { display: block; font-size: 15px; font-weight: 800; color: var(--sun); line-height: 18px; }
.admin-badge span { display: block; font-size: 12.5px; color: #e3d6ae; line-height: 16px; }
.admin-strip { position: relative; z-index: 1; background: var(--ink); color: var(--cream); padding: 10px 20px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; font-size: 14px; font-weight: 600; line-height: 20px; }
.admin-strip i { width: 10px; height: 10px; border-radius: 50%; background: var(--sun); flex: none; }
/* wizard */
.wiz-wrap { position: relative; z-index: 1; max-width: 1180px; margin: 0 auto; padding: 20px 24px 56px; display: flex; flex-direction: column; gap: 22px; }
.wiz-top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; }
.wiz-top .btn { height: 44px; padding: 0 20px; font-size: 15px; }
.wiz-main { min-width: 0; display: flex; flex-direction: column; gap: 22px; }

/* page header used at the top of dashboard pages (kit PageHeader) */
.page-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 16px; }
.page-head h1 { margin: 4px 0 0; font-size: 34px; line-height: 1.1; }
.page-head .actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.main { min-width: 0; }

/* ---------- surfaces ---------- */
.card { position: relative; isolation: isolate; background: var(--paper); border-radius: var(--r-xl); box-shadow: var(--shadow); padding: 20px; }
.card::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; background: url("/static/img/paper.jpg") center / cover; mix-blend-mode: multiply; opacity: 0.4; pointer-events: none; }
.card + .card { margin-top: 16px; }
.card > :first-child { margin-top: 0; }
.card > :last-child { margin-bottom: 0; }
.wide .card, .section { border-radius: var(--r-lg); }
.wide .card { padding: 24px; }
.section { position: relative; isolation: isolate; background: var(--paper); box-shadow: var(--shadow); padding: 24px; }
.section::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; background: url("/static/img/paper.jpg") center / cover; mix-blend-mode: multiply; opacity: 0.4; pointer-events: none; }
.section-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; margin-bottom: 12px; }
.section-head h2 { margin: 0; font-size: 22px; }
.hero { background: var(--butter); border-radius: var(--r-lg); box-shadow: var(--shadow-sm); padding: 20px 24px; }
.hero > :first-child { margin-top: 0; }
.hero h1 { font-size: 32px; }
.panel-butter { background: var(--butter); border-radius: var(--r-lg); box-shadow: var(--shadow-sm); padding: 20px 24px; display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; }
.land { animation: land 0.52s var(--ease-land) both; }
/* card stack: two sheets peek out behind the top card */
.stack-cards { position: relative; margin-bottom: 20px; animation: land 0.52s var(--ease-land) both; }
.stack-cards > .peek { position: absolute; border-radius: var(--r-xl); box-shadow: var(--shadow-sm); }
.wide .stack-cards > .peek { border-radius: var(--r-lg); }
.stack-cards > .peek-1 { left: 9px; right: 9px; top: 10px; bottom: -10px; background: var(--butter); transform: rotate(-1.5deg); }
.stack-cards > .peek-2 { left: 18px; right: 18px; top: 18px; bottom: -18px; background: var(--sun); transform: rotate(1deg); }
.stack-cards > .card { position: relative; z-index: 1; margin-top: 0; }
.stack-cards.peeks-1 { margin-bottom: 12px; }
.stack-cards.peeks-0 { margin-bottom: 0; }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  min-height: 44px; padding: 0 18px; border-radius: var(--r-md);
  border: 1.5px solid var(--rule); background: transparent; color: var(--ink);
  font-family: var(--font); font-size: 16px; font-weight: 700; line-height: 1.1; text-decoration: none; text-align: center;
  cursor: pointer; transition: transform 0.12s ease;
}
.btn:hover { color: var(--ink); border-color: var(--ink-soft); }
.btn:active { transform: scale(0.98); }
.btn-primary { min-height: 56px; padding: 0 24px; border: 0; background: var(--ink); color: var(--cream); font-size: 17px; box-shadow: var(--shadow-btn); }
.btn-primary:hover { color: var(--cream); background: #000; }
.wide .btn-primary { min-height: 48px; font-size: 16px; }
.btn-big { width: 100%; min-height: 64px; font-size: 20px; border-radius: var(--r-md); }
.btn-block { width: 100%; }
.btn-sm { min-height: 44px; padding: 0 16px; font-size: 15px; border-radius: var(--r-sm); }
.btn-danger { border: 0; background: var(--rust); color: var(--cream); }
.btn-danger:hover { background: #6f2d16; color: var(--cream); }
.btn-butter, .btn-yellow { border: 0; background: var(--butter); color: var(--ink); box-shadow: 0 2px 0 #e0be55; }
.btn-yellow { background: var(--sun); }
.btn:disabled, .btn[aria-disabled="true"] { background: var(--dim); color: var(--dim-ink); border-color: transparent; box-shadow: none; cursor: not-allowed; transform: none; }
.btn-link { display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px; background: none; border: 0; color: var(--ink); font: inherit; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.ico-arrow { flex: none; stroke: currentColor; }
.btn-primary .ico-arrow { stroke: var(--sun); }
/* "Add to Apple Wallet": Apple's black badge */
.wallet-btn { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%; min-height: 56px; padding: 0 20px; border-radius: var(--r-md); background: #000; color: #fff; font-size: 17px; font-weight: 600; text-decoration: none; box-shadow: var(--shadow-btn); }
.wallet-btn:hover { color: #fff; }
.wallet-btn svg { width: 26px; height: 26px; }
.back-btn { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 14px; background: var(--paper); box-shadow: 0 1px 0 rgba(42,36,22,.06), 0 6px 14px rgba(42,36,22,.1); color: var(--ink); }

/* ---------- forms ---------- */
.field + .field, .field + .stack, .stack + .field { margin-top: 18px; }
.field label, label.lab { display: block; margin-bottom: 6px; font-size: 14px; font-weight: 700; line-height: 18px; }
.field input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):not([type="hidden"]):not([type="submit"]):not([type="button"]),
.field select, .field textarea,
input[type="text"], input[type="email"], input[type="tel"], input[type="url"], input[type="number"], input[type="search"], input[type="password"], input[type="date"], select, textarea {
  display: block; width: 100%; min-height: 52px; padding: 0 16px; border: 1.5px solid var(--rule); border-radius: var(--r-sm);
  background: #fff; color: var(--ink); font: 600 16px/1.3 var(--font);
}
.wide .field input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):not([type="hidden"]):not([type="submit"]):not([type="button"]),
.wide .field select { min-height: 48px; }
textarea, .field textarea { min-height: 92px; padding: 12px 16px; font-weight: 500; line-height: 1.4; resize: vertical; }
select { appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%232A2416' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; padding-right: 40px; }
input:focus, select:focus, textarea:focus { outline: 3px solid var(--ink); outline-offset: 1px; border-color: var(--ink); }
input[type="checkbox"], input[type="radio"] { accent-color: var(--ink); width: 20px; height: 20px; flex: none; }
input[type="color"] { width: 52px; height: 44px; padding: 2px; border: 1.5px solid var(--rule); border-radius: 12px; background: #fff; }
input[type="file"] { font: inherit; max-width: 100%; }
.field .hint { margin-top: 6px; font-size: 13px; font-weight: 500; color: var(--ink-soft); }
.field .field-error { margin-top: 6px; font-size: 14px; font-weight: 700; color: var(--rust); }
.field-err input, .field-err select, .field-err textarea { border-color: var(--rust); }
.check { display: flex; gap: 10px; align-items: center; min-height: 44px; font-weight: 600; }
.check label { margin: 0; font-weight: 600; }
/* toggle chips: CSS only, wrap a checkbox (or radio) in label.toggle-chip */
.toggle-chip { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: 44px; padding: 0 20px; border: 1.5px solid var(--rule); border-radius: 999px; background: transparent; font-size: 15px; font-weight: 700; cursor: pointer; margin: 0; }
.toggle-chip input { position: absolute; opacity: 0; inset: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.toggle-chip svg { display: none; }
.toggle-chip:has(input:checked) { border-color: var(--ink); background: var(--butter); padding: 0 18px 0 14px; }
.toggle-chip:has(input:checked) svg { display: block; }
.toggle-chip:has(input:focus-visible) { outline: 3px solid var(--ink); outline-offset: 2px; }
/* tabs / filter chips: a.tab[aria-current] */
.tabs { display: flex; flex-wrap: wrap; gap: 8px; }
.tab { display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; border-radius: 999px; border: 1.5px solid var(--rule); font-size: 15px; font-weight: 700; text-decoration: none; background: transparent; color: var(--ink); cursor: pointer; }
.tab:hover { border-color: var(--ink-soft); }
.tab[aria-current], .tab[aria-pressed="true"] { background: var(--ink); border-color: var(--ink); color: var(--cream); }

/* ---------- notices ---------- */
.notice { padding: 12px 16px; border-radius: var(--r-sm); background: var(--butter-soft); color: var(--ink); font-size: 15px; font-weight: 600; line-height: 1.4; }
.notice > :last-child { margin-bottom: 0; }
.notice-ok { background: var(--go-tint); color: var(--go); }
.notice-err { background: var(--rust-tint); color: var(--rust); font-weight: 700; }
.notice-warn { background: var(--butter); color: var(--ink); }
.notice a { color: inherit; }
.fail { text-align: center; padding: 20px 18px; border-radius: var(--r-xl); background: var(--rust-tint); color: var(--rust); box-shadow: var(--shadow-sm); }
.fail h1, .fail h2 { color: var(--rust); }
.done { text-align: center; padding: 28px 20px; border-radius: var(--r-xl); background: var(--go); color: var(--cream); box-shadow: var(--shadow); }
.done .tick { font-size: 56px; line-height: 1; }
.done h1 { font-size: 32px; color: var(--cream); }

/* ---------- chips (state badges) ---------- */
.chip, .badge { display: inline-flex; align-items: center; gap: 6px; padding: 3px 11px; border-radius: 999px; font-size: 13px; font-weight: 700; line-height: 18px; white-space: nowrap; background: var(--butter); color: var(--ink); vertical-align: middle; }
.badge { text-transform: capitalize; }
.chip-pending, .badge-pending, .chip-paused, .badge-paused { background: var(--butter); color: var(--ink); }
.chip-customer, .badge-customer { background: var(--sun); color: var(--ink); }
.chip-live, .badge-live, .chip-active, .badge-active { background: var(--ink); color: var(--cream); }
.chip-draft, .badge-draft { background: var(--sheet); color: var(--ink-soft); border: 1.5px dashed var(--ink-soft); padding: 1.5px 9.5px; }
.chip-expired, .badge-expired, .chip-archived, .badge-archived { background: var(--dim); color: var(--ink-soft); }
.chip-void, .badge-void, .chip-cancelled, .badge-cancelled, .chip-suspended, .badge-suspended, .chip-revoked, .badge-revoked, .chip-err { background: var(--rust-tint); color: var(--rust); }
.chip-ok { background: var(--go-tint); color: var(--go); }
.chip-tilt { transform: rotate(-3deg); }
.pulse-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: currentColor; animation: pulse 1.6s ease-in-out infinite; }

/* ---------- numbers, tables, lists, charts ---------- */
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr)); gap: 0 24px; }
.stat { border-top: 1.5px dashed var(--rule); padding: 12px 0 14px; min-width: 0; }
.stat .num { font-size: 38px; font-weight: 800; line-height: 1.05; font-variant-numeric: tabular-nums; }
.stat .lbl, .lbl { font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-soft); }
.stat-big { background: var(--butter); border: 0; border-radius: 20px; padding: 20px 22px; display: flex; flex-direction: column; justify-content: space-between; gap: 18px; box-shadow: var(--shadow-sm); }
.stat-big .num { font-size: 72px; line-height: 0.95; }
.stat-big .lbl { letter-spacing: 0.08em; color: var(--ink); }
.stat-big .hint { font-size: 14px; font-weight: 600; }
.num { font-weight: 800; font-variant-numeric: tabular-nums; }

.table-wrap { overflow-x: auto; background: var(--paper); border-radius: var(--r-lg); box-shadow: var(--shadow); padding: 8px 20px; }
.card .table-wrap, .section .table-wrap, .table-wrap.bare { background: none; box-shadow: none; padding: 0; border-radius: 0; }
table.table { width: 100%; border-collapse: collapse; font-size: 15px; text-align: left; }
.table th { padding: 10px 8px; font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); text-align: left; white-space: nowrap; }
.table td { height: 56px; padding: 6px 8px; border-top: 1.5px dashed var(--rule); white-space: nowrap; vertical-align: middle; }
.table td.wrap { white-space: normal; min-width: 14rem; }
.table th:first-child, .table td:first-child { padding-left: 0; }
.table th:last-child, .table td:last-child { padding-right: 0; }
.table tbody tr:hover { background: #fff9e3; }
.table td a { font-weight: 700; text-decoration: none; }
.table td a:hover { text-decoration: underline; }
.table td.num, .table th.num { text-align: right; font-size: inherit; font-variant-numeric: tabular-nums; }
.table td.num { font-weight: 800; }
.table .who { display: flex; align-items: center; gap: 12px; font-weight: 700; }

.feed { list-style: none; margin: 0; padding: 0; }
.feed li { display: flex; flex-wrap: wrap; gap: 2px 16px; align-items: baseline; padding: 12px 0; border-top: 1.5px dashed var(--rule); font-size: 15px; }
.feed li:first-child { border-top: 0; }
.feed time { flex: 0 0 130px; font-size: 13px; font-weight: 600; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.feed li > :not(time) { flex: 1 1 280px; }
.feed a { font-weight: 700; }

.bars-wrap { min-width: 0; }
.bars-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.bars-head b { font-size: 16px; font-weight: 700; }
.bars-head span { font-size: 13px; font-weight: 700; color: var(--ink-soft); }
.bars { margin-top: 12px; height: 150px; display: flex; align-items: flex-end; gap: 3px; border-bottom: 1.5px dashed var(--rule); }
.bar { flex: 1 1 0; min-width: 0; background: var(--sun); border-radius: 3px 3px 0 0; min-height: 2px; }
.bar-0 { background: var(--rule); height: 2px; }
.bars-axis { display: flex; justify-content: space-between; margin-top: 6px; font-size: 12px; font-weight: 600; color: var(--ink-soft); }

.avatar { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 50%; background: var(--butter); font-size: 14px; font-weight: 800; object-fit: cover; overflow: hidden; }
.avatar-2 { background: var(--sun); }
.avatar-3 { background: var(--sheet); }

.qr { display: inline-block; line-height: 0; padding: 12px; background: #fff; border-radius: 16px; border: 1.5px solid var(--rule); }
.qr svg { width: 200px; height: 200px; }
.qr-sm svg { width: 120px; height: 120px; }

/* ---------- handwriting and crayon marks ---------- */
.note { margin: 0; font-family: var(--hand); font-size: 19px; font-weight: 600; line-height: 1.2; color: var(--note); transform: rotate(-2.5deg); transform-origin: left center; }
.note-wrap { position: relative; display: flex; align-items: flex-end; gap: 4px; pointer-events: none; margin: 4px 0; }
.note-wrap .mark { flex: none; height: auto; animation: nudge 1.2s 0.6s ease-in-out 1 both; --dx: 4px; --dy: 4px; }
.note-wrap.arrow-curve .mark { width: 50px; margin-bottom: -6px; }
.note-wrap.arrow-loop .mark { width: 44px; }
.note-wrap.arrow-down { flex-direction: column; align-items: flex-start; gap: 0; }
.note-wrap.arrow-down .mark { width: 20px; margin-left: 110px; --dx: 0px; --dy: 4px; }
.note-wrap.note-flip { flex-direction: row-reverse; justify-content: flex-end; }
.note-wrap.note-flip .note { transform: rotate(2.5deg); transform-origin: right center; text-align: right; }
.note-wrap.note-flip .mark { transform: scaleX(-1); --dx: -4px; }
.note-right { justify-content: flex-end; }
.circled, .underlined { position: relative; display: inline-block; }
.circled { padding: 0 0.45em; }
.circled > .mark { position: absolute; left: -6%; top: -22%; width: 112%; height: 144%; max-width: none; object-fit: fill; transform: rotate(-4deg); pointer-events: none; }
.underlined > .mark { position: absolute; left: -4px; bottom: -0.22em; width: calc(100% + 8px); height: 0.5em; max-width: none; object-fit: fill; pointer-events: none; }

/* progress rail of paper numerals. .steps = phone rail (right aligned), .steps-wizard = full width with dashed links */
.steps-row { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; min-height: 67px; }
.steps-count { align-self: center; font-size: 13px; font-weight: 700; color: var(--ink-soft); }
.steps { display: flex; align-items: flex-end; gap: 8px; }
.step { display: flex; flex-direction: column; align-items: center; gap: 3px; width: 54px; text-decoration: none; color: var(--ink-soft); font-size: 12px; font-weight: 600; line-height: 16px; }
.step img { height: 38px; width: auto; opacity: 0.35; filter: grayscale(1); display: block; }
.step-current { color: var(--ink); font-weight: 700; }
.step-current img { height: 48px; opacity: 1; filter: none; }
.step-done img { height: 40px; opacity: 1; filter: none; }
.step-num { position: relative; display: block; }
.step-done .step-num { height: 40px; min-width: 30px; }
.step-done .tick { position: absolute; left: 50%; top: -3px; height: 44px; width: auto; transform: translateX(-42%) rotate(3deg); pointer-events: none; opacity: 1; filter: none; }
.steps-wizard { display: flex; flex-wrap: wrap; align-items: flex-end; max-width: 760px; }
.steps-wizard .step { width: 76px; font-size: 13px; line-height: 18px; gap: 4px; }
.steps-wizard .step img { height: 44px; }
.steps-wizard .step-current img { height: 56px; }
.steps-wizard .step-done img { height: 44px; }
.steps-wizard .step-current { font-weight: 800; }
.steps-wizard .link { flex: 1 1 12px; min-width: 8px; border-top: 2px dashed var(--rule); margin-bottom: 32px; }
.steps-wizard.is-center { width: min(100%, 560px); max-width: none; margin-inline: auto; }

/* ---------- empty + error screens, serve panel ---------- */
.empty { position: relative; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 32px 20px; }
.empty img.bear { width: 160px; height: auto; }
.empty h2, .empty h3 { margin: 4px 0 0; font-size: 22px; }
.empty p { max-width: 30rem; margin: 0; color: var(--ink-soft); }
.err-screen { display: flex; flex-direction: column; min-height: calc(100dvh - 64px); }
.err-hero { position: relative; z-index: 3; height: 196px; flex: none; }
.err-hero .chip { position: absolute; left: 0; top: 18px; height: 30px; transform: rotate(-3deg); }
.err-hero .deco-star { position: absolute; left: 14px; top: 92px; width: 28px; transform: rotate(14deg); }
.err-hero .deco-cloud { position: absolute; left: 0; top: 128px; width: 66px; transform: rotate(-6deg); }
.err-hero .bear { position: absolute; right: 6px; top: 0; width: 168px; height: auto; }
.err-card h1 { font-size: 30px; }
.err-card p { color: var(--ink-soft); }
.err-bottom { margin-top: auto; padding-top: 16px; display: flex; flex-direction: column; gap: 8px; }
.serve { position: relative; margin-top: 40px; background: var(--go); color: var(--cream); border-radius: var(--r-xl); box-shadow: 0 1px 0 rgba(42,36,22,.06), 0 12px 28px rgba(42,36,22,.16); padding: 34px 22px 18px; animation: land 0.52s var(--ease-land) both; }
.serve .stamp { position: absolute; left: 16px; top: -34px; width: 72px; height: auto; transform: rotate(-6deg); animation: stamp 0.6s 0.25s cubic-bezier(0.2, 0.8, 0.2, 1) both; }
.serve .serve-lbl { display: block; margin-top: 6px; font-size: 14px; font-weight: 800; letter-spacing: 0.12em; }
.serve h1 { margin: 0; font-size: 58px; line-height: 1.07; letter-spacing: -0.02em; color: var(--cream); overflow-wrap: anywhere; }
.serve .serve-value { margin: 2px 0 0; font-size: 22px; font-weight: 700; }
.serve .serve-for { margin-top: 14px; padding-top: 12px; border-top: 1.5px dashed rgba(255, 246, 214, 0.5); display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.serve .serve-for span { font-size: 13px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
.serve .serve-for b { font-size: 26px; font-weight: 800; line-height: 1.15; }
.serve .serve-note { margin-top: 14px; background: var(--butter-soft); color: var(--ink); border-radius: var(--r-md); padding: 12px 16px; transform: rotate(-0.6deg); font-size: 15px; font-weight: 600; }
.serve .serve-note p { margin: 0; }
.serve .serve-note p + p { margin-top: 6px; font-weight: 800; }
.serve-ask { position: relative; display: flex; align-items: center; gap: 14px; background: var(--butter); border-radius: 20px; padding: 12px 18px; box-shadow: 0 1px 0 rgba(42,36,22,.06), 0 6px 14px rgba(42,36,22,.08); }
.serve-ask .serve-lbl { display: block; font-size: 12px; font-weight: 800; letter-spacing: 0.1em; }
.serve-ask .big { display: block; font-size: 34px; font-weight: 800; line-height: 1.1; letter-spacing: -0.01em; }
.guide h2 { margin-top: 20px; }
.guide ol, .guide ul { padding-left: 20px; }
.guide li + li { margin-top: 6px; }

/* ---------- Wallet pass replica (kit PassPreview) ---------- */
.pass { position: relative; max-width: 340px; background: var(--pass-bg, #ffc928); color: var(--pass-fg, #2a2416); border-radius: 14px; overflow: hidden; box-shadow: 0 1px 0 rgba(42,36,22,.08), 0 14px 28px rgba(42,36,22,.16); font-family: var(--font); }
.pass-tilt { transform: rotate(-1deg); }
.pass-lab { display: block; font-size: 9.5px; font-weight: 700; letter-spacing: 0.06em; line-height: 12px; text-transform: uppercase; color: var(--pass-label, #6b4e00); white-space: nowrap; }
.pass-val { display: block; font-size: 15px; font-weight: 600; line-height: 19px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pass-top { display: flex; align-items: center; gap: 10px; padding: 7px 12px 6px; min-height: 56px; }
.pass-brand { flex: none; width: 40px; display: flex; flex-direction: column; align-items: center; }
.pass-brand .disc { width: 38px; height: 38px; border-radius: 50%; background: #FFF6D6; display: flex; align-items: center; justify-content: center; }
.pass-brand .disc img { width: 76%; height: auto; }
.pass-brand .disc.mark { border-radius: 10px; background: #ffffff; overflow: hidden; }
.pass-brand .disc.mark img { width: 100%; height: 100%; object-fit: contain; }
.pass-brand b { font-size: 9.5px; font-weight: 800; line-height: 11px; color: var(--pass-fg, #2a2416); }
.pass-own { flex: none; display: flex; align-items: center; height: 42px; max-width: 110px; }
.pass-own img { max-height: 42px; max-width: 110px; object-fit: contain; }
.pass-top .nm { flex: 1; min-width: 0; font-size: 16px; font-weight: 700; display: flex; flex-direction: column; }
.pass-top .nm-n, .pass-top .nm-t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pass-top .nm-t { font-size: 11px; font-weight: 600; line-height: 14px; color: var(--pass-label, #6b4e00); }
.pass-hdr { flex: none; text-align: right; }
.pass-hdr .pass-val { font-size: 16px; font-weight: 700; }
.pass-strip { display: block; width: 100%; height: auto; aspect-ratio: 375 / 144; background: #FFF6D6; }
.pass-row { display: flex; justify-content: space-between; gap: 14px; padding: 10px 14px 0; }
.pass-row > div { min-width: 0; }
.pass-row > div:last-child:not(:first-child) { text-align: right; }
.pass-qr { padding: 12px 0 16px; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.pass-qr .qrbox { width: 96px; height: 96px; background: #fffdf6; border-radius: 8px; padding: 7px; line-height: 0; }
.pass-qr .qrbox svg { width: 100%; height: 100%; display: block; }
.pass-qr .alt { white-space: pre-line; font-size: 10.5px; font-weight: 600; line-height: 13px; color: var(--pass-label, #6b4e00); text-align: center; max-width: 160px; }
.pass-none { margin: 0; padding: 16px 0 18px; text-align: center; font-size: 12px; opacity: 0.75; }
.pass-void { filter: saturate(0.55); }

/* ---------- motion ---------- */
@keyframes land { from { transform: translateY(14px) rotate(-1.5deg); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes nudge { 0%, 40%, 80%, 100% { transform: translate(0, 0); } 20%, 60% { transform: translate(var(--dx, 4px), var(--dy, 4px)); } }
@keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.45; transform: scale(0.8); } }
@keyframes stamp { from { transform: scale(1.8) rotate(-18deg); opacity: 0; } to { transform: rotate(-6deg); opacity: 1; } }
.note-wrap.note-flip .mark { animation-name: nudge; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }

@media print {
  .side, .admin-strip, .wiz-top, .site-head, .site-foot, .staff-bar, .no-print { display: none !important; }
  body::before { display: none; }
  body { background: #fff; }
  .app { display: block; padding: 0; }
  .card, .section { box-shadow: none; }
}

/* ---- admin.css ---- */
/* admin: platform admin pages (pages/admin.tsx) */
.adm-stat-groups > .stats + .stats { margin-top: 18px; }
.adm-two { display: grid; gap: 24px; grid-template-columns: minmax(0, 1fr); align-items: start; }
@media (min-width: 1100px) { .adm-two { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.adm-col { display: flex; flex-direction: column; gap: 24px; min-width: 0; }
.adm-grow { flex: 1; min-width: 0; }
.adm-title { font-weight: 800; overflow-wrap: anywhere; }
.adm-who { display: inline-flex; align-items: center; gap: 10px; }
.adm-h { display: inline-flex; align-items: center; gap: 10px; }
.adm-name { margin: 0; font-size: 22px; }
.adm-why { max-width: 24rem; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
.adm-actions { display: flex; align-items: center; gap: 16px; }
.table td.adm-actions { height: 56px; }
.adm-filter { display: flex; flex-wrap: wrap; gap: 8px; }
.adm-filter .btn { min-height: 44px; }
.adm-filter .btn[aria-current] { background: var(--butter); border-color: var(--ink); }
.adm-dl { margin: 16px 0 0; }
.adm-dl > div { display: flex; justify-content: space-between; gap: 16px; padding: 10px 0; border-top: 1.5px dashed var(--rule); }
.adm-dl dt { color: var(--ink-soft); font-weight: 700; }
.adm-dl dd { margin: 0; font-weight: 800; text-align: right; }
.adm-reason { margin-top: 12px; padding: 12px 16px; border-radius: var(--r-sm); background: var(--rust-tint); color: var(--rust); font-weight: 700; }
.adm-effects > li { align-items: flex-start; padding: 12px 0; }
.adm-confirm { border: 2px solid var(--ink); }

/* ---- crop.css ---- */
/* square logo cropper (crop-, ui/js/crop.js, Chris 2026-10-12): opens over any page with <input type=file data-crop> */
.crop-dlg { width: min(92vw, 380px); border: 0; border-radius: var(--r-lg); padding: 20px; background: var(--paper); color: var(--ink); box-shadow: var(--shadow); }
.crop-dlg::backdrop { background: rgba(28, 26, 20, .55); }
.crop-dlg h2 { margin: 0 0 4px; font-size: 21px; }
.crop-dlg p { margin: 0 0 12px; font-size: 14px; color: var(--ink-soft); }
.crop-view { width: 100%; aspect-ratio: 1; border-radius: 18px; overflow: hidden; border: 2px solid var(--ink); touch-action: none;
  background: repeating-conic-gradient(#efe5c8 0% 25%, #fffdf6 0% 50%) 0 0 / 20px 20px; }
.crop-view canvas { display: block; width: 100%; height: 100%; cursor: grab; }
.crop-view canvas:active { cursor: grabbing; }
.crop-zoom { display: flex; align-items: center; gap: 10px; margin-top: 12px; font-size: 14px; font-weight: 700; }
.crop-zoom input { flex: 1; accent-color: var(--ink); }
.crop-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 16px; }

/* ---- customer.css ---- */
/* Customer pages (src/pages/customer.tsx): claim, onboarding, card page in every state, error screens.
   All page-specific classes are prefixed cu-. Built on the design system in app.css. */

.cu-screen [hidden], .cu-form [hidden] { display: none !important; }

/* ---------- phone screens ---------- */
.cu-screen { display: flex; flex-direction: column; min-height: calc(100dvh - 100px); }
.cu-screen + .cu-screen { margin-top: 32px; }
.cu-screen .stack-cards > .card { padding: 26px 22px 16px; }
.cu-screen .stack-cards > .card h1 { margin: 0; font-size: 30px; line-height: 1.1; }
.cu-bottom { margin-top: auto; padding-top: 16px; display: flex; flex-direction: column; gap: 8px; }
.cu-fine { margin: 4px 0 0; text-align: center; font-size: 13px; font-weight: 600; line-height: 20px; color: var(--ink-soft); }
.cu-fine.left { margin: 0; text-align: left; font-size: 12.5px; font-weight: 500; line-height: 1.3; }
.cu-quiet { justify-content: center; font-size: 15px; font-weight: 600; }
.cu-title { margin: 14px 0 0; font-size: 30px; line-height: 33px; }
.cu-title-lg { margin-top: 4px; font-size: 33px; line-height: 1.08; }
.cu-lede { margin: 12px 0 0; font-size: 16px; font-weight: 500; line-height: 24px; color: var(--ink-soft); }
.cu-side-lede { max-width: 184px; margin: 8px 0 0; font-size: 16px; font-weight: 500; line-height: 1.4; color: var(--ink-soft); }
.cu-why { margin: 8px 0 0; font-size: 14.5px; line-height: 1.35; }
.steps-count { display: flex; align-items: center; gap: 12px; }

/* member profile (proposal): photo + best title, totals, every card across venues */
.cu-prof { padding-top: 8px; min-height: 0; } /* your details follow straight on */
.cu-prof-head { display: flex; align-items: center; gap: 18px; }
.cu-prof-photo { position: relative; flex: none; width: 112px; height: 124px; }
.cu-prof-photo img, .cu-prof-photo .ini { width: 112px; height: 112px; border-radius: 50%; object-fit: cover; border: 5px solid #fffdf6; box-shadow: 0 4px 14px rgba(42, 36, 22, .22); transform: rotate(-4deg); background: #ffe48a; }
.cu-prof-photo .ini { display: grid; place-items: center; font: 800 48px/1 var(--font); color: var(--ink); }
.cu-prof-photo .ribbon { position: absolute; left: 50%; bottom: 0; transform: translateX(-50%) rotate(-3deg); padding: 3px 12px; background: #ffc928; border-radius: 4px; box-shadow: 0 2px 6px rgba(42, 36, 22, .22); font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--ink); white-space: nowrap; }
.cu-prof-who { min-width: 0; display: grid; gap: 2px; }
.cu-prof-who h1 { margin: 0; font-size: 30px; line-height: 1.05; }
.cu-prof-who p { margin: 0; font-size: 15px; font-weight: 600; color: var(--ink-soft); }
.cu-prof-edit { font-size: 14px; font-weight: 600; color: var(--ink); margin-top: 4px; }
.cu-prof-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: -4px 0 14px; }
.cu-prof-top-note { font-size: 13px; font-weight: 700; color: var(--ink-soft); }
.cu-prof .cu-details { margin-top: 16px; }
.cu-prof-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 18px; }
.cu-prof-stats > div { background: #fffdf6; border-radius: 14px; padding: 10px 8px; text-align: center; box-shadow: 0 1px 0 rgba(42, 36, 22, .06); display: grid; gap: 2px; }
.cu-prof-stats b { font-size: 24px; line-height: 1; }
.cu-prof-stats span { font-size: 12px; font-weight: 600; color: var(--ink-soft); line-height: 1.2; }
.cu-prof-h { margin: 22px 0 8px; font-size: 20px; }
.cu-prof-cards { margin: 0; padding: 0; list-style: none; }
.cu-prof-row { flex: 1; width: 100%; display: flex; align-items: center; gap: 12px; padding: 12px 2px; color: inherit; text-decoration: none; }
.cu-prof-cards li + li .cu-prof-row { border-top: 1px dashed var(--line, rgba(42, 36, 22, .14)); }
.cu-prof-venue { flex: none; align-self: flex-start; width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; font-weight: 800; font-size: 15px; object-fit: cover; }
.cu-prof-row .who { flex: 1; min-width: 0; display: grid; }
.cu-prof-row .who strong { font-size: 16px; line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cu-prof-row .who span { font-size: 13.5px; color: var(--ink-soft); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cu-prof-row .who .chip { justify-self: start; margin-top: 5px; }
.cu-prof-row .go { flex: none; color: var(--ink-soft); display: flex; }
.cu-prof .cu-fine { margin-top: 14px; }

/* the join form's three pages: one at a time with JS (pages have no gap between them) */
.cu-pg[hidden] { display: none !important; }
.cu-wiz.js .cu-pg + .cu-pg { margin-top: 0; }
.cu-wiz .cu-pg { min-height: calc(100dvh - 140px); }

/* friend invite landing: one screen, nothing to scroll (the form is the next page) */
.cu-land { min-height: calc(100dvh - 140px); } /* keeps the fine print clear of Safari's floating address bar */
.cu-land-hero { position: relative; height: 214px; flex: none; }
.cu-land-hero .bear { position: absolute; right: -10px; top: 0; max-width: none; width: 184px; height: auto; }
.cu-land-from { position: absolute; left: 4px; top: 22px; display: grid; justify-items: center; transform: rotate(-4deg); z-index: 2; }
.cu-land-from .ph { width: 116px; height: 116px; border-radius: 50%; object-fit: cover; border: 5px solid #fffdf6; box-shadow: 0 4px 14px rgba(42, 36, 22, .22); background: #ffe48a; }
.cu-land-from .ini { display: grid; place-items: center; font: 800 52px/1 var(--font); color: var(--ink); }
.cu-land-from .tag { position: relative; margin-top: -12px; padding: 2px 13px 3px; border-radius: 999px; background: #fffdf6; box-shadow: 0 2px 7px rgba(42, 36, 22, .2); font-family: var(--hand); font-size: 17px; font-weight: 600; color: var(--note); transform: rotate(-3deg); }
.cu-land-hero .spark { position: absolute; left: 128px; top: 14px; }
.cu-land-hero .star { position: absolute; left: 112px; top: 160px; transform: rotate(14deg); }
.cu-land-map { position: relative; display: block; margin-top: 14px; border-radius: 16px; overflow: hidden; border: 3px solid #fffdf6; box-shadow: 0 3px 12px rgba(42, 36, 22, .16); transform: rotate(-.6deg); flex: none; }
.cu-land-map img { display: block; width: 100%; height: auto; aspect-ratio: 342 / 128; background: #fff3cf; }
.cu-land-map .tag { position: absolute; left: 10px; bottom: 10px; display: inline-flex; align-items: center; gap: 4px; padding: 5px 11px; border-radius: 999px; background: #fffdf6; box-shadow: 0 2px 7px rgba(42, 36, 22, .2); font-size: 14px; font-weight: 700; color: var(--ink); }
.cu-land-map .tag svg { width: 14px; height: 14px; }
.cu-land-map .osm { position: absolute; right: 6px; bottom: 3px; font-size: 9px; color: rgba(42, 36, 22, .55); }
.cu-land-title { position: relative; margin: 6px 0 0; font-size: 36px; line-height: 1.08; }
.cu-land-title .ln, .cu-land-title .ln3 { display: block; text-wrap: balance; }
.cu-land-title .ln { padding-right: 96px; } /* the first two lines leave room for the value sticker */
/* the value sticker sits right of the first two headline lines */
.cu-land-value { position: absolute; right: -4px; top: -6px; width: 86px; height: 86px; border-radius: 50%; background: #ffc928; border: 4px solid #fffdf6; box-shadow: 0 3px 10px rgba(42, 36, 22, .22); display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1; transform: rotate(8deg); }
.cu-land-value small { font-family: var(--hand); font-size: 11.5px; font-weight: 600; color: var(--note); margin-bottom: 3px; }
.cu-land-value b { font-size: 25px; font-weight: 800; letter-spacing: -.02em; color: var(--ink); }

/* hero zone: attribution / headline left, bear right, overlapping the card below */
.cu-hero { position: relative; z-index: 3; flex: none; }
.cu-hero-claim { height: 214px; }
.cu-hero-invite { height: 188px; }
.cu-hero-counter { height: 204px; margin-top: 8px; }
.cu-hero-own { height: 150px; }
.cu-hero .bear { position: absolute; right: -14px; top: 0; max-width: none; }
.cu-hero-invite .bear { right: -8px; }
.cu-hero-own .bear { right: auto; left: -10px; }
.cu-hero .cloud { position: absolute; left: 4px; top: 148px; transform: rotate(-6deg); }
.cu-hero-invite .cloud { top: 136px; }
.cu-hero .star { position: absolute; left: 66px; top: 170px; transform: rotate(14deg); }
.cu-hero .spark { position: absolute; left: 98px; top: 4px; transform: rotate(-14deg); pointer-events: none; }
.cu-hero-invite .spark { left: 112px; top: 2px; }
.cu-from { position: absolute; left: 0; top: 10px; width: 124px; display: flex; flex-direction: column; gap: 10px; }
.cu-from-badge { width: 52px; height: 52px; border-radius: 14px; background: var(--sun); box-shadow: 0 1px 0 rgba(42,36,22,.06), 0 6px 14px rgba(42,36,22,.12); display: flex; align-items: center; justify-content: center; font-size: 21px; font-weight: 800; transform: rotate(-4deg); }
.cu-from-badge.round { border-radius: 50%; background: var(--butter); font-size: 24px; }
.cu-from .who { display: block; font-size: 16px; font-weight: 600; line-height: 1.25; }
.cu-hero-counter h1 { position: absolute; left: 0; top: 4px; margin: 0; font-size: 31px; line-height: 1.08; }
.cu-hero-counter .cloud { left: 6px; top: 138px; }
.cu-hero-counter .star { left: 82px; top: 158px; transform: rotate(12deg); }

/* claim card: three numbered rows */
.cu-join-steps { margin: 10px 0 0; }
.cu-join-steps li, .cu-mini-steps li { gap: 14px; }
.cu-join-steps li { min-height: 50px; }
.cu-join-steps li > img { height: 32px; width: auto; flex: none; }
.cu-join-steps .lbl, .cu-mini-steps .lbl { display: block; line-height: 14px; }
.cu-join-steps .txt, .cu-mini-steps .txt { display: block; font-size: 15px; font-weight: 600; line-height: 20px; }

/* ---------- onboarding form ---------- */
.cu-form { display: flex; flex-direction: column; gap: 12px; }
.cu-form > .field { margin-top: 0; }
.cu-form .lab { display: block; margin-bottom: 6px; font-size: 14px; font-weight: 700; line-height: 18px; }
.cu-contact-switch { margin-bottom: 8px; gap: 10px; }
.cu-contact-fields { display: flex; flex-direction: column; gap: 10px; }
.cu-contact-fields .field { margin-top: 0; }

.cu-photo { display: flex; align-items: center; gap: 18px; }
.cu-photo-circle { position: relative; width: 76px; height: 76px; flex: none; }
.cu-photo-big .cu-photo-circle { width: 120px; height: 120px; }
.cu-photo-circle .disc { position: absolute; inset: 0; border-radius: 50%; overflow: hidden; background: #fffbea; border: 2px solid var(--ink); }
.cu-photo-big .disc { border: 2.5px dashed #c9ae62; }
.cu-photo-big.has-photo .disc { border: 0; }
.cu-photo-circle .empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.cu-photo-circle .empty img { transform: rotate(-5deg); }
.cu-photo-circle .photo-preview { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; object-fit: cover; display: none; }
.cu-photo.has-photo .photo-preview { display: block; }
.cu-photo.has-photo .empty { display: none; }
.cu-photo:not(.has-photo):not(.cu-photo-big) .disc { border-style: dashed; border-color: #c9ae62; }
.cu-photo-circle input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 4; font-size: 0; }
.cu-photo-circle:has(input:focus-visible) .disc { outline: 3px solid var(--ink); outline-offset: 3px; }
.cu-photo-actions { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.cu-photo-big .cu-photo-actions { align-items: stretch; }
.cu-photo-actions .hint { font-size: 13px; line-height: 17px; font-weight: 500; color: var(--ink-soft); }
.cu-photo-actions label.btn { cursor: pointer; }
.cu-small-link { font-size: 14.5px; font-weight: 600; color: var(--ink-soft); cursor: pointer; justify-content: center; }
.cu-photo-done { display: flex; align-items: center; gap: 8px; min-height: 44px; font-size: 16px; font-weight: 700; }
.cu-photo .cu-when-photo { display: none; }
.cu-photo.has-photo .cu-when-photo { display: flex; }
.cu-photo.has-photo .cu-when-empty { display: none; }
.cu-photo.has-photo .cu-small-link.cu-when-photo { justify-content: flex-start; padding: 0; }
.cu-photo-big.has-photo .disc { box-shadow: 0 0 0 4px var(--paper), 0 6px 16px rgba(42,36,22,.18); }
.cu-photo-links { gap: 18px; align-items: center; }
.cu-photo-links .cu-small-link { padding: 0; min-height: 44px; display: inline-flex; align-items: center; }
.photo-remove { background: none; border: 0; font: inherit; text-decoration: underline; text-underline-offset: 3px; }
/* the photo note sits clear of the "Why a photo?" line, its arrow over the photo circle */
.cu-photo-note { margin: 18px 0 2px 6px; }
.note-wrap.arrow-down.cu-photo-note .mark { margin-left: 64px; }
/* Email / SMS chips: one line, no tick (the filled chip shows it's on) */
.cu-contact-switch { gap: 10px; }
.cu-contact-switch .toggle-chip { display: inline-flex; margin: 0; padding: 0 22px; font-size: 15px; line-height: 1; }

/* ---------- card page: numbers, progress, share ---------- */
.cu-strips { position: relative; height: 82px; margin: 12px -10px 0; }
.cu-strip { position: absolute; width: 36.5%; height: 70px; box-sizing: border-box; border-radius: 16px; padding: 10px 14px; }
.cu-strip .n { display: block; font-size: 32px; font-weight: 800; line-height: 34px; font-variant-numeric: tabular-nums; }
.cu-strip .l { display: block; font-size: 12.5px; font-weight: 700; line-height: 16px; }
.cu-strip .ring { position: absolute; left: 6px; top: 2px; width: 54px; height: 44px; max-width: none; object-fit: fill; transform: rotate(-6deg); pointer-events: none; }
.cu-strip.s1 { left: 0; top: 4px; background: var(--butter); transform: rotate(-3deg); z-index: 1; }
.cu-strip.s2 { left: 32%; top: 10px; background: var(--sun); transform: rotate(2deg); z-index: 2; }
.cu-strip.s3 { left: 63.5%; top: 0; padding-top: 9px; background: var(--paper); border: 1.5px solid var(--rule); transform: rotate(-1.5deg); z-index: 3; }
.cu-loud-redeem .s1 { background: var(--sun); z-index: 3; }
.cu-loud-redeem .s2 { background: var(--butter); z-index: 2; }
.cu-loud-redeem .s3 { z-index: 1; }
.cu-next { margin-top: 12px; }
.cu-next .head { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 34px; font-size: 15px; line-height: 20px; }
.cu-next .head b { font-weight: 800; }
.cu-next .frac { flex: none; font-size: 22px; font-weight: 800; line-height: 24px; padding: 0 6px; }
.cu-bar { margin-top: 6px; height: 12px; border-radius: 6px; background: var(--dim); overflow: hidden; }
.cu-bar i { display: block; height: 100%; border-radius: 6px; background: var(--sun); }
.cu-how { margin-top: 14px; display: flex; align-items: flex-start; gap: 12px; }
.cu-how img { flex: none; transform: rotate(-5deg); }
.cu-how p { margin: 0; font-size: 14px; line-height: 1.35; font-weight: 500; }
.cu-how b { font-weight: 800; }
.cu-how-title { display: block; margin-top: 14px; }

/* bears that rise above a card (reward + share screens) */
.cu-rise { position: relative; z-index: 3; height: 52px; flex: none; }
.cu-rise .bear { position: absolute; right: -14px; top: -116px; max-width: none; transform: rotate(2deg); }
.cu-rise .star { position: absolute; right: 176px; top: -30px; transform: rotate(14deg); }
.cu-rise-share { height: 156px; margin: 4px 0; }
.cu-rise-share .bear { right: auto; left: -24px; top: 0; transform: rotate(-1deg); }
.cu-rise-share .star { right: 6px; top: 10px; }
.cu-rise-share .heart { position: absolute; right: 52px; top: 70px; transform: rotate(8deg); pointer-events: none; }

.cu-mini-steps li > img { width: 40px; height: 40px; object-fit: contain; flex: none; }
.cu-mini-steps li { min-height: 52px; }
.cu-mini-steps li > span { font-size: 15px; font-weight: 600; line-height: 20px; }

/* ---------- wallet + counter steps ---------- */
.cu-pass-wrap { position: relative; width: min(304px, 100%); margin-top: 20px; flex: none; }
.cu-pass-wrap .bear { position: absolute; right: -32px; top: -88px; max-width: none; transform: rotate(6deg); z-index: 0; }
.cu-pass-wrap .plate { position: absolute; left: 6px; right: -12px; top: 14px; bottom: -12px; background: var(--butter); border-radius: 18px; transform: rotate(2.5deg); z-index: 0; }
.cu-pass-wrap .pass { z-index: 1; }
.cu-bell { display: flex; align-items: center; gap: 10px; }
.cu-bell img { flex: none; transform: rotate(-8deg); }
.cu-bell p { margin: 0; font-size: 14.5px; line-height: 1.35; font-weight: 500; }
.cu-status { position: relative; isolation: isolate; display: flex; align-items: center; gap: 14px; margin-bottom: 8px; padding: 11px 22px; background: var(--butter); border-radius: 18px; }
.cu-status .dot { flex: none; width: 12px; height: 12px; border-radius: 50%; background: var(--ink); animation: pulse 1.8s ease-in-out infinite; }
.cu-status b { display: block; font-size: 16px; font-weight: 700; line-height: 20px; }
.cu-status span { display: block; font-size: 13px; font-weight: 500; line-height: 17px; color: #4a3f28; }
.cu-status > :not(.ring) { position: relative; z-index: 1; }
.cu-status .ring { z-index: 0; position: absolute; left: -17px; top: -9px; width: calc(100% + 34px); height: calc(100% + 18px); max-width: none; object-fit: fill; transform: rotate(-1deg); pointer-events: none; }
.cu-bottom .btn > img { height: 30px; width: auto; }

/* ---------- everyday card header, lower sections ---------- */
.cu-everyday { display: flex; flex-direction: column; gap: 20px; }
.cu-wallet-top { display: flex; flex-direction: column; }
.cu-card-head { display: flex; align-items: center; gap: 18px; padding: 4px 2px 0; }
.cu-head-photo { flex: none; display: flex; align-items: center; justify-content: center; width: 88px; height: 88px; border-radius: 50%; overflow: hidden; border: 3px solid var(--paper); background: #fffbea; transform: rotate(-3deg); box-shadow: var(--shadow-sm); }
.cu-head-photo img { width: 100%; height: 100%; max-width: none; object-fit: cover; }
.cu-card-head > div { min-width: 0; }
.cu-card-head h1 { margin: 2px 0 0; font-size: 31px; line-height: 1.05; }
.cu-card-head p { margin: 4px 0 0; font-size: 15px; line-height: 20px; }
.cu-card-head .from { display: flex; align-items: center; gap: 8px; margin-top: 4px; font-size: 13px; font-weight: 600; color: var(--ink-soft); }
.cu-card-head .ini { display: flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%; background: var(--butter); font-size: 12px; font-weight: 800; color: var(--ink); }

.cu-lower { display: flex; flex-direction: column; gap: 20px; margin-top: 24px; }
.cu-lower[hidden] { display: none !important; }
.cu-lower > .card { margin-top: 0; padding: 22px; }
.cu-lower > .card > h2 { margin: 0 0 6px; font-size: 21px; line-height: 26px; }
.cu-people li { gap: 12px; min-height: 58px; }
.cu-people .who { flex: 1; min-width: 0; }
.cu-people .who strong { display: block; font-size: 16px; line-height: 20px; }
.cu-people .who span { display: block; font-size: 13px; font-weight: 500; line-height: 17px; color: var(--ink-soft); }
.cu-people .chip { white-space: normal; text-align: right; }
.cu-ini-dot { flex: none; display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 50%; font-size: 16px; font-weight: 800; }
.cu-ini-dot-1 { background: var(--sun); }
.cu-ini-dot-2 { background: var(--butter); }
.cu-ini-dot-3 { background: var(--sheet); }
.cu-details { display: flex; flex-direction: column; gap: 14px; }
.cu-details > .field, .cu-details .photo-field + .field { margin-top: 0; }
.cu-details > h2 { margin-bottom: 0; }
.cu-hide { display: flex; align-items: flex-start; gap: 12px; padding-top: 2px; cursor: pointer; }
.cu-hide input { margin-top: 10px; }
.cu-hide span > b { display: block; font-size: 15px; font-weight: 700; line-height: 20px; padding-top: 2px; }
.cu-hide span > span { display: block; margin-top: 2px; font-size: 13px; line-height: 17px; font-weight: 500; color: var(--ink-soft); }
.cu-details-actions { display: flex; flex-direction: column; gap: 8px; margin-top: 2px; }
.cu-details-actions .btn { min-height: 48px; }
.cu-details-actions .btn-primary { min-height: 56px; }
.cu-others li { padding: 0; }
.cu-others a { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 60px; color: var(--ink); text-decoration: none; }
.cu-others a strong { flex: 1; min-width: 0; font-size: 16px; line-height: 20px; }
.cu-others a .muted { font-size: 14px; font-weight: 600; }

.cu-ini { flex: none; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; background: var(--sun); font-size: 14px; font-weight: 800; transform: rotate(-3deg); }
.cu-ini-2 { background: var(--butter); transform: rotate(2deg); }

/* ---------- error screens ---------- */
.cu-err-steps { margin-top: 12px; }
.cu-err-steps li { min-height: 54px; gap: 14px; font-size: 15px; }
.cu-err-steps li > img { height: 32px; width: auto; flex: none; }
.cu-err-eyebrow { margin: 0 0 6px; }
.err-card .cu-err-eyebrow { color: var(--ink-soft); }
.cu-venue-row { margin-top: 16px; display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--cream); border-radius: 16px; }
.cu-venue-row b { display: block; font-size: 16px; line-height: 20px; }
.cu-venue-row div span { display: block; font-size: 14px; font-weight: 500; line-height: 20px; color: var(--ink-soft); }
.cu-card-sum { margin-top: 16px; display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--cream); border-radius: 16px; }
.cu-card-sum img { flex: none; width: 48px; height: 48px; border-radius: 12px; object-fit: cover; background: var(--butter); }
.cu-card-sum b { display: block; font-size: 16px; line-height: 20px; }
.cu-card-sum span { display: block; font-size: 14px; font-weight: 500; line-height: 20px; color: var(--ink-soft); }
.cu-reason { margin-top: 16px; padding: 12px 14px; background: var(--rust-tint); border-radius: 16px; }
.cu-reason .eyebrow { display: block; color: var(--rust); }
.cu-reason b { display: block; margin-top: 2px; font-size: 20px; font-weight: 800; line-height: 26px; color: var(--ink); overflow-wrap: anywhere; }
.err-card .cu-reason + p { margin-top: 14px; }
.cu-link-box { margin-top: 16px; }
.cu-link-box .lbl { display: block; text-transform: none; letter-spacing: 0; font-size: 14px; line-height: 20px; color: var(--ink); }
.cu-link-box div { margin-top: 6px; display: flex; align-items: center; min-height: 48px; padding: 0 14px; background: #fff; border: 1.5px solid var(--rule); border-radius: 14px; font-size: 16px; font-weight: 600; color: var(--ink); word-break: break-all; }
.err-bottom .btn-primary { width: 100%; }

/* rewards list + offer rules (card page) */
.cu-rewards li { gap: 12px; min-height: 56px; }
.cu-rewards .who { flex: 1; min-width: 0; }
.cu-rewards .who strong { display: block; font-size: 16px; line-height: 20px; overflow-wrap: anywhere; }
.cu-rewards .who span { display: block; font-size: 13px; font-weight: 500; line-height: 17px; color: var(--ink-soft); }
.cu-reward-count { flex: none; font-size: 20px; font-weight: 800; line-height: 24px; }
.cu-rules ul, .cu-rules ol { margin: 6px 0 0; padding-left: 18px; }
.cu-rules ol li::marker { font-weight: 800; color: var(--ink); }
.cu-rules li { margin: 6px 0; font-size: 14px; line-height: 20px; color: var(--ink-soft); }
/* step 2 (save to Wallet) on one screen: a smaller card, the rules in brief, the button */
.cu-save .cu-save-pass { position: relative; margin-top: 12px; display: flex; justify-content: center; flex: none; }
.cu-save .cu-save-pass .pass { zoom: .7; transform: rotate(-1deg); }
.cu-save { min-height: calc(100dvh - 140px); }
.cu-save .cu-save-pass .bear { position: absolute; right: -18px; top: 96px; width: 86px; height: auto; transform: rotate(8deg); z-index: 2; }
.cu-save .cu-rules.compact { margin-top: 14px; padding: 12px 16px 10px; flex: none; }
.cu-rules.compact h2 { font-size: 16px; margin: 0; }
.cu-rules.compact ul, .cu-rules.compact ol { margin-top: 4px; }
.cu-rules.compact li { margin: 3px 0; font-size: 13.5px; line-height: 18px; }

/* the member card page (cv-, design A, Chris 2026-10-12): rank, rewards, QR, invite tree, the board */
.cv { display: grid; gap: 14px; padding-top: 6px; }
.cv-brand { display: flex; align-items: center; gap: 7px; margin: 0 2px -4px; font-size: 15px; font-weight: 800; color: var(--page-ink, var(--ink)); }
.cv-brand img { width: 26px; height: auto; }
.cv-face { position: relative; width: var(--s); height: var(--s); flex: none; display: inline-block; }
.cv-face img, .cv-face .ini { box-sizing: border-box; width: 100%; height: 100%; border-radius: 50%; object-fit: cover; display: grid; place-items: center; background: #ffe48a; font: 800 calc(var(--s) * .42)/1 var(--font); color: #1c1a14; border: 3px solid var(--paper); box-shadow: 0 2px 6px rgba(42, 36, 22, .18); }
.cv-face .cv-badge { position: absolute; right: -2px; bottom: -2px; width: 38%; height: 38%; max-width: 24px; max-height: 24px; border-radius: 50%; border: 2px solid var(--paper); display: grid; }
.cv-face.is-in .cv-badge { background: #2f9e44; }
.cv-face.is-way .cv-badge { background: #f08c00; }
.cv-face .cv-badge svg { display: block; width: 100%; height: 100%; }
.cv-hero { background: var(--hb); color: var(--hf); border-radius: 22px; padding: 12px 16px 18px; box-shadow: 0 6px 18px rgba(42, 36, 22, .16); }
.cv-hero .top { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--hl); }
.cv-hero .top a { color: var(--hf); text-transform: none; letter-spacing: 0; font-size: 14px; display: flex; gap: 4px; align-items: center; text-decoration: none; }
.cv-hero .me { display: flex; align-items: center; gap: 16px; margin-top: 10px; }
.cv-hero .pic { position: relative; padding-bottom: 10px; flex: none; }
.cv-hero .ribbon { position: absolute; left: 50%; bottom: 0; transform: translateX(-50%) rotate(-3deg); padding: 3px 12px; background: #fff6d6; color: #1c1a14; border-radius: 4px; box-shadow: 0 2px 6px rgba(42, 36, 22, .25); font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; white-space: nowrap; }
.cv-hero h1 { margin: 0; font-size: 30px; line-height: 1.05; color: var(--hf); }
.cv-hero p { margin: 3px 0 0; font-weight: 600; font-size: 15px; color: var(--hl); }
.cv-hero .pos { display: inline-block; margin-top: 8px; padding: 4px 10px; border-radius: 999px; background: var(--hf); color: var(--hb); font-weight: 800; font-size: 13px; }
.cv-ladder { background: var(--paper); border-radius: 18px; padding: 12px 10px; box-shadow: 0 1px 0 rgba(42, 36, 22, .06); }
.cv-ladder ol { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); position: relative; }
.cv-ladder ol::before { content: ""; position: absolute; left: 8%; right: 8%; top: 9px; height: 3px; background: color-mix(in srgb, var(--ink) 12%, transparent); }
.cv-ladder li { position: relative; display: grid; justify-items: center; gap: 3px; text-align: center; }
.cv-ladder .dot { width: 18px; height: 18px; border-radius: 50%; background: var(--paper); border: 3px solid color-mix(in srgb, var(--ink) 18%, transparent); box-sizing: border-box; z-index: 1; }
.cv-ladder li.cv-done .dot { background: var(--sun); border-color: var(--sun); }
.cv-ladder li.cv-now .dot { background: var(--sun); border-color: var(--ink); transform: scale(1.25); }
.cv-ladder .t { font-size: 10px; font-weight: 800; letter-spacing: -.01em; white-space: nowrap; }
.cv-ladder li:not(.cv-done):not(.cv-now) .t { color: var(--ink-soft); font-weight: 600; }
.cv-ladder .at { font-size: 10px; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.cv-ladder p { margin: 10px 0 0; text-align: center; font-size: 15px; }
.cv-rewards { display: flex; align-items: center; gap: 12px; padding: 10px 14px; background: var(--butter); border-radius: 18px; }
.cv-rewards b { display: block; font-size: 18px; line-height: 1.2; }
.cv-rewards span { font-size: 13.5px; font-weight: 600; color: var(--ink-soft); }
.cv-sec, .cv-board { background: var(--paper); border-radius: 18px; padding: 12px 14px 14px; box-shadow: 0 1px 0 rgba(42, 36, 22, .06); }
.cv-sec-hd { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.cv-sec-hd h2 { margin: 0; font-size: 18px; }
.cv-sec-hd span { font-size: 13px; font-weight: 600; color: var(--ink-soft); white-space: nowrap; }
.cv-empty, .cv-next { margin: 8px 0 0; font-size: 14.5px; color: var(--ink-soft); }
.cv-board ol { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 4px; }
.cv-board li { display: grid; grid-template-columns: 22px auto minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 5px 8px; border-radius: 12px; }
.cv-board li.me { background: var(--butter); }
.cv-board li b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-board .n { font-weight: 800; color: var(--ink-soft); text-align: center; font-variant-numeric: tabular-nums; }
.cv-board .c { font-weight: 800; font-size: 17px; font-variant-numeric: tabular-nums; }
.cv-nudge { margin: 8px 0 0; font-size: 15px; font-weight: 700; }
.cv-qrsec { display: grid; grid-template-columns: 132px minmax(0, 1fr); gap: 14px; align-items: center; background: var(--paper); border-radius: 18px; padding: 12px; box-shadow: 0 1px 0 rgba(42, 36, 22, .06); }
.cv-qrsec .qr { background: #fff; border-radius: 12px; padding: 6px; border: 1px solid rgba(42, 36, 22, .1); }
.cv-qrsec .qr svg { display: block; width: 100%; height: auto; }
.cv-qrsec h2 { margin: 0; font-size: 20px; }
.cv-qrsec p { margin: 4px 0 0; font-size: 14px; line-height: 1.4; color: var(--ink-soft); }
.cv-tree-svg { margin: 6px auto 0; max-width: 320px; }
.cv-tree-svg:has(svg[viewBox^="62"]) { max-width: 220px; }
.cv-tree-svg svg { display: block; width: 100%; height: auto; }
/* the explorable tree (ui/js/tree.js): tap anyone to centre them; the count toggles everyone / came in */
.cv-tree-svg .tg circle { fill: none; stroke: var(--ink); stroke-opacity: .07; }
.cv-tree-svg .tl line { stroke: var(--ink); stroke-opacity: .24; stroke-width: 1.5; stroke-linecap: round; }
.cv-tree-svg .tn { cursor: pointer; -webkit-tap-highlight-color: transparent; outline: none; }
.cv-tree-svg .tn .hit { fill: transparent; }
.cv-tree-svg .tn.is-lapsed { filter: saturate(.3); }
.cv-tree-svg .tn:focus-visible .hit { fill: none; stroke: var(--sun); stroke-width: 3; }
.cv-tree-svg .tn .ini { font: 800 10px var(--font); fill: #1c1a14; }
.cv-tree-svg .tn .tlbl { font: 700 11px var(--font); fill: var(--ink); paint-order: stroke; stroke: var(--paper); stroke-width: 3px; stroke-linejoin: round; pointer-events: none; }
.cv-tree-toggle { display: inline-flex; align-items: center; gap: 5px; border: 0; margin: 0; padding: 5px 10px; border-radius: 999px; background: color-mix(in srgb, var(--ink) 8%, transparent); font: 700 13px/1.1 var(--font); color: var(--ink); cursor: pointer; white-space: nowrap; }
.cv-tree-toggle[aria-pressed="true"] { background: #2f9e44; color: #fff; }
.cv-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 6px; margin: 8px 0 0; font-size: 14px; font-weight: 700; }
.cv-crumbs[hidden] { display: none; }
.cv-crumbs button { border: 0; background: none; padding: 6px 2px; font: inherit; color: var(--ink-soft); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.cv-crumbs .sep { color: var(--ink-soft); }
.cv-crumbs .here { color: var(--ink); }
.cv-tree-who { margin: 2px 0 0; text-align: center; font-size: 14.5px; line-height: 1.4; color: var(--ink-soft); text-wrap: pretty; }
.cv-tree-who b { color: var(--ink); }
.cv-tree-who[hidden] { display: none; }
.cv-tree-hint { margin: 6px 0 0; text-align: center; font-size: 12.5px; font-weight: 600; color: var(--ink-soft); }
.cv-gens { list-style: none; margin: 6px 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; text-align: center; }
.cv-gens li { display: grid; gap: 0; }
.cv-gens b { font-size: 22px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.cv-gens span { font-size: 12.5px; font-weight: 600; color: var(--ink-soft); }
.cv-gens li + li { border-left: 1px dashed color-mix(in srgb, var(--ink) 18%, transparent); }
.cv-key { margin: 10px 0 0; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 4px 10px; font-size: 12.5px; font-weight: 600; color: var(--ink-soft); }
.cv-key i { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: -6px; }
.cv-key .k-in { background: #2f9e44; } .cv-key .k-way { background: #f08c00; } .cv-key .k-lapsed { background: #cfc5ad; }
.cv-tabs { display: inline-flex; background: color-mix(in srgb, var(--ink) 8%, transparent); border-radius: 999px; padding: 3px; gap: 2px; flex: none; }
.cv-tabs button { border: 0; background: transparent; font: 700 13px/1 var(--font); color: var(--ink-soft); padding: 7px 11px; border-radius: 999px; cursor: pointer; }
.cv-tabs button[aria-selected="true"] { background: var(--paper); color: var(--ink); box-shadow: 0 1px 3px rgba(42, 36, 22, .16); }
.cv-tabs button:focus-visible { outline: 3px solid var(--sun); outline-offset: 1px; }
.cv-board .cv-sec-hd { align-items: center; }
.cv-board-ft { margin: 6px 0 0; font-size: 12.5px; color: var(--ink-soft); }

/* a member's card page in the venue's colours (Chris, 2026-10-12): ui/theme.ts sets the tokens on body.venue-theme */
body.venue-theme { background: var(--page); }
body.venue-theme::before, .venue-theme .card::before { display: none; }
.venue-theme .footer, .venue-theme .footer a { color: var(--page-soft); }
.venue-theme .footer strong { color: var(--page-ink); }
.venue-theme .btn-primary, .venue-theme .btn-primary:hover { color: var(--btn-ink); }
/* the header still reads as the card (Chris, 2026-10-12): a ring in the card's label colour and a lift off the page */
.venue-theme .cv-hero { border: 2.5px solid var(--hl); box-shadow: 0 0 0 5px color-mix(in srgb, var(--hl) 22%, transparent), 0 10px 26px rgba(0, 0, 0, .22); }
.venue-theme .cv-rewards, .venue-theme .cv-board li.me { color: var(--hi-ink); }
.venue-theme .cv-rewards span { color: inherit; opacity: .85; }
.venue-theme .cv-board li.me .n { color: inherit; opacity: .75; }

/* ---- offers.css ---- */
/* Offers page (src/pages/offers.tsx). Every class here starts with of-. */
.of-list { display: flex; flex-direction: column; gap: 20px; }
.of-offer-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin-bottom: 10px; }
.of-offer-head h2 { margin: 0; font-size: 24px; overflow-wrap: anywhere; }
.of-lines { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 6px; font-weight: 600; }
.of-lines li::marker { color: var(--honey); }
.of-fine { margin: 10px 0 0; }
.of-count { margin: 12px 0 0; font-size: 15px; }
.of-count b { font-size: 20px; }
.of-actions { margin-top: 16px; }
.of-ended { margin-top: 8px; }
.of-ended > summary { cursor: pointer; font-weight: 700; min-height: 44px; display: flex; align-items: center; color: var(--ink-soft); }
.of-ended[open] > summary { margin-bottom: 12px; }

/* form + sticky preview */
.of-layout { display: grid; gap: 24px; grid-template-columns: minmax(0, 1fr); align-items: start; }
@media (min-width: 1000px) { .of-layout { grid-template-columns: minmax(0, 1fr) 380px; } .of-aside { position: sticky; top: 20px; } .of-jump { display: none; } }
.of-form { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.of-jump { font-size: 14px; font-weight: 700; }
.of-stack { display: flex; flex-direction: column; gap: 18px; }
.of-stack > .field + .field { margin-top: 0; }
.of-aside { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.of-aside .pass-wrap { padding: 4px 0; }
.of-aside .pass { max-width: 360px; }
.of-tabs { display: flex; flex-wrap: wrap; gap: 8px; }
.of-tabs[hidden], .of-card[hidden], .of-ms-row[hidden], .of-js-only[hidden] { display: none; }
.of-tab { min-height: 44px; padding: 0 16px; border: 1.5px solid var(--rule); border-radius: 999px; background: transparent; color: var(--ink); font: 700 14px/1 var(--font); cursor: pointer; }
.of-tab[aria-selected="true"] { background: var(--ink); border-color: var(--ink); color: var(--paper); }
.of-choice { border: 0; margin: 0; padding: 0; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.of-choice > legend { padding: 0; margin-bottom: 4px; font-size: 14px; font-weight: 700; }
.of-other { margin-top: 8px; padding-left: 4px; }
.of-ms-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; padding: 10px 0; border-top: 1.5px dashed var(--rule); }
.of-ms-lbl { font-size: 14px; font-weight: 700; }
.of-ms-row input { width: auto; }
.of-ms-at { width: 5.5rem !important; }
.of-ms-name { flex: 1 1 8rem; min-width: 7rem; width: auto !important; }
.of-ms-val { width: 7.5rem !important; }
.of-form:not(.of-js) .of-js-only { display: none; }
.of-summary { display: flex; flex-direction: column; gap: 12px; }
.of-problem { margin: 0; }
.of-save { display: flex; flex-wrap: wrap; gap: 12px; }
@media (max-width: 600px) { .of-ms-name, .of-ms-at, .of-ms-val { flex: 1 1 100%; width: 100% !important; } }
.of-stack .field-row > .field { flex: 1 1 9rem; }
.of-choice:has(input[value="same"]:checked) .of-other { opacity: 0.45; }

/* ---- site.css ---- */
/* site area: public venue page (/v/:slug), venue sign-up / log-in / check your inbox. */

/* ---------- public venue page (phone shell) ---------- */
.pv { display: flex; flex-direction: column; gap: 20px; }
.pv > .card, .pv > section { margin: 0; }
.pv .card::before { opacity: 0.4; }
.pv-head { padding: 0; overflow: hidden; background: var(--paper); }
.pv-hero { position: relative; height: 150px; background: var(--hero-bg, var(--sun)); overflow: hidden; }
.pv-hero .pv-tex { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; mix-blend-mode: multiply; opacity: 0.4; }
.pv-hero .pv-cup { position: absolute; right: 38px; top: 26px; height: 100px; width: auto; transform: rotate(6deg); }
.pv-hero .pv-star-1 { position: absolute; left: 34px; top: 30px; width: 30px; transform: rotate(14deg); }
.pv-hero .pv-star-2 { position: absolute; left: 96px; top: 88px; width: 20px; transform: rotate(-10deg); }
.pv-photo { display: block; width: 100%; height: 100%; object-fit: cover; }
.pv-id { position: relative; display: flex; align-items: center; gap: 14px; padding: 16px 20px 18px; }
.pv-logo { flex: none; width: 52px; height: 52px; border-radius: 14px; object-fit: contain; background: #fff; }
.pv-mono { flex: none; width: 52px; height: 52px; border-radius: 14px; background: var(--hero-bg, var(--sun)); color: var(--hero-fg, var(--ink)); display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 800; }
.pv-id h1 { margin: 0; font-size: 28px; line-height: 1.1; overflow-wrap: anywhere; }
.pv-id .pv-addr { display: block; margin-top: 2px; font-size: 14px; font-weight: 500; color: var(--ink-soft); }
.pv-about { margin: 0; padding: 0 20px 18px; position: relative; }
.pv-offer { padding: 24px 22px 20px; }
.pv-offer .pv-in { display: flex; flex-direction: column; gap: 14px; }
.pv-offer .pv-line { margin: 4px 0 0; font-size: 24px; font-weight: 800; line-height: 1.25; }
.pv-offer .pv-desc { margin: 6px 0 0; color: var(--ink-soft); line-height: 24px; }
.pv-offer h2 { margin: 0; font-size: 18px; line-height: 24px; }
.pv-offer p { margin: 0; }
.pv-block { border-top: 1.5px dashed var(--rule); padding-top: 14px; }
.pv-block p { margin: 4px 0 0; line-height: 24px; }
.pv-nums { display: flex; border-top: 1.5px dashed var(--rule); border-bottom: 1.5px dashed var(--rule); }
.pv-nums > div { flex: 1; min-width: 0; padding: 12px 0 12px 14px; border-left: 1.5px dashed var(--rule); }
.pv-nums > div:first-child { padding-left: 0; border-left: 0; }
.pv-nums .n { display: block; font-size: 30px; font-weight: 800; line-height: 34px; font-variant-numeric: tabular-nums; }
.pv-nums .l { display: block; font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-soft); }
.pv-join { display: flex; align-items: center; gap: 14px; }
.pv-join img { flex: none; height: 54px; width: auto; transform: rotate(-5deg); }
.pv-join h2 { margin: 0; }
.pv-join p { margin: 2px 0 0; }
.pv-offer .pv-join-note { padding-left: 68px; transform: rotate(-2deg); transform-origin: left center; margin: -4px 0 0; font-family: var(--hand); font-size: 18px; font-weight: 600; line-height: 22px; color: var(--note); }

.pv-map { display: flex; flex-direction: column; gap: 10px; }
.pv-map-art { position: relative; height: 170px; border-radius: var(--r-lg); overflow: hidden; background: var(--sheet); box-shadow: var(--shadow); }
.pv-map-art i { position: absolute; display: block; }
.pv-map-art .road-1 { left: -20px; top: 74px; width: 440px; height: 22px; background: var(--paper); transform: rotate(-8deg); }
.pv-map-art .road-2 { left: 150px; top: -30px; width: 20px; height: 260px; background: var(--paper); transform: rotate(12deg); }
.pv-map-art .blk-1 { left: 252px; top: 112px; width: 90px; height: 40px; background: var(--butter); border-radius: 10px; transform: rotate(-8deg); }
.pv-map-art .blk-2 { left: 22px; top: 16px; width: 80px; height: 42px; background: var(--butter); border-radius: 10px; transform: rotate(-8deg); }
.pv-map-art .blk-3 { left: 24px; top: 112px; width: 90px; height: 36px; background: var(--dim); border-radius: 10px; transform: rotate(-8deg); }
.pv-map-art .pin { position: absolute; left: 166px; top: 24px; height: 98px; width: auto; }
.pv-map-art .lab { position: absolute; left: 14px; bottom: 10px; max-width: calc(100% - 28px); font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-soft); }
.pv-map .btn { width: 100%; min-height: 48px; }

.pv-top { padding: 24px 22px 12px; }
.pv-top h2 { margin: 0; font-size: 24px; line-height: 30px; }
.pv-tabs { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 8px; }
.pv-tab { display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px; border-radius: 999px; border: 1.5px solid var(--rule); background: transparent; font-size: 15px; font-weight: 700; text-decoration: none; color: var(--ink); }
.pv-tab:hover { border-color: var(--ink-soft); }
.pv-tab[aria-current] { background: var(--sun); border-color: var(--ink); }
.pv-top .none { margin: 12px 0; color: var(--ink-soft); }
.pv-rank { margin: 8px 0 0; padding: 0; list-style: none; }
.pv-rank li { display: flex; align-items: center; gap: 12px; min-height: 60px; border-bottom: 1.5px dashed var(--rule); }
.pv-rank li:last-child { border-bottom: 0; }
.pv-rank .r { flex: none; width: 24px; text-align: right; font-size: 18px; font-weight: 800; }
.pv-rank strong { font-size: 16px; font-weight: 700; min-width: 0; overflow-wrap: anywhere; }
.pv-rank .c { margin-left: auto; padding-left: 8px; text-align: right; font-size: 14px; font-weight: 600; color: var(--ink-soft); }
.pv-all { display: flex; align-items: center; justify-content: center; min-height: 48px; font-size: 16px; font-weight: 700; }

/* ---------- leaderboards (site shell) ---------- */

/* ---------- sign-up / log-in / check your inbox (site shell, header trimmed) ---------- */
.site-wrap:has(.ac) .site-head nav, .site-wrap:has(.ac) .site-foot { display: none; }
.ac { display: flex; flex-direction: column; gap: 36px; padding-top: 12px; }
.ac-switch { display: flex; justify-content: flex-end; }
@media (min-width: 700px) { .ac-switch { position: absolute; right: 24px; top: 20px; } }
.ac-grid { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 48px 56px; }
.ac-grid.mid { align-items: center; gap: 40px 64px; }
.ac-pitch { flex: 1 1 420px; min-width: 0; display: flex; flex-direction: column; gap: 22px; padding-top: 8px; }
.ac-pitch h1 { margin: 0; max-width: 560px; font-size: clamp(36px, 7vw, 52px); line-height: 1.08; letter-spacing: -0.02em; }
.ac-pitch .lede { margin: 0; max-width: 520px; font-size: 19px; line-height: 1.45; }
.ac-points { max-width: 520px; margin: 4px 0 0; padding: 0; list-style: none; border-bottom: 1.5px dashed var(--rule); }
.ac-points li { display: flex; align-items: center; gap: 16px; padding: 14px 0; border-top: 1.5px dashed var(--rule); }
.ac-points img { flex: none; width: 44px; height: auto; transform: rotate(-4deg); }
.ac-points li:nth-child(2) img { transform: rotate(3deg); }
.ac-points li:nth-child(3) img { transform: rotate(-2deg); }
.ac-points b { display: block; font-size: 17px; font-weight: 800; }
.ac-points span { display: block; font-size: 15px; line-height: 1.4; color: var(--ink-soft); }
.ac-formcol { flex: 1 1 400px; max-width: 520px; min-width: 0; display: flex; flex-direction: column; gap: 14px; padding-top: 24px; }
.ac-grid.mid .ac-formcol { padding-top: 0; }
.ac-stack { position: relative; }
.ac-stack .stack-cards { margin-bottom: 20px; }
.ac-stack .card { padding: 28px; border-radius: var(--r-lg); }
.ac-stack .card.big { padding: 32px 28px 28px; }
.ac-stack .bear-apron { position: absolute; right: -8px; top: -112px; width: 150px; height: auto; transform: rotate(5deg); z-index: 0; pointer-events: none; }
@media (min-width: 700px) { .ac-stack .bear-apron { right: -28px; top: -118px; } }
.ac-form { display: flex; flex-direction: column; gap: 16px; }
.ac-form > * { margin: 0; }
.ac-form h1 { font-size: 40px; line-height: 44px; letter-spacing: -0.02em; }
.ac-form h2 { margin: 0; font-size: 26px; line-height: 30px; }
.ac-form .lede { font-size: 17px; line-height: 1.45; }
.ac-form .field + .field { margin-top: 0; }
.ac-form .note-wrap { margin: 0 0 -4px; min-height: 54px; }
.ac-form .note-wrap .note { margin-left: 4px; }
.ac-alt { margin: 28px 0 0; font-size: 15px; color: var(--ink-soft); }
.ac-alt a { font-weight: 700; }
.ac-art { flex: 1 1 280px; min-width: 0; display: flex; justify-content: center; }
.ac-art img { width: 100%; max-width: 380px; height: auto; transform: rotate(-3deg); }
.ac-art img.bob { animation: ac-bob 3.2s ease-in-out infinite; }
@keyframes ac-bob { 0%, 100% { transform: rotate(-3deg) translateY(0); } 50% { transform: rotate(-3deg) translateY(-8px); } }
.ac-mailnote { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-radius: var(--r-md); background: var(--butter); font-size: 15px; line-height: 1.4; font-weight: 600; }
.ac-mailnote img { flex: none; width: 34px; height: auto; }
.ac-links { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 20px; padding-top: 6px; border-top: 1.5px dashed var(--rule); }
.ac-links a { display: inline-flex; align-items: center; min-height: 44px; font-size: 15px; font-weight: 700; }

.pv-oneoffer { display: flex; flex-direction: column; gap: 14px; }
.pv-oneoffer + .pv-oneoffer { border-top: 1.5px dashed var(--rule); padding-top: 14px; }
.pv-oneoffer .pv-block { margin-top: 2px; }

/* card holders on the log-in page and /me: the Wallet card's link signs them in (Chris, 2026-10-12) */
.ac-member { margin-top: 22px; padding: 18px 20px; border-radius: var(--r-lg); background: var(--paper); box-shadow: var(--shadow-sm); }
.ac-member h2 { margin: 0 0 6px; font-size: 20px; }
.ac-member p { margin: 0 0 8px; color: var(--ink-soft); font-weight: 600; }
.ac-member ol { margin: 0; padding-left: 20px; display: grid; gap: 6px; font-size: 15.5px; }
.ac-member .btn { margin-top: 4px; }
.cu-me-help { max-width: 460px; margin: 24px auto; display: grid; justify-items: center; gap: 6px; }
.cu-me-help .ac-member { width: 100%; margin-top: 4px; }

/* ---- staff.css ---- */
/* Staff counter screens (src/pages/staff.tsx). Phone only. Classes are prefixed st-. */

/* ---------- hero zone: venue line, big headline, art on the right ---------- */
.st-hero { position: relative; z-index: 3; height: 176px; flex: none; margin-bottom: 4px; }
.st-eyebrow { display: block; font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); }
.st-hero h1 { position: absolute; left: 0; top: 24px; margin: 0; max-width: 60%; overflow-wrap: anywhere; font-size: 33px; line-height: 1.06; letter-spacing: -0.01em; }
.st-hero .bear { position: absolute; right: -10px; top: 4px; height: auto; max-width: none; }
.st-hero .d1, .st-hero .d2 { position: absolute; height: auto; max-width: none; }

.st-hero-wallet .d1 { left: 96px; top: 118px; width: 52px; transform: rotate(-6deg); }
.st-hero-venue { height: 150px; }
.st-hero-venue .d1 { left: 100px; top: 100px; width: 36px; transform: rotate(8deg); }
.st-hero-venue .d2 { left: 18px; top: 112px; width: 30px; transform: rotate(14deg); }
.st-hero-venue .bear { width: 150px; top: 0; }
.st-hero-ended { height: 164px; }
.st-hero-ended .d1 { left: 0; top: 118px; width: 44px; transform: rotate(-6deg); }
.st-hero-nothing { height: 164px; }
.st-hero-nothing .d1 { left: 4px; top: 124px; width: 30px; transform: rotate(14deg); }
.st-hero-nothing .bear { width: 150px; right: 6px; }
.st-hero-unknown { height: 176px; }
.st-hero-unknown .d1 { left: 4px; top: 124px; width: 60px; transform: rotate(-6deg); }
.st-hero-out { height: 196px; }
.st-hero-out h1 { font-size: 36px; }
.st-hero-out .d1 { position: absolute; left: 4px; top: 150px; width: 56px; height: 56px; border-radius: 50%; background: var(--sun); display: flex; align-items: center; justify-content: center; transform: rotate(-6deg); }
.st-hero-out .d1 img { width: 30px; height: auto; }

.st-hero-home { height: 164px; }
.st-hero-home h1 { top: 18px; font-size: 42px; max-width: 200px; overflow-wrap: anywhere; }
.st-hero-home .bear { width: 164px; }
.st-home-note { position: absolute; left: 4px; top: 82px; z-index: 4; }
.st-home-note .note-wrap { margin: 0; }
.st-home-note .note-wrap .mark { margin-left: 120px; width: 17px; }

.st-hero-done { height: 150px; }
.st-hero-done .st-stamp { position: absolute; left: 0; top: 14px; transform: rotate(-3deg); font-size: 14px; padding: 5px 14px; }
.st-hero-done .d1 { left: 4px; top: 70px; width: 60px; transform: rotate(-6deg); }
.st-hero-done .d2 { left: 96px; top: 96px; width: 28px; transform: rotate(14deg); }
.st-hero-done .bear { width: 170px; right: -6px; top: -4px; }

.st-hero-guide { height: 188px; }
.st-hero-guide h1 { top: 64px; font-size: 40px; line-height: 1.04; }
.st-hero-guide .st-eyebrow { position: absolute; left: 0; top: 46px; }
.st-hero-guide .bear { width: 188px; top: 6px; }
.st-guide-note { position: absolute; left: 4px; top: 156px; }
.st-guide-note .note-wrap { margin: 0; }
.st-counter { display: inline-flex; align-items: center; gap: 4px; min-height: 44px; margin-left: -8px; padding: 0 12px 0 8px; color: var(--ink); font-size: 15px; font-weight: 700; text-decoration: none; }
.st-hero-guide .st-counter { position: absolute; left: -8px; top: -8px; margin: 0; }

/* ---------- who is this / venue comparison / explanation ---------- */
.st-who { position: relative; z-index: 4; display: flex; align-items: center; gap: 14px; background: var(--paper); border-radius: 22px; padding: 10px 16px 10px 10px; box-shadow: var(--shadow); }
.st-face { flex: none; display: block; object-fit: cover; background: var(--butter-soft); }
.st-face-row { width: 60px; height: 60px; border-radius: 50%; }
.st-initial { display: flex; align-items: center; justify-content: center; font-weight: 800; color: var(--ink); }
.st-face-row.st-initial { font-size: 26px; }
.st-who-txt { flex: 1; min-width: 0; }
.st-who-txt b { display: block; font-size: 22px; font-weight: 800; line-height: 26px; overflow-wrap: anywhere; }
.st-who-txt span { display: block; font-size: 13px; font-weight: 600; line-height: 18px; color: var(--ink-soft); }

.st-explain { margin-top: 14px; display: flex; flex-direction: column; gap: 12px; }
.st-happened { display: flex; align-items: flex-start; gap: 12px; background: var(--rust-tint); border-radius: 20px; padding: 14px 16px; }
.st-happened img { flex: none; margin-top: 2px; height: auto; }
.st-happened p { margin: 0; font-size: 15px; font-weight: 600; line-height: 21px; color: var(--ink); }
.st-happened b { display: block; font-size: 18px; font-weight: 800; line-height: 24px; color: var(--rust); }
.st-inline { margin-top: 4px; }

.card.st-say { padding: 16px 20px 18px; transform: rotate(-0.4deg); }
.st-say-lbl { display: block; font-size: 12px; font-weight: 800; letter-spacing: 0.1em; line-height: 16px; color: var(--ink-soft); }
.st-say p { margin: 6px 0 0; font-size: 20px; font-weight: 700; line-height: 27px; letter-spacing: -0.005em; color: var(--ink); overflow-wrap: anywhere; }

.card.st-compare { padding: 6px 20px; margin-top: 4px; }
.st-compare > div { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 64px; }
.st-compare > div + div { border-top: 1.5px dashed var(--rule); }
.st-compare span { font-size: 12px; font-weight: 800; letter-spacing: 0.1em; color: var(--ink-soft); }
.st-compare b { border-radius: 999px; padding: 5px 14px; font-size: 17px; font-weight: 800; line-height: 22px; text-align: right; overflow-wrap: anywhere; }
.st-pill-rust { background: var(--rust-tint); color: var(--rust); }
.st-pill-ink { background: var(--ink); color: var(--cream); }

.card.st-steps { padding: 8px 20px; }
.st-steps > div { display: flex; align-items: center; gap: 14px; min-height: 72px; }
.st-steps > div + div { border-top: 1.5px dashed var(--rule); }
.st-steps img { height: 36px; width: 30px; object-fit: contain; flex: none; }
.st-steps span { font-size: 16px; font-weight: 600; line-height: 22px; }

/* ---------- bottom action area ---------- */
.st-bottom { display: flex; flex-direction: column; gap: 4px; padding-top: 16px; }
.st-bottom .note-wrap { margin: 0 0 0 6px; }
.st-bottom .btn-big, .st-actions .btn-big { gap: 10px; }
.st-actions { display: flex; flex-direction: column; gap: 8px; padding-top: 18px; }
.st-actions .btn-big { justify-content: center; }
.st-redeem { margin: 0; }
.st-redeem .btn { justify-content: center; text-align: left; }
.st-extra { font-size: 15px; font-weight: 600; }
.st-back { min-height: 46px; font-size: 16px; }
.st-bottom .st-back { margin-top: 8px; }

/* ---------- scan screen ---------- */
.st-top { position: relative; min-height: 64px; flex: none; }
.st-top .st-counter { position: absolute; left: -8px; top: -8px; margin: 0; }
.st-top .st-eyebrow { position: absolute; left: 8px; top: 38px; }
.st-check { position: absolute; right: 0; top: -6px; }
.st-check .note-wrap { margin: 0; }
.st-check .note { font-size: 18px; transform: rotate(2deg); }

.stack-cards.peeks-2 .st-member { padding: 14px 14px 16px; }
.st-photo { height: 276px; border-radius: 22px; overflow: hidden; background: var(--butter-soft); display: flex; align-items: center; justify-content: center; }
.st-face-big { width: 100%; height: 100%; }
.st-face-big.st-initial { font-size: 110px; }
.st-compact .st-photo { height: 190px; }
.st-id { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 6px 0; }
.st-id h1 { margin: 0; font-size: 36px; line-height: 40px; letter-spacing: -0.01em; overflow-wrap: anywhere; min-width: 0; }

.st-asks { display: flex; flex-direction: column; gap: 10px; margin-top: 30px; }
.st-ask { gap: 12px; }
.st-ask-main { flex: 1; min-width: 0; }
.st-ask-main .big { overflow-wrap: anywhere; }
.st-ask-side { text-align: right; flex: none; max-width: 48%; }
.st-ask-side .circled { font-size: 19px; font-weight: 800; line-height: 28px; padding: 0 20px; white-space: nowrap; }
.st-ask-side .circled > .mark { top: -10px; height: 48px; width: calc(100% + 16px); left: -8px; }
.st-ask-side > span { display: block; margin-top: 6px; font-size: 13px; font-weight: 700; line-height: 16px; color: var(--ink-soft); }

/* ---------- home ---------- */
.st-howto { position: relative; z-index: 4; display: flex; align-items: center; gap: 14px; background: var(--butter-soft); border-radius: 20px; padding: 12px 16px 12px 10px; color: var(--ink); text-decoration: none; transform: rotate(-0.6deg); box-shadow: 0 1px 0 rgba(42,36,22,.06), 0 8px 18px rgba(42,36,22,.1); min-height: 44px; }
.st-howto img { flex: none; height: auto; transform: rotate(-3deg); }
.st-howto > span { flex: 1; font-size: 14px; font-weight: 500; line-height: 19px; color: #4a3f28; }
.st-howto b { display: block; font-size: 17px; font-weight: 800; line-height: 22px; color: var(--ink); }
.st-howto svg { flex: none; }

.card.st-today { margin-top: 14px; padding: 20px 20px 8px; }
.st-today h2 { margin: 0; font-size: 18px; line-height: 24px; }
.st-loc h3 { margin: 12px 0 0; font-size: 14px; color: var(--ink-soft); }
.st-tiles { display: flex; gap: 10px; margin-top: 10px; }
.st-tile { flex: 1; box-sizing: border-box; background: var(--paper); border: 1.5px solid var(--rule); border-radius: 16px; padding: 7px 14px; transform: rotate(0.8deg); }
.st-tile-mine { background: var(--butter); border: 0; padding: 8px 14px; transform: rotate(-1deg); }
.st-tile .num { display: block; font-size: 38px; font-weight: 800; line-height: 40px; font-variant-numeric: tabular-nums; }
.st-tile .lbl { display: block; line-height: 16px; }
.st-tile-mine .lbl { color: var(--ink); }
.st-none { margin: 14px 0 12px; }
.st-recent { list-style: none; margin: 8px 0 0; padding: 0; }
.st-recent li { display: flex; align-items: center; gap: 12px; min-height: 44px; border-top: 1.5px dashed var(--rule); }
.st-recent li:first-child { border-top: 0; }
.st-recent time { width: 44px; flex: none; font-size: 14px; font-weight: 600; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.st-recent-who { flex: 1; min-width: 0; display: flex; flex-direction: column; font-size: 16px; }
.st-recent-who strong { font-weight: 700; overflow-wrap: anywhere; }
.st-recent-who .muted { font-size: 13px; }
.st-kind { font-size: 13px; font-weight: 600; color: var(--ink-soft); }
.st-kind-reward { background: var(--sun); color: var(--ink); border-radius: 999px; padding: 2px 10px; font-size: 12px; font-weight: 700; }

.st-foot { display: flex; gap: 10px; padding-top: 18px; }
.st-foot > * { flex: 1; margin: 0; }
.st-foot .btn { width: 100%; min-height: 48px; font-size: 16px; background: transparent; }

/* ---------- guide ---------- */
.st-guide { display: flex; flex-direction: column; gap: 18px; }
.st-lead { margin: 0; font-size: 16px; line-height: 22px; }
.card.st-sec { padding: 20px 20px 12px; margin-top: 0; }
.st-sec h2 { margin: 0 0 6px; font-size: 20px; }
.st-h2-ico { display: flex; align-items: center; gap: 10px; }
.st-h2-ico img { flex: none; height: auto; }
.st-steplist, .st-faq, .st-stars { list-style: none; margin: 0; padding: 0; }
.st-steplist li { display: flex; align-items: center; gap: 14px; min-height: 60px; padding: 6px 0; border-top: 1.5px dashed var(--rule); }
.st-steplist li:first-child { border-top: 0; }
.st-steplist img { height: 36px; width: 30px; object-fit: contain; flex: none; }
.st-steplist span { font-size: 16px; font-weight: 500; line-height: 22px; }
.st-faq li { display: flex; flex-direction: column; gap: 2px; padding: 12px 0; border-top: 1.5px dashed var(--rule); }
.st-faq li:first-child { border-top: 0; }
.st-faq b { font-size: 16px; font-weight: 800; }
.st-faq span { font-size: 15px; line-height: 21px; color: var(--ink-soft); }
.st-faq .st-never { font-weight: 700; }
.st-faq .st-never span { color: var(--ink); font-size: 16px; }
.st-stars li { display: flex; align-items: flex-start; gap: 12px; padding: 10px 0; border-top: 1.5px dashed var(--rule); }
.st-stars li:first-child { border-top: 0; }
.st-stars img { flex: none; height: auto; margin-top: 1px; }
.st-stars span { font-size: 15px; line-height: 21px; }

@media print {
  .st-hero .bear { display: none; }
}

/* ---- venue.css ---- */
/* Venue dashboard + setup wizard (src/pages/dashboard.tsx). Everything here is page specific; the design system is app.css. */

/* ---------- shared bits ---------- */
.v-cols { display: grid; gap: 24px; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 1100px) { .v-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.v-lead { margin: 0; max-width: 46rem; color: var(--ink-soft); font-weight: 500; }
.v-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.v-actions form { margin: 0; }
.v-row-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px; }
.v-row-form .field { flex: 1 1 14rem; margin-top: 0; }
.v-row-form .field + .field { margin-top: 0; }
.field-row { display: flex; flex-wrap: wrap; gap: 16px; }
.field-row > .field { flex: 1 1 12rem; margin-top: 0; }
.field-row + .field, .field + .field-row { margin-top: 18px; }
.field-row > .field + .field { margin-top: 0; }
.v-name { display: inline-flex; align-items: center; gap: 12px; font-weight: 700; text-decoration: none; }
.v-ini { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; background: var(--sun); font-size: 15px; font-weight: 800; color: var(--ink); }
.v-sub { display: block; font-size: 13px; font-weight: 500; color: var(--ink-soft); }
.v-note-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; }
.v-saved { font-size: 14px; font-weight: 700; color: var(--go); }
.copy-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.copy-row .mono { flex: 1 1 14rem; padding: 10px 14px; background: var(--cream); border: 1.5px dashed var(--rule); border-radius: var(--r-sm); }
.tabs-search { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; }
.tabs-search .tabs { flex: 1 1 auto; }
.search-form { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0; }
.search-form input[type="search"] { width: min(100%, 18rem); min-height: 44px; }
.table-wrap.bare { margin-top: 8px; }
.table td .v-name { font-weight: 700; }
.table td .v-name .avatar { width: 32px; height: 32px; }
.v-link-clean { text-decoration: none; }
details.confirm { display: block; }
details.confirm > summary { list-style: none; cursor: pointer; display: inline-flex; }
details.confirm > summary::-webkit-details-marker { display: none; }
details.confirm[open] > summary { display: none; }
details.confirm .confirm-body { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
details.confirm .confirm-body p { margin: 0; font-weight: 600; flex: 1 1 16rem; }
details.confirm .confirm-body form { margin: 0; }
.meter { height: 10px; border-radius: 999px; background: var(--dim); overflow: hidden; }
.meter > i { display: block; height: 100%; background: var(--sun); border-radius: 999px; }

/* ---------- locations list ---------- */
.first-run { display: flex; flex-wrap: wrap; align-items: center; gap: 24px 32px; }
.first-run .bear { flex: none; width: 160px; height: auto; }
.first-run .body { flex: 1 1 20rem; min-width: 0; }
.first-steps { display: flex; flex-wrap: wrap; gap: 8px 20px; margin: 16px 0 12px; }
.first-steps > div { display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 13px; font-weight: 600; color: var(--ink-soft); }
.first-steps img { height: 40px; width: auto; }

/* ---------- wizard ---------- */
.wiz-rail { display: flex; }
.wiz-body { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 40px 36px; }
.wiz-form { flex: 1 1 480px; max-width: 600px; min-width: 0; }
.wiz-form .stack-cards { margin-bottom: 20px; }
.wiz-form .card { padding: 28px; }
.wiz-preview { flex: 1 1 340px; max-width: 460px; min-width: 0; display: flex; flex-direction: column; gap: 16px; }
.wiz-inner { display: flex; flex-direction: column; gap: 18px; }
.wiz-inner > * { margin-top: 0; margin-bottom: 0; }
.wiz-inner h1 { font-size: 34px; line-height: 1.1; margin: 6px 0 12px; }
.wiz-inner .stack > .v-lead { margin-top: 0; }
.wiz-inner .field + .field { margin-top: 0; }
.wiz-inner .note-wrap { margin: 0 0 -6px; }
.wiz-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding-top: 18px; border-top: 1.5px dashed var(--rule); }
.wiz-foot .grow { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; }
.wiz-foot form { margin: 0; }
.wiz-foot a:not(.btn) { font-weight: 700; }
.preview-lbl { font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); }
.wiz-note-line { font-size: 14px; color: var(--ink-soft); margin: 0; }

/* the public page / card preview shown beside the wizard form */
.wpv-url { font-size: 13px; font-weight: 600; color: var(--ink-soft); word-break: break-all; }
.wpv { position: relative; isolation: isolate; background: var(--paper); border-radius: var(--r-lg); box-shadow: var(--shadow); overflow: hidden; }
.wpv-photo { height: 150px; background: var(--butter-soft); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; font-size: 13px; font-weight: 600; color: var(--ink-soft); text-align: center; padding: 8px; }
.wpv-photo img.cover { width: 100%; height: 100%; object-fit: cover; display: block; }
.wpv-photo img.ico { width: 34px; height: auto; }
.wpv-body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 10px; }
.wpv-head { display: flex; align-items: center; gap: 12px; }
.wpv-logo { flex: none; width: 44px; height: 44px; border-radius: 12px; background: var(--sun); display: flex; align-items: center; justify-content: center; font-weight: 800; overflow: hidden; }
.wpv-logo img { width: 100%; height: 100%; object-fit: contain; background: #fff; }
.wpv-body h2 { margin: 0; font-size: 22px; overflow-wrap: anywhere; }
.wpv-addr { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--ink-soft); }
.wpv-addr img { width: 14px; height: auto; flex: none; }
.wpv-desc { margin: 0; font-size: 15px; overflow-wrap: anywhere; }
.wpv-offer { margin-top: 4px; padding: 12px 14px; border-radius: var(--r-sm); background: var(--butter-soft); display: flex; flex-direction: column; gap: 2px; }
.wpv-offer b { font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); }
.wpv-offer span { font-size: 15px; font-weight: 600; }
.wpv-map { display: flex; align-items: center; gap: 14px; padding: 12px 14px; border-radius: var(--r-sm); background: var(--go-tint); color: var(--go); font-size: 14px; font-weight: 700; }
.wpv-map.none { background: var(--sheet); color: var(--ink-soft); }
.wpv-map img { width: 36px; height: auto; flex: none; }

/* image upload slots */
.img-slot { display: flex; flex-wrap: wrap; align-items: stretch; gap: 16px; }
.img-slot + .img-slot { margin-top: 22px; }
.img-cur { flex: 0 0 auto; min-width: 96px; min-height: 96px; max-width: 100%; border: 1.5px dashed var(--rule); border-radius: var(--r-md); background: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 8px; font-size: 12px; font-weight: 600; color: var(--ink-soft); text-align: center; }
.img-cur img { display: block; border-radius: 10px; }
.img-cur img.logo { width: 80px; height: 80px; object-fit: contain; background: #fff; }
.img-cur img.banner { width: 200px; max-width: 100%; height: auto; }
.dz { flex: 1 1 14rem; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; padding: 14px 16px; border: 1.5px dashed var(--ink-soft); border-radius: var(--r-md); background: var(--cream); cursor: pointer; font-size: 14px; font-weight: 500; color: var(--ink-soft); }
.dz:hover { background: var(--butter-soft); }
.dz img { width: 26px; height: auto; flex: none; }
.dz .t { flex: 1 1 10rem; display: flex; flex-direction: column; gap: 2px; }
.dz .t b { font-size: 15px; font-weight: 700; color: var(--ink); }
.dz input[type="file"] { flex: 1 1 100%; font-size: 14px; }
.img-lbl { display: block; margin-bottom: 8px; font-size: 14px; font-weight: 700; }

/* map pin */
.map-form .map-find { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; }
.map-form .map-find .field { flex: 1 1 14rem; }
#pinmap { height: 320px; border-radius: var(--r-md); border: 1.5px solid var(--rule); margin: 14px 0 8px; z-index: 0; }
.map-form .map-foot { margin-top: 16px; }

/* card colours */
.presets { display: flex; flex-wrap: wrap; gap: 8px; }
.presets .btn { min-height: 44px; padding: 0 16px; border-width: 2px; font-size: 14px; border-radius: var(--r-sm); }
.pickers { display: flex; flex-wrap: wrap; gap: 14px 24px; }
.picker { display: flex; flex-direction: column; gap: 6px; }
.picker label { font-size: 14px; font-weight: 700; }
.picker .pk { display: flex; align-items: center; gap: 10px; }
.picker .hex { font-size: 14px; font-weight: 600; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--ink-soft); }
.contrast { display: flex; flex-direction: column; border: 1.5px dashed var(--rule); border-radius: var(--r-sm); padding: 4px 14px; }
.contrast > div { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 12px; padding: 8px 0; font-size: 14px; font-weight: 600; }
.contrast > div + div { border-top: 1.5px dashed var(--rule); }
.contrast .ok { color: var(--go); font-weight: 800; }
.contrast .bad { color: var(--rust); font-weight: 800; }
.pass-wrap { display: flex; justify-content: center; padding: 8px 0; }
.pass-wrap .pass { width: 100%; }

/* go live checklist */
.checklist { list-style: none; margin: 0; padding: 0; }
.checklist > li { display: flex; align-items: center; gap: 14px; min-height: 56px; border-top: 1.5px dashed var(--rule); font-weight: 700; }
.checklist > li:first-child { border-top: 0; }
.checklist img { width: 28px; height: auto; flex: none; }
.checklist .st { margin-left: auto; font-size: 13px; font-weight: 700; color: var(--ink-soft); }
.checklist .st.need { color: var(--rust); }
.checklist a { font-weight: 700; }

/* live page */
.first-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.first-list > li { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 20px; padding: 16px 0; border-top: 1.5px dashed var(--rule); }
.first-list > li:first-child { border-top: 0; }
.first-list .what { display: flex; align-items: flex-start; gap: 14px; flex: 1 1 18rem; min-width: 0; }
.first-list .what img { height: 40px; width: auto; flex: none; }
.first-list .what b { display: block; font-size: 17px; font-weight: 800; }
.first-list .what span { display: block; font-size: 14px; color: var(--ink-soft); font-weight: 500; }
.live-chip { display: flex; align-items: center; gap: 10px; }
.live-aside { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center; }
.live-aside img { width: 220px; height: auto; }
.live-aside p { margin: 0; max-width: 24rem; color: var(--ink-soft); }

/* overview */
.num-grid { display: grid; gap: 24px; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 900px) { .num-grid { grid-template-columns: 260px minmax(0, 1fr); } }
.num-groups { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.num-groups .eyebrow { margin-bottom: 2px; }
.stat-big .num { font-size: 64px; }
.panel-live { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; }
.panel-live p { margin: 0; flex: 1 1 16rem; font-weight: 600; }
.panel-live form { margin: 0; }

/* referral tree */
.tree-legend { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.tree-wrap { overflow-x: auto; padding-bottom: 8px; }
/* --tstep: how far each level steps right; the line drops from under the chevron (11px in) */
.tree { --tstep: 36px; --tline: 26px; }
.tree, .tree ul { list-style: none; margin: 0; padding: 0; }
.tree ul { margin-left: calc(var(--tstep) - var(--tline)); padding-left: var(--tline); }
.tree li { position: relative; padding-top: 10px; }
.tree > ul { margin: 0; padding: 0; }
.tree > ul > li + li { margin-top: 12px; }
.tree > ul > li::before, .tree > ul > li::after { display: none; }
/* each friend draws its own piece of the line: through to the next friend, or (the last one) only down to itself */
.tree ul > li::before { content: ""; position: absolute; left: calc(var(--tline) * -1); top: 34px; width: var(--tline); border-top: 2px dashed var(--rule); }
.tree ul > li::after { content: ""; position: absolute; left: calc(var(--tline) * -1); top: 0; bottom: 0; border-left: 2px dashed var(--rule); }
.tree ul > li:last-child::after { bottom: auto; height: 36px; }
.tree summary { display: flex; align-items: center; gap: 8px; list-style: none; cursor: pointer; }
.tree summary::-webkit-details-marker { display: none; }
.tree-chev { flex: none; width: 22px; height: 22px; border-radius: 50%; background: var(--butter, #ffe48a); position: relative; }
.tree-chev::after { content: ""; position: absolute; left: 7px; top: 6px; width: 6px; height: 6px; border-right: 2px solid var(--ink); border-bottom: 2px solid var(--ink); transform: rotate(-45deg); transition: transform .15s; }
.tree details[open] > summary .tree-chev::after { transform: translate(1px, -1px) rotate(45deg); }
.tree summary:focus-visible { outline: none; }
.tree summary:focus-visible .node { outline: 3px solid var(--ink); outline-offset: 2px; }
.tree-leaf { position: relative; padding-left: 30px; }
.tree-leaf::before { content: ""; position: absolute; left: 0; top: 24px; width: 28px; border-top: 2px dashed var(--rule); }
.tree > ul > li > .tree-leaf::before { display: none; }
.tree-focus { flex: none; font-size: 13px; font-weight: 700; color: var(--ink-soft); padding: 6px 10px; border-radius: 999px; border: 1.5px solid var(--rule); background: var(--paper, #fffdf6); text-decoration: none; }
.tree-focus:hover, .tree-focus:focus-visible { color: var(--ink); border-color: var(--ink-soft); }
.tree-trail { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin: 0 0 14px; font-size: 14.5px; }
.tree-trail a { font-weight: 600; color: var(--ink-soft); }
.tree-trail span { color: var(--ink-soft); }
@media (max-width: 600px) {
  .tree { --tstep: 22px; --tline: 12px; }
  .tree-focus { padding: 5px 8px; font-size: 12px; }
  /* phone: the state chip sits under the name so the summary line gets the width */
  .tree .node { flex: none; display: grid; grid-template-columns: 34px auto minmax(0, 1fr); column-gap: 8px; row-gap: 5px; width: 226px; padding: 8px 10px 8px 8px; }
  .tree .node > .avatar { grid-row: span 2; align-self: start; }
  .tree .node > .nm { grid-column: 2 / -1; }
  .tree .node > .chip { grid-column: 2; justify-self: start; }
  .tree .node > .tree-focus { grid-column: 3; justify-self: start; align-self: center; }
  .tree .node .nm small { white-space: normal; }
}
.node { display: inline-flex; align-items: center; gap: 10px; min-height: 48px; padding: 6px 14px 6px 8px; background: #fff; border: 1.5px solid var(--rule); border-radius: var(--r-md); text-decoration: none; color: var(--ink); }
.node:hover { border-color: var(--ink-soft); background: #fff9e3; }
.node .nm { display: flex; flex-direction: column; min-width: 0; }
.node .nm a { color: inherit; text-decoration: none; }
.node .nm a:hover, .node .nm a:focus-visible { text-decoration: underline; }
.node .nm b { font-size: 15px; font-weight: 700; white-space: nowrap; }
.node .nm small { font-size: 12.5px; font-weight: 500; color: var(--ink-soft); white-space: nowrap; }
.node.n-void, .node.n-expired { background: var(--dim); }

/* invites */
.invite { display: flex; flex-wrap: wrap; gap: 20px 24px; align-items: flex-start; }
.invite .info { flex: 1 1 18rem; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.invite .top { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.invite .top strong { font-size: 19px; font-weight: 800; }
.invite .meta { font-size: 14px; color: var(--ink-soft); font-weight: 500; }
.invite .claims { display: flex; justify-content: space-between; font-size: 13px; font-weight: 700; margin-bottom: 4px; }
.invite-list { display: flex; flex-direction: column; gap: 20px; }
.invite-list > .section + .section { margin-top: 0; }

/* staff / link panels */
.link-panel { display: flex; flex-wrap: wrap; gap: 20px 28px; align-items: flex-start; }
.link-panel .info { flex: 1 1 18rem; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.link-panel h2 { margin: 0; }
.link-panel p { margin: 0; }

/* settings */
.jump-tabs { margin-bottom: 4px; }
.set-grid { display: grid; gap: 28px 32px; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 1000px) { .set-grid { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); align-items: start; } }
.set-head { display: flex; flex-direction: column; gap: 2px; margin-bottom: 14px; }
.set-head h2 { margin: 0; }
.set-head p { margin: 0; color: var(--ink-soft); font-size: 15px; }
.set-head .ico { display: flex; align-items: center; gap: 12px; }
.set-head .ico img { width: 28px; height: auto; }
.set-save { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 18px; }
.set-section { scroll-margin-top: 20px; }
.kv { display: flex; flex-direction: column; }
.kv > div { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 16px; padding: 12px 0; border-top: 1.5px dashed var(--rule); font-weight: 600; }
.kv > div:first-child { border-top: 0; }
.kv > div > span:first-child { font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); }

/* card detail */
.back-link { display: inline-flex; align-items: center; gap: 6px; min-height: 44px; font-size: 14px; font-weight: 700; text-decoration: none; }
.back-link:hover { text-decoration: underline; }
.info-table th { width: 14rem; text-align: left; vertical-align: middle; height: 52px; padding: 6px 8px 6px 0; font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); border-top: 1.5px dashed var(--rule); }
.info-table tr:first-child th, .info-table tr:first-child td { border-top: 0; }
.info-table td { white-space: normal; overflow-wrap: anywhere; }
.fix-block { padding: 4px 0 8px; }
.fix-block + .fix-block { border-top: 1.5px dashed var(--rule); padding-top: 20px; margin-top: 12px; }
.fix-block form > strong, .fix-block > strong { display: block; margin-bottom: 8px; }
.fix-block .field { max-width: 24rem; }

/* poster (screen preview + print) */
.poster-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 20px; }
.poster-bar p { margin: 0; }
.poster-sheet { position: relative; isolation: isolate; width: 100%; max-width: 794px; margin: 0 auto; padding: 48px 48px 36px; background: var(--paper); border-radius: var(--r-lg); box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 22px; text-align: center; }
.poster-sheet::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; background: url("/static/img/paper.jpg") center / cover; mix-blend-mode: multiply; opacity: 0.4; pointer-events: none; }
.poster-sheet .kick { font-size: 15px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-soft); }
.poster-sheet h1 { margin: 0; font-size: clamp(40px, 8vw, 76px); line-height: 1.02; letter-spacing: -0.02em; overflow-wrap: anywhere; }
.poster-sheet .sub { margin: 0 auto; max-width: 34rem; font-size: 20px; font-weight: 600; color: var(--ink-soft); }
.poster-mid { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 20px 32px; }
.poster-qr { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.poster-qr .qr { padding: 18px; border-radius: 24px; border-width: 2px; }
.poster-qr .qr svg { width: min(70vw, 320px); height: auto; }
.poster-qr .cap { font-size: 18px; font-weight: 800; }
.poster-brand { position: absolute; top: 22px; left: 26px; display: inline-flex; align-items: center; gap: 8px; font-size: 17px; font-weight: 800; }
.poster-brand img { width: 40px; height: auto; }
.poster-qr .cap-sub { margin-top: -8px; font-size: 14px; font-weight: 600; color: var(--ink-soft); }
.poster-bear { position: relative; display: flex; flex-direction: column; align-items: center; gap: 4px; }
.poster-bear img.bear { width: 280px; height: auto; }
/* the blank board in bear-poster.webp (553x640): clear of the paws, about x 20-80%, y 62-94% */
.poster-sign { position: absolute; left: 21%; right: 21%; top: 63%; bottom: 8%; display: grid; place-items: center; overflow: hidden; }
.poster-sign img { width: 100%; height: 100%; min-height: 0; object-fit: contain; }
.poster-sign b { font: 800 22px/1.1 var(--font); text-align: center; overflow-wrap: anywhere; }
.poster-steps { list-style: none; margin: 0; padding: 18px 0 0; border-top: 1.5px dashed var(--rule); display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); text-align: center; }
.poster-steps li { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.poster-steps img { height: 46px; width: auto; }
.poster-steps b { font-size: 17px; font-weight: 800; }
.poster-steps span { font-size: 14px; color: var(--ink-soft); font-weight: 500; }
.poster-foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 16px; padding-top: 14px; border-top: 1.5px dashed var(--rule); font-size: 14px; font-weight: 700; color: var(--ink-soft); }
@media (max-width: 600px) { .poster-sheet { padding: 28px 20px; } }
@media print {
  .app-main { padding: 0; gap: 0; }
  .poster-sheet { box-shadow: none; max-width: none; border-radius: 0; break-inside: avoid; }
  .poster-sheet::before { display: none; }
}
.stats-one { display: block; }

/* venue autofill (af-, 2026-10-12): Find your venue + Check your card */
.af-search input { font-size: 18px; }
.af-results { list-style: none; margin: 4px 0 0; padding: 0; display: grid; gap: 6px; }
.af-hit { width: 100%; text-align: left; display: grid; gap: 2px; padding: 12px 14px; border-radius: 14px; border: 1.5px solid var(--rule); background: var(--paper, #fffdf6); cursor: pointer; font: inherit; color: inherit; }
.af-hit:hover, .af-hit:focus-visible { border-color: var(--ink); outline: none; background: #fff6d6; }
.af-hit b { font-size: 16px; }
.af-hit span { font-size: 13.5px; color: var(--ink-soft); }
.af-status { min-height: 1.2em; margin: 0; }
.af-side { align-items: flex-start; }
.af-side .af-bear { height: auto; }
.af-what { margin: 0; padding-left: 20px; display: grid; gap: 8px; color: var(--ink-soft); }
.af-what b { color: var(--ink); }
.af-wait { max-width: 560px; margin: 24px auto; display: grid; justify-items: center; gap: 12px; text-align: center; }
.af-wait h1 { margin: 0; }
.af-wait .af-bear { height: auto; }
/* progress: one bar that keeps moving, and one step at a time (done = tick, now = spinner, to do = faint ring) */
.af-bar { width: min(100%, 420px); height: 12px; margin-top: 4px; border-radius: 999px; background: var(--dim, #efe5c8); overflow: hidden; box-shadow: inset 0 1px 2px rgba(42, 36, 22, .12); }
.af-bar > i { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, #f2a93b, #ffc928); }
.af-steps { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 9px; justify-items: start; }
.af-steps li { position: relative; padding-left: 30px; font-weight: 600; transition: color .3s; }
.af-steps li::before { content: ""; position: absolute; left: 0; top: 2px; width: 18px; height: 18px; border-radius: 50%; box-sizing: border-box; }
.af-steps li.is-todo { color: var(--ink-soft); font-weight: 500; }
.af-steps li.is-todo::before { border: 2px solid var(--rule); }
.af-steps li.is-now { font-weight: 800; }
.af-steps li.is-now::before { border: 3px solid var(--rule); border-top-color: var(--ink); animation: af-spin .9s linear infinite; }
.af-steps li.is-done::before { background: #2f9e44 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8.4l2.6 2.6L12 5.6' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 14px no-repeat; }
@keyframes af-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .af-steps li.is-now::before { animation: none; } }
.af-scribble { position: relative; display: block; width: 170px; aspect-ratio: 632 / 640; }
.af-scribble img { position: absolute; inset: 0; width: 100%; height: auto; opacity: 0; animation: af-scribble .84s steps(1, end) infinite; }
.af-scribble img:nth-child(2) { animation-delay: .21s; }
.af-scribble img:nth-child(3) { animation-delay: .42s; }
.af-scribble img:nth-child(4) { animation-delay: .63s; }
@keyframes af-scribble { 0% { opacity: 1; } 25%, 100% { opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .af-scribble img { animation: none; } .af-scribble img:last-child { opacity: 1; } }
.af-note { margin: 0; padding: 10px 14px; border-radius: 12px; background: var(--butter-soft, #fff0b8); font-size: 14.5px; }
/* upload your own logo: the tile is the file picker */
.af-up { cursor: pointer; }
.af-up .af-file { position: absolute; inset: 0; width: 100%; height: 76px; opacity: 0; cursor: pointer; }
.af-logo.up { border-style: dashed; background: var(--paper, #fffdf6); font: 800 30px/1 var(--font); color: var(--ink-soft); }
.af-logo.up.has { border-style: solid; background: #fff; }
/* the pencil on a logo tile opens the cropper */
.af-tile { position: relative; }
.af-edit { position: absolute; top: -6px; right: -6px; width: 28px; height: 28px; border-radius: 50%; border: 1.5px solid var(--ink); background: var(--paper, #fffdf6); color: var(--ink); display: grid; place-items: center; padding: 0; cursor: pointer; box-shadow: 0 2px 6px rgba(42, 36, 22, .18); z-index: 2; }
.af-edit[hidden] { display: none; }
.af-edit:hover { background: #ffc928; }
/* your own colours, right here */
.af-colours .af-pickers { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 10px; }
.af-pickers label { display: grid; justify-items: center; gap: 4px; font-size: 13px; font-weight: 700; cursor: pointer; }
.af-pickers input[type=color] { width: 56px; height: 44px; padding: 2px; border: 2px solid var(--rule); border-radius: 12px; background: #fff; cursor: pointer; }
.af-cnote { margin: 10px 0 0; padding: 8px 12px; border-radius: 10px; background: var(--rust-tint, #f6dccb); color: var(--rust, #8a3a1e); font-size: 13.5px; font-weight: 600; }
.af-cnote[hidden] { display: none; }
/* More options as sentences with the number in them */
.af-sentences { display: grid; gap: 10px; margin-top: 10px; }
.af-sentence { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; font-size: 15px; font-weight: 600; }
.af-sentence input { width: 72px; min-height: 40px; text-align: center; }
.af-noprice { display: inline-flex; align-items: center; gap: 8px; margin-top: 8px; font-size: 14px; font-weight: 600; cursor: pointer; }
.af-noprice input { width: 18px; height: 18px; accent-color: var(--ink); }
.af-price input[type=number]:disabled { opacity: .45; }
/* Check your card: the preview at each stage */
.af-tabs { margin: 4px 0 10px; }
.af-go { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 14px; }
.af-group { border: 0; margin: 0; padding: 0; display: grid; gap: 8px; min-width: 0; }
.af-group legend { font-weight: 800; font-size: 15px; margin-bottom: 6px; padding: 0; }
.af-tiles, .af-swatches { display: flex; flex-wrap: wrap; gap: 10px; }
.af-tile, .af-sw { position: relative; display: grid; justify-items: center; gap: 4px; cursor: pointer; }
.af-tile input[type=radio], .af-sw input { position: absolute; opacity: 0; pointer-events: none; }
.af-logo { width: 76px; height: 76px; border-radius: 16px; background: #fff; border: 2px solid var(--rule); display: grid; place-items: center; overflow: hidden; }
.af-logo img { width: 100%; height: 100%; object-fit: contain; }
.af-logo.bear { background: #fff6d6; }
.af-logo.bear img { width: 62%; height: auto; }
.af-chip { width: 76px; height: 52px; border-radius: 12px; border: 2px solid var(--rule); display: flex; align-items: center; justify-content: space-between; padding: 0 10px; font-size: 18px; }
.af-chip i { width: 18px; height: 6px; border-radius: 3px; }
.af-tile small, .af-sw small { font-size: 12px; color: var(--ink-soft); text-align: center; max-width: 110px; }
.af-tile input:checked + .af-logo, .af-sw input:checked + .af-chip { border-color: var(--ink); box-shadow: 0 0 0 3px #ffc928; }
.af-tile input:focus-visible + .af-logo, .af-sw input:focus-visible + .af-chip { outline: 3px solid #ffc928; outline-offset: 2px; }
.af-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 150px); gap: 12px; }
.af-more summary { cursor: pointer; font-weight: 600; font-size: 14px; }
.af-more .af-row { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 8px; }
@media (max-width: 560px) { .af-row { grid-template-columns: minmax(0, 1fr); } }
.af-card[hidden] { display: none; }
.poster-sheet:has(.poster-brand) { padding-top: 78px; }
