/* GENERATED by tools/festive/build.py from tools/festive/js/page.css, the tile art and js/stall.css. */
/* ═══════════════ FESTIVE & POOJA (build 96) · the approved mock on the site's shell ═══════════════
   Scoped to .fest: the header, footer and cart keep the site's own tokens. The waves behind the page are the
   site's own, in Diwali colours (partials/stage-bg-festive.php). Marigold and vermilion by day; maroon and indigo
   night with diya light. Boldness lives in the hero and the stall; everything else stays calm and scannable. */
@font-face{font-family:"Rozha One";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/rozha-one-devanagari.woff2") format("woff2");
  unicode-range:U+0900-097F,U+1CD0-1CF4,U+1CF7-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF}
@font-face{font-family:"Rozha One";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/rozha-one-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
.fest{
  --ink:#2A0F14;--ink-2:#5C2B2B;--ink-3:#7A4A3E;
  --maroon:#7A1020;--vermil:#C8321F;--mari:#F5A21B;--gold:#C9932F;--gold-hi:#F2C14E;--leaf:#2F7D43;
  --pane:rgb(255 248 236 / .52);--pane-2:rgb(255 248 236 / .70);--edge:rgb(201 147 47 / .55);--edge-soft:rgb(122 16 32 / .14);
  --shine:rgb(255 255 255 / .75);--fshadow:0 18px 40px -26px rgb(90 20 10 / .55);
  --cta:#B3261E;--on-cta:#FFF7EA;--track:rgb(122 16 32 / .12);--on-maroon:#FFF4DE;
  --f-display:"Rozha One","Tiro Devanagari Hindi",Georgia,serif;
  --f-body:"Inter","Inter Fallback","Inter Fallback Android",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  color:var(--ink);display:grid;gap:18px;padding-block:0 48px}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .fest{
  --ink:#FFF1DE;--ink-2:#F1D3B6;--ink-3:#D9B392;--maroon:#FFB3A1;--vermil:#FF8A6B;--mari:#FFB547;--gold:#E7B65A;--gold-hi:#FFD27A;--leaf:#7CC88A;
  --pane:rgb(40 12 30 / .48);--pane-2:rgb(40 12 30 / .66);--edge:rgb(231 182 90 / .45);--edge-soft:rgb(255 210 160 / .14);
  --shine:rgb(255 220 170 / .22);--fshadow:0 18px 40px -24px rgb(0 0 0 / .8);
  --cta:#F5A21B;--on-cta:#2A0F06;--track:rgb(255 210 160 / .16);--on-maroon:#2A0F14}}
:root[data-theme="dark"] .fest{
  --ink:#FFF1DE;--ink-2:#F1D3B6;--ink-3:#D9B392;--maroon:#FFB3A1;--vermil:#FF8A6B;--mari:#FFB547;--gold:#E7B65A;--gold-hi:#FFD27A;--leaf:#7CC88A;
  --pane:rgb(40 12 30 / .48);--pane-2:rgb(40 12 30 / .66);--edge:rgb(231 182 90 / .45);--edge-soft:rgb(255 210 160 / .14);
  --shine:rgb(255 220 170 / .22);--fshadow:0 18px 40px -24px rgb(0 0 0 / .8);
  --cta:#F5A21B;--on-cta:#2A0F06;--track:rgb(255 210 160 / .16);--on-maroon:#2A0F14}
.fest .breadcrumb{margin-bottom:-6px}
.fest :is(.fhero,.fbar,.fs-stall){background:linear-gradient(160deg,var(--pane-2),var(--pane) 60%);border:1px solid var(--edge);
  box-shadow:inset 0 1px 0 var(--shine),var(--fshadow);-webkit-backdrop-filter:saturate(1.6) brightness(1.04);backdrop-filter:saturate(1.6) brightness(1.04)}
.fest a:not(.btn){color:var(--maroon)}
.fest :is(button,a,[tabindex]):focus-visible{outline:3px solid var(--mari);outline-offset:2px}
/* the page's own buttons: the site's .btn, in festive colours */
.fest .btn--accent{background:var(--cta);border-color:var(--cta);color:var(--on-cta)}
.fest .btn--accent:hover{filter:brightness(1.06)}

/* ── hero · the lockup and the doorway share the pane; the countdown sits in a band along the bottom edge ── */
.fhero{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"copy art" "band band";
  column-gap:32px;border-radius:26px}
.fhero__copy{grid-area:copy;align-self:center;padding:44px 0 36px 40px;display:grid;gap:20px;justify-items:start;position:relative;z-index:2}
.fhero__lockup{display:grid;gap:2px}
.fhero__greet{margin:0;font:400 clamp(28px,3.4vw,40px)/1.15 var(--f-display);color:var(--vermil)}
.fhero h1{margin:0;font:400 clamp(44px,6.4vw,76px)/.98 var(--f-display);color:var(--maroon);letter-spacing:-.012em;text-wrap:balance}
.fhero h1 span{color:var(--vermil)}
.fhero__lede{margin:0;font-size:17.5px;line-height:1.55;color:var(--ink-2);max-width:40ch}
.fhero__facts{margin:0;display:flex;flex-wrap:wrap;gap:8px 22px;font-weight:700;color:var(--ink)}
.fhero__facts span{display:inline-flex;align-items:center;gap:9px}
.fhero__facts span::before{content:"";width:8px;height:8px;border-radius:2px;transform:rotate(45deg);background:var(--mari);box-shadow:0 0 0 3px rgb(245 162 27 / .22)}
.fhero__art{grid-area:art;position:relative;z-index:1;display:grid;place-items:center;padding:28px 36px 12px 0}
.fhero__art::before{content:"";position:absolute;inset:12% 6% 6% 0;border-radius:50%;background:radial-gradient(closest-side,rgb(255 176 46 / .28),transparent);pointer-events:none}
.fhero__stage{position:relative;width:100%;max-width:500px;aspect-ratio:96/66}
.fhero__stage svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.fhero__cat{position:absolute;left:-14.583%;top:-39.394%;width:129.167%;height:142.424%;pointer-events:none}
.fhero__sky{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}
.fhero__band{grid-area:band;position:relative;z-index:2;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;
  padding:16px 40px 18px;border-top:1px solid var(--edge);background:linear-gradient(90deg,var(--track),transparent 70%)}
.fhero__count{margin:0;display:flex;align-items:baseline;gap:12px}
.fhero__count b{font:400 40px/1 var(--f-display);color:var(--vermil);font-variant-numeric:tabular-nums}
.fhero__count span{font-weight:600;color:var(--ink-2)}
.fp-art{color:var(--vermil);--ca-ink:#141A22;--ca-line:var(--gold);--ca-metal:var(--gold);--ca-blush:#FF7E9D}

/* ── the filter bar ── */
.fbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;padding:12px 14px;border-radius:18px}
.fbar__chips{display:flex;flex-wrap:wrap;gap:8px}
.fs-chip{appearance:none;border:1px solid var(--edge);background:var(--pane);color:var(--ink);font:600 14px/1 var(--f-body);padding:8px 14px;border-radius:999px;min-height:44px;cursor:pointer}
.fs-chip[aria-pressed="true"]{background:var(--maroon);border-color:var(--maroon);color:var(--on-maroon)}
.fs-chip i{font-style:normal;opacity:.7;margin-left:4px;font-variant-numeric:tabular-nums}
.fbar p{margin:0;font-size:14px;color:var(--ink-2)}
.fbar p a{font-weight:700}

/* ── before the script draws the stall (and without it): the same pieces as a plain list of links ── */
.fs-list{list-style:none;margin:0;padding:12px 28px 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,150px),1fr));gap:16px}
.fs-list a{display:grid;gap:4px;justify-items:center;text-align:center;text-decoration:none;color:var(--ink)}
.fs-list img{width:auto;max-width:100%;height:120px;object-fit:contain}
.fs-list b{font-size:14px;line-height:1.3}
.fs-list span{font-weight:700;color:var(--maroon)}.fs-list i{font-style:normal;font-weight:500;color:var(--ink-3);font-size:12.5px}
.fs-empty{margin:0;padding:24px 28px;color:var(--ink-2)}
.fs-tag__oos{display:block;margin-top:2px;font:700 10.5px/1.2 var(--f-body);color:#7A1020;text-transform:uppercase;letter-spacing:.04em}

/* ── rangoli divider ── */
.frang{height:18px;opacity:.75;background:
  radial-gradient(circle at 9px 9px,var(--mari) 3px,transparent 3.5px) 0 0/36px 18px,
  radial-gradient(circle at 27px 9px,var(--vermil) 2px,transparent 2.5px) 0 0/36px 18px}

/* ── ordering · 7 Oct 2026: Diwali night. A marigold-and-mango-leaf toran along the top edge, three lit doorways
   (arched like the gokhlu niches of the stall), a diya at each threshold, the price promise as a gold ribbon.
   The panel is night in both themes: deep maroon with diya light rising from below, cream and gold on it. ── */
.fhow{--n-bg:#3E0916;--n-bg2:#1E0710;--n-ink:#FFF1DE;--n-ink2:#F3D2B3;--n-gold:#F2C14E;--n-edge:rgb(242 193 78 / .55);
  position:relative;overflow:hidden;border-radius:22px;padding:0 0 22px;color:var(--n-ink);
  background:radial-gradient(120% 70% at 50% 108%,rgb(255 150 40 / .34),transparent 62%),
             radial-gradient(60% 40% at 12% 18%,rgb(200 50 31 / .30),transparent 70%),
             linear-gradient(180deg,var(--n-bg),var(--n-bg2));
  border:1px solid var(--n-edge);box-shadow:inset 0 1px 0 rgb(255 220 160 / .18),var(--fshadow)}
.fhow::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;background:
  radial-gradient(1.6px 1.6px at 8% 32%,#FFE7A8,transparent),radial-gradient(1.4px 1.4px at 23% 12%,#FFE7A8,transparent),
  radial-gradient(1.8px 1.8px at 41% 26%,#FFD27A,transparent),radial-gradient(1.4px 1.4px at 63% 14%,#FFE7A8,transparent),
  radial-gradient(1.6px 1.6px at 79% 30%,#FFD27A,transparent),radial-gradient(1.2px 1.2px at 92% 18%,#FFE7A8,transparent)}
.ftoran{display:block;width:100%;height:64px;margin-bottom:-8px;filter:drop-shadow(0 6px 6px rgb(0 0 0 / .35))}
.fhow h2{position:relative;z-index:1;margin:0;padding:6px 32px 0;text-align:center;font:400 clamp(30px,3.4vw,42px)/1.08 var(--f-display);
  color:var(--n-gold);text-wrap:balance;text-shadow:0 2px 18px rgb(255 150 40 / .45)}
.fhow__paths{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;padding:24px 32px 8px}
.fdoor{position:relative;display:grid;align-content:start;justify-items:center;text-align:center;gap:6px;padding:30px 22px 64px;
  border-radius:50% 50% 18px 18px / 120px 120px 18px 18px;padding-top:44px;
  background:radial-gradient(90% 60% at 50% 100%,rgb(255 170 60 / .30),transparent 70%),linear-gradient(180deg,rgb(122 16 32 / .55),rgb(70 10 26 / .55));
  box-shadow:inset 0 0 0 1.5px var(--n-edge),inset 0 0 0 7px rgb(30 7 16 / .55),inset 0 0 0 8px rgb(242 193 78 / .28),0 18px 30px -22px #000}
.fdoor__art{width:68px;height:68px;color:var(--n-gold);margin-bottom:4px;filter:drop-shadow(0 0 10px rgb(255 190 80 / .35))}
.fdoor b{font:400 22px/1.15 var(--f-display);color:var(--n-ink)}
.fdoor p{margin:2px 0 0;color:var(--n-ink2);font-size:15px;line-height:1.55;max-width:34ch}
.fdoor__diya{position:absolute;left:50%;bottom:14px;width:46px;height:34px;transform:translateX(-50%)}
.fdoor__diya::before{content:"";position:absolute;left:0;right:0;bottom:0;height:16px;border-radius:4px 4px 23px 23px / 4px 4px 16px 16px;
  background:linear-gradient(180deg,#E36A2C,#9C3412);box-shadow:inset 0 2px 0 rgb(255 210 150 / .5)}
/* the diya: lights when the doorway comes into view (festive.js adds .is-lit), then breathes: the flame flickers on
   an uneven loop, its halo swells and dims with it, and a few embers drift up and go out. Reduced motion: lit, still. */
.fdoor__diya i{position:absolute;left:50%;pointer-events:none}
.fdoor__diya .fd-flame{bottom:14px;width:13px;height:22px;margin-left:-6.5px;border-radius:50% 50% 50% 50% / 64% 64% 36% 36%;
  background:radial-gradient(circle at 50% 74%,#FFFBE0 0 20%,#FFD04A 42%,#FF8A1F 72%,rgb(255 90 20 / 0) 84%);transform-origin:50% 100%;
  filter:drop-shadow(0 0 6px rgb(255 190 60 / .9))}
.fdoor__diya .fd-glow{bottom:-6px;width:96px;height:80px;margin-left:-48px;border-radius:50%;
  background:radial-gradient(closest-side,rgb(255 176 60 / .5),rgb(255 120 30 / .14) 55%,transparent)}
.fdoor__diya .fd-em{bottom:34px;width:3px;height:3px;margin-left:-1.5px;border-radius:50%;background:#FFD27A;box-shadow:0 0 6px 2px rgb(255 190 80 / .8);opacity:0}
.fdoor .fd-flame{animation:fdIgnite .7s cubic-bezier(.2,1.4,.4,1) both,fdFlame 1.9s ease-in-out .7s infinite}
.fdoor .fd-glow{animation:fdGlowIn .9s ease-out both,fdGlow 1.9s ease-in-out .9s infinite}
.fdoor .fd-em{animation:fdEmber 2.6s ease-out .6s infinite both}
.fdoor .fd-em:nth-of-type(4){animation-delay:1.5s;margin-left:2px}.fdoor .fd-em:nth-of-type(5){animation-delay:2.3s;margin-left:-5px}
/* until festive.js sees the doorway (it adds .fd-wait first, .is-lit on view), the lamp waits unlit; without the script it is simply lit */
.fd-wait .fdoor:not(.is-lit) .fd-flame{transform:scale(0);animation:none}.fd-wait .fdoor:not(.is-lit) .fd-glow{opacity:0;animation:none}.fd-wait .fdoor:not(.is-lit) .fd-em{animation:none}
@keyframes fdIgnite{0%{transform:scale(0)}60%{transform:scale(1.25,1.35)}100%{transform:scale(1)}}
@keyframes fdFlame{0%,100%{transform:scale(1) skewX(0)}18%{transform:scale(.92,1.12) skewX(-4deg)}36%{transform:scale(1.06,.94) skewX(3deg)}
  52%{transform:scale(.96,1.08) skewX(-2deg)}70%{transform:scale(1.03,.97) skewX(4deg)}86%{transform:scale(.97,1.05) skewX(-1deg)}}
@keyframes fdGlowIn{from{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}
@keyframes fdGlow{0%,100%{opacity:1;transform:scale(1)}35%{opacity:.78;transform:scale(.93)}65%{opacity:.95;transform:scale(1.04)}}
@keyframes fdEmber{0%{opacity:0;transform:translate(0,0) scale(1)}12%{opacity:1}100%{opacity:0;transform:translate(6px,-34px) scale(.3)}}
.fhow__promise{position:relative;z-index:1;margin:18px auto 0;width:fit-content;max-width:calc(100% - 40px);display:flex;align-items:center;gap:14px;
  padding:12px 22px 12px 12px;border-radius:999px;color:#3A0A12;font-size:15px;
  background:linear-gradient(180deg,#FFE2A0,#E9B24E);box-shadow:inset 0 1px 0 #FFF4D4,0 10px 22px -12px #000}
.fhow__promise b{color:#5A0E1E;margin-right:6px}
.fhow__seal{flex:none;display:grid;place-items:center;width:40px;height:40px;border-radius:50%;font:400 22px/1 var(--f-display);color:#FFF4DE;
  background:radial-gradient(circle at 35% 30%,#E0620E,#9A1B1B);box-shadow:0 0 0 2px #FFF1C8,0 4px 10px -4px rgb(90 14 30 / .7)}

/* ── questions before ordering: the red chopda. A cloth-bound ledger with gold stitching; inside, a ruled page with a
   red margin, शुभ लाभ written in red ink at the top as on the first page opened at Diwali. Answers always visible. ── */
.ffaq{--pg:#FFF8EA;--pg-rule:rgb(122 16 32 / .045);--pg-ink:#2A0F14;--pg-ink2:#5C2B2B;--pg-red:#B3261E;--pg-margin:rgb(200 50 31 / .45);--pg-glow:rgb(255 255 255 / .6);
  position:relative;padding:14px 14px 14px 30px;border-radius:20px;
  background:repeating-linear-gradient(45deg,rgb(0 0 0 / .06) 0 2px,transparent 2px 5px),linear-gradient(160deg,#B3261E,#7A1020 70%);
  box-shadow:inset 0 0 0 1px rgb(255 200 150 / .25),0 22px 40px -24px rgb(60 10 10 / .8)}
.ffaq::before{content:"";position:absolute;left:14px;top:22px;bottom:22px;width:3px;
  background:repeating-linear-gradient(180deg,#F2C14E 0 10px,transparent 10px 18px);border-radius:2px;opacity:.9}
.ffaq__page{position:relative;border-radius:10px 14px 14px 10px;padding:30px 36px 18px 64px;color:var(--pg-ink);
  background:linear-gradient(90deg,transparent 46px,var(--pg-margin) 46px 47.5px,transparent 47.5px 51px,var(--pg-margin) 51px 52px,transparent 52px),
             repeating-linear-gradient(180deg,transparent 0 33px,var(--pg-rule) 33px 34px),
             radial-gradient(120% 90% at 0 0,var(--pg-glow),transparent 60%),var(--pg);
  box-shadow:inset 6px 0 14px -8px rgb(90 30 10 / .35)}
.ffaq__head{display:grid;justify-items:center;gap:2px;text-align:center;padding-bottom:10px}
.ffaq__ink{margin:0;font:400 clamp(26px,3vw,34px)/1.1 var(--f-display);color:var(--pg-red);letter-spacing:.01em}
.ffaq__ink span[aria-hidden]{opacity:.6}
.ffaq__head h2{margin:0;font:400 clamp(26px,2.8vw,34px)/1.1 var(--f-display);color:#7A1020}
.ffaq__list{margin:0;display:grid}
.ffaq__qa{position:relative;padding:14px 0;border-top:1px dashed rgb(122 16 32 / .2)}
.ffaq__qa:first-child{border-top:0}
.ffaq__qa::before{content:"";position:absolute;left:-30px;top:21px;width:9px;height:9px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%,#FF6A4D,#B3261E 70%);box-shadow:0 0 0 2px rgb(179 38 30 / .15)}
.ffaq__qa dt{font-weight:700;font-size:17px;line-height:1.35;color:var(--pg-ink)}
.ffaq__qa dd{margin:6px 0 0;max-width:70ch;font-size:15.5px;line-height:1.6;color:var(--pg-ink2)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .ffaq{--pg:#2B1712;--pg-rule:rgb(255 210 160 / .05);--pg-ink:#FFF1DE;--pg-ink2:#E8C9AC;--pg-red:#FF8A6B;--pg-margin:rgb(255 120 90 / .35);--pg-glow:rgb(255 200 140 / .05)}
  :root:not([data-theme="light"]) .ffaq__head h2{color:#FFD27A}}
:root[data-theme="dark"] .ffaq{--pg:#2B1712;--pg-rule:rgb(255 210 160 / .05);--pg-ink:#FFF1DE;--pg-ink2:#E8C9AC;--pg-red:#FF8A6B;--pg-margin:rgb(255 120 90 / .35);--pg-glow:rgb(255 200 140 / .05)}
:root[data-theme="dark"] .ffaq__head h2{color:#FFD27A}

/* ── the fitting's own controls ── */
.fest .fs-seg{display:inline-flex;border:1px solid var(--edge);border-radius:12px;overflow:hidden;background:var(--pane)}
.fest .fs-seg button{appearance:none;border:0;background:none;color:var(--ink);font:600 14px/1 var(--f-body);padding:9px 13px;min-height:44px;cursor:pointer}
.fest .fs-seg button[aria-pressed="true"]{background:var(--maroon);color:var(--on-maroon)}
.fs-step{display:grid;grid-template-columns:48px 1fr 48px;align-items:center;min-height:48px;border:1.5px solid var(--cta);border-radius:12px;overflow:hidden}
.fs-step__b{appearance:none;border:0;background:var(--track);color:var(--ink);min-height:48px;cursor:pointer;display:grid;place-items:center}
.fs-step__n{text-align:center;font-weight:700}.fs-step__n b{font-variant-numeric:tabular-nums}
.fit__cart,.fit__more{justify-self:start;font-weight:700;font-size:14px}
.fit__oos{margin:0;font-weight:600;color:var(--ink-2)}
.fest .btn--wa svg{flex:none}
.fit .viewer__stage{padding:64px 12px 8px;box-sizing:border-box}

@media (min-width:761px) and (max-width:1023px){.fhow__paths{gap:14px;padding:22px 18px 6px}.fdoor{padding:26px 14px 60px}}
@media (max-width:760px){
  .fhero{grid-template-columns:minmax(0,1fr);grid-template-areas:"art" "copy" "band"}
  .fhero__copy{padding:4px 20px 22px;gap:16px}.fhero__art{padding:20px 20px 0}.fhero__stage{max-width:360px}
  .fhero__band{padding:14px 20px 16px}.fhero__go{width:100%}.fhero__count b{font-size:34px}
  .fhow h2{padding:4px 20px 0}.fhow__paths{grid-template-columns:minmax(0,1fr);gap:16px;padding:18px 16px 4px}
  .fdoor{padding:40px 20px 60px;border-radius:50% 50% 16px 16px / 110px 110px 16px 16px}
  .fhow__promise{border-radius:18px;align-items:flex-start;padding:12px 16px 12px 12px}
  .ffaq{padding:10px 10px 10px 24px}.ffaq::before{left:10px}
  .ffaq__page{padding:24px 18px 12px 46px;background-size:auto}
  .ffaq__page{background:linear-gradient(90deg,transparent 30px,var(--pg-margin) 30px 31.5px,transparent 31.5px),
             repeating-linear-gradient(180deg,transparent 0 33px,var(--pg-rule) 33px 34px),var(--pg)}
  .ffaq__qa::before{left:-25px}
  .fs-list{padding:12px 16px 0;grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (prefers-reduced-motion:reduce){.fest *{scroll-behavior:auto}.fdoor__diya i{animation:none!important}.fd-flame{transform:none!important}.fd-glow{opacity:1!important;transform:none!important}.fd-em{display:none}}
@media (forced-colors:active){.fest :is(.fhero,.fbar,.fs-stall,.fhow,.ffaq,.fdoor,.ffaq__page){border:1px solid CanvasText}.fs-chip[aria-pressed="true"]{forced-color-adjust:none;background:Highlight;color:HighlightText}}

/* ── the Doorway in the hero: the tile's art, moved by script here, so its loops are off ── */

/* ── Festive & Pooja · the three candidates. Same 2.4s clock, rest → anticipation → action → settle,
   transform and opacity only, paused until hover / focus (and played once on scroll-in on touch). */
/* diya: the flame ducks, flares, wavers and settles; the glow breathes with it; two sparks rise */
.fp-art .m-dFlame{transform-origin:32px 30.5px;animation-name:fp-flame;animation-timing-function:ease-in-out}
@keyframes fp-flame{0%,12%{transform:scale(1,1) skewX(0)}20%{transform:scale(1.1,.8) skewX(0)}
  34%{transform:scale(.9,1.3) skewX(-5deg)}46%{transform:scale(.97,1.08) skewX(6deg)}
  58%{transform:scale(.94,1.15) skewX(-3deg)}70%{transform:scale(1.02,.97) skewX(1deg)}80%,100%{transform:scale(1,1) skewX(0)}}
.fp-art .m-dGlow{opacity:.55;transform-origin:32px 24px;animation-name:fp-glow;animation-timing-function:ease-in-out}
@keyframes fp-glow{0%,16%{transform:scale(1);opacity:.55}36%{transform:scale(1.25);opacity:1}
  58%{transform:scale(1.12);opacity:.8}80%,100%{transform:scale(1);opacity:.55}}
.fp-art .m-dBowl{transform-origin:32px 56px;animation-name:fp-bowl;animation-timing-function:ease-in-out}
@keyframes fp-bowl{0%,18%{transform:scale(1,1)}26%{transform:scale(1.03,.96)}40%{transform:scale(.98,1.03)}54%,100%{transform:scale(1,1)}}
.fp-art .m-dSpark{transform-box:fill-box;transform-origin:center;opacity:0;animation-name:fp-spark;animation-timing-function:ease-out}
.fp-art .m-dSpark2{animation-delay:.16s}
@keyframes fp-spark{0%,32%{opacity:0;transform:translateY(2px) scale(.3)}48%{opacity:1;transform:translateY(-2px) scale(1)}
  72%,100%{opacity:0;transform:translateY(-7px) scale(.6)}}
/* hanging pair: a nudge sets them swinging, the second a beat behind; the tassels lag their plaques */
.fp-art .m-sA{transform-origin:20px 11px;animation-name:fp-swing;animation-timing-function:ease-in-out}
.fp-art .m-sB{transform-origin:44px 11px;animation-name:fp-swing;animation-timing-function:ease-in-out;animation-delay:.14s}
@keyframes fp-swing{0%,10%{transform:rotate(0)}22%{transform:rotate(-10deg)}40%{transform:rotate(7.5deg)}
  56%{transform:rotate(-4.5deg)}70%{transform:rotate(2deg)}84%,100%{transform:rotate(0)}}
.fp-art .m-tA{transform-origin:20px 37px;animation-name:fp-tassel;animation-timing-function:ease-in-out}
.fp-art .m-tB{transform-origin:44px 37px;animation-name:fp-tassel;animation-timing-function:ease-in-out;animation-delay:.14s}
@keyframes fp-tassel{0%,14%{transform:rotate(0)}28%{transform:rotate(12deg)}46%{transform:rotate(-10deg)}
  62%{transform:rotate(6deg)}76%{transform:rotate(-2.5deg)}90%,100%{transform:rotate(0)}}
/* temple box: a little press, the lid lifts back on its hinge, the gold doorway glows out; the lid closes */
.fp-art .m-tLid{transform-origin:11px 30px;animation-name:fp-lid;animation-timing-function:cubic-bezier(.45,0,.3,1)}
@keyframes fp-lid{0%,12%{transform:translateY(0) rotate(0)}20%{transform:translateY(1.2px) rotate(0)}
  36%,62%{transform:translateY(-5px) rotate(-17deg)}76%{transform:translateY(.4px) rotate(1.5deg)}84%,100%{transform:translateY(0) rotate(0)}}
.fp-art .m-tRays{transform-origin:32px 31px;opacity:0;animation-name:fp-rays;animation-timing-function:ease-out}
@keyframes fp-rays{0%,24%{opacity:0;transform:scale(.55)}40%{opacity:1;transform:scale(1.04)}60%{opacity:.9;transform:scale(1)}74%,100%{opacity:0;transform:scale(.7)}}
.fp-art .m-tBase{transform-origin:32px 55px;animation-name:fp-bowl;animation-timing-function:ease-in-out}
.fp-art .m-tSpark{transform-box:fill-box;transform-origin:center;opacity:0;animation-name:fp-spark;animation-timing-function:ease-out;animation-delay:.1s}
.fp-art .m-tSpark2{animation-delay:.26s}
@media (prefers-reduced-motion:reduce){
  .fp-art .m-dFlame,.fp-art .m-dBowl,.fp-art .m-sA,.fp-art .m-sB,.fp-art .m-tA,.fp-art .m-tB,.fp-art .m-tLid,.fp-art .m-tBase{animation:none}
  /* the light still answers: the glow / the doorway fade in place, nothing moves */
  .fp-art .m-dGlow{animation-name:fp-glow-rm}.fp-art .m-tRays{animation-name:fp-rays-rm}
  .fp-art .m-dSpark,.fp-art .m-tSpark{animation:none;opacity:0}
}
@keyframes fp-glow-rm{0%,16%{opacity:.55}40%{opacity:1}80%,100%{opacity:.55}}
@keyframes fp-rays-rm{0%,20%{opacity:0}40%,60%{opacity:.85}80%,100%{opacity:0}}

/* together: the plaques swing first, the flame answers the draught a beat later */
.fp-art .fp-combo .m-dFlame,.fp-art .fp-combo .m-dGlow,.fp-art .fp-combo .m-dBowl{animation-delay:.32s}
.fp-art .fp-combo .m-dSpark{animation-delay:.44s}.fp-art .fp-combo .m-dSpark2{animation-delay:.6s}

/* the doorway: the toran's leaves stir, the hangings swing on their hooks (Labh a beat behind), the jhumkas
   lag their medallions, and the little diya's flame answers the draught last */
.fp-art .fp-door .m-sA{transform-origin:22px 19.6px}.fp-art .fp-door .m-sB{transform-origin:74px 19.6px}
.fp-art .fp-door .m-tA{transform-origin:22px 46.6px}.fp-art .fp-door .m-tB{transform-origin:74px 46.6px}
.fp-art .m-leaf{transform-box:fill-box;transform-origin:50% 0;animation-name:fp-leaf;animation-timing-function:ease-in-out}
.fp-art .m-leaf2{animation-delay:.12s}
@keyframes fp-leaf{0%,8%{transform:rotate(0)}22%{transform:rotate(9deg)}38%{transform:rotate(-7deg)}54%{transform:rotate(4deg)}68%,100%{transform:rotate(0)}}
.fp-art .fp-door .m-dFlame,.fp-art .fp-door .m-dGlow,.fp-art .fp-door .m-dBowl{animation-delay:.4s}
.fp-art .fp-door .m-dSpark{animation-delay:.5s}.fp-art .fp-door .m-dSpark2{animation-delay:.66s}
@media (prefers-reduced-motion:reduce){.fp-art .m-leaf{animation:none}}

.fp-art .anim{animation:none!important}

/* ── the hanging stall and the door fitting ── */
/* ── the hanging stall ── physical colours (brass, kraft paper, mauli thread, teak) stay fixed across themes;
   the wall, plaster and scene tones come from tokens */
.fest{--plaster:#F2E3CC;--plaster-2:#E8D3B4;--recess-t:#5A2A1C;--recess-b:#93492A;--niche-frame:#E2C9A4;--sill:#D9BC93;
  --sc-wall:#F4E4CC;--sc-floor:#CDA77E;--sc-step:#B98E62;--sc-nail:#7A5A2E;--sc-pillar:#E6CFAE;--sc-tile:rgb(120 80 40 / .22);
  --sc-frame:#E5CBA6;--sc-sill:#D8BA90;--sc-recess-t:#5A2A1C;--sc-recess-b:#8A4524;--fit-bg:#FFF6E8;--bulb:.75}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .fest{--plaster:#3E2636;--plaster-2:#331E2C;--recess-t:#14070D;--recess-b:#4A1E12;--niche-frame:#5A3A4E;--sill:#6A4660;
  --sc-wall:#3A2232;--sc-floor:#2A1622;--sc-step:#4A2E36;--sc-nail:#D9AE66;--sc-pillar:#4A2C3C;--sc-tile:rgb(255 220 180 / .1);
  --sc-frame:#54344A;--sc-sill:#644058;--sc-recess-t:#14070D;--sc-recess-b:#4A2014;--fit-bg:#2A1222;--bulb:1}}
:root[data-theme="dark"] .fest{--plaster:#3E2636;--plaster-2:#331E2C;--recess-t:#14070D;--recess-b:#4A1E12;--niche-frame:#5A3A4E;--sill:#6A4660;
  --sc-wall:#3A2232;--sc-floor:#2A1622;--sc-step:#4A2E36;--sc-nail:#D9AE66;--sc-pillar:#4A2C3C;--sc-tile:rgb(255 220 180 / .1);
  --sc-frame:#54344A;--sc-sill:#644058;--sc-recess-t:#14070D;--sc-recess-b:#4A2014;--fit-bg:#2A1222;--bulb:1}

.fs-stall{position:relative;padding:0;overflow:hidden;border-radius:26px;isolation:isolate}
/* the awning: maroon and marigold stripes with a scalloped edge and a gold trim, and a string of bulbs under it */
.fs-awning{position:relative;height:50px;filter:drop-shadow(0 8px 8px rgb(90 20 10 / .22))}
.fs-awning i{position:absolute;inset:0;
  -webkit-mask:linear-gradient(#000 0 0) 0 0/100% 30px no-repeat,radial-gradient(circle 16px at 16px 0,#000 96%,#0000 100%) 0 30px/32px 18px repeat-x;
          mask:linear-gradient(#000 0 0) 0 0/100% 30px no-repeat,radial-gradient(circle 16px at 16px 0,#000 96%,#0000 100%) 0 30px/32px 18px repeat-x}
.fs-awning__trim{background:linear-gradient(#F7D774,#C98E1E);translate:0 3px}
.fs-awning__cloth{background:repeating-linear-gradient(90deg,#9A1B1B 0 32px,#E58A12 32px 64px);
  box-shadow:inset 0 10px 14px -8px rgb(255 255 255 / .35)}
.fs-awning__cloth::after{content:"";position:absolute;inset:0;background:linear-gradient(rgb(255 255 255 / .18),transparent 40%,rgb(0 0 0 / .18))}
.fs-lights{position:absolute;left:0;right:0;top:50px;height:16px;z-index:1;pointer-events:none;
  background:linear-gradient(#0000 5px,rgb(60 30 20 / .45) 5px 6px,#0000 6px) 0 0/100% 16px no-repeat}
.fs-lights::before,.fs-lights::after{content:"";position:absolute;inset:0;opacity:var(--bulb);
  background:radial-gradient(circle 9px at 12px 9px,#FFF4C9 0 2.6px,rgb(255 196 92 / .6) 3.4px,#0000 9px) 0 0/48px 16px repeat-x}
.fs-lights::after{background-position:24px 0;animation:twinkle 2.6s ease-in-out infinite alternate}
@keyframes twinkle{from{opacity:calc(var(--bulb)*.35)}to{opacity:var(--bulb)}}
.fs-stall__head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 18px;padding:22px 28px 0}
.fs-stall__head h2{margin:0;font:400 clamp(28px,3vw,34px)/1.1 var(--f-display);color:var(--maroon)}
.fs-stall__hint{margin:0;font-size:14px;color:var(--ink-2)}
.hint-t{display:none} @media (hover:none){.hint-t{display:inline}.hint-c{display:none}}
.fs-stall__wall{display:grid;gap:4px;padding:0 0 24px}
.fs-row{position:relative;padding:0 28px}
/* a rod: brass bar, a flange at each end where it meets the wall, a ball finial */
.fs-rod{position:relative;height:14px;margin:26px 0 0}
.fs-rod__bar{position:absolute;left:8px;right:8px;top:3px;height:9px;border-radius:5px;
  background:linear-gradient(#FFF1C2,#E6B552 38%,#A56E1C 80%,#7A4A10);box-shadow:0 4px 5px -2px rgb(60 20 0 / .4)}
.fs-rod__bk{position:absolute;top:-10px;width:12px;height:30px;border-radius:3px;background:linear-gradient(90deg,#8A5A14,#F2C14E 45%,#8A5A14);box-shadow:0 3px 4px rgb(60 20 0 / .3)}
.fs-rod__bk--l{left:0}.fs-rod__bk--r{right:0}
.fs-slots{display:flex;justify-content:space-around;align-items:flex-start;gap:14px 10px;margin-top:-7px}
.fs-item{appearance:none;border:0;background:none;padding:0 0 6px;margin:0;color:inherit;font:inherit;cursor:pointer;display:flex;align-items:flex-start;gap:6px;
  position:relative;border-radius:14px;-webkit-tap-highlight-color:transparent;touch-action:pan-y}
.fs-item:focus-visible{outline:3px solid var(--mari);outline-offset:4px}
.fs-pcs{display:flex;align-items:flex-start;gap:8px}
.fs-pc{display:block;position:relative;padding-top:22px;transform-origin:var(--px,50%) 3px;will-change:transform}
.fs-pc img{display:block;width:100%;height:auto;filter:drop-shadow(0 12px 9px rgb(70 20 5 / .3));user-select:none;-webkit-user-drag:none}
/* the S-hook each piece hangs from */
.fs-pc--hang::before{content:"";position:absolute;left:var(--px,50%);top:-3px;width:10px;height:27px;translate:-50% 0;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 27'%3E%3Cpath d='M5 1.5a3 3 0 1 1-3 3v18a3 3 0 1 0 3-3' fill='none' stroke='%23C9932F' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}
/* the price tag, on a red-and-yellow mauli thread */
.fs-tagwrap{display:flex;flex-direction:column;align-items:center;transform-origin:50% 0;will-change:transform;filter:drop-shadow(0 5px 5px rgb(70 20 5 / .25))}
.fs-thread{display:block;width:2px;height:var(--th,58px);background:repeating-linear-gradient(#C8321F 0 5px,#F2B33D 5px 7px)}
.fs-tag{display:grid;gap:3px;justify-items:center;text-align:center;min-width:96px;max-width:118px;padding:16px 10px 9px;color:#3A1A10;
  background:#F1DDB6 linear-gradient(160deg,rgb(255 255 255 / .35),transparent 60%);
  clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%,0 14px);
  -webkit-mask:radial-gradient(circle 3.4px at 50% 8px,#0000 96%,#000);mask:radial-gradient(circle 3.4px at 50% 8px,#0000 96%,#000);
  transition:translate .25s cubic-bezier(.2,.8,.2,1)}
.fs-tag__n{font:700 12.5px/1.22 var(--f-body);letter-spacing:.005em;text-wrap:balance}
.fs-tag__p b{display:block;font:400 22px/1.05 var(--f-display);color:#7A1020;font-variant-numeric:tabular-nums}
.fs-tag__p i{display:block;font:600 11px/1.2 var(--f-body);font-style:normal;color:#6B4630}
@media (hover:hover){.fs-item:hover .fs-tag{translate:0 -4px}}
/* the ledge for standing pieces; their tags are folded tent cards */
.fs-row--ledge{padding-top:30px}.fs-row--ledge .fs-slots{align-items:flex-end;margin:0}
.fs-ledge{display:block;height:16px;margin:0 -4px;border-radius:5px;background:linear-gradient(#C7864A,#8A4F1E 55%,#5E3210);box-shadow:inset 0 2px 0 rgb(255 230 190 / .45),0 10px 12px -8px rgb(60 20 0 / .5)}
.fs-item--stand{align-items:flex-end;padding:0}.fs-item--stand .fs-pcs{align-items:flex-end}
.fs-item--stand .fs-pc{padding-top:0;transform-origin:50% 100%}
.fs-tagwrap--stand,.fs-tagwrap--temple{transform-origin:50% 100%}
.fs-tagwrap--stand .fs-thread{display:none}
.fs-tagwrap--stand .fs-tag{clip-path:none;-webkit-mask:none;mask:none;border-radius:4px;padding:9px 10px;background:#F1DDB6 linear-gradient(rgb(255 255 255 / .3),transparent 55%,rgb(120 70 30 / .1))}
/* the gokhlu: arched niches cut into a lime-plaster band, each lit by a diya */
.fs-row--niche{margin-top:30px;padding:30px 28px 26px;
  background:var(--plaster) linear-gradient(var(--plaster),var(--plaster-2));box-shadow:inset 0 12px 16px -12px rgb(0 0 0 / .25)}
.fs-row--niche + .fs-row--niche{margin-top:0;padding-top:6px}
.fs-row--niche .fs-slots{align-items:flex-start;margin:0;gap:22px 14px}
.fs-item--temple{flex-direction:column;align-items:center;gap:0}
.fs-item--temple .fs-pcs{position:relative;width:min(172px,40vw);aspect-ratio:.8;justify-content:center;align-items:flex-end;padding:0 10px 12px;
  border-radius:999px 999px 8px 8px;background:linear-gradient(var(--recess-t),var(--recess-b));
  box-shadow:inset 0 14px 22px rgb(0 0 0 / .5),inset 0 -3px 0 rgb(0 0 0 / .2),0 0 0 8px var(--niche-frame),0 0 0 9px rgb(0 0 0 / .08)}
.fs-item--temple .fs-pcs::before{content:"";position:absolute;inset:auto 0 0;height:60%;border-radius:0 0 8px 8px;pointer-events:none;
  background:radial-gradient(60% 70% at 22% 100%,rgb(255 181 71 / .55),transparent 70%)}
.fs-item--temple .fs-pcs::after{content:"";position:absolute;left:-14px;right:-14px;bottom:-12px;height:12px;border-radius:3px;background:var(--sill);box-shadow:0 6px 8px -4px rgb(0 0 0 / .3)}
.fs-item--temple .fs-pc{padding:0;position:relative;z-index:1}
.niche-diya{position:absolute;left:12px;bottom:12px;width:22px;height:16px;z-index:1}
.fs-tagwrap--temple{margin-top:12px}.fs-tagwrap--temple .fs-thread{height:14px}
/* phones: one product per rod; the rods come off alternate walls */
@media (max-width:599px){
  .fs-row{padding:0 16px}.fs-stall__head{padding:20px 18px 0}
  .fs-rod{margin-top:30px}.fs-rod--l{margin-right:22%}.fs-rod--r{margin-left:22%}
  .fs-rod--l .fs-rod__bk--r,.fs-rod--r .fs-rod__bk--l{width:16px;height:16px;top:-1px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#FFF1C2,#D9A33A 55%,#7A4A10)}
  .fs-row--rod .fs-slots{justify-content:flex-start}
  .fs-row--rod:has(.fs-rod--r) .fs-slots{justify-content:flex-end}
  .fs-tag{min-width:86px;max-width:96px;padding-inline:8px}
  .fs-row--rod:has(.fs-rod--r) .fs-item{flex-direction:row-reverse}
  .fs-row--ledge .fs-slots{justify-content:center}
  .fs-row--niche{padding:26px 16px 22px}.fs-row--niche + .fs-row--niche{margin-top:0;padding-top:6px}
.fs-row--niche .fs-slots{justify-content:space-around}
}

/* ── the door fitting ── */
.fit{position:fixed;inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;color:var(--ink);overflow:hidden}
.fit::backdrop{background:rgb(24 6 14 / .55);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:fitVeil .3s ease-out}
@keyframes fitVeil{from{opacity:0}}
.fit__veil{position:absolute;inset:0}
.fit__box{position:absolute;left:50%;top:50%;translate:-50% -50%;width:min(1020px,calc(100% - 32px));max-height:calc(100% - 32px);overflow:auto;
  display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);border-radius:24px;background:var(--fit-bg);border:1px solid var(--edge);
  box-shadow:0 34px 70px -24px rgb(0 0 0 / .6)}
.fit__stage{position:relative;background:var(--sc-wall);touch-action:pan-y;user-select:none;-webkit-user-select:none}
.fit__scene{position:relative;width:100%;aspect-ratio:360/300}
.fit__scene .fs-scene{position:absolute;inset:0;width:100%;height:100%;display:none}
.fit__scene[data-scene="home"] .fs-scene--home,.fit__scene[data-scene="shop"] .fs-scene--shop,.fit__scene[data-scene="niche"] .fs-scene--niche{display:block}
.fit__hang{position:absolute;inset:0}
.fpc{position:absolute;display:block;will-change:transform;appearance:none;border:0;background:none;padding:0;margin:0;cursor:zoom-in;border-radius:10px;-webkit-tap-highlight-color:transparent}
.fpc:focus-visible{outline:3px solid var(--mari);outline-offset:3px}
.fpc img{display:block;width:100%;height:auto;filter:drop-shadow(0 14px 10px rgb(40 10 0 / .38));-webkit-user-drag:none}
.fit__cat{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.fit__nav{position:absolute;left:0;right:0;bottom:10px;display:flex;align-items:center;justify-content:center;gap:14px}
.fit__nav button{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;border:1px solid var(--edge);background:var(--pane-2);color:var(--ink);cursor:pointer;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.fit__count{margin:0;min-width:64px;text-align:center;font-weight:700;font-size:13px;color:var(--ink);font-variant-numeric:tabular-nums;
  padding:5px 10px;border-radius:999px;background:var(--pane-2)}
.fit__info{display:grid;gap:12px;align-content:start;padding:30px 28px 26px}
.fit__info h2{margin:6px 0 0;font:400 clamp(24px,2.6vw,32px)/1.12 var(--f-display);color:var(--maroon);text-wrap:balance;padding-right:36px}
.fit__mat{margin:0;color:var(--ink-3);font-size:14.5px}
.fit__price{display:flex;flex-direction:column}
.fit__price b{font:400 34px/1.05 var(--f-display);color:var(--vermil);font-variant-numeric:tabular-nums}
.fit__price span{font-size:13.5px;color:var(--ink-2)}
.fit__cta{display:grid;gap:8px;margin-top:4px}
.fit__swipe{margin:0;font-size:13px;color:var(--ink-3)}
.fit__close{position:absolute;right:12px;top:12px;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--edge);background:var(--pane-2);color:var(--ink);cursor:pointer;z-index:2}
.fit__where{justify-self:start;max-width:calc(100% - 52px)}.fit__where button{min-height:40px}
.fs-fly{position:fixed;inset:0;pointer-events:none;z-index:20}
.fs-fly__pc{position:fixed;display:block;filter:drop-shadow(0 16px 12px rgb(40 10 0 / .35));will-change:transform}
.fs-stick{position:fixed;width:24px;height:72vh;top:0}.fs-stick svg{display:block;width:100%;height:100%}
@media (max-width:760px){
  .fit__box{left:0;top:0;translate:none;width:100%;height:100%;max-height:none;border-radius:0;border:0;grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr;align-content:start}
  .fit__info{padding:18px 18px calc(18px + env(safe-area-inset-bottom,0px));gap:10px}
  .fit__info h2{padding-right:0}
  .fit__close{top:calc(10px + env(safe-area-inset-top,0px))}
}
@media (prefers-reduced-motion:reduce){.fs-lights::after{animation:none}.fs-tag{transition:none}}
@media (max-width:760px){.fit__stage{overflow:hidden}.fit__scene{width:118%;margin-left:-9%}}
