/* styles/phone-canvas.css — the PHONE Canvas page (6 Oct 2026, src/PhoneCanvas.jsx). Hugo's mockup 12-canvas, MEASURED
   (412 CSS px wide; the spec's element boxes, ours / mockup within 0.95-1.05): ONE glass card (390 wide, 10.8 px
   photo gutters) holds every control - the canvas picker + New canvas; Rename, Delete, Figma | Node; a darker WELL
   with the view bar (Snap, Fit, | − 100% + |, Dark board) over the dot board ("Drag to move • Pinch to zoom"); the
   tools (Images, Text, Arrow, Frame, then Capture past the edge); the style row (font | B I | Box Dashed); a
   hairline; the action tiles (Move, Multi-select, Duplicate, Undo, Remove). The board flexes so the card fits the
   screen (the mockup's 682 px when there is room).
   The desktop CanvasPage renders inside .pcv-board-wrap; its toolbar + key hints are hidden on the phone (the phone
   controls drive them), its board-name panel stays. Phone tier + .pcv-page only; tokens only; corners from the phone
   scale; every control a 40px TAP area (a transparent top + bottom border band, an equal negative margin, an
   elliptical corner R / R + band) while the VISUAL box is the mockup's. */

/* ════════ THE MATERIAL (the mockup's, measured) ════════
   card: deep navy glass, near opaque, a 1px slate rim lit on top; well: a darker recess; board: a lighter solid navy
   with a faint dot grid; controls: solid navy with slate rims; active / primary: amber-lit glass. Dark material is the
   glass family's (every dark skin); a pale skin keeps its own card colours. */
body[data-ui-tier="s"] .pcv-page {
  --pcv-card: var(--card-bg-solid);
  --pcv-card-rim: var(--card-border);
  --pcv-well: color-mix(in srgb, var(--black) 6%, var(--card-bg-solid));
  --pcv-well-rim: var(--card-border);
  --pcv-board: var(--card-bg-solid);
  --pcv-ctl: color-mix(in srgb, var(--ink) 5%, var(--card-bg-solid));
  --pcv-ctl-mid: var(--pcv-ctl);
  --pcv-ctl-lo: var(--pcv-ctl);
  --pcv-ctl-rim: var(--card-border);
  --pcv-amber: var(--shl-amber-glass);
  --pcv-amber-hi: var(--shl-amber-glass);
  --pcv-amber-lo: var(--shl-amber-glass);
  --pcv-amber-move: var(--shl-amber-glass);
  --pcv-amber-rim: var(--shl-amber-rim);
  --pcv-amber-glow: var(--shl-amber-glow);
}
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page {
  --pcv-card: color-mix(in srgb, color-mix(in srgb, var(--bg) 40%, var(--card-bg-solid)) 92%, transparent);   /* L* 14.4 */
  --pcv-card-rim: color-mix(in srgb, var(--ink) 22%, transparent);
  --pcv-well: color-mix(in srgb, var(--bg) 12%, var(--card-bg-solid));
  --pcv-well-rim: color-mix(in srgb, var(--ink) 9%, transparent);
  --pcv-board: color-mix(in srgb, var(--bg) 10%, var(--card-bg-solid));                  /* L* 14.5 */
  --pcv-ctl: var(--card-bg-solid);                                                     /* L* 15.5: view bar, pairs, tiles */
  --pcv-ctl-mid: color-mix(in srgb, var(--bg) 15%, var(--card-bg-solid));              /* L* 13.5-14.3: tools, the picker */
  --pcv-ctl-lo: color-mix(in srgb, var(--bg) 30%, var(--card-bg-solid));               /* L* 12: Rename, Delete, the font */
  --pcv-ctl-rim: color-mix(in srgb, var(--ink) 22%, transparent);
  --pcv-amber: color-mix(in srgb, var(--accent) 29%, var(--card-bg-solid));            /* L* 31: Snap */
  --pcv-amber-hi: color-mix(in srgb, var(--accent) 44%, var(--card-bg-solid));         /* L* 41: + New canvas, Figma */
  --pcv-amber-lo: color-mix(in srgb, var(--accent) 21%, color-mix(in srgb, var(--bg) 50%, var(--card-bg-solid)));   /* L* 23-25: Images, Move */
  --pcv-amber-move: color-mix(in srgb, var(--accent) 25%, color-mix(in srgb, var(--bg) 50%, var(--card-bg-solid)));   /* L* 24.7: Move */
  --pcv-amber-rim: color-mix(in srgb, var(--accent) 80%, var(--ink));
  --pcv-amber-glow: color-mix(in srgb, var(--accent) 30%, transparent);
}
/* the photo shows in the gutters: the page is see-through (the band's photo carries on under the card) */
body[data-ui-tier="s"] .main-content > .pk-page.pcv-page { background: transparent; }

/* ════════ THE PAGE + THE ONE CARD ════════ */
body[data-ui-tier="s"] .pcv-page { gap: 0; padding: 12px 10.8px 6px; overflow-y: auto; }
body[data-ui-tier="s"] .pcv-page .pcv-main {
  flex: 1 1 auto; display: flex; flex-direction: column; min-width: 0; min-height: 560px; max-height: 682.4px;
  padding: 10.8px 7.8px 9.7px 9.8px; box-sizing: border-box;
  border: 1px solid var(--pcv-card-rim); border-radius: var(--pk-radius-card); background: var(--pcv-card);
  box-shadow: inset 0 1px 0 color-mix(in srgb, var(--ink) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--black) 35%, transparent);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
body[data-ui-tier="s"] .pcv-page .pcv-main > * { flex-shrink: 0; min-width: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-row { display: flex; flex-wrap: nowrap; align-items: center; min-width: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-row1 { gap: 10.4px; height: 31.8px; }
body[data-ui-tier="s"] .pcv-page .pcv-row2 { gap: 7.8px; height: 28.9px; margin-top: 7.9px; }

/* ════════ CONTROLS: the visual box is the padding box; a transparent band makes the 40px tap ════════ */
body[data-ui-tier="s"] .pcv-page .pcv-btn {
  --pcv-t: 5px; --pcv-h: 30px;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px; flex: 0 0 auto; min-width: 0; min-height: 40px; height: calc(var(--pcv-h) + 2 * var(--pcv-t));
  padding: 0 10px; margin: calc(-1 * var(--pcv-t)) 0; box-sizing: border-box;
  border: var(--pcv-t) solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 5px);
  background-color: var(--pcv-ctl); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim); color: var(--ink);
  font-family: var(--font-body); font-size: 10px; font-weight: var(--fw-med); line-height: 1; white-space: nowrap; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
body[data-ui-tier="s"] .pcv-page .pcv-btn:disabled { opacity: 0.45; cursor: default; }
body[data-ui-tier="s"] .pcv-page .pcv-btn svg { flex: 0 0 auto; width: 15px; height: 15px; }
body[data-ui-tier="s"] .pcv-page .pcv-btn.is-primary,
body[data-ui-tier="s"] .pcv-page .pcv-btn.is-on,
body[data-ui-tier="s"] .pcv-page .pcv-tool.is-on {
  background-color: var(--pcv-amber);
  box-shadow: inset 0 0 0 1.5px var(--pcv-amber-rim), inset 0 0 8px var(--pcv-amber-glow);
  filter: drop-shadow(0 0 9px var(--pcv-amber-glow));   /* a box-shadow glow would sit at the 40px tap edge */
}
body[data-ui-tier="s"] .pcv-page .pcv-btn.is-primary svg,
body[data-ui-tier="s"] .pcv-page .pcv-btn.is-on svg,
body[data-ui-tier="s"] .pcv-page .pcv-tool.is-on .pcv-tool-icon { color: var(--accent); }
body[data-ui-tier="s"] .pcv-page .pcv-btn.is-danger { color: var(--danger); }
body[data-ui-tier="s"] .pcv-page .pcv-btn.is-danger:disabled { opacity: 0.6; }

/* a select: a dark recessed box, its own chevron */
body[data-ui-tier="s"] .pcv-page .pcv-selwrap { position: relative; display: inline-flex; flex: 0 0 auto; min-width: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-select {
  --pcv-t: 5px; --pcv-h: 30px;
  appearance: none; -webkit-appearance: none; width: 100%; min-width: 0; min-height: 40px; height: calc(var(--pcv-h) + 2 * var(--pcv-t)); margin: calc(-1 * var(--pcv-t)) 0;
  padding: 0 28px 0 12px; box-sizing: border-box;
  border: var(--pcv-t) solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 5px);
  background-color: var(--pcv-ctl); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim); color: var(--ink);
  font-family: var(--font-body); font-size: 11.5px; font-weight: var(--fw-semi); text-overflow: ellipsis; cursor: pointer;
}
body[data-ui-tier="s"] .pcv-page .pcv-chev {
  position: absolute; right: 13px; top: 50%; width: 6px; height: 6px; margin-top: -4.5px; pointer-events: none;
  border-right: 1.5px solid var(--ink); border-bottom: 1.5px solid var(--ink); transform: rotate(45deg);
}
/* row 1: Canvas ▾ (241.5 x 29.9) · + New canvas (121 x 31.8) */
body[data-ui-tier="s"] .pcv-page .pcv-board-pick { flex: 1 1 auto; }
body[data-ui-tier="s"] .pcv-page .pcv-board { --pcv-t: 6px; --pcv-h: 29.9px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 6px); padding-left: 12px; }
body[data-ui-tier="s"] .pcv-page .pcv-new { --pcv-t: 5px; --pcv-h: 31.8px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 5px); width: 121px; padding: 0 10px; gap: 7px; font-size: 11px; font-weight: var(--fw-med); }
body[data-ui-tier="s"] .pcv-page .pcv-new svg { width: 14px; height: 14px; }
/* row 2: Rename (77.4) · Delete (69.6) · … · Figma | Node (123.9 x 28.9) */
body[data-ui-tier="s"] .pcv-page .pcv-row2 > .pcv-btn { --pcv-t: 6px; --pcv-h: 28.9px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 6px); font-weight: 400; }
body[data-ui-tier="s"] .pcv-page .pcv-rename { width: 77.4px; }
body[data-ui-tier="s"] .pcv-page .pcv-delete { width: 69.6px; }
body[data-ui-tier="s"] .pcv-page .pcv-mode.pk-seg {
  flex: 0 0 auto; width: 123.9px; height: 40.9px; margin: -6px 0 -6px auto; padding: 0 2.5px; gap: 0; align-items: center; box-sizing: border-box;
  border: 6px solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 6px);
  background-color: var(--pcv-well); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim);
}
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn {
  position: relative; flex: 1 1 0; min-width: 0; height: 25.5px; min-height: 0; padding: 0; margin: 0; border: 0;
  border-radius: var(--pk-radius-chip); background: transparent; box-shadow: none; color: var(--ink-muted);
  font-family: var(--font-body); font-size: 10px; font-weight: 400;
}
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn.is-on {
  background-color: var(--pcv-amber-hi); background-clip: padding-box; color: var(--ink); font-weight: var(--fw-med);
  box-shadow: inset 0 0 0 1.5px var(--pcv-amber-rim), inset 0 0 6px var(--pcv-amber-glow);
  filter: drop-shadow(0 0 8px var(--pcv-amber-glow));
}
/* the mode buttons keep a 40px tap: the seg's transparent band is part of each button's hit area */
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn::after { content: ""; position: absolute; inset: -7.25px 0; }

/* ════════ THE WELL: the view bar over the board ════════ */
body[data-ui-tier="s"] .pcv-page .pcv-well {
  flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0;
  margin: 9.3px -5.3px 0 -7.9px; padding: 12.7px 5.8px 5.4px 6.4px; box-sizing: border-box;
  border-radius: var(--pk-radius-card); background: var(--pcv-well);
  box-shadow: inset 0 0 0 1px var(--pcv-well-rim), inset 0 2px 8px color-mix(in srgb, var(--black) 30%, transparent);
}
/* Snap (71.5) · Fit (38.2) | − 100% + (118.6) | Dark board (98.5): 28.4 to see */
body[data-ui-tier="s"] .pcv-page .pcv-viewbar { flex: 0 0 auto; display: flex; align-items: center; gap: 0; height: 28.9px; margin: 0 3.9px 7.9px 4.9px; min-width: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-viewbar > .pcv-btn { --pcv-t: 6px; --pcv-h: 28.4px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 6px); }
body[data-ui-tier="s"] .pcv-page .pcv-snap { width: 71.5px; gap: 8px; }
body[data-ui-tier="s"] .pcv-page .pcv-snap svg { width: 16px; height: 16px; }
body[data-ui-tier="s"] .pcv-page .pcv-fit { width: 38.2px; margin-left: 7.4px; padding: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-vdiv { flex: 0 0 auto; align-self: center; width: 0.5px; height: 24px; background: var(--pcv-ctl-rim); }
body[data-ui-tier="s"] .pcv-page .pcv-viewbar > .pcv-fit + .pcv-vdiv { margin: 0 6.4px 0 6.8px; }
body[data-ui-tier="s"] .pcv-page .pcv-viewbar > .pcv-zoom + .pcv-vdiv { margin: 0 8.7px 0 8.9px; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom {
  flex: 0 0 auto; display: inline-flex; align-items: center; width: 118.6px; height: 40.9px; margin: -7px 0; box-sizing: border-box;
  border: 7px solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 7px);
  background-color: var(--pcv-ctl); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim);
}
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-btn {
  --pcv-t: 0px; position: relative; height: 26.9px; min-height: 0; margin: 0; padding: 0; background: transparent; box-shadow: none; border-radius: var(--pk-radius-control);
}
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-btn::after { content: ""; position: absolute; inset: -7px 0; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom-out { width: 31.8px; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom-in { width: 33.9px; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom-step svg { width: 14px; height: 14px; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-step { height: 28px; margin: -0.55px 0; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-now {
  width: 52.9px; height: 26.5px; background-color: var(--pcv-well); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim);
  font-size: 10px; font-weight: var(--fw-med); font-variant-numeric: tabular-nums;
}
body[data-ui-tier="s"] .pcv-page .pcv-theme { --pcv-h: 28.9px; width: 98.5px; gap: 9px; padding: 0 8px; }
body[data-ui-tier="s"] .pcv-page .pcv-theme svg { width: 16px; height: 16px; }

/* the board: flexes to fill the well (373.8 x 366.4 in the mockup) */
body[data-ui-tier="s"] .pcv-page .pcv-board-wrap { position: relative; flex: 1 1 auto; min-width: 0; min-height: 200px; }
body[data-ui-tier="s"] .pcv-page .cv-page {
  position: absolute; inset: 0; display: block; width: auto; height: auto; min-height: 0; margin: 0; padding: 0; overflow: hidden;
  border: 0; border-radius: var(--pk-radius-card); background-color: var(--pcv-board);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ink) 8%, transparent);
}
body[data-ui-tier="s"] .pcv-page .cv-viewport { position: absolute; inset: 0; width: auto; height: auto; touch-action: none; border-radius: inherit; }
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page .cv-viewport {
  background-image: radial-gradient(color-mix(in srgb, var(--ink) 16%, transparent) 0.8px, transparent 1px);
}
/* the desktop's long toolbar: the phone controls drive it; only the board-name panel (Rename /
   New canvas) and the save state show */
body[data-ui-tier="s"] .pcv-page .cv-toolbar {
  position: absolute; left: var(--pk-2); right: var(--pk-2); top: var(--pk-2); bottom: auto; width: auto; height: auto; min-height: 0;
  display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--pk-1); padding: 0; margin: 0; border: 0; background: transparent; box-shadow: none;
  backdrop-filter: none; -webkit-backdrop-filter: none; pointer-events: none; transform: none;
}
body[data-ui-tier="s"] .pcv-page .cv-toolbar > :not(.cv-boardbar):not(.cv-save) { display: none; }
body[data-ui-tier="s"] .pcv-page .cv-boardbar { display: contents; }
body[data-ui-tier="s"] .pcv-page .cv-boardbar > :not(.cv-board-panel) { display: none; }
body[data-ui-tier="s"] .pcv-page .cv-save { font-size: 10px; color: var(--ink-muted); }
/* the name panel: a card at the top of the board, thumb-sized */
body[data-ui-tier="s"] .pcv-page .cv-board-panel {
  position: static; flex: 1 1 100%; display: flex; flex-wrap: wrap; align-items: center; gap: var(--pk-2); padding: var(--pk-3); margin: 0;
  border: 1px solid var(--pcv-card-rim); border-radius: var(--pk-radius-card); background: var(--card-bg-solid); box-shadow: 0 8px 24px color-mix(in srgb, var(--black) 40%, transparent);
  pointer-events: auto; transform: none;
}
body[data-ui-tier="s"] .pcv-page .cv-board-panel > input { flex: 1 1 100%; width: auto !important; min-height: 44px; font-size: var(--fs-16); box-sizing: border-box; }
body[data-ui-tier="s"] .pcv-page .cv-board-panel > button { flex: 1 1 0; min-height: 44px; }
/* the empty board: the desktop's words are replaced by the mockup's (icon, line, + Add images) */
body[data-ui-tier="s"] .pcv-page .cv-empty { display: none; }
body[data-ui-tier="s"] .pcv-page .pcv-empty {
  position: absolute; left: 0; right: 0; top: 38.1%; z-index: 1; display: flex; flex-direction: column; align-items: center; pointer-events: none;
}
body[data-ui-tier="s"] .pcv-page .pcv-empty-icon { display: grid; place-items: center; width: 48px; height: 47.5px; color: color-mix(in srgb, var(--ink) 38%, transparent); }
body[data-ui-tier="s"] .pcv-page .pcv-empty-icon svg { width: 48px; height: 47.5px; }
body[data-ui-tier="s"] .pcv-page .pcv-empty-text { margin-top: 13.5px; font-size: 11px; line-height: 1.15; color: var(--ink); white-space: nowrap; }
body[data-ui-tier="s"] .pcv-page .pcv-empty-add {
  --pcv-t: 5px; --pcv-h: 30.9px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 5px); pointer-events: auto; width: 101.4px; margin-top: calc(13px - var(--pcv-t)); padding: 0 9px; gap: 7px;
  font-size: 10px; font-weight: var(--fw-semi);
}
body[data-ui-tier="s"] .pcv-page .pcv-empty-add.is-primary { background-color: color-mix(in srgb, var(--accent) 10%, var(--pcv-board)); box-shadow: inset 0 0 0 1.5px var(--pcv-amber-rim); filter: drop-shadow(0 0 8px var(--pcv-amber-glow)); }
/* "Drag to move • Pinch to zoom" along the board's foot */
body[data-ui-tier="s"] .pcv-page .pcv-board-hint {
  position: absolute; left: 50%; bottom: 11.2px; transform: translateX(-50%); width: max-content; display: flex; justify-content: center; align-items: baseline; gap: 11px; pointer-events: none;
  font-size: 9px; line-height: 1.25; color: var(--ink-muted);
}
body[data-ui-tier="s"] .pcv-page .pcv-hint-dot { font-size: 6px; }
/* the item's own buttons on a selected card (push, swap …) and the resize handle: thumb-sized */
body[data-ui-tier="s"] .pcv-page .cv-item-handle { width: 28px; height: 28px; }

/* ════════ TOOLS · STYLE · ACTIONS ════════ */
/* Images 93.1 · Text 78.9 · Arrow 85.2 · Frame 87.7 (38 tall), then Capture past the edge (the row scrolls) */
body[data-ui-tier="s"] .pcv-page .pcv-tools {
  display: flex; flex-wrap: nowrap; gap: 7.85px; height: 38.2px; margin: 10.3px -7.8px 0 1.4px; padding: 0 7.8px 0 0; min-width: 0;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: none; overscroll-behavior-x: contain;
}
body[data-ui-tier="s"] .pcv-page .pcv-tools::-webkit-scrollbar,
body[data-ui-tier="s"] .pcv-page .pcv-actions::-webkit-scrollbar { display: none; }
body[data-ui-tier="s"] .pcv-page .pcv-tool {
  --pcv-t: 1px; --pcv-h: 38.2px;
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; gap: 13px; min-width: 0; min-height: 40px; height: calc(var(--pcv-h) + 2 * var(--pcv-t));
  padding: 0 10px; margin: calc(-1 * var(--pcv-t)) 0; box-sizing: border-box;
  border: var(--pcv-t) solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 1px);
  background-color: var(--pcv-ctl); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim); color: var(--ink);
  font-family: var(--font-body); font-size: 9px; font-weight: 400; line-height: 1; white-space: nowrap; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
body[data-ui-tier="s"] .pcv-page .pcv-tool--images { width: 93.1px; --pcv-t: 1px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 1px); font-weight: var(--fw-med); }
body[data-ui-tier="s"] .pcv-page .pcv-tool--text { width: 78.9px; --pcv-t: 2px; --pcv-h: 37.2px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 2px); }
body[data-ui-tier="s"] .pcv-page .pcv-tool--arrow { width: 85.2px; --pcv-t: 2px; --pcv-h: 37.2px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 2px); }
body[data-ui-tier="s"] .pcv-page .pcv-tool--frame { width: 87.7px; --pcv-t: 2px; --pcv-h: 37.2px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 2px); }
body[data-ui-tier="s"] .pcv-page .pcv-tool-icon { display: grid; place-items: center; }
body[data-ui-tier="s"] .pcv-page .pcv-tools .pcv-tool-icon svg { width: 17px; height: 17px; }
/* font ▾ (92.6 x 31.8) | B I (92.6) · Box Dashed (156.3), 32.3 tall */
body[data-ui-tier="s"] .pcv-page .pcv-style { display: flex; flex-wrap: nowrap; align-items: center; gap: 0; height: 32.3px; margin-top: 13.2px; min-width: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-font-pick { width: 92.6px; }
body[data-ui-tier="s"] .pcv-page .pcv-font { --pcv-t: 5px; --pcv-h: 31.8px; border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 5px); padding-left: 12px; font-size: 11px; font-weight: var(--fw-med); }
body[data-ui-tier="s"] .pcv-page .pcv-style > .pcv-vdiv { margin: 0 9.8px; }
body[data-ui-tier="s"] .pcv-page .pcv-pair {
  flex: 0 0 auto; display: inline-flex; align-items: stretch; height: 40.3px; margin: -4px 0; box-sizing: border-box;
  border: 4px solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 4px);
  background-color: var(--pcv-ctl); box-shadow: inset 0 0 0 1px var(--pcv-ctl-rim);
}
body[data-ui-tier="s"] .pcv-page .pcv-bi { width: 92.6px; }
body[data-ui-tier="s"] .pcv-page .pcv-boxdash { width: 156.3px; margin-left: 9px; }
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn {
  --pcv-t: 0px; position: relative; height: 32.3px; min-height: 0; margin: 0; padding: 0; background: transparent; box-shadow: none; border-radius: var(--pk-radius-control);
}
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn::after { content: ""; position: absolute; inset: -4px 0; }
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn + .pcv-btn::before {
  content: ""; position: absolute; left: 0; top: 4.1px; bottom: 4.1px; width: 0.5px; background: var(--pcv-ctl-rim);
}
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn.is-on { background-color: var(--pcv-amber); box-shadow: inset 0 0 0 1.5px var(--pcv-amber-rim); }
body[data-ui-tier="s"] .pcv-page .pcv-sq { flex: 1 1 0; font-size: 14px; }
body[data-ui-tier="s"] .pcv-page .pcv-sq > b { font-weight: var(--fw-bold); }
body[data-ui-tier="s"] .pcv-page .pcv-sq > i { font-weight: 300; }
body[data-ui-tier="s"] .pcv-page .pcv-boxbtn { width: 72.5px; gap: 12px; font-size: 9px; font-weight: 400; }
body[data-ui-tier="s"] .pcv-page .pcv-dashbtn { width: 83.8px; gap: 12px; font-size: 9px; font-weight: 400; }
body[data-ui-tier="s"] .pcv-page .pcv-box { display: inline-block; width: 13px; height: 13px; box-sizing: border-box; border: 1.3px solid currentColor; border-radius: var(--pk-radius-small); }
body[data-ui-tier="s"] .pcv-page .pcv-box.is-solid { background: currentColor; }
body[data-ui-tier="s"] .pcv-page .pcv-box.is-dashed { border-style: dashed; }
body[data-ui-tier="s"] .pcv-page .pcv-box.is-dotted { border-style: dotted; }
/* a hairline (the inner width, 370.4), then the five action tiles (icon over label, 45.6 tall): 67.6 · 73.5 · 73.5 ·
   66.1 · 65.6 */
body[data-ui-tier="s"] .pcv-page .pcv-actions {
  display: flex; flex-wrap: nowrap; gap: 7.5px; margin: 11.8px -0.3px 0 -3.5px; padding: 12.3px 0 0; min-width: 0; overflow: visible;
  background-image: linear-gradient(var(--pcv-ctl-rim), var(--pcv-ctl-rim)); background-size: calc(100% - 3.2px) 0.5px; background-position: 3.5px 0; background-repeat: no-repeat;
}
body[data-ui-tier="s"] .pcv-page .pcv-actions > .pcv-tool {
  --pcv-t: 0px; border-radius: var(--pk-radius-control); flex: 0 0 auto; flex-direction: column; gap: 6px; height: 45.6px; min-height: 45.6px; padding: 0 2px; margin: 0;
  font-size: 8.5px; font-weight: 400; color: color-mix(in srgb, var(--ink) 86%, transparent);
}
body[data-ui-tier="s"] .pcv-page .pcv-actions > .pcv-tool.is-on { color: var(--accent); font-weight: var(--fw-semi); }
body[data-ui-tier="s"] .pcv-page .pcv-tool--move { width: 67.6px; }
body[data-ui-tier="s"] .pcv-page .pcv-tool--multi { width: 73.5px; }
body[data-ui-tier="s"] .pcv-page .pcv-tool--dup { width: 73.5px; }
body[data-ui-tier="s"] .pcv-page .pcv-tool--undo { width: 66.1px; }
body[data-ui-tier="s"] .pcv-page .pcv-tool--remove { width: 65.6px; }
body[data-ui-tier="s"] .pcv-page .pcv-actions .pcv-tool-icon svg { width: 17px; height: 17px; }

/* the image picker (+ Images; portalled into #modal-root, so scoped by :has(.pcv-page)): full screen; the main grid
   only (the desktop's left list repeats it), two pictures a row; the head = tabs, search, Add, close */
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-backdrop { position: fixed; inset: 0; z-index: calc(var(--z-mobile-drawer) + 10); padding: 0; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker {
  position: absolute; inset: 0; width: auto; max-width: none; height: auto; max-height: none; margin: 0; border-radius: 0; transform: none;
  display: flex; flex-direction: column; padding: env(safe-area-inset-top, 0px) 0 env(safe-area-inset-bottom, 0px);
}
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pk-2); padding: var(--pk-2) var(--pk-3); }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-tabs { display: flex; gap: var(--pk-1); }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-tab { min-height: 40px; padding: 0 var(--pk-3); }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-zoom { display: none; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-x { order: 2; margin-left: auto; width: 40px; height: 40px; font-size: var(--fs-22); }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-search { order: 3; flex: 1 1 100%; width: auto; min-height: 44px; font-size: var(--fs-16); box-sizing: border-box; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-commit { order: 4; flex: 1 1 100%; min-height: 44px; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-body { flex: 1 1 auto; min-height: 0; display: flex; grid-template-columns: none; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-list { display: none; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-main { flex: 1 1 auto; width: auto; min-width: 0; }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }   /* the desktop sets its columns inline (its zoom slider) */
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-drillhead { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pk-2); }
body[data-ui-tier="s"]:has(.pcv-page) .cv-picker-drillhead .cv-btn { min-height: 40px; }

/* a narrower phone (< 400px wide): the rows give the space back from the widest pieces, nothing runs off the edge */
/* (8 Oct 2026: +20 - every phone page sits in the shell's back panel, 10px in from each side) */
@media (max-width: 419px) {
  body[data-ui-tier="s"] .pcv-page .pcv-theme { width: auto; min-width: 40px; padding: 0 8px; }
  body[data-ui-tier="s"] .pcv-page .pcv-theme > span { display: none; }
  body[data-ui-tier="s"] .pcv-page .pcv-new { width: auto; }
  body[data-ui-tier="s"] .pcv-page .pcv-boxdash { flex: 1 1 auto; width: auto; min-width: 0; }
  body[data-ui-tier="s"] .pcv-page .pcv-boxbtn,
  body[data-ui-tier="s"] .pcv-page .pcv-dashbtn { flex: 1 1 0; width: auto; min-width: 0; }
  body[data-ui-tier="s"] .pcv-page .pcv-actions > .pcv-tool { flex: 1 1 0; width: auto; min-width: 0; }
  body[data-ui-tier="s"] .pcv-page .pcv-actions { margin-right: 0; }
}

/* the tools row's edge fade (the kit's 32px) would eat Frame: here it covers only the card's own edge band */
body[data-ui-tier="s"] .pcv-page .pcv-tools[data-fade="end"] { -webkit-mask-image: linear-gradient(to right, var(--black) calc(100% - 7.8px), transparent); mask-image: linear-gradient(to right, var(--black) calc(100% - 7.8px), transparent); }
body[data-ui-tier="s"] .pcv-page .pcv-tools[data-fade="both"] { -webkit-mask-image: linear-gradient(to right, transparent, var(--black) 12px, var(--black) calc(100% - 7.8px), transparent); mask-image: linear-gradient(to right, transparent, var(--black) 12px, var(--black) calc(100% - 7.8px), transparent); }

/* the measured fill levels (the mockup's L*: New canvas / Figma 41, Snap 31, Images / Move 23-25; tools 13.5,
   Rename / Delete / font 12) */
body[data-ui-tier="s"] .pcv-page .pcv-new.is-primary,
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn.is-on { background-color: var(--pcv-amber-hi); }
body[data-ui-tier="s"] .pcv-page .pcv-tool.is-on { background-color: var(--pcv-amber-lo); }
body[data-ui-tier="s"] .pcv-page .pcv-rename, body[data-ui-tier="s"] .pcv-page .pcv-delete, body[data-ui-tier="s"] .pcv-page .pcv-font { background-color: var(--pcv-ctl-lo); }
body[data-ui-tier="s"] .pcv-page .pcv-board, body[data-ui-tier="s"] .pcv-page .pcv-tools > .pcv-tool:not(.is-on) { background-color: var(--pcv-ctl-mid); }
body[data-ui-tier="s"] .pcv-page .pcv-actions > .pcv-tool.is-on { background-color: var(--pcv-amber-move); }
/* (round 1b) the picked action's word is white on its amber tile like the mockup's Move (the icon stays amber) */
body[data-ui-tier="s"] .pcv-page .pcv-actions > .pcv-tool.is-on { color: var(--ink); }
body[data-ui-tier="s"] .pcv-page .pcv-actions > .pcv-tool.is-on .pcv-tool-icon { color: var(--accent); }
/* (round 1b) every control's own box is a 40px tap (the test measures the box, not a pseudo-element): transparent
   bands around the visual sizes, which stay the mockup's */
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn {
  height: 41.5px; margin: -8px 0; border: 8px solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-chip) / calc(var(--pk-radius-chip) + 8px);
}
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn.is-on { box-shadow: inset 0 0 0 1.5px var(--pcv-amber-rim), inset 0 0 8px var(--pcv-amber-glow); }
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-btn::after { content: none; }
body[data-ui-tier="s"] .pcv-page .pcv-fit { width: 40px; margin-left: 6.5px; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-btn::after { content: none; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-step { box-sizing: border-box; height: 40px; margin: -6px 0; border: 6px solid transparent; background-clip: padding-box; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-out { width: 40px; margin-right: -8px; border-left-width: 0; border-right-width: 8px; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-in { width: 40px; margin-left: -6px; border-left-width: 6px; border-right-width: 0; }
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-now {
  position: relative; z-index: 1; height: 40.5px; margin: -7px 0; border: 7px solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 7px);
}
body[data-ui-tier="s"] .pcv-page .pcv-zoom > .pcv-zoom-in { position: relative; z-index: 2; }
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn::after { content: none; }
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn {
  height: 40.3px; margin: -4px 0; border: 4px solid transparent; border-left-width: 0; border-right-width: 0; background-clip: padding-box;
  border-radius: var(--pk-radius-control) / calc(var(--pk-radius-control) + 4px);
}
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn + .pcv-btn::before { top: 8.1px; bottom: 8.1px; }
body[data-ui-tier="s"] .pcv-page .pcv-tools > .pcv-tool { min-width: 40px; }

/* the mockup draws proportional digits ("01" narrower than "02", "SH1167", "(1)"): the skin's tabular digits off on this page */
body[data-ui-tier="s"] .pcv-page { font-feature-settings: "lnum"; }
/* ── ROUND 2 (after the measured shell) ── */
/* the canvas picker's chevron at the mockup's 8.8 wide (the font picker's stays 8.3 like its own) */
body[data-ui-tier="s"] .pcv-page .pcv-board-pick .pcv-chev { width: 6.3px; height: 6.3px; }
/* the empty state's text at the mockup's 177.3 wide (11 -> 10.7px) */
body[data-ui-tier="s"] .pcv-page .pcv-empty-text { font-size: 10.7px; }
/* the empty board's picture glyph: a square frame like the mockup's (48.5 x 48 drawn) */
body[data-ui-tier="s"] .pcv-page .pcv-empty-icon { width: 50px; height: 50px; }
body[data-ui-tier="s"] .pcv-page .pcv-empty-icon svg { width: 50px; height: 50px; }
/* the dividers inside B | I and Box | Dashed: 24 tall, 4.1 in from the face's top and bottom (the mockup's) */
body[data-ui-tier="s"] .pcv-page .pcv-pair > .pcv-btn + .pcv-btn::before { top: 4.1px; bottom: 4.1px; }
/* ── ROUND 3 (the judge's findings on round 2, 7 Oct) ── */
/* Figma's descender: the kit's segment text clips at its line box (10px), which cut the g's tail; a taller line box
   (the same centre, so nothing moves) keeps it whole */
body[data-ui-tier="s"] .pcv-page .pcv-mode .pk-seg-text { line-height: 14px; }
/* the amber controls' rims and glyphs are the mockup's GOLD (rim cores #F5C061, glyphs #F7D08C), not the skin's orange;
   the quiet labels are its cool grey-blue (#CED8E2), the empty state's line its cool white */
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page {
  --pcv-amber-rim: oklch(from var(--accent) calc(l + 0.11) calc(c * 0.888) calc(h + 19.2));
  --pcv-gold: oklch(from var(--accent) calc(l + 0.144) calc(c * 0.668) calc(h + 19.2));
  --pcv-label: color-mix(in srgb, var(--ink-muted) 75%, var(--white));
}
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page :is(.pcv-new, .pcv-empty-add) svg,
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page .pcv-snap.is-on svg,
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page .pcv-actions > .pcv-tool.is-on .pcv-tool-icon { color: var(--pcv-gold); }
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page .pcv-tools > .pcv-tool.is-on .pcv-tool-icon { color: var(--ink); }
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page :is(.pcv-rename, .pcv-fit, .pcv-tools > .pcv-tool:not(.is-on), .pcv-actions > .pcv-tool:not(.is-on)) { color: var(--pcv-label); }
body[data-ui-tier="s"][data-skin-family="glass"] .pcv-page .pcv-empty-text { color: color-mix(in srgb, var(--ink-muted) 30%, var(--white)); }
