/* ================= reviews: voices first, the lamp to speak =================
   Base rules are the phone (390 px). Wider screens come in min-width queries at the end. */
#rv [hidden],.rvsheet [hidden]{display:none!important}
html:has(.rvsheet[open]){overflow:hidden}

/* ---------- summary strip: the average, then the pandal leaderboard "সেরা মণ্ডপ" ---------- */
.rvsum{display:flex;flex-direction:column;align-items:center;gap:14px;margin:-.8rem 0 18px}
.rvavg{display:flex;align-items:center;justify-content:center;gap:6px 16px}
.rvsum .avg{font-size:clamp(2.6rem,10vw,4rem);line-height:1.25;padding-top:.15em;color:var(--gold);text-shadow:0 0 28px rgba(255,170,60,.5)}
.rvsub{display:grid;gap:4px;justify-items:start}
.rvmeter{position:relative;display:inline-block;font-size:1.3rem;line-height:1;letter-spacing:3px;color:rgba(255,207,90,.25)}
.rvmeter span{position:absolute;inset:0 auto 0 0;width:var(--f);overflow:hidden;white-space:nowrap;color:#ffcf5a}
.rvmeter.sm{font-size:.7rem;letter-spacing:1px}
.rvn{font-size:.9rem;opacity:.85}
.rvrank{display:grid;gap:5px;width:100%;max-width:340px}
.rvrkh{margin:0 0 2px;text-align:center;font-size:1.05rem;line-height:1.5;color:var(--gold)}
/* .rvrank scopes the row: the sheet has its own .rvrow for the name and puja fields */
.rvrank .rvrow{display:grid;grid-template-columns:1.3em minmax(0,1fr) auto auto auto auto;align-items:center;gap:0 8px;width:100%;min-height:44px;padding:0 12px;
  border-radius:12px;border:1px solid var(--line);background:rgba(0,0,0,.2);color:#ffe9b0;font:inherit;font-size:.85rem;line-height:1.3;text-align:left;cursor:pointer}
.rvrank .rvrow[aria-pressed="true"]{border-color:var(--gold);background:rgba(255,210,122,.08);box-shadow:0 0 0 1px var(--gold),0 0 18px rgba(255,170,60,.25)}
.rvrank .rvrow:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.rvrk{font-size:1.1rem;line-height:1;padding-top:.12em;text-align:center;color:var(--gold)}
.rvpn{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.rvra{font-weight:600;color:var(--gold)}
.rvrank em{font-style:normal;font-size:.78rem;opacity:.75}
.rvrank .rvdiya{position:relative;inset:auto}
.rvclear{display:block;margin:-6px auto 4px;padding:7px 14px;border-radius:99px;border:1px solid var(--gold);background:rgba(255,210,122,.12);
  color:#ffe9b0;font:inherit;font-size:.8rem;line-height:1.3;cursor:pointer}
.rvclear:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

/* ---------- carousel of voices: a centred card sits forward, its neighbours sit back ---------- */
.rvstage{position:relative}
.rvtrack{display:flex;align-items:stretch;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -16px;padding:10px 16px 24px;
  scrollbar-width:none;overscroll-behavior-x:contain;outline:none}
.rvtrack::-webkit-scrollbar{display:none}
.rvtrack:focus-visible{box-shadow:inset 0 0 0 2px var(--line);border-radius:20px}
.rvnav{display:none}

/* the card is a lit offering: warm glass ramp, lamp light from the diya corner, alpona rings behind the quote mark */
.rvcard{position:relative;isolation:isolate;flex:0 0 84vw;max-width:360px;scroll-snap-align:center;display:flex;flex-direction:column;gap:10px;padding:18px 18px 16px;
  border-radius:20px;background:linear-gradient(180deg,rgba(60,10,22,.62),rgba(34,5,14,.58));border:1px solid var(--line);backdrop-filter:blur(10px);
  transform:scale(.92);opacity:.55;transition:transform .4s ease,opacity .4s ease}
.rvcard::before{content:"";position:absolute;inset:-1px;z-index:-1;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .4s ease;
  background:radial-gradient(circle at calc(100% - 25px) 24px,rgba(255,170,60,.22),transparent 55%);box-shadow:0 0 0 1px var(--gold),0 14px 40px rgba(0,0,0,.35)}
.rvcard::after{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;
  background:repeating-radial-gradient(circle at 34px 30px,rgba(255,210,122,.06) 0 1px,transparent 1px 9px);
  -webkit-mask-image:radial-gradient(circle at 34px 30px,#000 0 36px,transparent 110px);mask-image:radial-gradient(circle at 34px 30px,#000 0 36px,transparent 110px)}
.rvcard.on{transform:translateY(-4px);opacity:1}                            /* fallback depth, and the lamp and rim for every browser */
.rvcard.on::before{opacity:1}
.rvq{position:absolute;top:2px;left:14px;font-size:3.2rem;line-height:1;color:var(--gold);opacity:.55;pointer-events:none}
.rvcard blockquote{margin-top:22px;max-height:calc(1.7em * 6 + .15em);overflow:hidden;padding:.15em 22px 0 0;font-size:1.12rem;line-height:1.7;color:#fff4e0;word-break:break-word}
.rvcard blockquote.clip{-webkit-mask-image:linear-gradient(#000 calc(100% - 1.7em),transparent);mask-image:linear-gradient(#000 calc(100% - 1.7em),transparent)}
.rstar{color:#ffcf5a;letter-spacing:1px}
.rstar .off{opacity:.25}
.rvby{margin-top:auto;display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding-top:12px;border-top:1px solid rgba(255,210,122,.16);font-size:.86rem}
.rvinit{flex:0 0 34px;width:34px;height:34px;display:grid;place-items:center;padding-top:.12em;border-radius:50%;border:1.5px solid transparent;font-size:1rem;line-height:1;color:var(--gold);
  background:linear-gradient(#3d0917,#260510) padding-box,linear-gradient(135deg,#ffe9b0,#ffb347 55%,#b5673a) border-box}
.rvby b{color:#fff4e0;font-weight:600}
.rvby time{margin-left:auto;font-size:.82rem;color:rgba(255,244,224,.7)}
.rvtag{padding:1px 9px;border-radius:99px;font-size:.75rem;background:rgba(255,210,122,.12);border:1px solid var(--line);color:#ffe9b0}
.rvcard.fresh{animation:rvfresh 1.2s ease-out}

/* depth driven by the scroll itself where supported (JS adds .sd after CSS.supports) */
.rvtrack.sd .rvcard:not(.skeleton){animation:rvdepth linear both;animation-timeline:view(inline);animation-range:cover}
.rvtrack.sd .rvcard.fresh{animation:rvdepth linear both,rvfresh 1.2s ease-out;animation-timeline:view(inline),auto;animation-range:cover,normal}
@keyframes rvdepth{0%,32%{transform:scale(.92);opacity:.55}50%{transform:translateY(-4px);opacity:1}68%,100%{transform:scale(.92);opacity:.55}}
@keyframes rvfresh{0%{box-shadow:0 0 0 1px var(--gold),0 0 0 0 rgba(255,190,80,.7)}100%{box-shadow:0 0 0 1px var(--gold),0 0 0 18px rgba(255,190,80,0)}}

/* the diya mark: dim clay lamp, the flame lights when its card is the snapped one */
.rvdiya{position:absolute;top:14px;right:14px;width:22px;height:20px;pointer-events:none}
.rvdiya::before{content:"";position:absolute;left:0;right:0;bottom:0;height:8px;border-radius:2px 2px 12px 12px;background:linear-gradient(#d9955e,#b5673a 55%,#5a2210)}
.rvdiya::after{content:"";position:absolute;left:50%;bottom:7px;width:8px;height:12px;margin-left:-4px;border-radius:50% 50% 50% 50%/62% 62% 38% 38%;
  background:radial-gradient(circle at 50% 72%,#fff4d6,#ffc44d 50%,#ff7a1a);opacity:.22;filter:grayscale(.7);transition:opacity .4s ease,filter .4s ease,box-shadow .4s ease}
.rvcard.on .rvdiya::after,.rvdiya.lit::after{opacity:1;filter:none;box-shadow:0 -2px 14px 5px rgba(255,166,60,.7);animation:rvflick 2.6s ease-in-out infinite}
@keyframes rvflick{50%{scale:1 1.12}}

/* loading: three cards shaped like the real one */
.rvcard.skeleton{min-height:188px;gap:12px;transform:none;opacity:1}
.rvcard.skeleton i{display:block;height:12px;border-radius:6px;background:linear-gradient(90deg,rgba(255,210,122,.07),rgba(255,210,122,.2),rgba(255,210,122,.07)) 0 0/200% 100%;animation:rvshim 1.4s linear infinite}
.rvcard.skeleton i:nth-child(2){width:88%}
.rvcard.skeleton i:nth-child(3){width:62%}
.rvcard.skeleton i.s{width:42%;margin-top:auto}
@keyframes rvshim{to{background-position:-200% 0}}

/* "more" card sits at the end of the row */
.rvmore{align-items:center;justify-content:center;gap:4px;min-height:188px;border-style:dashed;font:inherit;font-weight:600;color:var(--gold);cursor:pointer}
.rvmore small{font-weight:400;font-size:.8rem;color:var(--ink);opacity:.7}

/* progress line that follows the swipe, on every width */
.rvprog{width:min(38%,150px);height:3px;margin:8px auto 0;border-radius:3px;background:rgba(255,210,122,.16);overflow:hidden}
.rvprog i{display:block;height:100%;border-radius:3px;background:var(--gold);transform-origin:left;transform:scaleX(var(--p,0));transition:transform .15s linear}

/* error and empty faces */
.rvstate{display:grid;justify-items:center;gap:14px;padding:26px 16px;text-align:center;border:1px dashed var(--line);border-radius:20px;line-height:1.7}

/* ---------- the lamp to speak ---------- */
.rvcta{display:flex;justify-content:center;width:100%;margin:22px auto 0;padding:15px 24px;font-size:1.05rem;box-shadow:0 8px 30px rgba(255,180,80,.35)}

/* ---------- review sheet: bottom sheet on phones ---------- */
.rvsheet{position:fixed;inset:auto 0 0 0;margin:0;width:100%;max-width:100%;max-height:88dvh;padding:0;overflow-y:auto;overscroll-behavior:contain;
  border:1px solid var(--line);border-bottom:0;border-radius:26px 26px 0 0;color:var(--ink);
  background:linear-gradient(180deg,#420a1b,#20030b 70%);box-shadow:0 -20px 60px rgba(0,0,0,.55)}
.rvsheet::backdrop{background:rgba(42,4,16,.7);backdrop-filter:blur(6px)}
.rvsheet[open]{animation:rvup .26s ease-out}
.rvsheet[open]::backdrop{animation:rvfade .26s ease-out}
.rvsheet.out{animation:rvdown .18s ease-in forwards}
.rvsheet.out::backdrop{animation:rvfadeout .18s ease-in forwards}
@keyframes rvup{from{transform:translateY(100%)}}
@keyframes rvdown{to{transform:translateY(100%)}}
@keyframes rvfade{from{opacity:0}}
@keyframes rvfadeout{to{opacity:0}}

.rvform{position:relative;display:grid;gap:12px;padding:10px 18px calc(20px + env(safe-area-inset-bottom))}
.rvhandle{justify-self:center;width:36px;height:4px;border-radius:2px;background:rgba(255,210,122,.45)}
.rvx{position:absolute;top:6px;right:6px;width:44px;height:44px;border:0;border-radius:50%;background:none;color:var(--ink);font:inherit;font-size:1.1rem;cursor:pointer;opacity:.8}
.rvx:hover,.rvx:focus-visible{opacity:1;background:rgba(255,255,255,.08)}
.rvidle{display:grid;gap:12px}
.rvsheet h3{font-size:1.35rem;line-height:1.5;padding:.15em 44px 0 0;color:var(--gold);font-weight:400}
.rvlbl{min-height:1.5em;font-size:.95rem;font-weight:600;color:#ffe9b0}
.rvstars{display:flex;gap:6px;margin-top:-6px}
.rvstar{width:44px;height:44px;display:grid;place-items:center;padding:0;border:0;border-radius:12px;background:none;font:inherit;font-size:1.9rem;line-height:1;
  color:rgba(255,207,90,.28);cursor:pointer;transition:color .2s,transform .2s}
.rvstar.sel{color:#ffcf5a;text-shadow:0 0 14px rgba(255,190,80,.5)}
.rvstar:focus-visible{outline:2px solid var(--gold);outline-offset:1px}
.rvstar:active{transform:scale(.9)}
.rvprob,.rvfail{font-size:.86rem;line-height:1.55;color:#ffb8a8}
.rvprob{margin-top:-6px}
.rvrow{display:grid;gap:8px}
.rvrow select{min-width:0;width:100%}
.rvsheet textarea{width:100%;min-height:96px;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:rgba(0,0,0,.38);color:#fff;font:inherit;resize:vertical;outline:none}
.rvsheet textarea:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(255,210,122,.2)}
.rvsheet textarea::placeholder{color:#d9bfa0}
.rvcount{justify-self:end;margin-top:-8px;font-size:.78rem;opacity:.7}
.rvcount.hi{opacity:1;color:var(--gold)}
.rvhp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.rvsend{width:100%;justify-content:center;padding:14px 24px}
.rvsend:disabled{opacity:.6;cursor:default;transform:none;box-shadow:none}
.rvwait{text-align:center;font-size:.84rem;opacity:.85}
.rvfine{text-align:center;font-size:.76rem;line-height:1.6;opacity:.6}
.rvdone{display:grid;justify-items:center;gap:18px;padding:40px 8px 34px;text-align:center}
.rvdone .rvdiya{position:relative;inset:auto;scale:2.2;margin:10px 0 6px}
.rvdone p{font-size:1.25rem;line-height:1.7;color:#ffe9b0}

/* ---------- wider phones: name and puja share a row ---------- */
@media (min-width:390px){.rvrow{grid-template-columns:1fr 1fr}}

/* ---------- tablet and up: the sheet becomes a centred card ---------- */
@media (min-width:700px){
  .rvsheet{inset:0;margin:auto;max-width:520px;border-bottom:1px solid var(--line);border-radius:26px}
  .rvsheet[open]{animation:rvpop .26s ease-out}
  .rvsheet.out{animation:rvpopout .18s ease-in forwards}
  .rvhandle{display:none}
  .rvform{padding:18px 24px 24px}
  @keyframes rvpop{from{opacity:0;transform:translateY(24px) scale(.98)}}
  @keyframes rvpopout{to{opacity:0;transform:translateY(16px) scale(.98)}}
}

/* ---------- desktop: still a carousel, three cards in view, round arrows outside the track ---------- */
@media (min-width:900px){
  .rvsum{flex-direction:row;justify-content:center;gap:44px}
  .rvstage{padding:0 60px}
  .rvtrack{gap:16px;margin:0;padding:10px 0 24px}
  .rvcard{flex:0 0 calc((100% - 32px) / 3);max-width:none}
  .rvnav{position:absolute;top:calc(50% - 7px);z-index:2;display:grid;place-items:center;width:44px;height:44px;margin-top:-22px;padding:0 0 4px;border-radius:50%;
    border:1px solid var(--line);background:var(--glass);color:var(--gold);font:inherit;font-size:1.7rem;line-height:1;cursor:pointer;backdrop-filter:blur(8px);transition:opacity .2s,transform .2s}
  #rvprev{left:0}
  #rvnext{right:0}
  .rvnav:hover:not(:disabled){transform:scale(1.08)}
  .rvnav:disabled{opacity:.3;cursor:default}
  .rvnav:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
  .rvcta{width:fit-content;min-width:340px}
}

/* ---------- reduced motion: no slide, fade only; no flame flicker ---------- */
@media (prefers-reduced-motion:reduce){
  .rvsheet[open]{animation:rvfade .2s ease-out!important}
  .rvsheet.out{animation:rvfadeout .18s ease-in forwards!important}
  .rvdiya::after{animation:none!important}
  .rvcard,.rvcard::before,.rvnav{transition:none!important}
}
