/* ============================================================
   DEBENHAMS GROUP DESIGN SYSTEM — COMPONENTS
   Consumes tokens.css only — no raw colour, font or radius values
   (the one exception is flagged inline). Load AFTER tokens.css.

   C-01 Button (.bd) — colour-alignment brand-colours (post-KM, 26 Aug)
   (DS file → BUTTONS (new) · 9144-1807). Spec on the site: #button.
   New components built in project branches get promoted into this
   file when the brief merges.
   ============================================================ */

/* C-01 Button */
/* C-01 golden truth (colour-alignment brand-colours, 26 Aug): 50px, 16/24, 4px radius on
   EVERY fascia (PLT/Brand Room square-radius modes do not zero buttons), primary uppercase (KM sentence). */
.bd{font-family:var(--font-family-base);font-weight:var(--w-btn,var(--w-strong));font-size:16px;line-height:24px;padding:12px 24px;border-radius:var(--radius-default);text-transform:var(--case-btn1,uppercase);letter-spacing:0;border:1px solid transparent;cursor:pointer;transition:background var(--dur-fast) var(--ease-standard)}
.bd.pri{background:var(--surface-action);color:var(--text-on-action)}
.bd.pri:hover{background:var(--surface-action-hover)}
.bd.pri:active{background:var(--surface-action-pressed)}
.bd.sec{background:transparent;color:#000;border-color:var(--btn-outline,var(--border-action));text-transform:var(--case-btn2,none)} /* secondary: no fill of its own — takes whatever it sits on (white page, PLT sand panel), brand outline, black label, sentence case */
.bd.dis{background:var(--surface-action-disabled);color:#767676;cursor:not-allowed} /* #767676: golden-truth disabled label — reconcile vs text/disabled Grey 3, see Button spec */
.bd.spn{background:var(--surface-action);color:var(--text-on-action);min-width:110px}
.bd.spn i{display:inline-block;vertical-align:middle} /* drawn by the shared .spin rule below */
.bd:focus-visible{outline:var(--border-w-focus) solid var(--border-focus);outline-offset:2px}
@keyframes sp{to{transform:rotate(1turn)}}
@keyframes spin-ease{0%{transform:rotate(0)}100%{transform:rotate(1turn)}}

/* ============================================================
   C-02 Product Card (.pc)
   Figma: DS file aIHmkCaTy9c5EWOxAGw0So → 5992-10841 (hero asset;
   variable layers per 12999-146812). Mobile 170 / desktop 300 —
   here fluid: the grid sizes the card. Boolean layers = optional
   child elements. Icons from assets/ds/icons/ (exported from Figma).
   ============================================================ */
.pc{display:flex;flex-direction:column;gap:12px;font-family:var(--font-family-base);color:var(--text-primary);position:relative;min-width:0}
.pc-img{aspect-ratio:2/3;background:var(--surface-media);position:relative;overflow:hidden;width:100%} /* square corners — matches live + Figma */
.pc-img img.ph{width:100%;height:100%;object-fit:cover;display:block}
.pc-actions{position:absolute;top:8px;right:8px;display:flex;flex-direction:column;gap:8px;align-items:center}
.pc-iconbtn{width:32px;height:32px;min-width:32px;border-radius:var(--radius-pill);background:var(--surface-raised);border:none;display:grid;place-items:center;cursor:pointer;box-shadow:0 2px 8px rgba(15,15,15,.14);padding:0}
.pc-iconbtn img{width:16px;height:16px;display:block;object-fit:contain}
.pc-iconbtn:focus-visible{outline:var(--border-w-focus) solid var(--border-focus);outline-offset:2px}
.pc-iconbtn--sq{border-radius:var(--radius-default)} /* boohooMAN / KM / Brand Room run square wishlist buttons */
.pc-iconbtn--chip{width:24px;height:24px;min-width:24px;border-radius:var(--radius-default);background:var(--badge-bg);box-shadow:none;backdrop-filter:blur(2px)} /* chip follows brand radius: 4px MAN/Deb-side, square PLT/Brand Room (Figma 3-574) */
.pc-iconbtn--chip img{width:13px;height:13px}
.pc-fav--plain{background:none;box-shadow:none;width:28px;height:28px;min-width:28px}
.pc-fav--plain img{width:22px;height:22px;object-fit:contain}
/* badges — bottom-left stack (Petite / Plus / Sale …); AI banner pinned to the image foot */
.pc-badges{position:absolute;left:12px;bottom:12px;display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.pc-badges.has-ai{bottom:32px}
.badge{display:inline-flex;align-items:center;height:28px;padding:4px 8px;background:var(--badge-bg);backdrop-filter:blur(3.5px);border:var(--border-w) solid var(--badge-border);border-radius:var(--radius-default);font-family:var(--font-family-base);font-size:12px;font-weight:var(--w-regular);color:var(--badge-fg);white-space:nowrap;text-transform:var(--cta-case)}
.badge--sale{color:var(--price-sale)}
.badge-ai{position:absolute;left:0;right:0;bottom:0;background:var(--ai-bg);color:var(--ai-fg);backdrop-filter:blur(3.5px);font-family:var(--font-family-base);font-size:10px;font-weight:var(--w-regular);letter-spacing:.06em;text-transform:uppercase;text-align:center;padding:4px 8px}
.badge-ai b{font-weight:var(--w-mid)}
/* quick add — full-width button variant */
.pc-add{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:40px;padding:8px 24px;background:var(--surface-raised);border:var(--border-w) solid var(--border-subtle);border-radius:var(--radius-default);font-family:var(--font-family-base);font-size:16px;font-weight:var(--w-mid);color:var(--text-primary);cursor:pointer;text-transform:var(--cta-case)}
.pc-add img{width:24px;height:24px;object-fit:contain}
.pc-add:hover{border-color:var(--border-strong)}
.pc-add:focus-visible{outline:var(--border-w-focus) solid var(--border-focus);outline-offset:2px}
/* quick add — mini price-row variant (ref: Adanola Complete The Look): a small primary-styled button sitting
   at the right of the price row, so it costs no card height. Icon is the same bag-with-plus, masked to take
   the button ink (Debenhams aqua/black, every other fascia black/white). Hidden with .pc-info in the tile grid view. */
/* mini quick add sits on the titles row (top-right of the info block) — the price row is never squeezed, so it never wraps */
.pc-toprow{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;min-width:0}
.pc-toprow .pc-titles{flex:1;min-width:0}
.pc-qa{display:inline-flex;align-items:center;gap:4px;flex:none;height:24px;padding:0 8px;margin-top:-2px;background:var(--surface-action);color:var(--text-on-action);border:none;border-radius:var(--radius-default);font-family:var(--font-family-base);font-size:11px;line-height:1;font-weight:var(--w-btn,var(--w-strong));letter-spacing:0;text-transform:var(--case-btn1,uppercase);white-space:nowrap;cursor:pointer;transition:background var(--dur-fast) var(--ease-standard)}
.pc-qa i{width:12px;height:12px;display:block;background:currentColor;-webkit-mask:url(icons/lib/icons-quick-add.svg) center/contain no-repeat;mask:url(icons/lib/icons-quick-add.svg) center/contain no-repeat}
.pc-qa:hover{background:var(--surface-action-hover)}
.pc-qa:active{background:var(--surface-action-pressed)}
.pc-qa:focus-visible{outline:var(--border-w-focus) solid var(--border-focus);outline-offset:2px}
.pc--compact .pc-qa{height:22px;font-size:10px;padding:0 7px}
.pc--compact .pc-qa i{width:11px;height:11px}
/* taggstar social proof — Figma Taggstar 00YKWCHwTarfwWZ1HayFUI · 3483-23105 (MAN use case) + 3001-3762 (V2 message library). Live check 16 Oct 2026.
   Grey 1 chip by default (--surface-media: sand on PLT), black text, radius --radius-default, 3.5px backdrop blur. One message per product per placement:
   PLP card  .pc-taggstar  one line under the image / Add button: "Selling Fast! 79 Sold" — claim strong, count regular, 12px, 4px 8px
   PDP       .sp-pdp       two lines (claim strong / context regular) + 12px close, 8px 12px, gap 8 (32px) to the X, soft shadow;
                           mobile: on the main image, 12px from its left and bottom · desktop: pinned to the bottom of the browser window
   Bag       .sp-bag       full width of the line info, 8px, 12px: "Sold <b>X times</b> since your last visit X days ago"
   Per fascia (16 Oct): background via --sp-bg (text / icon / close via --sp-fg — black or white, whichever contrasts), --sp-case for PLT uppercase.
   Optional icon .sp-ico before the text, one per message type (cart purchases · bag added to bag · show views · flame trending · time recent sale ·
   trophy best seller): PLP 14px gap 1 (4px) · PDP 24px gap 2 (8px) · Bag 20px gap 1 (4px). Drop-in for pages without the DS: assets/ds/taggstar.js (same rules). */
.pc-taggstar{display:flex;align-items:center;gap:4px;width:fit-content;max-width:100%;background:var(--sp-bg,var(--surface-media));color:var(--sp-fg,var(--text-primary));border-radius:var(--sp-r,var(--radius-default));padding:4px 8px;font-size:12px;line-height:normal;white-space:nowrap;text-transform:var(--sp-case,none);-webkit-backdrop-filter:blur(3.5px);backdrop-filter:blur(3.5px)}
.pc-taggstar img{display:none}
.pc-taggstar img.sp-ico{display:block;width:14px;height:14px;flex:none}
.pc-taggstar b{font-weight:var(--w-strong)}
.pc-taggstar span{font-weight:var(--w-regular)}
.sp-pdp{display:inline-flex;align-items:center;gap:32px;padding:8px 12px;background:var(--sp-bg,var(--surface-media));color:var(--sp-fg,var(--text-primary));border-radius:var(--sp-r,var(--radius-default));box-shadow:0 0 8.7px rgba(0,0,0,.22);font-family:var(--font-family-base);font-size:12px;line-height:normal;text-transform:var(--sp-case,none);-webkit-backdrop-filter:blur(3.5px);backdrop-filter:blur(3.5px)}
.sp-pdp .in{display:flex;align-items:center;gap:8px}
.sp-pdp .sp-ico{display:block;width:24px;height:24px;flex:none}
.sp-pdp .tx{display:flex;flex-direction:column;gap:2px;white-space:nowrap}
.sp-pdp b{font-weight:var(--w-strong)}.sp-pdp span{font-weight:var(--w-regular)}
.sp-pdp .sp-x{width:12px;height:12px;flex:none;padding:0;border:0;cursor:pointer;background:url("icons/lib/icons-close.svg") center/12px 12px no-repeat}
.sp-pdp .sp-x:has(img){background:none}.sp-pdp .sp-x img{display:block;width:12px;height:12px}
.sp-pdp--lg{font-size:14px}
.sp-pdp.off{display:none}
.sp-on-img{position:absolute;left:12px;bottom:12px;z-index:2}
.sp-pin{position:fixed;left:24px;bottom:24px;z-index:var(--z-toast,60)}
.sp-bag{display:block;width:100%;box-sizing:border-box;padding:8px;background:var(--sp-bg,var(--surface-media));color:var(--sp-fg,var(--text-primary));border-radius:var(--sp-r,var(--radius-default));font-family:var(--font-family-base);font-size:12px;line-height:normal;font-weight:var(--w-regular);text-transform:var(--sp-case,none);-webkit-backdrop-filter:blur(3.5px);backdrop-filter:blur(3.5px)}
.sp-bag:has(.sp-ico){display:flex;align-items:center;gap:4px}.sp-bag .sp-ico{display:block;width:20px;height:20px;flex:none}
.sp-bag b{font-weight:var(--w-strong)}
/* placement + text details (were only in the taggstar.js copy — single source here since 16 Oct) */
.pc-taggstar{overflow:hidden}.pc-taggstar .t{overflow:hidden;text-overflow:ellipsis;min-width:0}.pc-taggstar span b,.sp-bag span b,.sp-pdp span b{font-weight:var(--w-strong)}
.sp-pdp{max-width:calc(100% - 24px)}.sp-pdp .in{min-width:0}.sp-pdp .tx{min-width:0}.sp-pdp.off{display:none!important}
.sp-centre{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2}
.sp-bag .t{flex:1;min-width:0}
/* info block */
.pc-info{display:flex;flex-direction:column;gap:8px;font-size:14px;min-width:0}
.pc-sponsored{color:var(--text-secondary);font-weight:var(--w-mid)} /* Figma uses Grey 4 — lifted to Grey 5 for the AA text floor */
.pc-titles{display:flex;flex-direction:column;gap:4px;min-width:0}
.pc-brand{font-weight:var(--w-strong)}
.pc-name{font-weight:var(--w-regular);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.pc-price{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline}
.pc-price .now{font-weight:var(--w-strong)}
.pc-price.sale .now,.pc-price .pct{color:var(--price-sale)}
.pc-price .was{font-weight:var(--w-mid);text-decoration:line-through}
.pc-price .pct{font-weight:var(--w-regular)}
.pc-offer{color:var(--price-sale);font-weight:var(--w-regular);margin-top:-6px} /* 2px from the price line */
.pc-ndd{display:flex;gap:6px;align-items:center;font-weight:var(--w-regular);color:var(--text-primary)} /* inherits the card text size — same as product name */
.pc-ndd img{width:16px;height:16px;object-fit:contain}
/* colour swatches */
.pc-swatches{display:flex;gap:8px;align-items:center;height:20px}
.pc-swatches .set{display:flex;gap:4px}
/* Figma 921-7470 exact: 20px, 4px radius (3px fill) on every fascia, Grey 2 border,
   selected = black border + white inner keyline, 4px swatch gaps, +N 14px at 8px gap */
.pc-swatch{width:20px;height:20px;border:var(--border-w) solid var(--border-subtle);border-radius:var(--radius-default);padding:0;background:var(--surface-raised);overflow:hidden}
.pc-swatch i{display:block;width:100%;height:100%;border-radius:calc(var(--radius-default)*.75)}
.pc-swatch.on{border-color:var(--icon-primary)}
.pc-swatch.on i{border:1px solid #FFF}
.pc-more{font-weight:var(--w-regular);font-size:14px}
.pc-swatches--round .pc-swatch,.pc-swatches--round .pc-swatch i{border-radius:var(--radius-pill)} /* PLT runs circle swatches */
.pc-swatches--round .pc-swatch{border-color:transparent}
.pc-swatches--round .pc-swatch.on{border-color:var(--icon-primary)}
/* ratings */
.pc-stars{display:flex;gap:8px;align-items:center}
.pc-stars .set{display:flex;gap:2px}
.pc-stars img{width:12px;height:12px;display:block;object-fit:contain}
.pc-stars span{font-weight:var(--w-regular)}
/* compact variant — the shorter PLT / Brand Room format, the target for all fascias */
.pc--compact{gap:8px}
.pc--compact .pc-info{gap:6px;font-size:12px}
.pc--compact .pc-titles{gap:2px}
.pc--compact .pc-brand{font-size:11px;letter-spacing:.04em} /* title case, never caps */
.pc--compact .pc-name{font-size:12px}
.pc--compact .pc-price{font-size:13px}
.pc--compact .pc-offer,.pc--compact .pc-sponsored{font-size:11px}
.pc--compact .pc-offer{margin-top:-4px}
.pc--compact .pc-iconbtn{width:28px;height:28px;min-width:28px}
.pc--compact .pc-iconbtn img{width:14px;height:14px}
.pc--compact .badge{height:24px;font-size:11px}
.pc--compact .pc-add{min-height:36px;font-size:14px}
.pc--compact .pc-add img{width:20px;height:20px}
.pc-name--caps{text-transform:uppercase;letter-spacing:.02em} /* PLT names run uppercase */
/* flush variant — full-bleed zero-gutter grids (boohooMAN new): text insets 4px under the image */
.pc--flush .pc-info{padding:0 4px 12px}
.pc--flush .pc-taggstar,.pc--flush .pc-add{margin:0 4px}

/* ============================================================
   C-05 Header (.hd) — main header + checkout header, mobile + desktop. Render with assets/ds/header.js
   (<header data-hd>); content = each fascia's live header, 12 Oct 2026. Brand tokens style it
   Figma: header 3793-3545 · USP banner 11982-37171 (same file)
   ============================================================ */
.hd{background:var(--surface-page);font-family:var(--font-family-base);color:var(--text-primary)}
/* USP banner — Figma 11982-37171. Height follows the content: one line = 4 + 15 + 4 = 23px on mobile (no min-height).
   Types: Single · Double (dash between) · Text + Code ("Code: XYZ", value strong) · Text + Countdown (digits on their own row)
   · Text + Code + Countdown. Any type may carry a * — then a .usp-cav caveat line is attached to the bottom of the same banner. */
.hd-usp{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px 16px;min-height:0;background:var(--usp-a-bg);color:var(--usp-a-fg);font-family:var(--font-family-base);font-size:12px;line-height:15px;font-weight:var(--w-regular);text-transform:var(--cta-case);text-align:center}
.hd-usp b{font-weight:var(--w-strong)}
@media(min-width:1024px){.hd-usp{font-size:14px;line-height:18px;padding:6px 24px}}
/* Figma colourways (override the fascia's usp-a slot when a banner needs a fixed one) */
.usp--g05{background:#FAFAFA;color:#000}.usp--g1{background:#F2F2F2;color:#000}.usp--black{background:#000;color:#FFF}.usp--red{background:#000;color:#FFF;--usp-cd:#D33F3F}
.hd-usp--b{background:var(--usp-b-bg);color:var(--usp-b-fg)}
/* USP strip — the multi-cell banner from the Header Figma (cells alternate usp-a / usp-a2) */
.usp-strip{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:8px;font-family:var(--font-family-base);text-align:center;background:var(--usp-a-bg);padding:0 16px;max-width:100%} /* 16px side margin, per production */
.usp-strip:empty{display:none}
.usp-cell{padding:8px;min-height:63px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:var(--usp-a-bg);color:var(--usp-a-fg);font-size:14px;font-weight:var(--w-regular);text-transform:var(--cta-case)}
.usp-cell:nth-child(even){background:var(--usp-a-bg2,var(--usp-a-bg))}
.usp-cell b{font-weight:var(--w-strong);font-size:14px;line-height:21px}
.usp-cell u{text-underline-offset:2px;cursor:pointer;font-size:14px;line-height:1.1}
.usp-cell .s{font-weight:var(--w-regular);line-height:1.1}
.usp-cell .s.cd,.hd-usp .s.cd{color:var(--usp-cd-live,currentColor)} /* live countdown accent — MAN red, PLT black (production) */
.hd-usp--top{background:var(--usp-top-bg,var(--usp-a-bg));color:var(--usp-top-fg,var(--usp-a-fg))}
.hd-usp:has(.s){flex-direction:column;gap:2px} /* two-line bar: bold headline over the sub line */
.hd-usp .s{font-weight:var(--w-regular)}
/* mobile: one message at a time, rotating (Figma 13005-165658) */
@media(max-width:1023px){.usp-strip{grid-auto-flow:row;grid-template-columns:1fr;padding:0 16px}.usp-strip .usp-cell{display:none;min-height:0;padding:4px 0;font-size:12px;line-height:15px}.usp-strip .usp-cell b{font-size:12px;line-height:15px}.usp-strip .usp-cell.rot-on{display:flex}} /* rotating cells take the bar's height, not a fixed 56 */
/* rotating cells animate in */
@keyframes usp-rotate{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media(max-width:1023px){.usp-strip .usp-cell.rot-on{animation:usp-rotate var(--dur-slow) var(--ease-standard)}}
/* the bar below pins to the top of the PLP window on scroll (Figma 13005-165567) */
.hd-usp--sticky{position:sticky;top:0;z-index:var(--z-sticky)}
.hd-usp[hidden]{display:none}
/* USP banner content — Figma 11982-37171. Separator is a 4px dash (never a mid-dot);
   'Code:' label regular, code value strong; countdown digits strong (Black/Red variant sets --usp-cd red);
   caveat = 10px caption line. RULE (design + dev build): an asterisk may only appear in banner copy
   when the Caveat type is used — the caption text is a required prop. No caption, no asterisk. */
.usp-sep{display:inline-block;width:4px;height:1px;background:currentColor;vertical-align:middle;margin:0 8px;flex:none}
.usp-code{white-space:nowrap}.usp-code b{font-weight:var(--w-strong);user-select:all} /* "Code: XYZ" — label regular, value strong, one tap selects it */
.usp-row{display:inline-flex;flex-wrap:wrap;align-items:center;justify-content:center;row-gap:2px}
.usp-row .usp-t{white-space:normal}
.usp-sep.wrapbr{display:block;width:100%;height:0;margin:0;background:none} /* wrapped sections: the dash yields to a line break */
.hd-usp:has(.usp-cd),.usp-cell:has(.usp-cd){flex-direction:column;gap:2px} /* countdown always sits on its own row, 2px under the text */
.usp-cav{display:block;width:100%;font-size:10px;font-weight:var(--w-regular);line-height:10px;margin-top:2px;text-align:center;text-transform:none} /* attached to the bottom of its banner: 4px above it (2 gap + 2), the banner's own 4px below */
.usp-cd{display:inline-flex;gap:1px;align-items:center;font-weight:var(--w-strong);font-variant-numeric:tabular-nums;color:inherit} /* tabular digits: the row never jitters as it ticks */
.usp-cd b{font-weight:var(--w-strong);color:var(--usp-cd,inherit)}
.hd-usp .usp-cd{line-height:17px}@media(min-width:1024px){.hd-usp .usp-cd{line-height:20px}} /* Figma countdown bar = 4 + 15 + 2 + 17 + 4 = 42 */
.usp-cd i{font-style:normal;width:5px;text-align:center;padding-bottom:2px;color:inherit} /* colons stay banner-ink; only the digits take --usp-cd (Black/Red) */
/* Rows (Figma 13005-165658) — at most two; row 1 usually rotates, row 2 is fixed.
   .usp-stack = a rotating row on mobile: every message shares one grid cell, so the bar is always the height of its tallest message
   and rotating never moves the page. usp.js advances .on every 5s (data-rotate="ms"); the incoming message fades in over the outgoing
   one, which stays solid underneath (.was) — no background flash between them.
   .usp-cells = the same row on desktop: its messages laid across the bar as equal cells; --alt alternates usp-a / usp-a2 cell shades. */
.usp-stack{display:grid;touch-action:pan-y;user-select:none;-webkit-user-select:none} /* horizontal swipes go to the row (usp.js), vertical still scrolls */
.usp-stack a,.usp-stack img{-webkit-user-drag:none}
/* countdown colour: light bars run the bar ink (black); dark bars run white, or red (#D33F3F) when the row asks for it (.usp-cd-red — the renderer
   sets it from the row's cd: 'red', and the Black / Red colourway always). Overrides any fascia-wide --usp-cd. */
.usp-light,.usp-dark,.usp--g05,.usp--g1{--usp-cd:currentColor}
.usp-dark.usp-cd-red,.usp--red{--usp-cd:#D33F3F}
/* rendered banners (usp.js): the whole bar is the link, copy keeps each fascia's live casing */
a.hd-usp{text-decoration:none;cursor:pointer}
a.hd-usp:hover .usp-t{text-decoration:underline;text-underline-offset:2px}
.usps .hd-usp{text-transform:none}
.hd-usp.cav-missing .usp-cav{color:#D33F3F;font-weight:var(--w-strong)} /* review tooling: an asterisk with no caveat */
.usp-stack>.hd-usp{grid-area:1/1;visibility:hidden}
.usp-stack>.hd-usp.was{visibility:visible;z-index:0}
.usp-stack>.hd-usp.on{visibility:visible;z-index:1}
.usp-stack>.hd-usp.on.in{animation:usp-xfade 700ms cubic-bezier(.4,0,.2,1) both}
@keyframes usp-xfade{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.usp-stack>.hd-usp.on.in{animation:none}}
.usp-cells{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr)}
.usp-cells--alt>.hd-usp:nth-child(even){background:var(--usp-a-bg2,var(--usp-a-bg))}
.hd-bar{display:flex;align-items:center;justify-content:space-between;height:56px;padding:0 16px;gap:16px}
.hd-left{display:flex;align-items:center;gap:16px;min-width:0}
.hd-burger{width:24px;height:24px;min-width:24px;background:none;border:none;padding:0;cursor:pointer}
.hd-burger img{width:100%;height:100%;display:block;object-fit:none} /* 24-grid glyph at native size — library SVGs are trimmed to the glyph, never scale them up */
.hd-logo{width:106px;height:auto;max-height:33px;object-fit:contain;object-position:left center;display:block} /* live: every fascia's logo is fitted to 106 wide on mobile (height follows the mark) */
.hd-logo-txt{width:auto;font-weight:var(--w-strong);font-size:16px;white-space:nowrap}
.hd-flag{width:24px!important;height:17px!important;object-fit:contain!important}
.hd-icons{display:flex;align-items:center}
.hd-icons button{width:38px;height:40px;display:grid;place-items:center;background:none;border:none;cursor:pointer;padding:0} /* production: 24 icon + 7px side padding, py-2 */
.hd-icons img{width:var(--hd-icon,24px);height:var(--hd-icon,24px);display:block;object-fit:none} /* native glyph size inside the 24 box (bookmark 15×21, bag 20×23) — matches production, no optical fudge */
.hd-icons img.favic{width:var(--hd-favic,24px);height:var(--hd-favic,24px)}
.hd-icons button:focus-visible,.hd-burger:focus-visible{outline:var(--border-w-focus) solid var(--border-focus);outline-offset:2px}
/* desktop bar (≥1024): logo · centred pill search · icons */
.hd-bar--desktop{height:88px;padding:16px var(--plp-margin,16px);max-width:2000px;margin:0 auto}
.hd-bar--desktop{gap:var(--gap-10,40px)}
.hd--desktop .hd-bar--desktop{padding:var(--gap-4,16px) 52px} /* live 1440: logo and icons sit 52px in (gap 13) */
.hd-bar--desktop .hd-logo{width:141px;max-height:40px;flex:none} /* live: 141 wide on desktop for every fascia */
.hd-search{flex:1;max-width:800px;margin:0 auto;height:56px;/* production: h-14 */background:var(--surface-media);border:none;border-radius:var(--radius-pill);display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 24px;font-family:var(--font-family-base);font-size:16px;font-weight:var(--w-regular);color:var(--text-secondary);cursor:text}
.hd-search .ics{display:flex;gap:20px;align-items:center}
.hd-search img{width:24px;height:24px;display:block;object-fit:none}
.hd-search--underline{background:transparent;border-radius:0;border-bottom:var(--border-w) solid var(--icon-primary);padding:0 4px} /* PLT pattern */
.hd-nav{display:flex;gap:var(--gap-4,16px);align-items:center;justify-content:center;height:40px;background:var(--nav-bg);color:var(--nav-fg);font-size:16px;font-weight:var(--w-regular);overflow-x:auto;padding:0 var(--gap-4,16px)} /* live case is in the data (header.js) — no forced transform */
.hd-nav--bold{font-weight:700}
[data-hd-brand="plt"] .hd-nav,[data-brand="plt"] .hd-nav{font-size:12px;font-weight:300}
[data-hd-brand="boohoo"] .hd-nav,[data-brand="boohoo"] .hd-nav{font-size:14px} /* Jake 15 Oct 2026: boohoo nav 14, not 16 */
.hd-nav a.hl{background:#CCF500;color:#000;padding:0 var(--gap-2,8px);align-self:stretch;display:flex;align-items:center} /* Warehouse Outlet */
.hd-nav a{color:inherit;text-decoration:none;white-space:nowrap}
.hd-nav a.sale{color:#FF0000;font-weight:var(--w-strong)}
[data-hd-brand="debenhams"] .hd-nav a.sale{color:#D33F3F;font-weight:inherit}
[data-hd-brand="karenmillen"] .hd-nav a.sale,[data-hd-brand="plt"] .hd-nav a.sale{color:inherit;font-weight:700} /* KM black bold · PLT white bold */
.hd-nav a:hover{text-decoration:underline}
/* inverted header (Misspap, Training Dept — live 12 Oct): black logo bar, light mark, white icons; nav keeps --nav-bg / --nav-fg */
.hd--inv .hd-bar{background:var(--hd-bg,#000);color:var(--hd-fg,#FFF)}
.hd--inv .hd-bar--desktop{max-width:none}
.hd--inv .hd-icons img,.hd--inv .hd-burger img,.hd--inv .hd-search img{filter:invert(1)}
.hd--inv .hd-icons img.hd-flag{filter:none}
.hd--inv .hd-logo-txt{color:var(--hd-fg,#FFF)}
.hd--inv .hd-count::after{background:var(--hd-fg,#FFF);color:var(--hd-bg,#000)}
.hd--inv .hd-search{background:var(--hd-search-bg,#333);color:var(--hd-search-fg,#FFF)}
.hd--inv .hd-search--underline{background:transparent;border-bottom-color:var(--hd-fg,#FFF)}

/* ============================================================
   C-04 Sort & Filter (.sf) — combined pattern (winning A/B/C route)
   Figma: s7WDE3BkCxbgqJ4x4hoV80 → 1783-11572
   Desktop = dropdown row · Mobile = NDD toggle + Sort & Filter → sheet
   ============================================================ */
.sf-bar{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;padding:12px 0;font-family:var(--font-family-base);font-size:14px;color:var(--text-primary)}
.sf-bar--strip{} /* desktop strip under the category links — borderless per review */
/* mobile split bar — live platform pattern: Filters ⚏ | Relevance ⌄ */
.sf-split{display:grid;grid-template-columns:1fr 1fr;border-top:var(--border-w) solid var(--border-subtle);border-bottom:var(--border-w) solid var(--border-subtle);font-family:var(--font-family-base);font-size:15px;color:var(--text-primary);margin:0 calc(var(--plp-margin,16px) * -1)} /* rules run edge to edge; button padding keeps labels on the margin */
.sf-split button{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 16px;font-family:inherit;font-size:inherit;color:inherit;text-align:left}
.sf-split button+button{border-left:var(--border-w) solid var(--border-subtle)}
.sf-split i.ch{width:16px;height:16px;background:url("icons/lib/icons-down.svg") center/contain no-repeat}
.sf-split .fic{width:18px;height:18px;background:url("icons/lib/icons-filter.svg") center/contain no-repeat;display:inline-block}
.sf-dd{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;width:160px;height:42px;padding:8px;background:var(--surface-page);border:var(--border-w) solid var(--surface-media);border-radius:var(--radius-default);font-family:inherit;font-size:16px;font-weight:var(--w-regular);color:var(--text-primary);cursor:pointer;text-transform:var(--cta-case)} /* 160px dropdowns, grey-2 keyline (Figma 13003-147068) */
.sf-dd:hover{border-color:var(--border-strong)}
.sf-dd i{width:16px;height:16px;flex:none;background:url("icons/lib/icons-down.svg") center/contain no-repeat}
.sf-sort{margin-left:auto;width:220px} /* sort pinned right, 220px */
.sf-filters{display:flex;flex-wrap:wrap;gap:8px 12px;flex:0 1 auto;min-width:0;max-height:44px;overflow:hidden} /* one row; show-more sits right after the filters, not by sort */
.sf-bar.expanded .sf-filters{max-height:none}
.sf-more{font-size:14px;color:var(--text-primary);white-space:nowrap;align-self:center;flex:none}
.sf-bar--clamp{flex-wrap:nowrap}
.sf-bar:has(.sf-float){padding:0} /* pill rows carry their own 8px */
.sf-ndd{display:inline-flex;align-items:center;gap:8px;font-weight:var(--w-regular);cursor:pointer;user-select:none}
.sf-ndd .track{width:40px;height:22px;border-radius:var(--radius-pill);background:var(--surface-action-disabled);position:relative;transition:background var(--dur-base) var(--ease-standard);flex:none}
.sf-ndd .track::after{content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:var(--radius-pill);background:var(--surface-raised);box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform var(--dur-base) var(--ease-standard)}
.sf-ndd.on .track{background:var(--surface-action)}
.sf-ndd.on .track::after{transform:translateX(18px)}
.sf-btn{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px;border:var(--border-w) solid var(--border-strong);border-radius:var(--radius-pill);background:var(--surface-page);font-family:inherit;font-size:14px;font-weight:var(--w-strong);color:var(--text-primary);cursor:pointer;text-transform:var(--cta-case)}
.sf-btn img{width:16px;height:16px;object-fit:contain}
.sf-chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;background:var(--surface-sunken);border:var(--border-w) solid var(--border-subtle);border-radius:var(--radius-pill);font-size:13px}
.sf-chip button{background:none;border:none;cursor:pointer;font-size:14px;line-height:1;padding:0;color:var(--icon-secondary)}
/* mobile floating filter pills — New format (Brand Room Figma 739-92223)
   radius 42 by design on every fascia (explicitly round, even square-radius brands) */
.sf-float{display:flex;gap:8px;align-items:center;overflow-x:auto;scrollbar-width:none;padding:8px var(--plp-margin,16px);margin:0 calc(var(--plp-margin,16px) * -1);width:auto} /* full-bleed: pills iceberg off the right, 16pt internal padding */
.sf-pill{display:inline-flex;gap:8px;align-items:center;height:34px;padding:8px 12px;background:var(--surface-raised);border:var(--border-w) solid var(--surface-media);border-radius:var(--radius-pill);font-family:var(--font-family-base);font-size:14px;font-weight:var(--w-regular);color:var(--text-primary);white-space:nowrap;flex:none;cursor:pointer}
.sf-pill i.dn{width:12px;height:12px;background:url("icons/lib/icons-down.svg") center/contain no-repeat}
.sf-pill img{width:14px;height:14px;object-fit:contain}
.sf-pill .track{width:30px;height:16px;border-radius:var(--radius-pill);background:var(--surface-action-disabled);position:relative;transition:background var(--dur-base) var(--ease-standard);flex:none}
.sf-pill .track::after{content:'';position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:var(--radius-pill);background:var(--surface-raised);box-shadow:0 1px 2px rgba(0,0,0,.3);transition:transform var(--dur-base) var(--ease-standard)}
.sf-pill.on .track{background:var(--surface-action)}
.sf-pill.on .track::after{transform:translateX(14px)}

/* mobile sheet */
.sf-drawer{position:fixed;inset:0;background:var(--surface-page);z-index:var(--z-modal);display:none;flex-direction:column;font-family:var(--font-family-base)}
.sf-drawer.open{display:flex}
.sf-drawer .head{display:flex;align-items:center;justify-content:space-between;height:56px;padding:0 16px;border-bottom:var(--border-w) solid var(--border-subtle);font-size:16px;font-weight:var(--w-strong)}
.sf-drawer .head button{background:none;border:none;cursor:pointer;padding:4px;display:grid;place-items:center}
.sf-drawer .head button img{width:18px;height:18px;object-fit:contain}
.sf-drawer .rows{flex:1;overflow-y:auto}
.sf-row{display:flex;align-items:center;justify-content:space-between;height:52px;padding:0 16px;border-bottom:var(--border-w) solid var(--border-subtle);font-size:16px;font-weight:var(--w-regular);width:100%;background:none;border-left:none;border-right:none;border-top:none;font-family:inherit;color:var(--text-primary);cursor:pointer}
.sf-row i{width:16px;height:16px;background:url("icons/lib/icons-right.svg") center/contain no-repeat}
.sf-cta{margin:16px;min-height:48px;background:var(--surface-action);color:var(--text-on-action);border:none;border-radius:var(--radius-default);font-family:inherit;font-size:14px;font-weight:var(--w-strong);letter-spacing:0;text-transform:uppercase;cursor:pointer}
.sf-cta:active{background:var(--surface-action-pressed)}

/* ============================================================
   Category nav — roundels (image circles) or pills or text links
   ============================================================ */
.cat-row{display:flex;gap:12px;align-items:flex-start;overflow-x:auto;scrollbar-width:none;padding:12px 0;font-family:var(--font-family-base)}
/* Roundel — mobile per App-PLP 1124-2505 (90px, 10px label gap) · desktop per 13003-149196 (173px, 8px label gap) */
.roundel{display:flex;flex-direction:column;align-items:center;gap:10px;width:90px;flex:none;text-decoration:none;color:var(--text-primary);position:relative}
.roundel i{width:90px;height:90px;border-radius:var(--radius-pill);display:block;background:var(--surface-media);position:relative;overflow:hidden}
.roundel span{font-size:14px;font-weight:var(--w-regular);text-align:center;text-transform:capitalize;line-height:1.3;letter-spacing:-.35px}
@media(min-width:1024px){.roundel{width:173px;gap:8px}.roundel i{width:173px;height:173px}}
.cat-row--r{gap:8px} /* roundel rows: 8px mobile, 15px desktop */
@media(min-width:1024px){.cat-row--r{gap:15px}}
.roundel--outline i{border:4px solid var(--brand-primary);padding:4px;background:var(--surface-page)}
.roundel--outline i::after{content:'';position:absolute;inset:4px;border-radius:var(--radius-pill);background:var(--roundel-fill,var(--surface-media))}
.roundel--onimage span{position:absolute;left:8px;right:8px;top:50%;transform:translateY(-50%);color:var(--text-inverse);font-size:15px;z-index:1}
.roundel--onimage i::after{content:'';position:absolute;inset:0;border-radius:var(--radius-pill);background:rgba(0,0,0,.3)}
.roundel--onimage.roundel--display span{font-weight:var(--w-strong);text-transform:uppercase;letter-spacing:-.03em;font-size:16px}
@media(min-width:1024px){.roundel--onimage span{font-size:18px}.roundel--onimage.roundel--display span{font-size:20px}}
.cat-row--edge{justify-content:flex-start} /* mobile: from the left margin, icebergs off the right */
@media(min-width:1024px){.cat-row--edge{justify-content:center}} /* desktop: centered */
.roundel--white i{background:#FFF;border:var(--border-w) solid var(--border-subtle)} /* MAN roundels: white ground, contained imagery (13003-147021) */
.roundel--white i img{padding:8px}
.catpill{display:inline-flex;align-items:center;height:36px;padding:0 14px;background:var(--surface-media);border:none;border-radius:var(--radius-default);font-size:14px;font-weight:var(--w-regular);color:var(--text-primary);text-decoration:none;white-space:nowrap;flex:none;text-transform:var(--cta-case)} /* Grey 1 pills — never fully rounded */
.catpill:hover{filter:brightness(.97)}
.cat-row--pills{gap:8px} /* pill nav links sit 8px apart */
.catpill--solid{} /* alias — pills are badge-format everywhere now */
.catlinks{display:flex;flex-wrap:wrap;gap:8px 20px;justify-content:center;padding:8px 0;font-family:var(--font-family-base)}
.catlinks a{font-size:14px;font-weight:var(--w-regular);color:var(--text-primary);text-decoration:underline;text-underline-offset:3px;white-space:nowrap;text-transform:var(--cta-case)}

/* Breadcrumb — Figma 12711-4044. 12px w-regular capitalize, slash separators; share icon = PDP mobile only */
.bc{display:flex;flex-wrap:nowrap;white-space:nowrap;overflow:hidden;gap:8px;row-gap:8px;align-items:center;padding:var(--gap-4,16px) 0;font-family:var(--font-family-base);font-size:12px;font-weight:var(--w-regular);color:var(--text-primary)}
.bc a{color:inherit;text-decoration:none;text-transform:capitalize}
.bc a:hover{text-decoration:underline}
.bc .sep{letter-spacing:.4px}
.bc .cur{text-transform:capitalize}
.bc-share{margin-left:auto;width:20px;height:20px;background:none;border:none;padding:0;cursor:pointer}
.bc-share img{width:100%;height:100%;object-fit:contain}

/* header bag / wishlist count */
.hd-count{position:relative}
.hd-count::after{content:attr(data-n);position:absolute;top:4px;right:2px;width:var(--hd-count,14px);height:var(--hd-count,14px);border-radius:50%;background:var(--icon-primary);color:var(--text-inverse);font-size:var(--hd-count-fs,8px);font-weight:var(--w-mid);display:grid;place-items:center;padding:0;line-height:1} /* always 1:1 */

/* ============================================================
   C-08 Footer v2 (.ftr) — Figma DS 664-1064 (Desktop 664-1062 · Mobile 664-1063), content live 12 Oct 2026.
   Render with assets/ds/footer.js (<footer data-ftr>). One component, container-query responsive:
   ≥ 1024 = desktop, below = mobile. Spacing in gaps (1 gap = 4px). The older .ft block below stays for legacy pages.
   ============================================================ */
.ftr{container-type:inline-size;display:block;background:var(--surface-page);color:var(--text-primary);font-family:var(--font-family-base);font-weight:var(--w-regular)}
.ftr,.ftr *{box-sizing:border-box}
.ftr-fit{display:block;max-width:none}.fv:has(.ftr-fit){flex-basis:100%}.fv:has(.ftr-fit) .fvc{overflow:visible}
.ftr :is(h3,p,small,b,span,li,a,button){color:var(--text-primary)} /* own ink — never inherit a host canvas colour */
.ftr .bd{color:var(--text-on-action)}
.ftr a{color:inherit;text-decoration:none}
.ftr ul{list-style:none;margin:0;padding:0}
.ftr h3,.ftr p{margin:0}
.ftr-in{width:100%;max-width:1440px;margin:0 auto;padding:0 var(--gap-4,16px)}
/* newsletter band — mobile: gap 8 (32px) top/bottom, centred stack, gap 4 (16px) between */
.ftr-news{background:var(--ftr-band,#FAFAFA)}
.ftr-news .ftr-in{display:flex;flex-direction:column;gap:var(--gap-4,16px);padding-top:var(--gap-8,32px);padding-bottom:var(--gap-8,32px);text-align:center}
.ftr-copy{display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.ftr-copy h3{font-size:24px;line-height:1.25;font-weight:var(--w-strong)}
.ftr-copy p{font-size:16px;line-height:1.35}
.ftr-form{display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.ftr-sub{display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.ftr-sub input{width:100%;height:50px;padding:0 var(--gap-4,16px);border:1px solid var(--border-control,#B5B5B5);border-radius:var(--radius-default);background:var(--surface-raised);font:inherit;font-size:16px;color:var(--text-primary)}
.ftr-sub input::placeholder{color:#767676}
.ftr-sub input:focus{border-color:#000;outline:0;caret-color:#2797FF} /* black only while typing, back to Grey 3 on blur */
.ftr-sub .bd{width:100%;height:50px;padding:0 var(--gap-6,24px)}
.ftr-legal{font-size:14px;line-height:1.4}
.ftr-legal a{text-decoration:underline;text-underline-offset:2px}
/* body — mobile order: sister brands + payments, accordions, apps, country, social */
.ftr-main{display:flex;flex-direction:column;padding:0}
.ftr-cols{order:2;border-top:1px solid var(--border-subtle,#E7E7E7);margin-top:var(--gap-8,32px)}
.ftr-col{border-bottom:1px solid var(--border-subtle,#E7E7E7)}
.ftr-h{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--gap-4,16px);padding:var(--gap-4,16px);background:none;border:0;cursor:pointer;font:inherit;font-size:16px;font-weight:var(--w-mid);color:inherit;text-align:left}
.ftr-cols.caps .ftr-h{text-transform:uppercase}
.ftr-chev{width:16px;height:16px;flex:none;background:currentColor;-webkit-mask:url(icons/lib/icons-down.svg) center/contain no-repeat;mask:url(icons/lib/icons-down.svg) center/contain no-repeat;transition:transform var(--dur-base,.2s)}
.ftr-col.open .ftr-chev{transform:rotate(180deg)}
.ftr-col ul{display:none;padding:0 var(--gap-4,16px) var(--gap-4,16px)}
.ftr-col.open ul{display:block}
.ftr-col li a{display:block;font-size:16px;line-height:24px;padding:5.5px 0} /* 35px row (Figma), wraps at 24 */
.ftr-rail{order:3;display:flex;flex-direction:column;align-items:center;gap:var(--gap-10,40px);padding:var(--gap-8,32px) var(--gap-4,16px) 0;text-align:center}
.ftr-blk{display:flex;flex-direction:column;align-items:center;gap:var(--gap-4,16px)}
.ftr-h4{font-size:16px;line-height:25px;font-weight:var(--w-mid)}
/* footer headings are always bold on live, even where the fascia's "strong" weight is lighter */
.ftr{--ftr-strong:max(var(--w-strong),600)}
.ftr-icons{display:flex;gap:26px;align-items:center;flex-wrap:wrap;justify-content:center}
.ftr-icons img{width:24px;height:24px;display:block;object-fit:contain}
.ftr-badges{display:flex;gap:14px;align-items:center;justify-content:center;flex-wrap:wrap}
.ftr-badges img{height:40px;width:auto;display:block}
.ftr-select{display:flex;align-items:center;gap:var(--gap-2,8px);width:100%;max-width:358px;height:50px;padding:0 var(--gap-3,12px);border:1px solid var(--border-control,#B5B5B5);border-radius:var(--radius-default);background:var(--surface-raised);font:inherit;font-size:16px;color:inherit;cursor:pointer;text-align:left}
.ftr-select img{width:32px;height:23px;flex:none}
.ftr-select span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ftr-strip{order:1;display:flex;flex-direction:column;align-items:center;gap:var(--gap-8,32px);padding-top:var(--gap-8,32px);padding-bottom:0}
.ftr-sis{display:flex;flex-wrap:wrap;gap:var(--gap-4,16px);align-items:center;justify-content:center}
.ftr-sis img{height:12px;width:auto;max-width:64px;object-fit:contain}
.ftr-pay{display:flex;flex-wrap:wrap;gap:var(--gap-2,8px);justify-content:center}
.ftr-pay img{width:46px;height:32px;display:block;object-fit:contain}
.ftr-base{display:flex;flex-direction:column;align-items:center;gap:var(--gap-4,16px);padding:var(--gap-8,32px) var(--gap-4,16px) var(--gap-6,24px)}
.ftr-logo{height:21px;width:auto;max-width:144px;object-fit:contain}
.ftr-base small{font-size:14px;text-transform:uppercase}
/* mobile order (Figma 664-1063): band · sister brands + payments · accordions + rail · logo */
.ftr{display:flex;flex-direction:column}
.ftr>.ftr-news{order:0}.ftr>.ftr-strip{order:1}.ftr>.ftr-main{order:2}.ftr>.ftr-base{order:3}
/* PLT runs a quieter band title */
[data-ftr-brand="plt"] .ftr-copy h3{font-size:16px;font-weight:var(--w-regular)}

/* ---- desktop ≥ 1024: Figma 664-1062 ---- */
@container (min-width:1024px){
  .ftr-in{padding:0 var(--gap-20,80px)}
  .ftr-news .ftr-in{flex-direction:row;align-items:center;justify-content:space-between;gap:var(--gap-10,40px);text-align:left}
  .ftr-copy{max-width:532px}
  .ftr-copy h3{font-size:36px;line-height:1.2;font-weight:var(--ftr-strong);white-space:nowrap}
  .ftr-copy p{font-size:18px;line-height:28px}
  .ftr-form{max-width:588px;width:100%;text-align:center}
  .ftr-sub{flex-direction:row}
  .ftr-sub input{flex:1;min-width:0}
  .ftr-sub .bd{width:auto;flex:none}
  .ftr>.ftr-main{order:1}.ftr>.ftr-strip{order:2}
  .ftr-main{flex-direction:row;justify-content:space-between;gap:var(--gap-8,32px);padding:var(--gap-10,40px) var(--gap-20,80px) 0}
  .ftr-cols{order:0;display:flex;gap:var(--gap-8,32px);border:0;margin:0}
  .ftr-col{border:0;min-width:0;max-width:220px}
  .ftr-h{padding:0 0 var(--gap-4,16px);cursor:default;font-weight:var(--ftr-strong);line-height:25px;pointer-events:none}
  .ftr-h .ftr-chev{display:none}
  .ftr-col ul,.ftr-col.open ul{display:block;padding:0}
  .ftr-rail{order:1;align-items:flex-start;text-align:left;gap:var(--gap-10,40px);padding:0;flex:none;max-width:248px}
  .ftr-blk{align-items:flex-start}
  .ftr-h4{font-weight:var(--ftr-strong)}
  .ftr-icons,.ftr-badges{justify-content:flex-start}
  .ftr-badges{flex-direction:column;align-items:flex-start;gap:var(--gap-3,12px)}
  .ftr-select{width:248px}
  .ftr-strip{flex-direction:row;justify-content:space-between;align-items:center;gap:var(--gap-6,24px);margin-top:var(--gap-10,40px);padding-top:var(--gap-10,40px);position:relative}
  .ftr-strip::before{content:"";position:absolute;top:0;left:var(--gap-12,48px);right:var(--gap-12,48px);border-top:1px solid var(--border-subtle,#E7E7E7)}
  .ftr-strip>span:empty{display:none}
  .ftr-strip:has(>span:empty){justify-content:flex-end}
  .ftr-sis{gap:var(--gap-5,20px);justify-content:flex-start;flex-wrap:nowrap}
  .ftr-sis img{height:14px;max-width:96px}
  .ftr-pay{flex-wrap:nowrap}
  .ftr-base{padding:var(--gap-10,40px) var(--gap-20,80px) var(--gap-12,48px)}
  .ftr-logo{height:23px;max-width:180px}
}

/* ============================================================
   C-08 Footer (.ft) — Figma 664-1064 (Debenhams) · live-checked
   across fascias 03 Sep. One template: newsletter band, link
   columns + social/app rail, sister-brands (Debenhams only),
   payment strip, centre logo + copyright. Tokens carry the brand.
   ============================================================ */
.ft{background:var(--surface-page);color:var(--text-primary);font-family:var(--font-family-base);margin-top:64px}
.ft-news,.ft-cols,.ft-brands,.ft-pay,.ft-apps,.ft-base{max-width:2000px;margin-left:auto;margin-right:auto}
.ft-apps{display:flex;gap:12px;align-items:center;justify-content:center;padding:18px var(--plp-margin,16px) 0}
.ft-apps img{height:40px;width:auto;display:block}
.ft a{color:inherit;text-decoration:none}
.ft a:hover{text-decoration:underline}
.ft-news{background:var(--ft-band);padding:40px var(--plp-margin,16px);display:grid;gap:24px;grid-template-columns:1fr;align-items:start}
@media(min-width:1024px){.ft-news{grid-template-columns:1.1fr 1fr}}
.ft-news h3{font-size:26px;font-weight:var(--w-strong);letter-spacing:-.01em;margin-bottom:10px}
.ft-news p{font-size:14px;font-weight:var(--w-regular);max-width:420px}
.ft-sub{display:flex;gap:12px;align-items:stretch}
.ft-sub input{flex:1;min-width:0;height:50px;padding:0 16px;border:var(--border-w) solid var(--border-default);border-radius:var(--radius-default);background:var(--surface-raised);font-family:inherit;font-size:14px;color:var(--text-primary)}
.ft-sub input::placeholder{color:var(--text-secondary)}
.ft-sub .bd{padding:0 26px}
.ft-legal{font-size:11px;color:var(--text-secondary);margin-top:10px;max-width:640px}
.ft-cols{display:grid;grid-template-columns:repeat(2,1fr);gap:32px 24px;padding:40px var(--plp-margin,16px)}
@media(min-width:1024px){.ft-cols{grid-template-columns:repeat(4,1fr) 1.2fr}}
.ft-col h4{font-size:14px;font-weight:var(--w-strong);margin-bottom:14px;text-transform:var(--cta-case)}
.ft-col a{display:block;font-size:14px;font-weight:var(--w-regular);padding:5px 0}
.ft-social{display:flex;gap:18px;align-items:center;margin:10px 0 22px}
.ft-social img{width:22px;height:22px;object-fit:contain}
.ft-badge{display:inline-flex;align-items:center;gap:7px;background:#000;color:#FFF;border-radius:calc(var(--radius-default)*1.5);padding:7px 13px;font-size:12px;font-weight:var(--w-mid);margin:4px 8px 0 0}
.ft-brands{display:flex;gap:28px;align-items:center;justify-content:center;flex-wrap:wrap;padding:20px var(--plp-margin,16px);border-top:var(--border-w) solid var(--border-subtle)}
.ft-brands[hidden]{display:none}
.ft-brands img{height:14px;width:auto;max-width:110px;object-fit:contain;opacity:.85}
.ft-pay{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap;padding:14px var(--plp-margin,16px)}
.ft-pay span{display:inline-flex;align-items:center;height:26px;padding:0 9px;border:var(--border-w) solid var(--border-default);border-radius:var(--radius-default);font-size:10px;font-weight:var(--w-strong);letter-spacing:.03em;background:var(--surface-raised)}
.ft-pay img{height:26px;width:auto;object-fit:contain;border-radius:calc(var(--radius-default)*.75)}
.ft-base{display:flex;flex-direction:column;align-items:center;gap:8px;padding:18px 16px 36px}
.ft-base img{height:24px;width:auto;max-width:170px;object-fit:contain} /* footer logo per component */
.ft-base small{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary)}

/* ============================================================
   EXTENDED LIBRARY — ported 08 Sep 2026 from the estate inventory (.context/18).
   Sources per component in .context/inventory/. Every colour is a token.
   ============================================================ */

/* ---- C-09 Button system: extra types, states, sizes, icon slot (CA golden matrix) ---- */
.bd{display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box}
.bd img,.bd svg{width:20px;height:20px;display:block;flex:none}
.bd.ic24 img,.bd.ic24 svg{width:24px;height:24px}.bd.ic24{gap:4px}
.bd.ic16 img,.bd.ic16 svg{width:16px;height:16px}
/* icon slot: inline SVG drawn with currentColor so it always takes the label colour (white label → white icon). 16px is the default slot; ic20 / ic24 mirror the Figma states. */
.bd .ico{width:16px;height:16px;display:block;flex:none;color:inherit}
.bd .ico path,.bd .ico circle{stroke:currentColor;vector-effect:non-scaling-stroke}
.bd.ic20 .ico{width:20px;height:20px}.bd.ic24 .ico{width:24px;height:24px}
.bd.ic16,.bd.ic20,.bd.ic24{gap:8px}
/* CTA stack — every full-width CTA is 358 × 50 like the Figma component frame (12533:14818); tertiary / XS hug and centre */
.bd-stack{display:flex;flex-direction:column;align-items:center;gap:20px;width:358px;max-width:100%}
.bd-stack .bd{width:100%}
.bd-stack .bd.ter,.bd-stack .bd.xs,.bd-stack .bd.sm{width:auto}
.bd.cta{width:358px;max-width:100%}
.bd.pri:active{background:var(--surface-action-pressed)}
.bd.pri[disabled],.bd.pri.dis{background:var(--action-disabled-bg);color:var(--action-disabled-fg);cursor:not-allowed}
.bd.buy{background:var(--action-buy);color:#FFF;text-transform:var(--case-btn1,uppercase)}
.bd.buy:active{background:var(--action-buy-pressed)}
.bd.buy[disabled]{background:var(--action-buy-disabled);color:#FFF;cursor:not-allowed}
.bd.sec:active{background:var(--sec-pressed)}
.bd.sec[disabled]{color:var(--action-disabled-fg);border-color:var(--sec-disabled-border);cursor:not-allowed}
.bd.ter{background:var(--surface-neutral);color:var(--text-primary);height:40px;padding:8px 16px;font-size:14px;font-weight:var(--w-regular);text-transform:none;border-color:transparent}
.bd.ter:active{background:var(--surface-neutral-pressed)}
.bd.ter[disabled],.bd.xs[disabled]{background:#F2F2F2;color:#B5B5B5;cursor:not-allowed} /* tertiary disabled is grey on every brand */
.bd.xs{background:var(--surface-neutral);color:#242424;height:auto;padding:8px;font-size:12px;line-height:16px;font-weight:var(--w-regular);text-transform:none;border-color:transparent}
.bd.xs:active{background:var(--surface-neutral-pressed)}
.bd.txt{background:none;border-color:transparent;color:var(--text-link);height:auto;min-height:34px;padding:5px 24px;font-size:14px;font-weight:var(--link-w,var(--w-strong));text-transform:none}
.bd.txt:active{color:var(--text-link-pressed)}
.bd.txt[disabled]{color:var(--text-link-disabled);cursor:not-allowed}
.bd.pay{background:var(--navy);border-color:var(--navy);color:#FFF;border-radius:var(--radius-lg);gap:12px;text-transform:none;font-weight:600} /* checkout Pay CTA — fixed navy on every fascia */
.bd.sm{height:auto;padding:6px 12px;font-size:12px;line-height:16px}
.bd.md{height:40px;padding:8px 16px;font-size:14px;line-height:24px}
.bd.full{width:100%}
/* spinner — the DS icon (icons-spinner.svg: 3px ring, quarter arc top-right) drawn in CSS so it takes the current text colour.
   20px in a button (Figma shows 24; Jake asked for a touch smaller). Track = text colour at 28%, arc = text colour.
   1.2s ease-in-out rotation: it accelerates through the turn and settles, rather than a flat linear spin. */
.spin,.bd.spn i{display:inline-block;width:20px;height:20px;border:0;border-radius:99px;flex:none;vertical-align:middle;
  background:conic-gradient(from 0deg,currentColor 0 90deg,color-mix(in srgb,currentColor 28%,transparent) 90deg 360deg);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px));
  animation:spin-ease 1.2s cubic-bezier(.6,.05,.35,1) infinite}
.spin.lg{width:32px;height:32px}
@media(prefers-reduced-motion:reduce){.spin,.bd.spn i{animation-duration:2.4s;animation-timing-function:linear}}
/* spinner state per Figma 12533:14818 — label gives way to the arc, primary fill drops to Neutral */
.bd.spn{background:var(--surface-neutral);color:var(--text-primary);min-width:0;pointer-events:none;border-color:var(--surface-neutral);display:inline-grid;place-items:center}
.bd.spn>*{grid-area:1/1}
.bd.spn .lbl{visibility:hidden} /* the label stays in the layout so the button never shrinks while it spins */
.bd.spn.sec{background:var(--surface-page)}
.lnk{font-size:12px;font-weight:var(--link-w,var(--w-strong));color:var(--text-link);text-decoration:none;cursor:pointer}
.lnk:hover{color:var(--text-link-hover)}

/* ---- C-10 Payment buttons (DS 9144-1931 · GDS .pay-btn) — scheme colours are fixed, never brand tokens ---- */
.pay{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;height:50px;border:1px solid transparent;border-radius:var(--radius-default);cursor:pointer;font:500 15px/1 'Helvetica Neue',Arial,sans-serif;box-sizing:border-box}
.pay img{height:20px;width:auto;display:block}
.pay--paypal,.pay--paylater{background:var(--paypal)}.pay--paypal:active,.pay--paylater:active{background:#F2BA36}
.pay--paylater{color:#2C2E2F}
.pay--apple{background:#000;color:#FFF}.pay--apple:active{background:#323232}.pay--apple img{height:22px}
.pay--gpay{background:#FFF;border-color:#3C4043}
.pay--klarna{background:#0B051D;color:#FFF}.pay--klarna img{height:29px}
.pay--clearpay{background:#B2FCE4}
.pay--silver{background:#F2F2F2}.pay--silver:active{background:#E7E7E7}
.pay--white{background:#FFF;border-color:#000}
.pay--mini{width:114px}
.pay--glass{border-radius:var(--radius-pill);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.pay--glass.pay--apple{background:rgba(0,0,0,.82)}
.pay-opts{display:flex;gap:8px;align-items:center}
.pchip{flex:1;min-width:0;aspect-ratio:30.46/21.19;background:#FFF;border:.5px solid var(--border-subtle);border-radius:2.77px;display:flex;align-items:center;justify-content:center;overflow:hidden}
.pchip img{max-width:70%;max-height:60%;object-fit:contain}
.or-row{display:flex;gap:16px;align-items:center;padding:8px 0;font-size:16px;color:var(--text-secondary)}
.or-row::before,.or-row::after{content:"";flex:1;height:1px;background:var(--border-subtle)}

/* ---- C-11 Form controls ---- */
/* Input field — Figma DS 9925-5828 (Input field set, Type=Standard): 50px, padding gap 2 (8px) top/bottom · gap 4 (16px) sides, radius 4 (brand).
   Outline is Grey 3 (#B5B5B5) at rest AND when filled; it turns black only while the field is focused (typing, caret in it) and
   drops back to grey on blur. Error = #D33F3F outline + 14 regular message gap 2 (8px) under. Inactive = Grey 1 fill, grey text. */
.fld{position:relative;display:flex;flex-direction:column;justify-content:center;height:50px;padding:var(--gap-2,8px) var(--gap-4,16px);background:var(--surface-raised);border:1px solid var(--border-control,#B5B5B5);border-radius:var(--radius-default);box-sizing:border-box;cursor:text;transition:border-color var(--dur-fast)}
.fld:focus-within{border-color:#000}
.fld.invalid,.fld.invalid:focus-within{border-color:var(--text-error)}
.fld.inactive,.fld:has(input:disabled),.fld:has(textarea:disabled){background:#F2F2F2;border-color:var(--border-control,#B5B5B5);cursor:default}
.fld.inactive input,.fld input:disabled,.fld textarea:disabled{color:var(--text-secondary,#6B6B6B);-webkit-text-fill-color:var(--text-secondary,#6B6B6B)}
/* floating label: centred while empty and idle; on focus (or once there is a value) it glides to the top and shrinks, and the caret sits beneath it */
.fld input,.fld textarea{font:inherit;font-size:14px;line-height:18px;color:#000;caret-color:#2797FF;border:0;outline:0;padding:15px 0 0;margin:0;background:none;width:100%}
.fld .lbl{position:absolute;left:16px;right:16px;top:50%;transform:translateY(-50%);font-size:14px;line-height:18px;color:var(--text-secondary);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:top var(--dur-base) var(--ease-standard),transform var(--dur-base) var(--ease-standard),font-size var(--dur-base) var(--ease-standard),line-height var(--dur-base) var(--ease-standard)}
.fld input::placeholder,.fld textarea::placeholder{color:transparent}
.fld:focus-within .lbl,.fld input:not(:placeholder-shown)+.lbl,.fld textarea:not(:placeholder-shown)+.lbl{top:8px;transform:none;font-size:12px;line-height:15px}
.fld--pin input{letter-spacing:.3em}
.fld-err{font-size:14px;line-height:18px;color:var(--text-error);margin-top:8px}
.fsel{position:relative;display:flex;align-items:center;height:50px;padding:0 44px 0 16px;background:var(--surface-raised);border:1px solid var(--border-control,#B5B5B5);border-radius:var(--radius-default);font-size:16px;color:var(--text-primary);cursor:pointer;box-sizing:border-box}
.fsel::after{content:"";position:absolute;right:16px;top:50%;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-70%) rotate(45deg)}
.fsel select{position:absolute;inset:0;width:100%;opacity:0;cursor:pointer;font-size:16px} /* native select drives it (mobile-first pattern) */
.fsel:focus-within{border-color:#000} /* same rule as the field: black only while open / focused */
/* Checkbox — Figma DS 669-892 (box 5915-6387, tick 5915-6388 = Icons / Tick, 1pt): 24px, radius 3 (brand-scaled), 1px Grey 3 when off;
   on = action-colour fill with the white 1pt tick, the exact Figma path on the 24 grid (same tick as icons-tick-circle-fill). */
.chk{width:24px;height:24px;flex:none;position:relative;border-radius:calc(var(--radius-default)*.75);border:1px solid var(--border-control,#B5B5B5);background:var(--surface-raised);padding:0;cursor:pointer}
.chk::after{content:"";position:absolute;inset:-1px;background:var(--icon-on-action,#FFF);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.33334 12.6667L9.66668 16L17.6667 8' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/24px 24px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6.33334 12.6667L9.66668 16L17.6667 8' fill='none' stroke='%23000' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/24px 24px no-repeat;opacity:0}
.chk.on,.chk[aria-checked="true"]{background:var(--icon-action);border-color:var(--icon-action)}
.chk.on::after,.chk[aria-checked="true"]::after{opacity:1}
.chk-row{display:flex;align-items:center;gap:var(--gap-2,8px);font-size:14px} /* gap 2 (8px) box → label */
.chk-row--lg{align-items:flex-start;gap:16px}
/* Radio — Figma DS 669-2125 (5915-3370 on / 5915-3372 off): 24px, 1px Grey 3 ring on white (it stays Grey 3 when selected);
   selected = a 13.71px dot (r 6.857) in the CTA / action colour — not black. */
.rad{width:24px;height:24px;flex:none;border-radius:99px;border:1px solid var(--border-control,#B5B5B5);background:var(--surface-raised);display:grid;place-items:center;padding:0;cursor:pointer}
.rad::after{content:"";width:13.714px;height:13.714px;border-radius:99px;background:var(--icon-action);opacity:0}
.rad.on::after,.rad[aria-checked="true"]::after{opacity:1}
.rad-row{display:flex;align-items:center;gap:var(--gap-4,16px);padding:var(--gap-3,12px) 0;font-size:16px} /* gap 4 (16px) ring → label, row 44px */
.tog{width:44px;height:24px;flex:none;border-radius:99px;background:var(--border-default);border:none;position:relative;cursor:pointer;transition:background var(--dur-base)}
.tog::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:99px;background:#FFF;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:left var(--dur-base)}
.tog.on,.tog[aria-checked="true"]{background:var(--icon-action)}.tog.on::after,.tog[aria-checked="true"]::after{left:22px}
.qty{display:inline-flex;align-items:center}
.qty button{width:28px;height:28px;border:1px solid var(--border-strong);background:var(--surface-raised);display:grid;place-items:center;padding:0;cursor:pointer}
.qty button:first-child{border-radius:var(--radius-default) 0 0 var(--radius-default);border-right:none}.qty button:last-child{border-radius:0 var(--radius-default) var(--radius-default) 0;border-left:none}
.qty button img{width:14px;height:14px}
.qty span{height:28px;min-width:16px;padding:0 4px;border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong);background:var(--surface-raised);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:var(--w-mid)}
.promo{display:flex;gap:8px;align-items:flex-start}
.promo .fld{flex:1}
.promo .bd,.promo .bd.sm,.promo .bd.md{width:95px;flex:none;height:50px;padding:0 8px;line-height:24px} /* Apply matches the 50px field exactly */
.sfield{height:50px;border-radius:var(--radius-lg);padding:8px 16px;display:flex;align-items:center;gap:10px;box-sizing:border-box;font-size:16px;font-weight:var(--w-regular);color:var(--field-text)}
.sfield--grey{background:var(--field-grey)}.sfield--white{background:#FFF;border:1px solid var(--field-border)}
.sfield-lbl{font-size:14px;color:var(--navy)}.sfield-help{font-size:12px;color:var(--navy)}

/* ---- C-12 Messaging ---- */
.msg{display:flex;border-radius:var(--radius-default);overflow:hidden}
.msg i{width:4px;flex:none}
.msg .body{flex:1;padding:12px 16px 12px 12px;display:flex;align-items:center;gap:12px;font-size:14px;line-height:20px;color:#060606}
.msg .body img{width:20px;height:20px;flex:none}
.msg .act{font-size:12px;font-weight:var(--w-strong);color:var(--text-primary);white-space:nowrap;background:none;border:none;cursor:pointer;padding:0}
.msg .x{width:16px;height:16px;flex:none;background:none;border:none;padding:0;cursor:pointer;position:relative}
.msg .x::before,.msg .x::after{content:"";position:absolute;left:7px;top:0;width:1.5px;height:16px;background:currentColor;transform:rotate(45deg)}.msg .x::after{transform:rotate(-45deg)}
.msg--success i{background:var(--success-bar)}.msg--success .body{background:var(--success-bg)}
.msg--neutral i{background:var(--border-subtle)}.msg--neutral .body{background:var(--surface-media)}
.msg--error i{background:var(--text-error)}.msg--error .body{background:var(--error-bg);font-weight:var(--w-regular);line-height:18px}
.toast{position:fixed;bottom:32px;left:50%;transform:translateX(-50%);background:#000;color:#FFF;font-size:14px;font-weight:var(--w-mid);padding:12px 20px;border-radius:var(--radius-default);z-index:var(--z-toast);white-space:nowrap;box-shadow:var(--shadow-float)}
.toast--top{bottom:auto;top:16px;left:16px;right:16px;transform:none;background:rgba(255,255,255,.9);color:var(--text-primary);backdrop-filter:blur(3.5px);border-radius:var(--radius-lg);box-shadow:0 0 20px rgba(0,0,0,.1);padding:16px;display:flex;align-items:center;justify-content:space-between;gap:8px;white-space:normal;font-weight:var(--w-regular)}
.toast--top .act{font-weight:var(--w-strong);color:var(--text-link);background:none;border:none;cursor:pointer;white-space:nowrap}
.alert{background:var(--error-bg);border-left:2px solid var(--text-error);padding:10px 12px;display:flex;gap:12px;align-items:center;font-size:14px}
.empty{display:flex;flex-direction:column;align-items:center;gap:16px;padding:24px 16px;text-align:center}
.empty img{width:32px;height:32px}
.empty p{font-size:16px;line-height:23px;color:var(--text-primary);margin:0}

/* ---- C-13 PDP kit ---- */
.price{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.price .now{font-size:24px;font-weight:var(--w-strong);line-height:1}
.price .now.sale{color:var(--price-sale)}
.price .was{font-size:20px;font-weight:var(--w-regular);color:var(--text-secondary);text-decoration:line-through;line-height:1}
.price .save{background:var(--badge-save-bg);color:var(--badge-save-fg);font-size:14px;font-weight:var(--w-mid);padding:4px 8px;border-radius:var(--radius-default)}
.price-promo{font-size:13px;font-weight:var(--w-mid);color:var(--price-sale)}
/* small price (chat tiles, rails): every part one size, 13px — price, strikethrough, Save chip and the code line under it */
.price--sm{gap:6px}.price--sm .now,.price--sm .was,.price--sm .save{font-size:13px;line-height:18px}.price--sm .save{padding:0 6px;border-radius:var(--radius-default)}
.price--sm+.price-promo{font-size:13px;line-height:18px;margin-top:2px}
.price .oos{color:var(--text-error);font-size:16px;font-weight:var(--w-mid);letter-spacing:.02em}

/* ---------- Price · live instances (tokens: --price-* in tokens.css). One component, placed by context:
   .price-blk wraps the price row (.price) and the code / promo line(s) (.price-code).
   Sale = .now.sale (--price-sale) · was = struck number, no label · saving = <span class="save" data-pct="25">, copy from the
   theme (--price-save-pre: "Save " → Save 25% · "-" → -25%) · order: now · was · saving, code line on its own row. */
.price-blk{display:flex;flex-direction:column;gap:12px;font-family:var(--font-family-base);text-align:left}
.price-blk .price{gap:0;align-items:baseline}
.price-blk .price>span{font-size:inherit;line-height:inherit}
.price-blk .now{font-weight:var(--price-now-w);color:var(--text-primary)}
.price-blk .now.sale{color:var(--price-sale)}
.price-blk .was{font-weight:var(--price-was-w);color:var(--price-was-fg);text-decoration:line-through}
.price-blk .save{color:var(--price-sale);font-weight:var(--price-save-w);background:none;padding:0;border-radius:0}
.price-blk .save[data-pct]::before{content:"-" attr(data-pct) "%"}
.price-code{color:var(--price-sale);font-size:var(--price-code);line-height:var(--price-code-lh);font-weight:var(--price-code-w)}
/* PDP: 12px row → code line · gap --price-pdp-gap between prices · saving styled by theme (plain / pill / outlined box) */
.price-blk--pdp .price{font-size:var(--price-pdp);line-height:var(--price-pdp-lh);column-gap:var(--price-pdp-gap);align-items:center}
.price-blk--pdp .price .was{font-size:var(--price-pdp-was);font-weight:var(--price-pdp-was-w);color:var(--price-pdp-was-fg)}
.price-blk--pdp .price .save{display:inline-flex;align-items:center;font-size:var(--price-save-pdp);color:var(--price-save-fg);background:var(--price-save-bg);border:var(--price-save-bd);padding:var(--price-save-pad);border-radius:var(--price-save-r);height:var(--price-save-h);box-sizing:border-box}
.price-blk--pdp .price .save[data-pct]::before{content:var(--price-save-pre) attr(data-pct) "%"}
.price-blk--pdp .price-code+.price-code{margin-top:-8px}
/* PLP card: 4px row → code line · 8px between prices · -X% · same size desktop + mobile except where the theme drops it */
.price-blk--card{gap:4px}
.price-blk--card .price{font-size:var(--price-card);line-height:var(--price-card-lh);column-gap:8px}
.price-blk--card .price-code{font-size:var(--price-card);line-height:var(--price-card-lh);display:var(--price-card-code)}
.price-blk--card .save{display:var(--price-card-save)}
.price-blk--card.m .price,.price-blk--card.m .price-code{font-size:var(--price-card-m);line-height:var(--price-card-m-lh)}
@media(max-width:767px){.price-blk--card .price,.price-blk--card .price-code{font-size:var(--price-card-m);line-height:var(--price-card-m-lh)}}
/* rail card (recommendations, complete the look): now + was only, one line */
.price-blk--rail .price{font-size:var(--price-card);line-height:var(--price-card-lh);column-gap:8px;white-space:nowrap;flex-wrap:nowrap}
/* added-to-bag: 12/18, both prices ink, now + was only */
.price-blk--drawer .price{font-size:var(--price-drawer);line-height:var(--price-drawer-lh);column-gap:8px}
.price-blk--drawer .now,.price-blk--drawer .now.sale{color:var(--text-primary)}
/* basket line / quick add: 16/24, now + was (quick add adds saving + code) */
.price-blk--line{gap:4px}
.price-blk--line .price{font-size:var(--price-line);line-height:var(--price-line-lh);column-gap:8px}
.price-blk--line .price-code{font-size:var(--price-card);line-height:var(--price-card-lh)}
/* small (chat, rails in the agent) — 13 / 18 */
.price-blk--sm{gap:2px}.price-blk--sm .price,.price-blk--sm .price-code{font-size:13px;line-height:18px;column-gap:6px}
.sizes{display:flex;flex-direction:column;gap:12px}
.sizes-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:16px}
.sizes-head b{font-weight:var(--w-mid)}
.sizes-head .guide{display:flex;align-items:center;gap:4px;font-size:14px;white-space:nowrap}
.sizes .set{display:flex;gap:8px;flex-wrap:wrap}
.sz{font-family:var(--font-family-base);min-width:60px;height:50px;padding:0 16px;background:var(--surface-raised);border:1px solid var(--border-control,#B5B5B5);border-radius:var(--radius-default);font-size:16px;font-weight:var(--w-regular);color:var(--text-primary);display:inline-flex;align-items:center;justify-content:center;position:relative;overflow:hidden;cursor:pointer}
.sz:hover{border-color:var(--text-primary)}
.sz.on{border-color:var(--text-primary);font-weight:var(--w-strong)}   /* Figma 9000:3082: selected = same 1px border in black + bold, never thicker */
.sz.oos{color:var(--text-disabled)}
.sz.oos--strike::after{content:"";position:absolute;left:-20%;right:-20%;top:50%;height:1px;background:var(--text-disabled);transform:rotate(-33deg)}
/* OOS has two states (Coming Soon - Back in Stock 2ddMaYHCL1pPI00dqPdmNt 344:357437): .oos = just out of stock · .oos.oos--notify = out of stock + the DS notification bell (icons-notification.svg, 14px top-right) — tapping it opens notify-me / back in stock. Never the info "i". */
.sz .bell,.sz.oos--notify .bell{position:absolute;right:3px;top:3px;width:14px;height:14px}
.sz.oos--notify{cursor:pointer}
.sz--dark{background:#242424;border-color:transparent;color:#FFF}.sz--dark.on{background:var(--surface-action);color:var(--text-on-action);border-color:transparent}
.cswatches{display:flex;gap:8px;flex-wrap:wrap}
.cswatch{width:60px;height:89px;border-radius:var(--radius-default);border:1px solid var(--border-subtle);overflow:hidden;position:relative;padding:0;background:var(--surface-media);cursor:pointer}
.cswatch img{width:100%;height:100%;object-fit:cover;border-radius:calc(var(--radius-default)*.75);display:block}
.cswatch.on{border-color:var(--text-primary)}
.cswatch.on::after{content:"";position:absolute;inset:0;border:1px solid #FFF;border-radius:calc(var(--radius-default)*.75);pointer-events:none}
.hr{height:1px;background:var(--border-subtle);width:100%}
.acc{display:flex;flex-direction:column;gap:16px}
.acc-h{display:flex;align-items:center;justify-content:space-between;width:100%;background:none;border:none;padding:0;font:inherit;font-size:16px;font-weight:var(--w-mid);color:var(--text-primary);cursor:pointer;text-align:left}
.acc-h img{width:16px;height:16px;transition:transform var(--dur-base)}
.acc.open .acc-h img{transform:rotate(180deg)}
.acc-b{display:none;font-size:16px;font-weight:var(--w-regular);line-height:28px}
.acc.open .acc-b{display:block}
.acc-b ul{padding-left:24px;display:flex;flex-direction:column;gap:8px;margin:0 0 16px}
.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.sec-head h3{font-size:20px;line-height:22px;font-weight:var(--w-mid);margin:0}
.sec-head a{font-size:14px;color:var(--text-primary);text-decoration:none}
.prail{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.prail::-webkit-scrollbar{display:none}
.prail>*{flex:0 0 165px}
@media(min-width:1024px){.prail>*{flex:0 0 220px}}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px 4px}
@media(min-width:1024px){.grid3{grid-template-columns:repeat(6,1fr);gap:24px 16px}}
.usp-box{background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:var(--radius-default);padding:16px;display:flex;flex-direction:column;gap:16px}
.usp-box .r{display:flex;gap:16px;align-items:flex-start}
.usp-box .r img{width:24px;height:24px;flex:none}
.usp-box .t{font-size:14px;line-height:18px;font-weight:var(--w-regular)}
.usp-box .s{font-size:12px;line-height:15px;color:var(--text-secondary)}
.bnpl{background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:var(--radius-default);padding:16px;display:flex;flex-direction:column;gap:12px;font-size:14px}
.bnpl .chips{display:flex;gap:4px}
.bnpl .pc{width:32px;height:22px;border-radius:calc(var(--radius-default)*.75);display:grid;place-items:center;overflow:hidden}
.bnpl .pc img{max-width:24px;max-height:11px;object-fit:contain}   /* DS Figma 12484:4028: each logo inset in its 32×22 badge, never edge to edge */
.bnpl .pc--payplus{background:#003B61}.bnpl .pc--klarna{background:#FFB1D2}.bnpl .pc--clearpay{background:#B2FCE3}.bnpl .pc--paypal{background:#FFF;border:1px solid var(--border-subtle)}
.bnpl .terms{font-weight:var(--w-regular)}.bnpl .small{font-size:12px;color:var(--text-secondary)}
.thresh{display:flex;flex-direction:column;gap:12px;font-size:14px}
.thresh b{font-weight:var(--w-strong)}
.thresh .track{height:4px;border-radius:var(--radius-pill);background:var(--border-subtle);overflow:hidden}
.thresh .fill{height:100%;border-radius:var(--radius-pill);background:var(--tickc)}
.thresh--ok{flex-direction:row;align-items:center;gap:12px}
.thresh--ok .tick{width:20px;height:20px;border-radius:99px;background:var(--tickc);display:grid;place-items:center;flex:none}
.thresh--ok .tick::after{content:"";width:8px;height:4px;border-left:2px solid #FFF;border-bottom:2px solid #FFF;transform:translateY(-1px) rotate(-45deg)}
/* Deliver+ — SEEL Enhancements 2026 exact (Latest Components 28.08.26). Ground/ink/link/checkbox/radius per fascia via --dplus-*;
   the lockup is the brand's own vector (all fifteen are in the markup, the fascia mode reveals one). */
.dplus{background:var(--dplus-bg);color:var(--dplus-fg);border-radius:var(--dplus-radius,4px);padding:16px 20px;display:flex;gap:24px;align-items:center;min-width:288px;font-family:var(--font-family-base)}
.dplus .col{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px}
.dplus .h{font-size:14px;font-weight:var(--w-strong);line-height:normal}
.dplus ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.dplus li{display:flex;align-items:center;gap:8px;font-size:12px;line-height:normal;font-weight:var(--w-regular)}
.dplus li::before{content:"";width:16px;height:16px;flex:none;background:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.2'><path d='M3 8.5l3.2 3L13 5'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.2'><path d='M3 8.5l3.2 3L13 5'/></svg>") center/contain no-repeat}
.dplus .more{font-size:12px;font-weight:var(--w-strong);line-height:1.4;color:var(--dplus-link);cursor:pointer}
.dplus .foot{border-top:1px solid color-mix(in srgb,currentColor 25%,transparent);padding-top:12px;font-size:12px;font-style:italic;font-weight:var(--w-regular);opacity:.75;line-height:1.35}
.dplus--checkout .top{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%} /* design: lockup left, 24px checkbox top-right */
.dplus--checkout .chk{flex:none;width:24px;height:24px;border-radius:calc(var(--radius-default)*.75);border:1px solid #B5B5B5;background:var(--dplus-white,#FFF)}
.dplus--checkout .chk.on,.dplus--checkout .chk[aria-checked="true"]{background:var(--dplus-check);border-color:var(--dplus-check)}
.dplus--checkout .chk::after{border-color:var(--dplus-tick,#FFF)}
.dplus--checkout .h b{font-weight:inherit}
/* lockups: every brand's vector is present in the markup; the nearest data-brand reveals its own (define-all vars, no inheritance leak into nested tiles) */
.dpl{display:none;position:relative;flex:none}
.dpl img{position:absolute}
.dpl-generic{display:var(--dpl-generic,none)}
.dpl-boohoo{display:var(--dpl-boohoo,none)}
.dpl-boohooman{display:var(--dpl-boohooman,none)}
.dpl-burton{display:var(--dpl-burton,none)}
.dpl-coast{display:var(--dpl-coast,none)}
.dpl-debenhams{display:var(--dpl-debenhams,none)}
.dpl-dorothyperkins{display:var(--dpl-dorothyperkins,none)}
.dpl-dsgnstudio{display:var(--dpl-dsgnstudio,none)}
.dpl-karenmillen{display:var(--dpl-karenmillen,none)}
.dpl-misspap{display:var(--dpl-misspap,none)}
.dpl-oasis{display:var(--dpl-oasis,none)}
.dpl-plt{display:var(--dpl-plt,none)}
.dpl-principles{display:var(--dpl-principles,none)}
.dpl-wallis{display:var(--dpl-wallis,none)}
.dpl-warehouse{display:var(--dpl-warehouse,none)}
[data-brand="boohoo"]{--dpl-boohoo:block;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="boohooman"]{--dpl-boohoo:none;--dpl-boohooman:block;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="burton"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:block;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="coast"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:block;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="debenhams"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:block;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="dorothyperkins"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:block;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="dsgnstudio"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:block;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="karenmillen"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:block;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="misspap"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:block;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="oasis"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:block;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="plt"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:block;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="principles"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:block;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="wallis"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:block;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="warehouse"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:block;--dpl-generic:none;}
[data-brand="debenhamsoutlet"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:block;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:none;}
[data-brand="brandroom"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:block;}
[data-brand="trainingdept"]{--dpl-boohoo:none;--dpl-boohooman:none;--dpl-burton:none;--dpl-coast:none;--dpl-debenhams:none;--dpl-dorothyperkins:none;--dpl-dsgnstudio:none;--dpl-karenmillen:none;--dpl-misspap:none;--dpl-oasis:none;--dpl-plt:none;--dpl-principles:none;--dpl-wallis:none;--dpl-warehouse:none;--dpl-generic:block;}
/* Deliver+ checkout banner — NEW (SEEL Enhancements 2026 · "Seel Checkout Banner – <fascia>" · Property 1=Small New, e.g. Debs 3516:156668). 08 Oct 2026.
   No ground: sits on the checkout's white. Row: lockup left (DG_DPLUS_CO_LOGOS, white-ground art) + 24px checkbox flush to the container's right edge (full width) · copy "Peace of mind, guaranteed £x.xx", 14 light with the price strong · Learn more 12 strong.
   Gaps: row→copy 12, copy→Learn more 16. Font, weights and the link/checkbox colour are the fascia's own (--dplus-co-*). Replaces .dplus--checkout. */
.dplus-co{background:transparent;color:#000;width:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:16px;min-width:288px;font-family:var(--dplus-co-font,var(--font-family-base));line-height:normal}
.dplus-co .top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:-4px}
.dplus-co .top .dpl{max-width:calc(100% - 36px)}
.dplus-co p{margin:0;font-size:14px;font-weight:var(--dplus-co-light,300);color:#000;max-width:none}
.dplus-co p b{font-weight:var(--dplus-co-strong,600)}
.dplus-co .more{font-size:12px;font-weight:var(--dplus-co-strong,600);color:var(--dplus-co-link,#000);cursor:pointer}
.dplus-co .chk{margin-left:auto;border-radius:3px;border:1px solid #B5B5B5;background:#FFF}
.dplus-co .chk.on,.dplus-co .chk[aria-checked="true"]{background:var(--dplus-co-link,#000);border-color:var(--dplus-co-link,#000)}
[data-brand="debenhams"],[data-brand="debenhamsoutlet"]{--dplus-co-font:'Geologica',sans-serif;--dplus-co-strong:600;--dplus-co-link:#00787D}
[data-brand="boohoo"]{--dplus-co-font:'Montserrat',sans-serif;--dplus-co-strong:600;--dplus-co-link:#BB305F}
[data-brand="plt"]{--dplus-co-font:'Roboto',sans-serif;--dplus-co-strong:500;--dplus-co-link:#550503}
[data-brand="boohooman"]{--dplus-co-font:'Montserrat',sans-serif;--dplus-co-strong:600;--dplus-co-link:#000}
[data-brand="karenmillen"]{--dplus-co-font:'Jost',sans-serif;--dplus-co-strong:600;--dplus-co-link:#000}
[data-brand="burton"]{--dplus-co-font:'Montserrat',sans-serif;--dplus-co-strong:500;--dplus-co-link:#3B5469}
[data-brand="coast"]{--dplus-co-font:'Roboto',sans-serif;--dplus-co-strong:400;--dplus-co-link:#6B6152}
[data-brand="dorothyperkins"]{--dplus-co-font:'Public Sans',sans-serif;--dplus-co-strong:400;--dplus-co-link:#181729}
[data-brand="misspap"]{--dplus-co-font:'Montserrat',sans-serif;--dplus-co-strong:500;--dplus-co-link:#000}
[data-brand="oasis"]{--dplus-co-font:'Geologica',sans-serif;--dplus-co-strong:400;--dplus-co-link:#525C3D}
[data-brand="principles"]{--dplus-co-font:'Lato',sans-serif;--dplus-co-strong:400;--dplus-co-link:#6B543D}
[data-brand="wallis"]{--dplus-co-font:'Urbanist',sans-serif;--dplus-co-strong:400;--dplus-co-link:#733359}
[data-brand="warehouse"]{--dplus-co-font:'Roboto',sans-serif;--dplus-co-strong:400;--dplus-co-link:#335C3D}
[data-brand="dsgnstudio"]{--dplus-co-font:'Hanken Grotesk',sans-serif;--dplus-co-strong:500;--dplus-co-link:#000}
/* bag banner: brand band + white body of benefit rows + Seel/Trustpilot foot */
.dplus-bag{border-radius:var(--dplus-radius,4px);overflow:hidden;font-family:var(--font-family-base);background:var(--dplus-white,#FFF)} /* --dplus-white: the fascia's "Background White" (PLT #FFFDF7) */
.dplus-bag .band{background:var(--dplus-bg);color:var(--dplus-fg);padding:24px;display:flex;flex-direction:column;gap:12px}
.dplus-bag .band p{color:inherit;font-size:var(--dplus-p,14px);font-weight:var(--dplus-pw,400);line-height:normal;margin:0;max-width:none} /* design: Regular 14 (Debs/bh/MAN/KM) · 12 elsewhere · Medium on Burton/Misspap/DSGN */
.dplus-bag .body{padding:20px 24px;display:flex;flex-direction:column;gap:12px}
.dplus-bag .row{display:flex;align-items:center;gap:12px}
.dplus-bag .puck{width:48px;height:48px;border-radius:var(--radius-pill);flex:none;background:var(--dplus-white,#FFF);box-shadow:0 0 14px -4px rgba(0,0,0,.18);display:grid;place-items:center}
.dplus-bag .puck img{width:24px;height:24px}
.dplus-bag .t{font-size:14px;line-height:1.2;font-weight:var(--w-strong);color:#000;margin:0}
.dplus-bag .s{font-size:12px;line-height:1.3;color:#000;margin:4px 0 0;font-weight:var(--w-regular)}
.dplus-bag .foot{padding:0 24px 20px;display:flex;flex-direction:column;gap:8px;align-items:center}
.dplus-bag .tp{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center}
.dplus-bag .tp img{height:20px;width:auto}
.dplus-bag .tp .r{font-size:10px;line-height:1.2;color:#000}.dplus-bag .tp .r b{font-weight:var(--w-strong)}
.dplus-bag .powered{font-size:12px;color:#6B6B6B;display:flex;gap:4px;align-items:center;white-space:nowrap}
.dplus-bag .powered img{height:14px}
.dplus-bag--desktop .body{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:16px;padding:24px}
.dplus-bag--desktop .row{flex:1;flex-direction:column;text-align:center;gap:12px}
.dplus-bag--desktop .band{flex-direction:row;align-items:center;gap:24px}
.glance{display:flex;flex-direction:column;gap:16px;list-style:none;margin:0;padding:0}
.glance li{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:var(--w-regular)}
.glance li i{width:24px;height:24px;border-radius:99px;border:1px solid var(--border-default);display:grid;place-items:center;flex:none;font-style:normal;font-size:12px}
.glance--chips{flex-direction:row;flex-wrap:wrap;gap:12px 16px}.glance--chips li{font-size:14px}
.linkchips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.linkchips a{background:var(--surface-sunken);border:1px solid var(--border-subtle);border-radius:var(--radius-default);padding:8px 12px;font-size:14px;color:var(--text-primary);text-decoration:none}

/* ---- C-14 Overlays & bag ---- */
.sheet{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:flex-end;justify-content:center}
.sheet .scrim{position:absolute;inset:0;background:rgba(0,0,0,.4)}
.sheet .panel{position:relative;width:100%;height:calc(100% - 56px);background:var(--surface-raised);border-radius:var(--radius-default) var(--radius-default) 0 0;display:flex;flex-direction:column;padding-top:24px;transform:translateY(100%);transition:transform var(--dur-slow) var(--ease-standard)}
.sheet.open .panel{transform:translateY(0)}
.sheet .head{display:flex;gap:12px;align-items:center;padding:0 24px 24px;flex:none}
.sheet .head h2{flex:1;font-size:20px;font-weight:var(--w-strong);margin:0;line-height:1}
.sheet .body{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:20px;padding:0 24px 24px}
.sheet .foot{flex:none;background:var(--surface-sunken);padding:16px 24px 24px;display:flex;flex-direction:column;gap:16px}
.sheet .foot .tot{display:flex;justify-content:space-between;font-size:16px;font-weight:var(--w-mid)}
.sheet--auto .panel{height:auto;padding:24px}
.sheet--dark .panel{background:linear-gradient(162.7deg,#0F0F0F 3%,#131313 100%);color:#FFF;border-radius:calc(var(--radius-lg)*1.5) calc(var(--radius-lg)*1.5) 0 0;padding-bottom:calc(24px + env(safe-area-inset-bottom,0px))}
@media(min-width:768px){.sheet{align-items:center}.sheet .panel{max-width:480px;height:min(838px,calc(100% - 48px));border-radius:var(--radius-default)}}
.modal{position:fixed;inset:0;z-index:var(--z-modal);background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;padding:0 16px}
.modal .card{width:100%;max-width:358px;background:var(--surface-raised);border-radius:var(--radius-default);padding:20px 16px 16px;display:flex;flex-direction:column;gap:24px;align-items:center;text-align:center;transform:scale(.96);transition:transform var(--dur-base)}
.modal.on .card{transform:scale(1)}
.modal .t{font-size:18px;font-weight:var(--w-strong)}.modal .b{font-size:16px}
/* Modal header + close (DS Figma 8113:19029 Modal Headers · 8084:24491 Mobile): title Geologica SemiBold 20 · the close is Icons / Close at 16×16, 1pt stroke,
   inset gap 6 (24px) from the top and right of the modal, vertically centred on the title line. Variants: title + X · X only · back + title + X · title + info + X. */
.modal-hd{display:flex;align-items:flex-start;gap:16px;padding:24px 24px 0}
.modal-hd .mt{flex:1;min-width:0;font-family:var(--font-family-base);font-size:20px;font-weight:var(--w-strong,600);line-height:25px;color:var(--text-primary)}
.modal-x{display:grid;place-items:center;width:16px;height:25px;flex:none;margin-left:auto;padding:0;border:0;background:none;cursor:pointer}
.modal-x::before{content:"";width:16px;height:16px;background:url("icons/lib/icons-close.svg") center/16px 16px no-repeat}
.modal-x--abs{position:absolute;top:24px;right:24px;height:16px}
/* ---------- Modal types (Figma DS aIHmkCaTy9c5EWOxAGw0So · Desktop 8085-17553 · Mobile 8084-24491 · Overlay + animation 8084-23215 · Headers 8113-19029) ----------
   One component, typed by size. Every type: white window, radius 4, padding gap 6 (24px), gap 6 (24px) between header / body / foot,
   header = .modal-hd (title Geologica SemiBold 20, 16px close). Overlay 50% black behind the window, on top of the page.
   Desktop  .mdl--sm 512 · .mdl--md 720 · .mdl--lg 960 (two columns → one under 1024w) · .mdl--full 1248 × 960 max
   Mobile   .mdl--alert  centred, 16px side margins, 16px top margin + internal scroll when taller than the screen
            .mdl--up     slide up: full width, hugs content up to the bottom of the site header, body scrolls, CTA sticky
            .mdl--fs     full screen
   Motion   desktop + mobile alert: modal and overlay fade in / out together · mobile slide up: overlay fades, window slides from the
            bottom of the viewport · 300ms ease-in-out · close on X or a tap outside the window. */
.mdl{position:relative;display:flex;flex-direction:column;gap:24px;padding:24px;background:var(--surface-raised);color:var(--text-primary);border-radius:var(--radius-default);font-family:var(--font-family-base);box-sizing:border-box;max-width:100%;text-align:left}
.mdl .modal-hd{padding:0;gap:12px;align-items:flex-start}
.mdl .modal-hd .mt{display:flex;align-items:center;gap:12px}
.mdl-back,.mdl-info{width:16px;height:25px;flex:none;padding:0;border:0;background:none;display:grid;place-items:center;cursor:pointer}
.mdl-back::before,.mdl-info::before{content:"";width:16px;height:16px;background:url("icons/lib/icons-left.svg") center/16px 16px no-repeat}
.mdl-info{width:12px}.mdl-info::before{width:12px;height:12px;background:url("icons/lib/icons-info.svg") center/12px 12px no-repeat}
.mdl-bd{display:flex;flex-direction:column;gap:24px;font-size:16px;font-weight:var(--w-regular);line-height:normal;min-height:0}
.mdl-ft{display:flex;flex-direction:column;gap:16px}.mdl-ft .bd{width:100%}
.mdl--sm{width:512px}
.mdl--md{width:720px;padding-bottom:32px}
.mdl--lg{width:960px}
.mdl-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
@media(max-width:1023px){.mdl-cols{grid-template-columns:1fr}}
.mdl--full{width:1248px;height:780px;max-height:960px}
.mdl--full .mdl-bd{flex:1;align-items:center;justify-content:center;position:relative}
.mdl-3d-ctl{display:flex;justify-content:space-between;align-items:flex-end}.mdl-3d-ctl span{display:flex;gap:8px}
.mdl-3d-ctl button{width:32px;height:32px;border:1px solid var(--border-subtle);border-radius:var(--radius-default);background:var(--surface-raised);display:grid;place-items:center;padding:0}
.mdl-3d-ctl img{width:16px;height:16px}
/* mobile types */
.mdl--alert{width:calc(100% - 32px);max-width:358px;max-height:calc(100% - 32px)}
.mdl--alert .mdl-bd,.mdl--up .mdl-bd{overflow-y:auto}
.mdl--up{width:100%;border-radius:var(--radius-default) var(--radius-default) 0 0;max-height:100%}
.mdl--fs{width:100%;height:100%;border-radius:0}
.mdl--fs .mdl-bd{flex:1;align-items:center;justify-content:center}
/* overlay + stage (a page frame the modal sits over: header, then the 50% scrim; .mdl-stage--up anchors to the bottom) */
.mdl-scrim{position:absolute;inset:0;background:rgba(0,0,0,.5);z-index:2}
.mdl-stage{position:relative;overflow:hidden;background:var(--surface-page,#fff);display:flex;flex-direction:column;border-radius:var(--radius-default)}
.mdl-stage>.mdl-page{flex:1;background:repeating-linear-gradient(180deg,var(--surface-sunken,#F2F2F2) 0 120px,transparent 120px 136px)}
.mdl-stage>.mdl-layer{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center}
.mdl-stage>.mdl-layer>.mdl{z-index:1}
.mdl-stage--up>.mdl-layer{align-items:flex-end;top:var(--mdl-top,0)}
.mdl-stage--fs>.mdl-layer{align-items:stretch}
.mdl.mdl-anim-fade{animation:mdlfade .3s ease-in-out both}.mdl.mdl-anim-up{animation:mdlup .3s ease-in-out both}
@keyframes mdlfade{from{opacity:0}to{opacity:1}}@keyframes mdlup{from{transform:translateY(100%)}to{transform:none}}
/* modal content slots (Figma 8127-26292 Returns, 8127-26481 Seller info) */
.mdl-kv{display:flex;flex-direction:column;gap:8px}.mdl-kv b{font-weight:var(--w-strong,600)}
.mdl-opts{display:flex;flex-direction:column;gap:16px}
.mdl-opt{display:flex;gap:16px;align-items:center}
.mdl-opt .tile{position:relative;width:92px;height:92px;flex:none;border:1px solid var(--text-primary);border-radius:8px;display:grid;place-items:center;overflow:hidden}
.mdl-opt .tile img{width:56px;height:56px}
.mdl-opt .tile .tag{position:absolute;left:-1px;top:7px;height:20px;display:flex;align-items:center;padding:0 8px;font-size:12px;white-space:nowrap;color:#000;font-weight:var(--w-regular);background:linear-gradient(90deg,#F3F3F3,#B5B5B5);border-radius:0 4px 4px 0}
.mdl-opt .tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.mdl-opt .rad-row{padding:0;font-weight:var(--w-mid)}.mdl-opt .tx p{margin:0;font-size:14px}
.mdl .mdl-bd p{color:var(--text-primary)}
.mdl-faq{display:flex;flex-direction:column;gap:30px}.mdl-faq .acc-h{font-weight:var(--w-mid,500)}

.bag-item{display:grid;grid-template-columns:99px 1fr;gap:16px;min-height:148px}
.bag-item img{width:99px;height:148px;object-fit:cover;background:var(--surface-media)}
.bag-item .info{display:flex;flex-direction:column;gap:4px;font-size:16px}
.bag-item .b{font-weight:var(--w-strong)}.bag-item .n{font-weight:var(--w-regular);line-height:23px}
.bag-item .v{font-weight:var(--w-mid);margin-top:auto}
.bag-item .p{font-size:12px;font-weight:var(--w-mid)}.bag-item .p .sale{color:var(--price-sale)}.bag-item .p s{margin-left:4px}
.summary{background:var(--surface-sunken);padding:16px;display:flex;flex-direction:column;gap:16px}
.sum-row{display:flex;align-items:center;justify-content:space-between;font-size:14px}
.sum-row.total{font-size:16px;font-weight:var(--w-strong)}
.sum-disc{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:var(--w-strong);color:var(--text-link)}

/* ---- C-15 Chips & pills ---- */
.chip{height:40px;padding:0 16px;border-radius:var(--radius-pill);background:var(--surface-raised);border:1px solid var(--border-default);display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:var(--w-mid);color:var(--text-primary);cursor:pointer;white-space:nowrap}
.chip.on{background:var(--text-primary);border-color:var(--text-primary);color:var(--text-inverse)}
.fpill{height:44px;padding:0 16px;border-radius:var(--radius-pill);background:var(--surface-raised);box-shadow:var(--shadow-card);display:inline-flex;align-items:center;gap:8px;font-size:14px;border:none;cursor:pointer;white-space:nowrap}
.fpill .tog{transform:scale(.72);margin-right:-8px}
.tagpill{background:#000;color:#FFF;border-radius:var(--radius-pill);height:24px;padding:0 12px;display:inline-flex;align-items:center;font-size:12px;font-weight:var(--w-strong);white-space:nowrap}
.tagpill--n{width:24px;padding:0;justify-content:center}
/* Membership status pill (.mpill) — "UNLIMITED ACTIVE" / "ROYALTY ACTIVE" on checkout Delivery Method (Checkout 2026 WChEtDPH0LcErdYFS9SESn 3996:173990 grey · 3996:174293 Unlimited+ gradient). 14 Oct 2026.
   20px tall · 10px caps · programme name strong + "Active" light · 8px dot. Radius = --radius-pill (square on PLT). Colours = --mpill-* (PLT: sand #FAF5E7, garnet dot). */
.mpill{display:inline-flex;align-items:center;gap:6px;height:20px;padding:0 8px 0 6px;border-radius:var(--radius-pill);background:var(--mpill-bg);color:var(--mpill-fg);font-family:var(--font-family-base);font-size:10px;line-height:1;white-space:nowrap;text-transform:uppercase}
.mpill i{width:8px;height:8px;border-radius:9999px;background:var(--mpill-dot);flex:none}
.mpill b{font-weight:var(--w-strong)}.mpill span{font-weight:300}
.mpill--plus{background:var(--mpill-grad-plus);color:#FFF}.mpill--plus i{background:var(--mpill-dot-plus)} /* Debenhams Unlimited+ only */
/* Checkout tiles (.co-tile) — payment method grid + promo Apply. Default: raised + 1px #B5B5B5 keyline. PLT: sand fill, no outline, square (Checkout 2026 2290:437863). */
.co-tile{display:flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 16px;background:var(--co-tile-bg);border:1px solid var(--co-tile-border);border-radius:var(--radius-default);font-family:var(--font-family-base);font-size:14px;font-weight:var(--w-strong);color:var(--text-primary)}
.co-tile--lg{height:50px;font-size:16px;font-weight:var(--w-mid)}
.co-tiles{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.chip-save{background:var(--badge-save-bg);color:var(--badge-save-fg);border-radius:var(--radius-default);padding:8px 12px;font-size:12px;font-weight:var(--w-strong);white-space:nowrap;display:inline-block}
.entry-chip{display:inline-flex;align-items:center;gap:6px;background:#FFF;padding:9px 14px;border-radius:var(--radius-pill);box-shadow:var(--shadow-pill);font-size:12px;font-weight:var(--w-strong);color:#000;position:relative} /* PDP entry chip (VTO, sets) */
.entry-chip .n{position:absolute;right:-4px;top:-4px;min-width:16px;height:16px;border-radius:var(--radius-pill);background:var(--text-link);color:#FFF;font-size:10px;display:flex;align-items:center;justify-content:center;padding:0 4px}
.entry-chip img{width:16px;height:12px;display:block}

/* ---- C-16 Account ---- */
.acct-card{background:var(--card-bg);color:var(--card-ink);border-radius:var(--radius-default);padding:24px;display:flex;flex-direction:column;gap:20px;align-items:center}
.acct-card .amt{font-size:62.5px;font-weight:var(--w-strong);letter-spacing:-3.75px;line-height:59px;white-space:nowrap}
.acct-card .amt small{font-size:39.8px;letter-spacing:-2.39px}
.acct-card .lbl{font-size:12px;text-transform:uppercase}
.acct-card .bd{background:var(--card-btn-bg);color:var(--card-btn-ink);border-color:transparent;height:auto;padding:8px;font-size:14px;font-weight:var(--w-regular);text-transform:none}
.acct-row{background:var(--panel-bg);border-radius:var(--radius-default);padding:16px;display:flex;gap:16px;align-items:center;width:100%;border:none;text-align:left;font:inherit;color:var(--text-primary);cursor:pointer}
.acct-row img{width:24px;height:24px;flex:none}
.acct-row .lbl{font-size:16px;white-space:nowrap;flex:1}
.acct-row .st{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--text-secondary)}
.acct-row .dot{width:8px;height:8px;border-radius:99px;background:var(--dot)}
.acct-puck{width:48px;height:48px;border-radius:var(--radius-pill);background:var(--surface-raised);box-shadow:var(--shadow-card);display:grid;place-items:center;flex:none}
.acct-page{background:var(--page-bg)}

/* ---- C-17 AI Generated strip — proposal rules (EU AI Act Art. 50(4)) ---- */
.badge-ai{height:var(--ai-h);display:flex;align-items:center;justify-content:center;gap:.35em;padding:0 8px;font-size:max(10px,var(--ai-fs,10px))} /* live text, never raster; 10px is the legal floor; fixed strip height */
.pc-badges.has-ai{bottom:calc(var(--ai-h) + 8px)} /* every other badge shifts up by exactly the strip height */

/* ---- C-18 Square tile rail (Brand Room brand/category rail) ---- */
.tile-rail{display:flex;gap:1px;overflow-x:auto;scrollbar-width:none;padding:0}
.prail::-webkit-scrollbar,.tile-rail::-webkit-scrollbar,.sf-float::-webkit-scrollbar,.cat-row::-webkit-scrollbar{display:none} /* swipe rails: scroll, never show a bar (as live) */
.tile-rail::-webkit-scrollbar{display:none}
.tile{flex:none;width:clamp(180px,55vw,230px);display:flex;flex-direction:column;gap:8px;text-decoration:none;color:var(--text-primary)}
.tile img{width:100%;aspect-ratio:1;object-fit:cover;background:var(--surface-media);display:block}
.tile span{font-size:12px;font-weight:var(--w-strong);text-transform:uppercase;text-align:center;padding:0 16px}

/* Deliver+ PDP + checkout modal (SEEL 3209:13791): the bag module as a dialog — 388 mobile / 480 desktop, 4px radius, 16px close in the band */
.dplus-bag--modal .band{position:relative;padding-right:52px}
.dplus-bag .x{position:absolute;top:24px;right:24px;width:16px;height:16px;border:0;padding:0;background:none;cursor:pointer;color:inherit;display:grid;place-items:center}
.dplus-bag .x::before,.dplus-bag .x::after{content:"";position:absolute;width:14px;height:1.5px;background:currentColor;transform:rotate(45deg)}
.dplus-bag .x::after{transform:rotate(-45deg)}

/* App tab bar — the native-app bottom bar, 390 wide.
   Standard (Debenhams + most fascias): DS aIHmkCaTy9c5EWOxAGw0So · App / Tab Bar 3824:9530 (as used in Account 2026 2136:198) —
   83px white, 0 -0.5px #E8E8E8 top shadow, five 48×40 tabs (space-between, 15px sides) at y14, 28px icons, inactive 30% opacity, 139×5 home indicator 8px from the bottom.
   Wishlist tab is the bookmark on boohooMAN and Karen Millen (DS rule; App / Tab Bar 9893:28665): use tab-bookmark.svg.
   PLT: Best App Ever HoBuVNEhf1qpL61XFipy0f · 1128:225860 — 88px #FFFDF7, 0.3px black top rule, 16/14/29 padding, tabs 48×43 with a 10/14 Roboto Medium label;
   only the icon dims (30%), labels stay black. Tabs: Home (PLT monogram) · Shop · Discover · Wishlist · Bag — no Account tab. */
.app-tabbar{position:relative;width:100%;height:83px;background:#FFF;box-shadow:0 -0.5px 0 #E8E8E8;padding-top:14px;box-sizing:border-box}
.app-tabbar .tabs{display:flex;justify-content:space-between;padding:0 15px}
.app-tabbar .tab{width:48px;height:40px;display:flex;flex-direction:column;align-items:center;opacity:.3;background:none;border:0;padding:0;cursor:pointer;color:#000}
.app-tabbar .tab.on{opacity:1}
.app-tabbar .tab img{width:28px;height:28px;margin-top:-2px;display:block}
.app-tabbar .hi{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);width:139px;height:5px;border-radius:99px;background:#000}
.app-tabbar--plt{height:88px;background:#FFFDF7;box-shadow:inset 0 0.3px 0 #000;padding:16px 14px 29px}
.app-tabbar--plt .tabs{padding:0}
.app-tabbar--plt .tab{height:43px;opacity:1;gap:5px}
.app-tabbar--plt .tab img{margin:0;opacity:.3}
.app-tabbar--plt .tab.on img{opacity:1}
.app-tabbar--plt .tab span{font:500 10px/14px 'Roboto',system-ui,sans-serif;color:#000;white-space:nowrap}

/* ---- C-19 Sign in (Sign-in prototype, 12 Oct 2026 · Social-Login P2RiX62irafEZQjyLRhRx7 112-6838 / 2032-1885 · Checkout 2026 WChEtDPH0LcErdYFS9SESn 1669-43380 / 1669-43700)
   One form, two weightings: .auth--link (email me a sign in link first, password as a link under the field) and .auth--pw (email + password first,
   "Forgot password? | Email me a sign in link" link row under the fields). Never email-first-then-branch: the page must not reveal whether an account exists.
   Create account is a centred link under the CTA (no separate block). Mobile = full-width white; ≥1024 = 480 card on --surface-sunken. */
.auth{display:flex;flex-direction:column;gap:var(--gap-4,16px);width:100%;max-width:480px;margin:0 auto;background:var(--surface-raised);padding:var(--gap-6,24px) var(--gap-4,16px);border-radius:var(--radius-default);box-sizing:border-box;color:var(--text-primary)}
.auth-pg{background:var(--surface-raised)}
@media(min-width:1024px){.auth-pg{background:var(--surface-sunken);padding:var(--gap-10,40px) 0 var(--gap-16,64px)}.auth{padding:var(--gap-6,24px)}}
.auth-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gap-4,16px)}
.auth-h{font-size:24px;line-height:30px;font-weight:var(--w-strong);margin:0}
.auth-sub{font-size:14px;line-height:20px;margin:calc(var(--gap-2,8px) * -1) 0 0;color:var(--text-primary)}
.auth-sub b{font-weight:var(--w-strong);overflow-wrap:anywhere}
.auth-x{width:24px;height:24px;flex:none;border:0;background:none;padding:0;cursor:pointer;position:relative;color:var(--text-primary)}
.auth-x::before,.auth-x::after{content:"";position:absolute;left:3px;top:11px;width:18px;height:1.5px;background:currentColor;transform:rotate(45deg)}.auth-x::after{transform:rotate(-45deg)}
.auth-fields{display:flex;flex-direction:column;gap:var(--gap-3,12px)}
.auth .bd{width:100%}
/* password field: the show / hide eye sits in the field's right edge */
.fld--pw{padding-right:52px}
.fld--pw .eye{position:absolute;right:12px;top:50%;transform:translateY(-50%);width:28px;height:28px;border:0;background:none;padding:0;cursor:pointer;display:grid;place-items:center}
.fld--pw .eye img{width:24px;height:24px}
/* link row, Checkout 2026 1669-43700: 14px strong links in the link colour, a 1px rule between them */
.lnk-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--gap-3,12px);row-gap:var(--gap-2,8px)}
.lnk-row .lnk{font-size:14px;line-height:18px;background:none;border:0;padding:0;font-family:inherit;text-align:left}
.lnk-row .sep{width:1px;height:16px;background:var(--border-default)}
/* small print under a message (link sent / reset sent): 12/16, light 300, Grey 5 #6B6B6B (--text-secondary, the body-text floor), the same on every fascia */
.auth-note{font-size:12px;line-height:16px;font-weight:300;color:var(--text-secondary,#6B6B6B);margin:calc(var(--gap-2,8px) * -1) 0 0}
.auth-alt{font-size:14px;line-height:20px;text-align:center;margin:var(--gap-2,8px) 0 0} /* 24px above "New to X?" (gap 4 + gap 2) when it follows the social buttons… */
.auth-pw+.auth-alt{margin-top:0} /* …but 16px when "Sign in with password" sits above it (that link takes the 24px) */
.auth-pw{margin-top:var(--gap-2,8px)} /* "Sign in with password" under the social buttons: 1.5× the block gap above it, gap 4 + gap 2 = gap 6 (24px) */
.auth-alt .lnk{font-size:14px}
/* OR divider */
.or-div{display:flex;align-items:center;gap:var(--gap-4,16px);font-size:14px;line-height:18px;color:var(--text-secondary);white-space:nowrap}
.or-div::before,.or-div::after{content:"";flex:1;height:1px;background:var(--border-subtle)}
/* social sign in: equal icon tiles (112-6838 / 2032-2027) */
.soc-row{display:flex;gap:var(--gap-4,16px)}
/* tiles = Social-Login 2032-2027 exact on every fascia (like the payment buttons, never brand tokens): 54px, white, 1px #E2E2E2, 4px radius, padding gap 2 / gap 4 (8/16px),
   24px icon slot (.ic) holding the Figma marks at their own size: social-apple / social-google (23.52×24, left in the slot) / social-facebook-circle 24 · social-klarna 21 */
.soc{flex:1 0 0;min-width:1px;height:54px;display:flex;align-items:center;justify-content:center;background:#FFF;border:1px solid #E2E2E2;border-radius:4px;cursor:pointer;padding:8px 16px;box-sizing:border-box}
.soc .ic{width:24px;height:24px;flex:none;display:flex;align-items:flex-start;justify-content:flex-start}
.soc .ic--21{width:21px;height:21px}
.soc .ic img{display:block}
/* Continue with Klarna: Sign-In-Link MzGyAVWG5pQVp56ePnGcp9 · 4421-999 exact on every fascia (scheme button, never brand tokens):
   358×50 (full width), #0B051D, 4px radius, "Continue with" Helvetica Neue Medium 15px white, gap 10px, the Klarna badge 70×29.44 */
.soc-klarna{width:100%;height:50px;display:flex;align-items:center;justify-content:center;gap:10px;background:#0B051D;border:0;border-radius:4px;padding:0 16px;cursor:pointer;box-sizing:border-box;font:500 15px/normal 'Helvetica Neue',Helvetica,Arial,sans-serif;color:#FFF;white-space:nowrap}
.soc-klarna img{display:block;flex:none}
/* PLT: square social buttons (0 radius, like every PLT control) and the tiles fill with the field colour (--surface-raised, PLT Background White #FFFDF7) so they sit in the cream card */
[data-brand="plt"] .soc{border-radius:0;background:var(--surface-raised)}
[data-brand="plt"] .soc-klarna{border-radius:0}
/* modal context (checkout / header account icon): the same form in a dialog over the dimmed page */
.auth-modal{position:absolute;inset:0;z-index:var(--z-modal);background:var(--surface-overlay);display:flex;align-items:flex-start;justify-content:center;padding:var(--gap-4,16px)}
.auth-modal .auth{border-radius:var(--radius-default);box-shadow:var(--shadow-float,0 8px 30px rgba(0,0,0,.2));padding:var(--gap-6,24px)}
@media(min-width:1024px){.auth-modal{padding-top:var(--gap-20,80px)}}
/* checkout entry (signed out → checkout): checkout header + guest card first, then the sign in card. Both cards use primary CTAs.
   Mobile: full-width white cards stacked on --surface-sunken, gap 4 (16px) between. ≥1024: two equal cards side by side, max 1356, gap 6 (24px), top padding gap 12 (48px). */
.co-hd{position:relative;height:54px;display:flex;align-items:center;justify-content:space-between;padding:0 var(--gap-4,16px);background:var(--surface-raised)}
.co-logo{height:20px;width:auto;max-width:141px;display:block}
.co-sec{display:flex;align-items:center;gap:var(--gap-2,8px);font-size:12px;line-height:16px;text-transform:uppercase;letter-spacing:.02em;color:var(--text-primary)}
.co-sec img{width:20px;height:20px}
/* header.js variants pin the layout to the variant, not the viewport */
.hd--checkout.hd--desktop .co-hd{padding:0 var(--gap-20,80px)}.hd--checkout.hd--desktop .co-logo{position:absolute;left:50%;transform:translateX(-50%)}.hd--checkout.hd--desktop .co-sec{margin-left:auto}
.hd--checkout[data-hd-device="mobile"] .co-hd{padding:0 var(--gap-4,16px)}.hd--checkout[data-hd-device="mobile"] .co-logo{position:static;transform:none;height:auto;width:106px;max-height:33px;max-width:none;object-fit:contain;object-position:left center} /* same logo size as the main mobile header */.hd--checkout[data-hd-device="mobile"] .co-sec{margin-left:0}
.co-pg{background:var(--surface-sunken);min-height:calc(100vh - 54px);padding:var(--gap-4,16px) 0 var(--gap-16,64px)}
.co-grid{display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.co-grid .auth{max-width:none;margin:0}
@media(min-width:1024px){.co-hd{padding:0 var(--gap-20,80px)}.co-logo{position:absolute;left:50%;transform:translateX(-50%)}.co-hd .co-sec{margin-left:auto}
  .co-pg{padding:var(--gap-12,48px) var(--gap-10,40px) var(--gap-24,96px)}.co-grid{flex-direction:row;align-items:flex-start;gap:var(--gap-6,24px);max-width:1356px;margin:0 auto}.co-grid .auth{flex:1 1 0;min-width:0}}

/* ───────────── AI ─────────────
   Every agent / AI entry point: the AI icon (assets/ds/icons/ai.svg) + the AI gradient (--ai-gradient). Figma PLP Reviews 265:3677 · 27:37643.
   .ai-pill            white pill, no outline — sits inside a field or on an image (inside the search box, on the PDP gallery)
   .ai-pill--outline   white pill with the AI gradient outline — stands on its own (outside the search box, prompt chips)
   .ai-pill--soft      white pill on the DS puck shadow — prompt chips, on-image buttons (no solid outline)
   .ai-pill--sm        32px · .ai-icon  the icon on its own (header icon row) */
/* AI by fascia (Jake 16 Oct): Debenhams = the teal AI gradient (its aqua CTA #7BE7D8 is only 1.4:1 on white, so the icon cannot take it).
   Every other fascia draws the icon and the outline in its primary CTA colour (--surface-action), which passes AA for graphics (3:1) on white
   on all 16 today; a fascia whose CTA fails 3:1 sets --ai-fg:#000 instead. --ai-tint / --ai-ink = the soft surface and text for AI chips. */
:root,[data-brand]{--ai-fg:var(--surface-action,#000);--ai-tint:var(--surface-sunken,#F5F5F5);--ai-ink:var(--text-primary,#000);--ai-icon-bg:var(--ai-fg);--ai-icon-mask:url("icons/ai.svg") center/contain no-repeat}
[data-brand]:not([data-brand="debenhams"]){--ai-gradient:linear-gradient(var(--ai-fg),var(--ai-fg))}
:root:not([data-brand]),[data-brand="debenhams"]{--ai-fg:#2E7F79;--ai-tint:#F2F8F7;--ai-ink:#2F6B63;--ai-icon-bg:url("icons/ai.svg") center/contain no-repeat;--ai-icon-mask:none;--ai-gradient:linear-gradient(107deg,#70BEB3 0%,#9DEDE2 99.4%)}
.ai-icon{display:inline-block;width:20px;height:20px;flex:none;background:var(--ai-icon-bg);-webkit-mask:var(--ai-icon-mask);mask:var(--ai-icon-mask)}
.ai-pill{display:flex;align-items:center;gap:6px;height:36px;padding:0 16px 0 12px;border-radius:var(--radius-pill);background:var(--surface-raised,#FFF);border:0;color:var(--text-primary);font-family:var(--font-family-base);font-size:14px;font-weight:var(--w-mid,500);line-height:1.2;white-space:nowrap;cursor:pointer;text-align:left}
.ai-pill .ai-icon{width:18px;height:18px}
.ai-pill--outline{border:var(--ai-outline) solid transparent;background:linear-gradient(var(--surface-raised,#FFF),var(--surface-raised,#FFF)) padding-box,var(--ai-gradient) border-box}
.ai-pill--outline:hover{background:linear-gradient(var(--ai-tint),var(--ai-tint)) padding-box,var(--ai-gradient) border-box}
.ai-pill--soft{box-shadow:var(--shadow-puck)}.ai-pill--soft:hover{box-shadow:var(--shadow-pill)}   /* prompt chips: shadow, never a solid outline */
.ai-pill--sm{height:32px;font-size:13px;padding:0 12px 0 10px}.ai-pill--sm .ai-icon{width:16px;height:16px}
.ai-pill--wrap{height:auto;min-height:40px;padding:8px 16px 8px 12px;white-space:normal;font-weight:var(--w-regular,400)}
.ai-iconbtn{display:grid;place-items:center;width:32px;height:32px;padding:0;border:0;background:none;cursor:pointer}.ai-iconbtn .ai-icon{width:24px;height:24px}

/* ============================================================
   16 Oct 2026 — components added for the DS page templates (templates/pdp.html, templates/bag.html) and promoted from the
   PLP / bag prototypes so no page carries its own component CSS. Changelog: assets/ds/changelog.js.
   ============================================================ */
/* Page title (C-pg-title) — h1 + optional count line. "Your Bag (2)", account pages. 22px mobile / 26px desktop, strong. */
.pg-title{display:flex;flex-direction:column;gap:2px;font-family:var(--font-family-base);padding:16px 0 4px}
.pg-title h1{margin:0;font-size:22px;line-height:1.2;font-weight:var(--w-strong);letter-spacing:.01em}
.pg-title .count{font-size:13px;color:var(--text-secondary)}
@media(min-width:1024px){.pg-title h1{font-size:26px}}
/* PLP title (promoted from plp-alignment) — the category h1 + product count, centred from 768 */
.plp-title{text-align:left;padding:6px 0 2px;position:relative}
.plp-title h1{font-size:22px;font-weight:var(--w-strong);letter-spacing:.01em;margin:0}
.plp-title .count{font-size:13px;color:var(--text-secondary);margin-top:2px}
@media(min-width:768px){.plp-title{text-align:center}.plp-title h1{font-size:26px}}
/* SEO copy (promoted) — category intro under the title; one-line clamp variant with Show more */
.seo{color:var(--text-secondary);font-size:13px;max-width:860px;margin:6px 0 2px}
.seo--line{display:flex;gap:6px;align-items:baseline;white-space:nowrap;overflow:hidden;max-width:860px}
.seo[hidden]{display:none}
.seo--line .t{overflow:hidden;text-overflow:ellipsis;min-width:0}
@media(min-width:768px){.seo{margin:6px auto 2px;text-align:center}}
.showmore{display:block;font-size:14px;color:var(--text-primary);padding:2px 0 12px;background:none;border:0;cursor:pointer;font-family:inherit}
.showmore[hidden]{display:none}
/* Grid view toggle (promoted) — PLP-Grid-View 194-2513: 16px icon right of the PLP title on mobile; desktop segmented toggle */
.gt{display:none;position:absolute;right:0;top:10px;width:24px;height:24px;padding:4px;background:none;border:none;cursor:pointer}
.gt img{width:16px;height:16px;display:block}
.viewtoggle{display:inline-flex;border:var(--border-w) solid var(--border-default);border-radius:var(--radius-default);overflow:hidden}
.viewtoggle button{width:36px;height:38px;display:grid;place-items:center;padding:0;background:none;border:0;cursor:pointer}
.viewtoggle img{width:16px;height:16px;object-fit:contain;opacity:.45}
.viewtoggle button.on img{opacity:1}
.viewtoggle button.on{background:var(--surface-sunken)}
/* Content slot (promoted from plp-alignment) — DS Figma 8556-18755. Square in-grid tile that opens its row: Button (media + white CTA),
   Text (media + gradient + View All + optional Sponsored), Get The Look (.cslot--gtl, sunken card + 2x2 mosaic). */
.cslot{grid-column:1/span 2;aspect-ratio:1/1;position:relative;overflow:hidden;cursor:pointer;border-radius:0;margin-bottom:2px}
.cslot .slot-cut{position:absolute;right:0;bottom:0;background:#FFF;min-width:44px;min-height:44px;padding:10px 14px;display:flex;gap:8px;align-items:center;justify-content:center;color:#000;font-size:14px;font-weight:var(--w-regular)}
.cslot .slot-cut svg{width:16px;height:16px;display:block}
.cslot>img.media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cslot .slot-btn{position:absolute;right:24px;bottom:24px;height:50px;padding:8px 24px;background:#FFF;color:#000;border:none;border-radius:4px;font-family:var(--font-family-base);font-size:16px;line-height:24px;font-weight:var(--w-btn,600);text-transform:uppercase;display:flex;align-items:center}
.cslot .slot-grad{position:absolute;left:0;right:0;bottom:0;height:130px;background:linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.7))}
.cslot .slot-view{position:absolute;right:24px;bottom:24px;display:flex;gap:8px;align-items:center;color:#FFF;font-size:14px;font-weight:var(--w-regular)}
.cslot .slot-view svg{width:16px;height:16px;display:block}
.cslot .slot-spon{position:absolute;top:8px;right:8px;color:#FFF;font-size:10px;text-shadow:0 0 4px rgba(0,0,0,.8)}
.cslot--gtl{background:var(--surface-sunken);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:16px;aspect-ratio:auto}
.cslot--gtl .slot-title{font-size:18px;font-weight:var(--w-strong);color:var(--text-primary)}
.cslot--gtl .slot-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.cslot--gtl .slot-grid img{width:100%;object-fit:cover;border-radius:4px;display:block}
.cslot--gtl .slot-grid img:first-child{grid-row:1/span 2;height:100%}
.cslot--gtl .slot-grid img:not(:first-child){aspect-ratio:1/1;height:auto}
@media(min-width:1024px){.cslot .slot-grad{height:200px}.cslot .slot-view{right:32px;bottom:32px}.cslot--gtl{padding:24px;gap:24px}.cslot--gtl .slot-title{font-size:20px}.cslot--gtl .slot-grid{gap:12px}}
/* PDP gallery (C-pdp-gallery) — Figma Taggstar MAN PDP 3484:23546 / 3484:21984 · live PDPs 16 Oct 2026.
   Mobile: 2:3 slides at 60% width, gap 1 (4px), scroll-snap, full bleed, 4px pagination bar gap 4 (16px) under. Tags top-left 12px.
   Desktop (≥1024): 100px thumbnail column (selected = 1px black keyline) + one main slide with 32px round prev / next. */
.pdp-gal{position:relative;font-family:var(--font-family-base)}
.pdp-gal .main{position:relative;min-width:0}
.pdp-gal .slides{display:grid;grid-auto-flow:column;grid-auto-columns:60%;gap:4px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain}
.pdp-gal .slides::-webkit-scrollbar{display:none}
.pdp-gal .slides img{width:100%;aspect-ratio:2/3;object-fit:cover;background:var(--surface-media);display:block;scroll-snap-align:start}
.pdp-gal .tags{position:absolute;left:12px;top:12px;display:flex;gap:4px;z-index:2}
.pdp-gal .thumbs,.pdp-gal .nav{display:none}
.pdp-gal .pag{height:4px;background:var(--border-subtle,#E7E7E7);border-radius:99px;margin:16px 16px 0;position:relative;overflow:hidden}
.pdp-gal .pag i{position:absolute;left:0;top:0;bottom:0;background:var(--text-primary);border-radius:99px}
@media(min-width:1024px){
  .pdp-gal{display:grid;grid-template-columns:100px minmax(0,1fr);gap:24px;align-items:start}
  .pdp-gal .thumbs{display:flex;flex-direction:column;gap:8px}
  .pdp-gal .thumbs button{padding:0;border:0;background:none;cursor:pointer;display:block;opacity:.3;transition:opacity .2s}
  .pdp-gal .thumbs button.on,.pdp-gal .thumbs button:hover{opacity:1}   /* no outline: the selected thumb is full strength, the rest 30% */
  .pdp-gal .thumbs img{width:100%;aspect-ratio:2/3;object-fit:cover;display:block;background:var(--surface-media)}
  .pdp-gal .slides{grid-auto-columns:100%;gap:0}
  .pdp-gal .nav{display:grid;place-items:center;position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;border-radius:99px;background:var(--surface-raised,#FFF);border:0;box-shadow:var(--shadow-pill,0 1px 4px rgba(0,0,0,.15));cursor:pointer;z-index:2}
  .pdp-gal .nav.prev{left:12px}.pdp-gal .nav.next{right:12px}
  .pdp-gal .nav img{width:16px;height:16px;display:block}
  .pdp-gal .pag{display:none}}
/* PDP title (C-pdp-head) — brand strong over name regular, 16px, with the 44px round wishlist (production shadow) on the right */
.pdp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;font-family:var(--font-family-base)}
.pdp-head .titles{display:flex;flex-direction:column;gap:4px;min-width:0}
.pdp-head .brand{font-size:16px;line-height:20px;font-weight:var(--w-strong)}
.pdp-head .name{font-size:16px;line-height:20px;font-weight:var(--w-regular);margin:0}
.pdp-head .wish{flex:none;width:44px;height:44px;border-radius:99px;background:var(--surface-raised,#FFF);border:0;box-shadow:var(--shadow-pill,0 1px 6px rgba(0,0,0,.15));display:grid;place-items:center;cursor:pointer}
.pdp-head .wish img{width:20px;height:20px;display:block}
/* Delivery countdown (C-ndd) — "Order in 14 hrs 50 mins for Next Day Delivery", 20px delivery icon, gap 2 (8px), time strong. Markup: <div class=ndd><img><span>Order in <b>…</b> for …</span></div> */
.ndd{display:flex;align-items:center;gap:8px;font-family:var(--font-family-base);font-size:14px;line-height:20px}
.ndd img{width:20px;height:20px;flex:none;display:block}
.ndd b{font-weight:var(--w-strong)}
/* Option label (C-opt-label) — "Colour: Black" above swatches / fits, 16px, value mid weight */
.opt-label{font-family:var(--font-family-base);font-size:16px;line-height:24px}
.opt-label b{font-weight:var(--w-mid)}
/* Membership box (C-member-box) — PDP Premier / Premier Club / Unlimited / Royalty box, live 10 Sep + 16 Oct 2026.
   Fascia art + colours from assets/ds/membership.js (--mb-*). Padding gap 4 / 5 (16px 20px), gap 6 (24px) to the ADD button. */
.member-box{display:flex;align-items:center;gap:24px;padding:16px 20px;border-radius:var(--radius-default);background:var(--mb-bg,var(--surface-sunken)) var(--mb-img,none) center/100% 100% no-repeat;color:var(--mb-fg,var(--text-primary));font-family:var(--font-family-base)}
.member-box .t{flex:1;min-width:0;font-size:14px;line-height:20px}
.member-box .lg{display:block;margin-bottom:12px}
.member-box .lg img{height:var(--mb-lg-h,24px);width:auto;display:block}
.member-box .add{flex:none;height:32px;padding:0 16px;border:0;border-radius:var(--radius-default);background:var(--mb-cta-bg,#000);color:var(--mb-cta-fg,#FFF);font:var(--w-strong) 14px/1 var(--font-family-base);text-transform:uppercase;cursor:pointer}
/* Bag payment summary (order-summary v2, promoted 16 Oct from projects/usp-banner/bag.js — the live /basket rebuild of 06 Oct).
   Rendered by assets/ds/bag-summary.js (DG_bagSummaryHTML / DG_bagTopHTML). */
.bs{font-family:var(--font-family-base);color:#000;background:var(--surface-sunken,#FAFAFA);display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;text-align:left;line-height:normal;box-sizing:border-box}
.bs *{box-sizing:border-box}
.bs--d{gap:16px;width:100%;max-width:390px}.bs--m{padding-top:24px}
.bs-card{background:var(--surface-raised,#FFF);padding:24px;border-radius:var(--radius-default);display:flex;flex-direction:column;gap:24px}
.bs--m .bs-card{padding:24px 16px}.bs--m .bs-flat{background:none;border-radius:0}
.bs-hr{height:1px;background:#E5E7EB}
.bs-sum{display:flex;flex-direction:column;gap:16px}
.bs-h{font-size:20px;line-height:20px;font-weight:600}
.bs-r{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:16px;line-height:24px;font-weight:400}
.bs-r>span:last-child{white-space:nowrap}
.bs-dp{margin:8px 0}.bs-dp small{display:block;font-size:12px;line-height:18px;color:#6B7280}
.bs-tot{border-top:1px solid #E5E7EB;padding-top:16px;margin-top:0}.bs-tot b{font-weight:600}
.bs-di{display:flex;flex-direction:column;align-items:flex-end;font-size:14px;line-height:21px;margin-bottom:12px}
.bs-di b{font-weight:600}.bs-di .bs-r{font-size:14px;line-height:21px;justify-content:flex-end;gap:0}.bs-di .bs-r>span:first-child{text-align:right}.bs-di .bs-r>span:last-child{min-width:85px;text-align:right}
.bs-ctas{display:flex;flex-direction:column;gap:8px}
.bs-cta{display:flex;align-items:center;justify-content:center;width:100%;height:50px;border:0;border-radius:var(--radius-default);background:var(--bs-bg);color:var(--bs-fg);font:600 16px/16px var(--font-family-base);text-transform:var(--bs-case);cursor:pointer;padding:0 12px}
.bs-or{display:flex;align-items:center;gap:16px;color:#9CA3AF;font-size:14px;line-height:21px;margin:0 0 0}
.bs-or:before,.bs-or:after{content:"";flex:1;height:1px;background:#E5E7EB}
.bs-w{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;height:50px;border:0;border-radius:4px;cursor:pointer;font:400 18px/1 'Helvetica Neue',Helvetica,Arial,sans-serif;padding:0}
.bs-w img{display:block;width:auto}
.bs-pp{background:#FFC439;color:#2C2E2F}.bs-ap{background:#000}.bs-kl{background:#0E0E0E;color:#FFF;font-size:16px;gap:6px}
.bs-msg{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:4px 6px;font:400 11px/16px 'Helvetica Neue',Helvetica,Arial,sans-serif;color:#2C2E2F;text-align:center;margin:4px 0 0}
.bs-msg img{height:12px;width:auto;display:block}.bs-msg u{color:#0070E0}
.bs-cards{display:flex;justify-content:space-between;align-items:center;gap:2px}
.bs-cards img{height:21px;width:auto;min-width:0;flex:0 1 auto;display:block;object-fit:contain}
.bs-pr{gap:16px}
.bs-ph{font-size:18px;line-height:27px;font-weight:600}
.bs-pf{display:flex;gap:16px}
.bs-in{flex:1;min-width:0;height:50px;display:flex;align-items:center;padding:0 16px;border:1px solid #B5B5B5;border-radius:var(--radius-default);background:var(--surface-raised,#FFF);font-size:16px;font-weight:300;color:#757575;white-space:nowrap;overflow:hidden}
.bs-ap2{flex:none;height:50px;padding:0 20px;border:1px solid #B5B5B5;border-radius:var(--radius-default);background:var(--surface-raised,#FFF);font:400 16px/16px var(--font-family-base);color:#000;cursor:pointer}
.bs--lt .bs-cta{font-weight:400}
.bs--sm,.bs--sm .bs-ap2{color:#333}
.bs--sm .bs-h{font-size:16px;line-height:16px;font-weight:400}
.bs--sm .bs-r{font-size:12px;line-height:18px;font-weight:300}.bs--sm .bs-r>span:last-child{font-weight:400}
.bs--sm .bs-tot b{font-weight:400}.bs--sm .bs-di,.bs--sm .bs-di .bs-r{font-size:12px;line-height:18px}.bs--sm .bs-di b{font-weight:400}
.bs--sm .bs-cta{font-size:14px;font-weight:400}.bs--sm .bs-or{font-size:12px}
.bs--sm .bs-ph{font-size:16px;line-height:24px;font-weight:400}.bs--sm .bs-ap2{font-size:14px;font-weight:300}
.bs-top{background:var(--surface-raised,#FFF);gap:24px;padding:0 0 24px}
.bs-top .bs-ot{font-size:16px;line-height:24px}.bs-top .bs-ot b{font-weight:600;margin-left:4px}
.bs-top.bs--sm .bs-ot{font-size:12px}.bs-top.bs--sm .bs-ot b{font-weight:400}
/* Size selector: the size-guide glyph (fix 16 Oct — was sized inline per page) */
.sizes-head .guide img{width:16px;height:16px;display:block;flex:none}
/* Export (html2canvas can't paint CSS masks): pages set html.exporting while capturing — DS fix 16 Oct, was a sign-in page override */
html.exporting .ftr-chev{-webkit-mask:none;mask:none;background:url(icons/lib/icons-down.svg) center/contain no-repeat}

/* ---- Delivery grid (PDP "Delivery Methods" box) + Delivery options modal — 16 Oct 2026 · assets/ds/delivery.js ----
   Live PDP box (Dynamo = what checkout serves) · Demi Adesanya's tabbed mockup · Paul Dossis's modal (Gifting PIh1ikzvYNH1FR4arKJbe4 · 209-294935 / 209-295333).
   Box: 1px --border-subtle, radius --radius-default, padding gap 4 (16px), gap 4 (16px) between parts. Three layouts:
     .dgrid-rows--pr  James's PR rows ("Arrives Tomorrow [Fastest]" / method | price), fastest first, cheapest last, + a third home row when both are click & collect
     .dgrid-tabs  Delivery / Click & Collect underline tabs, checkout-style .dgrid-row (when + badge · method · cut-off | price, was struck under)
     .dgrid--line one line ("Get it Tomorrow to M4 7BB"), no box title; everything else in the modal
   Badges .dgrid-badge beside the arrival line: 12px semibold, --radius-default · --fast red (--text-error on --error-bg) · --cheap grey · --member = the programme (Premier, Unlimited, Royalty).
   Tabs (.dgrid-tabs) sit top right on the title line (.dgrid-hd).
   Bulky: .dgrid-bulky under the price (upfront) + .dgrid-note in the box + a neutral .msg in the modal.
   Modal = the DS .mdl (desktop .mdl--sm · mobile web .mdl--alert as the Figma 358 · app .mdl--up) inside .dopts-layer; body = .dopts-seg toggle
   (Home Delivery / Collect Nearby — the page's 12px underline tabs), .dopts-list rows in the page row type (14/20: name semibold · "Arrives by …" regular | price semibold, was 12 light grey under it),
   .dopts-hr before Northern Ireland, .dopts-grp section heads (one-list variant), .dopts-note 12px footnote. Rows gap 4 (16px). */
.dgrid{display:flex;flex-direction:column;gap:var(--gap-4,16px);padding:var(--gap-4,16px);border:var(--border-w,1px) solid var(--border-subtle);border-radius:var(--radius-default);font-family:var(--font-family-base);color:var(--text-primary);text-align:left;background:var(--surface-page)}
.dgrid--line{gap:var(--gap-3,12px)}
.dgrid-hd{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--gap-2,8px) var(--gap-4,16px)}
.dgrid-hd h2{margin:0;font-size:14px;font-weight:var(--w-mid,500);line-height:20px}
/* tag beside the arrival line (James's PR, Home Delivery Top Up): 4px radius, 12px semibold · Fastest = error red on --error-bg · Cheapest = secondary on --surface-sunken */
.dgrid-badge{display:inline-flex;align-items:center;height:22px;padding:0 var(--gap-2,8px);border-radius:var(--radius-default);background:var(--surface-sunken);color:var(--text-secondary);font-size:12px;font-weight:var(--w-strong,600);line-height:1;white-space:nowrap;vertical-align:middle;flex:none}
.dgrid-badge--fast{background:var(--error-bg,#FFF2F2);color:var(--text-error,#D33F3F)}
.dgrid-badge--cheap{background:var(--surface-sunken);color:var(--text-secondary)}
.dgrid-badge--member{background:var(--text-primary);color:var(--text-inverse,#FFF)}
.dgrid-more{align-self:flex-start;padding:0;border:0;background:none;font:inherit;font-size:14px;line-height:20px;color:var(--text-primary);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.dgrid-more:hover{text-decoration:none}
.dgrid-tabs{display:flex;gap:var(--gap-4,16px);margin-left:auto}
.dgrid-tabs button{padding:var(--gap-1,4px) 0;border:0;border-bottom:2px solid transparent;background:none;font:inherit;font-size:12px;font-weight:300;color:var(--text-primary);cursor:pointer}
.dgrid-tabs button.on{border-bottom-color:var(--text-primary);font-weight:var(--w-mid,500)}
.dgrid-panel{display:flex;flex-direction:column;gap:var(--gap-2,8px)}.dgrid-panel[hidden]{display:none}
.dgrid-rows{list-style:none;margin:0;padding:0}
.dgrid-row{display:flex;justify-content:space-between;gap:var(--gap-4,16px);padding:var(--gap-3,12px) 0;border-top:var(--border-w,1px) solid var(--border-subtle)}
.dgrid-row:first-child{border-top:0;padding-top:0}
.dgrid-row .l{display:flex;flex-direction:column;gap:2px;min-width:0}
.dgrid-row .w{display:flex;align-items:center;gap:var(--gap-2,8px);flex-wrap:wrap;font-size:14px;line-height:20px}.dgrid-row .w b{font-weight:var(--w-mid,500)}
.dgrid-row .n{font-size:14px;line-height:20px;font-weight:300}
.dgrid-row .c{font-size:12px;line-height:16px;font-weight:300;color:var(--text-secondary)}
.dgrid-row .r{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex:none;font-size:14px;line-height:20px;white-space:nowrap}
/* A rows (PR): no keylines, gap 4 (16px), arrival strong, method regular, price strong and centred on the row */
.dgrid-rows--pr{display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.dgrid-rows--pr .dgrid-row{border:0;padding:0;align-items:center}
.dgrid-rows--pr .w b,.dgrid-rows--pr .r b{font-weight:var(--w-strong,600)}
.dgrid-rows--pr .n{font-weight:var(--w-regular,400)}
.dgrid-row .r b{font-weight:var(--w-mid,500)}.dgrid-row .r s{font-size:12px;font-weight:300;color:var(--text-secondary)}
.dgrid-one{display:flex;gap:var(--gap-3,12px);align-items:center}  /* icon centred on the two lines */
.dgrid-one img{width:24px;height:24px;flex:none}
.dgrid-one p{margin:0;font-size:14px;line-height:20px}.dgrid-one p b{font-weight:var(--w-strong)}
.dgrid-one .s{display:block;font-size:12px;line-height:16px;font-weight:300;color:var(--text-secondary);margin-top:2px}
.dgrid--line .dgrid-more{margin-left:36px;font-size:12px;line-height:16px}
.dgrid-note{margin:0;font-size:12px;line-height:16px;color:var(--text-secondary)}
.dgrid-ret{display:flex;gap:var(--gap-3,12px);align-items:center;padding-top:var(--gap-4,16px);border-top:var(--border-w,1px) solid var(--border-subtle)}
.dgrid-ret img{width:24px;height:24px;flex:none}
.dgrid-ret .t{font-size:14px;line-height:20px}.dgrid-ret .s{font-size:12px;line-height:16px;font-weight:300}.dgrid-ret a{color:inherit}
/* Sold & Delivered by (under the returns line): box icon (icons-order) centred · 14/20 · marketplace seller name is an underlined link → seller modal.
   Placeholder before a size is picked (.is-empty): "Select a size to see seller info" in --text-secondary, the icon at 40% */
.dgrid-seller{display:flex;gap:var(--gap-3,12px);align-items:center;font-size:14px;line-height:20px}
.dgrid-seller img{width:24px;height:24px;flex:none}
.dgrid-seller .lnk{padding:0;border:0;background:none;font:inherit;color:inherit;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.dgrid-seller.is-empty{color:var(--text-secondary)}.dgrid-seller.is-empty img{opacity:.4}
/* Seller modal (.dseller on the DS .mdl): seller name title · label 16 semibold / value 16 regular, gap 4 (16px) between · returns copy */
.dseller dl{margin:0;display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.dseller dt{font-size:16px;line-height:22px;font-weight:var(--w-strong,600)}
.dseller dd{margin:0;font-size:16px;line-height:22px}
.dseller-ret .t{font-size:14px;line-height:20px}.dseller-ret .s{font-size:12px;line-height:16px;font-weight:300}.dseller-ret a{color:inherit}
.dgrid-bulky{display:flex;align-items:flex-start;gap:var(--gap-2,8px);margin:0;font-family:var(--font-family-base);font-size:12px;line-height:16px;color:var(--text-primary)}
.dgrid-bulky img{width:16px;height:16px;flex:none}
/* modal */
.dopts-layer,.sns-layer{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:var(--gap-4,16px) 0}
.dopts-layer--up,.sns-layer--up{align-items:flex-end;padding:var(--gap-14,56px) 0 0}
.dopts-layer>.mdl,.sns-layer>.mdl{z-index:3;max-height:100%;animation:mdlfade .3s ease-in-out both}
.dopts-layer--up>.mdl,.sns-layer--up>.mdl{animation-name:mdlup}
.dopts .mdl-bd{overflow-y:auto;gap:var(--gap-4,16px)}
.dopts .mdl-bd [hidden]{display:none}
.dopts [data-dg-mpanel]{display:flex;flex-direction:column;gap:var(--gap-4,16px)}
/* tabs never change the height: both panes share one grid cell, so the window is always as tall as the longer list and the
   footnote doesn't move when you switch (Jake, 16 Oct 2026). The hidden pane keeps its space but is invisible (and out of the a11y tree). */
.dopts-panes,.dgrid-panes{display:grid}
.dopts-panes>*,.dgrid-panes>*{grid-area:1/1;align-self:start}
.dopts .mdl-bd .dopts-panes>[hidden]{display:flex;visibility:hidden}
.dgrid-panes>[hidden]{display:flex;visibility:hidden}
/* modal tabs + rows = the page grid's own type (.dgrid-tabs, .dgrid-rows--pr): 12px underline tabs, 14/20 rows, price 14 semibold, was 12 light grey */
.dopts-seg{display:flex;gap:var(--gap-4,16px);flex:none}
.dopts-seg button{padding:var(--gap-1,4px) 0;border:0;border-bottom:2px solid transparent;background:none;font:inherit;font-size:12px;font-weight:300;color:var(--text-primary);cursor:pointer}
.dopts-seg button.on{border-bottom-color:var(--text-primary);font-weight:var(--w-mid,500)}
.dopts-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--gap-4,16px)}
.dopts-row{display:flex;justify-content:space-between;align-items:center;gap:var(--gap-4,16px);font-size:14px;line-height:20px}
.dopts-row .l{display:flex;flex-direction:column;gap:2px;min-width:0}.dopts-row .l b{font-weight:var(--w-strong,600)}
.dopts-row .l span{font-weight:var(--w-regular,400)}
.dopts-row .r{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex:none;white-space:nowrap}.dopts-row .r b{font-weight:var(--w-strong,600)}
.dopts-row .r s{font-size:12px;font-weight:300;color:var(--text-secondary)}
.dopts-hr{border:0;border-top:var(--border-w,1px) solid var(--border-subtle);margin:0;width:100%}
.dopts-grp{margin:0;font-size:14px;line-height:20px;font-weight:var(--w-mid,500)}  /* = the box title (.dgrid-hd h2) */
.dopts-empty{margin:0;font-size:14px;color:var(--text-secondary)}
.dopts-note{margin:var(--gap-2,8px) 0 0;font-size:12px;line-height:15px;color:var(--text-secondary)}

/* App top bar (.app-top) — native-app status bar + PDP nav: 9:41 / island-safe status row (47px) then a 44px row: back · share + wishlist (24px icons).
   Sticky to the top of an app screen; pairs with .app-tabbar at the bottom. 16 Oct 2026 (PDP delivery grid prototype). */
.app-top{position:sticky;top:0;z-index:5;background:var(--surface-page);font-family:-apple-system,'SF Pro Text',system-ui,sans-serif}
.app-top .sb{height:47px;display:flex;align-items:center;justify-content:space-between;padding:0 26px 0 40px;font-size:17px;font-weight:600;color:#000}
.app-top .sb .sys{display:flex;gap:6px;align-items:center}.app-top .sb svg{display:block}
.app-top .nav{height:44px;display:flex;align-items:center;justify-content:space-between;padding:0 var(--gap-3,12px)}
.app-top .nav span{display:flex;gap:var(--gap-2,8px)}
.app-top .nav button{width:40px;height:40px;display:grid;place-items:center;padding:0;border:0;background:none;cursor:pointer}
.app-top .nav img{width:24px;height:24px}

/* PDP buy buttons (.pdp-ctas) — every PDP: Add to bag, then PayPal, then Apple Pay, stacked full width, gap 2 (8px). Order is fixed (Jake, 16 Oct 2026).
   PayPal carries the "Checkout" label (.pp-co, 20px #2C2E2F) after the wordmark, as live. Promoted from the Shopping agent PDP. */
.pdp-ctas{display:flex;flex-direction:column;gap:var(--gap-2,8px)}
.pdp-ctas>.bd,.pdp-ctas>.pay{width:100%}
.pay .pp-co{font:500 20px/1 var(--font-family-base);color:#2C2E2F}

/* Google PDP prompts (.ai-prompts) — Google Cloud shopping agent's <google-ai-prompts product-id direction="column"> on every PDP, under the buy buttons.
   DOM mirrors the web component's shadow parts: .prompts-container[data-dir=column|row] > .prompt-item > .prompt-link (.prompt-link__icon + __text).
   Heading "Ask Deb" 16 semibold with the 18px AI icon; chips = .ai-pill--soft --wrap (puck shadow, never an outline); last chip "Ask anything" = .ai-pill--outline.
   Gap 3 (12px) heading → chips, gap 2 (8px) between chips. Promoted from the Shopping agent prototype (projects/shopping-agent), 16 Oct 2026. */
.ai-prompts{display:flex;flex-direction:column;gap:var(--gap-3,12px);font-family:var(--font-family-base)}
.ai-prompts-hd{display:flex;align-items:center;gap:6px;margin:0;font-size:16px;font-weight:var(--w-strong,600);color:var(--text-primary)}
.ai-prompts .prompts-container{display:flex;flex-wrap:wrap;gap:var(--gap-2,8px)}
.ai-prompts .prompts-container[data-dir="column"]{flex-direction:column;align-items:stretch}
.ai-prompts .prompts-container[data-dir="column"] .prompt-link{width:100%}
.ai-prompts .prompt-link__icon{display:inline-flex}

/* ---- Promoted from the Shopping agent PDP — the master PDP from 16 Oct 2026 (templates/pdp.html) ---- */
/* PDP gallery product tags (.pdp-gal .ptags): bottom right of the gallery, stacked, white 90% · 13px light (14px desktop), 4px radius. Pinned to the
   gallery, gap 4 (16px) from the edge, so they stay put as the images scroll. */
.pdp-gal .ptags{position:absolute;z-index:3;right:var(--gap-4,16px);bottom:var(--gap-3,12px);display:flex;flex-direction:column;align-items:flex-end;gap:var(--gap-1,4px);pointer-events:none}
.pdp-gal .ptags span{background:rgba(255,255,255,.9);color:#000;font:300 13px/1 var(--font-family-base);padding:7px 10px;border-radius:var(--radius-default)}
@media(min-width:1024px){.pdp-gal .ptags{bottom:var(--gap-4,16px)}.pdp-gal .ptags span{font-size:14px;padding:8px 12px}}
/* AI tag chip (.ai-pill--tag): the Shop Similar / Virtual Stylist chip in the row above the PDP title — 13px light, 9 / 14 padding, 16px icon */
.ai-pill--tag{height:auto;padding:9px 14px;gap:6px;font-size:13px;font-weight:300}.ai-pill--tag .ai-icon{width:16px;height:16px}.ai-pill--tag img{width:16px;height:12px}
.pdp-chips{display:flex;gap:10px;flex-wrap:wrap}
.pdp-gal .main>.pdp-chips{position:absolute;z-index:3;top:var(--gap-4,16px);right:var(--gap-4,16px)}  /* desktop: Shop Similar top right of the main image */
/* Accordion set (.acc-set): the PDP info rows — At a Glance (open) · Description · Product Details & Care · Delivery · Returns · Manufacturer.
   Keyline only between rows, gap 4 (16px) row padding, 15px semibold head, 16px chevron (icons-down) that flips open. */
.acc-set .acc{display:block;border:0}.acc-set .acc+.acc{border-top:var(--border-w,1px) solid var(--border-subtle)}
.acc-set .acc:not(.open) .acc-b{display:none}
.acc-set .acc-h{padding:var(--gap-4,16px) 0;font:var(--w-strong,600) 15px var(--font-family-base)}
.acc-set .acc-h img{width:16px;height:16px}
.acc-set .acc-b{padding:0 0 var(--gap-4,16px);font-size:14px;font-weight:300;line-height:1.6}
.acc-set .acc-b .glance{margin:0;padding:0}

/* Subscribe & Save (C-sns + assets/ds/subscribe.js) — Figma ed2M0bCy3GMtlTRdtkwM4F · PDP box 172:24095 · modal 34:8920, 16 Oct 2026.
   Box: title + Save tag, three ticks, ADD button like the membership box (opens the modal). Modal: the DS .mdl (centred --sm from 600px · phones --up)
   inside .sns-layer (shares the delivery modal layer rules) · product row (small details beside the image) · Deliver Every (.fsel) · Quantity (.qty--lg) beside Add to bag · legal. */
.sns{display:flex;align-items:center;gap:var(--gap-6,24px);padding:var(--gap-4,16px);border:1px solid var(--border-subtle);border-radius:var(--radius-default);background:var(--surface-raised);color:var(--text-primary);font-family:var(--font-family-base)}
.sns .t{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--gap-3,12px)}
.sns-hd{display:flex;align-items:center;gap:var(--gap-2,8px);flex-wrap:wrap}
.sns-hd b{font-size:16px;font-weight:var(--w-strong,600);line-height:20px}
.sns-tag{display:inline-flex;align-items:center;align-self:flex-start;height:22px;padding:0 var(--gap-2,8px);border-radius:var(--radius-default);background:var(--error-bg,#FFF2F2);color:var(--text-error,#D33F3F);font-size:12px;font-weight:var(--w-strong,600);line-height:1;white-space:nowrap}
.sns-ticks{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--gap-2,8px);font-size:14px;line-height:20px}
.sns-ticks li{display:flex;align-items:flex-start;gap:var(--gap-3,12px)}
.sns-ticks li::before{content:"";flex:none;width:16px;height:20px;background:url("icons/lib/icons-tick.svg") center/16px 16px no-repeat}
.sns-ticks b{font-weight:var(--w-strong,600)}.sns-ticks .sale{color:var(--price-sale)}
.sns .add{flex:none;height:32px;padding:0 var(--gap-4,16px);border:0;border-radius:var(--radius-default);background:var(--text-primary);color:var(--text-inverse,#FFF);font:var(--w-strong) 14px/1 var(--font-family-base);text-transform:uppercase;cursor:pointer}
.sns-mdl .modal-hd .mt{display:flex;align-items:center;gap:var(--gap-3,12px)}
.sns-mdl .mdl-bd{gap:var(--gap-6,24px)}
.sns-mdl .mdl-ft{gap:var(--gap-3,12px)}
/* product row (Debenhams live): 72px image on the left, the details small beside it — 14/20, brand semibold, line price */
.sns-prod{display:flex;gap:var(--gap-6,24px);align-items:center}
.sns-prod img{width:72px;height:96px;object-fit:contain;flex:none}
.sns-prod .i{display:flex;flex-direction:column;align-items:flex-start;gap:var(--gap-2,8px);min-width:0;font-size:14px;line-height:20px}
.sns-prod .i>b{font-weight:var(--w-strong,600)}
.sns-f{display:flex;flex-direction:column;align-items:stretch;gap:var(--gap-3,12px);font-size:16px}
.sns-f .fsel{width:100%}
/* Quantity + Add to bag on one row */
.sns-buy{display:flex;gap:var(--gap-4,16px);align-items:stretch}
.sns-buy .qty{flex:none}.sns-buy .bd{flex:1;min-width:0}
.qty--lg button{width:44px;height:50px}.qty--lg span{height:50px;min-width:32px;font-size:16px}.qty--lg button img{width:20px;height:20px}
.sns-legal{margin:0;font-size:12px;line-height:17px;color:var(--text-secondary)}.sns-legal a{color:inherit}


/* ───────────── Promoted from the Shopping agent prototype (projects/shopping-agent), 16 Oct 2026 ─────────────
   Static DS versions; the prototype's chat window still renders from salesAgentConfig.json. Every AI colour reads --ai-* (per fascia, above). */

/* AI search button — beside the search field (exposed search) or left of the X when search is active. 44px white circle on the puck shadow. */
.ai-circle{display:grid;place-items:center;width:44px;height:44px;flex:none;padding:0;border:0;border-radius:50%;background:var(--surface-raised,#FFF);box-shadow:var(--shadow-puck);cursor:pointer;transition:box-shadow .15s,transform .15s}
.ai-circle:hover{box-shadow:var(--shadow-pill)}.ai-circle:active{transform:scale(.96)}.ai-circle .ai-icon{width:22px;height:22px}

/* Search suggestions (search active, Search Figma gKuKG9M8kSM2BCL6dy0G30 · 1012:2295 re-ordered): Recent · Popular (one scrolling row each) ·
   Need some help? (agent prompts, stacked) · Recently viewed. No dividers; gap 4 (16px) per section, gap 3 (12px) heading → content. */
.srch-sugg{display:flex;flex-direction:column;font-family:var(--font-family-base);--ss-pad:16px}
.srch-sugg .ss-sec{display:flex;flex-direction:column;gap:12px;padding:16px 0}
.srch-sugg h4{margin:0;font-size:16px;font-weight:var(--w-strong,600);color:var(--text-primary)}
.srch-sugg .ss-row{display:flex;gap:10px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 calc(-1 * var(--ss-pad));padding:0 var(--ss-pad)}.srch-sugg .ss-row::-webkit-scrollbar{display:none}
.srch-sugg .ss-chip{flex:none;display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px;border:0;border-radius:var(--radius-pill);background:var(--surface-media,#F2F2F2);font:var(--w-regular,400) 14px/1.2 var(--font-family-base);color:var(--text-primary);white-space:nowrap;cursor:pointer}
.srch-sugg .ss-chip img,.srch-sugg .ss-chip svg{width:14px;height:14px;flex:none}
.srch-sugg .ss-prompts{display:flex;flex-direction:column;align-items:flex-start;gap:8px}

/* Agent chat (Ask Deb): start screen, bubbles, reply parts, input. PA Deck Figma OUmnWDam0w0czh9VZnaqx0 · 6:167. Text is Geologica; colours from --ai-*. */
.agent-chat{display:flex;flex-direction:column;gap:16px;font-family:var(--font-family-base);color:#222;font-size:14px;line-height:1.4}
.ac-start{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.ac-start h2{margin:0;display:flex;flex-direction:column;align-items:flex-start;gap:12px;font-size:22px;font-weight:300;line-height:1.3;color:#222}
.ac-start h2 b{font-weight:var(--w-strong,600);color:var(--ai-fg)}
.ac-start p{margin:0;font-size:15px;font-weight:300;line-height:1.5;color:var(--text-primary)}
.ac-starters{display:flex;flex-direction:column;gap:8px;width:100%;margin-top:8px}
.ac-starter{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;padding:12px 14px;border:1px solid transparent;border-radius:14px;background:#F8F8F8;font:400 14px/1.3 var(--font-family-base);color:#222;text-align:left;cursor:pointer}
.ac-starter:hover{background:#FFF;border-color:var(--ai-fg)}.ac-starter .ai-icon{width:16px;height:16px}
.ac-user{align-self:flex-end;max-width:80%;padding:12px 16px;border-radius:16px 4px 16px 16px;background:#EEE;color:#222}
.ac-bot{display:flex;flex-direction:column;gap:12px}
.ac-ctx{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ac-ctx .lbl{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:#6B6B6B}.ac-ctx .lbl .ai-icon{width:14px;height:14px}
.ac-ctx .c{display:inline-flex;align-items:center;height:27px;padding:0 10px;border-radius:var(--radius-pill);background:var(--ai-tint);color:var(--ai-ink);font-size:12px;white-space:nowrap}
.ac-car{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none}
.ac-tile{flex:none;width:120px;display:flex;flex-direction:column;gap:6px}.ac-tile .im{display:block;aspect-ratio:2/3;background:var(--surface-media)}
.ac-tile .n{font-size:12px;font-weight:500;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ac-cart{width:100%;height:32px;border:0;border-radius:var(--radius-default,4px);background:var(--surface-action);color:var(--text-on-action);font:var(--w-strong,600) 12px var(--font-family-base);letter-spacing:.02em;text-transform:uppercase;cursor:pointer}   /* the primary CTA, small */
.ac-pd{display:flex;gap:12px;padding:12px;border:1px solid var(--border-subtle,#E7E7E7);border-radius:16px}.ac-pd .im{width:96px;aspect-ratio:2/3;flex:none;background:var(--surface-media)}
.ac-pd .pd{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:6px}.ac-pd .pbd{font-size:12px;font-weight:600}.ac-pd .n{font-size:14px;font-weight:500}
.ac-pd .psz{display:flex;gap:6px;flex-wrap:wrap}.ac-pd .psz span{min-width:34px;height:30px;display:grid;place-items:center;border:1px solid var(--border-control,#B5B5B5);border-radius:4px;font-size:12px;font-weight:300}.ac-pd .psz span.on{border-color:#000;font-weight:600}
.ac-pd .ac-cart{margin-top:auto}
.ac-qr{display:flex;flex-wrap:wrap;gap:8px}.ac-qr .ai-pill{font-size:13px}
.ac-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}.ac-list li{display:flex;gap:8px}.ac-list li::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ai-fg);margin-top:7px;flex:none}
.ac-fit{padding:12px 14px;border-radius:12px;background:var(--ai-tint);display:flex;flex-direction:column;gap:8px}.ac-fit .bar{position:relative;height:4px;border-radius:99px;background:var(--border-subtle)}.ac-fit .bar i{position:absolute;top:-4px;width:12px;height:12px;border-radius:50%;background:var(--ai-fg);transform:translateX(-50%)}.ac-fit .lbl{display:flex;justify-content:space-between;font-size:11px;color:#555}
.ac-look{display:grid;grid-template-columns:1.2fr 1fr;gap:4px}.ac-look .im{background:var(--surface-media);min-height:120px}.ac-look .r{display:grid;grid-template-rows:1fr 1fr;gap:4px}
.ac-input{display:flex;align-items:center;gap:12px;height:60px;padding:4px 8px 4px 20px;border:2px solid transparent;border-radius:24px;background:linear-gradient(#FFF,#FFF) padding-box,var(--ai-gradient) border-box}
.ac-input .ph{flex:1;font-size:16px;font-weight:300;color:#777}
.ac-send{width:40px;height:40px;flex:none;display:grid;place-items:center;border:0;border-radius:50%;background:var(--action-disabled-bg,#E7E7E7);color:var(--action-disabled-fg,#B5B5B5)}   /* empty: the disabled primary */
.ac-send.on{background:var(--surface-action);color:var(--text-on-action)}   /* typing: the primary CTA */
.ac-disc{font-size:11px;color:#555}

/* AI modules: next best action (PLP, a grid row or under the filters) and content prompts (CMS: image + prompts, editable colour) */
.ai-nba{display:flex;flex-direction:column;gap:16px;padding:16px;border-radius:var(--radius-lg,8px);background:var(--surface-sunken,#F8F8F8);font-family:var(--font-family-base)}
.ai-nba .grp,.ai-cp .grp{display:flex;flex-direction:column;gap:4px}
.ai-nba h3{margin:0;font-size:18px;font-weight:var(--w-strong,600)}.ai-nba p{margin:0;font-size:14px;font-weight:300;line-height:1.4;color:var(--text-primary)}
.ai-nba .set,.ai-cp .set{display:flex;flex-wrap:wrap;gap:8px}
.ai-cp{display:grid;grid-template-columns:1fr;font-family:var(--font-family-base)}
@media(min-width:1024px){.ai-cp{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr)}}
.ai-cp .pan{display:flex;flex-direction:column;justify-content:center;gap:16px;padding:24px 16px;background:var(--ai-cp-bg,#F4F4F2);color:var(--ai-cp-fg,#000)}
@media(min-width:1024px){.ai-cp .pan{padding:40px}}
.ai-cp h3{margin:0;font-size:26px;font-weight:300;line-height:1.1;color:inherit}.ai-cp .sub{font-size:16px;font-weight:300;line-height:1.4;color:inherit}
.ai-cp .set{flex-direction:column;align-items:flex-start}
.ai-cp .im{display:block;min-height:220px;background:var(--surface-media)}

/* Membership banner on the PDP (Debenhams Unlimited, live 15 Oct): lockup + one line + ADD, between the buy buttons and Deliver+. Copy styled as the Deliver+ list items. */
.memb-banner{display:flex;align-items:center;gap:16px;padding:14px 20px;border-radius:var(--radius-default,4px);background:linear-gradient(100deg,#F2F2F2 0%,#C9C9C9 100%);font-family:var(--font-family-base)}
.memb-banner>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px}.memb-banner img{height:30px;width:auto;align-self:flex-start}
.memb-banner p{margin:0;font-size:12px;line-height:normal;font-weight:var(--w-regular,400);color:#000}
.memb-banner button{flex:none;height:32px;padding:0 16px;border:0;border-radius:var(--radius-default,4px);background:#000;color:#FFF;font:var(--w-strong,600) 14px var(--font-family-base);letter-spacing:.02em;cursor:pointer}

/* Wishlist button: a white circle on the puck shadow — 44px beside the PDP title (VTO Figma 15656:21955), 32px on product cards */
.wl-btn{display:grid;place-items:center;width:44px;height:44px;flex:none;padding:0;border:0;border-radius:50%;background:#FFF;box-shadow:var(--shadow-puck);cursor:pointer}.wl-btn img{width:20px;height:20px;object-fit:contain}
.wl-btn--sm{width:32px;height:32px}.wl-btn--sm img{width:16px;height:16px}
/* Tooltip (.tip) — a small inverse bubble pointing at a control, for "something new here" coach marks. Arrow on top by default (it sits under the
   control), --tip-x = arrow distance from the right edge; .tip--left puts the arrow at --tip-x from the left. Optional "New" tag and close. Shopping agent, 19 Oct. */
.tip{position:relative;display:inline-flex;align-items:flex-start;gap:8px;width:max-content;max-width:min(264px,calc(100vw - 32px));padding:10px 12px;border-radius:var(--radius-lg,8px);background:var(--surface-inverse,#000);color:var(--text-inverse,#FFF);font-family:var(--font-family-base);font-size:13px;line-height:1.35;font-weight:400;text-align:left;box-shadow:0 4px 16px rgba(0,0,0,.18)}
.tip::before{content:"";position:absolute;top:-5px;right:var(--tip-x,16px);width:12px;height:12px;background:inherit;border-radius:2px;transform:rotate(45deg)}
.tip--left::before{right:auto;left:var(--tip-x,16px)}
.tip b{font-weight:600}
.tip-new{flex:none;margin-top:1px;padding:1px 7px;border-radius:var(--radius-pill);background:var(--surface-action);color:var(--text-on-action);font-size:11px;font-weight:600;line-height:16px}
.tip-x{flex:none;display:grid;place-items:center;width:18px;height:18px;margin:0 -4px 0 2px;padding:0;border:0;background:none;color:inherit;cursor:pointer}.tip-x svg{width:12px;height:12px}
.tip--in{animation:tipIn .32s cubic-bezier(.2,.8,.2,1) both}
@keyframes tipIn{from{opacity:0;transform:translateY(-6px)}}
@media (prefers-reduced-motion:reduce){.tip--in{animation:none}}

/* Mobile sort + filters, live (debenhams.com 15 Oct): full-bleed Filters | Relevance bar, then NDD toggle left and Size / Colour pills right */
.mf-bar{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);font-family:var(--font-family-base)}
.mf-bar button{display:flex;align-items:center;justify-content:space-between;height:44px;padding:0 16px;background:none;border:0;font:300 16px var(--font-family-base);color:var(--text-primary)}
.mf-bar button+button{border-left:1px solid var(--border-subtle);padding-left:8px}
.mf-bar .fic{width:18px;height:18px;background:url("icons/lib/icons-filter.svg") center/contain no-repeat}.mf-bar .ch{width:16px;height:16px;background:url("icons/lib/icons-down.svg") center/contain no-repeat}
.mf-row{display:flex;justify-content:space-between;align-items:center;padding:16px 0;font-family:var(--font-family-base)}
.mf-ndd{display:flex;align-items:center;gap:8px;background:none;border:0;padding:0;font:300 14px var(--font-family-base);color:var(--text-primary);cursor:pointer}
.mf-ndd .tg{width:46px;height:24px;border-radius:12px;background:#888;position:relative;flex:none}.mf-ndd .tg::after{content:"";position:absolute;left:2px;top:2px;width:20px;height:20px;border-radius:50%;background:#FFF}
.mf-ndd.on .tg{background:var(--surface-action)}.mf-ndd.on .tg::after{left:24px}
.mf-pills{display:flex;flex-wrap:wrap;gap:8px}.mf-pills span{display:flex;align-items:center;padding:4px 16px;border:1px solid var(--border-subtle);border-radius:var(--radius-pill);font:300 14px/20px var(--font-family-base);cursor:pointer}
