/* ==========================================================================
   OnlySatvik v2.0.0 — order-first redesign layer.
   Approved design samples (2026-10-25): same engine, new visual layer.
   Brand: greens #39b54a / #3ab54a, gray #999999, orange #ff914d,
   Poppins headings + Inter body (Arial stacks as graceful fallback). Loads last; the premium header
   stylesheet keeps the header (it already matches the samples).
   ========================================================================== */

:root{
  --osv2-brand:#39b54a;
  --osv2-brand-2:#3ab54a;
  --osv2-brand-dark:#2c9440;
  --osv2-brand-deep:#2c9440;
  --osv2-brand-soft:#e9f9ec;
  --osv2-accent:#ff914d;
  --osv2-ink:#1f2a1f;
  --osv2-muted:#5c6b5c;
  --osv2-faint:#999999;
  --osv2-line:#e4e7dd;
  --osv2-red:#b3541e;
  --osv2-head:'Poppins','Arial Narrow','Helvetica Neue',Arial,sans-serif;
  --osv2-body:'Inter',Arial,Helvetica,sans-serif;
  --osv2-shadow:0 10px 30px rgba(31,42,31,.10);
  --osv2-shadow-lg:0 24px 60px rgba(31,42,31,.16);
}

/* ---------- Header bits (icons swapped to inline SVG in header.php) ---- */
.os-utility-icon svg{
  width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;vertical-align:-3px;
}
.os-utility-icon{ display:inline-flex;align-items:center; }

/* ---------- Buttons (redesign scope) ----------------------------------- */
.osv2-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:52px;padding:14px 26px;border-radius:999px;border:2px solid transparent;
  font-family:var(--osv2-head);font-weight:700;font-size:18px;line-height:1;
  text-decoration:none;cursor:pointer;transition:transform .15s,box-shadow .15s,background .15s;
}
.osv2-btn:hover{ transform:translateY(-1px); }
.osv2-btn--green{ background:var(--osv2-brand);color:#fff;box-shadow:0 10px 24px rgba(57,181,74,.35); }
.osv2-btn--green:hover{ background:var(--osv2-brand-dark);color:#fff; }
.osv2-btn--outline{ background:#fff;border-color:var(--osv2-brand);color:var(--osv2-brand-deep); }
.osv2-btn--outline:hover{ background:var(--osv2-brand-soft);color:var(--osv2-brand-deep); }
.osv2-btn--white{ background:#fff;color:var(--osv2-brand-deep); }
.osv2-btn--sm{ min-height:46px;padding:11px 20px;font-size:16px; }

/* ---------- Dish cards (shared: homepage + menu) ------------------------ */
.osd-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:22px;
}
.osd-card{
  background:#fff;border:1px solid var(--osv2-line);border-radius:20px;overflow:hidden;
  display:flex;flex-direction:column;box-shadow:0 2px 10px rgba(31,42,31,.04);
  font-family:var(--osv2-body);
}
.osd-media{ position:relative;display:block;aspect-ratio:4/3;background:#f1efe8; }
.osd-media img{ width:100%;height:100%;object-fit:cover;display:block; }
.osd-media-ph{ position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:44px; }
.osd-badge{
  position:absolute;font-family:var(--osv2-head);font-weight:700;font-size:12px;
  letter-spacing:.6px;padding:5px 10px;border-radius:999px;
}
.osd-badge--tray{ top:10px;right:10px;background:var(--osv2-accent);color:#fff; }
.osd-badge--sale{ top:10px;left:10px;background:var(--osv2-accent);color:#fff; }
.osd-badge--service{ top:10px;left:10px;background:var(--osv2-accent);color:#fff; }
.osd-service-btn{
  background:var(--osv2-brand);color:#fff;border-radius:999px;min-height:44px;
  padding:11px 20px;font-family:var(--osv2-head);font-weight:700;font-size:16.5px;
  display:inline-flex;align-items:center;text-decoration:none;
  box-shadow:0 6px 16px rgba(57,181,74,.32);
}
.osd-service-btn:hover{ background:var(--osv2-brand-dark);color:#fff; }
.osd-badge--veg{ top:10px;left:10px;background:rgba(255,255,255,.92);padding:4px 6px;font-size:12px; }
.osd-badge--sale ~ .osd-badge--veg{ top:44px; }
.osd-body{ padding:16px 17px 18px;display:flex;flex-direction:column;gap:7px;flex:1; }
.osd-name{ font-family:var(--osv2-head);font-size:21px;line-height:1.15;margin:0; }
.osd-name a{ color:var(--osv2-ink);text-decoration:none; }
.osd-desc{ font-size:13.5px;color:var(--osv2-muted);line-height:1.45;margin:0; }
.osd-meta{ font-size:12.5px;font-weight:700;color:var(--osv2-brand-deep);margin:0; }
.osd-attrs{ display:grid;grid-template-columns:1fr 1fr;gap:9px 10px;margin-top:2px; }
.osd-attr{ display:grid;gap:6px;min-width:0; }
.osd-attr--wide{ grid-column:1 / -1; }
.osd-attr-label{ font-size:12px;font-weight:700;color:var(--osv2-muted);text-transform:uppercase;letter-spacing:.5px; }
.osd-chips{ display:flex;flex-wrap:wrap;gap:7px; }
.osd-chip{
  border:1.5px solid var(--osv2-line);background:#fff;border-radius:999px;padding:8px 14px;
  font-size:13.5px;font-weight:700;color:var(--osv2-ink);cursor:pointer;min-height:38px;
  font-family:var(--osv2-body);
}
.osd-chip.on{ border-color:var(--osv2-brand);background:var(--osv2-brand-soft);color:var(--osv2-brand-deep); }
.osd-attr-select{
  width:100%;border:1.5px solid var(--osv2-line);border-radius:10px;padding:10px 12px;
  font-size:14.5px;background:#fff;min-height:44px;font-family:var(--osv2-body);
}
.osd-attr-select--missing{ border-color:var(--osv2-red,#b3541e) !important;box-shadow:0 0 0 3px rgba(179,84,30,.16); }
.osd-foot{ margin-top:auto;padding-top:9px;display:flex;align-items:center;gap:10px;flex-wrap:wrap; }
.osd-price{ font-family:var(--osv2-head);font-weight:700;font-size:20px;color:var(--osv2-ink); }
.osd-price del{ color:var(--osv2-faint);font-size:15px; }
.osd-price ins{ text-decoration:none; }
.osd-actions{ margin-left:auto;display:inline-flex;align-items:center;gap:9px; }
.osd-stepper{ display:inline-flex;align-items:center;border:1.5px solid var(--osv2-line);border-radius:999px;overflow:hidden; }
.osd-step{
  width:36px;height:42px;border:0;background:#fff;font-size:19px;cursor:pointer;color:var(--osv2-ink);
  display:flex;align-items:center;justify-content:center;
}
.osd-qty{ width:34px;border:0;text-align:center;font-size:15.5px;font-weight:700;font-family:var(--osv2-body); }
.osd-add{
  background:var(--osv2-brand);color:#fff;border:0;border-radius:999px;min-height:44px;
  padding:11px 20px;font-family:var(--osv2-head);font-weight:700;font-size:16.5px;cursor:pointer;
  box-shadow:0 6px 16px rgba(57,181,74,.32);
}
.osd-add:hover{ background:var(--osv2-brand-dark); }
.osd-add:disabled{ opacity:.6;cursor:wait; }
.osd-add--needs{ animation:osd-shake .3s; }
@keyframes osd-shake{ 25%{transform:translateX(-3px);} 75%{transform:translateX(3px);} }
.osd-soldout{ margin-left:auto;font-weight:700;color:var(--osv2-faint);font-size:14.5px; }
.osd-min{ font-size:12px;color:var(--osv2-faint);margin:0; }
.osd-also{
  font-size:13px;font-weight:700;color:var(--osv2-brand-deep);text-decoration:none;
  background:var(--osv2-brand-soft);border-radius:999px;padding:6px 12px;align-self:flex-start;
}
.osd-also:hover{ text-decoration:underline; }
.osd-msg{ font-size:13px;color:var(--osv2-red);margin:0; }
.osd-msg:empty{ display:none; }

/* ---------- Homepage ---------------------------------------------------- */
.osv2-home{ font-family:var(--osv2-body);color:var(--osv2-ink); }
.osv2-wrap{ max-width:1240px;margin:0 auto;padding:0 24px; }
.osv2-hero{ background:linear-gradient(180deg,var(--osv2-brand-soft),#fff);padding:30px 0 48px; }
.osv2-hero-grid{ display:grid;grid-template-columns:1.05fr 1fr;gap:48px;align-items:start; }
.osv2-stars-badge{
  display:inline-flex;gap:8px;align-items:center;background:#fff;border:1px solid var(--osv2-line);
  border-radius:999px;padding:8px 16px;font-size:13.5px;font-weight:700;box-shadow:var(--osv2-shadow);
}
.osv2-stars-badge .stars{ color:var(--osv2-accent);letter-spacing:2px; }
.osv2-hero h1{
  font-family:var(--osv2-head);font-size:clamp(42px,5.4vw,64px);line-height:1.04;
  margin:20px 0 16px;font-weight:700;letter-spacing:.2px;
}
.osv2-hero h1 .accent{ color:var(--osv2-brand); }
.osv2-hero-sub{ font-size:18px;color:var(--osv2-muted);line-height:1.55;max-width:34em;margin:0 0 26px; }
.osv2-hero-ctas{ display:flex;gap:13px;flex-wrap:wrap; }
.osv2-hero-photo{ border-radius:26px;overflow:hidden;box-shadow:var(--osv2-shadow-lg); }
.osv2-hero-photo img{ width:100%;height:100%;object-fit:cover;display:block;aspect-ratio:4/3; }
.osv2-facts{ display:flex;flex-wrap:wrap;gap:9px 22px;list-style:none;margin:26px 0 0;padding:0;font-size:14.5px;color:var(--osv2-muted); }
.osv2-hero-note{ font-size:12.5px;color:var(--osv2-muted);margin:12px 0 0; }
.os-menu-note{ font-size:12.5px;color:var(--osv2-muted);text-align:center;margin:26px 0 0; }
.osv2-facts li::before{ content:"✓";color:var(--osv2-brand);font-weight:700;margin-right:7px; }
.osv2-section{ padding:58px 0 8px; }
.osv2-eyebrow{
  text-align:center;font-family:var(--osv2-head);font-weight:700;letter-spacing:2.5px;
  font-size:13px;color:var(--osv2-brand);text-transform:uppercase;margin:0 0 8px;
}
.osv2-h2{ text-align:center;font-family:var(--osv2-head);font-size:clamp(30px,3.6vw,42px);margin:0 0 10px;font-weight:700; }
.osv2-sub{ text-align:center;color:var(--osv2-muted);font-size:16.5px;max-width:44em;margin:0 auto 30px;line-height:1.5; }
.osv2-paths{ display:grid;grid-template-columns:1fr 1fr;gap:22px; }
.osv2-path{
  position:relative;border:2px solid var(--osv2-line);border-radius:22px;padding:28px;background:#fff;
}
.osv2-path--daily{ border-color:var(--osv2-brand);background:var(--osv2-brand-soft); }
.osv2-path .tag{
  position:absolute;top:-13px;left:22px;background:var(--osv2-brand);color:#fff;
  font-family:var(--osv2-head);font-weight:700;font-size:12.5px;letter-spacing:1px;
  padding:6px 13px;border-radius:999px;text-transform:uppercase;
}
.osv2-path--tray .tag{ background:var(--osv2-accent); }
.osv2-path h3{ font-family:var(--osv2-head);font-size:27px;margin:4px 0 6px; }
.osv2-path p{ color:var(--osv2-muted);font-size:15px;line-height:1.5;margin:0 0 12px; }
.osv2-path ul{ list-style:none;margin:0 0 20px;padding:0;display:grid;gap:7px;font-size:15px; }
.osv2-path ul li::before{ content:"✓";color:var(--osv2-brand);font-weight:700;margin-right:8px; }
.osv2-steps{ display:grid;grid-template-columns:repeat(3,1fr);gap:20px; }
.osv2-step{ background:var(--osv2-brand-soft);border-radius:20px;padding:26px; }
.osv2-step .num{ font-family:var(--osv2-head);font-size:44px;color:#8fc497;font-weight:700;line-height:1; }
.osv2-step h3{ font-family:var(--osv2-head);font-size:22px;margin:8px 0 6px; }
.osv2-step p{ color:var(--osv2-muted);font-size:14.5px;line-height:1.55;margin:0; }
.osv2-trust{ display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:34px; }
.osv2-trust-item{
  border:1px solid var(--osv2-line);border-radius:16px;padding:18px;display:flex;gap:13px;align-items:center;background:#fff;
}
.osv2-trust-item .ic{
  flex:0 0 auto;width:44px;height:44px;border-radius:50%;background:var(--osv2-brand-soft);
  display:flex;align-items:center;justify-content:center;font-size:19px;
}
.osv2-trust-item b{ display:block;font-size:15px; }
.osv2-trust-item span{ font-size:13px;color:var(--osv2-muted); }
.osv2-faq{ max-width:820px;margin:0 auto;display:grid;gap:12px; }
.osv2-faq details{ border:1px solid var(--osv2-line);border-radius:16px;padding:18px 22px;background:#fff; }
.osv2-faq summary{ font-family:var(--osv2-head);font-weight:600;font-size:16px;cursor:pointer;list-style:none;position:relative;padding-right:36px;letter-spacing:0;line-height:1.3; }
.osv2-faq summary::-webkit-details-marker{ display:none; }
.osv2-faq summary::after{ content:'+';position:absolute;right:2px;top:50%;transform:translateY(-50%);font-size:24px;font-weight:700;color:var(--osv2-brand);line-height:1; }
.osv2-faq details[open ] summary::after{ content:'\2013'; }
.osv2-faq details p{ color:var(--osv2-muted);line-height:1.55;margin:10px 0 2px;font-size:15px; }
.osv2-faq .os-faq-list{ color:var(--osv2-muted);line-height:1.55;font-size:15px;margin:8px 0 4px;padding-left:20px; }
.osv2-faq .os-faq-list li{ margin:4px 0; }
.osv2-faq .os-faq-list li::marker{ color:var(--osv2-brand-dark);font-weight:700; }
.os-faq-block{ max-width:820px;margin:0 auto 36px;scroll-margin-top:calc(var(--os-faq-chip-top, 96px) + 64px); }
.os-faq-block:last-child{ margin-bottom:0; }
/* FAQ floating section chips (v2.9.90, owner-approved sample): a slim
   pill bar that sticks under the header (--os-faq-chip-top is
   calibrated by os-faq.js against the real header frame, the menu
   bar pattern); the section in view highlights via scroll-spy. */
.os-faq-chips{
  position:sticky;top:var(--os-faq-chip-top, 96px);z-index:60;
  display:flex;gap:8px;overflow-x:auto;max-width:820px;margin:0 auto 22px;
  background:rgba(255,255,255,.95);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  border:1px solid var(--osv2-line);border-radius:999px;padding:6px 8px;
  box-shadow:0 6px 18px rgba(31,42,31,.08);scrollbar-width:none;
}
.os-faq-chips::-webkit-scrollbar{ display:none; }
.os-faq-chips a{
  flex:0 0 auto;font-family:var(--osv2-head);font-weight:600;font-size:13.5px;line-height:1;
  color:var(--osv2-ink);text-decoration:none;padding:9px 14px;border-radius:999px;
  border:1px solid var(--osv2-line);background:#fff;white-space:nowrap;
}
.os-faq-chips a.on{ background:var(--osv2-brand);border-color:var(--osv2-brand);color:#fff; }
/* Fee help on the order-confirmation totals stack (v2.9.90): the
   wrapper anchors the popover; right-aligned rows open it leftward
   so it never runs off the screen edge. */
.satvik-totals-stack .os-fee-help{ position:relative;display:inline-block;margin-left:2px; }
.satvik-totals-stack .os-fee-help-pop{ left:auto;right:0;text-align:left; }
h2.os-faq-section-title{ font-family:var(--osv2-head);font-weight:700;font-size:13px;text-transform:uppercase;letter-spacing:2px !important;color:var(--osv2-brand-dark);display:flex;align-items:center;gap:14px;margin:0 0 16px;line-height:1.4; }
h2.os-faq-section-title::after{ content:'';flex:1;height:1px;background:#e3e7dd; }
.osv2-cta-band{
  margin:58px 0 64px;background:var(--osv2-brand-dark);border-radius:26px;color:#fff;
  padding:42px;text-align:center;
}
.osv2-cta-band h2{ font-family:var(--osv2-head);font-size:clamp(28px,3.4vw,40px);margin:0 0 10px; }
.osv2-cta-band p{ color:#dff3e1;font-size:16.5px;margin:0 auto 24px;max-width:36em;line-height:1.5; }

/* ---------- Menu page ---------------------------------------------------- */
.os-menu-page{ font-family:var(--osv2-body);color:var(--osv2-ink);max-width:1240px;margin:0 auto;padding:0 24px 64px; }
.os-menu-hero{ text-align:center;padding:40px 0 8px;background:none; }
.os-menu-hero h1{ font-family:var(--osv2-head);font-size:clamp(34px,4.4vw,50px);margin:6px 0 10px; }
.os-menu-page .os-eyebrow{
  font-family:var(--osv2-head);font-weight:700;letter-spacing:2.5px;font-size:13px;
  color:var(--osv2-brand);text-transform:uppercase;margin:0;
}
.os-menu-page .os-hero-sub{ color:var(--osv2-muted);font-size:16.5px;max-width:42em;margin:0 auto;line-height:1.5; }
.os-menu-page .os-hero-facts{
  display:flex;flex-wrap:wrap;gap:9px 22px;justify-content:center;list-style:none;
  margin:20px 0 0;padding:0;font-size:14.5px;color:var(--osv2-muted);
}
.os-menu-page .os-hero-facts li::before{ content:"✓";color:var(--osv2-brand);font-weight:700;margin-right:7px; }
.osv2-mode-switch{
  display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:860px;margin:30px auto 8px;
}
.osv2-mode{
  position:relative;border:2px solid var(--osv2-line);background:#fff;border-radius:18px;
  padding:18px 20px;text-align:left;cursor:pointer;font-family:var(--osv2-body);color:var(--osv2-ink);
}
.osv2-mode b{ display:block;font-family:var(--osv2-head);font-size:23px;margin-bottom:3px; }
.osv2-mode small{ font-size:13.5px;color:var(--osv2-muted); }
.osv2-mode.on{ border-color:var(--osv2-brand);background:var(--osv2-brand-soft);box-shadow:var(--osv2-shadow); }
.osv2-mode .tick{
  position:absolute;top:12px;right:14px;width:26px;height:26px;border-radius:50%;
  background:var(--osv2-brand);color:#fff;display:none;align-items:center;justify-content:center;font-size:14px;
}
.osv2-mode.on .tick{ display:flex; }
.osv2-mode-note{ text-align:center;color:var(--osv2-muted);font-size:14px;margin:6px 0 0; }
.os-menu-page .os-steps{ display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:26px 0 6px; }
.os-menu-page .os-step{
  display:flex;gap:14px;background:var(--osv2-brand-soft);border-radius:16px;padding:18px;align-items:flex-start;
}
.os-menu-page .os-step-num{
  flex:0 0 auto;width:34px;height:34px;border-radius:50%;background:var(--osv2-brand);color:#fff;
  display:flex;align-items:center;justify-content:center;font-family:var(--osv2-head);font-weight:700;font-size:17px;
}
.os-menu-page .os-step strong{ display:block;font-family:var(--osv2-head);font-size:18.5px; }
.os-menu-page .os-step span{ font-size:13.5px;color:var(--osv2-muted);line-height:1.45; }
.os-menu-page .os-menu-nav{
  position:sticky;top:96px;z-index:40;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);
  border:1px solid var(--osv2-line);border-radius:16px;padding:10px 12px;margin:22px 0 8px;
  display:flex;gap:10px;align-items:center;flex-wrap:wrap;
}
.osd-filter-chip,.os-tray-tab{
  border:1.5px solid var(--osv2-line);background:#fff;border-radius:999px;padding:9px 17px;
  font-size:14.5px;font-weight:700;cursor:pointer;color:var(--osv2-ink);min-height:42px;
  font-family:var(--osv2-body);display:inline-flex;align-items:center;gap:8px;
}
.osd-filter-chip.on,.os-tray-tab.active{ background:var(--osv2-brand);border-color:var(--osv2-brand);color:#fff; }
.os-tray-tab .os-tab-count{
  background:var(--osv2-brand-soft);color:var(--osv2-brand-deep);border-radius:999px;
  font-size:12px;padding:2px 8px;font-weight:700;
}
.os-tray-tab.active .os-tab-count{ background:rgba(255,255,255,.25);color:#fff; }
.os-menu-page .os-menu-search{ flex:1 1 auto; width:100%; }
.os-menu-page .os-menu-search input{
  border:1.5px solid var(--osv2-line);border-radius:999px;padding:11px 18px;font-size:15px;
  min-height:46px;width:100%;font-family:var(--osv2-body);
}
/* ---------- Menu toolbar (v2.9.55, Option B) ----------
 * The hero, steps strip and info bar are gone from the menu page.
 * The mode switch becomes a segmented control and shares one card
 * with the plan bar; every fact appears once, in the slim line
 * under the (still sticky) search bar. */
.os-menu-sr{ position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap; }
.os-menu-page{ padding-top:20px; }
.os-menu-toolbar{ background:#fff;border:1px solid var(--osv2-line);border-radius:20px;box-shadow:var(--osv2-shadow);padding:14px; }
.os-menu-toolbar .osv2-mode-switch{ display:flex;gap:4px;max-width:none;margin:0;background:#edf2ec;border-radius:999px;padding:4px; }
.os-menu-toolbar .osv2-mode{ flex:1 1 0;border:0;background:transparent;border-radius:999px;padding:10px 8px;text-align:center;box-shadow:none; }
.os-menu-toolbar .osv2-mode b{ font-size:19px;margin-bottom:1px; }
.os-menu-toolbar .osv2-mode small{ font-size:12.5px; }
.os-menu-toolbar .osv2-mode.on{ background:var(--osv2-brand);color:#fff;box-shadow:0 3px 10px rgba(44,148,64,.35); }
.os-menu-toolbar .osv2-mode.on small{ color:rgba(255,255,255,.88); }
.os-menu-toolbar .osv2-mode .tick{ display:none !important; }
.os-menu-toolbar .os-plan{ background:transparent;border:0;box-shadow:none;margin:10px 0 0;padding:0 2px;display:flex;align-items:center;justify-content:center;gap:6px 14px;flex-wrap:wrap; }
.os-menu-toolbar .os-plan-fields{ justify-content:center;align-items:center;flex-wrap:nowrap;gap:10px; }
.os-menu-toolbar .os-plan-field{ flex-direction:row;align-items:center;gap:8px; }
/* v2.9.61: the label rode 4px high — the sheet's generic label rule
   gives it margin-bottom:8px, and flex centering centers the MARGIN
   box, so the visible text sits half the margin above center (owner
   report, 2026-11-03; measured 4.0px at 390 + 1240). Zero the margin
   and give label, input and button one shared explicit height with
   centered content, so the three share a center line by construction
   in every browser. */
.os-menu-toolbar .os-plan-field label{ white-space:nowrap;margin:0;display:flex;align-items:center;height:40px; }
.os-menu-toolbar .os-plan-zipwrap{ align-items:center; }
.os-menu-toolbar .os-plan-zipwrap input{ height:40px;box-sizing:border-box; }
.os-menu-toolbar .os-plan-field input{ border-radius:999px;padding:10px 16px; }
.os-menu-toolbar .os-plan-check{ border-radius:999px;height:40px;box-sizing:border-box; }
.os-menu-toolbar .os-plan-msg, .os-menu-toolbar .os-zip-msg{ margin:0;text-align:left; }
.os-menu-toolbar .osv2-mode-note{ margin:10px 0 0;font-size:13px; }
.os-menu-toolbar + .os-menu-nav{ margin-top:14px; }
.os-menu-factsline{ display:flex;flex-wrap:wrap;gap:6px 9px;justify-content:center;align-items:center;text-align:center;color:var(--osv2-muted);font-size:13.5px;margin:12px 0 0; }
.os-menu-factsline .os-facts-sep{ color:var(--osv2-line); }
.os-menu-factsline a{ color:var(--osv2-brand-dark);font-weight:600;text-decoration:none; }
@media (max-width:640px){
  .os-menu-toolbar{ padding:10px;border-radius:16px; }
  .os-menu-toolbar .osv2-mode b{ font-size:16.5px; }
  .os-menu-toolbar .osv2-mode small{ font-size:11px;line-height:1.35; }
  .os-menu-toolbar .os-plan-field label{ font-size:11px; }
  .os-menu-toolbar .os-plan-zipwrap input{ width:96px; }
}
.os-menu-page .os-info-bar{
  display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:center;
  color:var(--osv2-muted);font-size:13.5px;padding:10px 0 2px;
}
.os-menu-page .os-info-icon{ width:16px;height:16px;fill:none;stroke:var(--osv2-brand);stroke-width:2;vertical-align:-3px;margin-right:5px; }
.os-menu-page .os-info-sep{ width:4px;height:4px;border-radius:50%;background:var(--osv2-line); }
.os-menu-page .os-menu-section{ padding-top:26px; }
.os-menu-page .os-menu-section[hidden]{ display:none; }
.os-menu-page .os-section-head{ text-align:center;margin-bottom:24px; }
.os-menu-page .os-section-head h2{ font-family:var(--osv2-head);font-size:clamp(28px,3.4vw,38px);margin:0 0 6px; }
.os-menu-page .os-section-head p{ color:var(--osv2-muted);margin:0;font-size:15.5px; }
.os-menu-page .os-tray-nav{ display:flex;gap:9px;flex-wrap:wrap;justify-content:center;margin-bottom:24px; }
.os-menu-page .os-tray-section{ display:none; }
.os-menu-page .os-tray-section.active{ display:block; }
.os-menu-page .os-no-results{ text-align:center;color:var(--osv2-muted);padding:22px 0; }
.os-menu-page .os-nores-switch{ background:none;border:none;padding:0;font:inherit;color:var(--os-brand-dark,#2c9440);font-weight:700;text-decoration:underline;cursor:pointer; }
.os-menu-page .os-help-strip{
  margin-top:44px;background:var(--osv2-brand-dark);border-radius:22px;color:#fff;
  padding:32px;display:flex;gap:20px;align-items:center;flex-wrap:wrap;
}
.os-menu-page .os-help-strip h2{ font-family:var(--osv2-head);margin:0 0 6px;font-size:27px;color:#fff; }
.os-menu-page .os-help-strip p{ margin:0;color:#dff3e1;font-size:15.5px; }
.os-menu-page .os-help-strip .os-btn{ margin-left:auto; }
.os-menu-page .os-btn--primary{
  background:#fff;color:var(--osv2-brand-deep);border-radius:999px;padding:14px 26px;
  font-family:var(--osv2-head);font-weight:700;font-size:17px;text-decoration:none;min-height:52px;
  display:inline-flex;align-items:center;
}

/* ---------- Cart drawer + order bar: token alignment -------------------- */
#os-cart-drawer{ font-family:var(--osv2-body); }
#os-cart-drawer h3{ font-family:var(--osv2-head); }
#os-cart-drawer .os-cart-checkout{ background:var(--osv2-brand);border-radius:999px; }
#os-order-bar{ font-family:var(--osv2-body); }
#os-order-bar .os-bar-btn{ background:var(--osv2-brand);border-radius:999px;font-family:var(--osv2-head); }
#os-order-bar .os-bar-progress{ background:var(--osv2-brand); }

/* ---------- Checkout (WooCommerce Blocks + classic) --------------------- */
.wc-block-components-checkout-step__title,
.woocommerce-checkout h3{ font-family:var(--osv2-head); }
.wc-block-components-text-input input,
.wc-block-components-select select,
.wc-block-components-textarea-input textarea,
.woocommerce-checkout input.input-text,
.woocommerce-checkout select,
.woocommerce-checkout textarea{
  border-radius:12px !important;
}
.wc-block-components-checkout-place-order-button,
.woocommerce-checkout #place_order{
  background:var(--osv2-brand) !important;border-radius:999px !important;
  font-family:var(--osv2-head);font-weight:700;
}
.os-gate-locked{ opacity:.45 !important;filter:saturate(.4); }
.os-gate{
  display:grid;gap:7px;margin:14px 0 4px;font-family:var(--osv2-body);
}
.os-gate-item{ display:flex;gap:9px;align-items:center;font-size:14.5px;font-weight:700;color:var(--osv2-red);margin:0; }
.os-gate-item .os-gate-mark{
  flex:0 0 auto;width:23px;height:23px;border-radius:50%;background:rgba(255,145,77,.16);color:var(--osv2-red);
  display:inline-flex;align-items:center;justify-content:center;font-size:13px;
}
.os-gate-item.ok{ color:var(--osv2-brand-deep); }
.os-gate-item.ok .os-gate-mark{ background:var(--osv2-brand-soft);color:var(--osv2-brand-deep); }
.os-pickup-note{
  background:rgba(255,145,77,.10);border:1px dashed rgba(255,145,77,.55);border-radius:12px;padding:11px 14px;
  font-size:13.5px;color:var(--osv2-ink);margin:10px 0;font-family:var(--osv2-body);
}
.os-pickup-thanks{
  background:var(--osv2-brand-soft);border:1px solid var(--osv2-brand);border-radius:14px;
  padding:16px 20px;margin:18px 0;font-family:var(--osv2-body);
}

/* ---------- Footer ------------------------------------------------------- */
footer.footer .sb-footer-frame{ background:var(--osv2-ink); }
footer.footer{ color:#cfe6d2; }

/* ---------- Responsive --------------------------------------------------- */
@media (max-width:1100px){
  .osd-grid{ grid-template-columns:repeat(3,1fr); }
  .osv2-trust{ grid-template-columns:repeat(2,1fr); }
}
@media (max-width:900px){
  .osv2-hero-grid{ grid-template-columns:1fr; }
  .osv2-hero-photo{ order:-1; }
  .osv2-paths{ grid-template-columns:1fr; }
  .osv2-steps,.os-menu-page .os-steps{ grid-template-columns:1fr; }
  .osd-grid{ grid-template-columns:repeat(2,1fr); }
  .os-menu-page .os-menu-nav{ top:84px; }
  .os-menu-page .os-menu-search{ margin-left:0;width:100%; }
  .os-menu-page .os-menu-search input{ width:100%; }
}
@media (max-width:560px){
  .osd-grid{ grid-template-columns:1fr; }
  .osv2-mode-switch{ grid-template-columns:1fr 1fr;gap:9px; }
  .osv2-mode{ padding:14px; }
  .osv2-mode b{ font-size:19px; }
  .osv2-mode small{ font-size:12px; }
  .osv2-trust{ grid-template-columns:1fr; }
  .osv2-cta-band{ padding:30px 22px; }
  .osv2-wrap{ padding:0 16px; }
  .os-menu-page{ padding:0 16px 56px; }
}

/* ==========================================================================
   v2.1 — order planning layer (inc/os-plan.php, inc/os-product.php):
   plan bar, favorites, card availability, mixed-cart split, product
   page promise + buy bar, checkout slot picker, set-aside, toasts.
   ========================================================================== */

/* ---------- Plan bar (menu) ---------- */
.os-plan{ background:#fff; border:1px solid var(--osv2-line); border-radius:16px; padding:14px 16px; margin:14px 0 4px; box-shadow:var(--osv2-shadow); }
.os-plan-fields{ display:flex; flex-wrap:wrap; gap:14px; align-items:flex-end; }
.os-plan-field{ display:flex; flex-direction:column; gap:6px; }
.os-plan-field label{ font-family:var(--osv2-head); font-weight:700; font-size:13px; letter-spacing:.06em; text-transform:uppercase; color:var(--osv2-muted); }
.os-plan-field input{ border:1.5px solid var(--osv2-line); border-radius:10px; padding:10px 12px; font:15px var(--osv2-body); color:var(--osv2-ink); background:#fff; }
.os-plan-field input:focus{ outline:2px solid var(--osv2-brand); outline-offset:1px; border-color:var(--osv2-brand); }
.os-plan-zipwrap{ display:flex; gap:8px; }
.os-plan-zipwrap input{ width:110px; }
.os-plan-check, .os-zip-btn{ background:var(--osv2-brand); color:#fff; border:0; border-radius:10px; padding:10px 16px; font:700 14px var(--osv2-body); cursor:pointer; }
.os-plan-check:hover, .os-zip-btn:hover{ background:var(--osv2-brand-dark); }
.os-plan-check:disabled, .os-zip-btn:disabled{ opacity:.6; cursor:wait; }
.os-plan-clear{ background:none; border:0; color:var(--osv2-muted); font:13px var(--osv2-body); text-decoration:underline; cursor:pointer; padding:10px 4px; }
.os-plan-msg{ margin:10px 0 0; font:14px var(--osv2-body); color:var(--osv2-ink); }
.os-plan-msg:empty{ display:none; }
.os-zip-msg{ margin:8px 0 0; font:14px var(--osv2-body); }
.os-zip-msg.ok{ color:var(--osv2-brand-dark); font-weight:700; }
.os-zip-msg.err, .os-plan-msg.err{ color:var(--osv2-red); }

/* ---------- Cards: favorites + plan availability ---------- */
.osd-card{ position:relative; }
.osd-fav{ position:absolute; top:10px; right:10px; z-index:3; width:38px; height:38px; border-radius:50%; border:1px solid var(--osv2-line); background:rgba(255,255,255,.94); color:var(--osv2-brand-dark); font-size:19px; line-height:1; cursor:pointer; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(31,42,31,.12); }
.osd-fav.on{ color:var(--osv2-accent); border-color:var(--osv2-accent); }
.osd-media:has(.osd-badge--tray) + .osd-fav{ top:48px; }
.osd-card.os-too-late{ opacity:.55; }
.osd-card.os-too-late .osd-add{ pointer-events:none; }
.osd-plan-note{ margin:8px 0 0; font:12.5px var(--osv2-body); color:var(--osv2-red); font-weight:700; }
.os-fav-filtering .osd-card:not(.is-fav){ display:none !important; }
.os-fav-chip.on{ background:var(--osv2-brand); color:#fff; border-color:var(--osv2-brand); }
/* v2.9.54: hearts are inline SVG, not font glyphs — the ♡/♥
 * characters fell back to mismatched fonts on some phones and
 * rendered stretched. One path in a fixed viewBox; the outline /
 * filled state comes from the button's .on class via currentColor. */
.osd-fav svg{ width:19px; height:19px; display:block; }
.osd-fav svg path, .os-fav-glyph svg path{ fill:none; stroke:currentColor; stroke-width:1.8; }
.osd-fav.on svg path, .os-fav-save.on .os-fav-glyph svg path{ fill:currentColor; }
.os-fav-save .os-fav-glyph{ display:inline-flex; vertical-align:-3px; }
.os-fav-glyph svg{ width:17px; height:17px; display:block; }
.os-fav-chip svg{ width:15px; height:15px; display:block; }
.os-fav-chip svg path{ fill:currentColor; stroke:none; }

/* ---------- Set-aside bar / pill + toast ---------- */
.os-setaside{ display:flex; flex-wrap:wrap; gap:10px; align-items:center; background:var(--osv2-brand-soft); border:1px dashed var(--osv2-brand); border-radius:12px; padding:10px 14px; margin:12px 0; font:14px var(--osv2-body); color:var(--osv2-ink); }
.os-setaside--pill{ position:fixed; left:50%; transform:translateX(-50%); bottom:86px; z-index:1200; box-shadow:var(--osv2-shadow-lg); max-width:min(92vw,520px); }
.os-setaside-restore{ background:var(--osv2-brand); color:#fff; border:0; border-radius:8px; padding:8px 14px; font:700 13.5px var(--osv2-body); cursor:pointer; }
.os-setaside-dismiss{ background:none; border:0; color:var(--osv2-muted); font:13.5px var(--osv2-body); text-decoration:underline; cursor:pointer; }
.os-toast{ position:fixed; left:50%; transform:translate(-50%,20px); bottom:24px; z-index:2000; background:var(--osv2-ink); color:#fff; padding:12px 18px; border-radius:12px; font:14.5px var(--osv2-body); opacity:0; pointer-events:none; transition:opacity .25s, transform .25s; max-width:min(92vw,560px); text-align:center; box-shadow:var(--osv2-shadow-lg); }
.os-toast.show{ opacity:1; transform:translate(-50%,0); }

/* ---------- Cart drawer: earliest + mixed note ---------- */
.os-cart-earliest{ margin:6px 0 0; font:13.5px var(--osv2-body); color:var(--osv2-brand-dark); font-weight:700; }
.os-mixed-note{ background:rgba(255,145,77,.10); border:1px solid rgba(255,145,77,.45); border-radius:12px; padding:10px 12px; margin:10px 0; }
.os-mixed-note p{ margin:0 0 8px; font:13.5px/1.45 var(--osv2-body); color:var(--osv2-ink); }
.os-mixed-actions{ display:flex; gap:8px; flex-wrap:wrap; }
.os-split-btn{ flex:1; min-width:130px; background:#fff; border:1.5px solid var(--osv2-accent); color:var(--osv2-red); border-radius:9px; padding:9px 10px; font:700 13.5px var(--osv2-body); cursor:pointer; }
.os-split-btn:hover{ background:var(--osv2-accent); color:#fff; }
.os-split-btn:disabled{ opacity:.6; cursor:wait; }

/* ---------- Product page ---------- */
.os-prod-promise{ margin:14px 0 4px; }
.os-prod-earliest{ display:flex; align-items:center; gap:8px; margin:0 0 6px; font:700 15px var(--osv2-body); color:var(--osv2-brand-dark); }
.os-prod-earliest svg{ width:18px; height:18px; fill:none; stroke:var(--osv2-brand); stroke-width:2; flex:none; }
.os-prod-badges{ display:flex; flex-wrap:wrap; gap:6px; list-style:none; margin:10px 0; padding:0; }
.os-prod-badges li{ background:var(--osv2-brand-soft); color:var(--osv2-brand-deep); border-radius:999px; padding:5px 11px; font:700 12.5px var(--osv2-body); }
.os-fav-save{ background:none; border:0; color:var(--osv2-muted); font:14px var(--osv2-body); cursor:pointer; padding:6px 0; }
.os-fav-save .os-fav-glyph{ font-size:17px; }
.os-fav-save.on{ color:var(--osv2-accent); }
.os-zipcheck{ margin:16px 0; padding:14px; background:var(--osv2-brand-soft); border:1px solid var(--osv2-line); border-radius:12px; }
.os-zipcheck label{ display:block; font:700 13px var(--osv2-head); letter-spacing:.05em; text-transform:uppercase; color:var(--osv2-muted); margin-bottom:8px; }
.os-zipcheck-row{ display:flex; gap:8px; }
.os-zipcheck-row input{ flex:1; max-width:150px; border:1.5px solid var(--osv2-line); border-radius:10px; padding:10px 12px; font:15px var(--osv2-body); }
.osv-chips{ display:flex; flex-wrap:wrap; gap:8px; margin:6px 0 4px; }
.osv-chip{ border:1.5px solid var(--osv2-line); background:#fff; border-radius:999px; padding:8px 14px; font:14px var(--osv2-body); color:var(--osv2-ink); cursor:pointer; }
.osv-chip:hover{ border-color:var(--osv2-brand); }
.osv-chip.on{ background:var(--osv2-brand); border-color:var(--osv2-brand); color:#fff; font-weight:700; }
.os-native-hidden{ display:none !important; }
.os-complete{ margin:34px 0 8px; }
.os-complete h2{ font-family:var(--osv2-head); font-size:26px; margin:0 0 14px; color:var(--osv2-ink); }
@media (min-width:992px){
  .single-product .product-single > .row{ align-items:flex-start !important; }
  .single-product .sb-product-rt{ position:sticky; top:110px; }
}

/* ---------- Checkout slot picker ---------- */
.os-slotpicker{ margin:6px 0 14px; }
.os-slotpicker-title{ font:700 14px var(--osv2-body); color:var(--osv2-ink); margin:10px 0 8px; }
.os-slot-dates{ display:flex; gap:8px; overflow-x:auto; padding-bottom:6px; }
.os-slot-date{ flex:none; width:74px; border:1.5px solid var(--osv2-line); background:#fff; border-radius:12px; padding:9px 4px; cursor:pointer; display:flex; flex-direction:column; gap:2px; align-items:center; }
.os-slot-date .dow{ font:700 11.5px var(--osv2-body); text-transform:uppercase; letter-spacing:.05em; color:var(--osv2-muted); }
.os-slot-date .dlab{ font:700 13.5px var(--osv2-body); color:var(--osv2-ink); }
.os-slot-date.on{ border-color:var(--osv2-brand); background:var(--osv2-brand-soft); }
/* Times are a dropdown since v2.2.29 (owner: the pill grid took
   too much space). One full-width select, same field language. */
.os-slot-time-select{ width:100%; min-height:50px; padding:12px 14px; border:1.5px solid var(--osv2-line); border-radius:12px; background:#fff; font:16px var(--osv2-body); color:var(--osv2-ink); }
.os-slot-time-select:focus{ border-color:var(--osv2-brand); outline:none; box-shadow:0 0 0 3px rgba(57,181,74,.16); }
.os-slotpicker-hint{ font:13px var(--osv2-body); color:var(--osv2-brand-dark); margin:8px 0 0; }
.os-slotpicker-hint:empty{ display:none; }
.os-slot-native{ display:none !important; }

/* ==========================================================================
   v2.1.1 — Curry photo swap + product-page mobile declutter.
   ========================================================================== */
.sb-product-lt .woocommerce-product-gallery img{ transition:opacity .18s ease; }
.os-zipcheck-toggle{ display:none; }

/* Scrollable chip rows (long option lists like Curry Type) */
.osv-chips--scroll{ flex-wrap:nowrap; overflow-x:auto; scroll-snap-type:x proximity; padding-bottom:6px; -webkit-overflow-scrolling:touch; }
.osv-chips--scroll .osv-chip{ flex:none; scroll-snap-align:start; }

@media (max-width:640px){
  /* Purity badges collapse to a single dotted line of text */
  .os-prod-badges{ display:block; margin:8px 0 2px; }
  .os-prod-badges li{ display:inline; background:none; padding:0; font-size:12px; color:var(--osv2-brand-deep); }
  .os-prod-badges li + li::before{ content:'· '; color:var(--osv2-faint); }
  .os-prod-promise{ margin:10px 0 0; }
  .os-prod-earliest{ font-size:14px; flex-wrap:wrap; }
  /* Shorter gallery so the options start higher; thumbs off on phones */
  .single-product .sb-product-lt .woocommerce-product-gallery__image img,
  .single-product .sb-product-lt .woocommerce-product-gallery img{ max-height:230px; object-fit:cover; width:100%; }
  .single-product .flex-control-thumbs{ display:none !important; }
  .single-product .product_title{ font-size:29px !important; line-height:1.15; }
  /* ZIP check collapses to one tap-line */
  .os-zipcheck{ padding:0; background:none; border:0; margin:12px 0; }
  .os-zipcheck-toggle{ display:flex; justify-content:space-between; align-items:center; width:100%; background:var(--osv2-brand-soft); border:1px solid var(--osv2-line); border-radius:12px; padding:13px 15px; font:700 14.5px var(--osv2-body); color:var(--osv2-brand-deep); cursor:pointer; }
  .os-zipcheck-body{ display:none; }
  .os-zipcheck.open .os-zipcheck-body{ display:block; background:var(--osv2-brand-soft); border:1px solid var(--osv2-line); border-top:0; border-radius:0 0 12px 12px; padding:12px 15px 14px; margin-top:-6px; }
  .os-zipcheck.open .os-zipcheck-toggle{ border-radius:12px 12px 0 0; }
  .os-zipcheck-body label{ margin-top:2px; }
}

/* ==========================================================================
   v2.1.2 — smart dropdown for the Curry Type select (product page).
   ========================================================================== */
.os-smartdd{ position:relative; margin:6px 0 4px; }
.os-smartdd-btn{ display:flex; align-items:center; gap:10px; width:100%; background:#fff; border:1.5px solid var(--osv2-line); border-radius:12px; padding:8px 12px; cursor:pointer; font:15px var(--osv2-body); color:var(--osv2-ink); text-align:left; }
.os-smartdd-btn:hover, .os-smartdd-btn[aria-expanded="true"]{ border-color:var(--osv2-brand); }
.os-smartdd-thumb{ width:38px; height:38px; border-radius:9px; object-fit:cover; flex:none; }
.os-smartdd-label{ flex:1; font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.os-smartdd-chev{ color:var(--osv2-muted); flex:none; }
.os-smartdd-panel{ position:absolute; left:0; right:0; top:calc(100% + 6px); z-index:60; background:#fff; border:1px solid var(--osv2-line); border-radius:14px; box-shadow:var(--osv2-shadow-lg); padding:10px; }
.os-smartdd-search{ width:100%; box-sizing:border-box; border:1.5px solid var(--osv2-line); border-radius:10px; padding:10px 12px; font:15px var(--osv2-body); margin:0 0 8px; }
.os-smartdd-search:focus{ outline:2px solid var(--osv2-brand); outline-offset:0; border-color:var(--osv2-brand); }
.os-smartdd-list{ max-height:290px; overflow:auto; display:flex; flex-direction:column; }
.os-smartdd-item{ display:flex; align-items:center; gap:10px; width:100%; background:none; border:0; border-radius:10px; padding:7px 8px; cursor:pointer; font:15px var(--osv2-body); color:var(--osv2-ink); text-align:left; }
.os-smartdd-item:hover{ background:var(--osv2-brand-soft); }
.os-smartdd-item img{ width:40px; height:40px; border-radius:9px; object-fit:cover; flex:none; }
.os-smartdd-item .nm{ flex:1; }
.os-smartdd-check{ color:var(--osv2-brand); font-weight:700; visibility:hidden; flex:none; }
.os-smartdd-item.on{ background:var(--osv2-brand-soft); }
.os-smartdd-item.on .os-smartdd-check{ visibility:visible; }

/* ==========================================================================
   v2.1.3 — brand compliance. Palette: ONLY the OnlySatvik brand colors
   (#39b54a / #3ab54a greens, #2c9440 dark green, #ff914d orange, #999999
   gray) plus their tints/shades — no other hues. Fonts: Poppins for
   headings, Inter for body (owner's pick 2026-10-31, close to the
   logo lettering), Arial stacks as fallback — nothing else (icon
   fonts exempt).
   ========================================================================== */
body, input, select, textarea, button{ font-family:var(--osv2-body); }
h1, h2, h3, h4, h5, h6{ font-family:var(--osv2-head); }

/* ==========================================================================
   v2.2.4 — customer account pages (login / register / My Account),
   styled to the design system. Forms keep WooCommerce's markup; this
   layer only sets surfaces, inputs, buttons and the account nav.
   ========================================================================== */
.os-acct-hp{ position:absolute !important; left:-9999px !important; top:auto; width:1px; height:1px; overflow:hidden; }
.os-acct-turnstile{ margin:6px 0 12px; }
.woocommerce-account .woocommerce form.login,
.woocommerce-account .woocommerce form.register{ border:1.5px solid var(--osv2-line); border-radius:16px; padding:24px; background:#fff; }
.woocommerce-account .woocommerce form .form-row{ margin:0 0 14px; padding:0; }
.woocommerce-account .woocommerce form label{ font:600 14px var(--osv2-body); color:var(--osv2-ink); margin-bottom:6px; }
.woocommerce-account .woocommerce form .input-text{ border:1.5px solid var(--osv2-line); border-radius:10px; padding:11px 12px; font:15px var(--osv2-body); width:100%; box-sizing:border-box; }
.woocommerce-account .woocommerce form .input-text:focus{ outline:2px solid var(--osv2-brand); outline-offset:0; border-color:var(--osv2-brand); }
.woocommerce-account .woocommerce form .woocommerce-button,
.woocommerce-account .woocommerce .woocommerce-MyAccount-content .button{ background:var(--osv2-brand); color:#fff; border-radius:999px; padding:12px 26px; font:700 15px var(--osv2-body); border:0; }
.woocommerce-account .woocommerce form .woocommerce-button:hover,
.woocommerce-account .woocommerce .woocommerce-MyAccount-content .button:hover{ background:var(--osv2-brand-deep); }
.woocommerce-account .lost_password{ font-size:14px; margin-top:10px; }
.woocommerce-account .woocommerce h2{ font-size:24px; margin:0 0 14px; }

/* Logged-in: account navigation as a clean pill list */
.woocommerce-account .woocommerce-MyAccount-navigation{ background:#fff; border:1.5px solid var(--osv2-line); border-radius:16px; padding:10px; }
.woocommerce-account .woocommerce-MyAccount-navigation ul{ list-style:none; margin:0; padding:0; }
.woocommerce-account .woocommerce-MyAccount-navigation li{ margin:0; border:0; }
.woocommerce-account .woocommerce-MyAccount-navigation li a{ display:block; padding:10px 14px; border-radius:10px; font:600 15px var(--osv2-body); color:var(--osv2-ink); text-decoration:none; }
.woocommerce-account .woocommerce-MyAccount-navigation li a:hover{ background:var(--osv2-brand-soft); }
.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a{ background:var(--osv2-brand-soft); color:var(--osv2-brand-deep); }
.woocommerce-account .woocommerce-MyAccount-content{ font:15px/1.55 var(--osv2-body); color:var(--osv2-ink); }
.woocommerce-account .woocommerce-MyAccount-content table{ border-collapse:collapse; width:100%; }
.woocommerce-account .woocommerce-MyAccount-content th,
.woocommerce-account .woocommerce-MyAccount-content td{ border-bottom:1px solid var(--osv2-line); padding:10px 8px; text-align:left; }

@media (max-width:768px){
  .woocommerce-account .woocommerce-MyAccount-navigation{ margin-bottom:18px; }
  .woocommerce-account .woocommerce form.login,
  .woocommerce-account .woocommerce form.register{ padding:18px; }
}

/* ── Social buttons (v2.2.23; sized down v2.9.50) ─────────────────
   Base theme renders these at 15px in dark navy — nearly invisible
   on the dark footer. Round buttons in brand dark green with white
   glyphs; applies to the footer and the header info panel, which
   share the .sb-social markup. 46px read as too big next to the
   footer's 12px text (owner, 2026-11-02) — now 36px / 16px glyphs. */
.sb-social {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 10px !important;
    list-style: none !important;
    margin: 0 !important;
    padding: 0 !important;
}

.sb-social li {
    list-style: none !important;
    margin: 0 !important;
}

.sb-social li::marker {
    content: none !important;
}

.sb-social li a {
    width: 36px !important;
    height: 36px !important;
    border-radius: 50% !important;
    background: var(--osv2-brand-deep, #2c9440) !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    color: #fff !important;
    font-size: 16px !important;
    text-decoration: none !important;
    transition: background 0.15s ease, transform 0.15s ease !important;
}

.sb-social li a:hover {
    background: var(--osv2-brand, #39b54a) !important;
    color: #fff !important;
    transform: translateY(-2px) !important;
}

.sb-social li a svg {
    width: 16px !important;
    height: 16px !important;
    max-width: 16px !important;
    max-height: 16px !important;
    fill: #fff !important;
}

/* ── Footer bottom bar centering (v2.9.50) ────────────────────────
   The bar (footer template post 410, container 33081b4) is an
   Elementor flex row set to --align-items:stretch, so its three
   columns stretch to the tallest one and each column's content
   starts at its own offset — the terms/copyright text rode visibly
   high next to the social buttons (owner screenshot, 2026-11-02).
   Center the columns in the row and drop the paragraph margins
   inside the bar so each column is exactly its visible content;
   all three centers then coincide by construction. */
.footer .elementor-410 .elementor-element-33081b4 {
    --align-items: center;
}

.footer .elementor-410 .elementor-element-33081b4 > .e-con-inner {
    align-items: center;
}

.footer .elementor-410 .elementor-widget-text-editor p {
    margin: 0;
}

/* ── Cart (Blocks) design pass (v2.2.25) ──────────────────────────
   Same gap as checkout had: WooCommerce's default look. Fonts,
   headings and the proceed button now match the v2 design. */
.wc-block-cart {
    font-family: var(--osv2-body);
    color: var(--osv2-ink);
}

.wc-block-cart h1,
.wc-block-cart h2,
.wc-block-cart h3,
.wc-block-cart .wc-block-components-title {
    font-family: var(--osv2-head);
    font-weight: 600;
}

.wc-block-cart__submit-button {
    background: var(--osv2-brand) !important;
    border: none !important;
    border-radius: 999px !important;
    color: #fff !important;
    font-family: var(--osv2-head) !important;
    font-weight: 600 !important;
}

.wc-block-cart__submit-button:hover {
    background: var(--osv2-brand-dark) !important;
}

.wc-block-cart input[type="checkbox"],
.wc-block-cart input[type="radio"] {
    accent-color: var(--osv2-brand);
}

/* ── Compact order-flow pages (v2.2.30) ───────────────────────────
   Cart / checkout / account skip the title banner in page.php and
   trade the standard 90px section padding for a tight frame, so
   ordering starts immediately with minimal scrolling. */
.os-flow-page {
    padding-top: 20px !important;
    padding-bottom: 48px !important;
}

/* ── Fee / tax help icons (v2.3.0) ────────────────────────────────
   A small ⓘ in front of the Service fee and Taxes labels on the
   cart/checkout totals; tapping it opens the explanation. */
.os-fee-help-host { position: relative; }
.os-fee-help-btn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 16px; height: 16px; margin-right: 6px; padding: 0;
    border: 1.5px solid #999999; border-radius: 50%;
    background: transparent; color: #999999;
    font-family: var(--osv2-body, 'Inter', Arial, sans-serif);
    font-size: 10px; font-weight: 700; font-style: italic; line-height: 1;
    cursor: pointer; vertical-align: 2px; flex: none;
}
.os-fee-help-btn:hover, .os-fee-help-btn:focus-visible { border-color: #2c9440; color: #2c9440; outline: none; }
.os-fee-help-pop {
    position: absolute; top: calc(100% + 6px); left: 0; z-index: 60;
    width: 250px; max-width: 75vw; padding: 10px 12px;
    background: #ffffff; border: 1px solid #e3e3e3; border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.13);
    font-size: 12.5px; font-weight: 400; line-height: 1.45; color: #444444;
    text-transform: none; letter-spacing: normal; white-space: normal;
}

/* ── Elementor homepage helpers (v2.4.0) ──────────────────────────
   The seeded Elementor homepage leans on widget settings; these
   two pieces are easier as classes: the hero photo treatment and
   the hero fact row wrapping inline. */
.os-el-hero-img img {
    border-radius: 26px;
    box-shadow: 0 24px 60px rgba(31, 42, 31, 0.16);
    aspect-ratio: 4 / 3;
    object-fit: cover;
    width: 100%;
}
.os-el-facts .elementor-icon-list-items {
    display: flex; flex-wrap: wrap; gap: 9px 22px;
}
.os-el-facts .elementor-icon-list-item { margin: 0 !important; }

/* ── Blocks homepage bridges (v2.5.0) ─────────────────────────────
   In the seeded block homepage, the osv2 button classes sit on the
   .wp-block-button wrapper, so the pill styling is applied to the
   inner link instead. A few alignment helpers for block wrappers. */
.os-blocks-home .wp-block-button.osv2-btn .wp-block-button__link {
    display: inline-flex; align-items: center; justify-content: center; gap: 9px;
    min-height: 52px; padding: 14px 26px; border-radius: 999px; border: 2px solid transparent;
    font-family: var(--osv2-head); font-weight: 700; font-size: 18px; line-height: 1;
    text-decoration: none; transition: transform .15s, box-shadow .15s, background .15s;
}
.os-blocks-home .wp-block-button.osv2-btn .wp-block-button__link:hover { transform: translateY(-1px); }
.os-blocks-home .wp-block-button.osv2-btn--green .wp-block-button__link { background: var(--osv2-brand); color: #fff; box-shadow: 0 10px 24px rgba(57,181,74,.35); }
.os-blocks-home .wp-block-button.osv2-btn--green .wp-block-button__link:hover { background: var(--osv2-brand-dark); }
.os-blocks-home .wp-block-button.osv2-btn--outline .wp-block-button__link { background: #fff; border-color: var(--osv2-brand); color: var(--osv2-brand-deep); }
.os-blocks-home .wp-block-button.osv2-btn--outline .wp-block-button__link:hover { background: var(--osv2-brand-soft); }
.os-blocks-home .wp-block-button.osv2-btn--white .wp-block-button__link { background: #fff; color: var(--osv2-brand-deep); }
.os-blocks-home .wp-block-button.osv2-btn--sm .wp-block-button__link { min-height: 46px; padding: 11px 20px; font-size: 16px; }
.os-blocks-home .osv2-cta-band .wp-block-buttons { justify-content: center; }
.os-blocks-home .osv2-trust-item .ic { font-size: 26px; line-height: 1.2; margin: 0; }

/* ── Elementor header bridge (v2.7.0) ─────────────────────────────
   While the header runs from Elementor, the built-in bar's flex
   layout must not squeeze the Elementor section: the bar becomes
   a plain block and the section spans it fully. */
body.os-header-elementor .sb-top-bar { display: block; }
body.os-header-elementor .sb-top-bar .os-el-headerbar .elementor-column { display: flex; align-items: center; }

/* ── Curry Type smart dropdown (v2.8.1) ──────────────────────────
   The approved Curry Box design has Curry Type as a dropdown
   (10 options), Size and Spice as chips. The variation-swatches
   plugin converts every attribute to chips and offers no
   "Select" attribute type, so the theme restores the native
   dropdown for pa_curry-type only: hide its swatch row and
   un-hide the real <select>, styled to the design. */
body.single-product .cfvsw-swatches-container[swatches-attr="attribute_pa_curry-type"] {
    display: none !important;
}
body.single-product .cfvsw-hidden-select:has(> select#pa_curry-type) {
    display: block !important;
}
body.single-product select#pa_curry-type {
    display: block;
    width: 100%;
    min-height: 52px;
    border: 1.5px solid var(--osv2-line, #e4e7dd);
    border-radius: 12px;
    padding: 12px 40px 12px 14px;
    font-size: 15.5px;
    font-family: var(--osv2-body, Inter, sans-serif);
    background: #fff;
    color: var(--osv2-ink, #1f2a1f);
    box-sizing: border-box;
    cursor: pointer;
}

/* ── Elementor homepage proportions (v2.8.2) ─────────────────────
   The approved design's hero photo is ~4:3; the flatlay image is
   3:2, so the Elementor image widget renders it too flat. Pin
   the hero image to the design's proportion. */
.os-el-hero-img img {
    width: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 26px;
    display: block;
}
/* Anchor targets (incl. the JS-planted #os-order-ways) must not
   hide under the sticky header when scrolled to. */
#os-order-ways { scroll-margin-top: 96px; }

/* ── v2.9.38 deep-test fixes ──────────────────────────────────
   Reviews carousel: the prev/next arrows sit over the edge
   cards and clip their text — inset the track window so a
   card never slides under an arrow. */
.osr-carousel{ padding-left:54px;padding-right:54px; }
@media (max-width:640px){ .osr-carousel{ padding-left:42px;padding-right:42px; } }
/* Product gallery: a single-image gallery still builds a
   one-item thumbnail strip of empty-looking boxes — hide the
   strip when it holds exactly one thumb. */
.single-product .flex-control-thumbs li:only-child{ display:none; }
/* Product prices: the base theme shrinks the currency symbol
   to 12px inside the price frame, so $ reads as a superscript
   — keep it at the price's own size. */
.sb-product-description .sb-price .woocommerce-Price-currencySymbol{ font-size:inherit !important; }
/* Product price box (v2.9.64, owner's note): the base theme sets
   dark ink text on the brand-green price box — unreadable. White
   text (owner's suggestion) on the same green. */
.single-product .sb-product-description .sb-price-frame .sb-price{ color:#fff; }
.single-product .sb-product-description .sb-price-frame .sb-price .woocommerce-Price-amount{ color:inherit; }
/* Cart page (block cart): the empty-cart "New in store"
   product grid renders with loose default spacing — tighten
   it to the site's card rhythm. */
.woocommerce-cart .wc-block-grid__products{ gap:22px; }
.woocommerce-cart .wc-block-grid__product{ text-align:left; }
.woocommerce-cart .wc-block-grid__product-image{ margin-bottom:10px; }
.woocommerce-cart .wc-block-grid__product-title{ font-family:var(--osv2-head);font-size:16.5px;margin:0 0 4px; }
.woocommerce-cart .wc-block-grid__product-price{ margin:0 0 10px; }

/* ══ Menu one-page layout (v2.9.62, Option A) ═══════════════════════
   The Daily/Tray mode switch is gone: one page, every section in
   view. Desktop gets a sticky category rail; phones get a sticky
   chip bar inside the search bar. Dish cards become list cards
   (text left, photo right) — the homepage keeps the classic grid
   cards because every rule here is scoped to .os-menu-page. */
.os-menu-page [hidden]{ display:none !important; }
.os-menu-toolbar .os-plan{ margin-top:0; }
.os-menu-layout{ margin-top:20px; }
.os-menu-main{ min-width:0; }
.os-menu-block{ scroll-margin-top:180px; }
.os-menu-group{ scroll-margin-top:180px; }
.os-nav-off{ opacity:.38; }
@keyframes os-flash-kf{ 0%{ box-shadow:0 0 0 0 rgba(57,181,74,0); } 25%{ box-shadow:0 0 0 4px rgba(57,181,74,.55); } 100%{ box-shadow:0 0 0 0 rgba(57,181,74,0); } }
.os-flash{ animation:os-flash-kf 1.6s ease; border-radius:16px; }

/* rail (desktop) + chips (mobile) */
.os-menu-rail{ display:none; }
.os-menu-chips{ display:none; }
.os-rail-grp{
  font:700 11px var(--osv2-head);letter-spacing:1.2px;color:var(--osv2-muted);
  text-transform:uppercase;padding:14px 14px 4px;
}
.os-rail-link{
  display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;
  padding:10px 14px;border:0;border-radius:10px;background:none;cursor:pointer;
  color:var(--osv2-ink);text-decoration:none;font-size:15.5px;font-family:var(--osv2-body);text-align:left;
}
.os-rail-link .n{ color:var(--osv2-muted);font-size:13px; }
.os-rail-link.on{ background:#f4f7f2;font-weight:700;box-shadow:inset 3px 0 0 var(--osv2-brand); }
.os-rail-link:hover{ background:#f4f7f2; }
.os-rail-link svg, .os-menu-chip svg{ width:15px;height:15px;fill:currentColor;flex:0 0 auto; }
.os-fav-nav{ justify-content:flex-start; }
.os-fav-nav.on{ color:var(--osv2-brand-dark); }
.os-menu-chip{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding:8px 14px;
  border:1.5px solid var(--osv2-line);border-radius:999px;background:#fff;cursor:pointer;
  color:var(--osv2-ink);text-decoration:none;font-size:14px;font-family:var(--osv2-body);
}
.os-menu-chip.on{ background:var(--osv2-ink);color:#fff;border-color:var(--osv2-ink);font-weight:700; }
.os-chip-n{ opacity:.6;font-size:12.5px; }

/* mode banners + block heads */
.os-mode-banner{
  display:flex;align-items:center;gap:12px;border-radius:14px;padding:13px 16px;margin:28px 0 14px;
}
.os-mode-banner--daily{ background:#eef7ee;box-shadow:inset 3px 0 0 var(--osv2-brand); }
.os-mode-banner--tray{ background:#fdf3ea;box-shadow:inset 3px 0 0 var(--osv2-accent); }
.os-banner-ic{ font-size:24px;line-height:1; }
.os-mode-banner b{ font-family:var(--osv2-head);font-size:19px;display:block;line-height:1.2; }
.os-mode-banner div span{ font-size:13px;color:var(--osv2-muted); }
/* Section starts read as bands (v2.9.80, owner pick Option A):
   a tinted bar with the section name + a count pill, in the same
   language as the Daily/Tray mode banners — green for Featured,
   peach for tray categories — so a new section is obvious at
   scrolling speed instead of a bare bold word. */
.os-block-head{
  display:flex;align-items:center;gap:10px;background:#eef7ee;
  box-shadow:inset 3px 0 0 var(--osv2-brand);border-radius:12px;
  padding:12px 14px;margin:2px 0 14px;
}
.os-block-head h2{ font-family:var(--osv2-head);font-size:19px;margin:0; }
.os-block-head p{ color:var(--osv2-muted);margin:0 0 0 auto;font-size:12.5px;text-align:right; }
.os-cat-head{
  font-family:var(--osv2-head);font-size:19px;margin:30px 0 14px;
  display:flex;align-items:center;gap:10px;background:#fdf3ea;
  box-shadow:inset 3px 0 0 var(--osv2-accent);border-radius:12px;padding:12px 14px;
}
.os-cat-count{
  margin-left:auto;background:#fff;border:1px solid var(--osv2-line);color:var(--osv2-muted);
  border-radius:999px;font:700 11.5px var(--osv2-body);padding:3px 9px;white-space:nowrap;
}
.os-tray-section:first-child .os-cat-head{ margin-top:10px; }

/* every tray category is visible now (no tabs) */
.os-menu-page .os-tray-section{ display:block; }

/* list cards */
.os-menu-page .osd-grid{ display:grid;grid-template-columns:1fr;gap:16px; }
.os-menu-page .osd-card{ flex-direction:row;gap:14px;padding:14px;border-radius:16px; }
.os-menu-page .osd-media{
  order:2;flex:0 0 132px;width:132px;height:132px;aspect-ratio:auto;
  border-radius:12px;overflow:hidden;align-self:flex-start;
}
.os-menu-page .osd-body{ order:1;flex:1;min-width:0;padding:0; }
.os-menu-page .osd-name{ font-size:18.5px; }
/* simple products: the ADD is a green round + in the body foot
   (v2.9.96, owner: one green + on every simple menu card — never
   on the photo); the stepper steps aside (quantities live in the
   cart drawer) */
.os-menu-page .osd-card--simple .osd-stepper{ display:none; }
.os-menu-page .osd-card--simple .osd-add{
  position:static;width:40px;height:40px;min-height:40px;padding:0;flex:none;
  border:0;border-radius:50%;box-shadow:0 6px 16px rgba(57,181,74,.32);
  background:var(--osv2-brand);color:#fff;font-size:0;
  display:inline-flex;align-items:center;justify-content:center;
}
.os-menu-page .osd-card--simple .osd-add::after{ content:"+";font-size:24px;font-weight:700;line-height:1;color:#fff; }
.os-menu-page .osd-card--simple .osd-add:hover{ background:var(--osv2-brand-dark);color:#fff; }

/* featured cards (photo-top, inside the featured row only) */
.os-feat-grid{ display:grid;grid-template-columns:repeat(3,1fr);gap:18px; }
.os-menu-page .osd-card--featured{ flex-direction:column;gap:0;padding:0; }
.os-menu-page .osd-card--featured .osd-media{
  order:0;flex:none;width:100%;height:auto;aspect-ratio:16/10;border-radius:0;
}
.os-menu-page .osd-card--featured .osd-body{ order:1;padding:12px 14px 14px; }
/* featured simple cards: the same green + as every simple card
   (the rule above), pushed to the foot's right end. */
.os-menu-page .osd-card--featured .osd-add{ margin-left:auto; }
.osd-choose{
  margin-left:auto;background:var(--osv2-brand);color:#fff;border-radius:999px;
  padding:9px 16px;font:700 14px var(--osv2-head);text-decoration:none;
  display:inline-flex;align-items:center;min-height:38px;white-space:nowrap;
}
.osd-choose:hover{ background:var(--osv2-brand-dark);color:#fff; }

@media (min-width:1101px){
  .os-menu-layout{ display:grid;grid-template-columns:228px minmax(0,1fr);gap:34px;align-items:start; }
  .os-menu-rail{
    display:flex;flex-direction:column;gap:2px;position:sticky;top:178px;
  }
  .os-menu-page .osd-grid{ grid-template-columns:1fr 1fr; }
  .os-feat-grid{ grid-template-columns:repeat(3,1fr); }
}
@media (max-width:1100px){
  .os-menu-block, .os-menu-group{ scroll-margin-top:calc(var(--os-chip-top, 96px) + 66px); }
  /* v2.9.76: on phone/tablet the search card scrolls away and the
     category chips become a slim floating bar that sticks on its
     own. Its top offset is measured from the real header frame by
     os-menu.js (--os-chip-top), so it can never slide under the
     header or leave a gap, whatever the strip/bar heights are. */
  .os-menu-page .os-menu-nav{ position:static; }
  .os-menu-chips{
    display:flex;gap:8px;overflow-x:auto;width:100%;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
    position:sticky;top:var(--os-chip-top, 96px);z-index:60;
    background:rgba(255,255,255,.95);backdrop-filter:blur(8px);
    border:1px solid var(--osv2-line);border-radius:999px;
    padding:6px 8px;margin:12px 0 6px;box-shadow:0 10px 24px rgba(31,42,31,.10);
  }
  .os-menu-chips::-webkit-scrollbar{ display:none; }
  /* borderless list rows, aggregator-style */
  .os-menu-page .osd-card{ border:0;border-bottom:1px solid var(--osv2-line);border-radius:0;box-shadow:none;padding:14px 2px; }
  .os-menu-page .osd-grid{ gap:0; }
  .os-menu-page .osd-media{ flex-basis:104px;width:104px;height:104px; }
  .os-menu-page .osd-card--featured{ border:1px solid var(--osv2-line);border-radius:16px;box-shadow:0 2px 10px rgba(31,42,31,.04); }
  .os-feat-grid{
    display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;padding-bottom:8px;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
  }
  .os-feat-grid::-webkit-scrollbar{ display:none; }
  .os-menu-page .osd-card--featured{ flex:0 0 68%;scroll-snap-align:start; }
  .os-block-head h2{ font-size:21px; }
  .os-cat-head{ font-size:19px; }
}

/* ==========================================================================
   About + Contact pages (v2.9.65, inc/os-pages.php): slim head,
   white cards, dark order band — the FAQ/menu house style
   applied to the two static pages. All scoped under .os-page.
   ========================================================================== */
.os-page{ padding:26px 0 60px; }
.os-page-eyebrow{ font-family:var(--osv2-head); font-weight:700; font-size:12px; letter-spacing:1.6px; text-transform:uppercase; color:var(--osv2-brand-dark); margin:0 0 6px; text-align:left; }
.os-page-h1{ font-family:var(--osv2-head); font-size:36px; line-height:1.15; margin:0 0 8px; }
.os-page-sub{ color:var(--osv2-muted); font-size:16.5px; margin:0 0 22px; max-width:640px; line-height:1.5; }
.os-page-hero-img{ width:100%; height:340px; object-fit:cover; border-radius:18px; display:block; margin:0 0 22px; box-shadow:0 10px 30px rgba(31,42,31,.12); }
.os-page-card{ background:#fff; border:1px solid var(--osv2-line); border-radius:18px; padding:24px; box-shadow:0 2px 10px rgba(31,42,31,.04); }
.os-page-card h2{ font-family:var(--osv2-head); font-size:21px; margin:0 0 10px; }
.os-page-card p{ margin:0 0 12px; color:#3c463c; line-height:1.55; }
.os-page-card p:last-child{ margin-bottom:0; }
/* Legal pages in the About theme (v2.9.97): the stored body
   (h2 sections + bullet lists from Tools → Legal Pages) typed
   like the About cards — Poppins section heads, brand-green
   markers, the card's own paragraph rhythm. */
.os-legal-body h2{ font-size:19px; margin:24px 0 8px; padding-top:20px; border-top:1px solid var(--osv2-line); }
.os-legal-body h2:first-of-type{ margin-top:14px; padding-top:0; border-top:0; }
.os-legal-body ul{ margin:0 0 12px; padding-left:20px; color:#3c463c; line-height:1.55; }
.os-legal-body li{ margin:5px 0; }
.os-legal-body li::marker{ color:var(--osv2-brand-dark); font-weight:700; }
.os-legal-body p{ margin:0 0 12px; }
.os-legal-body > p:first-child{ color:var(--osv2-muted); margin-bottom:2px; }
.os-page-sec-h{ font-family:var(--osv2-head); font-size:24px; margin:30px 0 4px; }
.os-page-sec-sub{ color:var(--osv2-muted); margin:0 0 16px; font-size:14.5px; }
.os-page-grid2{ display:grid; grid-template-columns:1fr 1fr; gap:18px; margin-top:18px; }
.os-page-grid3{ display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }
.os-page-feat{ display:flex; gap:14px; align-items:flex-start; }
.os-page-num{ flex:0 0 auto; width:38px; height:38px; border-radius:12px; background:var(--osv2-brand-soft); color:var(--osv2-brand-dark); font-family:var(--osv2-head); font-weight:700; font-size:15px; display:flex; align-items:center; justify-content:center; }
.os-page-feat h3{ font-family:var(--osv2-head); font-size:16.5px; margin:2px 0 4px; }
.os-page-feat p{ font-size:14.5px; color:var(--osv2-muted); margin:0; }
/* Mission & Vision get their own look (v2.9.68): tinted cards,
   icon medallions, accent top bar — green for Mission, the brand
   orange for Vision. */
.os-page-mv{ position:relative; overflow:hidden; padding-top:28px; }
.os-page-mv::before{ content:""; position:absolute; top:0; left:0; right:0; height:5px; }
.os-page-mv--mission{ background:#eef8f0; border-color:#cfe9d4; }
.os-page-mv--mission::before{ background:var(--osv2-brand); }
.os-page-mv--vision{ background:#fff4ea; border-color:#f6ddc6; }
.os-page-mv--vision::before{ background:#ff914d; }
.os-page-mv-head{ display:flex; align-items:center; gap:13px; margin-bottom:10px; }
.os-page-mv-head h2{ margin:0; }
.os-page-mv-icon{ width:46px; height:46px; flex:none; border-radius:50%; display:flex; align-items:center; justify-content:center; }
.os-page-mv--mission .os-page-mv-icon{ background:var(--osv2-brand); color:#fff; box-shadow:0 6px 14px rgba(57,181,74,.35); }
.os-page-mv--vision .os-page-mv-icon{ background:#ff914d; color:#fff; box-shadow:0 6px 14px rgba(255,145,77,.4); }
.os-page-val h3{ font-family:var(--osv2-head); font-size:16.5px; margin:0 0 5px; color:var(--osv2-brand-dark); }
.os-page-val p{ font-size:14.5px; color:#3c463c; margin:0; }
.os-page-cta{ margin-top:30px; background:var(--osv2-ink); color:#fff; border-radius:18px; padding:26px; display:flex; align-items:center; gap:18px; flex-wrap:wrap; }
.os-page-cta h2{ font-family:var(--osv2-head); font-size:22px; margin:0; flex:1; min-width:220px; color:#fff; }
.os-page-cta-btns{ display:flex; gap:12px; flex-wrap:wrap; }
.os-page-btn-ghost{ background:transparent; color:#fff; border-color:rgba(255,255,255,.5); }
.os-page-btn-ghost:hover{ background:rgba(255,255,255,.08); color:#fff; }
.os-page-contact-grid{ align-items:start; margin-top:0; }
.os-page-info{ display:flex; gap:14px; align-items:flex-start; padding:16px 0; border-bottom:1px solid var(--osv2-line); }
.os-page-info:first-child{ padding-top:2px; }
.os-page-info:last-child{ border-bottom:0; padding-bottom:2px; }
.os-page-ic{ flex:0 0 auto; width:42px; height:42px; border-radius:50%; background:var(--osv2-brand-soft); display:flex; align-items:center; justify-content:center; }
.os-page-ic svg{ width:20px; height:20px; fill:none; stroke:var(--osv2-brand-dark); stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.os-page-info b{ font-family:var(--osv2-head); display:block; font-size:15px; }
.os-page-info-val{ color:var(--osv2-brand-dark); font-weight:700; text-decoration:none; font-size:16.5px; display:block; }
span.os-page-info-val{ color:var(--osv2-ink); }
.os-page-info-note{ color:var(--osv2-muted); font-size:13.5px; display:block; }
.os-page-privacy{ color:var(--osv2-muted); font-size:13px; margin:10px 0 0; }
.os-page-form .wpcf7-form{ margin:0; }
.os-page-form .wpcf7-form p{ margin:0; }
.os-page-form .wpcf7 input[type="text"], .os-page-form .wpcf7 input[type="email"], .os-page-form .wpcf7 input[type="tel"], .os-page-form .wpcf7 textarea,
.os-page-form .wpcf7-form input[type="text"], .os-page-form .wpcf7-form input[type="email"], .os-page-form .wpcf7-form input[type="tel"], .os-page-form .wpcf7-form textarea{
  width:100%; border:1.5px solid var(--osv2-line); border-radius:12px; padding:12px 14px;
  font:16px var(--osv2-body); margin:0 0 14px; background:#fff; color:var(--osv2-ink);
}
.os-page-form .wpcf7 textarea, .os-page-form .wpcf7-form textarea{ min-height:120px; resize:vertical; }
.os-page-form .wpcf7 input:focus, .os-page-form .wpcf7 textarea:focus, .os-page-form .wpcf7-form input:focus, .os-page-form .wpcf7-form textarea:focus{ outline:2px solid var(--osv2-brand); outline-offset:1px; border-color:var(--osv2-brand); }
.os-page-form .sb-cf-submit, .os-page-form .wpcf7 input[type="submit"], .os-page-form .wpcf7-form input[type="submit"]{
  width:100%; min-height:52px; border:0; border-radius:999px; background:var(--osv2-brand); color:#fff;
  font:700 16px var(--osv2-head); cursor:pointer; box-shadow:0 8px 20px rgba(57,181,74,.32);
  display:flex; align-items:center; justify-content:center; text-align:center;
}
.os-page-form .sb-cf-submit:hover, .os-page-form .wpcf7 input[type="submit"]:hover{ background:var(--osv2-brand-dark); }
.os-page-form .wpcf7-not-valid-tip{ color:var(--osv2-red); font-size:13px; display:block; margin:-8px 0 10px; }
.os-page-form .wpcf7-response-output{ border-radius:12px; font-size:14.5px; margin:12px 0 0; }
@media (max-width:900px){
  .os-page-grid3{ grid-template-columns:1fr 1fr; }
  /* CTA band stacks centered on tablet/phone (v2.9.67 — it was left-aligned). */
  .os-page-cta{ flex-direction:column; align-items:center; text-align:center; }
  .os-page-cta h2{ min-width:0; }
  .os-page-cta-btns{ justify-content:center; }
}
@media (max-width:640px){
  .os-page{ padding:18px 0 44px; }
  .os-page-h1{ font-size:28px; }
  .os-page-grid2, .os-page-grid3{ grid-template-columns:1fr; }
  .os-page-card{ padding:19px; }
  .os-page-hero-img{ height:200px; margin-bottom:16px; }
  .os-page-cta{ padding:21px; align-items:stretch; }
  .os-page-cta-btns{ flex-direction:column; width:100%; }
  .os-page-cta-btns .osv2-btn{ width:100%; justify-content:center; }
}

/* ==========================================================================
   Hero collage (v2.9.66, os_hero_collage()): the homepage hero's
   photo slot becomes a mosaic of real product photos — tall
   feature card, one wide card, two small cards, purity pills.
   ========================================================================== */
.osv2-hero-collage{ position:relative; display:grid; grid-template-columns:1.08fr .92fr; grid-template-rows:1fr 1fr; gap:12px; aspect-ratio:4/3; }
.osv2-collage-cell{ position:relative; border-radius:22px; overflow:hidden; box-shadow:0 14px 34px rgba(31,42,31,.13); background:#fff; }
.osv2-collage-cell img{ width:100%; height:100%; object-fit:cover; display:block; }
.osv2-collage-main{ grid-row:1 / 3; }
.osv2-collage-duo{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.osv2-collage-duo .osv2-collage-cell{ border-radius:18px; }
.osv2-collage-tag{ position:absolute; left:10px; bottom:10px; background:rgba(31,42,31,.82); color:#fff; font-family:var(--osv2-head); font-weight:700; font-size:12.5px; padding:6px 12px; border-radius:999px; letter-spacing:.2px; }
.osv2-collage-main .osv2-collage-tag{ font-size:14px; left:14px; bottom:14px; padding:8px 15px; }
.osv2-collage-pill{ position:absolute; left:14px; top:-13px; z-index:3; background:#fff; border:1px solid var(--osv2-line); box-shadow:0 10px 24px rgba(31,42,31,.16); border-radius:999px; padding:8px 15px; font-family:var(--osv2-head); font-weight:700; font-size:12px; letter-spacing:1.2px; text-transform:uppercase; color:var(--osv2-ink); display:inline-flex; align-items:center; gap:8px; }
.osv2-collage-pill i{ width:8px; height:8px; border-radius:50%; background:var(--osv2-brand); display:block; flex:none; }
@media (max-width:900px){
  .osv2-hero-collage{ aspect-ratio:1 / .92; gap:9px; }
  .osv2-collage-pill{ left:8px; top:-11px; font-size:10.5px; padding:7px 12px; }
  .osv2-collage-tag{ font-size:11px; padding:5px 10px; left:8px; bottom:8px; }
  .osv2-collage-duo .osv2-collage-tag{ display:none; }
}

/* The purity line lives on the hero collage as the
   .osv2-collage-pill (owner's Placement C pick, v2.9.72). */

/* ── Product pages v2 (v2.9.82) ─────────────────────────────────
   App-style ordering panel on every product page (owner pick,
   built from the Curry Box sample): de-banded title + live price,
   stepped choices, curry photo tiles, size cards, a green Add
   button carrying the total, and the ZIP check slimmed below the
   buy row. Supersedes the v2.8.1 curry-dropdown rules above for
   the curry attribute (the tile grid owns it now). */
body.single-product .sb-product-lt{ position:relative; }
.osp-purity-pill{
  position:absolute;top:14px;left:14px;z-index:6;background:#fff;border-radius:999px;
  padding:6px 12px;font:700 11.5px var(--osv2-body);color:var(--osv2-ink);
  display:inline-flex;gap:7px;align-items:center;box-shadow:0 2px 10px rgba(0,0,0,.18);
}
.osp-purity-pill i{ width:8px;height:8px;border-radius:50%;background:var(--osv2-brand);flex:0 0 auto; }

/* Title + price: no more split band — title plain, price live. */
body.single-product .sb-product-description .sb-price-frame{
  background:none;padding:0;display:block;margin-bottom:6px;
}
body.single-product .sb-product-description .sb-price-frame :is(h1,h3){
  font-family:var(--osv2-head);font-weight:700;font-size:clamp(24px,3vw,30px);
  color:var(--osv2-ink);margin:0 0 2px;line-height:1.15;
}
body.single-product .sb-product-description .sb-price-frame .sb-price{
  background:none;height:auto;padding:0;display:block;
  font-family:var(--osv2-head);font-weight:700;font-size:25px;color:var(--osv2-ink);
}
body.single-product .sb-price .osp-from{ font:600 13.5px var(--osv2-body);color:var(--osv2-muted); }
body.single-product .sb-price .woocommerce-Price-currencySymbol{ font-size:.62em;vertical-align:top; }

/* The swatches plugin's containers retire on product pages —
   chips and the tile grid own the controls now. */
body.single-product .cfvsw-swatches-container{ display:none!important; }
body.single-product .cfvsw-hidden-select:has(> select#pa_curry-type){ display:none!important; }

/* Stepped variation rows. */
body.single-product table.variations{ width:100%;border:0;margin:6px 0 0; }
body.single-product table.variations tr{ display:block;margin:0 0 20px; }
body.single-product table.variations th.label,
body.single-product table.variations td.value{ display:block;width:auto;padding:0;border:0;text-align:left; }
body.single-product table.variations th.label label{
  font:700 13px var(--osv2-head);letter-spacing:.6px;text-transform:uppercase;
  color:var(--osv2-ink);margin:0 0 10px;display:block;
}
body.single-product .reset_variations{ font-size:13px;color:var(--osv2-muted); }

/* Chips: pills everywhere; the selected spice reads dark. */
body.single-product .osv-chips{ gap:8px;margin:0; }
body.single-product .osv-chip{
  border:1.5px solid var(--osv2-line);border-radius:999px;padding:10px 18px;
  font:600 14.5px var(--osv2-body);min-height:44px;background:#fff;color:var(--osv2-ink);
}
body.single-product .osv-chip.on{ background:var(--osv2-ink);border-color:var(--osv2-ink);color:#fff;font-weight:700; }

/* Size options become cards with hint + live price. */
body.single-product .osv-chips--size{ display:grid;grid-template-columns:1fr 1fr;gap:10px;flex-wrap:unset; }
body.single-product .osv-chips--size .osv-chip{
  border-radius:14px;padding:12px 14px;text-align:left;display:flex;flex-direction:column;
  gap:1px;font:700 16px var(--osv2-head);align-items:flex-start;
}
body.single-product .osp-chip-hint{ font:500 12.5px var(--osv2-body);color:var(--osv2-muted); }
body.single-product .osp-chip-price{ font:800 16px var(--osv2-head);color:var(--osv2-ink);margin-top:3px; }
body.single-product .osv-chips--size .osv-chip.on{
  background:var(--osv2-brand-soft);color:var(--osv2-ink);border-color:var(--osv2-brand-dark);
  box-shadow:0 0 0 1.5px var(--osv2-brand-dark);font-weight:700;
}

/* Curry tile grid. */
.osp-curry-grid{ display:grid;grid-template-columns:1fr 1fr;gap:10px; }
.osp-tile{
  border:1.5px solid var(--osv2-line);border-radius:14px;background:#fff;padding:0;
  overflow:hidden;text-align:left;display:flex;flex-direction:column;cursor:pointer;width:100%;
}
.osp-tile img{ width:100%;height:74px;object-fit:cover;display:block; }
.osp-tile-name{ font:600 13.5px var(--osv2-body);color:var(--osv2-ink);padding:7px 10px 0;line-height:1.3; }
.osp-tile-price{ font:700 13px var(--osv2-body);color:var(--osv2-brand-dark);padding:1px 10px 8px; }
.osp-tile--text{ justify-content:center;padding:12px 4px;min-height:104px; }
.osp-tile.on{ border-color:var(--osv2-brand-dark);box-shadow:0 0 0 1.5px var(--osv2-brand-dark);position:relative; }
.osp-tile.on::after{
  content:"✓";position:absolute;top:6px;right:6px;width:20px;height:20px;border-radius:50%;
  background:var(--osv2-brand-dark);color:#fff;font-size:12px;line-height:1;
  display:flex;align-items:center;justify-content:center;
}

/* Buy row: pill stepper + green Add carrying the total. One row,
   always: with the total appended the button's min-content plus
   the stepper exceeds the column and wraps (measured in the
   v2.9.82 rig), so the frame is nowrap, the stepper slimmer and
   the button's cart icon retired — the label carries the row.
   v2.9.113 (audit P2): the flex rule is scoped to
   .sb-product-description — unscoped it also matched the
   HEADER's .sb-buttons-frame (same class name) and wrapped the
   header buttons onto two rows (frame 148px → 186px) on every
   product page. The buy-row frame lives inside
   .sb-product-description, so its cascade is unchanged. */
body.single-product .sb-product-description .sb-buttons-frame{ display:flex;align-items:center;gap:12px;flex-wrap:wrap; }
body.single-product .sb-product-description .sb-buttons-frame{ flex-wrap:nowrap; }
body.single-product .sb-product-description .sb-input-number-frame{ margin:0;flex:0 0 auto; }
body.single-product .sb-input-number-frame{
  border:1.5px solid var(--osv2-line);border-radius:999px;background:#fff;
  display:inline-flex;align-items:center;overflow:hidden;padding:0;
}
body.single-product .sb-input-number-frame .sb-input-number-btn{
  width:36px;height:46px;display:flex;align-items:center;justify-content:center;
  font-size:19px;background:none;border:0;color:var(--osv2-ink);cursor:pointer;
}
body.single-product .single_add_to_cart_button .sb-icon{ display:none; }
body.single-product .sb-input-number-frame .quantity input.qty{
  width:30px;text-align:center;border:0;font:700 15px var(--osv2-body);background:none;padding:0;
}
body.single-product .single_add_to_cart_button{
  background:var(--osv2-brand)!important;border:0;border-radius:999px!important;
  padding:14px 18px;font:700 15px var(--osv2-head);color:#fff;flex:1;min-width:0;min-height:50px;cursor:pointer;
  white-space:nowrap;
}
body.single-product .single_add_to_cart_button:hover{ background:var(--osv2-brand-dark)!important; }
/* Not-ready state (options incomplete): a solid softer green —
   never a faded wash, or the label goes grey with it. */
body.single-product .single_add_to_cart_button.disabled,
body.single-product .single_add_to_cart_button.wc-variation-selection-needed{
  background:#79c686!important;color:#fff!important;opacity:1!important;
}
/* Buy-row alignment (v2.9.83): the skin sizes the stepper and
   the button from different rules, so the button rendered
   taller and sat lower than the stepper. Both now share one
   exact height on one baseline. */
body.single-product .sb-product-description .sb-input-number-frame{ height:52px; }
body.single-product .sb-product-description .sb-input-number-frame .sb-input-number-btn{ height:52px; }
body.single-product .sb-product-description .single_add_to_cart_button{
  height:52px;min-height:52px;padding:0 18px;margin:0;
  display:inline-flex;align-items:center;justify-content:center;
}
/* The hero price is the live one; Woo's in-form price is a duplicate. */
body.single-product .woocommerce-variation-price{ display:none; }
body.single-product .single_variation{ margin:0; }

/* ZIP check: a slim dashed line under the buy row. */
body.single-product .os-zipcheck{
  background:#fff;border:1.5px dashed var(--osv2-line);border-radius:12px;
  padding:6px 14px;margin:16px 0 4px;
}
body.single-product .os-zipcheck-toggle{ color:var(--osv2-brand-dark);font-weight:600; }
body.single-product .os-zipcheck.open{ padding-bottom:14px; }

/* Tabs become quiet cards (Additional Information is removed in PHP). */
body.single-product .woocommerce-tabs{ margin-top:30px; }
body.single-product .woocommerce-tabs .panel{
  border:1px solid var(--osv2-line);border-radius:16px;padding:20px;background:#fff;
}
body.single-product .woocommerce-tabs ul.tabs{ padding:0;margin:0 0 14px;display:flex;gap:8px; }
body.single-product .woocommerce-tabs ul.tabs li{
  border:1.5px solid var(--osv2-line);border-radius:999px;background:#fff;margin:0;
}
body.single-product .woocommerce-tabs ul.tabs li.active{ background:var(--osv2-ink);border-color:var(--osv2-ink); }
body.single-product .woocommerce-tabs ul.tabs li a{ padding:8px 16px;font:600 13.5px var(--osv2-body); }
body.single-product .woocommerce-tabs ul.tabs li.active a{ color:#fff; }
body.single-product .woocommerce-tabs ul.tabs::before,
body.single-product .woocommerce-tabs ul.tabs li::before,
body.single-product .woocommerce-tabs ul.tabs li::after{ display:none; }

/* Item note box (v2.9.84/85): one slim dashed input under the
   each attribute step on curry pages; optional, kitchen-bound. */
body.single-product .os-attr-note{ margin-top:10px; }
body.single-product .os-attr-note-label{ display:block;font:600 13px var(--osv2-head);color:var(--osv2-ink);margin:0 0 6px; }
/* Step badges on variation labels (v2.9.100, owner): a green
   numbered disc so the steps read at a glance. */
body.single-product table.variations th.label label{ display:flex;align-items:center;gap:8px;font-family:var(--osv2-head);font-size:15px;font-weight:600; }
.os-step-badge{ display:inline-flex;align-items:center;justify-content:center;width:23px;height:23px;border-radius:50%;background:var(--osv2-brand);color:#fff;font:700 12.5px var(--osv2-head);flex:none;box-shadow:0 3px 8px rgba(57,181,74,.35); }
body.single-product .os-attr-note input[type="text"]{
  width:100%;border:1.5px dashed var(--osv2-line);border-radius:10px;background:#fff;
  padding:9px 12px;font:14px var(--osv2-body);color:var(--osv2-ink);min-height:44px;
}
body.single-product .os-attr-note input[type="text"]::placeholder{ color:var(--osv2-faint); }
body.single-product .os-attr-note input[type="text"]:focus{
  outline:none;border-style:solid;border-color:var(--osv2-brand);
}
/* Personalize note mandatory error (v2.9.111). */
body.single-product .os-attr-note-error{ margin:8px 0 0;font:600 13px var(--osv2-body);color:#b3261e; }
body.single-product .os-attr-note-error[hidden]{ display:none !important; }

/* App-style spacing pass (v2.9.86): measured on the real page —
   the step labels inherited a 55px line-height from the skin,
   the promise block stacked loose, the note box touched the buy
   row (0px gap), and the tabs carried 90px of dead space. One
   tight rhythm now: labels ~20px, blocks 14–16px apart. */
body.single-product .sb-product-description table.variations th.label label{ line-height:1.3; }
body.single-product .sb-price-frame{ margin-bottom:16px!important; }
body.single-product form.variations_form .single_variation_wrap{ margin-top:14px; }
body.single-product .woocommerce-tabs{ margin-top:8px;padding-top:24px!important; }

/* Mobile compact pass (v2.9.88): on phones the product page
   stacked ~58px of top padding and a 300px gallery before the
   title, pushing the buy row far down. Top padding is now 22px,
   the gallery caps at 230px (rule above), the purity line fits
   one line, and step gaps tighten — the options start ~125px
   higher and the buy row takes one short scroll. */
@media (max-width:640px){
  body.single-product .sb-shop-page{ padding-top:12px; }
  body.single-product .product-single{ padding-top:10px; }
  body.single-product .sb-product-description table.variations tr{ margin-bottom:16px; }
}

/* ── Festival celebrations (v2.9.113): canvas + greeting card ─────── */
#os-celebrate-canvas{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:99990}
#os-greet-card{position:fixed;left:50%;bottom:calc(18px + env(safe-area-inset-bottom,0px));transform:translate(-50%,140%);width:min(430px,calc(100vw - 28px));background:#fff;border-radius:18px;box-shadow:0 18px 50px rgba(31,42,31,.28);padding:20px 22px 18px;z-index:99995;text-align:center;border-top:4px solid #ff914d;transition:transform .55s cubic-bezier(.2,.9,.25,1.1);box-sizing:border-box}
#os-greet-card.os-greet-show{transform:translate(-50%,0)}
#os-greet-card .os-greet-icon{font-size:34px;line-height:1}
#os-greet-card .os-greet-title{font-family:Poppins,Arial,sans-serif;font-weight:700;font-size:21px;margin:8px 0 4px;color:#1f2a1f}
#os-greet-card .os-greet-text{margin:0 0 14px;color:#5c6656;font-size:14px;line-height:1.55}
#os-greet-card .os-greet-row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
#os-greet-card .os-greet-cta{background:#39b54a;color:#fff;font-family:Poppins,Arial,sans-serif;font-weight:600;font-size:14px;border-radius:100px;padding:11px 22px;text-decoration:none}
#os-greet-card .os-greet-close{background:#fff;color:#999;font-family:Inter,Arial,sans-serif;font-weight:600;font-size:14px;border:1.5px solid #e7e4da;border-radius:100px;padding:11px 18px;cursor:pointer}
