/* Manrope is already served locally by frontend/styles.css from /assets/fonts.
   The prototype pulled it from a CDN; production must not depend on an external host. */
/* SmartSkin — O05 result presentation styles.
 *
 * Split out of frontend/styles.css so the result layer is one reviewable module.
 * Loaded by frontend/index.html with a content-addressed ?v= token equal to
 * sha256 of this file; tests/cacheBustContentAddressed.test.js enforces that.
 *
 * Layer 1 below is the previously accepted O05 shell/token/runtime-bridge block,
 * moved verbatim. It owns the Telegram safe-area bridge and the bottom sheet, and
 * live Telegram insets deliberately win over any preview geometry.
 *
 * Layer 2 is the Warm O05 V2 presentation layer, taken from the owner-accepted
 * targets in incoming/o05-warm-v2/ (with-photo 8729b964…, without-photo d8ed70e6…).
 * Design-Lab-only rules (panel, phone chrome, viewport/font/stress controls) are
 * NOT carried over.
 */

/* ============================ Layer 1: O05 shell ============================ */
/* O05 literal internal Mini App extraction from the accepted V4 authority. */

/* Author display rules (flex/grid) beat the UA style for [hidden]. Without this the
   single-layer selector, the empty product image and other conditionally hidden
   elements stay visible. */
body[data-view="result"] [hidden]{display:none!important}

body[data-view="result"] {
  --bg:#f4f2ee; --surface:#fff; --surface-2:#faf7f3; --ink:#191613; --muted:#7e756e;
  --line:#e7dfd8; --soft:#f1e2d6;
  /* Reuse the Mini App tokens declared in styles.css for this same view.
     No O05-only accent hex. */
  --accent: var(--ss-accent);
  --accent-2: #936649;
  --o05-active-bg: var(--ss-option-selected-bg);
  --o05-active-fg: var(--ss-text);
  --green:#e7f3e9; --shadow:0 18px 55px rgba(53,38,27,.14);
  --font:"Manrope","Inter",-apple-system,BlinkMacSystemFont,sans-serif;
  --lab-card-radius:26px;
  --lab-content-pad:14px;
  --lab-section-gap:12px;
  --lab-photo-height:400px;
  --content-safe-top:calc(var(--tg-safe-area-inset-top,0px) + var(--tg-content-safe-area-inset-top,0px) + 8px);
  --ios-home-safe:var(--tg-content-safe-area-inset-bottom,34px);
  margin:0;
  min-height:100%;
  overflow:hidden;
  color:var(--ink);
  background:var(--bg);
  color-scheme:light;
  font-family:var(--font);
  font-synthesis:none;
  text-rendering:optimizeLegibility;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
body[data-view="result"] .device button:focus-visible{outline:3px solid rgba(185,139,104,.35);outline-offset:2px}
body[data-view="result"] .app-shell{
  position:relative;
  width:100%;
  height:var(--tg-viewport-stable-height,100dvh);
  min-height:var(--tg-viewport-stable-height,100dvh);
  overflow:hidden;
  background:var(--bg);
}
body[data-view="result"] .device{
  position:relative;
  width:100%;
  height:100%;
  overflow:hidden;
  background:var(--bg);
}
.screen{position:absolute;inset:0;padding:112px 14px 94px;overflow-y:auto;scrollbar-width:none}
.screen::-webkit-scrollbar{display:none}
.header{display:grid;justify-items:center;gap:7px;margin:2px 0 12px;text-align:center}
.brandLockup{display:grid;justify-items:center;gap:4px}
.brandLogoImg{display:block;width:220px;max-width:82%;height:auto;object-fit:contain}
.header b{font-size:19px;line-height:1.05;letter-spacing:-.03em}
.miniGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.miniProduct{min-width:0;border:0;background:transparent;color:var(--ink);padding:0;cursor:pointer;text-align:center;display:flex;flex-direction:column;align-items:stretch}
.miniPic{aspect-ratio:1/1;border:0;border-radius:16px;background:#fff;overflow:hidden;display:grid;place-items:center;box-shadow:0 8px 22px rgba(35,26,20,.06)}
.miniPic img{width:100%;height:100%;object-fit:contain;display:block}
.miniProduct b{display:block;font-size:8.7px;line-height:1.2;margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.miniSub{display:block;font-size:7.6px;line-height:1.22;color:#8c7361;font-weight:800;margin-top:2px;min-height:18px}
.segmented{display:grid;grid-template-columns:repeat(3,1fr);padding:5px;background:rgba(240,233,225,.96);border-radius:18px;gap:5px;box-shadow:inset 0 0 0 1px rgba(185,139,104,.08)}
.segmented button{position:relative;min-height:58px;border:0;border-radius:13px;background:transparent;padding:8px 5px 7px;font-size:9.3px;line-height:1.08;font-weight:900;cursor:pointer;display:grid;justify-items:center;align-content:center;gap:4px}
.segmented button .segMain{display:block}
.segmented button .segSub{display:block;font-size:7.8px;line-height:1.15;color:#80746a;font-weight:800}
.segmented button .segBadge{position:absolute;top:5px;right:5px;padding:3px 5px;border-radius:999px;background:rgba(185,139,104,.14);color:var(--accent-2);font-size:7px;line-height:1;font-weight:950;letter-spacing:.02em}
/* OWNER CORRECTION 2026-08-01 — the chip carries the full contract name («Необходимый уход»),
   not an invented shortening, so it wraps to two lines. Warm V2 sized this pill for a
   one-line label and pinned the badge over the top-right corner; two lines would run under
   it. Reserve the badge band on all three chips so they stay the same height and the label
   can never collide with the badge. */
.segmented button{padding-top:20px;min-height:66px}
.segmented button .segMain{overflow-wrap:break-word;text-wrap:balance}
.segmented button.active{background:var(--o05-active-bg);color:var(--o05-active-fg);box-shadow:0 8px 18px rgba(53,38,27,.10)}
.segmented button.active .segSub{color:#5e5148}
.segmented button.recommended:not(.active){background:rgba(255,255,255,.62)}
.persistentPreview{margin-top:10px;border:0;border-radius:18px;background:#fff;padding:10px;box-shadow:0 8px 22px rgba(35,26,20,.055)}
.previewHeader{display:flex;justify-content:space-between;align-items:start;gap:8px;margin-bottom:7px}
.previewHeader b{font-size:11px}
.previewHeader span{font-size:8.7px;color:var(--muted);text-align:right}
.stickyShelf{position:absolute;z-index:25;left:10px;right:10px;bottom:76px;background:rgba(255,255,255,.88);border:0;border-radius:22px;padding:9px;box-shadow:0 18px 40px rgba(50,36,24,.16);backdrop-filter:blur(18px);transform:translateY(135%);opacity:0;transition:transform .38s cubic-bezier(.2,.75,.2,1),opacity .24s ease}
.stickyShelf.open{transform:translateY(0);opacity:1}
.shelfTop{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.shelfTop b{font-size:10px}
.shelfTop span{font-size:8.5px;color:var(--muted)}
.shelfProducts{display:grid;grid-template-columns:repeat(4,1fr);gap:5px}
.shelfProducts .miniProduct b{display:none}
.stickyCta{position:absolute;z-index:24;left:10px;right:10px;bottom:10px;padding:7px;border-radius:28px;background:rgba(244,242,238,.9);backdrop-filter:blur(14px);box-shadow:0 10px 28px rgba(0,0,0,.12)}
.stickyCta button{width:100%;min-height:48px;border:0;border-radius:25px;background:var(--ss-accent);color:var(--ss-button-text);font-weight:900;font-size:12px;cursor:pointer}
/* Telegram handoff is not activated. The button must not read as fully live: it keeps
   the approved shape and token but is visibly inactive. */
.stickyCta button:disabled{opacity:.62;cursor:default}
.bottomLayer{position:absolute;z-index:80;inset:0;display:grid;align-items:end;visibility:hidden;pointer-events:none;transition:visibility 0s linear .42s}
.bottomLayer.preparing,.bottomLayer.open{visibility:visible;transition-delay:0s}
.bottomLayer.open{pointer-events:auto}
.sheetBackdrop{position:absolute;inset:0;border:0;background:rgba(255,253,250,.66);backdrop-filter:blur(11px) brightness(1.08);opacity:0;transition:opacity .3s ease}
.bottomLayer.open .sheetBackdrop{opacity:1}
.sheet{position:relative;z-index:2;width:100%;max-height:74%;background:rgba(255,255,255,.98);border-radius:28px 28px 0 0;border:0;box-shadow:0 -16px 44px rgba(55,39,27,.13);transform:translateY(calc(100% + 18px));opacity:.96;transition:transform .4s cubic-bezier(.2,.75,.2,1),opacity .25s ease;overflow:hidden}
.bottomLayer.open .sheet{transform:translateY(0);opacity:1}
.sheetTop{display:flex;justify-content:space-between;align-items:center;padding:8px 12px 6px}
.handle{width:40px;height:4px;border-radius:999px;background:#d8d0c9;margin-left:calc(50% - 20px)}
/* The label is a word, not a glyph: size to content with a 44px minimum target. */
.closeSheet{min-width:44px;height:44px;padding:0 16px;border:0;border-radius:999px;background:#f2eeea;color:var(--ink);font-size:12px;font-weight:800;white-space:nowrap;cursor:pointer}
.sheetBody{overflow:auto;padding:0 15px 18px;max-height:calc(74vh - 48px)}
.sheetMedia{width:300px;max-width:100%;aspect-ratio:1/1;margin:0 auto 12px;border:0;border-radius:24px;overflow:hidden;box-shadow:0 10px 28px rgba(35,26,20,.06)}
.sheetMedia img{width:100%;height:100%;object-fit:contain}
.sheetRole{font-size:8.5px;text-transform:uppercase;letter-spacing:.09em;color:var(--accent-2);font-weight:900}
.sheetFocusPill{display:inline-flex;align-items:center;gap:6px;margin-top:7px;padding:6px 10px;border-radius:999px;background:#f7efe8;color:#6f594b;font-size:9px;font-weight:900;letter-spacing:.02em}
.sheetTitle{font-size:18px;line-height:1.08;margin:6px 0 0;color:var(--ink)}
.sheetSubTitle{font-size:10.5px;line-height:1.35;color:var(--ink);margin-top:5px;font-weight:700}
.sheetMeta{font-size:9.5px;color:var(--muted);margin-top:5px}
.sheetCallout{margin-top:10px;padding:13px 13px 12px;border-radius:19px;background:linear-gradient(145deg,#fff8f2,#f8f2ec);box-shadow:0 10px 24px rgba(35,26,20,.05)}
.sheetCallout b{display:block;font-size:9.5px;letter-spacing:.04em;color:var(--accent-2);margin-bottom:5px}
.sheetCallout p{margin:0;font-size:10.8px;line-height:1.44;color:var(--ink)}
.sheetBenefitChips{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.sheetBenefitChip{display:inline-flex;align-items:center;padding:7px 9px;border-radius:999px;background:#fff;box-shadow:0 6px 16px rgba(35,26,20,.05);font-size:9.3px;line-height:1.2;color:var(--ink);font-weight:800}
.sheetUseCard{margin-top:10px;padding:11px 12px;border-radius:17px;background:#f8f3ee}
.sheetUseCard b{display:block;font-size:9.4px;line-height:1.2;margin-bottom:4px;color:var(--ink)}
.sheetUseCard span{display:block;font-size:10.3px;line-height:1.4;color:var(--muted)}
.sheetSection{margin-top:10px;padding:11px 12px;border-radius:18px;background:#fff;box-shadow:0 8px 22px rgba(35,26,20,.05)}
.sheetSection.compact{padding-bottom:10px}
.sheetSectionTitle{font-size:9.5px;line-height:1.2;letter-spacing:.04em;color:var(--accent-2);font-weight:900;margin-bottom:7px}
.ingredientList{display:grid;gap:6px}
.ingredientItem{display:grid;grid-template-columns:94px 1fr;gap:8px;align-items:start}
.ingredientItem b{font-size:9.5px;line-height:1.25;color:var(--ink)}
.ingredientItem span{font-size:9.9px;line-height:1.35;color:var(--muted)}
.sheetMore{margin-top:10px;border-radius:18px;background:#fff;box-shadow:0 8px 22px rgba(35,26,20,.05);overflow:hidden}
.sheetMore summary{list-style:none;cursor:pointer;padding:12px 13px;font-size:10px;font-weight:900;color:var(--ink);display:flex;align-items:center;justify-content:space-between}
.sheetMore summary::-webkit-details-marker{display:none}
.sheetMore summary:after{content:'›';font-size:18px;line-height:1;color:var(--muted);transform:rotate(90deg);transition:transform .2s ease}
.sheetMore[open] summary:after{transform:rotate(-90deg)}
.sheetMoreBody{padding:0 13px 12px;display:grid;gap:9px}
.sheetMoreItem{padding-top:9px;border-top:0;background:#faf6f2;border-radius:14px;padding:10px 11px}
.sheetMoreItem b{display:block;font-size:9.4px;line-height:1.25;margin-bottom:4px;color:var(--ink)}
.sheetMoreItem p{margin:0;font-size:10px;line-height:1.38;color:var(--muted)}

/* Final V4 authority overrides. */
.photoResult{background:#fff;border:0;border-radius:26px;overflow:hidden;margin-bottom:12px;box-shadow:0 14px 38px rgba(35,26,20,.07)}
.photoStage{height:400px;position:relative;border-radius:0;background:#ece9e6;overflow:hidden}
.photoStage img{width:100%;height:100%;object-fit:cover;display:block;transition:opacity .22s ease}
.photoCaption{position:absolute;left:12px;right:12px;bottom:12px;margin:0;padding:9px 11px;border-radius:15px;background:rgba(255,255,255,.78);backdrop-filter:blur(14px) saturate(.95);-webkit-backdrop-filter:blur(14px) saturate(.95);font-size:9.8px;line-height:1.38;color:#403b37;box-shadow:0 8px 24px rgba(40,30,23,.1)}
.photoStage{position:relative}
.photoStage img.photoBase{display:block;width:100%;height:100%;object-fit:cover}
/* The display map is normalised to the DISPLAYED photo area, so it must map onto the
   stage box exactly. `cover` would crop the map on a different aspect ratio than the
   photo and misalign it. */
.photoStage img.photoLayer{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;transition:opacity .18s ease}
/* Fixed grid, one row, every concern visible. Never a carousel: no overflow-x, no
   scrollIntoView, no partially cut chip. Columns are set per layer count in the renderer. */
.concernChips{display:grid;grid-auto-flow:column;gap:7px;padding:11px 12px 12px;overflow:visible}

.concernBtn{min-width:0;min-height:48px;display:flex;align-items:center;justify-content:center;text-align:center;border:0;border-radius:16px;background:#f1ece8;color:#655d57;padding:7px 8px;font-size:10.5px;line-height:1.15;font-weight:850;cursor:pointer;overflow-wrap:anywhere;hyphens:auto;transition:background .18s ease,color .18s ease,transform .16s ease}
.concernBtn:active{transform:scale(.97)}
.concernBtn.active{background:var(--o05-active-bg);color:var(--o05-active-fg);box-shadow:inset 0 0 0 1px rgba(23,20,18,.10)}
.insightBlock{background:#fff;border:0;border-radius:26px;padding:16px 16px 15px;margin-bottom:12px;box-shadow:0 12px 32px rgba(35,26,20,.06)}
.insightIntro{font-size:12px;line-height:1.48;color:#302d2a;margin:0 0 15px;font-weight:650}
.insightList{display:grid;gap:13px}
.insightItem{padding:0 0 0 12px;border-left:3px solid rgba(169,116,79,.26);transition:background .2s ease,border-color .2s ease,padding .2s ease}
.insightItem.active{padding:10px 11px 10px 12px;border-left-color:var(--accent);border-radius:0 15px 15px 0;background:#fff7f0}
.insightItem h3{font-size:12px;line-height:1.25;margin:0 0 4px;color:#211f1d}
.insightItem p{font-size:10.5px;line-height:1.45;margin:0;color:#655e59}
.insightItem strong{color:#2b2724;font-weight:900}
.supportBlock{background:linear-gradient(145deg,#f7eee7,#fff8f2);border:0;border-radius:26px;padding:16px;margin-bottom:12px;box-shadow:0 12px 30px rgba(84,59,42,.07)}
.supportBlock h2{font-size:17px;line-height:1.2;margin:0 0 10px;color:#211e1c}
.supportList{display:grid;gap:7px;margin:0;padding:0;list-style:none}
.supportList li{position:relative;padding-left:19px;font-size:10.5px;line-height:1.4;color:#5c544e}
.supportList li:before{content:'✓';position:absolute;left:0;top:0;color:#9b6b4e;font-weight:900}
.supportTransition{margin:13px 0 0;padding-top:12px;border-top:1px solid rgba(153,107,78,.12);font-size:11.5px;line-height:1.4;font-weight:850;color:#332c27}
.choiceBlock{position:relative;overflow:hidden;background:rgba(255,251,247,.98);border:0;border-radius:26px;padding:13px;margin-bottom:12px;box-shadow:0 12px 30px rgba(35,26,20,.06)}
.choiceBlock>h2,.choiceBlock>p{display:none}
.segmented{margin:0}
.selectionPlaceholder{margin-top:10px;min-height:96px;display:grid;place-items:center;text-align:center;padding:16px;border-radius:18px;background:#fff;color:#817873;font-size:10.5px;line-height:1.4}
.persistentPreview{margin-top:10px;border:0;border-radius:20px;background:#fff;padding:11px;box-shadow:0 8px 22px rgba(35,26,20,.055)}
.stickyCta{opacity:0;pointer-events:none;transform:translateY(125%);transition:opacity .24s ease,transform .34s cubic-bezier(.2,.75,.2,1)}
.stickyCta.visible{opacity:1;pointer-events:auto;transform:translateY(0)}
.device.sheet-open .stickyCta{opacity:0;pointer-events:none;transform:translateY(125%)}

/* Runtime bridge for the authority lab tokens and Telegram live safe areas. */
.screen{position:absolute!important;inset:0!important;padding:var(--content-safe-top) var(--lab-content-pad) calc(var(--ios-home-safe) + 78px)!important;overflow-y:auto!important;overflow-x:hidden!important;background:var(--bg)!important;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scroll-padding-top:calc(var(--content-safe-top) + 8px)}
.stickyShelf{left:9px!important;right:9px!important;bottom:calc(var(--ios-home-safe) + 65px)!important}
.stickyCta{left:9px!important;right:9px!important;bottom:calc(var(--tg-safe-area-inset-bottom,0px) + var(--tg-content-safe-area-inset-bottom,0px) + 22px)!important}
.bottomLayer{position:absolute!important;z-index:160!important}
.photoResult,.insightBlock,.choiceBlock,.supportBlock{border-radius:var(--lab-card-radius)!important;margin-bottom:var(--lab-section-gap)!important}
.photoStage{height:var(--lab-photo-height)!important}
.concernBtn,.stickyCta button{border-radius:999px!important}

.device.o05-small .screen{padding-left:10px!important;padding-right:10px!important}
.device.o05-small .choiceBlock{padding:9px}
.device.o05-small .miniGrid{gap:4px}
.device.o05-small .miniPic{border-radius:9px}
.device.o05-small .stickyShelf{left:7px!important;right:7px!important;bottom:70px!important}
.device.o05-small .sheet{max-height:90%}
.device.o05-small .sheetBody{max-height:calc(90vh - 44px)}
.device.o05-small .sheetMedia{width:116px}
.device.o05-small .sheetBenefitChips{gap:5px}
.device.o05-small .sheetBenefitChip{font-size:8.8px;padding:6px 8px}
.device.o05-small .ingredientItem{grid-template-columns:78px 1fr}
.device.o05-small .sheetTitle{font-size:16.5px}
.device.o05-small .photoStage{height:300px!important}
.device.o05-small .insightBlock,.device.o05-small .supportBlock{padding:13px;border-radius:22px}
.device.o05-small .insightIntro{font-size:10.8px;margin-bottom:12px}
.device.o05-small .insightList{gap:10px}
.device.o05-small .insightItem h3{font-size:10.8px}
.device.o05-small .insightItem p{font-size:9.7px}
.device.o05-small .supportBlock h2{font-size:14px}
.device.o05-small .supportList li{font-size:9.6px}
.device.o05-small .supportTransition{font-size:10.4px}
.device.o05-landscape{--content-safe-top:var(--tg-content-safe-area-inset-top,82px)}
.device.o05-landscape .screen{padding-left:max(var(--lab-content-pad),47px)!important;padding-right:max(var(--lab-content-pad),47px)!important}

@media(max-width:760px){.photoStage{height:48vh;min-height:300px;max-height:430px}}
@media(orientation:landscape){
  .device{--content-safe-top:var(--tg-content-safe-area-inset-top,82px)}
  .device .screen{padding-left:max(var(--lab-content-pad),47px)!important;padding-right:max(var(--lab-content-pad),47px)!important}
}
@media(prefers-reduced-motion:reduce){
  .photoStage img,.concernBtn,.stickyShelf,.stickyCta,.bottomLayer,.sheetBackdrop,.sheet{transition:none!important}
}
/* ====================== Layer 2: Warm O05 V2 presentation ====================== */
/* SmartSkin O05 — research-aligned owner review correction */
.header{gap:3px;margin:0 0 10px}
.brandLogoImg{width:132px!important;max-width:38%!important;max-height:30px!important}
.header b{font-size:18px}
.resultSummary{background:linear-gradient(145deg,#fff,#fffaf6);border-radius:24px;padding:15px 15px 14px;margin-bottom:12px;box-shadow:0 10px 30px rgba(35,26,20,.06)}
.resultSource{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;border-radius:999px;background:#f5eee8;color:#7b5b46;font-size:9.5px;font-weight:850;margin-bottom:8px}
.resultSource:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}
.resultSummary h2{font-size:19px;line-height:1.18;letter-spacing:-.025em;margin:0 0 6px}
.resultSummary p{font-size:11px;line-height:1.45;color:var(--muted);margin:0}
.resultFirstStep{margin-top:10px;padding:10px 11px;border-radius:16px;background:#f8f3ee}
.resultFirstStep b{display:block;font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--accent-2);margin-bottom:4px}
.resultFirstStep span{display:block;font-size:11px;line-height:1.42;font-weight:750}
.photoResult{overflow:hidden}
.photoStage{height:min(390px,45vh)!important;min-height:300px!important}
.photoCaption{font-size:10.5px;line-height:1.4}
.concernChips{padding:10px 10px 8px;gap:6px}
.concernBtn{min-height:48px;padding:7px 6px;font-size:10px}
.photoInsightCard{margin:0 12px 12px;padding:11px 12px;border-radius:17px;background:#f8f3ee}
.photoInsightCard b{display:block;font-size:11px;line-height:1.3;margin-bottom:4px}
.photoInsightCard p{font-size:10.8px;line-height:1.44;color:#5d5651;margin:0}
.photoDisclaimer{padding:0 13px 13px;font-size:9.8px;line-height:1.4;color:#817873}
.priorityBlock{display:grid;gap:8px;margin-bottom:12px}
.priorityCard{background:#fff;border-radius:21px;padding:13px 14px;box-shadow:0 8px 22px rgba(35,26,20,.05)}
.priorityLabel{display:block;font-size:9px;text-transform:uppercase;letter-spacing:.09em;color:var(--accent-2);font-weight:900;margin-bottom:5px}
.priorityCard h3{font-size:13px;line-height:1.3;margin:0 0 4px}
.priorityCard p{font-size:10.8px;line-height:1.43;color:var(--muted);margin:0}
.choiceBlock{padding:14px!important}
.planHeading{margin-bottom:11px}
.planHeading h2{display:block!important;font-size:17px;line-height:1.2;margin:0 0 4px!important}
.planHeading p{display:block!important;font-size:10.8px;line-height:1.4;color:var(--muted);margin:0!important}
.segmented button{min-height:70px;padding-top:21px;font-size:10.3px}
.segmented button .segSub{font-size:8.6px}
.segmented button .segBadge{font-size:7.6px}
.planPreview{margin-top:11px}
.planPreviewHeader{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:9px}
.planPreviewHeader b{font-size:13px}
.planPreviewHeader span{font-size:9.8px;line-height:1.35;color:var(--muted);text-align:right}
.planProductList{display:grid;gap:8px}
.planProduct{width:100%;display:grid;grid-template-columns:66px minmax(0,1fr);gap:10px;align-items:start;border:0;border-radius:18px;background:#fff;padding:9px;text-align:left;box-shadow:0 6px 18px rgba(33,25,18,.05);cursor:pointer}
/* No product image (Commerce/media not bound): collapse to a single column so the
   text does not get squeezed into the empty image track. */
.planProduct.noImage{grid-template-columns:1fr}

.planProduct:active{transform:scale(.995)}
.planProductImage{width:66px;height:66px;border-radius:14px;background:#faf7f3;overflow:hidden;display:grid;place-items:center}
.planProductImage img{width:100%;height:100%;object-fit:contain}
.planProductBody{min-width:0}
.planProductTop{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.planProductRole{font-size:8.7px;text-transform:uppercase;letter-spacing:.075em;color:var(--accent-2);font-weight:900}
.planProductStatus{flex:0 0 auto;padding:4px 6px;border-radius:999px;background:#f6efe9;color:#765d4d;font-size:7.8px;font-weight:900}
.planProductTitle{display:block;font-size:11px;line-height:1.28;margin-top:3px;color:var(--ink)}
.planProductReason{display:block;font-size:9.8px;line-height:1.38;color:var(--muted);margin-top:4px}
.planProductMeta{display:flex;justify-content:space-between;gap:8px;align-items:end;margin-top:6px}
.planProductUse{font-size:8.9px;line-height:1.3;color:#675f59}
.planProductPrice{text-align:right;white-space:nowrap}
.planProductPrice b{display:block;font-size:10.5px}
.planProductPrice small{display:block;font-size:7.4px;color:#9a8f86;margin-top:1px}
.supportBlock{padding:13px 14px!important}
.supportBlock h2{font-size:14px!important;margin-bottom:5px!important}
.supportBlock p{font-size:10.5px!important;line-height:1.43!important;color:#5c544e!important;margin:0!important}
.totalBlock{background:#fff;border-radius:22px;padding:13px 14px;margin-bottom:12px;box-shadow:0 10px 28px rgba(35,26,20,.055)}
.totalTop{display:flex;justify-content:space-between;gap:10px;align-items:start}
.totalTop span{font-size:10px;color:var(--muted)}
.totalTop b{font-size:13px;text-align:right}
.totalPrice{display:flex;justify-content:space-between;align-items:end;gap:10px;margin-top:9px;padding-top:9px;border-top:1px solid #eee7e1}
.totalPrice span{font-size:10px;color:var(--muted)}
.totalPrice strong{font-size:17px}
.totalPrice small{display:block;font-size:7.8px;color:#9a8f86;text-align:right;margin-top:2px}
.stickyCta{transition:opacity .24s ease,transform .34s cubic-bezier(.2,.75,.2,1)}
.stickyCta button{font-size:12px}
.sheetMeta{line-height:1.45}
@media(max-width:430px){
 .brandLogoImg{width:122px!important}
 .resultSummary{padding:13px}
 .resultSummary h2{font-size:18px}
 .photoStage{height:42vh!important;min-height:280px!important}
 .planProduct{grid-template-columns:60px minmax(0,1fr);gap:9px}
 .planProductImage{width:60px;height:60px}
}
/* ===================== Conversion block =====================
   The one visually separated container on the screen: heading, variant switch, selected
   plan, product cards, unit prices and total. Built only from existing Mini App tokens —
   a low-intensity wash of --ss-accent over the surface, plus an accent top line. Every
   other block on the screen stays neutral. */
.planBlock{
  margin:14px 0 0;
  border-radius:22px;
  padding:2px 0 0;
  /* Mixed over the PAGE background, not the card surface: the panel must read as a
     distinct area behind white product cards, not as another white card. */
  background:color-mix(in srgb, var(--ss-accent) 16%, var(--bg, #f4f2ee));
  box-shadow:0 10px 30px rgba(53,38,27,.07);
  overflow:hidden;
}
/* Fallback for engines without color-mix: the existing warm surface token. */
@supports not (background: color-mix(in srgb, red 8%, blue)){
  .planBlock{background:var(--soft, #f1e2d6)}
}
.planBlock::before{
  content:'';display:block;height:4px;
  background:var(--ss-accent);
  opacity:.85;
}
.planBlock .choiceBlock{background:transparent;margin-top:0}
.planBlock .planProduct{background:var(--surface, #fff)}
.planBlock .totalBlock{margin:0;background:transparent}
.totalSum{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  padding:10px 14px 14px;border-top:1px solid rgba(53,38,27,.10);margin:0 2px}
.totalSum span{font-size:10.5px;font-weight:800;color:var(--muted)}
.totalSum b{font-size:15px;font-weight:950;color:var(--ink)}

/* --- product card media + price ---
   Owner correction: the product photograph sits on the LEFT, at the approved warm size. */
.planProduct{grid-template-columns:clamp(72px,20vw,88px) minmax(0,1fr);align-items:center}
/* `height:auto` is load-bearing. Rules :286 and :319 set an explicit height (66px / 60px)
   for the old right-hand thumbnail; `aspect-ratio` cannot override an explicit height, so
   without this the box stayed 60–66px tall while the column widened to 64–88px and the
   jar was cut off at the bottom — up to 27% of the image at 412px. */
.planProductImage{width:100%;height:auto;aspect-ratio:1/1;border-radius:14px;background:#faf7f3;
  overflow:hidden;display:grid;place-items:center;order:1}
.planProductImage img{width:100%;height:100%;object-fit:contain;object-position:center}
.planProductBody{order:2;min-width:0}
.planProductPrice{margin-left:auto;font-size:11px;font-weight:950;color:var(--ink);white-space:nowrap}
.planProductMeta{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.planProductUse{min-width:0}

/* The plan-count label wrapped to two lines at every width; keep it on one. */
.planPreviewHeader>span{white-space:nowrap;flex:0 0 auto;align-self:flex-start}

/* Compact 320px: a slightly smaller image column, still left, still contain. */
.device.o05-small .planProduct{grid-template-columns:clamp(64px,20vw,72px) minmax(0,1fr)}
/* A product with no authorized photograph collapses to one column instead of leaving an
   empty 64-88px gutter. `.planProduct.noImage` (0,2,0) loses to the compact rule (0,3,0),
   so the compact case needs its own declaration. Products are never dropped and never
   given another product's picture — they simply render without one. */
.device.o05-small .planProduct.noImage{grid-template-columns:1fr}

/* --- OWNER TASK 2026-08-02: dynamic primary CTA + secondary question action -------------
   The primary button now names the variant («Оформить «Комплексный уход» в Telegram»),
   which is roughly twice the old label. It must WRAP, never clip and never ellipsise, so
   the fixed single-line height is replaced by a padded two-line box. The approved token
   and shape are unchanged — no new accent hex, no new sticky behaviour. */
.stickyCta button{
  min-height:48px;height:auto;padding:12px 16px;
  white-space:normal;overflow-wrap:break-word;text-wrap:balance;
  line-height:1.25;display:flex;align-items:center;justify-content:center;text-align:center}

/* A question is not a purchase. This is a quiet tertiary control inside the support block:
   no solid fill, no sticky positioning, visibly lighter than the primary CTA. Two equally
   weighted large buttons would make the reader choose between them — they must not. */
.supportAction{
  display:inline-flex;align-items:center;justify-content:center;
  margin-top:12px;min-height:44px;padding:10px 16px;
  background:transparent;color:var(--accent-2);
  border:1px solid rgba(185,139,104,.34);border-radius:999px;
  font-size:11.5px;font-weight:800;line-height:1.25;
  white-space:normal;overflow-wrap:break-word;text-align:center;cursor:pointer}
.supportAction:active{background:rgba(185,139,104,.08)}
.device.o05-small .supportAction{font-size:11px;padding:9px 14px;min-height:44px}

/* --- OWNER TASK 2026-08-02: presentation metadata ---------------------------------------
   A compact line between the product title and the reason, inside the EXISTING narrow card.
   The card geometry is untouched: same image column, same title/reason/usage/price order.
   Muted secondary text, never a coloured badge, never competing with role/title/price.
   It wraps rather than ellipsising — a truncated country is worse than a second line. */
.productMetaLine{
  display:block;margin:1px 0 3px;font-size:12px;line-height:1.3;
  color:var(--muted);font-weight:600;
  overflow-wrap:break-word;white-space:normal}
/* Compact 320: at most two lines, still no ellipsis. */
.device.o05-small .productMetaLine{font-size:11.5px;line-height:1.28}

/* Bottom sheet: one row per verified field. A row with no authority is `hidden`, so no
   empty row and no stray separator survives. */
.sheetMetaRows{display:grid;gap:4px;margin-top:8px}
.sheetMetaRow{display:flex;gap:8px;align-items:baseline;justify-content:space-between;
  font-size:10.5px;line-height:1.35}
.sheetMetaKey{color:var(--muted);font-weight:800;flex:0 0 auto}
.sheetMetaVal{color:var(--ink);font-weight:800;text-align:right;min-width:0;
  overflow-wrap:break-word}
