/* Scoped fixes for the header's mobile/overlay toggle trigger, matching the
 * Lovable source's icon-only round button + detached overlay panel -- the
 * native Elementor Toggle widget has no border-radius control for its title
 * bar and no way to detach its content pane from the flex row, so this is
 * the minimal targeted CSS the compiler-audit's "only if impossible" rule
 * allows for. */
.pk-mobile-toggle {
  flex: 0 0 auto !important;
  position: static !important;
}
.pk-mobile-toggle .elementor-tab-title {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0 !important;
  border-radius: 9999px;
  border: 1px solid rgba(250, 250, 247, 0.4);
  cursor: pointer;
}
.pk-mobile-toggle .elementor-toggle-title {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
  padding: 0;
  margin: -1px;
}
.pk-mobile-toggle .elementor-toggle-icon {
  margin: 0;
  display: inline-block;
  width: 1em;
}
.pk-mobile-toggle .elementor-toggle-icon svg {
  width: 1em;
  height: 1em;
}
.pk-mobile-toggle .elementor-toggle-icon-opened {
  display: none;
}
.pk-mobile-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed {
  display: none;
}
.pk-mobile-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened {
  display: block;
}
.pk-mobile-toggle .elementor-tab-content {
  display: none;
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  right: 0;
  border-radius: 2rem;
  z-index: 10;
}
.pk-mobile-toggle .elementor-tab-title.elementor-active + .elementor-tab-content {
  display: block;
}
.pk-overlay-grid {
  align-items: end;
}
@media (max-width: 767px) {
  .pk-overlay-grid {
    grid-template-columns: 1fr !important;
  }
  /* 2026-08-10 -- mobile nav panel height.
   * The panel is position:absolute under the header pill, and the pill is
   * inside a position:fixed header, so it can never be scrolled into view by
   * scrolling the page -- and opening it locks body scroll anyway (body gets
   * position:fixed). Anything past the fold is reachable only by scrolling
   * the panel itself, so its max-height must match the real visible viewport.
   * Two bugs did the opposite:
   *  1. `100vh` on mobile is the LARGE viewport -- it measures as if the URL
   *     bar and toolbar were retracted, so with chrome on screen the panel
   *     ran ~100-150px past what the user could see. `100dvh` tracks reality.
   *  2. `- 120px` was a hardcoded guess at the panel's own top offset, which
   *     is really 130px and moves with the header's scroll-shrink state.
   *     --pk-nav-panel-top is published by the header script from the pill's
   *     live geometry, so this stays exact in both states.
   * Because the inflated max-height (724px) exceeded the content height
   * (649px), overflow-y:auto produced NO scrollbar at all -- so the last row
   * ("Order on Zomato") was unreachable, not merely off-screen.
   * Desktop is unaffected: no max-height applies outside this query and
   * --pk-nav-panel-top is referenced nowhere else. */
  .pk-mobile-toggle .elementor-tab-content {
    max-height: calc(100vh - var(--pk-nav-panel-top, 130px) - 16px);
    max-height: calc(100dvh - var(--pk-nav-panel-top, 130px) - 16px);
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
  }
  /* Breathing room so the final row never sits flush against the rounded
   * bottom edge once the panel is actually scrolling. */
  .pk-mobile-toggle .elementor-tab-content > *:last-child {
    margin-bottom: 4px;
  }
}

.pk-footer-meta {
  font-family: Inter, sans-serif;
  color: rgba(237, 40, 110, 0.6);
}
.pk-footer-meta .elementor-shortcode {
  font-family: Inter, sans-serif;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  font-size: 0.75rem;
  color: rgba(237, 40, 110, 0.6);
}

/* Scroll-shrink animation, matching Nav.tsx's scrolled-state values exactly
 * (confirmed via computed-style inspection of the live Lovable header at
 * 1440px: unscrolled pillPadding 12px/36px logo 72px gap 40px header-pad
 * 14px -> scrolled 8px/24px logo 52px gap 24px header-pad 8px). Elementor
 * has no native scroll-triggered style-morph control, so this is CSS
 * transitions driven by one class toggle -- the same pattern the theme's
 * own compiler output already uses elsewhere for scroll-based header
 * changes. */
.pk-header-root {
  transition: padding-top 400ms cubic-bezier(0.22, 1, 0.36, 1);
}
.pk-header-pill {
  /* 2026-08-12 -- default-state refinement (-4px header height, slightly
   * larger logo). The pill's vertical padding is applied twice: once here on
   * the outer .e-con and again by Elementor's own container setting on the
   * inner .e-con-inner (12px each = 24px of stacked whitespace per side).
   * Trimming only this outer layer 12 -> 8 removes 8px of that redundant
   * whitespace without touching the structure or the horizontal rhythm; the
   * logo then grows 72 -> 76 below, for a net -4px. */
  padding: 8px 36px !important;
  transition: padding 400ms cubic-bezier(0.22, 1, 0.36, 1);
}
@media (max-width: 767px) {
  .pk-header-pill {
    padding: 8px 20px !important;
  }
}
.pk-header-logo img {
  transition: width 400ms cubic-bezier(0.22, 1, 0.36, 1), height 400ms cubic-bezier(0.22, 1, 0.36, 1);
}
/* Default-state logo size. Kept here rather than in the widget's own controls
 * so the whole default/scrolled size pair lives in one place -- the scrolled
 * rules below are one class more specific, so they still win when scrolled.
 * Desktop 72 -> 76 (+5.5%, restrained) offsets 4px of the 8px padding trim
 * above. Mobile only widens 44 -> 46: the mobile box is 44x72 and the SVG is
 * object-fit:contain inside it, so width alone drives the rendered mark and
 * the header height stays put. */
@media (min-width: 768px) {
  .pk-header-root .pk-header-logo,
  .pk-header-root .pk-header-logo img {
    width: 76px !important;
    height: 76px !important;
  }
}
@media (max-width: 767px) {
  .pk-header-root .pk-header-logo img {
    width: 46px !important;
  }
}
.pk-header-nav {
  transition: gap 400ms cubic-bezier(0.22, 1, 0.36, 1);
}
.pk-header-root.pk-scrolled {
  padding-top: 8px !important;
}
.pk-header-root.pk-scrolled .pk-header-pill {
  padding: 8px 24px !important;
}
.pk-header-root.pk-scrolled .pk-header-logo,
.pk-header-root.pk-scrolled .pk-header-logo img {
  width: 52px !important;
  height: 52px !important;
}
.pk-header-root.pk-scrolled .pk-header-nav {
  gap: 24px !important;
}
@media (max-width: 767px) {
  .pk-header-root.pk-scrolled {
    padding-top: 6px !important;
  }
  .pk-header-root.pk-scrolled .pk-header-pill {
    padding: 6px 16px !important;
  }
  .pk-header-root.pk-scrolled .pk-header-logo,
  .pk-header-root.pk-scrolled .pk-header-logo img {
    width: 36px !important;
    height: 36px !important;
  }
}
.pk-arrow-icon .elementor-button-icon svg,
.pk-arrow-icon .elementor-button-icon i {
  transform: rotate(45deg);
  transition: transform 500ms cubic-bezier(0.65,0,0.35,1);
}
.pk-arrow-icon:hover .elementor-button-icon svg,
.pk-arrow-icon:hover .elementor-button-icon i {
  transform: rotate(90deg);
}
.pk-pill-btn .elementor-button {
  transition: transform 500ms cubic-bezier(0.65,0,0.35,1) !important;
}
.pk-pill-btn:hover .elementor-button {
  transform: translateY(-2px);
}

.pk-aspect-45 { position: relative; aspect-ratio: 4 / 5; overflow: hidden; border-radius: 1.75rem; box-shadow: 0 0 0 1px rgba(28,26,24,.1); }
.pk-aspect-45 .elementor-widget-image, .pk-aspect-45 .elementor-widget-image img { width: 100% !important; height: 100% !important; object-fit: cover !important; }
.pk-full-img img { object-fit: cover !important; }
.pk-round-28 { position: relative; border-radius: 1.75rem !important; overflow: hidden; box-shadow: 0 10px 26px -18px rgba(28,26,24,.22); }
.pk-round-28 .elementor-widget-image, .pk-round-28 img { border-radius: 1.75rem !important; width: 100% !important; height: 100% !important; object-fit: cover !important; }
.pk-round-32 { position: relative; aspect-ratio: 4 / 3; border-radius: 2rem !important; overflow: hidden; box-shadow: 0 10px 26px -18px rgba(28,26,24,.22); }
@media (min-width: 768px) {
  .pk-round-32 { aspect-ratio: 16 / 11; }
}
.pk-round-32 .elementor-widget-image, .pk-round-32 img { border-radius: 2rem !important; width: 100% !important; height: 100% !important; object-fit: cover !important; }
.pk-aspect-56 { position: relative; aspect-ratio: 5 / 6; border-radius: 1.5rem; overflow: hidden; }
.pk-aspect-56 .elementor-widget-image, .pk-aspect-56 .elementor-widget-image img { width: 100% !important; height: 100% !important; object-fit: cover !important; }
/* Source's global base-layer CSS applies text-transform:uppercase to every
 * h1/h2/h3 (confirmed via computed-style audit of the live Lovable site --
 * not visible in any single component's className, so easy to miss fixing
 * one-by-one). Elementor's Heading widget always wraps text in
 * .elementor-heading-title, so one rule covers every heading sitewide
 * rather than needing a per-widget typography_text_transform override. */
.elementor-widget-heading .elementor-heading-title {
  text-transform: uppercase;
}
/* Source's `font-display` Tailwind utility (headings/buttons only -- body
 * copy uses a separate Inter-first stack, confirmed via computed-style
 * capture of live paragraph text) resolves to a three-font stack (Oswald,
 * Inter, sans-serif), not just (Oswald, sans-serif) -- a fallback-chain
 * completeness detail invisible while Oswald loads successfully, but
 * matched for fidelity. */
h1, h2, h3, .elementor-widget-heading .elementor-heading-title, .elementor-widget-button .elementor-button {
  font-family: Oswald, Inter, sans-serif;
}

/* Hero footer row (text + button cluster): Elementor's absolute-position
 * offset controls only support ONE horizontal anchor (start OR end), so
 * there's no native way to express the source's `inset-x-6` (stretch full
 * width between two equal insets) needed for `justify-content:space-between`
 * to actually have room to distribute. Without this, the row shrink-wraps
 * to its content width and the button cluster collapses onto the text. */
.elementor-element-lwc0000no {
  left: 24px !important;
  right: 24px !important;
  width: auto !important;
}
@media (min-width: 768px) {
  .elementor-element-lwc0000no {
    left: 40px !important;
    right: 40px !important;
  }
}

/* Orphaned aspect-ratio variant classes from the compiler (pk-round-32b,
 * pk-round-28c/d) had no matching CSS rule at all, so their images fell
 * back to unconstrained "auto" height instead of the source's exact ratio
 * -- confirmed against the live Lovable page's computed aspect-ratio for
 * each (5/4, 4/3, 16/9 respectively; Lovable itself has no border-radius
 * or overflow-hidden on these three, so none added here either). */
.pk-round-32b { position: relative; aspect-ratio: 5 / 4; }
.pk-round-28c { position: relative; aspect-ratio: 4 / 3; }
.pk-round-28d { position: relative; aspect-ratio: 16 / 9; }

.pk-aspect-34 { position: relative; aspect-ratio: 3 / 4; overflow: hidden; border-radius: 1.5rem; box-shadow: 0 10px 26px -18px rgba(28,26,24,.22); }
.pk-aspect-34 .elementor-widget-image, .pk-aspect-34 .elementor-widget-image img { width: 100% !important; height: 100% !important; object-fit: cover !important; }
@media (min-width: 768px) {
  .pk-stagger-down { margin-top: 3rem; }
}

/* Sticker badges (spin-slow) that sit inside an aspect-ratio image wrapper
 * (e.g. the Any Occasion badge inside .pk-round-32's ambience photo) would
 * otherwise be caught by that wrapper's `img { width/height:100% }` cover
 * rule meant for the PHOTO, not the badge -- both are img descendants of
 * the same container. This wins on source order (same specificity + both
 * !important) to keep the badge at its own intended fixed size. */
.pk-round-28 .spin-slow, .pk-round-28 .spin-slow img,
.pk-round-32 .spin-slow, .pk-round-32 .spin-slow img,
.pk-aspect-34 .spin-slow, .pk-aspect-34 .spin-slow img,
.pk-aspect-45 .spin-slow, .pk-aspect-45 .spin-slow img,
.pk-aspect-56 .spin-slow, .pk-aspect-56 .spin-slow img {
  width: 96px !important;
  height: 96px !important;
  object-fit: contain !important;
  border-radius: 0 !important;
}

/* Hero video mute-toggle button is icon-only in the source (Lovable's
 * aria-label attribute has no Elementor Button-widget equivalent control),
 * so the widget's own 'text' field carries the real accessible label and
 * this rule visually hides it while keeping it in the accessibility tree --
 * the standard sr-only technique, not a layout hack. */
.elementor-element-lwc0000m7 .elementor-button-text {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
  padding: 0;
  margin: -1px;
}

/* Lovable's live reference site does NOT show a glass/blur backdrop on
 * the header when scrolled -- verified directly (backdrop-filter:none at
 * every scroll depth on the real site). Only the pink pill itself shrinks.
 * Some leftover classes (bg-ivory/92, backdrop-blur-md, border-b
 * border-border/70) don't match that reference behavior -- neutralized
 * here so only the pill-shrink animation remains, matching Lovable
 * exactly per explicit user direction. */
.pk-header-root.pk-scrolled {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  background: transparent !important;
  border-bottom: 0 !important;
}

/* Nav links use Elementor's native Button widget, which has no opacity-on-
 * hover control (only color/background). Source's nav links use
 * `transition-opacity hover:opacity-70` (150ms) -- confirmed via computed-
 * style hover capture on the live Lovable header. */
.pk-header-nav .elementor-button-link {
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
}
.pk-header-nav .elementor-button-link:hover {
  opacity: 0.7;
}
/* Same hover:opacity-70 convention applies to the mobile/overlay menu's
 * plain-text links (nav list + Visit/Reach-us/Order-online panels) and to
 * the footer's nav-column button-widget links -- confirmed via computed-
 * style hover capture on the live Lovable site for both surfaces. Scoped to
 * these two containers (not globally to .elementor-button-link) because
 * that class is also used by the site's filled pill CTAs, which use their
 * own translateY hover treatment (.pk-pill-btn) instead. */
.pk-mobile-toggle .elementor-tab-content a,
#elementor-tab-content-2631 a {
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
}
.pk-mobile-toggle .elementor-tab-content a:hover,
#elementor-tab-content-2631 a:hover {
  opacity: 0.7;
}
footer .elementor-button-link {
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
}
footer .elementor-button-link:hover {
  opacity: 0.7;
}

/* The "Made for communities" spinning sticker badge is a raw HTML widget
 * whose own Elementor wrapper (.elementor-element-frsticker1) establishes a
 * new positioning context (Elementor sets position:relative on e-con grid
 * children) with zero height, since its only child is position:absolute
 * and contributes no height. bottom:24px/right:24px inside the widget's
 * markup then anchors to that zero-height box at the TOP of the grid cell
 * instead of the intended containing block -- the full-height photo
 * container (.elementor-element-fr0008, also position:relative). Forcing
 * the wrapper back to static lets the inner absolute div's containing
 * block bubble up to fr0008 as intended. */
.elementor-element-frsticker1,
.elementor-element-aboutScroll1 {
  position: static !important;
}

/* Decorative line-art doodles (hero + Enquire-form card) are desktop-only
 * in the source (`hidden lg:block`, confirmed via computed-style capture
 * of the live Lovable page). */
.pk-doodle {
  display: none;
}
@media (min-width: 1024px) {
  .pk-doodle {
    display: block;
  }
}

/* About hero heading has no native Elementor max-width control at this
 * font size, so at wide viewports it wraps as "...EVERYDAY" / "LIFE"
 * instead of the source's "...FOR" / "EVERYDAY LIFE" (confirmed via
 * computed-style capture of the live Lovable page: max-width:1024px). */
.pk-about-h1 .elementor-heading-title {
  max-width: 1024px;
}

/* Contact hero H1 needs center alignment matching the source's text-center
 * hero card; Elementor's native "align" heading control isn't registered
 * in this install (confirmed: no elementor-align-center class in output),
 * so applying directly. */
.elementor-element-lwc0000dl {
  text-align: center;
  width: 100% !important;
}
.elementor-element-lwc0000dj {
  text-align: center;
  width: 100%;
}
.elementor-element-lwc0000dj .elementor-heading-title {
  max-width: 64rem;
  margin: 0 auto;
}

.pk-menu-grid {
  grid-template-columns: repeat(3, 1fr) !important;
}
@media (max-width: 1023px) {
  .pk-menu-grid {
    grid-template-columns: repeat(2, 1fr) !important;
  }
}
@media (max-width: 639px) {
  .pk-menu-grid {
    grid-template-columns: repeat(1, 1fr) !important;
  }
}

.pk-link-swiggy,
.pk-link-zomato,
.pk-link-order {
  transition: transform .3s ease, box-shadow .3s ease, background-color .3s ease, color .3s ease;
}
.pk-link-swiggy:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(0,0,0,.12);
  background-color: rgba(252,128,25,.1) !important;
}
.pk-link-zomato:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(0,0,0,.12);
  background-color: rgba(226,55,68,.1) !important;
}
.pk-link-order:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(0,0,0,.12);
  background-color: #1C1A18 !important;
  color: #FAFAF7 !important;
}
.pk-link-swiggy:focus-visible,
.pk-link-zomato:focus-visible,
.pk-link-order:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px #FAFAF7, 0 0 0 4px #ED286E;
}

.pk-aspect-45 {
  isolation: isolate;
}
.pk-aspect-45::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0,0,0,.82) 0%, rgba(0,0,0,.55) 28%, rgba(0,0,0,.15) 55%, rgba(0,0,0,0) 72%);
  pointer-events: none;
  z-index: 1;
}
.pk-aspect-45 .elementor-widget-heading,
.pk-aspect-45 .elementor-widget-html {
  position: relative;
  z-index: 2;
}
.pk-aspect-45 .elementor-heading-title {
  text-shadow: 0 1px 3px rgba(0,0,0,.5);
}

/* About hero scrim.
 * Previously a fully opaque brand-pink ramp, which was tuned for the old
 * bright hero photo and rendered any image behind it as a flat pink field.
 * The hero now uses a dark, low-lit diner photo, so the ramp is a dark base
 * (legibility) plus a light pink tint (brand cast) — the photograph reads
 * through and white hero copy still measures well past WCAG AA. */
.pk-hero-scrim-strong {
  background-image:
    linear-gradient(to top, rgba(26,8,16,.90) 0%, rgba(26,8,16,.70) 34%, rgba(26,8,16,.34) 66%, rgba(26,8,16,0) 100%),
    linear-gradient(to top, rgba(237,40,110,.34) 0%, rgba(237,40,110,.20) 55%, rgba(237,40,110,.06) 100%) !important;
}

.pk-header-nav a,
#elementor-tab-content-2631 a,
.elementor-element-6390396 .elementor-button-link {
  font-weight: 500 !important;
  font-size: 24px !important;
}

.testimonial-track,
.team-track {
  animation-play-state: running;
}
.testimonial-track:hover,
.testimonial-track:focus-within,
.team-track:hover,
.team-track:focus-within {
  animation-play-state: paused;
}


/* Menu page: hide dish cards that only have the PIRO placeholder (no real photo) at every breakpoint */
#pk-menu-root .pk-menu-card.pk-card-noimg{display:none!important;}
@media (max-width:1024px){#pk-menu-root .pk-menu-card.pk-card-noimg{display:none!important;}}
@media (max-width:767px){#pk-menu-root .pk-menu-card.pk-card-noimg{display:none!important;}}

/* Home / brand-story: pin the two photo cards to the aspect ratio they had
 * before their images were swapped. Without this the container height is
 * driven by the new file intrinsic ratio (the Rhythm photo is portrait),
 * which changes the section height. */
.pk-ar-43 { aspect-ratio: 4 / 3; }
.pk-ar-54 { aspect-ratio: 5 / 4; }
.pk-ar-43 > .elementor-widget-image, .pk-ar-54 > .elementor-widget-image { height: 100% !important; }
.pk-ar-43 > .elementor-widget-image img, .pk-ar-54 > .elementor-widget-image img { width: 100% !important; height: 100% !important; object-fit: cover !important; object-position: center center !important; }

/* Home / Everyday Menu: continuous right-to-left food-photo marquee in the
 * right column. The track holds two identical copies of the image set and
 * translates by exactly -50%, so the loop restarts on a pixel-identical
 * frame. Spacing is margin-right (not gap) so -50% is exactly one set. */
.pk-menu-marquee { position: relative; width: 100%; overflow: hidden; padding: 14px 0; }
.pk-menu-marquee__track { display: flex; width: max-content; will-change: transform; animation: pk-menu-marquee-scroll 64s linear infinite; }
.pk-menu-marquee:hover .pk-menu-marquee__track, .pk-menu-marquee:focus-within .pk-menu-marquee__track { animation-play-state: paused; }
.pk-menu-marquee__item { flex: 0 0 auto; width: 296px; aspect-ratio: 3 / 4; margin-right: 16px; border-radius: 1.5rem; overflow: hidden; box-shadow: 0 10px 26px -18px rgba(28,26,24,.22); }
.pk-menu-marquee__item img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center center; }
@keyframes pk-menu-marquee-scroll { from { transform: translate3d(0,0,0); } to { transform: translate3d(-50%,0,0); } }
@media (max-width:1024px){ .pk-menu-marquee__item { width: 248px; margin-right: 14px; } }
@media (max-width:767px){ .pk-menu-marquee__item { width: 200px; margin-right: 12px; } .pk-menu-marquee { padding: 10px 0; } }
@media (prefers-reduced-motion: reduce){ .pk-menu-marquee__track { animation: none; } }

/* ------------------------------------------------------------------
 * Footer refinements (2026-08-10)
 * ------------------------------------------------------------------ */

/* Brand statement. It fills the empty space that already existed between
 * the footer logo and the spinning "come hungry" badge, as a flex sibling
 * of the logo inside the existing brand row -- no new section, no extra
 * wrapper. The right margin keeps it clear of the badge, which is
 * absolutely positioned (140px wide, 8px inset) and therefore contributes
 * no width of its own to the row. */
.pk-footer-brandrow > .elementor-widget-image {
  /* The logo widget's width lives on the <img>, not on its wrapper, so in a
   * flex row the wrapper would shrink and let the image overlap the
   * statement. Pin it to its content width. */
  flex: 0 0 auto;
}
.pk-footer-statement {
  /* flex:1 makes the box span exactly the gap between the logo and the
   * badge, so text-align:center centres the statement between the two.
   * The row's align-items:center centres it against the logo's height.
   * The right margin clears the badge: it is 140px wide at right:8px, but
   * it counter-rotates continuously, so its swept bounding box reaches
   * 140 * sqrt(2) = 198px. 206px reserves the full sweep. */
  flex: 1 1 auto;
  min-width: 0;
  text-align: center;
  max-width: none;
  margin: 0 206px 0 0;
}
.pk-footer-statement p {
  /* Display tier: Oswald 400 in brand pink, at the 52px the client asked
   * for. Steps down below 1280px so it never outgrows the gap between the
   * logo and the badge. */
  font-family: Oswald, Inter, sans-serif;
  font-size: 52px;
  font-weight: 400;
  line-height: 1.1;
  color: #ED286E;
  margin: 0;
}
@media (max-width: 1280px) {
  .pk-footer-statement p { font-size: clamp(2rem, 4vw, 52px); }
}
@media (max-width: 1024px) {
  .pk-footer-statement p { font-size: clamp(1.25rem, 2.4vw, 2rem); }
}
@media (max-width: 767px) {
  /* The badge is hidden below 768px, so the row switches to column via
   * Elementor's own flex_direction_mobile control and the statement stacks
   * under the logo at full width. */
  .pk-footer-statement { margin: 0.25rem 0 0; text-align: left; }
  .pk-footer-statement p { font-size: clamp(1.25rem, 6vw, 1.75rem); }
}

/* The footer nav columns' large-text accessibility bump further up this
 * file used to target every <a> inside the footer grid, which also caught
 * the Follow / Order-online / Reach-us list links and rendered them at
 * 24px. That selector is now scoped to the nav button widgets; these two
 * lists are body-tier text, so they are pinned to their own 14px scale
 * here. display:flex on the <li> removes the inline-flex baseline gap so
 * the 12px column gap is the only spacing between items. */
.elementor-element-1101860 a,
.elementor-element-4493643 a {
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: 1.4 !important;
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
}
.elementor-element-1101860 li,
.elementor-element-4493643 li {
  display: flex;
  align-items: center;
}
.elementor-element-1101860 a:hover,
.elementor-element-4493643 a:hover { opacity: 0.7; }

/* "Our outlets" list: the HSR entry links to Google Maps. It sits in its
 * own widget, so the hover convention used by the Follow / Reach-us lists
 * above doesn't reach it -- restated here rather than widening those
 * selectors, which is what caused the 24px font-size regression before. */
.elementor-element-7845276 a {
  transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
}
.elementor-element-7845276 a:hover {
  opacity: 0.7;
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ------------------------------------------------------------------
 * Header + Franchise refinements (2026-08-10)
 * ------------------------------------------------------------------ */

/* Hamburger centring. Elementor's own toggle stylesheet pulls the icon
 * 5px left (margin-inline-start:-5px) so that, in a normal accordion, the
 * glyph optically aligns with the tab's title text. Our title is visually
 * hidden and the trigger is a 44px circle, so the offset only decentres
 * the three bars: the icon span is already centred on the circle by the
 * tab's flexbox, then the svg slides 5px off it. Zeroing the margin puts
 * the bars on the circle's centre in both axes at every breakpoint. */
.pk-mobile-toggle .elementor-toggle-icon svg {
  margin: 0 !important;
  display: block;
}

/* Franchise hero -- photo/background blend.
 * The scrim (fr0010) is a raw-HTML widget whose Elementor wrapper is
 * position:relative with zero height, since its only child is absolute.
 * The overlay's inset:0 therefore resolved against that empty box and the
 * gradient never painted at all -- the photo met the charcoal copy panel
 * on a hard vertical edge. Same wrapper bug as .elementor-element-frsticker1
 * above; forcing the wrapper static lets inset resolve against the photo
 * container (.elementor-element-fr0008, position:relative). That
 * container has no border, so its padding box -- the containing block for
 * inset -- is its full border box: inset:0 covers the photo exactly,
 * measured live at 618,174 762x774 for both. */
.elementor-element-fr0010 {
  position: static !important;
}
.pk-hero-scrim {
  pointer-events: none;
  position: absolute;
  inset: 0;
  z-index: 1;
  /* Stacked layout. The source blends the photo into the charcoal copy
   * panel it sits against; the source stacks photo-above-copy (order-1)
   * and so fades upward, but this hero stacks copy-above-photo, so the
   * seam is the photo's TOP edge and the fade is mirrored to match. Using
   * the source's gradient direction verbatim here would leave a hard edge
   * on exactly the side that needs to disappear. The second, lighter
   * bottom layer keeps the "made for communities" badge legible, matching
   * the source's from-charcoal/70 bottom weighting. */
  background:
    linear-gradient(to bottom,
      #1C1A18 0%,
      rgba(28, 26, 24, 0.35) 18%,
      rgba(28, 26, 24, 0) 45%),
    linear-gradient(to top,
      rgba(28, 26, 24, 0.55),
      rgba(28, 26, 24, 0) 35%);
}
@media (min-width: 1025px) {
  /* Source: lg:bg-gradient-to-r lg:from-charcoal lg:via-charcoal/20
   * lg:to-charcoal/10. Fully opaque charcoal at the photo's left edge is
   * what makes it read as one continuous panel with the copy column.
   * 1025px, not the source's 1024px lg breakpoint: this hero's two-column
   * layout is Elementor-driven and only engages above 1024 (measured
   * side-by-side at 1025, stacked at 1024), so switching the gradient at
   * 1024 would paint a horizontal fade across a vertically stacked hero. */
  .pk-hero-scrim {
    background: linear-gradient(to right,
      #1C1A18,
      rgba(28, 26, 24, 0.2),
      rgba(28, 26, 24, 0.1));
  }
}

/* FOCO model -- background photo blend.
 * Same zero-height wrapper bug on fr0094: the photo's inset resolved
 * against the empty widget box, so it began 112px below the section top
 * and, being over-constrained (top:0 + bottom:0 + the theme's
 * img{height:auto}), sized itself from its own 4:3 intrinsic ratio rather
 * than filling the section -- a floating rectangle with hard edges. A
 * static wrapper plus an explicit height reproduces the source's
 * "inset-y-0 right-0 h-full w-1/2", and the scrim is the source's
 * "bg-gradient-to-r from-charcoal via-charcoal/95 to-transparent".
 * Both are lg-only in the source (hidden lg:block). */
.elementor-element-fr0094 {
  position: static !important;
}
.pk-foco-bg,
.pk-foco-scrim {
  display: none;
  pointer-events: none;
  position: absolute;
  z-index: 0;
}
.pk-foco-bg {
  inset: 0 0 0 auto;
  width: 50%;
  /* !important: the theme's global img{height:auto} outranks this by
   * source order, and without an explicit height the over-constrained
   * top:0/bottom:0 box falls back to the file's 4:3 intrinsic ratio
   * (measured 540px against an 835px section). */
  height: 100% !important;
  object-fit: cover;
  opacity: 0.3;
}
.pk-foco-scrim {
  inset: 0;
  background: linear-gradient(to right,
    #1C1A18 0%,
    rgba(28, 26, 24, 0.95) 50%,
    rgba(28, 26, 24, 0) 100%);
}
@media (min-width: 1024px) {
  .pk-foco-bg,
  .pk-foco-scrim { display: block; }
}

/* "How it works" -- soft brand glow bleeding in from the left. Source:
 * <div class="pointer-events-none absolute -left-24 top-1/3 hidden
 * h-[28rem] w-[28rem] rounded-full bg-piro/12 blur-[120px] lg:block">.
 * The section is already position:relative + overflow:hidden, so a
 * pseudo-element reproduces it without adding a widget. */
.elementor-element-fr0068::before {
  content: "";
  display: none;
  position: absolute;
  left: -96px;
  top: 33.333%;
  height: 28rem;
  width: 28rem;
  border-radius: 9999px;
  background: rgba(237, 40, 110, 0.12);
  filter: blur(120px);
  pointer-events: none;
  z-index: 0;
}
@media (min-width: 1024px) {
  .elementor-element-fr0068::before { display: block; }
}

/* 2026-08-10 — About page "Our values" cards (valcard0-3: 01 What we are,
 * 02 Why we exist, 03 What we serve, 04 How it feels).
 * Client asked to hide the small scalloped thumbnail in each card head for
 * now; the artwork may be replaced later. The markup is left intact inside
 * the raw-HTML widgets, so re-enabling is a matter of deleting this rule. */
#content .pk-valcard-thumb,
.pk-valcard-thumb {
  display: none !important;
}

/* ------------------------------------------------------------------
 * 2026-08-10 — Home page, MOBILE ONLY (<= 767px, Elementor's mobile
 * breakpoint; 768px+ is already the two-column desktop layout).
 *
 * "Not an occasion" (lwc0000op) and "Rhythm of the day" (lwc0000po)
 * size themselves from .pk-ar-43 / .pk-ar-54 on mobile, which yields
 * ~245-306px depending on viewport width. Client asked for exactly
 * 460px. The aspect-ratio must be cancelled or it keeps winning.
 *
 * Desktop is untouched: .pk-ar-43 / .pk-ar-54 and the Elementor
 * min_height/max_height settings still govern at 768px and above.
 * ------------------------------------------------------------------ */
@media (max-width: 767px) {
  .elementor-element-lwc0000op,
  .elementor-element-lwc0000po {
    aspect-ratio: auto !important;
    height: 460px !important;
    min-height: 460px !important;
    max-height: 460px !important;
  }
  /* The image widget is a flex child of the container above; it needs a
   * definite height of its own before the <img> can resolve height:100%. */
  .elementor-element-lwc0000op > .elementor-widget-image,
  .elementor-element-lwc0000po > .elementor-widget-image,
  .elementor-element-lwc0000op > .elementor-widget-image > .elementor-widget-container,
  .elementor-element-lwc0000po > .elementor-widget-image > .elementor-widget-container {
    height: 100% !important;
  }
  /* !important is required: the theme's global `img { height: auto }`
   * otherwise wins on source order and the image collapses. */
  .elementor-element-lwc0000op > .elementor-widget-image img,
  .elementor-element-lwc0000po > .elementor-widget-image img {
    height: 100% !important;
    width: 100% !important;
    object-fit: cover;
  }
}

