/* =====================================================================
   ROUND 48 — THE INTERFACE SKIN (painted wood, gold leaf, a lit forest).

   Owner, 2026-10-15: "spend more time making buttons look better too, the
   GUI and main menus are so boring I want to cry. art will sell the game."

   Loaded LAST (index.html), so every rule here re-dresses the shared
   vocabulary of styles.css §4 — .pb-screen, .pb-btn*, .pb-panel, .pb-card,
   .pb-chip, .pb-bar, .pb-title — without touching a single size, testid,
   label or handler. The art is in assets/ui/ (WebP, painted with the local
   image model, see docs/design/round48-ui.md for every file and its size).

   THE RULES THIS FILE KEEPS
   1. No size changes. Paddings, min-heights and font sizes of every control
      stay what styles.css says, so tap targets (52px, 48px under 380 wide,
      44px for the small ones) and every measured fit (fitHero, the level-up
      grid, the Trail) are untouched. Painted frames are drawn with
      border-image-width INSIDE the existing padding; nothing is outset.
   2. Every image has a flat colour beside it. A file that is slow or never
      loads leaves the control on a plain wood or walnut colour that still
      reads, never on nothing.
   3. Nothing animates per frame. Backgrounds and frames are static images
      the compositor rasterises once; the press feel is a 2px move and a
      shorter shadow, the same transform the base rule already used. No new
      filters on anything that moves.
   4. The in-run HUD keeps its own dark, high-contrast look; only the pause
      button and the bars' rims pick up the wood and brass.
   5. Screens that inject their own <style> at runtime (talentsScreen.js,
      gearScreen.js, chestScreen.js, hud.js ...) land AFTER this file, so a
      rule here that re-dresses one of their classes is prefixed with
      `.pb-screen ` to win on specificity instead of on order.
   ===================================================================== */

:root {
  --sk-ink-wood: #FFF2D8;            /* cream lettering on wood */
  --sk-ink-gold: #3A2208;            /* dark brown lettering on gold */
  --sk-wood: #7A4E27;                /* flat fallback for the oak plank */
  --sk-wood-dark: #3E2714;           /* flat fallback for the stained plank */
  --sk-walnut: #23170D;              /* panel interior */
  --sk-brass: #E2B25A;
  --sk-brass-dim: rgba(226, 178, 90, .42);
  --sk-gold-hi: #FFE39A;
  --sk-title: #FFD98A;
  --sk-title-font: "Palatino", "Palatino Linotype", "Book Antiqua", Georgia, serif;
  --sk-text-wood: 0 1px 0 rgba(36, 18, 4, .95), 0 2px 4px rgba(0, 0, 0, .55);
  --sk-lift: 0 3px 0 #1C1007, 0 6px 12px rgba(0, 0, 0, .45);
  --sk-lift-press: 0 1px 0 #1C1007, 0 2px 4px rgba(0, 0, 0, .45);

  /* The shared tokens every screen already reads, moved from moss green to
     stained walnut and brass, so rows, sheets and tiles that colour
     themselves from the tokens warm up with the rest. Rarity colours and
     the amber accents are untouched (data/gear.js pins the rarities). */
  --pb-panel:   rgba(38, 24, 12, .94);
  --pb-panel-2: rgba(22, 14, 7, .90);
  --pb-line:    rgba(226, 178, 90, .26);
  --pb-ink-dim: #BCB194;
  --pb-bg:      #1C130A;
}

/* ---------------------------------------------------------------------
   1. SCREENS — a lit forest behind every menu page.
   The main menu gets the sharp painting; every other menu page gets the
   same forest blurred and darkened (screen-forest.webp is 360 px wide and
   already blurred, so it costs ~1/6 of the sharp one). The gradients on top
   keep the panels and the bottom buttons on a dark field. Clear (HUD), dim
   (pause, level-up), splash, story and defeat screens keep their own
   backgrounds (the defeat's cold red gloom is its own spectacle).
   --------------------------------------------------------------------- */
.pb-screen:not(.pb-screen--clear):not(.pb-screen--dim):not(.pb-splash):not(.pb-dlg-scene):not(.pb-result--lose) {
  background:
    linear-gradient(180deg, rgba(9, 12, 6, .62) 0%, rgba(9, 12, 6, .38) 26%, rgba(9, 12, 6, .42) 62%, rgba(7, 9, 5, .86) 100%),
    url(../../assets/ui/screen-forest.webp) center 30% / cover no-repeat,
    #141C10;
}
/* Same :not() chain as above, so this beats it on specificity. */
.pb-screen:not(.pb-screen--clear):not(.pb-screen--dim):not(.pb-splash):not(.pb-dlg-scene)[data-testid="screen-menu"] {
  background:
    radial-gradient(70% 38% at 50% 60%, rgba(255, 214, 120, .16), transparent 70%),
    linear-gradient(180deg, rgba(8, 11, 5, .78) 0%, rgba(8, 11, 5, .30) 30%, rgba(8, 11, 5, 0) 46%, rgba(8, 11, 5, .12) 58%, rgba(6, 8, 4, .66) 72%, rgba(6, 8, 4, .90) 84%, rgba(6, 8, 4, .96) 100%),
    url(../../assets/ui/menu-forest.webp) center 42% / cover no-repeat,
    #182412;
}
/* The pause menu sits over the frozen game: a warmer, deeper dim. */
.pb-screen--dim { background: radial-gradient(120% 80% at 50% 30%, rgba(40, 26, 12, .55), rgba(8, 10, 6, .82) 70%); }
/* ROUND 48 REVIEW (ui-verify problem 1): the HUD's kill-streak edge glow (z-index 3 inside the HUD screen) shows
   through the pause and level-up dim layers and washed their headings to 2.8 to 3.6:1. While a dim screen is
   mounted on #overlay the glow drops to a trace. The :has() looks only at #overlay's own children, so it costs
   nothing per frame; a browser without :has() simply skips the rule (the old look). */
#overlay:has(> .pb-screen--dim) .pb-streakglow { opacity: .15 !important; }

/* ---------------------------------------------------------------------
   2. TITLES — gold leaf on a storybook serif, with a carved dark edge.
   --------------------------------------------------------------------- */
.pb-title {
  font-family: var(--sk-title-font);
  font-weight: 700;
  letter-spacing: .4px;
  color: var(--sk-title);
  text-shadow:
    0 1px 0 #6B3E0C,
    0 2px 0 #3A2006,
    0 0 1px #2A1604,
    0 3px 8px rgba(0, 0, 0, .65),
    0 0 18px rgba(255, 200, 100, .18);
}
.pb-subtitle { color: #D9CFB4; text-shadow: 0 1px 2px rgba(0, 0, 0, .8); }
.pb-card__tag { text-shadow: 0 1px 0 rgba(0, 0, 0, .6); }

/* The home screen's name is the painted PineBurst logo from the splash
   (logo.webp). The <h1> keeps its text for screen readers and tests; only
   its paint changes, and only once the stylesheet has the file. */
.pb-screen[data-testid="screen-menu"] .pb-header .pb-title {
  /* logo.webp is 520 x 142 (3.66 : 1): 50px tall at 390 wide, pulled 10px
     into the header's own padding so the header grows by only ~9px over the
     old 28px text title (fitHero() measures the rest; see round48-ui.md). */
  width: min(184px, 47vw); height: 0; padding-top: min(50px, 12.9vw);
  overflow: hidden; color: transparent; text-shadow: none;
  background: url(../../assets/ui/logo.webp) left center / contain no-repeat;
  margin: -6px 0 -4px -4px;
}
.pb-screen[data-testid="screen-menu"] .pb-header .pb-subtitle {
  font-family: var(--sk-title-font); font-style: italic; font-size: 13.5px; color: #F1E6C8;
}

/* ---------------------------------------------------------------------
   3. BUTTONS — carved oak planks, stained planks, a gold-leaf plaque.
   border-image draws the painted plank over the button's own box (fill),
   14px of each painted edge inside the existing padding. The flat colour
   under it is what a missing file shows.
   --------------------------------------------------------------------- */
.pb-btn {
  border: 2px solid #2A190B;
  border-image: url(../../assets/ui/btn-wood.webp) 30 30 42 30 fill / 11px 11px 15px 11px / 0 stretch;
  background: var(--sk-wood);
  background-clip: padding-box;
  border-radius: 13px;
  color: var(--sk-ink-wood);
  text-shadow: var(--sk-text-wood);
  box-shadow: var(--sk-lift);
  transition: transform .07s ease-out, box-shadow .07s ease-out;  /* no filter in the transition: nothing filters per frame */
}
.pb-btn:active {
  transform: translateY(3px) scale(.985);
  box-shadow: var(--sk-lift-press);
  filter: brightness(1.12) saturate(1.05);
}
.pb-btn--ghost {
  border-image-source: url(../../assets/ui/btn-wood-dark.webp);
  background: var(--sk-wood-dark);
  background-clip: padding-box;
  color: #F4E6C6;
}
.pb-btn--primary {
  border-image-source: url(../../assets/ui/btn-gold.webp);
  background: #E9B850;
  background-clip: padding-box;
  color: var(--sk-ink-gold);
  text-shadow: 0 1px 0 rgba(255, 244, 205, .75);
  box-shadow: 0 3px 0 #5A3208, 0 7px 16px rgba(0, 0, 0, .5), 0 0 22px rgba(255, 196, 80, .22);
}
.pb-btn--primary:active { box-shadow: 0 1px 0 #5A3208, 0 2px 6px rgba(0, 0, 0, .5), 0 0 14px rgba(255, 196, 80, .25); }
.pb-btn--danger, .pb-btn--armed {
  border-image-source: url(../../assets/ui/btn-red.webp);
  background: #8E2E1E;
  background-clip: padding-box;
  color: #FFF1EA;
}
/* Text links stay quiet text: no plank, and their own colours (the cream
   wood lettering above must not repaint "Abandon run" out of its red). */
.pb-btn--link,
.pb-btn--link:active {
  border: none; border-image: none; background: none; box-shadow: none;
  color: var(--pb-ink-dim);
  text-shadow: 0 1px 2px rgba(0, 0, 0, .8);
}
.pb-btn--link.pb-text-danger { color: var(--pb-danger); }
.pb-btn--link:active { transform: none; filter: brightness(1.35); }
/* A disabled plank is a weathered, unlit plank, and it does not press. */
.pb-btn[disabled], .pb-btn[aria-disabled="true"],
.pb-btn[disabled]:active, .pb-btn[aria-disabled="true"]:active {
  box-shadow: 0 2px 0 #1C1007; transform: none; filter: grayscale(.6);
}

/* The back chevron is a lone 20px "‹": make the glyph itself carry. */
.pb-btn[data-testid="btn-back"] { font-size: 30px; line-height: 1; padding: 6px 8px 10px; font-weight: 800; }

/* The big gold plaques of the short, final actions (Play/Continue, Enter,
   Yes go, Resume, Done) carry painted oak-leaf sprigs at both ends. Listed
   by testid so a long label never runs under a sprig. */
.pb-btn--primary:is([data-testid="btn-continue"], [data-testid="btn-start-level"], [data-testid="companion-confirm-yes"], [data-testid="btn-resume"], [data-testid="btn-done"]) {
  position: relative; letter-spacing: .6px; padding-left: 60px; padding-right: 60px;
}
.pb-btn--primary:is([data-testid="btn-continue"], [data-testid="btn-start-level"], [data-testid="companion-confirm-yes"], [data-testid="btn-resume"], [data-testid="btn-done"])::before,
.pb-btn--primary:is([data-testid="btn-continue"], [data-testid="btn-start-level"], [data-testid="companion-confirm-yes"], [data-testid="btn-resume"], [data-testid="btn-done"])::after {
  content: ''; position: absolute; top: 50%; width: 40px; height: 26px; margin-top: -14px;
  background: url(../../assets/ui/leaf-sprig.webp) center / contain no-repeat;
  pointer-events: none;
}
.pb-btn--primary:is([data-testid="btn-continue"], [data-testid="btn-start-level"], [data-testid="companion-confirm-yes"], [data-testid="btn-resume"], [data-testid="btn-done"])::before { left: 14px; }
.pb-btn--primary:is([data-testid="btn-continue"], [data-testid="btn-start-level"], [data-testid="companion-confirm-yes"], [data-testid="btn-resume"], [data-testid="btn-done"])::after { right: 14px; transform: scaleX(-1); }

/* ---------------------------------------------------------------------
   4. PANELS — a walnut board in a carved frame with brass corners.
   --------------------------------------------------------------------- */
.pb-panel {
  border: 2px solid #3A2410;
  border-image: url(../../assets/ui/panel-frame.webp) 54 / 18px / 0 stretch;
  background:
    linear-gradient(180deg, rgba(48, 30, 15, .80), rgba(26, 16, 8, .90)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 220px auto repeat,
    var(--sk-walnut);
  background-clip: padding-box;
  box-shadow: 0 10px 26px rgba(0, 0, 0, .55);
}
/* Flat panels (rows inside a panel, the pause companion row, result rows)
   are a recessed groove in the board, not a second frame. */
.pb-panel--flat {
  border: 1.5px solid rgba(226, 178, 90, .28);
  border-image: none;
  background: linear-gradient(180deg, rgba(14, 9, 4, .62), rgba(24, 15, 8, .52));
  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .55), inset 0 -1px 0 rgba(255, 220, 160, .06);
}
.pb-hr { background: linear-gradient(90deg, transparent, rgba(226, 178, 90, .45) 18%, rgba(226, 178, 90, .45) 82%, transparent); }

/* ---------------------------------------------------------------------
   5. CARDS — stained wood tiles; the rarity colour still owns the border.
   --------------------------------------------------------------------- */
.pb-card {
  background:
    linear-gradient(180deg, rgba(70, 46, 24, .78), rgba(28, 18, 9, .92)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 200px auto repeat,
    #2A1B0E;
  border-color: rgba(226, 178, 90, .30);
  box-shadow: inset 0 1px 0 rgba(255, 222, 160, .14), inset 0 -2px 6px rgba(0, 0, 0, .35), var(--pb-shadow-sm);
}
[class*="pb-r-"].pb-card { border-color: var(--pb-r, rgba(226, 178, 90, .30)); }

/* ---------------------------------------------------------------------
   6. CHIPS AND BARS — brass-rimmed slots and grooves.
   --------------------------------------------------------------------- */
.pb-chip {
  background: linear-gradient(180deg, rgba(16, 10, 4, .86), rgba(34, 22, 10, .82));
  border-color: var(--sk-brass-dim);
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, .6), 0 1px 0 rgba(255, 220, 160, .10);
}
.pb-bar {
  background: linear-gradient(180deg, #120B05, #22160B);
  border-color: rgba(226, 178, 90, .45);
  box-shadow: inset 0 2px 3px rgba(0, 0, 0, .7);
}
.pb-bar__fill { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .35), inset 0 -2px 0 rgba(0, 0, 0, .18); }

/* ---------------------------------------------------------------------
   7. MAIN MENU
   --------------------------------------------------------------------- */
/* The stats board sits a little more see-through so the forest reads. */
.pb-home-panel {
  background:
    linear-gradient(180deg, rgba(44, 28, 14, .80), rgba(22, 14, 7, .86)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 220px auto repeat,
    var(--sk-walnut);
  background-clip: padding-box;
}
/* Feature buttons: the emoji gives way to its painted icon. The emoji stays
   in the DOM (font-size 0) so the button's text is exactly what it was. */
/* 24px painted icons; the button's top/bottom padding gives back the 6px
   the taller icon takes, so the row stays exactly 52px (styles.css ROUND 18
   forbids adding height to this row: it is what keeps Bramble's face clear). */
.pb-featbtn { padding-top: 4px; padding-bottom: 3px; }
.pb-featbtn .pb-featbtn__icon {
  width: 24px; height: 24px; font-size: 18px;
  background: center / contain no-repeat;
}
.pb-featbtn[data-testid="talents-button"] .pb-featbtn__icon { font-size: 0; background-image: url(../../assets/ui/ic-talents.webp); }
.pb-featbtn[data-testid="checklist-button"] .pb-featbtn__icon { font-size: 0; background-image: url(../../assets/ui/ic-checklist.webp); }
.pb-featbtn[data-testid="season-button"] .pb-featbtn__icon { font-size: 0; background-image: url(../../assets/ui/ic-trailpass.webp); }
.pb-btn__glyph--map {
  display: inline-block; flex: 0 0 auto; width: 26px; height: 26px; font-size: 0; vertical-align: -6px;
  background: url(../../assets/ui/ic-map.webp) center / contain no-repeat;
}

/* The painted Bramble on his stump (ui/uiArt.js heroPaintingEl). Hidden
   until the painting decodes; then it replaces the code-drawn rig. */
.pb-hero__painting { position: relative; display: none; }
.pb-hero__painting.is-ready { display: block; }
.pb-hero__art--painted > .pb-hero__rig { display: none; }
.pb-hero__paint {
  display: block; width: 100%; height: 100%; object-fit: contain;
  transform-origin: 50% 96%; will-change: transform;
  -webkit-user-select: none; user-select: none; pointer-events: none;
}
/* Eyes-only blink patch, placed over the eyes in the painting's own
   coordinates (see the crop in docs/design/round48-ui.md). */
.pb-hero__blink {
  position: absolute; left: 41.15%; top: 9.33%; width: 24.83%; height: auto;
  visibility: hidden; pointer-events: none;
}
.pb-hero__painting.is-blinking .pb-hero__blink { visibility: visible; }
/* The stump carries its own ground; the code plinth's shadow would float
   mid-stump, so it keeps its layout height but is not drawn. */
.pb-hero__art--painted ~ .pb-hero__plinth { visibility: hidden; }
.pb-hero__glow { background: radial-gradient(circle, rgba(255, 210, 120, .34), rgba(150, 190, 80, .12) 45%, transparent 72%); }
.pb-hero__line { color: #EDE2C4; text-shadow: 0 1px 3px rgba(0, 0, 0, .9); }
.pb-hero__tip { color: #D6CCB0; text-shadow: 0 1px 3px rgba(0, 0, 0, .9); opacity: 1; }
.pb-hero__key {
  background: linear-gradient(180deg, rgba(58, 36, 16, .92), rgba(30, 18, 8, .94));
  border: 1.5px solid rgba(226, 178, 90, .7);
  box-shadow: inset 0 1px 0 rgba(255, 226, 170, .25), 0 3px 0 #1C1007, 0 6px 14px rgba(0, 0, 0, .5);
  text-shadow: 0 1px 0 #1C1007;
}
.pb-rack__label { text-shadow: 0 1px 2px rgba(0, 0, 0, .85); }

/* ---------------------------------------------------------------------
   8. SETTINGS — every On/Off plank carries a lamp: lit green for On, an
   unlit brass socket for Off, and an Off plank is the darker stain. The
   label text ("Sound: On") is untouched and still says the state.
   --------------------------------------------------------------------- */
[data-testid="screen-settings"] .pb-btn[aria-pressed] { position: relative; padding-right: 40px; padding-left: 40px; }
[data-testid="screen-settings"] .pb-btn[aria-pressed]::after {
  content: ''; position: absolute; right: 18px; top: 50%; width: 14px; height: 14px; margin-top: -9px;
  border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle at 38% 34%, #6A5638, #241708 72%);
  box-shadow: 0 0 0 2px #B9893E, 0 0 0 3px #2A190B, inset 0 2px 3px rgba(0, 0, 0, .8);
}
[data-testid="screen-settings"] .pb-btn[aria-pressed="true"]::after {
  background: radial-gradient(circle at 38% 34%, #FBFFD0, #A6E04E 48%, #3F7D15 100%);
  box-shadow: 0 0 0 2px #E2B25A, 0 0 0 3px #2A190B, 0 0 12px 2px rgba(170, 235, 90, .75);
}
[data-testid="screen-settings"] .pb-btn[aria-pressed="false"] {
  border-image-source: url(../../assets/ui/btn-wood-dark.webp);
  background-color: var(--sk-wood-dark);
  color: #E6D6B4;
}
/* The volume slider: a carved groove with a brass knob. */
/* ROUND 48 REVIEW (ui-verify problem 4): 44px tall, the tap floor, inside the 52px setting row (was 28px). The
   track and knob stay centred: WebKit centres the runnable track in the input box. */
.pb-range { -webkit-appearance: none; appearance: none; height: 44px; background: transparent; }
.pb-range::-webkit-slider-runnable-track {
  height: 10px; border-radius: 5px;
  background: linear-gradient(180deg, #120B05, #2A1A0C);
  box-shadow: inset 0 2px 3px rgba(0, 0, 0, .8), 0 1px 0 rgba(255, 220, 160, .15);
  border: 1px solid rgba(226, 178, 90, .5);
}
.pb-range::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none; width: 26px; height: 26px; margin-top: -9px; border-radius: 50%;
  background: radial-gradient(circle at 36% 32%, #FFF1BE, #E9B850 45%, #8A5A16 100%);
  border: 2px solid #3A2208; box-shadow: 0 2px 4px rgba(0, 0, 0, .6);
}
.pb-range::-moz-range-track { height: 10px; border-radius: 5px; background: #1A1008; border: 1px solid rgba(226, 178, 90, .5); }
.pb-range::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%; background: #E9B850; border: 2px solid #3A2208; }
.pb-row--setting > span:first-child, .pb-row--setting label { text-shadow: 0 1px 2px rgba(0, 0, 0, .85); }

/* ---------------------------------------------------------------------
   9. SHEETS (weapon pick, partner pick) and the currency explainer: a
   walnut board rising from the bottom with a brass top rim.
   --------------------------------------------------------------------- */
.pb-sheet {
  background:
    linear-gradient(180deg, rgba(52, 33, 16, .94), rgba(22, 14, 7, .98)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 220px auto repeat,
    var(--sk-walnut);
  border: 2px solid #B9893E; border-bottom: none;
  box-shadow: 0 -2px 0 #2A190B, 0 -12px 30px rgba(0, 0, 0, .6), inset 0 1px 0 rgba(255, 226, 170, .25);
}
.pb-sheet__handle { background: linear-gradient(90deg, #8A5A16, #FFE39A, #8A5A16); height: 5px; }
.pb-sheet__title { font-family: var(--sk-title-font); color: var(--sk-title); text-shadow: 0 1px 0 #6B3E0C, 0 2px 0 #3A2006, 0 3px 8px rgba(0, 0, 0, .6); }
.pb-currency-sheet__panel {
  border: 2px solid #3A2410;
  border-image: url(../../assets/ui/panel-frame.webp) 54 / 18px / 0 stretch;
  background:
    linear-gradient(180deg, rgba(48, 30, 15, .92), rgba(26, 16, 8, .96)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 220px auto repeat,
    var(--sk-walnut);
  background-clip: padding-box;
}

/* Scrollbars: a thin brass rail. */
.pb-body::-webkit-scrollbar-thumb { background: linear-gradient(180deg, #E2B25A, #8A5A16); }
.pb-body::-webkit-scrollbar-track { background: rgba(0, 0, 0, .25); border-radius: 3px; }

/* ---------------------------------------------------------------------
   10. CACHES — the price and cost lines: a painted coin/gem/key icon is a
   block element by default (styles.css §4.16), so inside these lines each
   one broke its line in two ("Cost: 3,000" / coin / "Coins or 200" / gem /
   "Pine Gems"). Inline, they read as one sentence again.
   --------------------------------------------------------------------- */
.pb-card__tag .pb-icon, .pb-card__desc .pb-icon { display: inline-block; vertical-align: -3px; }

/* ---------------------------------------------------------------------
   11. TALENTS — each talent is a stained-wood tile; the one you can buy
   now glows gold.
   --------------------------------------------------------------------- */
.pb-screen .pb-talent-row {
  background:
    linear-gradient(180deg, rgba(62, 40, 20, .80), rgba(26, 16, 8, .90)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 200px auto repeat,
    #2A1B0E;
  border: 1.5px solid rgba(226, 178, 90, .30);
  box-shadow: inset 0 1px 0 rgba(255, 222, 160, .12), 0 3px 8px rgba(0, 0, 0, .4);
}
.pb-screen .pb-talent-row--affordable {
  border-color: rgba(255, 214, 120, .85);
  box-shadow: 0 0 0 1px rgba(255, 214, 120, .35), 0 0 16px rgba(255, 196, 80, .25), inset 0 1px 0 rgba(255, 222, 160, .18);
}
.pb-screen .pb-talent-row__name { text-shadow: 0 1px 2px rgba(0, 0, 0, .8); }
.pb-screen .pb-talent-summary__lv { font-family: var(--sk-title-font); color: var(--sk-title); text-shadow: 0 1px 0 #6B3E0C, 0 2px 4px rgba(0, 0, 0, .6); }

/* ---------------------------------------------------------------------
   12. RIBBONS — the painted red banner (ribbon.webp, 512 x 112: two folded
   tails of 72 px and a straight band in the top 75%) as a stretchable
   3-slice: the tails keep their shape, the band stretches under the word.
   Used where a word is a headline moment: FIRST CLEAR on the results, and
   the Ready? heading on the pre-Level card.
   --------------------------------------------------------------------- */
.pb-result__banner,
[data-testid="screen-companionGate"] .pb-ready__title {
  border: 0 solid transparent;
  border-width: 0 30px;
  border-image: url(../../assets/ui/ribbon.webp) 0 72 0 72 fill / 0 30px 0 30px / 0 stretch;
  background: none;
  border-radius: 0;
  color: #FFE7A8;
  text-shadow: 0 1px 0 #5A0E06, 0 2px 3px rgba(0, 0, 0, .55);
}
.pb-result__banner {
  padding: 6px 10px 15px; font-size: 13px; letter-spacing: 3px; line-height: 1.2;
}
[data-testid="screen-companionGate"] .pb-ready__title {
  align-self: center; width: fit-content; margin: -4px auto 0;
  padding: 3px 14px 13px; line-height: 1.15;
}

/* ---------------------------------------------------------------------
   13. TAPPABLE PANELS — the Trail's companion chip and its level-detail
   peek are <button class="pb-panel pb-panel--flat">: a recessed groove
   said "not a button", so they are stained planks that press like one.
   --------------------------------------------------------------------- */
button.pb-panel {
  border: 2px solid #2A190B;
  border-image: url(../../assets/ui/btn-wood-dark.webp) 30 30 42 30 fill / 11px 11px 15px 11px / 0 stretch;
  background: var(--sk-wood-dark);
  background-clip: padding-box;
  box-shadow: var(--sk-lift);
  transition: transform .07s ease-out, box-shadow .07s ease-out;
}
button.pb-panel:active { transform: translateY(2px); box-shadow: var(--sk-lift-press); }

/* ---------------------------------------------------------------------
   14. GEAR FILTER CHIPS — the All / Acorn Cap / ... chips were 29px tall,
   under the 44px tap floor the brief asks every control to keep. They get
   the floor (the Gear screen scrolls, so the extra 15px per row is free).
   --------------------------------------------------------------------- */
.pb-screen .pb-chip-btn { min-height: 44px; min-width: 44px; }   /* ROUND 48 REVIEW: "All" was 37px wide (ui-verify problem 3) */

/* ---------------------------------------------------------------------
   15. PICKER TILES (ROUND 48 REVIEW, ui-verify problem 2) — the weapon pick
   and companion sheet tiles kept styles.css's near-black green fill, black
   slots inside the walnut sheet. Same stained wood as the cards; the rarity
   border, the carried chip and the selected glow (styles.css
   .pb-companion[data-selected="true"], higher specificity) are untouched.
   --------------------------------------------------------------------- */
.pb-companion {
  background:
    linear-gradient(180deg, rgba(70, 46, 24, .78), rgba(28, 18, 9, .92)),
    url(../../assets/ui/tex-walnut.webp) 0 0 / 200px auto repeat,
    #2A1B0E;
}
