/*W2_CONTRAST_TRUESURFACE_V1*/
/*W2_LIGHT_CONTRAST_V1*/
/*W2_FONT_TRUTH_V1*/
/*STAGE5M_CART_CLASS_ONLY — the page binding is gone: the dark look
  is carried by #w2c-root.w2c-dark alone, and that class is set only
  when the PAGE is light. A dark page therefore gets a light cart.*/
/*STAGE5K_CART_INVERT — the cart is the first checkout surface, so it
  follows the same rule as the sheet: it opposes the page. The dark
  styling below was bound to the page theme; it now also answers to
  #w2c-root.w2c-dark, which w2cart.js sets when the page is LIGHT.*/
/* W2_CANON_PASS1 — gold, shadows and blur deleted, not overridden. */
/* W2_MERGED_CSS_V1 — all constructor CSS overlays concatenated in exact index.html load order.
   28 files -> 1. Cascade order preserved => pixel-identical. Source files kept for rollback. */

/* ==================== w2skin.css ==================== */
/* ============================================================================
   W2SKIN_v18_260612_1955 — ShopLink V3 chrome skin (header + footer + soft-black)
   Cosmetic override ONLY, layered over the live /miniapp/construct/ dist.
   v1: warm-glass header/footer + lens (#w2lens) + frameless phrase + soft CTA.
   v3 carries v2 ++ brand-style tile logo -15%; + all harsh constructor black -> soft #46413a.
   NOTE: temporary skin — a rebuild/promote of the constructor dist drops it.
   --soft-ink = the Add-to-cart tone, used everywhere black was harsh.
   ========================================================================== */
/* P5_DEADTOKEN_ACCENT_V2 --accent deleted from both themes: zero readers,
   proven at deploy across js/css/html/json/svg. --heart is KEPT:
   huntmap.html reads it. */
/* P18_DEAD_TILE_CSS_V1 CSS for the removed STYLE logo tile deleted: 0 producers. */
/* P31_DOCK_ONE_STYLESHEET_V1 geometry for .w2-foot-actions removed from this file.
   It tied with w2footglass.css on specificity, so the dock's shape depended
   on which <link> loaded last. w2footglass.css now decides it alone. */
/* P39_DOCK_CHILDREN_ONE_FILE_V1 the dock's children are declared in w2footglass.css only.
   flex/border-radius/width here tied with it on specificity, so the winner
   was decided by which <link> loaded last. */
:root{
  --text:#46413a !important;        /* body / pill text */
  --w2-ink:#46413a;                 /* soft warm near-black (= Add to cart) */
  --bg:#FAF9F5 !important;          /* clean soft white (not harsh) */
  --card:#FAF9F5 !important;
  --heart:#EB4014 !important;       /* brand-style red (calmer than #e52d2d) */
}
body,.app{background:#FAF9F5 !important;}

/* ========================== v1: FOOTER glass ============================== */
/* W2_FOOT_TWO_V1 — подложки больше нет: только инпут + кнопка */
.w2-foot-bubble{
  background:none !important;
  -webkit-backdrop-filter:none !important;
  backdrop-filter:none !important;
  border:0 !important;
  box-shadow:none !important;
  border-radius:0 !important;
  position:relative; overflow:visible !important;
}/* W2_FOOTONE_V1 gap, padding deleted: never applied in any state */

/* keep lens sheen below interactive children */
.w2-foot-bubble > *{position:relative;z-index:1;}

/* ===================== v3 carries v2 +brand-style tile logo -15% ===================== */
/* keep native box (height:30/min-height:32) so labels align with CLASSIC/STREET; shrink visually */
.style-brandmark{transform:scale(.85) !important;transform-origin:center !important;margin-bottom:2px !important;}

/* ===================== v3 carries v2 +land ALL harsh black -> soft #46413a =========== */
/* buttons / selected fills (was #111 / #0a0a0a) */
.btn-main,.btn-open{background:#46413a !important;}
.btn-main:hover{background:#565046 !important;}
/* W2_FOOT_TWO_V1 фон даёт .w2-foot-actions, CTA внутри прозрачный */
.w2-foot-actions:active{filter:brightness(.88);}
/*W2_TABDROP_SINGLE_V1*/ .type-btn.sel{background:transparent !important;border:0 !important;box-shadow:none !important}
.pill.sel{background:#46413a !important;border-color:#46413a !important;}
.vbtn:active,.vbtn.active{background:#46413a !important;border-color:#46413a !important;}

/* selected borders / focus borders / accents (was #111) */
.pick-card.sel{border-color:#46413a !important;}
.layout-card.sel{border-color:#46413a !important;}
.phr-wrap:focus-within{border-color:#46413a !important;}
.df-input:focus{border-color:#46413a !important;}
.qr-big{border-color:#46413a !important;}
.spinner{border-top-color:#46413a !important;}

/* text / typed input (was #111) */
.df-section,.df-input,.df-select{color:#46413a !important;}/* W2_FOOTONE_V1 color deleted: never applied in any state */

/* tile/garment brandmarks (currentColor). HEADER wordmark left ALONE (native grey). */
.style-brandmark{color:#46413a !important;}
/* NOTE: .sh-brandmark/.cb-brandmark inherit .sh-block ink (white on dark, soft on light) — do NOT force here */

/* on-garment print preview text on LIGHT shirts (was #0a0a0a); dark-shirt white stays via its own !important rule */
.chest-brand-small,.chest-main-text,.center-word,.brand-w,.brand-2,.brand-date,.overlay-phrase{color:#46413a !important;}

/* small black chrome on the preview */
.size-badge{background:rgba(70,65,58,.66) !important;}


/* ===================== v4: reach the INLINE-coloured black ================= */
/* on-garment print: ink is inline color:#0A0A0A on LIGHT shirts (white on dark stays — only soften the dark-ink case) */
/* ANY element whose ink is inline black (#0A0A0A / rgb(10,10,10)) -> soft.
   Catches garment brandmark .sh-brandmark/.cb-brandmark (the `be` span),
   the FREE text div, .sh-block, tile logos, etc. White-on-dark (#FFFFFF /
   rgb(255,255,255)) is a different value, so it stays white. */
[style*="rgb(10, 10, 10)"],
[style*="#0A0A0A"],
[style*="#0a0a0a"]{color:#46413a !important;}
/* the one hard-coded black path inside the brand-style W❤² svg */
[fill="#0A0A0A"],[fill="#0a0a0a"]{fill:#46413a !important;}
/* .sh-phrase / .sh-brandmark inherit currentColor from .sh-block -> softened with it */



/* ===================== v5: calm the bright red to brand red =============== */
.sp-heart,.cbs-heart{color:#EB4014 !important;}
/* red heart PNGs nudged toward the calmer brand red-orange; orange/white left alone */
/*W2REDHEART_V1 hue was rotated +10deg toward orange and chroma cut by 10%,
  which is why red read brick. No hue shift now: chroma up, contrast a touch
  up, tone left alone. Red-specific, exactly as the old rule was. */
/*W2REDDEEP_V1 deep, not bright. Depth comes from luminance, not chroma:
  brightness down, saturation barely up so darkening does not grey it out,
  hue untouched. Knobs: brightness 0.80 dark .. 0.92 light;
  saturate 1.00 as-is .. 1.15 richer. */
/*W2_HEARTTHREAD_V1 DELETED — it owned `filter`, and so did the embroidery.
   `filter` holds one value, this one had !important, and the heart was the only
   part of the mark that came out unstitched. The same brightness(0.86) and
   saturate(1.08) are baked into heart_red_* instead: (236,34,34) -> (212,26,25),
   computed with the real CSS saturate matrix. The colour now lives in the file,
   which is also the only place a print asset's colour should live. */
/* BLACK heart PNGs (heart_black_*) -> soft ink #46413a — same soft black as everywhere.
   Covers garment heart + the BLACK colour swatch + HEART STYLE previews when black is picked. */
/*W2_HEARTTHREAD_V1 DELETED — the same defect as the red one. It painted
   the black heart to the soft ink #46413A through `filter`, which is the property
   the embroidery needs and which holds only one value. Baked into heart_black_*
   instead, so the garment, the colour swatch and the style preview all read one
   file. */

/* ===================== v6: avatars back to normal; Host -> hat ============ */
/* Owner (your) avatar: native circle (the broken v4 override is gone, nothing to do). */
/* Guest slot only (src=…mr_host.svg): swap the Mr.Host figure for the brand top-hat,
   as a clean circle of the same size. Owner photos (other src) are untouched. */

/* ===================== v8: equalize heart size across styles ============== */
/* w2logo heart height is inline .74*heartScale em; classic=1.1 (=.814em), others=1 (=.74em).
   Force all to the classic size so STREET and BRAND STYLE match CLASSIC — tiles AND on garments. */
/* W2_HEARTLOCK_V1 — the ratio is declared so the WIDTH is known before the
   image is. height was set and width left auto with no aspect-ratio, so a
   freshly mounted heart laid out 0 px wide until the file resolved. The
   one-line layout is a different element TYPE from the other two, so React
   rebuilds this <img> on every entry and exit — and a cold heart collapsed
   the lockup by its own width plus two .09em margins, which translate(-50%)
   then re-centred, and the print slid sideways and snapped back.
   847x798 is the files' own size — all twelve of them, checked against
   the headers in acceptance — so the bitmap landing changes nothing. */
.w2logo-h{height:.814em !important;aspect-ratio:847/798 !important;}
/* W2_HEARTLOCK_V1 — the mascot is the same defect in the same block: an <img> at
   height:59px/width:auto with no ratio. Its size lives in a React inline
   style, which sets neither aspect-ratio nor width, so this rule composes
   with it rather than fighting it. 194x381 is the svg's own viewBox. */
.w2-mascot-layer img[src*="mr_host"]{aspect-ratio:194/381;}

/* tidy the floating Catalog pill: harsh blue -> soft ink */
[style*="rgb(37, 99, 235)"],[style*="#2563eb"]{color:#46413a !important;}

/* === W2SKIN_FOOT_PRICE_V1 — footer price matches the cart =================
   $ price: black ink + Syne (like .w2c-total-val)
   GBT:     red #FF4D00 + Montserrat (like .w2c-total-gbt)
   kills the old multicolor (#ec4015 $ / #ff8a00 gbt). */
/* W2_FOOT_TWO_V1 цена внутри кнопки: обычный DM Sans, не дисплейный Syne */
.w2-foot-usd{ font-family:'DM Sans',system-ui,-apple-system,sans-serif !important; font-weight:800 !important; letter-spacing:0 !important;}/* W2_FOOTONE_V1 color deleted: never applied in any state */
.w2-foot-gbt{color:var(--w2-dong) !important; font-family:'DM Sans',system-ui,-apple-system,sans-serif !important; font-weight:600 !important;}

/* === W2SKIN_SMOOTH_V1 — smooth product switching (no emoji flash) ==========
   On product/color switch the bundle clears the src and async-loads the PNG;
   meanwhile it renders .shirt-fallback = a grey box with an emoji (👜/🧢/👕).
   We replace that jarring emoji with the calm Mr.Host hat loader, and fade the
   real garment image in on (re)mount. Combined with JS preload (w2cart.js),
   the switch reads as a smooth branded load, never a random bag picture. */
.shirt-fallback{
  font-size:0 !important;                 /* hide the emoji glyph */
  opacity:1 !important;
  background:transparent !important;       /* drop the harsh colour box */
  background-image:url("/miniapp/construct/hat.svg") !important;
  background-repeat:no-repeat !important;
  background-position:center !important;
  background-size:60px auto !important;
  animation:w2HatPulse 1s ease-in-out infinite !important;
}
@keyframes w2HatPulse{
  0%,100%{opacity:.32; transform:translateY(0) scale(1);}
  50%    {opacity:.7;  transform:translateY(-3px) scale(1.05);}}
/* gentle fade-in of the actual garment image whenever it (re)mounts */
.shirt-img{animation:w2FadeIn .28s ease both;}
@keyframes w2FadeIn{from{opacity:0;}to{opacity:1;}}

/* === W2_SPREAD_V1 — W2_LAYOUT_GPT_V1 DELETED. It was a second owner of
   .scroll layout and it won every fight with !important. w2layout.js it
   refers to no longer exists. The clearance it carried now lives once,
   mobile-only, in w2order-canon.css. === */
/* W2_SPREAD_V1 — three product-scoped heart-hide blocks DELETED here
   (480px, 768px, :not([data-print=logo])). w2order-canon.css hides the
   heart cards at every width for every product; these were dead. */

/* === W2_LOGO_SHRINK_V2 (center-scoped; left chest restored) — on-shirt prints smaller, TOP-anchored (top edge stays put) === */
/* uses individual `scale:` so the bundle's own transforms are preserved */
.sh-block.center .sh-brandmark{ scale: .60 !important; transform-origin: top center !important; }   /* brand logo -40% (center only) */
.sh-block.center .w2logo{ scale: .82 !important; transform-origin: top center !important; }   /* classic/street logo -18% (center only) */
.sh-block.center .sh-phrase{ scale: .85 !important; transform-origin: top center !important; }   /* word -15% (center only) */

/* === W2HEADER_ICONS_V1 — Catalog pill -> two round blue icons (close + share) === */
.w2h-bar{ display:flex !important; align-items:center !important; gap:4px !important;
  padding:4px !important; border-radius:16px !important; background:rgba(255,255,255,.95) !important;
 border:1px solid #ececec !important; }
.w2h-ic{ display:inline-flex; align-items:center; justify-content:center; width:38px; height:38px;
  border-radius:50%; color:#2563eb; cursor:pointer; -webkit-tap-highlight-color:transparent;
  transition:background .15s ease, transform .12s ease; }
.w2h-ic svg{ width:22px; height:22px; display:block; }
.w2h-ic:hover{ background:rgba(37,99,235,.08); }
.w2h-ic:active{ background:rgba(37,99,235,.16); transform:scale(.9); }

/* the price becomes a row so the badge sits beside the number, not above it */
.w2-foot-actions .w2-foot-price{ flex-direction:row !important; align-items:center !important; }


/* === W2_CB_BRAND_SHRINK_V3 (.72, -15% more) (svg-safe transform:scale) — cap + bag brand-style logo -15% (logo only) === */
.cb-brandmark{ transform: scale(.72) !important; transform-origin: center !important; }

/* === W2_CENTER_SPACING_V6 (neg-margin, tight) — pull the word to the W❤² lockup, both center layouts === */
/* one-line (front_center_1): flex-row [logo]·[word] -> tight gap, centered */
.sh-block.center > div[style*="nowrap"]{ /* W2_INLINE_ROW_FIX_v1 */ gap: 0 !important; align-items: center !important; justify-content: center !important; width: -moz-fit-content !important; width: fit-content !important; max-width: 100% !important; margin-left: auto !important; margin-right: auto !important; }
.sh-block.center > div[style*="nowrap"] > .sh-phrase{ margin-left: -.136em !important; margin-top: 0 !important; scale: none !important; font-size: 22px !important; transform: translateY(-2px) !important; }
/* two-line (front_center_2): word below the lockup -> raise it to the logo */
/* brand two-line word is an inline <div style="max-width:86%"> (no .sh-phrase) */
.sh-block.center > div[style*="230px"], .sh-block.center > div[style*="86%"]{ margin-top: -18px !important; }
/* non-brand (classic/street) two-line word: .sh-phrase as a DIRECT child (one-line .sh-phrase is a grandchild via the nowrap div, so it is NOT hit) */
.sh-block.center > .sh-phrase{ margin-top: -14px !important; }

/* === W2FOOTFIX_CSS_V1 — footer glides above the iOS keyboard (with w2footfix.js) === */
/* P23_DOCK_DEAD_RULES_V1 transition on transform deleted: the dock spring is the single
   transform owner, exactly as on the site. A CSS transition on the same
   property fights the rAF loop and makes the size stutter. */
.w2-foot{ will-change: transform; }

/* === W2_MASCOT_LIFT_V1 — raise the on-shirt Mr.Host mascot onto the chest (up ~one figure) === */
.sh-block div:has(> img[src*="mr_host"]){ transform: translateY(-58px) !important; }

/* === W2_MASCOT_LIFT_V2 — per-position mascot lift ===
   chest (LEFT CHEST) keeps the perfect lift; center sits just below the collar. */
/*W2_MASCOT_FIX_V1 опущен на грудь*/ .sh-block.chest div:has(> img[src*="mr_host"]){ transform: translateY(-40px) !important; }
.sh-block.center div:has(> img[src*="mr_host"]){ transform: translateY(-26px) !important; }


/* ==================== w2clean.css ==================== */
/* W2CLEAN_V1 — MOBILE ONLY: strip the preview furniture for a clean canvas.
   Heart size is now pinch (two fingers). Desktop keeps the slider (no pinch on
   desktop). Side rotate arrows stay. */
@media (max-width: 480px) {
  .color-ind { display: none !important; }   /* top "White · Front" chip */
  .size-badge { display: none !important; }  /* bottom "T-SHIRT" badge */
  /* W2_SIZEWORDS_V1 moved into w2scale.js, which owns this strip. */
}

/* W2WORD_PIN_V1 — MOBILE: word chips pinned to the BOTTOM OF THE PHOTO (not the
   footer). Absolute inside the preview, horizontal scroll only, no drift. */
@media (max-width: 480px) {
  .preview-wrap { position: relative !important; }
  
  #w2word .w2word-chips { padding-left: 12px; padding-right: 16px; }}

/* W2_WEB_NATIVE_ARROWS_V1 — hide the "White · Front" chip on ALL sizes (was mobile-only). */
.color-ind{ display:none !important; }

/* W2_SIZEWORDS_V1 W2_SZ_TOPCENTER_V1 DELETED. It centred an absolutely
   positioned pill. Once .w2sz became a static panel card the same rule applied
   translateX(-50%) to it and slid the whole card half its width to the left —
   which is what pushed SMALL off screen. Centring now lives with the rest of
   the strip's geometry in w2scale.js, where it can be read together with the
   position it depends on. */

/* W2_FIX3_V1 — W2_WHITEHEART_OUTLINE_V1 DELETED.
   It selected by SOURCE (img[src*="heart_white"]), so it applied everywhere the
   white heart appears — including on the garment, where a keyline is wrong: the
   print has no outline and the factory will not add one. And it applied only to
   white, when the keyline is what makes ANY heart read as a button.
   The outline is a control treatment now. It lives with the rails in
   w2heartrails.js, scoped to .w2hr-img and .heart-thumb, all four colours. */


/* ==================== w2wordfit.css ==================== */
/* W2WORDFIT_V1 — on-garment word fit:
   ROOT CAUSE: .sh-phrase had overflow:hidden and .sh-block line-height:1, so
   letter descenders (y, g, j, p) fell outside the line box and got clipped.
   FIX: give the line box room for descenders (line-height 1.2) so tails show;
   and pull the word up ~12% toward the logo for a compact, correct look.
   Logo stays put — only the word moves. Loaded AFTER w2skin.css. */

/* descenders visible for every on-garment word (classic / street / brand) */
.sh-block .sh-phrase{
  line-height: 1.2 !important;
}

/* pull the word up ~12% toward the logo (was margin-top:-14px in w2skin) */
.sh-block.center > .sh-phrase{
  margin-top: -18px !important;
}


/* ==================== w2preview.css ==================== */
/* W2PREVIEW_V1 — cleaner preview stage:
   1) remove the golden view dots (the side arrows already rotate the garment);
   2) tshirt+hoodie only (shirt group = has .sh-ovl):
      web  -> raise a bit (too much empty space above),
      mobile -> lower a bit. Cap/Bag untouched. */

/* 1) drop the golden view indicators under the garment */
.vdot{display:none!important}

/* 2a) WEB: lift tshirt/hoodie up */
.preview-canvas-wrap:has(.sh-ovl) .shirt-img{
  top:-18px!important;
  bottom:18px!important;
}

/* 2b) MOBILE: lower tshirt/hoodie down instead */
@media (max-width:480px){
  .preview-canvas-wrap:has(.sh-ovl) .shirt-img{
    top:14px!important;
    bottom:-14px!important;
  }}

/* W2_POLO_PREVIEW_260807 W2POLO2 DELETED. It pinned the polo at +14px at every
   width while the tee sits at -18px on the web — a 32px jump between the two
   tabs. It existed to compensate polo mockups built to a different body; the
   blanks that ship with this pack are cut into the tee's own frame, so the
   compensation now describes nothing. The generic rule above carries no
   product filter, so the polo simply moves with the tee. */


/* ==================== w2cart.css ==================== */
/* W2CART_V1 styles — Mr.Host Store cart look, themed to the W❤² skin.
   Ink #46413a, warm white #FAF9F5, line #E6E4DE, orange badge #FF4D00. */

/* cart icon + badge on the Add-to-cart button */
.w2c-cta{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;}
.w2c-ico-wrap{position:relative;display:inline-flex;align-items:center;color:#fff;}
.w2c-ico{display:block;}
.w2c-badge{position:absolute;top:-9px;right:-11px;min-width:17px;height:17px;padding:0 4px;
  display:none;align-items:center;justify-content:center;background:var(--w2-gbt);color:#fff;
  border-radius:9px;font:700 11px/1 'DM Sans',sans-serif;}

/* lock scroll when open */
body.w2c-lock{overflow:hidden;}

/* root + backdrop + bottom sheet */
#w2c-root{position:fixed;inset:0;z-index:1000;display:none;}
#w2c-root.open{display:block;}
#w2c-root .w2c-backdrop{position:absolute;inset:0;background:rgba(40,36,32,.42);
}
#w2c-root .w2c-sheet{position:absolute;left:50%;bottom:0;transform:translateX(-50%);
  width:100%;max-width:560px;max-height:86vh;overflow:hidden;display:flex;flex-direction:column;
  background:#FAF9F5;border:1px solid #E6E4DE;border-bottom:0;
  border-radius:22px 22px 0 0;
  animation:w2c-up .22s cubic-bezier(.22,.8,.3,1);}
@keyframes w2c-up{from{transform:translate(-50%,18px);opacity:.6}to{transform:translate(-50%,0);opacity:1}}

/* header */
.w2c-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 10px;}
.w2c-title{font:800 19px/1 Syne,sans-serif;color:#46413a;}

/* list */
.w2c-list{overflow-y:auto;padding:4px 14px;}
.w2c-empty{display:none;padding:26px 18px 30px;text-align:center;color:var(--w2-ink-3);
  font:500 14px/1.4 DM Sans,sans-serif;}
.w2c-row{display:flex;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid #EFEDE7;}
.w2c-row:last-child{border-bottom:0;}

/* thumbnail (cloned live preview) */
.w2c-thumb{width:64px;height:74px;flex:0 0 auto;border-radius:10px;overflow:hidden;
  background:#f5f3ef;border:1px solid #EFEDE7;position:relative;}
.w2c-thumb-inner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.26);transform-origin:center;}

/* info */
.w2c-info{flex:1 1 auto;min-width:0;}
.w2c-name{font:700 14px/1.2 Syne,sans-serif;color:#46413a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.w2c-price{margin-top:3px;font:600 12px/1 DM Sans,sans-serif;color:#8a6a3a;}

/* qty stepper */
.w2c-qty{flex:0 0 auto;display:flex;align-items:center;gap:8px;}
.w2c-qty button{width:26px;height:26px;border:1px solid #E6E4DE;background:#fff;border-radius:8px;
  font-size:16px;line-height:1;color:#46413a;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.w2c-qty button:active{background:#f1efe9;}
.w2c-q{min-width:16px;text-align:center;font:700 14px/1 'DM Sans',sans-serif;color:#46413a;}
/*W2_CHECKOUT_CEMENT_V1*/ /*STAGE5I_CART_TRASH*/ .w2c-trash{flex:0 0 auto;width:26px;height:26px;padding:0;border:0;background:none;cursor:pointer;color:#E5484D;opacity:.85;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;transition:opacity .12s,background .12s;}
.w2c-trash svg{width:18px;height:18px;}
.w2c-trash:hover{opacity:1;background:rgba(229,72,77,.12);}

/* footer / totals / actions */
.w2c-foot{padding:12px 18px 18px;border-top:1px solid #EFEDE7;background:#FAF9F5;}
.w2c-totals{display:flex;align-items:baseline;gap:8px;margin-bottom:12px;}
.w2c-total-lbl{font:600 13px/1 DM Sans,sans-serif;color:var(--w2-ink-3);}
.w2c-total-val{font:800 22px/1 Syne,sans-serif;color:#46413a;margin-left:auto;}
.w2c-total-gbt{font:700 12px/1 'DM Sans',sans-serif;color:var(--w2-gbt);}
.w2c-actions{display:flex;gap:10px;}
.w2c-continue{flex:1 1 0;padding:14px;border:1px solid #E6E4DE;background:#fff;border-radius:14px;
  font:700 15px/1 'DM Sans',sans-serif;color:#46413a;cursor:pointer;}
.w2c-checkout{flex:2 1 0;padding:14px;border:0;border-radius:14px;background:#46413a;color:#fff;
  font:800 15px/1 'DM Sans',sans-serif;cursor:pointer;}
.w2c-checkout:active{background:#322e27;}


/* ==================== w2inputfix.css ==================== */
/* W2INPUTFIX_V1 — force visible dark text + caret in all text inputs.
   Telegram Mini App (dark theme) was rendering the caret and text fill white on the
   white input background -> the cursor and typed text vanished. Forcing color-scheme:light
   + explicit color / caret-color / -webkit-text-fill-color fixes it on every surface. */
:root{ color-scheme: light; }
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="color"]):not([type="button"]):not([type="submit"]):not([type="reset"]),
textarea,
select{
  color:#111 !important;
  caret-color:#111 !important;
  -webkit-text-fill-color:#111 !important;
}
input::placeholder, textarea::placeholder{
  color:#9aa0a6 !important;
  -webkit-text-fill-color:#9aa0a6 !important;
  opacity:1 !important;
}


/* ==================== w2free.css ==================== */
/* ===========================================================================
   W2FREE_V1 — FREE-mode input fix (mobile + web)
   ---------------------------------------------------------------------------
   Problem:
     - In FREE mode the print text was editable in TWO places at once — the
       dedicated Line 1 / Line 2 fields AND the persistent footer field — both
       bound to the same value, which feels like a duplicate input.
     - On the narrow mobile canvas the preview line had no wrap guard, so a
       single line broke into 2-3 visual lines after ~5-6 characters.
   Fix:
     1) In FREE mode hide the duplicate footer input (keep Add-to-cart + price).
        Free text is then edited ONLY in the dedicated Line 1 / Line 2 fields.
     2) Free preview lines never wrap — each line stays on one line up to
        10 chars (incl. space), same as web.
   FREE mode is detected by w2free.js, which toggles `body.w2free`.
   Additive overlay: no bundle edits, reversible.
   =========================================================================== */

/* 1) Hide the duplicate footer input while in FREE mode (cart + price stay) */
body.w2free .w2-foot-input{ display:none !important; }

/* 2) Free preview lines stay on one line (no 2-3 line wrap on mobile) */
body.w2free .sh-block div,
body.w2free .shirt-overlay div{ white-space:nowrap !important; }


/* ==================== w2lightbox.css ==================== */
/* W2LIGHTBOX_V2css — polished product modal.
   Tap a design mockup -> a centered product card scales in from the photo on a
   clean studio surface (no white haze on dark garments); dark blurred scrim.
   Only data:image snapshots trigger it (see w2lightbox.js). */
img[src^="data:image"]{ cursor:zoom-in; }

.w2lb-overlay{
  position:fixed; inset:0; z-index:99999;
  display:flex; align-items:center; justify-content:center;
  padding:max(20px,4vh) max(16px,4vw);
  background:rgba(9,9,11,.80) !important;

  cursor:zoom-out;
  opacity:0; transition:opacity .2s ease;
}
.w2lb-overlay.w2lb-in{ opacity:1; }
.w2lb-overlay.w2lb-closing{ opacity:0; }

/* the product frame — scales in from the photo */
.w2lb-card{
  position:relative;
  max-width:min(560px,92vw); max-height:88vh;
  border-radius:24px; overflow:hidden;
  background:linear-gradient(180deg,#f7f6f4 0%,#edebe7 100%);

             inset 0 1px 0 rgba(255,255,255,.65);
  cursor:default;
  transform:scale(.9); opacity:0;
  transition:transform .27s cubic-bezier(.2,.72,.24,1), opacity .22s ease;
}
.w2lb-overlay.w2lb-in .w2lb-card{ transform:scale(1); opacity:1; }
.w2lb-overlay.w2lb-closing .w2lb-card{ transform:scale(.94); opacity:0; }

/* garment sits crisp on the studio surface — no white img-background halo */
.w2lb-img{
  display:block; width:100%; height:auto;
  max-width:100%; max-height:88vh;
  object-fit:contain; background:transparent !important;
  image-rendering:auto;
}

/* W2_ONEX_V1 — only where it sits. The look comes from the one block. */
.w2lb-close{ position:fixed; top:18px; right:20px; }

.w2lb-hint{
  position:fixed; bottom:22px; left:0; right:0; text-align:center;
  color:rgba(255,255,255,.62); font:500 13px/1.2 system-ui,sans-serif; pointer-events:none;
}

/* brand wordmark (vector) */
.w2bl-host{ display:inline-flex; align-items:center; }
.w2bl{ display:inline-flex; align-items:center; color:#46413a; font-size:30px; line-height:1; }
.w2bl-w{ display:inline-flex; align-items:center; }
.w2bl-w svg{ height:.82em; width:auto; display:block; }
.w2bl-h3d{ display:inline-flex; width:1em; height:1em; margin:0 .04em; flex:0 0 auto; align-self:center; position:relative; top:.02em; } /* W2BL_HEART_SIZE_V1 */
.w2bl-h3d svg{ display:block; width:100%; height:100%; filter:drop-shadow(0 1px 1.5px rgba(0,0,0,.28)); }
.w2bl-sup{ display:inline-flex; align-self:flex-start; margin-left:.03em; margin-top:-.02em; }
.w2bl-sup svg{ height:.46em; width:auto; display:block; }

/* V6 — spinning brand heart. W2SPINONE_V1: the base keyframe from the app's
   own stylesheet and the one shared duration. The local copy that lived here,
   together with the 320px perspective it carried, is deleted -- that
   foreshortening is what made an identical turn read as a snap. */
.w2bl-h3d svg{
  transform-origin: center;
  will-change: transform;
  animation: w2HeartSpinGlobal var(--w2-heart-spin) linear infinite;
}
@media (prefers-reduced-motion: reduce){ .w2bl-h3d svg{ animation: none !important; }}

/* V7 — brand logo on tiles (CUSTOM + BRAND STYLE) */
.w2bl-host{ justify-content:center; }
.w2bl-host--custom{ display:flex; margin:0 auto 2px; }
.w2bl-host--custom .w2bl{ font-size:33px; }      /* ~ old .style-brandmark 30px */
.w2bl-host--tile{ display:flex; margin:0 auto 2px; }
.w2bl-host--tile .w2bl{ font-size:46px; }        /* match CLASSIC/STREET heart size */

/* V11 — precise tile sizes (tunable knobs) */
.w2bl-host--custom{ display:flex; margin:0 auto 2px; }
.w2bl-host--custom .w2bl{ font-size:26px !important; }   /* CUSTOM tile  (knob) */
.w2bl-host--brand{ display:flex; margin:0 auto 2px; }
.w2bl-host--brand  .w2bl{ font-size:28px !important; }   /* BRAND STYLE tile (knob, ~30% smaller than v10) */

/* V3 — BRAND on-garment font tuning (print path). Scoped to .sh-brand only;
   classic/street untouched. Fixes descender clipping + slightly lighter read. */
.sh-brand{ line-height:1.16 !important; }
.sh-brand .sh-phrase{
  line-height:1.30 !important;        /* g,y,j,G tails fit, no bottom clip */
  letter-spacing:0.012em !important;  /* a touch looser -> reads less heavy */
  padding-bottom:3px;                 /* extra bottom breathing room */
  -webkit-font-smoothing:antialiased; /* crisper, hair thinner */
  text-rendering:geometricPrecision;
}

/* W2_FOOTONE_V1 background, border deleted: never applied in any state */
.w2-foot-bubble::after{display:none!important;}

/* 2) input row (kept) */
.w2-foot-input{
  background:#ffffff!important;
  transition:border-color .15s ease, box-shadow .15s ease!important;
}/* W2_FOOTONE_V1 border, border-radius, min-height deleted: never applied in any state */
.w2-foot-field{
  background:transparent!important;color:#111111!important;font-weight:900!important;
  font-size:22px!important;letter-spacing:-.01em!important;
}
.w2-foot-field::placeholder{color:#797065!important;font-weight:700!important;}
.w2-foot-input:focus-within{
  border-color:#ff3b30!important;

}

/* 3) counter states (kept) */
.w2-foot-max{font-size:12px!important;font-weight:800!important;color:#7A7062!important;letter-spacing:.02em!important;}
.w2-foot-max.w2warn{color:var(--w2-dong)!important;}
.w2-foot-max.w2full{color:#E30C00!important;}

/* 4) body-level chips block — CHIPS ONLY, glued just above the input */
#w2word{pointer-events:none;
  font-family:'DM Sans',system-ui,-apple-system,sans-serif}
#w2word>*{pointer-events:auto}

/* W2WORD_v2: hide the label + helper — chips speak for themselves */
#w2word .w2word-label,
#w2word .w2word-helper{display:none!important}

/* horizontal scroll row: hidden scrollbar, smooth, soft right fade = "more →" */
#w2word .w2word-chips{
  display:flex;gap:8px;overflow-x:auto;padding:2px 16px 4px 2px;margin:0;
  scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;
  -webkit-overflow-scrolling:touch;
  -webkit-mask-image:linear-gradient(to right,#000 90%,transparent);
          mask-image:linear-gradient(to right,#000 90%,transparent);
}
#w2word .w2word-chips::-webkit-scrollbar{display:none}

/* W2_CHIPS_BLACK_V1 — чёрные чипсы, белый шрифт. Без перламутра, без бликов,
   без фона. Выбранный: белый чип, чёрное слово. */
#w2word .w2word-chip{
  border:1px solid rgba(255,255,255,.18);
  background:#0A0A0A;
  border-radius:999px;padding:8px 16px;font-size:13.5px;font-weight:900;
  letter-spacing:.005em;
  color:#FFFFFF;white-space:nowrap;cursor:pointer;flex:0 0 auto;
  box-shadow:none;
  -webkit-tap-highlight-color:transparent;
  transition:background .14s ease, color .14s ease, border-color .14s ease, transform .12s ease;
}
#w2word .w2word-chip:hover{ border-color:rgba(255,255,255,.38); }
#w2word .w2word-chip:active{ transform:scale(.94); }
#w2word .w2word-chip.sel{
  background:#FFFFFF !important;
  color:#0A0A0A !important;
  border-color:#FFFFFF !important;
}

/* 5) mobile: SHOW the pearl chips (was fully hidden before) */
@media (max-width:480px){/* W2_FOOTONE_V1 min-height deleted: never applied in any state */
  #w2word{display:block!important}
  #w2word .w2word-chips{padding-right:20px}
  #w2word .w2word-chip{padding:7px 13px;font-size:13px}}/* W2_FOOTONE_V1 color deleted: never applied in any state */
html.w2-dark .w2-foot-field::placeholder{ color:rgba(255,255,255,.55) !important; }
.w2flag-wrap{position:relative;display:flex;align-items:center;font-family:'DM Sans',system-ui,-apple-system,sans-serif}

/* ---- canonical dark menu (same look as the site name-row menu) ---- */
@keyframes w2menuIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}



/* ==================== w2overrides.css ==================== */
/* W2_FIX3_V1 W2HEARTFIX_V1 DELETED — second owner of the tile keyline,
   white-only, and a different grey from the other one. One statement, in
   w2heartrails.js, for every colour. */


/* ==================== w2sitefooter.css ==================== */
/* W2SITEFOOTER_V2 — constructor footer (bottom of .scroll). Dark, neat, animated. */
.w2-sitefooter, .w2-sitefooter * { box-sizing: border-box; }
.w2-sitefooter {
  order: 99999;                      /* pinned last among .scroll children */
  margin: 26px -16px 16px;           /* bleed to the scroll padding edges */
  padding: 24px 20px 26px;
  background:#0A0A0A; border:1px solid #242424; /* the body's black, in a line */
  border-radius: 22px;               /* neat rounded card — all corners */
  color: #cfcfd4;
  font-family: "DM Sans", system-ui, -apple-system, sans-serif;
}

/* ---- brand: W + spinning heart + ² ---- */
.w2-sitefooter .w2sf-brand { margin-bottom: 16px; }
.w2-sitefooter .w2sf-logo {
  font-family: "Bagel Fat One", cursive; font-weight: 400; font-size: 30px;
  color: #fff; letter-spacing: .5px; line-height: 1; display: inline-flex; align-items: baseline; gap: 1px;
}
.w2-sitefooter .w2sf-logo sup { font-size: .55em; }
.w2-sitefooter .w2sf-heart {
  display: inline-flex; width: .86em; height: .86em; margin: 0 .04em; vertical-align: -.04em;
}
.w2-sitefooter .w2sf-heart svg {
  display: block; width: 100%; height: 100%;
  transform-origin: center; will-change: transform;
  filter: drop-shadow(0 1px 1.5px rgba(0,0,0,.28));
  animation: w2HeartSpinGlobal var(--w2-heart-spin) linear infinite; /*W2SPINONE_V1 in unison, by construction*/
}
@media (prefers-reduced-motion: reduce) { .w2-sitefooter .w2sf-heart svg { animation: none; }}

/* ---- links (shared) ---- */
.w2-sitefooter .w2sf-link {
  color: #b9b9c0; font-size: 13px; line-height: 1.4; text-decoration: none; transition: color .15s;
}
.w2-sitefooter .w2sf-link:hover { color: #fff; text-decoration: underline; }

/* ---- Documents accordion ---- */
.w2-sitefooter .w2sf-acc { padding-top: 18px; }
.w2-sitefooter .w2sf-acc-btn {
  width: 100%; display: flex; align-items: center; justify-content: space-between;
  background: none; border: 0; padding: 4px 0; cursor: pointer;
  color: #fff; font-family: "Syne", system-ui, sans-serif; font-weight: 800; font-size: 16px;
}
.w2-sitefooter .w2sf-caret { transition: transform .22s ease; color: var(--w2-ink-3); flex: none; }
.w2-sitefooter .w2sf-acc.open .w2sf-caret { transform: rotate(180deg); }
.w2-sitefooter .w2sf-acc-panel {
  max-height: 0; overflow: hidden; transition: max-height .28s cubic-bezier(.22,.61,.36,1);
}
.w2-sitefooter .w2sf-acc-inner { padding-top: 12px; }
.w2-sitefooter .w2sf-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 9px 18px; }
@media (max-width: 460px) { .w2-sitefooter .w2sf-grid { grid-template-columns: 1fr; }}
.w2-sitefooter .w2sf-all {
  display: inline-block; margin-top: 14px; color: var(--w2-ink-3); font-weight: 700; font-size: 13px; text-decoration: none;
}
.w2-sitefooter .w2sf-all:hover { text-decoration: underline; }

/* ---- contacts: Support / Investors / Partners + briefs ---- */
.w2-sitefooter .w2sf-contacts { margin-top: 20px; padding-top: 0; }
.w2-sitefooter .w2sf-cgrid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }
@media (max-width: 460px) { .w2-sitefooter .w2sf-cgrid { grid-template-columns: 1fr; gap: 10px; }}
.w2-sitefooter .w2sf-contact { display: flex; flex-direction: column; gap: 2px; text-decoration: none; }
.w2-sitefooter .w2sf-contact b { color: #fff; font-size: 12px; font-weight: 700; }
.w2-sitefooter .w2sf-contact span { color: #b9b9c0; font-size: 12px; font-weight: 600; transition: color .15s; }
.w2-sitefooter .w2sf-contact:hover span { color: #cfcfd4; }
.w2-sitefooter .w2sf-briefs { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-top: 14px; }
.w2-sitefooter .w2sf-brief { color: var(--w2-ink-3); font-weight: 700; font-size: 13px; text-decoration: none; }
.w2-sitefooter .w2sf-brief:hover { text-decoration: underline; }

/* ---- company line ---- */
.w2-sitefooter .w2sf-co {
  margin-top: 20px; padding-top: 0;
  color: #9a9aa2; font-size: 11.5px; font-weight: 600; letter-spacing: .02em;
}

/* W2_SUP_FIX_V1 - keep the superscript "2" raised regardless of flex/theme,
   matching the canonical front W2Logo (translateY, not vertical-align,
   because .w2sf-logo is a flex row where vertical-align is ignored). */
.w2-sitefooter .w2sf-logo sup{
  font-size:.58em !important;
  line-height:1 !important;
  vertical-align:baseline !important;
  align-self:center !important;
  transform:translateY(-.42em) !important;
  margin-left:.04em !important;
}


/* ==================== w2rufont.css ==================== */
/* W2_RU_FONT_V1 — Russian UI in ALS Direct (slightly bolder).
   Family name "ALS" matches the front; .otf files are copied next to the
   overlays on deploy and served from /miniapp/construct/fonts/. */


/* general Russian UI text -> ALS Direct, a touch bolder than default */
html[lang="ru"] body,
html[lang="ru"] .app,
html[lang="ru"] .scroll {
  font-family: "ALS", "Manrope", system-ui, sans-serif;
  font-weight: 500;
}
/* section titles a bit bolder for presence */
html[lang="ru"] .sec-t {
  font-family: "ALS", "Manrope", system-ui, sans-serif;
  font-weight: 600;
}
/* brand wordmark / logo keep their own fonts (they declare font-family explicitly) */


/* ==================== w2dark.css ==================== */
/* W2_FROST_DROP_V1 — frosted glass drop for active tab + cart CTA */
/* ============================================================================
   W2DARK_V1 — premium dark theme for the constructor (scoped under html.w2-dark).
   Strategy: flip the bundle's CSS variables, then surgically darken the
   hard-coded #fff/#f8f8f8 panels from both the bundle and w2skin.css.
   The PRODUCT STAGE (.preview-wrap / garment) stays light — a lit studio
   stage in a dark UI. Selected states + cart CTA go brand-gold.
   Loaded LAST in <head> so it wins source order; uses !important to beat the
   skin's !important :root vars.
   ========================================================================== */

html.w2-dark{
  --bg:#161616 !important;
  --card:#232323 !important;
  --text:#f4f4f4 !important;
  --muted:rgba(255,255,255,.56) !important;
  --border:rgba(255,255,255,.12) !important;
  /* --gold / --heart kept (brand + product colours) */
}

/* page / app shell (skin forces body,.app -> #FAF9F5) */
html.w2-dark body,
html.w2-dark .app{ background:#161616 !important; }

/* ---- section headings & labels (follow --muted/--text where possible) ---- */
html.w2-dark .df-section{ color:var(--text) !important; }
html.w2-dark .df-label{ color:var(--muted) !important; }

/* ---- option cards (WHAT TO PRINT / colours / styles) ---- */
html.w2-dark .pick-card{ background:#232323 !important; }
html.w2-dark .pick-card.sel{ background:#2c2c2c !important; border-color:var(--gold) !important; }
html.w2-dark .pick-sub{ color:rgba(255,255,255,.45) !important; }
html.w2-dark .layout-card{ background:#232323 !important; }
html.w2-dark .layout-card.sel{ background:#2c2c2c !important; border-color:var(--gold) !important; }

/* ---- word chips ---- */

/* ---- pills / type switch ---- */
html.w2-dark .pill{ background:#232323 !important; color:var(--text) !important; }
html.w2-dark .pill.sel{ background:var(--gold) !important; border-color:var(--gold) !important; color:#161616 !important; }
/*W2_TABDROP_SINGLE_V1*/ html.w2-dark .type-btn.sel{background:transparent !important; border:0 !important; box-shadow:none !important}

/* ---- inputs / phrase field / selects (bundle #fff + skin #46413a text) ---- */
html.w2-dark .df-input,
html.w2-dark .df-select{ background:#2a2a2a !important; color:var(--text) !important; border-color:rgba(255,255,255,.14) !important; }
html.w2-dark .df-input::placeholder{ color:rgba(255,255,255,.40) !important; }
html.w2-dark .phr-wrap{ background:#232323 !important; }
html.w2-dark .w2-foot-field{ color:var(--text) !important; }
html.w2-dark .w2-foot-input{ color:var(--text) !important; }/* W2_FOOTONE_V1 background deleted: never applied in any state */

/* ---- QR helper note (gold-tinted, keep but darken) ---- */
html.w2-dark .qr-info{ background:rgba(216,170,39,.10) !important; border-color:rgba(216,170,39,.28) !important; color:#e3c069 !important; }

/* ---- colour indicator on the stage ---- */
html.w2-dark .color-ind{ background:rgba(28,28,28,.92) !important; border-color:rgba(255,255,255,.14) !important; color:rgba(255,255,255,.72) !important; }/* W2_FOOTONE_V1 background, border deleted: never applied in any state */
html.w2-dark .w2-foot-bubble::after{ background:linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,0) 38%) !important; }
html.w2-dark .bottom{ background:rgba(20,20,20,.86) !important; }/* W2_FOOTONE_V1 color deleted: never applied in any state *//* W2_FOOTONE_V1 background, border, color deleted: never applied in any state */
/* W2_CTAPILL_V1 a dead :active gradient for the same CTA, outranked
   by w2footglass.css and never painted. Deleted at source. */
html.w2-dark .btn-main,
html.w2-dark .btn-open{ background:#333 !important; }
html.w2-dark .btn-main:hover{ background:#3d3d3d !important; }

/* ---- success modal ---- */
html.w2-dark .succ-card{ background:#232323 !important; color:var(--text) !important; }

/* ---- PRODUCT STAGE stays light (lit studio) ---- */
/* .preview-wrap / .preview-canvas-wrap intentionally NOT darkened.
   On-garment QR keeps its white quiet zone. */
html.w2-dark .sh-qr{ background:#fff !important; }

/* ============================================================================
   W2DARK_V2 — mobile edge seal + white Mr.Host mascot + inverted (light) footer
   ========================================================================== */
/* seal the whole html so overscroll / notch / safe-area show no light seam */
html.w2-dark{ background:#161616 !important; }
html.w2-dark body{ background:#161616 !important; }

/* control-panel Mr.Host mascot -> white silhouette.
   Scoped to .pick-card so the mascot ON the light garment stage stays dark. */
html.w2-dark .pick-card img[src*="mr_host"]{ filter:brightness(0) invert(1) !important; opacity:.92 !important; }

/* footer INVERTED: a light card floating on the dark page (premium contrast).
   Light theme keeps the dark ink-gradient footer untouched. */
html.w2-dark .w2-sitefooter{
  background:#FFFFFF !important; border:1px solid #E6E6E6 !important;
  color:#3a3a3a !important;

}
html.w2-dark .w2-sitefooter .w2sf-logo{ color:#161616 !important; }
html.w2-dark .w2-sitefooter .w2sf-acc-btn{ color:#161616 !important; }
html.w2-dark .w2-sitefooter .w2sf-link{ color:#5c5c63 !important; }
html.w2-dark .w2-sitefooter .w2sf-link:hover{ color:#000 !important; }
html.w2-dark .w2-sitefooter .w2sf-contact b{ color:#161616 !important; }
html.w2-dark .w2-sitefooter .w2sf-contact span{ color:#5c5c63 !important; }
html.w2-dark .w2-sitefooter .w2sf-contact:hover span{ color:#161616 !important; }
html.w2-dark .w2-sitefooter .w2sf-co{ color:#83838b !important; }
html.w2-dark .w2-sitefooter .w2sf-caret,
html.w2-dark .w2-sitefooter .w2sf-all,
html.w2-dark .w2-sitefooter .w2sf-brief{ color:#9a7a35 !important; }

/* W2_WTP_DARKINK_V1 — dark theme: whiten the 'What to print' logo (W + superscript),
   the FREE label and the style previews so they stay visible; hearts keep their red. */
html.w2-dark .wtp-ink{ color:#ffffff !important; }
html.w2-dark .pick-card .style-preview{ color:#ffffff !important; }


/* ==================== w2styletiles.css ==================== */
/* W2STYLETILES_V4 — style-tile word sizing (responsive) + dark-theme lighten. */
.w2sp-word{display:inline-flex;align-items:center;justify-content:center;height:34px;line-height:1;
  letter-spacing:-.01em;white-space:nowrap;font-size:23px;opacity:1;pointer-events:none}
.w2sp-word.w2sp-brand{font-size:21px}
/* mobile: shrink + allow wrap so even BRAND STYLE fits the tile */
@media (max-width:560px){
  .w2sp-word{height:auto;min-height:28px;white-space:normal;text-align:center;line-height:1.04;font-size:14px;padding:1px 2px}
  .w2sp-word.w2sp-street{font-size:15px}
  .w2sp-word.w2sp-brand{font-size:12px}}
html.w2-dark .pick-sub{ color:rgba(244,241,236,.60) !important; }
html.w2-dark .pick-card{ background:rgba(255,255,255,.055) !important; border-color:rgba(255,255,255,.10) !important; }
html.w2-dark .pick-card.sel{ background:transparent !important; border-color:#FFFFFF !important; }


/* ==================== w2compose.css ==================== */
/* W2COMPOSE_v4 — composer:
   - placeholder TEXT only is swapped to "Would love to..." (set by JS). No font,
     size, colour or ellipsis change — it inherits the field's own placeholder
     styling, exactly like the original "Type your word...".
   - the 0/10 counter is hidden and a sticker (printable image) icon takes its
     place on the right of the input, opening the picker. */

/* NOTE: intentionally no ::placeholder font/colour overrides — keep it native. */

/* hide the 0/10 counter — replaced by the sticker icon */
.w2-foot-max{display:none!important;}

/* sticker icon button (body-level, glued where the counter was) */
/* W2COMPOSE_v7 — native flex child of .w2-foot-input (no fixed, no jitter) */
#w2wltc-emoji{
  position:static;flex:0 0 auto;width:34px;height:34px;border-radius:11px;cursor:pointer;color:#6b6b70;
  display:flex;align-items:center;justify-content:center;padding:0;margin:0;
  border:1px solid rgba(120,120,128,.28);background:rgba(120,120,128,.10);
  transition:transform .12s ease, background .15s ease;-webkit-tap-highlight-color:transparent;
}
#w2wltc-emoji.w2on{display:flex;}
#w2wltc-emoji:hover{background:rgba(120,120,128,.20);}
#w2wltc-emoji:active{transform:scale(.92);}

/* ---- sticker modal ---- */
.w2wltc-modal-ov{
  position:fixed;inset:0;z-index:2147483600;display:flex;align-items:flex-end;justify-content:center;
  background:rgba(15,14,13,.46);
  opacity:0;transition:opacity .16s ease;
}
.w2wltc-modal-ov.w2on{opacity:1;}
@media (min-width:560px){.w2wltc-modal-ov{align-items:center;}}
.w2wltc-modal{
  width:min(440px,94vw);margin:0 0 14px;background:#1f1d1b;color:#f4f1ec;
  border:1px solid rgba(255,255,255,.08);border-radius:20px;
padding:16px 16px 18px;
  transform:translateY(14px);transition:transform .18s ease;
}
@media (min-width:560px){.w2wltc-modal{margin:0;}}
.w2wltc-modal-ov.w2on .w2wltc-modal{transform:none;}
.w2wltc-head{display:flex;align-items:center;justify-content:space-between;margin:0 2px 12px;}
.w2wltc-title{
  font-family:'WLT Brand','Bagel Fat One',cursive;font-weight:400;font-size:22px;line-height:1;
  background:linear-gradient(150deg,#f0b25a 0%,#e2433f 70%);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;
}
.w2wltc-x{
  width:30px;height:30px;border-radius:999px;border:0;background:rgba(255,255,255,.08);
  color:#f4f1ec;font-size:18px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;
}
.w2wltc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;}
.w2wltc-item{
  aspect-ratio:1;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.05);
  display:flex;align-items:center;justify-content:center;font-size:30px;cursor:pointer;
  transition:transform .12s ease, background .15s ease;-webkit-tap-highlight-color:transparent;
}
.w2wltc-item:hover{background:rgba(255,255,255,.10);}
.w2wltc-item:active{transform:scale(.92);}
.w2wltc-note{margin:12px 4px 0;font-size:12px;font-weight:600;color:#a9a097;
  font-family:'DM Sans',system-ui,-apple-system,sans-serif;}


/* ==================== w2footfont.css ==================== */
/* W2FOOTFONT_V1 — constructor footer polish:
   - whole footer in ALS Direct ("ALS"), except the W❤² wordmark (keeps its brand font);
   - inner texts a bit larger, a bit bolder, brighter for readability;
   - the language flag becomes a centered chip on the brand row.
   Loaded after w2sitefooter.css; relies on the "ALS" @font-face (re-declared here
   for safety; the .otf files are served from /miniapp/construct/fonts/). */




/* ---- whole footer -> ALS Direct (wordmark keeps its own brand font) ---- */
.w2-sitefooter,
.w2-sitefooter .w2sf-link,
.w2-sitefooter .w2sf-acc-btn,
.w2-sitefooter .w2sf-contact b,
.w2-sitefooter .w2sf-contact span,
.w2-sitefooter .w2sf-brief,
.w2-sitefooter .w2sf-all,
.w2-sitefooter .w2sf-co{
  font-family:"ALS","DM Sans",system-ui,-apple-system,sans-serif !important;
}
.w2-sitefooter .w2sf-logo{font-family:"Bagel Fat One",cursive !important;}

/* ---- Documents heading: ALS, keep its (normal) size ---- */
.w2-sitefooter .w2sf-acc-btn{font-weight:700 !important;color:#ffffff !important;}

/* ---- inner texts: larger, bolder, brighter (much easier to read) ---- */
.w2-sitefooter .w2sf-contact b{font-size:14px !important;font-weight:700 !important;color:#ffffff !important;}
.w2-sitefooter .w2sf-contact span{font-size:14px !important;font-weight:600 !important;color:#d6d6dc !important;}
.w2-sitefooter .w2sf-link{font-size:14.5px !important;font-weight:600 !important;color:#d2d2d9 !important;}
.w2-sitefooter .w2sf-brief{font-size:14.5px !important;font-weight:700 !important;}
.w2-sitefooter .w2sf-all{font-size:14.5px !important;font-weight:700 !important;}
.w2-sitefooter .w2sf-co{font-size:13px !important;font-weight:600 !important;color:#bcbcc4 !important;letter-spacing:.02em;}

/* ---- language: flag -> centered chip on the brand row ---- */
.w2-sitefooter .w2sf-brand{position:relative;}


/* ==================== w2freeinput.css ==================== */
/* W2FREEINPUT_V1 — FREE/CUSTOM line inputs legible on dark.
   The Line 1 / Line 2 / Word fields (.phr-inp) sit on a dark wrap in dark theme
   (html.w2-dark .phr-wrap -> #232323), but w2inputfix.css forces ALL inputs to
   black text+caret (#111) with high specificity, so the typed text and caret are
   invisible there. Restore the theme's light text/caret on dark only (light theme
   keeps dark text on its light wrap). Specificity intentionally exceeds the
   w2inputfix :not()-chain so this wins. */

html.w2-dark .phr-inp:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="color"]):not([type="button"]):not([type="submit"]):not([type="reset"]){
  color:var(--text) !important;
  -webkit-text-fill-color:var(--text) !important;
  caret-color:var(--text) !important;
}
html.w2-dark .phr-inp::placeholder{
  color:rgba(255,255,255,.55) !important;
  -webkit-text-fill-color:rgba(255,255,255,.55) !important;
  opacity:1 !important;
}


/* ==================== w2strip.css ==================== */
/* ============================================================================
   W2STRIP_V1 — strict dark-canvas RIGHT control panel (v2).
   Scope: ONLY the right-side option sections (WHAT TO PRINT / HEART COLOR /
   HEART STYLE / STYLE). Header, product tabs and word chips are NOT touched.
   One solid #161616 canvas: no inner panel background, no divider lines,
   no tile boxes, no gold outlines. Only the icon + label text + heart float
   on the canvas. Selection = brightness. GOLD reserved for .qr-info banner
   and .qr-toggle slider (untouched). Loaded LAST in <head>.
   ========================================================================== */

/* 1. side stripes on the app frame off (the vertical lines on the sides) */
html.w2-dark .app{ border-left:0 !important; border-right:0 !important; }

/* 2. SECTION WRAPPER -> one solid canvas.
   .card = per-section box; base CSS gives it background:var(--card) (#232323
   in dark) + border-bottom (the divider line). Kill both so every section
   sits directly on the #161616 page with no inner panel and no line between. */
html.w2-dark .card{
  background:transparent !important;
  border:0 !important;
  border-bottom:0 !important;

}

/* 3. option tiles -> no box (WHAT TO PRINT / HEART COLOR / HEART STYLE / STYLE) */
html.w2-dark .pick-card,
html.w2-dark .pick-card.sel,
html.w2-dark .layout-card,
html.w2-dark .layout-card.sel{
  background:transparent !important;
  border:0 !important;
  border-color:transparent !important;

  border-radius:0 !important;
  padding:6px 4px !important;


}
/* selection by brightness, not by box */
html.w2-dark .pick-card,
html.w2-dark .layout-card{ opacity:.45 !important; transition:opacity .15s ease, transform .15s ease !important; }
html.w2-dark .pick-card.sel,
html.w2-dark .layout-card.sel{ opacity:1 !important; }

/* 4. labels: a touch of colour + a touch bolder */
html.w2-dark .df-section{ color:#f7f4ee !important; font-weight:800 !important; border:0 !important; }
html.w2-dark .df-label{ color:rgba(244,241,234,.70) !important; font-weight:700 !important; }
html.w2-dark .pick-lbl{ color:#f4f1ea !important; font-weight:800 !important; letter-spacing:.05em !important; }
html.w2-dark .pick-sub{ color:rgba(244,241,234,.60) !important; font-weight:600 !important; }

/* 6. remove the two superfluous input hints (all .phr-hint = "Don't think,
   just finish it" + "Mr.Host and the word are centered"). No other hint uses
   this class, so hiding it removes exactly those two, in every language. */
.phr-hint{ display:none !important; }

/* 5. remove the frame line around the preview stage */
html.w2-dark .preview-wrap{ border:0 !important; }

/* NOT TOUCHED (kept as-is): header (.hdr / hat.svg), product tabs
   (.type-sw / .type-btn), word chips (.lib-chip / pearl words),
   QR banner (.qr-info), QR slider (.qr-toggle / .qr-knob). */


/* ==================== w2slcard.css ==================== */
/* ============================================================================
   W2SLCARD_V1 — ShopLink card polish (constructor).  [rev6 — theme-aware]
   - DARK theme  -> card dark #323232 (address-block tone). This beats w2dark's
     `html.w2-dark .w2-sitefooter{cream}` (0,2,1) because the card element is
     <footer class="w2-sitefooter w2sf-shoplink ...">; our (0,3,1) wins.
   - LIGHT theme -> card stays its native white .w2sf-light (no override).
   - SIZE synced on BOTH themes (unscoped): drop the +6px side margin (a touch
     wider on web) + gentle mobile bleed so the gutter matches the footer bubble.
   - black swatch gold outline + gold Back pill (unchanged).
   The card recolor is done here in CSS (not by editing w2sitefooter.js) so the
   native light/dark card variants stay intact.
   ========================================================================== */

/* --- DARK theme only: card -> #323232 --- */
/* W2SL_BODY_BLACK_V3 — тело карточки = чёрный кнопки чекаута (#0a0a0a).
   Раньше тут стоял #323232 (серый) и бил (0,2,0)-правило из w2sitefooter.js. */
html.w2-dark .w2-sitefooter.w2sf-shoplink{
  background:#0a0a0a !important;
  color:#e8e8ea !important;
  border:1px solid rgba(255,255,255,.10) !important;
}
/* LIGHT theme: .w2sf-shoplink.w2sf-light keeps its native #ffffff — intentionally
   NOT overridden here. */

/* --- SIZE: IDENTICAL on both themes. w2theme.js toggles `html.w2-dark`; light
   theme = html without it. No theme scoping here + explicit .w2sf-light coverage
   + `html ` prefix (0,2,1 / 0,3,1) so it beats the native .w2sf-shoplink margin
   (0,1,0) in BOTH themes. This is the fix: rev5's size rule was html.w2-dark-only,
   so light theme kept the narrower native margin. --- */
html .w2-sitefooter.w2sf-shoplink,
html .w2-sitefooter.w2sf-shoplink.w2sf-light{
  margin-left:-16px !important;
  margin-right:-16px !important;
}
@media (max-width:560px){
  html .w2-sitefooter.w2sf-shoplink,
  html .w2-sitefooter.w2sf-shoplink.w2sf-light{
    margin-left:-16px !important;
    margin-right:-16px !important;
  }}

/* W2_CANONHEART_V1 — A SWATCH MUST BE VISIBLE ON EITHER PAGE.
   .clr carries a background colour and nothing else: no border, no ring. So the
   black swatch vanishes into a dark page and the white one into a light page,
   and only the SELECTED swatch has an outline — the control shows where you are
   but not where you can go.
   One hairline that opposes the page handles both ends; a per-colour patch would
   have needed one rule per colour per theme, and a fifth colour would have
   arrived invisible.
   This replaces an empty rule that was reserved for the same problem and never
   filled in — left in place it is a second address a future fix could land at. */
.clr{
  box-shadow: inset 0 0 0 1px rgba(0,0,0,.22);
}
html.w2-dark .clr{
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.34);
}/*W2_BACKPILL_GOLD_V2*/


/* ==================== w2shirtfix.css ==================== */
/* ============================================================================
   W2SHIRTFIX_V1 — horizontally centre the black/grey/navy T-shirt fronts.
   The mockup PNGs have the shirt's sleeve bbox shifted LEFT of the image centre
   (measured: white -1.1%, black -2.9%, grey -2.6%, navy -2.8% of image width),
   while the print layer sits at canvas centre -> the logo reads off-centre on
   non-white tees. Fix: nudge ONLY the garment layer (.shirt-img — separate from
   the print .shirt-overlay) to the RIGHT so the sleeve bbox is centred, sleeves
   equidistant from the photo edges. Width only, height untouched. White is left
   as-is (already ~centred, per request).

   Uses the individual `translate` property so it COMBINES with the existing
   viewport-specific transform:scale() (1.4 mobile / 1.32 desktop) instead of
   replacing it. Values = dx_native * (boxH/1180) * scale / boxWidth; mobile and
   desktop agree to <0.15% (sub-pixel), so one value each. The capture path
   (cart thumb + fullscreen) bakes `translate`, so those centre too. ========== */


/* ==================== w2printraise.css ==================== */
/* ============================================================================
   W2PRINTRAISE_V1 — raise the print/logo toward the chest on WEB only.
   On the desktop layout the garment was zoomed/raised but the print layer
   (.sh-ovl, centred in the canvas) stayed put, so the logo reads low (solar
   plexus) instead of on the chest. Nudge the whole print layer UP — web only
   (@media min-width:768px, the desktop breakpoint), T-shirts + hoodies only.
   Cap/bag and the mobile layout are intentionally untouched (mobile is correct).

   .sh-ovl is a following sibling of .shirt-img, so `[src*="tshirt_"] ~ .sh-ovl`
   scopes by garment. Uses the individual `translate` property (combines with any
   existing transform; also baked by w2lightbox into the cart/fullscreen capture,
   so the stored order geometry rises to match). Value is calibratable. ======== */
@media (min-width:768px){
  .shirt-img[src*="/tshirt_"] ~ .sh-ovl,
  .shirt-img[src*="hoodie_"] ~ .sh-ovl{
    translate:0 -9.6% !important;
  }}


/* ==================== w2qrmobile.css ==================== */
/* ============================================================================
   W2QRMOBILE_V1 — shrink the QR ~20% on the MOBILE layout only.
   On mobile the garment is zoomed more (scale 1.4 vs 1.32 on web), so the QR
   (sized as a % of the canvas) reads ~20% larger. Web is already perfect, so we
   scope this to the mobile breakpoint (< the 768px desktop layout).
   We keep the inline centring transform:translateX(-50%) and append scale(.8),
   so the QR stays centred, just 20% smaller. Per-view sizes keep their ratio
   because we scale (not set a fixed width). html2canvas bakes `transform`, so
   the cart/fullscreen on mobile match. ========================================= */
@media (max-width:767px){
  .sh-qr{ transform:translateX(-50%) scale(0.96) !important; }}



/* ======================= W2_FOOT_TWO_V1 — ДВА КОМПОНЕНТА ======================
   1) .w2-foot-input   — инпут слова, самостоятельный, без общей подложки
   2) .w2-foot-actions — САМА становится кнопкой на всю ширину:
                         [w2-foot-cta] [w2-foot-price]   (the back arrow is deleted)
   Никаких третьих сущностей. ================================================ */

/* --- ПОДЛОЖКИ НЕТ. Глушим ВСЕ конкурирующие блоки .w2-foot-bubble
       (их в файле пять: light, compact, keyboard-on, dense, dark).
       Специфичность (0,2,2) бьёт html.w2-dark .w2-foot-bubble (0,2,1). --- */
html body .w2-foot .w2-foot-bubble,
html.w2-dark body .w2-foot .w2-foot-bubble{
  background:none !important;
  -webkit-backdrop-filter:none !important;
  backdrop-filter:none !important;
  border:0 !important;
  box-shadow:none !important;
  padding:0 !important;
  border-radius:0 !important;
  gap:10px !important;
}
html body .w2-foot .w2-foot-bubble::after{ display:none !important; content:none !important; }

/* --- КОМПОНЕНТ 1: инпут --- */
html body .w2-foot .w2-foot-input{
  background:#ffffff !important;
  border:1px solid rgba(0,0,0,.10) !important;
  border-radius:16px !important;
  box-shadow:0 8px 24px rgba(0,0,0,.12) !important;
  padding:15px 18px !important;
  min-height:52px !important;
}

/* --- КОМПОНЕНТ 2: одна кнопка --- */
/* P38_DOCK_LAYOUT_ONE_FILE_V1 the dock's layout moved to w2footglass.css, which owns the
   rest of it. Two files declaring one element is a tie waiting to be broken
   by load order. *//* W2_FOOTONE_V1 background, border, box-shadow deleted: never applied in any state */


/* Add to cart — центр, тянется */
html body .w2-foot .w2-foot-actions .w2-foot-cta{
  box-shadow:none !important;
  min-height:0 !important;
  font-size:16px !important;
  font-weight:800 !important;
  text-align:center !important;}/* W2_FOOTONE_V1 background, border, color deleted: never applied in any state */

/* цена — справа, ВНУТРИ кнопки */
html body .w2-foot .w2-foot-actions .w2-foot-price{
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-end !important;
  justify-content:center !important;
  line-height:1 !important;}/* W2_FOOTONE_V1 flex deleted: never applied in any state */
html.w2-dark body .w2-foot .w2-foot-input{ background:#ffffff !important; }
html.w2-dark body .w2-foot .w2-foot-actions{ background:#0a0a0a !important;}
html.w2-dark body .w2-foot .w2-foot-actions .w2-foot-cta{ background:none !important; border:0 !important;}/* W2_FOOTONE_V1 color deleted: never applied in any state */
html.w2-dark body .w2-foot .w2-foot-actions .w2-foot-usd{ color:#ffffff !important;}

html body .w2-foot .w2-foot-actions .w2-foot-usd{ font-size:21px !important; line-height:1 !important;}
html body .w2-foot .w2-foot-actions .w2-foot-gbt{ font-size:11px !important; line-height:1 !important; margin-top:3px !important; white-space:nowrap !important;}


/* ==================== W2_CAP_SCALE_V1 ====================
   Кепка шире футболки, и на scale(1.4) она заезжала под рельсы сердец.
   Жмём ВЕСЬ холст (картинка + лого-оверлей одним трансформом), а не картинку —
   иначе лого съедет с кепки, т.к. .sh-ovl позиционируется независимо.
   ============================================================ */
/* W2_CAP_SCALE_WEB_V4 the wrap scale for the headwear family is set BY EYE and is
   no longer derived from crown geometry. The old note here claimed .92 came
   from 944/820 * .80 and reproduced a previous on-screen crown width to the
   pixel; after the values were tuned on screen that claim was simply false,
   and a comment that argues with the number under it is a second truth.
   Web .92 -> .828 (-10%). The phone value is owned by W2_CAP_SCALE_MOBILE_*
   in the media query below and is not touched here.
   ONE transform, on the wrap: the blank and the print overlay must move
   together or the logo drifts off the crown. Never scale .shirt-img alone.
   snapback and bucket share the crown, so they share the scale. */
.preview-canvas-wrap[data-product="cap"],
.preview-canvas-wrap[data-product="snapback"],
.preview-canvas-wrap[data-product="bucket"]{
  transform: scale(.828);
  transform-origin: center center;
}
/* W2_CAP_SCALE_MOBILE_V3 the phone value is set by eye, not derived. .875 read too
   large, .7875 still did: a second -10% -> .70875. Desktop .92 above is
   approved and unchanged. Still ONE transform on the wrap, so blank and
   print move together and the logo cannot drift off the crown. */
@media (max-width:480px){
  .preview-canvas-wrap[data-product="cap"],
  .preview-canvas-wrap[data-product="snapback"],
  .preview-canvas-wrap[data-product="bucket"]{ transform: scale(.70875); }}


/* ===================== W2_CHIPS_TOUCH_V1 =====================
   Чипсы не скроллились ПАЛЬЦЕМ (мышь работала — потому эмуляция не ловила).
   .preview-canvas-wrap (240x280) кончается на ~330px, чипсы начинаются на ~332px.
   Зазор 2px, pointer-events на канвасе не задан => палец цеплял его край.
   Канвас интерактива не содержит (.shirt-img/.sh-ovl уже pointer-events:none),
   а пинч висит на самом .preview-wrap и продолжает работать.
   ============================================================ */
@media (max-width:480px){
  .preview-wrap .preview-canvas-wrap{ pointer-events:none !important; }

              /* выше #w2hr-host (z-index:20) */
  #w2word .w2word-chips{
    pointer-events:auto !important;
    touch-action:pan-x !important;             /* жест принадлежит чипсам */
    overflow-x:auto !important;
    -webkit-overflow-scrolling:touch !important;
    overscroll-behavior-x:contain !important;  /* не отдавать жест наружу */
  }
  #w2word .w2word-chip{ pointer-events:auto !important; }}


/* ===================== W2_INPUT_ON_CARD_V1 =====================
   Инпут живёт НА карточке, тонкой полосой над чипсами. Футер = только кнопка.
   ============================================================ */

/* W2_LIFT_V1 — the 78px / 86px pair is DELETED. Identical selector and
   identical !important to the 44px / 48px pair further down in
   W2_INPUT_IN_COLUMN_V1, which loads later and has therefore always won. Two
   pairs, one number, and the losing one read as the live value to anyone
   scrolling this file top to bottom.
   The mobile frame height that W2_LOCKTOAST_V1 parked in this block has moved
   down with the live pair. It applied from here only because it targets
   .preview-wrap rather than the canvas — luck, not design. */

/* инпут: тонкая полоса, почти незаметная на белом фото */
.preview-wrap .w2-foot-input{
  position:absolute !important;
  left:0 !important; right:0 !important; bottom:46px !important; top:auto !important;
  z-index:25 !important;
  display:flex !important; align-items:center !important; gap:8px !important;
  height:42px !important; min-height:0 !important;
  margin:0 !important; padding:0 16px !important;
  background:rgba(255,255,255,.90) !important;
  -webkit-backdrop-filter:blur(10px) !important; backdrop-filter:blur(10px) !important;
  border:0 !important;
  border-top:1px solid rgba(0,0,0,.06) !important;
  border-bottom:1px solid rgba(0,0,0,.06) !important;
  border-radius:0 !important;
  box-shadow:none !important;
}
.preview-wrap .w2-foot-input:focus-within{
  background:#ffffff !important;
  border-top-color:rgba(0,0,0,.14) !important;
  border-bottom-color:rgba(0,0,0,.14) !important;
}
.preview-wrap .w2-foot-field{
  font-size:16px !important; font-weight:800 !important;
  letter-spacing:.01em !important; color:#111 !important;
}
.preview-wrap .w2-foot-field::placeholder{
  color:#797065 !important; font-weight:600 !important; font-size:15px !important;
}
.preview-wrap .w2-foot-max{ font-size:11px !important; color:#7A7062 !important; }

/* W2_CHIPS_WEB50_V1 — прибивать чипсы к карточке ТОЛЬКО на мобилке.
   Раньше это правило было безусловным, и его left/bottom с !important
   перебивали инлайн-стили place() на вебе — чипсы не могли встать над футером. */
@media (max-width:480px){
  #w2word{display:block !important}}
#w2word .w2word-chips{
  pointer-events:auto !important;
  touch-action:pan-x !important;
  overflow-x:auto !important;
  -webkit-overflow-scrolling:touch !important;
  overscroll-behavior-x:contain !important;
  padding-left:12px !important; padding-right:16px !important;
}
#w2word .w2word-chip{ pointer-events:auto !important; }

/* футер: инпута там больше нет — остаётся чистая панель действия */
html body .w2-foot .w2-foot-bubble{ gap:0 !important; }


/* ===================== W2_INPUT_OFF_V1 =====================
   ВРЕМЕННО: инпут слова скрыт везде. Футер = только кнопка действия.
   Слово задаётся чипсами. Во FREE работают его собственные инпуты в колонке.
   ЧТОБЫ ВЕРНУТЬ — удалить этот блок целиком. Больше ничего делать не нужно.
   ============================================================ */
html body .w2-foot .w2-foot-input{ display:none !important; }
html body .w2-foot .w2-foot-bubble{ gap:0 !important; }


/* ===================== W2_INPUT_IN_COLUMN_V1 =====================
   Инпут — карточка в колонке (CUSTOM), как во FREE. Ни на фото, ни в футере.
   Гасит собой мёртвые правила прошлых заходов (W2_INPUT_ON_CARD / _OFF).
   ============================================================ */

/* фото: полоса инпута ушла — оставляем место только под чипсы */
/* W2_LIFT_V1 THE ONLY PLACE THIS NUMBER IS STATED.
   The frame centres its content, so a bottom margin of M raises the garment by
   M/2 — 48px was a 24px lift and the hem finished level with the chip row.
   80px lifts it 40px and opens a band of stage between the two.
   Desktop stays at 44px: that frame is 640px tall and was never tight. */
.preview-wrap .preview-canvas-wrap{ margin-bottom:44px !important; }
@media (max-width:480px){
  /* the phone card is 430px, not React's 380px — see W2_LOCKTOAST_V1 */
  .preview-wrap{ height:430px !important; }
  .preview-wrap .preview-canvas-wrap{ margin-bottom:80px !important; }}

/* инпут в колонке — вид как у поля FREE (.phr-wrap) */
.card[data-sec="text"] .w2-foot-input{
  position:static !important;
  display:flex !important; align-items:center !important; gap:8px !important;
  height:auto !important; min-height:0 !important;
  margin:0 !important; padding:11px 16px !important;
  background:#fafafa !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  border:1.5px solid var(--border) !important;
  border-radius:10px !important;
  box-shadow:none !important;
  inset:auto !important;
}
.card[data-sec="text"] .w2-foot-input:focus-within{
  border-color:#111 !important; background:#fff !important;
}
.card[data-sec="text"] .w2-foot-field{
  flex:1 1 auto !important; min-width:0 !important;
  border:0 !important; outline:none !important; background:transparent !important;
  font-size:14px !important; font-weight:700 !important; color:var(--text) !important;
}
.card[data-sec="text"] .w2-foot-max{ flex:0 0 auto !important; font-size:11px !important; color:#7A7062 !important; }

/* футер: остаётся только кнопка действия */
html body .w2-foot .w2-foot-bubble{ gap:0 !important; }


/* ===================== W2_INPUT_FRAME_V1 =====================
   Поле в рамке, внутри приглушённый префикс "Would love to:".
   Тема: тёмная -> белый текст + белая каретка; светлая -> чёрные.
   ФИКС: раньше .card[data-sec="text"] .w2-foot-input (0,3,0) перебивал
   html.w2-dark .w2-foot-input (0,2,1) => поле было белым и слово писалось
   белым по белому. Тема теперь адресуется с (0,4,1) и выигрывает.
   ============================================================ */

/* --- рамка + раскладка (общее) --- */
.card[data-sec="text"] .w2-foot-input{
  display:flex !important; align-items:center !important; gap:8px !important;
  padding:12px 16px !important;
  border-radius:12px !important;
  border-width:1.5px !important; border-style:solid !important;
}
.card[data-sec="text"] .w2-foot-pre{
  flex:0 0 auto !important;
  font-size:14px !important; font-weight:600 !important;
  white-space:nowrap !important;
  -webkit-user-select:none !important; user-select:none !important;
}
.card[data-sec="text"] .w2-foot-field{
  flex:1 1 auto !important; min-width:0 !important;
  border:0 !important; outline:none !important; background:transparent !important;
  font-size:14px !important; font-weight:700 !important;
}

/* --- СВЕТЛАЯ тема: чёрный текст, чёрная каретка --- */
.card[data-sec="text"] .w2-foot-input{
  background:#ffffff !important;
  border-color:rgba(0,0,0,.14) !important;
}
.card[data-sec="text"] .w2-foot-input:focus-within{
  border-color:#111111 !important;
}
.card[data-sec="text"] .w2-foot-field{
  color:#111111 !important;
  caret-color:#111111 !important;
}
.card[data-sec="text"] .w2-foot-field::placeholder{ color:#797065 !important; font-weight:600 !important; }
.card[data-sec="text"] .w2-foot-pre{ color:#a8a29a !important; }
.card[data-sec="text"] .w2-foot-max{ color:#7A7062 !important; }

/* --- ТЁМНАЯ тема: белый текст, белая каретка --- */
html.w2-dark .card[data-sec="text"] .w2-foot-input{
  background:#141416 !important;
  border-color:rgba(255,255,255,.22) !important;
}
html.w2-dark .card[data-sec="text"] .w2-foot-input:focus-within{
  border-color:rgba(255,255,255,.60) !important;
  background:#191a1c !important;
}
html.w2-dark .card[data-sec="text"] .w2-foot-field{
  color:#ffffff !important;
  caret-color:#ffffff !important;
}
html.w2-dark .card[data-sec="text"] .w2-foot-field::placeholder{ color:rgba(255,255,255,.55) !important; }
html.w2-dark .card[data-sec="text"] .w2-foot-pre{ color:rgba(255,255,255,.44) !important; }
html.w2-dark .card[data-sec="text"] .w2-foot-max{ color:rgba(255,255,255,.55) !important; }


/* W2_CHIPS_WEB50_V1 — веб: чипсы над футером, лентой на всю его ширину */
@media (min-width:481px){
  
  #w2word .w2word-chips{
    padding:2px 16px 6px 2px;
    overflow-x:auto;
    scrollbar-width:none;
  }
  #w2word .w2word-chips::-webkit-scrollbar{ display:none; }}


/* W2_PRINT_TILE_UNIFY_V1 — буква W в мини-логотипе плитки WHAT TO PRINT наследовала
   color:var(--muted) и в тёмной теме была почти невидима. Даём светлый оттенок. */
/* выбранная плитка — контрастнее */


/* W2_MASCOT_FIX_V1 — маскот-слой не должен перехватывать палец над чипсами.
   Внутри интерактива нет (это картинка + подпись), поэтому прозрачен для указателя. */
.w2-mascot-layer{ pointer-events:none !important; }


/* ===================== W2_MASCOT_WORD_V3 ===================== */

/* П1 — опустить маскот ТОЛЬКО на вебе (>=768px). Мобильное правило (строка ~278,
   .sh-block.center = -26px) НЕ трогаем — там маскот стоит правильно. */
@media (min-width:768px){
  .sh-block.center div:has(> img[src*="mr_host"]){ transform: translateY(-8px) !important; }}

/* П2 — в маскоте чипсы на мобилке должны скроллиться и жаться.
   Весь оверлей-стек поверх превью прозрачен для указателя (интерактива нет),
   чтобы палец доставал до чипсов. #w2word поднят над стеком. */
@media (max-width:480px){
  .preview-wrap .sh-ovl,
  .preview-wrap .shirt-overlay,
  .preview-wrap .w2-mascot-layer{ pointer-events:none !important; }
  
  #w2word .w2word-chips{
    pointer-events:auto !important;
    touch-action:pan-x !important;
    overflow-x:auto !important;
    -webkit-overflow-scrolling:touch !important;
    overscroll-behavior-x:contain !important;
  }
  #w2word .w2word-chip{ pointer-events:auto !important; }}


/* ===================== W2_CART_DONG_DARK_V1 =====================
   Корзина: шрифт Direct (@font-face "ALS" уже подключён), + тёмная тема.
   Донги оранжевым (не красным GBT), Syne/Montserrat/DM Sans -> ALS. */

/* --- шрифт Direct везде в корзине --- */
#w2c-root .w2c-title,
#w2c-root .w2c-name,
#w2c-root .w2c-price,
#w2c-root .w2c-total-lbl,
#w2c-root .w2c-total-val,
#w2c-root .w2c-total-gbt,
#w2c-root .w2c-q,
#w2c-root .w2c-continue,
#w2c-root .w2c-checkout,
#w2c-root .w2c-empty{ font-family:"ALS","Manrope",system-ui,sans-serif !important; }

/* донги — оранжевый бренд-акцент, не красный "GBT" */
#w2c-root .w2c-total-gbt{ color:var(--w2-dong) !important; }
#w2c-root .w2c-price{ color:#c99a5c; }

/* --- ТЁМНАЯ ТЕМА --- */
#w2c-root.w2c-dark .w2c-backdrop{ background:rgba(0,0,0,.60); }
#w2c-root.w2c-dark .w2c-sheet{
  background:#0f0f10 !important;
  border-color:rgba(255,255,255,.10) !important;
}
#w2c-root.w2c-dark .w2c-title,
#w2c-root.w2c-dark .w2c-name,
#w2c-root.w2c-dark .w2c-total-val,
#w2c-root.w2c-dark .w2c-q{ color:#f2f2f2 !important; }
#w2c-root.w2c-dark .w2c-total-lbl{ color:#9a9a9a !important; }
#w2c-root.w2c-dark .w2c-row{ border-bottom-color:rgba(255,255,255,.08) !important; }
#w2c-root.w2c-dark .w2c-foot{
  background:#0f0f10 !important;
  border-top-color:rgba(255,255,255,.08) !important;
}
#w2c-root.w2c-dark .w2c-thumb{
  background:#1a1a1c !important; border-color:rgba(255,255,255,.08) !important;
}
#w2c-root.w2c-dark .w2c-qty button{
  background:#1a1a1c !important; border-color:rgba(255,255,255,.14) !important; color:#f2f2f2 !important;
}
#w2c-root.w2c-dark .w2c-qty button:active{ background:#242427 !important; }
#w2c-root.w2c-dark .w2c-continue{
  background:#1a1a1c !important; border-color:rgba(255,255,255,.14) !important; color:#f2f2f2 !important;
}
#w2c-root.w2c-dark .w2c-checkout{ background:#ffffff !important; color:#0a0a0a !important; }










/* W2_HEADER_HEART_V1 — хедер табов: чёрный фон как футер + жирнее шрифт */
/*W2_SWAPLOCK_V1 one notch bolder; this is the ONLY place the rail weight is stated*/
.type-btn{ font-weight:900 !important; letter-spacing:.01em !important; }
.type-btn.sel{font-weight:900 !important}


/* W2_HEARTFIX2_V1 — W2_CAPHEART_HIDE_V1 УДАЛЕНО. Правило было верным для своего
   времени: сердца на фото есть только на мобилке, «веб CUSTOM не трогаем».
   Теперь рельсы на изделии — единственный интерфейс сердец на любой ширине,
   так что медиазапрос стал ровно тем, что оставляло дубль на вебе.
   Скрытие переехало в w2order-canon.css, где живёт весь вопрос сердец. */

/* W2_TAPCLEAN_V1 — kill Android tap-highlight blue box + focus outline (clean taps) */
* { -webkit-tap-highlight-color: transparent !important; }
button, a, [role="button"], [onclick], [tabindex],
.heart, [class*="heart"], [class*="chip"], [class*="tile"],
[class*="swatch"], [class*="arrow"], [class*="nav"] {
  -webkit-tap-highlight-color: transparent !important;
  outline: none !important;
}
:focus, :focus-visible { outline: none !important; }
::selection { background: transparent; }


/* W2_BRAND_DARK_V1 — Brand Style tile wordmark white in dark theme (light theme unchanged) */
html.w2-dark .w2bl-host--brand .w2bl-w svg path,
html.w2-dark .w2bl-host--brand .w2bl-sup svg path{ fill:#ffffff !important; }

/* ============================================================================
   W2_WEB_CONSTRUCTOR_V1 — canonical WEB-only constructor chrome (>=768px).
   Single source of truth: supersedes the iterative V1..V6 packs (dedup'd, no
   overlaps). MOBILE is never touched (everything is inside the media query).
   Covers: light header + product rail, theme-adaptive gliding "drop", white
   checkout under the RIGHT column, white word chips, T-SHIRT badge off.
   ============================================================================ */
@media (min-width:768px){

  /* ---- product rail: white; label ink (dark) ---- */

  /* ---- gliding "drop" (w2tabdrop .type-sw::before): glide kept, theme colours.
          light = white drop / ink label; dark = ink drop / white label. ---- */
  html:not(.w2-dark) .type-sw .type-btn.sel{background:transparent !important; border:0 !important; box-shadow:none !important}
  html.w2-dark .type-sw .type-btn.sel{background:transparent !important; border:0 !important; box-shadow:none !important}

  /* ---- checkout: white pill + ink text; price/back light on the dark bar ---- */
  html.w2-dark .w2-foot-bubble{ border-color:transparent !important; }/* W2_FOOTONE_V1 background deleted: never applied in any state *//* W2_FOOTONE_V1 background, border deleted: never applied in any state */
/* W2_CTAPILL_V1 the dark-theme CTA moved to w2footglass.css, next to its
     light twin. It lived here, alone, without a border-radius — so the dark
     button fell back to React's 14px base and read as a rectangle while the
     light one was a pill. One element described in two files is how that
     happens; the dock is owned by w2footglass.css (P38_DOCK_LAYOUT_ONE_FILE_V1)
     and this was the last piece still outside it. *//* W2_FOOTONE_V1 color deleted: never applied in any state */
  /* W2DONGONE_260816 deleted: a desktop-only literal that only repeated what
     the dark token already says. Two ways to state one colour is how the
     third one crept in unnoticed. */

  /* ---- word chips: white pill, ink; selected inverts ---- */
  html.w2-dark #w2word .w2word-chip{ background:#FFFFFF !important; color:#0A0A0A !important; border-color:rgba(0,0,0,.14) !important; }
  html.w2-dark #w2word .w2word-chip:hover{ border-color:rgba(0,0,0,.32) !important; }
  html.w2-dark #w2word .w2word-chip.sel{ background:#0A0A0A !important; color:#FFFFFF !important; border-color:#0A0A0A !important; }

  /* ---- remove the bottom "T-SHIRT" badge ---- */
  html body .size-badge{ display:none !important; }

  /* ---- anchor the checkout under the RIGHT column (fixed = stays on scroll) ---- */
  .w2-foot{
    left: calc(max(0px, (100vw - 1100px) / 2) + 480px) !important;
    right: calc(max(0px, (100vw - 1100px) / 2)) !important;
    padding-left: 20px !important;
    padding-right: 32px !important;
  }
  .w2-foot-bubble{ max-width:none !important; margin:0 !important; }}
/* ===== end W2_WEB_CONSTRUCTOR_V1 ===== */

/* ===== W2LIGHT_WEB_V1 — WEB light theme, matched to the dark theme =====
   Proper white body (removes the cream underlay), flat options (no tiles; idle
   faded, selected/pressed vivid), no dividers, and a white ShopLink card that
   pops. Scope: web (>=768px) + light theme only. Mobile, dark, footer, tokens
   and the mockup frame are all untouched. */
@media (min-width:768px){
  html:not(.w2-dark) body,
  html:not(.w2-dark) .app,
  html:not(.w2-dark) .scroll,
  html:not(.w2-dark) .card{ background:#FFFFFF !important; }
  /*W2_NOLINES_V1 DELETED — these two turned the light panel monolithic, but
     only inside this 768px block, which is why the phone kept its lines.
     The border is gone at source now, for every width and both themes, so
     these describe something that can no longer happen. */

  html:not(.w2-dark) .pick-card,
  html:not(.w2-dark) .layout-card{ background:transparent !important; border:0 !important; box-shadow:none !important; opacity:.45; transition:opacity .15s ease; }
  html:not(.w2-dark) .pick-card.sel,
  html:not(.w2-dark) .layout-card.sel,
  html:not(.w2-dark) .pick-card:active,
  html:not(.w2-dark) .layout-card:active{ opacity:1 !important; background:transparent !important; border:0 !important; box-shadow:none !important; }
  html:not(.w2-dark) .pick-lbl{ color:#717171 !important; }
  html:not(.w2-dark) .pick-card.sel .pick-lbl,
  html:not(.w2-dark) .layout-card.sel .pick-lbl{ color:#0A0A0A !important; }

  html:not(.w2-dark) .w2-sitefooter.w2sf-shoplink,
  html:not(.w2-dark) .w2-sitefooter.w2sf-shoplink.w2sf-light{ background:#FFFFFF !important; box-shadow:0 6px 22px rgba(0,0,0,.10) !important; border-radius:16px !important; }}
/* ===== end W2LIGHT_WEB_V1 ===== */

/* ===== W2LIGHT_MOBILE_V6 — grey body, WHITE ShopLink card that pops =====
   Body stays the soft grey (#FAF9F5, restored at source). Flat options kept.
   The ShopLink card (.w2-sitefooter.w2sf-shoplink) is pure white + a soft shadow
   so it floats above the grey body. Footer/tokens/mockup-frame untouched. */
@media (max-width:767px){
  /*W2_NOLINES_V1 DELETED - the phone half of the same idea. It hid the
     in-card dividers but never the card rule, which is why the phone kept
     five lines while the desktop had none. Both are cut at source now. */
  html:not(.w2-dark) .pick-card,
  html:not(.w2-dark) .layout-card{ background:transparent !important; border:0 !important; box-shadow:none !important; opacity:.45; transition:opacity .15s ease; }
  html:not(.w2-dark) .pick-card.sel,
  html:not(.w2-dark) .layout-card.sel,
  html:not(.w2-dark) .pick-card:active,
  html:not(.w2-dark) .layout-card:active{ opacity:1 !important; background:transparent !important; border:0 !important; box-shadow:none !important; }
  html:not(.w2-dark) .pick-lbl{ color:#717171 !important; }
  html:not(.w2-dark) .pick-card.sel .pick-lbl,
  html:not(.w2-dark) .layout-card.sel .pick-lbl{ color:#0A0A0A !important; }

  /* ShopLink card -> pure white, floats above the grey body */
  html:not(.w2-dark) .w2-sitefooter.w2sf-shoplink,
  html:not(.w2-dark) .w2-sitefooter.w2sf-shoplink.w2sf-light{
    background:#FFFFFF !important;
    box-shadow:0 6px 22px rgba(0,0,0,.12) !important;
    border-radius:16px !important;
  }}

/*STAGE5O_SF_MENU_INVERT — the language/theme menu that actually opens
  is .w2sf-menu (injected from w2sitefooter.js, hard-coded dark). It is
  a window over the page, so on a DARK page it becomes white and every
  row, separator, checkmark and the Light/Dark pair is repainted for a
  light surface. Specificity beats the injected rules; !important beats
  their source order.*/
html.w2-dark .w2sf-menu{background:#FFFFFF !important;border-color:rgba(0,0,0,.10) !important;box-shadow:0 20px 52px rgba(0,0,0,.32) !important}
html.w2-dark .w2sf-menu>button{color:#111111 !important}
html.w2-dark .w2sf-menu>button:hover{background:rgba(0,0,0,.06) !important}
html.w2-dark .w2sf-menu>button.on{background:rgba(0,0,0,.05) !important}
/*W2CONTRAST_V1 the Light/Dark pair the comment above already promised: the
  injected rules paint it rgba(255,255,255,.62) for a dark card, which is
  invisible on the inverted white one. currentColor carries the sun and the
  moon, so colouring the button is enough. */
html.w2-dark .w2sf-menu .w2hdr-sep{background:rgba(0,0,0,.10) !important}
html.w2-dark .w2sf-menu .w2hdr-themes button{background:rgba(0,0,0,.05) !important;color:rgba(17,17,17,.62) !important}
html.w2-dark .w2sf-menu .w2hdr-themes button.on{background:rgba(0,0,0,.10) !important;color:#111111 !important}

/*STAGE5P_DEAD_MENU_CSS — 31 rule(s) for .w2hdr-menu / .w2fl-* removed:
  both menus are deleted, so their styling (including the inversion
  rules I wrote for them) is dead weight.*/

/*W2_ONEX_V1 the blue cart cross is deleted with its twin above.*/

/* W2FIX1: #w2word geometry lives in w2-merged.css only */

/* W2FIX1 / W2_CHIPS_V1 — single source of truth for the word-chip strip.
   The strip is a child of .preview-wrap on every width and sits absolute at
   its bottom edge. The `#w2word{position:fixed}` base is DELETED together
   with the body-level path in w2word.js that was the only thing it described;
   left in place it would be a description of a layout that no longer exists. */
/* W2_LOCKTOAST_V1 6px read as the strip touching the edge of the card. 14px is
   air, and it is the same air the chips already keep between themselves. */
.preview-wrap>#w2word{position:absolute;left:0;right:0;bottom:14px;top:auto;width:auto;z-index:40}
/* W2_FIX3_V1 on a phone 14px left the strip sitting high in its own band —
   too much air under it, not enough over it. 8px centres the row between the
   garment and the card edge. The web keeps 14: its card is taller. */
@media (max-width:767px){ .preview-wrap>#w2word{ bottom:8px; } }

/* W2HDR2 — one truth for the selected tab's label colour.
   The pill behind it (.type-sw::before) is dark in the light theme and a
   translucent white over a dark rail in the dark theme, so white reads in
   both. The five earlier colour declarations are deleted, not overridden. */
.type-sw .type-btn.sel{color:#FFFFFF!important}

/* W2HDR3 — the label follows the drop. Above 768px w2-merged.css repaints the
   drop per theme (light #FFFFFF, dark #0A0A0A); below it the drop keeps
   w2tabdrop's #46413a. W2HDR2 forced one colour for all three cases and turned
   the desktop light theme into white-on-white. */
@media (min-width:768px){
  html:not(.w2-dark) .type-sw .type-btn.sel{color:#111111!important}
  html.w2-dark .type-sw .type-btn.sel{color:#FFFFFF!important}}

/* W2SEL1: every t-shirt selector above is anchored on the path
   separator. `*=` is a substring match and "sweatshirt" ends in
   "tshirt", so the unanchored versions fired on the sweatshirt as well:
   black, grey and navy were pushed ~3.5% sideways while white, which has
   no such rule, stayed put. */

/* W2EDGE1 — the preview card stops being almost-white.
   The bundle sets .preview-wrap{background:#f8f8f8} (luminance 248) and
   every light garment we ship has a body midtone of 234-244, i.e. DARKER
   than the card, with highlights within a few levels of it. That is why a
   white garment dissolves. At 228 the body of every light garment sits
   above the card and its fold shadows below, so it reads both ways.
   Only the preview card: .pick-card and .layout-card keep #f8f8f8. */

/* W2TEE1: the three per-colour t-shirt nudges are deleted. They
   compensated for mockups whose axis ranged 419.5..434.5 across the
   colours; W2GEO1 put all four on 431.0, after which the corrections
   only pushed black, grey and navy off the axis while white stayed. */

/* W2CARD1: the card follows the garments. Measured edge luminance
   on the rebuilt family — white 223, grey 203, navy 34, black 19 — against
   the old #E7E5E0 card at 228 that left white with five levels of
   contrast and no silhouette. #F6F4F1 puts it at 21 and grey at 41
   while the dark garments keep their 225. The previous value was tuned to
   assets whose edges were lighter than the card; the rebuild inverted that. */
/* W2STAGE_V1 removed: dead, overridden by the html body stage rule below */


/* ===================== W2HEAD5_WHITE_STAGE =====================
   The blanks are photographed on white. The stage was #f8f8f8 inside a
   1px border, which greyed every product and boxed it in. One background
   for the product stage, pure white, light and dark theme alike. Nothing
   else paints behind .shirt-img: .preview-canvas-wrap has no background
   of its own, so this is the single surface the product sits on.
   ============================================================== */
/* W2STAGE_V1 background removed: dead, overridden by the html body stage rule */
.preview-wrap,
html.w2-dark .preview-wrap{
  border-color:transparent !important;
}


/* ===================== W2TEE1_WORKMODE =========================
   Clean white while the buyer LOOKS at the product; a light checkerboard
   the moment they start WORKING on it. A white tee on a white stage has
   no readable edge and the white heart in the rail vanishes; against the
   checker both read instantly. Painted on the STAGE, not on the canvas,
   so html2canvas (which captures .preview-canvas-wrap) cannot bake it in.
   ============================================================== */
.preview-wrap{ transition: background-color .18s ease, background-image .18s ease; }


/* ===================== W2TEE2_FRONT_ONLY =======================
   The tee and the hoodie ship front only: their back and sleeve blanks
   are deleted. The bundle already pins the src to front, so the rotate
   chevrons would move the print side while the garment stood still.
   Hide them for those two products; every other garment keeps them.
   ============================================================== */
.preview-canvas-wrap[data-product="tshirt"] ~ * .vbtn,
.preview-wrap:has(.shirt-img[src*="tshirt_"]) .vbtn,
.preview-wrap:has(.shirt-img[src*="hoodie_"]) .vbtn{ display:none !important; }
/*W2HDRPHRASE_KILL_V1*/


/* ===================== W2NOHDR_V1 STAGE ========================
   The dark editor grid is unconditional now. It used to be bound to a
   w2-work class toggled by w2workmode.js, which meant the stage was white
   until the buyer touched the word field -- the background you were looking
   for was simply never on. One state, no toggle, no second truth.
   Painted on .preview-wrap (the STAGE); .preview-canvas-wrap is a child, so
   nothing can bake the pattern into a thumbnail or into stored geometry.
   ============================================================== */
html body .preview-wrap,
html.w2-dark body .preview-wrap{
  /* W2STAGE_V1 MID-TONE STAGE. The checkerboard needed a second copy of itself,
     light, faded in for black/navy, so those garments would separate. That
     was two surfaces for one job. Measured instead: the side rails hold
     luminance 96..134, which clears 3:1 against BOTH a white and a black
     heart, so one surface serves all four colourways and the swap is gone. */
  background-color:#747474 !important /*W2_STAGEBACK_V1 magenta reversed*/;
  background-image:
    radial-gradient(115% 74% at 50% 34%, rgba(255,255,255,.075) 0%, rgba(255,255,255,0) 64%),
    radial-gradient(125% 108% at 50% 50%, rgba(0,0,0,0) 52%, rgba(0,0,0,.055) 100%),
    linear-gradient(180deg,#828282 0%,#666666 100%) !important;
  background-size:auto !important;
  background-position:0 0 !important;
}


/* ===================== W2MOBGAP_V1 =============================
   MOBILE only (<768px): the product rail and the checkerboard stage were
   touching. `.toprow .type-sw{margin:0}` in the built CSS removes the rail's
   own bottom margin and `.preview-wrap{margin:0 16px}` has no top margin, so
   the two boxes shared an edge. One declaration, on the stage, on the axis
   that was missing. Desktop keeps the grid spacing it already had.
   ============================================================== */
@media (max-width: 767.98px) {
  html body .preview-wrap,
  html.w2-dark body .preview-wrap{
    margin-top: 10px !important;
  }
}


/* ===================== W2CRYSTALRAIL_V1 ========================
   The product rail carries the Mr.Host composer material: frosted crystal.
   Ported from mrhost_front MH_COMPOSER_GLASS_V1 with its tokens resolved --
   light surface #ffffff / border rgba(15,23,42,.10) / text #1d1d1f,
   dark surface #1f1f1f / border rgba(255,255,255,.12).

   Stated ONCE per theme. The five older rail rules (#202020, #0a0a0a x2,
   #FFFFFF on web) are deleted, not overridden: that pile is exactly why the
   rail read differently on mobile, on web and between themes.

   translateZ(0) promotes the rail to its own compositor layer so the 22px blur
   is rasterised once instead of on every frame of the drop's glide -- the same
   trick MRHOST_CHAT_POLISH_V1 uses on the composer.
   ============================================================== */
html body .type-sw,
html:not(.w2-dark) body .type-sw{
  background-color: rgba(234,232,228,.80) !important;
  -webkit-backdrop-filter: blur(22px) saturate(180%) !important;
  backdrop-filter: blur(22px) saturate(180%) !important;
  border: 1px solid rgba(15,23,42,.08) !important;
  box-shadow:
    0 1px 0 rgba(29,29,31,.06) inset,
    0 8px 28px rgba(0,0,0,.10),
    0 2px 8px rgba(0,0,0,.06) !important;
  transform: translateZ(0);
  backface-visibility: hidden;
}
html.w2-dark body .type-sw{
  background-color: rgba(31,31,31,.82) !important;
  border: 1px solid rgba(255,255,255,.12) !important;
  box-shadow:
    0 1px 0 rgba(255,255,255,.06) inset,
    0 10px 32px rgba(0,0,0,.45),
    0 2px 10px rgba(0,0,0,.35) !important;
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  html body .type-sw{ background-color: rgba(238,236,232,.96) !important; }
  html.w2-dark body .type-sw{ background-color: rgba(31,31,31,.96) !important; }
}


/* ===================== W2CONTRAST_V1 LABELS ====================
   One explicit pair per theme, stated outside every media query, so a rail
   label can never again inherit a colour meant for a surface it no longer has.
   :not(.sel) instead of relying on specificity order -- the active rule and the
   inactive rule cannot fight.
   ============================================================== */
html.w2-dark body .type-sw .type-btn:not(.sel){ color:rgba(255,255,255,.74) !important; }/*W2_SWAPLOCK_V1 .58 -> .74*/
html.w2-dark body .type-sw .type-btn.sel{ color:#FFFFFF !important; }
html:not(.w2-dark) body .type-sw .type-btn:not(.sel){ color:rgba(17,17,17,.70) !important; }/*W2_SWAPLOCK_V1 .52 -> .70*/
html:not(.w2-dark) body .type-sw .type-btn.sel{ color:#111111 !important; }


/* ===================== W2LEGACYSTYLE_KILL_V1 ===================
   The legacy third style is gone at source: no bundle entry, no inline font, no
   mask, no dead class, no font request. W2 has exactly three styles, and each is
   a registry entry rather than a string match:

       classic -> Barlow 900
       street  -> Gloss And Bloom
       brand   -> Bagel Fat One

   TRIPWIRE, and the only place the old font name still appears in the dist.
   If anything ever carries that inline font again it gets a magenta outline --
   deliberately ugly, so it cannot ship unnoticed the way a silent repaint did
   for a month.
   ============================================================== */
[style*="Petit Formal Script"]{
  outline: 3px solid #FF00A8 !important;
  outline-offset: 2px !important;
}


/* ===================== W2WTPMARK_V1 ============================
   The WHAT TO PRINT mark is rendered once, by React, and inherits its ink from
   the theme through currentColor. The old node carried a hard-coded #0A0A0A,
   which is why it went invisible whenever the surface under it changed.
   The heart keeps its own colour; only the letters follow the theme.
   Scoped to .w2mark-tile, not to .wtp-ink: the two FREE tiles share that class
   and were not part of the request.
   ============================================================== */
html:not(.w2-dark) body .pick-card .w2mark-tile{ color:#0A0A0A !important; }
html.w2-dark body .pick-card .w2mark-tile{ color:#FFFFFF !important; }
html body .pick-card .w2mark-tile .w2bl{ color:inherit !important; font-size:26px; }
html body .pick-card .w2mark-tile .w2bl-w svg path,
html body .pick-card .w2mark-tile .w2bl-sup svg path{ fill:currentColor !important; }


/* ===================== W2SPINONE_V1 ============================
   ONE heart rotation for the whole product. The keyframe is the app's own
   w2HeartSpinGlobal, declared in assets/style_constructbag-*.css -- keyframe
   names are global, so referencing it from here is enough and no copy is kept.

   Every heart that turns reads this one number. Want it calmer? Change the
   value here and nowhere else. The two local copies at 3.4s, and the
   foreshortening the base never had, are deleted rather than overridden.
   ============================================================== */
:root{ --w2-heart-spin: 3.6s; }


/* ===================== W2_STAGE_AND_CHIPS_J2 ==========================
   THE STAGE FOLLOWS THE GARMENT, AND IT EASES.

   The checkerboard exists so the product has a readable edge — its own comment
   says so. Painted dark unconditionally it did that for a white tee and undid
   it for a black one. The blank's filename carries the colour, so :has() can
   ask; the same hook W2TEE2_FRONT_ONLY uses for the rotate chevrons.

   The light checker is a ::before layer faded on OPACITY, not a second
   background-image. background-image does not animate — listing it in a
   transition is a no-op and the stage jumps. Opacity animates.
   ============================================================== */
.preview-wrap{ position:relative; }
.preview-wrap > *{ position:relative; z-index:1; }

/* W2STAGE_V1 light-checkerboard swap layer DELETED — the mid-tone stage above
   separates every colourway, so the per-colour surface no longer exists. */

/* ---- W2WARM_V1 — the preload layer that used to live here is DELETED.
   It listed 12 of the release's blanks by hand and asked for them WITHOUT
   the ?v=<release> the bundle puts on every image_construct URL, so it
   warmed a second copy nothing would ever request and the colour switch
   still paid a round trip. cap_green and cap_cream were not even in the
   list. Warming now lives in w2warm.js, whose blank list is generated
   from the files on disk at deploy time. ------------------------------ */

/* ---- ONE CHIP, EVERY THEME ----------------------------------------------
   Two chip systems disagreed: .lib-chip went white in the dark theme with a
   black selection, #w2word .w2word-chip did the opposite. Both now carry the
   identical declaration, so it does not matter which one renders and the two
   of them stop being two answers. The dark-theme inversions are deleted at
   source above, not overridden.
   ------------------------------------------------------------------------ */
html .lib-chip,
html.w2-dark .lib-chip,
html #w2word .w2word-chip,
html.w2-dark #w2word .w2word-chip{
  background:#0A0A0A !important;
  color:#FFFFFF !important;
  border:1px solid rgba(255,255,255,.18) !important;
  border-radius:999px !important;
  padding:8px 16px !important;
  font-size:13.5px !important;
  font-weight:900 !important;
  letter-spacing:.005em !important;
  box-shadow:none !important;
  transition:background .14s ease, color .14s ease, border-color .14s ease, transform .12s ease !important;
}
html .lib-chip.sel,
html.w2-dark .lib-chip.sel,
html #w2word .w2word-chip.sel,
html.w2-dark #w2word .w2word-chip.sel{
  background:#FFFFFF !important;
  color:#0A0A0A !important;
  border-color:#FFFFFF !important;
}
html .lib-chip:hover,
html #w2word .w2word-chip:hover{ border-color:rgba(255,255,255,.38) !important; }
html .lib-chip:active,
html #w2word .w2word-chip:active{ transform:scale(.94); }
/* ===================== end W2_STAGE_AND_CHIPS_J2 ====================== */


/* ===================== W2_ONE_MODAL_P1 ==========================
   FOUR MODALS, ONE SURFACE.
   Cart (.w2c-sheet) and Checkout / Confirm / Payment (.w2co-sheet) are two
   families that drifted: different whites, different blacks, two radii and a
   backdrop at .42 next to one at .60. Placed side by side the difference reads
   as sloppiness, not as variety.

   One white, one black, one radius, one border, one backdrop. Both families
   read these and state nothing themselves.

   The cross is deliberately absent here: W2_CLOSE_ONE_V1 already made .w2c-x
   the one canon. A second definition would undo exactly what it fixed.
   ============================================================== */
:root{
  --w2modal-white:  #FFFFFF;
  --w2modal-black:  #0A0A0A;
  --w2modal-radius: 16px;
  --w2modal-ink-on-white: #111111;
  --w2modal-ink-on-black: #F2F2F4;
  --w2modal-border-light: rgba(0,0,0,.08);
  --w2modal-border-dark:  rgba(255,255,255,.10);
  --w2modal-backdrop: rgba(0,0,0,.60);
  --w2modal-shadow: 0 18px 60px rgba(0,0,0,.28);
}

html body #w2c-root .w2c-sheet,
html body .w2co-sheet{
  background: var(--w2modal-white) !important;
  color: var(--w2modal-ink-on-white) !important;
  border: 1px solid var(--w2modal-border-light) !important;
  border-radius: var(--w2modal-radius) var(--w2modal-radius) 0 0 !important;
  box-shadow: var(--w2modal-shadow) !important;
}

html body #w2c-root.w2c-dark .w2c-sheet,
html body .w2co-sheet--dark{
  background: var(--w2modal-black) !important;
  color: var(--w2modal-ink-on-black) !important;
  border: 1px solid var(--w2modal-border-dark) !important;
}

html body #w2c-root .w2c-backdrop,
html body #w2c-root.w2c-dark .w2c-backdrop,
html body .w2co-backdrop{
  background: var(--w2modal-backdrop) !important;
}

/* ===================== end W2_ONE_MODAL_P1 ====================== */


/* ===================== W2_ONE_MODAL_P1A ==========================
   P1 drew a frame around the item name and price. Nobody asked for one, and a
   price is text: it needs no card, no wash, no border. Removed at source.

   The wash was also why the white stopped looking white — color-mix over
   currentColor lays grey inside a #FFFFFF sheet, and beside a real white that
   reads as dirty. White is #FFFFFF. Black is #0A0A0A. Nothing between.
   ============================================================== */
html body #w2c-root .w2c-info,
html body #w2c-root.w2c-dark .w2c-info,
html body .w2co-card,
html body .w2co-sheet--dark .w2co-card{
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

/* the sheet is the only surface; nothing inside it paints its own */
html body #w2c-root .w2c-sheet,
html body .w2co-sheet{ background: #FFFFFF !important; }
html body #w2c-root.w2c-dark .w2c-sheet,
html body .w2co-sheet--dark{ background: #0A0A0A !important; }
/* ===================== end W2_ONE_MODAL_P1A ====================== */

/* ===================== W2_CHECKOUT_ONE_LINE_Q1 ==========================
   THE CHECKOUT'S STYLESHEET, MOVED HERE FROM THE SCRIPT.

   w2-checkout.js held 240 rules as a string and injected them into
   <head> at runtime, after this file and with !important throughout. A
   stylesheet cannot outrank a stylesheet that arrives later, which is why
   every edit made here appeared to do nothing.

   Moved verbatim. Four values were brought to the canon on the way, and
   they are exactly the four complaints: radius 24 -> 16, black #0e0e10 ->
   #0A0A0A, the #FAFAFA wash inside cards -> transparent, and the grey
   #26262b cross deleted. Nothing else was touched.
   ============================================================== */
.w2co-ov{position:fixed;top:0;left:0;right:0;height:100%;z-index:99999;background:rgba(12,12,14,.5);overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;align-items:flex-start;justify-content:center;padding:16px 16px 48px;font-family:'ALS','Manrope','DM Sans',system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;animation:w2coFade .18s ease}@keyframes w2coFade{from{opacity:0}to{opacity:1}}@keyframes w2coRise{from{transform:translateY(14px);opacity:0}to{transform:none;opacity:1}}.w2co-sheet{position:relative;width:min(100%,520px);margin:0 auto 40px;max-height:none;background:#fff;border-radius:16px;padding:28px 24px 24px;color:#111;animation:w2coRise .22s cubic-bezier(.2,.8,.2,1)}.w2co-sheet::-webkit-scrollbar{width:8px}.w2co-sheet::-webkit-scrollbar-thumb{background:#e3e3e3;border-radius:8px}.w2co-x{position:absolute;top:16px;right:16px;width:36px;height:36px;border-radius:50%;border:1px solid #E0E0E0;background:#fff;cursor:pointer;display:grid;place-items:center;color:#666;transition:.15s}.w2co-x:hover{background:#f6f6f6;color:#111}.w2co-h{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:28px;letter-spacing:-.02em;margin:0 0 4px;color:#111!important}.w2co-sub{color:#666;font-size:14px;margin-bottom:18px}.w2co-chips{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:4px}.w2co-chip{position:relative;height:52px;border-radius:999px;background:#1c1c1e;border:1px solid rgba(255,255,255,.10);display:flex;align-items:center;justify-content:center;gap:8px;color:#fff;cursor:pointer;padding:0 16px;font-family:inherit;transition:transform .12s,opacity .12s}.w2co-chip:active{transform:scale(.97)}.w2co-chip--gp{width:100%;height:62px;margin:8px 0 14px;background:#fff;border:1.5px solid #ececec;gap:10px}.w2co-chip.dim{filter:grayscale(1);opacity:.42;cursor:default}.w2co-chip .w2lb{color:#fff;font-weight:600;font-size:1rem;letter-spacing:-.01em;line-height:1}.w2co-chip .w2pp{font-weight:800;font-style:italic;font-size:1.06rem;line-height:1}.w2co-chip .w2pp span{color:#fff}.w2co-chip .w2pp .b{color:#27b0e6}.w2co-chip .w2visa{font-weight:900;font-style:italic;font-size:1.16rem;color:#fff;line-height:1}.w2co-chip .w2mir{font-weight:900;font-style:italic;font-size:1.16rem;color:#21B573;line-height:1}.w2co-chip .w2ms{height:1.2rem;width:auto;display:block;flex-shrink:0}.w2co-chip .w2tw{display:flex}.w2co-chip .w2tet{height:1.35rem;width:1.35rem;display:block}.w2co-chip--gp .w2gp{font-family:'Bagel Fat One',system-ui,sans-serif;font-weight:400;letter-spacing:.01em;font-size:1.55rem;line-height:1;display:inline-flex}.w2co-chip--gp .w2gp .g{color:var(--w2-gold);-webkit-text-fill-color:var(--w2-gold)}.w2co-chip--gp .w2gp .r{background:none;-webkit-text-fill-color:#111;color:#111}.w2co-gph{margin:2px 0 4px;line-height:1;text-align:center}.w2co-gph .w2gp{font-family:'Bagel Fat One',system-ui,sans-serif;font-weight:400;letter-spacing:.01em;font-size:2rem;line-height:1;display:inline-flex}.w2co-gph .w2gp .g{color:var(--w2-gold);-webkit-text-fill-color:var(--w2-gold)}.w2co-gph .w2gp .r{background:none;-webkit-text-fill-color:#111;color:#111}.w2co-soon{position:absolute;bottom:5px;left:0;right:0;text-align:center;font-size:8px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#b98900}.w2co-gpc{margin:10px 0 6px;border:1px solid #ececec;border-radius:16px;padding:14px 16px;background:#fafafa}.w2co-gpc .row{display:flex;justify-content:space-between;align-items:center;padding:5px 0;color:#444;font-size:14px}.w2co-gpc .row b{color:#111;font-weight:800}.w2co-gpc .row .tot{font-size:19px}.w2co-sheet--dark{background:#0A0A0A !important}.w2co-sheet--dark .w2gp .r{-webkit-text-fill-color:#fff !important;color:#fff !important}.w2inv{display:flex;flex-direction:column;align-items:center;text-align:center;color:#fff;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 56px)}.w2inv-title{font-weight:800;font-size:1.55rem;letter-spacing:-.02em;color:#fff;margin-top:2px}.w2inv-net{color:#8a8a90;font-size:.9rem;margin:3px 0 16px}.w2inv-qr{background:#fff;border-radius:18px;padding:14px;line-height:0}.w2inv-qr img,.w2inv-qr canvas,.w2inv-qr svg{display:block;width:184px;height:184px}.w2inv-amt{font-weight:900;font-size:2.5rem;letter-spacing:-.02em;margin:18px 0 0;color:#fff;line-height:1}.w2inv-amt span{color:#f0a020}.w2inv-prod{color:#b8b8be;font-size:1.02rem;margin:5px 0 18px}.w2inv-addrl{color:#7c7c84;font-size:.68rem;text-transform:uppercase;letter-spacing:.09em;align-self:flex-start;font-weight:700}.w2inv-addr{font-family:ui-monospace,Menlo,monospace;font-size:.9rem;color:#fff;word-break:break-all;align-self:stretch;text-align:left;margin:6px 0 14px;background:#1a1a1e;border:1px solid #2a2a30;border-radius:12px;padding:12px 14px}.w2inv-copy{width:100%;height:52px;border:0;border-radius:999px;background:#fff;color:#111;font-weight:800;font-size:1rem;cursor:pointer;transition:transform .12s,background .15s}.w2inv-copy.ok{background:#1cc36a;color:#fff}.w2inv-copy:active{transform:scale(.98)}.w2inv-note{color:#8a8a90;font-size:.82rem;line-height:1.45;margin:16px auto 0;max-width:22rem}.w2inv-status{color:#c9a24d;font-size:.85rem;font-weight:700;margin:16px 0 2px;display:inline-flex;align-items:center;gap:7px}.w2inv-status .dot{width:8px;height:8px;border-radius:50%;background:#c9a24d;animation:w2blink 1.2s infinite}@keyframes w2blink{0%,100%{opacity:.28}50%{opacity:1}}.w2inv-order{color:#8B8B93;font-size:.72rem;margin-top:8px}.w2inv-paid{color:#1cc36a;font-size:1.35rem;font-weight:800;margin:22px 0 8px;display:flex;flex-direction:column;align-items:center;gap:6px}.w2inv-paid .ic{font-size:2.6rem;line-height:1}.w2co-card{background:#F8F8F8;border:1px solid #ECECEC;border-radius:16px;padding:16px;margin-bottom:18px}.w2co-line{display:flex;justify-content:space-between;align-items:center;font-size:14px;padding:3px 0}.w2co-line b{font-weight:700}.w2co-amt{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:18px;color:var(--w2-ink-3)}.w2co-sec{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:18px;margin:2px 0 12px}.w2co-row{display:flex;justify-content:space-between;flex-wrap:wrap;gap:0}.w2co-fld{margin-bottom:12px;width:100%}.w2co-fld.half{width:calc(50% - 5px)}.w2co-lbl{font-size:11px;font-weight:700;color:var(--w2-ink-3);text-transform:uppercase;letter-spacing:.04em;margin-bottom:5px;display:flex;align-items:center;gap:4px}.w2co-lbl .req{color:#CDC9BE;font-size:13px}.w2co-fld.err .w2co-lbl{color:#E52D2D}.w2co-fld.err .w2co-lbl .req{color:#E52D2D}.w2co-inwrap{display:flex;align-items:center;box-sizing:border-box;height:47px;border:1.5px solid #E0E0E0;border-radius:13px;background:#fff;transition:border-color .15s,box-shadow .15s}.w2co-inwrap.f{border-color:var(--w2-ink-3);}.w2co-fld.err .w2co-inwrap{border-color:#E52D2D;}.w2co-inwrap input{flex:1;min-width:0;border:none;outline:none;background:transparent;padding:12px 14px;font:inherit;font-size:15px;color:#111;caret-color:#111;-webkit-text-fill-color:#111;color-scheme:light}.w2co-adorn{padding:0 8px 0 12px;color:#555;font-size:14px;white-space:nowrap;display:flex;align-items:center;gap:5px;border-right:1px solid #eee}.w2co-tick{margin-right:12px;flex-shrink:0;color:#2e9e5b;font-weight:800}.w2co-bang{margin-right:12px;flex-shrink:0;color:#E52D2D;font-weight:800;font-size:16px;line-height:1}.w2co-ferr{color:#E52D2D;font-size:12px;margin-top:4px;font-weight:600}.w2co-sel{width:100%;box-sizing:border-box;height:47px;line-height:44px;border:1.5px solid #E0E0E0;border-radius:13px;padding:0 14px;font:inherit;font-size:15px;outline:none;background:#fff;cursor:pointer;color:#111}.w2co-sel:focus{border-color:var(--w2-ink-3);}.w2co-inwrap > select{flex:1;min-width:0;width:100%;height:100%;border:none;outline:none;background:transparent;padding:0 14px;font:inherit;font-size:15px;color:#111;cursor:pointer}.w2co-cta{width:100%;border:none;border-radius:14px;background:#111;color:#fff;padding:15px;font:inherit;font-weight:800;font-size:15px;cursor:pointer;margin-top:6px;transition:.15s;letter-spacing:.01em}.w2co-cta:hover{background:#000}.w2co-cta:disabled{opacity:.4;cursor:not-allowed}.w2co-back{display:inline-flex;gap:4px;align-items:center;background:none;border:none;color:#666;font:inherit;font-weight:600;font-size:14px;cursor:pointer;padding:0;width:100%;justify-content:center;text-align:center;margin-top:14px}/*W2CO_BACK_HOVER_V1 — на тёмном листе hover в #111 делал текст невидимым.*/.w2co-back{transition:color .15s,opacity .15s;opacity:.75}.w2co-back:hover,.w2co-back:focus-visible{color:#111;opacity:1}.w2co-sheet--dark .w2co-back{color:#9a9a9a}.w2co-sheet--dark .w2co-back:hover,.w2co-sheet--dark .w2co-back:focus-visible{color:#ffffff !important;opacity:1}.w2co-formwarn{color:#E52D2D;font-size:12.5px;font-weight:600;margin:2px 0 8px}.w2co-ship{background:#F8F8F8;border:1px solid #ECECEC;border-radius:16px;padding:14px 16px;margin:6px 0 18px;font-size:14px;line-height:1.5;color:#333}.w2co-ship .t{font-size:11px;font-weight:700;color:var(--w2-ink-3);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.w2co-pg{display:grid;grid-template-columns:1fr 1fr;gap:10px}.w2co-pm{min-height:84px;border-radius:16px;border:2px solid #E0E0E0;background:#fff;color:#111;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;cursor:pointer;font-weight:800;font-size:12px;text-transform:uppercase;transition:.15s}.w2co-pm:hover{border-color:#c9c9c9}.w2co-pm.wide{grid-column:1 / -1}.w2co-pm.half{grid-column:auto}.w2co-pm.sel{border-color:#111;background:#111;color:#fff}.w2co-pm.dim{color:#9a9a9a;filter:grayscale(1);opacity:.6}.w2co-soon{display:block;margin-top:3px;font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#b98900}.w2co-pm.dim img{filter:grayscale(1);opacity:.45}.w2co-pm img{height:26px;width:auto;object-fit:contain;pointer-events:none}.w2co-pm .lbl{font-size:11px}.w2co-gpay{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:900;font-size:21px;letter-spacing:-.05em;line-height:1}.w2co-gpay .g{color:var(--w2-gold)}.w2co-pm.sel .w2co-gpay .g{color:#e9c987}.w2co-mir{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:900;font-size:18px;letter-spacing:-.02em}.w2co-pp{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:900;font-size:19px;letter-spacing:-.04em;line-height:1}.w2co-pp .a{color:#003087}.w2co-pp .b{color:#009cde}.w2co-pm.sel .w2co-pp .a{color:#fff}.w2co-pm.sel .w2co-pp .b{color:#80c4f0}.w2co-panel{margin-top:16px;border:1px solid #E0E0E0;border-radius:16px;padding:16px;text-align:center}.w2co-ptitle{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:17px;margin-bottom:8px;display:flex;align-items:center;justify-content:center;gap:7px}.w2co-ptitle .g{color:var(--w2-ink-3);font-weight:900}.w2co-net{display:inline-flex;gap:8px;justify-content:center;margin-bottom:10px}.w2co-pill{height:34px;padding:0 16px;border-radius:999px;background:#111;color:#fff;display:inline-flex;align-items:center;font-weight:800;font-size:12px;letter-spacing:.02em}.w2co-muted{color:#666;font-size:13px;line-height:1.45}.w2co-gpcard{margin-top:4px;border-radius:18px;padding:18px 16px;text-align:center;background:linear-gradient(135deg,#fbf3da 0%,#f3e3b4 50%,#e9cf8f 100%);border:1px solid #e4c878;}.w2co-gphead{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:9px}.w2co-gpwm{font-family:'WLT Brand','Bagel Fat One',system-ui,sans-serif;font-weight:400;font-size:23px;letter-spacing:.01em;color:#1a1305}.w2co-panel--card{border:none;padding:0;background:transparent;margin-top:16px}.w2co-gpmark{display:inline-flex;align-items:center;gap:8px;font-family:'WLT Brand','Bagel Fat One',system-ui,sans-serif;font-size:20px;color:#1a1305}.w2co-gpmark .w2co-tet{flex:0 0 auto}.w2co-gpmark img{height:22px;width:auto;object-fit:contain}.w2co-gpmark .nm{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;letter-spacing:.01em;color:#1a1305}.w2co-gpmark .w2co-pp{font-weight:800;font-style:italic;font-size:18px}.w2co-gpmark .w2co-pp .a{color:#003087}.w2co-gpmark .w2co-pp .b{color:#009cde}.w2co-gpmark .w2co-mir{font-weight:800;color:#1a1305}.w2co-gpwm .g{color:var(--w2-gold)}.w2co-gpbadge{font-size:10px;font-weight:800;letter-spacing:.08em;color:#5a4500;background:rgba(255,255,255,.7);border:1px solid #d9bd6e;border-radius:999px;padding:3px 9px}.w2co-gptitle{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:16px;color:#2a2008;margin-bottom:5px}.w2co-gpsub{color:#5a4d2a;font-size:12.5px;line-height:1.45}.w2co-tilewm{font-family:'WLT Brand','Bagel Fat One',system-ui,sans-serif;font-weight:400;font-size:19px;color:#1a1305;line-height:1}.w2co-pm.sel .w2co-tilewm{color:#fff}.w2co-tilewm .g{color:var(--w2-gold)}.w2co-pm.sel .w2co-tilewm .g{color:#e9c987}.w2co-cardmk{display:inline-flex;align-items:center;gap:7px;line-height:1}.w2co-cardmk .visa{font-family:'ALS','Manrope',system-ui,sans-serif;font-style:italic;font-weight:900;font-size:18px;letter-spacing:-.03em;color:#1A1F71}.w2co-pm.sel .w2co-cardmk .visa{color:#fff}.w2co-cardmk svg{display:block}.w2co-mir2{font-family:'ALS','Manrope',system-ui,sans-serif;font-style:italic;font-weight:900;font-size:19px;letter-spacing:-.02em;color:#0EAD69}.w2co-pm.sel .w2co-mir2{color:#7fe3b6}.w2co-gpmark .w2co-tilewm,.w2co-gpmark .w2co-cardmk,.w2co-gpmark .w2co-mir2{color:#1a1305}.w2co-qr{display:grid;place-items:center;margin-bottom:12px}.w2co-qr img,.w2co-qr canvas{width:190px;height:190px;border-radius:8px}.w2co-bigamt{text-align:center;font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:36px;letter-spacing:-.03em;color:var(--w2-dong)}.w2co-bigamt span{font-size:20px;color:#666}.w2co-irow{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid #eee}.w2co-irow .k{font-size:12px;font-weight:700;color:var(--w2-ink-3);text-transform:uppercase;letter-spacing:.03em;flex-shrink:0}.w2co-irow .v{font-weight:700;font-size:13.5px;text-align:right;word-break:break-all}.w2co-copy{width:100%;display:inline-flex;gap:8px;align-items:center;justify-content:center;border:1px solid #CDD1DA;background:linear-gradient(135deg,#ECEEF1 0%,#FBFBFD 45%,#D9DCE3 100%);border-radius:13px;padding:14px;font:inherit;font-weight:800;font-size:14.5px;cursor:pointer;color:#111;margin-top:12px;transition:.15s}.w2co-copy.ok{background:linear-gradient(135deg,#E7F6EC,#F6FBF7,#DDEFE2);color:#2e9e5b}.w2co-note{margin-top:12px;background:#111;color:#fff;border-radius:14px;padding:14px 16px;font-size:13px;line-height:1.5;text-align:center}.w2co-paid{text-align:center;padding:26px 18px}.w2co-paid .ic{width:46px;height:46px;border-radius:50%;background:#2e9e5b;color:#fff;display:grid;place-items:center;margin:0 auto 12px;font-size:22px}.w2co-paid .tt{font-family:'ALS','Manrope',system-ui,sans-serif;font-weight:800;font-size:20px;margin-bottom:6px}.w2co-sheet--dark{background:#0A0A0A !important;color:#f2f2f2}.w2co-sheet--dark .w2co-h{color:#ffffff !important}.w2co-sheet--dark .w2co-sub{color:#9a9a9a}.w2co-sheet--dark .w2co-sec{color:#f2f2f2}.w2co-sheet--dark .w2co-amt{color:#f2f2f2}.w2co-sheet--dark .w2co-lbl,.w2co-sheet--dark label{color:#9a9a9a !important}.w2co-sheet--dark .w2co-inwrap{background:#1a1a1c !important;border-color:rgba(255,255,255,.14) !important}.w2co-sheet--dark .w2co-inwrap:focus-within{border-color:rgba(255,255,255,.55) !important}.w2co-sheet--dark .w2co-inwrap input,.w2co-sheet--dark input{background:transparent !important;color:#ffffff !important}/*W2_CONTRAST_FIX_V1*/.w2co-sheet--dark .w2co-inwrap input::placeholder,.w2co-sheet--dark input::placeholder{color:#6a6a70 !important}.w2co-sheet--dark .w2co-adorn{color:#c9c9c9 !important;border-right-color:rgba(255,255,255,.10) !important}.w2co-sheet--dark .w2co-sel{background:#1a1a1c !important;border-color:rgba(255,255,255,.14) !important;color:#f2f2f2 !important}.w2co-sheet--dark .w2co-cta{background:#ffffff !important;color:#0a0a0a !important}.w2co-sheet--dark .w2co-pm{background:#1a1a1c !important;border-color:rgba(255,255,255,.14) !important;color:#f2f2f2 !important}.w2co-sheet--dark .w2co-pm.sel{background:#ffffff !important;border-color:#ffffff !important;color:#0a0a0a !important}.w2co-sheet--dark .w2co-gpc{background:#1a1a1c !important;border-color:rgba(255,255,255,.12) !important}.w2co-sheet--dark .w2co-gpc .row{color:#b8b8be}.w2co-sheet--dark .w2co-gpc .row b{color:#ffffff}.w2co-sheet--dark .w2co-chip--gp{background:#1a1a1c !important;border-color:rgba(255,255,255,.14) !important}.w2co-sheet--dark .w2co-line,.w2co-sheet--dark .w2co-card,.w2co-sheet--dark .w2co-ship{background:transparent !important;border:0 !important;color:#f2f2f2 !important}.w2co-sheet--dark .w2co-dong{color:#FF8A00;font-size:.8em;margin-left:6px;font-weight:700}@media(max-width:520px){.w2co-sheet{padding:22px 16px 18px;border-radius:16px;margin:0 auto calc(40px + env(safe-area-inset-bottom,0px))}.w2co-h{font-size:24px}.w2co-bigamt{font-size:30px}.w2co-gph .w2gp{font-size:1.7rem}}.w2co-dong{color:var(--w2-dong) !important;font-size:.8em;margin-left:6px;font-weight:700}.w2inv-amt span{color:#FF8A00 !important}/*W2_THEME_SYMMETRY_V1*/.w2co-sheet--dark .w2co-inwrap input,.w2co-sheet--dark input,.w2co-sheet--dark .w2co-sel{color:#ffffff !important;-webkit-text-fill-color:#ffffff !important;caret-color:#ffffff !important;color-scheme:dark !important}/*W2_CONTRAST_FIX_V1*//*W2_THEME_SYMMETRY_V1*/.w2co-sheet--dark .w2co-inwrap input::placeholder,.w2co-sheet--dark input::placeholder{color:#6a6a70 !important;-webkit-text-fill-color:#6a6a70 !important}/*W2_CONTRAST_FIX_V1*/.w2co-sheet:not(.w2co-sheet--dark) .w2co-sheet:not(.w2co-sheet--dark) .w2co-inwrap input,.w2co-sheet:not(.w2co-sheet--dark) input{color:#111 !important;-webkit-text-fill-color:#111 !important;caret-color:#111 !important;color-scheme:light !important}/*W2_CONTRAST_FIX_V1*//*STAGE5L_PLACEHOLDER_INK — placeholders and selects follow the sheet too, so an empty field reads as empty and a filled one reads as filled.*/.w2co-sheet--dark input::placeholder,.w2co-sheet--dark textarea::placeholder,.w2co-sheet--dark .w2co-sel::placeholder{color:#8A8A92 !important;-webkit-text-fill-color:#8A8A92 !important}.w2co-sheet:not(.w2co-sheet--dark) input::placeholder,.w2co-sheet:not(.w2co-sheet--dark) textarea::placeholder,.w2co-sheet:not(.w2co-sheet--dark) .w2co-sel::placeholder{color:#75757F !important;-webkit-text-fill-color:#75757F !important}.w2co-sheet--dark .w2co-sel,.w2co-sheet--dark select{color:#ffffff !important;-webkit-text-fill-color:#ffffff !important;color-scheme:dark !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-sel,.w2co-sheet:not(.w2co-sheet--dark) select{color:#111111 !important;-webkit-text-fill-color:#111111 !important;color-scheme:light !important}.w2co-sheet--dark .w2co-chipaddr,.w2co-sheet--dark .w2co-addrchip{color:#f2f2f2 !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-chipaddr,.w2co-sheet:not(.w2co-sheet--dark) .w2co-addrchip{color:#111 !important}/*STAGE5K_SELF_TOKENS — the sheet stops borrowing the page's ink. Inverting the background without inverting the tokens is what made the text disappear.*/.w2co-sheet--dark{--w2-bg:#0A0A0A;--w2-ink:#FFFFFF;--w2-ink-2:#A8A8A8;--w2-ink-3:#7A7A7A;--w2-gold:#D8AA27;--w2-dong:#FF8A00;--w2-gbt:#FF4D00;color:#f2f2f2}.w2co-sheet:not(.w2co-sheet--dark){--w2-bg:#FFFFFF;--w2-ink:#0A0A0A;--w2-ink-2:#5A5A5A;--w2-ink-3:#717171;--w2-gold:#8E6E24;--w2-dong:#B05F00;--w2-gbt:#D23F00;color:#111}.w2co-sheet--dark .w2co-h,.w2co-sheet--dark .w2co-sec,.w2co-sheet--dark .w2co-amt,.w2co-sheet--dark .w2co-line,.w2co-sheet--dark .w2co-card,.w2co-sheet--dark .w2co-ship{color:#f2f2f2 !important}.w2co-sheet--dark .w2co-inwrap input,.w2co-sheet--dark input,.w2co-sheet--dark textarea,.w2co-sheet--dark select,.w2co-sheet--dark .w2co-sel{color:#FFFFFF !important;-webkit-text-fill-color:#FFFFFF !important;caret-color:#FFFFFF !important}.w2co-sheet--dark input::placeholder,.w2co-sheet--dark textarea::placeholder{color:#7A7A82 !important;-webkit-text-fill-color:#7A7A82 !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-h,.w2co-sheet:not(.w2co-sheet--dark) .w2co-sec,.w2co-sheet:not(.w2co-sheet--dark) .w2co-amt{color:#111111 !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-inwrap input,.w2co-sheet:not(.w2co-sheet--dark) input,.w2co-sheet:not(.w2co-sheet--dark) textarea,.w2co-sheet:not(.w2co-sheet--dark) select,.w2co-sheet:not(.w2co-sheet--dark) .w2co-sel{color:#111111 !important;-webkit-text-fill-color:#111111 !important;caret-color:#111111 !important}.w2co-sheet:not(.w2co-sheet--dark) input::placeholder,.w2co-sheet:not(.w2co-sheet--dark) textarea::placeholder{color:#75757F !important;-webkit-text-fill-color:#75757F !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-lbl,.w2co-sheet:not(.w2co-sheet--dark) label{color:#6A6A72 !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-inwrap,.w2co-sheet:not(.w2co-sheet--dark) .w2co-sel{background:#FFFFFF !important;border-color:rgba(0,0,0,.12) !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-line,.w2co-sheet:not(.w2co-sheet--dark) .w2co-card,.w2co-sheet:not(.w2co-sheet--dark) .w2co-ship{background:transparent !important;border:0 !important;color:#111111 !important}.w2co-sheet:not(.w2co-sheet--dark) .w2co-cta{background:#0a0a0a !important;color:#ffffff !important}/*STAGE5I_GP_BRAND — the grey gradient on 'amePay' is dead: it vanished on the dark sheet. G stays gold in both themes; the word follows the theme.*/.w2co-chip--gp .w2gp .g,.w2co-gph .w2gp .g,.w2co-tilewm .g,.w2co-gpay .g{color:var(--w2-gold) !important;-webkit-text-fill-color:var(--w2-gold) !important;background:none !important}.w2co-chip--gp .w2gp .r,.w2co-gph .w2gp .r{background:none !important;-webkit-background-clip:border-box !important;background-clip:border-box !important;color:#111111 !important;-webkit-text-fill-color:#111111 !important}.w2co-tilewm,.w2co-gpay{color:#111111 !important}.w2co-sheet--dark .w2co-chip--gp .w2gp .g,.w2co-sheet--dark .w2co-gph .w2gp .g,.w2co-sheet--dark .w2co-tilewm .g,.w2co-sheet--dark .w2co-gpay .g{color:#E9C987 !important;-webkit-text-fill-color:#E9C987 !important}.w2co-sheet--dark .w2co-chip--gp .w2gp .r,.w2co-sheet--dark .w2co-gph .w2gp .r{color:#FFFFFF !important;-webkit-text-fill-color:#FFFFFF !important}.w2co-sheet--dark .w2co-tilewm,.w2co-sheet--dark .w2co-gpay{color:#FFFFFF !important}.w2co-sheet--dark .w2co-pm.sel .w2co-tilewm,.w2co-sheet--dark .w2co-pm.sel .w2co-gpay{color:#0a0a0a !important}.w2co-sheet--dark .w2co-pm.sel .w2co-tilewm .g,.w2co-sheet--dark .w2co-pm.sel .w2co-gpay .g{color:var(--w2-gold) !important;-webkit-text-fill-color:var(--w2-gold) !important}/*W2_ONEX_V1 the blue checkout cross is deleted; the canon block at the top of this file states every close button once.*//*W2CO_FIELD_INK_HARD_V1 — перебивает глобальную таблицу сайта.*/html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) input, html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) textarea, html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) select, html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) .w2co-sel{color:#111111 !important;-webkit-text-fill-color:#111111 !important;caret-color:#111111 !important;color-scheme:light !important}html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) input::placeholder, html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) textarea::placeholder{color:#75757F !important;-webkit-text-fill-color:#75757F !important}html body .w2co-sheet.w2co-sheet:not(.w2co-sheet--dark) input:-webkit-autofill{-webkit-text-fill-color:#111111 !important;caret-color:#111111 !important;-webkit-box-shadow:0 0 0 1000px #FFFFFF inset !important}html body .w2co-sheet.w2co-sheet.w2co-sheet--dark input, html body .w2co-sheet.w2co-sheet.w2co-sheet--dark textarea, html body .w2co-sheet.w2co-sheet.w2co-sheet--dark select, html body .w2co-sheet.w2co-sheet.w2co-sheet--dark .w2co-sel{color:#FFFFFF !important;-webkit-text-fill-color:#FFFFFF !important;caret-color:#FFFFFF !important;color-scheme:dark !important}html body .w2co-sheet.w2co-sheet.w2co-sheet--dark input::placeholder, html body .w2co-sheet.w2co-sheet.w2co-sheet--dark textarea::placeholder{color:#7A7A82 !important;-webkit-text-fill-color:#7A7A82 !important}html body .w2co-sheet.w2co-sheet.w2co-sheet--dark input:-webkit-autofill{-webkit-text-fill-color:#FFFFFF !important;caret-color:#FFFFFF !important;-webkit-box-shadow:0 0 0 1000px #1A1A1C inset !important}
/* ===================== end W2_CTA_ONE_SHAPE_R1A ====================== */

/* W2_ONEX_V1 — ОДИН крестик на весь конструктор.
   The look is the fullscreen zoom's: a dark circle with a white cross. Over the
   zoom's black backdrop rgba(255,255,255,.14) composites to rgb(36,36,36), so
   that solid value is written here instead — identical on the zoom, and it now
   also reads on a white sheet, which the translucent form never did.
   Every close control in the release points at this one block. The blue pair
   that used to live in this file (one for the checkout sheet, one for the cart)
   is deleted, not overridden: each restated the whole button, which is how they
   drifted apart on size and hover in the first place.
   Only the LOOK is stated here. Where each button sits stays with the modal
   that owns it. */
html body .w2co-sheet .w2co-x,
html body .w2c-x,
html body .w2wltc-x,
html body .w2lz-close,
html body .w2lb-close{
  width:40px !important; height:40px !important;
  border-radius:50% !important; border:0 !important; padding:0 !important;
  display:grid !important; place-items:center !important;
  background:#242424 !important; color:#FFFFFF !important;
  font-size:24px !important; line-height:1 !important;
  box-shadow:none !important; cursor:pointer !important;
  -webkit-tap-highlight-color:transparent !important;
  transition:background .14s ease, transform .14s ease !important;
}
html body .w2co-sheet .w2co-x svg,
html body .w2c-x svg{ display:block !important; }
html body .w2co-sheet .w2co-x:hover,
html body .w2c-x:hover,
html body .w2wltc-x:hover,
html body .w2lz-close:hover,
html body .w2lb-close:hover{ background:#3A3A3A !important; }
html body .w2co-sheet .w2co-x:active,
html body .w2c-x:active,
html body .w2wltc-x:active,
html body .w2lz-close:active,
html body .w2lb-close:active{ transform:scale(.94) !important; }
html body .w2co-sheet .w2co-x:focus-visible,
html body .w2c-x:focus-visible,
html body .w2wltc-x:focus-visible,
html body .w2lz-close:focus-visible,
html body .w2lb-close:focus-visible{
  outline:3px solid rgba(255,255,255,.45) !important; outline-offset:2px !important;
}


/* W2CAP_FRONTAL_V6 cap plane rule DELETED — the blank is frontal. */


/* ===================== W2POLO_PENDING_V1 =====================
   The nomock placeholder is styled for a developer note: 14px at
   opacity .5. This one is a line the buyer reads, so it gets read-able
   size and weight. Scoped to the placeholder only. */
#w2cat-nomock span{
  font-size: 17px !important;
  line-height: 1.5 !important;
  font-weight: 600 !important;
  opacity: .82 !important;
  max-width: 74%;
  margin: 0 auto;
}


/* ===================== W2FOOT_VND_ONLY_V1 =====================
   Dong is the price now, not a footnote under a dollar figure.

   The bundle lays .w2-foot-price out as a column: .w2-foot-usd 22px/800 on top,
   .w2-foot-gbt 12px/700 orange below with a 4px top margin. Overlays then push
   USD to 21px and VND to 11px. Hiding USD alone would leave an 11px line
   floating against a 44px button, so the row is re-centred and VND is promoted
   to the size the dollar figure used to hold.

   Hidden, not deleted: the span is the bundle's DOM. w2VndFor still supplies the
   number and w2cart still reads its own source, so the price pipeline is
   untouched and this rule is the whole change. */
html body .w2-foot .w2-foot-actions .w2-foot-usd,
html.w2-dark body .w2-foot .w2-foot-actions .w2-foot-usd{
  display: none !important;
}

html body .w2-foot .w2-foot-actions .w2-foot-price{
  flex-direction: row !important;
  align-items: center !important;
  justify-content: flex-end !important;
  padding: 0 10px 0 6px !important;
}

html body .w2-foot .w2-foot-actions .w2-foot-gbt,
html.w2-dark body .w2-foot .w2-foot-actions .w2-foot-gbt{
  color: var(--w2-dong) !important;
  font-size: 19px !important;
  font-weight: 800 !important;
  line-height: 1 !important;
  margin-top: 0 !important;
  letter-spacing: -0.01em !important;
  white-space: nowrap !important;
}

@media (max-width: 380px){
  html body .w2-foot .w2-foot-actions .w2-foot-gbt{ font-size: 17px !important; }
}


/* ===================== W2SHOWCASE_CLEAN_V1 =====================
   The cart badge was absolutely positioned over the CTA and landed on the last
   letter of "Add to cart". The footer row is a flex line — button, then price —
   so the badge gets its own place in that line instead of floating above it:
   pushed to the end of the button box, vertically centred, with the price given
   a little more left padding so the three sit evenly.
   Nothing is hidden and nothing moves the price off its own baseline. */
html body .w2-foot .w2-foot-actions{ position: relative !important; }

html body .w2-foot .w2-foot-actions .w2-foot-cta{
  position: relative !important;
  /* W2FOOTDEAD_260810 padding-right:34px DELETED. It reserved room for a
     badge pinned to the right edge; nothing is pinned there now, and at
     0-4-2 it was still beating the 0-1-0 rule that sets the real value. */
}

/* W2FOOTDEAD_260810 the .w2-badge / [class*=badge] block is DELETED: no
   such element exists, the count is a ::after. */
html body .w2-foot .w2-foot-actions .w2-foot-price{
  padding-left: 12px !important;
}


/* W2SHOWCASE_KILL_260809 W2SIGNAL_INK_V1 DELETED with the gallery it painted. Every
   selector in it was #w2signals .w2sg-word; with w2signals.js gone there is
   no element left for it to match, and a rule that can never apply is the
   kind of thing that later gets read as evidence the feature still exists. */



/* ==================== W2_PRINTINK_V1 ==================== */
/* THE INK BELONGS TO THE GARMENT, NOT TO THE GLYPH.
   .sh-block carries the right colour inline (He, from vn.dark). Its leaves came
   out rgb(10,10,10) with no inline colour and no rule that any readable sheet
   could account for. Rather than keep hunting the source, the leaves are made
   incapable of holding their own ink: they inherit.
   No colour value appears here on purpose — add a colourway to vn and this
   needs no edit. */
.sh-block .sh-phrase,
.sh-block .w2logo-w,
.sh-block .w2logo-sup,
.sh-block .sh-brand-line,
.sh-block .overlay-phrase {
  color: inherit !important;
  -webkit-text-fill-color: currentColor !important;
}

.w2-foot-cta::before{ content:""; display:inline-block; width:18px; height:18px;
  margin-right:9px; vertical-align:-3px; background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'/%3E%3Ccircle cx='20' cy='21' r='1'/%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'/%3E%3C/svg%3E") center/contain no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'/%3E%3Ccircle cx='20' cy='21' r='1'/%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'/%3E%3C/svg%3E") center/contain no-repeat; }

/* a reader who asked for less motion gets the sheet, not the slide */
@media (prefers-reduced-motion: reduce) {
  html body .w2co-sheet { animation: none !important; }
}

/* a reader who asked for less motion gets the sheet, not the slide */
@media (prefers-reduced-motion: reduce) {
  html body .w2co-sheet { animation: none !important; }
}

/* W2COSHEET_260810 — the checkout is a bottom sheet on a phone.

   WHY THE OVERRIDES ARE PREFIXED. The checkout's CSS lives in THREE places:
   w2-merged.css (the source), w2-checkout.css (generated from it) and a string
   baked into w2-checkout.js which the widget injects at runtime. The injected
   one lands last in the cascade, so a plain .w2co-sheet rule written here would
   lose to it. `html body` puts these at 0-4-x, above every copy, and the
   generated files are left alone — the banner in them says regenerate, never
   hand-edit, and this respects that.

   WHAT CHANGES. On a phone the sheet stops being a card floating in 16px of
   margin and becomes what a sheet is: full width, anchored to the bottom edge,
   scrolling inside itself.

   dvh, not vh: vh on iOS counts the area behind the URL bar, so a 100vh sheet
   stands taller than the screen and its last field sits under the chrome — on a
   form with a Pay button at the bottom that is not cosmetic.

   The background lock is NOT touched: w2-checkout.js already fixes the body and
   restores the scroll offset (W2CO_VV_TG_V2, lines 405-442). A second lock would
   be a second owner of the same fact. */

@media (max-width: 640px) {
  html body .w2co-ov {
    align-items: flex-end !important;
    padding: 0 !important;
  }

  html body .w2co-sheet {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    border-radius: 20px 20px 0 0 !important;
    /* the sheet scrolls inside itself, so the page behind never has to */
    max-height: 92dvh !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch !important;
    /* clear of the home indicator */
    padding: 22px 16px calc(24px + env(safe-area-inset-bottom)) !important;
    animation: w2coUp .22s cubic-bezier(.22,.61,.36,1) both !important;
  }

  /* THE CROSS IS LEFT ALONE. .w2co-x is already position:absolute at
     top:16/right:16 of the sheet, which is exactly where it belongs. The
     previous version of this block made it sticky and floated — that took it
     out of the corner and dropped it into the text flow, where it sat on the
     second line of the subtitle. A rule that "improves" something already
     correct is how that happened; it is deleted rather than tuned.
     Only the corner inset is tightened for the narrower phone sheet. */
  html body .w2co-sheet .w2co-x {
    top: 14px !important;
    right: 14px !important;
    z-index: 2 !important;
  }
  /* the title must clear the cross, or a long one runs under it */
  html body .w2co-sheet .w2co-h { padding-right: 52px !important; }
}

@keyframes w2coUp { from { transform: translateY(14%); } to { transform: translateY(0); } }

/* a reader who asked for less motion gets the sheet, not the slide */
@media (prefers-reduced-motion: reduce) {
  html body .w2co-sheet { animation: none !important; }
}

/* W2COROUND_260810 — the sheet is rounded on all four corners.

   The generated checkout stylesheet sets
     border-radius: var(--w2modal-radius) var(--w2modal-radius) 0 0
   — top corners only. That is right for a phone, where the sheet is anchored to
   the bottom edge and there is no bottom corner to round. On a desktop the sheet
   floats in the middle of the overlay, so square bottom corners read as a card
   that was cut off.

   Prefixed with `html body` for the same reason as the rest of this work: the
   checkout's CSS lives in three copies and the one injected at runtime lands
   last, so a bare selector loses to it however many !importants it carries.

   The phone rule is left as it is: a bottom sheet with rounded bottom corners
   would float a few pixels above the edge of the screen. */

/* THE CLASS IS DOUBLED ON PURPOSE. The injected copy declares
     html body .w2co-sheet{border-radius: <r> <r> 0 0 !important}
   at the SAME specificity as a plain html body .w2co-sheet here, and it is
   injected at runtime so it lands last and wins. A media query adds no weight.
   Doubling the class is the trick this very file already uses elsewhere
   (html body .w2co-sheet.w2co-sheet:not(...)), so it is the house pattern
   rather than a new one. */
@media (min-width: 641px) {
  html body .w2co-sheet.w2co-sheet {
    border-radius: 20px !important;
  }
}


/* ===================== W2STREETGAP_260816_170000 ======================
   Street needs more air around the heart than Barlow does: its W ends with
   almost no right side bearing and its glyphs run tighter.

   BOTH SIDES, the same number: widening one side only slides the heart into
   the other glyph rather than making room.

   The value is by eye, not measured. An earlier revision derived one from the
   proportions of a rendered print file — but that gap is drawn by the server
   compose, not by this sheet, and at the on-garment size the correction came
   out under a single pixel and looked identical to before. No number from that
   attempt is repeated here, so a search for it finds only what is live.

   Classic stays at the base .045em and is deliberately not selected here.
   The face arrives as an inline fontFamily on .w2logo, which is why this
   matches on the attribute — the same idiom as the W2LEGACYSTYLE_KILL_V1
   tripwire a few blocks up.

   BOTH marker names are listed. The registry declares one first and ships no
   file for it, so the browser resolves the second; if that file is ever added,
   the first name starts winning and this rule must not go quiet again.
   ============================================================== */
html body .w2logo[style*="Permanent Marker"] .w2logo-h,
html body .w2logo[style*="Gloss And Bloom"] .w2logo-h{
  margin-left: .16em !important;     /* street air — tune both, together */
  margin-right: .16em !important;
}
html body .style-street .sp-heart-img,
html body .style-street .sp-heart-svg{
  margin-left: .16em !important;
  margin-right: .16em !important;
}


/* ===================== W2PRICEBLUE_260816 =========================
   ONE colour for every price in the product.

   Orange prices sat next to red hearts, the gold QR notice and the đồng accent,
   and the eye stopped finding the number. Blue is the only accent in the tree
   that nothing else on these surfaces uses.

   #1877F2 is the front's declared blue standard — the @handle, the tab
   underline, the accent. Not a new colour: the one already in the product.
   It holds on both themes, so there is a single value and no pair.

   WRITTEN OUT, NOT BEHIND A CUSTOM PROPERTY
   A --w2-price property read nicer and could not be verified: getComputedStyle
   returns "var(--x)" rather than a colour, so the cascade test could not tell a
   winning rule from a losing one — and two of these selectors are fighting an
   earlier !important. The hex is repeated so the check is real. One value, one
   search-and-replace, and a test that can actually see it.

   Scope is prices ONLY. --w2-dong stays what it is — the currency accent —
   because the GBT line, the warning state and the đồng suffix read it too, and
   repainting the token would repaint all of them.
   ============================================================== */
/* the dock */
html body .w2-foot .w2-foot-actions .w2-foot-usd,
html.w2-dark body .w2-foot .w2-foot-actions .w2-foot-usd,
html body .w2-foot .w2-foot-price .w2-foot-usd{ color:#1877F2 !important; }
/* W2DONGONE_260816 deleted: it painted the dock price a link blue at every
   width where the phone rule did not reach, including the 640-768 band.
   The price colour is the currency token now, and only the token. */

/* the cart */
html body #w2c-root .w2c-total-val,
html body #w2c-root.w2c-dark .w2c-total-val,
html body .w2c-total-val{ color:#1877F2 !important; }
html body #w2c-root .w2c-total-gbt,
html body .w2c-total-gbt{ color:#1877F2 !important; }

/* checkout and invoice */
html body .w2co-bigamt{ color:#1877F2 !important; }
html body .w2co-dong,
html body .w2co-sheet--dark .w2co-dong{ color:#1877F2 !important; }
html body .w2inv-amt,
html body .w2inv-amt span{ color:#1877F2 !important; }
html body .w2co-gpc .row .tot,
html body .w2co-gpc .row b{ color:#1877F2 !important; }

/* the phone shelf price */
html body .price-val{ color:#1877F2 !important; }


/* ===================== W2DONGONLY_260816 =========================
   THE DOCK PRICE.

   W2PRICEBLUE named .w2-foot-usd and .w2-foot-gbt and the dock stayed orange,
   so the number there is not in the element I assumed. Rather than guess at a
   third class name, the whole price box is claimed: it holds the price and
   nothing else, so painting its subtree cannot catch anything unintended.
   !important also beats a plain inline style, which is the other way a value
   could have been arriving.

   The figure is also given a little more presence — it is the number the buyer
   decides on, and it was the same weight as the button label beside it.
   ============================================================== */
html body .w2-foot .w2-foot-price,
html body .w2-foot .w2-foot-price *,
html body .w2-foot .w2-foot-actions .w2-foot-price *{
  color:#1877F2 !important;
}
html body .w2-foot .w2-foot-price .w2-foot-usd,
html body .w2-foot .w2-foot-actions .w2-foot-usd{
  font-size:23px !important;
  font-weight:800 !important;
  letter-spacing:-.02em !important;
}
/* the second dock line carried the đồng beside a dollar; with one currency it
   has nothing left to say, so it takes no vertical space */
html body .w2-foot .w2-foot-gbt:empty{ display:none !important; }


/* ===================== W2DONG2_260816 ==============================
   THE PRICE CLASSES THAT WERE MISSED.

   Two earlier passes painted a list of classes assembled by searching for
   colour declarations. The number had since moved into other elements:
   .w2c-price carries the cart line, and .w2co-amt carries the checkout line
   and the confirm total now that đồng was promoted into it. Both were reading
   the sheet's ink instead of a price colour.

   The dock is netted by attribute rather than by an exact class: naming it
   three times and missing three times is enough. Anything in the dock whose
   class mentions price, usd, dong or vnd is a price. The CTA label is not
   matched by any of those, so the button keeps its own ink.
   ============================================================== */
html body .w2c-price,
html body #w2c-root .w2c-price,
html body #w2c-root.w2c-dark .w2c-price{ color:#1877F2 !important; }

html body .w2co-amt,
html body .w2co-sheet .w2co-amt,
html body .w2co-sheet--dark .w2co-amt,
html body .w2co-sheet:not(.w2co-sheet--dark) .w2co-amt,
html body .w2co-gpc .row b,
html body .w2co-gpc .row .tot{ color:#1877F2 !important; }

/* These two are overridden by sheets that load AFTER w2-merged.css —
   w2cartui.css is linked later, and the checkout sheet is injected at runtime.
   The class is repeated to raise specificity past them without inventing a
   different selector that would mean something else. */
html body #w2c-root .w2c-total-val.w2c-total-val,
html body #w2c-root.w2c-dark .w2c-total-val.w2c-total-val,
html body .w2c-total-val.w2c-total-val{ color:#1877F2 !important; }
html body .w2co-sheet .w2co-bigamt.w2co-bigamt,
html body .w2co-bigamt.w2co-bigamt,
html body .w2co-sheet .w2co-dong.w2co-dong,
html body .w2inv-amt.w2inv-amt,
html body .w2inv-amt.w2inv-amt span{ color:#1877F2 !important; }

html body .w2-foot [class*="price"],
html body .w2-foot [class*="usd"],
html body .w2-foot [class*="dong"],
html body .w2-foot [class*="vnd"],
html body .w2-foot [class*="price"] *{ color:#1877F2 !important; }
