/* ==========================================================================
   KumKlub 2 theme
   Ported from public/kumklub_2/{index,all-products}.html (Figma export).

   SCOPING RULES — important:
   • "Chrome" (announcement bar, header, nav, footer, trust bar, buttons) is
     GLOBAL: it renders on every page of the site, so it must style correctly
     next to the legacy index.css.
   • Page-level blocks (hero, sections, category + product grids, feature
     bands, listing, pagination) are scoped under `body.kk2`, because the
     legacy index.css already defines bare `.product` (4 rules) and `.category`
     (40 rules — that is the header dropdown). Scoping keeps the two apart and
     wins on specificity where they overlap.
   Only pages that opt in with <body class="kk2"> get the page-level styles.
   ========================================================================== */

:root {
    --kk-pink: #f54772;
    --kk-pink-dark: #d93760;
    --kk-page: #fef5ed;
    --kk-band: #fdefe4;
    --kk-hero: #eecfcf;
    --kk-trust: #feece4;
    --kk-swatch: #ffdce3;
    --kk-ink: #0a0a0a;
    --kk-muted: #424242;
    --kk-white: #ffffff;

    --kk-card-shadow: 0 4px 15.5px -3px rgba(0, 0, 0, .25);
    --kk-r-card: 33px;
    --kk-r-img: 23px;
    --kk-r-btn: 8px;
    --kk-r-pill: 80px;

    --kk-font-display: 'Abhaya Libre', Georgia, 'Times New Roman', serif;
    --kk-font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

    --kk-shell: 1330px;
    --kk-gutter: clamp(20px, 4vw, 55px);
}


/* ==========================================================================
   LEGACY COMPATIBILITY RESET
   --------------------------------------------------------------------------
   index.css opens with element-level rules that beat inheritance, so a themed
   component cannot simply expect to inherit from body:

     index.css:1     * { font-family: "Abel", sans-serif }   <- universal, so it
                     applies directly to every element and out-ranks anything
                     an ancestor merely passes down
     index.css:44    ul { list-style: none }
     index.css:99    p, span { font-size: var(--minTextSize); color: #121212bf }
     index.css:1405  form { display:flex; flex-wrap:wrap; gap:20px }

   These neutralisers are wrapped in :where(), which contributes ZERO
   specificity. That is deliberate and load-bearing:

     • vs index.css they tie on specificity and win on order (this file loads
       second), so the legacy rules are neutralised;
     • vs the theme's own component classes (.announce__msg, .trust__item p,
       .kk-footer__blurb …) they LOSE, so component type scales survive.

   Written as `body.kk2 p { … }` instead, they would be (0,1,1) and would beat
   every (0,1,0) component rule — which is exactly the bug this replaced: the
   announcement bar, eyebrow, trust and footer type all collapsed to 16px.
   ========================================================================== */

/* Chrome renders on EVERY page, including un-ported ones, so its reset cannot
   be scoped to .kk2. A class-qualified `*` (0,1,0) beats index.css `*`. */
.announce *,
.kk-header *,
.kk-footer *,
.trust * {
    font-family: inherit;
}

/* Page content — ported pages only, so un-ported pages keep their look. */
:where(body.kk2) *,
:where(body.kk2) *::before,
:where(body.kk2) *::after {
    font-family: inherit;
}

:where(body.kk2) :is(p, span) {
    font-size: inherit;
    color: inherit;
    line-height: inherit;
}

:where(body.kk2) form {
    display: block;
    flex-wrap: nowrap;
    gap: 0;
    justify-content: flex-start;
}

/* ==========================================================================
   PAGE-LEVEL STYLES — scoped to body.kk2 only
   ========================================================================== */
body.kk2 {
    background: var(--kk-page);
    color: var(--kk-ink);
    font-family: var(--kk-font-body);
    font-size: 16px;
    line-height: 1.5;
    overflow-x: hidden;
}

/* Same :where() reasoning as above — these are base defaults that every
   component rule must be able to override. `body.kk2 h3` would be (0,1,2) and
   would beat `.trust__item h3` (0,1,1), stripping its 700 weight. */
:where(body.kk2) img {
    display: block;
    max-width: 100%;
    height: auto;
}

:where(body.kk2) a {
    color: inherit;
    text-decoration: none;
}

/* critical.css:49 also sets `h1,h2,h3 { font-family:"Poppins"; letter-spacing:
   .2px }` at (0,0,1) — which out-ranks the (0,0,0) `*` rule above, so any
   heading without its own font-family (e.g. .kk-product__name) rendered in
   Poppins. This selector is also (0,0,1), so it ties and wins on load order,
   while still losing to every component rule. */
:where(body.kk2) :is(h1, h2, h3) {
    margin: 0;
    font-weight: 400;
    font-family: inherit;
    letter-spacing: normal;
}

body.kk2 :focus-visible {
    outline: 3px solid var(--kk-pink);
    outline-offset: 3px;
    border-radius: 4px;
}

/* ==========================================================================
   SHARED PRIMITIVES (global)
   ========================================================================== */
.shell {
    width: 100%;
    max-width: var(--kk-shell);
    margin-inline: auto;
    padding-inline: var(--kk-gutter);
}

.kk-visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    border: 0;
    cursor: pointer;
    font-family: var(--kk-font-body);
    background: var(--kk-pink);
    color: var(--kk-white);
    text-decoration: none;
    transition: background-color .18s ease;
}

.btn:hover {
    background: var(--kk-pink-dark);
    color: var(--kk-white);
}

.btn--pill {
    border-radius: var(--kk-r-pill);
    padding: 10px clamp(18px, 3vw, 30px);
    min-height: 44px;
    max-width: 100%;
    font-size: clamp(.9375rem, 2vw, 1.5625rem);
    font-weight: 600;
    text-transform: uppercase;
    line-height: 1.4;
    text-align: center;
}

.btn--hero {
    border-radius: var(--kk-r-btn);
    padding: 15px 32px;
    font-size: 1.125rem;
}

.btn--cart {
    width: 100%;
    border-radius: var(--kk-r-btn);
    padding: 10px clamp(8px, 1.5vw, 16px);
    min-height: 44px;
    font-size: clamp(.875rem, 1.35vw, 1.125rem);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .01em;
    /* The template's is a <button>, which does not inherit line-height; the
       category card uses an <a>, which does. Pin it so both render alike. */
    line-height: normal;
}

.btn--cart img {
    width: 22px;
    height: 22px;
    flex: none;
    display: block;
}

.btn:disabled,
.btn[disabled] {
    background: #c9c9c9;
    cursor: not-allowed;
}

.eyebrow {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--kk-pink);
    color: var(--kk-white);
    border-radius: var(--kk-r-pill);
    padding: 8px 30px;
    font-size: clamp(1rem, 1.8vw, 1.5rem);
    font-weight: 500;
    text-transform: uppercase;
    line-height: 1.4;
    margin: 0;
}

/* ==========================================================================
   ANNOUNCEMENT BAR (global)
   ========================================================================== */
.announce {
    background: var(--kk-pink);
    color: var(--kk-white);
    min-height: 55px;
    display: flex;
    align-items: center;
    position: relative;
    font-family: var(--kk-font-body);
}

.announce .shell {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}

.announce__msgs {
    display: flex;
    align-items: center;
    gap: clamp(24px, 8vw, 120px);
    flex: 1;
    justify-content: center;
}

.announce__msg {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 1.125rem;
    white-space: nowrap;
    margin: 0;
    color: var(--kk-white);
}

.announce__msg strong {
    font-weight: 600;
}

.announce__msg a {
    color: var(--kk-white);
    text-decoration: underline;
}

.announce__msg img {
    width: 40px;
    height: 23px;
    flex: none;
    display: block;
}

.announce__love {
    width: 48px;
    height: 24px;
    object-fit: contain;
    flex: none;
    display: block;
}

.announce__close {
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    background: transparent;
    border: 0;
    color: var(--kk-white);
    font-size: 22px;
    line-height: 1;
    cursor: pointer;
    padding: 6px 10px;
    opacity: .85;
}

.announce__close:hover {
    opacity: 1;
}

/* The repeat drops off before it runs out of room. The Figma breakpoints
   (1200 / 900) were measured against short placeholder copy; a real coupon
   line is ~440px, so it was still rendering at widths where it could not fit
   and got clipped mid-word by body's overflow-x:hidden. */
@media (max-width:1300px) {
    .announce__msg:nth-child(2) {
        display: none;
    }
}

@media (max-width:900px) {
    .announce__msg {
        font-size: 1rem;
    }
}

@media (max-width:600px) {
    .announce {
        min-height: 46px;
    }

    .announce .shell {
        padding-inline: 34px 34px;
        /* leave room for the dismiss button */
    }

    .announce__msg {
        font-size: .875rem;
        gap: 8px;
        /* A single coupon line still exceeds a 390px viewport on one line, so
           let it wrap here rather than be clipped. */
        white-space: normal;
        text-align: center;
        justify-content: center;
    }

    .announce__msg img {
        width: 28px;
        height: 16px;
    }

    .announce__love {
        display: none;
    }
}

@media (max-width:380px) {
    .announce__msg img {
        display: none;
    }

    .announce__msg {
        font-size: .8125rem;
    }
}

/* ==========================================================================
   HEADER (global)
   ========================================================================== */
.kk-header {
    background: var(--kk-page);
    font-family: var(--kk-font-body);
    position: relative;
    z-index: 60;
}

.kk-header .shell {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    min-height: 112px;
}

.kk-header__logo {
    display: block;
}

.kk-header__logo img {
    width: clamp(148px, 17vw, 201px);
    height: auto;
    display: block;
}

.kk-nav ul {
    display: flex;
    gap: clamp(14px, 2.6vw, 38px);
    margin: 0;
    padding: 0;
    list-style: none;
}

.kk-nav a {
    font-size: clamp(1rem, 1.45vw, 1.25rem);
    color: var(--kk-ink);
    text-decoration: none;
    padding-block: 4px;
    border-bottom: 2px solid transparent;
    transition: border-color .18s ease;
    display: inline-block;
}

.kk-nav a:hover,
.kk-nav a[aria-current="page"] {
    border-bottom-color: var(--kk-pink);
}

.kk-header__tools {
    display: flex;
    align-items: center;
    gap: clamp(6px, 2vw, 20px);
    position: relative;
}

/* The account control is nested one level deeper (.kk-header__tools >
   .kk-account > button), so it must be listed explicitly — a child-only
   selector left it with default UA button chrome (a grey box) while search
   and cart rendered as bare glyphs. */
.kk-header__tools>a,
.kk-header__tools>button,
.kk-header__tools .kk-account>button {
    display: grid;
    place-items: center;
    min-width: 44px;
    min-height: 44px;
    background: transparent;
    border: 0;
    cursor: pointer;
    padding: 0;
    position: relative;
    color: var(--kk-ink);
    -webkit-appearance: none;
    appearance: none;
    border-radius: 50%;
    transition: background-color .18s ease;
}

.kk-header__tools>a:hover,
.kk-header__tools>button:hover,
.kk-header__tools .kk-account>button:hover {
    background: rgba(245, 71, 114, .10);
}

.kk-header__tools img {
    width: 26px;
    height: 26px;
    display: block;
}

/* Cart bubble */
.kk-cart-count {
    position: absolute;
    top: 2px;
    right: 2px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: var(--kk-pink);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    line-height: 18px;
    text-align: center;
}

/* Account dropdown */
.kk-account {
    position: relative;
}

.kk-account__menu {
    position: absolute;
    right: 0;
    top: calc(100% + 8px);
    min-width: 190px;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 8px 26px rgba(0, 0, 0, .16);
    padding: 8px 0;
    margin: 0;
    list-style: none;
    display: none;
    z-index: 100;
}

.kk-account__menu.is-open {
    display: block;
}

.kk-account__menu a {
    display: block;
    padding: 10px 18px;
    color: var(--kk-ink);
    font-size: .95rem;
    text-decoration: none;
}

.kk-account__menu a:hover {
    background: var(--kk-band);
    color: var(--kk-pink);
}

.kk-nav-toggle {
    display: none;
    background: none;
    border: 0;
    padding: 10px;
    cursor: pointer;
    min-width: 44px;
    min-height: 44px;
}

.kk-nav-toggle span {
    display: block;
    width: 24px;
    height: 2px;
    background: var(--kk-ink);
    border-radius: 2px;
}

.kk-nav-toggle span+span {
    margin-top: 5px;
}

@media (max-width:1024px) {
    .kk-nav-toggle {
        display: block;
        order: 3;
    }

    .kk-nav {
        order: 4;
        flex-basis: 100%;
        display: none;
        padding-bottom: 20px;
    }

    .kk-nav[data-open="true"] {
        display: block;
    }

    .kk-nav ul {
        flex-direction: column;
        gap: 2px;
    }

    .kk-nav a {
        display: block;
        padding-block: 11px;
        border-bottom: 0;
    }

    .kk-nav a[aria-current="page"] {
        color: var(--kk-pink);
    }

    .kk-header .shell {
        flex-wrap: wrap;
        min-height: 0;
        padding-block: 18px;
    }
}

/* ==========================================================================
   SOCIAL RAIL (global — used on hero bands)
   ========================================================================== */
.rail {
    position: absolute;
    right: 53px;
    top: 50%;
    transform: translateY(-50%);
    background: var(--kk-pink);
    border-radius: 33.5px;
    width: 67px;
    padding: 37px 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 32px;
    z-index: 5;
}

.rail a {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    color: #fff;
}

.rail a:hover {
    background: rgba(255, 255, 255, .18);
}

.rail img {
    height: 24px;
    width: auto;
    display: block;
}

.rail .fa,
.rail .fab,
.rail .fa-brands,
.rail .fa-solid {
    font-size: 20px;
    color: #fff;
}

@media (max-width:1100px) {
    .rail {
        right: 16px;
        width: 54px;
        padding: 24px 0;
        gap: 22px;
    }

    .rail img {
        height: 20px;
    }
}

@media (max-width:820px) {
    .rail {
        display: none;
    }
}

/* ==========================================================================
   TRUST BAR (global)
   ========================================================================== */
.trust {
    background: var(--kk-trust);
    padding-block: clamp(40px, 6vw, 60px);
    font-family: var(--kk-font-body);
}

.trust__grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(24px, 4vw, 48px);
    text-align: center;
}

.trust__item img {
    width: 58px;
    height: 58px;
    margin: 0 auto 20px;
    object-fit: contain;
    display: block;
}

.trust__item h3 {
    font-family: var(--kk-font-display);
    font-weight: 700;
    font-size: clamp(1.25rem, 2.4vw, 2.1875rem);
    line-height: 1.1;
    margin: 0 0 8px;
    color: var(--kk-ink);
}

.trust__item p {
    margin: 0;
    color: var(--kk-muted);
    font-size: clamp(1rem, 1.6vw, 1.25rem);
    line-height: 1.4;
}

@media (max-width:900px) {
    .trust__grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width:400px) {
    .trust__grid {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* ==========================================================================
   FOOTER (global)
   ========================================================================== */
.kk-footer {
    background: var(--kk-page);
    padding-block: clamp(48px, 6vw, 72px) 0;
    font-family: var(--kk-font-body);
    color: var(--kk-ink);
}

.kk-footer__top {
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) repeat(3, minmax(0, 1fr));
    gap: clamp(28px, 4vw, 56px);
}

.kk-footer__logo {
    width: clamp(200px, 26vw, 322px);
    height: auto;
    margin-bottom: 24px;
    display: block;
}

.kk-footer__blurb {
    margin: 0;
    font-size: clamp(1rem, 1.7vw, 1.375rem);
    line-height: 1.28;
    max-width: 503px;
}

.kk-footer h3 {
    font-family: var(--kk-font-display);
    font-weight: 700;
    font-size: clamp(1.375rem, 2.4vw, 2.1875rem);
    margin: 0 0 16px;
    color: var(--kk-ink);
}

.kk-footer ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

.kk-footer li a {
    display: inline-block;
    color: var(--kk-muted);
    font-size: clamp(1rem, 1.6vw, 1.25rem);
    line-height: 1.44;
    padding-block: 10px;
    text-decoration: none;
    transition: color .18s ease;
}

.kk-footer li a:hover {
    color: var(--kk-pink);
}

.kk-footer__bottom {
    margin-top: clamp(36px, 5vw, 56px);
    border-top: 1px solid rgba(10, 10, 10, .15);
    padding-block: 24px 32px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    flex-wrap: wrap;
    text-align: left;
}

.kk-footer__bottom p {
    margin: 0;
    font-size: 1.125rem;
    line-height: 1.55;
}

.kk-footer__cards {
    width: 203px;
    height: auto;
    display: block;
}

.kk-footer__social {
    display: none;
    gap: 18px;
    margin-top: 26px;
}

.kk-footer__social a {
    display: grid;
    place-items: center;
    min-width: 44px;
    min-height: 44px;
    background: var(--kk-pink);
    border-radius: 50%;
    color: #fff;
}

.kk-footer__social img {
    height: 20px;
    width: auto;
    display: block;
}

.kk-footer__social svg {
    fill: #fff;
}

@media (max-width:900px) {
    .kk-footer__top {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .kk-footer__brand {
        grid-column: 1 / -1;
    }
}

@media (max-width:820px) {
    .kk-footer__social {
        display: flex;
    }
}

@media (max-width:560px) {
    .kk-footer__top {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width:520px) {
    .kk-footer__bottom {
        flex-direction: column;
        align-items: flex-start;
        gap: 16px;
    }
}

@media (max-width:360px) {
    .kk-footer__top {
        grid-template-columns: minmax(0, 1fr);
    }
}


/* --- Hero ---------------------------------------------------------------- */
.kk2 .hero {
    position: relative;
    background: var(--kk-hero);
    min-height: clamp(360px, 62vh, 587px);
    display: flex;
    align-items: center;
    overflow: hidden;
}

.kk2 .hero__bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
}

.kk2 .hero .shell {
    position: relative;
    z-index: 2;
}

.kk2 .hero__copy {
    max-width: 496px;
    padding-block: clamp(44px, 7vw, 64px);
}

.kk2 .hero h1 {
    font-family: var(--kk-font-display);
    font-size: clamp(2.5rem, 6vw, 4.0625rem);
    line-height: 1.05;
    margin-bottom: 20px;
}

.kk2 .hero p {
    font-family: var(--kk-font-display);
    font-size: clamp(1.125rem, 2.2vw, 1.5625rem);
    line-height: 1.4;
    margin: 0 0 32px;
    max-width: 60ch;
}

.kk2 .hero__dots {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: clamp(18px, 4vw, 44px);
    width: 100px;
    height: 16px;
    z-index: 3;
}

/* Slider dots (real, clickable) */
.kk2 .hero__nav {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: clamp(18px, 4vw, 44px);
    display: flex;
    gap: 10px;
    z-index: 4;
}

.kk2 .hero__nav button {
    width: 12px;
    height: 12px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, .6);
    cursor: pointer;
}

.kk2 .hero__nav button[aria-current="true"] {
    background: var(--kk-pink);
    width: 30px;
    border-radius: 6px;
}

/* Slides stack in the same box so switching does not reflow the page.
   Each is a link wrapping full-bleed artwork. */
/* The slides sit in a flex track that is translated one viewport-width at a
   time. Previously each slide was toggled with `display`, which swapped the
   artwork in a single frame — the "flash" the carousel was reported for.

   --kk-hero-slide is read by the slider script so the JS timing and the CSS
   duration cannot drift apart. */
.kk2 .hero__track {
    --kk-hero-slide: 600ms;
    position: absolute;
    inset: 0;
    z-index: 1;
    display: flex;
    flex-wrap: nowrap;
    will-change: transform;
    transition: transform var(--kk-hero-slide) cubic-bezier(.45, 0, .15, 1);
}

/* Set by the script while it snaps from a clone back to the real slide, so
   that reset is not animated. */
.kk2 .hero__track.is-snapping {
    transition: none;
}

.kk2 .hero__slide {
    flex: 0 0 100%;
    width: 100%;
    height: 100%;
    position: relative;
    display: block;
}

.kk2 .hero__slide picture {
    display: block;
    width: 100%;
    height: 100%;
}

/* The banner detail page shows one fixed image rather than the rotating hero.
   It inherits .hero's height so it matches the home and listing heroes — the
   old clamp(220px, 42vw, 587px) resolved to the full 587px on desktop, which
   made those bands visibly taller than the home one. */
.kk2 .hero--bare {
    min-height: clamp(360px, 62vh, 587px);
}

@media (max-height:520px) and (orientation:landscape) {
    .kk2 .hero {
        min-height: auto;
    }

    .kk2 .hero__copy {
        padding-block: 36px;
    }

    .kk2 .hero__dots,
    .kk2 .hero__nav {
        display: none;
    }

    .kk2 .hero--bare {
        min-height: 200px;
    }
}

/* --- Section headings ---------------------------------------------------- */
.kk2 .band {
    background: var(--kk-band);
}

.kk2 .section {
    padding-block: clamp(48px, 7vw, 88px);
}

.kk2 .section__head {
    text-align: center;
    margin-bottom: clamp(32px, 5vw, 64px);
}

.kk2 .section__head h2 {
    font-family: var(--kk-font-display);
    font-size: clamp(2.25rem, 5.5vw, 4rem);
    line-height: 1.1;
    margin: .35em 0 .15em;
}

.kk2 .section__head p {
    margin: 0;
    font-size: clamp(1.0625rem, 2vw, 1.375rem);
    color: var(--kk-ink);
}

.kk2 .section__foot {
    text-align: center;
    margin-top: clamp(32px, 5vw, 56px);
}

/* --- Category grid ------------------------------------------------------- */
.kk2 .kk-cats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(20px, 3vw, 43px);
}

/* Card shell, so the tile can fill on hover the same way a product does.
   opacity/visibility are defensive overrides against legacy index.css, which
   defines a bare `.category` (the old header dropdown) that previously
   collapsed these tiles to zero height via max-height:0. */
.kk2 .kk-cat {
    position: relative;
    text-align: center;
    background: var(--kk-white);
    border: 0;
    padding: clamp(14px, 2.2vw, 27px);
    margin: 0;
    border-radius: var(--kk-r-card);
    box-shadow: var(--kk-card-shadow);
    display: flex;
    flex-direction: column;
    width: auto;
    max-height: none;
    overflow: visible;
    opacity: 1;
    visibility: visible;
    transition: background-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

.kk2 .kk-cat__link {
    display: flex;
    flex-direction: column;
    flex: 1;
    color: inherit;
    text-decoration: none;
}

.kk2 .kk-cat__count {
    margin: 0 0 16px;
    font-size: .9375rem;
    line-height: 1.4;
    color: var(--kk-muted);
    transition: color .2s ease;
}

/* The Figma tile was portrait (267/297), but the real category artwork is
   landscape with the category name baked into the image — 800x600 for most,
   1300x400 for one. A portrait cover-crop sliced that text off. 4/3 matches
   the common case exactly, and `contain` guarantees the wider one is never
   cropped either, just letterboxed onto the swatch. */
.kk2 .kk-cat__media {
    position: relative;
    aspect-ratio: 4/3;
    border-radius: var(--kk-r-img);
    overflow: hidden;
    background: var(--kk-swatch);
}

.kk2 .kk-cat__media img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.kk2 .kk-cat__badge {
    position: absolute;
    left: 50%;
    top: 100%;
    transform: translate(-50%, -50%);
    width: 48px;
    height: 48px;
    display: grid;
    place-items: center;
    z-index: 2;
}

.kk2 .kk-cat__badge img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
}

.kk2 .kk-cat__badge span {
    position: relative;
    font-size: 1.25rem;
    line-height: 1;
    color: #fff;
}

/* margin-top clears the badge, which straddles the bottom edge of the media */
.kk2 .kk-cat h3 {
    font-family: var(--kk-font-display);
    /* matches the template's .category h3 exactly */
    font-size: clamp(1.375rem, 2.6vw, 2rem);
    line-height: 1.06;
    margin: 18px 0 8px;
    text-wrap: balance;
    color: var(--kk-ink);
    transition: color .2s ease;
}

.kk2 .kk-cat h3 a {
    display: block;
    padding-block: 4px;
}

@media (max-width:1024px) {
    .kk2 .kk-cats {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width:359px) {
    .kk2 .kk-cats {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* --- Product grid -------------------------------------------------------- */
.kk2 .kk-products {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(20px, 3vw, 43px);
}

.kk2 .kk-product {
    position: relative;
    background: var(--kk-white);
    border-radius: var(--kk-r-card);
    box-shadow: var(--kk-card-shadow);
    padding: clamp(14px, 2.2vw, 27px);
    display: flex;
    flex-direction: column;
    text-align: center;
    width: auto;
    margin: 0;
    border: 0;
    /* Card had no transition at all, so any state change would snap. */
    transition: background-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

.kk2 .kk-product__link {
    display: flex;
    flex-direction: column;
    flex: 1;
    color: inherit;
    text-decoration: none;
}

.kk2 .kk-product__media {
    aspect-ratio: 248/231;
    background: var(--kk-swatch);
    border-radius: 12px;
    overflow: hidden;
    margin-bottom: 16px;
}

.kk2 .kk-product__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.kk2 .kk-product__name {
    font-size: clamp(.9375rem, 1.6vw, 1.25rem);
    line-height: 1.3;
    color: #000;
    margin: 0 0 12px;
    flex: 1;
    overflow-wrap: anywhere;
    text-wrap: balance;
}

.kk2 .kk-product__price {
    color: var(--kk-pink);
    font-size: 1.25rem;
    line-height: 1.4;
    margin: 0 0 20px;
}

.kk2 .kk-product__price s {
    color: #9b9b9b;
    margin-right: 8px;
    font-size: .9em;
}

.kk2 .kk-product__peek {
    position: absolute;
    left: 11px;
    top: 12px;
    width: 30px;
    height: 30px;
    z-index: 2;
}

.kk2 .kk-product__stock {
    font-size: .8125rem;
    margin: 0 0 10px;
    color: #2e7d32;
}

.kk2 .kk-product__stock.is-out {
    color: #c62828;
}

@media (max-width:1200px) {
    .kk2 .kk-products {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width:760px) {
    .kk2 .kk-products {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width:359px) {
    .kk2 .kk-products {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* --- Feature / story blocks --------------------------------------------- */
.kk2 .feature {
    padding-block: clamp(40px, 6vw, 72px);
}

.kk2 .feature__inner {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: clamp(28px, 6vw, 96px);
    align-items: center;
}

.kk2 .feature__media {
    aspect-ratio: 526/439;
    border-radius: 12px;
    overflow: hidden;
    background: var(--kk-swatch);
}

.kk2 .feature__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.kk2 .feature__title {
    font-family: var(--kk-font-display);
    font-size: clamp(1.875rem, 4vw, 4rem);
    line-height: 1.1;
    margin-bottom: 20px;
}

.kk2 .feature__title--sm {
    font-size: clamp(1.5rem, 2.6vw, 1.875rem);
}

.kk2 .feature__body {
    font-size: 1.125rem;
    line-height: 1.35;
    margin: 0 0 28px;
    max-width: 66ch;
}

.kk2 .feature--reverse .feature__media {
    order: 2;
}

@media (max-width:900px) {
    .kk2 .feature__inner {
        grid-template-columns: minmax(0, 1fr);
    }

    .kk2 .feature--reverse .feature__media {
        order: 0;
    }
}

/* --- Listing page -------------------------------------------------------- */
.kk2 .listing {
    padding-block: clamp(40px, 6vw, 72px);
}

.kk2 .listing__head {
    text-align: center;
    margin-bottom: clamp(28px, 4vw, 50px);
}

.kk2 .listing__count {
    margin: 14px 0 0;
    color: var(--kk-muted);
    font-size: 1rem;
}

/* Load-more control, restyled to the theme's pink pill */
.kk2 .load-more-wrap {
    margin-top: clamp(36px, 5vw, 64px);
}

.kk2 .load-more-btn {
    background: var(--kk-pink);
    border: 0;
    color: #fff;
    border-radius: var(--kk-r-pill);
    padding: 12px clamp(24px, 4vw, 44px);
    font-family: var(--kk-font-body);
    font-size: clamp(1rem, 2vw, 1.25rem);
    font-weight: 600;
    text-transform: uppercase;
}

.kk2 .load-more-btn:hover:not(:disabled) {
    background: var(--kk-pink-dark);
    color: #fff;
}

.kk2 .load-more-status {
    color: var(--kk-muted);
}

/* --- Very small handsets ------------------------------------------------- */
@media (max-width:360px) {
    body.kk2 {
        --kk-gutter: 16px;
    }

    .kk2 .kk-product {
        padding: 12px;
    }
}

@media (prefers-reduced-motion:reduce) {

    .kk2 *,
    .announce *,
    .kk-header *,
    .kk-footer * {
        transition-duration: .01ms !important;
        animation-duration: .01ms !important;
    }
}

/* --- Promo strip (middle banners) --------------------------------------
   Wide artwork with copy baked in — shown full width and uncropped so the
   embedded text stays readable. */
.kk2 .promo .shell {
    display: grid;
    gap: clamp(16px, 3vw, 32px);
}

.kk2 .promo__item {
    display: block;
    border-radius: 16px;
    overflow: hidden;
    line-height: 0;
}

.kk2 .promo__item img {
    width: 100%;
    height: auto;
    object-fit: contain;
}

/* The listing hero is an image band in the design. With no "top" banner set in
   the CMS there is nothing to show, so it collapses to a slim colour band
   instead of ~587px of empty space. Configure a top banner and it opens up. */
.kk2 .hero--empty {
    min-height: clamp(120px, 16vw, 200px);
}

/* ==========================================================================
   CARD INTERACTION STATES  (product + category)
   --------------------------------------------------------------------------
   The card inverts: white -> pink, dark text -> white, pink button -> black,
   and lifts. Gated behind `hover: hover` + `pointer: fine` so a tap on a
   touch device cannot leave a card stuck in the hovered state — touch gets
   the :active press below instead. Nothing is hidden in the default state,
   so this is decoration, never the only route to an action.
   ========================================================================== */

@media (hover: hover) and (pointer: fine) {

    .kk2 .kk-product:hover,
    .kk2 .kk-cat:hover {
        background: var(--kk-pink);
        box-shadow: 0 14px 28px -8px rgba(245, 71, 114, .45);
        transform: translateY(-4px);
    }

    /* Text flips to white */
    .kk2 .kk-product:hover .kk-product__name,
    .kk2 .kk-product:hover .kk-product__price,
    .kk2 .kk-product:hover .kk-product__stock,
    .kk2 .kk-cat:hover h3,
    .kk2 .kk-cat:hover h3 a,
    .kk2 .kk-cat:hover .kk-cat__count {
        color: var(--kk-white);
    }

    /* Struck-through list price needs to stay legible on pink */
    .kk2 .kk-product:hover .kk-product__price s {
        color: rgba(255, 255, 255, .7);
    }

    /* Out-of-stock keeps its warning read on the pink fill */
    .kk2 .kk-product:hover .kk-product__stock.is-out {
        color: #ffd9d9;
    }

    /* Button inverts to black */
    .kk2 .kk-product:hover .btn--cart:not(:disabled),
    .kk2 .kk-cat:hover .btn {
        background: var(--kk-ink);
        color: var(--kk-white);
    }

    .kk2 .kk-product:hover .btn--cart:disabled {
        background: rgba(0, 0, 0, .25);
        color: rgba(255, 255, 255, .75);
    }

    /* The media panel reads better slightly lifted off the pink */
    .kk2 .kk-product:hover .kk-product__media,
    .kk2 .kk-cat:hover .kk-cat__media {
        background: var(--kk-white);
    }
}

/* Touch: a short press-in, which works on every device and cannot stick. */
.kk2 .kk-product:active,
.kk2 .kk-cat:active {
    transform: translateY(-1px) scale(.995);
}

/* Keyboard parity — focusing a link inside the card lifts it the same way. */
.kk2 .kk-product:focus-within,
.kk2 .kk-cat:focus-within {
    box-shadow: 0 14px 28px -8px rgba(245, 71, 114, .45);
    transform: translateY(-4px);
}

@media (prefers-reduced-motion: reduce) {

    .kk2 .kk-product,
    .kk2 .kk-cat,
    .kk2 .kk-product:hover,
    .kk2 .kk-cat:hover,
    .kk2 .kk-product:active,
    .kk2 .kk-cat:active,
    .kk2 .kk-product:focus-within,
    .kk2 .kk-cat:focus-within {
        transform: none;
    }
}

/* ==========================================================================
   SHARED PAGE COMPONENTS
   --------------------------------------------------------------------------
   Building blocks for the inner pages (policies, auth, cart, checkout,
   account, errors). Everything is kk- prefixed AND scoped under body.kk2 —
   the same guard that keeps the grids clear of legacy index.css, which owns
   bare .product and .category.

   Note index.css applies a global `* { margin:0; padding:0 }`, so anything
   needing list indent or default spacing has to restore it explicitly.
   ========================================================================== */

/* --- Page header --------------------------------------------------------- */
.kk2 .kk-page-head {
    text-align: center;
    padding-block: clamp(28px, 5vw, 56px) clamp(20px, 3vw, 32px);
}

.kk2 .kk-page-head h1 {
    font-family: var(--kk-font-display);
    font-size: clamp(2rem, 5vw, 3.25rem);
    line-height: 1.1;
    margin: .3em 0 .2em;
    color: var(--kk-ink);
}

.kk2 .kk-page-head p {
    margin: 0 auto;
    max-width: 68ch;
    color: var(--kk-muted);
    font-size: clamp(1rem, 1.7vw, 1.125rem);
}

/* --- Panel (white rounded surface) --------------------------------------- */
.kk2 .kk-panel {
    background: var(--kk-white);
    border-radius: var(--kk-r-card);
    box-shadow: var(--kk-card-shadow);
    padding: clamp(20px, 3.2vw, 40px);
}

.kk2 .kk-panel--flat {
    box-shadow: none;
    border: 1px solid rgba(10, 10, 10, .10);
}

.kk2 .kk-panel__title {
    font-family: var(--kk-font-display);
    font-size: clamp(1.25rem, 2.4vw, 1.75rem);
    line-height: 1.2;
    margin: 0 0 18px;
    color: var(--kk-ink);
}

/* --- Prose (policy / about copy) ----------------------------------------- */
.kk2 .kk-prose {
    max-width: 78ch;
    margin-inline: auto;
    color: var(--kk-ink);
    font-size: clamp(1rem, 1.6vw, 1.0625rem);
    line-height: 1.7;
}

.kk2 .kk-prose h2 {
    font-family: var(--kk-font-display);
    font-size: clamp(1.5rem, 3vw, 2.125rem);
    line-height: 1.2;
    margin: 1.6em 0 .5em;
}

.kk2 .kk-prose h3 {
    font-family: var(--kk-font-display);
    font-size: clamp(1.2rem, 2.2vw, 1.5rem);
    line-height: 1.25;
    margin: 1.4em 0 .4em;
}

.kk2 .kk-prose p {
    margin: 0 0 1.1em;
}

.kk2 .kk-prose ul,
.kk2 .kk-prose ol {
    margin: 0 0 1.2em;
    padding-left: 1.4em;
    list-style: disc;
}

.kk2 .kk-prose ol {
    list-style: decimal;
}

.kk2 .kk-prose li {
    margin-bottom: .5em;
}

.kk2 .kk-prose a {
    color: var(--kk-pink);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.kk2 .kk-prose strong {
    font-weight: 600;
}

/* --- Forms --------------------------------------------------------------- */
.kk2 .kk-form__row {
    margin-bottom: 18px;
}

.kk2 .kk-form__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0 18px;
}

@media (max-width: 640px) {
    .kk2 .kk-form__grid {
        grid-template-columns: minmax(0, 1fr);
    }
}

.kk2 .kk-form label,
.kk2 .kk-label {
    display: block;
    margin-bottom: 6px;
    font-size: .9375rem;
    font-weight: 500;
    color: var(--kk-ink);
}

.kk2 .kk-input,
.kk2 .kk-form input[type="text"],
.kk2 .kk-form input[type="email"],
.kk2 .kk-form input[type="password"],
.kk2 .kk-form input[type="tel"],
.kk2 .kk-form input[type="number"],
.kk2 .kk-form input[type="search"],
.kk2 .kk-form input[type="month"],
.kk2 .kk-form input[type="date"],
.kk2 .kk-form select,
.kk2 .kk-form textarea {
    width: 100%;
    background: var(--kk-white);
    border: 1px solid rgba(10, 10, 10, .18);
    border-radius: var(--kk-r-btn);
    padding: 12px 14px;
    min-height: 46px;
    font-family: var(--kk-font-body);
    font-size: 1rem;
    color: var(--kk-ink);
    transition: border-color .18s ease, box-shadow .18s ease;
}

.kk2 .kk-input:focus,
.kk2 .kk-form input:focus,
.kk2 .kk-form select:focus,
.kk2 .kk-form textarea:focus {
    outline: none;
    border-color: var(--kk-pink);
    box-shadow: 0 0 0 3px rgba(245, 71, 114, .16);
}

.kk2 .kk-form textarea {
    min-height: 140px;
    resize: vertical;
}

.kk2 .kk-form__error,
.kk2 .kk-error {
    display: block;
    margin-top: 6px;
    color: #c62828;
    font-size: .875rem;
}

.kk2 .kk-form__help {
    display: block;
    margin-top: 6px;
    color: var(--kk-muted);
    font-size: .875rem;
}

.kk2 .kk-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin-bottom: 12px;
    font-size: .9375rem;
    line-height: 1.5;
}

.kk2 .kk-check input {
    margin-top: 3px;
    width: 18px;
    height: 18px;
    flex: none;
    accent-color: var(--kk-pink);
}

/* --- Alerts -------------------------------------------------------------- */
.kk2 .kk-alert {
    border-radius: var(--kk-r-btn);
    padding: 14px 18px;
    margin-bottom: 20px;
    font-size: .9375rem;
    line-height: 1.5;
    border: 1px solid transparent;
}

.kk2 .kk-alert--success {
    background: #e8f5e9;
    border-color: #b6dfb9;
    color: #1e5c22;
}

.kk2 .kk-alert--error {
    background: #fdecea;
    border-color: #f6c3bd;
    color: #a32117;
}

.kk2 .kk-alert--info {
    background: var(--kk-band);
    border-color: rgba(245, 71, 114, .28);
    color: var(--kk-ink);
}

/* --- Tables -------------------------------------------------------------- */
.kk2 .kk-table-wrap {
    overflow-x: auto;
}

.kk2 .kk-table {
    width: 100%;
    border-collapse: collapse;
    font-size: .9375rem;
}

.kk2 .kk-table th {
    text-align: left;
    padding: 12px 10px;
    border-bottom: 2px solid rgba(10, 10, 10, .12);
    font-weight: 600;
    color: var(--kk-ink);
    white-space: nowrap;
}

.kk2 .kk-table td {
    padding: 14px 10px;
    border-bottom: 1px solid rgba(10, 10, 10, .08);
    color: var(--kk-muted);
    vertical-align: middle;
}

.kk2 .kk-table tfoot td,
.kk2 .kk-table .kk-table__total td {
    font-weight: 600;
    color: var(--kk-ink);
}

/* --- Breadcrumb ---------------------------------------------------------- */
.kk2 .kk-breadcrumb {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin: 0;
    padding: 18px 0;
    list-style: none;
    font-size: .9375rem;
    color: var(--kk-muted);
}

.kk2 .kk-breadcrumb li {
    display: flex;
    align-items: center;
    gap: 8px;
}

.kk2 .kk-breadcrumb li+li::before {
    content: "/";
    color: rgba(10, 10, 10, .3);
}

.kk2 .kk-breadcrumb a:hover {
    color: var(--kk-pink);
}

.kk2 .kk-breadcrumb [aria-current="page"] {
    color: var(--kk-ink);
    font-weight: 500;
}

/* --- Tabs ---------------------------------------------------------------- */
.kk2 .kk-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 24px;
    border-bottom: 1px solid rgba(10, 10, 10, .12);
}

.kk2 .kk-tabs button {
    appearance: none;
    background: transparent;
    border: 0;
    border-bottom: 3px solid transparent;
    padding: 12px 18px;
    min-height: 44px;
    font-family: var(--kk-font-body);
    font-size: 1rem;
    font-weight: 500;
    color: var(--kk-muted);
    cursor: pointer;
    transition: color .18s ease, border-color .18s ease;
}

.kk2 .kk-tabs button:hover {
    color: var(--kk-ink);
}

.kk2 .kk-tabs button.is-active {
    color: var(--kk-pink);
    border-bottom-color: var(--kk-pink);
}

/* --- Quantity stepper ---------------------------------------------------- */
.kk2 .kk-qty {
    display: inline-flex;
    align-items: center;
    border: 1px solid rgba(10, 10, 10, .18);
    border-radius: var(--kk-r-pill);
    overflow: hidden;
    background: var(--kk-white);
    /* overflow:hidden above would otherwise clip a control rather than let the
       stepper keep its intrinsic size. */
    flex: 0 0 auto;
    min-width: max-content;
}

.kk2 .kk-qty button {
    appearance: none;
    background: transparent;
    border: 0;
    width: 40px;
    height: 40px;
    display: grid;
    place-items: center;
    cursor: pointer;
    font-size: 18px;
    line-height: 1;
    color: var(--kk-ink);
}

.kk2 .kk-qty button:hover {
    background: var(--kk-band);
}

.kk2 .kk-qty input {
    width: 44px;
    height: 40px;
    border: 0;
    text-align: center;
    font-family: var(--kk-font-body);
    font-size: 1rem;
    background: transparent;
    color: var(--kk-ink);
    -moz-appearance: textfield;
}

.kk2 .kk-qty input::-webkit-outer-spin-button,
.kk2 .kk-qty input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

/* --- Empty state --------------------------------------------------------- */
.kk2 .kk-empty {
    text-align: center;
    padding: clamp(40px, 8vw, 90px) 20px;
}

.kk2 .kk-empty img,
.kk2 .kk-empty svg {
    width: clamp(90px, 16vw, 150px);
    height: auto;
    margin: 0 auto 24px;
    display: block;
    opacity: .85;
}

.kk2 .kk-empty h2 {
    font-family: var(--kk-font-display);
    font-size: clamp(1.5rem, 3.4vw, 2.25rem);
    margin: 0 0 10px;
}

.kk2 .kk-empty p {
    margin: 0 0 26px;
    color: var(--kk-muted);
}

/* --- Two-column page split (cart / checkout) ----------------------------- */
.kk2 .kk-split {
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
    gap: clamp(24px, 4vw, 48px);
    align-items: start;
}

@media (max-width: 900px) {
    .kk2 .kk-split {
        grid-template-columns: minmax(0, 1fr);
    }
}

.kk2 .kk-sticky {
    position: sticky;
    top: 24px;
}

@media (max-width: 900px) {
    .kk2 .kk-sticky {
        position: static;
    }
}


/* ==========================================================================
   AUTH / ACCOUNT COMPONENTS
   --------------------------------------------------------------------------
   The auth pages were the only screens still using legacy `.contact` +
   `.form-container`, which forced a 100vh dark band. They now render as a
   narrow centred panel on the theme's page colour.
   ========================================================================== */

/* --- Narrow centred column for a single form ----------------------------- */
.kk2 .kk-auth {
    max-width: 520px;
    margin-inline: auto;
}

.kk2 .kk-auth .kk-page-head {
    padding-block: clamp(24px, 4vw, 44px) clamp(14px, 2vw, 22px);
}

/* --- Button variants used by forms --------------------------------------- */
.btn--solid {
    border-radius: var(--kk-r-btn);
    padding: 12px 28px;
    min-height: 48px;
    font-size: 1rem;
    font-weight: 600;
    letter-spacing: .01em;
    line-height: normal;
}

.btn--ghost {
    background: transparent;
    color: var(--kk-ink);
    border: 1px solid rgba(10, 10, 10, .22);
}

.btn--ghost:hover {
    background: rgba(10, 10, 10, .05);
    color: var(--kk-ink);
}

.btn--block {
    width: 100%;
}

/* --- Password field with a reveal toggle --------------------------------- */
/* The eye icon is absolutely positioned inside the field, so the input needs
   right padding equal to the hit area or long values slide under it. */
.kk2 .kk-pass {
    position: relative;
}

.kk2 .kk-pass input {
    padding-right: 46px;
}

.kk2 .kk-pass__toggle {
    position: absolute;
    top: 0;
    right: 0;
    width: 44px;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
    color: var(--kk-muted);
    font-size: 1rem;
}

.kk2 .kk-pass__toggle:hover {
    color: var(--kk-ink);
}

/* --- Inline link row under a form ---------------------------------------- */
.kk2 .kk-form__links {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 20px;
    justify-content: space-between;
    align-items: center;
    margin: 4px 0 20px;
    font-size: .9375rem;
}

.kk2 .kk-form__links a {
    color: var(--kk-pink);
    text-decoration: underline;
    text-underline-offset: 3px;
}

.kk2 .kk-form__links a:hover {
    color: var(--kk-pink-dark);
}

/* --- Horizontal button group --------------------------------------------- */
.kk2 .kk-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: center;
    margin-top: 22px;
}

.kk2 .kk-actions--end {
    justify-content: flex-end;
}

/* A form nested in an action row must not add its own block spacing. */
.kk2 .kk-actions form {
    display: contents;
}

/* --- Centred note under a panel ------------------------------------------ */
.kk2 .kk-note {
    text-align: center;
    margin: 18px 0 0;
    font-size: .9375rem;
    color: var(--kk-muted);
}

.kk2 .kk-note a {
    color: var(--kk-pink);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* --- reCAPTCHA ------------------------------------------------------------ */
/* The widget is a fixed 304px iframe; below ~360px it must scale or it forces
   a horizontal scrollbar on the whole page. */
.kk2 .g-recaptcha {
    margin: 4px 0 18px;
}

@media (max-width: 360px) {
    .kk2 .g-recaptcha {
        transform: scale(.87);
        transform-origin: 0 0;
    }
}

/* --- One-time-code input -------------------------------------------------- */
.kk2 .kk-otp {
    text-align: center;
    letter-spacing: .4em;
    /* The tracking is applied to the right of the last glyph too, so without
       this the six digits sit visibly left of centre. */
    text-indent: .4em;
    font-size: 1.5rem;
    font-weight: 700;
    font-family: var(--kk-font-body);
}

.kk2 .kk-resend {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: baseline;
    justify-content: center;
    margin: 18px 0 6px;
    font-size: .9375rem;
    color: var(--kk-muted);
}

.kk2 .kk-resend button {
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
    color: var(--kk-pink);
    font: inherit;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.kk2 .kk-resend button:disabled {
    color: var(--kk-muted);
    cursor: default;
    text-decoration: none;
}

.kk2 .kk-countdown {
    text-align: center;
    margin: 0 0 16px;
    min-height: 1.2em;
    font-size: .875rem;
    color: var(--kk-muted);
}

/* --- Error pages ---------------------------------------------------------- */
/* 404 / 403 / 500 / layout previously carried ~140 duplicated CSS lines each.
   They now share errors/shell.blade.php and these rules. */
.kk2 .kk-error {
    max-width: 640px;
    margin-inline: auto;
    text-align: center;
    padding-block: clamp(32px, 6vw, 72px);
}

.kk2 .kk-error__icon {
    font-size: clamp(3rem, 8vw, 5rem);
    line-height: 1;
    color: var(--kk-pink);
    margin-bottom: 18px;
}

.kk2 .kk-error__code {
    font-family: var(--kk-font-display);
    font-size: clamp(3.5rem, 12vw, 6rem);
    line-height: 1;
    font-weight: 700;
    color: var(--kk-ink);
    margin: 0;
}

.kk2 .kk-error h1 {
    font-family: var(--kk-font-display);
    font-size: clamp(1.5rem, 4vw, 2.5rem);
    line-height: 1.2;
    margin: .2em 0 .4em;
    color: var(--kk-ink);
}

.kk2 .kk-error__msg {
    margin: 0 auto 8px;
    max-width: 52ch;
    color: var(--kk-muted);
    font-size: clamp(1rem, 1.7vw, 1.125rem);
    line-height: 1.6;
}

.kk2 .kk-error .kk-actions {
    justify-content: center;
}

/* Inline search, used by 404 */
.kk2 .kk-error__search {
    display: flex;
    gap: 10px;
    max-width: 420px;
    margin: 24px auto 0;
}

.kk2 .kk-error__search input {
    flex: 1 1 auto;
    min-width: 0;
}

.kk2 .kk-error__search button {
    flex: 0 0 auto;
    padding-inline: 20px;
}

/* Tip list, used by 500 */
.kk2 .kk-error__tips {
    text-align: left;
    margin: 26px auto 0;
    max-width: 460px;
}

.kk2 .kk-error__tips ul {
    margin: 10px 0 0;
    padding-left: 1.3em;
    list-style: disc;
}

.kk2 .kk-error__tips li {
    margin-bottom: .4em;
    color: var(--kk-muted);
}

/* --- Category banner ------------------------------------------------------ */
.kk2 .kk-catbanner {
    border-radius: var(--kk-r-img);
    overflow: hidden;
    margin: 18px 0 4px;
    line-height: 0;
}

.kk2 .kk-catbanner img {
    width: 100%;
    height: auto;
}

/* --- Chip row (subcategories, tags) --------------------------------------- */
.kk2 .kk-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    justify-content: center;
    margin: 0 0 8px;
    padding: 0;
    list-style: none;
}

.kk2 .kk-chips a {
    display: inline-block;
    padding: 9px 18px;
    border-radius: var(--kk-r-pill);
    background: var(--kk-white);
    box-shadow: var(--kk-card-shadow);
    color: var(--kk-ink);
    font-size: .9375rem;
    font-weight: 500;
    transition: background-color .18s ease, color .18s ease;
}

.kk2 .kk-chips a:hover,
.kk2 .kk-chips a:focus-visible {
    background: var(--kk-pink);
    color: var(--kk-white);
}

/* --- Search bar ----------------------------------------------------------- */
.kk2 .kk-searchbar {
    display: flex;
    gap: 12px;
    max-width: 640px;
    margin: 0 auto clamp(16px, 3vw, 28px);
}

.kk2 .kk-searchbar input {
    flex: 1 1 auto;
    min-width: 0;
    border-radius: var(--kk-r-pill);
    padding-inline: 22px;
}

.kk2 .kk-searchbar button {
    flex: 0 0 auto;
    border-radius: var(--kk-r-pill);
    padding-inline: 28px;
}

@media (max-width: 480px) {
    .kk2 .kk-searchbar {
        flex-direction: column;
    }
}

/* ==========================================================================
   PRODUCT DETAIL
   ========================================================================== */

.kk2 .kk-pdp {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(24px, 4vw, 56px);
    align-items: start;
    padding-block: clamp(18px, 3vw, 32px);
}

@media (max-width: 900px) {
    .kk2 .kk-pdp {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* --- Gallery -------------------------------------------------------------- */
/* Both columns need an explicit min-width:0. A grid item defaults to a
   min-content minimum, and .swiper-slide carries width:100% from Swiper, which
   in an auto-sized track resolves against the image intrinsic width (1400px on
   the Shopify CDN artwork). That sized the whole gallery column to 1400px at
   every viewport, which is what pushed the image off-screen and clipped the
   title on tablet and mobile. */
.kk2 .kk-gallery,
.kk2 .kk-pdp__info {
    min-width: 0;
}

.kk2 .kk-gallery .swiper {
    width: 100%;
    border-radius: var(--kk-r-img);
    overflow: hidden;
    background: var(--kk-white);
    box-shadow: var(--kk-card-shadow);
}

.kk2 .kk-gallery .swiper-slide {
    aspect-ratio: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--kk-white);
}

.kk2 .kk-gallery .swiper-slide img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    padding: 6%;
}

/* Swiper draws its arrows with a ::after glyph and its own colour var. */
.kk2 .kk-gallery .swiper-button-prev,
.kk2 .kk-gallery .swiper-button-next {
    --swiper-navigation-color: var(--kk-ink);
    --swiper-navigation-size: 20px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(255, 255, 255, .92);
    box-shadow: 0 2px 10px rgba(0, 0, 0, .18);
}

.kk2 .kk-gallery__thumbs {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 14px;
}

.kk2 .kk-gallery__thumbs .thumb-item {
    width: 72px;
    height: 72px;
    flex: 0 0 auto;
    border-radius: 12px;
    overflow: hidden;
    background: var(--kk-white);
    border: 2px solid transparent;
    cursor: pointer;
    transition: border-color .18s ease;
}

.kk2 .kk-gallery__thumbs .thumb-item.active {
    border-color: var(--kk-pink);
}

.kk2 .kk-gallery__thumbs .thumb-item img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    padding: 6%;
}

/* --- Info column ---------------------------------------------------------- */
.kk2 .kk-pdp__info h1 {
    font-family: var(--kk-font-display);
    font-size: clamp(1.6rem, 3.6vw, 2.6rem);
    line-height: 1.15;
    margin: 0 0 .3em;
    color: var(--kk-ink);
}

.kk2 .kk-pdp__price {
    font-size: clamp(1.25rem, 2.6vw, 1.75rem);
    font-weight: 700;
    color: var(--kk-pink);
    margin: 0 0 14px;
}

.kk2 .kk-pdp__price s {
    color: var(--kk-muted);
    font-weight: 400;
    margin-right: 10px;
}

.kk2 .kk-pdp__attrs {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin: 0 0 18px;
    color: var(--kk-muted);
    font-size: .9375rem;
}

.kk2 .kk-pdp__buy {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
    margin: 18px 0 6px;
}

.kk2 .kk-pdp__buy .btn {
    flex: 1 1 200px;
}

/* --- Share menu ----------------------------------------------------------- */
.kk2 .share-button-container {
    position: relative;
    flex: 0 0 auto;
}

.kk2 .share-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-height: 48px;
    padding: 12px 20px;
    border: 1px solid rgba(10, 10, 10, .22);
    border-radius: var(--kk-r-btn);
    background: transparent;
    color: var(--kk-ink);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
}

.kk2 .share-btn:hover {
    background: rgba(10, 10, 10, .05);
}

.kk2 .share-dropdown {
    display: none;
    position: absolute;
    right: 0;
    top: calc(100% + 8px);
    z-index: 30;
    min-width: 180px;
    padding: 8px;
    border-radius: 14px;
    background: var(--kk-white);
    box-shadow: 0 10px 30px rgba(0, 0, 0, .18);
}

/* toggleShareDropdown() toggles .show — keep the class name. */
.kk2 .share-dropdown.show {
    display: block;
}

.kk2 .share-option {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border-radius: 10px;
    color: var(--kk-ink);
    font-size: .9375rem;
}

.kk2 .share-option:hover {
    background: var(--kk-band);
}

/* --- Description (collapsed / expanded) ----------------------------------- */
.kk2 .product-details {
    margin-top: 20px;
}

.kk2 .product-details .description-content {
    color: var(--kk-ink);
    line-height: 1.7;
    overflow: hidden;
}

/* The description is supplier HTML injected unescaped, so it can carry wide
   tables, fixed-width images and unbroken SKU strings. Contain all three or
   they widen the info column on narrow screens. */
.kk2 .product-details .description-content {
    overflow-wrap: break-word;
}

.kk2 .product-details .description-content img {
    max-width: 100%;
    height: auto;
}

.kk2 .product-details .description-content table {
    display: block;
    max-width: 100%;
    overflow-x: auto;
}

/* The inline script compares scrollHeight to offsetHeight to decide whether to
   show "See More", so the collapsed state needs a real pixel cap. */
.kk2 .product-details.collapsed .description-content {
    max-height: 180px;
}

.kk2 .product-details .see-more-btn {
    display: inline-block;
    margin-top: 8px;
    color: var(--kk-pink);
    font-weight: 600;
    cursor: pointer;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* --- Specifications ------------------------------------------------------- */
.kk2 .kk-specs {
    margin-top: 22px;
}

.kk2 .kk-specs ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0 24px;
}

.kk2 .kk-specs li {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    border-bottom: 1px dashed rgba(10, 10, 10, .14);
    font-size: .9375rem;
    min-width: 0;
}

.kk2 .kk-specs .spec-label {
    color: var(--kk-muted);
    flex: 0 0 auto;
}

.kk2 .kk-specs .spec-value {
    font-weight: 600;
    text-align: right;
    word-break: break-word;
    min-width: 0;
}

@media (max-width: 575px) {
    .kk2 .kk-specs ul {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* --- Mobile sticky buy bar ------------------------------------------------ */
.kk2 .mobile-sticky-cart {
    display: none;
}

@media (max-width: 767px) {
    .kk2 .mobile-sticky-cart {
        display: flex;
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 60;
        gap: 10px;
        align-items: center;
        padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
        background: var(--kk-white);
        box-shadow: 0 -4px 20px rgba(0, 0, 0, .14);
    }

    .kk2 .mobile-sticky-cart .kk-qty {
        flex: 0 0 auto;
    }

    .kk2 .mobile-sticky-add-btn {
        flex: 1 1 auto;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-height: 48px;
        border-radius: var(--kk-r-btn);
        background: var(--kk-pink);
        color: var(--kk-white);
        font-weight: 600;
        text-transform: uppercase;
    }

    /* Stop the bar covering the footer's last row. */
    .kk2 .kk-footer {
        padding-bottom: 84px;
    }
}

/* ==========================================================================
   CART
   The row grid is shared by the header strip and every line, so the columns
   line up without a <table> (updateQuantity walks divs by class).
   ========================================================================== */

.kk2 .kk-cartlist__head,
.kk2 .cart-item {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 150px 110px;
    gap: 16px;
    align-items: center;
}

.kk2 .kk-cartlist__head {
    padding: 0 clamp(14px, 2vw, 22px) 10px;
    color: var(--kk-muted);
    font-size: .8125rem;
    text-transform: uppercase;
    letter-spacing: .06em;
}

.kk2 .kk-cartlist__head span:nth-child(2) {
    text-align: center;
}

.kk2 .kk-cartlist__head span:nth-child(3) {
    text-align: right;
}

.kk2 .cart-item {
    background: var(--kk-white);
    border-radius: var(--kk-r-img);
    box-shadow: var(--kk-card-shadow);
    padding: clamp(14px, 2vw, 22px);
    margin-bottom: 14px;
}

.kk2 .cart-item .item-product {
    display: flex;
    gap: 14px;
    align-items: center;
    min-width: 0;
    /* Legacy index.css pins .item-product to width:60%, which in this grid cell
       squeezed the product name into a one-word-per-line column. */
    width: auto;
}

.kk2 .cart-item .cart-item-info {
    flex: 1 1 auto;
    min-width: 0;
    /* gap on .item-product already provides the separation */
    padding-left: 0;
}

.kk2 .cart-item-img {
    flex: 0 0 auto;
    width: 84px;
    height: 84px;
    border-radius: 12px;
    overflow: hidden;
    background: var(--kk-band);
}

.kk2 .cart-item-img img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    padding: 6%;
}

.kk2 .cart-item-info {
    min-width: 0;
}

.kk2 .cart-item-name {
    margin: 0 0 4px;
    font-size: 1rem;
    font-weight: 600;
    line-height: 1.3;
    color: var(--kk-ink);
}

.kk2 .cart-item-info .cart-item-price {
    margin: 0;
    font-size: .875rem;
    color: var(--kk-muted);
}

.kk2 .cart-item-quantity {
    display: flex;
    justify-content: center;
    /* Legacy index.css pins this to width:38%, which clipped the + button off
       the stepper whenever the stepper did not also carry .counter. */
    width: auto;
}

/* The third column: line total. Also the class on the <p> above, but the JS
   scopes to div.cart-item-price, so the two never collide. */
.kk2 .cart-item > .cart-item-price {
    text-align: right;
}

.kk2 .cart-item > .cart-item-price p {
    margin: 0;
    font-size: 1.0625rem;
    font-weight: 700;
    color: var(--kk-ink);
}

@media (max-width: 640px) {

    .kk2 .kk-cartlist__head {
        display: none;
    }

    .kk2 .cart-item {
        grid-template-columns: minmax(0, 1fr) auto;
        row-gap: 12px;
    }

    .kk2 .cart-item .item-product {
        grid-column: 1 / -1;
    }

    .kk2 .cart-item-quantity {
        justify-content: flex-start;
    }
}

/* --- Order summary rows --------------------------------------------------- */
.kk2 .kk-summary {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 14px;
}

.kk2 .kk-summary__row {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    font-size: .9375rem;
    color: var(--kk-muted);
}

.kk2 .kk-summary__row--total {
    padding-top: 12px;
    border-top: 1px solid rgba(10, 10, 10, .12);
    font-size: 1.125rem;
    color: var(--kk-ink);
}

.kk2 .kk-summary__note {
    margin: 0 0 16px;
    font-size: .8125rem;
    color: var(--kk-muted);
}

/* ==========================================================================
   ORDER HISTORY
   The status colours moved out of inline styles so the AJAX refresh only has
   to swap a class name.
   ========================================================================== */

.kk2 .kk-order {
    margin-bottom: clamp(18px, 3vw, 28px);
}

.kk2 .kk-order__head {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 16px;
}

.kk2 .kk-order__id {
    font-family: var(--kk-font-display);
    font-size: clamp(1.25rem, 2.4vw, 1.6rem);
    line-height: 1.2;
    margin: 0;
    color: var(--kk-ink);
}

.kk2 .kk-order__meta {
    margin: 4px 0 0;
    font-size: .875rem;
    color: var(--kk-muted);
}

.kk2 .kk-order__track {
    margin-bottom: 18px;
}

.kk2 .kk-order__trackrow {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    justify-content: space-between;
    align-items: center;
}

.kk2 .kk-order__trackactions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}

.kk2 .kk-order__trackactions .btn {
    border-radius: var(--kk-r-pill);
    padding: 10px 22px;
    min-height: 42px;
    font-size: .875rem;
    font-weight: 600;
}

.kk2 .kk-order__label {
    margin: 0 0 3px;
    font-size: .75rem;
    color: var(--kk-muted);
    text-transform: uppercase;
    letter-spacing: .05em;
}

.kk2 .kk-order__mono {
    margin: 0;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 1rem;
    font-weight: 600;
    color: var(--kk-ink);
}

.kk2 .kk-order__value {
    margin: 0;
    font-weight: 600;
    color: var(--kk-ink);
}

.kk2 .kk-order__ship {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid rgba(10, 10, 10, .10);
}

.kk2 .kk-order__shipgrid {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    margin-top: 8px;
}

/* --- Status badge --------------------------------------------------------- */
.kk2 .nalpac-status-badge {
    display: inline-block;
    padding: 6px 14px;
    border-radius: var(--kk-r-pill);
    color: #fff;
    font-size: .8125rem;
    font-weight: 500;
    white-space: nowrap;
    background: #6c757d;
}

.kk2 .nalpac-status-badge.is-good {
    background: #1f8a4c;
}

.kk2 .nalpac-status-badge.is-bad {
    background: #c62828;
}

.kk2 .nalpac-status-badge.is-busy {
    background: #0f7c8a;
}

.kk2 .nalpac-status-badge.is-pending {
    background: #6c757d;
}

/* --- Line items ----------------------------------------------------------- */
/* The order lines reuse the cart's .cart-item grid but have no stepper, so the
   middle column can be narrower. */
.kk2 .kk-order .kk-order__cols,
.kk2 .kk-order .cart-item {
    grid-template-columns: minmax(0, 1fr) 90px 110px;
}

.kk2 .kk-order .cart-item {
    box-shadow: none;
    border: 1px solid rgba(10, 10, 10, .10);
}

.kk2 .kk-order__qty {
    font-weight: 600;
    color: var(--kk-ink);
}

.kk2 .kk-order__summary {
    margin: 18px 0 0;
    margin-left: auto;
    max-width: 340px;
}

/* ==========================================================================
   CONTACT
   ========================================================================== */

.kk2 .kk-contactinfo__item {
    display: flex;
    gap: 14px;
    padding: 16px 0;
    border-bottom: 1px solid rgba(10, 10, 10, .08);
}

.kk2 .kk-contactinfo__item:first-child {
    padding-top: 0;
}

.kk2 .kk-contactinfo__item:last-of-type {
    border-bottom: 0;
}

.kk2 .kk-contactinfo__icon {
    flex: 0 0 auto;
    width: 42px;
    height: 42px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--kk-band);
    color: var(--kk-pink);
    font-size: 1.0625rem;
}

.kk2 .kk-contactinfo h3 {
    margin: 0 0 4px;
    font-size: 1rem;
    font-weight: 600;
    color: var(--kk-ink);
}

.kk2 .kk-contactinfo p {
    margin: 0 0 2px;
    font-size: .9375rem;
    color: var(--kk-muted);
    line-height: 1.55;
}

.kk2 .kk-contactinfo a {
    color: var(--kk-pink);
}

.kk2 .kk-contactinfo__social {
    padding-top: 16px;
    border-top: 1px solid rgba(10, 10, 10, .08);
}

.kk2 .kk-contactinfo__social > div {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 8px;
}

.kk2 .kk-contactinfo__social a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--kk-band);
    color: var(--kk-pink);
    transition: background-color .18s ease, color .18s ease;
}

.kk2 .kk-contactinfo__social a:hover {
    background: var(--kk-pink);
    color: var(--kk-white);
}

/* --- Team ----------------------------------------------------------------- */
.kk2 .kk-team {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: clamp(16px, 2.5vw, 26px);
}

.kk2 .kk-team__card {
    text-align: center;
}

.kk2 .kk-team__avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 72px;
    height: 72px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: var(--kk-band);
    color: var(--kk-pink);
    font-size: 1.75rem;
}

.kk2 .kk-team__card h3 {
    font-family: var(--kk-font-display);
    font-size: 1.25rem;
    line-height: 1.2;
    margin: 0 0 4px;
    color: var(--kk-ink);
}

.kk2 .kk-team__role {
    margin: 0 0 10px;
    font-size: .8125rem;
    font-weight: 600;
    color: var(--kk-pink);
    text-transform: uppercase;
    letter-spacing: .06em;
}

.kk2 .kk-team__bio {
    margin: 0 0 12px;
    font-size: .9375rem;
    line-height: 1.6;
    color: var(--kk-muted);
}

.kk2 .kk-team__contact {
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: .875rem;
}

.kk2 .kk-team__contact a {
    color: var(--kk-muted);
    word-break: break-word;
}

.kk2 .kk-team__contact a:hover {
    color: var(--kk-pink);
}

.kk2 .kk-team__socials {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-top: 12px;
}

.kk2 .kk-team__socials a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--kk-band);
    color: var(--kk-pink);
    transition: background-color .18s ease, color .18s ease;
}

.kk2 .kk-team__socials a:hover {
    background: var(--kk-pink);
    color: var(--kk-white);
}

/* --- Guest cart -----------------------------------------------------------
   The signed-out cart reuses the signed-in .cart-item grid; only the inline
   remove control is new. */
.kk2 .kk-guest-remove {
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
    color: var(--kk-muted);
    font: inherit;
    font-size: .8125rem;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.kk2 .kk-guest-remove:hover {
    color: var(--kk-pink);
}

.kk2 .cart-item-name a {
    color: inherit;
}

.kk2 .cart-item-name a:hover {
    color: var(--kk-pink);
}
