/* ============================================================================
   Planto storefront — the ONE stylesheet for the whole store (st- prefixes).
   Tokens and rules follow DESIGN-SYSTEM.md / variant-b.jsx from the design zip.
   Fluid rules: aspect-ratio for photos, clamp() (390px reference) for display
   type, no fixed container widths. Frame: 100% up to 520px, centered above.
   ============================================================================ */

:root {
    --p-ink: #0E0E0E;
    --p-cream: #F7F6F2;
    --p-paper: #FFFFFF;
    --p-red: #E00144;
    --p-yellow: #FFEE07;
    --p-mute: rgba(14, 14, 14, 0.55);
    --p-faint: rgba(14, 14, 14, 0.40);
    --p-line: rgba(14, 14, 14, 0.10);
    /* Тло вибраної опції листа (design-sourced, product-sheet.jsx '#FFFBEA'). */
    --p-sel: #FFFBEA;
    /* Warm-dark overlay shade for the red hero photo (design-sourced, decorative — not a brand accent). */
    --p-hero-shade: 20, 4, 10;
    /* Soft white for captions/tags set over photos (decorative). */
    --p-on-photo: 255, 255, 255;
    --st-sans: "Commissioner", -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --st-mono: "Martian Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
}

/* ---- document / frame ---- */

html:has(body.st-store) {
    scroll-behavior: smooth;
}

body.st-store {
    margin: 0;
    background: var(--p-cream);
    color: var(--p-ink);
    font-family: var(--st-sans);
    -webkit-font-smoothing: antialiased;
}

.st-demo-banner {
    position: relative;
    z-index: 50;
    width: 100%;
    box-sizing: border-box;
    padding: 9px 14px;
    background: var(--p-yellow);
    border-bottom: 1px solid var(--p-ink);
    color: var(--p-ink);
    font-family: var(--st-mono);
    font-size: 10px;
    font-weight: 600;
    line-height: 1.45;
    text-align: center;
}
.st-demo-banner .demo-banner-link { color: inherit; font-weight: 800; margin-left: .45rem; text-underline-offset: 2px; }

.st-frame {
    width: 100%;
    max-width: 520px;
    margin-inline: auto;
    min-height: 100dvh;
    background: var(--p-paper);
    position: relative;
}

@media (min-width: 560px) {
    body.st-store {
        background: #EDEBE7;
    }

    .st-frame {
        box-shadow: 0 0 60px rgba(8, 6, 5, 0.18);
    }
}

.st-frame img {
    display: block;
    max-width: 100%;
}

.st-frame h1,
.st-frame h2,
.st-frame h3,
.st-frame p {
    margin: 0;
}

/* ---- type atoms ---- */

.st-disp {
    font-family: var(--st-sans);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: -0.6px;
}

.st-mono {
    font-family: var(--st-mono);
}

.st-kicker {
    font-family: var(--st-mono);
    font-size: 11px;
    letter-spacing: 1.3px;
}

/* ---- shared atoms ---- */

/* Icon-only buttons (burger, cart): 44px touch target around a smaller glyph. */
.st-iconbtn {
    background: none;
    border: none;
    padding: 10px;
    margin: -10px;
    cursor: pointer;
    color: var(--p-ink);
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Round "+" button on bowl cards (yellow, filled). */
.st-plus {
    width: 50px;
    height: 50px;
    border-radius: 50%;
    border: none;
    cursor: pointer;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}

.st-plus-yellow {
    background: var(--p-yellow);
    color: var(--p-ink);
}

/* Small outlined "+" on drink cards; a ::before pseudo-element provides the ≥44px hit area. */
.st-plus-outline {
    position: relative;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    border: 1.5px solid var(--p-ink);
    background: transparent;
    color: var(--p-ink);
    cursor: pointer;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    box-sizing: content-box;
    background-clip: padding-box;
}

/* Invisible 44px hit area centered on the 34px ring — meets the ≥44px touch-target rule
   without changing the visual size. */
.st-plus-outline::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 44px;
    height: 44px;
    transform: translate(-50%, -50%);
}

/* Placeholder for products without a photo (e.g. Testing env skips the image seeder). */
.st-noimg {
    background: #ECEBEE;
    width: 100%;
}

.st-loading {
    padding: 48px 18px;
    font-family: var(--st-mono);
    font-size: 12px;
    color: var(--p-faint);
    text-align: center;
}

/* ---- sticky header shadow (store.js toggles the attribute) ---- */

.st-sticky {
    position: sticky;
    top: 0;
    z-index: 40;
    background: var(--p-paper);
    transition: box-shadow 0.25s;
}

html[data-st-scrolled] .st-sticky {
    box-shadow: 0 6px 22px rgba(8, 6, 5, 0.13);
}

/* ---- blazor error ui (app.css is not loaded on the storefront) ---- */

#blazor-error-ui {
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 100;
    background: var(--p-yellow);
    color: var(--p-ink);
    font-family: var(--st-sans);
    font-size: 14px;
    padding: 12px 18px;
    box-shadow: 0 -4px 20px rgba(8, 6, 5, 0.2);
}

#blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 14px;
    top: 10px;
}

/* ---- language toggle (mounted in the nav drawer, dark background) ---- */

.st-drawer .lang-toggle {
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: var(--st-mono);
    font-size: 12px;
}

.st-drawer .lang-toggle a {
    color: rgba(247, 246, 242, 0.55);
    text-decoration: none;
    padding: 10px 2px;
}

.st-drawer .lang-toggle a.lang-toggle-active {
    color: var(--p-yellow);
}

/* ---- not found ---- */

.st-notfound {
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    gap: 18px;
    padding: 0 22px;
}

.st-notfound-logo {
    height: 26px;
}

.st-notfound-title {
    font-size: clamp(28px, 8.5vw, 40px);
    line-height: 0.95;
}

.st-notfound-text {
    font-size: 14px;
    font-weight: 500;
    color: var(--p-mute);
    max-width: 320px;
}

.st-notfound-home {
    background: var(--p-yellow);
    color: var(--p-ink);
    text-decoration: none;
    font-size: 15px;
    padding: 15px 22px;
}

/* ---- header ---- */

.st-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 18px 12px;
}

.st-header-side {
    display: flex;
    align-items: center;
    gap: 14px;
}

.st-header-logo {
    height: 22px;
}

.st-header-chip {
    background: var(--p-red);
    color: #fff;
    font-size: 11px;
    padding: 6px 11px;
    border-radius: 100px;
    white-space: nowrap;
}

.st-header-cart {
    position: relative;
}

.st-header-cart-badge {
    position: absolute;
    top: 4px;
    right: 3px;
    width: 16px;
    height: 16px;
    border-radius: 8px;
    background: var(--p-red);
    color: #fff;
    font-size: 10px;
    font-weight: 800;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* ---- nav drawer ---- */

.st-scrim {
    position: fixed;
    inset: 0;
    z-index: 70;
    background: rgba(8, 6, 5, 0.55);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.28s;
}

.st-scrim.st-open {
    opacity: 1;
    pointer-events: auto;
}

.st-drawer {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    z-index: 71;
    width: 84%;
    max-width: 330px;
    background: var(--p-ink);
    color: var(--p-cream);
    display: flex;
    flex-direction: column;
    transform: translateX(-100%);
    transition: transform 0.3s cubic-bezier(0.2, 0.85, 0.25, 1);
    box-shadow: 8px 0 40px rgba(8, 6, 5, 0.4);
}

.st-drawer.st-open {
    transform: translateX(0);
}

.st-drawer-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 22px 22px 18px;
}

.st-drawer-logo {
    height: 24px;
}

.st-drawer-tools {
    display: flex;
    align-items: center;
    gap: 14px;
}

.st-drawer-close {
    position: relative;
    background: none;
    border: none;
    cursor: pointer;
    color: var(--p-cream);
    font-size: 30px;
    line-height: 1;
    padding: 4px 8px;
    opacity: 0.7;
}

/* Invisible 44px hit area centered on the glyph — meets the ≥44px touch-target rule
   without changing the visual size. */
.st-drawer-close::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 44px;
    height: 44px;
    transform: translate(-50%, -50%);
}

.st-drawer-body {
    flex: 1;
    overflow-y: auto;
    padding: 8px 22px 26px;
}

/* Auth block (phase 8) — variant-b.jsx:289-324. Guest and signed-in branches share the container. */
.st-drawer-auth {
    margin-bottom: 24px;
    padding-bottom: 22px;
    border-bottom: 1px solid rgba(247, 246, 242, 0.12);
}

.st-drawer-auth-head {
    display: flex;
    align-items: center;
    gap: 12px;
}

.st-drawer-auth-avatar {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.st-drawer-auth-avatar-guest {
    border: 1.5px solid rgba(247, 246, 242, 0.3);
}

.st-drawer-auth-avatar-user {
    background: var(--p-yellow);
    overflow: hidden;
    align-items: flex-end;
}

.st-drawer-auth-sprite {
    width: 86%;
    height: 86%;
    object-fit: contain;
    object-position: bottom;
    image-rendering: pixelated;
    display: block;
}

.st-drawer-auth-id {
    min-width: 0;
}

.st-drawer-auth-title {
    font-size: 16px;
    line-height: 1;
}

.st-drawer-auth-name {
    font-size: 17px;
    line-height: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.st-drawer-auth-sub {
    font-weight: 500;
    font-size: 12.5px;
    color: rgba(247, 246, 242, 0.6);
    margin-top: 5px;
    line-height: 1.35;
}

.st-drawer-auth-phone {
    font-size: 11px;
    color: rgba(247, 246, 242, 0.6);
    margin-top: 5px;
}

.st-drawer-auth-login {
    width: 100%;
    background: var(--p-yellow);
    color: var(--p-ink);
    font-size: 14px;
    border: none;
    cursor: pointer;
    padding: 13px 0;
    margin-top: 14px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    text-decoration: none;
}

.st-drawer-auth-bonus {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 14px;
    padding: 10px 14px;
    background: rgba(255, 238, 7, 0.1);
    border: 1px solid rgba(255, 238, 7, 0.3);
}

.st-drawer-auth-bonus-label {
    font-weight: 700;
    font-size: 13px;
    color: var(--p-cream);
}

.st-drawer-auth-bonus-amount {
    font-size: 15px;
    color: var(--p-yellow);
}

.st-drawer-auth-actions {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 14px;
}

.st-drawer-auth-cabinet {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    background: transparent;
    border: 1.5px solid rgba(247, 246, 242, 0.35);
    cursor: pointer;
    color: var(--p-cream);
    font-size: 13px;
    padding: 12px 0;
    text-decoration: none;
}

.st-drawer-auth-logout-form {
    margin: 0;
    flex-shrink: 0;
}

.st-drawer-auth-logout {
    background: none;
    border: none;
    cursor: pointer;
    font-weight: 700;
    font-size: 13px;
    color: var(--p-red);
    padding: 0 4px;
}

.st-drawer-cat {
    border-bottom: 1px solid rgba(247, 246, 242, 0.12);
    width: 100%;
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    padding: 15px 0;
    color: var(--p-cream);
    text-decoration: none;
}

.st-drawer-cat-name {
    font-size: 28px;
    line-height: 1;
}

.st-drawer-cat-count {
    font-size: 11px;
    color: var(--p-yellow);
}

.st-drawer-actions {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-top: 26px;
}

.st-drawer-checkout {
    background: var(--p-yellow);
    color: var(--p-ink);
    border: none;
    cursor: pointer;
    font-size: 15px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 15px 18px;
}

.st-drawer-checkout-label {
    display: flex;
    align-items: center;
    gap: 10px;
}

.st-drawer-checkout-count {
    background: var(--p-ink);
    color: #fff;
    width: 22px;
    height: 22px;
    border-radius: 11px;
    font-size: 11px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.st-drawer-about {
    background: none;
    border: 1.5px solid rgba(247, 246, 242, 0.25);
    color: var(--p-cream);
    font-size: 15px;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 15px 18px;
    text-decoration: none;
}

.st-drawer-contacts {
    margin-top: 30px;
    padding-top: 22px;
    border-top: 1px solid rgba(247, 246, 242, 0.12);
}

.st-drawer-phone {
    font-size: 22px;
    color: var(--p-cream);
    text-decoration: none;
    display: block;
}

.st-drawer-address {
    font-weight: 600;
    font-size: 14px;
    color: rgba(247, 246, 242, 0.7);
    line-height: 1.7;
    margin-top: 12px;
}

.st-drawer-delivery {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 16px;
    background: rgba(255, 238, 7, 0.1);
    border: 1px solid rgba(255, 238, 7, 0.3);
    padding: 11px 14px;
    font-weight: 600;
    font-size: 12.5px;
    line-height: 1.4;
}

/* ---- toast ---- */

.st-toast {
    position: fixed;
    left: 50%;
    bottom: 28px;
    transform: translateX(-50%);
    z-index: 90;
    background: var(--p-ink);
    color: var(--p-cream);
    font-size: 13px;
    padding: 12px 18px;
    white-space: nowrap;
    box-shadow: 0 8px 30px rgba(8, 6, 5, 0.3);
}

/* ---- hero ---- */

.st-hero {
    position: relative;
}

.st-hero-img {
    width: 100%;
    aspect-ratio: 39 / 56;
    object-fit: cover;
    object-position: center 72%;
}

.st-hero-grad {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 52%;
    background: linear-gradient(180deg, rgba(var(--p-hero-shade), 0.42) 0%, rgba(var(--p-hero-shade), 0.12) 55%, rgba(var(--p-hero-shade), 0) 100%);
}

.st-hero-copy {
    position: absolute;
    top: 24px;
    left: 18px;
    right: 18px;
}

.st-hero-kicker {
    color: var(--p-yellow);
    margin-bottom: 14px;
}

.st-hero-title {
    font-size: clamp(28px, 8.5vw, 40px);
    line-height: 0.95;
    color: #fff;
    text-shadow: 0 2px 18px rgba(var(--p-hero-shade), 0.4);
}

.st-hero-accent {
    color: var(--p-yellow);
}

.st-hero-price {
    position: absolute;
    right: 18px;
    bottom: 20px;
    background: var(--p-yellow);
    color: var(--p-ink);
    font-size: 13px;
    padding: 8px 13px;
    white-space: nowrap;
}

/* ---- cta row ---- */

.st-cta {
    display: block;
    background: var(--p-ink);
    color: var(--p-cream);
    font-size: 16px;
    padding: 20px 0;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

/* ---- marquee ---- */

.st-marquee {
    background: var(--p-yellow);
    color: var(--p-ink);
    overflow: hidden;
    padding: 12px 0;
    white-space: nowrap;
}

.st-marquee-track {
    display: inline-block;
    font-size: 18px;
    animation: st-marquee 24s linear infinite;
}

@keyframes st-marquee {
    from { transform: translateX(0); }
    to { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
    .st-marquee-track { animation: none; }
}

/* ---- microgreens story ---- */

.st-story-photo img {
    width: 100%;
    aspect-ratio: 13 / 10;
    object-fit: cover;
}

.st-story {
    background: var(--p-ink);
    color: var(--p-cream);
    padding: 36px 20px 40px;
}

.st-story-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 20px;
}

.st-story-kicker {
    letter-spacing: 1.5px;
    color: var(--p-yellow);
}

.st-story-title {
    font-size: clamp(30px, 9.2vw, 44px);
    line-height: 0.95;
}

.st-story-accent {
    color: var(--p-red);
}

.st-story-text {
    font-weight: 500;
    font-size: 15px;
    line-height: 1.55;
    color: rgba(247, 246, 242, 0.78);
    margin: 16px 0 28px;
    max-width: 320px;
    text-wrap: pretty;
}

.st-story-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1px;
    background: rgba(247, 246, 242, 0.15);
}

.st-story-stat {
    background: var(--p-ink);
    padding: 22px 18px;
    display: flex;
    flex-direction: column;
}

.st-story-stat-value {
    font-size: clamp(34px, 10.8vw, 50px);
    color: var(--p-yellow);
    line-height: 0.9;
}

.st-story-stat-label {
    font-weight: 500;
    font-size: 12.5px;
    color: rgba(247, 246, 242, 0.7);
    margin-top: 12px;
    line-height: 1.4;
    text-wrap: pretty;
}

/* ---- steps ---- */

.st-steps {
    padding: 28px 18px 0;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.st-step {
    padding: 22px;
    display: flex;
    gap: 18px;
    align-items: center;
}

.st-step-num {
    font-size: clamp(36px, 11.3vw, 52px);
}

.st-step h3 {
    font-size: 18px;
    line-height: 1;
}

.st-step p {
    font-weight: 500;
    font-size: 13px;
    margin-top: 6px;
    opacity: 0.8;
}

.st-step-ink { background: var(--p-ink); color: var(--p-cream); }
.st-step-ink .st-step-num { color: var(--p-red); }
.st-step-red { background: var(--p-red); color: #fff; }
.st-step-red .st-step-num { color: var(--p-yellow); }
.st-step-yellow { background: var(--p-yellow); color: var(--p-ink); }
.st-step-yellow .st-step-num { color: var(--p-red); }

/* ---- lifestyle cta ---- */

.st-life {
    position: relative;
    margin-top: 28px;
}

.st-life-img {
    width: 100%;
    aspect-ratio: 39 / 48;
    object-fit: cover;
}

.st-life-grad {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(8, 6, 5, 0.15) 0%, rgba(8, 6, 5, 0) 35%, rgba(8, 6, 5, 0.8) 100%);
}

.st-life-copy {
    position: absolute;
    left: 22px;
    right: 22px;
    bottom: 28px;
}

.st-life-title {
    font-size: clamp(36px, 11.3vw, 52px);
    line-height: 0.92;
    color: #fff;
}

.st-life-accent {
    color: var(--p-yellow);
    font-size: clamp(24px, 7.7vw, 36px);
    line-height: 1.02;
    display: block;
    margin-top: 12px;
}

.st-life-cta {
    background: var(--p-yellow);
    color: var(--p-ink);
    font-size: 17px;
    padding: 18px 28px;
    margin-top: 24px;
    display: inline-block;
    text-decoration: none;
}

/* ---- footer ---- */

.st-footer {
    padding: 34px 18px 30px;
}

.st-footer-logo {
    height: 30px;
    margin-bottom: 16px;
}

.st-footer-links {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 22px;
    font-size: 13px;
}

.st-footer-links a {
    color: var(--p-ink);
    text-decoration: none;
}

.st-footer-legal {
    font-size: 12px;
    color: var(--p-faint);
    margin-top: 18px;
    text-transform: uppercase;
}

/* ---- bowls ---- */

.st-bowls-head {
    padding: 30px 18px 8px;
}

.st-bowls-title {
    font-size: clamp(31px, 9.7vw, 46px);
}

.st-bowls-heart {
    display: inline-block;
    vertical-align: -2px;
    margin-left: 10px;
}

.st-bowls-sub {
    font-weight: 500;
    font-size: 14px;
    color: var(--p-mute);
    margin-top: 8px;
}

.st-bowls-list {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 14px 0;
}

.st-bowl-card {
    position: relative;
}

.st-bowl-img {
    width: 100%;
    /* height:auto lets aspect-ratio size the box; without it the img's width/height
       HTML attributes (emitted by ResponsiveImage for anti-CLS) fix the height in px
       and defeat aspect-ratio. */
    height: auto;
    aspect-ratio: 13 / 12;
    object-fit: cover;
}

.st-bowl-grad {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(8, 6, 5, 0) 48%, rgba(8, 6, 5, 0.85) 100%);
}

.st-bowl-price {
    position: absolute;
    top: 16px;
    right: 16px;
    background: var(--p-red);
    color: #fff;
    font-size: 17px;
    padding: 8px 13px;
}

.st-bowl-vegan {
    position: absolute;
    top: 16px;
    left: 16px;
    background: var(--p-yellow);
    color: var(--p-ink);
    font-size: 11px;
    padding: 6px 10px;
}

.st-bowl-foot {
    position: absolute;
    left: 18px;
    right: 18px;
    bottom: 18px;
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
}

.st-bowl-name {
    font-size: clamp(23px, 6.9vw, 32px);
    line-height: 0.95;
    color: #fff;
}

.st-bowl-tags {
    font-weight: 500;
    font-size: 13px;
    color: rgba(var(--p-on-photo), 0.82);
    margin-top: 6px;
}

/* ---- drinks ---- */

.st-drinks {
    background: var(--p-cream);
    margin-top: 22px;
    padding-bottom: 6px;
}

.st-drinks-head {
    padding: 26px 18px 4px;
}

.st-drinks-kicker {
    font-size: 10.5px;
    letter-spacing: 1.4px;
    color: var(--p-mute);
    margin-bottom: 7px;
}

.st-drinks-title {
    font-size: clamp(19px, 5.6vw, 26px);
}

.st-drink-rail {
    display: flex;
    gap: 14px;
    overflow-x: auto;
    padding: 14px 18px 22px;
    scroll-snap-type: x mandatory;
    scroll-padding: 0 18px;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
}

.st-drink-rail::-webkit-scrollbar {
    display: none;
}

.st-drink-card {
    flex: 0 0 88%;
    scroll-snap-align: center;
}

.st-drink-photo {
    background: #ECEBEE;
    overflow: hidden;
}

.st-drink-img {
    width: 100%;
    height: auto; /* see .st-bowl-img — override ResponsiveImage's height attr so aspect-ratio wins */
    aspect-ratio: 3 / 2;
    object-fit: cover;
}

.st-drink-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 11px;
}

.st-drink-copy {
    min-width: 0;
}

.st-drink-name {
    font-weight: 700;
    font-size: 16px;
    line-height: 1.1;
}

.st-drink-note {
    font-size: 11px;
    color: var(--p-faint);
    margin-top: 4px;
    letter-spacing: 0.3px;
}

/* ============================================================================
   Phase 3 — product/drink sheet, quick pick, cart drawer
   ============================================================================ */

html.st-lock { overflow: hidden; }

/* ---- bottom sheet shell ---- */
.st-sheet-scrim { position: fixed; inset: 0; z-index: 60; background: rgba(14, 14, 14, 0.5); display: flex; flex-direction: column; justify-content: flex-end; align-items: center; }
.st-sheet { width: 100%; max-width: 520px; max-height: 88vh; overflow-y: auto; overscroll-behavior: contain; background: var(--p-paper); animation: st-sheet-up .26s cubic-bezier(.2, .8, .2, 1); }
@keyframes st-sheet-up { from { transform: translateY(100%); } to { transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) {
    .st-sheet { animation: none; }
}
.st-sheet-hero { position: relative; }
.st-sheet-hero img { width: 100%; aspect-ratio: 13 / 6; height: auto; object-fit: cover; display: block; }
.st-sheet-hero .st-noimg { width: 100%; aspect-ratio: 13 / 6; }
.st-sheet-close { position: absolute; top: 14px; right: 14px; width: 36px; height: 36px; border: none; border-radius: 50%; background: rgba(255, 255, 255, 0.95); color: var(--p-ink); font-size: 22px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.st-sheet-head-copy { position: absolute; left: 18px; right: 18px; bottom: 16px; color: #fff; }
.st-sheet-title { font-size: 24px; text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5); }
.st-sheet-caption { font-family: var(--st-mono); font-size: 11px; letter-spacing: .3px; color: rgba(255, 255, 255, 0.85); margin-top: 5px; }

/* ---- collapsible sections ---- */
.st-sheet-sec { padding: 18px; border-top: 1px solid var(--p-line); }
.st-sheet-sec.st-first { border-top: none; }
.st-sheet-sec-head { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px; background: none; border: none; cursor: pointer; color: var(--p-ink); padding: 10px 0; margin: -10px 0; }
.st-sheet-sec-label { display: flex; align-items: center; gap: 8px; min-width: 0; font-family: var(--st-mono); font-size: 11px; letter-spacing: 1.3px; color: var(--p-red); text-transform: uppercase; }
.st-sheet-sec-count { font-family: var(--st-mono); font-size: 10px; letter-spacing: 0; color: var(--p-ink); background: var(--p-yellow); padding: 1px 6px; border-radius: 8px; }
.st-sheet-sec-side { display: flex; align-items: center; gap: 10px; min-width: 0; }
.st-sheet-sec-hint { font-weight: 700; font-size: 12.5px; color: var(--p-mute); white-space: nowrap; max-width: 150px; overflow: hidden; text-overflow: ellipsis; }
.st-sheet-chev { display: flex; color: var(--p-faint); transition: transform .2s; }
.st-sheet-chev.st-open { transform: rotate(90deg); }
.st-sheet-sec-body { margin-top: 16px; }
.st-sheet-lead { font-weight: 600; font-size: 12px; color: var(--p-mute); margin: 0 0 12px; line-height: 1.45; }

/* ---- Buttons renderer ---- */
.st-optgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 8px; }
.st-opt { padding: 12px 10px; background: var(--p-cream); color: var(--p-ink); border: 1.5px solid var(--p-line); cursor: pointer; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 12.5px; line-height: 1.1; text-align: center; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 4px 6px; }
.st-opt.st-on { background: var(--p-ink); color: #fff; border-color: var(--p-ink); }
.st-opt-price { font-family: var(--st-mono); font-size: 10px; letter-spacing: 0; text-transform: none; color: var(--p-red); }
.st-opt.st-on .st-opt-price { color: var(--p-yellow); }
.st-opt-caption { flex-basis: 100%; font-family: var(--st-mono); font-weight: 400; font-size: 10.5px; letter-spacing: 0; text-transform: none; color: var(--p-faint); }
.st-opt.st-on .st-opt-caption { color: var(--p-yellow); }

/* ---- List renderer (соуси/олія/лід) ---- */
.st-optlist { display: flex; flex-direction: column; gap: 8px; }
.st-optrow { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 14px; background: var(--p-cream); border: 1.5px solid var(--p-line); color: var(--p-ink); cursor: pointer; font-family: var(--st-sans); }
.st-optrow.st-on { background: var(--p-sel); border-color: var(--p-ink); }
.st-optrow-name { display: flex; align-items: center; gap: 9px; min-width: 0; font-weight: 700; font-size: 14.5px; text-align: left; }
.st-optrow-side { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.st-optrow-price { font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 13px; }
.st-radio { width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid var(--p-faint); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-optrow.st-on .st-radio { border-color: var(--p-ink); background: var(--p-yellow); }

/* ---- Portion renderer ---- */
.st-portion { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.st-portion-card { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 15px 8px; background: var(--p-cream); border: 1.5px solid var(--p-line); color: var(--p-ink); cursor: pointer; font-family: var(--st-sans); }
.st-portion-card.st-on { background: var(--p-sel); border-color: var(--p-ink); }
.st-portion-x { font-size: 17px; }
.st-portion-price { font-family: var(--st-mono); font-size: 9.5px; letter-spacing: 0; color: var(--p-faint); }
.st-portion-price.st-extra { color: var(--p-red); }
.st-portion-segs { display: flex; gap: 3px; width: 100%; margin-top: 2px; }
.st-portion-seg { flex: 1; height: 8px; border-radius: 2px; background: var(--p-line); }
.st-portion-seg.st-fill { background: var(--p-ink); }
.st-portion-card.st-on .st-portion-seg.st-fill { background: var(--p-red); }

/* ---- Slider renderer (кількість зелені) ---- */
.st-greens-types { transition: opacity .2s; }
.st-greens-types.st-locked { opacity: .4; pointer-events: none; }
.st-slider-wrap { margin-top: 16px; }
.st-slider { position: relative; height: 24px; }
.st-slider-track { position: absolute; top: 11px; height: 2px; background: var(--p-line); }
.st-slider-fill { position: absolute; top: 11px; height: 2px; transition: width .18s; }
.st-slider-dots { position: absolute; inset: 0; display: grid; }
.st-slider-dotbtn { background: none; border: none; cursor: pointer; padding: 0; display: flex; align-items: center; justify-content: center; }
.st-slider-dot { width: 10px; height: 10px; border-radius: 50%; border: 1.5px solid rgba(14, 14, 14, 0.15); box-sizing: border-box; transition: all .15s; }
.st-slider-dot.st-on { width: 18px; height: 18px; border: 2.5px solid var(--p-ink); }
.st-slider-labels { display: grid; margin-top: 4px; }
.st-slider-label { background: none; border: none; cursor: pointer; padding: 4px 0; display: flex; flex-direction: column; align-items: center; gap: 2px; font-family: var(--st-sans); font-weight: 600; font-size: 11.5px; color: var(--p-mute); line-height: 1.15; text-align: center; }
.st-slider-label.st-on { font-weight: 800; color: var(--p-ink); }
.st-slider-label-price { font-family: var(--st-mono); font-size: 9.5px; color: var(--p-faint); }
.st-slider-label.st-on .st-slider-label-price { color: var(--p-red); }
.st-sad-note { display: flex; align-items: center; gap: 11px; margin-top: 12px; padding: 11px 13px; background: var(--p-cream); border: 1.5px dashed var(--p-line); font-weight: 600; font-size: 12.5px; color: var(--p-mute); line-height: 1.4; }

/* ---- Counter renderer (сир/додатки) ---- */
.st-cntrow { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 11px 13px; background: var(--p-cream); border: 1.5px solid var(--p-line); }
.st-cntrow.st-on { background: var(--p-sel); border-color: var(--p-ink); }
.st-cntrow-name { display: flex; align-items: center; gap: 8px; min-width: 0; font-weight: 600; font-size: 14px; line-height: 1.2; text-align: left; }
.st-cntrow-side { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }
.st-cntrow-price { font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 13.5px; white-space: nowrap; }
.st-cnt-add { position: relative; width: 22px; height: 22px; flex-shrink: 0; background: transparent; border: 1.5px solid var(--p-faint); color: var(--p-mute); cursor: pointer; padding: 0; display: flex; align-items: center; justify-content: center; }
.st-stepper { display: flex; align-items: center; border: 1.5px solid var(--p-ink); border-radius: 100px; background: var(--p-yellow); }
.st-stepper button { position: relative; width: 28px; height: 26px; background: none; border: none; color: var(--p-ink); cursor: pointer; padding: 0; display: flex; align-items: center; justify-content: center; }
.st-stepper button:disabled { opacity: .3; cursor: default; }

/* Invisible 44px hit areas centered on the glyphs — meet the ≥44px touch-target rule without
   changing the visible button size (same ::before pattern as .st-iconbtn / .st-plus-outline). */
.st-cnt-add::before,
.st-stepper button::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 44px;
    height: 44px;
    transform: translate(-50%, -50%);
}
.st-stepper-qty { font-weight: 800; font-size: 14px; min-width: 16px; text-align: center; }
.st-newbadge { font-family: var(--st-mono); font-size: 8px; letter-spacing: .5px; color: var(--p-red); border: 1px solid var(--p-red); border-radius: 3px; padding: 1px 3px; flex-shrink: 0; }

/* ---- category chips (додатки) ---- */
.st-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-bottom: 14px; }
.st-chip { display: flex; align-items: center; gap: 5px; padding: 8px 13px; border-radius: 100px; background: transparent; color: var(--p-ink); border: 1.5px solid var(--p-line); font-family: var(--st-sans); font-weight: 700; font-size: 12.5px; white-space: nowrap; cursor: pointer; }
.st-chip.st-on { background: var(--p-ink); color: #fff; border-color: var(--p-ink); }
.st-chip-count { font-family: var(--st-mono); font-size: 9px; background: var(--p-ink); color: #fff; border-radius: 8px; padding: 0 5px; line-height: 15px; }
.st-chip.st-on .st-chip-count { background: var(--p-yellow); color: var(--p-ink); }

/* ---- quick pick (шаблони + пресети) ---- */
.st-qp-rule { display: flex; align-items: center; gap: 8px; margin: 0 0 6px; }
.st-qp-rule.st-later { margin-top: 20px; }
.st-qp-rule-label { font-family: var(--st-mono); font-size: 11px; letter-spacing: 1.3px; color: var(--p-red); text-transform: uppercase; }
.st-qp-rule-line { flex: 1; height: 1px; background: var(--p-line); }
.st-qp-list { display: flex; flex-direction: column; gap: 8px; }
.st-qp-empty { font-weight: 600; font-size: 12.5px; color: var(--p-faint); margin: 0; padding: 14px; border: 1.5px dashed var(--p-line); line-height: 1.45; }
.st-qp-row { display: flex; align-items: stretch; gap: 8px; }
.st-qp-card { flex: 1; min-width: 0; text-align: left; padding: 11px 14px; background: var(--p-cream); border: 1.5px solid var(--p-line); color: var(--p-ink); cursor: pointer; font-family: var(--st-sans); }
.st-qp-card.st-on { background: var(--p-sel); border-color: var(--p-ink); }
.st-qp-card-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; }
.st-qp-card-name { font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 14px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.st-qp-card-side { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.st-qp-card-extra { font-family: var(--st-mono); font-size: 10px; letter-spacing: 0; color: var(--p-red); }
.st-qp-card-extra.st-zero { color: var(--p-faint); }
.st-qp-card-tag { font-family: var(--st-mono); font-size: 10px; letter-spacing: 1px; color: var(--p-faint); }
.st-qp-card.st-on .st-qp-card-tag { color: var(--p-ink); }
.st-qp-check { width: 18px; height: 18px; background: var(--p-yellow); border: 1.5px solid var(--p-ink); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-qp-card-sum { display: block; font-weight: 600; font-size: 12.5px; color: var(--p-mute); line-height: 1.35; }
.st-qp-del { flex-shrink: 0; width: 42px; border: 1.5px solid var(--p-line); background: transparent; color: var(--p-mute); cursor: pointer; display: flex; align-items: center; justify-content: center; }
.st-qp-dashed { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 13px 12px; border: 1.5px dashed var(--p-ink); background: transparent; color: var(--p-ink); cursor: pointer; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 13px; }
.st-qp-dashed.st-muted { border-style: solid; border-color: var(--p-line); color: var(--p-mute); }
.st-qp-actions { display: flex; gap: 8px; }
.st-qp-actions .st-qp-dashed:first-child { flex: 1; }
.st-qp-save { border: 1.5px solid var(--p-ink); background: var(--p-sel); padding: 12px 14px 14px; }
.st-qp-save-title { font-family: var(--st-mono); font-size: 10px; letter-spacing: 1.2px; color: var(--p-red); text-transform: uppercase; margin-bottom: 6px; }
.st-qp-save-sum { font-weight: 600; font-size: 12px; color: var(--p-mute); line-height: 1.4; margin-bottom: 10px; }
.st-qp-save-row { display: flex; gap: 8px; }
.st-qp-save-row input { flex: 1; min-width: 0; box-sizing: border-box; font-family: var(--st-sans); font-weight: 700; font-size: 14px; color: var(--p-ink); background: #fff; border: 1.5px solid var(--p-ink); border-radius: 0; padding: 11px 12px; outline: none; }
.st-qp-save-btn { flex-shrink: 0; background: var(--p-ink); color: #fff; border: none; cursor: pointer; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; font-size: 13px; padding: 0 16px; }
.st-qp-replace-title { font-family: var(--st-mono); font-size: 10px; letter-spacing: 1.2px; color: var(--p-mute); text-transform: uppercase; margin: 14px 0 8px; }
.st-qp-replace-chips { display: flex; flex-wrap: wrap; gap: 7px; }
.st-qp-replace-chip { display: flex; align-items: center; gap: 6px; padding: 9px 13px; background: #fff; border: 1.5px solid var(--p-ink); color: var(--p-ink); cursor: pointer; font-family: var(--st-sans); font-weight: 700; font-size: 12.5px; }
.st-qp-cancel { margin-top: 12px; background: none; border: none; cursor: pointer; padding: 0; font-family: var(--st-sans); font-weight: 700; font-size: 12px; color: var(--p-mute); text-decoration: underline; text-underline-offset: 3px; }
.st-qp-note { font-family: var(--st-mono); font-size: 11px; color: var(--p-ink); background: var(--p-yellow); margin: 0; padding: 9px 12px; line-height: 1.4; }

/* ---- sheet CTA ---- */
.st-sheet-cta { width: 100%; background: var(--p-ink); color: #fff; border: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; padding: 20px 18px; margin-top: 8px; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 17px; }
.st-sheet-cta-price { color: var(--p-yellow); }

/* ---- cart drawer (правий) ---- */
.st-cartd-wrap { position: fixed; inset: 0; z-index: 75; pointer-events: none; }
.st-cartd-wrap.st-open { pointer-events: auto; }
.st-cartd-scrim { position: absolute; inset: 0; background: rgba(8, 6, 5, 0.55); opacity: 0; transition: opacity .28s; }
.st-cartd-wrap.st-open .st-cartd-scrim { opacity: 1; }
.st-cartd { position: absolute; top: 0; bottom: 0; right: 0; width: 90%; max-width: 400px; background: var(--p-paper); display: flex; flex-direction: column; transform: translateX(100%); transition: transform .3s cubic-bezier(.2, .85, .25, 1); box-shadow: -8px 0 40px rgba(0, 0, 0, 0.4); }
.st-cartd-wrap.st-open .st-cartd { transform: translateX(0); }
.st-cartd-head { display: flex; align-items: center; justify-content: space-between; padding: 20px 18px 16px; border-bottom: 1px solid var(--p-line); }
.st-cartd-title { font-size: 22px; display: flex; align-items: center; gap: 9px; }
.st-cartd-count { font-family: var(--st-mono); font-weight: 400; font-size: 12px; letter-spacing: 0; background: var(--p-ink); color: #fff; border-radius: 10px; padding: 1px 8px; }
.st-cartd-close { background: none; border: none; cursor: pointer; color: var(--p-ink); font-size: 30px; line-height: 1; padding: 6px 10px; margin: -6px -10px; }
.st-cartd-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 30px; text-align: center; color: var(--p-faint); }
.st-cartd-empty-title { font-size: 18px; color: var(--p-ink); }
.st-cartd-empty-text { font-weight: 500; font-size: 13px; color: var(--p-mute); }
.st-cartd-body { flex: 1; overflow-y: auto; }
.st-cartd-line { display: flex; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--p-line); }
.st-cartd-thumb { width: 64px; height: 64px; object-fit: cover; flex-shrink: 0; }
div.st-cartd-thumb { background: var(--p-cream); }
.st-cartd-main { flex: 1; min-width: 0; }
.st-cartd-line-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.st-cartd-line-name { font-size: 15px; line-height: 1.05; }
.st-cartd-trash { background: none; border: none; cursor: pointer; color: var(--p-faint); padding: 8px; margin: -8px; flex-shrink: 0; display: flex; }
.st-cartd-desc { font-weight: 500; font-size: 11.5px; color: var(--p-mute); margin-top: 4px; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.st-cartd-line-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 9px; }
.st-cartd-line-side { display: flex; align-items: center; gap: 12px; }
.st-cartd-edit { background: none; border: none; cursor: pointer; color: var(--p-red); padding: 0; display: flex; align-items: center; gap: 4px; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.6px; font-size: 11px; }
.st-cartd-line-price { font-size: 15px; white-space: nowrap; }
.st-cartd-add { width: 100%; background: none; border: none; cursor: pointer; text-align: left; padding: 15px 18px; color: var(--p-mute); font-family: var(--st-sans); font-weight: 600; font-size: 13px; display: flex; align-items: center; gap: 8px; }
.st-cartd-foot { border-top: 1px solid var(--p-line); padding: 16px 18px; display: flex; flex-direction: column; gap: 12px; }
.st-cartd-subtotal { display: flex; align-items: baseline; justify-content: space-between; }
.st-cartd-subtotal-label { font-weight: 600; font-size: 14px; color: var(--p-mute); }
.st-cartd-subtotal-value { font-size: 22px; }
.st-cartd-checkout { text-decoration: none; background: var(--p-ink); color: #fff; display: flex; align-items: center; justify-content: space-between; padding: 17px 20px; font-size: 16px; }
.st-cartd-checkout .st-cartd-arrow { color: var(--p-yellow); }
.st-cartd .st-stepper { background: transparent; }

/* ── Чекаут (Фаза 4) ─────────────────────────────────────────── */
.st-co { background: var(--p-paper); min-height: 100dvh; }
.st-co-head { display: flex; align-items: center; gap: 14px; padding: 14px 18px 16px; }
.st-co-back { color: var(--p-ink); display: flex; }
.st-co-title { font-size: 22px; margin: 0; }
.st-co-count { margin-left: auto; font-family: var(--st-mono); font-size: 12px; color: var(--p-mute); white-space: nowrap; }
.st-co-sec { padding: 26px 18px; border-top: 1px solid var(--p-line); }
.st-co-kick { margin-bottom: 14px; }

.st-co-tiles { display: flex; gap: 8px; }
.st-co-tile { flex: 1; text-align: left; padding: 16px 16px 15px; background: var(--p-cream); color: var(--p-ink); border: 2px solid var(--p-line); cursor: pointer; font-family: var(--st-sans); min-height: 44px; }
.st-co-tile.st-on { background: var(--p-red); color: #fff; border-color: var(--p-red); }
.st-co-tile-title { display: block; font-size: 17px; margin-top: 12px; }
.st-co-tile-sub { display: block; font-family: var(--st-mono); font-size: 11px; margin-top: 4px; opacity: .55; }
.st-co-tile.st-on .st-co-tile-sub { opacity: .85; }

/* Chip overlay for the checkout StoreMap (sits inside .st-map-chips, absolute within the map). */
.st-co-map-chip { position: absolute; left: 12px; top: 12px; background: var(--p-ink); color: #fff; display: flex; align-items: center; gap: 7px; padding: 7px 11px; border-radius: 100px; font-family: var(--st-sans); font-weight: 800; font-size: 10.5px; text-transform: uppercase; letter-spacing: -0.2px; white-space: nowrap; }
.st-co-map-dot { width: 7px; height: 7px; border-radius: 4px; background: #3FA34D; flex-shrink: 0; }   /* green = in zone */
.st-co-map-dot-pickup { background: var(--p-yellow); }
.st-co-map-dot-warn { background: var(--p-yellow); }   /* address not found */
.st-co-map-dot-error { background: var(--p-red); }     /* out of delivery zone */
/* Live «en-route» dot — composes with .st-co-map-dot (green + size), adds a soft pulse for the
   order-status courier chip (Task 16). prefers-reduced-motion disables it → static green dot. */
.st-map-dot-live { animation: st-map-dot-pulse 1.4s ease-in-out infinite; }
@keyframes st-map-dot-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .3; } }
@media (prefers-reduced-motion: reduce) { .st-map-dot-live { animation: none; } }

/* ── Store map (Leaflet) — reusable StoreMap.razor canvas + OSM tap overlay ── */
.st-map { position: relative; overflow: hidden; background: #EAE7DF; }
/* Leaflet mounts into the canvas; the #EAE7DF background is the prerender/placeholder look before
   tiles attach. No z-index here — a numeric one would trap Leaflet's attribution control (z 1000) in
   this element's stacking context and break the OSM-link layering below. */
.st-map-canvas { position: absolute; inset: 0; background: #EAE7DF; }
.st-map--checkout { height: 210px; border-top: 1px solid var(--p-line); }
.st-map--order { height: 150px; }
/* Full-surface tap target → OpenStreetMap. z-index 500 sits ABOVE the Leaflet tile pane (400) so the
   whole map opens OSM on tap, but BELOW Leaflet's attribution control (.leaflet-top/.leaflet-bottom,
   z 1000) so OSM's required attribution stays visible and clickable. */
.st-map-osm { position: absolute; inset: 0; z-index: 500; display: block; }
/* Chip overlay — above the tiles/pins, below the attribution. pointer-events:none keeps the whole map
   surface (chip area included) tapping through to the OSM link; the v1 chips are non-interactive
   labels. An interactive chip would opt back in with pointer-events:auto on its own element. */
.st-map-chips { position: absolute; inset: 0; z-index: 700; pointer-events: none; }

.st-co-form { display: flex; flex-direction: column; gap: 14px; }
.st-co-row { display: flex; gap: 10px; }
.st-co-field { display: block; flex: 1; min-width: 0; }
.st-co-w50 { flex: 1 1 50%; }
.st-co-w64 { flex: 1 1 64%; }
.st-co-w36 { flex: 1 1 36%; }
.st-co-w33 { flex: 1 1 33%; }
.st-co-label { font-family: var(--st-mono); font-size: 10.5px; letter-spacing: .6px; color: var(--p-mute); display: block; margin-bottom: 6px; }
.st-co-req { color: var(--p-red); }
.st-co-input { width: 100%; font-family: var(--st-sans); font-weight: 600; font-size: 15px; color: var(--p-ink); background: var(--p-cream); border: 1.5px solid var(--p-line); padding: 12px 14px; outline: none; border-radius: 0; min-height: 44px; }
.st-co-input:focus, .st-co-input.st-filled { border-color: var(--p-ink); }
.st-co-input::placeholder { color: rgba(14, 14, 14, .32); font-weight: 600; }
textarea.st-co-input { resize: none; min-height: 64px; }
.st-co-time { font-family: var(--st-mono); letter-spacing: .5px; }

.st-co-details-toggle { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 12px 14px; border: 1.5px dashed var(--p-line); background: none; cursor: pointer; color: var(--p-ink); font-family: var(--st-sans); min-height: 44px; }
.st-co-details-toggle .st-disp { font-size: 12px; white-space: nowrap; }
.st-co-details-opt { color: var(--p-faint); }
.st-co-chevron { display: flex; transition: transform .2s; }
.st-co-chevron.st-open { transform: rotate(90deg); }

/* Пікер збережених адрес (Task 12) */
.st-co-addr { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.st-co-addr-title { font-family: var(--st-mono); font-size: 10.5px; letter-spacing: .6px; color: var(--p-mute); }
.st-co-addr-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.st-co-addr-chip { padding: 9px 14px; background: var(--p-cream); color: var(--p-ink); border: 1.5px solid var(--p-line); cursor: pointer; font-family: var(--st-sans); font-weight: 600; font-size: 13px; min-height: 40px; }
.st-co-addr-chip.st-on { background: var(--p-ink); color: #fff; border-color: var(--p-ink); }
.st-co-addr-new { border-style: dashed; }
.st-co-addr-save { display: flex; align-items: center; gap: 9px; cursor: pointer; padding: 2px 0; }
.st-co-addr-check { width: 18px; height: 18px; accent-color: var(--p-ink); cursor: pointer; }
.st-co-addr-save-label { font-family: var(--st-sans); font-weight: 600; font-size: 13px; color: var(--p-ink); }

.st-co-pickup-card { display: flex; gap: 13px; padding: 4px 0 18px; }
.st-co-pickup-pin { width: 46px; height: 46px; background: var(--p-red); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-co-pickup-name { font-size: 15px; line-height: 1.12; }
.st-co-pickup-sub { font-weight: 500; font-size: 13px; color: var(--p-mute); margin-top: 5px; }
.st-co-when { display: flex; gap: 8px; }
.st-co-when-btn { flex: 1; padding: 12px 8px; background: var(--p-cream); color: var(--p-ink); border: 1.5px solid var(--p-line); text-align: center; cursor: pointer; font-family: var(--st-sans); min-height: 44px; }
.st-co-when-btn.st-on { background: var(--p-ink); color: #fff; border-color: var(--p-ink); }
.st-co-when-btn .st-disp { font-size: 13px; }
.st-co-when-sub { display: block; font-family: var(--st-mono); font-size: 11px; opacity: .55; margin-top: 3px; }
.st-co-when-btn.st-on .st-co-when-sub { opacity: .85; }

/* Чекаут: склад замовлення */
.st-co-lines { display: flex; flex-direction: column; }
.st-co-line { position: relative; display: flex; gap: 13px; padding: 16px 0; border-bottom: 1px solid var(--p-line); }
.st-co-thumb { width: 76px; height: 76px; object-fit: cover; flex-shrink: 0; background: var(--p-cream); }
.st-co-line-main { flex: 1; min-width: 0; }
.st-co-line-name { font-size: 16px; line-height: 1.08; padding-right: 28px; }
.st-co-line-desc { font-weight: 500; font-size: 12px; color: var(--p-mute); margin-top: 6px; line-height: 1.4; }
.st-co-line-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 11px; }
.st-co-line-side { display: flex; align-items: center; gap: 12px; }
.st-co-line-edit { display: inline-flex; align-items: center; gap: 5px; background: none; border: none; padding: 10px 0; cursor: pointer; color: var(--p-red); font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; font-size: 11px; }
.st-co-line-price { font-size: 16px; min-width: 56px; text-align: right; white-space: nowrap; }
.st-co-trash { position: absolute; top: 10px; right: 0; background: none; border: none; color: var(--p-faint); cursor: pointer; padding: 10px; }
.st-co-add { display: inline-flex; align-items: center; gap: 8px; color: var(--p-red); font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; font-size: 13px; padding: 16px 0 4px; text-decoration: none; min-height: 44px; }
.st-co-empty { font-weight: 600; font-size: 14px; color: var(--p-mute); padding: 8px 0 16px; }

/* Чекаут: checkout-поля з БД */
.st-co-fieldrow { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.st-co-fieldrow-left { display: flex; align-items: center; gap: 13px; min-width: 0; }
.st-co-fieldicon { width: 42px; height: 42px; background: var(--p-cream); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-co-fieldrow-title { font-size: 15px; }
.st-co-fieldrow-help { font-weight: 500; font-size: 12.5px; color: var(--p-mute); margin-top: 3px; }
.st-co-collapse-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; background: none; border: none; padding: 0; cursor: pointer; color: var(--p-ink); font-family: var(--st-sans); min-height: 44px; }
.st-co-collapse-head .st-kicker { margin-bottom: 0; }
.st-co-collapse-side { display: flex; align-items: center; gap: 8px; }
.st-co-collapse-add { font-size: 12px; }
.st-co-field-block textarea.st-co-input { margin-top: 14px; }
.st-co-options { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 6px; }
.st-co-options .st-co-when-btn { flex: 0 1 auto; padding: 12px 16px; }

/* Чекаут: промокод */
.st-co-promo-row { display: flex; gap: 8px; margin-top: 14px; }
.st-co-promo-input { flex: 1; }
.st-co-promo-ok { background: var(--p-ink); color: #fff; border: none; cursor: pointer; font-family: var(--st-sans); font-weight: 800; font-size: 14px; padding: 0 22px; min-height: 44px; }
.st-co-promo-err { font-family: var(--st-mono); font-size: 11px; color: var(--p-red); margin-top: 8px; }
.st-co-promo-applied { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 14px 16px; background: var(--p-sel); border: 1.5px solid var(--p-ink); margin-top: 14px; }
.st-co-promo-label { display: flex; align-items: center; gap: 10px; font-size: 14px; min-width: 0; }
.st-co-promo-check { width: 22px; height: 22px; background: var(--p-yellow); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-co-promo-remove { background: none; border: none; color: var(--p-red); cursor: pointer; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; font-size: 12px; padding: 10px 0; }

/* Чекаут: бонуси Planto (Task 13) */
.st-co-bonus { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 14px 16px; background: var(--p-sel); border: 1.5px solid var(--p-ink); margin-top: 14px; }
.st-co-bonus-plate { font-size: 13px; line-height: 1.35; min-width: 0; }
.st-co-bonus-toggle { flex-shrink: 0; background: var(--p-yellow); color: var(--p-ink); border: 1.5px solid var(--p-ink); cursor: pointer; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; font-size: 12px; padding: 0 18px; min-height: 40px; }
.st-co-bonus-toggle.st-on { background: none; color: var(--p-red); border-color: var(--p-red); }

/* Чекаут: оплата */
.st-co-pay { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.st-co-pay-tile { text-align: left; padding: 15px; background: var(--p-cream); color: var(--p-ink); border: 1.5px solid var(--p-line); cursor: pointer; font-family: var(--st-sans); min-height: 44px; }
.st-co-pay-tile.st-on { background: var(--p-ink); color: #fff; border-color: var(--p-ink); }
.st-co-pay-title { display: block; font-size: 15px; margin-top: 11px; }
.st-co-pay-sub { display: block; font-family: var(--st-mono); font-size: 10px; margin-top: 4px; opacity: .5; line-height: 1.3; }
.st-co-pay-tile.st-on .st-co-pay-sub { opacity: .8; }

/* Чекаут: тоталси + sticky CTA */
.st-co-totals { padding: 26px 18px; background: var(--p-cream); border-top: 1px solid var(--p-line); }
.st-co-totals-rows { display: flex; flex-direction: column; gap: 11px; font-weight: 600; font-size: 14.5px; }
.st-co-trow { display: flex; justify-content: space-between; gap: 12px; }
.st-co-trow > span:first-child { color: var(--p-mute); min-width: 0; }
.st-co-trow > span:last-child { white-space: nowrap; flex-shrink: 0; }
.st-co-free { color: #3FA34D; }
.st-co-neg { color: var(--p-red); }
.st-co-grand { border-top: 1.5px solid var(--p-ink); margin-top: 16px; padding-top: 16px; display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.st-co-grand-label { font-size: 18px; }
.st-co-grand-value { font-size: 30px; white-space: nowrap; }
.st-co-cta { position: sticky; bottom: 0; z-index: 30; background: var(--p-paper); border-top: 1px solid var(--p-line); }
.st-co-cta-btn { width: 100%; background: var(--p-red); color: #fff; border: none; cursor: pointer; padding: 18px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; font-family: var(--st-sans); min-height: 56px; }
.st-co-cta-btn:disabled { opacity: .5; cursor: default; }
.st-co-cta-btn .st-disp { font-size: 18px; white-space: nowrap; }
.st-co-cta-arrow { color: var(--p-yellow); margin-left: 12px; }

/* ── /order/{token} — статус замовлення (Фаза 4, розгорнуто Фазою 5) ──
   .st-order — блоковий контейнер сторінки: секції (таймлайн/рекап/деталі) тягнуться на всю
   ширину рамки, hero — центрована картка; padding-bottom звільняє місце під фіксований
   .st-actionbar (50px кнопки + 24px відступів + запас). */
.st-order { background: var(--p-paper); min-height: 100dvh; padding: 18px 0 calc(110px + env(safe-area-inset-bottom)); }
.st-order-hero { background: var(--p-red); color: #fff; width: 100%; max-width: 420px; margin: 0 auto; box-sizing: border-box; padding: 36px 24px; display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center; }
.st-order-hero.st-order-done { background: var(--p-ink); }
.st-order-hero.st-order-cancelled { background: var(--p-mute); }
/* Бейдж — <h1> сторінки (a11y): font-weight повертає span-вигляд, margin скидає .st-frame h1. */
.st-order-badge { background: var(--p-yellow); color: var(--p-ink); font-family: var(--st-mono); font-size: 11px; font-weight: 400; letter-spacing: 1.3px; padding: 6px 10px; text-transform: uppercase; }
.st-order-title { font-size: 24px; margin: 0; }
.st-order-number { font-family: var(--st-mono); font-size: 13px; opacity: .85; }

/* ── Фаза 5: hero (ETA + прогрес-смужки) ── */
.st-order-eta { font-size: 54px; line-height: 1; letter-spacing: -2px; margin-top: 4px; }
.st-order-eta-caption { font-family: var(--st-mono); font-size: 12px; letter-spacing: .4px; opacity: .85; }
.st-order-segs { display: flex; gap: 6px; width: 100%; max-width: 240px; margin-top: 8px; }
.st-order-seg { flex: 1; height: 6px; border-radius: 2px; background: rgba(var(--p-on-photo), 0.28); }
.st-order-seg.st-fill { background: rgba(var(--p-on-photo), 1); }
.st-order-seg.st-pulse { background: rgba(var(--p-on-photo), 1); animation: st-pulse 1.6s ease-in-out infinite; }
@keyframes st-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

/* ── Фаза 7: банер стану оплати (Pending/Failed) між hero і таймлайном ──
   Ширина hero (420px, центрована картка), крапка переюзує @keyframes st-pulse. */
.st-paybanner { width: 100%; max-width: 420px; margin: 12px auto 0; box-sizing: border-box; padding: 12px 16px; display: flex; align-items: center; gap: 10px; background: var(--p-cream); border: 1px solid var(--p-line); }
.st-paybanner-failed { background: var(--p-red); border-color: var(--p-red); color: #fff; }
.st-paybanner-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--p-ink); animation: st-pulse 1.6s ease-in-out infinite; }
.st-paybanner-text { flex: 1; font-family: var(--st-mono); font-size: 12px; line-height: 1.4; letter-spacing: .2px; }
.st-paybanner-retry { flex: none; border: none; cursor: pointer; background: var(--p-yellow); color: var(--p-ink); padding: 9px 14px; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.3px; font-size: 12px; }
.st-paybanner-retry:disabled { opacity: .5; cursor: default; }

/* Task 13: банер ручної звірки оплати — увага без червоної тривоги (це не «оплата не пройшла»,
   а «отримано, звіряємо»); заголовок + пояснення в стовпчик, без кнопки. */
.st-paybanner-review { align-items: flex-start; background: var(--p-yellow); border-color: var(--p-yellow); color: var(--p-ink); }
.st-paybanner-review .st-paybanner-text { display: flex; flex-direction: column; gap: 4px; }
.st-paybanner-title { font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.3px; font-size: 13px; }

/* Індикатор застарілих даних: показується після 3-х збоїв полінга поспіль (Task 9). */
.st-order-stale { width: 100%; max-width: 420px; margin: 12px auto 0; box-sizing: border-box; padding: 8px 14px; background: var(--p-cream); border: 1px dashed var(--p-line); font-family: var(--st-mono); font-size: 11px; line-height: 1.4; letter-spacing: .2px; color: var(--p-ink); opacity: .75; text-align: center; }

/* ── Фаза 5: вертикальний таймлайн ── */
.st-otl { display: flex; flex-direction: column; gap: 22px; padding: 26px 18px; text-align: left; }
.st-otl-step { position: relative; padding-left: 42px; }
.st-otl-step:not(:last-child)::before { content: ""; position: absolute; left: 13px; top: 32px; bottom: -22px; width: 2px; background: var(--p-line); }
.st-otl-dot { position: absolute; left: 0; top: 0; width: 28px; height: 28px; border-radius: 50%; box-sizing: border-box; display: flex; align-items: center; justify-content: center; }
.st-otl-done .st-otl-dot { background: var(--p-ink); }
.st-otl-active .st-otl-dot { background: var(--p-red); animation: st-pulse 1.6s ease-in-out infinite; }
.st-otl-future .st-otl-dot { background: var(--p-cream); border: 2px solid var(--p-line); }
.st-otl-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.st-otl-title { font-size: 15px; }
.st-otl-future .st-otl-title { color: var(--p-mute); }
.st-otl-time { font-size: 12px; color: var(--p-faint); white-space: nowrap; }
.st-otl-text { font-weight: 500; font-size: 12.5px; color: var(--p-mute); margin-top: 3px; line-height: 1.4; }
.st-otl-future .st-otl-text { color: var(--p-faint); }

/* ── Фаза 5: картка курʼєра ── */
.st-courier { display: flex; align-items: center; gap: 13px; margin-top: 14px; padding: 13px 14px; background: var(--p-cream); border: 1.5px solid var(--p-line); }
.st-courier-avatar { width: 46px; height: 46px; background: var(--p-paper); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-courier-main { min-width: 0; }
.st-courier-name { font-size: 14px; }
.st-courier-actions { display: flex; gap: 8px; margin-top: 8px; }
.st-courier-btn { display: inline-flex; align-items: center; gap: 6px; padding: 9px 13px; min-height: 44px; box-sizing: border-box; background: var(--p-paper); border: 1.5px solid var(--p-ink); color: var(--p-ink); text-decoration: none; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.3px; font-size: 11.5px; }

/* ── Фаза 5: код видачі ── */
.st-pickup { margin-top: 14px; padding: 16px 18px; background: var(--p-yellow); color: var(--p-ink); display: flex; flex-direction: column; gap: 6px; }
.st-pickup-title { opacity: .7; }
.st-pickup-code { font-size: 40px; font-weight: 700; letter-spacing: 10px; line-height: 1; }

/* ── Фаза 5: рекап отримання ── */
.st-order-recap { display: flex; gap: 13px; padding: 22px 18px; border-top: 1px solid var(--p-line); text-align: left; }
.st-order-recap-pin { width: 46px; height: 46px; background: var(--p-red); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.st-order-recap-main { min-width: 0; }
.st-order-recap-title { font-size: 15px; line-height: 1.15; }
.st-order-recap-sub { font-weight: 500; font-size: 13px; color: var(--p-mute); margin-top: 5px; }
.st-order-recap-hint { font-family: var(--st-mono); font-size: 11px; color: var(--p-ink); background: var(--p-yellow); display: inline-block; margin-top: 9px; padding: 6px 9px; line-height: 1.35; }

/* ── Фаза 5: деталі замовлення (<details> — колапс без JS) ── */
.st-order-details { padding: 4px 18px 22px; border-top: 1px solid var(--p-line); text-align: left; }
.st-order-dbox { border: 1.5px solid var(--p-line); background: var(--p-paper); margin-top: 18px; }
.st-order-dhead { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 15px 16px; min-height: 44px; box-sizing: border-box; cursor: pointer; list-style: none; }
.st-order-dhead::-webkit-details-marker { display: none; }
.st-order-dtitle { font-size: 13px; }
.st-order-dchev { display: flex; color: var(--p-faint); transition: transform .2s; }
.st-order-dbox[open] .st-order-dchev { transform: rotate(90deg); }
.st-order-dbody { padding: 0 16px 16px; }
.st-order-item { padding: 12px 0; border-top: 1px solid var(--p-line); }
.st-order-item-top { display: flex; justify-content: space-between; gap: 12px; font-weight: 700; font-size: 14px; }
.st-order-item-price { font-weight: 400; font-size: 12.5px; white-space: nowrap; }
.st-order-item-mods { margin: 6px 0 0; padding-left: 16px; font-weight: 500; font-size: 12px; color: var(--p-mute); line-height: 1.5; }
.st-order-totals { border-top: 1.5px solid var(--p-ink); margin-top: 4px; padding-top: 12px; display: flex; flex-direction: column; gap: 9px; font-weight: 600; font-size: 13.5px; }
.st-order-trow { display: flex; justify-content: space-between; gap: 12px; }
.st-order-trow > span:first-child { color: var(--p-mute); min-width: 0; }
.st-order-trow > span:last-child { white-space: nowrap; flex-shrink: 0; }
.st-order-free { color: #3FA34D; }
.st-order-neg { color: var(--p-red); }
.st-order-grand { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-top: 3px; }
.st-order-grand .st-disp { font-size: 16px; }
.st-order-payrow { display: flex; align-items: center; gap: 8px; margin-top: 3px; font-weight: 600; font-size: 13px; color: var(--p-mute); }
.st-order-paid { color: var(--p-ink); background: var(--p-yellow); padding: 3px 7px; margin-left: auto; }
.st-order-support { display: inline-flex; align-items: center; min-height: 44px; margin-top: 6px; color: var(--p-red); font-weight: 700; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; }

/* ── Фаза 5: нижня фіксована смуга дій (.st-order додає padding-bottom).
   НЕ .st-sticky — той клас належить липкому хедеру (StoreHeader, top: 0) вище у файлі. ── */
.st-actionbar { position: fixed; bottom: 0; left: 50%; transform: translateX(-50%); width: 100%; max-width: 520px; z-index: 40; box-sizing: border-box; display: flex; gap: 10px; padding: 12px 18px calc(12px + env(safe-area-inset-bottom)); background: var(--p-paper); border-top: 1px solid var(--p-line); }
.st-actionbar-btn { flex: 1; display: flex; align-items: center; justify-content: center; min-height: 50px; padding: 13px 16px; box-sizing: border-box; border: none; cursor: pointer; text-decoration: none; font-family: var(--st-sans); font-weight: 800; text-transform: uppercase; letter-spacing: -0.4px; font-size: 14px; }
.st-actionbar-cancel { background: var(--p-paper); color: var(--p-red); border: 1.5px solid var(--p-red); }
.st-actionbar-support { background: var(--p-cream); color: var(--p-ink); border: 1.5px solid var(--p-line); }
.st-actionbar-primary { background: var(--p-red); color: #fff; }
.st-actionbar-btn:disabled { opacity: .5; cursor: default; }
/* Фаза 11: «Оцінити замовлення» поруч із «Замовити ще». У РЯДОК цей підпис не влазить у половину
   кадру на 390px (лишається ~140px під ~150px тексту) і ламається надвоє, тягнучи вгору обидві
   кнопки, — тож термінальна смуга з відгуком стає стовпчиком, а нижній відступ сторінки росте
   рівно на другу кнопку (12+50+10+50+12 = 134px + запас). :has() тут безпечний: без підтримки
   лишається старі 110px, тобто трохи менший запас, а не зламана верстка. */
.st-actionbar--stack { flex-direction: column; }
.st-order:has(.st-actionbar--stack) { padding-bottom: calc(150px + env(safe-area-inset-bottom)); }
.st-actionbar-review { gap: 8px; background: var(--p-paper); color: var(--p-ink); border: 1.5px solid var(--p-ink); }

/* ── Фаза 12: аркадний CTA міні-гри у смузі дій (Cooking) — порт ігрового блоку з
   order-status.jsx (градієнт #2a0d52→#6a1a8f→#a81e6e, CRT-сканлайни, радіальний неон).
   Живе в стовпчиковій смузі, тож support-лінк лишається ПІД ним; st-actionbar--game лише
   піднімає нижній відступ сторінки під вищу кнопку (12 + 78 + 10 + 50 + 12 ≈ 162 + запас).
   Стилі тут, а не в game.css: це сторінка статусу, а не сама гра. ── */
.st-order:has(.st-actionbar--game) { padding-bottom: calc(175px + env(safe-area-inset-bottom)); }
.st-game-cta { position: relative; overflow: hidden; box-sizing: border-box; width: 100%; min-height: 44px; display: flex; align-items: center; gap: 13px; padding: 12px; cursor: pointer; border: 2px solid var(--p-ink); color: #fff; background: linear-gradient(115deg, #2a0d52 0%, #6a1a8f 52%, #a81e6e 100%); font-family: var(--st-sans); }
.st-game-cta:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: 3px; }
/* Декоративні шари: сканлайни на всю кнопку + неон, що витікає праворуч (aria-hidden у розмітці). */
.st-game-cta-scan { position: absolute; inset: 0; pointer-events: none; opacity: .45; background: repeating-linear-gradient(0deg, rgba(0, 0, 0, .4) 0 2px, rgba(0, 0, 0, 0) 2px 4px); }
.st-game-cta-glow { position: absolute; right: -36px; top: 50%; transform: translateY(-50%); width: 130px; height: 130px; border-radius: 50%; pointer-events: none; background: radial-gradient(circle, rgba(255, 47, 176, .45), transparent 68%); }
/* position: relative на вмісті — щоб він лишався НАД декоративними шарами. */
.st-game-cta-sprite { position: relative; flex-shrink: 0; width: 50px; height: 50px; object-fit: contain; image-rendering: pixelated; }
.st-game-cta-text { position: relative; flex: 1; min-width: 0; text-align: left; }
.st-game-cta-badge { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; font-family: var(--st-mono); font-size: 9.5px; font-weight: 700; letter-spacing: 1px; color: var(--p-yellow); }
.st-game-cta-dot { flex-shrink: 0; width: 6px; height: 6px; background: var(--p-red); animation: st-pulse 1.4s ease-in-out infinite; }
.st-game-cta-title { display: block; font-size: 15px; line-height: 1.08; text-wrap: balance; }
.st-game-cta-go { position: relative; flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: 3px; }
.st-game-cta-go-label { font-family: var(--st-mono); font-size: 9px; font-weight: 700; letter-spacing: 1px; color: rgba(255, 255, 255, .55); }
.st-game-cta-arrow { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 50%; background: var(--p-yellow); color: var(--p-ink); font-weight: 800; font-size: 16px; line-height: 1; }
@media (prefers-reduced-motion: reduce) {
    .st-game-cta-dot { animation: none; }
}

/* ── Фаза 5: confirm-оверлей скасування (CancelConfirm). Патерн .st-cartd-wrap: завжди в DOM,
   відкриття — .st-open; кнопки перевикористовують .st-actionbar-btn. z-index 80: над кошиком
   (75) і смугою дій (40), під тостом (90). ── */
.st-cancelc-wrap { position: fixed; inset: 0; z-index: 80; pointer-events: none; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; }
.st-cancelc-wrap.st-open { pointer-events: auto; }
.st-cancelc-scrim { position: absolute; inset: 0; background: rgba(8, 6, 5, 0.55); opacity: 0; transition: opacity .28s; }
.st-cancelc-wrap.st-open .st-cancelc-scrim { opacity: 1; }
.st-cancelc { position: relative; width: 100%; max-width: 520px; box-sizing: border-box; background: var(--p-paper); padding: 22px 18px calc(16px + env(safe-area-inset-bottom)); transform: translateY(105%); transition: transform .3s cubic-bezier(.2, .85, .25, 1); }
.st-cancelc-wrap.st-open .st-cancelc { transform: translateY(0); }
.st-cancelc-text { margin: 0 0 16px; font-weight: 700; font-size: 15px; line-height: 1.45; color: var(--p-ink); }
.st-cancelc-actions { display: flex; gap: 10px; }

/* ── Фаза 11: оверлей відгуку (ReviewOverlay, порт review.jsx) ──
   Повноекранна панель у ширині кадру (як .st-ach-screen), а не нижній лист: три поверхи —
   сталі хедер і CTA, скрол лише в тілі. z-index 85 — над смугою дій (40), кошиком (75) і
   confirm-оверлеєм скасування (80), але ПІД тостом (90): саме тост несе помилку сабміту.
   Вертикальні відступи всередині — через flex-gap, а НЕ margin на h*/p: .st-frame h2/p
   (margin: 0) специфічніші за класовий селектор і мовчки зʼїли б такий margin. ── */
.st-review { position: fixed; inset: 0; z-index: 85; max-width: 520px; margin: 0 auto; display: flex; flex-direction: column; background: var(--p-paper); color: var(--p-ink); }
.st-review--thanks { background: var(--p-red); color: #fff; }

.st-review-head { flex-shrink: 0; display: flex; align-items: center; gap: 14px; padding: calc(14px + env(safe-area-inset-top)) 18px 14px; border-bottom: 1px solid var(--p-line); }
.st-review-back { flex-shrink: 0; width: 44px; height: 44px; margin: -10px; padding: 0; display: flex; align-items: center; justify-content: center; border: none; background: none; color: var(--p-ink); cursor: pointer; }
.st-review-back:disabled { opacity: .5; cursor: default; }
.st-review-back:focus-visible { outline: 3px solid var(--p-red); outline-offset: -4px; }
.st-review-title { font-size: 20px; }
.st-review-no { margin-left: auto; font-size: 12px; color: var(--p-mute); }

.st-review-body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }
.st-review-intro { display: flex; flex-direction: column; gap: 10px; padding: 24px 18px 8px; }
.st-review-intro-title { font-size: clamp(22px, 7vw, 26px); line-height: 1.04; }
.st-review-intro-text { font-weight: 500; font-size: 14px; line-height: 1.45; color: var(--p-mute); }

.st-review-sec { padding: 26px 18px; border-top: 1px solid var(--p-line); }
.st-review-kicker { font-size: 11px; letter-spacing: 1.3px; color: var(--p-red); margin-bottom: 16px; }

/* Мініатюри позицій: картки переносяться (flex-wrap), бо замовлення з 4+ позицій в один рядок
   стиснулося б у нечитабельні смужки. */
.st-review-thumbs { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 22px; }
.st-review-thumb { flex: 1 1 140px; min-width: 0; display: flex; align-items: center; gap: 11px; padding: 8px; background: var(--p-cream); }
.st-review-thumb > picture { flex: none; }
.st-review-thumb-img { width: 48px; height: 48px; flex: none; object-fit: cover; }
.st-review-thumb-name { min-width: 0; font-size: 12.5px; line-height: 1.12; overflow-wrap: anywhere; }

/* Курʼєр (спрайт як у .st-courier) або заклад (іконка) — одна розмітка, різний вміст аватара. */
.st-review-who { display: flex; align-items: center; gap: 13px; margin-bottom: 22px; }
.st-review-who-avatar { width: 48px; height: 48px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; background: var(--p-cream); color: var(--p-ink); }
.st-review-who-main { min-width: 0; }
.st-review-who-name { font-size: 15px; overflow-wrap: anywhere; }
.st-review-who-cap { display: flex; align-items: center; gap: 6px; margin-top: 3px; font-size: 11.5px; color: var(--p-mute); }

.st-review-prompt { font-size: 16px; margin-bottom: 14px; }
.st-review-verdict { display: flex; gap: 10px; }
.st-review-vbtn { flex: 1; min-width: 0; min-height: 52px; padding: 15px 8px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; gap: 9px; cursor: pointer; background: var(--p-paper); color: var(--p-ink); border: 2px solid var(--p-ink); font-family: var(--st-sans); }
.st-review-vbtn .st-disp { font-size: 15px; }
.st-review-vbtn--on { background: var(--p-ink); color: #fff; }
.st-review-vbtn--down.st-review-vbtn--on { background: var(--p-red); border-color: var(--p-red); }
.st-review-vbtn:focus-visible { outline: 3px solid var(--p-red); outline-offset: 3px; }

.st-review-reasons { margin-top: 20px; }
.st-review-reasons-title { font-size: 10.5px; letter-spacing: .6px; color: var(--p-mute); margin-bottom: 12px; }
.st-review-chips { display: flex; flex-wrap: wrap; gap: 9px; }
/* Без white-space: nowrap макета: довгі англійські підписи («Could not find the address») на 390px
   інакше вилазять за край кадру. */
.st-review-chip { min-height: 40px; padding: 10px 15px; border-radius: 100px; cursor: pointer; background: var(--p-cream); color: var(--p-ink); border: 1.5px solid var(--p-line); font-family: var(--st-sans); font-weight: 600; font-size: 13.5px; text-align: left; }
.st-review-chip--on { background: var(--p-ink); color: #fff; border-color: var(--p-ink); }
.st-review-chip--neg.st-review-chip--on { background: var(--p-red); border-color: var(--p-red); }
.st-review-chip:focus-visible { outline: 3px solid var(--p-red); outline-offset: 2px; }

.st-review-textarea { width: 100%; box-sizing: border-box; min-height: 92px; padding: 13px 14px; background: var(--p-cream); border: 1.5px solid var(--p-line); color: var(--p-ink); font-family: var(--st-sans); font-weight: 600; font-size: 15px; line-height: 1.5; resize: vertical; }
.st-review-textarea:focus { outline: none; border-color: var(--p-ink); }
.st-review-textarea::placeholder { color: var(--p-faint); font-weight: 600; }
.st-review-contact { display: flex; align-items: center; gap: 10px; margin-top: 14px; min-height: 44px; font-family: var(--st-sans); font-weight: 600; font-size: 14px; line-height: 1.35; color: var(--p-ink); cursor: pointer; }
.st-review-contact input { width: 20px; height: 20px; flex-shrink: 0; accent-color: var(--p-red); }

/* «Sticky»-кнопка макета — тут сталий нижній поверх фіксованої панелі: те саме враження, без
   залежності від висоти скрольного вмісту. Неактивна (нема обох вердиктів) — кремова з підказкою. */
.st-review-cta { flex-shrink: 0; background: var(--p-paper); border-top: 1px solid var(--p-line); }
.st-review-send { width: 100%; box-sizing: border-box; min-height: 60px; padding: 18px 20px calc(18px + env(safe-area-inset-bottom)); display: flex; align-items: center; justify-content: space-between; gap: 12px; border: none; cursor: default; background: var(--p-cream); color: var(--p-faint); font-family: var(--st-sans); text-align: left; }
.st-review-send .st-disp { font-size: 18px; }
.st-review-send--on { background: var(--p-red); color: #fff; cursor: pointer; }
.st-review-send--on:disabled { opacity: .55; cursor: default; }
.st-review-send:focus-visible { outline: 3px solid var(--p-ink); outline-offset: -4px; }

/* Подяка (R5.7): вміст червоної обгортки .st-review--thanks.
   Вертикальне центрування — auto-марджинами крайніх дітей, а НЕ justify-content: center: у скрольного
   контейнера центрування розкладає надлишок у неспадне «від'ємне поле» зверху, і коли вміст вищий за
   вʼюпорт (ландшафт, великий зум) галочка стає недосяжною скролом. Auto-марджини в переповненні
   схлопуються в 0 — вміст просто починається згори. Порожній екран виглядає так само. */
.st-review-thanks { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; gap: 22px; text-align: center; padding: calc(40px + env(safe-area-inset-top)) 28px calc(40px + env(safe-area-inset-bottom)); }
.st-review-tick { width: 76px; height: 76px; flex-shrink: 0; margin-top: auto; border-radius: 50%; background: #fff; color: var(--p-red); display: flex; align-items: center; justify-content: center; animation: st-review-pop .55s cubic-bezier(.2, 1.2, .3, 1) both; }
@keyframes st-review-pop { 0% { transform: scale(.4); opacity: 0; } 60% { transform: scale(1.12); } 100% { transform: scale(1); opacity: 1; } }
.st-review-thanks-title { font-size: clamp(28px, 9vw, 34px); line-height: 1; }
.st-review-sums { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }
.st-review-sum { display: flex; align-items: center; gap: 8px; padding: 8px 13px; border-radius: 100px; background: rgba(255, 255, 255, 0.16); }
.st-review-sum .st-disp { font-size: 13px; }
.st-review-thanks-text { max-width: 280px; font-weight: 500; font-size: 14.5px; line-height: 1.5; color: rgba(255, 255, 255, 0.92); }
.st-review-doneb { margin-top: 8px; margin-bottom: auto; min-height: 52px; padding: 16px 34px; border: none; cursor: pointer; background: #fff; color: var(--p-ink); font-family: var(--st-sans); font-size: 16px; }
.st-review-doneb:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: 3px; }

/* ---- login ---- (Фаза 8: /login + /login/complete, статичний SSR у storefront-фреймі) */
.st-login { padding: 40px 20px calc(48px + env(safe-area-inset-bottom)); min-height: 70dvh; display: flex; align-items: flex-start; justify-content: center; }
.st-login-card { width: 100%; max-width: 380px; display: flex; flex-direction: column; }
.st-login-logo { width: 132px; height: auto; margin: 0 0 28px; }
.st-login-title { margin: 0; font-family: var(--st-sans); font-weight: 800; font-size: clamp(26px, 8vw, 32px); letter-spacing: -0.8px; line-height: 1.05; color: var(--p-ink); }
.st-login-subtitle { margin: 12px 0 24px; font-weight: 500; font-size: 14.5px; line-height: 1.5; color: var(--p-mute); }
.st-login-error { margin: 0 0 18px; padding: 12px 14px; background: var(--p-sel); border-left: 3px solid var(--p-red); font-weight: 600; font-size: 13.5px; line-height: 1.45; color: var(--p-ink); }
.st-login-hint { margin: 0; padding: 14px 16px; background: var(--p-cream); border: 1px solid var(--p-line); font-weight: 500; font-size: 13.5px; line-height: 1.5; color: var(--p-mute); }
.st-login-form { margin: 0 0 12px; }
.st-login-form:last-child { margin-bottom: 0; }
.st-login-btn { width: 100%; display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 52px; padding: 14px 18px; box-sizing: border-box; border: 1.5px solid var(--p-ink); background: var(--p-paper); cursor: pointer; font-family: var(--st-sans); font-weight: 800; font-size: 15px; letter-spacing: -0.3px; color: var(--p-ink); }
.st-login-btn:hover { background: var(--p-cream); }
.st-login-btn--primary { border-color: var(--p-red); background: var(--p-red); color: #fff; margin-top: 8px; }
.st-login-btn--primary:hover { background: #c40039; }
.st-login-field { display: flex; flex-direction: column; margin: 0 0 18px; }
.st-login-label { margin: 0 0 6px; font-weight: 700; font-size: 12.5px; text-transform: uppercase; letter-spacing: 0.4px; color: var(--p-mute); }
.st-login-input { width: 100%; box-sizing: border-box; min-height: 50px; padding: 13px 14px; border: 1.5px solid var(--p-line); background: var(--p-paper); font-family: var(--st-sans); font-weight: 600; font-size: 15px; color: var(--p-ink); }
.st-login-input:focus { outline: none; border-color: var(--p-ink); }
.st-login-fielderr { margin: 6px 0 0; font-weight: 600; font-size: 12.5px; line-height: 1.4; color: var(--p-red); }

/* ---- cabinet ---- (Фаза 8, Task 9: /cabinet Auto-острів — ProfileHeader, SettingsList, листи) */
.st-cab { background: var(--p-paper); min-height: 100dvh; padding-bottom: calc(28px + env(safe-area-inset-bottom)); }

/* Топ-бар */
.st-cab-topbar { position: sticky; top: 0; z-index: 45; display: flex; align-items: center; gap: 14px; padding: 14px 18px; background: var(--p-paper); border-bottom: 1px solid var(--p-line); }
.st-cab-back { color: var(--p-ink); }
.st-cab-topbar-title { font-size: 16px; }
.st-cab-logo { height: 18px; width: auto; margin-left: auto; }

/* Банер «завершіть профіль» */
.st-cab-banner { margin: 16px 18px 0; padding: 14px 16px; background: var(--p-sel); border-left: 3px solid var(--p-red); display: flex; flex-direction: column; gap: 10px; }
.st-cab-banner-text { font-weight: 600; font-size: 13px; line-height: 1.45; color: var(--p-ink); }
.st-cab-banner-cta { align-self: flex-start; font-size: 12px; color: var(--p-red); text-decoration: none; }

/* ProfileHeader */
.st-cab-profile { display: flex; align-items: center; gap: 16px; padding: 18px 18px 0; }
.st-cab-avatar { width: 76px; height: 76px; flex-shrink: 0; border-radius: 50%; background: var(--p-yellow); overflow: hidden; display: flex; align-items: flex-end; justify-content: center; }
.st-cab-avatar-img { width: 86%; height: 86%; object-fit: contain; object-position: bottom; image-rendering: pixelated; display: block; }
.st-cab-profile-id { flex: 1; min-width: 0; }
.st-cab-profile-name { margin: 0; font-size: 22px; line-height: 1; overflow: hidden; text-overflow: ellipsis; }
.st-cab-profile-meta { font-size: 11px; color: var(--p-mute); margin-top: 10px; line-height: 1.5; }
.st-cab-edit { align-self: flex-start; width: 38px; height: 38px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border: 1.5px solid var(--p-line); background: none; color: var(--p-ink); cursor: pointer; }

/* Баланс у ProfileHeader-зоні + read-only історія бонусів */
.st-cab-bonus-tile { all: unset; box-sizing: border-box; cursor: pointer; display: flex; flex-direction: column; width: calc(100% - 36px); margin: 16px 18px 0; padding: 15px 16px; background: var(--p-ink); color: var(--p-cream); }
.st-cab-bonus-tile:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: 3px; }
.st-cab-bonus-balance { font-size: 26px; line-height: .95; }
.st-cab-bonus-label { margin-top: 7px; font-family: var(--st-sans); font-weight: 600; font-size: 10.5px; line-height: 1.2; opacity: .65; }
.st-cab-bonus-history { padding: 8px 18px calc(24px + env(safe-area-inset-bottom)); }
.st-cab-bonus-entry { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 0; border-bottom: 1px solid var(--p-line); }
.st-cab-bonus-entry-copy { display: flex; flex-direction: column; min-width: 0; gap: 4px; }
.st-cab-bonus-date { font-size: 10.5px; color: var(--p-faint); }
.st-cab-bonus-reason { font-family: var(--st-sans); font-weight: 700; font-size: 13.5px; color: var(--p-ink); }
.st-cab-bonus-amount { flex-shrink: 0; font-weight: 700; font-size: 13px; color: var(--p-ink); }
.st-cab-bonus-amount--positive { color: #2E7D32; }
.st-cab-bonus-empty { margin: 0; padding: 24px 0; font-weight: 600; font-size: 13px; text-align: center; color: var(--p-mute); }

/* Реферальна картка: код/шер + опційне застосування чужого коду */
.st-cab-referral { box-sizing: border-box; width: calc(100% - 36px); margin: 24px 18px 0; padding: 20px 18px; background: var(--p-ink); color: var(--p-cream); }
.st-cab-referral-kicker { margin-bottom: 10px; font-size: 10.5px; letter-spacing: 1.3px; color: var(--p-yellow); }
.st-cab-referral-title { max-width: 390px; margin: 0; font-size: 22px; line-height: 1.04; }
.st-cab-referral-copytext { max-width: 430px; margin: 10px 0 16px; font-weight: 500; font-size: 12.5px; line-height: 1.45; color: rgba(247,246,242,.72); }
.st-cab-referral-codebar { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; border: 1.5px solid rgba(247,246,242,.3); }
.st-cab-referral-code { min-width: 0; padding: 12px 14px; display: flex; align-items: center; font-size: 16px; letter-spacing: 2px; overflow-wrap: anywhere; }
.st-cab-referral-copy, .st-cab-referral-share, .st-cab-referral-applybtn { all: unset; box-sizing: border-box; cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0 15px; font-size: 11.5px; }
.st-cab-referral-copy { background: var(--p-yellow); color: var(--p-ink); }
.st-cab-referral-share { border-left: 1.5px solid rgba(247,246,242,.3); color: var(--p-cream); }
.st-cab-referral-apply { margin-top: 18px; padding-top: 17px; border-top: 1px solid rgba(247,246,242,.22); }
.st-cab-referral-apply-label { display: block; font-size: 14px; color: var(--p-cream); }
.st-cab-referral-apply-hint { margin: 5px 0 11px; font-weight: 500; font-size: 11.5px; line-height: 1.4; color: rgba(247,246,242,.65); }
.st-cab-referral-applyrow { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
.st-cab-referral-input { box-sizing: border-box; width: 100%; min-width: 0; min-height: 46px; padding: 10px 12px; border: 1.5px solid rgba(247,246,242,.38); border-right: 0; border-radius: 0; background: transparent; color: var(--p-cream); font-size: 14px; letter-spacing: 1px; text-transform: uppercase; }
.st-cab-referral-input:focus { outline: none; border-color: var(--p-yellow); }
.st-cab-referral-applybtn { min-height: 46px; background: var(--p-red); color: #fff; }
.st-cab-referral-applybtn:disabled { cursor: default; opacity: .5; }
.st-cab-referral button:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: 3px; position: relative; z-index: 1; }
.st-cab-referral-copy:focus-visible { outline-color: var(--p-red); }
@media (max-width: 390px) {
  .st-cab-referral-codebar { grid-template-columns: minmax(0, 1fr) auto; }
  .st-cab-referral-share { grid-column: 1 / -1; min-height: 42px; border-top: 1.5px solid rgba(247,246,242,.3); border-left: 0; }
}

/* Заголовок секції */
.st-cab-sechead { display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; padding: 26px 18px 14px; }
.st-cab-sechead-copy { min-width: 0; }
.st-cab-sechead-kicker { font-size: 10.5px; letter-spacing: 1.3px; color: var(--p-faint); margin-bottom: 6px; }
.st-cab-sechead-line { display: flex; align-items: baseline; gap: 9px; }
.st-cab-sechead-title { margin: 0; font-size: 21px; line-height: 1.04; white-space: nowrap; }
.st-cab-sechead-count { flex-shrink: 0; font-size: 11px; color: var(--p-ink); background: var(--p-cream); border: 1px solid var(--p-line); padding: 2px 8px; white-space: nowrap; }
.st-cab-sechead-action { all: unset; cursor: pointer; flex-shrink: 0; font-family: var(--st-sans); font-weight: 700; font-size: 13px; color: var(--p-red); display: flex; align-items: center; gap: 3px; white-space: nowrap; }
.st-cab-sechead-arrow { font-weight: 800; }

/* SettingsList */
.st-cab-settings { margin: 0 18px; border: 1.5px solid var(--p-line); }
.st-cab-row { all: unset; box-sizing: border-box; width: 100%; display: flex; align-items: center; gap: 13px; padding: 15px 16px; cursor: pointer; }
.st-cab-row + .st-cab-row { border-top: 1px solid var(--p-line); }
.st-cab-row--disabled { cursor: default; opacity: .55; }
.st-cab-row-icon { width: 34px; height: 34px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; background: var(--p-cream); color: var(--p-ink); }
.st-cab-row-body { flex: 1; min-width: 0; }
.st-cab-row-label { display: block; font-family: var(--st-sans); font-weight: 700; font-size: 14.5px; color: var(--p-ink); }
.st-cab-row-hint { display: block; font-family: var(--st-sans); font-weight: 500; font-size: 11.5px; color: var(--p-mute); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Вийти з акаунта */
.st-cab-logout-form { margin: 14px 18px 0; }
.st-cab-logout { all: unset; box-sizing: border-box; width: 100%; text-align: center; cursor: pointer; font-size: 13px; color: var(--p-red); padding: 8px 0; }

/* Стан транспортного збою (ретрай, без редіректа) */
.st-cab-retry { min-height: 60dvh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; padding: 40px 24px; text-align: center; }
.st-cab-retry-text { margin: 0; font-weight: 600; font-size: 14.5px; line-height: 1.5; color: var(--p-mute); }
.st-cab-retry-btn { all: unset; cursor: pointer; font-size: 13px; color: var(--p-ink); border: 1.5px solid var(--p-ink); padding: 12px 22px; }

/* Нижні листи кабінету (CabSheet) */
.st-cab-scrim { position: fixed; inset: 0; z-index: 90; background: rgba(8, 6, 5, 0.55); display: flex; flex-direction: column; justify-content: flex-end; align-items: center; }
.st-cab-sheet { position: relative; width: 100%; max-width: 520px; max-height: 88vh; display: flex; flex-direction: column; background: var(--p-paper); border-top-left-radius: 22px; border-top-right-radius: 22px; animation: st-cab-sheet-up .32s cubic-bezier(.2, .85, .25, 1); }
@keyframes st-cab-sheet-up { from { transform: translateY(100%); } to { transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) {
    .st-cab-sheet { animation: none; }
}
.st-cab-sheet-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; padding: 14px 20px 12px; border-bottom: 1px solid var(--p-line); }
.st-cab-sheet-heading { min-width: 0; }
.st-cab-sheet-kicker { font-size: 10px; letter-spacing: 1.2px; color: var(--p-faint); margin-bottom: 4px; }
.st-cab-sheet-title { margin: 0; font-size: 22px; line-height: 1; }
.st-cab-sheet-close { all: unset; cursor: pointer; font-size: 28px; line-height: 1; color: var(--p-ink); }
.st-cab-sheet-body { overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }

/* Форма/вміст листів */
.st-cab-form { padding: 18px 18px calc(24px + env(safe-area-inset-bottom)); }
.st-cab-lead { margin: 0 0 16px; font-weight: 500; font-size: 12.5px; line-height: 1.45; color: var(--p-mute); }
.st-cab-textarea { width: 100%; box-sizing: border-box; min-height: 120px; padding: 13px 14px; border: 1.5px solid var(--p-line); background: var(--p-paper); font-family: var(--st-sans); font-weight: 600; font-size: 15px; line-height: 1.5; color: var(--p-ink); resize: vertical; }
.st-cab-textarea:focus { outline: none; border-color: var(--p-ink); }
.st-cab-counter { margin: 6px 0 0; font-size: 11px; color: var(--p-faint); text-align: right; }
/* Підказка під полем листа (фаза 10: «для святкового сюрпризу 🎂») — місце помилки .st-login-fielderr,
   тож метрики збігаються: одна й та сама лінія тексту з'являється в обох станах поля. */
.st-cab-fieldhint { margin: 6px 0 0; font-weight: 500; font-size: 12.5px; line-height: 1.4; color: var(--p-mute); }
.st-cab-save { box-sizing: border-box; width: 100%; margin-top: 18px; min-height: 52px; display: flex; align-items: center; justify-content: center; border: 1.5px solid var(--p-red); background: var(--p-red); color: #fff; cursor: pointer; font-size: 15px; letter-spacing: -0.3px; }
.st-cab-save:hover { background: #c40039; }
.st-cab-save:disabled { opacity: .5; cursor: default; }

/* Support-лист */
.st-cab-support { padding: 16px 18px calc(24px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 10px; }
.st-cab-support-link { display: flex; align-items: center; gap: 13px; padding: 15px; border: 1.5px solid var(--p-line); text-decoration: none; color: var(--p-ink); }
.st-cab-support-icon { flex-shrink: 0; display: flex; color: var(--p-ink); }
.st-cab-support-body { min-width: 0; }
.st-cab-support-label { display: block; font-family: var(--st-sans); font-weight: 700; font-size: 14.5px; color: var(--p-ink); }
.st-cab-support-value { display: block; font-size: 11.5px; color: var(--p-mute); margin-top: 2px; }

/* ── Кабінет: історія замовлень (Task 10, дизайн OrdersBlock) ── */
.st-cab-orders { margin: 0 18px; display: flex; flex-direction: column; gap: 12px; }
.st-cab-order { border: 1.5px solid var(--p-line); background: var(--p-paper); }
.st-cab-order-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--p-line); text-decoration: none; color: inherit; }
.st-cab-order-idline { display: flex; align-items: center; gap: 9px; min-width: 0; }
.st-cab-order-no { font-size: 14px; }
.st-cab-order-chip { flex-shrink: 0; font-size: 10.5px; padding: 2px 7px; white-space: nowrap; }
.st-cab-order-chip--active { background: var(--p-sel); color: var(--p-ink); }
.st-cab-order-chip--done { background: rgba(63, 163, 77, 0.14); color: #2E7D32; }
.st-cab-order-chip--cancelled { background: rgba(224, 1, 68, 0.10); color: var(--p-red); }
.st-cab-order-meta { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.st-cab-order-date { font-size: 10.5px; color: var(--p-faint); white-space: nowrap; }
.st-cab-order-foot { display: flex; gap: 10px; align-items: center; padding: 12px 14px; }
.st-cab-order-copy { flex: 1; min-width: 0; }
.st-cab-order-items { font-family: var(--st-sans); font-weight: 700; font-size: 13px; color: var(--p-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-cab-order-total { font-size: 11px; color: var(--p-mute); margin-top: 3px; }
.st-cab-order-repeat { flex-shrink: 0; display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--p-ink); border: 1.5px solid var(--p-ink); background: none; padding: 8px 12px; cursor: pointer; }
.st-cab-order-repeat:disabled { opacity: .5; cursor: default; }

.st-cab-orders-empty { margin: 0 18px; border: 1.5px dashed var(--p-line); padding: 24px 18px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 12px; }
.st-cab-orders-empty-text { margin: 0; font-weight: 600; font-size: 13px; color: var(--p-mute); }
.st-cab-orders-empty-cta { font-size: 13px; color: #fff; background: var(--p-red); border: 1.5px solid var(--p-red); padding: 11px 20px; text-decoration: none; }

.st-cab-orders-full { padding: 16px 18px calc(24px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 12px; }
.st-cab-more { width: 100%; box-sizing: border-box; margin-top: 4px; min-height: 48px; display: flex; align-items: center; justify-content: center; border: 1.5px solid var(--p-ink); background: none; color: var(--p-ink); cursor: pointer; font-size: 13px; }
.st-cab-more:disabled { opacity: .5; cursor: default; }

/* ── Кабінет: адреси (Task 10) ── */
.st-cab-addr-wrap { padding: 16px 18px calc(24px + env(safe-area-inset-bottom)); }
.st-cab-addr-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.st-cab-addr { display: flex; align-items: flex-start; gap: 10px; border: 1.5px solid var(--p-line); padding: 13px 14px; }
.st-cab-addr-body { flex: 1; min-width: 0; }
.st-cab-addr-titleline { display: flex; align-items: center; gap: 8px; }
.st-cab-addr-label { font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.st-cab-addr-badge { flex-shrink: 0; font-size: 9.5px; letter-spacing: 0.6px; background: var(--p-yellow); color: var(--p-ink); padding: 2px 7px; }
.st-cab-addr-line { font-family: var(--st-sans); font-weight: 500; font-size: 12px; color: var(--p-mute); margin-top: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.st-cab-addr-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.st-cab-addr-btn { width: 34px; height: 34px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border: 1.5px solid var(--p-line); background: none; color: var(--p-ink); cursor: pointer; }
.st-cab-addr-btn:disabled { opacity: .5; cursor: default; }
.st-cab-addr-btn--del { color: var(--p-red); }
.st-cab-addr-add { width: 100%; box-sizing: border-box; min-height: 48px; display: flex; align-items: center; justify-content: center; gap: 8px; border: 1.5px dashed var(--p-line); background: none; color: var(--p-ink); cursor: pointer; font-size: 13px; }

/* Форма адреси: реюз .st-login-* полів + багатоколонковий рядок і чекбокс «основна» */
.st-cab-arow { display: flex; gap: 12px; margin: 0 0 18px; }
.st-cab-arow .st-login-field { flex: 1 1 0; min-width: 0; margin: 0; }
.st-cab-arow .st-login-field.st-cab-af-wide { flex: 2 1 0; }
.st-cab-anote { min-height: 64px; resize: vertical; line-height: 1.4; }
.st-cab-check { display: flex; align-items: center; gap: 10px; margin: 2px 0 4px; font-family: var(--st-sans); font-weight: 600; font-size: 14px; color: var(--p-ink); cursor: pointer; }
.st-cab-check input { width: 20px; height: 20px; accent-color: var(--p-red); }

/* ── Кабінет: досягнення (Фаза 10, Task 17 — плашка + бейдж стилю «Плашка») ── */
/* Плашка очок: порт PointsProgress (cabinet-blocks.jsx:74-90). Кремова, з лінією-рамкою —
   свідомо НЕ ink, щоб не сперечатися з бонус-тайлом просто над нею. */
.st-ach-plate { all: unset; box-sizing: border-box; cursor: pointer; display: block; width: calc(100% - 36px); margin: 12px 18px 0; padding: 15px 16px; background: var(--p-cream); border: 1.5px solid var(--p-line); }
/* Фокус-кільце червоне, а не жовте як у бонус-тайла: тут фон кремовий, і жовте по ньому не читалося б
   (прецедент — .st-cab-referral-copy:focus-visible). */
.st-ach-plate:focus-visible { outline: 3px solid var(--p-red); outline-offset: 3px; }
.st-ach-plate-head { display: flex; align-items: center; gap: 7px; margin-bottom: 10px; }
.st-ach-plate-icon { display: flex; flex-shrink: 0; color: var(--p-red); }
.st-ach-plate-title { font-size: 14px; color: var(--p-ink); }
.st-ach-plate-dot { width: 8px; height: 8px; flex-shrink: 0; border-radius: 50%; background: var(--p-red); }
.st-ach-plate-points { margin-left: auto; font-size: 11.5px; color: var(--p-mute); white-space: nowrap; }
.st-ach-plate-summary { display: block; margin-top: 9px; font-family: var(--st-sans); font-weight: 600; font-size: 11.5px; line-height: 1.35; color: var(--p-mute); }

/* Смужка прогресу (CabProgress, cabinet-ui.jsx:106-112) — спільна для плашки, рейки й листа деталей. */
.st-ach-bar { display: block; height: 7px; border-radius: 100px; background: rgba(14, 14, 14, 0.10); overflow: hidden; }
.st-ach-bar-fill { display: block; height: 100%; border-radius: 100px; background: var(--p-red); transition: width .5s cubic-bezier(.2, .8, .25, 1); }

/* Бейдж (AchBadge, стиль «Плашка», cabinet-ui.jsx:150-156). Розмір задає компонент інлайном; колір
   гліфа успадковується через currentColor, тож три стани — це три класи, а не три набори пропсів. */
.st-ach-badge { position: relative; box-sizing: border-box; flex-shrink: 0; overflow: hidden; display: inline-flex; align-items: center; justify-content: center; background: var(--p-cream); border: 2px solid var(--p-line); color: var(--p-faint); }
.st-ach-badge--started { background: var(--p-paper); color: var(--p-ink); }
.st-ach-badge--done { background: var(--p-red); border-color: var(--p-ink); color: #fff; }
.st-ach-badge-strip { position: absolute; top: 0; left: 0; right: 0; height: 6px; background: var(--p-ink); }
.st-ach-badge-glyph { line-height: 1; }

/* ── Кабінет: шоукейс-рейка досягнень (Task 18, порт AchShowcase mode='rail') ── */
/* Скрол без скролбара — той самий патерн, що .st-drink-rail (scrollbar-width + ::-webkit-scrollbar).
   Бічний padding 18px повторює поля секцій кабінету, тож перша картка стоїть під заголовком, а
   остання не прилипає до краю; scroll-padding тримає snap на тій самій сітці. */
.st-ach-rail { display: flex; gap: 12px; overflow-x: auto; padding: 2px 18px 8px; scroll-snap-type: x proximity; scroll-padding: 0 18px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.st-ach-rail::-webkit-scrollbar { display: none; }

/* Картка 130px: flex: 0 0 — рейка НЕ стискає її під ширину екрана (інакше 8 карток злиплися б у
   нечитабельні смужки замість того, щоб виїхати за край і скролитися). */
.st-ach-card { all: unset; box-sizing: border-box; cursor: pointer; flex: 0 0 130px; scroll-snap-align: start; display: flex; flex-direction: column; padding: 13px 13px 14px; background: var(--p-paper); border: 1.5px solid var(--p-line); }
.st-ach-card--done { border-color: var(--p-ink); }
.st-ach-card:focus-visible { outline: 3px solid var(--p-red); outline-offset: 3px; }
/* Два рядки назви фіксованої висоти: без неї сусідні картки роз'їжджаються по вертикалі, бо смужка
   прогресу стрибає слідом за довжиною назви. */
.st-ach-card-name { margin-top: 11px; font-size: 12.5px; line-height: 1.05; height: 26px; overflow: hidden; overflow-wrap: anywhere; color: var(--p-ink); }
.st-ach-card-state { margin-top: 8px; display: flex; align-items: center; gap: 3px; font-size: 9.5px; letter-spacing: 0.3px; color: var(--p-red); }
.st-ach-card-bar { margin-top: 10px; height: 5px; }
.st-ach-card-points { margin-top: 9px; display: flex; align-items: center; gap: 3px; font-size: 10.5px; color: var(--p-faint); }
.st-ach-card--done .st-ach-card-points { color: var(--p-red); }

/* ── Кабінет: повноекранний екран досягнень (Task 19, порт AchievementsScreen) ── */
/* НЕ .st-cab-scrim: це не нижній лист, а панель, що виїжджає збоку. z-index 88 — СВІДОМО нижче за
   90 листів, бо лист деталей мусить лягати поверх екрана (стекінг cabinet.jsx:104-105).
   max-width + margin:auto повторює .st-frame (520px), тож на десктопі панель не розтягується на всю
   ширину вікна, а стоїть рівно над кадром сторінки. */
.st-ach-screen { position: fixed; inset: 0; z-index: 88; max-width: 520px; margin: 0 auto; display: flex; flex-direction: column; background: var(--p-paper); animation: st-ach-slide-in .3s cubic-bezier(.2, .85, .25, 1); }
@keyframes st-ach-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }
@media (prefers-reduced-motion: reduce) {
    .st-ach-screen { animation: none; }
}

/* Хедер ink: сталий (flex-shrink:0) — скролиться лише список нижче. */
.st-ach-screen-head { flex-shrink: 0; background: var(--p-ink); color: var(--p-cream); padding: calc(16px + env(safe-area-inset-top)) 18px 18px; }
.st-ach-screen-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.st-ach-screen-back { all: unset; cursor: pointer; display: flex; flex-shrink: 0; color: var(--p-cream); }
.st-ach-screen-back:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: 3px; }
.st-ach-screen-title { margin: 0; font-size: 22px; line-height: 1; color: var(--p-cream); }

/* Два тайли: акцентний (очки) і напівпрозорий (лічильник). gap 2px — шов прототипу, не проміжок.
   Клас навмисно st-ach-stat-, а не st-ach-tile-: нижче в листі деталей живе шкала щаблів
   .st-ach-tier-, і дві сімʼї, що різняться однією літерою, читалися б як одруківка. */
.st-ach-stats { display: flex; gap: 2px; }
.st-ach-stat { flex: 1 1 0; min-width: 0; padding: 12px 14px; background: rgba(247, 246, 242, 0.10); }
.st-ach-stat--accent { background: var(--p-red); }
.st-ach-stat-value { display: flex; align-items: center; gap: 4px; font-size: 24px; line-height: .9; color: var(--p-cream); }
.st-ach-stat--accent .st-ach-stat-value { color: #fff; }
.st-ach-stat-label { display: block; margin-top: 5px; font-family: var(--st-sans); font-weight: 600; font-size: 10.5px; line-height: 1.2; color: rgba(247, 246, 242, 0.65); }
.st-ach-stat--accent .st-ach-stat-label { color: rgba(255, 255, 255, 0.85); }

/* Чіпи родин: сталий рядок під хедером, горизонтальний скрол без скролбара (патерн .st-ach-rail). */
.st-ach-fams { flex-shrink: 0; display: flex; gap: 8px; overflow-x: auto; padding: 14px 18px; border-bottom: 1px solid var(--p-line); scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.st-ach-fams::-webkit-scrollbar { display: none; }
.st-ach-fam { all: unset; box-sizing: border-box; cursor: pointer; flex-shrink: 0; white-space: nowrap; font-size: 12px; padding: 7px 13px; background: var(--p-cream); color: var(--p-mute); }
.st-ach-fam--on { background: var(--p-ink); color: #fff; }
.st-ach-fam:focus-visible { outline: 3px solid var(--p-red); outline-offset: 2px; }

.st-ach-screen-body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; padding: 6px 18px calc(24px + env(safe-area-inset-bottom)); }
.st-ach-sec-head { display: flex; align-items: baseline; gap: 8px; padding: 14px 0 2px; }
.st-ach-sec-title { font-size: 15px; color: var(--p-ink); }
.st-ach-sec-count { font-size: 10.5px; color: var(--p-faint); }

/* Рядок списку (порт AchCard, cabinet-ui.jsx:160-193). Розділювач — верхня лінія кожного рядка,
   крім першого в секції: так секції не злипаються подвійною лінією під своїм заголовком. */
.st-ach-row { all: unset; box-sizing: border-box; width: 100%; display: flex; align-items: center; gap: 13px; padding: 13px 4px; cursor: pointer; border-top: 1px solid var(--p-line); }
/* Саме сусідній селектор, а не :first-of-type: заглушки «???» — це div, як і сам заголовок секції,
   тож :first-of-type у прихованій секції влучив би в заголовок і лишив би перший рядок із лінією. */
.st-ach-sec-head + .st-ach-row { border-top: none; }
.st-ach-row--hidden { cursor: default; }
.st-ach-row:focus-visible { outline: 3px solid var(--p-red); outline-offset: -3px; }
.st-ach-row-body { flex: 1; min-width: 0; }
.st-ach-row-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.st-ach-row-name { font-size: 15.5px; color: var(--p-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-ach-row-points { flex-shrink: 0; display: flex; align-items: center; gap: 3px; font-size: 11.5px; color: var(--p-faint); white-space: nowrap; }
.st-ach-row--done .st-ach-row-points { color: var(--p-red); }
.st-ach-row-blurb { display: block; margin-top: 3px; font-family: var(--st-sans); font-weight: 500; font-size: 12.5px; line-height: 1.3; color: var(--p-mute); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-ach-row-state { display: flex; align-items: center; gap: 6px; margin-top: 7px; font-size: 10.5px; letter-spacing: .3px; color: var(--p-red); }
.st-ach-row-prog { display: block; margin-top: 8px; }
.st-ach-row-bar { height: 6px; }
.st-ach-row-legend { display: flex; justify-content: space-between; gap: 8px; margin-top: 4px; font-size: 10px; color: var(--p-faint); }

/* ── Кабінет: лист деталей досягнення (Task 19, порт AchSheet) ── */
/* Scrim переюзує .st-cab-scrim (z-index 90) — саме він і кладе лист ПОВЕРХ екрана (88). */
.st-ach-sheet { position: relative; width: 100%; max-width: 520px; max-height: 92vh; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; box-sizing: border-box; background: var(--p-paper); border-top-left-radius: 22px; border-top-right-radius: 22px; padding: 10px 22px calc(26px + env(safe-area-inset-bottom)); animation: st-cab-sheet-up .32s cubic-bezier(.2, .85, .25, 1); }
@media (prefers-reduced-motion: reduce) {
    .st-ach-sheet { animation: none; }
}
.st-ach-sheet-grab { width: 40px; height: 4px; border-radius: 3px; background: var(--p-line); margin: 0 auto 18px; }
.st-ach-sheet-top { display: flex; flex-direction: column; align-items: center; text-align: center; }
.st-ach-sheet-fam { margin: 16px 0 6px; font-size: 10.5px; letter-spacing: 1.3px; color: var(--p-faint); text-transform: uppercase; }
.st-ach-sheet-name { margin: 0; font-size: 26px; line-height: 1; color: var(--p-ink); }
.st-ach-sheet-blurb { margin: 8px 0 0; font-family: var(--st-sans); font-weight: 500; font-size: 14px; line-height: 1.45; color: var(--p-mute); text-wrap: pretty; }

/* Шкала щаблів: здобутий — кремовий фон + ink-рамка, решта — прозорий. */
.st-ach-tiers { margin-top: 20px; display: flex; flex-direction: column; gap: 8px; }
.st-ach-tier { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border: 1.5px solid var(--p-line); }
.st-ach-tier--on { background: var(--p-cream); border-color: var(--p-ink); }
.st-ach-tier-label { flex: 0 0 62px; font-size: 13px; color: var(--p-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.st-ach-tier--on .st-ach-tier-label { color: var(--p-ink); }
.st-ach-tier-goal { flex: 1; min-width: 0; font-size: 11.5px; color: var(--p-mute); }
/* margin-left:auto тримає очки праворуч і тоді, коли комірки порога в рядку НЕМАЄ (лейбл сам несе
   число — together/maximalist): без неї зник би саме той flex:1, який відсував очки до краю. При
   наявному порозі auto-марж нічого не робить — вільного місця вже не лишається. */
.st-ach-tier-pts { flex-shrink: 0; margin-left: auto; display: flex; align-items: center; gap: 4px; font-size: 11.5px; color: var(--p-faint); }
.st-ach-tier--on .st-ach-tier-pts { color: var(--p-red); }
.st-ach-tier-star { flex-shrink: 0; display: flex; color: var(--p-red); }

.st-ach-sheet-prog { margin-top: 20px; }
.st-ach-sheet-bar { height: 9px; }
.st-ach-sheet-legend { display: flex; justify-content: space-between; gap: 8px; margin-top: 6px; font-size: 11.5px; color: var(--p-mute); }

/* Реворд-стріп: очки (акцент, коли здобуто) + гривні. */
.st-ach-rewards { display: flex; gap: 10px; margin-top: 20px; }
.st-ach-reward { flex: 1 1 0; min-width: 0; padding: 13px 14px; background: var(--p-cream); border: 2px solid var(--p-line); }
.st-ach-reward--pts { border-color: var(--p-ink); }
.st-ach-reward--done { background: var(--p-red); border-color: var(--p-ink); }
.st-ach-reward-label { display: block; font-size: 10px; letter-spacing: .6px; color: var(--p-mute); }
.st-ach-reward--done .st-ach-reward-label { color: rgba(255, 255, 255, 0.8); }
.st-ach-reward-value { display: flex; align-items: center; gap: 5px; margin-top: 3px; font-size: 22px; line-height: 1; color: var(--p-ink); }
.st-ach-reward--done .st-ach-reward-value { color: #fff; }
.st-ach-reward-note { display: block; margin-top: 5px; font-family: var(--st-sans); font-weight: 600; font-size: 10.5px; color: var(--p-mute); }

/* Жовтий hint-бокс «Як відкрити …» — прозорий жовтий, щоб не сперечатися з червоним акцентом. */
.st-ach-hint { display: flex; align-items: flex-start; gap: 9px; margin-top: 16px; padding: 12px 14px; background: rgba(255, 238, 7, 0.16); border: 1px solid rgba(255, 238, 7, 0.5); }
.st-ach-hint-icon { flex-shrink: 0; margin-top: 1px; display: flex; color: var(--p-ink); }
.st-ach-hint-text { font-family: var(--st-sans); font-weight: 600; font-size: 13px; line-height: 1.4; color: var(--p-ink); }

.st-ach-sheet-cta { box-sizing: border-box; width: 100%; margin-top: 18px; padding: 15px 0; border: none; cursor: pointer; background: var(--p-ink); color: #fff; font-size: 15px; }

/* ── Фаза 12: повноекранний оверлей міні-гри (GameOverlay, порт блоку mini-game overlay з
   order-status.jsx). Класи НЕ st-game-* — цей префікс уже зайняв аркадний CTA у смузі дій
   (.st-game-cta*), і спільний корінь читався б як «CTA всередині оверлея».
   z-index 86 — над оверлеєм відгуку (85), смугою дій (40), кошиком (75) і confirm-скасуванням
   (80), але ПІД тостом (90): тост сторінки має лишатися видимим і поверх гри.
   Кадр: 100% до 520px, як решта сторфронту; тло чорне — під канвас гри, а не під папір. ── */
.st-arcade { position: fixed; inset: 0; z-index: 86; background: #000; display: flex; justify-content: center; }
.st-arcade-inner { position: relative; width: 100%; max-width: 520px; height: 100%; display: flex; flex-direction: column; }
.st-arcade-head { flex-shrink: 0; display: flex; align-items: center; gap: 12px; padding: calc(8px + env(safe-area-inset-top)) 14px 8px; background: var(--p-ink); color: #fff; }
/* ≥44px (R5.2): вертикальний тач-таргет тримає min-height, горизонтальний — сам підпис. */
.st-arcade-back { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 4px; border: none; background: none; color: #fff; cursor: pointer; font-family: var(--st-sans); font-size: 13px; }
.st-arcade-back:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: -2px; }
.st-arcade-name { margin-left: auto; font-size: 9.5px; font-weight: 700; letter-spacing: 1px; color: var(--p-yellow); white-space: nowrap; }
/* position: relative — база для шару стану, який лежить ПОВЕРХ фрейма, доки той не завантажився. */
.st-arcade-frame { position: relative; flex: 1; min-height: 0; }
.st-arcade-iframe { display: block; width: 100%; height: 100%; border: 0; background: #000; }
.st-arcade-state { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 24px; box-sizing: border-box; background: #000; color: #fff; text-align: center; }
.st-arcade-state-text { margin: 0; font-family: var(--st-mono); font-size: 12px; line-height: 1.5; color: rgba(255, 255, 255, .8); }
.st-arcade-exit { min-height: 44px; padding: 12px 22px; cursor: pointer; background: none; border: 2px solid var(--p-yellow); color: var(--p-yellow); font-family: var(--st-sans); font-size: 14px; }
.st-arcade-exit:focus-visible { outline: 3px solid var(--p-yellow); outline-offset: 3px; }
