/* ============================================================
   CEW — Elementor layout guards
   ------------------------------------------------------------
   Deliberately tiny. This file does NOT restyle anything in styles.css.
   It only stops Elementor's own wrappers from constraining the full-bleed
   <section> elements our widgets output.

   The CCI sections manage their own width via .wrap (max-width:1320px),
   so they must be dropped into a FULL WIDTH container with ZERO padding.
   ============================================================ */

/* Every CCI section manages its own width via .wrap, so the widget wrapper
   must never shrink to its content. Matched by attribute rather than by a
   list of names: the list was written when there were 21 widgets, and by the
   time there were 49 the 28 newest ones had silently missed out — which is
   how the article's featured image ended up hugging the left edge instead of
   centring inside a flex container. */
[class*="elementor-widget-cci-"] {
  width: 100%;
}

/* The burst carousel parks off-screen slides to the right; without this the
   editor canvas gets a horizontal scrollbar while they're parked. */
.elementor-widget-cci-burst > .elementor-widget-container {
  overflow-x: clip;
}

/* ============================================================
   Grid repair for hidden blocks
   ------------------------------------------------------------
   styles.css sizes several grids for a fixed number of children
   (.stats is repeat(3,1fr), .foot__grid is 1.6fr 1fr 1fr 1.2fr …).
   Switch a block off in a widget and the remaining children would
   sit in the wrong tracks, leaving a gap.

   A widget adds one of these modifier classes ONLY when a Show
   switcher has actually removed something, or when a repeater has
   a different number of rows than the design assumed. With
   everything visible, no class is added and the markup is
   byte-identical to the static site.

   Why classes rather than Elementor's generated per-element CSS:
   styles.css re-columns at 1100px and 720px, but Elementor's
   responsive controls break at 1024/767 — they don't line up, and
   a generated `.elementor-element-x .stats {…}` rule (0,2,0) would
   outrank the media queries at every width. Scoping to
   min-width:1101px here keeps both breakpoints intact.

   .wrap sits on every affected grid, so `.wrap.cew-cols-N` is
   (0,2,0) and cleanly outranks the single-class rules it replaces.

   The RECLAIMED OVERRIDES section below restates some of these same
   track lists with !important (.elementor .news__grid, .elementor .jobs).
   Among !important rules specificity still decides, so every selector
   here carries the .elementor prefix too — that makes them (0,3,0)
   against those rules' (0,2,0) and keeps the repair winning regardless
   of which block comes first in the file.
   ============================================================ */
@media (min-width: 1101px) {
  .elementor .wrap.cew-cols-1 { grid-template-columns: 1fr !important; }
  .elementor .wrap.cew-cols-2 { grid-template-columns: repeat(2, 1fr) !important; }
  .elementor .wrap.cew-cols-3 { grid-template-columns: repeat(3, 1fr) !important; }
  .elementor .wrap.cew-cols-4 { grid-template-columns: repeat(4, 1fr) !important; }
  .elementor .wrap.cew-cols-5 { grid-template-columns: repeat(5, 1fr) !important; }
  .elementor .wrap.cew-cols-6 { grid-template-columns: repeat(6, 1fr); }

  /* These two have no .wrap — the .elementor prefix carries them. */
  .elementor .about__vm.cew-cols-1 { grid-template-columns: 1fr !important; }
  .elementor .pillars.cew-cols-1   { grid-template-columns: 1fr !important; }

  /* The footer's brand column is deliberately wider, so it keeps its own
     track list rather than falling back to equal columns. */
  .elementor .foot__grid.cew-foot-3 { grid-template-columns: 1.6fr 1fr 1.2fr !important; }
  .elementor .foot__grid.cew-foot-2 { grid-template-columns: 1.6fr 1.4fr !important; }
  .elementor .foot__grid.cew-foot-1 { grid-template-columns: 1fr !important; }

  /* .jobs is repeat(2,1fr) — a lone card would sit in a half-width track. */
  .elementor .jobs.cew-cols-1 { grid-template-columns: 1fr !important; }
}

[class*="elementor-widget-cci-"] > .elementor-widget-container {
  width: 100%;
}

/* .nav is position:sticky and .drawer is position:fixed. Both are killed by an
   ancestor that creates a containing block — which is exactly what Elementor
   does when a container has overflow:hidden, a transform, or a motion effect.
   Neutralise it on the wrappers we own; the theme-builder container itself
   must be left at Overflow: Default with no motion effects. */
.elementor-widget-cci-header,
.elementor-widget-cci-header > .elementor-widget-container {
  overflow: visible;
  transform: none;
  filter: none;
  perspective: none;
}

/* The hero is min-height:calc(100vh - var(--nav-h)). Inside the editor canvas
   the toolbar eats vertical space, which makes it look shorter than it is on
   the live site — nothing to fix, but the outline helps while dragging. */
.elementor-editor-active .elementor-widget-cci-hero .hero {
  outline: none;
}

/* ============================================================
   Hello Elementor's bare-button hover
   ------------------------------------------------------------
   The theme styles every unclassed control:

     button:hover, button:focus,
     [type=button]:hover, [type=submit]:hover, … {
       background-color:#c36; color:#fff;
     }

   `[type=button]:hover` is (0,2,0) — exactly the same specificity as
   `.rpick:hover` — so which one wins is decided purely by stylesheet
   order, which is not something to leave to chance.

   Every CCI control is a <button>, so all of them are exposed. The
   design gives most of them NO hover background at all (.rpick only
   sets a transform; .filter__btn and .lang__btn only change border and
   text colour), so the theme rule is pure pollution there.

   Prefixing with .elementor lifts these to (0,3,0), which already wins.
   !important is belt-and-braces: this file exists precisely to neutralise
   third-party resets, and a control's hover state is not something the
   Style tab exposes, so nothing legitimate is being blocked.

   IMPORTANT — every value below is the DESIGN'S OWN value, copied from the
   stylesheet that owns the control. This block is a specificity lift, not a
   place to invent styling. When a control's look changes upstream, change it
   here too or the two drift apart: forcing `color:inherit` on a control whose
   design DOES colour its hover silently deletes that hover.

   Where two brands style the same control differently, the fallback chain
   picks the right one on its own: `--ck-*` is only defined on the Cho's
   Kitchen stylesheets, `--rg-*` only on the recipe-guide ones, so
   var(--ck-x, var(--rg-x)) resolves per page with no extra scoping.
   ============================================================ */

/* --- controls the design gives NO hover background or colour -----------
   Hello Elementor sets background-color AND color, so both are neutralised.
   These four genuinely have neither in the design — .rpick only transforms,
   .filter__btn/.rg-select__btn only move their border, .nav__burger is bare.
   .filter__btn and .lang__btn DO colour their text on hover, so they are
   handled separately below rather than being flattened to `inherit`. */
.elementor .rpick:hover,
.elementor .rpick:focus,
.elementor .nav__burger:hover,
.elementor .nav__burger:focus,
.elementor .rg-select__btn:hover,
.elementor .rg-select__btn:focus,
.elementor .rec__toggle:hover,
.elementor .rec__toggle:focus {
  background-color: transparent !important;
  color: inherit !important;
}

/* --- controls with no hover background but a designed hover COLOUR ----- */
.elementor .filter__btn:hover,
.elementor .filter__btn:focus {
  background-color: transparent !important;
  color: var(--cci-blue) !important;
}

.elementor .lang__btn:hover,
.elementor .lang__btn:focus {
  background-color: transparent !important;
  color: var(--ck-brown-deep, var(--cci-blue)) !important;
}

/* --- controls whose active/hover background IS part of the design ------ */
.elementor .lang__btn.is-active,
.elementor .lang__btn.is-active:hover,
.elementor .lang__btn.is-active:focus {
  background-color: var(--ck-brown-deep, var(--cci-blue)) !important;
  border-color: var(--ck-brown-deep, var(--cci-blue)) !important;
  color: var(--ck-gold-soft, #fff) !important;
}

.elementor .filter__btn.is-active,
.elementor .filter__btn.is-active:hover,
.elementor .filter__btn.is-active:focus {
  background-color: var(--cci-blue) !important;
  border-color: var(--cci-blue) !important;
  color: #fff !important;
}

/* The flavour dropdown's rows have a real hover tint and a real selected
   state — the previous blanket `transparent` here erased both. */
.elementor .rg-select__opt:hover,
.elementor .rg-select__opt:focus {
  background-color: var(--ck-cream-2, var(--rg-blue-50)) !important;
  color: var(--ck-brown-deep, var(--rg-navy)) !important;
}
.elementor .rg-select__opt.is-active,
.elementor .rg-select__opt.is-active:hover,
.elementor .rg-select__opt.is-active:focus {
  background-color: var(--ck-brown-deep, var(--rg-navy)) !important;
  color: #fff !important;
}

.elementor .rhero__arrow:hover,
.elementor .rhero__arrow:focus {
  background-color: var(--brand) !important;
  border-color: var(--brand) !important;
  color: #fff !important;
}

.elementor .rdot.is-active {
  background-color: var(--brand) !important;
}

/* .burst__arrow's hover is restated once, with the burst block in RECLAIMED
   OVERRIDES below — the design paints it blue, not dark. */

/* The two dot rows look different: the hero's active dot is cream on the
   photographic hero, the burst's is gold on the cream stage. */
.elementor .hero__dots button:hover,
.elementor .hero__dots button:focus {
  background-color: rgba(247, 241, 230, 0.7) !important;
}
.elementor .hero__dots button.is-active {
  background-color: #f7f1e6 !important;
}
.elementor .burst__dots button.is-active {
  background-color: var(--gold) !important;
  opacity: 1 !important;
  transform: scale(1.15) !important;
}

/* --- :focus on controls the design never styles for focus --------------
   The design writes no :focus for these, so a focused control must look
   exactly like its resting state. Their resting colour is a bare `.x{}`
   (0,1,0), which loses to the theme's `button:focus` (0,1,1) — a CLICKED
   arrow turned #c36 and stayed pink until the visitor clicked elsewhere.
   Hover was never affected: the design's `.x:hover` (0,2,0) already wins.

   Values are the resting values from each control's own stylesheet.
   :not(:hover) hands the pointer-over state back to the design's hover;
   :not(.is-active) leaves the active card / dot to their own rules. */
.elementor .products2__arrow:focus:not(:hover) {
  background: var(--ck-gold-bright) !important;
  color: var(--ck-brown-deep) !important;
}
.elementor .cats2__arrow:focus:not(:hover) {
  background: rgba(255, 246, 222, 0.88) !important;
  color: var(--ck-brown-deep) !important;
}
.elementor .ssprods__arrow:focus:not(:hover) {
  background: var(--ss-navy) !important;
  color: #fff !important;
}
.elementor .htl__arrow:focus:not(:hover) {
  background: rgba(255, 255, 255, 0.08) !important;
  color: #fff !important;
}
.elementor .hcard:focus:not(:hover):not(.is-active) {
  background: var(--ck-cream) !important;
}
.elementor .burst__dots button:focus:not(:hover):not(.is-active) {
  background: var(--gold-soft) !important;
}
.elementor .htl__dot:focus:not(:hover):not(.is-active) {
  background: rgba(255, 255, 255, 0.35) !important;
}

/* ============================================================
   .htl__dots — the timeline's per-year card dots
   ------------------------------------------------------------
   Not in the design: 2026 carries three cards under one year, and the
   designer asked for three small dots under the card so it is clear how
   many there are and where you are. Built from .burst__dots' geometry —
   same 9px circle, same gap and active scale — but in white-on-navy,
   because this section is the dark one and gold alone reads as an accent
   rather than a state. heritage.js adds and removes the buttons, and
   hides the row on any year that holds a single card.
   ============================================================ */
.elementor .htl__dots {
  display: flex;
  justify-content: center;
  gap: 9px;
  margin-top: 22px;
}
.elementor .htl__dots[hidden] {
  display: none;
}
.elementor .htl__dot {
  width: 9px;
  height: 9px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
  background: rgba(255, 255, 255, 0.35);
  transition: background 0.2s, transform 0.2s;
}
.elementor .htl__dot:hover {
  background: rgba(255, 255, 255, 0.6) !important;
}
.elementor .htl__dot.is-active {
  background: var(--gold) !important;
  transform: scale(1.15);
}

/* ============================================================
   .is-duo / .is-trio — the 2020 and 2025 sizing, unpinned
   ------------------------------------------------------------
   our-heritage.css sizes those two cards by POSITION, not by layout:

     .htl__panel[data-panel="5"] .htl__panel-media-main { max-width:50%; … }
     .htl__panel[data-panel="9"] .htl__panel-media-main { max-width:40%; … }

   data-panel 5 is the sixth milestone and 9 the tenth, so the look the
   client keeps pointing at could not be chosen for any other card: picking
   "two packs" elsewhere returned 2008's much larger pair, and "three packs"
   came out 314x269 inside a 268px-tall frame — over the gold corner marks.

   Every number below is copied from those two rules, at all three
   breakpoints, so the new options are the same cards' sizing made
   selectable. The design's own data-panel rules are untouched: 2020 and
   2025 keep rendering from them, byte for byte.

   .is-duo also carries .is-multi (and .is-trio carries .is-triple) so the
   positioning, z-order and rotation all still come from the design.
   ============================================================ */
.elementor .htl__panel-media.is-duo .htl__panel-media-main,
.elementor .htl__panel-media.is-duo .htl__panel-media-sub {
  max-width: 50%;
  max-height: 180px;
}
.elementor .htl__panel-media.is-duo .htl__panel-media-sub {
  left: 4%;
  bottom: 17px;
  transform: rotate(-8deg);
}
.elementor .htl__panel-media.is-trio .htl__panel-media-main,
.elementor .htl__panel-media.is-trio .htl__panel-media-l,
.elementor .htl__panel-media.is-trio .htl__panel-media-r {
  max-width: 40%;
  max-height: 180px;
}
@media (max-width: 1100px) {
  .elementor .htl__panel-media.is-duo .htl__panel-media-main,
  .elementor .htl__panel-media.is-duo .htl__panel-media-sub {
    max-width: 46%;
    max-height: 118px;
  }
  .elementor .htl__panel-media.is-trio .htl__panel-media-main,
  .elementor .htl__panel-media.is-trio .htl__panel-media-l,
  .elementor .htl__panel-media.is-trio .htl__panel-media-r {
    max-width: 38%;
    max-height: 112px;
  }
}
@media (max-width: 720px) {
  .elementor .htl__panel-media.is-duo .htl__panel-media-main,
  .elementor .htl__panel-media.is-duo .htl__panel-media-sub {
    max-height: 102px;
  }
  .elementor .htl__panel-media.is-trio .htl__panel-media-main,
  .elementor .htl__panel-media.is-trio .htl__panel-media-l,
  .elementor .htl__panel-media.is-trio .htl__panel-media-r {
    max-height: 98px;
  }
}

/* ============================================================
   .htl__rows — packs laid out in rows instead of fanned
   ------------------------------------------------------------
   Not in the design: 2026 shows five packs and the client asked for them
   upright and separate — two over three — rather than the overlapping fan
   the design draws. Every other milestone keeps its own layout.

   Sized by HEIGHT, like .htl__fan, so a portrait Shin Shin sachet and a
   landscape Cho's Kitchen pack come out the same size. Two rows plus the
   gap have to live inside the frame, whose imagery the design caps at
   216 / 142 / 124px per breakpoint — hence roughly half of each, which
   also keeps clear of the gold corner marks.
   ============================================================ */
.elementor .htl__rows {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  width: 100%;
  position: relative;
  z-index: 2;
}
.elementor .htl__rows-line {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  gap: 16px;
}
.elementor .htl__rows img {
  height: 100px;
  width: auto;
  max-width: none;
  max-height: none;
  object-fit: contain;
  transform: none;
  filter: drop-shadow(0 10px 14px rgba(31, 26, 110, 0.22));
}
@media (max-width: 1100px) {
  .elementor .htl__rows {
    gap: 9px;
  }
  .elementor .htl__rows-line {
    gap: 11px;
  }
  .elementor .htl__rows img {
    height: 66px;
  }
}
@media (max-width: 720px) {
  .elementor .htl__rows img {
    height: 56px;
  }
}

/* ============================================================
   RECLAIMED OVERRIDES
   ------------------------------------------------------------
   Everything below used to be edited directly INTO the copied page
   stylesheets (css/styles.css, css/career.css, css/recipe.css …).
   That was a trap: those files are verbatim copies of allpages/css/,
   so the next time the designer shipped an update, re-copying wiped
   every override and there was no record of what had been lost.

   They now live here instead, which means the copied stylesheets can
   be replaced with a plain `cp` from allpages/css/ whenever the design
   changes. The ONLY hand edit left in those files is the five
   decorative images, which stay .webp because that is what the plugin
   bundles in assets/images/.

   Each rule keeps the reason it exists. The `.elementor` prefix does
   double duty — it lifts specificity above Elementor's own resets and
   it scopes these overrides to Elementor-rendered content, so a
   non-Elementor page in the same install is untouched.
   ============================================================ */

/* --- Buttons ------------------------------------------------------------
   Hello Elementor and Elementor's own form/button resets both land on
   bare .btn elements. The design's shape (pill, 2px transparent border,
   fixed padding) is not something the Style tab exposes, so it is held
   here rather than left to load order. */
.elementor .btn {
  font-family: "DM Sans", sans-serif !important;
  font-weight: 600 !important;
  font-size: 16px !important;
  padding: 15px 30px !important;
  border-radius: 100px !important;
  border: 2px solid transparent;
  cursor: pointer !important;
  transition: 0.2s ease !important;
  white-space: nowrap !important;
}
.elementor .btn--primary {
  background: var(--cci-blue) !important;
  color: #fff !important;
}
.elementor .btn--primary:hover {
  background: var(--cci-blue-700) !important;
  color: #fff !important;
}
.elementor .btn--full {
  width: 100% !important;
}

/* The `border` shorthand above is (0,2,0) and sets the colour to transparent,
   which silently beat `.btn--outline{border-color:…}` and `.btn--ghost{…}` at
   (0,1,0) — those two variants rendered with no visible outline at all. The
   values are the design's own, restated at matching specificity so the
   variants win their border back. */
.elementor .btn--outline {
  border-color: var(--cci-blue);
}
.elementor .btn--outline:hover {
  border-color: var(--cci-blue);
}
.elementor .btn--ghost {
  border-color: rgba(255, 255, 255, 0.6);
}
.elementor .btn--ghost:hover {
  border-color: #fff;
}
.elementor .nav__burger {
  background: none !important;
}

/* ============================================================
   RECLAIMED 2026-08-27 — edits that were living in the copied sheets
   ------------------------------------------------------------
   A diff of allpages/css/ against this folder found 38 hand-edited
   lines across 13 files. Every one would have been destroyed by the
   next `cp` from allpages/css/, with no record of what was lost.
   They are restated here, `.elementor`-prefixed, so the copies can go
   back to being verbatim.

   Grouped by why each exists. Values are unchanged from the edits.
   ============================================================ */

/* --- Media that must fill or hold its box -------------------------------
   Elementor's `.elementor img{height:auto}` and friends keep reaching
   these; the design sets an explicit size with a single class and either
   ties or loses.

   NO !important in this block, deliberately. These arrived as hand edits on
   bare single-class selectors, where !important was the only way to win.
   Reclaiming them added the `.elementor` prefix, which makes each one
   (0,2,0) and already beats `.elementor img` at (0,1,1) on specificity
   alone — so the !important came along for no reason and did real harm: it
   also outranked Elementor's own per-element CSS, which is how the hero's
   new Brand Mark Height control could be set to 200px and change nothing.
   Specificity here, controls on top. Do not put it back.
   ------------------------------------------------------------ */
/* Career only. contact.css gained its own .chero__bg in the 2026-09 update
   and below 720px deliberately makes it a normal-flow banner with
   height:auto — an unscoped height:100%!important here would have pinned
   it back to the section and squashed the new mobile header. */
.elementor .chero.cew-chero-career .chero__bg {
  width: 100%;
  height: 100%;
}
.elementor .hero2__bg,
.elementor .ohero__bg,
.elementor .sshero__bg,
.elementor .bcard__bg,
.elementor .bcard__photo,
.elementor .pillar__img {
  height: 100%;
}
.elementor .hero2__logo {
  height: clamp(56px, 7vw, 84px);
  border-radius: 999px;
  box-shadow: 0 10px 26px -10px rgba(0, 0, 0, 0.45);
}
.elementor .hero__logo--brand {
  height: clamp(52px, 6.4vw, 80px);
  max-width: 240px;
  object-fit: contain;
}
.elementor .hero__logo--ss {
  height: clamp(60px, 7.4vw, 92px);
}
.elementor .quote__photo {
  height: 92px;
  border-radius: 14px;
  border: 2px solid var(--cci-blue-50);
  box-shadow: var(--shadow-sm);
}
.elementor .pstage__pack {
  max-width: 58%;
  max-height: 80%;
}
.elementor .pstage__pack.is-photo {
  max-width: 74%;
  max-height: 84%;
}
.elementor .rbrand__mark {
  height: clamp(72px, 8vw, 110px);
  max-width: 100%;
}
.elementor .rbrand__mark--ss {
  height: auto;
}
/* Elementor core ships
     .elementor .elementor-widget:not(.elementor-widget-text-editor):not(.elementor-widget-theme-post-content) figure { margin:0 }
   which is (0,4,1) and beats every margin the design writes on a <figure>.
   It flattened two of ours: the article's featured image lost `margin:40px
   auto 0` and sat hard against the left edge instead of centring under the
   headline, and every in-article figure lost its 38px of vertical rhythm.
   !important is the only lever short of restating their whole selector —
   neither figure has a Margin control in its widget, so nothing is blocked. */
.elementor .ahero__media {
  margin: 40px auto 0 !important;
}
.elementor .prose__fig {
  margin: 38px 0 !important;
}
@media (max-width: 720px) {
  .elementor .ahero__media {
    margin-top: 30px !important;
  }
}
.elementor .ahero__img {
  height: clamp(300px, 46vw, 560px);
  border-radius: var(--r);
  box-shadow: var(--shadow);
}

/* --- Button resets the theme keeps re-applying --------------------------
   hello-elementor's reset paints every <button> and adds .5rem padding.
   These four are buttons in the design that must stay flush or flat. */
.elementor .htl__arrow,
.elementor .share-btn {
  padding: 0 !important;
}
.elementor .htl__year:hover,
.elementor .htl__year:focus,
.elementor .htl__year.is-active {
  background: none !important;
}
.elementor .pthumb:hover,
.elementor .pthumb:focus {
  background-color: transparent !important;
}
.elementor .btn--outline {
  color: var(--cci-blue) !important;
}
.elementor .btn--outline:hover {
  background: var(--cci-blue) !important;
  color: #fff !important;
}
.elementor .hero .btn--ghost {
  border-color: rgba(247, 241, 230, 0.55) !important;
}

/* --- Deliberate design changes, not in the designer's files -------------
   These are decisions made during the build. They are NOT in
   allpages/css/, so if the designer ever ships an update these are the
   ones that would vanish without trace. Keep them until the design
   catches up. */
.elementor .hcard:hover {
  background: #e5c357 !important;
}
.elementor .burst__dots button:hover {
  opacity: 1 !important;
  background: var(--gold) !important;
  transform: scale(1.15) !important;
}
.elementor .bcard h3,
.elementor .news-page .ncard h3 {
  font-weight: 700 !important;
}
.elementor .htl__year:focus {
  color: #fff !important;
}
.elementor .share-btn:focus {
  background: var(--cci-blue-700) !important;
  transform: translateY(-2px) !important;
}
.elementor .pthumb:focus {
  border-color: var(--brand) !important;
}
/* .rg-back is declared bare in BOTH guide stylesheets with a different
   colour each — brown on Cho's Kitchen, white on Shin Shin — and the two
   pages emit identical markup, so there is no modifier to hang this on.
   The var() fallback does the job instead: --ck-brown-deep only exists
   where chos-kitchen-ingredient.css is loaded, and Assets::
   conditional_styles() means exactly one guide sheet loads per page. */
.elementor a.rg-back {
  color: var(--ck-brown-deep, #fff) !important;
}

/* --- Images that must fill their box ------------------------------------
   Elementor ships `.elementor img{height:auto}` at (0,1,1). Assets::
   order_after_elementor() already forces our stylesheets to load after
   Elementor's, which resolves the tie for every image rule in the design.
   These four are called out anyway because a collapsed hero backdrop or
   news thumbnail is a visible, page-breaking failure rather than a
   cosmetic one. */
.elementor .hero__bg,
.elementor .about__media img,
.elementor .ncard__media img {
  height: 100% !important;
}
.elementor .about__media img {
  border-radius: var(--r) !important;
  box-shadow: var(--shadow) !important;
}
.elementor .cpack {
  height: auto !important;
}
.elementor .rbrand__logo {
  height: clamp(84px, 9vw, 132px) !important;
}
/* recipe.css shrinks it again below 640px; the !important above would
   otherwise hold the desktop clamp all the way down. */
@media (max-width: 640px) {
  .elementor .rbrand__logo {
    height: clamp(72px, 20vw, 96px) !important;
    margin-bottom: 12px !important;
  }
}

/* --- Burst carousel arrows ----------------------------------------------
   Round icon buttons; Hello Elementor's [type=button] reset would
   otherwise square them off and repaint them on hover. */
.elementor .burst__arrow {
  width: 46px !important;
  height: 46px !important;
  border-radius: 50% !important;
  border: 1px solid var(--line) !important;
  background: #fff !important;
  display: grid !important;
  place-items: center !important;
  color: var(--cci-blue) !important;
  box-shadow: var(--shadow-sm) !important;
  transition: background 0.2s, color 0.2s, transform 0.2s !important;
  padding: 6px !important;
}
.elementor .burst__arrow:hover {
  background: var(--cci-blue) !important;
  color: #fff !important;
  transform: scale(1.07) !important;
}
.elementor .burst__arrow svg {
  width: 22px !important;
  height: 22px !important;
}

/* --- Recipe hub controls ------------------------------------------------ */
.elementor .rhero__arrow {
  padding: 0 !important;
}
.elementor .rhero--chos .rbtn {
  color: #3a2c00 !important; /* gold needs dark ink for contrast */
}

/* --- Form fields --------------------------------------------------------
   Contact Form 7 wraps its own controls, and both CF7 and Hello Elementor
   style inputs. The design's field look has to win in both places. */
.elementor .field input,
.elementor .field select,
.elementor .field textarea {
  padding: 12px 14px !important;
  border: 1px solid var(--line) !important;
  border-radius: 10px !important;
  background-color: var(--tint) !important;
  transition: 0.15s !important;
  width: 100% !important;
}
.elementor .field input:focus,
.elementor .field select:focus,
.elementor .field textarea:focus {
  outline: none !important;
  border-color: var(--cci-blue) !important;
  background-color: #fff !important;
  box-shadow: 0 0 0 3px var(--cci-blue-50) !important;
}
/* CF7 wraps every field in its own <p>, which adds a bottom margin the
   design never allows for. */
.elementor .field p {
  margin-bottom: 0 !important;
}

/* --- Cho's Kitchen recipe archive --------------------------------------
   The design's preview media is a lifestyle crop (object-fit:cover). The
   WordPress build feeds it packshots from the product CPT instead, which
   get their corners sliced off by a cover crop — so they are contained
   and padded here. Revert this block if the media library ever holds true
   lifestyle photography for these cards. */
.elementor .rec__previewMedia img {
  object-fit: contain !important;
  padding: 20px !important;
}

/* --- Sticky nav ---------------------------------------------------------
   recipe-chos-kitchen.css re-declares `.nav{position:sticky}` for the
   static page. In WordPress the header is an Elementor Theme Builder part
   that owns its own stickiness, and two competing sticky contexts fight.
   The page stylesheet is a verbatim copy now, so the rule is undone here. */
.elementor .nav {
  position: static !important;
  backdrop-filter: none !important;
}

/* --- Grid track repair --------------------------------------------------
   These grids are sized for a fixed child count in styles.css. Elementor's
   own grid/flex utilities can reach them inside the editor canvas, so the
   design's own track lists are restated. Media queries come last so the
   responsive collapse still wins — equal specificity, later rule. */
.elementor .news__grid {
  grid-template-columns: repeat(3, 1fr) !important;
}
.elementor .jobs {
  grid-template-columns: repeat(2, 1fr) !important;
}
.elementor .link-arrow {
  white-space: nowrap !important;
}

@media (max-width: 1100px) {
  .elementor .brand-cards,
  .elementor .innov__grid,
  .elementor .news__grid {
    grid-template-columns: 1fr 1fr !important;
  }
  /* career.css drops the jobs list to ONE column here, not at 720 — without
     this the tablet range kept two half-width job cards. */
  .elementor .jobs {
    grid-template-columns: 1fr !important;
  }
  .elementor .burst__arrow {
    width: 38px !important;
    height: 38px !important;
  }
  .elementor .burst__arrow svg {
    width: 18px !important;
    height: 18px !important;
  }
}

@media (max-width: 720px) {
  .elementor .brand-cards,
  .elementor .innov__grid,
  .elementor .news__grid,
  .elementor .cats,
  .elementor .pillars,
  .elementor .mfg__feats,
  .elementor .field-row,
  .elementor .about__vm,
  .elementor .jobs {
    grid-template-columns: 1fr !important;
  }
}

/* --- Desktop nav: stop the menu wrapping ---------------------------------
   chos-kitchen.css gives .nav__menu `width:max-content`; styles.css does
   not, and that one missing declaration is the whole difference between
   the cream header and the default one.

   .nav__menu is position:absolute with left:50% and no width, so the used
   width is shrink-to-fit against the space LEFT of the containing block's
   right edge — about half of .nav__inner, ~660px. The menu is centred back
   with translateX(-50%), so nothing looks wrong until the links need more
   than that; then they wrap and the bar grows to two lines.

   The static design has seven top-level links and stays under the limit.
   The live menu has eight — Export was added — which is why this appeared
   without any CSS changing. max-content lets the row size to its content
   and overflow the half-width box, exactly as it does on Cho's Kitchen.

   Kept here rather than in styles.css, which is a verbatim copy of the
   design, and out of nav-variants.css, which is generated. Note it is not
   inside a media query on purpose: below 1100px .nav__menu is display:none
   and the burger takes over, so this only ever applies to the wide bar. */
.elementor .nav__menu {
  width: max-content !important;
}

/* --- CTA headline with an inline logo ----------------------------------
   Client change, not in the design: the closing CTA shows the CCI logo where
   the headline said "CCI". The height comes from the widget's own control and
   defaults to 1em, so the mark tracks the headline's clamp() at every
   breakpoint instead of needing a value per screen.

   vertical-align sits it on the cap height rather than the baseline, which is
   where a wordmark reads as part of the sentence; the small inline margins
   stand in for the word spaces that were removed with the word. */
.elementor .cta__title-logo {
  display: inline-block;
  width: auto;
  height: 1em;
  max-height: none;
  margin: 0 0.12em;
  vertical-align: -0.12em;
  object-fit: contain;
}

/* --- 2026-09 banner images: hold their box ------------------------------
   Reclaimed from the copied stylesheets, where they had been hand-edited in
   as !important and would have been wiped by the next re-sync.

   All four are the full-bleed banners the 2026-09 design added to the page
   headers. Each is an <img> the design sizes with a single class, against
   Elementor's `.elementor img{height:auto}` at (0,1,1) — the same tie the
   "Images that must fill their box" block above exists for.

   .chero__bg is career-only elsewhere in this file because contact.css turns
   ITS .chero__bg into a normal-flow banner below 720px; that scoped rule
   still stands, and contact's desktop height is covered here without
   touching the mobile override. */
.elementor .ckhero__bg,
.elementor .sshero2__bg,
.elementor .vmslide__img {
  height: 100% !important;
}
@media (min-width: 721px) {
  .elementor .chero__bg {
    height: 100% !important;
  }
}
/* our-heritage.css caps the hero copy at 620px; the client asked for a
   slightly wider measure so the headline stops breaking mid-phrase. */
.elementor .ohero__content {
  max-width: 662px;
}

/* --- Homepage brand card vs the Our Brands one ------------------------
   our-brands.css deliberately restyles the shared card:

       .brands .bcard { background:#fff; justify-content:flex-start }
       .brands .bcard::after { display:none }

   scoped to .brands on the assumption that only the Our Brands page loads
   that stylesheet. The homepage section is `brands brands--static`, so it
   matches too — and the editor canvas loads EVERY registered widget's CSS.
   Result: in the builder the homepage cards flipped to a white ground with
   the copy at the top and no scrim, while the front end (which loads only
   styles.css) looked right. A long-standing collision that stayed invisible
   until the lock-up moved and made the broken stacking obvious.

   .brands--static is the homepage's own modifier, so restating its three
   values at (0,3,0) settles it without touching either copied stylesheet.
   On the front end this changes nothing — the values ARE styles.css's. */
.elementor .brands--static .bcard {
  background: var(--tint);
  justify-content: flex-end;
}
/* The white wash ::after is no longer restated: since 2026-09 the homepage
   card has a .bcard__media band and styles.css only paints the wash on cards
   WITHOUT one (:not(:has(.bcard__media))), so there is nothing to restore. */

/* --- Export market chips vs the article tag chips -----------------------
   export.css and news-article.css both declare a bare .chip with different
   looks: a blue pill for the market list, an outlined tag for the article.
   A page only ever loads one of them, but Elementor's editor canvas loads
   every registered stylesheet, so the Export page's chips took whichever
   came last. Restated under .roots__markets at (0,3,0) with export.css's own
   values, so they read the same in the builder as on the page. */
.elementor .roots__markets .chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 38px;
  padding: 0 18px;
  line-height: 1;
  font-family: "DM Sans", sans-serif;
  font-weight: 600;
  font-size: 14px;
  color: var(--cci-blue);
  background: var(--cci-blue-50);
  border: 0;
  border-radius: 100px;
}

/* ============================================================
   MOBILE REPAIRS
   ------------------------------------------------------------
   Two things the static design never had to handle, kept here rather
   than edited into the copied stylesheets so a re-sync can't wipe them.
   ============================================================ */

/* --- Heritage timeline: the dotted rail -------------------------------
   At <=720px our-heritage.css turns .htl__years into a horizontal
   scroller (overflow-x:auto). .htl__track is a <span> INSIDE it, at
   position:absolute; left:0; right:0 — so two things go wrong at once:
   left/right resolve against the VISIBLE width rather than the scrolled
   content, and an absolutely positioned descendant of a scroll container
   travels with the content. The result is a short dotted line that
   drifts as you swipe the years.

   Drawing the rail as the scroller's own background with
   background-attachment:local fixes both: `local` measures the
   background positioning area against the scrollable content, so
   `100%` is the FULL year strip, and it stays locked under the dots.
   `bottom 7px` reproduces .htl__track's own offset exactly, so the
   line lands where the design always put it. */
@media (max-width: 720px) {
  .elementor .htl__track {
    display: none !important;
  }
  .elementor .htl__years {
    background-image: repeating-linear-gradient(
      to right,
      rgba(255, 255, 255, 0.35) 0 2px,
      transparent 2px 4px
    ) !important;
    background-repeat: no-repeat !important;
    background-size: 100% 2px !important;
    background-position: left bottom 7px !important;
    background-attachment: local !important;
  }
}

/* --- Language pills: kill the theme's button leading --------------------
   hello-elementor's reset gives every button `line-height:1.5`, which the
   design's .lang__btn never overrides — so EN / TH / MY sit wrong inside
   their 34px circle. This lived as a hand edit inside nav-variants.css,
   which is a GENERATED file: every `php tools/build-nav-variants.php`
   wiped it. It also only reached two of the three .lang__btn rules there,
   so cream-toned headers never got it. One rule here covers every tone,
   both the header and the drawer, and survives regeneration. */
.elementor .lang__btn {
  line-height: normal !important;
}

/* --- Cho's Kitchen heritage cards on small phones ----------------------
   .hcard keeps one padding at every width in chos-kitchen.css, but at two
   columns inside a 480px viewport the card is ~150px wide and 18px of
   padding eats most of it. Tightened here rather than in the copied
   stylesheet so a design re-sync can't drop it. Applies to both pages
   that render the section: /chos-kitchen/ and /taste-of-myanmar/. */
@media (max-width: 480px) {
  .elementor .hcard {
    padding: 12px 12px 14px !important;
    border-radius: 8px !important;
  }
}

/* --- Drawer: parent pages must stay reachable -------------------------
   Walker_Drawer now puts the top-level URL back inside <summary> (the
   static drawer had none, because there every child was an #anchor on
   the parent's own page). `.drawer__nav details a` styles the CHILD
   links as full-width grey blocks and would swallow that new link,
   turning the whole summary row into a link and killing the toggle.

   Kept inline and unstyled so the row looks exactly as designed: tapping
   the label navigates, tapping anywhere else — including the +/- marker
   — still opens the panel. The extra `details > summary >` beats
   nav-variants.css's toned copy of the same rule at (0,3,2). */
.elementor .drawer .drawer__nav details > summary > a {
  display: inline !important;
  padding: 0 !important;
  color: inherit !important;
  font: inherit !important;
  text-decoration: none !important;
}
