/* ===========================================================
   TAPEMATE PH — LANDING PAGE
   1. tokens          6. logo bar       11. segments      16. contact + form
   2. base            7. intro/stats    12. dealership    17. footer
   3. hero (v9)       8. products       13. proof         18. floating ui
   4. ui kit          9. calculator     14. process       19. responsive
   5. header          10. why           15. faq           20. reduced motion
   =========================================================== */

/* ================= 1. TOKENS =================

   FROM TAPEMATE'S BRAND GUIDELINE
   The four colours below marked ★ are not guesses. They were pulled
   straight out of _source/brand/TAPEMATE-BRAND-GUIDELINE.pdf — the swatches
   there are vector fills, so the exact values are in the content stream itself.

     ★ #1F4280   navy       — 80 uses in the document, the most frequent
     ★ #021334   navy-deep  — 44 uses
     ★ #D90429   red        — 46 uses
     ★ #3B9CFF   electric   — 14 uses

   The red and the electric blue were already right. The navy used to be
   #14287B — darker and more purple — so it was replaced across the whole
   project (73 places, including the raw rgba values in shadows and edges).

   The remaining colours (kraft, teal, cream, sand) are not in the
   guideline. They are ours, supporting only, so they were left alone. */
:root{
  --navy:#1F4280;        /* ★ guideline */
  --navy-soft:#1E3A8A;
  --navy-deep:#021334;   /* ★ guideline */
  --red:#D90429;         /* ★ guideline */
  --red-deep:#A80320;
  --electric:#3B9CFF;    /* ★ guideline */
  --kraft:#F2A05D;
  --kraft-light:#F9C089;
  --kraft-deep:#DF8440;
  --teal:#2C6E80;
  --teal-deep:#1D4C59;
  --cream:#FBF1E3;
  --sand:#F1E1C8;
  --gray:#D6DAE0;
  --gray-soft:#E7EAEE;

  /* page */
  --paper:#FFFDF9;
  --kraft-paper:#F6E7D2;
  --ink:#1F4280;
  --ink-2:#57618A;
  --line:rgba(31,66,128,.14);
  --line-2:rgba(31,66,128,.08);
  --shadow-s:0 6px 16px -10px rgba(31,66,128,.4);
  --shadow-m:0 18px 34px -22px rgba(31,66,128,.45);
  --shadow-l:0 34px 60px -34px rgba(31,66,128,.5);

  /* ---- THE BRAND'S TWO FONTS ----
     The guideline says (embedded in the PDF as UniversLTPro-55Roman and
     GlacialIndifference):

        headings / logo   Univers LT Pro
        body              Glacial Indifference

     The body is already right — we have Glacial Indifference.

     ⚠ UNIVERS IS A PAID MONOTYPE FONT. It is not on Google Fonts and not
       on any free CDN. It is in the PDF, but only as a subset (the
       characters used there), and extracting and using the embedded copy
       is not allowed either — that is licensed to that document.

       WHAT IS NEEDED: ask TapeMate for a licensed web font (.woff2). Put
       it in assets/fonts/, uncomment the @font-face below, and the whole
       page including the logo follows on its own.

       Until then Poppins leads the stack — that is what was seen and
       approved in every previous version, so nothing changes suddenly.
       Univers is still first in the list, so the moment the file arrives
       it takes over with nothing else to adjust. */
  --display:'Univers LT Pro','UniversLTPro-55Roman','Univers','Poppins',system-ui,sans-serif;
  --body:'Glacial Indifference','Poppins',system-ui,sans-serif;
  --ease:cubic-bezier(.16,1,.3,1);
  --back:cubic-bezier(.34,1.4,.64,1);

  --hdr-h:76px;
}

/* The @font-face for Univers is ready to drop in — it is in
   assets/fonts/README.txt, together with the method. */

/* ================= 2. BASE ================= */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;scroll-padding-top:96px;overflow-x:clip}
html,body{height:100%}
body{
  font-family:var(--body);background:var(--paper);color:var(--navy);
  -webkit-font-smoothing:antialiased;
  /* prevents the side-scroll caused by the honeypot and by the layers that
     break out. clip is what we want — it creates no new scroll container. */
  overflow-x:hidden;
  overflow-x:clip;
}
img,svg{max-width:100%}
a{color:inherit}
[hidden]{display:none !important}
:focus-visible{outline:2px solid var(--red);outline-offset:4px}
.sprite{position:absolute;width:0;height:0;overflow:hidden}

/* ================= 3. HERO (v9 — hindi ginalaw) ================= */
.hero{position:relative;height:100svh;min-height:560px;display:grid;place-items:center;overflow:hidden;background:#fff}

/* ---- THE TORN PAPER ----
   This is an image now, straight from the client. It replaced twelve
   stacked SVGs (wash, field, sandband, two bands, weave, gtop, gbot) —
   the backup is in the scratchpad if it is ever needed.

   `cover`: it clings to all four edges, with no white showing at any
   window size. Because the image is 2.7:1 and the usual window is taller,
   the width is what gets consumed — the torn blue at the top and bottom
   survives whole, and that is what makes the shape. */
/* `inset:-8px` — this has parallax (data-depth="3"), so it drifts slightly
   with the cursor. At exactly `inset:0` every movement would open a
   hairline white gap at the edge; 1.5px of that is worthless next to the
   blue edge. 8px is more than enough. */
.bg{
  position:absolute;inset:-8px;z-index:0;pointer-events:none;
  opacity:0;animation:soft 1.3s var(--ease) .15s forwards;
}
@keyframes soft{to{opacity:1}}

/* ---- ANG LIMANG LITRATO ----
   ⚠ `inset:-26px` AT HINDI `inset:0`, AT ANG `blur` ANG DAHILAN. Ang
     `filter:blur()` ay hindi tumitigil sa gilid ng kahon — kinakalat niya
     ang laman PALABAS, at ang gilid mismo ay nagiging kalahating
     malinaw. Sa `inset:0` ay may malabong puting sinturon sa apat na
     gilid ng hero. Dahil mas malaki ang `.shots` kaysa sa hero at may
     `overflow:hidden` ang hero, ang malabong gilid ay nasa LABAS ng
     nakikita — matalim ang apat na gilid, malabo ang laman.
   ⚠ ANG `blur` AT ANG `.veil` AY IISANG HILING: "hindi masyadong klaro,
     background lang". Magkaiba ang trabaho nila — ang `blur` ang
     nag-aalis ng DETALYE (hindi mo na binabasa ang mukha o ang sulat sa
     karton), ang belo ang nag-aalis ng LAKAS NG KULAY. Kulang ang isa
     kung wala ang isa: ang blur lang ay malabo pero madilim pa rin; ang
     belo lang ay maliwanag pero mababasa mo pa rin ang lahat. */
/* ⚠ WALA NANG `blur` (itinama Ago 18, 2026 — sunod sa konseptong
   ipinadala). May 3px na blur ito dahil ang unang hiling ay "hindi
   masyadong klaro". Pagdating ng mismong litrato ay naiba ang larawan
   ng problema: MAY PUTING HAZE NA SA GITNA ANG LITRATO NILA — nakaluto
   na doon, eksakto sa kinauupuan ng logo. Kaya hindi na kailangang
   labuin ng CSS ang kabuuan: ang gilid ay dapat MALINAW (nababasa ang
   "STRONGBOND" sa karton sa konsepto nila), ang gitna ang kusang
   maputi. Ang blur ay basta-basta lang naglalabo ng lahat, pati ang
   dalawang gilid na dapat mismong makita. */
.shots{position:absolute;inset:0;overflow:hidden;filter:saturate(.96)}
.shot{position:absolute;inset:0;opacity:0;transition:opacity 1.25s var(--ease)}
.shot.is-on{opacity:1}
/* ⚠ `transition` ANG ZOOM AT HINDI `animation`. Sa `animation` ay
   NAGSISIMULA ULIT ito sa tuwing idinadagdag ang klase — at kapag
   tinanggal ang klase ay biglang bumabalik sa 1.05 ang larawan HABANG
   naglalaho pa siya, kaya may kitang lundag sa gitna ng crossfade. Sa
   `transition` ay dahan-dahang bumabalik ang paalis habang dahan-dahang
   lumalaki ang papasok — magkasalungat na galaw na parehong mabagal, at
   iyon ang nagpapalambot sa palitan. */
.shot img{
  width:100%;height:100%;object-fit:cover;display:block;
  transform:scale(1.05);transition:transform 6.4s linear;
}
.shot.is-on img{transform:scale(1.15)}

/* Ang belo. Mas makapal sa taas at baba kaysa sa gitna — doon nakaupo
   ang wordmark, at doon dapat pinakamalinaw ang litrato.
   ⚠ PINAHINA AGO 18, 2026: .72/.50/.78 → .46/.26/.5. Sa una ay puting
     lupa ang lumalabas sa kaliwa at ang litrato ay parang nasa kanang
     kalahati lang — hindi butas iyon (sinukat: umaabot ang `<img>` mula
     -176px hanggang 2009px sa isang 1832px na hero, sakop ang lahat),
     kundi BELO na masyadong makapal sa ibabaw ng bahaging maliwanag na
     ng litrato mismo. Ang maliwanag na bahagi + makapal na belo = puti.
     Ang blur ang nag-aalis ng detalye; hindi kailangang ang belo pa ang
     mag-alis ng litrato. */
/* ⚠ HALOS WALA NA ANG BELO (Ago 18, 2026). .46/.26/.50 ito; ngayon ay
   .14/.06/.20 — sapat lang para pantayin ang lima kung magkakaiba ang
   liwanag nila, at para may lumang-papel na init sa dulong taas at
   baba. ANG LITRATO MISMO ANG MAY PUTI NGAYON: hindi na trabaho ng
   CSS na paputiin ang gitna, trabaho na lang niyang huwag sirain ang
   gilid. */
.veil{
  position:absolute;inset:0;
  background:linear-gradient(180deg,
    rgba(255,255,255,.14) 0%, rgba(255,255,255,.06) 30%,
    rgba(255,255,255,.06) 64%, rgba(255,255,255,.2) 100%);
}

/* ---- ANG BLADE SA IBABA NG HERO ----
   ⚠⚠ PUNIT NA PAPEL ang nandito dati at ipinadala ni Kylie ang kapalit
      (Set 1, 2026) — ang inspo at ang mismong hugis, PNG na may alpha.
      Nasa _parked/hero-torn-paper.txt ang buong lumang CSS at ang
      dahilan niya; hindi siya binura.

   ⚠ HINDI SIYA INIGUHIT ULIT BILANG SVG. Kaya sana — dalawang wedge na
     may gradient — pero ang hugis na ito ay IBINIGAY, at ang muling
     pagguhit ay paglilipat ng disenyo sa hula ko. Ang larawan mismo
     ang ginamit.

   ⚠ NILINIS ANG LARAWAN BAGO IPASOK: 2172x724 ang ipinadala pero
     2167x365 lang ang may laman — 50% niya ay blangko, at ang blangko
     ay bytes na dinadala ng bawat bumubukas ng pahina at hindi
     kailanman nakikita. Ginupit sa laman at iniliit sa 1920:
     365 KB  →  86 KB.

   ⚠⚠ MAY TAAS SIYANG NAKATAKDA AT INUUNAT ANG LARAWAN PARA UMABOT.
      Sinasadya, at ito ang tanging paraan. Sa sariling sukat ng
      larawan (323/1920 = 16.8% ng lapad) ay 242px siya sa 1440px na
      bintana — 27% ng hero. Sa inspo ay mga 11% lang siya: GILID ng
      pahina, hindi slab.
      AT HINDI SIYA MAAAYOS SA PAGPAPALAKI O PAGPAPALIIT. Tuwid na
      wedge siya: sa kahit anong lapad ay KAPAREHONG kapal pa rin siya
      sa kaparehong puwesto, dahil magkasabay lumalaki ang `x` at ang
      `y`. Sinubukan ko iyon bago ang pag-unat. Ang SLOPE mismo ang
      kailangang ibaba.
   ⚠ WALANG NASISIRA SA PAG-UNAT dahil GRADIENT ang buong laman niya —
     walang tuldok, walang titik, walang bilog na magiging itlog. Ang
     tanging nagbabago ay ang anggulo, at iyon mismo ang binabago.
   ⚠ `bottom left` PA RIN ANG PUWESTO at 100% ang lapad: buo pa rin ang
     matulis na dulo sa kaliwa — siya ang nagbibigay ng hugis sa blade.
   ⚠ `clamp` AT HINDI `vw` LANG: 118px ang sahig sa malapad na monitor
     (kung hindi ay lumalapad siya nang walang hanggan) at 56px ang
     ilalim sa cellphone (kung hindi ay nawawala siya).

   ⚠ `bottom left` AT HINDI `bottom center`. Nakadikit ang matulis na
     dulo sa kaliwang gilid; sa `center` ay lumulutang siya at nagiging
     malinaw na larawan siyang nakapatong, hindi gilid ng pahina. */
.blade{
  position:absolute;left:0;right:0;bottom:0;z-index:1;
  height:clamp(56px,7.2vw,118px);
  background:url("../img/hero-blade.png") bottom left/100% 100% no-repeat;
  pointer-events:none;
}

/* ---- KAPAG MAS PATAYO ANG BINTANA KAYSA SA LARAWAN ----
   2.7:1 ang larawan. Sa cellphone (halos 1:2) ay 5.8 beses ang agwat, kaya
   `cover` na lang ang gagamitin ay 17% na lang ng lapad ang makikita —
   isang malaking mukha ng karton, hindi na punit na papel.

   Kaya sa patayong bintana ay ginagawa itong BANDA sa ibaba: puti sa taas
   kung saan nakalapag ang logo, tapos ang punit na papel na may karton sa
   baba, at ang asul na punit ay eksaktong nasa dulong-ibaba.

   ⚠ ANG BUG NA INAYOS DITO (Ago 8, 2026)
   Ang buong taas ng larawan ang lumalabas noon sa banda — pati ang NAVY
   NA PUNIT SA ITAAS nito. Sa buong hero ay tama iyon: nasa dulong-taas ng
   bintana. Pero bilang banda, ang navy na iyon ay naging isang PATAG NA
   ASUL NA GUHIT na nakalutang sa gitna ng puti, at doon mismo dumadaan
   ang dalawang pindutan at ang mga icon. Iyon ang nakita sa cellphone.

   SINUKAT sa larawan (2061×763), bawat walong hanay:
       hanay 0–79      navy          = itaas na 10.4%   ← ITO ANG GUHIT
       hanay 80–160    kulay-abo     = ang lilim ng punit
       hanay 168 pataas  halos puti  = mula sa 22%
       hanay 640–763   navy          = ibabang 16.1%    ← ito ang gusto natin

   Ang ITAAS NA 12% lang ang pinuputol — sapat para mawala ang navy, at
   naiiwan ang kulay-abong lilim ng punit. Sinadya iyon: PUNIT NA PAPEL
   ang hitsura ng lilim na iyon, at iyon mismo ang disenyo. Ang navy lang
   ang nagmumukhang guhit. (Sinubukan ko ring putulin ang buong 22% —
   malinis nga, pero nawawala ang punit at nagiging basta larawan na lang
   ng karton na may puting tuktok.)

   Kailangan ng sariling kahon para maputol iyon: ang `.bg` ay kasinlaki
   ng buong hero, at walang pumuputol sa larawan doon. Ang `::before` ay
   may sariling `height:var(--banda)`, at doon ito naiipit.

   `::before` at hindi `::after`: ang `::before` ay unang anak, kaya
   nauuna itong ipinipinta kaysa sa `.pool` — nananatiling nasa ibabaw ang
   pampaliwanag ng gitna. Kabaligtaran ang `::after`.

   3.069 = 2.701 ÷ 0.88. Ang 2.701 ang ratio ng larawan; ang paghahati sa
   0.88 ang nagpapalaki nito nang sapat para ang nakikitang 88% ay eksakto
   ang taas ng banda. Ang `100%` ang sahig — kung mas maliit ang bilang,
   may puting siwang sa gilid.

   ⚠ 52svh ANG BANDA, at may kasaysayan ito.
     40svh ito noon. Ginawa kong 36svh nang idagdag ang pagputol —
     pinipigilan ko ang pagpapalaki, dahil ang pagputol ay
     nangangahulugan ng pagpapalaki. Pero MASYADO ITONG BUMABA: 28% ng
     hero ang naging blangkong puti sa itaas, at ang larawan ay naging
     manipis na guhit sa ilalim.

     52svh na ngayon, PLUS ang NAGLALAHONG TUKTOK. Ang mask ang susi:
     kung basta lalakihan ang banda nang walang mask, tatawid ang matalim
     na gilid ng punit na papel sa gitna ng wordmark. Sa mask ay
     naglalaho ito papasok, kaya umaabot na ang larawan hanggang gitna ng
     hero nang walang anumang linyang humahati sa laman.

     Kapalit: mas malapit ang tingin (29% ng lapad ng larawan, dating
     42%), kaya mas malaki ang karton. Sinubukan ko ang 36 at 46 nang
     magkatabi — dito lang nawawala ang pakiramdam na may butas sa itaas
     ng hero. */
/* ⚠ WALA NANG BANDA SA CELLPHONE, AT NAWALA ANG DAHILAN NIYA (Ago 18,
   2026). Ang buong itaas na tala ay tungkol sa isang problema: sa
   patayong bintana ay `cover` ang larawan, kaya 17% na lang ng lapad
   niya ang nakikita — isang malaking mukha ng KARTON, hindi na punit na
   papel. Ang sagot noon ay gawing banda sa ibaba ang larawan.

   Wala nang karton sa gitna ngayon — tinanggal siya ng `mask` sa
   `.paper`, at LITRATO ang nasa gitna. Ang natitira sa larawan ay ang
   dalawang PAHALANG na punit sa dulong-taas at dulong-baba, at ang
   pahalang na guhit ay hindi nasisira ng pagputol sa gilid: nananatili
   siyang buong lapad kahit gaano kakipot ang bintana. Kaya kusa nang
   tama ang `cover` dito, at ang buong banda ay naging patay na code.

   Ang natitira na lang na gawin sa patayong bintana ay pahinain ang
   belo — mas maliit ang litratong nakikita roon, kaya mas kaunti ang
   kailangang takpan. */
/* =========================================================
   ⚠⚠ KAPAG MAS PATAYO ANG BINTANA KAYSA SA LITRATO (cellphone)

   ITO ANG PINAKAMAHIRAP NA SULOK NG HERO, AT SINUKAT KO SIYA BAGO
   HUMAWAK. Ang reklamo: "sa phone users hindi visible yung backround".
   Totoo — pero HINDI ANG CSS ANG MAY KASALANAN, at iyon ang naiba sa
   inakala ko. Ito ang panukat (katamtamang liwanag sa 0–255, at kung
   ilang porsyento ng pixel ang halos puti na, sa itaas na 62% ng hero):

       kung ano noon                   209.6   6.9% halos-puti
       tinanggal ang .veil             204.9   8.6%
       tinanggal din ang .pool         209.8  29.4%
       tinanggal din ang .grain        212.6  46.6%
       ANG LITRATO LANG                212.8  46.8%   ← ito ang sagot

   MAS MAPUTI ANG HUBAD NA LITRATO KAYSA SA BUONG PATONG. Hindi
   nagpapaputi ang tatlong patong — nagbabawas nga sila. Halos KALAHATI
   ng hero sa cellphone ay mistulang puting pixel na galing mismo sa
   file. (Sa desktop ay 176.7 lang ang parehong litrato.)

   ANG DAHILAN: 1672×941 ang litrato (pahiga) at 390×800 ang cellphone
   (patayo). Sa `cover` ay 27% lang ng lapad ng litrato ang natitira —
   at SINUKAT KO KUNG SAAN NASA LITRATO ANG LAMAN:

       hero-1  makina 0–33%  ·  HAZE 35–75%  ·  pallet 76–100%
       hero-2  makina 0–38%  ·  HAZE 38–68%  ·  tao   70–100%
       hero-3  rolyo  0–40%  ·  HAZE 40–62%  ·  karton 63–100%
       hero-4  karton 0–30%  ·  HAZE 30–62%  ·  trak  63–100%

   Nasa GITNA ang haze sa apat, at nasa DALAWANG GILID ang laman. Ang
   dating `object-position:70%` ay lumalapag sa 51–78% ng litrato —
   halos purong haze. Kaya blangko ang hero sa cellphone.
   ========================================================= */
@media (max-aspect-ratio:6/5){
  /* ⚠ 4% AT HINDI 70%. Sa KALIWANG gilid ang lahat ng laman, at
     sinasadya kung bakit kaliwa at hindi kanan:
       · sa kaliwa: makina, rolyo, at ang SARILING KARTONG STRONGBOND ng
         TapeMate sa hero-4. Produkto ang nasa likod ng logo.
       · sa kanan: may TAO sa hero-2 at hero-4 — at sa hero-2 ay may
         TAPEMATE NA LOGO ANG DAMIT NIYA, na lumalapag mismo sa likod ng
         wordmark. Dalawang TapeMate na magkapatong.
     Hindi 0% kundi 4%: sa 0% ay laging nasa dulong-dulo ang tabas at
     nakakaputol ng bagay sa gilid; ang 4% ay isang hakbang papasok. */
  .shot img{object-position:4% center}

  /* ⚠ CONTRAST AT HINDI PAG-AALIS NG BELO. Ang haze ay nakaluto sa
     FILE — puting patong siyang nakadikit na sa pixel, at walang
     matatanggal na patong ng CSS na magbabalik niyon. Ang `contrast`
     ang eksaktong kabaligtaran ng operasyong iyon: hinihila niyang
     paloob ang naipit na hanay ng liwanag.
     ⚠ MAHINA LANG (1.14 at 1.12): sa 1.3 pataas ay nagiging poster ang
       litrato — nawawala ang detalye sa lilim at nagiging tuldok ang
       ilaw. Hindi ito pag-aayos ng litrato, pagbabalik lang siya ng
       nakitang naitulak palabas. */
  .shots{filter:saturate(1.12) contrast(1.14)}

  /* ⚠ PINAHINA ANG BELO MULA .42/.24/.24/.46. Naiwan ang mga numerong
     iyon noong Ago 18 nang pinahina ang belo ng desktop papuntang
     .14/.06/.06/.2 — apat na beses na mas makapal ang cellphone kaysa
     sa desktop, at iyon ay dagdag na puti sa ibabaw ng litratong
     maputi na. */
  .veil{
    background:linear-gradient(180deg,
      rgba(255,255,255,.2) 0%, rgba(255,255,255,.08) 32%,
      rgba(255,255,255,.08) 62%, rgba(255,255,255,.26) 100%);
  }

  /* ⚠ HINAPIT ANG BILOG NA PUTI: 52%×44% siya, ngayon ay 48%×22%.
     Habang blangko ang litrato ay walang nakikitang pagkakaiba — puti
     sa ibabaw ng puti. Ngayong may laman na ang likod, siya na ang
     nagiging PUTING MANTSA sa gitna ng bodega. Mas maliit pero mas
     malakas (.70): sapat lang para sa wordmark at wala nang iba. */
  .pool{background:radial-gradient(48% 22% at 50% 37%,rgba(255,255,255,.7),rgba(255,255,255,0) 78%)}

  /* ⚠ SA MISMONG TITIK ANG PROTEKSYON AT HINDI SA LIKOD NIYA. Ito ang
     naiwang problema pagkatapos maging kitang-kita ang litrato: ang
     "At TapeMate, We Give a Pack!" ay nasa 55% ng taas — sa LABAS ng
     bilog na puti — at navy siya sa ibabaw ng abalang litrato.
     Ang paglaki ng bilog para maabot siya ay pagbabalik sa mismong
     puting hero na inirereklamo. Ang halo sa titik ay umaabot lang ng
     ilang pixel mula sa gilid ng bawat letra: nababasa ang teksto at
     nananatiling nakikita ang litrato sa pagitan ng mga salita.
     Tatlong patong: matigas at malapit (3px) para sa gilid, malambot
     (16px) para sa kabuuan, at napakalawak (34px) para sa madilim na
     likod. */
  .tag{
    text-shadow:0 1px 3px rgba(255,255,255,.95),
                0 0 16px rgba(255,255,255,.9),
                0 0 34px rgba(255,255,255,.7);
  }
  /* ⚠ `drop-shadow` AT HINDI `box-shadow`. Larawan ang wordmark at may
     malinaw siyang hugis; sinusundan ng `drop-shadow` ang HUGIS ng
     titik, samantalang ang `box-shadow` ay parisukat sa paligid ng
     larawan — makikita mo ang gilid ng PNG. */
  .logo__img{filter:drop-shadow(0 0 4px rgba(255,255,255,.9)) drop-shadow(0 0 18px rgba(255,255,255,.85))}
}

/* pinapaliwanag ang gitna para malinaw pa rin ang wordmark kahit makulay ang paligid */
/* ⚠ PINALIIT AT PINAHINA AGO 18, 2026: 54%×46% na may .62 → 40%×34% na
   may .34. Ito ang PANGALAWANG nagpapaputi sa kaliwa, at mas mapanlinlang
   siya kaysa sa belo: bilog siya, kaya ang puti niya ay HINDI PANTAY —
   makapal sa gitna-kaliwa kung saan nakaupo ang wordmark, at doon
   nagmumukhang may puting lupa ang eksena. Sa maliit at mahinang bilog
   ay ang mismong LIKOD LANG NG TITIK ang napapaliwanag, hindi na ang
   kalahati ng hero. */
/* ⚠ ITO ANG SAPIN, AT SINADYA NA HINDI SIYA MAKIKITA SA TAMANG LITRATO.
   May nakalutong puting haze sa GITNA ang apat na litratong ipinadala ng
   kliyente — doon mismo nakaupo ang wordmark, at iyon ang dahilan kung
   bakit mababasa siya sa konsepto nila. Pero ang haze ay nasa FILE, at
   ang file ay mapapalitan: isang litratong walang haze at nawawala ang
   logo sa likod ng makina o ng karton.
   Puti sa ibabaw ng puti ay walang nababago — sa litratong may haze ay
   hindi mo makikita ang bilog na ito. Sa litratong walang haze ay siya
   ang nag-iisang dahilan kung bakit nananatiling nababasa ang pangalan.
   Sapin siya, hindi disenyo. */
.pool{position:absolute;inset:0;overflow:hidden;
  background:radial-gradient(50% 44% at 50% 44%,rgba(255,255,255,.44),rgba(255,255,255,0) 74%)}

/* ---- ANG KULAY SA GITNA ----
   ⚠ APAT NA BLOOM NG BRAND, HINDI ISANG BAGONG KULAY. Bughaw
     (`--electric`), kraft at teal — pawang nasa palette na, at pawang
     nasa litrato na rin: bughaw ang ilaw ng bodega, kraft ang karton,
     teal ang pintura ng pader sa dalawa sa apat. Hindi ito bagong wika;
     kinukuha lang nito ang nasa litrato at ipinapahid sa puti.
   ⚠ PULA ANG PANG-APAT, AT SIYA ANG PINAKAMAHINA (.15). Ang pula ay
     nasa pindutan at nasa singsing ng logo — malakas siyang kulay at
     madali siyang maging “may mali” kapag napansin. Nasa ibabang-kaliwa
     siya, malayo sa wordmark at malayo sa pindutan, kaya init lang siya
     sa sulok at hindi pangalawang pulang bagay na nakikipag-agawan.
   ⚠ MAHINA PA RIN SILANG LAHAT (.40 pababa) AT MAY DAHILAN: nakaupo ang
     wordmark dito. Ang malakas na kulay sa likod ng navy na titik ay
     nagbabawas ng kontraste — ang puti ang nagbabasa sa pangalan, ang
     kulay ang nag-aalis lang ng pagka-blangko.
   ⚠ `transform` ANG PAGGALAW AT HINDI `background-position`. Ang
     `background-position` ay muling pagpinta ng buong kahon kada frame;
     ang `transform` ay nasa compositor lang. Dalawampu't anim na segundo
     ang isang ikot — hindi ito dapat mapansing gumagalaw, dapat lang
     hindi mukhang nakapirming larawan. */
.pool::before{
  content:"";position:absolute;inset:-12%;pointer-events:none;
  background:
    radial-gradient(42% 46% at 30% 32%, rgba(59,156,255,.40), rgba(59,156,255,0) 70%),
    radial-gradient(38% 42% at 73% 60%, rgba(242,160,93,.34), rgba(242,160,93,0) 68%),
    radial-gradient(33% 37% at 64% 25%, rgba(44,110,128,.25), rgba(44,110,128,0) 70%),
    radial-gradient(30% 34% at 22% 76%, rgba(214,32,44,.15),  rgba(214,32,44,0)  72%);
  animation:poolDrift 26s ease-in-out infinite alternate;
}
@keyframes poolDrift{
  from{transform:translate3d(-1.6%,-1.2%,0) scale(1)}
  to  {transform:translate3d(2%,1.6%,0) scale(1.06)}
}

/* ---- ANG SINAG MULA SA BUBUNGAN ----
   ⚠ NASA LITRATO MISMO ANG PINAGMULAN NITO. May skylight sa bubungan ng
     bodega sa tatlo sa apat na litrato, at may bumabagsak na ilaw mula
     roon. Ito ang pagpapatuloy niyon sa ibabaw ng puti — hindi imbentong
     palamuti kundi ang liwanag na nasa larawan na.
   ⚠ `screen` ANG BLEND: nagpapaliwanag lang, hindi nagdadagdag ng puting
     patong. Sa gitna kung saan puti na ay halos walang nangyayari; sa
     madilim na gilid ng litrato doon siya nakikita — kaya sinag siya at
     hindi guhit na nakapatong. */
.pool::after{
  content:"";position:absolute;inset:-20% -10%;pointer-events:none;
  background:
    linear-gradient(101deg, rgba(255,255,255,0) 28%, rgba(255,255,255,.52) 37%, rgba(255,255,255,0) 46%),
    linear-gradient(97deg,  rgba(255,255,255,0) 52%, rgba(255,255,255,.34) 59%, rgba(255,255,255,0) 66%),
    linear-gradient(104deg, rgba(255,255,255,0) 69%, rgba(255,255,255,.27) 74%, rgba(255,255,255,0) 80%);
  mix-blend-mode:screen;
  animation:poolRay 34s ease-in-out infinite alternate;
}
@keyframes poolRay{
  from{transform:translate3d(-2%,0,0)}
  to  {transform:translate3d(2.4%,0,0)}
}
@media (prefers-reduced-motion:reduce){
  .pool::before,.pool::after{animation:none}
}

/* ---- ANG BUTIL ----
   ⚠ ITO ANG PINAKAMALAKING SAGOT SA "TOO PLAIN OR WHITE". Ang puti ng
     gitna ay hindi papel — PATAG SIYANG DIGITAL NA PUTI, iisang halaga
     sa libo-libong pixel, at iyon ang nagmumukhang butas sa larawan.
     Walang tunay na litrato ang ganoon: may butil ang bawat sensor.
     Ang manipis na ingay na ito ang nagpapabalik sa puti sa larawan —
     hindi mo siya makikitang butil, mararamdaman mo lang na may
     TEKSTURA na ang dating blangko.
   ⚠ NASA SVG ANG INGAY, WALANG FILE. `feTurbulence` ang gumagawa nito sa
     loob mismo ng CSS — walang dagdag na request, walang PNG na
     ida-download bago pa maipinta ang hero. 160px ang tile at inuulit;
     `stitchTiles` ang nag-aalis ng tahi sa gilid ng bawat ulit.
   ⚠ .075 ANG OPACITY AT MAY DAHILAN: sa .12 pataas ay hindi na butil
     kundi DUMI — mukhang maruming screen o sirang litrato. Sa .04
     pababa ay wala kang makikitang pinagkaiba. Ang .075 ang pinakamataas
     na hindi mo mapapansin nang tahasan pero nararamdaman mo pa rin. */
/* ⚠ MAY MASK ANG BUONG PATONG, AT ITO ANG PINAKAMAHALAGANG LINYA RITO.
   Huli ang .grain sa lahat ng anak ng .bg, kaya nakapatong siya PATI sa
   punit na papel. Sa unang subok ay ganoon nga: naging kulay-melokoton
   ang buong punit at naging lila ang navy — parang na-filter ang buong
   ibaba. Ang butil at ang vignette ay para sa LITRATO; ang punit na
   papel ay hindi litrato kundi hugis, at malinis siya dapat.
   ⚠ 62% ANG SIMULA NG PUNIT NOON, at doon nakatono ang 56%/74% dito.
     Wala na ang punit (Set 1, 2026 — blade na siya), pero NANATILI ang
     mask at may bagong dahilan: nasa dulong-ibaba ang blade, at ang
     butil sa ibabaw ng malinis na gradient ay kitang-kita bilang dumi.
     Kapag may magbabago ng taas ng blade, ITO ANG TALA. */
.grain{position:absolute;inset:0;pointer-events:none;overflow:hidden;
  -webkit-mask-image:linear-gradient(180deg,#000 0,#000 56%,transparent 74%);
          mask-image:linear-gradient(180deg,#000 0,#000 56%,transparent 74%)}
.grain::before{
  content:"";position:absolute;inset:0;opacity:.075;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size:160px 160px;
}

/* ---- ANG VIGNETTE AT ANG INIT SA PAANAN ----
   ⚠ DALAWANG TRABAHO, IISANG PATONG.
     1. ANG GILID: bahagyang pinalalalim ang apat na sulok. Kapag pantay
        ang liwanag mula gilid hanggang gitna ay walang HUGIS ang eksena
        — plat siya. Sa may vignette ay nagiging SINISINAGAN NA LUGAR ang
        gitna, at iyon ang dahilan kung bakit maputi siya. Hindi na siya
        blangko; siya na ang pinakamaliwanag na bahagi ng isang bodega.
     2. ANG PAANAN: mainit na kraft na sinag sa dulong-ibaba. Doon
        nagtatagpo ang litrato at ang punit na papel, at magkaibang mundo
        ang dalawa — litrato sa itaas, guhit na navy sa ibaba. Ang init
        na ito ang tulay: dumidilim ang litrato papuntang kulay-karton
        bago pa umabot sa punit, kaya hindi na parang basta pinutol.
   ⚠ NAVY ANG ILIM AT HINDI ITIM. Ang itim na vignette ay nagiging
     kulay-abo ang litrato — mukhang maruming lente. Ang navy ay nasa
     palette na (ang mismong punit, ang wordmark), kaya ang paglalim ay
     nagmumukhang LILIM NG SARILING KULAY at hindi dagdag na dumi. */
.grain::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(128% 116% at 50% 38%,
      rgba(20,44,86,0) 44%, rgba(20,44,86,.06) 72%, rgba(20,44,86,.15) 100%),
    linear-gradient(180deg,
      rgba(242,160,93,0) 40%, rgba(242,160,93,.15) 62%, rgba(242,160,93,0) 76%);
}

/* ---- ANG ALIKABOK SA SINAG ----
   ⚠ TOTOO ITO SA LARAWAN, HINDI PALAMUTI. May skylight sa bubungan sa
     tatlo sa apat na litrato. Kung saan may sinag na bumabagsak sa
     bodega ay may lumulutang na alikabok doon — iyon mismo ang nakikita
     mo kapag may tumagos na araw sa isang bintana. Wala nito ang gitna
     dahil PINUTI natin siya, hindi dahil walang hangin doon.
   ⚠ SIYAM LANG SILA AT NASA GILID ANG KARAMIHAN. Nasa 30–70% ng lapad
     ang wordmark at ang dalawang pindutan; anumang gumagalaw sa likod
     ng binabasa ay nakakaabala gaano man kalabo. Nasa kaliwa, sa kanan,
     at sa taas ng badge ang siyam — sa hangin, hindi sa teksto.
   ⚠ PAAKYAT SILA AT HINDI PABAGSAK. Ang alikabok sa sinag ay tumataas —
     init ng bodega ang nagtutulak. Ang pabagsak ay niyebe, at hindi
     iyon ang eksena.
   ⚠ WALANG SIMULA AT WALANG DULO ANG NAKIKITA: naglalaho sila sa
     dalawang dulo ng ikot (`opacity:0` sa 0% at 100%). Kung hindi, may
     siyam na tuldok na bigla na lang sumusulpot sa ibaba at bigla na
     lang nawawala sa taas kada ikot — at iyon ay hindi na hangin kundi
     animasyon. Iba-iba ang `--dl` kaya hindi sila sabay-sabay. */
/* ⚠ .specks AT HINDI .dust — MAY .dust NA (linya 575, ang usok ng
   trak). Nauna kong tinawag itong .dust at nasira ang usok: mas mataas
   ang specificity ng `.dust i` (0,1,1) kaysa sa `.puff` (0,1,0), kaya
   ang siyam na usok ay kumuha ng ibang animasyon at ibang hugis.
   Kapag magdaragdag ng bagong klase rito, hanapin muna ang pangalan sa
   buong file — pitong libong linya siya at hindi mo matatandaan lahat. */
.specks{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.specks i{
  position:absolute;left:var(--l);top:var(--t);
  width:var(--s);aspect-ratio:1;border-radius:50%;
  background:radial-gradient(closest-side,
    rgba(255,255,255,.95), rgba(222,238,255,.42) 56%, transparent 76%);
  opacity:0;
  animation:speckRise var(--d) linear var(--dl) infinite;
}
@keyframes speckRise{
  0%  {transform:translate3d(0,10vh,0) scale(.65);opacity:0}
  16% {opacity:var(--o)}
  78% {opacity:var(--o)}
  100%{transform:translate3d(var(--ax),-13vh,0) scale(1.2);opacity:0}
}
/* Sa reduced-motion ay hindi sila itinatago — pinatitigil lang, at
   pinapakita sa kanilang lugar. Ang paggalaw ang hiniling na tanggalin,
   hindi ang tekstura. */
@media (prefers-reduced-motion:reduce){
  .specks i{animation:none;opacity:var(--o)}
}

/* ---- the truck ---- */
.streaks{position:absolute;right:86%;top:16%;width:190%;height:62%;pointer-events:none;
  animation:calmDown 1.1s ease 2.65s forwards}
@keyframes calmDown{to{opacity:.32}}
.streak{position:absolute;right:0;height:var(--h);width:var(--w);border-radius:99px;
  background:var(--c);transform-origin:right center;opacity:0;
  animation:whoosh var(--dur) cubic-bezier(.35,0,.6,1) infinite;animation-delay:var(--d)}
@keyframes whoosh{
  0%{transform:translateX(46%) scaleX(.12);opacity:0}
  18%{opacity:var(--o)}
  62%{opacity:var(--o)}
  100%{transform:translateX(-170%) scaleX(1);opacity:0}
}

/* Ang logo lang ang nasa daloy dito, kaya siya ang nasa gitna. Dumadaan
   lang ang trak — wala ito sa daloy at hindi kumakain ng lapad. */
.lockup{position:relative;display:grid;justify-items:center}

/* ---- ANG DAAN NG TRAK ----
   Ang wordmark LANG at ang trak ang nasa loob nito. Ito ang saligan ng
   `.rig`, kaya ang `top:50%` niyon ay ang gitna mismo ng titik.

   ⚠ ANG BUG NA INAYOS NITO (Ago 10, 2026): nasa `.lockup` ang trak noon,
     at kasama roon ang badge sa itaas. Ibig sabihin, ang gitna ng
     sinusukat ay ang gitna ng BADGE+LOGO — sinukat sa 390px: nasa
     y 289–352 ang trak samantalang nasa y 302–401 ang logo. Kalahati
     lang ng titik ang nadadaanan, 13px itong nakalampas sa itaas ng
     logo, at 7px pang pumapasok sa badge. Hindi ito trak na dumadaan sa
     pangalan — sticker itong nakadikit sa itaas na gilid.

   Walang `overflow` dito: dumadaan ang trak mula labas hanggang labas. */
.lane{position:relative;display:block}

/* ---- ANG PAGDAAN NG TRAK ----
   Mula sa labas ng kaliwa, tuloy-tuloy hanggang sa labas ng kanan.

   ⚠ HINDI NA NIYA BINUBUNYAG ANG LOGO (Set 2, 2026). Siya ang
     nagbubukas ng pangalan noon sa pamamagitan ng `mask`; TATAK na
     ngayon ang pagdating — tingnan ang `.logo` at ang `stampIn`.
     NAIWAN PA RIN SIYA BILANG ORASAN: pagkalampas ng buntot niya sa
     kanang gilid ng pangalan ay doon bumabagsak ang tatak (seksyon 1
     ng main.js). Dumaan ang trak, tapos tinatakan ang pangalan.

   `linear`: sasakyan ito, at walang dahilan para bumagal sa gitna.

   `both`, HINDI `forwards`. Ito ang naging bug: sa loob ng .45s na
   paghihintay ay wala pang tinutupad na keyframe ang `forwards` — ang
   `left:50%; top:50%` lang ang tumatakbo, walang `transform`. Ibig
   sabihin, nakaparada ang trak sa gitna mismo ng logo bago pa man
   umandar, at sa unang tingin pa lang ay nakabungad na siya sa gitna.
   Nakikita rin iyon ng rAF sa main.js, kaya kalahati agad ang bukas ng
   logo — tapos biglang lulundag pabalik sa sarado pagsapit ng .45s.
   Ang `both` ay humahawak sa UNANG keyframe habang naghihintay (labas ng
   kaliwa) at sa HULI pagkatapos (labas ng kanan).

   Nasa loob ng keyframe ang -50% na paggitna, kung hindi ay bubura ito ng
   `transform` ng animation. */
.rig{
  position:absolute;left:50%;top:50%;z-index:6;
  width:clamp(126px,20.5vw,296px);pointer-events:none;
  /* `--span` para may iisang pihitan sa layo ng biyahe. Hindi ito
     ini-animate, kaya nareresolba ito nang maayos sa loob ng keyframe. */
  --span:118vw;
  animation:driveThru 3.4s linear .45s both;
}
@keyframes driveThru{
  from{transform:translate(-50%,-50%) translateX(calc(-1 * var(--span)))}
  to  {transform:translate(-50%,-50%) translateX(var(--span))}
}
/* ⚠⚠ ITINATAGO ANG TRAK KAPAG NAKALABAS NA SIYA (Set 9, 2026).
     Nasa `translateX(118vw)` siya pagkatapos ng 3.85s — nasa labas na
     ng screen, pero NAKAILAW PA RIN ANG APAT NIYANG ANIMATION:
       roll  .62s   ang dalawang gulong, walang hanggan
       idle  1.25s  ang katawan
       jig   1.25s  ang tatlong karton
       puff  ang alikabok sa gulong
     Habambuhay silang tumatakbo para sa isang bagay na wala nang
     nakakakita. SVG sila, kaya bawat ikot ay bagong raster.
   ⚠ SA LAHAT NG APARATO ITO, hindi lang sa cellphone. Walang
     nawawalang nakikita — tapos na ang biyahe bago pa ito tumama.
   ▶ Nasa seksyon 1 ng main.js ang nagkakabit ng `is-tapos`. */
.rig.is-tapos{display:none}
.rig__svg{width:100%;height:auto;display:block;
  filter:drop-shadow(0 18px 22px rgba(31,66,128,.2))}

.truck-body{animation:idle 1.25s ease-in-out infinite;transform-origin:50% 92%}
@keyframes idle{0%,100%{transform:translateY(0) rotate(0)}28%{transform:translateY(-3px) rotate(-.22deg)}72%{transform:translateY(2px) rotate(.22deg)}}
.wheel{animation:roll .62s linear infinite;transform-box:fill-box;transform-origin:center}
@keyframes roll{to{transform:rotate(360deg)}}
.crate{animation:jig 1.25s ease-in-out infinite;transform-box:fill-box;transform-origin:bottom center}
.crate--b{animation-delay:.13s}
.crate--c{animation-delay:.26s}
@keyframes jig{0%,100%{transform:translateY(0)}42%{transform:translateY(-3.5px)}}
/* Dumadaan lang ang trak at `pointer-events:none` na ito, kaya wala nang
   hover — palagi nang bukas ang sinag. */
.beam{opacity:.4}

.dust{position:absolute;left:0;bottom:4%;width:60%;height:44%;pointer-events:none;z-index:-1}
.puff{position:absolute;bottom:0;border-radius:50%;background:var(--gray);
  animation:puff var(--dur) ease-out infinite;animation-delay:var(--d);opacity:0}
@keyframes puff{
  0%{transform:translate3d(0,0,0) scale(.3);opacity:.45}
  100%{transform:translate3d(-90px,-42px,0) scale(1.6);opacity:0}
}

/* ---- props ---- */
.props{position:absolute;inset:0;z-index:2;pointer-events:none}
.prop{
  position:absolute;left:var(--l);top:var(--t);width:var(--w);opacity:0;pointer-events:auto;cursor:pointer;
  animation:propIn .9s var(--ease) forwards, drift var(--dur) ease-in-out infinite;
  animation-delay:var(--in), calc(var(--in) + .9s);
  filter:drop-shadow(0 12px 16px rgba(31,66,128,.15));transition:filter .35s ease;
}
.prop svg{width:100%;height:auto;display:block;transition:transform .4s var(--back)}
@media (hover:hover){ .prop:hover{filter:drop-shadow(0 20px 26px rgba(31,66,128,.26))} .prop:hover svg{transform:translateY(-7px) scale(1.07)} }
@keyframes propIn{from{opacity:0;transform:translateY(22px) rotate(var(--r)) scale(.9)}to{opacity:1;transform:translateY(0) rotate(var(--r)) scale(1)}}
@keyframes drift{0%,100%{transform:translateY(0) rotate(var(--r))}50%{transform:translateY(-14px) rotate(calc(var(--r) + 2.5deg))}}

/* ---- centre ---- */
.core{position:relative;z-index:5;display:grid;justify-items:center;text-align:center;padding:0 22px}

/* ---- ANG LOGO SA HERO ----
   Larawan na ito, hindi na teksto. Iginuhit ang wordmark ng TapeMate at
   walang font na kayang tumularan — tingnan ang assets/logo/README.txt.

   ⚠⚠ WALA NANG PAWI NG TRAK DITO (Set 2, 2026). Hiling ni Kylie:
      "stamp-in logo reveal — this is the transition u need to do."

      `mask-image` na sinusundan ang buntot ng trak ito noon: unti-unti
      siyang bumubukas mula kaliwa habang dumadaan ang sasakyan. Maganda
      siya, pero PAWI iyon at hindi TATAK — lumilitaw ang pangalan mula
      sa gilid, hindi bumabagsak mula sa itaas.

      Bumabagsak na siya ngayon: 1.3x ang laki, -3.6deg ang pihit,
      hindi pa nakikita — at sa loob ng 253ms ay tumatama siya sa
      pahina. Tingnan ang `stampIn` sa ibaba.

    ⚠ NANATILI ANG TRAK AT ANG BUONG PAGSUKAT SA KANIYA. Siya pa rin
      ang nagsasabi KUNG KAILAN — pagkalampas ng buntot niya sa kanang
      gilid ng pangalan ay doon bumabagsak ang tatak. Kaya buhay pa rin
      ang kuwento: dumaan ang trak, tapos tinatakan ang pangalan.

    ⚠ MGA 0.4s NA LANG ANG DAGDAG NA BLANGKO SA GITNA, at hindi buong
      2.5s. Nagsisimulang lumitaw ang pangalan sa PAGBAGSAK — 253ms bago
      pa tumama. Ang lumang pawi naman ay nagsisimula kapag nalampasan ng
      buntot ang KALIWANG gilid, kaya mas maaga siya nang isang lapad ng
      logo. Bahagi ng biyahe ng trak ang pagkakaiba, hindi nakapirming
      bilang — kaya pareho silang gumagalaw kapag mabagal ang linya.

    ⚠ WALA NANG `--wipe` AT `--fx`, at wala na ring sinusulat na
      custom property ang JS kada frame. Ang `--wipe` ay binabasa lang
      ng mask na ito; kapag naiwan siya ay patay na kodigo na mukhang
      buhay. Tinanggal na rin sa main.js at sa useHero.ts.

    ▶ PAGBABALIK NG PAWI: ibalik ang `--wipe:0; --fx:7%` at ang
      dalawang `mask-image` dito, ang `.logo.done{mask-image:none}`,
      at ang `buksan()` sa seksyon 1 ng main.js. */
.logo{
  position:relative;display:block;cursor:pointer;
  width:clamp(230px,44vw,640px);
  filter:drop-shadow(0 8px 18px rgba(31,66,128,.13));
  transition:transform .4s var(--back),filter .4s ease;
}
/* ⚠ DITO NAKATAGO ANG PANGALAN BAGO ANG TATAK, at nasa `.logo__img`
     siya at hindi sa `.logo`: ang `.logo` ang may hover na `transform`,
     at ang animation ay nakakalusot sa karaniwang deklarasyon — kapag
     doon inilagay ang tatak ay mawawala ang hover habang tumatakbo.
   ⚠ Ang `.done` ay galing sa JS. Kung hindi tatakbo ang JS ay mananatili
     siyang nakatago — kaya nandiyan ang `setTimeout(tapos, 4200)` bilang
     lambat. Ganoon din ang panganib ng lumang `--wipe:0`. */
.logo:not(.done) .logo__img{opacity:0}
.logo__img{display:block;width:100%;height:auto}
@media (hover:hover){ .logo:hover{transform:translateY(-4px) scale(1.025);filter:drop-shadow(0 16px 26px rgba(31,66,128,.22))} }
/* ⚠⚠ ANG BUONG PAGDATING NG PANGALAN AY TATAK NA (Set 2, 2026).

     Dalawang patong ng IISANG hampas, sabay na nagsisimula:
       `stampIn`     sa MARKA    — bumabagsak, tumatama, pumipisa
       `stampPress`  sa IBABAW   — umuurong ang lockup sa tama
     Iisang klase lang (`.is-hit`) ang nagpapatakbo sa dalawa, kaya
     imposible silang mag-iba ng oras.

     1.15s ang buong tatak, at hati siya sa dalawa:
       0 -> 22%    (0-253ms)     PAGBABA — ang marka lang ang gumagalaw
       22% pataas  (253-1150ms)  HAMPAS, DIIN, PAGKUPAS
     Kaya tahimik ang `stampPress` hanggang 21%: walang dahilan para
     yumanig ang ibabaw bago pa may tumama dito.

   ⚠ 1.3x LANG ANG SIMULANG LAKI, at may sukat iyon. Sa 390px na
     cellphone ay 296px ang logo; ang 1.3x ay 385px — kasya pa sa
     screen. Sa 1.4x ay puputulin na ang magkabilang dulo ng wordmark
     habang bumababa, at hindi na iyon tatak kundi sira.

   ⚠ WALANG `blur` DITO KAHIT SIYA ANG PINAKAMADALING PAMPABILIS NG
     DATING. Dalawang dahilan: may sariling `filter` na `drop-shadow`
     ang `.logo__img` sa loob ng isang media query sa seksyon 2 —
     mabubura siya habang tumatakbo at biglang babalik sa dulo; at ang
     `blur` sa 640px na larawan ay ipinipinta ng CPU kada frame. Ang
     `transform` at `opacity` lang ang ginamit — pareho silang
     compositor-only.

   ▶ Kapag pinalitan ang `1.15s`, PALITAN DIN ANG 1200 SA JS (seksyon 1
     ng main.js at ang useHero.ts). Doon tinatanggal ang `.is-hit`;
     kapag mas maikli iyon ay puputulin ang tatak sa kalagitnaan at
     lulundag ang lahat pabalik. */
.lockup.is-hit{animation:stampPress 1.15s both;will-change:transform}
.lockup.is-hit .logo__img{
  animation:stampIn 1.15s both;
  transform-origin:50% 88%;will-change:transform,opacity;
}
/* ---- ANG TATAK: ANG MARKA ----
   `50% 88%` ang `transform-origin` — malapit sa PAA ng titik. Doon
   nakasalalay ang dalawang bagay nang sabay: pababa siyang lumiliit
   patungo sa linyang iyon habang bumabagsak (kaya galing siya sa
   ITAAS), at doon din siya pumipisa kapag tumama. Kung nasa gitna ito
   ay lumulubog ang buong pangalan sa halip na maipit sa ibabaw.

   ⚠ MAY BAYAD ANG PAGPISA. Ang `scaleY(.968)` ay sinasagot ng
     `scaleX(1.016)` — 1/sqrt(.968) = 1.0164. Ganoon kumikilos ang
     bagay na may laman: kapag piniga pababa ay lumalapad. Kung
     `scaleY` lang ang babaguhin ay lumiliit na larawan ang dating,
     hindi goma.

   ⚠ HULING SUMISIKAT ANG `opacity`: 0 -> .16 -> 1. Sa huling 138ms
     lang siya lumilitaw nang buo — sa mismong pagbagsak. Kaya
     SUMUSULPOT ang marka sa sandali ng tama at hindi dahan-dahang
     kumukupas papasok. Iyon ang pagkakaiba ng tatak sa fade.

   ⚠ PAREHO ANG LISTAHAN NG FUNCTION SA BAWAT KEYFRAME
     (`translateY scaleX scaleY rotate`). Kapag hindi magkatugma ang
     listahan ay ginagawa ng browser ang buong matrix bago mag-
     interpolate, at doon nawawala ang malinis na pagpisa. */
@keyframes stampIn{
  0%  {opacity:0;   transform:translateY(-16px) scaleX(1.3) scaleY(1.3) rotate(-3.6deg);
       animation-timing-function:cubic-bezier(.45,.02,.78,.32)}
  10% {opacity:.16; transform:translateY(-11px) scaleX(1.2) scaleY(1.2) rotate(-2.7deg);
       animation-timing-function:cubic-bezier(.62,0,.86,.34)}
  22% {opacity:1;   transform:translateY(0) scaleX(1.016) scaleY(.968) rotate(-.32deg);
       animation-timing-function:linear}
  29% {opacity:1;   transform:translateY(0) scaleX(1.0164) scaleY(.9676) rotate(-.3deg);
       animation-timing-function:linear}
  34% {transform:translateY(0) scaleX(1.0132) scaleY(.9738) rotate(-.26deg);
       animation-timing-function:cubic-bezier(.3,1.45,.5,1)}
  48% {transform:translateY(0) scaleX(.9948) scaleY(1.0104) rotate(.12deg)}
  60% {transform:translateY(0) scaleX(1.002) scaleY(.996) rotate(-.045deg)}
  71% {transform:translateY(0) scaleX(.9992) scaleY(1.0016) rotate(.018deg)}
  82% {transform:translateY(0) scaleX(1.0003) scaleY(.9994) rotate(-.006deg)}
  100%{opacity:1;   transform:translateY(0) scaleX(1) scaleY(1) rotate(0deg)}
}
/* ---- ANG TATAK: ANG IBABAW NA TINAMAAN ----
   Isang DAMPED OSCILLATION ito at hindi paikot-ikot na animation. Ang
   lakas ng bawat pag-ugoy ay mga 38% ng nauna sa kaniya:
       7.4  ->  2.7  ->  1.05  ->  .4  ->  .15  ->  0
   Iyon ang hitsura ng tunay na bagay na humihinto sa paggalaw. Kapag
   pantay-pantay ang mga bilang ay hindi na hampas ang dating kundi
   nagbabalik-balik na kumpas.

   ⚠ TAHIMIK SIYA HANGGANG 21%. Bumabagsak pa lang ang marka noon —
     walang dahilan para gumalaw ang ibabaw bago may tumama dito. Ang
     `.lockup` ay kinabibilangan ng badge ni Boss RDR at ng trak, kaya
     ang maagang yanig ay nagmumukhang ginalaw ang KAMERA.

   ⚠ NASA LOOB NG KEYFRAME ANG EASING, at doon nakasalalay ang lahat.
     Tatlong magkakaibang pisika ang isang tatak:
       21 -> 25%   PAGBABA  pabilis (`.6,0,.85,.35`) — bumabagsak siya
       25 -> 36%   DIIN     halos tuwid — HAWAK, hindi tumatalbog
       36% pataas  ANGAT    pabalik nang may sobra (`.3,1.45,.5,1`)
     ANG DIIN ANG BUONG KONSEPTO. Ang tumatalbog agad mula sa
     pinakamalalim ay bola; ang hinahawakan muna bago iniangat ay tatak.

   ⚠ PALIIT ANG `scale` SA HAMPAS AT HINDI PALAKI. Umuurong ang ibabaw
     palayo sa iyo kapag may dumiin dito, hindi lumulundag palapit.

   ⚠ MAY -.32deg NA PIHIT. Walang kamay na tuwid na tuwid magtatak.
     Nasa 3.5px lang iyon sa 640px na lapad — hindi mo mabibilang,
     mararamdaman mo lang na may kumilos. */
@keyframes stampPress{
  0%  {transform:translateY(0) scale(1) rotate(0deg)}
  21% {transform:translateY(0) scale(1) rotate(0deg);
       animation-timing-function:cubic-bezier(.6,0,.85,.35)}
  25% {transform:translateY(7.2px) scale(.9916) rotate(-.3deg);
       animation-timing-function:linear}
  31% {transform:translateY(7.4px) scale(.9912) rotate(-.32deg);
       animation-timing-function:linear}
  36% {transform:translateY(6.7px) scale(.9925) rotate(-.28deg);
       animation-timing-function:cubic-bezier(.3,1.45,.5,1)}
  50% {transform:translateY(-2.7px) scale(1.0033) rotate(.13deg)}
  62% {transform:translateY(1.05px) scale(.9987) rotate(-.05deg)}
  73% {transform:translateY(-.4px)  scale(1.0005) rotate(.02deg)}
  84% {transform:translateY(.15px)  scale(.9998) rotate(-.007deg)}
  100%{transform:translateY(0) scale(1) rotate(0deg)}
}

/* ---- ANG REKOMENDASYON NI BOSS RDR ----
   Nasa itaas ng wordmark. Sumusulpot ito bago pa ang tagline (2.42s laban
   sa 2.72s) dahil pagkilala ito: nauuna ang "sino ang nagsabi" bago ang
   "ano ang sinabi".

   `backwards` at hindi `forwards` — para hawak nito ang unang keyframe
   habang naghihintay, kaya `opacity:0` ito mula sa unang pinta. Kung
   `forwards`, sasandali itong buo bago maglaho, at tatalon ang layout. */
.rec{
  display:inline-flex;align-items:center;gap:10px;
  margin-bottom:clamp(14px,2.4vh,24px);
  padding:6px 8px 6px 6px;border-radius:999px;text-decoration:none;
  /* Parehong salamin ng header pill — magkapatid sila sa parehong
     tanawin, at dapat pareho ang lalim nila sa mata. */
  background:linear-gradient(180deg,rgba(255,255,255,.84),rgba(240,246,255,.66));
  border:1.4px solid rgba(255,255,255,.9);
  box-shadow:
    0 16px 34px -18px rgba(31,66,128,.6),
    0 2px 8px -6px rgba(31,66,128,.26),
    inset 0 1px 0 rgba(255,255,255,1);
  backdrop-filter:blur(14px) saturate(1.5);-webkit-backdrop-filter:blur(14px) saturate(1.5);
  animation:up .9s var(--ease) 2.42s backwards;
  transition:transform .3s var(--back),box-shadow .3s ease,border-color .3s ease;
}
@media (hover:hover){ .rec:hover{transform:translateY(-3px);box-shadow:0 16px 30px -14px rgba(31,66,128,.5);border-color:var(--line)} }
.rec__pic{width:34px;height:34px;border-radius:50%;overflow:hidden;flex:none;display:block}
.rec__pic svg,.rec__pic img{width:100%;height:100%;display:block;object-fit:cover}
.rec__col{display:grid;gap:1px;text-align:left}
/* Limang bituin sa itaas ng pangalan. Ito ang unang nakikita — mas
   mabilis mabasa ang hugis kaysa sa salitang "rekomendado". */
.rec__stars{display:flex;gap:1.5px;color:var(--kraft-deep);line-height:0}
/* ---- ANG PAGPASOK NG LIMANG BITUIN ----
   Dalawang animation ang magkapatong sa bawat bituin:

     starPop    isang beses lang, pagsulpot ng badge. Mula sa wala,
                lumalampas sa 1.35 bago bumalik sa 1 — iyon ang tumbok.
                Magkakaiba ng 90ms ang lima, kaya IISA-ISA silang
                lumalabas mula kaliwa, hindi sabay-sabay na kisap.

     starShine  paulit-ulit. Maiksing liwanag na tumatakbo mula kaliwa
                pakanan tuwing 4.2s. Nasa 82%–90% lang ng bawat siklo ang
                liwanag, kaya tahimik ito nang matagal at biglang
                dumadaan — kung mas mahaba, nagiging pumipikit na ilaw.

   Magkaibang haba ang stagger ng dalawa (.09s at .12s), kaya hindi
   magkasabay ang alon at ang pagpasok.

   `backwards` sa starPop: wala pa ito bago ang delay, kaya walang
   bituing sumusulpot nang maaga sa badge.

   ⚠ Hindi `:nth-child(n)` na may formula ang delay — hiwalay ang lima.
     Mas mahaba nga, pero nakikita mo ang bawat bilang at hindi mo na
     kailangang isaisip ang formula kapag binago ang bilis. */
.rec__stars svg{
  width:11px;height:11px;display:block;
  animation:starPop .52s var(--back) backwards,
            starShine 4.2s ease-in-out infinite;
}
.rec__stars svg:nth-child(1){animation-delay:2.62s, 3.40s}
.rec__stars svg:nth-child(2){animation-delay:2.71s, 3.52s}
.rec__stars svg:nth-child(3){animation-delay:2.80s, 3.64s}
.rec__stars svg:nth-child(4){animation-delay:2.89s, 3.76s}
.rec__stars svg:nth-child(5){animation-delay:2.98s, 3.88s}
@keyframes starPop{
  0%  {opacity:0;scale:.2;rotate:-45deg}
  55% {opacity:1;scale:1.35;rotate:10deg}
  100%{opacity:1;scale:1;rotate:0deg}
}
@keyframes starShine{
  0%,78%,100%{color:var(--kraft-deep);filter:none;scale:1}
  85%        {color:#FFC46B;filter:drop-shadow(0 0 5px rgba(255,180,70,.95));scale:1.22}
}
/* When the badge is touched the wave runs again, faster — an answer to the
   finger and not only decoration.

   ⚠ THE ANIMATION LIST MUST KEEP BOTH NAMES HERE. Only the times may
     change. This rule used to read `animation:starShine 1.5s ease-in-out
     infinite`, which dropped `starPop` off the list — and dropping a name
     CANCELS that animation. So the moment the pointer left the badge,
     `starPop` was built again from zero, and with its 2.62s delay and
     `backwards` fill THE FIVE STARS WENT BLANK FOR 2.6 SECONDS. Every
     hover. Fixed Aug 19, 2026 — *"nawawala yung stars nya"*.

   ▶ `animation-duration` and `animation-delay` do NOT restart anything —
     they only change the clock an already-running animation is read
     against. `starPop` finished seconds ago, so it stays finished. That
     is the only reason these are written out as separate properties
     instead of the shorthand.

   The FIRST value of every pair is starPop's and is repeated unchanged
   from the rule above; the SECOND is starShine's and is the one doing the
   work. Drop a first value and the shorthand-cancel bug is back. */
.rec:focus-visible .rec__stars svg{animation-duration:.52s, 1.5s}
@media (hover:hover){ .rec:hover .rec__stars svg{animation-duration:.52s, 1.5s} .rec:hover .rec__stars svg:nth-child(1){animation-delay:2.62s, 0s} .rec:hover .rec__stars svg:nth-child(2){animation-delay:2.71s, .07s} .rec:hover .rec__stars svg:nth-child(3){animation-delay:2.80s, .14s} .rec:hover .rec__stars svg:nth-child(4){animation-delay:2.89s, .21s} .rec:hover .rec__stars svg:nth-child(5){animation-delay:2.98s, .28s} }
.rec__txt{
  font-family:var(--display);font-weight:600;font-size:clamp(11.5px,1.05vw,13.5px);
  letter-spacing:.01em;color:var(--ink-2);white-space:nowrap;
}
/* ---- ANG MARKA SA PANGALAN ----
   Gintong highlighter sa likod ng "Boss RDR", pumapahid mula kaliwa
   pagkatapos ng huling bituin (2.98s + .52s = 3.50s). Iyon ang huling
   kilos sa hero, kaya may hantungan ang buong pagkakasunod.

   Sinukat: ang ginto sa .42–.62 sa ibabaw ng puti ay #F9D4B6, at 7.04:1
   ang navy sa ibabaw niyon — hindi ito nagpapahina sa pagbabasa,
   pinapatingkad lang.

   `box-decoration-break:clone` — kung mahati sa dalawang linya ang
   pangalan sa makitid na salamin, tig-isang marka ang bawat linya at
   kasinghaba lang ng teksto roon. Kung wala ito, isang mahabang guhit
   ang aabot sa buong lapad ng kahon. */
.rec__txt b{
  font-weight:800;color:var(--navy);
  padding:1px 4px;margin:0 -2px;border-radius:3px;
  -webkit-box-decoration-break:clone;box-decoration-break:clone;
  background-image:linear-gradient(180deg,rgba(242,160,93,.42),rgba(242,160,93,.62));
  background-repeat:no-repeat;background-position:0 100%;background-size:0 100%;
  animation:recMark .75s var(--ease) 3.5s forwards;
}
@keyframes recMark{to{background-size:100% 100%}}
.rec__go{width:15px;height:15px;flex:none;color:var(--red);transition:transform .3s var(--back)}
@media (hover:hover){ .rec:hover .rec__go{transform:translateX(3px)} }

.tag{
  font-family:var(--display);font-weight:600;color:var(--navy);
  font-size:clamp(15px,1.95vw,27px);line-height:1.3;letter-spacing:-.01em;
  margin-top:clamp(18px,3.2vh,34px);
  animation:up .9s var(--ease) 2.72s backwards;
}
.tag em{font-style:normal;color:var(--navy-soft)}
@keyframes up{from{opacity:0;transform:translateY(14px)}}

/* ---- ANG DALAWANG PINTO ----
   Magkatabi sila sa cellphone, hindi magkapatong: maikli ang dalawang
   label at masikip ang hero sa taas, kaya ang isang hilera ang tama. */
.hacts{
  display:flex;flex-wrap:wrap;justify-content:center;
  gap:clamp(8px,1.1vw,14px);margin-top:clamp(18px,3vh,32px);
  animation:up .9s var(--ease) 2.84s backwards;
}
.hacts .btn{font-size:clamp(13px,1.1vw,15px);padding:12px 20px}

.icons{display:flex;gap:clamp(8px,1.05vw,13px);margin-top:clamp(16px,2.6vh,30px)}
.ic{
  width:clamp(33px,3.1vw,42px);aspect-ratio:1;border-radius:50%;text-decoration:none;
  display:grid;place-items:center;background:var(--navy);color:#fff;border:0;cursor:pointer;
  animation:icIn .6s var(--back) backwards;animation-delay:var(--d);
  transition:background .28s ease,transform .3s var(--back),box-shadow .3s ease;
  box-shadow:0 6px 12px -6px rgba(31,66,128,.5);
}
@media (hover:hover){ .ic:hover{background:var(--red);transform:translateY(-5px) scale(1.1);box-shadow:0 12px 20px -8px rgba(217,4,41,.7)} }
.ic:active{transform:translateY(-2px) scale(1.04)}
.ic svg{width:46%;height:46%;display:block;transition:transform .3s var(--back)}
@media (hover:hover){ .ic:hover svg{transform:scale(1.12)} }
@keyframes icIn{from{opacity:0;transform:translateY(12px) scale(.85)}}

/* Pula na, dating navy. Asul ang dulong-ibaba ng hero — punit na papel
   siya noon, blade na siya mula Set 1 2026 — at nawawala ang navy sa
   navy. Kitang-kita ang pula sa asul at sa puti, kaya iisang kulay ang
   gumagana sa dalawang panig ng gilid.
 ⚠ NASA LOOB NG BLADE SIYA NGAYON (42px mula sa dulo; 52px ang kapal ng
   blade sa gitna). Sinasadya at nasukat: dalawang pixel siyang pula sa
   asul, at doon din siya nakatayo noong punit pa ang ibaba. */
.cue{
  position:absolute;left:50%;bottom:clamp(16px,2.6vh,28px);z-index:7;translate:-50% 0;
  width:2px;border-radius:2px;height:clamp(20px,3vh,30px);background:var(--red);transform-origin:top;
  opacity:0;animation:soft .9s ease 3.5s forwards,cue 3.4s ease-in-out 3.9s infinite;
}
@keyframes cue{0%,100%{transform:scaleY(.3);opacity:.4}50%{transform:scaleY(1);opacity:.9}}


/* ================= 4. UI KIT ================= */
.wrap{width:min(1180px,100% - 44px);margin-inline:auto}

.sec{position:relative;padding:clamp(64px,9vh,118px) 0;overflow:hidden}
.sec--paper{background:var(--paper)}
.sec--cream{background:var(--cream)}
.sec--kraft{background:var(--kraft-paper)}
/* Ang tanging MALAMIG na lupa ng pahina — papel, krema at buhangin ang
   lahat ng iba, at mainit silang tatlo. Ginagamit ng #dealership: iyon
   ang pinaka-hiwalay na alok sa buong pahina (hindi produkto kundi
   pakikipagsosyo), at ang lamig ang naghihiwalay nito nang hindi
   bumabalik sa navy. */
.sec--sky{background:#EDF4FD}
.sec--navy{background:var(--navy);color:#fff}
.sec--navy::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:repeating-linear-gradient(-24deg,rgba(255,255,255,.04) 0 2px,transparent 2px 16px);
}
.sec > *{position:relative;z-index:1}

/* torn divider */
/* ⚠ WALA NANG PUNIT NA TAHI SA PAHINA (Ago 12, 2026 — *"remove the
   concept of this straight line nalang lahat"*). Anim na `<svg class=
   "tear">` ito noon sa ilalim ng anim na seksyon: zigzag na hugis na
   ipininta sa kulay ng SUSUNOD na seksyon, kaya punit-na-papel ang
   dating ng bawat tahi.

   ⚠ TUWID NA TAHI NA ANG LAHAT. Diretsong nagtatagpo ang kulay ng
     dalawang seksyon.

   ⚠ HUWAG IBALIK NANG HINDI BINABASA ITO. Ang `--tear` ay KULAY NG
     SUSUNOD NA SEKSYON at hindi ng sarili, at tatlong beses nang
     nagkamali iyon nang may inilipat na seksyon — nakasulat pa nga sa
     isa sa mga tinanggal na komento: "Ikatlong beses na — kapag may
     inilipat na seksyon, ITO ANG UNANG TITINGNAN." Wala nang bibilangin
     ngayon: walang kulay na dapat sumunod sa kahit ano.

   Nasa _parked/tear-divider.html.txt ang buong markup ng anim. */

.eyebrow{
  font-family:var(--display);font-weight:700;font-size:12px;letter-spacing:.19em;
  text-transform:uppercase;color:var(--red);display:flex;align-items:center;gap:10px;margin-bottom:14px;
}
.eyebrow::before{content:"";width:26px;height:4px;background:var(--red);border-radius:2px}
.eyebrow--light{color:var(--electric)}
.eyebrow--light::before{background:var(--electric)}
/* Gitling sa MAGKABILANG dulo. Isa lang sa kaliwa ang karaniwan, at
   tama iyon kapag pakaliwa ang teksto — nagsisilbi itong panimula. Sa
   NAKASENTRONG teksto ay mukhang nalihis ang linya kung isa lang, kaya
   kailangan ng pares. `flex` na ang `.eyebrow`, kaya ang `::after` ay
   kusang napupunta sa kabilang dulo. */
.eyebrow--both{justify-content:center}
.eyebrow--both::after{content:"";width:26px;height:4px;background:var(--red);border-radius:2px}

.h2{
  font-family:var(--display);font-weight:900;font-style:italic;letter-spacing:-.03em;line-height:.98;
  font-size:clamp(28px,4.4vw,54px);color:var(--navy);
}
.h2--light{color:#fff}
/* Ang markadong bahagi ng headline.

   Background ito ng mismong inline na teksto, hindi absolute na ::after.
   Ang dating ::after ay nakasabit sa isang `inline-block`, at kapag umabot
   sa dalawang hilera ang naka-marka — nangyayari ito sa cellphone —
   buong lapad ng kahon ang inaabot ng iisang guhit, kaya may mahabang
   pulang bar na nakadikit sa dulo ng huling salita.

   Sa `box-decoration-break:clone` ay tig-isang guhit ang bawat hilera, at
   kasinghaba lang ng teksto sa hilerang iyon. Ang `background-size` na
   0% → 100% ang humahalili sa dating `scaleX`, kaya ganoon pa rin ang
   pahid mula kaliwa pagpasok sa tanawin.

   Ang -.24em sa background-position: ang kahon ng background ng isang
   `inline` ay ang content area ng font (1.42em sa Poppins), at 0.36em sa
   ilalim ng baseline ang puno nito — mas mababa kaysa sa dating
   `inline-block` na line-height (.98em) ang taas. Kung 100% lang ito ay
   nalalaglag sa ilalim ng teksto ang guhit. Sa -.24em ay bumabalik ito sa
   dating puwesto: nakapatong sa baseline, baon ang ilalim ng mga letra. */
.hl{
  display:inline;color:var(--navy);
  -webkit-box-decoration-break:clone;box-decoration-break:clone;
  background-image:linear-gradient(180deg,rgba(217,4,41,.16),rgba(217,4,41,.3));
  background-repeat:no-repeat;background-position:0 calc(100% - .24em);
  background-size:0% .24em;
  transition:background-size .7s var(--ease) .15s;
}
.is-in .hl,[data-reveal].is-in .hl{background-size:100% .24em}
.hl--blue{
  color:var(--electric);
  background-image:linear-gradient(180deg,rgba(59,156,255,.18),rgba(59,156,255,.36));
}
/* Pulang salita sa maputing likod — ito ang nasa reference ng #story.
   Naiwan ang guhit sa ilalim (mas mahina lang) para hindi mawala ang
   pahid na papasok pagdating mo sa seksyon.

   Sinukat: #D90429 sa pinakamadilim na bahagi ng story-bg.jpg (#BDCCEB)
   ay 3.25:1. Kulang iyon sa 4.5:1 na kailangan ng normal na teksto, PERO
   sapat sa 3:1 na hinihingi ng malaking teksto — 29px pataas at 900 ang
   bigat ang h2, kaya "large text" ito. Huwag gamitin ang `hl--red` sa
   maliit na titik na nasa larawang ito. */
.hl--red{
  color:var(--red);
  background-image:linear-gradient(180deg,rgba(217,4,41,.12),rgba(217,4,41,.24));
}

.lead{font-size:clamp(15px,1.35vw,18px);line-height:1.68;color:var(--ink-2);margin-top:18px;max-width:56ch}
.lead em{font-style:italic;color:var(--navy);font-weight:600}
.lead--light{color:rgba(255,255,255,.78)}
.lead--light em{color:#fff}
/* Para sa larawang likod, hindi sa patag na puti.
   Ang karaniwang `--ink-2` (#57618A) ay 3.73:1 lang sa pinakamadilim na
   bahagi ng story-bg.jpg — bagsak sa 4.5:1. Ang #3E4A70 ay 5.38:1 doon,
   at halos hindi mo mapapansing mas madilim ito. */
.lead--dark{color:#3E4A70}

.sec__head{display:grid;grid-template-columns:1.15fr .85fr;gap:26px 48px;align-items:end;margin-bottom:clamp(30px,4vh,50px)}
.sec__head--center{grid-template-columns:1fr;justify-items:center;text-align:center}
.sec__sub{font-size:15px;line-height:1.65;color:var(--ink-2);max-width:44ch}
.sec__sub b{color:var(--navy)}

.ico{width:1em;height:1em;display:block;flex:none;fill:currentColor}

/* buttons */
.btn{
  --bg:var(--navy);--fg:#fff;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  font-family:var(--display);font-weight:700;font-size:15px;letter-spacing:-.01em;
  padding:14px 24px;border:0;border-radius:999px;cursor:pointer;text-decoration:none;
  /* Kailanman ay hindi dapat mahati sa dalawang linya ang isang pill.
     Kapag sumikip ang header, ang tamang gawin ay bawasan ang ibang
     laman — hindi ang pilipitin ang CTA. */
  white-space:nowrap;
  background:var(--bg);color:var(--fg);box-shadow:var(--shadow-s);
  transition:transform .28s var(--back),box-shadow .28s ease,background .25s ease,filter .25s ease;
}
.btn .ico{width:17px;height:17px;transition:transform .3s var(--back)}
@media (hover:hover){ .btn:hover{transform:translateY(-3px);box-shadow:var(--shadow-m)} .btn:hover .ico{transform:translateX(4px)} }
.btn:active{transform:translateY(-1px)}
/* ---- ⚠ ANG KISLAP SA PULANG PINDUTAN (Ago 13, 2026) ----
   Hiniling na mapansin ang CTA. Isang liwanag na dumadaan tuwing 5.2s —
   mga isang segundo ang daan, tapos tahimik ulit ng apat.

   ⚠ SA PULA LANG (`.btn--red`), HINDI SA LAHAT NG PINDUTAN. Kapag lahat
     ay kumikislap ay wala nang natatangi — ang kislap ay pagtuturo, at
     hindi makakaturo ang bagay na nasa lahat ng dako. Ang pula ang
     PANGUNAHING kilos ng pahina; ang navy, paper at ghost ay pangalawa.

   ⚠ `overflow:hidden` — nasa labas ng pindutan ang liwanag sa simula at
     sa dulo (`-160%` → `340%`), at ang bilog na gilid ang gumugupit.
     Walang laman ang pindutan na lumalabas sa gilid nito, kaya walang
     naputol: teksto at 17px na ikono lang ang nasa loob.

   ⚠ MAY IBANG SIMULA ANG NASA HEADER. Dalawang pulang pindutan ang
     magkasabay na nakikita paminsan (ang nasa header at ang nasa
     seksyon); kapag sabay silang kumislap ay mukhang makina. */
.btn--red{--bg:var(--red);position:relative;overflow:hidden}
@media (hover:hover){ .btn--red:hover{filter:brightness(1.06)} }
.btn--red::after{
  content:"";position:absolute;top:0;bottom:0;left:0;width:42%;
  pointer-events:none;transform:translateX(-160%);
  background:linear-gradient(100deg,
    rgba(255,255,255,0) 0%, rgba(255,255,255,.38) 50%, rgba(255,255,255,0) 100%);
  animation:btnKislap 5.2s var(--ease) 2.2s infinite;
}
.hdr__cta .btn--red::after{animation-delay:.9s}
@keyframes btnKislap{
  0%        {transform:translateX(-160%)}
  22%, 100% {transform:translateX(340%)}
}
.btn--navy{--bg:var(--navy)}
.btn--ghost{--bg:transparent;--fg:var(--navy);box-shadow:inset 0 0 0 2px var(--line)}
/* Puting pindutan para sa hero: may larawan sa likod doon, at ang
   `--ghost` na aninag ay nawawala sa maputlang karton. */
.btn--paper{--bg:var(--paper);--fg:var(--navy);box-shadow:0 10px 24px -14px rgba(31,66,128,.6),inset 0 0 0 1.4px var(--line-2)}
@media (hover:hover){ .btn--paper:hover{--bg:#fff} }
/* Kraft ang katumbas ng ginto ng reference. Walang ginto sa guideline
   nila, at ito ang tanging mainit na kulay sa sistema — mainit at
   nakikita sa navy, at akma sa karton. Navy ang teksto, hindi puti:
   4.3:1 lang ang kraft-sa-navy, pero 8:1 ang navy-sa-kraft. */
.btn--kraft{--bg:var(--kraft);--fg:var(--navy-deep)}
@media (hover:hover){ .btn--kraft:hover{--bg:var(--kraft-light)} }
/* Guhit lang, para sa navy na likod — walang laman, kaya hindi ito
   nakikipagsiksikan sa katabing puno na pindutan. */
.btn--wire{--bg:transparent;--fg:#fff;box-shadow:inset 0 0 0 1.6px rgba(255,255,255,.34)}
@media (hover:hover){ .btn--wire:hover{--bg:rgba(255,255,255,.09);box-shadow:inset 0 0 0 1.6px rgba(255,255,255,.55)} }
/* Puting pill na may navy na guhit — ang kasama ng pulang pindutan sa
   maliwanag na #story. Hindi `--ghost` (aninag ang laman niyon): may
   larawan sa likod dito, at nawawala ang aninag na pindutan sa gitna ng
   karton at ng punit na papel. Puti ang laman kaya laging nababasa. */
.btn--outline{
  --bg:#fff;--fg:var(--navy);
  box-shadow:0 10px 26px -16px rgba(31,66,128,.5),inset 0 0 0 1.6px rgba(31,66,128,.22);
}
@media (hover:hover){ .btn--outline:hover{box-shadow:0 18px 34px -16px rgba(31,66,128,.55),inset 0 0 0 1.6px var(--navy)} }
.btn--lg{padding:17px 32px;font-size:16px}
.btn--block{width:100%}
.btn--text{
  --bg:transparent;--fg:var(--navy);box-shadow:none;padding:14px 6px;
  text-decoration:underline;text-decoration-color:rgba(31,66,128,.28);text-underline-offset:5px;
}
@media (hover:hover){ .btn--text:hover{--fg:var(--red);transform:none;box-shadow:none;text-decoration-color:var(--red)} }

/* ticks */
.ticks{list-style:none;display:grid;gap:11px;margin-top:20px}
.ticks li{display:flex;gap:11px;align-items:flex-start;font-size:15px;line-height:1.5;color:var(--ink-2)}
.ticks .ico{width:17px;height:17px;margin-top:3px;color:var(--red)}
.ticks--tight li{font-size:14.5px}
.ticks--light li{color:rgba(255,255,255,.8)}
/* Isa-isang dumarating ang tsek sa loob ng package — pagkatapos ng card
   mismo. Ang sunod-sunod na pagdating ang nagsasabing LISTAHAN ito ng
   magkakahiwalay na bagay, hindi isang bloke ng teksto.
   ⚠ `backwards` at hindi `forwards`: hawak nito ang unang keyframe
     habang naghihintay at natatapos sa normal — walang naiiwang
     nakapiit na `transform` na hindi kayang baguhin ng hover. */
@keyframes tickIn{ from{opacity:0;transform:translateX(-8px)} }
/* ⚠ SA `.pack` NAKAKABIT ITO AT HINDI SA `[data-reveal]`. Nakasabit ito
     sa `.ticks--light` noon, at doon ligtas ang malawak na `[data-reveal]`
     dahil ang #dealership lang ang gumagamit ng klaseng iyon. Tinanggal
     ang `--light` nang lumipat ang seksyon sa buhangin — kaya kung
     `[data-reveal].is-in .ticks li` ang isusulat, LAHAT ng listahan sa
     pahina ang uunahan-hulihan, pati ang #why at ang #process. */
.pack.is-in .ticks li{
  animation:tickIn .44s var(--ease) calc(var(--i,0) * .1s + .34s) backwards;
}
.pack.is-in .ticks li:nth-child(2){animation-delay:calc(var(--i,0)*.1s + .40s)}
.pack.is-in .ticks li:nth-child(3){animation-delay:calc(var(--i,0)*.1s + .46s)}
.pack.is-in .ticks li:nth-child(4){animation-delay:calc(var(--i,0)*.1s + .52s)}

/* reveal */
[data-reveal]{opacity:0;transform:translateY(22px);transition:opacity .7s var(--ease),transform .8s var(--ease)}
[data-reveal].is-in{opacity:1;transform:none}


/* ================= 5. HEADER ================= */
.hdr{
  position:fixed;inset:0 0 auto;z-index:60;padding:14px 0 0;
  transition:padding .45s var(--ease);
}
/* 1240px ito noong lima ang nav. Anim na ngayon — nadagdagan ng
   "Boss RDR" — at hindi na kasya ang logo, ang anim, ang numero, at ang
   CTA sa 1240. Sa 1320 kasya sila nang hindi sumisikip. */
.hdr__in{
  width:min(1320px,100% - 28px);margin-inline:auto;height:var(--hdr-h);
  /* tatlong hanay: logo | nav (naka-gitna) | CTA */
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:22px;padding:0 12px 0 20px;
  /* ---- SALAMIN, HINDI PUTING KAHON ----
     `rgba(255,253,249,.86)` ito noon — halos puti sa ibabaw ng maputing
     hero, kaya hindi mo makita kung saan ito nagsisimula at hindi
     nagmumukhang NAKAPATONG. Tatlong bagay ang nagbago:

       · malamig na kaunti ang ilalim ng gradient (#F0F6FF), kaya may
         sariling kulay ito laban sa puting papel
       · mas mababa ang opacity at mas malaki ang blur — dumadaan na ang
         karton at ang tape sa likod, malabo pero kita
       · `inset` na puting singsing — iyon ang nagbibigay ng GILID.
         Singsing at hindi `border`: walang nadadagdag sa laki, kaya
         walang gumagalaw sa layout.

     `saturate` — pinapatingkad nito ang kulay na dumadaan sa likod.
     Kung wala ito, kulay-abo ang lumalabas sa blur at parang marumi. */
  background:linear-gradient(180deg,rgba(255,255,255,.78),rgba(240,246,255,.6));
  backdrop-filter:blur(18px) saturate(1.5);
  -webkit-backdrop-filter:blur(18px) saturate(1.5);
  border-radius:999px;
  box-shadow:
    0 20px 44px -24px rgba(31,66,128,.6),
    0 3px 10px -7px rgba(31,66,128,.22),
    inset 0 0 0 1.2px rgba(255,255,255,.85),
    inset 0 1px 0 rgba(255,255,255,1);
  transition:background .45s var(--ease),border-radius .45s var(--ease),
             box-shadow .45s ease,width .45s var(--ease),height .35s var(--ease);
}
/* ---- ANG NAVY NA HEADER KAPAG NAG-SCROLL NA ----
   Ago 11, 2026: pinaluwag. 64px ito noon at 26px ang gilid — masikip ang
   dating: dumidikit ang logo sa gilid ng screen, at magkakadikit ang anim
   na nav sa gitna. 72px na ngayon, 34px ang gilid, at mas maluwag ang
   bawat aytem ng nav (tingnan ang `.hdr.is-stuck .nav`).

   ⚠ ANG BANDANG ITO ANG MAKIKITA SA HALOS BUONG PAHINA — isang screen
     lang ang hero. Kaya rito ginawa ang pagluluwag at hindi sa nakalutang
     na anyo sa itaas: doon ay may sariling hangin na ang kahon. */
.hdr.is-stuck{padding-top:0}
.hdr.is-stuck .hdr__in{
  width:100%;border-radius:0;height:72px;padding-inline:clamp(18px,2.4vw,34px);
  background:rgba(31,66,128,.97);box-shadow:0 12px 30px -18px rgba(31,66,128,.8);
}
.hdr.is-stuck .nav{gap:6px}
.hdr.is-stuck .nav a{padding:12px 15px}
.hdr.is-stuck .nav a,.hdr.is-stuck .lnk-call{color:#fff}
.hdr.is-stuck .burger i{background:#fff}

.hdr__tape{
  position:absolute;left:0;bottom:0;height:3px;width:0;background:var(--red);
  box-shadow:0 0 12px rgba(217,4,41,.6);transition:width .1s linear;
}

/* ---- ang maliit na wordmark sa header at footer ----
   Parehong larawan ng logo, pinaliit lang. Ang taas ang itinatakda, at
   sumusunod na lang ang lapad — mas madaling ihanay sa isang hilera. */
.mark{display:block;width:fit-content;flex:none;line-height:0}
.mark img{display:block;height:38px;width:auto;transition:height .35s var(--ease)}
.mark--lg img{height:52px}
/* Pumuputi ito kapag naging navy na ang header. Ang puting bersyon ay
   hiwalay na file, kaya wala itong pinipigang kulay o filter. */
/* 30px ito noong 64px ang bandang navy. Sumusunod ito sa taas: 72px na
   ngayon, kaya 34px — pareho pa rin ang bahagi ng puwang na kinukuha
   nito, hindi lang basta lumaki. */
.hdr.is-stuck .mark img{content:url('../logo/tapemate-pro-white.png');height:34px}
@media (hover:hover){ .mark:hover img{transform:translateY(-2px)} }
/* Boss RDR brand — replaces the TapeMate logo in the navy header and links
   back to bossrdr.com. Sizes copied from the bossrdr.com header (.brand). */
.rdr-mark{display:none;align-items:center;gap:11px;width:fit-content;flex:none;color:#fff;text-decoration:none}
.rdr-mark img{width:42px;height:42px;object-fit:contain}
.rdr-mark__text{display:flex;flex-direction:column;line-height:1.1;white-space:nowrap}
.rdr-mark__text b{font:800 15px/1.1 'Poppins',sans-serif;letter-spacing:.02em;color:#fff}
.rdr-mark__text i{font-size:10px;font-style:italic;letter-spacing:.03em;color:#9fb4c4;margin-top:2px}
.hdr.is-stuck .mark{display:none}
.hdr.is-stuck .rdr-mark{display:flex}
/* Siniksik ang puwang nang kaunti nang madagdagan ng ikaanim na aytem:
   4px → 2px ang agwat, 15px → 12px ang gilid. Hindi ito halata sa mata
   pero 48px ang naibabalik — sapat para hindi na mapilitan ang CTA. */
.nav{position:relative;display:flex;gap:2px;justify-self:center}
.nav a{
  position:relative;z-index:1;font-family:var(--display);font-weight:600;font-size:14.5px;
  color:var(--navy);text-decoration:none;padding:11px 12px;border-radius:99px;white-space:nowrap;
  transition:color .3s ease,transform .35s var(--back);
}
.nav a::after{
  content:"";position:absolute;left:12px;right:12px;bottom:5px;height:3px;border-radius:2px;
  background:var(--red);transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease);
}
.nav a:focus-visible::after,.nav a.is-active::after{transform:scaleX(1)}
@media (hover:hover){ .nav a:hover::after{transform:scaleX(1)} .nav a:hover{color:var(--red)} }
.nav a.is-active{color:var(--red)}
@media (hover:hover){ .hdr.is-stuck .nav a:hover{color:var(--electric)} .hdr.is-stuck .nav a:hover::after{background:var(--electric)} }
.hdr.is-stuck .nav a.is-active{color:var(--electric)}
.hdr.is-stuck .nav a.is-active::after{background:var(--electric)}

.hdr__cta{display:flex;align-items:center;gap:12px;flex:none;justify-self:end}
.lnk-call{
  display:flex;align-items:center;gap:8px;text-decoration:none;font-family:var(--display);
  font-weight:700;font-size:14.5px;color:var(--navy);white-space:nowrap;transition:color .3s ease;
}
.lnk-call .ico{width:15px;height:15px;color:var(--red)}
@media (hover:hover){ .lnk-call:hover{color:var(--red)} }
.hdr.is-stuck .lnk-call .ico{color:var(--electric)}

.burger{display:none;width:44px;height:44px;border:0;background:none;cursor:pointer;
  flex-direction:column;justify-content:center;gap:5px;padding:0 10px;margin-left:auto}
.burger i{display:block;height:2.6px;background:var(--navy);border-radius:2px;transition:transform .4s var(--back),opacity .25s ease,background .4s ease}
.burger.is-on i:nth-child(1){transform:translateY(7.6px) rotate(45deg)}
.burger.is-on i:nth-child(2){opacity:0}
.burger.is-on i:nth-child(3){transform:translateY(-7.6px) rotate(-45deg)}

/* drawer */
.drawer{
  position:fixed;inset:0;z-index:55;background:var(--navy);
  padding:calc(var(--hdr-h) + 34px) 26px 34px;
  display:flex;flex-direction:column;justify-content:space-between;
  clip-path:circle(0% at 92% 6%);transition:clip-path .6s var(--ease);
}
.drawer.is-open{clip-path:circle(150% at 92% 6%)}
.drawer nav{display:grid;gap:2px}
.drawer nav a{
  display:flex;align-items:baseline;gap:14px;text-decoration:none;color:#fff;
  font-family:var(--display);font-weight:900;font-style:italic;letter-spacing:-.03em;
  font-size:clamp(24px,7vw,34px);padding:11px 0;border-bottom:1px solid rgba(255,255,255,.1);
  opacity:0;transform:translateX(-18px);transition:opacity .5s var(--ease),transform .5s var(--ease);
}
.drawer.is-open nav a{opacity:1;transform:none}
.drawer.is-open nav a:nth-child(1){transition-delay:.14s}
.drawer.is-open nav a:nth-child(2){transition-delay:.2s}
.drawer.is-open nav a:nth-child(3){transition-delay:.26s}
.drawer.is-open nav a:nth-child(4){transition-delay:.32s}
.drawer.is-open nav a:nth-child(5){transition-delay:.38s}
.drawer.is-open nav a:nth-child(6){transition-delay:.44s}
.drawer nav a span{font-size:12px;font-style:normal;font-weight:700;color:var(--electric);letter-spacing:.1em}
.drawer__foot{display:grid;gap:10px}
.drawer__foot .btn--ghost{--fg:#fff;box-shadow:inset 0 0 0 2px rgba(255,255,255,.25)}


/* ================= 6. PARTNER LOGO BAR ================= */
/* Ang bandang nasa pagitan ng hero at ng unang kuwento (#partners).

   ---- ANG AYOS ----
   Umaandar ang apat na logo mula KANAN PAKALIWA, walang tigil, sa
   ibabaw ng isang patag at malinis na likod.

   APAT LANG ANG TUNAY NA PARTNER. Inuulit sila ng script (main.js 2b)
   hanggang sa may sapat nang lapad para punuin ang bintana nang dalawang
   beses. Iyon lang ang paraan para tuloy-tuloy ang isang hanay na mas
   maikli kaysa sa salamin.

   ⚠ HINDI NITO SINASABING MARAMI SILANG PARTNER. Kitang-kita ang ikot,
     at iyon ang punto: nakikilala mo silang apat, paulit-ulit. Huwag
     dagdagan ng logong hindi partner para lang magmukhang marami — iyon
     ang unang mapapansin ng sinumang bumibilang.

   ---- WALANG PALAMUTI ANG LIKOD ----
   ⚠ SINASADYA ITO. HUWAG DAGDAGAN.

   Apat na bagay ang dinaanan nito at inalis lahat (Ago 12, 2026):

     · apat na hilera ng tumatakbong tuldok  — naging tuldok-tuldok na
       hangganan, hindi tekstura; ang balot ang nakikita, hindi ang logo
     · kanal na may gradient at anino sa loob — dalawang madilim na
       guhit sa itaas at ibaba, ganoon din ang epekto
     · pahilis na guhit sa buong banda       — nakakagulo sa logong
       may sariling linya (STRONGBOND, AC CLOSET)
     · dumadaanang asul na sinag             — may sarili nang kilos ang
       hanay; dalawang magkaibang bilis sa iisang maliit na banda

   Ang natutunan sa apat: ANG LOGO ANG NILALAMAN DITO, at bawat
   idinadagdag sa likod ay kalaban nila. Lahat sila ay may sariling
   kulay, sariling hugis, sariling linya — hindi sila kailangan ng
   palamuting kasama sa parehong 100px.

   KULAY NA LANG ANG NATITIRA — at iyon lang talaga ang kailangan.

   ---- TULAY ITO, HINDI TAGPI ----
   Dalawang beses itong nagkamali bago umabot dito, at pareho ang
   dahilan: hindi tiningnan kung anong kulay TALAGA ang katabi nito.
   Sinukat ko — mula sa tunay na pixel, hindi hula:

                    sa ITAAS ng banda      sa IBABA
       desktop      #49689A  (navy)        #B1BEDA  (mala-asul)
       tablet       #5B77A4  (navy)        #D3DDF1  (mala-asul)
       cellphone    #526F9F  (navy)        #1F407B  (NAVY)

   ASUL ANG MAGKABILANG PANIG SA LAHAT NG LAPAD. Dalawang bagay ang
   pinatunayan niyon:

     · Ang maputlang #F5F9FE ay nawawala — halos wala itong kulay,
       kaya walang tumatambad.
     · Ang krema ay AWKWARD — mainit na tagpi sa gitna ng malamig,
       walang kinalaman sa alinman sa dalawang katabi.

   KAYA TULAY ITO NGAYON. Sumusunod ang gradient sa sinukat:

     itaas   #8FAEDC   lumalapit sa navy sa itaas
     gitna   maliwanag  dito dumadaan ang logo — ito ang highlight
     ibaba   #B3C7E5   halos katumbas ng #B1BEDA na nasa ibaba

   Kaya sa desktop ay halos walang tahi ang ilalim, at sa cellphone ay
   malinis na hangganan laban sa navy. Nasa ISANG PAMILYA ito ng kulay
   sa dalawang katabi — kaya hindi ito tagpi — pero MAS MALIWANAG kaysa
   sa kanilang dalawa, at doon nanggagaling ang highlight.

   Hindi palamuti ang maliwanag na gitna kundi PAGTUTURO: nasa gitna
   ang logo, at doon din nakalagay ang pinakamaliwanag. Isang
   `background` lang ito — walang elemento, walang pseudo-element,
   walang markup. */
.logobar{
  position:relative;z-index:4;overflow:hidden;
  background:
    /* 1 — ang liwanag sa gitna, kung saan dumadaan ang logo */
    radial-gradient(128% 160% at 50% 50%,
        rgba(255,255,255,.74) 0%, rgba(255,255,255,.34) 38%,
        rgba(255,255,255,0) 72%),
    /* 2 — ang tulay: mula sa navy sa itaas patungo sa asul sa ibaba */
    linear-gradient(180deg,
        #6D92CC 0%, #8FB0DF 24%, #A9C4E9 50%, #9BB9E3 76%, #86A6D7 100%);
  padding:clamp(20px,3vh,32px) 0;
}


/* ---- ANG SALAMING PANEL ----
   Idinagdag Set 1, 2026 mula sa UI reference ni Kylie: hindi na hubad na
   banda ang apat na logo kundi nasa loob sila ng isang maputlang panel na
   may bilog na sulok, at may chevron sa magkabilang dulo.

   NASUKAT SA REFERENCE, HINDI TINANTIYA. Isinukat ang bawat bagay bilang
   BAHAGDAN NG LAPAD ng banda — iyon lang ang hindi nagbabago kahit anong
   laki ang litratong ipinadala:

       urong sa gilid   2.25% ng lapad   →   32px sa 1440
       taas ng panel    7.6%             →  109px
       gitna ng pana    4.4%             →   63px mula sa gilid ng bintana

   Kaya `2.2vw` ang urong at `1.72vw` ang padding sa loob: 31.7px at
   24.8px sa 1440 — dalawang numerong tumatama sa nasukat. Ang taas ng
   banda ay hindi itinakda: ang panel ang nagtutulak niyon mula 116px
   patungong ~165px, at nananatili ang lumang `padding` ng banda.

   ⚠ HINDI SIYA `backdrop-filter`. Walang larawan sa likod niya — isang
     gradient lang ang buong banda, at ang pag-blur sa gradient ay WALANG
     nababago sa nakikita. Ang tanging matitira ay isang bagong
     compositing layer sa bawat frame ng marquee. Puting gradient na lang
     ang ipinapatong, at pareho ang kinalabasan nang libre.

   ⚠ WALANG `overflow:hidden` DITO, AT SINASADYA. Ang pawi sa gilid ng
     `.logobar__view` ang nag-aalis ng logo bago pa siya umabot sa bilog
     na sulok, kaya walang puputulin. Kapag nilagyan mo ito ng
     `overflow:hidden`, ang UNANG mapuputol ay ang inaangat ng hover at
     ang anino nito — hindi ang logong nasa gilid. */
.lgopanel{
  position:relative;
  margin-inline:clamp(12px,2.2vw,44px);
  padding-block:clamp(15px,1.72vw,25px);
  border-radius:clamp(14px,1.5vw,24px);
  /* ⚠ 60/34 ITO NOON. Sinukat ang kinalabasan sa tunay na render:
     #E9F0F8 — samantalang #EEF2FB ang panel sa reference ni Kylie.
     Mas maputi siya ngayon, at dalawang bagay ang nakukuha:
     lumalapit siya sa ipinadalang disenyo, at may TUNAY NANG BABABAAN
     ang bagong anino ng logo. Sa maputlang-asul na panel ay nalulusaw
     ang anino at walang inaangat. */
  background:linear-gradient(180deg,rgba(255,255,255,.72),rgba(255,255,255,.46));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.9),
    inset 0 0 0 1px rgba(255,255,255,.32),
    0 18px 34px -26px rgba(31,66,128,.55);
}


/* ---- ANG DALAWANG PANA ----
   HUBAD SILA, HINDI BILOG NA PINDUTAN. May ganoon nang klase ang pahina
   (`.rvarw` sa mga review: puting bilog, may anino) — pero guhit lang ang
   chevron sa reference, at may dahilan iyon: 108px lang ang taas ng panel
   at ang laman niya ay LOGO NG IBANG KOMPANYA. Ang dalawang puting bilog
   dito ay magiging dalawa pang markang kalaban ng apat.

   ⚠ `display:none` ANG PAHINGA NILA. Ang `is-nav` na inilalagay ng
     main.js (seksyon 2b) ang nagbubukas — at hindi niya iyon inaabot
     kapag patay ang JS o ayaw ng bisita sa galaw. Walang lalabas na
     pindutang walang ginagawa.

   ⚠ ISANG SIMBOLO LANG SILA. `#i-chev-r` pareho, at `rotate:180deg` ang
     kaliwa. Walang `#i-chev-l` sa sprite at hindi na kailangan.

   ⚠ ULITIN ANG `-50%` SA BAWAT `translate`. Doon nakasakay ang paggitna
     nila nang patayo; kapag isinulat mong `translate:-3px` lang ang
     hover, bababa ang pana sa ilalim ng panel. */
.lgonav{
  position:absolute;top:50%;z-index:2;translate:0 -50%;
  width:clamp(34px,3vw,42px);height:clamp(34px,3vw,42px);
  display:none;place-items:center;
  padding:0;border:0;border-radius:12px;background:none;cursor:pointer;
  color:rgba(31,66,128,.5);
  transition:color .26s var(--ease),
             translate .32s var(--back),scale .3s var(--back);
}
.logobar.is-nav .lgonav{display:grid}
.lgonav svg{width:clamp(15px,1.3vw,19px);height:clamp(15px,1.3vw,19px)}
.lgonav--prev{inset-inline-start:clamp(4px,.7vw,10px)}
.lgonav--prev svg{rotate:180deg}
.lgonav--next{inset-inline-end:clamp(4px,.7vw,10px)}
@media (hover:hover){ .lgonav:hover{color:rgba(31,66,128,.9)} .lgonav--prev:hover{translate:-3px -50%} .lgonav--next:hover{translate:3px -50%} }
.lgonav:active{scale:.9}


/* ⚠ `overflow-x:clip` — HINDI `hidden`.
   Kailangang lumabas sa itaas ang logong inaangat ng hover, pati ang
   anino nito. Sa `hidden` ay puputulin iyon; ang `clip` lang ang
   pumuputol nang pahalang habang binibitawan ang patayo.

   Ang padding + kaparehong negatibong margin ang nagpapalaki sa kahon ng
   `mask` nang hindi ginagalaw ang ayos — kung hindi, ang mask mismo ang
   puputol sa inangat na logo. */
.logobar__view{
  position:relative;z-index:1;
  overflow-x:clip;overflow-y:visible;
  padding-block:15px;margin-block:-15px;
  /* ⚠⚠ APAT ANG HINTO NITO AT HINDI DALAWA, AT DOON NAKASALALAY ANG
      PAGIGING KITA NG PANA. Nasa loob na ng panel ang salamin (Set 1,
      2026), at BLANGKO MUNA ang unang 5.5% ng lapad — doon nakatayo ang
      chevron. Saka pa lang nagsisimulang lumitaw ang logo, at buo na
      siya sa 13%.

      Sa isang payak na `transparent → #000 8%` ay 57% pa ang lakas ng
      logo sa mismong kinatatayuan ng pana (4.6% ng lapad ng panel):
      dumadaan ang HAPPY BRAND sa ibabaw ng chevron at NAWAWALA ITO SA
      MATA. Hindi ito nakikita sa code — sa litrato lang.

    ⚠ KAPAG GINALAW MO ANG PUWESTO O ANG LAKI NG `.lgonav`, ITO ANG
      KATABING NUMERO. Dapat lampas ang unang hinto sa KANANG GILID ng
      pana, hindi sa gitna niya. */
  -webkit-mask-image:linear-gradient(90deg,transparent 0,transparent 5.5%,#000 13%,#000 87%,transparent 94.5%,transparent 100%);
          mask-image:linear-gradient(90deg,transparent 0,transparent 5.5%,#000 13%,#000 87%,transparent 94.5%,transparent 100%);
}

.lgorow{
  --lh:clamp(38px,4vw,54px);      /* taas ng logo — dito lang binabago */
  /* ⚠ MALUWAG ANG PUWANG, AT SINASADYA IYON.
     APAT LANG ANG PARTNER. Habang sumisikip ito, dumarami ang KOPYA na
     sabay mong nakikita — at ang dalawa o tatlong magkasunod na HAPPY
     BRAND sa iisang tanaw ang naglalabas ng pagka-wallpaper nito.
     Sa 116px ay wala pang dalawang hanay ang kasya sa 1440px, kaya
     bihira mong makita ang dalawang magkaparehong logo nang sabay. */
  --sep:clamp(44px,7vw,116px);
  display:flex;align-items:center;
  /* `--tulak` — ang dalawang pana ang nagtatakda nito, at NANANATILI
     siya hanggang sa may pumindot ulit.

     ⚠⚠ MAY PANGALAWA DITO NOON: `--skid`, ang hila ng bilis ng scroll.
        TINANGGAL SET 1, 2026 — siya ang "umuulit" na sinabi ni Kylie.
        Hinihila niya ang hanay pakaliwa habang nag-scroll ka at
        HUMIHILA SIYA PABALIK PAKANAN pagtigil mo, at doon dumadaan ang
        iisang logo nang dalawang beses. Nasukat: 15 sa 168 na frame ang
        gumalaw PAKANAN sa iisang haplos ng gulong — 81.9px lahat,
        hanggang 30.7px sa isang frame.
      ▶ HUWAG SIYANG IBALIK NANG PAHINA-HINA LANG. Hindi ang lakas ang
        sira kundi ang PAGBABALIK SA 0, at iyon ang buong pinagkakatayuan
        niya. Nasa _parked/logobar-scroll-skid.txt ang buong luma. */
  translate:var(--tulak,0px) 0;
}

/* ---- ANG PAHINGANG AYOS: WALANG JS, O AYAW NG GALAW ----
   `is-loop` lang ang nagbubukas ng marquee, at ang script lang ang
   naglalagay niyon — pagkatapos niyang ulitin ang apat nang sapat.
   Kung tatakbo ang animation na kulang ang kopya, mawawalan ng laman
   ang salamin sa gitna ng ikot. Kaya nakagitna at tahimik ang apat
   hangga't hindi pa nagagawa iyon. */
.lgorow:not(.is-loop){
  justify-content:center;flex-wrap:wrap;
  gap:var(--sep);row-gap:20px;padding-inline:20px;
}

/* ⚠ MARGIN ANG PUWANG DITO, HINDI `gap` — MAHALAGA ITO.
   Sa `gap`, ang lapad ng hanay ay (n × logo) + (n−1) × puwang. Ang
   kalahati niyon ay HINDI eksaktong kalahati ng ikot — kulang ito nang
   kalahating puwang, at iyon ang tumatalon sa bawat pagbalik. Sa
   `margin-inline-end` ay (n × (logo + puwang)) ang lapad, kaya eksakto
   ang -50%. */
.lgorow.is-loop{
  width:max-content;flex-wrap:nowrap;
  animation:logoRun var(--dur,40s) linear infinite;
}
.lgorow.is-loop .lgo{margin-inline-end:var(--sep)}
/* KANAN PAKALIWA. Kalahati ng hanay ang isang buong ikot. */
@keyframes logoRun{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* Humihinto kapag may hinahanap ang mata. Kasama ang `focus-within` —
   kapag naging link ang logo balang-araw, gagana rin ito sa keyboard
   nang walang bagong rule. */
.logobar:focus-within .lgorow{animation-play-state:paused}
@media (hover:hover){ .logobar:hover .lgorow{animation-play-state:paused} }

/* ---- ANG LOGO ----
   Nakatakda ang TAAS, sumusunod ang lapad. Pareho ang trato sa <svg> at
   <img>, kaya walang aayusin dito pagpalit ng file.

   ⚠ ANG `--k` — hindi ito palamuti.
     Magkakaiba ang laki ng LOGO sa loob ng kanya-kanyang parisukat.
     Kapag pareho ang taas ng lahat, ang pinakapahaba ang mukhang
     pinakamalaki at ang bilog ang mukhang naliit. Ang `--k` ang
     nagtutuwid niyon sa mata, hindi sa numero. Nasa index.html ang
     halaga ng bawat isa, katabi ng logo — doon dapat baguhin.

   May malambot na puting bilog sa likod ng bawat isa noon — para umahon
   sila sa madilim na kanal. Wala nang kanal, kaya wala na rin ito: sa
   patag at maliwanag na likod ay walang hinahangong logo, at ang bilog
   ay nagiging mantsa na lang. */
.lgo{
  display:grid;place-items:center;flex:none;
  /* ---- BUONG KULAY, AT NAKAANGAT (Set 1, 2026) ----
     `opacity:.94` at `saturate(.9)` ito noon, at walang anino: sampung
     bahagdan ng kulay ang isinusuko, at PATAG ang logo sa ibabaw ng
     panel. Sinukat sa tunay na render — 0.205 hanggang 0.823 lang ang
     saturation ng apat sa ibabaw ng isang #E9F0F8 na panel.

     Hiling ni Kylie: "upgrade the color na something na mag ooverlap or
     aangat yung mga logo."

   ⚠⚠ `saturate(1)` AT HINDI `1.06` O MAS MATAAS. Naisip ko ang kaunting
      dagdag para mas kumapit sila sa mata — at hindi tama iyon: LOGO NG
      IBANG KOMPANYA ito. Ang pagtaas ng saturation ay pagpapalit sa
      TUNAY NA KULAY NG BRAND NILA, at wala tayong pahintulot para
      doon. `1` ang eksaktong kulay ng file na ipinadala nila; hanggang
      doon lang tayo. Ang ANINO ang nag-aangat, hindi ang pagpipinta.

    ⚠ ANG ANINO AY SUMUSUNOD SA HUGIS AT HINDI SA KAHON — ganoon ang
      `drop-shadow` sa isang PNG na may butas (hindi tulad ng
      `box-shadow`). Kaya siya malambot at mababa: sa 3px/7px ay gilid
      siya, sa mas malaki ay nagiging pangalawang anyo na sumusunod sa
      bawat titik ng wordmark — at ang AC CLOSET, na may dalawang
      nakadrowing na bata, ang unang nagiging madumi. */
  opacity:1;
  filter:saturate(1) drop-shadow(0 3px 7px rgba(31,66,128,.24));
  transition:opacity .34s ease,filter .34s ease,
             translate .42s var(--back),scale .42s var(--back);
}
/* ---- ANG LOGONG MAY LINK ----
   Isa lang sa apat ang mayroon nito ngayon (Strongbond). Nasa index.html
   ang dahilan, katabi ng logo.

   ⚠ WALANG SARILING ANYO. Walang kulay, walang underline, walang
     hiwalay na hover — ang hover ng `.lgo` ang gumagana pa rin dahil
     nasa loob niya ito. Ang CURSOR lang ang pagkakaiba, at iyon ang
     tamang sagisag: kitang-kita kapag nasa ibabaw ka, at walang
     dagdag na marka sa isang bandang apat na logo ang nilalaman.

   ⚠ `display:block` at hindi `inline`: kung inline siya ay may 4px na
     siwang sa ilalim ng larawan (puwang para sa buntot ng titik), at
     hindi na magkakasya ang logo sa gitna ng `.lgo`.

   ⚠ ANG `border-radius` AY PARA SA SINGSING NG KEYBOARD.
     `:focus-visible{outline:2px solid var(--red)}` ang nasa ugat ng
     file; kapag parisukat ang sulok dito ay parisukat din ang singsing
     sa paligid ng isang logong bilog. */
.lgo__go{display:block;border-radius:8px}

.lgo svg,
.lgo img{
  height:calc(var(--lh) * var(--k,1));
  width:auto;max-width:none;display:block;object-fit:contain;
}

/* ---- PAGPASOK, ISA-ISA ----
   Ang `is-arm` ang naghahanda, ang `is-lit` ang nagbubukas. TINATANGGAL
   silang dalawa ng script pagkatapos ng ~1.7s — sinasadya. Kapag naiwan
   sila, susundin din ng hover ang naka-stagger na `transition-delay`,
   at magmumukhang sirang-sira ang pagtugon sa mouse. */
.logobar.is-arm .lgo{opacity:0;translate:0 22px}
.logobar.is-arm.is-lit .lgo{
  opacity:1;translate:none;
  transition:opacity .62s var(--ease) calc(var(--i,0) * 90ms),
             translate .8s var(--ease) calc(var(--i,0) * 90ms);
}

/* ---- HOVER ----
   ⚠ KAILANGANG NASA IBABA ITO NG DALAWANG RULE SA ITAAS.
   Pareho silang tatlong klase ang bigat (0,3,0) — ang huli ang panalo.
   Kapag inilipat mo ito sa itaas, hindi na lulubog ang mga kapatid. */
@media (hover:hover){ .lgorow:hover .lgo{
  opacity:.3;
  filter:saturate(.2) drop-shadow(0 0 0 rgba(31,66,128,0));
  transition:opacity .3s ease,filter .3s ease,
             translate .42s var(--back),scale .42s var(--back);
} }
/* May anino na sila sa pahinga, kaya kailangang MAS MALAYO ang hover
   para may makita pang pagkakaiba: 8px/12px ito noon, at halos katulad
   na lang ng bagong 3px/7px sa pahinga. */
@media (hover:hover){ .lgorow:hover .lgo:hover{
  opacity:1;
  filter:saturate(1) drop-shadow(0 11px 18px rgba(31,66,128,.34));
  translate:0 -6px;scale:1.09;
} }

/* ---- SA CELLPHONE ----
   Mas malaki ang pawi sa gilid dahil mas makitid ang bintana: sa 5% ay
   wala pang isang logo ang naaabot niyon, kaya biglang naglalaho ang
   logo imbes na kumupas. */
@media (max-width:720px){
  .logobar{padding:clamp(16px,2.4vh,24px) 0}
  .lgorow{--lh:clamp(34px,9vw,46px);--sep:clamp(36px,12vw,64px)}
  .logobar__view{
    /* ⚠ MAS MALAKI KAYSA SA DESKTOP, AT KAILANGAN. Bahagdan ang pawi
       pero PIRMENG PIXEL ang pana: ang 34px niya sa isang 366px na panel
       ay 10.4% ng lapad — halos triple ng 3.8% na inaabot niya sa 1440.
       Sa numero ng desktop ay malulubog ang chevron dito. */
    -webkit-mask-image:linear-gradient(90deg,transparent 0,transparent 11%,#000 24%,#000 76%,transparent 89%,transparent 100%);
            mask-image:linear-gradient(90deg,transparent 0,transparent 11%,#000 24%,#000 76%,transparent 89%,transparent 100%);
  }
  /* ⚠ MAS MABABA ANG ANINO DITO. Sa cellphone ay walo hanggang
     labindalawang naka-`drop-shadow` na logo ang gumagalaw nang
     tuluy-tuloy, at ang blur ay tumatakbo sa BAWAT frame. 3px/7px sa
     desktop, 2px/4px dito — nasa gilid pa rin ng logo ang linya, mas
     mura lang ang bilog na binubuo ng blur. */
  .lgo{filter:saturate(1) drop-shadow(0 2px 4px rgba(31,66,128,.2))}

  /* Walang hover sa daliri — pindutin mo lang ang isa at lulubog ang
     lahat, tapos wala nang paraan para bumalik. Kaya patay ito rito. */
  @media (hover:hover){ .lgorow:hover .lgo{opacity:1;filter:saturate(1) drop-shadow(0 2px 4px rgba(31,66,128,.2))} .lgorow:hover .lgo:hover{translate:none;scale:1} }
}

/* Tahimik na banda: walang takbo, walang pagpasok, walang paglubog.
   Nakagitna at nakatayo lang ang apat — iyon naman ang tanging
   trabaho nila. */
@media (prefers-reduced-motion:reduce){
  .lgorow.is-loop{animation:none;width:auto;flex-wrap:wrap;justify-content:center;gap:var(--sep);row-gap:20px}
  .lgorow.is-loop .lgo{margin-inline-end:0}
  .lgorow{translate:none}
  /* Walang tinutulak ang pana kapag walang marquee. Hindi na sila
     inilalabas ng main.js dito, pero sakaling binuksan ng bisita ang
     setting PAGKATAPOS ng pagbukas, ito ang humuhuli. */
  .logobar.is-nav .lgonav{display:none}
  .logobar .lgo{opacity:1;translate:none;scale:1;
    filter:saturate(1) drop-shadow(0 3px 7px rgba(31,66,128,.24))}
  @media (hover:hover){ .lgorow:hover .lgo{opacity:1;translate:none;scale:1;
    filter:saturate(1) drop-shadow(0 3px 7px rgba(31,66,128,.24))} }
}


/* ================= 7. INTRO + STATS ================= */

/* ---- dekorasyon sa likod ng #about ----
   Dalawang bagay: (1) kulay sa background para hindi plain puti,
   (2) tape na nahuhulog mula sa taas. Nasa z-index 0 ang buong layer
   habang nasa z-index 1 ang lahat ng nakasulat (`.sec > *`), kaya
   kahit kailan ay hindi ito nakakatakip sa teksto. */
.sec > .fx{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}

#about{
  padding-block:clamp(72px,11vh,138px) clamp(86px,12vh,152px);
  min-height:clamp(560px,76vh,820px);
}

/* Malinis na background: walang guhit, walang tela, walang bagay na
   nakakalat. Anim na napakalambot na kulay lang ang gumagalaw kabaligtaran
   ng mouse, at dalawang liwanag ang sumusunod dito.

   Ang --k ang nagsasabi kung gaano kabilis at saang direksyon gagalaw ang
   bawat kulay laban sa mouse. Magkakaiba sila, kaya hindi sabay-sabay
   kumikilos ang buong background — doon nanggagaling ang lalim. */
.fx__blob{
  position:absolute;border-radius:50%;filter:blur(62px);opacity:0;
  transition:opacity 1.1s var(--ease);
  transform:translate3d(calc(var(--px,0) * var(--k)),calc(var(--py,0) * var(--k)),0);
  will-change:transform;
}
.fx.is-live .fx__blob{opacity:1}
.fx__blob--a{--k:-1;   left:-10%; top:0;      width:50%;height:58%;background:rgba(59,156,255,.26)}
.fx__blob--b{--k:.82;  right:-8%; top:-8%;    width:44%;height:52%;background:rgba(242,160,93,.28)}
.fx__blob--c{--k:-.5;  left:26%;  bottom:-10%;width:50%;height:50%;background:rgba(44,110,128,.18)}
.fx__blob--d{--k:.6;   right:8%;  bottom:0;   width:38%;height:42%;background:rgba(217,4,41,.12)}
.fx__blob--e{--k:-.72; left:0;    bottom:14%; width:34%;height:38%;background:rgba(31,66,128,.14)}
.fx__blob--f{--k:.34;  left:46%;  top:-6%;    width:38%;height:40%;background:rgba(255,206,140,.26)}

/* Dalawang liwanag sa cursor. Ang malaki at mabagal na humahabol ang
   nagdadala ng kulay; ang maliit at mabilis ang mukhang ilaw talaga.
   Dahil magkaiba ang bilis nila, may bahagyang kaladkad ang paggalaw. */
.fx__trail{
  position:absolute;inset:0;opacity:0;transition:opacity .9s var(--ease);
  background:radial-gradient(circle 460px at var(--gx,50%) var(--gy,46%),
    rgba(59,156,255,.22),rgba(242,160,93,.14) 44%,rgba(44,110,128,.07) 66%,transparent 78%);
}
.fx__glow{
  position:absolute;inset:0;opacity:0;transition:opacity .7s var(--ease);
  background:radial-gradient(circle 250px at var(--mx,50%) var(--my,42%),
    rgba(255,255,255,.50),rgba(255,236,214,.22) 40%,transparent 70%);
}
.fx.is-live .fx__trail,
.fx.is-live .fx__glow{opacity:1}

/* Tinanggal ang nahuhulog na tape sa #about — plain na ang background.
   Nakatabi ang script sa _parked/tape-physics.js.txt kung sakaling ibalik. */

/* px ang gamit, hindi ch — ang `ch` ay nakabatay sa 16px na body font,
   kaya masyadong makitid ang naging kahon at napuputol ang headline */
.intro__head{max-width:820px;margin-bottom:clamp(32px,4.6vh,54px)}
/* Bahagyang mas maliit kaysa sa ibang h2 (54px doon): sa 54px ay hindi
   kasya sa 820px na kahon ang "Complete Packaging Solutions" at nahahati
   ito sa "Complete Packaging" / "Solutions" — pero sa mas makitid na
   screen ay bumabalik sa isang hilera, kaya pabago-bago ang itsura.
   Sa 48px ay isang hilera na ito mula desktop hanggang tablet. */
.intro__head .h2{font-size:clamp(28px,3.9vw,48px)}
/* Hindi basta linya ng teksto kundi chip: may sariling kahon at may
   markadong bahagi, para may hahagipin ang mata bago bumaba sa listahan.

   Dating may pulang bilog na bilang ("6") sa unahan nito, kasabay ng
   kopyang "6 things worth knowing". Nang mapalitan ang kopya ay wala na
   itong binibilang, kaya inalis. Kung ibabalik, ganito ang rule:
     .intro__count{display:grid;place-items:center;width:32px;height:32px;
       flex:none;border-radius:50%;background:var(--red);color:#fff;
       font-family:var(--display);font-weight:900;font-style:italic;
       font-size:16px;box-shadow:0 8px 16px -10px rgba(217,4,41,.95)}
   at ibalik ang paliit na padding sa kaliwa: 9px 18px 9px 9px. */
.intro__sub{
  margin-top:20px;display:inline-flex;align-items:center;gap:13px;
  font-size:clamp(15px,1.3vw,17.5px);color:var(--ink-2);
  padding:10px 20px;border-radius:100px;
  background:rgba(255,255,255,.7);box-shadow:inset 0 0 0 1px rgba(31,66,128,.10);
}
.intro__sub em{
  font-style:normal;font-weight:600;color:var(--navy);
  box-shadow:inset 0 -.42em 0 rgba(242,160,93,.32);
}
.intro__acts{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;margin-top:clamp(34px,4.6vh,54px)}


/* ---- ANG REEL: panel sa kaliwa, listahan sa kanan ---- */
.reel{display:grid;grid-template-columns:1.02fr .98fr;gap:clamp(24px,3.4vw,52px);align-items:stretch;perspective:1300px}

/* Salansan ang mga panel sa iisang cell — iisa lang ang kita, pero
   ang taas ng kahon ay sumusunod sa pinakamahaba, kaya walang tumatalon
   na layout kapag nagpalit. */
.reel__stage{
  position:relative;display:grid;isolation:isolate;
  background:#fff;
  border:1px solid rgba(31,66,128,.10);border-radius:18px;
  padding:clamp(28px,3.4vw,44px);overflow:hidden;
  box-shadow:0 34px 60px -38px rgba(31,66,128,.65), 0 3px 10px -6px rgba(31,66,128,.22);
  /* bahagyang tumatagilid ang kahon kasunod ng mouse */
  transform:rotateX(var(--tiltX,0deg)) rotateY(var(--tiltY,0deg));
  transition:transform .6s var(--ease),box-shadow .5s ease;
}
.reel__stage.is-tilt{transition:transform .1s linear,box-shadow .5s ease}
.reel__stage.is-tilt{box-shadow:0 44px 70px -40px rgba(31,66,128,.72), 0 4px 12px -6px rgba(31,66,128,.24)}

/* ---- litrato sa likod ng kahon ----
   Hindi lahat ng linya ay may litrato — doon lang kung saan may sinasabi
   ito. Isang layer bawat litrato, at ang JS (seksyon 4c) ang nagbubukas
   ng tama sa pamamagitan ng `.is-on`.

   Tatlong bagay ang nagaganap:
   1. kinukulayan ang litrato para pumasok sa navy at orange ng brand
   2. hinahati ang kahon — teksto sa kaliwa, litrato sa kanan
   3. dumidilim nang bahagya ang kanang gilid para may lalim ito */
.reel__bg{
  position:absolute;inset:0;z-index:0;pointer-events:none;
  opacity:0;transition:opacity .5s var(--ease);
  /* `soft-light` ang paghalo: hindi tinatakpan ang litrato, kinukulayan lang.
     Malamig (navy) sa itaas, mainit (orange) sa ibaba — kapareho ng kulay
     ng buong page, kaya hindi ito mukhang idinikit na stock photo. */
  --tint:linear-gradient(158deg,
    rgba(31,66,128,.34)   0%,
    rgba(59,156,255,.22) 44%,
    rgba(242,160,93,.26) 100%);
  /* Ang huling layer ang nasa likod: siya ang pumupuno kung may natitirang
     puwang sa gilid, halimbawa kapag naiba ang hugis ng bagong larawan. */
  --fill:linear-gradient(180deg, #F2F6FB 0%, #EAF0F7 58%, #E4EBF4 100%);
  background:
    var(--tint),
    var(--photo) var(--pos,50% 50%) / var(--size,cover) no-repeat,
    var(--fill);
  background-blend-mode:soft-light, normal, normal;
  filter:saturate(1.05) contrast(1.03) brightness(1.02);
}
.reel__bg.is-on{opacity:1}

/* Isang linya kada litrato. Dito lang palitan kung may bagong larawan.

   Pareho silang pinalawak pataas at pababa hanggang tumugma sa hugis ng
   kahon (mga 1.10), kaya napupuno nila ang BUONG kahon nang walang
   naaalis sa eksena. Ang idinagdag ay hinila mula sa pinakagilid na
   hilera ng pixel ng litrato mismo — kisame sa itaas, sahig sa ibaba —
   kaya walang nakikitang hangganan. */
.reel__bg--warehouse{--photo:url('../img/warehouse.jpg')}
.reel__bg--team     {--photo:url('../img/team.jpg')}
.reel__bg--truck    {--photo:url('../img/truck.jpg')}
.reel__bg--office   {--photo:url('../img/office.jpg')}
.reel__bg--delivery {--photo:url('../img/delivery.jpg')}
/* Tulog muna — tinanggal ang ika-06 na linya sa index.html (Ago 10, 2026).
   Naiwan ito at ang `dealer.jpg` / `dealer-tall.jpg`: kapag ibinalik ang
   linya ay gagana agad ito nang walang idadagdag dito. */
.reel__bg--dealer   {--photo:url('../img/dealer.jpg')}

/* Hindi puting ulap ang panangga kundi kulay: mula sa maputlang asul sa
   kaliwa papuntang maputlang cream sa kanan, tapos nawawala. Ganito
   nagbabalanse ang teksto at ang larawan — mabasa ang isa, kita ang isa,
   at parang sinadya ang kulay imbes na tinakpan lang.

   Kayang manipis nito dahil pareho ang dalawang larawan: maputla at
   bakante ang kaliwa nila, doon mismo kung saan nakasulat ang teksto. */
.reel__bg::after{
  content:"";position:absolute;inset:0;
  background:
    /* bahagyang dilim sa kanang gilid — nagbibigay ng lalim sa pasilyo */
    radial-gradient(76% 88% at 102% 74%,
      rgba(31,66,128,.16) 0%, rgba(31,66,128,.06) 46%, transparent 76%),
    linear-gradient(96deg,
      rgba(238,244,251,.930)  0%,
      rgba(234,241,251,.910) 34%,
      rgba(237,240,250,.865) 50%,
      rgba(245,239,235,.720) 62%,
      rgba(251,239,226,.380) 74%,
      rgba(255,243,229,.130) 87%,
      rgba(255,248,238,.020) 100%);
}

/* Liwanag na sumusunod sa cursor sa loob ng kahon, kasama ang dalawang
   mainit na sulok. Kapag walang mouse, nananatili ito sa itaas na kanan. */
.reel__stage::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
  background:
    radial-gradient(circle 300px at var(--sx,78%) var(--sy,12%), rgba(59,156,255,.19), transparent 66%),
    radial-gradient(58% 52% at 88% 4%,  rgba(242,160,93,.15), transparent 68%),
    radial-gradient(52% 48% at 4% 96%,  rgba(59,156,255,.09), transparent 70%);
}
/* Lalim sa loob ng kahon. Hindi translateZ ang gamit dahil pinipilit ng
   `overflow:hidden` na maging flat ang 3D, kaya 2D parallax na lang:
   salungat ang galaw ng icon at ng litrato sa likod. */
.reel__ico{transform:translate3d(calc(var(--pdx,0px) * -1.5),calc(var(--pdy,0px) * -1.5),0)}
.reel__bg{transform:scale(1.06) translate3d(calc(var(--pdx,0px) * 1.6),calc(var(--pdy,0px) * 1.6),0)}
/* pulang guhit sa kaliwang gilid — parang gilid ng tape */
.reel__stage::after{
  content:"";position:absolute;left:0;top:0;bottom:0;width:5px;z-index:2;
  background:linear-gradient(180deg,var(--red),#F2A05D);
}

.reel__panel{
  grid-area:1/1;position:relative;z-index:3;align-self:center;
  opacity:0;visibility:hidden;transform:translateY(16px);
  transition:opacity .45s var(--ease),transform .55s var(--ease),visibility 0s .5s;
}
.reel__panel.is-on{opacity:1;visibility:visible;transform:none;transition-delay:0s,0s,0s}

/* Wala nang malaking numero sa loob ng kahon — nasa listahan na sa kanan
   ang bilang, at natatakpan lang nito ang litrato. */
.reel__ico{
  display:grid;place-items:center;width:56px;height:56px;border-radius:14px;
  background:linear-gradient(150deg,var(--navy),#24409B);color:#fff;
  box-shadow:0 12px 22px -14px rgba(31,66,128,.9);margin-bottom:22px;
}
/* lahat ng ginamit dito ay line icon (#i-*), currentColor ang kulay —
   kaya puti sila sa loob ng navy na badge */
.reel__ico svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.7}
.reel__big{
  font-family:var(--display);font-weight:900;font-style:italic;letter-spacing:-.03em;
  font-size:clamp(25px,2.9vw,38px);line-height:1.04;color:var(--navy);
}
.reel__body{margin-top:16px;font-size:clamp(14.5px,1.15vw,16.5px);line-height:1.68;color:var(--ink-2);max-width:46ch}
/* Sa may litrato lang pinapaikli ang linya, para may matirang espasyo sa
   kanan. Malapad ang `ch` sa Poppins, kaya porsyento ang totoong takda.
   Puwedeng i-adjust kada panel gamit ang `--tw` sa markup — depende kung
   saan nagsisimula ang laman ng litrato sa likod. */
.reel__panel--photo .reel__body{max-width:min(38ch,var(--tw,68%))}
.reel__tag{
  display:inline-block;margin-top:22px;padding:7px 15px;border-radius:100px;
  /* halos buo ang kulay, hindi manipis: kailangan itong mabasa kahit
     tumapat sa litrato ng bodega sa likod */
  background:rgba(255,238,240,.94);box-shadow:inset 0 0 0 1px rgba(217,4,41,.14);
  color:var(--red);
  font-family:var(--display);font-weight:700;font-size:12px;letter-spacing:.06em;text-transform:uppercase;
}

/* ---- kontrol sa loob ng kahon ----
   Nakatago sa desktop: nasa tabi na ng kahon ang listahan doon, kaya
   kitang-kita na kung nasaan ka at saan lilipat. Sa cellphone lang ito
   lumalabas, kung saan nasa ilalim pa ang listahan. */
.reel__nav{display:none}

/* ---- listahan ---- */
.reel__list{display:grid;align-content:center;gap:6px}
.reel__row{
  position:relative;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;
  width:100%;text-align:left;padding:16px 18px;border-radius:12px;overflow:hidden;
  background:transparent;border:1px solid transparent;cursor:pointer;
  font:inherit;color:inherit;
  transition:background .3s ease,border-color .3s ease,transform .35s var(--ease);
}
/* pulang gilid sa kaliwa ng napiling linya — dito nakakabit ang mata */
.reel__row::before{
  content:"";position:absolute;left:0;top:14%;bottom:14%;width:3px;border-radius:3px;
  background:var(--red);pointer-events:none;
  transform:scaleY(0);transform-origin:50% 50%;transition:transform .34s var(--ease);
}
@media (hover:hover){ .reel__row:hover{background:rgba(255,255,255,.6);border-color:rgba(31,66,128,.10)} }
.reel__row.is-on{
  background:#fff;border-color:rgba(31,66,128,.14);transform:translateX(4px);
  box-shadow:0 16px 30px -22px rgba(31,66,128,.75);
}
.reel__row.is-on::before{transform:scaleY(1)}
.reel__row:focus-visible{outline:2px solid var(--electric);outline-offset:2px}

.reel__no{
  font-family:var(--display);font-weight:900;font-style:italic;font-size:15px;letter-spacing:-.02em;
  color:rgba(31,66,128,.32);transition:color .3s ease;
}
.reel__row.is-on .reel__no{color:var(--red)}
.reel__txt{display:grid;gap:3px;min-width:0}
.reel__t{
  font-family:var(--display);font-weight:700;font-size:clamp(15px,1.3vw,17.5px);
  color:var(--navy);letter-spacing:-.01em;
}
.reel__d{font-size:13.5px;color:var(--ink-2);line-height:1.45}
.reel__arw{
  width:19px;height:19px;color:var(--red);opacity:0;transform:translateX(-7px);
  transition:opacity .3s ease,transform .35s var(--back);
}
.reel__row.is-on .reel__arw{opacity:1;transform:none}

/* Sukatan ng oras — kita lang kapag kusang sumusunod-sunod ang reel.
   Sa hover ay nawawala, dahil ikaw na ang may hawak. */
.reel__bar{position:absolute;left:0;right:0;bottom:0;height:2px;background:rgba(31,66,128,.08);opacity:0}
.reel__bar i{display:block;height:100%;width:100%;transform-origin:0 50%;transform:scaleX(0);background:var(--red)}
.reel.is-auto .reel__row.is-on .reel__bar{opacity:1}
.reel.is-auto .reel__row.is-on .reel__bar i{animation:reelBar var(--auto,4.6s) linear forwards}
@keyframes reelBar{from{transform:scaleX(0)}to{transform:scaleX(1)}}


/* ---- WHAT WE SUPPLY ---- */
.supply{margin-top:clamp(36px,5vh,64px)}
.supply__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 18px;margin-bottom:18px}
.supply__lbl{
  font-family:var(--display);font-weight:900;font-style:italic;letter-spacing:-.02em;
  font-size:clamp(18px,1.7vw,22px);color:var(--navy);
}
.supply__note{font-size:13.5px;font-style:italic;color:var(--kraft-deep)}
.supply__row{display:grid;grid-template-columns:repeat(6,1fr);gap:clamp(10px,1.1vw,16px)}

.sup{
  position:relative;display:grid;gap:5px;padding:26px 16px 18px;border-radius:14px;
  background:rgba(255,255,255,.72);border:1px solid rgba(31,66,128,.10);
  text-decoration:none;overflow:hidden;
  transition:transform .4s var(--back),box-shadow .35s ease,border-color .3s ease,background .3s ease;
}
@media (hover:hover){ .sup:hover{
  transform:translateY(-6px);background:#fff;border-color:rgba(31,66,128,.18);
  box-shadow:0 22px 34px -24px rgba(31,66,128,.75);
} }
/* piraso ng pulang tape sa itaas — dumidikit kapag hini-hover */
.sup__strip{
  position:absolute;top:-9px;left:50%;translate:-50% 0;width:56px;height:17px;
  background:linear-gradient(176deg,#E63946,#D90429 48%,#AE0521);rotate:-4deg;
  clip-path:polygon(0% 12%,2.5% 48%,0% 80%,2% 98%,98% 100%,100% 68%,97.5% 34%,100% 4%);
  opacity:0;transform:translateY(-6px);
  transition:opacity .3s ease,transform .4s var(--back);
}
.sup:focus-visible .sup__strip{opacity:.95;transform:none}
@media (hover:hover){ .sup:hover .sup__strip{opacity:.95;transform:none} }
.sup__ic{display:block;width:clamp(40px,3.4vw,52px);height:clamp(40px,3.4vw,52px);margin-bottom:6px}
.sup__ic svg{width:100%;height:100%;display:block;transition:transform .5s var(--back)}
@media (hover:hover){ .sup:hover .sup__ic svg{transform:rotate(-9deg) scale(1.08)} }
.sup b{font-family:var(--display);font-weight:700;font-size:14.5px;color:var(--navy);letter-spacing:-.01em}
.sup em{font-style:normal;font-size:12px;line-height:1.45;color:var(--ink-2)}
.sup:focus-visible{outline:2px solid var(--electric);outline-offset:3px}

/* TANDAAN: tinanggal muna ang stats row sa index.html — bakante ang parteng
   iyon. Nakatabi ang markup sa _parked/stats-row.html. Iniwan ang mga rule
   dito: walang epekto habang wala ang .stats, at handa na kapag ibinalik. */
.stats{
  display:grid;grid-template-columns:repeat(4,1fr);gap:2px;margin-top:clamp(46px,7vh,84px);
  background:var(--line-2);border-radius:8px;overflow:hidden;
}
.stat{background:var(--paper);padding:26px 20px;text-align:center}
.stat b{
  display:block;font-family:var(--display);font-weight:900;font-style:italic;letter-spacing:-.04em;
  font-size:clamp(30px,3.8vw,46px);color:var(--navy);line-height:1;
}
.stat span{display:block;margin-top:9px;font-size:13.5px;color:var(--ink-2);line-height:1.4}
.stats__note{margin-top:14px;font-size:12px;color:rgba(87,97,138,.75);font-style:italic}


/* ================= 7a. ANG FEATURE — BOSS RDR × TAPEMATE =================
   Kaagad pagkatapos ng hero. Ito ang konteksto ng buong pahina: bago pa
   tingnan ng bisita kung ano ang laman, alam na niya kung sino ang
   nagrerekomenda.

   MALIWANAG NA ITO, HINDI NA NAVY (Ago 8, 2026 — sinusundan ang bagong
   reference). Dalawang bagay ang nagbago dahil doon:
     · larawan na ang likod, hindi gradient — story-bg.jpg
     · pula na ulit ang pangunahing kulay ng kilos, gaya ng buong pahina.
       Asul iyon noong navy, dahil nawawala ang pula sa madilim na asul.

   Hindi 8 ang bilang para hindi masira ang mga tinutukoy ng ibang
   komento sa file na ito at sa main.js. */
/* `--feat-ink` — ang pinakamadilim na bahagi ng larawan sa rehiyon ng
   teksto ay #BDCCEB (sinukat, hindi hula). Doon ay 3.73:1 lang ang
   karaniwang `--ink-2`, kulang sa 4.5:1. Ang #3E4A70 ay 5.38:1.

   `#DDE7FA` ang kulay sa ilalim ng larawan: kung mabagal ang koneksyon o
   nawala ang file, asul-maputi pa rin ang seksyon at nababasa pa rin ang
   lahat — hindi puting pahina na may hindi mabasang teksto. */
.sec--feat{
  position:relative;color:var(--navy);
  --feat-ink:#3E4A70;
  background:#DDE7FA url("../img/story-bg.jpg") center center/cover no-repeat;
}
/* ---- SA MAKITID NA SALAMIN ----
   2.11:1 ang larawan at mas matangkad pa kaysa lapad ang seksyon sa
   cellphone, kaya ang GITNA lang ang ipinapakita ng `cover`.

   ⚠ AT WALANG LAMAN ANG GITNA. Nasa DALAWANG GILID ang lahat ng
     iginuhit: sa kaliwa ang punit na navy sa itaas, ang tape, ang
     karton, at ang guhit na blueprint; sa kanan naman ang isa pang
     karton at ang punit sa ibaba. Malambot na gradient lang ang nasa
     pagitan. Kaya sa `cover` ay nagiging PATAG NA ASUL ang buong
     seksyon sa cellphone — kabaligtaran ng hero sa itaas nito.

   `auto 100%` + `left center`: ang TAAS ang pinupuno, at sa kaliwang
   gilid nakadikit — doon nagsisiksikan ang punit, ang tape, at ang
   karton. Sa halip na 17% ng gitna ay 17% ng KALIWA ang makikita, at
   doon may laman. 1.27× lang ang lapa ng larawan sa ganoong taas
   (863 → mga 1100), kaya hindi ito nagiging malabo. */
@media (max-aspect-ratio:1/1){
  .sec--feat{
    background-size:auto 100%;
    background-position:left center;
  }
}

/* ---- ANG DUGTUNGAN SA #interview ----
   May punit na navy sa ibabang-kanan ng larawan, at doon mismo nagtatapos
   ang seksyon — kaya PATAG na naputol ang tuktok ng punit, parang mali sa
   pag-render at hindi parang disenyo. (Sinukat: sa 1440×880 ay eksaktong
   magkasukat ang taas ng larawan at ng seksyon dahil `cover`, kaya walang
   puwang para iangat o ibaba ito.)

   Naglalaho na lang ito papunta sa `--paper` sa huling piraso. Nawawala
   ang patag na hiwa nang hindi tinatanggal ang punit na papel. */
.sec--feat::after{
  content:"";position:absolute;left:0;right:0;bottom:0;
  height:clamp(56px,8vw,112px);pointer-events:none;
  background:linear-gradient(180deg,rgba(255,253,249,0),var(--paper));
}

/* ---- ANG BUHAY NA LIKOD ----
   Dalawang bagay lang ngayon: ang sinag na sumusunod sa cursor, at ang
   dalawang malaking bilog na dahan-dahang gumagala. Wala nang tuldok na
   lambat — nasa mismong larawan na iyon.

   PUTI ang sinag, hindi asul. Sa maliwanag na likod ay pinapaliwanag
   nito ang dinadaanan, kaya TUMATAAS ang contrast ng navy na teksto
   habang dumadaan — hindi bumababa. Walang panganib sa pagbabasa.

   Ang unang layer lang ang gumagalaw kasabay ng cursor. `--mx/--my` ang
   itinatakda ng seksyon 1d ng main.js; kapag walang JS o walang mouse,
   nananatili ito sa 72%/32% — nasa likod ng video, kung saan ito dapat. */
.featbg{
  position:absolute;inset:0;pointer-events:none;overflow:hidden;
  background:radial-gradient(30vw 30vw at var(--mx,72%) var(--my,32%), rgba(255,255,255,.38), transparent 62%);
}
/* Ang dalawang gumagalang bilog. `inset:-20%` para hindi sumilip ang
   gilid nila habang gumagalaw; `alternate` para walang tumatalon na
   pagbalik sa umpisa. Dalawampu't dalawang segundo — sapat para
   maramdaman, mabagal para hindi makaabala sa nagbabasa. */
.featbg::before{
  content:"";position:absolute;inset:-20%;
  background:
    radial-gradient(24vw 24vw at 20% 24%, rgba(255,255,255,.4),  transparent 62%),
    radial-gradient(26vw 26vw at 82% 74%, rgba(59,156,255,.13), transparent 64%);
  animation:featDrift 22s ease-in-out infinite alternate;
}
@keyframes featDrift{
  from{translate:0 0;      scale:1}
  to  {translate:3% -4%;   scale:1.09}
}

/* ---- ANG RUTA NG PADALA ----
   Dalawang magkapatong na linya sa IISANG `d`:
     .featbg__road   ang buong ruta, tuldok-tuldok, halos hindi kita
     .featbg__pulse  isang maiksing guhit na tumatakbo sa ruta

   Ang pulso ay `stroke-dasharray: <haba ng guhit> <napakahabang blangko>`,
   at ang `stroke-dashoffset` ang gumagalaw. Iisang guhit lang ang
   nakikita anumang sandali, at parang may dumadaan sa ruta.

   ⚠ ANG `--haba` AY ISINUSULAT NG JS (seksyon 1d), hindi nakasulat dito.
     `getTotalLength()` ang nagbibigay ng tunay na haba ng path; kung
     hulaan ito, may lundag ang pulso tuwing bumabalik sa umpisa. May
     `1400px` na sahig dito para may makikita pa rin kahit hindi tumakbo
     ang JS — hindi lang ito magiging perpekto. */
/* Naglalaho ang kaliwang bahagi ng ruta. Kahit ibinaba ko na ang linya,
   dumadaan pa rin ito sa "For resellers, online sellers..." sa
   ibaba-kaliwa — 12.5px lang ang titik na iyon at tuldok-tuldok ang
   linya, kaya nagmumukhang salungguhit na sira. Sa kanan naman ay
   walang teksto at doon ito nakikita. */
.featbg__route{
  position:absolute;inset:0;width:100%;height:100%;
  pointer-events:none;overflow:visible;
  -webkit-mask-image:linear-gradient(90deg,transparent 4%,#000 34%);
          mask-image:linear-gradient(90deg,transparent 4%,#000 34%);
}
.featbg__road{
  fill:none;stroke:rgba(31,66,128,.16);stroke-width:1.6;
  stroke-dasharray:5 11;stroke-linecap:round;
}
.featbg__pulse{
  fill:none;stroke:var(--electric);stroke-width:2.6;stroke-linecap:round;
  filter:drop-shadow(0 0 6px rgba(59,156,255,.85));
  stroke-dasharray:26 var(--haba,1305px);
  animation:routeRun 7.5s linear infinite;
}
@keyframes routeRun{ to{ stroke-dashoffset:calc(-1 * (var(--haba,1305px) + 26px)) } }

/* ---- ANG LUMULUTANG NA TULDOK ----
   Siyam sila, gawa ng JS (seksyon 1d) — hindi nakasulat sa markup, dahil
   dekorasyon sila at walang dapat abutin ng screen reader.

   DALAWANG MAGKAIBANG PROPERTY ang gumagalaw sa bawat isa, at sinadya:
     `transform`  ang mabagal na paglutang — nasa keyframes, CSS lang
     `translate`  ang sagot sa cursor at sa scroll — JS ang nagsusulat
   Nagpapatong ang dalawa (translate muna, tapos transform), kaya hindi
   sila naglalaban at hindi kailangang isaisip ng JS ang keyframes. */
.featbg__motes{position:absolute;inset:0;overflow:hidden}
.mote{
  position:absolute;left:var(--l);top:var(--t);width:var(--w);aspect-ratio:1;
  translate:var(--dx,0px) var(--dy,0px);
  animation:moteDrift var(--dur) ease-in-out infinite alternate;
  animation-delay:var(--dl);
  will-change:translate,transform;
}
@keyframes moteDrift{
  from{transform:translate3d(0,0,0) rotate(0deg)}
  to  {transform:translate3d(var(--ax),var(--ay),0) rotate(var(--ar))}
}
/* ⚠ TULDOK LANG SILANG LAHAT. May singsing at kahon ako rito noon, at
   MUKHA SILANG NAWAWALANG UI — bilog na may gilid at parisukat na may
   gilid sa gitna ng likod, para bang may card na hindi na-render.
   Marami nang laman ang larawan sa likod (karton, tape, tuldok na
   lambat, guhit na blueprint); anumang may malinaw na gilid ay
   nakikipag-agawan doon. Malabong liwanag lang ang natira — hangin ito,
   hindi bagay. */
.mote{
  border-radius:50%;
  background:radial-gradient(closest-side,
    rgba(255,255,255,var(--o,.72)), rgba(214,231,255,calc(var(--o,.72) * .4)) 56%, transparent 74%);
}

/* Hati sa gitna. 1.06fr / .94fr ito noong 3:4 na cover ng magasin ang
   katabi — matangkad iyon at hindi kailangan ng lapad. Sinubukan kong
   baligtarin para sa pahigang video, pero sa 528px ay nahahati ang
   "NATIONWIDE" sa dalawang linya at nagsasalansan ang dalawang pindutan.
   Kasya silang lahat sa 561px, at sapat na iyon para sa video. */
.feat{
  position:relative;z-index:2;
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(28px,4vw,60px);align-items:center;
}
.feat__copy{min-width:0}

/* ---- ang badge sa itaas ----
   ⚠ SINASADYANG IBA ITO SA BADGE NG HERO. Magkapareho ang sinasabi ng
     dalawa ("Recommended by Boss RDR"), at kung magkapareho rin ang
     hitsura, mukhang naulit lang ang parehong bahagi at hindi bagong
     seksyon. Kabaligtaran ang piniling anyo:

         hero      puting SALAMIN, buong bilog, madilim na teksto
         #story    punong NAVY, patusok sa kaliwa, maputing teksto

     Ang `border-radius:3px 999px 999px 3px` ang gumagawa ng anyong
     tatak-editorial: patusok ang kaliwa, bilog ang kanan. Ang gintong
     bareta ay `inset` na anino at hindi `border` — walang nadadagdag sa
     laki, kaya walang gumagalaw sa layout.

   Sinukat: puti sa navy = 9.77:1; `--kraft-light` sa navy = 6.02:1.
   Pasado ang dalawa kahit 11.5px lang ang titik. (Ang `--kraft` mismo ay
   4.64:1 — pasado rin, pero ang mas maliwanag ang ginamit sa pangalan
   dahil doon dapat mahulog ang mata.) */
.fbadge{
  display:inline-flex;align-items:center;gap:10px;
  padding:9px 18px 9px 15px;
  border-radius:3px 999px 999px 3px;
  background:var(--navy);
  box-shadow:0 14px 30px -18px rgba(31,66,128,.8), inset 3px 0 0 var(--kraft);
  font-family:var(--display);font-weight:700;font-size:11.5px;
  letter-spacing:.11em;text-transform:uppercase;color:#fff;
  margin-bottom:clamp(16px,2.4vw,22px);
}
.fbadge b{color:var(--kraft-light);font-weight:800}
.fbadge__star{width:13px;height:13px;flex:none;color:var(--kraft)}

.sec--feat .h2{font-size:clamp(29px,3.9vw,50px);line-height:1.04}
/* Ang maikling pulang guhit sa ilalim ng headline. Wala itong sinasabi —
   bantas ito: dito nagtatapos ang pamagat at nagsisimula ang paliwanag. */
.feat__rule{
  display:block;width:clamp(64px,8vw,104px);height:4px;border-radius:2px;
  margin-top:clamp(16px,2.2vw,22px);
  background:linear-gradient(90deg,var(--red),rgba(217,4,41,.14));
}
.sec--feat .lead{max-width:52ch}

/* ---- ANG APAT NA TILE ----
   PUTING CARD NA ANG BAWAT ISA (Ago 8, 2026 — mula sa reference). Dating
   ang ikono lang ang nakakahon; ngayon ay ang buong tile. Isang dahilan
   ang nagpabago: nawawala ang aninag na kahon sa larawang likod. Puting
   card ang tanging bagay na laging nababasa sa ibabaw ng karton.

   Kaya wala nang kahon sa loob ng kahon — nakapatong nang deretso sa
   card ang ikono. Ang card na ang lalagyan.

   Grid at hindi flex-wrap: iba-iba ang haba ng apat, at sa flex ay
   nalalaglag ang isa sa sariling hilera kapag mahaba ang katabi. */
.figs{
  list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  /* Tatlong hilera: ikono, halaga, label. Ang `subgrid` sa bawat `li`
     ang nagpapasunod sa tatlo sa parehong hilera, kaya nakahanay ang
     apat na halaga kahit dalawang linya ang label ng isa. Kung wala ito,
     bawat `li` ang may sariling taas at nagiging bakubako ang hanay.

     GUMAGANA PA RIN ITO KAHIT MAY PADDING NA ANG CARD: ang padding ng
     isang subgrid ay ang UNA at HULING track lang ang binabawasan — ang
     mga linya sa gitna ay nananatiling kahanay ng magulang. Iyon mismo
     ang kailangan natin: iisang linya ang simula ng apat na halaga. */
  grid-template-rows:auto auto auto;
  /* Hiwalay na ang dalawa. Iisang `gap` ito noon, pero ang row-gap ay
     nagiging espasyo sa LOOB ng card ngayon — 22px sa pagitan ng ikono
     at ng numero ay masyadong maluwag sa isang maliit na card. */
  column-gap:clamp(10px,1.3vw,16px);row-gap:9px;
  margin-top:clamp(24px,3.2vw,34px);
}
.figs li{
  position:relative;
  display:grid;grid-row:span 3;grid-template-rows:subgrid;align-content:start;
  padding:clamp(13px,1.4vw,17px) clamp(9px,.95vw,12px);
  border-radius:14px;
  background:rgba(255,255,255,.93);border:1px solid rgba(31,66,128,.1);
  box-shadow:0 10px 24px -18px rgba(31,66,128,.55);
  transition:transform .38s var(--back),box-shadow .38s ease,
             border-color .38s ease,background .38s ease;
}
/* Sinag na sumusunod sa daliri sa loob ng card. `--sx/--sy` ang
   isinusulat ng seksyon 1d; 50%/50% ang pahinga, kaya nasa gitna ito
   bago ka pa gumalaw at walang lundag sa unang kilos.

   `position:absolute` ito kaya hindi ito nagiging grid item ng subgrid —
   hindi nasisira ang paghahanay ng apat na halaga. */
.figs li::before{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(150px 150px at var(--sx,50%) var(--sy,50%),
             rgba(59,156,255,.2), transparent 68%);
  opacity:0;transition:opacity .32s ease;
}
@media (hover:hover){ .figs li:hover::before{opacity:1} }
.figs__ico{
  display:grid;place-items:center;width:clamp(25px,2.5vw,31px);aspect-ratio:1;
  color:var(--navy);
  transition:color .38s ease;
}
/* ---- ANG PAGHAHANAY NG APAT NA IKONO ----
   Iba-iba ang laki ng iginuhit sa loob ng parehong 24×24 na viewBox —
   sinukat: 15.7×15.7 ang stack, pero 9.8 lang ang lapad ng badge at 12.5
   lang ang taas ng truck, at ang truck ay 0.95px pa pababa sa gitna.
   Kaya manipis ang isa at maliit-at-mababa ang isa kapag magkatabi sila.

   Ang `--ix/--iy/--is` ang pumapantay. Nasa seksyon 1c ng main.js ang
   pagsukat — hindi sila nakasulat dito nang deretso dahil mabubulok ang
   ganoong numero sa unang palit ng ikono. Kapag hindi tumakbo ang JS,
   ang dating hitsura pa rin ang lalabas: hindi ito nasisira, hindi lang
   nahahanay nang husto.

   `translate`/`scale` ang ginamit at hindi `transform`, dahil nasa
   `transform` ang hover — nagpapatong sila, hindi nagpapalitan. */
/* 100% at hindi 56%: wala nang kahon sa paligid: ang `.figs__ico` mismo
   ang sukat ng ikono ngayon. */
.figs__ico svg{
  width:100%;height:100%;display:block;
  translate:var(--ix,0) var(--iy,0);
  scale:var(--is,1);
  transition:transform .38s var(--back);
}
@media (hover:hover){ .figs li:hover{
  transform:translateY(-5px);background:#fff;
  border-color:rgba(217,4,41,.3);
  box-shadow:0 22px 40px -20px rgba(31,66,128,.6);
} .figs li:hover .figs__ico{color:var(--red)} .figs li:hover .figs__ico svg{transform:scale(1.1)} }
/* `overflow-wrap`: kapag pinalitan ito ng totoong numero (halimbawa
   "52,800+"), bumabagsak ito sa susunod na linya sa halip na sumagasa
   sa katabi. */
/* ---- ANG SUKAT NG HALAGA ----
   SINUKAT, hindi hinula. Ang "NATIONWIDE" ang pinakamahaba sa apat, at
   sa 15.5px na may .02em na `letter-spacing` ay 108.2px ito — samantalang
   96.0px lang ang kasya sa loob ng card sa 1440px. Kaya nahahati ito sa
   "NATIONWI / DE".

   Tatlong bagay ang nag-aayos, hindi isa:
     · 12px na lang ang padding sa gilid (15px dati)   → +6px na puwang
     · wala nang `letter-spacing`                       → −2.7px na teksto
     · 13.5px na ang pinakamalaki (15.5px dati)         → −12px na teksto
   Kinalabasan sa 1440px: 91.5px na teksto sa 102px na puwang.

   ⚠ KAPAG PINALITAN NG TOTOONG NUMERO: sukatin ulit. Ang `anywhere` ay
     hindi lang basta nagpapabali — pati ang min-content ng hanay ay
     ibinababa nito sa isang titik, kaya walang babala kapag sumobra:
     tahimik lang itong nahahati. */
.figs b{
  display:block;font-family:var(--display);font-weight:800;
  font-size:clamp(11px,1.05vw,13.5px);line-height:1.2;
  text-transform:uppercase;color:var(--red);overflow-wrap:anywhere;
}
/* `.figs b + span` at hindi `.figs span`.
   ITO ANG DAHILAN KUNG BAKIT NASA ITAAS NANG NAKADIKIT ANG IKONO:
   `<span>` din ang kahon ng ikono (.figs__ico), at ang `.figs span` ay
   may specificity na (0,1,1) samantalang (0,1,0) lang ang `.figs__ico` —
   kaya ang `display:block` ng label ang tumatalo sa `display:grid` ng
   kahon, at hindi na tumatama ang `place-items:center`. Bonus pa ang
   `margin-top:5px`, ang 11px na titik, at ang uppercase — lahat iyon ay
   napupunta rin sa kahon.

   Ang `b + span` ay tumatama lang sa label na kasunod ng halaga, kaya
   hindi na maaabot ang kahon kahit kailan. */
/* `--ink-2` sa puting card = 6.03:1. Ligtas ito kahit 11px lang, dahil
   nasa CARD ito at hindi sa larawan. */
.figs b + span{
  display:block;margin-top:4px;font-size:11px;line-height:1.35;
  /* ---- .025em AT HINDI .07em (Ago 11, 2026) ----
     Hiniling na "Print Available" ang label ng ikalawang tile. 15 titik
     iyon; 10 ang pinakamahaba noon ("Dealership").

     Sinukat sa loob mismo ng tile, hindi sa klon: 88.3px ito sa .07em,
     at 80.9px sa .025em. Ang luwang ng tile ay 103.0px sa 1280 pataas ·
     98.6px sa 1180 · 84.5px sa 1024 · 80.4px sa 981.

     Sa .07em ay lumalampas ito sa 981–1075px. Ang agwat ng titik ang
     unang binawasan dahil iyon ang pinakamurang puwang — .045em × 11px ×
     15 titik = 7.4px na nababawas, at nananatili ang 11px na sukat. Sa
     dulong luwang na 103px ay 22px na ang sobra.

     ⚠ HINDI PA ITO SAPAT MAG-ISA. Kulang pa rin ng 0.5px sa 981px, at
       hinihigpitan ng seksyon 19 ang padding at ang agwat sa 981–1099px
       para doon. Dalawa ang lunas, hindi isa.

     ⚠ HINDI ITO ANG PINAKAMASIKIP SA HILERA. Ang `<b>` na "NATIONWIDE"
       (91.5px sa 1280 pataas, 13.5px na titik) ang mas malapit sa
       hangganan — 11.5px lang ang sobra niyon. Ang label na ito ay
       pangalawa lang. */
  letter-spacing:.025em;text-transform:uppercase;color:var(--ink-2);
  /* Isang hilera, palagi. Hindi ito pampaganda: `subgrid` ang apat na
     tile, kaya ang ISANG label na napipilitang maghati ay nagpapataas
     sa hilera ng LAHAT ng apat — lumalabas na may bakanteng puwang sa
     ilalim ng tatlong nakaisang-hilera.

     Ligtas ang `nowrap` DAHIL may sukat ang hangganan sa bawat lapad —
     nasa itaas ang buong talahanayan. Kung hahabaan pa ang alinman ay
     lalampas ito sa halip na maghati, at MAS MABUTI IYON: nakikita agad
     ang lampas, samantalang ang tahimik na paghahati ay iniiwan ang
     bakanteng puwang na hindi mo malaman kung saan galing.

     ▶ KUNG PAPALITAN NG TOTOONG NUMERO ANG APAT (tingnan ang babala sa
       ⚠ sa itaas ng markup): SUKATIN ULIT, at sa loob ng tile — hindi sa
       klon na inilipat sa `body`. Hindi na tinatamaan ng `.figs b + span`
       ang ganoong klon, kaya default na estilo ang masusukat doon at
       masyadong malaki ang lalabas. Range sa mismong teksto ang tama.

       Mga 90px ang luwang sa pinakamasikip, at mga 5.4px kada titik sa
       .025em: mga 16 na titik ang kasya. */
  white-space:nowrap;
}

.feat__acts{display:flex;flex-wrap:wrap;gap:12px;margin-top:clamp(26px,3.4vw,36px)}
/* Sa larawan nakapatong ito, hindi sa card — kaya `--feat-ink` (5.38:1)
   at hindi `--ink-2` (3.73:1, bagsak). 12.5px lang ito. */
.feat__fine{
  display:flex;align-items:center;gap:8px;
  margin-top:16px;font-size:12.5px;line-height:1.55;color:var(--feat-ink);
}
.feat__fine .ico{width:15px;height:15px;flex:none;color:var(--navy);opacity:.75}


/* ---- ANG VIDEO NG RDR VLOG ----
   Pinalitan nito ang mock na cover ng magasin. Nakatabi nang buo ang
   cover sa _parked/rdr-cover-mock.html kung sakaling ibabalik.

   16:9 ito at pahiga, kaya mas mababa kaysa sa dating cover na 3:4 —
   doon nagmula ang mas maluwag na hanay at ang `align-items:center` ng
   .feat. Kung ibabalik ang cover, kailangan ding ibalik iyon. */
/* `--tx/--ty` ang isinusulat ng seksyon 1d — bahagyang kumikiling ang
   buong figure papunta sa cursor. Nasa `.tube` ito at hindi sa
   `.tube__frame`: nasa frame ang paglutang at ang hover, at kung
   pagsasabayin sila sa iisang `transform` ay maglalaban sila. */
/* ⚠ WALANG `transform-style:preserve-3d` DITO, at sinadya.
   Inilagay ko iyon noon at NAGING PUSTURANG ITIM ANG BUONG VIDEO —
   nabigo ang compositing ng 3D context sa software rendering; nagpe-play
   pa rin ang lahat, itim lang ang lumalabas. Hindi rin naman ito
   kailangan: patag ang lahat ng anak (larawan, sinag, tatak), at nasa
   `.tube` mismo ang pagkiling. Ang `preserve-3d` ay para lang sa anak na
   may SARILING puwesto sa espasyo, at wala nito rito. */
.tube{
  position:relative;margin:0;display:grid;justify-items:center;width:100%;
  transform:perspective(1200px) rotateX(var(--ty,0deg)) rotateY(var(--tx,0deg));
}

.tube__frame{
  position:relative;z-index:2;width:100%;aspect-ratio:16/9;
  border-radius:16px;overflow:hidden;cursor:pointer;
  background:linear-gradient(158deg,#0B1A38,#132A54);
  /* Puting singsing at anino na kulay-navy, hindi itim. Sa maliwanag na
     likod ay nagiging dumi ang itim na anino — parang marumi ang larawan,
     hindi parang nakalutang. Nag-aangat ang navy, hindi nagpaparumi. */
  /* ⚠⚠ HINDI NA `border` ANG PUTING SINGSING (Set 2, 2026).

     SINUKAT: `aspect-ratio:16/9` ang frame, pero nasa BORDER BOX
     iyon. Kinakain ng 1px na border ang 2px sa lapad AT 2px sa taas,
     kaya ang tunay na kahon ng player ay 559.2 x 313.67 —
     1.7828, at HINDI 1.7778. Hindi 16:9 iyon.

     Kinakasya ng YouTube ang 16:9 na video sa kahon na ibinigay
     natin. Kapag mas MALAPAD ang kahon kaysa sa video ay ITIM ang
     ipinupuno niya sa magkabilang gilid:
         559.2 - (313.67 x 16/9) = 1.6px, mga 0.8px kada gilid.
     Manipis, pero tunay siyang itim, at nakadikit mismo sa bilugang
     gilid kung saan pinakahalata.

     Nasa `::after` na ang singsing — nakapatong, walang kinakaing
     espasyo — kaya EKSAKTONG 16:9 na ang kahon ng player at wala
     nang itim na maipupuno ang YouTube.

   ▶ HUWAG IBABALIK ANG `border` DITO. Kung kailangan ng mas makapal
     na singsing, ang `inset 0 0 0 Npx` sa `::after` ang palitan. */
  box-shadow:0 34px 64px -30px rgba(15,38,86,.55), 0 4px 14px -8px rgba(15,38,86,.25);
  /* ⚠⚠ PATAY ANG TATLONG IDLE NA GALAW NG VIDEO (Ago 27, 2026).
     Hiling ni Kylie: "can u make the vid stable? like hindi sya nag
     zoom in and out."

     TATLO SILA AT SABAY-SABAY SILANG GUMAGAWA NG "ZOOM":
       coverFloat    ang frame mismo — tumataas-bumababa ng 10px
       coverBreathe  ang glow sa likod — lumalaki ng 6%
       coverBase     ang anino sa ilalim — lumiliit ng 8%
     WALANG `scale` ang frame kahit kailan, kaya madaling isipin na
     hindi siya ang problema. Pero ang LUMALAKING GLOW kasabay ng
     LUMILIIT NA ANINO ay eksaktong hitsura ng bagay na papalapit sa
     iyo — kaya "zoom in and out" ang nakikita kahit hindi naman
     lumalaki ang larawan.

   ⚠ MAY SARILING BABALA ANG FILE NA ITO TUNGKOL DITO, ilang linya sa
     ibaba, at tama siya: "Gumagalaw na target ang pinipindot kung
     hindi — nakakainis iyon, at mas mahirap tamaan sa cellphone at sa
     trackpad." PLAY BUTTON ang nasa gitna nito. Pinipigil lang niya
     ang galaw sa hover noon; ngayon ay wala nang galaw kahit kailan.

   ⚠ BUHAY PA ANG TATLONG @keyframes AT ANG HOVER. Ang hover ay SAGOT
     SA TAO at hindi kusang galaw, kaya naiwan siya.
   ▶ PAGBABALIK: ibalik ang `coverFloat 6s ease-in-out infinite` dito,
     ang `coverBase 6s ...` sa `.tube__base` at ang `coverBreathe
     6s ...` sa `.tube__glow`. Tatlo silang linya. */
  animation:none;
  transition:transform .5s var(--ease),box-shadow .5s ease;
}
/* ANG PUTING SINGSING. Huli siyang ipininta sa loob ng frame, kaya
   nasa IBABAW siya ng player at kita pa rin habang tumatakbo ang
   video. `pointer-events:none` para dumaan ang pindot sa player sa
   ilalim niya. */
.tube__frame::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  border-radius:inherit;z-index:9;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.55);
  transition:box-shadow .5s ease;
}
@media (hover:hover){ .tube:hover .tube__frame::after{box-shadow:inset 0 0 0 1px rgba(255,255,255,.8)} }
@keyframes coverFloat{
  0%,100%{translate:0 0}
  50%    {translate:0 -10px}
}
/* Pinipigil ang paglutang kapag may hover o may naka-tuon sa loob.
   Gumagalaw na target ang pinipindot kung hindi — nakakainis iyon, at
   mas mahirap tamaan sa cellphone at sa trackpad. */
.tube:focus-within .tube__frame{animation-play-state:paused}
@media (hover:hover){ .tube:hover .tube__frame{animation-play-state:paused} .tube:hover .tube__frame{
  transform:translateY(-5px) scale(1.014);
  box-shadow:0 46px 82px -30px rgba(15,38,86,.6), 0 6px 18px -8px rgba(15,38,86,.28);
} }
/* Tumigil na ang lahat kapag tumatakbo na ang player — nakakaabala ang
   gumagalaw na frame habang nanonood. */
.tube.is-live .tube__frame{animation:none;transform:none;cursor:default}

/* ---- ANG ITIM SA GILID NG THUMBNAIL ----
   Laging 1280×720 ang ibinibigay ng YouTube, pero kung hindi 16:9 ang
   inupload na thumbnail ay itim ang ipinupuno nito sa gilid. Sa video na
   ito: 100px kada gilid, kaya 1080×720 lang ang tunay na laman.

   1280 / 1080 = 1.185, kaya 119% ang laki na kailangan para maitulak ang
   itim palabas ng frame. May napuputol na mga 9.5% sa taas at baba —
   nasa gitna naman ang mukha at ang teksto, kaya walang nasisira.

   Kung papalitan ang video: sukatin ulit ang itim. Kapag 16:9 na talaga
   ang bagong thumbnail, ibalik lang ito sa 100%.

   `width`/`height` ang ginamit at hindi `transform:scale`, dahil nasa
   `scale` ang hover — magkakapatong sila kung iisa ang property. */
.tube__thumb{
  position:absolute;left:50%;top:50%;translate:-50% -50%;
  width:119%;height:119%;object-fit:cover;display:block;
  transition:scale .6s var(--ease),filter .5s ease;
}
@media (hover:hover){ .tube:hover .tube__thumb{scale:1.04;filter:brightness(1.06)} }
.tube__player{position:absolute;inset:0;width:100%;height:100%;border:0}

/* ⚠⚠ `<a>` NA ANG `.tube__frame` AT HINDI NA `<div>` (Set 15, 2026).
   Facebook na ang video at sa labas siya bumubukas, kaya ang buong frame
   na mismo ang link. Dalawang bagay ang kailangan niyon:
     `display:block`      inline ang `<a>` sa simula, at sa inline ay
                        HINDI GUMAGANA ang `aspect-ratio:16/9` sa itaas —
                        gugho ang buong frame papuntang taas ng teksto.
     `text-decoration`   may teksto sa loob (ang tatak na "RDR Talks"),
                        at may salungguhit siya kung hindi aalisin.
 ⚠ HINDI `.tube__frame` LANG ANG SELECTOR KUNDI `a.tube__frame` — para
   kung ibabalik sa `<div>` balang-araw (halimbawa, embed na naman) ay
   walang maiiwang rule na nakasabit sa wala. */
/* ⚠⚠ PATAYO NA ANG FRAME (Set 15, 2026) — 9:16, hindi na ang 16:9 sa itaas.
   REEL ang video (720x1280 ang tunay na stream, sinukat sa player mismo).
   Sa 16:9 na kahon ay 32% lang ng lapad ang aabutin niya at itim ang
   dalawang gilid. Hiling ni Kylie: *"u can do is resize it or change the
   format for that."*

 ⚠⚠ 315px ANG TAKDA AT SINUKAT SIYA, hindi hinula. Sa 9:16, ang 315px na
    lapad ay 560px ang taas — iyon ang pinakamalaki na hindi pa nakakaabala
    sa 1440px na bintana. Ganito ang naging taas sa ibang lapad:
        buong hanay (561px)   998px   halos buong screen, sobra
        400px                 711px   matangkad pa rin
        315px                 560px   <- ito
        260px                 462px   maliit na ang mukha
 ⚠ `margin-inline:auto` — mas makitid na siya kaysa sa hanay niya, kaya
   kung wala ito ay dumidikit siya sa kaliwa at lumalabas na parang mali.
 ⚠ `min(100%,315px)` AT HINDI BASTA 315px: sa telepono ay 346px lang ang
   hanay, at ang `100%` ang pumipigil na lumampas siya roon.

 ⚠ `display:block` — inline ang `<a>` sa simula, at sa inline ay HINDI
   GUMAGANA ang `aspect-ratio`; gugho ang buong frame papuntang taas ng
   teksto. `text-decoration:none` — may teksto sa loob (ang tatak). */
/* ══════════ HITSURANG FACEBOOK NA POST (Set 15, 2026) ══════════
   Hiling ni Kylie: *"make sure na mukha itong galing fb na once they click
   it direct na sa fb post."* Tatlong piraso: ang ulo (larawan, pangalan,
   asul na tsek, marka ng Facebook), ang video, at ang linyang nagsasabi
   kung saan ka pupunta.

 ⚠ NASA IBABAW SILA NG VIDEO AT HINDI SA TABI. Kung hanay sila, tataas ang
   buong kahon at liliit ang video sa loob ng 560px na takda. Nakapatong
   sila, may gradient sa likod para mabasa sa maliwanag na frame.

 ⚠ ANG GRADIENT AY HINDI PALAMUTI. Nagbabago kada segundo ang likod nila —
   video iyon. Walang ibang paraan para matiyak na mababasa ang puting
   teksto kahit anong frame ang tumapat.

 ⚠ `pointer-events:none` SILANG LAHAT. Nasa loob sila ng `<a>` at ang
   BUONG frame ang dapat mapindot — kung may sariling target sila ay may
   mga butas na hindi tumutugon sa gitna ng isang bagay na mukhang iisa. */
.fbpost__top,.fbpost__go{position:absolute;z-index:4;pointer-events:none}
.fbpost__top{
  left:0;right:0;top:0;display:flex;align-items:center;gap:9px;
  padding:12px 12px 26px;
  background:linear-gradient(180deg,rgba(4,12,28,.72),rgba(4,12,28,0));
}
.fbpost__ava{
  flex:0 0 auto;width:34px;height:34px;border-radius:50%;overflow:hidden;
  box-shadow:0 0 0 2px rgba(255,255,255,.9);
}
.fbpost__ava img{width:100%;height:100%;object-fit:cover;display:block}
.fbpost__who{min-width:0;display:flex;flex-direction:column;line-height:1.25}
.fbpost__who b{
  display:flex;align-items:center;gap:4px;
  font-family:var(--display);font-weight:700;font-size:12.5px;color:#fff;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* ⚠ TOTOO ANG ASUL NA TSEK — nakita siya sa mismong post. Hindi siya
     palamuti at hindi siya dapat ilagay sa kung sinong pahina. */
.fbpost__tick{flex:0 0 auto;width:13px;height:13px;fill:#1B9DF0}
.fbpost__who i{
  font-style:normal;font-size:10.5px;letter-spacing:.02em;
  color:rgba(255,255,255,.78);white-space:nowrap;
}
.fbpost__mark{
  margin-left:auto;flex:0 0 auto;width:20px;height:20px;
  fill:#fff;opacity:.92;
}
.fbpost__go{
  left:0;right:0;bottom:0;
  display:flex;align-items:center;justify-content:center;gap:7px;
  padding:26px 12px 12px;
  font-family:var(--display);font-weight:700;font-size:11.5px;
  letter-spacing:.06em;text-transform:uppercase;color:#fff;
  background:linear-gradient(0deg,rgba(4,12,28,.78),rgba(4,12,28,0));
}
.fbpost__go .ico{width:13px;height:13px;stroke-width:2}

/* ⚠⚠ ANG SARILING VIDEO. Kaparehong puwesto ng dating `.tube__thumb` at
   ng `.tube__player` — pinupuno niya ang buong frame.
 ⚠ `object-fit:cover` — 9:16 ang frame at 9:16 ang reel, kaya walang
   puputulin. Nakalagay siya para kung magpalit ng ibang sukat na video ay
   hindi siya mag-uunat.
 ⚠ WALANG `controls`. Ang pagpindot ay pag-alis papuntang Facebook, hindi
   pag-pause — kung may kontrol siya ay dalawa ang ibig sabihin ng pindot. */
.tube__vid{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block;background:#0B1A38;
}
/* ⚠ NAGLALAHO ANG PLAY KAPAG TUMATAKBO NA. Hindi siya kontrol — tanda siya
     na may video rito. Kapag gumagalaw na ang larawan ay sinasabi na niyon
     ang sarili niya, at ang nananatiling malaking bilog ay nakakaharang. */
.tube.is-live .tube__play{opacity:0;transform:translate(-50%,-50%) scale(.82);pointer-events:none}

/* ⚠⚠ `.tube__frame--tall` NA ANG SELECTOR AT HINDI NA `a.tube__frame`.
   (Set 15, 2026.) `<div>` na ulit siya — hindi pa nakapost ang video kaya
   walang link. Klase na ang hinahawakan at hindi ang uri ng elemento, kaya
   hindi na siya masisira kung maging `<a>` siya ulit pagdating ng post.
 ⚠ `display:block` — hindi na kailangan ng `<div>`, pero naiwan siya para
   gumana pa rin ito kapag `<a>` na ulit (inline ang `<a>`, at sa inline ay
   hindi gumagana ang `aspect-ratio`). */
.tube__frame--tall{
  display:block;text-decoration:none;color:inherit;
  aspect-ratio:9/16;width:min(100%,315px);margin-inline:auto;
}

/* ══════════ ANG PINDUTAN NG TUNOG (Set 15, 2026) ══════════
   Tanong ni Kylie: *"why there is no sounds ang video — have icon nalang
   doon sto that pwedeng i mute."*

 ⚠⚠ DALAWANG DAHILAN KUNG BAKIT WALANG TUNOG NOON, at ang una ay akin:
    1. TINANGGAL KO ANG AUDIO TRACK sa unang pag-compress (`-an`).
       Naka-mute naman daw, 2.7 MB ang natipid. IBINALIK NA (96 kbps AAC,
       4.0 -> 4.82 MB).
    2. KAILANGAN NG `muted` PARA PAYAGAN ANG AUTOPLAY. Hinaharang ng
       LAHAT ng browser ang kusang pagsisimula kapag may tunog. Hindi ito
       mababago — kaya nagsisimula pa rin siyang tahimik, at ang pindutan
       ang nagbubukas.

 ⚠ NASA TAAS-KANAN SIYA — doon dati ang marka ng Facebook at bakante na
   ang puwesto. Malayo rin siya sa malaking play sa gitna, kaya walang
   magkasunod na target na magkalapit.
 ⚠ HINDI SIYA NAHAHADLANGAN NG `.fbpost__top` kahit magkapatong sila:
   `pointer-events:none` ang ulo, at mas mataas ang `z-index` nito.
 ⚠ ANG IKON AY KUNG ANO ANG KASALUKUYAN, HINDI KUNG ANO ANG MANGYAYARI.
   Naka-mute = sirang speaker. May tunog = speaker na may alon. Nasa
   `aria-label` ang GAGAWIN ("Turn on sound"), dahil iyon ang kailangan
   ng hindi nakakakita ng ikon. */
.tube__snd{
  position:absolute;z-index:6;top:11px;right:11px;
  width:34px;height:34px;border-radius:50%;border:0;padding:0;
  display:grid;place-items:center;cursor:pointer;
  background:rgba(4,12,28,.5);backdrop-filter:blur(6px);color:#fff;
  transition:background .25s var(--ease),transform .25s var(--back);
}
/* Covers the whole frame so a click anywhere opens the reel; the sound
   button (z-index 6) stays clickable above it. */
.tube__link{position:absolute;inset:0;z-index:5;border-radius:inherit}
.tube__snd svg{width:17px;height:17px}
.tube__snd .tube__snd-on{display:none}
.tube__snd.is-on .tube__snd-on{display:block}
.tube__snd.is-on .tube__snd-off{display:none}
@media (hover:hover){.tube__snd:hover{background:rgba(4,12,28,.8);transform:scale(1.08)}}
.tube__snd:active{transform:scale(1.01)}

/* ⚰ TOMBSTONE — TATLO ANG WALA NANG GUMAGAMIT (Set 15, 2026):
     .fbpost__tick   ang asul na tsek
     .fbpost__mark   ang marka ng Facebook
     .fbpost__go     ang "Watch on Facebook"
   HINDI PA NAKAPOST ANG VIDEO. Ang pagsasabing "watch on Facebook" para sa
   isang bagay na wala pa roon ay hindi disenyo kundi mali. Buhay ang lahat
   ng rule nila sa itaas at walang binura — MARKUP LANG ANG PAGBABALIK.
 ▶ Pagdating ng post, tatlong `<span>` at isang `<svg>` ang idadagdag
   pabalik; nakasulat sa assets/video/README.txt ang eksaktong hakbang. */

/* ⚰ TOMBSTONE — WALA NANG GUMAGAMIT NG `.tube__yt` (Set 15, 2026).
   "Watch on YouTube" siya sa kanang-baba ng frame. Dalawang dahilan ng
   pagkawala: `<a>` na siya sa loob ng `<a>` (bawal sa HTML), at YouTube
   ang sinasabi niya samantalang Facebook na ang video.
   BUHAY ANG LAHAT NG RULE NIYA SA IBABA at walang binura. Kung babalik ang
   isang naka-embed na player balang-araw, markup lang ang kailangan.
 ⚠ `.tube.is-live` ANG NAGPAPAWALA SA KANIYA, at WALA NANG `is-live`:
   ang seksyon 1b ng main.js lang ang naglalagay niyon at hindi na siya
   tumatakbo (walang `#ytLite`). Ganoon din ang `.tube__player`. */
.tube__play{
  position:absolute;left:50%;top:50%;translate:-50% -50%;
  width:clamp(58px,6.4vw,80px);aspect-ratio:1;border-radius:50%;
  display:grid;place-items:center;border:0;cursor:pointer;
  background:rgba(255,255,255,.95);color:var(--red);
  box-shadow:0 16px 34px -12px rgba(0,0,0,.7);
  transition:transform .35s var(--back),background .3s ease,box-shadow .35s ease;
}
/* +8% ang kaliwang gilid: parisukat ang kahon pero pakanan ang tuktok ng
   tatsulok, kaya mukhang nakahilig pakaliwa kung eksaktong nasa gitna. */
.tube__play svg{width:34%;height:34%;margin-left:8%}
@media (hover:hover){ .tube:hover .tube__play{transform:translate(-50%,-50%) scale(1.09);background:#fff;
  box-shadow:0 22px 44px -12px rgba(0,0,0,.75)} }
.tube__play:active{transform:translate(-50%,-50%) scale(1.02)}

.tube__tag{
  position:absolute;left:14px;top:14px;
  padding:6px 12px;border-radius:999px;
  background:rgba(217,4,41,.94);color:#fff;
  font-family:var(--display);font-weight:800;font-size:10.5px;
  letter-spacing:.11em;text-transform:uppercase;
  transition:opacity .4s ease;
}
/* Sa itaas-kaliwa ipinapakita ng YouTube ang pamagat kapag hinover, kaya
   nawawala ang tatak kapag tumatakbo na ang player. */
.tube.is-live .tube__tag{opacity:0;pointer-events:none}

/* Ang sinag sa itaas na gilid — ito ang nagpapamukhang salamin sa frame.
   Isang manipis na puting linya sa mismong gilid, at isang malawak na
   pahilis na liwanag sa itaas na sulok. Walang ibang ginagawa kundi
   sabihing screen ito, hindi kahon na may larawan. */
.tube__glare{
  position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:linear-gradient(163deg,rgba(255,255,255,.16) 0%,rgba(255,255,255,.04) 22%,transparent 46%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28);
  transition:opacity .4s ease;
}
.tube.is-live .tube__glare{opacity:.45}

/* Anino sa ilalim, gaya ng sa dating cover: lumiliit habang umaangat ang
   frame. Iyon ang nagpapatotoo sa paglutang — kung hindi, mukhang
   dumudulas lang pataas-pababa ang larawan. */
.tube__base{
  position:relative;z-index:1;display:block;
  width:76%;height:clamp(20px,2.6vw,32px);margin-top:-6px;
  border-radius:50%;pointer-events:none;
  background:radial-gradient(closest-side, rgba(31,66,128,.3), transparent 76%);
  /* Patay — tingnan ang malaking tala sa `.tube__frame`. Kasama siya
     sa tatlong gumagawa ng "zoom in and out". (coverBase) */
  animation:none;
}
@keyframes coverBase{
  0%,100%{scale:1;   opacity:1}
  50%    {scale:.92; opacity:.72}
}
.tube.is-live .tube__base{animation:none}

.tube__glow{
  position:absolute;left:50%;top:40%;translate:-50% -50%;
  width:112%;aspect-ratio:1.4;border-radius:50%;pointer-events:none;
  background:radial-gradient(closest-side, rgba(59,156,255,.2), rgba(59,156,255,.05) 56%, transparent 74%);
  /* Patay — tingnan ang malaking tala sa `.tube__frame`. Kasama siya
     sa tatlong gumagawa ng "zoom in and out". (coverBreathe) */
  animation:none;
}
@keyframes coverBreathe{
  0%,100%{opacity:.72;scale:1}
  50%    {opacity:1;   scale:1.06}
}

.tube__cap{margin-top:clamp(14px,1.8vw,20px);display:grid;justify-items:center;text-align:center}
/* Kahon at hindi basta linya. Sipi ito, at ang kahon ang nagsasabing
   ibang tinig ito — hindi paliwanag ng video sa itaas. */
/* Puting pill na rin ito ngayon, gaya ng badge sa itaas — pareho silang
   nakapatong sa larawan, kaya pareho silang kailangang may sariling
   laman. 999px ang radius, hindi 12px: pill din ito sa reference. */
.tube__quote{
  display:flex;align-items:center;gap:10px;
  padding:10px 18px;border-radius:999px;
  background:rgba(255,255,255,.93);border:1px solid rgba(31,66,128,.1);
  box-shadow:0 10px 26px -16px rgba(31,66,128,.5);
  font-family:var(--display);font-weight:600;font-size:11.5px;line-height:1.45;
  letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);
  text-align:left;
  transition:background .35s ease,border-color .35s ease;
}
@media (hover:hover){ .tube:hover .tube__quote{background:#fff;border-color:rgba(217,4,41,.26)} }
.tube__quote svg{width:15px;height:15px;flex:none;color:var(--kraft)}
.tube__quote b{color:var(--navy);font-weight:800}
/* Ang pangalan lang ang pula, hindi ang buong parirala — ganoon sa
   reference. Nasa loob ito ng `b` para hindi mabali ang parirala. */
.tube__quote i{font-style:normal;color:var(--red)}

/* ---- "Watch on YouTube", SA LOOB NA NG FRAME ----
   Mahina ito nang sinadya: `rgba(0,0,0,.42)` na may blur, hindi puting
   pill. Nasa IBABAW ito ng larawan, kaya kung matingkad ito ay ito na
   ang mababasa mo at hindi na ang video. Kapag hinawakan ay pumupula at
   lumilinaw — doon lang ito nagpapakilalang pindutan.

   Naglalaho ito pagsapit ng `is-live`: nasa parehong sulok ang oras at
   ang fullscreen ng YouTube. Bago magsimula ay wala pang kontrol doon,
   kaya walang hinaharangan; pagkasimula ay wala na ito.

   `pointer-events:none` din sa `is-live` — kung `opacity:0` lang, may
   hindi nakikitang pindutan pa ring nakaharang sa fullscreen. */
.tube__yt{
  position:absolute;right:12px;bottom:12px;z-index:3;
  display:inline-flex;align-items:center;gap:7px;
  padding:7px 13px;border-radius:999px;text-decoration:none;
  background:rgba(6,16,36,.42);
  backdrop-filter:blur(9px) saturate(1.3);-webkit-backdrop-filter:blur(9px) saturate(1.3);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);
  font-family:var(--display);font-weight:700;font-size:11px;
  letter-spacing:.04em;color:rgba(255,255,255,.82);
  opacity:.72;
  transition:background .3s ease,color .3s ease,opacity .3s ease,
             transform .3s var(--back),box-shadow .3s ease;
}
@media (hover:hover){ .tube:hover .tube__yt{opacity:1} }
.tube__yt:focus-visible{
  background:rgba(217,4,41,.92);color:#fff;opacity:1;
  transform:translateY(-2px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.4);
}
@media (hover:hover){ .tube__yt:hover{
  background:rgba(217,4,41,.92);color:#fff;opacity:1;
  transform:translateY(-2px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.4);
} }
.tube__yt svg{width:11px;height:11px;flex:none;color:#fff}
.tube.is-live .tube__yt{opacity:0;pointer-events:none}


/* ================= 7b. ANG PANAYAM =================
   Hindi ito 8 para hindi masira ang mga bilang na tinutukoy ng ibang
   komento sa file na ito at sa main.js. Nasa pagitan ito ng #about (7)
   at ng #products (8), gaya rin sa pahina. */
.sec--story{position:relative}
/* ⚠ MAS MAIKLI ANG PADDING NG SEKSYONG ITO KAYSA SA IBA, AT SINASADYA.
   Sinukat sa 1440px bago ito: 1259px ang #interview — ito ang PINAKAMATAAS
   na seksyon ng buong pahina bukod sa hero (products 1239, why 1088,
   about 1072). Ang `clamp(64px,9vh,118px)` ng `.sec` ay 236px na walang
   laman dito, at sa pinakamahabang seksyon ang pinakamabigat ang dating
   niyon. Hindi ito bagong ritmo — isang seksyon lang ang hinihigpitan,
   iyong isa na sumobra. */
#interview{padding-top:clamp(48px,5.6vh,68px);padding-bottom:clamp(48px,5.6vh,68px)}

/* ---- ANG LIKOD ----
   Tatlong patong: ang bodega (litrato, napakalabo), tuldok-tuldok sa
   itaas-kanan, at dalawang malambot na kulay. Hindi ito larawang
   tinitingnan — tekstura lang, para hindi patay-na-puti ang seksyon.

   .11 lang ang opacity ng litrato: may 12.5px na teksto sa ibabaw nito,
   at anumang mas matingkad ay nakikipag-agawan sa pagbasa. */
.storybg{
  position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(46% 38% at 88% 6%,  rgba(59,156,255,.10), transparent 70%),
    radial-gradient(40% 34% at 6% 92%,  rgba(217,4,41,.055), transparent 72%);
}
.storybg > *{position:absolute;pointer-events:none}
.storybg::before,.storybg::after{content:"";position:absolute;pointer-events:none}
/* Ang bodega. `--par` ang galing sa seksyon 4f ng main.js: -1 kapag nasa
   ibaba pa ang seksyon, +1 kapag nakalampas na. 6% lang ang ginagalaw —
   sapat para maramdamang mas malayo ito kaysa sa teksto, kulang para
   mapansing gumagalaw. */
.storybg::before{
  inset:-4% 0;
  background:url('../img/warehouse.jpg') center calc(22% + var(--par,0) * 6%)/cover no-repeat;
  opacity:.15;
  -webkit-mask-image:linear-gradient(180deg,#000 0,rgba(0,0,0,.62) 46%,rgba(0,0,0,.18) 78%,transparent 96%);
          mask-image:linear-gradient(180deg,#000 0,rgba(0,0,0,.62) 46%,rgba(0,0,0,.18) 78%,transparent 96%);
}

/* ---- GUHIT-GUHIT NA BLUEPRINT ----
   Hindi dekorasyon lang: bodega ang paksa ng seksyon, at ang guhit-guhit
   ang pinakamaikling paraan para sabihing sinukat at tiningnan. Naglalaho
   ito papalayo sa itaas-kaliwa, kaya malinis ang gitna kung saan ang
   nakasentrong tanong. */
.ivgrid{
  inset:0;
  /* .055 at hindi .075. Sinukat sa tunay na pixel: sa .075 ay `#e1e2e9`
     ang pinakamadilim na tuldok sa ilalim ng `.phead__sub`, at 4.67:1
     lang ang `--ink-2` doon — pasado sa 4.5 pero 0.17 lang ang natitira.
     Nasa itaas-kaliwa ang pinakamatapang na bahagi ng guhit-guhit at
     doon din nakaupo ang teksto, kaya doon nagtatagpo ang dalawa. */
  background:
    linear-gradient(rgba(31,66,128,.055) 1px,transparent 1px) 0 0/100% 46px,
    linear-gradient(90deg,rgba(31,66,128,.055) 1px,transparent 1px) 0 0/46px 100%;
  -webkit-mask-image:radial-gradient(128% 96% at 6% 16%,#000 0,rgba(0,0,0,.42) 40%,transparent 74%);
          mask-image:radial-gradient(128% 96% at 6% 16%,#000 0,rgba(0,0,0,.42) 40%,transparent 74%);
}

/* ---- TATLONG PIRASO NG TAPE ----
   Ang produkto mismo, nakadikit nang pahilis sa likod. Wala pa itong
   katulad sa pahina: karton at rolyo ang nasa hero, sinag at tuldok ang
   nasa #story — walang piraso ng tape kahit saan.

   Tatlong bagay ang nagpapatotoo sa hitsura:

   · ANG NGIPIN SA DALAWANG DULO (`clip-path`) — hindi pinutol ng gunting
     ang tape kundi pinunit ng kamay. Isang tuwid na dulo lang ang
     sapat para maging parihaba lang ito at hindi tape.
   · ANG SINAG SA PAHABA (`linear-gradient` sa 180deg) — makintab ang
     plastik: maliwanag ang dalawang gilid, mapurol ang gitna.
   · ANG PAGKA-ANINAG — nakikita sa ilalim ang guhit-guhit at ang bodega,
     kaya nakadikit ito sa likod at hindi nakalutang sa harap.

   Napakabagal ng galaw (30–38s) at 16px lang ang layo: hindi ito
   dapat mapansing gumagalaw habang nagbabasa. */
.ivtape{
  height:clamp(44px,4.4vw,72px);
  background:
    linear-gradient(180deg,
      rgba(255,255,255,.6)  0,
      rgba(255,255,255,.08) 15%,
      rgba(255,255,255,0)   50%,
      rgba(255,255,255,.12) 85%,
      rgba(255,255,255,.46) 100%),
    var(--fill);
  opacity:var(--o,.5);
  clip-path:polygon(0% 0%,1.4% 22%,.3% 48%,1.6% 74%,.5% 100%,
                    99.5% 100%,98.4% 76%,99.7% 50%,98.6% 24%,100% 0%);
  animation:ivDrift var(--dur,34s) ease-in-out infinite alternate;
  animation-delay:var(--dl,0s);
}
@keyframes ivDrift{to{translate:0 -16px}}
.ivtape--a{
  --fill:linear-gradient(92deg,rgba(242,160,93,.4),rgba(242,160,93,.15));
  --o:.6;--dur:37s;
  left:-9%;top:19%;width:54%;rotate:-13deg;
}
.ivtape--b{
  --fill:linear-gradient(92deg,rgba(31,66,128,.05),rgba(31,66,128,.15));
  --o:.55;--dur:31s;--dl:-9s;
  right:-11%;top:44%;width:48%;rotate:-10deg;
}
.ivtape--c{
  --fill:linear-gradient(92deg,rgba(217,4,41,.1),rgba(217,4,41,.03));
  --o:.5;--dur:34s;--dl:-17s;
  left:6%;bottom:8%;width:34%;rotate:8deg;
}

/* ---- ANG MALAKING PANIPI ----
   Panayam ang seksyon, at ito ang hugis ng panayam. Nasa kaliwang gilid
   kung saan walang teksto, at kasama ito sa parallax kaya bahagyang
   lumalayo ito sa laman habang nag-scroll. */
.ivquote{
  left:.5%;top:27%;
  width:clamp(120px,14vw,270px);height:auto;aspect-ratio:1;
  color:rgba(31,66,128,.06);
  translate:0 calc(var(--par,0) * -22px);
}
.storybg::after{
  top:clamp(24px,4vw,58px);right:0;width:min(32%,360px);height:clamp(110px,13vw,190px);
  background:radial-gradient(rgba(31,66,128,.2) 1.4px,transparent 1.5px) 0 0/17px 17px;
  -webkit-mask-image:linear-gradient(250deg,#000 6%,transparent 74%);
          mask-image:linear-gradient(250deg,#000 6%,transparent 74%);
}

/* ---- ANG LASO SA SULOK ----
   Dalawang guhit na IGINUGUHIT, hindi pinapakita nang buo. Ang eksaktong
   haba ay mula sa `getTotalLength()` (seksyon 4f ng main.js) at nakalagay
   sa `--haba`: kung hula ang haba ay may nakikitang lundag ang dulo ng
   guhit sa gitna ng pagguhit. Ganoon din ang salungguhit sa headline. */
.ribbon{
  position:absolute;right:0;bottom:0;z-index:1;pointer-events:none;
  width:min(48%,480px);height:clamp(118px,17vw,250px);
}
.ribbon svg{width:100%;height:100%;display:block;overflow:visible}
.ribbon path{
  fill:none;stroke-linecap:round;
  stroke-dasharray:var(--haba,760px);stroke-dashoffset:var(--haba,760px);
}
.ribbon__r{stroke:var(--red);stroke-width:13;opacity:.9}
.ribbon__n{stroke:var(--navy);stroke-width:17;opacity:.92}
.ribbon.is-in .ribbon__n{transition:stroke-dashoffset 1.45s var(--ease) .1s;stroke-dashoffset:0}
.ribbon.is-in .ribbon__r{transition:stroke-dashoffset 1.45s var(--ease) .3s;stroke-dashoffset:0}

/* ---- ANG ITAAS: ULO SA KALIWA, SIPI SA KANAN ----
   Isang nakasentrong hanay ito noon: pamagat, tapos sipi sa ibaba. Sa
   desktop ay hindi sabay makikita ang tanong at ang sagot — kailangan
   mo pang mag-scroll mula sa isa papunta sa isa.

   .86fr : 1.14fr — hindi kalahatian. Mas mahaba ang sipi kaysa sa ulo,
   at kung pantay ang hati ay lumalabas na anim na hilera ang sipi
   samantalang tatlo lang ang ulo; nagiging tabingi ang dalawang haligi. */
.itop{
  position:relative;z-index:2;
  display:grid;grid-template-columns:minmax(0,.86fr) minmax(0,1.14fr);
  gap:clamp(24px,3.4vw,52px);align-items:center;
}
.itop__head{margin-bottom:0}
.itop__head .h2{font-size:clamp(27px,3.5vw,46px)}
.itop__head .phead__sub{max-width:34ch}

/* Hindi na tuldok ang eyebrow kundi guhit sa magkabilang gilid, gaya ng
   nasa reference: "— THE INTERVIEW —". Sa nakasentrong ayos (cellphone)
   ay kailangan ng pareho, kung hindi ay hindi ito nakasentro. */
.eyebrow--rule::after{
  content:"";width:26px;height:4px;background:currentColor;
  border-radius:2px;opacity:.55;
}

/* ---- ANG IGINUGUHIT NA SALUNGGUHIT ----
   `.hl` ang pinapalit nito para sa iisang salita. Dalawang pagkakaiba:
   asul ang teksto (hindi navy), at IGINUGUHIT ang pula sa ilalim sa
   halip na pahiran ng bloke.

   Dalawang linya, magkaibang haba at magkaibang kapal — iyon ang
   nagpapaalis ng dating-ruler. Magkasunod sila nang .22s: ang una ay
   ang hagod, ang ikalawa ay ang pabalik. Ganoon gumuhit ang kamay.

   `preserveAspectRatio="none"`: umuunat ang viewBox sa lapad ng salita
   anuman ang laki ng font, kaya hindi kailanman lumalampas o kumukulang
   ang guhit. Kaunting pagka-obal ang kapalit sa dulo — hindi ito
   nakikita sa 5px na kapal, at ito ang mismong hitsura ng marker. */
.hl2{position:relative;display:inline-block;color:var(--electric)}
.hl2__u{
  position:absolute;left:-2.5%;bottom:-.2em;width:105%;height:.34em;
  overflow:visible;pointer-events:none;
}
.hl2__u path{
  fill:none;stroke:var(--red);stroke-linecap:round;
  stroke-dasharray:var(--haba,320px);stroke-dashoffset:var(--haba,320px);
}
.hl2__a{stroke-width:5.5}
.hl2__b{stroke-width:2.6;opacity:.5}
[data-reveal].is-in .hl2__a{transition:stroke-dashoffset .78s var(--ease) .3s;stroke-dashoffset:0}
[data-reveal].is-in .hl2__b{transition:stroke-dashoffset .66s var(--ease) .52s;stroke-dashoffset:0}

/* ---- ang sipi ----
   Navy ang kahon: iisa lang ang tinig dito at kailangan itong mahiwalay
   sa artikulo. Katabi ito ng video kaya sabay silang nakikita. */
/* ---- ANG SIPI ----
   BUONG LITRATO NA ANG NASA GILID (Ago 8, 2026), hindi na maliit na
   bilog sa ilalim ng sipi.

   ANG DAHILAN, SA NUMERO: 1177×2048 ang litrato, at 11.8% lang ng taas
   nito ang mukha (hanay 463 hanggang 705, sinukat). Sa dating 42px na
   bilog, kapag hindi kinrop, ay 8.6px lang ang taas ng mukha — walang
   makikita. Kailangan ng mga 200px na taas para maging 24px ang mukha,
   at doon lang kasya ang buong kuha nang may makikita pa.

   Dalawang hanay ngayon: litrato sa kaliwa, sipi sa kanan. Ito rin
   naman ang karaniwang ayos ng pull quote na may litrato. */
/* Dikit na sa gilid ng kahon ang litrato, hindi na maliit na bilog na may
   padding sa paligid — kaya `padding:0` dito at nasa `.pull__body` na ang
   luwang. `overflow:hidden` para sundin ng litrato ang bilog na sulok. */
/* ---- ANG PAGKAKASUNOD-SUNOD NG PAGSULPOT ----
   Hindi sabay-sabay lumalabas ang laman ng card. May pinagdaanan ang
   mata: nakikita mo muna ang tao, tapos ang panipi, tapos ang sinabi,
   tapos kung sino ang nagsabi. Ganoon din ang basa.

      0.00s  pumapasok ang card               (data-reveal)
      0.18s  binubunyag ng kurtina ang litrato (0.9s)
      0.34s  tumatalbog ang panipi
      0.46s  umaahon ang sipi
      0.60s  lumalaki ang guhit mula kaliwa
      0.70s  sumusulpot ang tuldok sa sulok
      0.74s  "Boss RDR"
      0.80s  ang pangalan
      0.88s  ang kumpanya

   `backwards` ang lahat, HINDI `forwards`: hawak nito ang unang keyframe
   habang naghihintay, at ang normal na estado ang huli. Kung hindi
   dumating ang `.is-in` — walang JS, may pagkakamali — wala lang
   mangyayari at nakikita pa rin ang lahat. Sa `forwards` ay
   permanenteng nakatago ang laman kapag pumalya ang JS. */
.pull{
  position:relative;width:100%;
  display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1fr);
  background:var(--navy);color:#fff;border-radius:20px;overflow:hidden;
  box-shadow:0 34px 62px -36px rgba(15,38,86,.75),
             0 3px 12px -8px rgba(15,38,86,.3);
  /* `translate` at hindi `transform`: sarili nitong ari-arian iyon, kaya
     hindi nito binubura ang `transform` ng `[data-reveal]`. */
  transition:translate .5s var(--ease),box-shadow .5s var(--ease);
}
/* ⚠⚠ MAY SAHIG NA ANG TAAS (Set 15, 2026). Hiling ni Kylie: "ayusin
     ito, naiba nag format."

     SIPI NA LANG ANG LAMAN NG CARD mula kaninang umaga — inalis ang
     kicker, ang pangalan ng produkto, ang tatlong numero at ang
     pinagmulan. Ang laman ang nagtatakda ng taas dito (tingnan ang
     malaking tala sa `.pull__pic`), kaya nang mawala silang lima ay
     BUMAGSAK ANG CARD MULA 457px PAPUNTANG 183px. Sinukat: 648x183,
     3.54:1 — banner na iyon at hindi na card, at 274px ang naging
     bakante sa itaas at ibaba niya dahil `align-items:center` ang
     `.itop`. Iyon ang "naiba ang format".

   ⚠ SAHIG LANG ITO AT HINDI TAKDANG TAAS. Kapag humaba ang sipi ay
     lalaki pa rin siya nang kusa — `min-height` siya, hindi `height`.

   ⚠ NASA `min-width:901px` SIYA AT MAY DAHILAN. Sa 900px pababa ay
     NAGSASALANSAN ang card (litrato sa itaas na may `aspect-ratio:
     16/9`, sipi sa ibaba) — may sariling taas na siya roon at ang
     sahig na ito ay magdaragdag lang ng bakanteng navy sa ilalim.

   ⚠ HINDI NITO PINAPALAKI ANG SEKSYON. Ang mas mataas sa dalawang
     haligi ang naghahari sa `.itop`, at 457px ang kaliwa — mas
     mataas pa rin siya kaysa sa 358px na sahig na ito. Kung lalampas
     ang card sa kaliwa ay ANG SEKSYON NA ANG LUMALAKI; doon
     magsisimula ang bayad. */
@media (min-width:901px){
  .pull{min-height:clamp(250px,28vw,370px)}
}
@media (hover:hover){ .pull:hover{
  translate:0 -5px;
  box-shadow:0 44px 74px -38px rgba(15,38,86,.8),
             0 4px 14px -8px rgba(15,38,86,.34);
} }
@keyframes ivRise{from{opacity:0;transform:translateY(12px)}}
@keyframes ivFade{from{opacity:0}}

/* ---- ANG LITRATO ----
   PAHILIS ANG KANANG GILID. Hindi ito palamuti: 1177×2048 ang litrato at
   nakatayo ang tao sa gitna, kaya may walang lamang kulay-abo sa kanan.
   Ang pahilis ang pumuputol doon — dumadausdos ang navy papasok sa
   walang lamang bahagi, at sa mata ay iisang bagay ang litrato at ang
   sipi sa halip na dalawang magkatabing parihaba.

   `object-position:center 12%`: 11.8% lang ng taas ng litrato ang mukha
   (hanay 463–705 sa 2048, sinukat). Sa nakasentrong hiwa ay nawawala ang
   ulo dahil mas mataas ito kaysa sa gitna ng buong kuha. Sa 12% ay
   nananatili ang mukha sa itaas na ikatlo ng kahon at kasama pa rin ang
   silya sa ibaba. Kung ibang litrato ang ipapasok, SUKATIN ULIT ITO. */
.pull__pic{
  position:relative;display:block;align-self:stretch;overflow:hidden;
  background:#DCE0E5;
  clip-path:polygon(0 0,100% 0,calc(100% - 36px) 100%,0 100%);
}
/* `position:absolute` — at ito ang mahalagang bahagi. Kung nasa daloy ang
   <img>, ANG LITRATO ANG NAGTATAKDA NG TAAS NG BUONG CARD: 287px ang
   lapad ng haligi, at sa 1177×2048 ay 499px ang magiging taas niyon.
   Sinukat: 499px ang naging card kahit 342px lang ang kailangan ng sipi,
   at bumaba sa 59px ang mukha dahil kalat na kalat ang buong kuha.
   Kapag alis sa daloy, ang SIPI ang nagtatakda ng taas at ang litrato ang
   sumusunod — iyon ang tamang ayos. */
/* 112% ang taas at -6% ang gilid — may sobra sa itaas at ibaba na
   maigagalaw. Ang `translate` ang gumagalaw at hindi ang
   `object-position`: sa compositor lang iyon nangyayari, samantalang
   ang pagbabago ng `object-position` kada frame ay pagpinta ulit ng
   litrato — mabigat iyon sa telepono para sa 12px na galaw. */
.pull__pic img{
  position:absolute;inset:-6% 0;width:100%;height:112%;display:block;
  object-fit:cover;object-position:center 12%;
  translate:0 calc(var(--par,0) * 3%);
  transition:scale .6s var(--ease);
}
@media (hover:hover){ .pull:hover .pull__pic img{scale:1.045} }

/* ---- ANG KURTINA ----
   Navy na bloke na nakatakip sa litrato at dumudulas paalis pakanan.
   Pahilis ang unahan (`skewX`) kaya sumusunod ito sa mismong pahilis
   na gilid ng litrato — iisang hugis ang gumagalaw at ang nakatayo.

   Ang PAHINGANG estado ay nasa LABAS na (`translateX(136%)`), kaya kung
   hindi tumakbo ang animation ay hindi ito nakatakip kailanman. */
/* -20% ang sobra sa kaliwa: 51px ang inuurong ng `skewX(-8deg)` sa
   366px na taas, at sa manipis na sobra ay may sumisilip na sulok. */
.pull__pic::after{
  content:"";position:absolute;inset:-3% -32% -3% -20%;
  background:var(--navy);pointer-events:none;
  transform:translateX(136%) skewX(-8deg);
}
.pull.is-in .pull__pic::after{animation:picWipe .9s var(--ease) .18s backwards}
@keyframes picWipe{
  from{transform:translateX(-6%) skewX(-8deg)}
  to  {transform:translateX(136%) skewX(-8deg)}
}

/* ⚠ ANG PADDING DITO ANG NAGTATAKDA NG TAAS NG BUONG CARD, at sa card
     naman nakasalalay ang taas ng buong itaas na bahagi ng seksyon
     (`align-items:center` ang `.itop`, kaya ang mas mataas sa dalawang
     haligi ang nananaig). Isang bilang dito, taas ng seksyon ang
     kinakain — kaya `34px` ito noon at `24px` na ngayon. */
/* ⚠ PINALUWAG (Set 15, 2026). Ang `24px` ay para sa siksikang haligi ng
     limang bagay; sa iisang sipi ay nagmumukhang nakaipit. */
.pull__body{
  position:relative;min-width:0;
  padding:clamp(24px,2.9vw,38px) clamp(22px,2.7vw,36px);
  display:flex;flex-direction:column;justify-content:center;
}
/* Isang hagod ng liwanag sa hover. Nasa `.pull` ang `overflow:hidden`,
   kaya hindi ito lumalampas sa bilog na sulok. */
.pull__body::after{
  content:"";position:absolute;top:0;bottom:0;left:-40%;width:34%;
  pointer-events:none;opacity:0;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.1),transparent);
}
@media (hover:hover){ .pull:hover .pull__body::after{opacity:1;animation:sheen 1.1s var(--ease)} }
/* Tuldok sa sulok — tekstura lang. Naglalaho papuntang ibaba-kaliwa kaya
   hindi ito umaabot sa teksto. */
.pull.is-in .pull__dots{animation:ivFade .9s ease .7s backwards}
.pull__dots{
  position:absolute;top:12px;right:12px;width:104px;height:62px;pointer-events:none;
  background:radial-gradient(rgba(255,255,255,.28) 1.3px,transparent 1.4px) 0 0/11px 11px;
  -webkit-mask-image:linear-gradient(232deg,#000 8%,transparent 76%);
          mask-image:linear-gradient(232deg,#000 8%,transparent 76%);
}
/* PULA ITO, HINDI ASUL. Nakapatong ito sa navy: 3.02:1 ang pula roon —
   kulang para sa teksto, pero ikono ito at hindi binabasa. Ang pula ang
   nagdudugtong sa sipi at sa eyebrow sa kabilang haligi. */
.pull__mark{
  position:relative;width:clamp(30px,3.2vw,42px);height:clamp(30px,3.2vw,42px);
  color:var(--red);opacity:.95;
}
.pull.is-in .pull__mark{animation:markIn .7s var(--back) .34s backwards}
@keyframes markIn{0%{opacity:0;transform:translateY(10px) scale(.6) rotate(-14deg)}
                 62%{opacity:1;transform:translateY(0) scale(1.12) rotate(4deg)}
                100%{opacity:1;transform:none}}
/* ⚠ PINALAKI (Set 15, 2026). 16.9px siya noon — tamang-tama iyon noong
     may kasama pa siyang kicker, pangalan ng produkto at tatlong
     numero: isa lang siya sa lima at hindi dapat manaig. WALA NA ANG
     APAT. Siya na ang buong card ngayon, kaya siya na rin dapat ang
     unang mabasa. */
.pull blockquote{
  margin:clamp(14px,1.6vw,20px) 0 0;font-family:var(--display);font-weight:600;
  font-size:clamp(16px,1.75vw,24px);line-height:1.5;letter-spacing:-.01em;
}
.pull.is-in blockquote{animation:ivRise .7s var(--ease) .46s backwards}

/* HINDI `border-top` ang guhit kundi `::before` — walang paraan para
   palakihin ang border mula kaliwa; ang `scaleX` lang ang kayang gawin
   iyon, at kailangan niyon ng sariling kahon. */
.pull__who{
  position:relative;
  margin:clamp(16px,2vw,22px) 0 0;padding-top:clamp(14px,1.7vw,18px);
}
.pull__who::before{
  content:"";position:absolute;left:0;right:0;top:0;height:1px;
  background:rgba(255,255,255,.2);
  transform:scaleX(0);transform-origin:left center;
  transition:transform .72s var(--ease) .6s;
}
.pull.is-in .pull__who::before{transform:scaleX(1)}
.pull__who b{display:block;font-family:var(--display);font-weight:800;font-size:clamp(13px,1.15vw,15px)}
.pull__who span{display:block;margin-top:2px;font-size:clamp(11px,.95vw,12.5px);color:rgba(255,255,255,.62)}

/* ⚰⚰ TOMBSTONE — WALA NANG GUMAGAMIT NITO SA MARKUP (Set 15, 2026).

   Buhay ang lahat ng rule sa ibaba at WALANG BINURA, pero WALA NANG
   TUMATAWAG SA KANILA: inalis ang tatlong numero sa asul na card nang
   araw ding iyon. Utos ni Kylie: *"remove this make it a qoute style
   mismo dont include numbers something."* SIPI NA LANG ang card.

 ▶ ANG PAGBABALIK AY MARKUP LANG. Idikit ito pagkatapos ng
   `</blockquote>` sa loob ng `.pull__body` at gagana sila agad:

     <p class="pull__kicker">Business example from the video</p>
     <p class="pull__prod">Packaging Tape</p>
     <ul class="pull__figs">
       <li><b>₱26</b><span>puhunan</span></li>
       <li><b>₱60</b><span>selling price</span></li>
       <li class="is-key"><b>₱34</b><span>difference per roll</span></li>
     </ul>
     <figure class="pull__who"><figcaption>
       <i class="pull__src">Sample figures presented in the Negosyo 1 Minuto feature.</i>
     </figcaption></figure>

 ⚠ HUWAG IBALIK ANG NUMERO NANG WALA ANG `.pull__src`. Siya ang
   nagsasabing HALIMBAWA sila at hindi alok o presyo. Magkasama sila
   pumasok at magkasama silang umalis; ganoon din dapat sa pagbalik.
 ⚠ ANG PAGBABALIK NG NUMERO AY PAGBABALIK NG PRESYO SA PAHINA. Zero ang
   bilang ngayon — tumutugma iyon sa FAQ at sa `data-price="0"` ng 24
   na produkto. Alamin muna kung sinasadya bago idikit.

   ══════ ang orihinal na tala nang isulat sila ══════
   ══════════ ANG HALIMBAWA MULA SA VIDEO (Set 15, 2026) ══════════
   ⚠⚠ PUMALIT SILA SA SIPI NI BOSS RDR. Imbento ang sipi at inalis siya
      sa utos ni Kylie ("don't use a fake Boss RDR quote"). Ang
      `blockquote` at ang tatlong linya ng `.pull__who` ang dating
      nandito; BUHAY PA ANG CSS NILA sa itaas — hindi ko sila binura, kaya
      markup lang ang kailangan kung babalik ang sipi balang-araw.

   ⚠ NAKASAKAY SILA SA DATING ANIMATION (`ivRise`) at sa dating
     pagkakasunod ng oras: .42s ang kicker, .5s ang pangalan ng produkto,
     .58/.64/.7s ang tatlong numero. Ganoon din ang lumang sipi (.46s) at
     ang `.pull__who` (.74s+) — kaya walang nabagong ritmo sa pagpasok.

   ⚠ `tabular-nums` AT `min-width` ANG NAGPAPANTAY SA TATLONG HANAY.
     Hindi pantay ang lapad ng "26", "60" at "34" sa proporsyonal na numero,
     at nakikita iyon bilang gumegewang na hanay ng label sa tabi nila.
     3.6em ang `min-width`: kasya roon ang "₱999" nang hindi gumagalaw
     ang label kung magbago man ang halaga.

   ⚠ ANG IKATLO LANG ANG MAY KULAY (`.is-key`). Siya ang sagot — ang
     ipinagkaiba — at ang dalawa sa itaas ay ang pinanggalingan lang niya.
     Kung pare-pareho silang matingkad ay walang mababasa muna.

   ⚠⚠ `.pull__src` AY HINDI PALAMUTI. Siya ang nagsasabing HALIMBAWA ang
      tatlong numero at hindi alok o presyo. Siya rin ang nag-iisang linya
      sa buong pahina na nagsasabi kung saan galing ang isang numero.
      HUWAG SIYANG ALISIN kasama ng `.pull__who` kung lilinisin ito. */
.pull__kicker{
  margin:clamp(10px,1.2vw,14px) 0 0;
  font-family:var(--display);font-weight:800;
  font-size:clamp(10px,.82vw,11.5px);letter-spacing:.14em;text-transform:uppercase;
  color:var(--kraft-light);
}
/* ⚠ MAY SIPI ULIT SA ITAAS (Set 15, 2026) kaya kailangan ng hangin dito.
     Kasunod agad ng `blockquote` ang kicker; sa 10-14px lang ay
     magmumukha siyang ikalawang linya ng sipi at hindi bagong bahagi. */
.pull blockquote + .pull__kicker{margin-top:clamp(18px,2.2vw,28px)}
.pull.is-in .pull__kicker{animation:ivRise .6s var(--ease) .56s backwards}
.pull__prod{
  margin:clamp(6px,.7vw,9px) 0 0;
  font-family:var(--display);font-weight:800;
  font-size:clamp(17px,1.6vw,22px);letter-spacing:-.015em;line-height:1.2;
}
.pull.is-in .pull__prod{animation:ivRise .6s var(--ease) .62s backwards}
.pull__figs{
  list-style:none;margin:clamp(12px,1.5vw,18px) 0 0;padding:0;
  display:grid;gap:clamp(6px,.7vw,9px);
}
.pull__figs li{display:flex;align-items:baseline;gap:10px;font-size:clamp(12.5px,1.05vw,14.5px)}
.pull__figs b{
  font-family:var(--display);font-weight:800;
  font-size:clamp(15px,1.3vw,18px);
  min-width:3.6em;font-variant-numeric:tabular-nums;
}
.pull__figs span{color:rgba(255,255,255,.72)}
.pull__figs .is-key b{color:var(--kraft-light)}
.pull__figs .is-key span{color:#fff}
.pull.is-in .pull__figs li:nth-child(1){animation:ivRise .55s var(--ease) .68s backwards}
.pull.is-in .pull__figs li:nth-child(2){animation:ivRise .55s var(--ease) .74s backwards}
.pull.is-in .pull__figs li:nth-child(3){animation:ivRise .55s var(--ease) .8s backwards}
.pull__src{
  display:block;font-style:italic;
  font-size:clamp(10.5px,.9vw,12px);line-height:1.5;
  color:rgba(255,255,255,.62);
}
.pull.is-in .pull__src{animation:ivRise .6s var(--ease) .88s backwards}

.pull.is-in .pull__who b{animation:ivRise .6s var(--ease) .74s backwards}
.pull.is-in .pull__who span:nth-of-type(1){animation:ivRise .6s var(--ease) .8s backwards}
.pull.is-in .pull__who span:nth-of-type(2){animation:ivRise .6s var(--ease) .88s backwards}

/* ---- ANG TANONG ----
   ⚠ NASA LOOB NA ITO NG `.itop__head` AT HINDI NA SARILING BANDA (Ago 12,
     2026). Nakasentro ito noon sa buong lapad sa pagitan ng ulo at ng
     tatlong card. Sinukat: 114px ang teksto at 58px ang agwat — 172px
     para sa isang pangungusap, habang may 173px na blangko sa ilalim ng
     ulo dahil mas mataas ang sipi sa kanan. Sa loob ng haligi ay
     WALANG DINARAGDAG NA TAAS ITO: pumapasok ito sa blangkong nandiyan
     na, at ganoon din ang basa — ang ulo ang nagtatanong, ang tatlong
     card ang sumasagot.

   ⚠ PAKALIWA ANG GUHIT SA ILALIM DITO AT HINDI MULA SA GITNA. Nasa
     haligi na ito at nakahanay sa kaliwa ang teksto; ang guhit na
     lumalaki mula sa gitna ay hindi na nakikitang nauugnay sa unang
     titik. Sa ≤900px, kung saan nakasentro ang ulo, bumabalik ito sa
     gitna — tingnan ang seksyon 19. */
.iq{
  position:relative;z-index:2;
  margin:clamp(18px,2.1vw,27px) 0 0;max-width:40ch;text-align:left;
  font-size:clamp(13.5px,1.05vw,15.5px);line-height:1.58;color:var(--ink-2);
}
.iq b{
  display:block;margin-top:5px;font-family:var(--display);font-weight:800;
  font-size:clamp(16px,1.5vw,21px);line-height:1.24;letter-spacing:-.022em;
  color:var(--electric);
}
.iq::after{
  content:"";display:block;width:52px;height:3px;margin:clamp(10px,1.1vw,14px) 0 0;
  border-radius:2px;background:var(--red);
  transform:scaleX(0);transform-origin:left;transition:transform .62s var(--back) .32s;
}
.iq.is-in::after{transform:scaleX(1)}

/* ---- ANG TATLONG NATUKLASAN ----
   Tatlong mahabang talata ito noon. Buo pa rin ang CSS ng mahabang
   bersyon sa ilalim (.art) — nakatabi ang markup sa
   _parked/interview-longform.html.txt at isang paste lang ang pagbabalik. */
.finds{
  position:relative;z-index:2;list-style:none;
  margin:clamp(22px,2.4vw,30px) 0 0;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(12px,1.7vw,24px);
}

/* ---- ⚠ SARILING KULAY ANG BAWAT CARD (`--ac`) ----
   Isang navy na ikono ang tatlo noon at walang ipinagkaiba ang isa sa
   isa. May sariling kulay-tanda na ngayon ang bawat isa, at ang
   pagkakasunod-sunod ay may dahilan — sinusunod nito ang kuwento:

     1  navy      ang PROBLEMA        — mahinahon, panimula
     2  electric  ang NATUKLASAN      — ang bahaging tumitingin
     3  pula      ang REKOMENDASYON   — ang hatol

   ⚠ SA PULA NAGTATAPOS AT SINASADYA IYON. Pula rin ang "Watch the
     interview" na pindutan sa `.ibar` na nasa ilalim mismo nito — kaya
     ang mata ay naihahatid ng ikatlong card diretso sa pindutan.

   ⚠ TATLONG BILANG ANG `--ac`, HINDI KULAY. Nakasulat itong `31,66,128`
     at hindi `#1F4280` para magamit ang IISANG variable sa dalawang
     paraan: `rgb(var(--ac))` para sa buong kulay, `rgba(var(--ac),.12)`
     para sa mahinang bakas. Kung kulay ito ay kailangan ng pangalawang
     variable para sa bawat lakas ng bakas.

   ▶ PARA BAGUHIN ANG KULAY NG ISANG CARD: ang `--ac` lang sa `style`
     nito sa markup. Kusang susunod ang ikono, ang gilid, ang hibla sa
     tuktok, ang guhit sa ilalim ng pamagat at ang tanda sa mga salita. */
.finds li{
  /* Sagip kung may naidagdag na card na walang `--ac` sa `style` nito:
     navy — hindi sirang kulay at hindi nawawalang gilid. Ang inline na
     `style` ang nananalo kapag nakasulat, kaya walang naaapektuhan. */
  --ac:31,66,128;
  position:relative;overflow:hidden;
  display:grid;justify-items:center;align-content:start;text-align:center;
  padding:clamp(18px,1.8vw,24px) clamp(11px,1.5vw,22px) clamp(18px,1.9vw,26px);
  /* Mahinang sinag ng sariling kulay sa tuktok, sa likod mismo ng ikono.
     Nasa background ito ng `li` at hindi sa pseudo-element: hindi
     kailangang gumalaw, at ang dalawang pseudo ay may hawak na ibang
     trabaho (`::before` = sinag ng daliri, `::after` = hibla sa tuktok). */
  background:
    radial-gradient(124% 46% at 50% -8%, rgba(var(--ac),.115), rgba(var(--ac),0) 66%),
    #fff;
  border:1px solid rgba(31,66,128,.09);border-radius:16px;
  box-shadow:0 18px 34px -24px rgba(9,20,44,.42);
  transition:transform .45s var(--ease),box-shadow .45s var(--ease),border-color .4s ease;
}
/* Hibla ng kulay sa mismong tuktok na gilid. Lumalapad ito mula sa
   gitna palabas sa hover — mula sa gitna at hindi mula kaliwa, dahil
   nakasentro ang buong laman ng card.
   ⚠ HINDI ITO TANDA NG NAPIPINDOT. Hindi link ang tatlong card at wala
     silang pupuntahan; walang `cursor:pointer` at walang palatandaang
     mapipindot. Palamuti lang ang hover dito — kabaligtaran ng `.pcat`
     sa #products kung saan sinasadyang tanda ng pagkapindot ang hibla. */
.finds li::after{
  content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:rgb(var(--ac));border-radius:0 0 3px 3px;
  transform:scaleX(.34);transform-origin:center;
  transition:transform .5s var(--ease);
}
@media (hover:hover){ .finds li:hover::after{transform:scaleX(1)} }
/* Isa-isang dumarating ang tatlo. Nakasulat na sa markup ang `--i` mula
   pa noong ginawa ang seksyon — dito na lang ito ginagamit sa card mismo
   (ginagamit na ito noon ng ikono at ng pulang guhit). */
.finds li[data-reveal]{transition-delay:calc(var(--i,0) * .1s)}
/* Sinag na sumusunod sa daliri — nasa likod ng lahat ng teksto at
   `pointer-events:none`, kaya walang hinaharangan. Ang `--sx/--sy` ay
   isinusulat ng seksyon 4f ng main.js. */
.finds li::before{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(190px 190px at var(--sx,50%) var(--sy,50%),
             rgba(var(--ac),.17),transparent 66%);
  opacity:0;transition:opacity .34s ease;
}
/* Sariling kulay din ang gilid at ang anino sa hover — hindi iisang
   asul sa tatlo. Doon nakikitang ang buong card ang tumutugon at hindi
   lang ang ikono nito. */
@media (hover:hover){ .finds li:hover{
  transform:translateY(-7px);border-color:rgba(var(--ac),.42);
  box-shadow:0 34px 54px -28px rgba(var(--ac),.5);
} .finds li:hover::before{opacity:1} }

.finds__ico{
  position:relative;display:grid;place-items:center;
  width:clamp(44px,4.2vw,54px);aspect-ratio:1;border-radius:50%;
  background:rgb(var(--ac));color:#fff;
  box-shadow:0 14px 26px -15px rgba(var(--ac),.85);
  transition:transform .5s var(--back),box-shadow .4s var(--ease);
}
/* ⚠ GUMAGANA LANG ITO PAGKATAPOS NG `icoPop`. Ang animation ay may
   `backwards` at hindi `forwards`, kaya bumabalik ang ikono sa normal
   nitong estilo pagkatapos ng .64s — at doon lang kayang baguhin ng
   hover ang `transform`. Sa loob ng unang .64s ay ang animation ang
   nananalo, at tama iyon: hindi pa naman nakakarating ang mata roon. */
@media (hover:hover){ .finds li:hover .finds__ico{
  transform:translateY(-4px) scale(1.07);
  box-shadow:0 24px 36px -14px rgba(var(--ac),.9);
} }
.finds__ico svg{width:44%;height:44%}
/* `backwards`, hindi `forwards`: hawak nito ang UNANG keyframe habang
   naghihintay, at normal ang huli. Kung hindi tumakbo ang JS at hindi
   dumating ang `.is-in` ay wala lang mangyayari — nakikita pa rin ang
   ikono. Kung `opacity:0` ang base ay mawawala sila nang tuluyan. */
.finds li.is-in .finds__ico{animation:icoPop .64s var(--back) calc(.14s + var(--i,0) * .07s) backwards}
@keyframes icoPop{
  0%  {opacity:0;transform:scale(.4) rotate(-24deg)}
  62% {opacity:1;transform:scale(1.13) rotate(5deg)}
  100%{opacity:1;transform:none}
}
/* Umiikot na singsing sa hover. `dashed` at hindi buo: sa buo ay
   nagmumukha itong pangalawang gilid ng card. */
.finds__ico::after{
  content:"";position:absolute;inset:-7px;border-radius:50%;
  border:1.5px dashed rgba(var(--ac),.45);
  opacity:0;transition:opacity .35s ease;
}
@media (hover:hover){ .finds li:hover .finds__ico::after{opacity:1;animation:ringSpin 9s linear infinite} }
@keyframes ringSpin{to{rotate:360deg}}

.finds h3{
  margin-top:clamp(11px,1.1vw,14px);font-family:var(--display);font-weight:800;
  font-size:clamp(12px,1.22vw,16.5px);line-height:1.28;letter-spacing:-.012em;
  color:var(--navy);
}
/* ---- ⚠ ANG TANDA SA MAHAHALAGANG SALITA ----
   Isang kulay ang buong pamagat noon at pantay ang timbang ng bawat
   salita. May tanda na ngayon ang bahaging talagang binabasa —
   "small-business problem", "the warehouse", "recommend them" — sa
   kulay ng card at may mahinang bakas sa ilalim, gaya ng highlighter.

   ⚠ `box-decoration-break:clone` AT KAILANGAN ITO. Kapag napunit sa
     dalawang linya ang tandang salita (nangyayari iyon sa cellphone,
     kung saan nawawala ang `<br>`), ang default na `slice` ay
     nagpipinta ng likod na parang isang mahabang kahon na hiniwa —
     kaya sa HULING linya lang lumalabas ang bakas na nasa ilalim. Sa
     `clone` ay may sariling bakas ang bawat linya.

   ⚠ ANG BAKAS ANG MAY KULAY, HINDI ANG TITIK — at may dalawang dahilan:

     1. HINDI MABABASA ANG ELECTRIC NA TITIK SA PUTI. Sinukat: 2.84:1
        lang ang `#3B9CFF` sa puti, kulang pa sa 3:1 na pinakamababa —
        at 12px lang ito sa cellphone. Nilalaman ito at hindi palamuti,
        kaya hindi ito puwedeng maging mahirap basahin. Sa navy-deep na
        titik ay 18:1 ito, at nasa BAKAS ang kulay ng card.
     2. NAVY DIN ANG UNANG CARD. Kung titik ang may kulay ay wala itong
        ipagkakaiba sa natitirang bahagi ng pamagat — mawawala ang tanda
        sa isa sa tatlo. Nakikita ang bakas sa tatlo, magkakapareho.

   ⚠ `.5em` LANG ANG BAKAS SA PAHINGA. Sa mas makapal ay nagmumukha
     itong pindutan; sa ganito ay guhit lang ng marker na tumatawid sa
     ilalim ng titik. Sa hover ito umaakyat hanggang matakpan ang
     buong salita — doon lumalabas ang buong highlighter. */
.finds h3 b{
  color:var(--navy-deep);
  -webkit-box-decoration-break:clone;box-decoration-break:clone;
  background-image:linear-gradient(rgba(var(--ac),.22),rgba(var(--ac),.22));
  background-repeat:no-repeat;background-position:0 100%;
  background-size:100% .5em;
  transition:background-size .42s var(--ease);
}
@media (hover:hover){ .finds li:hover h3 b{background-size:100% 1.05em} }
/* ⚠ DALAWANG MAGKAIBANG GALAW SA IISANG GUHIT, at magkaiba ang property
   nila nang sinasadya:
     `transform:scaleX`  — ang PAGDATING (may antalang sunod sa `--i`)
     `width`             — ang HOVER (walang antala)
   Kung parehong `transform` ang dalawa ay magkakapatong sila at ang huli
   na lang ang makikita. Magkaiba sila, kaya nagpapatong sila nang
   maayos: 44px na guhit na lumaki mula sa gitna. */
.finds h3::after{
  content:"";display:block;width:26px;height:3px;border-radius:2px;
  margin:clamp(9px,1.2vw,14px) auto 0;background:rgb(var(--ac));
  transform:scaleX(0);
  transition:transform .5s var(--back) calc(.3s + var(--i,0) * .07s),
             width .4s var(--ease);
}
.finds li.is-in h3::after{transform:scaleX(1)}
@media (hover:hover){ .finds li:hover h3::after{width:46px} }
.finds p{
  margin-top:clamp(9px,1.2vw,14px);
  font-size:clamp(10.5px,1.02vw,14px);line-height:1.62;color:var(--ink-2);
  transition:color .35s ease;
}
/* Pangalawang antas lang ito ng tanda — navy at makapal, walang bakas.
   Kung may highlighter din dito ay apat na tanda sa isang card at
   wala nang matitirang mababasa nang normal. */
.finds p b{color:var(--navy);font-weight:700}
@media (hover:hover){ .finds li:hover p{color:#3E4A70} }

/* ---- ANG BARETA SA IBABA ---- */
.ibar{
  position:relative;z-index:2;overflow:hidden;
  margin-top:clamp(20px,2.6vw,32px);
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;
  gap:clamp(13px,1.8vw,24px);
  padding:clamp(16px,2.1vw,26px) clamp(16px,2.3vw,30px);
  background:var(--navy);color:#fff;border-radius:18px;
  box-shadow:0 26px 52px -34px rgba(15,38,86,.8);
}
.ibar__ico{
  display:grid;place-items:center;flex:none;
  width:clamp(42px,4.4vw,58px);aspect-ratio:1;border-radius:50%;
  background:rgba(217,4,41,.18);box-shadow:inset 0 0 0 1.4px rgba(217,4,41,.55);
  color:#FF6B74;
}
.ibar__ico svg{width:42%;height:42%}
.ibar__txt b{display:block;font-family:var(--display);font-weight:700;font-size:clamp(13px,1.24vw,16px)}
.ibar__txt span{display:block;margin-top:4px;font-size:clamp(11px,1vw,13px);line-height:1.5;color:rgba(255,255,255,.66)}
.ibar__cta{white-space:nowrap}
/* Isang hagod ng liwanag pagdating mo rito — isang beses lang, hindi
   paulit-ulit: pahiwatig ito na may pindutan dito, hindi palamuti. */
.ibar::after{
  content:"";position:absolute;top:0;bottom:0;left:-45%;width:36%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.15),transparent);
}
.ibar.is-in::after{animation:sheen 1.5s var(--ease) .5s}
@keyframes sheen{to{left:125%}}

/* ---- ANG PANAYAM SA MAKITID NA SALAMIN ----
   Kasama rito at hindi sa seksyon 19 dahil walang kabuluhan ang mga
   bilang na ito kung hiwalay sa itaas — pareho silang tungkol sa iisang
   ayos. Ganito rin ang ginawa sa `.sec--feat`. */
@media (max-width:900px){
  /* Isang hanay na muli, at nakasentro ang ulo — walang magiging katabi
     ang sipi, kaya walang dahilan para nakaipit sa kaliwa ang pamagat. */
  .itop{grid-template-columns:minmax(0,1fr);gap:clamp(22px,3.4vw,32px)}
  .itop__head{text-align:center;display:grid;justify-items:center}
  .itop__head .phead__sub{max-width:46ch}
  /* Bumabalik sa gitna ang tanong at ang guhit nito — nakasentro na ang
     buong ulo dito, at ang pakaliwang guhit ay magmumukhang nalaglag. */
  .iq{text-align:center;margin-inline:auto;max-width:46ch}
  .iq::after{margin-inline:auto;transform-origin:center}

  /* Litrato sa itaas, sipi sa ibaba. PAHALANG NA ANG HIWA:
     `object-position:center 20%`. Sinukat sa 390px — 16/9 ang kahon, kaya
     0.304 ang sukat ng litrato at 623px ang taas nito sa loob ng 201px na
     bintana. Sa 20% ay hanay 276–937 ang nakikita, at nasa 463–705 ang
     mukha: buo ito sa loob, at 73px ang taas — mas malaki pa kaysa sa
     desktop. Pahilis din ang hiwa dito, pero PAHALANG na: dumadausdos
     ang navy pataas sa kanan, kaya iisa pa rin ang dalawa. */
  .pull{grid-template-columns:minmax(0,1fr)}
  .pull__pic{
    aspect-ratio:16/9;
    clip-path:polygon(0 0,100% 0,100% calc(100% - 26px),0 100%);
  }
  /* 20% at hindi 12%: pahalang na ang kahon dito, kaya ibang bahagi ng
     litrato ang nakikita. Sinukat sa 390px — nasa hanay 276–937 ang
     bintana at nasa 463–705 ang mukha, kaya buo ito sa loob at 71px
     ang taas. */
  .pull__pic img{object-position:center 20%}
  .pull__dots{width:82px;height:50px}
  /* PABABA ang kurtina rito, hindi pakanan: pahalang na ang pahilis ng
     litrato sa cellphone. Pababa at hindi paitaas para ang ULO ang
     unang lumitaw — iyon ang unang hinahanap ng mata.

     -20% ang sobra sa itaas at ibaba, hindi -3%: 30px ang itinataas at
     ibinababa ng `skewY(-5deg)` sa 346px na lapad, at sa manipis na
     sobra ay may sumisilip na sulok bago pa magsimula. */
  .pull__pic::after{inset:-20% -3%;transform:translateY(136%) skewY(-5deg)}
  @keyframes picWipe{
    from{transform:translateY(0) skewY(-5deg)}
    to  {transform:translateY(136%) skewY(-5deg)}
  }
}

@media (max-width:640px){
  /* Tatlong haligi pa rin — ganoon ang reference, at iyon ang nagpapanatili
     sa tatlo bilang IISANG hilera ng natuklasan sa halip na tatlong
     magkakahiwalay na bloke. Ang `<br>` ang inaalis, hindi ang haligi:
     sa 107px na haligi ay walang kasyang pinilit na hati, pero kayang
     kaya ng browser na hatiin ang "small-business" sa gitnang gitling. */
  .finds{gap:9px}
  .finds li{padding:16px 8px 18px;border-radius:13px}
  .finds li br{display:none}
  .finds__ico{width:42px}
  .finds h3{margin-top:11px;font-size:11px}
  .finds h3::after{width:20px;margin-top:8px}
  .finds p{margin-top:8px;font-size:10.5px;line-height:1.5}

  /* Isang hanay ang bareta: sa tatlong haligi ay 90px na lang ang teksto
     sa gitna at nahahati ang bawat salita. */
  .ibar{
    grid-template-columns:auto minmax(0,1fr);gap:12px;
    row-gap:14px;text-align:left;
  }
  .ibar__cta{grid-column:1 / -1;justify-content:center}
}

/* ---- ang artikulo (NAKATABI — tingnan ang _parked/interview-longform.html.txt) ----
   Hindi ito ginagamit ng #interview ngayon; tatlong card ang pumalit.
   HUWAG BURAHIN: kapag dumating ang tunay na transcript ay ibabalik ang
   markup at gagana agad ito nang walang idadagdag dito. */
.art{width:min(100%,66ch)}
.art__lede{
  font-family:var(--display);font-weight:600;color:var(--navy);
  font-size:clamp(16px,1.5vw,20px);line-height:1.58;letter-spacing:-.01em;
}
.art h3{
  margin-top:clamp(22px,2.6vw,32px);font-family:var(--display);font-weight:800;
  font-size:clamp(16.5px,1.5vw,20px);letter-spacing:-.02em;color:var(--navy);
}
.art p{margin-top:11px;font-size:15px;line-height:1.75;color:var(--ink-2)}
/* Nakikita ito ng lahat, hindi lang ng nagbubukas ng code. Sinasadya:
   hindi dapat mapunta sa live nang hindi napapansin ang mock na teksto. */
.art__note{
  position:relative;z-index:2;
  max-width:74ch;margin-inline:auto;text-align:center;
  margin-top:clamp(20px,2.4vw,28px);padding:11px 14px;border-radius:10px;
  background:rgba(217,4,41,.055);border:1px dashed rgba(217,4,41,.32);
  font-size:12.5px!important;line-height:1.6;font-style:italic;color:var(--red)!important;
}

.story__acts{
  display:flex;flex-wrap:wrap;justify-content:center;
  gap:clamp(10px,1.2vw,14px);
}

/* ---- ang lockup ---- */
.lock{
  width:100%;display:flex;align-items:center;justify-content:center;
  flex-wrap:wrap;gap:clamp(14px,2.2vw,30px);
  padding-top:clamp(20px,2.6vw,30px);border-top:1px solid var(--line-2);
}
.lock__one{display:flex;align-items:center;gap:11px}
.lock__one b{font-family:var(--display);font-weight:700;font-size:13px;color:var(--navy);white-space:nowrap}
.lock__rdr{width:38px;height:38px;border-radius:10px;flex:none;display:block}
.lock__tm{width:clamp(84px,8vw,110px);height:auto;display:block}
.lock__x{
  flex:none;font-family:var(--display);font-weight:700;font-size:19px;
  line-height:1;color:var(--red);opacity:.75;
}


/* ================= 8. PRODUCTS ================= */
/* ---- ISANG LIKOD LANG, MULA ULO HANGGANG DULO NG LISTAHAN ----
   Ago 11, 2026. Dalawa ang likod nito noon at may HIWA sa pagitan:
   asul na banda sa itaas (`.pband`, may sariling gradient), tapos
   kremang parihaba para sa listahan — at may pahilis na kremang gilid
   (`.pband::after`) na nagsasabing "dito nagtatapos ang ulo". Dalawang
   bloke ang dating nito sa cellphone kahit iisang seksyon naman.

   ISANG `linear-gradient` na lang ang buong seksyon ngayon. Walang
   `.pband::after`, walang sariling likod ang `.pband` — tuluy-tuloy ang
   kulay mula sa ngipin sa itaas hanggang sa ilalim ng ikatlong card.

   PATAYO ITO (180deg) AT MAY DAHILAN. Pahilis (168deg) ang luma, kaya
   magkaibang kulay ang kaliwa at kanan ng unang hilera at kinailangan ng
   punit sa itaas ang sariling SVG gradient na isinasabay nang kamay.
   Pantay na #FBF1E3 ang buong unang hilera nito, kaya patag na kulay na
   lang ang punit — gaya ng lima pang iba sa pahina.

   ANG BALUKTOT NG KULAY: krema sa itaas (mula sa #about), malamig na
   asul sa lugar ng ulo at ng unang card, at balik sa krema sa ilalim.
   Walang hakbang kahit saan; ang lalim lang ang nagbabago.

   (Ang navy ng #savings ang nasa ilalim noon. Nakaparada na ngayon ang
   seksyong iyon sa dulo ng pahina, kaya ang papel ng #why ang sumusunod
   dito — krema papuntang papel, halos walang tahi. Walang binago sa
   gradient: sa krema rin naman ito nagtatapos noon pa.)

   ⚠ PIXEL ANG UNANG APAT NA HINTO AT PORSIYENTO ANG HULING TATLO.
     Hindi ito pagkalito — magkaiba ang taas ng seksyong ito sa bawat
     lapad ng screen: 1988px sa 390px na cellphone at mga 1400px sa
     desktop. Sa purong porsiyento ay LUMILIPAT ang asul palayo sa ulo
     habang humahaba ang listahan, kaya kremang ulo ang nakikita sa
     cellphone at asul na ulo sa desktop.

     Nakakabit sa TUKTOK ang unang bahagi (0→330px) kaya pareho ang
     tinting ng ulo saanman, at porsiyento na ang mahabang buntot kung
     saan walang mahalagang tumatapat. Tumatanggap ang CSS ng halong
     yunit sa isang gradient; ang tanging alituntunin ay HUWAG
     MAGPAHULI: kung mas maliit ang 52% kaysa sa 330px ay pinipilit
     iyon ng browser na maging 330px at may matalim na guhit doon. Ang
     52% ay 727px sa pinakamaikling posibleng seksyon — malayo pa rin. */
/* ⚠ NANATILI ANG `sec--cream` SA MARKUP at sinasadya iyon: patag na
     krema ang ibinibigay niyon, at iyon ang nakikita kung sakaling
     hindi maiguhit ang gradient. Ang `#products` (id) ay laging mas
     malakas kaysa sa `.sec--cream` (klase), kaya walang labanan. */
#products{
  background:linear-gradient(180deg,
    #FBF1E3 0,
    #F5F2EE 62px,
    #EAF0FA 196px,
    #E4EDF9 330px,
    #E7EFF8 52%,
    #F0F1EF 77%,
    #FAF2E7 100%);
}

/* ---- dekorasyon sa likod: litrato sa ibaba-kaliwa, tuldok sa itaas-kanan ----
   Tekstura lang pareho. Napakababa ng opacity dahil may teksto sa ibabaw
   ng dalawa; hindi ito larawang tinitingnan. */
.prodbg{
  position:absolute;left:0;bottom:0;z-index:0;pointer-events:none;
  width:min(38%,460px);height:clamp(220px,26vw,380px);
  background:url('../img/warehouse.jpg') center/cover no-repeat;
  opacity:.17;
  -webkit-mask-image:radial-gradient(120% 118% at 0% 100%,#000 8%,rgba(0,0,0,.38) 44%,transparent 74%);
          mask-image:radial-gradient(120% 118% at 0% 100%,#000 8%,rgba(0,0,0,.38) 44%,transparent 74%);
}
/* ⚠ DALAWANG BESES NA ITONG LUMIPAT AT ANG HUGIS SA LIKOD ANG DAHILAN:
   itaas-kanan → kaliwa (nang mapunta ang navy na hubog sa kanan) →
   BALIK SA ITAAS-KANAN ngayon (wala nang navy, at nakasentro na ang
   teksto). Sa itaas-kanan ito sa bagong reference. */
.proddots{
  position:absolute;top:clamp(30px,4vw,64px);right:0;z-index:0;pointer-events:none;
  width:min(18%,180px);height:clamp(110px,13vw,190px);
  background:radial-gradient(rgba(31,66,128,.2) 1.4px,transparent 1.5px) 0 0/17px 17px;
  -webkit-mask-image:linear-gradient(250deg,#000 6%,transparent 72%);
          mask-image:linear-gradient(250deg,#000 6%,transparent 72%);
  /* Ang mismong TULDOK ang gumagalaw, hindi ang parihaba: `background-
     position` ang inaanimate at hindi `transform`, kaya nananatili sa
     lugar ang maskara at ang panabing gilid. Isang buong hakbang ng
     pattern (17px) ang isang ikot, kaya walang tumatalon sa pagbalik. */
  animation:pdrift 22s linear infinite;
}
@keyframes pdrift{ to{background-position:17px 17px} }

/* ---- ⚠ ANG GUHIT-KUWADRADO SA LIKOD NG TATLONG CARD ----
   Papel ng katalogo ang tinutularan: guhit na kinahahanayan ng mga
   bagay. Hindi ito nakikita bilang guhit sa unang tingin — ang
   pagkakaroon ng LALIM sa likod ng puting card ang nararamdaman.

   ⚠ `.045` LANG ANG KULAY AT MAY DAHILAN IYON. Sinubukan sa `.09`:
     nagiging papel-grapo ang seksyon at ninanakaw nito ang tuon mula sa
     23 pangalan — na siyang buong dahilan ng seksyon.

   ⚠ MASKARA SA APAT NA GILID. Ang guhit na umaabot sa dulo ay nagiging
     KAHON na nakapatong sa pahina; ang naglalaho ay nagiging tekstura.

   ⚠ 46px ANG KUWADRADO, hindi 17px gaya ng `.proddots`. Malayo sila sa
     isa't isa (ito ay nasa gitna, ang tuldok ay nasa itaas-kanan) pero
     kung magkalapit ang sukat ay magmumukhang sira ang dalawa.

   Gumagalaw ito nang `background-position` at hindi `transform` —
   gumagalaw ang GUHIT sa loob ng maskara, hindi ang buong parihaba
   kasama ang panabing gilid nito. */
.prodgrid{
  position:absolute;z-index:0;pointer-events:none;
  left:0;right:0;top:clamp(180px,26vw,340px);height:clamp(300px,42vw,560px);
  background:
    linear-gradient(rgba(31,66,128,.045) 1px,transparent 1px) 0 0/100% 46px,
    linear-gradient(90deg,rgba(31,66,128,.045) 1px,transparent 1px) 0 0/46px 100%;
  -webkit-mask-image:radial-gradient(78% 66% at 50% 50%,#000 18%,transparent 78%);
          mask-image:radial-gradient(78% 66% at 50% 50%,#000 18%,transparent 78%);
  animation:pgriddrift 30s linear infinite;
}
@keyframes pgriddrift{ to{background-position:46px 46px, 46px 46px} }

/* ---- ANG TATLONG LIWANAG ----
   Ito ang "may nangyayari sa likod" nang hindi nakikipag-agawan sa
   teksto. Tatlong napakalambot na bilog: dalawang asul at isang
   napakaputlang pula, at walang isa man sa kanila ang lumalampas sa .07
   na opacity — hindi ito nakikita bilang hugis, ang lalim lang ng likod
   ang nagbabago habang gumagalaw sila.

   ⚠ `filter:blur()` ANG HINDI GINAMIT DITO. Ang malabong 600px na bilog
     ay pinipilit ang browser na iguhit ang buong parisukat sa bawat
     hakbang ng galaw, at ramdam iyon sa cellphone. Ang `radial-gradient`
     ay malabo na mismo pagkaguhit — walang dagdag na hakbang.

   ⚠ `transform` LANG ANG GUMAGALAW (at `opacity`). Kapag `left`/`top`
     ang inanimate ay muling kinakalkula ng browser ang layout ng buong
     seksyon 60 beses kada segundo, at may 23 pangalan at tatlong card
     dito. */
.prodglow{
  position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden;
}
.prodglow i{
  position:absolute;display:block;border-radius:50%;
  will-change:transform;
}
.prodglow i:nth-child(1){
  left:-14%;top:4%;width:min(62%,620px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(59,156,255,.16) 0,rgba(59,156,255,.05) 46%,transparent 70%);
  animation:pglowA 26s ease-in-out infinite;
}
.prodglow i:nth-child(2){
  right:-18%;top:22%;width:min(58%,560px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(31,66,128,.14) 0,rgba(31,66,128,.04) 48%,transparent 72%);
  animation:pglowB 34s ease-in-out infinite;
}
/* Isang pahiwatig lang ng pula — ang kulay ng tatak, pero sa .07 ay
   init ito sa likod at hindi mantsa. */
.prodglow i:nth-child(3){
  left:34%;bottom:-8%;width:min(52%,540px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(217,4,41,.07) 0,rgba(217,4,41,.02) 44%,transparent 68%);
  animation:pglowC 30s ease-in-out infinite;
}
@keyframes pglowA{
  0%,100%{transform:translate3d(0,0,0) scale(1)}
  50%    {transform:translate3d(7%,5%,0) scale(1.12)}
}
@keyframes pglowB{
  0%,100%{transform:translate3d(0,0,0) scale(1.06)}
  50%    {transform:translate3d(-8%,7%,0) scale(.94)}
}
@keyframes pglowC{
  0%,100%{transform:translate3d(0,0,0) scale(.96)}
  50%    {transform:translate3d(-6%,-6%,0) scale(1.1)}
}

/* ---- ULO ---- */
.phead{position:relative;z-index:2;margin-bottom:clamp(24px,3.4vh,38px)}
.phead--center{text-align:center;display:grid;justify-items:center}
.phead .h2{font-size:clamp(28px,3.6vw,44px);line-height:1.12}
.dot{color:var(--red)}
.phead__sub{margin-top:13px;font-size:14.6px;line-height:1.66;color:var(--ink-2);max-width:58ch}

/* =========================================================
   ANG KARUSEL
   Isang pangkat sa bawat sandali. Nasa daloy pa rin ang lahat ng slide
   (magkatabi sa isang track), kaya ang pinakamataas ang nagtatakda ng
   taas ng bintana — walang tumatalon na taas kapag lumipat.
   ========================================================= */
/* ---- TATLONG PANGKAT (Ago 10, 2026) ----
   Ito na ang katalogo. Ang karusel at ang 23 card sa ibaba nito ay
   TULOG MUNA — nakatabi ang markup sa _parked/products-carousel.html.txt
   at buo pa rin ang CSS, kaya isang paste lang ang pagbabalik. Huwag
   burahin ang `.carou`, `.pcarou`, at `.pcard` na nasa ilalim. */
/* ---- ANG ULO SA ITAAS ----
   Umaabot ito sa dulo ng dalawang gilid, kaya nasa LABAS ito ng `.wrap`
   at may sariling `.wrap` sa loob. Kasama nito ang `padding-top:0` sa
   #products: ang ulo mismo ang tuktok ng seksyon.

   ⚠ WALA NA ITONG SARILING LIKOD (Ago 11, 2026). Sariling gradient ito
     noon — malamig na puti pababa sa asul — at doon nagmumula ang
     "dalawang bloke" na hitsura. Nasa `#products` na ang iisang likod;
     BINTANA na lang ito na dinadaanan niyon.

   ⚠ NANATILI ANG `overflow:hidden`: pinuputol nito ang dalawang arko sa
     likod. Mas malapad sila kaysa sa screen at sinasadya iyon — ang
     GILID lang ng bilog ang dapat makita. Kapag inalis ito ay may
     pahalang na scrollbar sa cellphone. */
/* ---- ⚠ PINAKASYA ANG BUONG #products SA ISANG SCREEN (Ago 12, 2026) ----
   *"adjust the sizes its too big / make sure the prdocut section is fit
   sa isang buong page"*

   1306px ito noon sa 1440x900, at mga 810px lang ang nakikita nang
   sabay (900 na screen kulang ang 90px na sticky na nav). Kalahati ng
   seksyon ang nasa labas.

   ⚠ WALANG NAWALANG LAMAN. Buo pa rin ang 23 pangalan, ang tatlong
     litrato, ang ulo, ang paalala at ang navy na bareta — SUKAT LANG
     ang binago. Walang tinanggal na produkto at walang tinanggal na
     pangungusap.

   Nakakalat ang ginupit dahil WALANG IISANG BAGAY na kayang magbigay ng
   400px. Ito ang bawat isa, at nakasulat sa tabi ng bawat panuntunan:

       litrato       250 -> 150     (3:2 na kahon -> 5:2)
       ulo ng sec.   281 -> 175     (padding, margin, laki ng h2)
       lead + hint   145 -> 100     (isang linya na ang hint)
       katawan card  306 -> 240     (ikono, hanay ng pangalan, padding)
       tip + hunt    163 -> 118
       padding sa ibaba  81 -> 52

   ⚠ HUWAG IBALIK ANG ALINMAN NANG NAG-IISA. Magkakasama silang nagkasya;
     ang isang 40px na pagluwag ay 40px na lumalabas ulit sa screen. */
.pband{
  position:relative;z-index:2;overflow:hidden;
  margin-bottom:clamp(10px,1.4vw,20px);
  padding:clamp(12px,2.2vw,34px) 0 clamp(10px,1.7vw,24px);
}
#products{padding-top:0}
/* Ang `.sec` ay `clamp(64px,9vh,118px)` — 81px sa 900 na screen. */
/* ⚠ `5.4vh` / 76px na, dating `3.2vh` / 40px (Ago 13, 2026). Sinikip ito
   noon para magkasya ang buong seksyon sa isang screen; hiniling ni
   Kylie na lakihan, kaya bumalik ang hangin sa ilalim. */
#products{padding-bottom:clamp(30px,5.4vh,76px)}
/* ---- ⚠ NAKASENTRO AT WALANG LITRATO (Ago 11, 2026) ----
   Dalawang haligi ito noon: teksto sa kaliwa, litrato ng produkto sa
   kanan, at navy na hubog sa likod ng litrato. Nakasentro at teksto
   lang ang bagong reference.

   Nasa _parked/pband-shot.{html,css,js}.txt ang tatlong bahagi ng
   lumang bersyon — ang markup, ang CSS na ito, at ang seksyon 6b ng
   main.js na nagpapagalaw ng litrato kasunod ng mouse. Buo ang tatlo;
   hindi ito ginupit.

   ⚠ ANG PINAKAMALAKING NABAWAS ay hindi ang litrato kundi ang
     PAGKAKAROON NG DALAWANG HALIGI. Ang taas ng ulo ay ang taas ng
     pinakamataas sa dalawa, at palagi iyong ang litrato. Sa isang
     nakasentrong hanay ay ang teksto na lang ang natitira, at 96px
     lang iyon sa cellphone. */
.pband{
  text-align:center;
}
.pband__in{
  position:relative;z-index:2;
  display:grid;justify-items:center;
  gap:clamp(7px,.9vw,10px);
}
.pband__copy{display:grid;justify-items:center}
/* ⚠ `38ch` PA RIN ANG HANGGANAN AT HINDI `52ch`. Nakasentro ang
   teksto: mas mahirap sundan ng mata ang mahabang nakasentrong linya
   kaysa sa pakaliwa, dahil nagbabago ang simula ng bawat linya. Sa
   38ch ay dalawang linya ito sa desktop — kapareho ng reference. */
/* WALA NANG `.pband__sub` (Ago 12, 2026). Ang talata sa ilalim ng
   pamagat ng #products ang nag-iisang gumagamit nito sa buong pahina, at
   inalis iyon sa hiling ni Kylie. Kasama sa inalis ang isang linya sa
   `@media (max-width:640px)`.

   ⚠ NANANATILI ANG `.phead__sub` — magkaiba sila. May DALAWANG klase ang
     talata noon (`class="pband__sub phead__sub"`); ang pangalawa ay
     ginagamit pa rin ng ibang ulo ng seksyon.

   Kung babalik ang talata:
     .pband__sub{max-width:96ch;margin-top:0;text-wrap:balance}
     @media (max-width:640px){ .pband__sub{font-size:13.6px;line-height:1.62;max-width:38ch} } */

/* ---- DALAWANG ARKO SA LIKOD ----
   Nasa reference ang dalawa: napakalambot na gilid ng napakalaking
   bilog, isa sa kaliwa at isa sa kanan, kapwa nakalabas sa gilid ng
   screen kaya ang GILID lang ng bilog ang nakikita.

   ⚠ HINDI GRADIENT ANG DALAWA KUNDI BUONG BILOG na may patag na kulay.
     Ang gradient ay walang GILID — malabo ito sa lahat ng panig, at ang
     buong punto ng hugis na ito ay ang linyang dinadaanan niyon.
     Napakababa ng kaibahan sa likod (mga 3 yunit), kaya hindi ito
     nakikita bilang bilog kundi bilang bahagyang pagbabago ng lalim.

   ⚠ NASA `.pband` ANG `overflow:hidden` na pumuputol sa kanila. Kung
     inalis iyon ay may pahalang na scrollbar — mas malapad ang dalawang
     bilog kaysa sa screen, at sinasadya iyon. */
.pband__arc{
  position:absolute;z-index:0;pointer-events:none;
  border-radius:50%;aspect-ratio:1;
  background:rgba(31,66,128,.026);
}
.pband__arc--l{
  left:-30%;top:-46%;width:min(62%,760px);
  animation:parcIn 1.2s var(--ease) .1s backwards;
}
.pband__arc--r{
  right:-26%;bottom:-58%;width:min(58%,700px);
  background:rgba(59,156,255,.034);
  animation:parcIn 1.2s var(--ease) .22s backwards;
}
@keyframes parcIn{ from{transform:scale(.86);opacity:0} }

/* ---- ANG PAG-AHON NG DALAWANG SALITA ----
   Isa-isang umaahon ang "Packaging" at ang "Solutions".

   ⚠ HINDI GUMAGALAW ANG `.pband__h` MISMO. Ang `[data-reveal]` ay
     nagbibigay ng sarili nitong `translateY(22px)` sa bawat elemento, at
     kung tatakbo iyon KASABAY ng pag-ahon ng dalawang salita ay dalawang
     magkapatong na galaw ang makikita. Ibinabalik ng unang linya sa
     ibaba ang h2 sa normal — ang mga salita na lang ang gumagalaw.
     Nananatili ang `[data-reveal]` sa markup dahil ang `.is-in` niyon
     ang hudyat na pinaghihintayan ng dalawang salita.

   ⚠ `inline-block` ANG SPAN. Hindi tinatanggap ng `inline` ang
     `transform` — nakikita ang opacity pero hindi ang pag-ahon.

   ⚠ ASUL ANG IKALAWANG SALITA, NAVY ANG UNA — nasa reference, at
     `--electric` iyon: ang mismong asul ng nakadikit na header at ng
     mga link doon, hindi bagong kulay. */
/* ---- ⚠ ANG SUKAT NG PAMAGAT ----
   58px ito noon, ginupit papuntang 44px at saka 40px nang pakasyahin ang
   buong `#products` sa isang screen — ito ang pinakamalaking teksto sa
   seksyon, kaya dito pinakamalaki ang naibibigay ng bawat pagbaba.

   ⚠ 52px NA (Ago 13, 2026 — *"lakihan pa ang title here"*). Kasama sa
     pagbabalik ang `3.1vw → 3.9vw`: kung ang takda lang (40→52) ang
     itataas, sa 1440 pataas lang ito makikita — 44.6px na ang 3.1vw
     doon, kaya ang takda ang sumasagot at hindi ang lapad. Sa 3.9vw ay
     lumalaki na rin ito sa 1280 (50px) at sa 1100 (43px).

   ⚠ ISANG LINYA PA RIN ANG DALAWANG SALITA, AT SINUKAT ITO SA
     PINAKAMAHABA. Hindi "Supplies" ang sinusukat kundi **"Essentials"** —
     ang pinakamahaba sa limang umiikot na salita (`data-cycle`), at ang
     GHOST na iyon ang humahawak ng lapad ng linya. Kung lalampas iyon,
     dalawang linya ang pamagat sa ISANG sandali lang ng ikot at
     tatalon ang buong seksyon sa tuwing dadaan ang salitang iyon.

   ⚠ SUMUSUNOD ANG BINTANA NG UMIIKOT NA SALITA NANG KUSA — `em` ang
     lahat ng sukat doon (`height:calc(var(--slot) * 1em)`), kaya walang
     ikalawang bilang na kailangang itaas dito. */
.pband__copy .h2{font-size:clamp(30px,3.9vw,52px);line-height:1.04}
.pband__h[data-reveal],.pband__h[data-reveal].is-in{opacity:1;transform:none}
.pband__h span{
  display:inline-block;
  opacity:0;transform:translateY(.44em) rotate(1.4deg);
  transition:opacity .62s var(--ease),transform .78s var(--back);
}
.pband__h span:nth-child(2){color:var(--electric)}
/* ---- ANG UMIIKOT NA IKALAWANG SALITA ----
   Salansan ng limang salita na BUMABAGSAK — dumaraan ang lima, huminto
   sa susunod, tapos ulit. Nasa seksyon 8b ng main.js ang galaw; ang
   hugis lang ng bintana ang nasa CSS.

   ⚠ ABSOLUTE ANG BINTANA AT MAY GHOST SA DALOY. Ito ang pinakamahalagang
     bagay dito, at may dalawang problemang sabay nitong sinasagot.

     PROBLEMA 1 — ANG BASELINE. Kailangan ng `overflow:hidden` para
     matago ang kapitbahay na salita. Pero ang inline-block na may
     `overflow` na HINDI `visible` ay may ibang baseline: ang ilalim na
     margin edge niya, at hindi ang linya ng teksto. Kung ang salansan
     mismo ang nasa daloy, LUMULUTANG ang salita paitaas kumpara sa
     "Packaging" — at ang laki ng pagkakamali ay nakadepende sa metriko
     ng font, kaya hindi ito maaayos ng isang bilang na hula-hula.

     PROBLEMA 2 — ANG TAAS NG LINYA. `line-height:1.04` ang h2. Kung
     iyon ang taas ng bintana, PUPUTULIN ang buntot ng "p" sa "Supplies"
     at sa "Options" — mas mataas pa sa 1.04em ang tunay na taas ng
     titik ng Poppins (1.4em ang ascent + descent).

     ANG SAGOT: nasa daloy ang `.pcyc__ghost` — siya ang nagtatakda ng
     baseline at ng lapad, at `visibility:hidden` siya. NAKAPATONG lang
     ang bintana bilang `position:absolute`, kaya WALA SIYANG SINASABI
     sa linya: puwede siyang gawing 1.5em ang taas nang hindi tumataas
     ang h2 at nang hindi gumagalaw ang baseline.

   ⚠ TUMATAMA ANG PAGKAKAHANAY SA KAHIT ANONG FONT, at hindi ito
     nagkataon. Ang baseline ng unang slot mula sa itaas ng `.pcyc`:
         (L/2 − S/2)  +  ((S − (A+D))/2 + A)   =   (L − (A+D))/2 + A
     na siya mismong baseline ng h2. Nagkakansela ang S — ang taas ng
     slot — kaya walang epekto sa pagkakahanay kahit gaano kataas ang
     bintana, at hindi kailangang malaman ang A at D ng font.
     (L = line-height ng h2, S = taas ng slot, A/D = ascent/descent.)

   ⚠ SUMASAYAW ANG BUONG LINYA KUNG WALANG `transition` SA `width`.
     Nakasentro ang h2, kaya ang pagkakaiba ng lapad ng "Options" at
     "Essentials" ay naghahatid ng mga 30px na paglundag sa "Packaging"
     sa bawat palit. Sinusukat ng JS ang lima at ang ghost ang may hawak
     ng lapad, kaya dumudulas ito sa halip na lumundag.

   ⚠ SA KALIWA NAKAANGKLA ANG BINTANA AT HINDI NAKASENTRO — ITO ANG
     PINAKAMAHALAGANG LINYA DITO. Sa pinakamalapad na salita nakatakda
     ang lapad ng bintana (hindi sa kasalukuyan: mas malapad ang
     "Essentials" na dumadaan kaysa sa "Options" na patutunguhan, at
     mapuputol ang gilid niya habang dumadaan). NAKASENTRO ITO NOON, at
     may sinira: 209px ang bintana, 189px ang "Solutions", at 5px LANG
     ang agwat ng "Packaging" sa salita. Ibig sabihin ay 6px na
     PUMAPATONG SA "Packaging" ang bintana kahit sa pinakamalapad na
     salita — at 20px kapag "Options" (158px) ang nakahinto.

     Sa `left:0` ay pakanan lang ito lumalampas, at walang laman doon.
     ⚠ HUWAG IBALIK SA `left:50%`. */
/* ⚠ MAY `margin-left` AT SINUKAT ITO SA TINTA, HINDI SA KAHON. Italic at
   900 ang timbang ng pamagat, kaya LUMALAMPAS ang buntot ng "g" ng
   "Packaging" sa sariling kahon nito — 8.5px lang ang tunay na agwat ng
   tinta sa 52px na titik (0.16em) kahit may espasyo sa markup. Nakatago
   iyon noong 40px pa ang pamagat; sa 52px ay parang isang salita na ang
   basa. Sa `.06em` ay 0.22em ang agwat — humihinga na, at SUKAT NG TITIK
   ito kaya pareho ang hitsura sa 26px at sa 52px.
   ⚠ SA `.pcyc` ITO NAKAKABIT AT HINDI SA GHOST. Ang bintana ay
     `position:absolute; left:0` na nakasukat sa `.pcyc` — kapag ang
     ghost lang ang inusog, MAIIWAN ang bintana at hindi na magkapatong
     ang salitang nakikita at ang puwang na inookupa nito. */
.pcyc{position:relative;--slot:2;cursor:pointer;margin-left:.06em}
.pcyc__ghost{
  display:inline-block;visibility:hidden;
  font-style:normal;white-space:nowrap;
}
/* ⚠ MALAMBOT ANG GILID NG BINTANA (`mask`) AT HINDI PUTOL. Ang matalim
   na `overflow` lang ay nagpapakita ng salitang biglang nawawala sa
   gitna ng hangin. Sa mask ay natutunaw sila papasok at palabas.

   ⚠ 27% AT 82% ANG HANGGANAN, AT SINUKAT IYON — hindi hinulaan. Sa
     `--slot:2` ay 31.5% hanggang 78% ng bintana ang tunay na tinta ng
     nakahintong salita (kasama ang buntot ng "p"). Ang fade ay nasa
     labas ng dalawang bilang na iyon. KAPAG BINAGO ANG `--slot`,
     BAGUHIN DIN ITO — sa mas mababaw na bintana ay kakainin ng fade
     ang tuktok at ang buntot ng nakahintong salita. */
.pcyc__win{
  position:absolute;left:0;top:50%;
  transform:translateY(-50%);
  height:calc(var(--slot) * 1em);
  overflow:hidden;pointer-events:none;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 27%,#000 82%,transparent 100%);
          mask-image:linear-gradient(180deg,transparent 0,#000 27%,#000 82%,transparent 100%);
}
/* ⚠ WALANG `transition` DITO AT SINASADYA. Ang JS (seksyon 8b) ang
   nagpipinta ng bawat frame — kailangan niya ang bilis kada sandali
   para sa lalim at para sa labo ng galaw, at hindi iyon nababasa sa
   isang CSS transition. */
.pcyc__roll{display:block}
/* ⚠ `transform-origin:0 50%` — SA KALIWA AT HINDI SA GITNA. Nililiit ng
   JS ang salitang malayo sa gitna; sa gitnang origin ay gumagalaw ang
   simula ng salita habang lumiliit, kaya hindi tumutugma sa "Packaging"
   ang unang titik. Sa kaliwang origin ay nananatiling nakapako iyon. */
.pcyc__w{
  display:block;font-style:normal;white-space:nowrap;text-align:left;
  height:calc(var(--slot) * 1em);line-height:var(--slot);
  transform-origin:0 50%;
}
/* ---- ang tugon sa daliri at sa mouse ----
   ⚠ WALANG `tabindex` AT WALANG `role` DITO, AT SINASADYA. Wala itong
     ginagawang HINDI nangyayari nang kusa — umiikot ang salita kahit
     walang pumindot. Ang pagdaragdag ng pindutan sa accessibility tree
     para sa isang bagay na palamuti ay dagdag na ingay sa screen reader
     nang walang bagong kakayahan. Hihinto ito sa hover at tatalon sa
     susunod kapag pinindot — pampaganda, hindi kontrol. */
.pcyc::after{
  content:"";position:absolute;left:0;bottom:.06em;
  width:100%;height:3px;border-radius:2px;background:currentColor;
  opacity:0;transform:scaleX(0);transform-origin:0 50%;
  transition:transform .5s var(--back),opacity .3s ease;
}
@media (hover:hover){ .pcyc:hover::after{opacity:.34;transform:scaleX(1)} }
@media (hover:none){ .pcyc{cursor:default} .pcyc::after{display:none} }
/* Ang tunay na salita para sa screen reader. Nananatili itong
   "Solutions" kahit anong nasa ibabaw — hindi nagbabago ang pamagat ng
   seksyon sa bawat tatlong segundo. */
.pcyc__sr{
  position:absolute;width:1px;height:1px;
  overflow:hidden;clip-path:inset(50%);font-style:normal;
}
@media (prefers-reduced-motion:reduce){
  .pcyc{cursor:default}
  .pcyc::after{display:none}
  .parc{transition:none !important;translate:none !important}
}

/* ---- ANG DALAWANG ARKO NA SUMUSUNOD SA MOUSE ----
   Nakalagay na ang dalawang arko sa likod ng ulo ng #products (tingnan
   ang `.pband__arc` sa itaas); ito ang nagbibigay sa kanila ng galaw.
   Magkasalungat ang direksyon ng dalawa, kaya may lalim: parang mas
   malapit ang isa kaysa sa isa.

   ⚠ `translate` AT HINDI `transform`. May `transform:scale` na sa
     `@keyframes parcIn` ang dalawang arko para sa pagdating nila —
     sasapawan ng isa ang isa kung `transform` din ang gagamitin dito.

   ⚠ CSS `transition` ANG NAGPAPALAMBOT AT HINDI rAF. Isang halaga kada
     paggalaw ng mouse lang ang isinusulat ng JS; ang browser na ang
     bahalang mag-interpolate. Walang tumatakbong loop, walang
     kinakalkulang damping kada frame. */
.parc{transition:translate .8s cubic-bezier(.2,.7,.2,1)}
.pband__arc--l.parc{translate:calc(var(--px,0) * 16px) calc(var(--py,0) * 11px)}
.pband__arc--r.parc{translate:calc(var(--px,0) * -22px) calc(var(--py,0) * -14px)}
.pband__h.is-in span{opacity:1;transform:none}
.pband__h.is-in span:nth-child(2){transition-delay:.13s}
/* ⚠ WALA NANG PULANG GUHIT SA ILALIM NG PAMAGAT. Mayroon noon at
   ipininta pa iyon mula sa kaliwa. Wala ito sa bagong reference, at
   tama iyon: MAY pulang guhit ang "Browse Our Product Categories" sa
   ibaba nito, at dalawang magkasunod na nakasentrong pulang guhit ay
   nagkakamukha ang dalawang pamagat. Isa lang ang dapat may ganoon, at
   ang nasa ibaba ang naghahati ng listahan. */

@media (max-width:820px){
  .pband{
    margin-bottom:clamp(16px,3vw,30px);
    padding:clamp(18px,3.4vw,34px) 0 clamp(16px,3vw,30px);
  }
  .pband__arc--l{width:min(74%,520px)}
  .pband__arc--r{width:min(70%,480px)}
}

@media (max-width:560px){
  .pband{
    margin-bottom:clamp(14px,3.6vw,22px);
    padding:clamp(16px,4.4vw,24px) 0 clamp(14px,3.6vw,22px);
  }
  .pband__in{gap:8px}
  .pband__copy .h2{font-size:clamp(26px,7.4vw,34px)}
  /* Mas maliit at mas mataas — nasa itaas lang ito ng nakasentrong
     teksto dito, hindi sa tabi nito. */
  .proddots{width:min(24%,90px);height:clamp(70px,18vw,100px);top:clamp(14px,3.4vw,24px)}
}

/* WALA NANG `.pcat__lead` (Ago 12, 2026). "The three groups" ang laman
   niyon — ikatlong pagsasabi ng iisang bagay sa loob ng isang tanawin,
   kasama ang talata sa itaas at ang 01 02 03 sa card. Kasama sa naalis
   ang pulang guhit na `::after`.

   ⚠ ANG UNANG PUWANG NG `.pcat__hint` ANG UMAKO NG PUWANG NA IWINAN.
     `margin-top:0` iyon noon dahil may pamagat sa itaas nito; kung
     iiwan kong sero ay didikit ang paalala sa talata sa ulo. */
/* Ang nag-iisang nakasulat na paalala na mapipindot ang 23 pangalan.
   ⚠ `#3E4A70` at hindi `--ink-2` (#57618A). 13px lang ito at nakasentro
     sa maputlang asul; 3.73:1 ang `--ink-2` doon — bagsak. Ang #3E4A70
     ay 5.38:1. Kapareho ito ng ginawa sa fineprint ng #savings. */
/* ⚠ `64ch` PA RIN ang takda kahit umikli na ang pangungusap — hindi na
   ito umaabot doon sa kahit anong lapad, kaya wala itong ginagawa
   ngayon kundi bumantay sakaling humaba muli ang teksto.
   ⚠ MAY `margin-top` NA ITO. Nawala ang pamagat na dati'y nasa itaas
     (`.pcat__lead`), at ang puwang niyon ang binabawi nito. */
.pcat__hint{
  position:relative;z-index:2;
  margin:clamp(20px,2.6vw,30px) auto clamp(9px,1vw,12px);max-width:64ch;text-align:center;
  font-size:12.5px;line-height:1.55;color:#3E4A70;
}

/* ⚠ `stretch` ANG PAGKAKAHANAY AT HINDI `start`. Ang bawat card ay
   kasintaas ng sariling laman noon — 12 pangalan ang tape at 4 lang ang
   essentials, kaya 200px ang pagkakaiba ng dalawa at hindi nakahanay
   ang "Ask about these" ng tatlo. Pantay silang lahat sa reference.

   Gumagana ito dahil `margin-top:auto` ang `.pcat__go`: itinutulak niya
   ang sarili sa ilalim ng natitirang puwang, kaya sa pinakamaikling
   card ay bakante lang ang nadaragdag SA IBABA NG LISTAHAN at hindi
   nauunat ang mga pangalan. */
.pcats{
  position:relative;z-index:2;list-style:none;margin:0;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(12px,1.7vw,24px);align-items:stretch;
}
/* ---- ⚠ SARILING KULAY ANG BAWAT PANGKAT (`--ac`) ----
   Tatlong magkaparehong puting card ito noon at navy ang lahat ng
   detalye. Sariling kulay na ang bawat isa, at PAREHONG PAGKAKASUNOD-
   SUNOD ang ginamit dito at sa tatlong card ng #interview — navy,
   electric, pula. Dalawang hilera ng tatlo ang pahina, at magkatugma
   sila; hindi dalawang magkaibang sistema.

   ⚠ `--ac` IS THREE NUMBERS AND NOT A COLOUR (`31,66,128`, not
     `#1F4280`) — so the same token can be used both as a solid
     `rgb(var(--ac))` and at any strength as `rgba(var(--ac),.34)`.
     A hex value cannot do the second. */
.pcat{
  --ac:31,66,128;                    /* fallback if a card has no --ac */
  position:relative;
  /* ⚠ `isolation` is what makes the `z-index:-1` of `::after` below safe —
     see the long note there. Without it the fabric slips behind the whole
     card and vanishes. */
  isolation:isolate;
  display:flex;flex-direction:column;overflow:hidden;
  background:#fff;border:1px solid rgba(31,66,128,.1);border-radius:16px;
  box-shadow:0 20px 40px -30px rgba(31,66,128,.6);
  transition:transform .4s var(--ease),box-shadow .4s var(--ease),border-color .4s ease;
}
/* ⚠ ISA-ISANG DUMARATING ANG TATLONG CARD. Nakasulat na sa markup ang
   `style="--i:0|1|2"` mula pa noong Ago 10 — HINDI ITO GINAGAMIT NG
   KAHIT ANO noon. Dito na ito ginagamit: 110ms ang agwat ng bawat isa,
   kaya hindi sabay-sabay silang sumusulpot. */
.pcat[data-reveal]{transition-delay:calc(var(--i,0) * .11s)}
/* Sariling kulay din ang anino at ang gilid sa hover — doon nakikitang
   ang BUONG card ang tumutugon, hindi lang ang detalye sa loob. */
.pcat:focus-within{
  transform:translateY(-6px);border-color:rgba(var(--ac),.34);
  box-shadow:0 38px 60px -32px rgba(var(--ac),.5);
}
@media (hover:hover){ .pcat:hover{
  transform:translateY(-6px);border-color:rgba(var(--ac),.34);
  box-shadow:0 38px 60px -32px rgba(var(--ac),.5);
} }
/* Hibla ng kulay sa tuktok ng card.
   ⚠ NAKIKITA NA ITO SA PAHINGA (34%), hindi na 0. Sa 0 ay walang kulay
     ang card hangga't walang mouse — at walang mouse sa cellphone, kaya
     doon ay HINDI ITO KAILANMAN LUMALABAS. Ang kulay ang nagsasabi kung
     aling pangkat ito; hindi iyon puwedeng nakadepende sa hover.
   ⚠ `z-index:2` at hindi 4 — MAS MABABA ito sa `.pcat__no` (3), kaya
     nakatago ito sa ilalim ng bilang at hindi tumatawid dito.
   ⚠ `transform:scaleX` at hindi `width` — walang layout na kinakalkula. */
/* ---- ⚠ THE FABRIC IN THE BOTTOM CORNER (Aug 18, 2026 — *"add something
   sa card on here since its too plain"*) ----

   THE SAME ANSWER AS THE DEALERSHIP CARDS ON AUG 13, AND DELIBERATELY SO.
   No new colour was introduced: this and the sunburst on `.pcat__body`
   are both `var(--ac)`, the accent each card already carried in its
   markup since Aug 10. Nothing needs re-tuning per card — the three tint
   themselves.

   THE BOTTOM OF THE CARD IS WHAT WAS LEFT AS BARE WHITE, and it is worst
   on "Packaging Essentials": four names against the tape card's twelve,
   so roughly half the card was empty. This is a diagonal hatch in the
   card's own colour — the same language as the band behind the section:
   FABRIC, not an object.

   ⚠ IT IS NOT A COPY OF THE ICON. The icon is already at the top of the
     card, large and whole; repeating it down here as a watermark would be
     a second copy of the same thing on one card — that is exactly why
     `.pack__wm` was removed from the dealership cards. Hatching is a
     picture of nothing, so it repeats nothing.

   ⚠ THERE IS A `mask` AND IT IS NEEDED. A `repeating-linear-gradient` has
     no end — it simply stops at the edge of its box, leaving a visible
     SQUARE boundary in the middle of the card. The circular mask dilutes
     it inward, so it is only present in the corner and gone before it
     reaches any name.

   ⚠ THE STRENGTH IS `.055`. There is text over the top of it. You should
     not be able to read the stripes; what you should feel is that the
     corner is no longer empty.

   ⚠ `isolation:isolate` ON `.pcat` IS WHAT MAKES THE `z-index:-1` SAFE.
     It gives the card a stacking context of its own, so this is painted
     between the card's background and its contents: it can never bury a
     letter, and it cannot escape backwards behind the whole section.
     Without it, a negative child slips behind the card entirely and
     disappears. */
.pcat::after{
  content:"";position:absolute;z-index:-1;right:0;bottom:0;
  width:64%;height:54%;pointer-events:none;
  background:repeating-linear-gradient(-45deg,
    rgba(var(--ac),.055) 0 6px, rgba(var(--ac),0) 6px 13px);
  -webkit-mask-image:radial-gradient(130% 130% at 100% 100%,#000 10%,transparent 70%);
          mask-image:radial-gradient(130% 130% at 100% 100%,#000 10%,transparent 70%);
}

.pcat::before{
  content:"";position:absolute;z-index:2;left:0;right:0;top:0;height:3px;
  background:rgb(var(--ac));
  transform:scaleX(.34);transform-origin:center;
  transition:transform .55s var(--ease);
}
.pcat:focus-within::before{transform:scaleX(1)}
@media (hover:hover){ .pcat:hover::before{transform:scaleX(1)} }

/* Bilang sa itaas-kaliwa, nakapatong sa larawan. Navy na parisukat na
   bilog ang tatlong sulok lang — sumusunod sa sulok ng card.
   Lumalapad ito at nagiging pula kapag nasa ibabaw ang mouse. */
.pcat__no{
  position:absolute;z-index:3;top:0;left:0;
  display:grid;place-items:center;min-width:38px;height:32px;padding:0 10px;
  border-radius:0 0 10px 0;background:rgb(var(--ac));color:#fff;
  font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.02em;
  transition:padding .45s var(--back),box-shadow .35s var(--ease);
}
.pcat:focus-within .pcat__no{
  padding:0 16px;box-shadow:0 10px 20px -8px rgba(var(--ac),.85);
}
@media (hover:hover){ .pcat:hover .pcat__no{
  padding:0 16px;box-shadow:0 10px 20px -8px rgba(var(--ac),.85);
} }

/* ---- ANG LARAWAN SA ITAAS ----
   TOTOONG LITRATO NG TAPEMATE — ang studio shot ng bawat pangkat na
   ibinigay ng kliyente (Ago 12, 2026). Tingnan ang assets/img/README.txt
   para sa pinagmulan at kung paano ihanda ang kapalit.

   ⚠ 5:2 ANG KAHON AT 3:2 ANG LITRATO — SINASADYA ANG HINDI PAGTUGMA.
     150px ang taas nito sa 1440 (250px noong 3:2). Ito ang pinakamalaki
     sa anim na ginupit para magkasya ang seksyon sa isang screen, at
     ito rin ang hiningi: *"adjust the sizes its too big"*.

   ⚠ `contain` AT HINDI `cover`, AT DITO ITO NAGIGING BUHAY NA BUHAY.
     Sa `cover` ay 40% ng taas ng BAWAT litrato ang puputulin ng
     hindi-pagtugmang iyon — ang tuktok ng rolyo at ang paanan ng anino.
     Sa `contain` ay buo ang litrato at PUTI lang ang naiiwan sa magkabilang
     gilid; hindi iyon nakikita dahil puti rin ang likod ng litrato at ang
     card. Kaya ang hugis ng kahon ay usapin na LANG ng layout.

   ⚠ MAY HANGGANAN ANG PAGPAPAIKLI, AT ANG LITRATO MISMO ANG NAGTATAKDA.
     1.43 ang hugis ng laman ng tape (pulutong ng rolyo, hindi hilera),
     kaya sa 150px na taas ay 215px lang ang lapad nito sa 375px na
     card. Sa mas mababaw pa ay lalong lumiliit ang produkto at lalong
     lumalawak ang puti sa gilid — hindi ito lumalapad. */
/* ⚠ PUTI ANG LIKOD AT WALA NANG GUHIT SA IBABA (Ago 11, 2026).
   Kremang parihaba ito noon (`#F3EFE6`) na may manipis na guhit sa
   paanan — nakikita iyon bilang KAHON sa loob ng puting card, at wala
   iyon sa reference: iisang puting ibabaw ang litrato at ang katawan
   ng card doon.

   ⚠ HINDI NA ALPHA ANG TATLONG LITRATO KUNDI NAKALUTONG PUTI (255).
     `.jpg` na sila at hindi `.png`: litrato ng studio ang mga ito na may
     tunay na anino sa ilalim ng produkto — mapuputol ang aninong iyon ng
     kahit anong flood fill, at may malaking PUTING produkto ang dalawa
     (ang puting Fragile at ang puting pouch) na tatagusan din niyon.
     Nilinis na ang likod papuntang tunay na 255, kaya nawawala ito sa
     puting card — pero NAKASALALAY IYON SA `#fff` SA IBABA.
     ⚠ KAPAG BINAGO ANG LIKOD NG CARD, LILITAW ANG PUTING PARIHABA. */
/* ⚠ `16/9` AT HINDI NA `5/2` (Ago 13, 2026). Hiniling ni Kylie na
   lakihan ang seksyon — isa ito sa pangunahing bahagi ng pahina at 684px
   lang ito noon. Ang litrato ang pinakamalaking nadagdag, at sinasadya
   iyon: TOTOONG STUDIO SHOT ito ng TapeMate, ang tanging bahagi ng
   seksyon na larawan ng produkto mismo, at 150px lang ang taas noon sa
   1440. 211px na ngayon.

   Ang laki ng LITRATO ang pinalaki, hindi ang bakanteng padding — ang
   dagdag na taas ay may ipinapakita. */
.pcat__shot{
  position:relative;display:block;aspect-ratio:16/9;overflow:hidden;
  background:#fff;
}
/* ⚠ SA TATLONG-HALIGING DESKTOP LANG ANG TAKDANG ITO (`min-width:901px`
   — doon nagsisimula ang tatlong haligi). Para sa MABABAW na screen ito:
   sa 1080 ay 184px ang 17vh, mas malaki sa 150px na ibinibigay ng 5:2,
   kaya walang nangyayari; sa 768 na laptop ay 131px ito at ito ang
   masusunod. Kusang lumiliit ang litrato kapag walang taas ang screen.

   ⚠ HUWAG ITONG ILAGAY SA BASE. Doon ito noon, at sa tablet ay 168px
     ang naging taas ng BUONG-LAPAD na ikatlong card (774px) — 252px na
     litrato sa gitna ng 774px na puti. Ang cap na sinukat sa taas ng
     screen ay walang kinalaman sa card na ang lapad ang problema. */
@media (min-width:901px){
  /* ⚠ `26vh` na, dating `17vh`. Kung naiwan ang 17vh ay iyon na ang
     masusunod sa halos LAHAT ng laptop (153px sa 900px na screen) at
     mananatiling 5:2 ang hitsura kahit 16/9 na ang nakasulat sa itaas —
     ang cap ang tunay na sukat, hindi ang aspect ratio. Sa 26vh ay 234px
     sa 900px na screen, kaya ang 16/9 (211px) ang nangunguna at ang cap
     ay bumabalik sa dating tungkulin: bantay lang sa mababaw na screen. */
  .pcat__shot{max-height:26vh}
}
.pcat__shot img{
  width:100%;height:100%;display:block;object-fit:contain;
  transition:scale .55s var(--ease);
}
/* ⚠ MAY INIWANG LUWAG SA PALIGID NG PRODUKTO SA LOOB MISMO NG LITRATO
   (3.5% sa gilid, 5% sa taas-ibaba) AT ITO ANG DAHILAN. Ang `scale`
   dito ay nagpapalaki sa loob ng kahong may `overflow:hidden`, kaya
   2.25% ng bawat gilid ang naiaalis sa hover. Kapag dumidikit ang
   produkto sa gilid ng litrato, KINAKAGAT ito ng hover. Kaya kung
   papalitan ang litrato, iwanan din ang luwag na iyon — o alisin ito. */
@media (hover:hover){ .pcat:hover .pcat__shot img{scale:1.045} }

.pcat__body{
  display:flex;flex-direction:column;flex:1;
  /* ⚠ VERTICAL PADDING ONLY WAS ADDED HERE — NOTHING AT THE SIDES. Every
     pixel at the side is two pixels lost from the two columns of names
     inside. I tried 28px and "Thermal Label Sticker" became TWO LINES at
     1440; at 24px it was 901px that gave way, the tightest three-column
     width. The extra side room lives in `@media (min-width:1150px)` —
     that is the only place with width to spare. */
  padding:clamp(11px,1.5vw,20px) clamp(14px,1.7vw,22px) 0;
  /* ---- THE SUNBURST BEHIND THE ICON (Aug 18, 2026) ----
     On the body's OWN background and not on a pseudo-element: an
     element's background is THE VERY FIRST THING painted, so there is no
     z-index to keep watch over and nothing it can ever bury. Its centre
     sits on the icon, so it reads as rising behind it — that is where the
     eye lands first.

     The second layer is the faint wash that stops the body reading as
     bare white. Both are `var(--ac)`, so each card tints itself: navy for
     the tape, blue for the film, red for the essentials. No colour is
     written here. */
  background:
    radial-gradient(130px 96px at clamp(30px,3.2vw,44px) clamp(26px,2.6vw,36px),
                    rgba(var(--ac),.13), rgba(var(--ac),0) 72%),
    linear-gradient(180deg, rgba(var(--ac),.05) 0%, rgba(var(--ac),0) 58%);
}
/* Ikono sa kaliwa, pangalan sa kanan — isang lockup, hindi salansan.
   `align-items:center` para nasa gitna ng dalawang linya ang ikono. */
.pcat__head{display:flex;align-items:center;gap:clamp(10px,1.2vw,14px)}
/* ⚠ HINDI `aspect-ratio` ANG TAAS DITO KUNDI HAYAGANG `height`, at may
   `flex:none`. Ang `.pcat__body` ay column flex, at ang mga anak niyon
   ay may `min-height:auto` — TINATALO NIYON ANG `aspect-ratio` kapag mas
   mataas ang laman. Nangyari iyon: `height:52%` ang svg, at sa magulang
   na walang tiyak na taas ay nagiging `auto` iyon — kaya lumaki ito sa
   likas na taas ng ikono at naging 150px na nakaunat na bareta ang dapat
   sanang 52px na parisukat. Sa hayagang `height` ay may masusukat na ang
   `52%`, at hindi na kailangang manghula ang layout. */
/* ⚠ BILOG NA ITO, HINDI NA PARISUKAT NA BILOG ANG SULOK (13px) —
   ganoon ito sa reference, at bilog din ang ikono sa navy na bareta sa
   ilalim ng seksyon (`.hunt__ico`), kaya iisang pamilya na sila. */
.pcat__ico{
  flex:none;display:grid;place-items:center;
  width:clamp(34px,3.4vw,46px);height:clamp(34px,3.4vw,46px);
  border-radius:50%;color:#fff;
  /* ⚠ MAY PATONG NA 14% NA ITIM AT KAILANGAN IYON. Puti ang ikono sa
     loob, at ang electric (#3B9CFF) ng ikalawang card ay 2.84:1 lang sa
     puti — kulang sa 3:1 na pinakamababa para sa guhit na may kahulugan.
     Sa 14% ay 3.6:1 ito, at ang dalawang madilim na kulay ay bahagyang
     lumalalim lang. Iisang linya para sa tatlo — mas mabuti kaysa
     ikalawang variable na para lang sa isang card. */
  background:linear-gradient(rgba(0,0,0,.14),rgba(0,0,0,.14)),rgb(var(--ac));
  box-shadow:0 12px 22px -14px rgba(var(--ac),.85);
  transition:transform .5s var(--back),box-shadow .4s var(--ease);
}
.pcat:focus-within .pcat__ico{
  transform:translateY(-2px) rotate(-7deg);
  box-shadow:0 18px 28px -13px rgba(var(--ac),.95);
}
@media (hover:hover){ .pcat:hover .pcat__ico{
  transform:translateY(-2px) rotate(-7deg);
  box-shadow:0 18px 28px -13px rgba(var(--ac),.95);
} }
.pcat__ico svg{width:52%;height:52%}
.pcat__kick{
  margin:0;font-family:var(--display);font-weight:700;
  font-size:10.5px;letter-spacing:.15em;text-transform:uppercase;color:var(--red);
}
.pcat__name{
  margin:2px 0 0;font-family:var(--display);font-weight:800;
  font-size:clamp(13.5px,1.55vw,22px);line-height:1.16;letter-spacing:-.022em;
  text-transform:uppercase;color:var(--navy);
}

/* ---- ANG `+` SA ULO ----
   Dalawang guhit lang ang laman: pahalang at patayo. Kapag bukás ang
   listahan (`aria-expanded="true"`) ay nawawala ang patayo — `−` ang
   nakikita. Umiikot ang buong pindutan sa paglipat, kaya hindi biglaang
   pagpapalit ng hugis ang nakikita kundi paggalaw.

   `aria-expanded` ang pinagbabatayan at hindi isang klase: iisa lang ang
   pinagmumulan ng katotohanan, at iyon din ang binabasa ng screen reader. */
/* ⚠ BILOG NA ITO AT MAS MALAKI (Ago 11, 2026) — parisukat na may 9px
   na sulok ito noon. Bilog na pindutan sa maputlang asul ang nasa
   reference, at bilog din ang ikono sa kaliwa nito, kaya magkapares
   sila sa magkabilang dulo ng ulo ng card. */
.pcat__more{
  flex:none;margin-left:auto;position:relative;
  width:clamp(30px,3.1vw,38px);height:clamp(30px,3.1vw,38px);
  border:0;border-radius:50%;cursor:pointer;
  background:rgba(59,156,255,.13);
  transition:background .3s ease,transform .45s var(--back);
}
@media (hover:hover){ .pcat__more:hover{background:rgba(217,4,41,.12)} }
.pcat__more i{
  position:absolute;left:50%;top:50%;width:12px;height:2px;border-radius:2px;
  background:var(--navy);translate:-50% -50%;
  transition:transform .45s var(--back),background .3s ease,opacity .3s ease;
}
.pcat__more i:nth-child(2){transform:rotate(90deg)}
@media (hover:hover){ .pcat__more:hover i{background:var(--red)} }
.pcat__more[aria-expanded="true"]{transform:rotate(180deg)}
.pcat__more[aria-expanded="true"] i:nth-child(2){transform:rotate(90deg) scaleX(0);opacity:0}
/* ⚠ PALASO ANG NASA REFERENCE DITO, HINDI `+`/`−`, AT HINDI KO IYON
   GINAYA. Ang palaso ay nangangako ng PAGPUNTA SA IBANG LUGAR; ang
   pindutang ito ay TUMUTUPI ng listahang nasa ilalim mismo nito. Kung
   palaso ang ilalagay, dalawang bagay ang mali nang sabay: sinungaling
   ang tanda, at nawawala ang tanging paalala kung ano ang mangyayari
   sa pagpindot.

   ⚠ ANG PALASO NG REFERENCE ay nasa "View all …" sa ilalim ng card —
   nandoon din ito sa atin, at doon ito tama: may pinupuntahan iyon. */

/* ---- ANG LISTAHAN ----
   Dalawang haligi kapag may kasya. Ang `column-count` at hindi grid:
   pinupuno nito ang unang haligi bago ang pangalawa, kaya nababasa
   pababa-tapos-pakanan — iyon ang inaasahan sa listahan ng pangalan. */
.pcat__list{
  list-style:none;margin:clamp(8px,.9vw,10px) 0 0;
  padding-top:clamp(8px,.9vw,10px);border-top:1px solid rgba(31,66,128,.1);
  columns:2;column-gap:clamp(8px,1vw,14px);
  /* ---- ANG PAGTUPI ----
     `max-height` at hindi `grid-template-rows:0fr`: kailangan ng huli ng
     dagdag na balot sa markup, at ang `columns:2` dito ay hindi tumatakbo
     sa loob ng grid item nang hindi nasisira ang dalawang haligi.

     320px ang hangganan — 6 na hilera × 2 haligi ang pinakamahaba (ang
     tape, 12 aytem) at mga 175px lang iyon sa desktop, mga 250px sa
     cellphone. Doble ang taas ng hangganan kaysa sa pinakamahaba, kaya
     hindi ito nakakaputol; ang bilis lang ng pagbukas ang bahagyang
     naiiba sa pagitan ng maikli at mahabang listahan. */
  max-height:320px;overflow:hidden;
  transition:max-height .5s var(--ease),opacity .34s ease,
             margin-top .5s var(--ease),padding-top .5s var(--ease);
}
.pcat.is-shut .pcat__list{max-height:0;opacity:0;margin-top:0;padding-top:0}
.pcat__list > li{break-inside:avoid;margin-bottom:2px}

/* ---- ISA-ISANG DUMARATING ANG PANGALAN ----
   Pagkatapos ng card mismo. Ang pagdating na sunod-sunod ay
   nagsasabing MAY MGA BAGAY DITO, hindi isang bloke ng teksto — at
   iyon mismo ang unang hakbang sa pagsasabing mapipindot sila.

   ⚠ `backwards` AT HINDI `forwards`. Hawak ng `backwards` ang UNANG
     keyframe habang naghihintay ang antala at natatapos ito sa normal
     na estado. Sa `forwards` ay nakapiit ang huling keyframe
     pagkatapos, at hindi na kayang baguhin ng hover ang `transform`.

   ⚠ `nth-child` HANGGANG 12 LANG, at 12 ang pinakamahabang listahan
     (ang tape). Kung lalampas ang isang pangkat sa 12, ang ika-13
     pataas ay dadating nang WALANG antala — hindi ito nasisira, mas
     maaga lang. Magdagdag ng linya rito kung mangyari iyon.

   ⚠ ANG `--i` NG CARD AY KASAMA SA KUWENTA, kaya ang pangalan sa
     ikatlong card ay naghihintay ng sariling card bago magsimula. */
@keyframes pnameIn{ from{opacity:0;transform:translateX(-9px)} }
.pcat.is-in .pcat__list > li{
  animation:pnameIn .46s var(--ease) calc(var(--i,0) * .11s + .26s) backwards;
}
.pcat.is-in .pcat__list > li:nth-child(2) {animation-delay:calc(var(--i,0)*.11s + .30s)}
.pcat.is-in .pcat__list > li:nth-child(3) {animation-delay:calc(var(--i,0)*.11s + .34s)}
.pcat.is-in .pcat__list > li:nth-child(4) {animation-delay:calc(var(--i,0)*.11s + .38s)}
.pcat.is-in .pcat__list > li:nth-child(5) {animation-delay:calc(var(--i,0)*.11s + .42s)}
.pcat.is-in .pcat__list > li:nth-child(6) {animation-delay:calc(var(--i,0)*.11s + .46s)}
.pcat.is-in .pcat__list > li:nth-child(7) {animation-delay:calc(var(--i,0)*.11s + .50s)}
.pcat.is-in .pcat__list > li:nth-child(8) {animation-delay:calc(var(--i,0)*.11s + .54s)}
.pcat.is-in .pcat__list > li:nth-child(9) {animation-delay:calc(var(--i,0)*.11s + .58s)}
.pcat.is-in .pcat__list > li:nth-child(10){animation-delay:calc(var(--i,0)*.11s + .62s)}
.pcat.is-in .pcat__list > li:nth-child(11){animation-delay:calc(var(--i,0)*.11s + .66s)}
.pcat.is-in .pcat__list > li:nth-child(12){animation-delay:calc(var(--i,0)*.11s + .70s)}

/* PINDUTAN ULI ANG BAWAT PANGALAN — pero IBA ANG BINUBUKSAN NITO.

   Tatlong yugto ang parteng ito, at mahalagang malinaw ang pagkakaiba:
     Ago 10  pindutan → naglalagay sa "My list" (lumulutang na cart)
     Ago 11  teksto   → tinanggal ang listahan; walang mapipindot
     Ago 11  pindutan → nagbubukas ng LARAWAN AT SUKAT ng produkto

   ⚠ HINDI ITO PAGBABALIK NG CART. Walang naiipon, walang dami, walang
     bilang sa sulok ng screen. Ang bumubukas ay isang pahayag kung ANO
     ang produkto — litrato mula sa sariling katalogo ng TapeMate, tatlong
     katangian, at ang tunay na sukat. Pagpapakilala iyon, at iyon ang
     buong layunin ng pahina.

   ⚠ TULDOK NA ANG TANDA, HINDI NA TSEK (Ago 11, 2026). Tsek ito noon,
     sunod sa naunang reference; tuldok ang nasa bagong reference at
     mas tama iyon dito. Ang tsek ay may sinasabi — "tapos na", "kasama
     na", "nasuri na" — at wala sa tatlong iyon ang totoo: LISTAHAN
     lang ito ng dalang produkto. Ang tuldok ay walang sinasabi, at
     iyon mismo ang tama.

     Nagkataon din na ang tsek ang dating tanda ng "nasa listahan mo
     na" noong may lumulutang na listahan pa. Kung babalik iyon
     balang-araw, malinis na ang tanda — puwede nang gamitin uli ang
     tsek doon nang walang magkakabanggaan. */
/* ---- ⚠ ANO ANG NAGSASABING MAPIPINDOT ITO ----
   Ang pangalan lang ang nakasulat sa bawat hilera. Walang palaso, walang
   "＋", walang anumang tandang nasa kanan — AT HINDI IYON PAGPILI.
   Sinukat ang haligi sa tunay na lapad (scratchpad/pitem-lapad.html):

       390px na cellphone   haligi 146.5px, pinakamahabang pangalan
                            118.8px ("Thermal Label Sticker")
                            → 7.7px na lang ang natitira
       1024px               → 15.5px
       1440px               → 15.3px

   Ang pinakamaliit na palasong makikita pa ay 5px kasama ang puwang nito
   — at ang 23 pangalan ay walang ni isang dalawang-linya ngayon.
   Anumang tandang kukuha ng lapad ay sisira niyon sa cellphone.

   Kaya APAT na bagay ang nagsasabing mapipindot, at wala sa kanila ang
   kumukuha ng lapad:

     1. MAY SARILING LIKOD ANG BAWAT HILERA (`rgba(31,66,128,.04)`).
        Hilera ito na may hugis, hindi linya ng teksto.
     2. NAVY ANG TITIK, hindi na `--ink-2` na kulay-abo. Ang teksto sa
        paligid nito (paliwanag, fineprint) ay kulay-abo — magkaiba sila
        ngayon, at ang mas maitim ang mapipindot.
     3. SUMASAGOT ITO SA DALIRI AT SA MOUSE — asul na likod, singsing sa
        gilid, at lumalaki ang pulang tuldok.
     4. MAY NAKASULAT NA PANGUNGUSAP sa itaas ng tatlong card
        (`.pcat__hint`) na nagsasabi kung ano ang bubukas.

   ⚠ 2px LANG ANG DINAGDAG SA PADDING (4px → 5px sa kaliwa, 5px sa
     kanan). Sa 7.7px na natitira sa 390px ay 5.7px pa rin ang bakante —
     hindi pa rin nagiging dalawang linya ang pinakamahabang pangalan.
     HUWAG NANG DAGDAGAN. */
.pitem{
  position:relative;display:flex;align-items:baseline;gap:8px;width:100%;
  padding:3px 5px 3px 4px;border:0;text-align:left;cursor:pointer;
  background:rgba(31,66,128,.04);
  font:inherit;font-size:clamp(10.5px,1vw,13.2px);line-height:1.45;
  font-weight:500;color:var(--navy);
  border-radius:7px;
  transition:color .25s ease,background-color .25s ease,
             box-shadow .25s ease,transform .3s var(--back);
}
/* ⚠ SA DESKTOP LANG ANG MAS MALUWAG NA HILERA, at may nakasulat na
   dahilan sa itaas kung bakit hindi sa base: sa 390px ay 5.7px na lang
   ang bakante ng pinakamahabang pangalan ("Thermal Label Sticker") at
   dalawang linya ito kapag may dinagdag pa. Nasa 901px pataas ito, kung
   saan mahigit 100px ang bakante — walang naaabot ng dagdag na ito sa
   cellphone. Ganoon din ang `font-size`: `clamp()` ang nagbabantay
   (10.5px pa rin ang pinakamaliit) at may sariling 13px ang ≤600px. */
/* ---- ⚠ DALAWANG MASIKIP NA BANDA — DATI NA ITO, HINDI BAGO ----
   Sinukat nang paisa-isa (Ago 13, 2026) habang pinapalaki ang seksyon,
   at LUMITAW na dalawang lapad ang bumabagsak kahit bago pa ang
   pagpapalaki. Nakakabit ang buong hanay sa gilid at hindi sa taas, kaya
   walang kinalaman ang mas malaking litrato — nakumpirma: pareho ang
   `gap`, ang `padding-inline` at ang `font-size` sa dalawang bandang ito
   bago at pagkatapos.

     901–999px   ang PINAKAMASIKIP na tatlong-haligi. 273px lang ang card
                 sa 901 (nagiging dalawa ang haligi sa 900 pababa), kaya
                 mga 118px ang bawat haligi ng pangalan — kulang para sa
                 "Thermal Label Sticker" at "Double Sided (Foam)".

     ≤380px      Sinukat sa 390px ang dating hanay at 7.7px ang natira.
                 Wala nang natitira sa 360px — at karaniwang lapad iyon
                 (iPhone SE, maraming Android), hindi gilid na kaso.

   Ang lunas ay pareho sa dalawa at ito lang ang pinakamaliit na sapat:
   bawasan ang padding sa gilid doon mismo sa masikip, huwag saanman pa.
   WALANG NAAABOT NITO ANG 390px — nakatakda sa 380px ang itaas, kaya
   buo pa rin ang sukat na pinag-ingatan ng dating tala. */
@media (min-width:901px) and (max-width:999px){
  .pcat__body{padding-inline:12px}
  .pitem{padding-left:3px;padding-right:3px}
}
@media (max-width:380px){
  .pcat__body{padding-inline:12px}
  .pitem{font-size:12.2px;padding-left:3px;padding-right:3px}
}

/* ---- ⚠ 1150px ANG HANGGANAN NG PALUWAG SA GILID, AT SINUKAT ITO ----
   Sa 900px pababa ay dalawa o isang haligi ang `.pcats`, kaya maluwag.
   Ang MASIKIP ay ang 901–1149: tatlong haligi na sa pinakamakipot na
   lapad, at 272px lang ang card sa 901. Doon ay 5.7px na lang ang
   bakante ng "Thermal Label Sticker" — pareho ng dating problema sa
   390px, iba lang ang pinanggalingan.

   Sinukat: sa 901px ay naging dalawang linya ang dalawang pangalan nang
   idinagdag ko ang paluwag sa buong desktop. Kaya nasa 1150px ito, kung
   saan 425px na ang card. Sa 901–1149 ay walang nabago sa gilid — buo
   pa rin ang dating sukat doon. */
@media (min-width:1150px){
  .pcats{gap:clamp(24px,2vw,30px)}
  .pcat__body{padding-inline:clamp(22px,1.8vw,26px)}
  .pitem{padding:5px 6px 5px 6px;border-radius:8px}
}
.pitem::before{
  content:"";flex:none;width:5px;height:5px;border-radius:50%;
  background:rgb(var(--ac));
  /* Ang tuldok ay nasa gitna ng UNANG LINYA at hindi sa baseline nito.
     `align-items:baseline` ang `.pitem`, kaya ang ilalim ng bilog ang
     tatapat sa ilalim ng titik kung walang pag-aangat — mukha itong
     nalalaglag. */
  transform:translateY(-4px);
  transition:transform .35s var(--back),background-color .25s ease;
}
/* Sariling kulay ng pangkat ang sumasagot, hindi iisang asul sa tatlo —
   kaya ang hilera at ang card na kinabibilangan nito ay iisang bagay. */
.pitem:focus-visible{
  background:rgba(var(--ac),.15);
  box-shadow:inset 0 0 0 1px rgba(var(--ac),.42);
}
@media (hover:hover){ .pitem:hover{
  background:rgba(var(--ac),.15);
  box-shadow:inset 0 0 0 1px rgba(var(--ac),.42);
} .pitem:hover{transform:translateX(3px)} }
.pitem:focus-visible::before{
  transform:translateY(-4px) scale(1.6);
}
@media (hover:hover){ .pitem:hover::before{
  transform:translateY(-4px) scale(1.6);
} }
/* ⚠ HAYAGANG SINGSING PARA SA KEYBOARD. Ang `:hover` at ang
   `:focus-visible` ay magkaparehong likod sa itaas — pero hindi sapat
   ang likod para sa taong tumatalon sa Tab: kailangan ng nakikitang
   hangganan na may kaibahan sa likod. */
.pitem:focus-visible{outline:2px solid var(--electric);outline-offset:1px}
/* Ang pangalan mismo ang tanging nakasulat, kaya hindi nito sinasabi kung
   ano ang mangyayari sa pagpindot. Ang `aria-label` ang nagsasabi niyon —
   isinusulat ito ng JS (seksyon 6) para hindi 23 beses na nakasulat sa
   markup ang parehong pangungusap. */

/* Nakasentro at may sariling guhit sa itaas, gaya ng reference — ito ang
   dulo ng card, kaya kailangan itong may sariling hilera. `margin-top:auto`
   ang nagtutulak nito sa ilalim kahit magkaiba ang haba ng listahan.

   ⚠ "View Products" ang nakasulat sa reference. Hindi ko iyon ginamit:
     WALANG pahina ng produkto — nasa card na mismo ang buong listahan,
     at ang tanging patutunguhan ay ang porma ng tanong. Kung gusto mong
     "View Products" pa rin ang mabasa, ISANG SALITA lang ang papalitan
     dito — pero mangangako iyon ng pahinang wala. */
.pcat__go{
  /* Lumalabas sa padding ng `.pcat__body` para umabot sa dalawang gilid
     ng card ang guhit sa itaas — kapareho ito ng padding, kabaligtaran
     ang tanda, kaya kusa itong sumusunod kapag binago ang isa. */
  margin-top:auto;margin-inline:calc(-1 * clamp(14px,1.7vw,22px));
  display:flex;align-items:center;justify-content:center;gap:7px;
  padding:clamp(12px,1.5vw,16px) 0;
  border-top:1px solid rgba(31,66,128,.1);
  font-family:var(--display);font-weight:700;font-size:clamp(11.5px,1.05vw,13.5px);
  /* ⚠ NAVY NA ITO, PULA NOON. Pula ang tuldok ng bawat pangalan sa
     listahan sa itaas nito; kung pula rin ang pindutan ay 12 pulang
     bagay ang magkakaagawan sa iisang card. Navy ito sa reference at
     iyon ang tama — ang pula ay para sa PAGPINDOT (ang "Request a
     Quote"), hindi sa bawat bagay na nakasulat. */
  color:var(--navy);text-decoration:none;position:relative;overflow:hidden;
  transition:color .3s ease;
}
/* Maputlang pula na dumadaloy mula sa kaliwa. `transform:scaleX` at
   hindi `background-color`: isang layer lang ang ginagalaw at may
   direksyon ito — pumapasok ito, hindi lang lumilitaw. */
.pcat__go::before{
  content:"";position:absolute;inset:0;z-index:-1;background:rgba(217,4,41,.07);
  transform:scaleX(0);transform-origin:left;
  transition:transform .42s var(--ease);
}
.pcat__go:focus-visible::before{transform:scaleX(1)}
@media (hover:hover){ .pcat__go:hover::before{transform:scaleX(1)} }
.pcat__go:focus-visible{color:var(--red)}
@media (hover:hover){ .pcat__go:hover{color:var(--red)} }
.pcat__go .ico{width:14px;height:14px;transition:transform .3s var(--ease)}
.pcat__go:focus-visible .ico{transform:translateX(4px)}
@media (hover:hover){ .pcat__go:hover .ico{transform:translateX(4px)} }

/* WALA NANG `.pcat__tip` (Ago 12, 2026). "Nothing is ordered from this
   page." ang laman niyon; inalis ang pangungusap sa hiling ni Kylie.

   ⚠ MALI NA ANG DATING NAKASULAT DITO. "Nasa `.contact__note` at
     `.calc__fine` pa rin ang parehong paalala" ang tala noon — wala na
     ang dalawang iyon: naalis ang `.calc__fine` kasama ng #savings at
     ang `.contact__note` kinabukasan (Ago 13). WALA NANG "Nothing is
     ordered" SA BUONG PAHINA.

     Nasa #faq na lang ang panuntunan, at mas tuwiran pa nga ito roon:
     "This is also not an online shop; it's an introduction to the
     products." Kailangan lang buksan ang tanong para mabasa. */


/* =========================================================
   8b. ANG MODAL NG PRODUKTO   (muling itinayo Ago 19, 2026)
   =========================================================
   Bumubukas kapag pinindot ang pangalan sa listahan ng pangkat.

   ⚠ WALANG ANIMATION SA `display`. `[hidden]` ang nagtatago, at hindi
     iyon kayang i-transition — kaya dalawa ang hakbang: inaalis muna ng
     JS ang `hidden`, saka (sa susunod na frame) idinaragdag ang `.is-on`.

   ⚠ NASA `.pmodal__box` ANG SCROLL AT HINDI SA `.pmodal`. Kung sa labas
     ito, ang malaking modal sa maliit na screen ay gumugulong kasama ang
     dilim sa likod at nawawala ang pindutang pansara sa itaas. */
.pmodal{
  position:fixed;inset:0;z-index:90;
  display:grid;place-items:center;padding:clamp(12px,3vw,34px);
}
.pmodal[hidden]{display:none}

.pmodal__veil{
  position:absolute;inset:0;background:rgba(12,26,54,.62);
  -webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);
  opacity:0;transition:opacity .42s var(--ease);
}
.pmodal.is-on .pmodal__veil{opacity:1}

/* ⚠ 900px NA NGAYON AT HINDI 720px. Dalawang hanay ang loob at may
   sariling laman ang bawat isa: sa 720px ay 300px lang ang teksto at
   nababali ang "Available sizes" sa dalawang linya. */
.pmodal__box{
  position:relative;width:min(900px,100%);max-height:calc(100dvh - clamp(24px,6vw,68px));
  overflow-y:auto;overscroll-behavior:contain;
  /* ⚠ HINDI PATAG NA PUTI. Sa ipinadalang disenyo ay may bahagyang
     kulay-langit sa kanang-taas at mainit na kulay-krema sa ibaba —
     iyon ang nag-aalis sa pagka-blangko ng malaking puting kahon. */
  background:linear-gradient(152deg,#FFFFFF 0%,#FDFBF7 52%,#FBF3E9 100%);
  border-radius:clamp(16px,2vw,26px);
  box-shadow:0 46px 90px -34px rgba(9,20,44,.72);
  /* Ang gitna ng pinindot na pangalan ang pinanggagalingan ng paglaki —
     isinusulat ng JS ang `--ox/--oy`. Kaya mula sa pinindot ito lumalaki
     at hindi mula sa gitna ng screen: may pinanggalingan ang kilos. */
  transform-origin:var(--ox,50%) var(--oy,50%);
  opacity:0;transform:translateY(24px) scale(.93);
  transition:opacity .34s var(--ease),transform .5s var(--back);
}
.pmodal.is-on .pmodal__box{opacity:1;transform:none}

/* ---- ANG TINT AT ANG TULDOK SA KANANG-TAAS ----
   ⚠ ISANG `<span>` ANG DALAWA: `background` ang bughaw na tint,
     `::after` ang tuldok na lambat. Dalawang elemento sana ito, pero
     dekorasyon silang dalawa at magkapatong — walang dahilan para
     dalawang node.
   ⚠ `pointer-events:none` — nasa ibabaw siya ng kahon at sasagipin niya
     ang bawat pindot kung wala ito, kasama ang × sa ilalim niya. */
.pmodal__glow{
  position:absolute;right:0;top:0;width:62%;height:56%;pointer-events:none;
  border-radius:0 clamp(16px,2vw,26px) 0 0;overflow:hidden;
  background:radial-gradient(120% 100% at 100% 0,rgba(59,156,255,.16),rgba(59,156,255,0) 68%);
}
.pmodal__glow::after{
  content:"";position:absolute;right:0;top:0;width:46%;height:52%;
  background-image:radial-gradient(rgba(31,66,128,.3) 1px,transparent 1px);
  background-size:9px 9px;
  -webkit-mask-image:radial-gradient(120% 120% at 100% 0,#000,transparent 72%);
          mask-image:radial-gradient(120% 120% at 100% 0,#000,transparent 72%);
}

.pmodal__x{
  position:absolute;right:clamp(12px,1.4vw,20px);top:clamp(12px,1.4vw,20px);z-index:4;
  width:38px;height:38px;border:0;border-radius:50%;cursor:pointer;
  display:grid;place-items:center;background:#fff;color:var(--navy);
  box-shadow:0 6px 16px -8px rgba(9,20,44,.5);
  transition:background .28s ease,color .28s ease,transform .4s var(--back);
}
.pmodal__x svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.2}
@media (hover:hover){ .pmodal__x:hover{background:var(--red);color:#fff;transform:rotate(90deg)} }

/* ---- litrato sa kaliwa, teksto sa kanan ----
   ⚠ `.86fr` AT HINDI `1fr`. May sariling laman na ang kanan ngayon
     (pangkat, pangalan, paglalarawan, sukat, dalawang tatak), kaya siya
     ang dapat mas malapad — pero hindi masyado: ANG LITRATO ANG
     SINASAGOT NG MODAL NA ITO ("ano ba ang hitsura nito?"), at sa
     `.7fr` ay nagiging tanda na lang siya. */
.pmodal__top{
  position:relative;z-index:1;
  display:grid;grid-template-columns:.86fr 1fr;
  gap:clamp(18px,2.6vw,34px);
  padding:clamp(20px,2.8vw,34px) clamp(20px,2.8vw,34px) clamp(16px,2vw,24px);
  /* ⚠ `center` MULA NANG MAWALA ANG HILERA NG SUKAT (Ago 20, 2026).
     Parisukat ang litrato (`aspect-ratio:1`), kaya siya ang nagtatakda
     ng taas ng hilera. Noong may sukat pa ay halos magkasingtaas ang
     dalawang haligi; nang matanggal iyon ay umikli ang teksto ng mga
     90px at nagmukhang nakabitin sa itaas, may butas sa ilalim.
     Sa `center` ay nasa gitna siya ng litrato — pantay ang bigat.
     ▶ Kung babalik ang mahabang laman sa kanan, walang epekto ito:
       kapag siya na ang mas mataas ay wala nang gitnang ilalagay. */
  align-items:center;
}

/* ---- ANG LITRATO ---- */
.pmodal__gal{display:grid;align-content:start;gap:clamp(10px,1.2vw,14px)}
.pmodal__shot{
  display:block;aspect-ratio:1;border-radius:clamp(12px,1.4vw,18px);overflow:hidden;
  background:linear-gradient(160deg,#FBFCFE,#F1F4F8);
  box-shadow:inset 0 0 0 1px rgba(31,66,128,.07);
}
.pmodal__shot img{width:100%;height:100%;object-fit:cover;display:block}

/* ⚠ NAKATAGO HANGGA'T ISA LANG ANG LITRATO — ang JS ang nag-aalis ng
   `hidden`. Tingnan ang babala sa index.html: isang litrato lang ang
   ipinadala kada produkto. */
.pmodal__thumbs{list-style:none;margin:0;padding:0;display:flex;gap:8px}
.pmodal__thumbs[hidden]{display:none}
.pmodal__thumbs button{
  width:clamp(52px,4.6vw,66px);aspect-ratio:1;padding:4px;cursor:pointer;
  border-radius:10px;border:1.8px solid var(--line-2);background:#fff;
  transition:border-color .25s var(--ease),transform .3s var(--back)}
@media (hover:hover){ .pmodal__thumbs button:hover{transform:translateY(-2px)} }
.pmodal__thumbs button[aria-pressed="true"]{border-color:var(--red)}
.pmodal__thumbs img{width:100%;height:100%;object-fit:contain;display:block}

/* ---- ANG TEKSTO ---- */
.pmodal__copy{display:grid;align-content:start;min-width:0}
/* ⚠ PILL NA MAY GILID AT HINDI BUONG PULA. Nasa itaas mismo ng pangalan
   siya; ang buong pulang pill ay mas malakas pa kaysa sa mismong
   pangalan, at ang pangalan ang pinakamahalaga sa kahon na ito. */
.pmodal__kick{
  justify-self:start;margin:0 0 clamp(10px,1.2vw,14px);
  padding:6px 13px;border-radius:99px;
  border:1.4px solid rgba(217,4,41,.42);color:var(--red);
  font-family:var(--display);font-weight:800;font-size:10.5px;
  letter-spacing:.13em;text-transform:uppercase;
}
.pmodal__name{
  margin:0;font-family:var(--display);font-weight:800;
  font-size:clamp(24px,3vw,42px);line-height:1.08;letter-spacing:-.03em;color:var(--navy);
}
.pmodal__rule{display:block;width:46px;height:3.5px;border-radius:2px;background:var(--red);
  margin:clamp(12px,1.4vw,16px) 0 clamp(12px,1.4vw,16px)}
/* Kusang nawawala kapag walang laman — hindi kailangang malaman ng JS
   ang tungkol sa puwang. */
.pmodal__desc{margin:0;font-size:clamp(12.6px,1vw,15px);line-height:1.62;color:var(--ink-2);max-width:44ch}
.pmodal__desc:empty{display:none}

/* ⚠ TINANGGAL ANG BUONG HILERA NG SUKAT — Ago 20, 2026, hiling ni Kylie:
   "remove the concept of available sizes since its not accurate."
   Kasama rito ang .pmodal__lbl ("AVAILABLE SIZES"), ang .pmodal__sizes
   at ang .pmz__tick. ZERO na ang gamit ng apat na klase sa markup at sa
   JS bago tinanggal — sinuri bawat isa.
   ▶ Kung may dumating na TUNAY na listahan ng sukat mula sa TapeMate,
     nasa kasaysayan ng file na ito ang buong bloke: ang hilera ng
     radiogroup, ang tsek sa napili at ang pulang anyo ng "Fully
     customizable". Ang data-sizes sa bawat .pitem ang dating
     pinagmulan ng laman. */

/* ---- ANG DALAWANG TATAK ---- */
.pmodal__facts{list-style:none;margin:clamp(16px,2vw,22px) 0 0;padding:0;display:grid;gap:clamp(9px,1vw,13px)}
.pmodal__facts li{display:flex;align-items:center;gap:11px;
  font-size:clamp(12px,.95vw,14.4px);color:var(--navy);font-weight:500}
.pmodal__facts i{
  flex:none;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  background:rgba(59,156,255,.15);color:var(--navy)}
.pmodal__facts svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2.6}

/* =========================================================
   ANG PAANAN
   ========================================================= */
.pmodal__foot{
  position:relative;z-index:1;
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;gap:clamp(12px,1.6vw,18px);
  padding:clamp(16px,2vw,24px) clamp(20px,2.8vw,34px) clamp(14px,1.6vw,20px);
  border-top:1px solid var(--line-2);
  background:linear-gradient(180deg,rgba(251,241,227,.55),rgba(251,241,227,.9));
}
.pmodal__fico{width:clamp(40px,3.4vw,50px);aspect-ratio:1;border-radius:50%;flex:none;
  display:grid;place-items:center;background:rgba(217,4,41,.1);color:var(--red)}
.pmodal__fico .ico{width:46%;height:46%;fill:none;stroke:currentColor;stroke-width:1.8}
.pmodal__ftxt{display:grid;gap:3px;min-width:0}
.pmodal__ftxt b{font-family:var(--display);font-weight:800;
  font-size:clamp(13px,1.1vw,16px);color:var(--navy)}
.pmodal__ftxt span{font-size:clamp(10.8px,.85vw,12.8px);line-height:1.45;color:var(--ink-2)}
.pmodal__facts-act{display:grid;justify-items:center;gap:8px}
/* ⚠ MALAKING TITIK AT SARILING BILOG ANG PANA — ganoon sa disenyo.
   Isang pindutan lang ang buong modal; ang pagsigaw niya ay hindi
   nakikipag-agawan sa kahit ano. */
.pmodal__cta{
  border-radius:99px;gap:12px;padding-right:8px;
  font-size:clamp(11.5px,.95vw,14px);letter-spacing:.07em;text-transform:uppercase;
}
.pmodal__go{width:32px;height:32px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:rgba(255,255,255,.2)}
.pmodal__go .ico{width:15px;height:15px}
.pmodal__all{
  display:inline-flex;align-items:center;gap:5px;text-decoration:none;
  font-size:clamp(10.6px,.85vw,12.6px);font-weight:600;color:var(--navy-soft);
  transition:color .25s var(--ease),gap .25s var(--ease)}
@media (hover:hover){ .pmodal__all:hover{color:var(--red);gap:9px} }
.pmodal__all .ico{width:11px;height:11px}
/* Buong lapad sa ilalim ng tatlo — kaya `grid-column:1 / -1`. */
.pmodal__note{grid-column:1 / -1;margin:clamp(8px,1vw,12px) 0 0;
  font-size:10.5px;font-style:italic;color:var(--ink-2);opacity:.85}

/* ---- ANG PAGPASOK NG LAMAN ----
   Sunod-sunod, hindi sabay. `--i` ang pwesto sa pila, at isinusulat ito ng
   JS habang binubuo ang sukat.

   `backwards` at hindi `forwards`: hawak nito ang unang keyframe habang
   naghihintay, at ang dulo ay ang NORMAL na estado — kaya kung sakaling
   hindi tumakbo ang animation ay nakikita pa rin ang lahat. */
@keyframes pmRise{ from{opacity:0;transform:translateY(14px)} }
@keyframes pmShot{ from{opacity:0;transform:scale(1.14) rotate(-3deg)} }
@keyframes pmChip{ from{opacity:0;transform:translateY(9px) scale(.9)} }

.pmodal.is-on .pmodal__shot img{animation:pmShot .78s var(--ease) .06s backwards}
.pmodal.is-on .pmodal__thumbs li{animation:pmChip .46s var(--back) calc(.5s + var(--i,0) * .06s) backwards}
.pmodal.is-on .pmodal__kick{animation:pmRise .5s var(--ease) .12s backwards}
.pmodal.is-on .pmodal__name{animation:pmRise .5s var(--ease) .17s backwards}
.pmodal.is-on .pmodal__rule{animation:pmRise .5s var(--ease) .21s backwards}
.pmodal.is-on .pmodal__desc{animation:pmRise .5s var(--ease) .25s backwards}
.pmodal.is-on .pmodal__facts li{animation:pmRise .48s var(--ease) calc(.44s + var(--i,0) * .07s) backwards}
.pmodal.is-on .pmodal__foot{animation:pmRise .5s var(--ease) .52s backwards}

/* ---- ⚠ 860px PABABA: NAGSASALANSAN ANG PAANAN ----
   Tatlong hanay siya (icon, teksto, pindutan). Sa 860px ay 210px na lang
   ang natitira sa pindutan at nababali ang "ASK ABOUT THIS PRODUCT" sa
   tatlong linya sa loob ng pill. */
@media (max-width:860px){
  .pmodal__foot{grid-template-columns:auto minmax(0,1fr);row-gap:16px}
  .pmodal__facts-act{grid-column:1 / -1;justify-items:stretch}
  .pmodal__cta{width:100%;justify-content:center}
  .pmodal__all{justify-self:center}
}

@media (max-width:620px){
  /* Patayo na: masyadong makipot ang dalawang hanay para sa litrato AT
     sa teksto. Nasa itaas ang litrato — iyon ang unang sinasagot ng
     modal ("ano ba ito?"). */
  .pmodal__top{grid-template-columns:minmax(0,1fr);gap:18px}
  .pmodal__gal{justify-items:center}
  .pmodal__shot{width:min(240px,68vw)}
  .pmodal__copy{text-align:left}
  .pmodal__glow{width:82%;height:38%}
}

@media (max-width:900px){
  .pcats{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* Ang ikatlo ay apat na item lang, kaya isang haligi na lang ito at
     hindi kalahating bakante ang card. */
  .pcat:last-child{grid-column:1 / -1}
  .pcat:last-child .pcat__list{columns:3}
  /* ⚠ WALA NANG SARILING HUGIS ANG LITRATO NG CARD NA IYON. May `12/5`
     ito noong 3:2 pa ang base — doble ang lapad ng card na ito sa
     dalawang kapatid, kaya 325px sana ang header ng card na apat lang
     ang pangalan sa loob. Sa 5:2 na base ay 310px na lang iyon at
     tapat na sa dalawang kapatid, kaya isang panuntunan na lang ang
     natitira sa halip na tatlo. */
}
@media (max-width:600px){
  .pcats{grid-template-columns:minmax(0,1fr)}
  .pcat:last-child{grid-column:auto}
  .pcat:last-child .pcat__list{columns:2}

  /* ---- ANG SUKAT SA CELLPHONE ----
     Dating 44px ang `min-height` dito at may kambal na panuntunan para sa
     `pointer:coarse` — pareho iyon para sa DALIRI, dahil pindutan ang
     bawat pangalan noon. Teksto na lang ito ngayon (Ago 11, 2026), kaya
     walang dapat abutin ng daliri at walang dahilan ang 44px: nagiging
     maluwang lang ang listahan nang walang kapalit.

     Laki na lang ng titik ang natira. Nawala rin ang buong
     `@media (pointer:coarse)` na bloke — para sa mapipindot iyon.

     ⚠ Kapag ibinalik ang "My list" (_parked/quote-list-dock.html.txt),
       IBALIK ANG DALAWA — kung hindi, 28px na hilera ang pipindutin sa
       cellphone. Nasa nakatabing file ang eksaktong CSS. */
  .pitem{font-size:13px}
}

/* ⚠ DITO ITO NAKALAGAY AT HINDI SA TABI NG IBANG ≤380px NA PATAKARAN
   (tingnan ang seksyon 8, malapit sa `.pitem`). DAHIL: nasa `.pitem`
   ang parehong `font-size` at pareho ang bigat ng dalawang selector,
   kaya ang HULI SA FILE ang mananalo. Nauna ang bloke ko roon, kaya
   binabawi ito ng 13px sa itaas at nananatiling dalawang linya ang
   pangalan sa 360px — nasukat ko iyon bago ito inilipat dito.

   Ang padding naman ng ≤380px ay nasa seksyon 8 pa rin: walang
   nagpapalit niyon, kaya walang problema kahit nauna. */
@media (max-width:380px){
  .pitem{font-size:12.2px}
}


/* Nasa daloy ang palaso, kaya kailangan ng sariling puwesto ng dalawang
   gilid — mga 90px kada isa ngayon dahil may pangalan na sila. Mga 900px
   pa rin ang card mismo. */
.carou{position:relative;z-index:2;max-width:1120px;margin-inline:auto}

.carou__meter{display:grid;justify-items:center;gap:9px;margin-bottom:clamp(16px,2.2vh,24px)}
.carou__no{font-family:var(--display);font-weight:600;font-size:12.5px;letter-spacing:.06em;color:var(--ink-2)}
.carou__no b{font-weight:800;color:var(--navy)}
.carou__bar{display:flex;gap:7px}
.carou__bar i{
  width:52px;height:3px;border-radius:2px;background:var(--line);
  transition:background .45s var(--ease),width .45s var(--ease);
}
.carou__bar i.is-on{background:var(--red);width:66px}

.carou__stage{position:relative}
.carou__win{overflow:hidden;border-radius:20px}
.carou__track{
  display:flex;align-items:stretch;
  transition:transform .55s var(--ease);
  will-change:transform;
}

.slide{
  flex:0 0 100%;min-width:0;
  background:var(--paper);border:1.4px solid var(--line-2);border-radius:20px;
  box-shadow:var(--shadow-m);
  padding:clamp(18px,2.4vw,28px);
  /* Nananatiling nakikita nang 0.55s ang paalis na slide, kaya buo pa rin
     ang paglipat; pagkatapos ay lumalabas ito sa tab order at sa screen
     reader. Hindi ito kayang gawin ng opacity o ng taas na 0. */
  visibility:hidden;transition:visibility 0s linear .55s;
}
.slide.is-on{visibility:visible;transition-delay:0s}

/* ---- ULO NG PANGKAT: larawan sa kaliwa, pakilala sa kanan ---- */
.slide__top{
  display:grid;grid-template-columns:clamp(160px,24%,224px) minmax(0,1fr);
  gap:clamp(16px,2.4vw,28px);align-items:start;
}
/* Maliwanag na tile, hindi navy — sa maliwanag na likod lumalabas ang
   kulay ng mga produkto. Nakasalansang tatlong bagay ang laman para may
   bigat na parang litrato; tingnan ang #g-tape sa index.html. Isang
   linya lang ang palit kapag dumating na ang totoong kuha:
       <div class="slide__shot"><img src="assets/products/tape-group.jpg" alt=""></div> */
.slide__shot{
  aspect-ratio:8/7;display:grid;place-items:center;border-radius:14px;overflow:hidden;
  background:linear-gradient(165deg,var(--paper),var(--cream));
  border:1.2px solid var(--line-2);
}
.slide__shot svg{width:88%;height:88%}
.slide__shot img{width:100%;height:100%;object-fit:cover}

.slide__copy{min-width:0}
.slide__head{display:flex;align-items:center;gap:12px}
.slide__ico{
  width:clamp(38px,4vw,46px);aspect-ratio:1;flex:none;display:grid;place-items:center;
  border-radius:11px;background:var(--cream);border:1.2px solid var(--line-2);color:var(--navy);
}
.slide__ico svg{width:54%;height:54%}
.slide__head h3{
  font-family:var(--display);font-weight:800;letter-spacing:-.02em;color:var(--navy);
  font-size:clamp(19px,2.2vw,26px);line-height:1.14;
}
.slide__desc{margin-top:11px;font-size:14px;line-height:1.62;color:var(--ink-2);max-width:56ch}

/* Tatlong hanay, dalawang hilera. Grid, hindi flex: pantay-pantay ang
   lapad ng anim at naghahanay ang dalawang hilera sa isa't isa. */
.slide__tags{
  list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:8px;margin-top:14px;
}
.ptag{
  display:inline-flex;align-items:center;gap:6px;line-height:1.25;
  background:var(--cream);border:1px solid var(--line-2);border-radius:999px;
  padding:6px 11px;font-size:11.2px;font-weight:600;color:var(--ink-2);
}
.ptag svg{width:12px;height:12px;flex:none;color:var(--navy);opacity:.62}

.slide__lbl{
  margin-top:clamp(16px,2.2vw,24px);
  font-family:var(--display);font-weight:700;font-size:10.8px;
  letter-spacing:.09em;text-transform:uppercase;color:var(--navy);
}
/* =========================================================
   HANAY NG PRODUKTO — nasa loob ng bawat slide ng pangkat.

   Apat na card na magkakatabi, at ang natitira ay nasa gilid: `overflow-x`
   at `scroll-snap` ang riles, hindi `transform`. Ibig sabihin —
     • gumagana ang swipe nang kusa, walang JS
     • hindi kailangang alamin ng CSS kung ilan ang kasya kada tingin
     • naaabot ng Tab ang lahat, at kusang gumugulong ang riles papunta
       sa card na natutukan — hindi ito kayang gawin ng transform
   Naaabot pa rin ang LAHAT ng produkto ng pangkat (12 / 7 / 4).

   .pcard pa rin ang bawat produkto, at nasa isang lugar pa rin sila.

   ⚠ NAKATULOG ANG BUONG BLOKENG ITO. Nasa _parked/ ang markup ng karusel
     mula Ago 10, 2026, at ang `.pitem` na listahan ang kapalit. Isa na
     lang ang naghahanap ng produkto: ang calculator (seksyon 7 ng
     main.js), at `$$('.pitem')` na ang hinahanap niya. Wala na ang
     listahan ng itatanong — tinanggal Ago 11, 2026 dahil cart ang
     hitsura. Kung ibabalik ang karusel, gawing `.pcard, .pitem` ang
     selector sa calculator.
   ========================================================= */
.pcarou{margin-top:10px}
.pcarou__rail{
  display:flex;align-items:stretch;gap:12px;
  overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x mandatory;scroll-behavior:smooth;
  scrollbar-width:none;-ms-overflow-style:none;
  /* puwang para sa anino ng card kapag hini-hover */
  padding:4px 2px 6px;margin:-4px -2px -6px;
}
.pcarou__rail::-webkit-scrollbar{display:none}

.pcarou__bar{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;
  gap:clamp(10px,1.6vw,18px);margin-top:14px;
}
/* Pindutang may teksto at parisukat ang sulok — hindi bilog na palaso.
   Bilog at walang teksto ang palaso ng PANGKAT sa itaas; kung ganoon din
   ito ay hindi mo malalaman kung alin ang lilipat sa pagpindot. Ang
   teksto mismo ang nagsasabi kung ano ito, at mas malaking target din. */
.pcarou__arw{
  display:inline-flex;align-items:center;gap:7px;
  font-family:var(--display);font-weight:700;font-size:13px;color:var(--navy);
  background:var(--paper);border:1.6px solid var(--line);border-radius:10px;
  padding:10px 15px;cursor:pointer;white-space:nowrap;
  transition:background .3s ease,border-color .3s ease,color .3s ease,transform .2s ease;
}
.pcarou__arw svg{width:15px;height:15px;flex:none}
.pcarou__arw[data-step="-1"] svg{rotate:180deg}
@media (hover:hover){ .pcarou__arw:hover{background:var(--navy);border-color:var(--navy);color:#fff} }
.pcarou__arw:active{transform:translateY(1px)}

.pcarou__mid{display:grid;justify-items:center;gap:7px;min-width:0}
.pcarou__no{font-family:var(--display);font-weight:600;font-size:12px;letter-spacing:.05em;color:var(--ink-2)}
.pcarou__no b{font-weight:800;color:var(--navy)}
.pcarou__track{display:block;width:min(100%,420px);height:3px;border-radius:2px;background:var(--line);overflow:hidden}
.pcarou__track i{display:block;height:100%;border-radius:2px;background:var(--red);transition:width .5s var(--ease)}

/* ---- palaso at tuldok ----
   Isang grid ang buong entablado, at nasa daloy ang palaso — hindi
   nakapatong. Kaya walang tinatakpang teksto, at kusang gumagalaw ang
   lahat kapag lumiit ang screen: sa gilid ng card sila sa malapad,
   katabi ng tuldok sa cellphone. */
.carou__stage{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  grid-template-areas:"prev win next" ".  dots .";
  align-items:center;column-gap:clamp(8px,1.4vw,20px);
  row-gap:clamp(16px,2.2vh,22px);
}
.carou__win{grid-area:win}
.carou__arw--prev{grid-area:prev}
.carou__arw--next{grid-area:next}
.carou__dots{grid-area:dots}

/* May pangalan na ang palaso ng pangkat. Sa isang pahina na may dalawang
   antas ng pag-usad ay hindi sapat ang hubad na palaso — kailangang
   sabihin nito kung ano ang lilipat. */
.carou__arw{
  display:grid;justify-items:center;gap:8px;
  width:clamp(58px,7vw,90px);padding:0;border:0;background:none;cursor:pointer;
}
.carou__arw-ico{
  width:44px;height:44px;display:grid;place-items:center;border-radius:50%;
  background:var(--paper);border:1.4px solid var(--line-2);color:var(--navy);
  box-shadow:var(--shadow-s);
  transition:background .3s ease,border-color .3s ease,color .3s ease,box-shadow .3s ease,transform .3s var(--back);
}
.carou__arw-ico svg{width:19px;height:19px}
.carou__arw--prev .carou__arw-ico svg{rotate:180deg}
.carou__arw-txt{
  font-family:var(--display);font-weight:600;font-size:11.5px;line-height:1.28;
  text-align:center;color:var(--ink-2);transition:color .3s ease;
  /* Dalawang linya ang "Previous Category" pero isa lang ang "Next
     Category". Kung hahayaan ay magkaiba ang taas ng dalawang pindutan,
     at hindi maghahanay ang dalawang bilog. */
  min-height:2.6em;
}
@media (hover:hover){ .carou__arw:hover .carou__arw-ico{
  background:var(--navy);border-color:var(--navy);color:#fff;
  box-shadow:var(--shadow-m);transform:scale(1.06);
} .carou__arw:hover .carou__arw-txt{color:var(--navy)} }
.carou__arw:active .carou__arw-ico{transform:scale(.94)}

.carou__dots{display:flex;justify-content:center;gap:9px}
.carou__dots button{
  width:10px;height:10px;padding:0;border:0;border-radius:50%;cursor:pointer;
  background:var(--line);transition:all .35s var(--back);
}
.carou__dots button span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
@media (hover:hover){ .carou__dots button:hover{background:rgba(31,66,128,.34)} }
.carou__dots button[aria-selected="true"]{background:var(--navy)}
/* Hindi lang kulay ang pagkakaiba ng napili — may singsing din sa labas,
   para may makita ang hindi nakakakilala ng navy sa abo. */
.carou__dots button[aria-selected="true"]::after{
  content:"";position:absolute;inset:-5px;border-radius:50%;
  border:1.4px solid rgba(31,66,128,.28);
}
.carou__dots button{position:relative}

.carou__hint{margin-top:12px;text-align:center;font-size:12px;color:rgba(87,97,138,.8)}

/* ---- ang card ng produkto ----
   Apat ang kasya sa isang tingin; ang natitira ay nasa gilid ng riles.
   Ang `calc` ang nagbibigay ng eksaktong sukat kasama ng 12px na gap. */
.pcard{
  --kada:4;
  position:relative;min-width:0;
  flex:0 0 calc((100% - (var(--kada) - 1) * 12px) / var(--kada));
  scroll-snap-align:start;
  display:flex;flex-direction:column;
  background:var(--paper);border:1.4px solid var(--line-2);border-radius:12px;
  padding:13px 13px 46px;overflow:hidden;
  transition:border-color .3s ease,box-shadow .35s ease,transform .35s var(--ease);
}
@media (hover:hover){ .pcard:hover{border-color:var(--line);box-shadow:var(--shadow-s);transform:translateY(-2px)} }
.pcard::before{
  content:"";position:absolute;inset:0 0 auto 0;height:4px;
  background:linear-gradient(90deg,var(--t1),var(--t3));opacity:.85;
}
.pcard.is-added{border-color:var(--red)}

.pcard__art{
  aspect-ratio:5/4;display:grid;place-items:center;border-radius:9px;
  background:radial-gradient(66% 66% at 50% 52%,rgba(31,66,128,.06),transparent 74%);
}
/* Pareho ang trato sa iginuhit na icon at sa totoong larawan, kaya kapag
   dumating na ang product photos ay isang linya lang ang palit sa index.html:
       <div class="pcard__art"><img src="assets/products/clear-tape.png" alt=""></div>
   Walang aayusin dito. Tingnan ang assets/products/README.txt. */
.pcard__art svg,
.pcard__art img{width:84%;height:84%;object-fit:contain}

.pcard__flag{
  position:absolute;top:16px;right:-30px;rotate:38deg;background:var(--navy);color:#fff;
  font-family:var(--display);font-weight:700;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;
  padding:5px 34px;box-shadow:var(--shadow-s);
}
.pcard__flag--red{background:var(--red)}

.pcard h5{margin-top:11px;font-family:var(--display);font-weight:800;font-size:14.5px;letter-spacing:-.02em;color:var(--navy);line-height:1.2}
.pcard__meta{margin-top:4px;font-size:10.8px;line-height:1.35;color:var(--kraft-deep);font-weight:600;letter-spacing:.01em}
/* Nakatabi ang mahabang paglalarawan sa _source/copy/product-copy.txt — makitid
   na ang card ngayon (mga 200px) at walang puwang para sa dalawang
   pangungusap. Buo pa rin ang klase kung sakaling ibabalik. */
.pcard__desc{margin-top:10px;font-size:14px;line-height:1.58;color:var(--ink-2)}

/* Tatlong capability tag kada produkto, mula sa talaan ng kliyente.
   Nakasalansan, hindi magkatabi: makitid ang card, at kung magkatabi
   sila ay mababali ang bawat isa sa dalawang linya.
   Kulay-navy at walang ikono — kaiba sa .ptag ng ULO NG PANGKAT, na
   kulay-cream at may ikono. Ang pangkat ang malaki, ang produkto ang
   maliit; hindi sila dapat magmukhang magkapantay. */
.pcard__tags{
  list-style:none;display:flex;flex-direction:column;align-items:flex-start;
  gap:5px;margin-top:10px;
}
.pcard__tags li{
  font-family:var(--body);font-weight:600;font-size:10.5px;line-height:1.25;color:var(--navy);
  background:rgba(31,66,128,.055);border:1px solid var(--line-2);
  border-radius:999px;padding:4px 9px;
}
/* Walang presyo sa card sa ngayon — pakilala ang bawat card, hindi price
   tag. Nakahanda pa rin ang estilo para sa araw na payagan ng TapeMate na
   ipakita ang presyo; wala nang `.price--ask` ("Quote-based") dahil ang
   pagkakaroon ng bakanteng puwesto para sa presyo ay siya mismong
   nagpapamukhang tindahan sa card. */
.price{font-family:var(--display);font-weight:900;font-style:italic;font-size:20px;color:var(--navy);letter-spacing:-.03em}
.price i{font-size:11.5px;font-style:normal;font-weight:600;color:var(--ink-2);margin-left:2px}
/* Bilog na palaso sa kanang-ibaba ng card. Walang nakasulat, kaya ang
   `aria-label` ang buong pangalan nito ("Ask about Clear Tape") — at
   pinapalitan ito ng JS kapag nasa listahan na. Nagiging tsek at pula
   kapag nadagdag; hindi lang kulay ang senyas. */
.add{
  position:absolute;right:11px;bottom:11px;
  width:28px;height:28px;display:grid;place-items:center;border-radius:50%;
  background:var(--paper);border:1.4px solid var(--line);color:var(--navy);cursor:pointer;
  transition:background .28s ease,border-color .28s ease,color .28s ease,transform .28s var(--back);
}
.add svg{grid-area:1/1;width:14px;height:14px}
.add__ok{visibility:hidden}
@media (hover:hover){ .add:hover{background:var(--navy);border-color:var(--navy);color:#fff;transform:scale(1.1)} }
.add:active{transform:scale(.94)}
.add.is-on{background:var(--red);border-color:var(--red);color:#fff}
@media (hover:hover){ .add.is-on:hover{background:var(--red-deep);border-color:var(--red-deep)} }
.add.is-on .add__go{visibility:hidden}
.add.is-on .add__ok{visibility:visible}

/* ---- banda sa ibaba: "Can't find what you're looking for?" ----
   NAVY NA ITO NGAYON (Ago 10, 2026, sunod sa reference), hindi na
   maputlang kahel. Dahilan sa disenyo: puti ang tatlong card sa itaas
   at maputla ang buong seksyon, kaya ang maputlang bareta ay nagiging
   ikaapat na card — hindi ito ang dulo. Sa navy ay may hangganan ang
   seksyon, at may pupuntahan ang mata pagkatapos ng listahan.

   Pulang bareta sa kaliwang gilid — `inset` na anino ito at hindi
   `border`, kaya walang nadadagdag sa laki at walang gumagalaw. */
.hunt{
  position:relative;z-index:2;overflow:hidden;
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;
  gap:clamp(14px,1.8vw,24px);margin-top:clamp(9px,1.1vh,13px);
  background:var(--navy);color:#fff;
  border-radius:15px;padding:clamp(11px,1.2vw,14px) clamp(16px,2vw,26px);
  box-shadow:0 26px 50px -34px rgba(15,38,86,.8), inset 4px 0 0 var(--red);
}
.hunt__ico{
  width:clamp(40px,4vw,48px);height:clamp(40px,4vw,48px);
  display:grid;place-items:center;border-radius:13px;
  background:rgba(255,255,255,.1);box-shadow:inset 0 0 0 1.2px rgba(255,255,255,.22);
}
.hunt__ico svg{width:56%;height:56%}
.hunt__copy b{display:block;font-family:var(--display);font-weight:800;font-size:clamp(14px,1.35vw,16.5px);letter-spacing:-.01em;color:#fff}
/* ⚠ `78ch` AT HINDI `54ch`. Dalawang linya ito sa 54ch at 20px ang
   naibibigay ng isang linya. Kasya iyon: `auto 1fr auto` ang hunt, kaya
   mga 860px ang haligi ng teksto sa 1180 — mas malapad sa 78ch. */
.hunt__copy span{display:block;margin-top:4px;max-width:78ch;font-size:clamp(11.5px,1.05vw,13px);line-height:1.55;color:rgba(255,255,255,.68)}
.hunt__act{display:flex;gap:10px;flex-wrap:wrap}
.hunt__act .btn{padding:13px 22px;font-size:14px}
/* pakanan lang ang palaso; hindi dapat sumunod ang bubble ng chat */
@media (hover:hover){ .hunt__act .btn--ghost:hover .ico{transform:none} }

/* WALA NANG `.fineprint` SA BUONG PAHINA (Ago 12, 2026). Sa #products
   lang ito huling ginagamit — inalis ang pangungusap, kaya inalis din
   ang tatlong patakaran. May tala rin dito noon na "ginagamit din ito ng
   #savings"; hindi na totoo iyon, `.calc__fine` na ang gamit doon.

   Kung babalik ang maliit-ang-sulat na teksto sa kahit anong seksyon:
     .fineprint{margin-top:26px;font-size:12.5px;line-height:1.6;
                color:rgba(87,97,138,.8);font-style:italic;max-width:70ch}
     .fineprint b{font-style:normal;color:var(--kraft-deep)} */


/* ================= 9. CALCULATOR ================= */
.calc{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,5vw,64px);align-items:center}
.tiers{list-style:none;display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:28px;max-width:420px}
.tiers li{
  font-size:13.5px;color:rgba(255,255,255,.7);padding:11px 14px;border-radius:9px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);
}
.tiers b{display:block;font-family:var(--display);font-weight:800;font-size:16px;color:#fff;letter-spacing:-.02em}

.calc__panel{
  background:var(--paper);border-radius:16px;padding:clamp(22px,3vw,32px);color:var(--navy);
  box-shadow:var(--shadow-l);
}
.calc__label{display:block;font-family:var(--display);font-weight:700;font-size:12.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-2)}
.calc__select{
  width:100%;margin-top:9px;padding:13px 15px;border-radius:10px;border:1.6px solid var(--line);
  background:#fff;color:var(--navy);font-family:var(--body);font-size:15px;cursor:pointer;
}
.calc__qtyrow{display:flex;align-items:baseline;justify-content:space-between;margin-top:24px}
.calc__qty{font-family:var(--display);font-weight:900;font-style:italic;font-size:30px;color:var(--red);letter-spacing:-.03em}

.calc__range{
  -webkit-appearance:none;appearance:none;width:100%;height:8px;margin-top:12px;border-radius:99px;
  background:linear-gradient(90deg,var(--red) var(--fill,5%),var(--gray-soft) var(--fill,5%));cursor:pointer;
}
.calc__range::-webkit-slider-thumb{
  -webkit-appearance:none;width:26px;height:26px;border-radius:50%;background:var(--navy);
  border:4px solid #fff;box-shadow:0 4px 12px -4px rgba(31,66,128,.7);cursor:grab;
}
.calc__range::-moz-range-thumb{
  width:22px;height:22px;border-radius:50%;background:var(--navy);border:4px solid #fff;cursor:grab;
}
.calc__scale{display:flex;justify-content:space-between;margin-top:8px;font-size:11px;color:var(--ink-2);opacity:.7}

.calc__out{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:22px}
.calc__cell{background:var(--cream);border-radius:11px;padding:15px 16px}
.calc__cell span{display:block;font-size:12px;color:var(--ink-2);letter-spacing:.04em}
.calc__cell b{display:block;margin-top:5px;font-family:var(--display);font-weight:900;font-style:italic;font-size:clamp(20px,2.4vw,27px);letter-spacing:-.03em}
.calc__cell--total{background:var(--navy);color:#fff}
.calc__cell--total span{color:rgba(255,255,255,.65)}

.calc__save{
  display:flex;gap:11px;align-items:flex-start;margin-top:14px;padding:13px 15px;border-radius:11px;
  background:rgba(217,4,41,.07);border:1px dashed rgba(217,4,41,.35);font-size:13.5px;line-height:1.5;color:var(--navy);
}
.calc__save .ico{width:19px;height:19px;color:var(--red);margin-top:1px}
.calc__save b{font-weight:800}
.calc__save i{font-style:normal;font-weight:700;color:var(--red)}

.calc__bar{height:7px;border-radius:99px;background:var(--gray-soft);margin:18px 0 20px;overflow:hidden}
.calc__bar i{display:block;height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,var(--electric),var(--red));transition:width .45s var(--ease)}
.calc__fine{margin-top:12px;font-size:11.5px;color:var(--ink-2);text-align:center;font-style:italic}

/* ================= 10. WHY =================

   ⚠ THE FIRST LINE IS THE MOST IMPORTANT IN THE WHOLE SECTION.

   `.sec` has `overflow:hidden`, and `hidden` creates a NEW SCROLL
   CONTAINER. Inside such a box `position:sticky` is dead — the rail
   sticks to a box that is not itself scrolling, so nothing happens and it
   simply passes by like an ordinary block.

   `clip` also clips but it does NOT create a scroll container. The other
   axis has to be `visible`: with `hidden` or `clip` on both we are back
   to a scroll container. This is the only combination that clips the
   sides and leaves sticky alive.

   Should support for Safari 15 and below ever be needed (no
   `overflow:clip` there): nothing breaks, only the rail stops sticking —
   it scrolls along with the panel and the contents stay whole. */
.wy{overflow-x:clip;overflow-y:visible}
.wy > .wrap{position:relative;z-index:1}

/* ---- THE BACKGROUND ----
   Two large radial gradients. There is NO `filter:blur()` here even
   though that is the usual approach: the gradient already fades out at
   `transparent 68%`, so a blur is nothing but extra GPU work for
   something whose difference cannot be seen. They are large (46vw) and
   this runs on phones — that is where it would be felt.

   `--p` is the section's progress (0 → 1), written by the JS on `#why`.
   Because custom properties inherit, everything from here down to the
   innermost dot takes its number from one source. */
.wy__bg{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.wy__glow{position:absolute;display:block;border-radius:50%;opacity:.75}
.wy__glow--a{
  width:46vw;height:46vw;left:-15vw;top:calc(4% + var(--p,0) * 44%);
  background:radial-gradient(circle,rgba(242,160,93,.3),transparent 68%);
}
.wy__glow--b{
  width:40vw;height:40vw;right:-12vw;top:calc(62% - var(--p,0) * 36%);
  background:radial-gradient(circle,rgba(59,156,255,.22),transparent 68%);
}

/* ---- THE FOUR REASONS ----
   ⚠ THERE USED TO BE A 3D CARTON HERE (Aug 12, 2026). The section was
     pinned, there was 140vh of empty runway, and the opening of four
     flaps and the emergence of four cards from inside the box ran off the
     scroll. Its removal was requested.

     Removed with it: `--pako`/`--daan`, the sticky, the six faces and
     four flaps of the carton, the three numbers `--p`, `--pk`, `--po`,
     and the measuring rule. Nothing writes a custom property on `#why`
     any more — no JS is left here at all.

   It is a plain row now: four on a large screen, two on a tablet, one on
   a phone. The only movement is the page-wide `[data-reveal]` — each card
   rises on first sight, staggered by `--i`. */
.wyc4{
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:clamp(16px,1.8vw,24px);
}

/* A navy card on a pale section — that is the same contrast `.pull` uses
   in #interview and `#dealership` uses. It is not new vocabulary. */
.wyc{
  position:relative;overflow:hidden;
  padding:clamp(20px,2vw,28px) clamp(18px,1.8vw,26px) clamp(24px,2.4vw,32px);
  border-radius:18px;
  background:linear-gradient(165deg,#27508F 0%,var(--navy) 46%,#193869 100%);
  color:#fff;
  box-shadow:0 24px 44px -30px rgba(15,38,86,.75);
  /* `translate` — not `transform`. `[data-reveal]` holds the
     `transform`, so the two do not fight over it. */
  transition:translate .45s var(--ease),box-shadow .45s var(--ease);
}
@media (hover:hover){ .wyc:hover{translate:0 -6px;box-shadow:0 34px 56px -30px rgba(15,38,86,.85)} }

/* The large number in the corner — a measure of reading, not decoration:
   there are four of them and this is what says where you are. */
.wyc__no{
  position:absolute;top:clamp(12px,1.4vw,18px);right:clamp(14px,1.6vw,20px);
  font-family:var(--display);font-style:italic;font-weight:800;
  font-size:clamp(30px,3.4vw,44px);line-height:1;
  color:rgba(255,255,255,.13);pointer-events:none;
}
.wyc__ico{
  display:grid;place-items:center;
  width:clamp(38px,3.6vw,46px);aspect-ratio:1;border-radius:12px;
  background:rgba(59,156,255,.16);
  box-shadow:inset 0 0 0 1px rgba(59,156,255,.28);
}
.wyc__ico svg{width:52%;height:52%;color:var(--electric)}
.wyc__tag{
  display:inline-block;margin-top:clamp(14px,1.6vw,20px);
  font-family:var(--display);font-weight:700;font-size:10.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--electric);
}
.wyc h3{
  margin-top:7px;
  font-family:var(--display);font-style:italic;font-weight:800;
  font-size:clamp(17px,1.5vw,20px);line-height:1.2;
}
.wyc p{margin-top:9px;font-size:13.5px;line-height:1.6;color:rgba(255,255,255,.78)}

/* Two on a tablet, one on a phone. Nothing else changes — the same card,
   the same contents. */
@media (max-width:980px){ .wyc4{grid-template-columns:repeat(2,1fr)} }
@media (max-width:560px){ .wyc4{grid-template-columns:1fr} }

@media (prefers-reduced-motion:reduce){
  .wyc{transition:none}
  @media (hover:hover){ .wyc:hover{translate:none} }
}

/* ---- THE TWO QUESTIONS ---- */
.wy__objs{margin-top:clamp(46px,8vh,92px)}
.wy__objhead{
  display:flex;align-items:center;gap:clamp(14px,2vw,22px);margin-bottom:clamp(18px,2.4vh,26px);
  font-family:var(--display);font-weight:700;font-size:12px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-2);white-space:nowrap;
}
.wy__objhead::before,.wy__objhead::after{
  content:"";flex:1;height:1.6px;background:var(--line);
  transform:scaleX(0);transition:transform 1s var(--ease) .18s;
}
.wy__objhead::before{transform-origin:100% 50%}
.wy__objhead::after{transform-origin:0 50%}
.wy__objhead.is-in::before,.wy__objhead.is-in::after{transform:scaleX(1)}

.objr{display:grid;grid-template-columns:1fr 1fr;gap:clamp(14px,1.8vw,22px)}
.objc{
  position:relative;isolation:isolate;overflow:hidden;
  padding:clamp(28px,3vw,38px) clamp(24px,2.8vw,34px) clamp(22px,2.6vw,30px);
  border-radius:16px;background:var(--paper);
  box-shadow:inset 0 0 0 1.6px var(--line);
  transition:translate .5s var(--ease),box-shadow .5s var(--ease),background .5s ease;
}
@media (hover:hover){ .objc:hover{
  translate:0 -6px;background:#fff;
  box-shadow:var(--shadow-m),inset 0 0 0 1.6px rgba(31,66,128,.32);
} }

/* A carton corner — tape folded at the top right. It only grows on hover,
   it does not rotate: the card has `overflow:hidden`, so a rotating
   triangle would show a cut edge in the corner. */
.objc__peel{
  position:absolute;top:0;right:0;width:78px;height:78px;pointer-events:none;
  background:linear-gradient(214deg,var(--kraft-light),var(--kraft-deep));
  clip-path:polygon(100% 0,100% 100%,0 0);
  transform-origin:100% 0;transform:scale(.82);
  transition:transform .6s var(--back),filter .5s ease;
}
@media (hover:hover){ .objc:hover .objc__peel{transform:scale(1);filter:brightness(1.06)} }

/* `z-index:-1` — a negative child is painted AFTER the parent's
   background but BEFORE its contents, so the quotation mark is behind the
   text and still in front of the white card. `isolation:isolate` is
   needed on `.objc` so it cannot slip down behind the whole section. */
.objc__q{
  position:absolute;top:12px;left:clamp(18px,2.2vw,26px);z-index:-1;
  width:46px;height:46px;color:rgba(31,66,128,.08);
  transition:color .5s ease,rotate .6s var(--back),translate .6s var(--back);
}
@media (hover:hover){ .objc:hover .objc__q{color:rgba(217,4,41,.13);rotate:-7deg;translate:0 -3px} }
.objc h3{
  font-family:var(--display);font-weight:900;font-style:italic;
  font-size:clamp(17px,1.9vw,21.5px);line-height:1.2;letter-spacing:-.025em;color:var(--navy);
}
.objc p{margin-top:11px;font-size:14.5px;line-height:1.64;color:var(--ink-2)}
.objc__cta{
  margin-top:18px;display:inline-flex;align-items:center;gap:9px;
  padding:11px 17px 11px 14px;border-radius:99px;text-decoration:none;
  font-family:var(--display);font-weight:700;font-size:13.5px;letter-spacing:-.01em;
  color:var(--red);background:rgba(217,4,41,.08);
  transition:background .35s ease,color .35s ease,gap .35s var(--ease);
}
@media (hover:hover){ .objc__cta:hover{background:var(--red);color:#fff;gap:13px} }
.objc__ico,.objc__arw{width:17px;height:17px;flex:none}
.objc__arw{transition:translate .4s var(--ease)}
@media (hover:hover){ .objc__cta:hover .objc__arw{translate:3px 0} }

/* ⚠ A BREAK THAT IS ONLY VISIBLE ON A PHONE (`.br-ph`).
   The `<br>` in the markup divides the two sentences, but in a 331px
   column each of them BREAKS AGAIN — and the last word is left alone on
   its own line ("size." and "it."). Four lines with two orphans.

   ⚠ `text-wrap:balance` WAS TRIED FIRST AND IT IS NOT ENOUGH. It
     balanced the FIRST sentence ("Every order is a / different size.")
     but not the second — that stayed as "So is the way we handle / it."
     Balance cannot be relied on when there is a forced `<br>` inside the
     block, so an explicit break instead: measurable, and identical in
     every browser.

   Measured at 390px, 28px type, a 331px column:
       Every order is a  209px    different size.  187px
       So is the way     177px    we handle it.    175px
   All four fit, and each pair is nearly the same length.

   ⚠ THERE IS A SPACE AFTER EVERY `.br-ph` IN THE MARKUP AND THAT IS
     DELIBERATE — it becomes the space between the two words once the
     break disappears on desktop. Without it you would get
     "Every order is adifferent size." */
.br-ph{display:none}
@media (max-width:640px){ .br-ph{display:inline} }
.segs{background:var(--paper);border-radius:16px;box-shadow:var(--shadow-m);overflow:hidden}
.segs__tabs{display:flex;flex-wrap:wrap;border-bottom:1.6px solid var(--line-2);background:var(--cream)}
.segtab{
  flex:1 1 auto;font-family:var(--display);font-weight:700;font-size:14px;color:var(--ink-2);
  background:none;border:0;padding:17px 16px;cursor:pointer;position:relative;white-space:nowrap;
  transition:color .28s ease,background .28s ease;
}
.segtab::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3.5px;background:var(--red);transform:scaleX(0);transition:transform .38s var(--ease)}
@media (hover:hover){ .segtab:hover{color:var(--navy)} }
.segtab.is-on{color:var(--navy);background:var(--paper)}
.segtab.is-on::after{transform:scaleX(1)}

.segs__body{padding:clamp(24px,3.4vw,40px)}
.segpane{display:none}
.segpane.is-on{display:block;animation:fadeUp .55s var(--ease)}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}}
.segpane h3{font-family:var(--display);font-weight:900;font-style:italic;font-size:clamp(20px,2.4vw,27px);color:var(--navy);letter-spacing:-.03em}
.segpane > p{margin-top:12px;font-size:15px;line-height:1.65;color:var(--ink-2);max-width:60ch}
.segpane .btn{margin-top:24px}

/* ---- ⚠ THE DEPTH OF THE SECTION ITSELF ----
   It was one flat navy from top to bottom — and that is why it still
   read as a "blue box" despite the dots, the light and the photo on top.
   This layer is what gives shape to the RECTANGLE itself:

     bright at the top centre   directly behind the title
     dark at the bottom         pressing the three cards upward

   ⚠ IT IS ON THE SECTION AND NOT ON A LAYER. As a circle laid on top its
     edge would be visible; the section's background-image reaches both
     ends however wide the screen.
   ⚠ `background-image` ONLY AND NOT `background`. `.sec--sky` holds the
     COLOUR; as a shorthand that would be erased, leaving no ground behind
     the gradient.

   ⚠ THE SPLIT IS HORIZONTAL AND NOT VERTICAL: cool on the left, warm on
     the right. There is a reason — the TITLE sits on the left (it needs a
     quiet ground) and the WAREHOUSE PHOTO on the right (warm in itself).
     Split vertically the two meet in the middle and turn to mud. */
/* ---- ⚠ ITS OWN PADDING, AND THE TOP AND BOTTOM ARE NOT EQUAL ----
   It used to be `clamp(64px,9vh,118px)` / `clamp(70px,10vh,130px)`: 248px
   of nothing in a 1142px section (22%). That was tightened to 112px each
   so the section WOULD FIT ONE SCREEN.

   ⚠ THAT IS NO LONGER THE BRIEF (Aug 13, 2026 — *"extend pa yung part na
     ito medyo maikli sya … pahabaain pa yung sa baba before mag next
     page"*). And to be honest about it: THE ONE-SCREEN WAS ALREADY LOST
     before this request. The cards grew when the three became a fan, and
     the section is 851px at 1440×900 while only 810px is visible — 41px
     over already. Holding the bottom back no longer saves anything; all
     it withholds is the section's FLOOR.

   ⚠ ONLY THE BOTTOM WAS LENGTHENED, NOT BOTH. The top has content
     immediately after it (the green "NOW OPEN" badge); the bottom has
     nothing at all after the cards — that is simply where the section
     ends. The middle card is the lowest of the three (12px below the
     other two because of the depth), so IT is what this space is measured
     against. Measured before: 47px at 1440×900. After: 99px. */
.sec--deal{
  position:relative;overflow:hidden;
  padding-top:clamp(44px,5.2vh,56px);padding-bottom:clamp(88px,11vh,132px);
  background-image:
    radial-gradient(96% 120% at 4% 34%,  #DCEAFB 0%, rgba(220,234,251,0) 62%),
    radial-gradient(88% 108% at 100% 22%, #FBF3E6 0%, rgba(251,243,230,0) 58%),
    linear-gradient(180deg, #F4F9FF 0%, #E6F0FB 100%);
}

/* ---- ⚠ THE BACKGROUND ----
   Four layers, and NOT ONE OF THEM IS NEW: `.prodbg`, `.prodglow` and
   `.proddots` from #products are the source of three, and the fourth is
   the diagonal rule. The page's own language, nothing new.

   ⚠ IT IS ITS OWN `::before` NOW, NOT `.sec--navy`'s. It used to hang off
     `.sec--deal.sec--navy::before`; when `sec--navy` was removed from the
     section it was NOT ONLY the rule's colour that would go but the whole
     layer — the `content`, `position` and `inset` are in
     `.sec--navy::before` (line 540). The declaration has to be whole
     here, not a patch.
   ⚠ A NAVY RULE ON SAND, NOT WHITE. White cannot be seen on a light
     ground — the section's texture disappears entirely. */
/* ⚠ THERE IS NO DIAGONAL RULE HERE ANY MORE (Aug 12, 2026).
     `.sec--navy::before` was its source and it was made for navy, where
     it is barely visible. On a light ground the whole section becomes
     FABRIC, and three things here already have texture (waves, dots, the
     warehouse photo) — the rule was the fourth, and that was one too many.
     It was not patched over with `background-image:none`: THE WHOLE
     `::before` WAS REMOVED, so no layer is left still being painted. */

/* The photo of the DEALER themselves — that is the subject. It is already
   on the page (sixth row of #about), so the visitor downloads nothing new.
   ⚠ IT STILL HAS A MASK EVEN THOUGH IT WAS STRENGTHENED. There is text
     over it; this is not a picture to be looked at but depth behind — so
     its edge has to fade and not be cut.
   ⚠ IT WAS `.14` AND IT READ AS A GHOST — you could not tell whether it
     was a person or dirt on the screen. The point of the photo is that
     you see there are PEOPLE behind the programme.
   ⚠ THERE IS A `saturate()` BECAUSE THE SKIN AND THE CLOTHING in the
     photo are outside the palette. It eases the colour back toward the
     section's ground instead of introducing a new one.
   ⚠ `multiply` IS THE BLEND, NOT A LAYER WITH OPACITY. On a dark ground
     plain opacity is right; on sand a translucent photo becomes a grey
     stain — the light parts of the photo lift the sand toward grey. With
     `multiply` the light parts DO NOT MOVE and only the dark ones press
     down: no longer a layer, but a print on the paper. */
.dealbg{
  position:absolute;z-index:0;pointer-events:none;
  right:0;top:0;width:min(54%,820px);height:100%;
  background:url('../img/warehouse.jpg') center right/cover no-repeat;
  opacity:.42;filter:saturate(.6) contrast(.9) brightness(1.08);
  mix-blend-mode:multiply;
  -webkit-mask-image:linear-gradient(258deg,#000 6%,rgba(0,0,0,.5) 46%,transparent 84%);
          mask-image:linear-gradient(258deg,#000 6%,rgba(0,0,0,.5) 46%,transparent 84%);
}

/* ---- ⚠ THE WAVES ON THE LEFT ----
   SVG and not an image — no new file, no weight, and sharp on any screen.
   Three overlapping paths: each is slightly darker than the one behind
   it, and that is where the depth comes from. One path alone is a flat
   shape; at three it becomes a fold.

   ⚠ THE MOVEMENT IS `translate3d`, NOT THE PATH's `d`. Changing path data
     every frame is rebuilding the shape on the CPU; a transform is
     compositor only. */
.dealwave{
  position:absolute;z-index:0;pointer-events:none;
  left:0;top:0;width:min(46%,660px);height:100%;
  -webkit-mask-image:linear-gradient(96deg,#000 34%,transparent 92%);
          mask-image:linear-gradient(96deg,#000 34%,transparent 92%);
}

/* ---- ⚠ THE DEPTH: THE FOUR MOVE AT DIFFERENT SPEEDS ----
   Section 9c of main.js writes `--px`/`--py` (-1..1) as the mouse moves.
   Only the NUMBER differs here, and that is the whole thing: the further
   something moves, the closer it is to the eye.

     waves      -26px   nearest
     dots       -15px
     light       ±0     stuck to the cursor
     warehouse  +9px    furthest, and IN REVERSE

   ⚠ THE WAREHOUSE GOES THE OTHER WAY (positive while the other two are
     negative). All three in the same direction reads as one picture being
     moved about; in reverse there is SEPARATION between front and back —
     that is parallax.

   ⚠ `translate` AND NOT `transform` — `transform` is held by
     `dwaveA`/`dwaveB` and by `pdrift`. They are different properties, so
     they run at the same time without erasing one another.

   ⚠ THERE IS A `transition` EVEN THOUGH THIS FOLLOWS THE MOUSE, and that
     is deliberate: the .55s is what creates the SLIGHT LAG. Exactly in
     step with the cursor it reads as mechanical; with a little chase the
     layers have weight. */
.dealbg,.dealwave,.dealdots{transition:translate .55s cubic-bezier(.22,1,.36,1)}
.dealwave{translate:calc(var(--px,0) * -26px) calc(var(--py,0) * -18px)}
.dealdots{translate:calc(var(--px,0) * -15px) calc(var(--py,0) * -11px)}
.dealbg  {translate:calc(var(--px,0) *   9px) calc(var(--py,0) *   6px)}

/* Ang liwanag na sumusunod sa cursor. Nakadikit ito sa `--mx`/`--my`
   nang walang transition — ito ang tanging bagay na dapat SABAY sa
   daliri, dahil ito mismo ang kinakatawan ng daliri.
   ⚠ Lumalabas lang ito sa hover: sa `opacity:1` na naka-default ay may
     maliwanag na tuldok sa gitna ng seksyon na walang paliwanag. */
.deallight{
  position:absolute;inset:0;z-index:0;pointer-events:none;opacity:0;
  background:radial-gradient(280px circle at var(--mx,50%) var(--my,50%),
             rgba(255,255,255,.62), rgba(255,255,255,0) 66%);
  transition:opacity .55s ease;
}
@media (hover:hover){ .sec--deal:hover .deallight{opacity:1} }

.dealwave svg{width:100%;height:100%;display:block}
/* ⚠ PUNO AT HINDI GUHIT LANG. Manipis na guhit ito noon at sa maliwanag
     na lupa ay halos wala — kailangan mong hanapin. Ang punong hugis ang
     nagbibigay ng TUPI: bawat alon ay dumidiin sa nasa likod nito, at
     doon nanggagaling ang lalim. Nananatili ang manipis na guhit sa
     gilid — iyon ang kislap sa tuktok ng tupi. */
.dealwave path{
  fill:rgba(31,66,128,.038);
  stroke:rgba(31,66,128,.12);stroke-width:1.4;will-change:transform;
}
.dealwave path:nth-child(1){fill:rgba(59,156,255,.05); stroke:rgba(59,156,255,.2); animation:dwaveA 19s ease-in-out infinite}
.dealwave path:nth-child(2){fill:rgba(31,66,128,.045); stroke:rgba(31,66,128,.16);animation:dwaveB 23s ease-in-out infinite}
.dealwave path:nth-child(3){fill:rgba(59,156,255,.055);stroke:rgba(59,156,255,.16);animation:dwaveA 27s ease-in-out infinite reverse}
@keyframes dwaveA{
  0%,100%{transform:translate3d(0,0,0)}
  50%    {transform:translate3d(14px,-10px,0)}
}
@keyframes dwaveB{
  0%,100%{transform:translate3d(0,0,0)}
  50%    {transform:translate3d(-11px,12px,0)}
}

/* Dots at the TOP RIGHT — the waves are on the left, so putting them
   there would be two things fighting over one side. */
.dealdots{
  position:absolute;z-index:0;pointer-events:none;
  top:clamp(26px,4vw,64px);right:0;width:min(24%,260px);height:clamp(150px,18vw,290px);
  background:radial-gradient(rgba(31,66,128,.24) 1.5px,transparent 1.6px) 0 0/17px 17px;
  -webkit-mask-image:linear-gradient(250deg,#000 6%,transparent 74%);
          mask-image:linear-gradient(250deg,#000 6%,transparent 74%);
  animation:pdrift 22s linear infinite;
}

/* ---- THE RIBBON AT THE TOP RIGHT ----
   The same as the one in #interview, drawn the same way — that one is at
   the BOTTOM right, this one at the TOP right, so they are not the same
   corner repeated twice in a row. It needs `--haba` from
   `getTotalLength()`; see section 4f of main.js — it measures across the
   whole document now, not only in #interview. */
/* ---- ⚠ THE CONTINUATION OF THE RIBBON ----
   This used to be at the TOP right, exactly like the one at the bottom
   right of #interview: two matching swooshes overlapping at the seam.
   It is on the LEFT now and running downward — the eye is carried across
   by the line, not back.

   ⚠ THE WIDTH IS `min(34%, 470px)` AND BOTH HALVES HAVE A REASON: at 1440
     that is 470px and it leaves through the left edge at y≈290, before
     the card at y=350; at 1024 it is 343px and leaves at y≈205, before
     the lead at y=219. As `%` alone it overshoots on a wide screen; as
     `px` alone it hits the text on a narrow one. */
.ribbon--deal{
  top:-2%;left:0;right:auto;bottom:auto;
  width:min(34%,470px);height:clamp(250px,26vw,378px);
  transform:none;
}
.ribbon--deal .ribbon__n{stroke-width:15}
.ribbon--deal .ribbon__r{stroke-width:11}

/* ---- ⚠ THE SCROLL DRAWS THIS, NOT `[data-reveal]` ----
   `--guhit` (0–1) comes from section 9d of main.js. At 0 the stroke is
   entirely hidden; at 1 it is whole. That is what "follows the scroll"
   means: as you descend, the line lengthens.

   ⚠ THERE IS NO `transition` HERE AND THAT IS DELIBERATE. `--guhit`
     already changes on every frame of the scroll; a transition on top of
     that adds a second lag and the stroke turns to rubber. The scroll
     itself is what makes it smooth. */
.ribbon--deal path{
  stroke-dashoffset:calc(var(--haba,760px) * (1 - var(--guhit,0)));
}

/* ⚠ HIDDEN ON A NARROW SCREEN, AND THIS WAS MEASURED. At ≤1024 `.packs`
     reaches x=22 — only 22px of margin left on the left, and no ribbon
     fits there without crossing the card. At 390 there is no margin at
     all: the lead and the h2 are also at x=22. Better nothing than
     something crossing the text. */
@media (max-width:1100px){ .ribbon--deal{display:none} }

/* ⚠ `.dealglow` WAS REMOVED (Aug 12, 2026) — two floating circles of
     light, blue and red. The background is four layers now (warehouse,
     waves, dots, ribbon) and the light was the weakest of them all: on a
     light ground it is nothing but a pale cloud.
     The full version is in the git history if it is ever needed.
     ⚠ THE RED IS ON THE CARD NOW — in the third `--ac`, and from there it
       reaches the glow behind the icon, the tint of the body, the border,
       the dashed rule, the fabric in the corner and the shadow of the
       Distributor. That is where it has work to do, not as a cloud
       behind. (A rule under the card was what was written here once —
       that has been gone a long time; `.pack::after` is something else
       entirely now.) */

/* ---- THE TITLE ----
   ⚠ IT SAYS TWO THINGS, NOT ONE NAME: the BRAND (TapeMate, navy) and
     what is OFFERED (Dealer, red). They used to be one colour, and read
     that way it sounds like a product name.

   ⚠ THE HAND-DRAWN RULE IS BRONZE AND NOT RED. The word above it is
     already red; a red rule as well would disappear into the lettering.
   ⚠ IT USED TO BE `#C98A3C` AND I MEASURED IT: 2.64:1 on #EDF4FD — below
     the 3:1 minimum for non-text. `#B87A2B` is 3.25:1. It is not read,
     but it still has to be SEEN — short of that the rule is useless and
     better left out. */
/* ⚠ ITS OWN SIZE AND NOT THE PAGE'S `.h2` (54px). This is two rows, so
     every pixel added counts double — and the section has to fit one
     screen. At 44px it is 94px tall instead of 114px, and still large:
     5.5× the size of the body. */
.h2--deal{line-height:1.06;font-size:clamp(28px,3.1vw,44px)}
/* Wider than the usual `.lead` — it was five rows on desktop and is four
   now. One row saved without making the type smaller. */
.deal__top .lead--deal{max-width:72ch}
.dnavy{color:var(--navy)}
.hl2--tanso{color:var(--red)}
.hl2--tanso .hl2__u path{stroke:#B87A2B}
/* On a phone "TapeMate Dealer" is one row — the column is far too narrow
   for a three-row title. */
.br-dsk{display:inline}
@media (max-width:560px){ .br-dsk{display:none} }

.deal__top{position:relative;z-index:2;text-align:center;display:grid;justify-items:center}
.deal__top .lead{margin-inline:auto;text-align:center}
/* ---- ⚠ THE STATUS BADGE ----
   This used to be a solid green sticker when open (`#1FA95C`) — and there
   is no green anywhere in the brand guideline. It read as pasted on.

   It is glass now with a RED DOT — or green once it is open. The DOT is
   what holds the meaning, not the whole pill: that is what changes
   colour, and that is the only place the green appears. The pill stays
   within the palette. */
.badge{
  position:relative;z-index:2;
  display:inline-flex;align-items:center;gap:10px;font-family:var(--display);font-weight:800;
  font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--navy-deep);
  background:rgba(255,255,255,.72);padding:9px 18px;border-radius:999px;margin-bottom:20px;
  box-shadow:inset 0 0 0 1.4px rgba(31,66,128,.16);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
}
/* Two overlapping circles: the hard dot and the ring spreading from it.
   With one circle alone it blinks; with two it spreads — and the
   spreading is what says ALIVE, rather than a broken light. */
.badge::before{
  content:"";width:8px;height:8px;border-radius:50%;background:var(--red);flex:none;
  box-shadow:0 0 0 0 rgba(217,4,41,.6);
  animation:blip 2.4s ease-out infinite;
}
@keyframes blip{
  0%  {box-shadow:0 0 0 0 rgba(217,4,41,.55)}
  70% {box-shadow:0 0 0 9px rgba(217,4,41,0)}
  100%{box-shadow:0 0 0 0 rgba(217,4,41,0)}
}
/* Open — the dot is green, and ONLY the dot.
   ⚠ `#1FA95C` AND NOT `#2ECC71` SINCE THE SECTION MOVED TO SAND. I
     measured `#2ECC71` on `#F1E1C8`: 1.9:1. That falls short even of the
     3:1 asked of non-text, and this dot's entire job is TO BE SEEN.
     `#1FA95C` is 3.2:1 — it passes. */
.badge.is-open::before{background:#1FA95C;animation-name:blipOpen}
@keyframes blipOpen{
  0%  {box-shadow:0 0 0 0 rgba(31,169,92,.6)}
  70% {box-shadow:0 0 0 9px rgba(31,169,92,0)}
  100%{box-shadow:0 0 0 0 rgba(31,169,92,0)}
}

.deal__count{display:flex;gap:10px;margin-top:30px}
.deal__count div{
  min-width:74px;background:rgba(255,255,255,.66);border:1px solid rgba(31,66,128,.14);
  border-radius:12px;padding:12px 8px;text-align:center;
}
.deal__count b{display:block;font-family:var(--display);font-weight:900;font-style:italic;font-size:27px;letter-spacing:-.03em;color:var(--navy-deep);font-variant-numeric:tabular-nums}
.deal__count span{display:block;margin-top:3px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:rgba(2,19,52,.58)}
.deal__count.is-done{display:none}

.packs{
  position:relative;z-index:2;
  display:grid;grid-template-columns:repeat(3,1fr);gap:18px;
  margin-top:clamp(26px,3.4vh,36px);align-items:stretch;
}
/* ================================================================
   ⚠ THE FAN — THE THREE OVERLAP, THEY DO NOT SIT SIDE BY SIDE (Aug 12, 2026)

   "naka ganito dapat yung placement nung cards … then once mag next
   yung card na yon ang haharap then like umiikot lang sila."

   They used to be three side by side in a grid with an 18px gap, with
   only the 3D added — so the two were indeed turned away but there was
   still a GAP between them. In the reference there is NO gap: the inner
   edge of each of the two goes BEHIND the middle card itself.

   ⚠ THE THREE SHARE ONE BOX (`grid-area:1/1`), AND THIS IS THE WHOLE
     SECRET. The grid has only one column, and the three cards stack in
     it; `translateX` is what brings the two out. Three things come free
     from this, and each is the cure for a real problem:

       1. ALL THREE ARE THE SAME WIDTH — only one column is measured.
       2. ALL THREE ARE THE SAME HEIGHT (`stretch` in one row), so the
          "Investment" and the arrows line up across all three despite
          lists of different lengths.
       3. The middle one is GENUINELY IN THE MIDDLE of the section — it is
          not "the second card in a row that was given a taller shadow".

   ⚠ THE POSITION IS A SINGLE NUMBER: `--side` (−1 left, 0 front,
     +1 right). The JS writes it (section 9e) and everything is CALCULATED
     from it — distance, depth and angle. So there is no "first card" and
     "third card" written here: when the focus moves, the three swap
     places on their own and it reads as ROTATION.

   ⚠ `--likod` = `--side × --side` — 1 at the sides, 0 when selected.
     This is what pushes the two away (`translateZ`) without needing a
     separate rule for the selected card. ONE `transform` FOR ALL THREE
     CARDS, and that is necessary: when the list of functions matches
     (`translateX translateZ rotateY`), CSS interpolates each one
     SEPARATELY during the transition — smooth. When the lists differ it
     goes through a matrix instead and the card spins about on its way to
     its place.

   ⚠ A POSITIVE `rotateY` PUSHES THE RIGHT EDGE AWAY. So the card on the
     RIGHT (+1) is `+16deg` — its right edge is the outer one; the card on
     the LEFT (−1) is `−16deg` — there it is the left edge that recedes.

   ⚠ 93% AND NOT PIXELS. It is measured against the card's own width, so
     the fan looks the same at 1180 and at 901 — no media query is needed
     for the distance.

   ⚠ THE OVERLAP IS SLIGHT (≈30px), AND IT WAS MEASURED AGAINST THE
     REFERENCE. 84% was the first attempt and the overlap came to 68px —
     and there the text of the two side cards was CUT: "Dealer pricing on
     fast-moving item…". In the reference not one letter is cut; only the
     EDGE of the card is behind, not its contents. Measured on the
     supplied image: about 18–20px of overlap on a 375px card — enough to
     say SOMETHING IS BEHIND, too little to bury anything.
     What was measured here afterwards: 31px of overlap on a 437px card,
     and 24–32px of CLEARANCE still between the innermost letter and the
     edge of the middle card, from 1440 down to 901.

   ⚠ THE FULL SPREAD IS 2.5W: 1093px in a 1180 `.wrap` and 802px at 857.
     The `37%` is what guards this — at 41% (the first attempt) the fan
     overflows at 1024 and below. The `440px` is only a limit in case
     `.wrap` is ever enlarged; at 1180 the 37% is already 437px.

   ⚠ THERE IS NO `scale` ANYWHERE — the `translateZ(-130px)` is what
     shrinks them (1500/(1500+130) = 0.920, and the measured width of a
     side card including the rotation is 0.82). Add a `scale` on top and
     there are two things scaling, and they contradict each other the
     moment one is changed.

   ⚠ NOR IS THERE A `translateY` ON THE SELECTED ONE. The
     `perspective-origin` at 44% (high of centre) is what lifts it: the
     two at the sides shrink TOWARD that point, so their tops come down
     and their bottoms come up on their own. That is exactly what is in
     the reference — the middle card is both higher and lower than the
     other two at once.

   ⚠ 16deg AND NO MORE. This is text, not a picture: at a larger angle the
     two cards with their full lists inside become blurred and read on a
     slant. 20deg was the first attempt — the four ticks there are already
     hard to read.

   ⚠ `.packs .pack` AND NOT `.pack`, AND THIS IS NOT SELECTOR DECORATION.
     There is a `[data-reveal].is-in{transform:none}` in section 4
     (line 729) — that is (0,2,0), and a plain `.pack` is only (0,1,0).
     With a plain `.pack` NO FAN WOULD EVER APPEAR: `transform:none` kills
     it all once the card has entered. The extra `.packs` gives a second
     class — (0,2,0) as well — and it sits BELOW line 729, so it wins the
     tie.

   ⚠ ON PC ONLY (`min-width:901px`). A phone shows one card per view and
     its row has an `overflow` scroll of its own — there is no neighbour
     to turn away from, and a `perspective` on a sliding box is only extra
     work every frame. */
@media (min-width:901px){
  .packs{
    grid-template-columns:min(37%,440px);
    justify-content:center;gap:0;
    perspective:1500px;perspective-origin:50% 44%;
  }
  /* ---- ⚠ THE CONTENT WIDTH IS A MEASURE OF THE CARD, NOT A FIXED PIXEL ----
     It used to be `272px` at every width — right when the three sat side
     by side, A DEFECT now that they overlap. The card is only 317px in a
     901px window: 277px inside, so the list FILLS the card right to the
     edge — and any overlap at all means CUT TEXT on the two side cards.
     Measured: 31px of "Dealer pricing on fast-moving items" was lost.

     The `100% - 78px` is what always leaves a margin at both ends — the
     list shrinks along with the card, so every letter stays OUTSIDE the
     covered part at every width.
     The `292px` is the limit in a wide window: there the margin is 52px,
     and anything more is just space inside the card.

     ⚠ THIS IS PC ONLY. There is no overlap on a phone (one card per
       view), so it is still 272px there — the list should not retreat
       when nothing is covering it. */
  .packs .pack{
    --laman:min(292px, 100% - 78px);
    grid-area:1/1;
    transform:
      translateX(calc(var(--side,0) * 93%))
      translateZ(calc(var(--likod,0) * -130px))
      rotateY(calc(var(--side,0) * 16deg));
  }
  /* Hover on a side card is weaker — an answer to the finger, not a
     second "selected". It turns toward the front only PARTLY
     (20deg → 13deg) and comes slightly closer; it never reaches the
     selected one's position, so nothing is imitated. ⚠ Still the same
     list of functions — a different one and the transition goes to
     matrix. */
  .packs .pack:not(.is-lit):focus-within{
    transform:
      translateX(calc(var(--side,0) * 82%))
      translateZ(calc(var(--likod,0) * -86px))
      rotateY(calc(var(--side,0) * 10deg));
  }
  @media (hover:hover){ .packs .pack:not(.is-lit):hover{
    transform:
      translateX(calc(var(--side,0) * 82%))
      translateZ(calc(var(--likod,0) * -86px))
      rotateY(calc(var(--side,0) * 10deg));
  } }
}
/* ---- ⚠ THE THREE CARDS ----
   They used to be glass on navy: translucent white with an `inset` rule
   along the top. There is no glass on sand — there is no light to catch.

   ⚠ THEY ARE SOLID WHITE NOW AND NOT TRANSLUCENT. The sand is the only
     thing in the section with texture (rules, dots, a photo); with a
     translucent card all of that passes behind the text. Solid white is
     what gives the contents a QUIET place — and the difference between
     white and sand is what gives the shape now, not the border.

   ⚠ THE SHADOW IS WHAT CARRIES IT NOW, NOT THE BORDER. On a dark ground
     the shadow is invisible, so a border is what is needed there; on a
     light one it is the reverse — the shadow is what says the card is
     LAID ON TOP, and a heavy border would just look drawn on. */
/* ⚠ `overflow:hidden` FOR THE TAB. The mark at the bottom right
     (`.pack__wm`) was the reason once; that is gone. The tab is what
     needs it now: it is hidden at `translateY(-100%)` — directly ABOVE
     the card's edge — and the clipping is what hides it until the card is
     selected. REMOVE THE `overflow:hidden` AND ALL THREE TABS APPEAR. */
/* ⚠ THE WHOLE CONCEPT OF THE CARD WAS CHANGED (Aug 12, 2026) — following
   the reference that was sent. It used to be a row with a number badge, a
   ladder rule and an icon at either end, with centred text on the left.
   Everything is centred now: icon at the top, title, who-it-is-for, a
   short rule, the list, and the value beneath the dashed rule.

   ⚠ THE SECTION'S BACKGROUND WAS NOT TOUCHED. The waves, the dots, the
     photo, the ribbon and the light that follows the mouse are all as
     they were — ONLY THE CARDS changed, as was asked. */
/* ---- ⚠ THE PAINT ORDER (`z-index`) ----
   All three overlap now, so this is a question of PAINT ORDER and no
   longer merely of looks: the selected one is 3 (in front), the two at
   the sides are 1.

   ⚠ THE `z-index` HAS A `0s .31s` `transition`, AND THAT IS A CURE — not
     decoration. `z-index` does not glide: IT SWITCHES AT ONCE. Which
     means that the instant you press "next", the card that is still ON
     ITS WAY to the middle is already in front while it is still at the
     side — a small, turned-away card laid over a large, front-facing one.
     With a `0s` duration and a halfway (.31s of .62s) delay, the swap
     happens in the MIDDLE of the transition — where they are at nearly
     the same depth, so the change cannot be seen.

   ⚠ THE `0s` IS THE POINT, NOT THE `.31s`. A `transition` with no
     duration does not interpolate a value — it merely delays the jump.
     This is the only way to give TIME to a property that cannot be
     halved. */
.pack{
  --ac:31,66,128;
  /* 1 at the sides, 0 when selected — see the fan above */
  --likod:calc(var(--side,0) * var(--side,0));
  /* ⚠ ONE NUMBER SETS THE WIDTH OF THE LIST, THE VALUE AND THE ARROWS.
     These used to be three separate `272px`, and the alignment of the
     dashed rule with the ticks and with the arrows depended on all three
     matching. It is one number now — and the PC measures its own value
     (see the fan above). */
  --laman:272px;
  position:relative;z-index:1;
  display:flex;flex-direction:column;align-items:center;text-align:center;
  overflow:hidden;
  /* ⚠ THE UNSELECTED CARD NOW HAS A TINT (.055), IT IS NO LONGER PURE
     WHITE. It is only half the tint of the selected one (.1) — it stays
     obvious which is in front, but there is no PURE WHITE left anywhere:
     pure white beside a tinted card looks deficient, not quiet. It is
     measured against `--ac`, so all three have a different tint.

     ⚠ THE SUNBURST BEHIND THE ICON IS ON THE CARD'S OWN BACKGROUND AND
       NOT ON A PSEUDO-ELEMENT: an element's background is THE VERY FIRST
       THING painted — there is no way it can bury any lettering, and no
       `z-index` to keep watch over.
       Its centre sits high on the icon (30px from the top), so it looks
       as if it is rising behind it — that is where the eye lands at
       first glance. */
  background:
    radial-gradient(210px 128px at 50% 30px,rgba(var(--ac),.2),rgba(var(--ac),0) 72%),
    linear-gradient(180deg,rgba(var(--ac),.055),rgba(var(--ac),0) 48%),
    #fff;
  /* Sariling kulay na rin ang gilid — navy ito sa lahat noon (.11), at
     iisang kulay na gilid sa tatlong magkaibang card. */
  border:1px solid rgba(var(--ac),.2);
  border-radius:20px;padding:34px 20px 24px;
  /* ⚠ THE SHADOW HAS A COLOURED LAYER. A black shadow alone says how high
     the card is; a tinted one also says WHAT COLOUR it is — and the
     shadow is the only part of the card that spills onto the sand, so
     that is where the colour reaches furthest. */
  box-shadow:0 18px 34px -26px rgba(2,19,52,.5),
             0 14px 26px -20px rgba(var(--ac),.4),
             0 2px 5px -3px rgba(2,19,52,.18);
  /* ⚠ `var(--ease)` AND NOT `var(--back)` ON THE FAN. The card travels a
     long way (0.76 of its own width); `--back` overshoots by 1.4, and at
     that distance the card BOUNCES at the end instead of landing.
     `--ease` is expo-out: a fast start, a long quiet landing. */
  transition:transform .62s var(--ease),border-color .4s ease,
             box-shadow .5s var(--ease),background .5s ease,
             z-index 0s .31s;
}
/* ⚠ THE FIRST POSITION IS IN THE CSS AND NOT IN THE JS, AND THAT IS
   DELIBERATE. The JS writes `--side` (inline, so it wins) — but the
   script is `defer`, so for a few frames it is not there yet. Left to the
   JS alone, the first thing the browser paints is THREE OVERLAPPING CARDS
   in one box: all at once, no fan, then a sudden scatter. This matches
   the JS's own first position (the middle selected), so there is no jump
   when the script arrives. */
.packs .pack:nth-child(1){--side:-1}
.packs .pack:nth-child(2){--side:0}
.packs .pack:nth-child(3){--side:1}
/* ⚠ THE CARD ROTATING BEHIND (`.is-back`) — BEHIND EVERYTHING.
   There are only three cards, so on EVERY press one card goes somewhere
   that is not a neighbouring position: the one on the left (−1) crosses
   to the right (+1) on "next". It rotates BEHIND — which is right — but
   at `z-index:1` alone THE MARKUP ORDER decides who is in front, and in
   one of the three transitions the one crossing comes first. Here the JS
   (section 9e) says who is crossing, and its depth is 0 while it does. */
.pack.is-back{z-index:0}
/* An unselected card can be pressed to move the focus there. It is not
   the only route — the arrows are the primary one — so there is no
   `tabindex` here; the two real buttons are for the keyboard. */
.pack:not(.is-lit){cursor:pointer}

/* ================================================================
   ⚠ THE COLOUR OF THE CARD (Aug 13, 2026 — *"add some design or color sa
   cards bcs its plain"*)

   The three used to be nothing but white boxes: only the icon, the short
   rule and the ticks had colour, and ALL of those are small things in the
   middle of a wide white. Each card already had an `--ac` — navy for
   Starter, electric for Business, red for Distributor — but almost none
   of it was visible.

   ⚠ NO NEW COLOUR WAS INTRODUCED, `--ac` WAS SIMPLY USED AT A LARGER
     SCALE. That is why moving the focus breaks none of it: the glow
     behind the icon, the tint of the body, the border, the dashed rule,
     the fabric in the corner and the shadow are ALL `var(--ac)`, so the
     whole card turns red on its own when Distributor is selected. There
     is no blue written anywhere.

   ⚠ THE SECTION'S BACKGROUND IS STILL UNTOUCHED — this is the cards only,
     as was asked from the start. */

/* ---- ⚠ THERE IS NO LONGER A RIBBON AT THE TOP OF THE CARD (Aug 13, 2026) ----
   *"i dont like this concept remove this"* — a separate answer about the
   ribbon alone; the five other things added with it stayed.

   It was a 6px diagonal band of `--ac` along the very top edge of each
   card (`.pack::before`), full on the selected one and .62 on the other
   two. As `repeating-linear-gradient(-45deg, rgb(var(--ac)) 0 7px,
   rgba(var(--ac),.4) 7px 14px)` — that was the whole rule, together with
   `position:absolute; inset:0 0 auto; height:6px`.

   ⚠ `.pack`'s `::before` IS FREE NOW. If anything else is added here,
     remember what was learned then: `.pack__tab` slides down from
     `translateY(-100%)`, so it PASSES THROUGH whatever sits on the top
     edge. Do not give it a `z-index` — both are positioned and both are
     `z-index:auto`, so the markup order is what hides the tab beneath the
     pseudo-element. */

/* ---- THE FABRIC IN THE BOTTOM CORNER ----
   The bottom half is what is left as pure white after the sunburst —
   large and empty, especially on the Starter with only three ticks. It is
   a diagonal hatch in the card's own colour, the same as the ribbon
   behind the section: FABRIC, not an object.

   ⚠ THIS IS NOT `.pack__wm` COMING BACK. What was removed there was the
     card's OWN ICON enlarged and placed in the corner — a second copy of
     the one at the top. This is not a picture of anything: it is hatching,
     so it repeats nothing.

   ⚠ THERE IS A `mask` AND IT IS NEEDED. A `repeating-linear-gradient` has
     no end — it simply stops at the edge of the box, leaving a VISIBLE
     SQUARE boundary in the middle of the card. The circular `mask` is
     what dilutes it inward, so it is only strong in the corner and gone
     before it reaches any lettering.

   ⚠ `z-index:-1` — IT IS BEHIND EVERY LETTER AND NOT ON TOP.
     A positioned child at `z-index:auto` is painted AFTER the text; only
     a negative one is painted between the card's background and its
     contents. So even where it passes behind the arrows and the
     "Investment" no lettering is weakened.
     This works because `.pack` has a stacking context of its own
     (`position:relative` + `z-index:1`), so it cannot escape the card.

   ⚠ BOTTOM RIGHT ON ALL THREE, NOT MIRRORED PER SIDE. I tried following
     `--side` so it would always be in the OUTER corner — but the three
     cards swap places on every press, so the fabric would JUMP in the
     middle of the transition. One corner on all three: quiet, and nothing
     moves that should not move. */
.pack::after{
  content:"";position:absolute;z-index:-1;pointer-events:none;
  right:-26px;bottom:-34px;width:238px;height:238px;
  background:repeating-linear-gradient(-45deg,
    rgba(var(--ac),.11) 0 6px, rgba(var(--ac),0) 6px 16px);
  -webkit-mask-image:radial-gradient(closest-side,#000 8%,transparent 80%);
  mask-image:radial-gradient(closest-side,#000 8%,transparent 80%);
  opacity:.62;transition:opacity .5s var(--ease);
}
.pack.is-lit::after{opacity:1}

/* ---- ⚠ THE MARK INSIDE ----
   The card used to be nothing but a white box: text only, with nothing to
   say what colour it is until you see the small badge at the top.

   ⚠ THE STRENGTH IS ONLY `.045`. There is text over it. This is not a
     picture to be looked at but fabric — if you can read the shape
     without looking for it, it is too much.
   ⚠ IT OVERHANGS THE EDGE (`right:-14px; bottom:-18px`). A whole icon
     inside looks like a stray sticker; a CUT icon says it is larger than
     the card — fabric, not an object.
   ⚠ `z-index:0` WITH THE CONTENT AT `1`. It is behind every letter.

   ⚠ `stroke-width` DOES NOTHING HERE, AND YOU SHOULD KNOW WHY: the
     `<g stroke-width="1.8">` is inside the `<symbol>`, and CSS cannot
     reach the contents of a `<use>`. That 1.8 is in a viewBox of 24, so
     at 132px the TRUE weight is 9.9px — very heavy indeed. Only two
     things are controllable: the SIZE and the OPACITY, and that is all
     there is to tune.
   ⚠ FURTHER FROM THE CORNER THAN THE FIRST ATTEMPT. At `-14/-18` it sits
     behind the ticks and the dashed rule and reads as a stain. At
     `-22/-26` it is below the rule — fabric now, no longer in the way. */
/* ⚠ THERE IS NO MORE `.pack__wm` — the large, barely visible icon at the
   bottom right of the card. The card is clean white in the reference, and
   the icon is already at the top, large and whole; REPEATING it as
   fabric is a second copy of the same thing on one card. */
/* ---- ⚠ THE RULE ALONG THE VERY BOTTOM OF THE CARD ----
   This is the only place `--ac` appears at FULL strength. The number
   badge is small and the icon is only a ring; the card needs one wide
   thing to say what colour it is from a distance.

   ⚠ AT THE BOTTOM AND NOT THE TOP. The badge and the icon are already at
     the top; a third thing there is a crush. And at the bottom it works
     as a foundation — the card looks like it is standing, not hanging.

   ⚠ `scaleX` AND NOT `width`. `width` is layout; `scaleX` is compositor
     only, and this is what moves on every hover. */
/* ---- THE TAB AT THE TOP ----
   ⚠ IT IS INSIDE THE EDGE AND DOES NOT OVERHANG. The card has
     `overflow:hidden`; anything overhanging the top is cut off. It is the
     same in the reference: flush with the top edge, with the BOTTOM
     corners rounded.
   ⚠ THAT `overflow:hidden` IS ALSO WHAT HIDES IT WHEN UNSELECTED — it is
     only `translateY(-100%)`, so it slides down out past the card's edge
     instead of appearing from nowhere. */
.pack__tab{
  position:absolute;top:0;left:50%;
  transform:translate(-50%,-100%);
  padding:5px 16px 6px;border-radius:0 0 12px 12px;
  background:rgb(var(--ac));color:#fff;
  font-family:var(--display);font-weight:800;font-size:10.5px;
  letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;
  transition:transform .55s var(--back);
}
.pack.is-lit .pack__tab{transform:translate(-50%,0)}

/* ⚠ THERE IS NO MORE `.pack[data-reveal]{transition-delay:calc(var(--i,0)*.1s)}`,
   AND THAT WAS A DEFECT — not merely an extra. Its purpose was to stagger
   the entrance of the three cards; what was missed: `transition-delay`
   SELECTS NO PROPERTY. It delays the whole of `.pack`'s list — including
   `transform`. So on every press of "next", the third card moves 0.2s
   later than the first: it does not read as a FAN but as three separate
   cards that happen to have been told to move at once.

   ⚠ THE STAGGERED ENTRANCE WAS NOT LOST. It is on the CONTENTS of the
     card (`.pack.is-in .pack__ico`, `.pack__rule`, `.ticks li`) and all
     three still carry a `--i * .1s` — that is where it is actually seen,
     and moving the focus does not disturb it. */
/* ⚠ HOVER AND `.is-lit` LOOK THE SAME — and that is necessary: `.is-lit`
   is the rotating focus (section 9b of main.js), and if it looked
   different from hover the eye would have to learn two languages for one
   meaning. */
/* ⚠ `--ac` IS NAVY HERE AND NOT ELECTRIC (`59,156,255`). Electric belongs
     on navy, and there it is right — the text around it is white. On a
     white card electric is 2.84:1: that fails even the 3:1 asked of
     non-text, and `--ac` is what colours the LADDER RULE and the NUMBER
     (01/02/03) — two things that have to be read. */
/* ---- ⚠ THE SELECTED CARD ----
   ⚠ `transform:translateY(-8px) scale(1.045)` IS GONE FROM HERE ON PC,
     AND NO EFFECT WAS LOST. The depth itself (`translateZ`) is what
     enlarges now: the selected one is at 0 and the other two at −130px,
     and their measured width is only 0.82 of the selected one — larger
     than the 1.045 that used to be written, and this is REAL depth and
     not merely size.
     A `scale` on top of that is a second enlargement fighting the first:
     fix one and you break the other.
     ⚠ IT REMAINS ON A PHONE (in the `max-width:900px` below) — there is
       no depth there, so size is the only method left.

   ⚠ `z-index:3` AND NOT 2. All three overlap now; see the `z-index` note
     above `.pack`.

   ⚠ THE TINT IS THE CARD'S OWN COLOUR (`--ac`) AND NOT A HARD-CODED BLUE.
     The middle is blue in the reference because that card is blue; the
     focus moves here, so a red card must have a red tint — otherwise it
     is a blue tint inside a red border. */
.pack.is-lit{
  z-index:3;
  /* ⚠ THE SUNBURST IS REPEATED HERE AND IT IS NOT REDUNDANT. This rule
     replaces the whole `background` — with only the tint written, the
     sunburst behind the icon is ERASED on the very card that should be
     the strongest. The two should rise together: a stronger sunburst
     (.28 against .2) and a stronger tint (.1 against .055). */
  background:
    radial-gradient(230px 140px at 50% 30px,rgba(var(--ac),.28),rgba(var(--ac),0) 72%),
    linear-gradient(180deg,rgba(var(--ac),.1),rgba(var(--ac),0) 58%),
    #fff;
  border-color:rgba(var(--ac),.42);
  box-shadow:0 44px 66px -34px rgba(2,19,52,.42),
             0 14px 30px -16px rgba(var(--ac),.5),
             0 3px 8px -4px rgba(2,19,52,.18);
}
/* Hover here is colour and shadow only. ⚠ THE HOVER'S `transform` IS IN
   THE MEDIA QUERY ABOVE — because that is the only place there is a fan,
   and writing it here as well would have one running over the other. */
.pack:not(.is-lit):focus-within{
  border-color:rgba(var(--ac),.3);
  box-shadow:0 30px 48px -30px rgba(2,19,52,.42),
             0 8px 18px -12px rgba(var(--ac),.32),
             0 3px 8px -4px rgba(2,19,52,.18);
}
@media (hover:hover){ .pack:not(.is-lit):hover{
  border-color:rgba(var(--ac),.3);
  box-shadow:0 30px 48px -30px rgba(2,19,52,.42),
             0 8px 18px -12px rgba(var(--ac),.32),
             0 3px 8px -4px rgba(2,19,52,.18);
} }
/* On a phone (no fan) the size and the lift are the only ways left to
   say which one is selected. */
@media (max-width:900px){
  .pack.is-lit{transform:translateY(-8px) scale(1.045)}
  .pack:not(.is-lit):focus-within{transform:translateY(-5px)}
  @media (hover:hover){ .pack:not(.is-lit):hover{transform:translateY(-5px)} }
}
.pack h3{
  margin-top:15px;font-family:var(--display);font-weight:900;font-style:italic;
  font-size:clamp(20px,1.85vw,25px);letter-spacing:-.03em;color:var(--navy-deep);
}
/* ⚠ 38ch AND NOT 25ch. All three are one line in the reference; 25ch
   (≈170px) is what was written, and there TWO of them ran to two lines —
   squeezed by the narrow card back when all three sat side by side.
   `var(--laman)` sets the limit in a narrow window, so even there it does
   not reach the part covered by the middle card. */
.pack__for{margin-top:6px;max-width:min(38ch,var(--laman));font-size:13.5px;line-height:1.45;color:rgba(2,19,52,.6)}
/* A short rule under the "who it is for" — this is where the tier's
   colour shows. Half at rest and full when selected. */
.pack__rule{
  display:block;width:46px;height:3px;border-radius:2px;margin:14px 0 2px;
  background:rgb(var(--ac));
  transform:scaleX(.52);transform-origin:center;
  transition:transform .55s var(--back);
}
.pack.is-lit .pack__rule{transform:scaleX(1)}
/* ⚠ THIS IS ATTACHED TO `.pack` ONLY. `.ticks li` is 15px across the
     whole page; reducing it there would shrink every list in #interview,
     #about and #proof — three sections with nothing to do with what was
     asked. */
/* ⚠ THE CARD IS CENTRED BUT THE LIST IS LEFT-ALIGNED. A centred list
   changes where each row begins, so the eye cannot follow it; the BLOCK
   is centred, not the line. The reference does the same. */
/* ⚠ `align-content:start` — THIS IS NOT COSMETIC, IT IS A CURE. `.ticks`
   is `display:grid` and `flex:1 1 auto` inside the card, so it STRETCHES
   to the remaining height (so that "Investment" is level across all three
   despite lists of 3, 4, 4). A grid's `align-content` is `normal` when
   nothing is written, and that means `stretch` — the surplus height is
   HANDED OUT to the rows. Result: the Starter has 3 ticks, so its gaps
   are 49px each while the others are only 25px. At `start` the rows take
   their natural size and the surplus goes to the BOTTOM — which is the
   whole point of `flex:1`. */
.pack .ticks{
  width:100%;max-width:var(--laman);margin:18px auto 0;
  gap:11px;text-align:left;flex:1 1 auto;align-content:start;
}
.pack .ticks li{font-size:14px;align-items:center}
/* ⚠ `padding` IS WHAT CHANGES THE TICK, NOT A DIFFERENT ICON. On the
   selected card the reference's tick is a circle filled edge to edge with
   colour. It is a single `<svg>`: the round background grows and the
   stroke inside RETREATS — no second markup, and the transition glides. */
.pack .ticks .ico{
  width:19px;height:19px;flex:none;margin-top:0;padding:0;box-sizing:border-box;
  border-radius:50%;background:rgba(var(--ac),0);color:rgb(var(--ac));
  transition:background .45s var(--ease),color .45s var(--ease),padding .5s var(--back);
}
.pack.is-lit .ticks .ico{
  padding:3px;background:rgb(var(--ac));color:#fff;
}
.pack__price{
  width:100%;max-width:var(--laman);margin:20px auto 0;padding-top:14px;text-align:left;
  /* ⚠ THE DASHED RULE TAKES THE CARD'S COLOUR TOO — it was navy on all
     three before. It is the widest line at the bottom of the card, so it
     is the easiest place to see the tier's colour without reaching any
     lettering. */
  border-top:1px dashed rgba(var(--ac),.34);font-size:13px;color:rgba(2,19,52,.62);
}
/* ⚠ NAVY AND NOT ELECTRIC. This is small type (16px), so 4.5:1 is
   required — electric on white is only 2.84:1. */
.pack__price b{font-family:var(--display);font-weight:800;color:var(--navy);font-size:16px}

/* ⚠ THERE IS NO MORE .pack__head, .pack__step OR .pack__rung (Aug 12, 2026).
   They were a number badge (01 02 03) and a widening rule (1/3, 2/3,
   full) in one row at the top of the card — a LADDER was what they said,
   measuring the size of the business, not rank and not price.

   ⚠ THAT MEANING WAS NOT LOST, IT ONLY MOVED: the position is now in the
     tab at the top of the selected card ("01 of 03"), and in the dots
     beneath the three. If a fourth tier is added, only the tab needs
     attention — there is no rule left to count.

   The three removed rules were in _parked/pack-ladder.css.txt, deleted
   Aug 18, 2026. */

/* ---- THE ICON AT THE TOP ----
   It is large and centred now, following the reference — it used to be
   44px and stuck to the right end of a row.

   ⚠ A RING WHEN UNSELECTED, FILLED EDGE TO EDGE WHEN SELECTED. That is
     the reference: the two at the sides are white circles with a coloured
     stroke, and the middle is solid blue with a WHITE icon. Here the
     focus moves, so the filling is what says which is selected — it is
     not written onto one particular card. */
.pack__ico{
  flex:none;display:grid;place-items:center;
  width:clamp(54px,5vw,64px);height:clamp(54px,5vw,64px);border-radius:50%;
  background:#fff;color:rgb(var(--ac));
  box-shadow:inset 0 0 0 1.7px rgba(var(--ac),.28), 0 10px 20px -12px rgba(2,19,52,.45);
  transition:background .45s var(--ease),color .45s var(--ease),
             box-shadow .45s var(--ease),transform .6s var(--back);
}
.pack__ico svg{width:46%;height:46%;fill:none;stroke:currentColor}
.pack.is-lit .pack__ico{
  background:rgb(var(--ac));color:#fff;transform:scale(1.06);
  box-shadow:inset 0 0 0 1.7px rgba(var(--ac),0), 0 16px 28px -12px rgba(var(--ac),.8);
}
@media (hover:hover){ .pack:not(.is-lit):hover .pack__ico{
  transform:scale(1.05);
  box-shadow:inset 0 0 0 1.7px rgba(var(--ac),.6), 0 12px 22px -12px rgba(var(--ac),.5);
} }

/* ================================================================
   ⚠ THE ENTRANCE: ONE SENTENCE, NOT FIVE SIMULTANEOUS EFFECTS

   Each card has four parts, and they have an ORDER — that is what
   separates "it has an animation" from "something is arriving":

     .22s  icon    springs up from small
     .34s  rule    widens from the middle
     .48s+ ticks   one by one, four steps

   A further `--i * .1s` is added to each, so the three cards are not in
   step with one another.

   ⚠ `backwards` AND NOT `forwards` ON ALL OF THEM. `backwards` holds the
     FIRST keyframe while waiting, and the end is normal — so hover and
     `.is-lit` can still change everything afterwards. With `forwards` the
     last keyframe is stuck and HOVER IS DEAD FOREVER.

   ⚠ THERE IS NO MORE `packStep` (the number badge) and no more `packEdge`
     (the rule underneath) — neither of those two is on the card now. */
.pack.is-in .pack__ico{animation:packIco .66s var(--back) calc(var(--i,0)*.1s + .22s) backwards}
@keyframes packIco{
  0%  {opacity:0;transform:scale(.3)}
  62% {opacity:1;transform:scale(1.14)}
  100%{opacity:1;transform:none}
}
/* From 0 to the resting half — not to full. Full belongs to the selected
   card; if it entered at full there would be nothing left for the
   selection to say. */
.pack.is-in .pack__rule{animation:packRule .7s var(--ease) calc(var(--i,0)*.1s + .34s) backwards}
@keyframes packRule{ from{transform:scaleX(0)} }

/* The middle has the widest reach among Philippine businesses — a shop or
   an online store. A slight emphasis, no tag: the programme has no
   dealers yet, so there is no true "most chosen".
   ⚠ THE FILL CARRIES THE DIFFERENCE, NOT THE BORDER. The other two cards
     are white, so a border alone would be all you see — and electric on
     white is 2.84:1, short of 3:1. With a faint tint on the body the
     difference no longer rests on the border, so its contrast is no
     longer a problem either. */
/* ⚠ THERE IS NO MORE `.pack--hot` OR `.pack__tag`. The emphasis used to
   be fixed to the middle card (`.pack--hot`); it MOVES now — `.is-lit`
   holds it, and the arrows shift it. `.pack__tag` was a parked style for
   a "Most chosen" that was never used; `.pack__tab` replaced it, and what
   is written there is a POSITION ("01 of 03") and not a rank — the
   programme has no dealers yet, so there is no true "most chosen". */

/* ---- ⚠ THE ARROWS — INSIDE THE CARD NOW ----
   This used to be a row BELOW the three cards (`.packs__nav`), together
   with the three dots. It is inside the card itself now.

   ⚠ IT IS IN EVERY CARD'S MARKUP BUT ONLY VISIBLE ON THE SELECTED ONE,
     AND `visibility` IS WHAT IS USED — NOT `display`. With
     `display:none` its height disappears on the unselected cards, so the
     selected card is A DIFFERENT HEIGHT from the other two — and because
     the tallest sets the row, EVERYTHING BELOW the section JUMPS at every
     press of an arrow. With `visibility:hidden` the space remains. It
     also removes the button from the tab order and from screen readers —
     only the selected card has two buttons.

   ⚠ THE JS MOVES FOCUS, and that is needed: when you press "next", the
     card holding that button stops being the selected one — so the button
     you have just pressed is hidden and FOCUS IS LOST. It is applied to
     the matching button on the newly selected card.

   ⚠ THERE ARE NO MORE DOTS. The tab at the top ("01 of 03") says where
     you are — they were duplicates. */
.pack__nav{
  display:flex;align-items:center;justify-content:flex-end;gap:9px;
  width:100%;max-width:var(--laman);margin:14px auto 0;
  visibility:hidden;
}
.pack.is-lit .pack__nav{visibility:visible}
.pack__arrow{
  width:38px;height:38px;flex:none;border-radius:50%;
  border:1.6px solid rgba(var(--ac),.3);background:#fff;
  display:grid;place-items:center;cursor:pointer;color:rgb(var(--ac));
  box-shadow:0 8px 16px -12px rgba(2,19,52,.55);
  transition:background .3s var(--ease),color .3s var(--ease),
             border-color .3s var(--ease),transform .35s var(--back),
             box-shadow .3s var(--ease);
}
.pack__arrow .ico{width:16px;height:16px}
.pack__arrow--prev .ico{transform:rotate(180deg)}
@media (hover:hover){ .pack__arrow:hover{
  background:rgb(var(--ac));border-color:rgb(var(--ac));color:#fff;
  transform:scale(1.09);box-shadow:0 14px 22px -12px rgba(var(--ac),.7);
} }
.pack__arrow:active{transform:scale(.93)}
.pack__arrow:focus-visible{outline:2px solid var(--electric);outline-offset:3px}
/* ⚠ NO HOVER FOR A FINGER — a finger sends no `pointerleave`, so the
   button would stay coloured after the press. */
@media (hover:none){
  @media (hover:hover){ .pack__arrow:hover{
    background:#fff;border-color:rgba(var(--ac),.3);color:rgb(var(--ac));transform:none;
  } }
  .pack__arrow:active{background:rgb(var(--ac));border-color:rgb(var(--ac));color:#fff;transform:scale(.93)}
}

.deal__cta{position:relative;z-index:2;margin-top:clamp(34px,5vh,54px);text-align:center;display:grid;justify-items:center;gap:16px}
.deal__cta p{font-size:15px;color:rgba(2,19,52,.7)}


/* ================= 13. PROOF ================= */

/* ---- THE GROUND AND THE BACKGROUND ----
   ⚠ THE SECTION'S `background` HAS NO COLOUR. It is `--paper` and its
     seams with the sections on either side depend on that; all the colour
     is on the `.proofbg` CHILD. */
#proof{position:relative;overflow:hidden;padding-bottom:clamp(46px,6vh,80px)}
#proof > .rvx,#proof > .rvfeat{position:relative;z-index:1}

.proofbg{position:absolute;inset:0;z-index:0;pointer-events:none;
  background-image:
    radial-gradient(62% 50% at 6% 84%,  rgba(241,225,200,.55), rgba(241,225,200,0) 70%),
    radial-gradient(54% 44% at 96% 8%,  rgba(251,241,227,.85), rgba(251,241,227,0) 68%);
}
/* The thin grid behind — it is in the reference, and it stops the white
   ground reading as flat. Very low opacity: 3.5%. */
.proofbg__grid{position:absolute;inset:0;
  background-image:linear-gradient(rgba(31,66,128,.055) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(31,66,128,.055) 1px,transparent 1px);
  background-size:46px 46px;
  -webkit-mask-image:radial-gradient(78% 70% at 50% 46%, transparent 22%, #000 88%);
          mask-image:radial-gradient(78% 70% at 50% 46%, transparent 22%, #000 88%);
}
/* ---- THE TWO BLURRED CIRCLES ----
   ⚠ `filter:blur()` AND LOW OPACITY. They sit behind the text at narrow
     widths, so they cannot be strong: only 12% and 10%. The text over
     them was measured and the contrast does not drop, because they cover
     almost nothing. */
.proofbg__blob{position:absolute;border-radius:50%;filter:blur(58px)}
.proofbg__blob--red{left:-6%;top:52%;width:min(24%,300px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(217,4,41,.20),rgba(217,4,41,0) 68%)}
.proofbg__blob--blue{right:-7%;top:34%;width:min(26%,330px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(31,66,128,.22),rgba(31,66,128,0) 68%)}

.proofbg__dots{position:absolute;left:2%;bottom:4%;width:min(15%,170px);height:clamp(80px,10vw,150px);
  background:radial-gradient(rgba(31,66,128,.16) 1.4px,transparent 1.5px) 0 0/17px 17px;
  -webkit-mask-image:linear-gradient(42deg,#000 4%,transparent 78%);
          mask-image:linear-gradient(42deg,#000 4%,transparent 78%);
  animation:pdrift 22s linear infinite;
}
/* The broken ring behind the phone — it is in the reference. */
.proofbg__arcs{position:absolute;left:50%;top:8%;translate:-50% 0;
  width:min(46%,620px);height:auto;aspect-ratio:1;color:rgba(31,66,128,.16)}

/* =========================================================
   ANG EKSENA
   ⚠ MAS MALAPAD ITO KAYSA SA `.wrap` (1180px), at kailangan iyon: 1,672px
     ang ipinadalang disenyo at 296–530px ang mga card. Sa 1180px na
     lalagyan ay 209px na lang ang pinakamaliit — hindi na mabasa.
   ========================================================= */
.rvx{width:min(1560px,100% - 40px);margin-inline:auto}

/* ---- ⚠ SA ≥1200px LANG ABSOLUTE ANG BUONG EKSENA ----
   Sinusunod niya ang eksaktong puwesto sa disenyo. Sa ilalim ng 1200px
   ay dumadaloy na lang ang lahat: hindi kasya ang limang card sa paligid
   ng featured nang hindi nagpapatong. */
@media (min-width:1200px){
  /* ⚠ 780px ANG SAHIG AT ITO ANG PINAKAMAHALAGANG NUMERO SA BLOKE.
     Umuurong ang eksena mula 784px (@1600) hanggang 640px (@1200) dahil
     nakabase siya sa `vw` — pero 120–190px ang taas ng isang card SA
     LAHAT NG LAPAD, dahil TEKSTO ang nagtatakda niyon at hindi ang
     lapad. Kaya ang parehong porsyentong `top` ay naglalapit habang
     umiikli ang bintana, at nagsasapawan ang magkatabi.
     May sahig na 780px, pareho ang agwat sa lahat ng lapad. */
  .rvx{position:relative;min-height:clamp(780px,52vw,880px)}
  /* 29.2% — 442px sa 1514px na nilalaman ng disenyo. */
  /* ⚠ NASA GITNA SIYA PAHABA AT HINDI SA `top:0` — SUKAT ANG DAHILAN.
     686px ang taas ng haliging ito noon at halos puno ang 780px na
     eksena. Tatlong bloke ang inalis Set 7, 2026 (tingnan ang tala sa
     markup) at naging ~330px na lang siya: sa `top:0` ay may 450px na
     butas sa kaliwang-baba, at doon walang ipinipinta ang eksena.
     Sa gitna ay katapat na niya ang salansan ng card — dalawang bagay
     na magkatabi, at wala nang lungga.
     ▶ Kapag may ibinalik kang bloke mula sa _parked/proof-stats.txt at
       lumagpas na naman siya sa 780px, `top:0` ulit ang tama. */
  .rvx__lead{position:absolute;left:0;top:50%;translate:0 -50%;width:29.2%;z-index:3}
  .rvstage{position:absolute;inset:0;z-index:2}
}

.rvx__lead .eyebrow{margin-bottom:14px}
/* Ang maikling pulang gitling bago ang eyebrow — nasa disenyo siya. */
.eyebrow--dash{display:flex;align-items:center;gap:11px}
.eyebrow--dash::before{content:"";width:26px;height:3px;border-radius:2px;background:var(--red);flex:none}

.rvh2{font-size:clamp(30px,2.9vw,44px);line-height:1.1;letter-spacing:-.02em}
.rvhi{color:var(--red);position:relative;display:inline-block}
/* ---- ANG GUHIT SA ILALIM NG "Real trust." ----
   Iginuguhit siya sa pagpasok, hindi basta ipinapakita. Parehong paraan
   ng `.hl2__u` sa #interview — walang bagong ideya, hiniram lang. */
.rvhi--u{padding-bottom:.1em}
.rvhi__u{position:absolute;left:0;right:0;bottom:-.02em;width:100%;height:auto;color:var(--red);overflow:visible}
.rvhi__u path{stroke-dasharray:230;stroke-dashoffset:230;transition:stroke-dashoffset .9s var(--ease) .45s}
[data-reveal].is-in .rvhi__u path{stroke-dashoffset:0}

.rvx__lead .sec__sub{margin-top:clamp(12px,1.4vw,18px);max-width:40ch}

/* =========================================================
   ANG RATING CARD  —  ⚰ WALA NANG MARKUP NA GUMAGAMIT NITO (Set 7, 2026)

   ⚠⚠ BUHAY ANG BUONG BLOKENG ITO PERO WALANG TUMATAWAG SA KANYA. Inalis
      ang `.rvrate` sa markup ng dalawang kopya nang hindi ginagalaw ang
      isa mang rule dito — SINASADYA IYON. Dito nakatira ang 4.9/5.0,
      ang "230+ Verified Reviews" at ang 92/7/1/0/0, at wala sa kanila
      ang may pinanggagalingan. Pagdating ng tunay na datos ng Shopee ay
      IDIDIKIT PABALIK ANG MARKUP mula sa _parked/proof-stats.txt at
      gagana agad ang lahat — walang CSS na hahawakan.
   ▶ Kasama rito ang `.rvbars*` sa ibaba at ang mga panuntunan ng
     `.rvrate` sa @media 1199 at 999. Huwag silang linisin nang magkakahiwalay.

   ⚠ `auto 1fr` AT HINDI `1fr 1fr`. Ang kaliwa ay tatlong bagay na may
     sariling sukat (ang numero, ang limang bituin, ang bilang); ang
     kanan ay limang bar na dapat KUMUHA NG NATITIRA. Sa `1fr 1fr` ay
     pumapayat ang bar sa makikitid na bintana habang may natitirang
     puwang sa kaliwa.
   ========================================================= */
.rvrate{
  margin-top:clamp(18px,2.2vw,28px);
  display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:clamp(16px,2vw,30px);align-items:center;
  padding:clamp(16px,1.6vw,22px) clamp(18px,1.8vw,26px);
  border-radius:18px;background:var(--paper);border:1px solid var(--line-2);
  box-shadow:var(--shadow-m);
}
.rvrate__score{display:grid;justify-items:start;gap:7px}
.rvrate__num{margin:0;font-family:var(--display);font-weight:800;
  font-size:clamp(34px,3.4vw,46px);line-height:1;color:var(--navy);
  font-variant-numeric:tabular-nums;display:flex;align-items:baseline;gap:6px}
.rvrate__num i{font-style:normal;font-size:.36em;font-weight:700;color:var(--ink-2)}
.rvrate__cnt{margin:0;font-size:12.4px;color:var(--ink-2)}
.rvrate__cnt b{font-family:var(--display);font-weight:800;color:var(--navy)}

/* ---- ANG LIMANG BAR ----
   ⚠ `--p` ANG NAGPAPAHABA AT `--p` DIN ANG NAKASULAT. Isang numero lang
     ang pinagmumulan ng dalawa, kaya walang paraan para magsinungaling
     ang bar tungkol sa porsyentong nasa tabi niya.
   ⚠ `transform:scaleX()` AT HINDI `width`. Ang `width` ay layout — muling
     sinusukat ang buong hanay kada frame ng animasyon. Ang `scaleX` ay
     nasa compositor. `transform-origin:left` kung hindi ay lumalaki
     siya mula sa gitna. */
.rvbars{list-style:none;margin:0;padding:0;display:grid;gap:clamp(5px,.6vw,8px)}
.rvbars li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px}
.rvbars__k{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;
  color:var(--ink-2);font-variant-numeric:tabular-nums}
.rvbars__k svg{width:9px;height:9px;fill:#F0A227}
.rvbars__t{height:5px;border-radius:99px;background:var(--gray-soft);overflow:hidden}
.rvbars__t i{display:block;height:100%;border-radius:99px;background:var(--navy);
  transform:scaleX(0);transform-origin:left center;
  transition:transform .9s var(--ease)}
[data-reveal].is-in .rvbars__t i{transform:scaleX(var(--p))}
.rvbars li:nth-child(2) .rvbars__t i{transition-delay:.09s}
.rvbars li:nth-child(3) .rvbars__t i{transition-delay:.18s}
.rvbars li:nth-child(4) .rvbars__t i{transition-delay:.27s}
.rvbars li:nth-child(5) .rvbars__t i{transition-delay:.36s}
.rvbars__v{font-size:10.8px;font-weight:700;color:var(--ink-2);min-width:29px;text-align:right;
  font-variant-numeric:tabular-nums}

/* =========================================================
   ANG BITUIN NA MAY KALAHATI
   ⚠ DALAWANG MAGKAPATONG NA HANAY AT HINDI LIMANG MAGKAKAIBANG ICON.
     Ang ilalim ay limang kulay-abo (ang track); ang ibabaw ay limang
     ginto na PINUPUTOL NG `width`. Anumang `--r` — 4.9, 2.5, 3.7 — ay
     lumalabas nang tama, at isang numero lang ang binabago.
   ⚠ `overflow:hidden` SA IBABAW LANG. Kailangan ng ilalim na buo siya
     para may makitang kulay-abo sa dulo ng putol.
   ========================================================= */
.rvstar{position:relative;display:inline-flex;line-height:0;flex:none}
.rvstar__off,.rvstar__on{display:flex;gap:2px;line-height:0}
.rvstar__off{color:#DDE1E8}
.rvstar__on{position:absolute;left:0;top:0;color:#F0A227;overflow:hidden;
  width:calc(var(--r,5) / 5 * 100%)}
.rvstar svg{width:12px;height:12px;fill:currentColor;flex:none}
.rvstar--m svg{width:16px;height:16px}
.rvstar--l svg{width:21px;height:21px}
.rvstar--l .rvstar__off,.rvstar--l .rvstar__on{gap:4px}

/* =========================================================
   ANG "Verified Buyer" NA CHIP
   ⚠ BERDE ANG TSEK AT HINDI PULA O NAVY. Wala ito sa palette ng brand,
     at sinasadya: hindi ito sinasabi ng TapeMate — tanda ito ng
     sistemang nagbeberipika, at dapat mukhang galing sa labas.
   ========================================================= */
.rvvf{display:inline-flex;align-items:center;gap:5px;flex:none;
  padding:3px 9px 3px 6px;border-radius:99px;
  background:rgba(37,150,90,.09);color:#4B5674;
  font-size:9.8px;font-weight:600;white-space:nowrap}
.rvvf .ico{width:12px;height:12px;color:#26A15B;flex:none}
.rvvf--dark{background:rgba(255,255,255,.09);color:rgba(255,255,255,.86);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.12);
  padding:5px 12px 5px 8px;font-size:11px}
.rvvf--dark .ico{width:14px;height:14px;color:#3FD07F}

/* =========================================================
   ANG TATLONG TATAK  —  ⚰ WALA NANG MARKUP NA GUMAGAMIT NITO (Set 7, 2026)
   Verified Buyers / Business Proven / Quality Assured. Pangako ng
   TapeMate tungkol sa TapeMate, sa loob ng seksyong "What clients say"
   — at nasa #contact na rin ang halos kaparehong tatlo (`.ftrust`).
   Buhay ang rule, nasa _parked/proof-stats.txt ang markup.
   ========================================================= */
.rvtrust{list-style:none;margin:clamp(16px,1.8vw,24px) 0 0;padding:0;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(8px,1vw,16px)}
.rvtrust li{display:flex;align-items:center;gap:9px;min-width:0}
.rvtrust .ico{width:22px;height:22px;color:var(--navy);flex:none}
.rvtrust span{display:grid;gap:1px;min-width:0;font-size:10.4px;line-height:1.35;color:var(--ink-2)}
.rvtrust b{font-family:var(--display);font-weight:800;font-size:11.6px;color:var(--navy)}

/* ---- ANG PAG-AMIN, AT ANG GITLING NA HATI SA IBABAW NIYA ----
   ⚰ WALA NANG MARKUP NA GUMAGAMIT NITO (Set 7, 2026). "js remove this
     then i gitna yung cards." Buhay ang rule at hindi ginalaw; nasa
     _parked/proof-stats.txt ang linya at ang tatlong paraan kung
     babalikan ito.
   ⚠⚠ ITO ANG NAG-IISANG LUGAR SA PAHINA NA UMAAMIN NA IMBENTO ANG
      PANGALAN, at anim na "Verified Buyer" na may pangalan AT lungsod
      ang natira nang wala siya. Tunay ang SINABI nila; hindi tunay ang
      PANGALAN. Kung babalikan mo ito, ang PAG-INISYAL ng pangalan
      (M.R.) ang mas malinis kaysa sa pagbabalik ng talata — walang
      sinasabing hindi totoo ang inisyal.
   -------------------------------------------------------------- */
.rvnote{margin:clamp(14px,1.6vw,20px) 0 0;padding-top:clamp(12px,1.4vw,18px);
  border-top:1px dashed rgba(31,66,128,.22);
  font-size:10.6px;line-height:1.5;color:var(--ink-2)}

/* =========================================================
   ANG SELYO  —  ⚰ WALA NANG MARKUP NA GUMAGAMIT NITO (Set 7, 2026)
   "Trusted by Small Shops to Large Enterprises". Pangako rin ng TapeMate
   tungkol sa sarili, at ginagawa na iyon ng `.rvpromise` sa kanang-baba
   — isang tinig, isang beses. Wala na rin siya sa kopya ng Next noon pa.
   Buhay ang rule, nasa _parked/proof-stats.txt ang markup.
   ========================================================= */
.rvseal{margin-top:clamp(12px,1.4vw,18px);display:flex;align-items:center;gap:clamp(10px,1.2vw,16px)}
.rvseal__stamp{position:relative;flex:none;width:clamp(72px,6.2vw,92px);aspect-ratio:1;
  display:grid;place-items:center;color:var(--navy)}
/* ⚠ MAY SARILING KLASE ANG SINGSING AT HINDI `> svg`. Ang `> svg` ay
   umaabot din sa kalasag sa loob — MAS MATAAS ANG SPECIFICITY NIYA (0,1,1)
   KAYSA SA `.rvseal__ico` (0,1,0) — kaya naging 92px ang kalasag sa
   halip na 24px, at natakpan niya ang "TRUSTED QUALITY". Dalawang
   magkaibang bagay, dalawang magkaibang klase. */
.rvseal__ring{position:absolute;inset:0;width:100%;height:100%}
/* ⚠ `letter-spacing` ANG BUHAY NG BILOG NA SULAT. Sa 0 ay nagdidikit ang
   titik sa loob ng kurba at nagiging mantsa; ang .16em ang nagbubukas
   sa kanila nang sapat para mabasa sa 72px. */
.rvseal__t{font-family:var(--display);font-weight:800;font-size:10px;letter-spacing:.14em;
  fill:currentColor;text-anchor:middle}
.rvseal__ico{width:26%;height:26%;color:var(--navy);position:relative}
.rvseal__txt{display:grid;gap:4px;min-width:0}
.rvseal__txt b{font-family:var(--display);font-weight:800;font-size:12.6px;line-height:1.3;color:var(--navy)}
.rvseal__txt span{font-size:10.4px;line-height:1.5;color:var(--ink-2)}
/* Ang selyo ng koreo. `opacity` lang ang hawak niya — dekorasyon siya at
   hindi dapat makipagkumpitensya sa nasa tabi. */
.rvseal__mark{flex:none;width:clamp(64px,5.4vw,86px);height:auto;color:var(--navy);opacity:.16;
  align-self:flex-start;margin-top:4px}

/* =========================================================
   ANG SALANSAN NG CARD   (Ago 25, 2026)

   Hiniling ni Kylie: "itira nalang yung blue card … may stocks ng card
   behind it … pwede sya i next next … matic syang nag nnext ng smooth
   … then ma-place yung card na yon sa pinaka dulo ulit."

   TATLO ANG KITA: ang nasa harap, at dalawang sumisilip sa likod niya.
   Ang natitirang tatlo ay nakatago sa parehong puwesto ng pangalawang
   silip (`opacity:0`), kaya walang tumatalon kapag umusod ang salansan.

   ⚠ PAREHO ITO NG `_sections.css` SA `tapemate-next/`. DALAWANG KOPYA
     ang nakasulat at walang generator na nag-uugnay sa kanila. Kapag
     may binago ka rito ay baguhin mo rin doon.

   ⚠ MAY SUKAT ANG `.rvdeck` AT `inset:0` ANG CARD — IISANG KAHON silang
     anim. Kailangan iyon ng salansan: kung magkaiba ang taas nila ay
     hindi pantay ang sumisilip na gilid at hindi na siya mukhang baraha
     kundi kalat.
   ▶ Kaya may `height` ang `.rvrig` at hindi `auto`. Kung papalitan mo
     iyon ng `auto` ay babagsak sa 0 ang taas — `position:absolute`
     lahat ng card, kaya walang lamang magtataas sa kanya.
   ========================================================= */

/* ---- ANG LALAGYAN ----
   ⚠ MAS MALAPAD SIYA KAYSA SA DECK (`88%` ang deck sa loob niya), at
     doon nakatira ang dalawang sumisilip. Kung magkasing-lapad sila ay
     wala nang lugar ang salansan sa kanan at nadadaganan niya ang
     palaso. */
/* ⚠⚠ ANG `--usog` AT KUNG BAKIT SIYA UMIIRAL. Hiniling ni Kylie noong
      Set 7, 2026: "i gitna yung cards". HINDI NASA GITNA ANG SALANSAN
      NOON, at ito ang dahilan — 88% lang ng `.rvrig` ang `.rvdeck` at
      NASA KANAN LAHAT ANG NATITIRANG 12%. Reserba iyon para sa dalawang
      card sa likod na nakausli pakanan; ang problema ay MAS MALIIT ANG
      TUNAY NA USLI KAYSA SA RESERBA, kaya may naiiwang bakante sa
      kanan at nakadikit sa kaliwa ang salansan. Sinukat sa 390px:
        lalagyan  x20→370      (350px)
        deck      x20→328      (88%, nakadikit sa kaliwa)
        salansan  x20→351      usli 23px, samantalang 42px ang reserba
        gitna ng salansan x186, gitna ng lalagyan x195  —  9px na kiling
      Ang `--usog` ay ang KALAHATI NG SOBRANG RESERBA: (42-23)/2 = 9.5px,
      o 2.71% ng lalagyan sa 390px at 3.08% sa 768-1024px. 2.9% ang
      napili — wala pang 1.2px ang mali sa dalawang dulo.
   ⚠ TATLONG BAGAY ANG SUMUSUNOD SA KANYA at magkakasama silang
     gumagalaw: ang `left` ng `.rvdeck`, ang `left/right` ng `.rvpips`,
     at ang `left` ng `.rvarw` sa ilalim ng 1200px. Isang numero lang
     ang hahawakan mo kung babaguhin mo ang usli (`--o1x`/`--o2x`).
   ⚠ KUSANG NAAYOS ANG PALASO SA 1200px PATAAS. Nakakabit sila sa GILID
     ng `.rvrig` (negatibong `left/right`), kaya nang mapunta sa gitna ang
     salansan ay naging pantay ang layo nila: 72px sa magkabila noong
     sinukat sa 1440. 57px at 87px iyon noon. */
.rvrig{
  --usog:2.45%;                 /* 1200px pataas — tingnan ang tala sa itaas */
  position:relative;margin:clamp(24px,3vw,38px) auto 0;
  width:min(100%,560px);
  height:clamp(378px,88vw,438px);
}
@media (min-width:1200px){
  /* Sinukat laban sa lumang `.rvbig` (`left:41.9%;width:35%`) — doon
     siya nakatayo sa ipinadalang disenyo, at doon pa rin siya. Mas
     malapad lang nang kaunti dahil siya na lang ang natira sa eksena. */
  .rvrig{position:absolute;left:38%;top:15.5%;width:44%;margin:0;
    height:clamp(392px,28vw,472px)}
}

.rvdeck{
  /* ⚠ `var(--usog)` AT HINDI `0` — tingnan ang tala sa `.rvrig`. Ito ang
     naglalagay sa salansan sa gitna ng lalagyan niya. */
  position:absolute;left:var(--usog);top:0;width:88%;height:100%;z-index:3;

  /* ---- ANG LAYO NG BAWAT PATONG ----
     Porsyento sila NG CARD MISMO at hindi ng eksena, kaya kusa silang
     lumiliit kasama niya. */
  --o1x:5.2%;  --o1y:-5%;    --o1s:.96;  --o1r:1.6deg;
  --o2x:10.2%; --o2y:-9.8%;  --o2s:.92;  --o2r:3.2deg;

  /* ⚠ `pan-y` AT HINDI `none`. Sinasabi nito sa browser: "akin ang
     pahalang, sa iyo pa rin ang patayo." Kung `none` ay HINDI NA
     MAKA-SCROLL ang daliri sa ibabaw mismo ng card. */
  touch-action:pan-y;
  cursor:grab;
  user-select:none;-webkit-user-select:none;
}
.rvdeck.is-grab{cursor:grabbing}
.rvdeck:focus-visible{outline:2px solid var(--red);outline-offset:10px;border-radius:24px}

.rvcard{
  position:absolute;inset:0;
  display:flex;flex-direction:column;
  overflow:hidden;
  border-radius:20px;
  padding:clamp(18px,1.7vw,28px) clamp(22px,2.1vw,34px) clamp(16px,1.5vw,24px);
  /* ⚠⚠ PUTI ITO AT HINDI NAVY (Ago 27, 2026). Sabi ni Kylie: "make it
     na ma show talaga na feedback sya."
     Ang card na pininturahan ng kulay ng kompanya ay binabasa bilang
     ANG KOMPANYA ANG NAGSASALITA — poster siya, hindi sinabi ng tao.
     Puti ang ginagamit ng lahat ng tunay na review UI: nakaupo ang
     salita ng customer sa NEUTRAL na papel, hindi sa tatak ng tindahan.
     ▶ Ginawa rin ito sa `tapemate-next/src/app/_sections.css`.
       DALAWANG BUHAY NA KOPYA — kung isa lang ang hahawakan mo,
       maghihiwalay sila at walang magsasabi. */
  background:linear-gradient(168deg,#FFFFFF 0%,#FCFCFE 58%,#F6F8FC 100%);
  color:var(--ink);
  /* ⚠ DALAWANG `inset` SA DULO AT SILA ANG GILID NG CARD. Sa salansan
     ay tatlong navy na magkakapatong ang nakikita mo, at kung walang
     manipis na liwanag sa gilid ay NAGSASANIB SILA — isang malaking
     bukol ng navy ang hitsura sa halip na tatlong papel. */
  /* ⚠ HAIRLINE AT HINDI LIWANAG. Puting `inset` ang naghihiwalay sa
     patong noong navy; sa PUTI ay walang silbi iyon — puti sa puti.
     Madilim na hairline ang kailangan, kung hindi ay isang malaking
     puting bukol ang salansan. */
  box-shadow:0 34px 60px -32px rgba(16,34,72,.30), 0 8px 20px -12px rgba(16,34,72,.16),
             inset 0 0 0 1px rgba(31,66,128,.10);

  /* ⚠ MAGKAKAHIWALAY NA PROPERTY ANG `translate`, `scale` AT `rotate`,
     hindi iisang `transform`. Tatlo silang magkaibang halaga sa bawat
     patong, at sa `transform` ay bubura ng isa ang isa. */
  transition:translate .62s var(--back), scale .62s var(--back),
             rotate .62s var(--back), opacity .5s var(--ease),
             box-shadow .34s var(--ease);
}
/* ⚠ APAT NA PATONG SIYA AT MAY DAHILAN ANG BAWAT ISA: ang liwanag sa
   kanang-taas (may pinanggagalingan ang ilaw), ang MAINIT na kraft sa
   kaliwang-baba (kulay ng kahon at ng teip — siya ang nagpapaalis sa
   lamig ng purong navy), ang manipis na guhit na pahilis (tela, hindi
   pintura), at ang lumang pahilis na sinag. Wala ni isa sa kanila ang
   lumalampas sa 5% — kung makikita mo silang isa-isa ay natalo na nila
   ang review. */
.rvcard__sheen{position:absolute;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(70% 52% at 86% 4%, rgba(59,156,255,.055) 0%, rgba(59,156,255,0) 68%),
    radial-gradient(64% 50% at 3% 99%, rgba(214,150,86,.075) 0%, rgba(214,150,86,0) 72%),
    repeating-linear-gradient(-24deg, rgba(31,66,128,.022) 0 2px, transparent 2px 17px),
    linear-gradient(122deg,rgba(31,66,128,0) 52%,rgba(31,66,128,.025) 74%,rgba(31,66,128,0) 92%)}
/* ═══════════ ANG LALIM NG CARD (Ago 25, 2026) ═══════════
   Sabi ni Kylie: "ADD SOMETHING SA CARDS IST TOO PLAIN."

   APAT NA PATONG ANG IDINAGDAG, at LAHAT SILA AY PALAMUTI — walang
   isa mang bagong SINASABI ang card. Sinadya iyon: ang laman ng card
   ay sinabi ng tunay na tao, at ang pagdagdag ng bagong "detalye"
   (petsa, bilang ng order, pinagmulan) ay pag-imbento ng datos na
   walang nagbigay. Ang MUKHA ang pinalalim, hindi ang sinasabi.

   ⚠ DALAWANG BAGONG `<span>` ANG KAILANGAN NG MARKUP: ang
     `.rvcard__tape` at ang `.rvcard__wm`. `aria-hidden` silang
     dalawa at walang teksto.
   ═══════════════════════════════════════════════════════════ */

/* ---- 1. ANG TEIP SA SULOK ----
   ⚠ HINDI ITO BAGONG IDEYA — HINIRAM. May ganito na ang `.rvpromise`
     ("Packaging Quality") sa kabilang sulok ng eksena, at ito ang tanging
     biro sa buong seksyon: TEIP ang ibinebenta ng TapeMate, at teip ang
     nakadikit sa card nila. Ngayon ay nagkakarima na silang dalawa.
   ⚠ SA KALIWA SIYA AT SA KANAN ANG SA `.rvpromise` — nakatira ang
     bilang (`01 / 06`) sa kanang-taas ng card.
   ⚠ MAPUTLA AT HINDI KULAY-KRAFT. Sinubukan ang kraft (`#F2A05D`) muna
     at nagmumukha siyang dilaw na guhit sa navy — nakikita mo siya bago
     ang pangalan ng tao. Ang maputing teip ay nararamdaman mo lang. */
.rvcard__tape{
  position:absolute;z-index:2;pointer-events:none;
  left:calc(-1 * clamp(24px,2.2vw,32px));top:clamp(9px,1.1vw,16px);
  width:clamp(92px,9vw,132px);height:clamp(19px,1.85vw,27px);
  rotate:-42deg;
  /* ⚠ KRAFT NA NGAYON. Ang maputing teip sa PUTING card ay wala. */
  background:linear-gradient(180deg,rgba(198,150,96,.28),rgba(198,150,96,.13));
  box-shadow:inset 0 0 0 1px rgba(160,116,68,.16);
}

/* ---- 2. ANG TATAK SA SULOK ----
   Ang rolyo ng teip mismo, malaki at halos hindi kita (5.5% na puti).
   ⚠ HINDI SIYA ANG PANIPI. May `.rvcard__mark` na (`&ldquo;`) sa tabi ng
     sipi; ang pangalawang panipi ay pag-ulit. Ang rolyo ay ang PRODUKTO
     — siya ang pinag-uusapan ng anim na mensahe.
   ⚠ LUMALABAS SIYA SA GILID (`right`/`bottom` na negatibo) AT
     SINASADYA. Pinuputol siya ng `overflow:hidden` ng card, kaya
     bahagi siya ng card at hindi patong na icon.
   ⚠ MAKAPAL ANG GUHIT NIYA AT HINDI IYON MALI: `stroke-width:1.8` sa
     24-unit na viewBox, kaya sa 250px ay 19px na ang kapal. Iyon ang
     nagpapagana sa kanya bilang MOTIF at hindi bilang icon. */
.rvcard__wm{
  position:absolute;z-index:0;pointer-events:none;
  right:-7%;bottom:-11%;width:46%;aspect-ratio:1;
  color:rgba(31,66,128,.052);rotate:-13deg;
}
.rvcard__wm svg{width:100%;height:100%}

/* ---- 3. ANG PATONG-PATONG NA PAGKAKASUNOD ----
   ⚠⚠ ITO ANG PINAKAMADALING MASIRA. Walang `z-index` ang karamihan sa
      mga anak, at ang HINDI naka-position (ang teksto) ay ipininta sa
      IBABA ng lahat ng naka-position. Kaya kung walang `z-index:1` ang
      katawan ay TATAKPAN SIYA NG TATAK — 46% ng card ang lapad niyon.
      Ito ang tamang pagkakasunod, mula ilalim:
        0  sinag at tatak      (palamuti sa likod)
        1  bilang, katawan, "Purchased"   (ang laman)
        2  teip                (nakadikit sa ibabaw ng lahat)
        3  ang lambong ng nasa likod (`::after`)
      Ang lambong ang PINAKAMATAAS: dapat niyang padilimin ang teip at
      ang teksto nang sabay, kung hindi ay may card sa likod na malinaw
      pa rin ang teip. */
.rvcard__no,.rvcard__body,.rvcard__buy{position:relative;z-index:1}
.rvcard::after{z-index:3}

/* ---- 4. ANG SINGSING NG AVATAR ----
   Maputlang bilog sa paligid ng pulang inisyal. Sa patag na navy ay
   parang butas ang pula; ang singsing ang naglalapat sa kanya sa card. */
.rvav--big{box-shadow:0 10px 22px -12px rgba(217,4,41,.85), 0 0 0 4px rgba(255,255,255,.07)}

/* ---- 5. ANG PAG-ANGAT SA HOVER ----
   ⚠ SA NASA HARAP LANG. Ang nasa likod ay hindi mapipindot (`inert`),
     kaya ang pag-angat nila ay pangakong hindi totoo.
   ⚠ MAS MATAAS ANG `.rvdeck.is-grab .rvcard.is-front` (0,4,0) kaysa
     dito (0,3,0), kaya hindi siya nakikialam sa paghila. */
@media (hover:hover){ .rvcard.is-front:hover{
  translate:0 -4px;
  box-shadow:0 50px 84px -34px rgba(2,19,52,.7), 0 14px 30px -14px rgba(2,19,52,.46),
             inset 0 0 0 1px rgba(255,255,255,.1), inset 0 1px 0 rgba(255,255,255,.18);
} }


/* ---- ANG LAMBONG NG NASA LIKOD ----
   ⚠ HINDI `filter:brightness()`. Muling ipinipinta ng browser ang BUONG
     card sa bawat frame kapag `filter`, at tatlo silang magkasabay sa
     paglipat. Ang `::after` ay isang patong lang ng kulay.
   ⚠ WALANG `z-index` SIYA AT SINASADYA — huli siya sa mga anak kaya
     huli siyang ipinipinta, at sabay dumidilim ang teksto at ang sinag. */
.rvcard::after{content:"";position:absolute;inset:0;pointer-events:none;
  border-radius:inherit;background:#7E93BC;opacity:0;
  transition:opacity .62s var(--ease)}

/* ---- ANG APAT NA PUWESTO ---- */
.rvcard.is-front{translate:0 0;scale:1;rotate:0deg;opacity:1}
.rvcard.is-l1{translate:var(--o1x) var(--o1y);scale:var(--o1s);rotate:var(--o1r);opacity:1;
  box-shadow:0 30px 56px -34px rgba(2,19,52,.6)}
/* ⚠⚠ MAGAAN ANG LAMBONG, AT SINASADYA (Ago 27, 2026).
   .20 at .36 siya sa unang subok at "super dark" ang sabi ni Kylie —
   tama siya: sa .36 ay halos ITIM na ang pangalawang patong, at hindi
   na siya mukhang KAPAREHONG CARD na nasa likod kundi ibang bagay na
   mas madilim. Ang lalim ay dala na ng sukat, ng usod at ng anino;
   ang lambong ay pandagdag lang, hindi siya ang buong lalim.
   ▶ Kung babalik ka sa mas madilim, TINGNAN SA TUNAY NA SCREEN at
     hindi sa numero: mabilis lumampas ang navy sa ibabaw ng navy. */
.rvcard.is-l1::after{opacity:.08}
.rvcard.is-l2{translate:var(--o2x) var(--o2y);scale:var(--o2s);rotate:var(--o2r);opacity:1;
  box-shadow:0 22px 44px -32px rgba(2,19,52,.55)}
.rvcard.is-l2::after{opacity:.16}
/* Ang nakatago: MISMONG PUWESTO ng `l2`, patay lang ang `opacity`. Kaya
   ang paglabas ng bagong card ay pagsulpot sa likod ng salansan at
   hindi paglipad mula sa kung saan. */
.rvcard.is-hide{translate:var(--o2x) var(--o2y);scale:var(--o2s);rotate:var(--o2r);opacity:0}
.rvcard.is-hide::after{opacity:.16}

/* ⚠⚠ ITO ANG BUONG GALAW, AT ISANG RULE LANG SIYA.
      SA LABAS NG KALIWA ang pinaka-dulo ng salansan. Kaya:
        NEXT — ang harap ay nagiging pinaka-dulo → LUMILIPAD PAKALIWA,
               at pagkatapos ay tahimik na babalik sa dulo.
        PREV — ang pinaka-dulo ay nagiging harap → PUMAPASOK MULA SA
               KALIWA. Kabaligtaran, at walang dagdag na code.
      Ang `z-index:9` ang nagpapalipad sa kanya SA IBABAW ng salansan;
      sa ilalim ay parang nilamon siya ng card sa harap.
   ▶ Kung ilalagay mo siya sa likod (kasama ng `is-hide`) ay mawawala
     ang lipad: bigla na lang mawawala ang card. */
.rvcard.is-out{
  translate:-54% 3%;scale:.88;rotate:-9deg;opacity:0;
  z-index:9;
  box-shadow:0 30px 60px -34px rgba(2,19,52,.5);
  transition:translate .6s var(--ease), scale .6s var(--ease),
             rotate .6s var(--ease), opacity .38s var(--ease) .16s;
}

/* ---- ANG PAGHILA ----
   ⚠ `transition:none` DITO. Ang buong punto ng paghila ay SUMUNOD SA
     DALIRI; kung may .62s na transition ay nahuhuli ang card.
   ⚠ SA `.rvdeck` NAKASULAT ANG `--dx` AT HINDI SA CARD. Kaya pagbitiw
     mo ay kusang nawawala ang hawak kung sinong card. */
.rvdeck.is-grab .rvcard.is-front{
  transition:none;
  translate:var(--dx,0px) 0;
  rotate:var(--dr,0deg);
}

/* ---- ANG BILANG SA SULOK ----
   ⚠ KAPALIT SIYA NG "FEATURED REVIEW" NA ASUL NA PILL. Nang anim na
     magkakaibang card ang eksena ay may isang PINIPILI — iyon ang ibig
     sabihin ng "featured". Ngayong pare-pareho na silang dumadaan sa
     iisang puwesto ay walang pinipili, at ang pill ay magsisinungaling.
     Ang bilang naman ay tunay na kailangan: sinasabi niya kung nasaan ka. */
.rvcard__no{position:relative;align-self:flex-end;
  margin:0 0 clamp(10px,1.1vw,16px);
  display:inline-flex;align-items:baseline;gap:5px;
  font-family:var(--display);letter-spacing:.04em;line-height:1}
/* ⚠ PINALIIT AT PINATAHIKIM. Malaki at puti siya noon — siya ang
   UNANG nakikita mo sa card, bago ang mukha at bago ang sinabi.
   Binabasa iyon bilang carousel ng produkto. */
.rvcard__no b{font-weight:800;font-size:clamp(12px,1.05vw,15px);color:var(--ink-2)}
.rvcard__no span{font-weight:600;font-size:clamp(9.4px,.78vw,11.4px);color:var(--ink-3)}

/* ⚠ `flex:1` AT `justify-content:center`. Iba-iba ang haba ng anim na
   review — dalawang linya ang pinakamaikli, apat ang pinakamahaba —
   pero IISANG KAHON silang lahat. Kung nakadikit sila sa itaas ay
   mukhang bitin ang maikli. */
.rvcard__body{flex:1;display:flex;flex-direction:column;justify-content:center;min-height:0}

.rvcard__top{display:flex;align-items:center;gap:clamp(11px,1.1vw,16px)}
.rvav{flex:none;width:clamp(44px,3.8vw,58px);aspect-ratio:1;border-radius:50%;
  display:grid;place-items:center;background:var(--red);color:#fff;
  font-family:var(--display);font-weight:800;font-size:clamp(15px,1.3vw,20px);letter-spacing:.02em}
.rvwho{display:grid;gap:2px;min-width:0;margin-right:auto}
.rvwho b{font-family:var(--display);font-weight:800;
  font-size:clamp(16px,1.4vw,21px);line-height:1.2;color:var(--navy)}
.rvwho span{font-size:clamp(11px,.85vw,13px);color:var(--ink-2)}

/* ⚠ `align-self:flex-start` AT HINDI LANG `margin-top`. Ang
   `.rvstar` ay `inline-flex`, at sa loob ng `.rvcard__body` (flex
   column) ay UMAABOT SIYA SA BUONG LAPAD — 481px sa 1440. Hindi ito
   halata ngayon dahil 5.0 ang anim na review at 100%% ang `__on`;
   pero ang `__on` ay `calc(--r / 5 * 100%%)` NG LAPAD NG MAGULANG,
   kaya sa 4.5 ay 90%% ng 481px ang mapuputol at hindi 90%% ng bituin.
   Sa lumang `.rvbig` ay hindi ito nangyayari: `block` ang magulang
   doon, kaya laki-ng-laman ang `inline-flex`. */
.rvcard .rvstar{margin-top:clamp(12px,1.2vw,18px);align-self:flex-start}

/* ⚠ ANG KUWIT AY `position:absolute` AT MAY SARILING `line-height:1`.
   Sa daloy ay 40px ang taas na dinadala niya at hindi maabot ng talata
   ang tabi niya. */
.rvcard__q{margin:clamp(12px,1.2vw,18px) 0 0;position:relative;padding-left:clamp(26px,2.2vw,36px)}
.rvcard__mark{position:absolute;left:0;top:-.1em;line-height:1;
  font-family:var(--display);font-weight:800;font-size:clamp(40px,3.6vw,56px);
  color:rgba(31,66,128,.14)}
/* ⚠ ANG SINABI ANG BIDA. Siya ang buong dahilan ng seksyon, kaya siya
   dapat ang unang mabasa — hindi ang bilang, hindi ang mukha. */
.rvcard__q p{margin:0;font-size:clamp(14.4px,1.3vw,20px);line-height:1.58;color:var(--ink);font-weight:500}

/* ⚠ `margin-top:auto` — DUMIDIKIT SIYA SA ILALIM NG CARD at hindi sa
   ilalim ng sipi. Dalawa lang sa anim ang may linyang ito; kung susunod
   lang siya sa daloy ay iba-iba ang taas niya sa bawat card. */
.rvcard__buy{margin:clamp(14px,1.4vw,20px) 0 0;margin-top:auto;
  padding-top:clamp(10px,1.1vw,15px);
  border-top:1px solid rgba(31,66,128,.11);
  font-size:clamp(9.6px,.72vw,11px);color:var(--ink-3)}

/* ---- ANG PAGPASOK ----
   Sinusundan ang lumang `.rvstage.is-in .rvbig` — parehong tanda,
   parehong pakiramdam. Hindi nito nasisira ang apat na puwesto: sa
   `opacity` lang siya humahawak. */
.rvstage .rvcard{opacity:0}
.rvstage.is-in .rvcard.is-front,
.rvstage.is-in .rvcard.is-l1,
.rvstage.is-in .rvcard.is-l2{opacity:1}

/* ---- ANG PALASO ----
   ⚠ SA LABAS NG `.rvdeck` SILA (`left`/`right` na negatibo sa `.rvrig`).
     Sa loob ay nahuhuli ng `pointerdown` ng deck ang pindot at
     nagsisimula ng paghila sa halip na pumindot. */
.rvarw{
  position:absolute;top:50%;z-index:5;translate:0 -50%;
  width:clamp(40px,3.3vw,48px);height:clamp(40px,3.3vw,48px);
  border:0;border-radius:50%;cursor:pointer;
  display:grid;place-items:center;color:var(--navy);
  background:#fff;
  box-shadow:0 14px 28px -16px rgba(31,66,128,.6), inset 0 0 0 1px var(--line-2);
  transition:background .28s var(--ease), color .28s var(--ease),
             scale .3s var(--back), box-shadow .3s var(--ease);
}
.rvarw svg{width:clamp(14px,1.15vw,17px);height:clamp(14px,1.15vw,17px);
  fill:none;stroke:currentColor;stroke-width:2.4;
  transition:translate .28s var(--back)}
.rvarw--prev{left:calc(-1 * clamp(52px,4.2vw,62px))}
.rvarw--prev svg{rotate:180deg}
.rvarw--next{right:calc(-1 * clamp(52px,4.2vw,62px))}
@media (hover:hover){ .rvarw:hover{background:var(--red);color:#fff;scale:1.08;
  box-shadow:0 18px 34px -16px rgba(217,4,41,.7)} .rvarw--prev:hover svg{translate:-2px 0} .rvarw--next:hover svg{translate:2px 0} }
.rvarw:active{scale:.97}

/* ---- ANG TULDOK ----
   ⚠ ANIM SILA DAHIL ANIM ANG TUNAY NA REVIEW — isang card kada dalawin.
   ⚠ `right:12%` AT HINDI `0`. 88% ang lapad ng deck sa loob ng `.rvrig`;
     kung hanggang dulo ang tuldok ay nakasentro siya sa LALAGYAN at
     hindi sa CARD, at mapapansin mo ang pagkakahilig. */
.rvpips{
  /* ⚠ SUMUSUNOD SILA SA `--usog`. Ang lapad ay 88% pa rin (12% - usog
     sa kanan, usog sa kaliwa), kaya nasa gitna PA RIN SILA NG CARD at
     hindi ng lalagyan — iyon pa rin ang tamang sanggunian. */
  position:absolute;z-index:5;left:var(--usog);right:calc(12% - var(--usog));
  top:calc(100% + clamp(18px,1.8vw,28px));
  display:flex;justify-content:center;align-items:center;gap:9px;
}
.rvpip{
  width:9px;height:9px;padding:0;border:0;border-radius:999px;cursor:pointer;
  background:rgba(31,66,128,.22);
  transition:width .34s var(--back), background .3s var(--ease);
}
@media (hover:hover){ .rvpip:hover{background:rgba(31,66,128,.44)} }
.rvpip.is-on{width:26px;background:var(--navy)}

/* ---- SA ILALIM NG 1200px ----
   Dumadaloy na ang buong eksena doon (tingnan ang `@media
   (max-width:1199px)` sa ibaba), kaya `order` ang kailangan ng salansan
   at hindi porsyento.
   ⚠ MAY `order:4` ANG TULDOK SA LUMANG NAV. Wala nang hiwalay na nav —
     nasa loob na ng `.rvrig` ang palaso at ang tuldok, kaya isang
     `order` na lang ang kailangan. */
@media (max-width:1199px){
  /* ⚠⚠ MAY 104px NA MARGIN SA IBABA AT ITO ANG PINAKAMADALING
        MAKALIMUTAN. Ang palaso at ang tuldok ay `position:absolute` sa
        `.rvrig` at nakalawit sila SA LABAS ng ilalim niya — kaya HINDI
        SILA BINIBILANG ng grid. Sa 22px na gap lang ay dumadapo sila sa
        ibabaw ng `.rvpromise` ("Packaging Quality. Business Peace of
        Mind.") at nagtatago ang tuldok sa likod niya. Nakita ito sa
        390px.
        Ganito ang bilang: 52px bago ang palaso + 40px na palaso = 92px.
     ▶ Kapag ginalaw mo ang `top` ng `.rvarw` ay bilangin mo ulit ito. */
  /* ⚠ 2.9% DITO AT 2.45% SA ITAAS, AT MAY DAHILAN: MAS MALIIT ANG USLI
     SA MALIIT NA SALAMIN (tingnan ang `--o2x` sa ibaba, 8.6% laban sa
     10.2%), kaya mas malaki ang sobrang reserba at mas malaki ang
     kailangang usog. */
  .rvrig{--usog:2.9%;order:1;width:min(100%,600px);margin-bottom:clamp(104px,16vw,124px)}
  /* ⚠ MAS MALIIT ANG SILIP AT ANG TAGILID SA MALIIT NA SALAMIN. Ang
     tagilid ay nagpapalapad ng SUKAT NG KAHON kahit hindi lumalapad ang
     card — 7px sa 2deg — at ang 7px na iyon ang pumapatay sa 390px. */
  .rvdeck{--o1x:4.4%; --o1y:-3.8%; --o1s:.965; --o1r:1.1deg;
          --o2x:8.6%; --o2y:-7.2%; --o2s:.932; --o2r:2.2deg}
  /* Sa gilid ay wala nang lugar ang palaso — nasa ibabaw sila ng teksto
     doon. Sa ilalim sila, katabi ng tuldok. */
  /* ⚠ SA 44% NAKASENTRO ANG PALASO AT HINDI SA 50%. 88% ng `.rvrig`
     ang `.rvdeck`, kaya ang gitna ng CARD ay nasa 44% — hindi sa gitna
     ng lalagyan. Sa 50% ay tabingi sila ng 6% pakanan at halata iyon:
     mas malayo ang kaliwang palaso sa card kaysa sa kanan. */
  .rvarw{top:calc(100% + clamp(50px,7vw,64px));translate:0 0;
    left:calc(44% + var(--usog));right:auto}
  .rvarw--prev{margin-left:calc(-1 * (clamp(40px,3.3vw,48px) + clamp(26px,5vw,38px)))}
  .rvarw--next{margin-left:clamp(26px,5vw,38px)}
  .rvpips{top:calc(100% + clamp(18px,2.4vw,26px))}
}

/* ⚠ SA MAKIPOT NA SALAMIN AY SARILING HILERA ANG "Verified Buyer".
   Ang `.rvcard__top` ay isang `flex` na hilera: avatar, pangalan,
   pill. Sa 311px na card ay 96px na lang ang natitira sa pangalan at
   TATLONG LINYA ang "Mark Anthony Reyes" — nakita sa 390px. Dito ay
   bumababa ang pill at buo ang hilera ng pangalan. */
@media (max-width:560px){
  .rvcard__top{flex-wrap:wrap;row-gap:10px}
  .rvcard__top .rvwho{margin-right:0;flex:1 1 auto}
  .rvcard__top .rvvf{order:3;flex:0 0 auto;margin-left:0}
  .rvcard__top .rvwho{min-width:60%}
}

/* ⚠ WALANG GUMAGALAW KAPAG AYAW NG BISITA NG GALAW — pero NANDIYAN PA
   RIN ANG ANIM NA CARD. Humihinto lang sila, hindi nawawala: palit ng
   card ang laman ng seksyon, kaya ang pagtatago sa kanila ay
   pagtatanggal ng impormasyon at hindi ng galaw.
   ⚠ WALA RING SARILING PAGLIPAT — nasa seksyon 11 ng main.js iyon,
     `if(reduce) return`. */
@media (prefers-reduced-motion:reduce){
  .rvcard,.rvcard::after{transition-duration:.01s}
}

/* ▶▶ NAKA-PARKE ANG DALAWANG BLOKE SA IBABA (Ago 25, 2026): ang
      `.rvbig` at ang `.rev`/`.revs__*`. WALA NANG MARKUP NA HUMIHILA SA
      KANILA — pinalitan sila ng SALANSAN sa itaas nito.

      HINDI SILA BINURA at sinasadya iyon: buo pa ang CSS, kaya ang
      pagbabalik ng lumang collage (isang navy + limang puting card na
      nakakalat) ay pagbabalik ng MARKUP lang sa index.html. Nasa
      `_parked/proof-collage.txt` ang lumang markup nang buo.

   ⚠ Huwag gamitin ang `.rvbig`/`.rev` sa bagong trabaho. `.rvcard` ang
     buhay ngayon. */
/* =========================================================
   ANG FEATURED REVIEW
   ⚠ SIYA ANG NAG-IISANG NAVY SA GITNA NG PUTING COLLAGE, at iyon ang
     buong trabaho niya: may isang bagay na tinitingnan mo muna bago ang
     lima. Kung puti rin siya, anim na magkakapantay na card ang eksena
     at walang pasukan ang mata.
   ⚠ ABSOLUTE SIYA AT HINDI PARTE NG `.revs__track`. Hindi siya
     lumulutang kasama ng lima — nakatayo siya, at ang lima ang gumagalaw
     sa paligid niya. Iyon ang pinagkaiba ng bantayog sa alikabok.
   ========================================================= */
.rvbig{
  position:absolute;left:41.9%;top:27.4%;width:35%;z-index:3;
  padding:clamp(20px,1.9vw,30px) clamp(22px,2.1vw,34px) clamp(18px,1.7vw,26px);
  border-radius:20px;overflow:hidden;
  background:linear-gradient(148deg,#27508F 0%,#1F4280 38%,#152F5F 100%);
  box-shadow:0 40px 70px -34px rgba(2,19,52,.66), 0 8px 22px -10px rgba(2,19,52,.4);
  opacity:0;transform:translateY(24px) scale(.96);
  transition:opacity .6s var(--ease), transform .85s var(--back);
}
.rvstage.is-in .rvbig{opacity:1;transform:none}
/* Manipis na sinag sa kanang-taas. Sa patag na navy ay parang butas sa
   pahina ang card; ang bahagyang liwanag sa isang sulok ang nagbibigay
   sa kaniya ng ibabaw. */
.rvbig__sheen{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(122deg,rgba(255,255,255,0) 52%,rgba(255,255,255,.07) 74%,rgba(255,255,255,0) 92%)}
/* ---- ANG LASO SA SULOK ----
   `clip-path` ang V sa ilalim — dalawang tatsulok na pinagdikit ang
   ginagawa niya, kaya laso siya at hindi parihabang may bituin. */
/* ⚠ `padding-top` SA px AT HINDI SA %. May 22% ito noon at 120px ang
     naging taas ng laso sa halip na 50px — dahil ang PORSYENTONG PADDING
     AY SINUSUKAT LABAN SA LAPAD NG MAGULANG (546px na card), hindi laban
     sa sarili niyang lapad o taas. Sinapawan niya ang "Verified Buyer"
     at nawala ang bituin sa labas ng putol. Walang porsyentong padding
     sa isang bagay na may sariling sukat. */
.rvbig__ribbon{position:absolute;right:11.5%;top:0;
  width:clamp(28px,2.2vw,36px);height:clamp(38px,3vw,48px);
  background:linear-gradient(160deg,var(--kraft-light),var(--kraft-deep));
  clip-path:polygon(0 0,100% 0,100% 100%,50% 78%,0 100%);
  display:grid;place-items:start center;padding-top:7px;
  color:#7A4415;box-shadow:0 8px 16px -10px rgba(2,19,52,.6)}
.rvbig__ribbon svg{width:54%;height:auto;display:block}
.rvbig__flag{margin:0 0 clamp(14px,1.4vw,20px);align-self:start;
  display:inline-block;padding:5px 11px;border-radius:7px;
  background:var(--electric);color:#fff;
  font-family:var(--display);font-weight:800;font-size:9.6px;
  letter-spacing:.12em;text-transform:uppercase}
.rvbig__top{display:flex;align-items:center;gap:clamp(11px,1.1vw,16px)}
.rvbig__av{flex:none;width:clamp(44px,3.8vw,58px);aspect-ratio:1;border-radius:50%;
  display:grid;place-items:center;background:var(--red);color:#fff;
  font-family:var(--display);font-weight:800;font-size:clamp(15px,1.3vw,20px);letter-spacing:.02em}
.rvbig__who{display:grid;gap:2px;min-width:0;margin-right:auto}
.rvbig__who b{font-family:var(--display);font-weight:800;
  font-size:clamp(16px,1.4vw,21px);line-height:1.2;color:#fff}
.rvbig__who span{font-size:clamp(11px,.85vw,13px);color:rgba(255,255,255,.62)}
.rvbig .rvstar{margin-top:clamp(12px,1.2vw,18px)}
.rvbig__q{margin:clamp(12px,1.2vw,18px) 0 0;position:relative;padding-left:clamp(26px,2.2vw,36px)}
/* ⚠ ANG KUWIT AY `position:absolute` AT MAY SARILING `line-height:1`.
   Sa daloy ay 40px ang taas na dinadala niya at hindi maabot ng talata
   ang tabi niya. Sa labas ng daloy ay nakatabi lang siya sa unang linya,
   at iyon ang nasa disenyo. */
.rvbig__mark{position:absolute;left:0;top:-.1em;line-height:1;
  font-family:var(--display);font-weight:800;font-size:clamp(38px,3.4vw,52px);
  color:rgba(255,255,255,.28)}
.rvbig__q p{margin:0;font-size:clamp(14px,1.24vw,19px);line-height:1.52;color:#fff;
  font-weight:500}
.rvbig__buy{margin:clamp(14px,1.4vw,20px) 0 0;font-size:clamp(9.6px,.72vw,11px);
  color:rgba(255,255,255,.5)}

/* =========================================================
   ANG LIMANG PUTING CARD
   ========================================================= */
.revs__track{position:absolute;inset:0;pointer-events:none}
.rev{
  position:absolute;left:var(--x);top:var(--y);width:var(--w);
  pointer-events:auto;
  background:var(--paper);border:1px solid var(--line-2);border-radius:15px;
  padding:clamp(13px,1.15vw,18px) clamp(14px,1.2vw,19px) clamp(14px,1.2vw,19px);
  box-shadow:0 20px 38px -26px rgba(2,19,52,.5), 0 3px 9px -6px rgba(2,19,52,.32);
  opacity:0;transform:translateY(20px) scale(.94);
  transition:opacity .5s var(--ease), transform .72s var(--back), box-shadow .35s var(--ease);
}
/* ⚠ DALAWANG MAGKAIBANG GALAW ANG NAGHAHATI SA IISANG `transform` DITO,
   at may dahilan ang hati: ang PAGPASOK ay `transition` sa `.rev` mismo,
   at ang PAGLUTANG ay `animation` sa anak. Ilagay mo silang dalawa sa
   `.rev` at magkakabanggaan sila, at ang huli ang mananalo — kaya alinman
   sa dalawa: tumitigil ang paglutang kada hover, o hindi na dumarating
   nang buo ang card. Magkahiwalay, walang labanan. */
.rvstage.is-in .rev{opacity:1;transform:none;transition-delay:calc(.15s + var(--i,0) * 90ms)}
.rvstage.is-in .rev > *{animation:rvfloat var(--fd,8s) ease-in-out var(--fo,0s) infinite}
@keyframes rvfloat{
  0%,100%{transform:translateY(0)}
  50%    {transform:translateY(-9px)}
}
.rvstage.is-in .rev:focus-within{
  transform:translateY(-6px) scale(1.035);z-index:5;
  box-shadow:0 34px 58px -28px rgba(2,19,52,.6), 0 5px 14px -8px rgba(2,19,52,.36);
}
@media (hover:hover){ .rvstage.is-in .rev:hover{
  transform:translateY(-6px) scale(1.035);z-index:5;
  box-shadow:0 34px 58px -28px rgba(2,19,52,.6), 0 5px 14px -8px rgba(2,19,52,.36);
} }
.rvstage.is-in .rev:focus-within > *{animation-play-state:paused}
@media (hover:hover){ .rvstage.is-in .rev:hover > *{animation-play-state:paused} }

.rev__top{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.rev__av{flex:none;width:clamp(34px,2.7vw,42px);aspect-ratio:1;border-radius:50%;
  display:grid;place-items:center;
  font-family:var(--display);font-weight:800;font-size:clamp(11px,.85vw,13px);letter-spacing:.03em;
  background:var(--navy);color:#fff}
/* ⚠ PULA ANG UNA AT ANG PANG-APAT, NAVY ANG IBA — sinusunod nito ang
   disenyo. Dekorasyon lang: WALANG kahulugan ang pinagkaiba at wala
   itong sinasabi tungkol kaninuman. Puti sa pula = 5.87:1. */
.rev:nth-child(3n+1) .rev__av{background:var(--red)}
.rev__who{min-width:0;display:grid;gap:2px}
/* ⚠ HINDI PINUPUTOL ANG PANGALAN. `white-space:nowrap` + `ellipsis` ito
   noon at may isa o dalawang pangalang NAPUPUTOL sa 1200–1280. PANGALAN
   NG TAO ITO — mas mabuti ang dalawang linya kaysa sa "Daniel Patrick
   Mendo…". May 29–53px na puwang sa pagitan ng magkapatong na card, at
   kasya roon ang pangalawang linya. */
.rev__who b{font-family:var(--display);font-weight:800;font-size:clamp(12px,.95vw,14.5px);
  line-height:1.24;color:var(--navy);overflow-wrap:anywhere}
.rev__who span{font-size:clamp(10px,.78vw,12px);color:var(--ink-2)}
/* ⚠ `flex-wrap` AT `row-gap` DITO. Sa 1200px ay 236px lang ang
   pinakamakitid na card at 60px ang bituin + 96px ang chip + 8px ang
   agwat = 164px — kasya. Sa mas makitid ay babagsak ang chip sa
   ikalawang linya sa halip na tumulak sa labas ng card. */
.rev__rate{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:9px}
.rev__msg{font-size:clamp(11.6px,.88vw,13.4px);line-height:1.5;color:var(--navy);margin:0}
.rev__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}

/* =========================================================
   ANG PANGAKO SA SULOK
   ========================================================= */
.rvpromise{
  position:absolute;left:78.5%;top:77.6%;width:19.6%;z-index:3;
  padding:clamp(16px,1.6vw,24px) clamp(16px,1.6vw,24px);
  border-radius:15px;overflow:hidden;
  background:linear-gradient(150deg,#274C87,#17325F);
  box-shadow:0 26px 46px -28px rgba(2,19,52,.6), 0 4px 12px -7px rgba(2,19,52,.34);
  display:grid;grid-template-columns:auto minmax(0,1fr);
  column-gap:clamp(10px,1vw,14px);align-items:center;
  opacity:0;transform:translateY(18px) scale(.96);
  transition:opacity .55s var(--ease) .5s, transform .8s var(--back) .5s;
}
.rvstage.is-in .rvpromise{opacity:1;transform:none}
/* ---- ANG TEIP SA SULOK ----
   Ito ang nasa disenyo at ito ang tanging biro sa buong seksyon: teip
   ang ibinebenta ng TapeMate, at teip ang nakadikit sa card nila.
   Manipis at kulay-abo — `rgba` at hindi solidong kulay, kaya
   nagpapakita ng navy sa ilalim at hindi patong na parihaba. */
.rvpromise__tape{position:absolute;right:-26px;top:10px;width:96px;height:23px;
  transform:rotate(40deg);pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.42),rgba(255,255,255,.22));
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.2)}
.rvpromise__ico{width:clamp(34px,3vw,46px);height:auto;color:#9DC2F5;grid-row:1 / span 2}
.rvpromise__t{margin:0;font-family:var(--display);font-weight:800;
  font-size:clamp(12px,1vw,15px);line-height:1.32;color:#fff}
.rvpromise__s{margin:6px 0 0;grid-column:2;font-size:clamp(9.4px,.72vw,11px);
  color:rgba(255,255,255,.58)}

/* =========================================================
   ANG TATLONG LUMULUTANG
   ========================================================= */
.rvpop{position:absolute;z-index:4;display:grid;place-items:center;border-radius:50%;
  color:#fff;box-shadow:0 14px 26px -12px rgba(2,19,52,.5);
  opacity:0;transform:scale(.4);
  transition:opacity .5s var(--ease), transform .7s var(--back)}
.rvstage.is-in .rvpop{opacity:1;transform:none}
.rvpop .ico{width:46%;height:46%}
/* ⚠ 31% AT HINDI 36.5% (Ago 25, 2026). Nakapuwesto siya laban sa
   LUMANG `.rvbig` na nagsisimula sa 41.9%; 38% na ngayon ang
   `.rvrig`, kaya 36px ang nakapatong niya sa kaliwang gilid ng card
   sa 1440. Nasa gilid siya ngayon, hindi sa ibabaw. */
.rvpop--box{left:31%;top:14.5%;width:4.1%;aspect-ratio:1;
  background:var(--paper);color:var(--navy);transition-delay:.4s;
  box-shadow:0 16px 30px -14px rgba(2,19,52,.42), inset 0 0 0 1px var(--line-2)}
.rvpop--heart{left:89.9%;top:2.9%;width:2.9%;aspect-ratio:1;background:var(--red);transition-delay:.55s}
.rvpop--thumb{left:51.3%;top:93.2%;width:3.2%;aspect-ratio:1;background:var(--navy-soft);transition-delay:.72s}
/* ⚠ ANG PUTI LANG ANG WALANG PING. Ang singsing ay `currentColor`, at
   ang `currentColor` ng puti ay navy — nagiging maitim na singsing sa
   ibabaw ng maputlang likod, at mukha siyang mali. */
.rvstage.is-in .rvpop--heart::after,.rvstage.is-in .rvpop--thumb::after{
  content:"";position:absolute;inset:0;border-radius:50%;border:2px solid currentColor;
  animation:rvping 3.4s var(--ease) 1.6s infinite;
}
@keyframes rvping{
  0%     {transform:scale(1);opacity:.55}
  55%,100%{transform:scale(1.85);opacity:0}
}

/* ---- pana at tuldok: sa cellphone lang ---- */
.revs__nav{display:none;align-items:center;justify-content:center;gap:16px;margin-top:22px}
.revs__arrow{width:44px;height:44px;border-radius:50%;border:1.6px solid var(--line);
  background:var(--paper);display:grid;place-items:center;cursor:pointer;color:var(--navy);
  transition:all .3s var(--back)}
.revs__arrow .ico{width:19px;height:19px}
.revs__arrow--prev .ico{transform:rotate(180deg)}
@media (hover:hover){ .revs__arrow:hover{background:var(--navy);border-color:var(--navy);color:#fff;transform:scale(1.08)} }
.revs__dots{display:flex;gap:8px}
.revs__dots i{width:8px;height:8px;border-radius:99px;background:var(--line);cursor:pointer;
  transition:all .35s var(--ease)}
.revs__dots i.is-on{width:26px;background:var(--red)}

/* =========================================================
   ANG DALAWANG MAS MALIIT NA SCREEN
   ========================================================= */

/* ---- ⚠ 1199px PABABA: DUMADALOY ANG LAHAT ----
   Hindi kasya ang limang card sa paligid ng featured sa ilalim ng
   1200px — SINUKAT KO ITO: sa 1160px na lalagyan ay 232px na lang ang
   pinakamaliit na card at nagsisimula nang magdikit ang gilid ng
   magkatabi. Nasa gitna ang pamagat, nasa gitna ang featured, at
   nagiging hanay sa ilalim ang lima. */
@media (max-width:1199px){
  .rvx{display:grid;justify-items:center;gap:clamp(24px,3.4vw,40px)}
  .rvx__lead{width:min(720px,100%);text-align:center;display:grid;justify-items:center}
  .eyebrow--dash{justify-content:center}
  .rvx__lead .sec__sub{max-width:60ch}
  /* ⚠ MAY BUBONG ANG RATING CARD DITO. Sa 1000–1199px ay 880px ang
     lapad ng nakasentrong bloke, at ang `auto 1fr` ay nagbibigay ng
     mahigit 600px sa limang bar — nagiging riles ng eroplano ang 92%.
     560px ang pinakamalaki niyang mukhang card pa rin. */
  .rvrate{width:min(560px,100%);text-align:left}
  .rvtrust{width:100%}
  .rvnote{max-width:64ch;text-align:center}
  .rvseal{text-align:left}
  /* ⚠ WALA ANG SELYO NG KOREO DITO. Nasa dulong-kanan siya ng isang
     hanay na 442px sa disenyo; sa nakasentrong bloke ay nagiging
     pangatlong bagay siya sa gitna ng pahina at hindi na siya gilid. */
  .rvseal__mark{display:none}

  .rvstage{position:relative;width:100%;display:grid;justify-items:center;
    gap:clamp(22px,3vw,34px)}
  /* Ang tatlong absolute ay dumadaloy na. `order` ang nagtatakda ng
     pagkakasunod: featured muna (siya ang pinakamalaki), tapos ang lima,
     tapos ang pangako bilang pangwakas. */
  /* ⚠ `relative` AT HINDI `static`, AT MAY DAHILAN NA HINDI AGAD
     HALATA. May `position:absolute` ang laso sa loob ng `.rvbig`, at
     ang `.rvpromise__tape` sa loob ng `.rvpromise`. Sa `static` ay
     nawawala ang magulang bilang sanggunian at ang `.rvstage` na ang
     nagiging sanggunian — lumilipad ang laso sa LABAS ng card at nawawala
     ang teip. `relative` lang ang kailangan: hindi siya nag-iiba ng
     puwesto pero binabalik niya ang saklaw. */
  .rvbig{position:relative;left:auto;top:auto;width:min(640px,100%);order:1}
  .revs__track{position:static;inset:auto;pointer-events:auto;order:2;
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
    gap:clamp(12px,1.8vw,20px);width:min(880px,100%)}
  .rev{position:static;left:auto;top:auto;width:auto}
  .rvpromise{position:relative;left:auto;top:auto;width:min(440px,100%);order:3}
  /* ⚠ KAILANGAN NG `order` NG NAV. Ang default ay 0, at ang tatlong
     nasa taas ay 1/2/3 — kaya ang pana at tuldok ay UNANG-UNA sa
     eksena, bago pa ang featured. Nakita ito sa 390px: nasa itaas ng
     navy na card ang dalawang pana. */
  .revs__nav{order:4}
  /* ⚠ WALA ANG TATLONG LUMULUTANG DITO. Nakakabit sila sa gilid ng
     featured sa eksaktong porsyento ng eksena; kapag dumaloy na ang
     layout ay lumilipad sila sa gitna ng ibang bagay. */
  .rvpop{display:none}
  /* ⚠ NAKAPATAY ANG PAGLUTANG DITO. Sa hanay ay magkatabi sila at ang
     dating paglutang ay nagiging pagyugyog — maganda kapag nagkalat,
     magulo kapag nakahanay. */
  .rvstage.is-in .rev > *{animation:none}
}

/* ---- ⚠ 700–999px: DALAWANG HANAY PA RIN ANG LIMA ----
   Sa isang hanay ay mahigit 1,000px na ng pag-scroll ang lima, at iyon
   mismo ang reklamo sa #dealership ("ang haba nya masyado"). */
@media (max-width:999px){
  .rvrate{grid-template-columns:1fr;gap:16px;justify-items:center;text-align:center}
  .rvrate__score{justify-items:center}
  .rvbars{width:100%;max-width:360px}
  .rvseal{flex-direction:column;text-align:center;justify-items:center}
  .rvseal__txt{justify-items:center}
}

/* ---- ⚠ RILES SA CELLPHONE (≤699px) ----
   Nasa seksyon 11 ng main.js ang katumbas na hangganan.
   ⚠ MAY `padding` ANG RILES: pinipilit ng `overflow-x:auto` na huminto
     sa pagiging `visible` ang `overflow-y` (spec ng CSS), kaya
     naputol ang anino at ang pag-angat kung walang puwang. */
@media (max-width:699px){
  .rvtrust{grid-template-columns:1fr;gap:11px;justify-items:start;max-width:260px;
    margin-inline:auto}
  .revs__track{
    display:flex;grid-template-columns:none;gap:14px;
    overflow-x:auto;scroll-snap-type:x mandatory;
    padding:10px 0 14px;scrollbar-width:none;-ms-overflow-style:none;
    align-items:start;width:100%;
  }
  .revs__track::-webkit-scrollbar{display:none}
  .rev{flex:0 0 min(280px,74vw);scroll-snap-align:center;transform:translateY(14px) scale(1)}
  .rvstage.is-in .rev,
  .rvstage.is-in .rev:focus-within{
    transform:none;z-index:auto;
    box-shadow:0 20px 38px -26px rgba(2,19,52,.5), 0 3px 9px -6px rgba(2,19,52,.32);
  }
  @media (hover:hover){ .rvstage.is-in .rev:hover{
    transform:none;z-index:auto;
    box-shadow:0 20px 38px -26px rgba(2,19,52,.5), 0 3px 9px -6px rgba(2,19,52,.32);
  } }
  .revs__nav{display:flex}
  .rvbig__ribbon{right:16px}
  .rvpromise{grid-template-columns:1fr;row-gap:10px;justify-items:start}
  .rvpromise__ico{grid-row:auto}
  .rvpromise__s{grid-column:1}
}

@media (max-width:420px){
  .rvrate{padding:16px 14px}
  .rvbig{padding:18px 16px 16px}
}

/* =========================================================
   NAKA-PARKE: ANG APAT NA HIGHLIGHT SA IBABA
   ⚠ BUHAY ANG CSS, NAKAKOMENTO ANG MARKUP (dulo ng #proof sa
     index.html). Ang tatlong tatak sa kaliwa ang kapalit nila sa
     ipinadalang disenyo. Isang uncomment lang ang pagbabalik nila —
     kaya hindi ito binura.
   ========================================================= */
/* =========================================================
   THE FOUR HIGHLIGHTS ALONG THE BOTTOM
   ========================================================= */
.rvfeat{
  list-style:none;margin:clamp(26px,3.4vw,44px) auto 0;
  width:min(1240px,100% - 40px);
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:clamp(10px,1.4vw,22px);
  padding:clamp(16px,1.8vw,24px) clamp(14px,2vw,30px);
  border-radius:20px;background:var(--paper);border:1px solid var(--line-2);
  box-shadow:var(--shadow-m);
}
.rvfeat li{display:flex;align-items:center;gap:12px;min-width:0}
.rvfeat__ico{flex:none;width:38px;height:38px;display:grid;place-items:center}
.rvfeat__ico .ico{width:26px;height:26px}
.rvfeat__ico--red{color:var(--red)}
.rvfeat__ico--navy{color:var(--navy)}
.rvfeat__txt{display:grid;gap:2px;min-width:0}
.rvfeat__txt b{font-family:var(--display);font-weight:800;font-size:13.5px;color:var(--navy)}
.rvfeat__txt span{font-size:11.6px;line-height:1.4;color:var(--ink-2)}
.rvfeat li[data-reveal]{transition-delay:calc(var(--i,0) * 90ms)}
@media (max-width:1199px){.rvfeat{grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(14px,2vw,22px)}}
@media (max-width:699px){
  .rvfeat{grid-template-columns:repeat(2,minmax(0,1fr));padding:16px 14px;gap:14px}
  .rvfeat__ico{width:32px;height:32px}
  .rvfeat__ico .ico{width:22px;height:22px}
}
@media (max-width:420px){.rvfeat{grid-template-columns:1fr}}

/* THERE IS NO `.trust` HERE ANY MORE (Aug 12, 2026). The five broken
   logo slots at the end of #proof were removed — they were mock-ups, and
   the four real logos are in `section#partners` now. The CSS was in
   _parked/trust.html.txt, deleted Aug 18, 2026. */


/* ================= 14. PROCESS =================

   ONE STEP AT A TIME. This used to be four columns, all open at once. Now
   it is a single box with a rail above and two buttons below — the reader
   is what drives it.

   ⚠ EVERY PIECE OF HIDING IS ON `.is-live`. Only section 11b of main.js
     puts that class there. If the JS never runs, nothing is hidden: this
     is just four blocks one after another, the text whole, and no button
     that fails to work.

   ⚠ ALL FOUR STACK IN ONE BOX (`grid-area:1/1`), so the LONGEST of the
     four is the height of the box. That is deliberate: the bottom of the
     section does not jump when the step changes. */
/* ---- THE SECTION'S BACKGROUND ----
   It holds only one box and the rest is flat cream. The three layers
   below give it ground, and ALL THREE ARE ALREADY USED ON THE PAGE —
   there is no new idea here, only borrowing:

     .prcglow   the three lights of #products (`.prodglow`)
     .prcdots   the dot mesh of #products (`.proddots`)
     .prcroute  the route of #story (`.featbg__route`)

   ⚠ ALL THREE ARE `z-index:0` AND THAT IS NEEDED. There is a
     `.sec > *{z-index:1}` in section 2, so anything put here lands on top
     of the box unless it is undone. */
.prcglow{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.prcglow i{position:absolute;display:block;border-radius:50%;will-change:transform}
.prcglow i:nth-child(1){
  left:-10%;top:-12%;width:min(56%,620px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(31,66,128,.13) 0,rgba(31,66,128,.04) 46%,transparent 70%);
  animation:prcglowA 28s ease-in-out infinite;
}
.prcglow i:nth-child(2){
  right:-14%;bottom:-16%;width:min(54%,580px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(31,66,128,.12) 0,rgba(31,66,128,.035) 48%,transparent 72%);
  animation:prcglowB 36s ease-in-out infinite;
}
/* Only a hint of red — it is the brand colour, but at .06 it is warmth in
   the background and not a stain. The same as `.prodglow i:nth-child(3)`. */
/* ⚠ THIS IS AT THE BOTTOM AND NOT AT THE TOP. It used to be at
   `top:-20%` and it TINTED THE TITLE PINK — the band above the box is
   empty apart from "Four steps, and done", so there was nothing for it to
   land on but the lettering itself. Down here it is behind the box and
   becomes warmth at the corner of the eye. */
.prcglow i:nth-child(3){
  left:30%;bottom:-24%;width:min(46%,500px);aspect-ratio:1;
  background:radial-gradient(circle,rgba(217,4,41,.055) 0,rgba(217,4,41,.02) 44%,transparent 68%);
  animation:prcglowC 32s ease-in-out infinite;
}
@keyframes prcglowA{0%,100%{transform:translate3d(0,0,0) scale(1)}   50%{transform:translate3d(8%,6%,0) scale(1.12)}}
@keyframes prcglowB{0%,100%{transform:translate3d(0,0,0) scale(1.06)}50%{transform:translate3d(-7%,-8%,0) scale(.94)}}
@keyframes prcglowC{0%,100%{transform:translate3d(0,0,0) scale(.96)} 50%{transform:translate3d(-6%,7%,0) scale(1.1)}}

/* The DOTS themselves move and not the rectangle: `background-position`
   is what is animated, so the mask and the fading edge stay put. One
   whole step of the pattern (19px) is one cycle, so nothing jumps on the
   return. The same as `.proddots`. */
.prcdots{
  position:absolute;left:0;bottom:0;z-index:0;pointer-events:none;
  width:min(28%,300px);height:clamp(150px,20vw,260px);
  background:radial-gradient(rgba(31,66,128,.18) 1.4px,transparent 1.5px) 0 0/19px 19px;
  -webkit-mask-image:linear-gradient(28deg,#000 4%,transparent 72%);
          mask-image:linear-gradient(28deg,#000 4%,transparent 72%);
  animation:prcdrift 24s linear infinite;
}
@keyframes prcdrift{to{background-position:19px 19px}}

/* ---- THE ROUTE ----
   It enters on the left, disappears behind the box, comes out on the
   right. A light runs along it every 8.5s — that is the delivery.

   ⚠ THE JS MEASURES `--haba` (section 11b). The light is
     `stroke-dasharray:22 var(--haba)`: guess shorter than the true length
     of the path and A SECOND LIGHT APPEARS behind it; guess longer and
     there is a gap before it comes back.

     1305px is the fallback should the script never arrive — that was
     measured on the path in the markup and not guessed, so it still looks
     right with the JS dead. ⚠ WHEN THE PATH'S `d=""` IS CHANGED it has to
     be measured again. */
.prcroute{
  position:absolute;inset:0;z-index:0;width:100%;height:100%;
  pointer-events:none;overflow:visible;
  -webkit-mask-image:linear-gradient(90deg,transparent 2%,#000 22%,#000 78%,transparent 98%);
          mask-image:linear-gradient(90deg,transparent 2%,#000 22%,#000 78%,transparent 98%);
}
.prcroute__road{
  fill:none;stroke:rgba(31,66,128,.19);stroke-width:1.7;
  stroke-dasharray:5 11;stroke-linecap:round;
}
.prcroute__run{
  fill:none;stroke:var(--red);stroke-width:2.6;stroke-linecap:round;
  filter:drop-shadow(0 0 6px rgba(217,4,41,.6));
  stroke-dasharray:22 var(--haba,1305px);
  animation:prcRun 8.5s linear infinite;
}
@keyframes prcRun{to{stroke-dashoffset:calc(-1 * (var(--haba,1305px) + 22px))}}


/* ⚠ THE WIDTH IS MEASURED ON `.flow` AND NOT ON `.flow__card`. The
   position of the glow below is a percentage of the parent — if the whole
   `.wrap` (1180px) is the parent there are 230px of empty margin on
   either side and the glow appears there: a grey cloud on the cream,
   outside the box. They have to be the same width here. */
.flow{
  --d:42px;position:relative;isolation:isolate;
  width:min(720px,100%);margin:clamp(30px,4.5vh,46px) auto 0;
}

/* ---- THE GLOW BEHIND THE BOX ----
   It slides to the right as you advance: `--go` (0 → 1) is what section
   11b writes. Something you catch at the corner of your eye — you will
   not read it, but you feel that something happened.

   ⚠ THE `isolation` ABOVE IS NEEDED. This is `z-index:-1`, and without
     `.flow` having a stacking context of its own it would slip behind the
     entire section and be lost under the `--cream`. */
.flow::before{
  content:"";position:absolute;z-index:-1;pointer-events:none;
  left:calc(22% + var(--go,0) * 56%);top:52%;translate:-50% -50%;
  width:min(430px,64%);aspect-ratio:1.3;
  background:radial-gradient(closest-side,rgba(31,66,128,.14),transparent 74%);
  transition:left .7s var(--ease);
}

.flow__card{
  position:relative;width:100%;overflow:hidden;
  /* ---- THE DIAGONAL RULE AT THE BOTTOM RIGHT ----
     Tape is what is being imitated: the line along the edge of a wrapped
     carton. THREE LAYERS, and the order matters (the first is on TOP):

       1. fader    paper-coloured, fading toward the bottom-right corner —
                   this is what hides the rule everywhere else
       2. rule     the diagonal itself
       3. paper    the plain background

     ⚠ THE FIRST TWO ARE THE SIZE OF THE WHOLE BOX, and not a box in the
       corner. I tried confining the rule to 62%×74% at the bottom right:
       THERE IS A HARD SEAM along the top edge of that box, because the
       fader is not yet fully paper at that distance from the corner. With
       both of them whole there is NO EDGE THAT CAN BE SEEN — the fader
       alone says how far, and it is soft in every direction.

     ⚠ THE COLOUR IS ONLY `.028`. At `.06` it becomes a pattern and starts
       competing with the number behind — two decorations in one corner,
       and neither wins. You should not see this as a rule; what you
       should feel is the PRESENCE OF TEXTURE. */
  background:
    radial-gradient(farthest-corner at 100% 100%,
      transparent 0 4%, var(--paper) 38%),
    repeating-linear-gradient(-52deg,
      rgba(31,66,128,.028) 0 10px, transparent 10px 21px),
    var(--paper);
  border-radius:20px;
  box-shadow:var(--shadow-m),inset 0 0 0 1.6px var(--line-2);
  padding:clamp(22px,3.4vw,34px);
  /* Only the vertical is handed back to the page. The horizontal is ours —
     the drag is in section 11b. Without this the browser claims the
     movement and we stop receiving `pointermove`. */
  touch-action:pan-y;
}
/* A glow that follows the finger. `--sx/--sy` — the same as `.figs li` in
   section 10 and `.pitem` in 8; section 11b is what writes it here.
   Only under `pointer:fine`: on a phone it is under the finger and would
   never be seen. */
.flow__card::before{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(340px 340px at var(--sx,50%) var(--sy,50%),rgba(31,66,128,.06),transparent 70%);
  opacity:0;transition:opacity .4s ease;
}
@media (hover:hover){ .flow__card:hover::before{opacity:1} }
/* the tape edge on the left — sibling of `.reel__stage::after` */
.flow__card::after{
  content:"";position:absolute;left:0;top:22px;bottom:22px;width:5px;border-radius:0 3px 3px 0;
  background:linear-gradient(180deg,var(--navy),var(--red));
}
/* The three parts of the box sit ABOVE the glow. Otherwise the `::before`
   with its own `position` would sit on top of them — positioned comes
   before non-positioned, even at the same z-index. */
.flow__rail,.flow__stage,.flow__acts{position:relative;z-index:1}

/* ---- the rail ----
   The rule is in pieces: one segment BETWEEN each pair of circles, and
   not one long rule behind them all. So each step has a filled look of
   its own, and `flex:1` divides the remaining width equally. */
.flow__rail{display:flex;align-items:center;gap:10px}
.flow__seg{flex:1;height:3px;border-radius:2px;background:var(--gray-soft);overflow:hidden}
.flow__seg i{display:block;height:100%;width:0;border-radius:2px;background:var(--navy);transition:width .45s var(--ease)}
.flow__seg.is-done i{width:100%}

.flow__dot{
  position:relative;display:grid;place-items:center;flex:none;width:var(--d);height:var(--d);
  border:0;padding:0;cursor:pointer;border-radius:50%;
  background:var(--gray-soft);color:var(--ink-2);
  font-family:var(--display);font-weight:900;font-style:italic;font-size:17px;
  transition:background .3s ease,color .3s ease,box-shadow .35s var(--back),scale .25s var(--back);
}
/* ---- THE THREE PIECES INSIDE, IN ONE BOX ----
   A number, a full dot, and a check. They stack in one grid cell, so only
   `opacity` changes and the circle never jumps. */
.flow__dot b,.flow__dot i,.flow__dot .ico{grid-area:1/1;transition:opacity .28s ease,transform .3s var(--back)}
.flow__dot i,.flow__dot .ico{opacity:0;transform:scale(.4)}
.flow__dot i{width:13px;height:13px;border-radius:50%;background:#fff}
.flow__dot .ico{width:21px;height:21px}
@media (hover:hover){ .flow__dot:hover{color:var(--navy);background:#DDE2EA} }
.flow__dot:active{scale:.92}

/* ---- ONE COLOUR FOR THE WHOLE MECHANISM ----
   Finished and current are the same colour; only the CONTENTS differ (a
   check against a full dot). That is what says what has been reached and
   what you are reading now, without adding a third colour to the rail.
   The red is on the button below and in the "STEP n" — there only. */
.flow__dot.is-now,.flow__dot.is-done{background:var(--navy);color:#fff}
.flow__dot.is-now{box-shadow:0 0 0 5px rgba(31,66,128,.12)}
@media (hover:hover){ .flow__dot.is-now:hover,.flow__dot.is-done:hover{background:var(--navy-soft)} }
.flow__dot.is-now b,.flow__dot.is-done b{opacity:0;transform:scale(.4)}
.flow__dot.is-now i,.flow__dot.is-done .ico{opacity:1;transform:none}

/* ---- the contents ---- */
.flow__stage{margin-top:clamp(24px,3.4vw,32px)}
.flow__ico{
  display:grid;place-items:center;width:52px;height:52px;border-radius:14px;
  background:rgba(31,66,128,.07);color:var(--navy);box-shadow:inset 0 0 0 1.6px rgba(31,66,128,.16);
}
.flow__ico svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.7}
.flow__kick{margin-top:18px;font-family:var(--display);font-weight:700;font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--red)}
.flow__h{margin-top:7px;font-family:var(--display);font-weight:800;font-size:clamp(20px,2.5vw,26px);letter-spacing:-.025em;color:var(--navy)}
.flow__p{margin-top:11px;font-size:clamp(14.5px,1.15vw,16px);line-height:1.68;color:var(--ink-2);max-width:min(52ch,74%)}

/* ---- THE NUMBER BEHIND ----
   The right half of the box is empty — it only holds one thing at a
   time. This is what fills it, and not with new text: the number of the
   step itself, large and faded.

   It is `aria-hidden` in the markup. The same number is in the rail's
   `<b>` and in "STEP n" — it should not be heard three times. */
.flow__mark{
  position:absolute;right:6px;top:50%;z-index:-1;pointer-events:none;user-select:none;
  font-family:var(--display);font-weight:900;font-style:italic;font-size:clamp(78px,11vw,128px);
  line-height:1;letter-spacing:-.06em;color:var(--navy);opacity:.055;
  translate:0 -50%;transform:translateX(24px);transition:transform .6s var(--ease);
}
/* The `translate` and the `transform` stack, so the centring survives
   while it travels. Its step is longer than the panel it sits in — that
   is where the depth comes from. */
.flow.is-live .flow__pane.is-on .flow__mark{transform:none}
.flow.is-live .flow__pane.is-past .flow__mark{transform:translateX(-24px)}
.flow:not(.is-live) .flow__mark{display:none}

/* ---- the two buttons ----
   ⚠ NO RULE ABOVE THIS ROW. The box holds only one thing at a time, so a
     rule divides nothing — it is only in the way. The space is what
     separates. */
.flow__acts{display:flex;align-items:center;gap:12px;margin-top:clamp(24px,3.2vw,34px)}
.flow__back{
  display:inline-flex;align-items:center;gap:8px;border:0;background:none;padding:6px 2px;cursor:pointer;
  font-family:var(--display);font-weight:600;font-size:14.5px;color:var(--ink-2);
  transition:color .25s ease;
}
.flow__back .ico{width:17px;height:17px;transform:rotate(180deg);transition:translate .3s var(--back)}
@media (hover:hover){ .flow__back:hover{color:var(--navy)} .flow__back:hover .ico{translate:-4px 0} }
/* Next stays on the right even when Back is ABSENT — it should not slide
   to the left on the first step. It is not `space-between` that does
   this: Back disappears entirely there, so there is nothing to hold on to. */
.flow__acts .btn{margin-left:auto}

/* ---- WHEN THE JS IS ALIVE ---- */
.flow.is-live .flow__stage{display:grid}
.flow.is-live .flow__pane{
  grid-area:1/1;position:relative;
  opacity:0;visibility:hidden;transform:translateX(34px);
  transition:opacity .38s var(--ease),transform .5s var(--ease),visibility 0s .5s;
}
/* The one left behind departs to the LEFT, and the one arriving comes
   from the right. A class says so and not a clock, so the direction is
   still right even if you jump from 1 to 4. */
.flow.is-live .flow__pane.is-past{transform:translateX(-34px)}
/* `--drag` is the pull of the finger; it is 0px when nobody is holding
   on, so this line replaces nothing at rest. */
.flow.is-live .flow__pane.is-on{
  opacity:1;visibility:visible;transform:translateX(var(--drag,0px));
  transition:opacity .38s var(--ease) .06s,transform .5s var(--ease),visibility 0s;
}
/* While something is being held there is no transition — otherwise the
   panel lags half a second behind the finger. */
.flow.is-drag .flow__pane.is-on,.flow.is-drag .flow__pane.is-on .flow__mark{transition:none}
.flow.is-drag,.flow.is-drag .flow__card{cursor:grabbing}
/* ⚠ TEXT SELECTION STEALS THE DRAG. Without this the whole paragraph is
   marked blue after you drag the box — the browser thinks you are
   selecting.

   ONLY ON `.is-drag`, and not on the whole box: you can still select the
   text normally (a double press, or a downward drag — we let the vertical
   go). Only the HORIZONTAL drag over the text is claimed, and that is
   exactly the movement we are asking for. */
.flow.is-drag{user-select:none;-webkit-user-select:none}

/* ---- THE CONTENTS ENTER IN SEQUENCE ----
   Not all at once: the icon rises, then the "STEP n", then the title,
   then the text. Only 60ms apart — it is not watched, but it is the
   difference between entering and merely appearing.

   ⚠ THE `transition-delay` IS ON `.is-on` ONLY. On the base the DEPARTURE
     would be delayed too, and the old step looks trapped underneath the
     new one. */
.flow.is-live .flow__pane > :not(.flow__mark){
  opacity:0;transform:translateY(12px);
  transition:opacity .42s var(--ease),transform .45s var(--ease);
}
.flow.is-live .flow__pane.is-on > :not(.flow__mark){opacity:1;transform:none}
/* The icon sprouts instead of rising — it is the first thing to call the
   eye, so it moves differently from the three texts below it. */
.flow.is-live .flow__pane .flow__ico{transform:scale(.82)}
.flow.is-live .flow__pane.is-on .flow__ico{transform:none;transition:opacity .42s var(--ease) .05s,transform .5s var(--back) .05s}
.flow.is-live .flow__pane.is-on .flow__kick{transition-delay:.12s}
.flow.is-live .flow__pane.is-on .flow__h{transition-delay:.18s}
.flow.is-live .flow__pane.is-on .flow__p{transition-delay:.24s}
/* No JS = no rail and no buttons; only the four blocks remain, and they
   need space between them. */
.flow:not(.is-live) .flow__rail,
.flow:not(.is-live) .flow__acts{display:none}
.flow:not(.is-live) .flow__pane + .flow__pane{margin-top:34px;padding-top:34px;border-top:1.6px solid var(--line-2)}

/* The rail is the first thing to get tight: four circles in one row. The
   circle is what shrinks and not the spacing — the finger still hits 44px
   thanks to `.flow__dot::before`. */
@media (max-width:560px){
  .flow{--d:36px}
  .flow__rail{gap:8px}
  .flow__dot{font-size:15px}
  .flow__dot::before{content:"";position:absolute;inset:-5px}
  .flow__dot i{width:11px;height:11px}
  .flow__dot .ico{width:18px;height:18px}
  .flow__ico{width:46px;height:46px;border-radius:12px}
  .flow__ico svg{width:24px;height:24px}
  .flow__p{font-size:14.5px;line-height:1.6}
}


/* ================= 14b. SOCIAL — FOLLOW US ON FACEBOOK =================
   Aug 13, 2026. Follows the supplied UI.

   ⚠ ONE COLOUR ONLY IS NEW IN THE WHOLE PAGE: `--fb` (#1877F2), Facebook's
     own blue. It is not decoration and it is not a breach of the brand
     guideline: it is SOMEBODY ELSE'S MARK, like the partner logos in
     #partners. TapeMate's `--electric` (#3B9CFF) is BRIGHTER and bluer —
     used on a button with an "f" on it, it does not look like Facebook,
     it looks like the WRONG Facebook. It is confined to this section; no
     other part of the page ever sees it.

   ⚠ THE TITLE AND THE TEXT ARE STILL NAVY. `--fb` is on the BUTTON, on
     one word of the heading, and inside the phone — those are the only
     places it says anything. */
.sec--social{
  /* ══════════ ANG TATLONG NETWORK (Ago 27, 2026) ══════════
     Hiling ni Kylie: idagdag ang IG at ang TikTok, "same UI lang
     walang maiiba, maiiba lang ang laman."

     ⚠⚠ WALANG BAGONG RULE ANG KAILANGAN NG PALIT, AT ITO ANG BUONG
        DAHILAN: ANG BUONG KANANG BAHAGI AY NAKASABIT NA SA `--fb`.
        Ang pamagat, ang gradient ng pindutan, ang anino niya, ang
        bilog ng bilang at ang salitang "facebook" sa loob ng
        telepono — iisang variable silang lahat. Kaya ang pagpalit ng
        network ay PAGPALIT NG TATLONG NUMERO at wala nang iba.
        Iyon mismo ang hinihinging "same UI, iba lang ang laman".

     ⚠ MAY `--fb-rgb` NGAYON, AT KAILANGAN SIYA. Apat na lugar ang
       may nakasulat na `rgba(24,119,242,…)` — anino ng pindutan,
       anino sa hover, tint ng bilog at tint ng chip. Hindi kayang
       gamitin ang `--fb` sa loob ng `rgba()` dahil hex siya, kaya
       hiwalay na tatlong numero ang nakalagay dito.

     ⚠ ITIM ANG TIKTOK AT HINDI PULA. Pula (#FE2C55) ang isa sa
       dalawang tunay niyang kulay — pero `--red:#D90429` na ang
       buong pahina, at ang pulang pindutan sa pulang pahina ay hindi
       na nagmumukhang TikTok kundi nagmumukha na lang pahina. Ang
       itim na wordmark ang tanda ng TikTok na hindi mapagkakamalian.
     ▶ Pagdagdag ng ikaapat na network: isang hanay ng tatlong
       variable dito, isang `<li>` sa markup, at isang laman sa
       `NETS` ng main.js. Wala nang iba. ══════════════════════ */
  --n-fb:#1877F2;  --n-fb-deep:#0F63D6;  --n-fb-rgb:24,119,242;
  --n-ig:#DD2A7B;  --n-ig-deep:#8134AF;  --n-ig-rgb:221,42,123;
  --n-tt:#25252B;  --n-tt-deep:#0B0B10;  --n-tt-rgb:37,37,43;

  /* ══════════ ANG LIKOD, SUMUSUNOD SA NETWORK (Set 2, 2026) ══════════
     Hiling ni Kylie: "gusto ko sana napapalitan din yung color ng
     background based sa kung color nung specific social platform sya."

     ⚠ BAKIT HINDI NA LANG `--fb-rgb` ANG GINAMIT. Iyon ang kulay ng
       WORDMARK — para siya sa titik, sa pindutan at sa anino, kung saan
       kailangan ng buong lakas. Sa isang malapad na maputlang likod ay
       ibang trabaho iyon, at dalawa sa tatlo ang nasisira:

         Facebook  #1877F2 sa ibabaw ng #EDF4FD — asul na sa asul.
                   Halos walang nagbabago; hindi mo mahahalata.
         TikTok    #25252B — ITIM. Sa mababang lakas ay hindi siya
                   TikTok kundi ABO: mukhang nadumihan ang seksyon,
                   hindi mukhang TikTok.

     ⚠⚠ KAYA MAY SARILING PARES ANG BAWAT ISA, AT PINILI SILA MULA SA
        TUNAY NA PAGKAKAKILANLAN NG APP AT HINDI SA WORDMARK LANG:

          Facebook  #1877F2 → #4B9BFF   asul, dalawang lalim — siya
                                        ang pahinga at siya ang dating
                                        anyo ng seksyon
          Instagram #DD2A7B → #8134AF   rosas at lila — ito MISMO ang
                                        gradient ng logo nila
          TikTok    #25F4EE → #FE2C55   cyan at pula — ang dalawang
                                        kulay ng logo nila. WALANG IBA
                                        SA PAHINA ANG GUMAGAMIT NG
                                        CYAN, kaya siya ang pinakamalinaw
                                        na tanda ng TikTok sa isang
                                        maliwanag na seksyon.

      ⚠ ANG PULA NG TIKTOK AY NAKALAGAY LANG DITO SA LIKOD. Sa pindutan
        ay itim pa rin siya, at nakasulat sa itaas kung bakit: `--red` na
        ang buong pahina at ang pulang pindutan ay hindi nagmumukhang
        TikTok kundi nagmumukha na lang pahina. Sa isang 14% na bloom sa
        sulok ay ibang usapan — hindi siya pindutan, sinag siya.

      ⚠ RGB NA TATLONG NUMERO SILA AT HINDI HEX, dahil sa loob sila ng
        `rgba()` ginagamit — kaparehong dahilan ng `--fb-rgb` sa itaas.
      ▶ Pagdagdag ng ikaapat na network: isang hanay dito rin.
     ═══════════════════════════════════════════════════════════════ */
  --n-fb-w1:24,119,242;   --n-fb-w2:75,155,255;
  --n-ig-w1:221,42,123;   --n-ig-w2:129,52,175;
  --n-tt-w1:37,244,238;   --n-tt-w2:254,44,85;

  --fb:var(--n-fb);
  --fb-deep:var(--n-fb-deep);
  --fb-rgb:var(--n-fb-rgb);
  --w1:var(--n-fb-w1);
  --w2:var(--n-fb-w2);
  /* ⚠ TWO NUMBERS HOLD THE ENTIRE LEFT SIDE (Aug 17, 2026).
     `--w` is the width of the phone and `--ph` is its height; the four
     reactions and the type size inside the screen are all measured
     against these. One number changes when the phone grows or shrinks,
     not forty. The `2.1679` is 2556/1179 — the true shape of an iPhone
     screen, so it is not an arbitrary figure. */
  /* ⚠ 26vw, FORMERLY 28.6vw (Aug 18, 2026). The 28.6% was what was
     MEASURED in the mockup — accurate for a 16:9 slide. Our section is
     shorter than the slide (779px at 1440, not 941), so the same 28.6% is
     larger to the eye here: it is a bigger share of the box it sits in.
     A number from the mockup is not always the look of the mockup. */
  /* ⚠ 20vw, FORMERLY 23.5vw (Aug 19, 2026 — *"phone is too long fix it"*).
     MEASURED at 1440x900 before the change: the phone stood 757px tall in
     a 693px section and ran 129px past the bottom — TALLER THAN THE WHOLE
     SECTION, while the copy beside it finished at 595px. It read as one
     long object with the section built around it.

     ⚠ THE WIDTH IS WHAT WAS REDUCED, NOT THE HEIGHT. `--ph` is
       `--w * 2.1679` and that number is the true shape of an iPhone
       screen (1179/2556) — squashing the height alone would leave a
       phone no phone has ever been. Narrower means shorter, in
       proportion, and it stays a real object.

     ⚠ IT NO LONGER RUNS OFF THE BOTTOM AT ALL, and that is a change of
       mind, not an accident. The supplied UI has it running off, and
       shortening it left an overshoot of only 2–36px across
       1024–1920 — neither running off nor fitting, which reads as a
       rendering slip rather than a decision. So it was taken the rest
       of the way: MEASURED clearance below the phone is now 12–26px at
       every width in that range. A whole phone, 22% shorter than before
       (757px → 593px at 1440).
     ▶ To put the run-off back, this is the only number to change —
       nothing else depends on it. */
  --w:clamp(200px,19vw,318px);
  --ph:calc(var(--w) * 2.1679);
  /* ⚠ THE PHONE'S CENTRE IS TIED TO THE WINDOW, NOT TO THE COLUMN (Aug 18,
     2026). It used to be a percentage of the column — and that is where I
     went wrong twice. The column sits inside `.wrap`, and THE WRAP'S SIDE
     MARGIN SHRINKS as the window narrows: it is 246px at 1672 and only
     93px at 1366. THE SAME percentage is a different place to the eye at
     every width — which is why I needed a breakpoint, and why nothing
     changed at 1366/1440 when I aimed the number at 1672.

     This is what the calc says, and it is only one sentence:
       centre of the phone = 22.5% of the width of the window, anywhere.
     The `min(590px, 50vw - 22px)` is HALF THE WRAP (`min(1180px,
     100% - 44px)`), and the `- 27.5vw` is what drags it from the centre
     of the column out to 22.5% of the scene. No breakpoint, and it does
     not drift at any width.

     The phone AND the four reactions follow one single number: when it
     moves, they go with it. */
  --cx:calc(min(590px, 50vw - 22px) - 27.5vw);
  position:relative;overflow:hidden;
  padding-top:clamp(48px,6vh,80px);padding-bottom:clamp(52px,7vh,92px);
  background:
    radial-gradient(120% 90% at 88% 6%, #FFFFFF 0%, rgba(255,255,255,0) 56%),
    linear-gradient(180deg,#F8FBFF 0%,#E9F1FC 100%);
}

/* ⚠ THERE ARE NO BREAKPOINTS FOR THE PHONE'S POSITION ANY MORE (Aug 18,
   2026). There used to be three here — 34% / 44% / 46% — because `--cx`
   was a percentage of the COLUMN, and every width had to be chased by
   hand. The whole answer is inside `--cx` itself now (see the note
   there), and what it measures is the window. One line, no steps.

   ⚠ THE THUMB IS THE MEASURE, NOT THE PHONE. It is the furthest to the
     left — 60% of the phone's width from the centre, plus half of its own
     size. If it fits, everything fits. `bounds.mjs` in the scratchpad is
     what measures this: the LEFTMOST pixel of the whole scene at every
     width, not an estimate by eye. */

/* ---- THE BACKGROUND ----
   Two waves at the bottom left and two grids of dots at the top right, as
   supplied. ⚠ `z-index:0` with the content at 1 — there is a `.sec > *`
   rule on the page that gives 1, so 0 is enough here. */
.fbbg{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.fbbg__wave{position:absolute;left:0;bottom:0;width:100%;height:min(52%,320px)}
/* ⚠ `--electric` (59,156,255) ITO HANGGANG SET 2, 2026 — at kasama sa
   nakasulat sa itaas ng seksyon na "no new colour". Sumusunod na siya sa
   network ngayon: mananatili sanang ASUL ang alon sa ilalim ng isang
   ROSAS na Instagram, at ang hindi pagkakatugmang iyon ang unang
   napapansin. Ang pangalawang path (navy) ay HINDI sumusunod — istruktura
   siya at hindi tanda, at siya ang nagbibigay ng lalim sa alon. */
.fbbg__wave path{fill:rgba(var(--w1),.13)}
.fbbg__wave path.fbbg__wave2{fill:rgba(31,66,128,.09)}
/* ⚠ A REPEATING `radial-gradient` MAKES THE DOTS, not 400 `<i>`s. It is
   one rule and there is no node in the DOM. */
.fbbg__dots{
  position:absolute;border-radius:4px;
  background-image:radial-gradient(rgba(31,66,128,.19) 1.6px, transparent 1.7px);
  background-size:15px 15px;
}
.fbbg__dots--a{right:6.5%;top:11%;width:104px;height:78px;opacity:.85}
.fbbg__dots--b{left:2.5%;top:12%;width:118px;height:140px;opacity:.5}
/* The ribbon down the right edge — strokes only, no fill. */
.fbbg__ribbon{
  position:absolute;right:0;top:-4%;width:min(30%,430px);height:108%;
  fill:none;stroke:rgba(59,156,255,.22);stroke-width:2.2;
}
.fbbg__cube{
  position:absolute;right:2.4%;top:8%;width:clamp(26px,2.4vw,44px);height:auto;
  fill:none;stroke:rgba(59,156,255,.38);stroke-width:2;stroke-linejoin:round;
}

/* ⚠ THE ROW'S HEIGHT HAS A FLOOR, AND IT IS WHAT SETS THE SECTION.
   The phone is `absolute` inside the stage, so it adds no height of its
   own — follow the phone's height instead and this becomes a 1,100px-tall
   section with the copy floating in the middle of it.

   ⚠ THE PHONE USED TO OVERSHOOT THIS FLOOR AND BE CUT BY `overflow`
     (that is the supplied UI). It was shortened on Aug 19, 2026 —
     *"phone is too long fix it"* — and now clears the bottom by 12–26px
     across 1024–1920. The `overflow:hidden` still guards the sides; it
     just has nothing left to cut at the bottom. See the note on `--w`. */
.fbb{
  position:relative;z-index:1;
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(26px,4.6vw,64px);align-items:center;
  /* ⚠ 40vw, FORMERLY 46vw (Aug 18, 2026). The 46 came from the shape of
     the mockup — 941 in 1672, a 16:9 slide. But a slide is LOOKED AT ON
     ITS OWN; a section has something after it and something before it,
     and the eye is only passing through. At 46vw there were 160px of
     empty air at the bottom right — the copy ends at the chips, and then
     nothing follows. The section is now as tall as THE COPY NEEDS, and
     the phone sits inside it (Aug 19, 2026 — see the note on `--w`). */
  min-height:clamp(400px,40vw,660px);
}
/* ⚠ `order` IS WHAT MOVES THE PHONE LEFT, NOT THE MARKUP. The text comes
   first in the markup so the reading order is right (see the note in
   index.html); this only swaps their places to the eye. */
@media (min-width:901px){
  .fbb__stage{order:1}
  .fbb__copy{order:2}
}

/* =========================== THE RIGHT =========================== */
.fbb__copy{display:flex;flex-direction:column;align-items:flex-start}

/* The small name at the top with a rule underneath: red then blue, as
   supplied — TapeMate's two colours in one line. */
.fbb__eyebrow{
  position:relative;
  font-family:var(--display);font-weight:700;
  font-size:clamp(12px,1.12vw,16px);letter-spacing:.3em;text-transform:uppercase;
  color:var(--navy);padding-bottom:clamp(10px,.95vw,13px);
}
.fbb__eyerule{
  position:absolute;left:0;bottom:0;height:clamp(3px,.3vw,4px);width:min(100%,218px);
  border-radius:3px;overflow:hidden;
  background:linear-gradient(90deg,var(--red) 0 40%,var(--navy) 40% 100%);
  transform:scaleX(0);transform-origin:0 50%;
  transition:transform .85s var(--ease) .18s;
}
.fbb__eyebrow.is-in .fbb__eyerule{transform:scaleX(1)}

/* ⚠ THIS IS NOT ITALIC, EVEN THOUGH EVERY `.h2` ON THE PAGE IS (Aug 17,
     2026). It is the ONE upright title, and it is not a mistake: it is
     upright in the supplied UI, and there is a reason that is only
     visible once it is beside the phone. The phone is TILTED — it has a
     slant of its own. Make the title beside it italic as well and two
     different slants fight in one scene and the whole part shivers. The
     upright title is what gives the vertical line the eye measures the
     phone's tilt against.
   ⚠ IT IS ALSO LARGER THAN THE OTHER `.h2`s — it is the largest text in
     the supplied UI, and it is two lines there. */
.fbb__h{
  margin-top:clamp(14px,1.8vh,24px);
  font-style:normal;font-weight:800;
  font-size:clamp(32px,5vw,72px);line-height:1.02;letter-spacing:-.032em;
}
.fbb__h span{display:block}
.fbb__blue{color:var(--fb)}

/* ---- ANG PALIT NG NETWORK ----
   Tatlong linya. Tingnan ang malaking tala sa itaas ng `.sec--social`. */
.sec--social[data-net="ig"]{--fb:var(--n-ig);--fb-deep:var(--n-ig-deep);--fb-rgb:var(--n-ig-rgb);
  --w1:var(--n-ig-w1);--w2:var(--n-ig-w2)}
.sec--social[data-net="tt"]{--fb:var(--n-tt);--fb-deep:var(--n-tt-deep);--fb-rgb:var(--n-tt-rgb);
  --w1:var(--n-tt-w1);--w2:var(--n-tt-w2)}

/* ---- ANG WASH SA LIKOD ----
   Dalawang malambot na bloom, wala nang iba: isa sa likod ng nakasulat
   (kanang itaas) at isa sa ilalim ng telepono (kaliwang ibaba). Kaya sa
   magkabilang panig ang kulay at hindi lang sa isa.

   ⚠ WALA SIYANG SARILING KULAY. `--w1` at `--w2` lang ang binabasa
     niya, kaya WALANG BAGONG RULE ANG KAILANGAN kapag nagdagdag ka ng
     network — kapareho ng dahilan kung bakit walang bagong rule ang
     pamagat at ang pindutan (basahin ang tala sa itaas).

   ⚠ `::before` AT HINDI SA `.fbbg`. Kaparehong z-index sila (0), pero
     ANAK ang `.fbbg` at PSEUDO-ELEMENT ito — kaya laging naipipinta ang
     alon at ang laso SA IBABAW ng wash, hindi sa ilalim. At hindi
     nagalaw ang markup sa dalawang kopya.

   ⚠ WALANG `transition`. Instant din ang palit ng pamagat, ng pindutan
     at ng anino (walang `transition` ang `background` ng `.fbb__cta`) —
     kung ito lang ang dahan-dahan ay magmumukhang nahuhuli ang likod.

   ⚠ MAHINA SILA AT SINUKAT KUNG GAANO. Navy sa ibabaw nito ang buong
     nakasulat; sa 20%/16% ay 11.3:1 pa rin ang pinakamababang contrast
     ng pamagat sa tatlong network — malayo sa 4.5:1 na hinihingi ng
     WCAG AA. Kapag itinaas mo sila, ITO ANG SUSUKATIN MULI. */
/* ⚠⚠ DALAWANG MALIIT NA KAHON AT HINDI IISANG MALAKI — HINDI ITO
      ESTILO, BILIS ITO. Iisang `::before` na `inset:0` ito noon na may
      DALAWANG radial gradient sa loob: ibig sabihin, DOBLENG buong
      seksyon ang kinukuwenta sa bawat pagpinta — mga 2.2 milyong pixel
      ng gradient sa 1440x780.

      At ipinipinta siyang muli sa BAWAT PALIT NG NETWORK, dahil ang
      kulay mismo ang nagbabago. Nasukat kung magkano: 187ms ang
      pinakamasamang frame sa paglipat; 83ms kapag pinatay ang wash.

      Ang bawat bloom ay may sariling kahon ngayon, kasinlaki lang ng
      kailangan niya: 0.73 na lang ng seksyon ang ipinipinta, mula sa
      2.0. Kaparehong hitsura, halos kalahati ang trabaho.

    ⚠ `closest-side` ANG HUGIS. Sa loob ng maliit na kahon ay kailangang
      TAPOS na ang pagkupas bago pa marating ang gilid — kung hindi ay
      may matalim na hangganan doon. `closest-side` ang naglalagay ng
      dulo ng gradient sa pinakamalapit na gilid, kaya laging tapos.
    ⚠ HUWAG SILANG PAGSAMAHIN ULIT SA IISANG `inset:0`. Doon babalik ang
      100ms. */
.sec--social::before,
.sec--social::after{content:"";position:absolute;z-index:0;pointer-events:none}

/* ⚠⚠ HUWAG GAMITIN ANG `closest-side` DITO. Sinubukan ko siya at NAGING
      MALILIIT NA TULDOK ang dalawang bloom: sa isang kahong nakadikit sa
      sulok ay ang PINAKAMALAPIT na gilid ang ginagawa niyang radius, at
      ang pinakamalapit sa isang sulok ay MALAPIT. Hindi ito nakikita sa
      code — sa litrato lang.

   ⚠ ANG SUKAT AY INILIPAT MULA SA SEKSYON PATUNGO SA KAHON, hindi
     tinantiya. Ganito ang dating iisang `inset:0` na patong:

         bloom 1   gitna (80%, 14%)   radius 70% x 58%   kupas sa 70%
         bloom 2   gitna ( 8%, 90%)   radius 62% x 52%   kupas sa 72%

     Ang ABOT ng bloom 1 ay 0.7 x 70% = 49% ng lapad, kaya umaabot siya
     mula x=31% hanggang lampas sa kanang gilid — at 0.7 x 58% = 41% ng
     taas, mula sa itaas hanggang y=55%. IYON ANG KAHON: 69% x 55%,
     nakadikit sa kanang itaas. Sa loob niya ay 71%/25% ang gitna at
     101%/105% ang radius — kaparehong bilog, ibang panukat lang.
     Ganoon din ang bloom 2: 53% x 48% ang kahon sa kaliwang ibaba.

   ▶ Kaya walang naipuputol: ang gilid ng kahon ay eksaktong kinaroroonan
     ng dulo ng pagkupas. At 0.63 na lang ng seksyon ang ipinipinta,
     mula sa 2.0 — halos ikatlo ng dating trabaho. */

/* ang sinag sa likod ng nakasulat */
.sec--social::before{
  top:0;right:0;width:69%;height:55%;
  background:radial-gradient(101% 105% at 71% 25%,
    rgba(var(--w1),.20) 0%, rgba(var(--w1),0) 70%);
}
/* ang sinag sa ilalim ng telepono */
.sec--social::after{
  left:0;bottom:0;width:53%;height:48%;
  background:radial-gradient(117% 108% at 15% 79%,
    rgba(var(--w2),.16) 0%, rgba(var(--w2),0) 72%);
}

/* ⚠ MALUWAG ANG PAGSALIN NG KULAY (.5s) AT MABILIS ANG PAGSALIN NG
     TEKSTO (.26s). Sinasadya ang pagkakaiba: ang KULAY ay dapat
     dumaloy — iyon ang nagpapamukhang iisang bagay pa rin ang
     tinitingnan mo — pero ang SALITA ay hindi puwedeng maghalo sa
     gitna ng palit ("Faceboogram"), kaya kumukupas muna siya bago
     palitan. Sa gitna ng kupas nagpapalit ang JS, kaya hindi
     kailanman nakikita ang mismong paghahalili. */
.fbb__blue,.fbui__word,.fbb__countico,.fbb__cta{
  transition-property:color,background,box-shadow,transform,opacity;
  transition-duration:.5s;transition-timing-function:var(--ease);
}
/* ⚠⚠ ANG `.fbb__ctaico svg` AT ANG `.fbb__at` ANG DALAWANG HULING
      DUMATING DITO (Set 7, 2026), at sila ang huling butas.
      Ipinadala ni Kylie ang litrato: ang `f` ng Facebook sa ibabaw ng
      gradient ng Instagram, at "TapeMate Philippines" na kulay-rosas.
      SINUKAT ANG BUG BAGO INAYOS — buong 260ms silang NASA opacity 1
      habang ang `data-net` (at ang buong kulay) ay pumalit na sa 0ms:
          ms  net  salita          icon        handle
           2  ig   Facebook(1)     #i-fb(1)    TapeMate Philippines(1)
         113  ig   Facebook(0.15)  #i-fb(1)    TapeMate Philippines(1)
         217  ig   Facebook(0.01)  #i-fb(1)    TapeMate Philippines(1)
         296  ig   Instagram(0.3)  #i-ig-c(1)  @tapematepro(1)
      Kumupas nang maayos ang SALITA; ang icon at ang handle ay
      nanatiling buo hanggang sa biglaang palit sa 260ms.
   ⚠ ANG `svg` LANG AT HINDI ANG BUONG `.fbb__ctaico`. Ang bilog ay
     PUTI at hindi siya pag-aari ng kahit sinong network — ang glyph
     lang sa loob ang pumapalit. Kapag pinakupas mo ang buong bilog ay
     may butas na puti sa gitna ng pindutan sa bawat paglipat.
   ⚠ ANG `.fbb__at` AT HINDI ANG `#socHandle`. Iisa lang ang laman ng
     `<p>` (ang span na iyon), kaya pareho ang nakikita — pero klase
     ang lahat ng iba sa listahang ito at hindi ID.
   ▶ ANG BUONG LISTAHAN NG PUMAPALIT KADA NETWORK, mula sa `laman()`
     ng main.js — kung magdadagdag ka ng pang-anim, DITO SIYA ISASAMA:
         #socWord      -> .fbb__blue          ✓ kumukupas
         #socAppWord   -> .fbui__word         ✓
         #socCtaTxt    -> .fbb__ctatxt        ✓
         #socCtaIco    -> .fbb__ctaico svg    ✓ (Set 7, 2026)
         #socHandle    -> .fbb__at            ✓ (Set 7, 2026)
         ang dalawang DP -> .fbui__pic img / .fbui__ppic img  ✓
         ang post      -> .fbui__post.is-swap (sariling rule)  ✓
         ang href/aria -> hindi nakikita, walang kupas na kailangan */
.fbb__blue,.fbb__ctatxt,.fbui__word,
.fbb__ctaico svg,.fbb__at{transition:opacity .26s var(--ease),color .5s var(--ease)}
/* ⚠ ANG DALAWANG DP AY PUMAPALIT DIN NANG BIGLAAN, sinukat: nananatili
   silang opacity=1 hanggang mapalitan ang `src`. Maliit sila kaysa sa
   `.fbui__full` pero nasa GITNA sila ng tingin — ang bilog sa ulo ng
   profile at ang nasa post. Kasama na sila. */
.fbui__pic img,.fbui__ppic img{transition:opacity .26s var(--ease)}

/* ⚠ WALA NA ANG `.fbui__full` SA LISTAHANG ITO. Dalawa na siya ngayon at
   ang `[data-net]` ang pumipili; kailangan niya ng sarili at mas
   mabigat na rule para hindi siya matalo. Nasa tabi mismo ng
   `.fbui__full` siya sa ibaba — sinasadyang magkatabi sila. */
.sec--social.is-swap .fbb__blue,
.sec--social.is-swap .fbb__ctatxt,
.sec--social.is-swap .fbui__word,
/* ⚠ ANG DALAWANG ITO ANG DUMATING SET 7, 2026 — tingnan ang tala sa
   itaas. Sila ang natitirang dalawang bagay na nagsusuot ng kulay ng
   BAGONG network habang LUMANG laman pa ang nakasulat sa kanila. */
.sec--social.is-swap .fbb__ctaico svg,
.sec--social.is-swap .fbb__at,
.sec--social.is-swap .fbui__pic img,
.sec--social.is-swap .fbui__ppic img{opacity:0}

/* ⚠⚠ MAY BILANG NA ANG TATLO (Ago 28, 2026). May dalawang linya
      dito noon na nagtatago sa `.fbb__count` para sa IG at sa
      TikTok, at may dahilan: WALA AKONG BILANG para sa kanila at
      ayaw kong mag-imbento — pangako sa bumabasa ang bilang ng
      follower, hindi palamuti. Ipinadala ni Kylie ang screenshot ng
      dalawang profile, kaya kinopya na: 151 (IG), 948 (TikTok).
      Nasa `NETS` ng main.js sila, at doon lang binabago.
   ⚠ MAY IISANG BILANG PA RIN DITO NA HINDI NAPAPATUNAYAN: ang 1.8K
     ng Facebook. Galing siya sa ipinadalang UI, at siya ngayon ang
     PINAKAMALAKI sa tatlo — kaya siya rin ang pinaka-halata kung
     mali. ⚠ WALA NANG `data-todo` SA MARKUP (Set 9, 2026) — natapos na
     ang link ng Facebook. WALA NA RIN ANG 1.8K MISMO simula Ago 28, 2026;
     nakasulat pa rin siya rito bilang babala kung sakaling may magbalik ng
     bilang ng follower.
   ▶ Kung ayaw ipakita ang alinman: gawing "" ang `count` niya sa
     `NETS` at kusa siyang mawawala. `visibility` pa rin at hindi
     `display`, kaya nakalaan ang puwesto niya at walang tumatalon. */
/* ⚠ TATLONG PUWESTO ANG BILANG, AT SABAY-SABAY SILANG SUMUSUNOD: ang
     linya sa kanan, at DALAWA pa sa loob ng telepono ("1.8K Followers"
     sa tabi ng pangalan at sa hilera ng thumbs-up). Madaling makalimutan
     ang huling dalawa dahil `aria-hidden` ang buong telepono at hindi mo
     sila naririnig — pero NAKIKITA sila, at ang bilang ng Facebook sa
     ilalim ng salitang "instagram" ay numerong walang pinanggalingan.
     Iisang `laman()` sa seksyon 13b ang sumusulat sa tatlo.
   ⚠ SA SEKSYON NAKAKABIT ANG `data-count-blangko` AT HINDI SA `p`.
     `.sec--social[...]` ang selector — kapag sa `#socCount` siya
     ikinabit ay hindi kailanman tatalab, at TAHIMIK ang kabiguan:
     lalabas lang ang "0 Followers". Nangyari ito Ago 28, 2026.
   ⚠ `visibility` at hindi `display`: nananatili ang puwesto ng tatlo,
     kaya walang tumatalon sa palit at hindi umuurong ang telepono. */
/* ⚠ WALA NANG BILANG NA ITATAGO (Ago 28, 2026). Tatlong linya dito
     ang nagtatago sa bilang kapag walang naibigay; wala nang bilang
     kahit saan sa seksyon, kaya wala na silang tinatago. Nasa
     _parked/social-followers.txt sila kung babalik man. */

/* ⚠ PUNO ANG BILOG KAPAG LARAWAN ANG DP, hindi logo. Ang `.fbui__pic img`
     ay 84% ang lapad at `contain` — tama iyon sa logo ng TapeMate, na
     pahaba at kailangang may puting paligid (ganoon din ang DP nila sa
     Facebook at sa Instagram: logo sa loob ng puting bilog).
     PERO ANG DP NILA SA TIKTOK AY LARAWAN — ang pulang "2026" — at
     bilog na puno mula gilid hanggang gilid. Sa 84% + `contain` ay
     lumiliit siya sa gitna ng puting bilog at parang mali ang naka-upload.
   ⚠ SA `[data-net="tt"]` NAKAKABIT AT HINDI SA LARAWAN. Kung may
     magpapalit ng DP ng ibang network papuntang larawan, ITO ANG TALA:
     idagdag ang key niya dito. */
.sec--social[data-net="tt"] .fbui__pic img,
.sec--social[data-net="tt"] .fbui__ppic img{width:100%;height:100%;object-fit:cover}

/* ⚠⚠ ANG BUONG SCREENSHOT NILA SA IBABAW NG IGINUHIT NA UI.
      Nakalatag siya sa buong screen at `cover` — at TUMPAK ANG
      SUKAT NIYA: 620x1432 = 0.433, kaparehong-kapareho ng screen
      (286x661). Kaya walang naputol at walang naunat. Nasa
      _source/social/socialcrop.js kung paano siya binuo.
   ⚠ HINDI `display:none` ANG NASA ILALIM, NATATAKPAN LANG SIYA.
     Buhay pa rin ang buong Facebook UI: kapag walang `src` ang
     larawan (Facebook) ay siya ang nakikita. Isang linya ang balikan.
   ⚠⚠ WALANG `src` SA FACEBOOK — TINATANGGAL ANG ATTRIBUTE, HINDI
      BINABLANGKO, at may malaking pagkakaiba. Ang `src=""` ay tumuturo
      sa KASALUKUYANG PAHINA: sinusubukan ng browser na i-download ang
      buong index.html BILANG LARAWAN. Ganoon siya noong una kong
      isinulat, at ang dev server ng Next ang nakahuli: "An empty
      string was passed to the src attribute. This may cause the
      browser to download the whole page again over the network."
    ⚠ KAYA MAY `:not([src])` DITO. Ang `[src=""]` lang ay HINDI tumatama
      sa larawang walang `src` kahit ano — dalawang magkaibang bagay
      sila sa CSS, at kung isa lang ang isusulat ay may basag na icon
      na lalabas sa gitna ng telepono kapag Facebook.
   ⚠ HINDI SIYA KUMUKUPAS SA `.is-swap`, AT SINASADYA. Kung kukupas
     siya ay ANG FACEBOOK UI SA ILALIM ang sisilip sa gitna ng palit —
     puting Facebook sa loob ng itim na Instagram, 260ms. Sa halip ay
     PUTOL ang ginagawa niya, at nasa EKSAKTONG SANDALI siya ng palit
     ng lahat ng iba (260ms, kalagitnaan ng kupas) kaya hindi siya
     napapansin: nasa 0 na ang opacity ng pamagat at ng pindutan doon. */
/* ⚠⚠ KUMUKUPAS NA SIYA (Set 1, 2026). Ang tala sa itaas ay
     nagsasabing hindi napapansin ang putol dahil nasa 0 na ang
     opacity ng iba sa sandaling iyon. MALI ANG HAKANG IYON, at
     sinukat ang pagkakamali: habang ang maliit na larawan sa loob
     ay malinis na dumadaan sa 1 -> 0.05 -> 1, ang larawang ITO ay
     NANANATILING opacity=1 sa buong palitan at biglang pumapalit sa
     281ms. Tinatakpan niya ang BUONG telepono — siya ang pinakamalaking
     bagay sa eksena — kaya siya mismo ang nakikita, hindi ang mga
     nakakupas sa paligid niya. "Not smooth" ang sabi ni Kylie, at
     dito iyon nanggagaling.

   ⚠ `opacity:0` AT HINDI `display:none` ANG WALANG-SRC. Hindi
     ma-transition ang `display` — kaya siya nagputol. Absolute
     siya kaya walang epekto sa layout kahit manatili siya; at ang
     img na walang src sa opacity 0 ay walang ipinipinta. */
.fbui__full{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block;z-index:6;
  pointer-events:none;opacity:0;
  /* ⚠⚠ ANG `.56s` NA ANTALA ANG BUONG PUNTO — HINTAYIN MUNA ANG PAPASOK.
     Ito ang kupas PALABAS. Naghihintay siya hanggang matapos ang
     papasok (260ms na paghihintay + 300ms na kupas = 560ms) bago siya
     magsimulang mawala — at sa sandaling iyon ay tuluyan na siyang
     natatakpan, kaya walang nakikita sa pagkawala niya.
     Kapag ginawa mo itong `0s`, BABALIK ANG BLACKSCREEN: sabay
     kumukupas ang luma at ang bago, at ang kulay ng screen ang nakikita
     sa gitna. Iyon mismo ang sinumbong ni Kylie (Set 2, 2026). */
  transition:opacity .2s var(--ease) .56s;
}

/* ⚠⚠ DALAWA SILANG NAKAPATONG AT ANG OPACITY LANG ANG PUMIPILI — WALANG
      PAGPAPALIT NG `src` (Set 2, 2026). Iisa siya noon at ang JS ang
      nagpapalit ng `src`; doon nanggaling ang lag sa pagitan ng IG at
      ng TikTok. Sila lang ang parehong may screenshot, kaya doon lang
      nangyayari ang PAGPAPALIT — at ang bawat palit ng `src` ay bagong
      decode at bagong raster ng buong layer, sa loob pa ng isang
      teleponong may `rotateY`.
      Nasukat: 187ms ang pinakamasamang frame sa isang paglipat, at 63ms
      lang kapag pinatay ang larawang ito.

    ⚠ WALANG TUMUTUGMA KAPAG FACEBOOK, at hindi iyon nalimutan: walang
      screenshot siya. Pareho silang nananatili sa 0 at ang iginuhit na
      UI sa ilalim ang nakikita — kapareho ng dating ugali ng walang
      `src`, wala lang nang basag na larawan. */
/* ⚠⚠ `z-index:7` — ANG PAPASOK ANG UMAAKYAT SA IBABAW, AT DITO
      NAKASALALAY NA WALANG BUTAS. Hindi sapat ang pagkakasunod sa
      markup: nasa ibaba ang Instagram at nasa itaas ang TikTok, kaya sa
      ig→tt ay kusang nasa ibabaw ang papasok — pero sa tt→ig ay NASA
      ILALIM siya, at kailangan sanang mawala muna ang TikTok bago siya
      makita. Doon lilitaw ang blangko.
      Sa `z-index` ay ang NAPILI ang laging nasa ibabaw, kahit alin siya
      sa dalawa. Discrete siya at hindi kumukupas, kaya sumasapit siya
      agad sa 0ms — bago pa magsimula ang anumang kupas.

    ⚠ ANG `.26s` NA ANTALA: doon pumapalit ng laman ang `laman()` sa
      main.js (ang `setTimeout` ng kupas). Bago niyon ay nakakupas pa ang
      pamagat at ang pindutan; kung mauuna ang telepono ay magiging
      dalawang magkahiwalay na galaw ang isang palit.
      ▶ Kapag ginalaw ang 260 doon, ITO ANG KATABING NUMERO — pati ang
        `.56s` sa itaas (260 + 300). */
.sec--social[data-net="ig"] .fbui__full[data-net="ig"],
.sec--social[data-net="tt"] .fbui__full[data-net="tt"]{
  opacity:1;z-index:7;
  transition:opacity .3s var(--ease) .26s;
}

/* ⚠⚠ WALA NA ANG `.is-swap` DITO, AT SINASADYA. Ganito siya noon:
       `.sec--social.is-swap .fbui__full[data-net]{opacity:0}`
   — pinapatay ang DALAWANG larawan nang sabay sa gitna ng palit. Iyon
   ang BLACKSCREEN: ~300ms na walang laman ang telepono, at ang kulay ng
   screen ang nakikita. Hindi na kailangan ng kupas dito — ang `z-index`
   at ang dalawang antala sa itaas ang gumagawa ng krosfeyd, at LAGING
   may nakapatong. */


/* ⚠⚠ ANG IGINUHIT NA FACEBOOK UI — SA FACEBOOK LANG SIYA NAKIKITA.
      Ito ang inayos Set 2, 2026, at ganito ang bug: asul na "instagram"
      sa font ng Facebook, sa ibabaw ng cover photo ng Facebook, habang
      nasa Instagram na ang seksyon. Ipinadala ni Kylie ang litrato.

      ANG UGAT: ANIM NA MAGKAKAPATID ang UI na ito at hindi iisang balot
      (`.fbui__bar`, `.fbui__cover`, `.fbui__id`, `.fbui__acts`,
      `.fbui__tabs`, `.fbui__post`). Kahit kailan ay walang nagsasabi sa
      kanila na hindi sila Facebook ngayon — ang screenshot na nakapatong
      sa kanila ang nagtatakip, at iyon lang. Kaya sa bawat sandaling
      bumababa sa 1 ang opacity ng screenshot — ang 260ms na kupas ng
      bawat paglipat — ay sumisilip sila.

      At ang `.fbui__word` sa loob nila ay pumapalit sa 260ms samantalang
      ang `data-net` ay pumapalit sa 0ms. Iyon ang bintanang nakikita mo
      ang MALING salita sa MALING UI.

    ⚠ NAKASULAT NA ITO NOON AT NAWALA. Ganito ang orihinal na tala sa
      `.fbui__full`: "HINDI SIYA KUMUKUPAS SA `.is-swap`, AT SINASADYA.
      Kung kukupas siya ay ANG FACEBOOK UI SA ILALIM ang sisilip sa gitna
      ng palit." Pinakupas siya noong Set 1, 2026 dahil "not smooth" —
      at ibinalik niyon ang sinisilip. Dalawang hiling na magkasalungat:
      ang ayos ay hindi pumili kundi ITAGO ANG UI MISMO.

    ⚠⚠ ANG `.26s` NA ANTALA ANG BUONG PUNTO SA PAGBALIK. Kapag walang
       antala ay lilitaw ang UI sa 0ms habang "instagram" pa rin ang
       nakasulat sa loob niya — kaparehong bug, baligtad lang. Sa 260ms
       ay katatapos lang palitan ng `laman()` ang salita.
       ▶ Kapag ginalaw ang 260 sa main.js (ang `setTimeout` ng kupas),
         ITO ANG KATABING NUMERO.

     ⚠ ITIM ANG SCREEN KAPAG IG O TIKTOK. Sa sandaling walang laman ang
       telepono — kupas palabas, bago pa pumasok ang bago — ang
       kulay ng screen ang nakikita. `#fff` siya dahil Facebook ang
       pinagmulan; sa isang itim na Instagram ay PUTING KISLAP iyon sa
       gitna ng palit. Itim ngayon, at parehong itim ang dalawang app. */
/* ⚠ `.56s` DIN ANG ANTALA NG PAGKAWALA NIYA, kaparehong dahilan ng
   larawan sa itaas: hinihintay muna niyang tuluyang matakpan ng papasok
   na screenshot bago siya mawala. Sa `0s` ay may ~60ms na siwang sa
   fb→ig — nauubos siya bago pa dumating ang papalit. */
.fbph__screen > *:not(.fbui__full){transition:opacity .2s var(--ease) .56s}
.sec--social:not([data-net="fb"]) .fbph__screen > *:not(.fbui__full){opacity:0}
.sec--social[data-net="fb"] .fbph__screen > *:not(.fbui__full){
  transition:opacity .24s var(--ease) .26s;
}
/* ⚠⚠ ANG `.76s` NA ANTALA ANG BUONG PUNTO, AT SUKAT ANG PINAGMULAN.
      Ipinadala ni Kylie ang litrato Set 7, 2026: ITIM NA GUHIT sa loob
      ng telepono sa gitna ng paglipat — isa sa ilalim ng cover at isa
      sa ulo ng post. Ganito ang sinukat sa fb→ig noon:
           ms   likod ng screen   mock   larawan ng IG
            1   #000              1.00   0.00   <- itim na ang likod
          253   #000              1.00   0.00      pero buo pa ang
          312   #000              1.00   0.51      PUTING mock sa itaas
          590   #000              0.73   1.00
      Sa 0ms pumapalit ang likod kasabay ng `data-net`, samantalang
      ang iginuhit na Facebook UI ay nananatili hanggang ~560ms.

   ⚠⚠ ANG UGAT: HINDI BUO ANG MOCK — ANIM NA MAGKAKAPATID SIYA NA MAY
      PUWANG SA PAGITAN (`.fbui__bar`, `.fbui__cover`, `.fbui__id`,
      `.fbui__acts`, `.fbui__tabs`, `.fbui__post`). Ang puti nila ay
      galing sa `background` ng `.fbph__screen` at hindi sa kanila —
      kaya nang maging itim iyon ay UMITIM ANG BAWAT PUWANG habang
      nakikita pa ang mock.

   ⚠ MALI ANG LUMANG PAGSUKAT KO NG "walang butas" (Set 2, 2026) AT
     ITO ANG PAGKAKAMALI: itinuring kong BUO ang mock nang kinuwenta
     ko ang takip ng screen — `opacity` lang niya ang tiningnan ko.
     Buo nga ang pagkakatakip sa gilid, pero may butas siya SA GITNA,
     at doon mismo lumitaw ang itim. Kapag sinusukat mo ang takip ng
     teleponong ito, HUWAG IPAGPALAGAY NA SOLIDO ANG MOCK.

   ⚠ `0s` NA TAGAL AT ANTALA LANG — putol siya at hindi kupas. Walang
     abo sa gitna ng puti at itim; sa 760ms ay tapos nang tuluyan ang
     mock (560 + 200) at matagal nang nakatakip ang screenshot mula
     ~380ms, kaya walang nakakakita ng mismong putol.
   ▶ Kapag ginalaw mo ang `.56s` ng kupas palabas sa itaas, ITO ANG
     KATABING NUMERO: antala + tagal ng kupas.

   ⚠ WALANG ANTALA ANG PAGBALIK SA PUTI, at sinasadya. Nasa base rule
     ng `.fbph__screen` siya (`transition:background-color 0s`), kaya
     sa 0ms na siya pumuputi pabalik sa Facebook — kailangan iyon,
     dahil bumabalik ang mock sa 260ms at PUTI ang kailangan niya sa
     likod pagdating niya. Sa sandaling iyon ay nakatakip pa rin ang
     screenshot, kaya walang nakikita sa pagputi. */
.sec--social[data-net="ig"] .fbph__screen,
.sec--social[data-net="tt"] .fbph__screen{
  background:#000;
  transition:background-color 0s var(--ease) .76s;
}


.fbb__lead{
  margin-top:clamp(11px,1.5vh,19px);max-width:32ch;
  font-size:clamp(14.5px,1.35vw,19.5px);line-height:1.45;color:rgba(2,19,52,.62);
}

/* ---- THE BUTTON ----
   ⚠ THE PAGE'S `.btn` WAS NOT USED. `.btn` is navy or red and has a shape
     of its own; this is a FACEBOOK button — Facebook blue, rounded, with
     an "f" inside a white circle. Force `.btn` on it and two languages
     meet in a single button. */
.fbb__cta{
  position:relative;overflow:hidden;
  display:inline-flex;align-items:center;gap:clamp(11px,1.15vw,17px);
  margin-top:clamp(18px,2.6vh,30px);
  padding:clamp(13px,1.5vh,19px) clamp(18px,2vw,29px);
  border-radius:clamp(12px,1.2vw,17px);text-decoration:none;
  background:linear-gradient(180deg,var(--fb) 0%,var(--fb-deep) 100%);
  color:#fff;font-family:var(--display);font-weight:800;
  font-size:clamp(15px,1.46vw,22px);letter-spacing:-.01em;
  box-shadow:0 18px 34px -18px rgba(var(--fb-rgb),.75), 0 3px 8px -4px rgba(2,19,52,.3);
  transition:transform .42s var(--back),box-shadow .42s var(--ease);
}
.fbb__ctaico{
  flex:none;display:grid;place-items:center;
  width:clamp(28px,2.65vw,39px);height:clamp(28px,2.65vw,39px);
  border-radius:50%;background:#fff;color:var(--fb);
  transition:transform .5s var(--back);
}
.fbb__ctaico svg{width:64%;height:64%}
.fbb__ctatxt{white-space:nowrap;margin-right:clamp(2px,.5vw,8px)}
/* ⚠ THERE IS NO LONGER A CIRCLE BEHIND THE ARROW (Aug 17, 2026). It used
   to have a pale circle; in the supplied UI THE STROKE ALONE is there.
   A small thing, but the circle reads as a SECOND BUTTON inside the
   button — and there is nothing second to press there. */
.fbb__ctaarrow{
  flex:none;display:grid;place-items:center;
  width:clamp(16px,1.28vw,20px);height:clamp(16px,1.28vw,20px);
  transition:transform .45s var(--back);
}
.fbb__ctaarrow .ico{width:100%;height:100%;stroke-width:2.6}
@media (hover:hover){ .fbb__cta:hover{
  transform:translateY(-3px);
  box-shadow:0 26px 44px -18px rgba(var(--fb-rgb),.85), 0 4px 10px -4px rgba(2,19,52,.34);
} .fbb__cta:hover .fbb__ctaico{transform:rotate(-8deg) scale(1.08)} .fbb__cta:hover .fbb__ctaarrow{transform:translateX(4px)} }
.fbb__cta:active{transform:translateY(-1px) scale(.985)}
.fbb__cta:focus-visible{outline:3px solid var(--navy);outline-offset:3px}
/* ⚠ THE SHINE IS A `transform` AND NOT `background-position`.
   `background-position` is a repaint every frame across the full width of
   the button; a slanted box gliding across is compositor only. */
.fbb__shine{
  position:absolute;top:-60%;left:-40%;width:34%;height:220%;
  background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.42),rgba(255,255,255,0));
  transform:translateX(-160%) rotate(18deg);pointer-events:none;
}
@media (hover:hover){ .fbb__cta:hover .fbb__shine{animation:fbShine .85s var(--ease)} }
@keyframes fbShine{ to{transform:translateX(560%) rotate(18deg)} }

/* ⚠⚠ ANG HANDLE, KAPALIT NG BILANG (Ago 28, 2026). Nandito dati ang
      "151 Followers" na may bilog na icon. Tinanggal ang bilang sa
      utos ni Kylie, at tama siya: ang bilang ay pangakong lumilipas,
      at napatunayan mismo ngayong araw — 948 sa umaga, 947 sa hapon.
   ⚠ KAPAREHONG `margin-top` NG DATING LINYA, at sinasadya: hindi
     dapat tumalon ang tatlong chip sa ilalim niya kumpara sa dati.
   ⚠ SUMUSUNOD SIYA SA `--fb`, kaya asul siya sa Facebook, rosas sa
     Instagram at itim sa TikTok — kasabay ng lahat sa seksyon.
   ⚠ WALANG ICON, KAHIT MAY BILOG NOON: tatlong marka ng network ang
     nasa chip sa ilalim mismo nito, at isa pa sa loob ng pindutan sa
     itaas. Ang ikaapat ay ingay. */
.fbb__at{
  margin-top:clamp(15px,2.2vh,25px);
  font-size:clamp(14px,1.2vw,17px);font-weight:700;
  letter-spacing:-.01em;color:var(--fb);
}
/* ⚠ `tabular-nums` AND A `min-width` — the number counts up from 0, and
   when each digit is a different width the word "Followers" beside it
   JIGGLES while the count runs. */
.fbb__num{
  font-family:var(--display);font-weight:900;color:var(--navy-deep);
  font-variant-numeric:tabular-nums;display:inline-block;min-width:2.9ch;
}

.fbb__chips{
  list-style:none;display:flex;flex-wrap:wrap;gap:clamp(9px,.95vw,13px);
  margin-top:clamp(18px,2.7vh,32px);
}
/* ⚠ THE CHIP IS A ROUNDED SQUARE, NOT A PILL. It used to be `99px`.
   In the supplied UI they still have corners — the same radius as the
   large button above, so the three chips and the button are one family.
   The pill is another language: that is the tag in #products, and the
   two have nothing to do with each other. */
.fbb__chip{
  display:inline-flex;align-items:center;gap:clamp(7px,.65vw,9.5px);
  padding:clamp(10px,1.05vw,15px) clamp(14px,1.38vw,20px);
  border-radius:clamp(10px,.9vw,13px);
  background:#fff;border:1.5px solid rgba(31,66,128,.14);
  box-shadow:0 12px 24px -18px rgba(2,19,52,.55);
  font-size:clamp(13px,1.13vw,16.2px);font-weight:600;color:var(--navy);
  transition:transform .42s var(--back),box-shadow .4s var(--ease),border-color .3s ease;
}
.fbb__chip .ico{width:clamp(16px,1.2vw,18px);height:clamp(16px,1.2vw,18px);flex:none}
/* Each icon has its own colour — red for promo, navy for update, blue
   for tip: the page's three colours in one row. */
/* ⚠ KULAY NG NETWORK NA HAWAK NILA, hindi na ang tatlong kulay ng
   pahina. Nakasabit sila sa `--n-*` at hindi sa `--fb`: hindi sila
   dapat magpalit ng kulay kapag lumipat ang seksyon — sila ang
   PAMPILI, at ang pampili ay hindi umaayon sa napili. */
.fbb__chips li:nth-child(1) .ico{color:var(--n-fb)}
.fbb__chips li:nth-child(2) .ico{color:var(--n-ig)}
.fbb__chips li:nth-child(3) .ico{color:var(--n-tt)}
@media (hover:hover){ .fbb__chips li:hover .fbb__chip{
  transform:translateY(-4px);border-color:rgba(31,66,128,.3);
  box-shadow:0 20px 32px -18px rgba(2,19,52,.6);
} }

/* =========================== THE LEFT =========================== */
/* ⚠ THE PHONE IS `absolute` INSIDE THIS AND NOT A `grid` CHILD. Two things
   depend on that: (1) the cut-off at the bottom — as a grid child ITS
   height would be the height of the row and there would be nothing left
   to cut; (2) the four reactions — they are positioned by `--w` and
   `--ph`, so they need to look at the SAME box the phone is looking at. */
.fbb__stage{position:relative;align-self:stretch;isolation:isolate}

/* ---- THE PHONE ----
   ⚠ THE `perspective` IS ON THE STAGE AND NOT ON THE PHONE. With
     `perspective` on the rotating element itself, the vanishing point is
     in the MIDDLE OF THE PHONE — the rotation reads flat. On the parent
     the whole scene looks at one point, so there is depth. */
.fbb__stage{perspective:1500px;perspective-origin:46% 30%}
/* ⚠ THE PHONE HAS TWO TILTS AND THEY DO DIFFERENT JOBS.
   `rotate(5.2deg)` is the TILT ON THE BOARD — that is what is in the
   supplied UI, and it is fixed: it does not move wherever the mouse
   goes. `rotateY/rotateX` is the TURN within space — that is what
   follows the mouse. With a single number holding both, the design's
   tilt disappears at the first movement of the hand. */
/* ⚠ `44%` AND NOT `50%`. In the supplied UI the phone is not centred in
   its column — it juts out to the left, closer to the edge of the scene.
   That is what gives the air between it and the copy on the right. The
   page's `.wrap` (1180px) is the remaining difference from the mockup:
   the scene is wider there, but the 1180 is what lines this eyebrow up
   with every other section's eyebrow above and below.
   That alignment matters more than the 80px. */
/* ⚠ `top:0` — THE SECTION'S `padding-top` IS THE AIR ABOVE IT, AND DO NOT
   REDUCE IT. I tried pulling this up by 42px to match the mockup; what I
   had forgotten was the TILT: at a 6° rotation the LEFT CORNER of the
   ever-widening phone rises — a further 25px above the edge of the box.
   So the corner ends up stuck to the top of the section and looks
   pinched. The air above it in the mockup (5% of the height of the
   scene) is exactly what the padding already gives. */
.fbph{
  position:absolute;top:0;left:var(--cx);margin-left:calc(var(--w) / -2);
  width:var(--w);
  aspect-ratio:1179/2556;              /* the true shape of an iPhone screen */
  border-radius:clamp(30px,3.6vw,58px);
  /* ⚠ THE PADDING IS NOT EVEN: THE LEFT IS THICKER (Aug 18, 2026).
     This is not decoration — this is the PHYSICS. The phone is turned, so
     its left flank faces the eye: we see more metal there than on the
     right, which is turning away. With even padding the metal is equal on
     both sides — and that is where the whole illusion dies, because
     nothing in the world stays symmetrical while turned. This is the
     wide silver band in the supplied photograph. */
  padding:clamp(7px,.8vw,13px) clamp(6px,.66vw,11px) clamp(8px,.9vw,15px) clamp(11px,1.3vw,21px);
  /* ⚠ THE FRAME IS SILVER, NOT DARK (corrected Aug 18, 2026 — for the
     second time). I made it dark titanium because in the small mockup the
     frame looks dark against the white ground. In the close-up photograph
     it is unmistakable: it is POLISHED SILVER — an almost white
     highlight on the flank, a grey shadow underneath, real reflective
     metal. The old "it disappears against the white ground" has an answer
     that is not darkening: the BLACK EDGE inside it (`.fbph__body`) is
     what separates the silver from the white screen, and that is what
     draws the shape of the phone. A real iPhone is the same: silver
     metal, black bezel, then the display.
     ⚠ There are seven stops and the light SWINGS DELIBERATELY —
       bright/dark/bright. That is what polished metal is; a single flat
       gradient is plastic. This is the opposite of the Aug 18 note about
       the "stroke" — that was true of a DARK frame; on silver the swing
       itself is the shine. */
  background:linear-gradient(118deg,
    #B6BEC9 0%, #F3F6FA 9%, #98A1AD 22%, #E9EDF3 38%,
    #8F98A5 56%, #DFE5EC 74%, #A2AAB6 88%, #CBD2DB 100%);
  box-shadow:
    0 62px 88px -46px rgba(2,19,52,.44),
    0 24px 42px -26px rgba(31,66,128,.34),
    inset 0 0 0 1.2px rgba(255,255,255,.75);
  /* ⚠ THREE ROTATIONS, AND THE THIRD WAS THE ONE MISSING.
     `rotate(4.5deg)` — THE TILT ON THE BOARD. It is fixed: it does not
       move wherever the mouse goes. It was 6°; in the close-up photograph
       it is less, about 4–5° — "slightly naka slant".
     `rotateY(9deg)` — THE TURN. It brings the LEFT flank toward the eye:
       the metal widens there (that is the side of the phone you see), the
       right shortens, and the three buttons jut out.
     `rotateX(4.5deg)` — THE OPENING DOWNWARD, and this is the real secret
       of the pose in the photograph. The TOP of the phone is FURTHER from
       the eye and the BOTTOM is nearer, so it widens downward — the
       silhouette is not a rectangle but a slight trapezoid. That is what
       gives the feeling that it OCCUPIES a place in space rather than
       being stuck to a board. With `rotateY` alone it is still standing
       flat, merely turned to the right.

     ⚠ ONE MEASUREMENT SAID SO: the TOP of the phone in the photograph is
       252px wide, and the lower part is past 375px. Neither `rotate` nor
       `rotateY` can do that — only `rotateX`.
     ⚠ THE `perspective` (on the stage) IS WHAT DICTATES HOW STRONG all
       three are: 2400px is nearly flat, 1500px already has depth. The
       rotation states the ANGLE; the perspective states how close the eye
       is. They are different and both are needed.
     `--px`/`--py` are written by the JS (section 13b of main.js). */
  transform:
    rotate(4.5deg)
    rotateY(calc(9deg + var(--px,0) * 5deg))
    rotateX(calc(4.5deg + var(--py,0) * -3.5deg))
    translateZ(0);
  transition:transform .9s cubic-bezier(.2,.7,.2,1);
  transform-style:preserve-3d;
}
/* ---- ⚠ THE THICKNESS OF THE PHONE. THIS IS THE WHOLE 3D. ----
   My phone used to be a single PLANE — flat paper rotated in space. So
   even with the three angles right it still did not look like an OBJECT:
   rotated paper stays paper, with no flank, no thickness, no visible
   edge. That was the "hindi nakuha ang concept" — it was not the angle
   that was missing, it was the BODY.

   This is the BACK of the phone, pushed backward by 7% of its width (a
   negative `translateZ`). Because it is turned to the left toward the
   eye, the back PEEKS OUT along the left edge of the front — and that is
   exactly the flank you see on a real phone. One element, one
   `translateZ`, and it has a body.

   ⚠ THIS ONLY LIVES BECAUSE OF `.fbph`'s `transform-style:preserve-3d`.
     Without it the whole 3D is flattened back into one flat picture and
     the back hides exactly behind the front — the thickness disappears
     and `translateZ` looks like it did nothing. */
.fbph::before{
  content:"";position:absolute;inset:0;border-radius:inherit;
  background:linear-gradient(100deg,#9AA3B0 0%,#5C6674 34%,#39424F 68%,#242D3A 100%);
  transform:translateZ(calc(var(--w) * -.07));
}

/* ---- THE FOUR SIDE BUTTONS ----
   ⚠ THEY ARE ON THE FLANK OF THE BODY, SO THEY HAVE A `translateZ` TOO.
     They used to rely on `z-index` alone — and `z-index` means nothing in
     3D space: they stayed glued to the front face, as if painted on. Half
     the thickness is what pushes them back, so they are at the SIDE of
     the phone and not on its face. */
.fbph__key{
  position:absolute;width:clamp(3px,.34vw,5px);border-radius:2px;
  background:linear-gradient(180deg,#D6DBE2,#8E97A4 45%,#4C5665);
  transform:translateZ(calc(var(--w) * -.022));
}
.fbph__key--mute{left:-.35%;top:15.5%;height:3.4%}
.fbph__key--up  {left:-.35%;top:21%;height:6.4%}
.fbph__key--down{left:-.35%;top:29%;height:6.4%}
.fbph__key--power{right:-.35%;top:24%;height:9%}
/* ⚠ THE BLACK EDGE BETWEEN THE SILVER AND THE SCREEN. This is a
   `box-shadow` and not a `border`: a border eats INTO the box, so the
   screen shrinks and every measurement inside it changes (they are all
   `em`, measured against the width). The box-shadow grows OUTWARD, into
   the frame's padding — nothing is eaten, and it follows the rounded
   corner. This is a real phone's bezel, and it is what separates the pale
   metal from the white screen. */
.fbph__body{
  position:relative;height:100%;border-radius:inherit;overflow:hidden;
  background:#fff;
  box-shadow:0 0 0 clamp(2px,.24vw,4px) #0C0F14;
}
/* the island at the top, and the lens inside it */
.fbph__island{
  position:absolute;z-index:3;top:clamp(7px,.95vw,15px);left:50%;transform:translateX(-50%);
  width:30%;height:clamp(15px,1.85vw,30px);border-radius:99px;background:#0B0D10;
  display:flex;align-items:center;justify-content:flex-end;padding-right:9%;
}
.fbph__cam{
  width:27%;aspect-ratio:1;border-radius:50%;
  background:radial-gradient(circle at 34% 30%,#3E5673 0%,#16202F 58%,#0B0D10 100%);
  box-shadow:inset 0 0 0 .5px rgba(255,255,255,.14);
}
/* ⚠ THE SHEEN SITS OUTSIDE `overflow:hidden`, so it passes across the
   frame's rounded corner and not only the screen — the whole front of the
   phone is glass, not just the display.
   ⚠ IT IS NEARLY GONE (Aug 18, 2026). It used to be at `.5` strength at
     the top left with a `screen` blend — that was a white wash over the
     cover and over "TAPEMATE PH", which made the white paper slightly
     grey in that corner. THE SCREEN IS CLEAN IN THE MOCKUP: no light
     passes across its face. What is left is just enough for the eye to
     know the front is glass, and it no longer reaches the lettering. */
.fbph__glare{
  position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(128deg,rgba(255,255,255,.16) 0%,rgba(255,255,255,0) 22%,rgba(255,255,255,0) 74%,rgba(255,255,255,.08) 100%);
  mix-blend-mode:screen;
}
/* ⚠ THE SCREEN IS A DOWNWARD ROW (`flex`), AND THE POST IMAGE IS WHAT
   STRETCHES (Aug 17, 2026). In a text flow only the image's
   `aspect-ratio` says how tall it is — and when the content is shorter
   than the screen (which happens on a tablet, and happens too when the
   image never arrives) the rest of the bottom of the phone is EMPTY
   WHITE. A screenshot of a real phone is not like that: there is no white
   air at the end. The image now reaches the bottom; when the content
   overflows instead it is cut off at the bottom — which is also right,
   that is what a real screen does. */
.fbph__screen{
  position:relative;   /* ⚠ para sa `.fbui__full` na nakapatong */
  height:100%;overflow:hidden;
  display:flex;flex-direction:column;
  background:#fff;color:#050505;
  /* ⚠ ANG PAGBALIK SA PUTI AY WALANG ANTALA, at ang pag-itim ay may
     `.76s` (nasa rule ng ig/tt, hanapin ang `background:#000`). Doon
     nakasulat ang buong dahilan. Huwag mong tatanggalin ang linyang
     ito: siya ang `transition` na binabago ng rule na iyon, at kung
     wala siya ay biglaan ulit ang pag-itim at babalik ang itim na
     guhit sa gitna ng paglipat. */
  transition:background-color 0s var(--ease) 0s;
  /* ⚠ THIS IS THE SCALE OF THE WHOLE UI, and it is measured against the
     WIDTH OF THE PHONE and not the window. `/26` was what was wanted: any
     smaller and the content does not reach the bottom of the screen and
     there is a large empty white; any larger and the page name is already
     cut off. At 26 the content fills and the LAST POST is what gets cut
     at the bottom — which is exactly what a real phone screenshot looks
     like. */
  font-size:calc(var(--w) / 26);
  line-height:1.35;
}

/* ⚠ NOTHING IS SQUEEZED IN THE SCREEN'S ROW. Every child is
   `flex-shrink:1` by default, and the content is TALLER than the screen
   (deliberately — cut off at the bottom like a real screenshot). So
   squeezing is flex's automatic answer — and the first to give is the
   cover, because it is the one with a `min-height`: it falls back to
   12.6em and the cut-off "ORDER NOW" that was only just fixed reappears.
   This is where that ends. */
.fbph__screen > *{flex:0 0 auto}

/* ⚠ EVERY MEASUREMENT INSIDE THE SCREEN IS `em` AND NOT `px`. One number
   alone (`font-size` of `.fbph__screen`) is measured, and the whole
   Facebook UI follows — so it looks the same on a 318px and on a 228px
   phone. As `px` they would be 40+ numbers to fix one by one in every
   media query. */
.fbui__bar{
  display:flex;align-items:center;gap:.8em;
  padding:2.4em 1.15em .7em;
}
.fbui__back{flex:none;color:#050505;transform:rotate(180deg)}
.fbui__back .ico{width:1.5em;height:1.5em}
/* ⚠ `var(--fb)` AT HINDI NAKASULAT NA #0866FF. Siya ang salitang
   "facebook"/"instagram"/"tiktok" sa itaas ng screen — kasama siya sa
   palit ng network, hindi siya palamuting asul. */
.fbui__word{
  flex:1;font-family:var(--display);font-weight:800;
  font-size:1.55em;letter-spacing:-.05em;color:var(--fb);
}
.fbui__tools{display:flex;gap:.55em}
.fbui__tool{
  display:grid;place-items:center;width:2.5em;height:2.5em;border-radius:50%;
  background:#EBEDF0;color:#050505;
}
.fbui__tool .ico{width:1.35em;height:1.35em}

/* ---- THE COVER ----
   ⚠ NAVY IS THE GROUND AND WHITE IS THE PAPER ON TOP, NOT THE REVERSE.
     It used to be all navy with a white tear on two sides — the reverse
     of the supplied UI, and this is not only a question of colour: the
     TEXT is what is affected. On a navy ground every letter is white, so
     TapeMate's navy·red mark disappears inside their own cover. On white
     paper the name is navy again and "ORDER NOW" is RED — the company's
     two colours, as on their real cover.
   ⚠ `min-height` AND NOT `height`: there were only four pixels of space
     left inside when it was measured at `12.6em`, and the first thing cut
     off at any other type size was the "ORDER NOW". This is a floor now,
     not a ceiling — the band grows when the content runs short. */
.fbui__cover{
  position:relative;min-height:13.2em;overflow:hidden;padding:.62em 0;
  background:linear-gradient(160deg,#22488C 0%,#1F4280 44%,#16305F 100%);
}
/* ⚠ ONE `clip-path` MAKES BOTH TEARS, NOT TWO PSEUDOS. The old pair of
   boxes sat ON TOP of the content with their own `top`/`bottom` — every
   time the height of the band changed they had to be chased. The polygon
   is on the PAPER itself: however tall the paper, both its edges are
   always torn. */
.fbui__paper{
  position:relative;display:flex;align-items:center;gap:.5em;
  min-height:100%;padding:1.15em .9em;background:#FDFDFF;
  /* ⚠ THE TEETH ARE NOT EVEN, AND THAT IS DELIBERATE. The first version
     was precisely regular (8%, 17%, 26%…) and what came out was SAW
     TEETH — that is a machine, not a tear. A real tear has long ones and
     short ones. The gaps and the depths vary here. */
  clip-path:polygon(
    0 5%,7% 1%,13% 6%,24% 2%,31% 7%,41% 1%,52% 6%,59% 2%,69% 7%,78% 2%,86% 6%,94% 1%,100% 5%,
    100% 95%,93% 99%,85% 94%,77% 99%,66% 95%,57% 100%,47% 95%,38% 99%,28% 94%,19% 99%,9% 95%,0 99%);
}
/* The blurred boxes behind the paper — they are in their cover art, and
   here they are `border` only: no image, no node with content in it.
   ⚠ THEY ARE AT THE EDGE AND NOT IN THE MIDDLE. They used to be behind
     the name and stopped being TEXTURE and became a LINE crossing
     "TAPEMATE PH" — a box laid across the company's name. */
.fbui__ghost{position:absolute;border:.28em solid rgba(31,66,128,.05);border-radius:.2em}
.fbui__ghost--1{right:3%;top:12%;width:20%;height:44%}
.fbui__ghost--2{left:3%;bottom:7%;width:15%;height:30%}
/* ⚠ THOSE TWO ONLY, NOT `.fbui__paper > *`. Such a rule would catch the
   two ghosts as well — they would then be `position:relative`, and
   `relative` inside a `flex` is A CHILD WITH WIDTH: they eat the text
   column and half the address disappears. The two real children are
   named instead. */
.fbui__art,.fbui__covertxt{position:relative;z-index:1}
.fbui__art{flex:0 0 34%;display:grid;place-items:center}
.fbui__art svg{width:100%;height:auto}
.fbui__covertxt{
  flex:1;min-width:0;
  display:flex;flex-direction:column;align-items:center;text-align:center;color:var(--navy);
}
.fbui__covertxt b{font-family:var(--display);font-weight:800;font-size:1.34em;letter-spacing:-.01em;white-space:nowrap}
.fbui__covertxt em{font-style:normal;font-weight:600;font-size:.82em;margin-top:.2em;line-height:1.22}
/* ⚠ THE ADDRESS HAS A `max-width` SO IT BREAKS WELL. At full width the
   first line is "…Pajo Meycauayan," and the second is just "Bulacan" —
   one word left underneath. At 82% it splits into "Warehouse 7, 001
   National Road," and "Pajo Meycauayan, Bulacan", two lines of nearly
   equal measure, as supplied. */
.fbui__covertxt s{
  display:flex;align-items:flex-start;gap:.24em;justify-content:center;
  max-width:82%;
  text-decoration:none;font-size:.62em;margin-top:.5em;opacity:.78;line-height:1.3;
}
.fbui__covertxt s .ico{width:.95em;height:.95em;flex:none;margin-top:.12em}
/* ⚠ `<u>` AND NOT `<a>`/`<button>` — this is text inside a PICTURE of the
   client's cover, not a button of our page. No `cursor`, no hover, no
   `href`: it should not invite being pressed. */
.fbui__covertxt u{
  text-decoration:none;margin-top:.55em;padding:.34em 1.15em;border-radius:.3em;
  background:#D90429;color:#fff;font-weight:700;font-size:.72em;letter-spacing:.03em;
}

/* ---- IDENTITY ----
   ⚠ THIS IS A ROW NOW AND NOT A COLUMN: circle on the left, name beside
     it. See the note in index.html for why it is no longer centred. */
/* ⚠ `position:relative` HERE, OR THE COVER SITS ON TOP. The cover is
   `relative` (it needs that for the torn edge), and anything WITH a
   `position` is always painted above anything WITHOUT one — even when the
   one without comes later in the markup. That is why the top of the logo
   hid behind the cover's navy rule: it was on top, just on the WRONG SIDE. */
.fbui__id{display:flex;align-items:flex-end;gap:.9em;padding:0 1.15em;position:relative;z-index:2}
/* ⚠ `align-self:flex-start` TOGETHER WITH THE NEGATIVE `margin-top`, AND
   NEITHER IS ANY USE WITHOUT THE OTHER. Under the row's
   `align-items:flex-end` the negative margin merely PULLS the circle into
   the height of the row — it is pushed back down to the alignment, so
   nothing happens to the eye: the circle stays glued under the cover
   instead of sitting on top of it. `flex-start` is what allows it to
   rise; the text beside it is still on `flex-end`. */
.fbui__pic{
  flex:none;align-self:flex-start;margin-top:-3.4em;width:7.5em;height:7.5em;border-radius:50%;
  background:#fff;box-shadow:0 0 0 .3em #fff, 0 .3em .8em rgba(2,19,52,.22);
  display:grid;place-items:center;overflow:hidden;
}
.fbui__pic img{width:84%;height:auto;object-fit:contain}
.fbui__idtxt{min-width:0;padding-bottom:.35em}
.fbui__name{display:block;font-family:var(--display);font-weight:800;font-size:1.28em;letter-spacing:-.025em;color:#050505;line-height:1.15;white-space:nowrap}
.fbui__meta{display:block;margin-top:.15em;font-size:.98em;color:#65676B}

.fbui__acts{display:flex;gap:.5em;padding:.9em 1.2em 0}
.fbui__btn{
  flex:1;display:flex;align-items:center;justify-content:center;gap:.4em;
  height:2.9em;border-radius:.6em;background:#E4E6EB;color:#050505;
  font-weight:700;font-size:1em;
}
.fbui__btn .ico{width:1.3em;height:1.3em}
.fbui__btn--pri{background:#0866FF;color:#fff}
.fbui__btn--more{flex:0 0 3.2em;gap:.28em}
.fbui__btn--more i{width:.36em;height:.36em;border-radius:50%;background:#050505}

.fbui__likes{
  display:flex;align-items:center;gap:.55em;
  padding:1em 1.2em .9em;font-size:1em;color:#050505;
}
.fbui__thumb{
  flex:none;display:grid;place-items:center;width:1.9em;height:1.9em;border-radius:50%;
  background:#0866FF;color:#fff;
}
.fbui__thumb svg{width:1.05em;height:1.05em}

.fbui__tabs{
  display:flex;gap:1.15em;padding:0 1.2em;
  border-bottom:.1em solid #E4E6EB;font-size:1em;color:#65676B;font-weight:600;
}
.fbui__tabs span{padding-bottom:.75em;position:relative;white-space:nowrap}
/* The "More" has a downward chevron in the supplied UI — `#i-chev-r`
   rotated, no new symbol for a single triangle. */
.fbui__more{display:flex;align-items:center;gap:.25em}
.fbui__more .ico{width:.85em;height:.85em;transform:rotate(90deg)}
.fbui__tabs .is-on{color:#0866FF}
.fbui__tabs .is-on::after{
  content:"";position:absolute;left:0;right:0;bottom:-.1em;height:.24em;
  border-radius:.2em;background:#0866FF;
}

/* `flex:1 0 auto` — IT GROWS BUT DOES NOT SHRINK, and the second half
   matters. At `1 1 auto` flex squeezes the image so the whole post fits
   inside the screen — the cut-off at the bottom that the note on
   `.fbph__screen` was after disappears, and it stops looking like a
   screenshot of a real phone. It only fills the space left over; the
   excess passes through the screen's `overflow:hidden` as before. */
.fbui__post{padding:1.1em 1.2em 0;position:relative;flex:1 0 auto;display:flex;flex-direction:column}
.fbui__ppic{
  position:absolute;left:1.2em;top:1.1em;width:2.9em;height:2.9em;border-radius:50%;
  background:#F0F2F5;display:grid;place-items:center;overflow:hidden;
}
.fbui__ppic img{width:80%;height:auto}
.fbui__post b{display:block;margin-left:3.6em;font-weight:700;font-size:1.05em}
.fbui__date{display:flex;align-items:center;gap:.3em;margin-left:3.6em;font-size:.9em;color:#65676B}
.fbui__date .ico{width:.95em;height:.95em}
/* The three dots to the right of the post — in the supplied UI. */
.fbui__pmenu{position:absolute;right:1.2em;top:1.5em;display:flex;gap:.22em}
.fbui__pmenu i{width:.3em;height:.3em;border-radius:50%;background:#65676B}
.fbui__post p{margin-top:.85em;font-size:1.1em;line-height:1.45}
/* ⚠ THE IMAGE BREAKS OUT TO THE EDGES (`margin-inline:-1.2em`) — it eats
   the post's padding. That is how Facebook does it: the post image is the
   full width of the screen while the text keeps its margin. */
.fbui__shot{
  display:block;margin:.9em -1.2em 0;overflow:hidden;background:#EBEDF0;
  /* The 3/2 is THE REQUESTED PROPORTION; `flex-grow` fills in when space
     is left at the bottom of the screen. `min-height` is the last
     safeguard: even if the image never arrives it still has something to
     stand on, and the bottom of the post does not suddenly vanish. */
  aspect-ratio:3/2;flex:1 0 auto;min-height:8em;
}
.fbui__shot img{width:100%;height:100%;object-fit:cover;display:block}

/* ---- THE FOUR REACTIONS ----
   ⚠ THEY ARE MEASURED AGAINST THE PHONE (`--w`/`--ph`) AND NOT AGAINST
     THE STAGE. They used to be in `%` of the stage — and the stage is a
     different height in every window, so they drifted away or landed on
     the face of the screen. They are attached to the phone itself now:
     65% of its width to the left of centre, 28% of its height down.
     Whatever the window, it is one scene.
   ⚠ `left`/`top` ARE THE CENTRE OF THE CIRCLE and not the corner — the
     negative `margin` of half the size is what translates that.
     `transform` cannot be used for it: the floating owns that. */
.fbre{
  --s:calc(var(--w) * .18);
  position:absolute;z-index:2;display:grid;place-items:center;border-radius:50%;
  width:var(--s);height:var(--s);margin:calc(var(--s) / -2) 0 0 calc(var(--s) / -2);
  color:#fff;box-shadow:0 .6em 1.4em -.4em rgba(2,19,52,.42);
  animation:fbFloat 5.4s ease-in-out infinite;
  transition:transform .5s var(--back);
}
.fbre svg{width:52%;height:52%}
.fbre--thumb {--s:calc(var(--w) * .23);left:calc(var(--cx) - var(--w) * .60);top:calc(var(--ph) * .28);background:linear-gradient(180deg,#3B8AFF,#1877F2);animation-delay:-.4s}
.fbre--heart1{--s:calc(var(--w) * .183);left:calc(var(--cx) - var(--w) * .62);top:calc(var(--ph) * .42);background:linear-gradient(180deg,#FF5470,#E8123C);animation-delay:-2.2s}
.fbre--people{--s:calc(var(--w) * .163);left:calc(var(--cx) + var(--w) * .58);top:calc(var(--ph) * .37);background:linear-gradient(180deg,#3B8AFF,#1877F2);animation-delay:-1.3s}
.fbre--heart2{--s:calc(var(--w) * .18);left:calc(var(--cx) + var(--w) * .65);top:calc(var(--ph) * .59);background:linear-gradient(180deg,#FF5470,#E8123C);animation-delay:-3.1s}
@keyframes fbFloat{
  0%,100%{transform:translateY(0) rotate(0)}
  50%    {transform:translateY(-13px) rotate(-4deg)}
}
/* ⚠ THE FLOATING STOPS WHEN IT POPS — the two are opposing `transform`s
   on one element, and `animation` always beats `transition`.
   `animation-play-state:paused` is what stops the one so the other can be
   seen. */
.fbb__cta:focus-visible ~ .fbre{animation-play-state:paused}
@media (hover:hover){ .fbb:hover .fbre{animation-play-state:paused} .fbb__cta:hover ~ .fbb__stage .fbre,
.fbb__stage:hover .fbre{animation-play-state:paused} .fbb__copy:hover ~ .fbb__stage .fbre--thumb {transform:translate(-13px,-11px) scale(1.1)} .fbb__copy:hover ~ .fbb__stage .fbre--heart1{transform:translate(-11px,7px) scale(1.1)} .fbb__copy:hover ~ .fbb__stage .fbre--people{transform:translate(12px,-9px) scale(1.1)} .fbb__copy:hover ~ .fbb__stage .fbre--heart2{transform:translate(13px,9px) scale(1.1)} }

/* ================================================================
   ⚠ MORE INTERACTION IN #social (Aug 18, 2026 — *"add more interactive
   here"*)

   Three things were added, and NOT ONE of them invents a new visual
   language — each is a pattern the page already uses somewhere else:

     the chips drive the post    the #about reel (press one of a short
                                 list, the large panel beside it changes)
     the reactions are magnetic  the motes in #story (they answer the
                                 cursor instead of ignoring it)
     the glare follows           the light in #dealership (`--mx`/`--my`)

   ⚠ THE GUARDS ARE IN SECTION 13b OF main.js, NOT HERE. The lean and the
     glare need a fine pointer and are off under reduced motion; the
     chips still work on a phone — a press is not motion.
   ================================================================ */

/* ---- THE CHIPS ARE CONTROLS NOW ----
   ⚠ THE RESTING LOOK IS UNCHANGED. Only the current one differs, and it
     differs in the chip's OWN colour: the icon colour that was already
     there floods the chip. No new highlight colour was introduced. */
.fbb__chip{cursor:pointer;border:0;font:inherit;-webkit-appearance:none;appearance:none}
.fbb__chip:focus-visible{outline:2px solid var(--fb);outline-offset:3px}
.fbb__chips li:nth-child(1) .fbb__chip.is-on{background:rgba(var(--n-fb-rgb),.12);color:var(--n-fb)}
.fbb__chips li:nth-child(2) .fbb__chip.is-on{background:rgba(var(--n-ig-rgb),.12);color:var(--n-ig)}
.fbb__chips li:nth-child(3) .fbb__chip.is-on{background:rgba(var(--n-tt-rgb),.12);color:var(--n-tt)}
.fbb__chip.is-on{transform:translateY(-1px)}

/* ---- THE POST CROSSFADES ----
   The JS swaps the words and the picture in the MIDDLE of the fade, so
   the change is never seen happening — only its result. */
.fbui__post > p,.fbui__shot img{transition:opacity .26s ease}
.fbui__post.is-swap > p,.fbui__post.is-swap .fbui__shot img{opacity:0}

/* ---- ⚠ THE REACTIONS ANSWER THE CURSOR ----
   `--rx`/`--ry` are written by the JS: how far THIS reaction leans
   toward the pointer, already scaled by how near it is. At rest both are
   0 and the floating keyframes have the element to themselves.

   ⚠ IT IS A SEPARATE PROPERTY FROM THE FLOAT, and that is the whole
     trick. The float is an `animation` on `transform`; the lean uses
     `translate`, which is its own property — so the two run together
     without erasing one another. The same split `.dealbg` uses against
     `dwaveA`.

   ⚠ THE `transform` TRANSITION IS KEPT. `.fbre` already had one for the
     shift on `.fbb__copy:hover`; writing `transition` again without it
     would have quietly killed that. */
.fbre{
  cursor:pointer;
  translate:var(--rx,0) var(--ry,0);
  transition:transform .5s var(--back), translate .55s cubic-bezier(.22,1,.36,1);
}

/* ---- THE POP ----
   A press is answered by a ring opening outward. The float pauses for
   that moment: two `transform`s on one element and the animation always
   wins, so the pop would never be seen otherwise.

   ⚠ THE RING TAKES THE REACTION'S OWN COLOUR. `currentColor` here is
     white (the icon), and a white ring on this near-white section is
     invisible the moment it leaves the circle. */
.fbre--thumb,.fbre--people {--ring:24,119,242}
.fbre--heart1,.fbre--heart2{--ring:232,18,60}
.fbre::after{
  content:"";position:absolute;inset:0;border-radius:50%;
  border:2px solid rgba(var(--ring,24,119,242),.75);
  opacity:0;pointer-events:none;
}
.fbre.is-pop{animation-play-state:paused;transform:scale(1.16)}
.fbre.is-pop::after{animation:frePop .52s var(--ease)}
@keyframes frePop{
  from{opacity:.6;transform:scale(1)}
  to  {opacity:0;transform:scale(1.95)}
}

/* ---- THE GLARE FOLLOWS THE POINTER ----
   The front of the phone is glass, and glass answers a light that moves
   across it. `--gx`/`--gy` come from the same pointer read that already
   tilts the phone — there is no second listener.

   ⚠ THIS IS A SECOND LAYER, NOT A REPLACEMENT. There is a note above
     `.fbph__glare` explaining why its own sheen was reduced to almost
     nothing (it was greying the white cover). That one is untouched;
     this is a soft highlight that only appears while a pointer is in the
     section, and it leaves with it. */
.fbph__glare::before{
  content:"";position:absolute;inset:0;border-radius:inherit;
  background:radial-gradient(58% 42% at var(--gx,32%) var(--gy,14%),
             rgba(255,255,255,.26), rgba(255,255,255,0) 70%);
  opacity:0;transition:opacity .5s ease;
}
@media (hover:hover){ #social:hover .fbph__glare::before{opacity:1} }

@media (prefers-reduced-motion:reduce){
  .fbre{translate:none;transition:none}
  .fbre.is-pop{transform:none}
  .fbre.is-pop::after{animation:none}
  .fbui__post > p,.fbui__shot img,
  .fbui__full,.fbui__pic img,.fbui__ppic img{transition:none}
  .fbph__glare::before{transition:none}
}


/* ---- THE ENTRANCE OF THE SCREEN CONTENTS ----
   One sentence, not seven simultaneous effects: cover → image → name →
   buttons → tabs → post. ⚠ `backwards` on all of them: it holds the first
   keyframe while waiting and the end is normal, so no `transform` is left
   stuck anywhere. */
.fbb__stage.is-in .fbui__cover  {animation:fbUp .62s var(--ease) .10s backwards}
.fbb__stage.is-in .fbui__pic    {animation:fbPop .68s var(--back) .30s backwards}
.fbb__stage.is-in .fbui__name,
.fbb__stage.is-in .fbui__meta   {animation:fbUp .5s var(--ease) .40s backwards}
.fbb__stage.is-in .fbui__acts   {animation:fbUp .5s var(--ease) .50s backwards}
.fbb__stage.is-in .fbui__likes  {animation:fbUp .5s var(--ease) .58s backwards}
.fbb__stage.is-in .fbui__tabs   {animation:fbUp .5s var(--ease) .66s backwards}
.fbb__stage.is-in .fbui__post   {animation:fbUp .55s var(--ease) .76s backwards}
@keyframes fbUp { from{opacity:0;transform:translateY(14px)} }
@keyframes fbPop{ 0%{opacity:0;transform:scale(.4)} 64%{opacity:1;transform:scale(1.1)} 100%{opacity:1;transform:none} }
/* The four reactions arrive after the phone, one by one. */
.fbb__stage.is-in .fbre{animation:fbFloat 5.4s ease-in-out infinite, fbIn .6s var(--back) backwards}
.fbb__stage.is-in .fbre--thumb {animation-delay:-.4s,  .55s}
.fbb__stage.is-in .fbre--heart1{animation-delay:-2.2s, .68s}
.fbb__stage.is-in .fbre--people{animation-delay:-1.3s, .80s}
.fbb__stage.is-in .fbre--heart2{animation-delay:-3.1s, .92s}
@keyframes fbIn{ from{opacity:0;transform:scale(.3)} }

/* ---- CELLPHONE AT TABLET ---- */
@media (max-width:900px){
  .fbb{grid-template-columns:1fr;gap:clamp(30px,5vh,46px);justify-items:center;text-align:center}
  .fbb__copy{align-items:center}
  .fbb__eyerule{left:50%;transform:translateX(-50%) scaleX(0);transform-origin:50% 50%}
  .fbb__eyebrow.is-in .fbb__eyerule{transform:translateX(-50%) scaleX(1)}
  .fbb__lead{max-width:38ch}
  .fbb__chips{justify-content:center}
  /* ⚠ NO ROTATION ON A PHONE. There is no mouse to follow, and a rotated
     phone on a narrow screen has a smaller TRUE width — which makes the
     inside hard to read. It faces front here. */
  /* ⚠ THE STAGE FOLLOWS THE PHONE'S HEIGHT HERE. On a PC the row has a
     floor of its own and the phone sits inside it; here there is NOTHING
     beside the phone to set that floor, so the stage takes its height
     from the phone instead.
     (Until Aug 19, 2026 the PC phone was cut off at the bottom and this
     block existed to stop that happening on a narrow screen, where a
     cut-off phone reads as "the page is incomplete" rather than "a
     scene". Nothing is cut anywhere now, but the height rule still
     belongs here.) */
  /* The phone is centred again here — there is nothing beside it to move away from. */
  .fbb{min-height:0;--cx:50%}
  .fbb__stage{min-height:calc(var(--ph) + 10px)}
  .fbph{transform:none;width:var(--w)}
  /* ⚠ THE STAGE HAS ITS OWN WIDTH HERE (Aug 17, 2026). `.fbb` is one
     column now with `justify-items:center` — so the stage is only as wide
     as the PHONE. The four reactions are measured in `%` OF THE STAGE
     (`left:-2%`), so on a narrow stage they land ON THE FACE OF THE
     SCREEN ITSELF: the heart on top of "Message" and the thumb on the
     cover. They have air on both sides again now, as on a PC. */
  .fbb__stage{perspective:none;width:min(100%,430px)}
  /* The `text-align:center` on `.fbb` is for the copy — not for the
     inside of the phone. There are no centred posts on Facebook. */
  .fbph__screen{text-align:left}
}
/* In a narrow window the four move closer to the phone — there is no air
   at the sides for them to occupy without escaping. */
@media (max-width:560px){
  .fbre--thumb {left:calc(var(--cx) - var(--w) * .62);top:calc(var(--ph) * .22)}
  .fbre--heart1{left:calc(var(--cx) - var(--w) * .64);top:calc(var(--ph) * .38)}
  .fbre--people{left:calc(var(--cx) + var(--w) * .58);top:calc(var(--ph) * .30)}
  .fbre--heart2{left:calc(var(--cx) + var(--w) * .62);top:calc(var(--ph) * .52)}
}

/* ================= 15. FAQ ================= */
.faq{display:grid;grid-template-columns:.85fr 1.15fr;gap:clamp(28px,5vw,66px);align-items:start}
.faq__side .btn{margin-top:26px}
.faq__list{display:grid;gap:10px}
.qa{
  background:var(--paper);border:1.6px solid var(--line-2);border-radius:12px;overflow:hidden;
  transition:border-color .3s ease,box-shadow .3s ease;
}
.qa[open]{border-color:var(--line);box-shadow:var(--shadow-s)}
.qa summary{
  list-style:none;cursor:pointer;padding:18px 52px 18px 22px;position:relative;
  font-family:var(--display);font-weight:700;font-size:15.5px;color:var(--navy);line-height:1.35;
}
.qa summary::-webkit-details-marker{display:none}
.qa summary::after{
  content:"";position:absolute;right:22px;top:50%;width:13px;height:13px;margin-top:-6px;
  border-right:2.6px solid var(--red);border-bottom:2.6px solid var(--red);
  transform:rotate(45deg);transition:transform .35s var(--back);
}
.qa[open] summary::after{transform:rotate(-135deg)}
@media (hover:hover){ .qa summary:hover{color:var(--red)} }
.qa__body{padding:0 22px 20px;font-size:14.5px;line-height:1.68;color:var(--ink-2);animation:fadeUp .4s var(--ease)}


/* ================= 16. CONTACT + FORM ================= */
/* ⚠ THIS IS ONE COLUMN NOW, NO LONGER TWO (Aug 11, 2026). The form used
   to be on the right; it has moved to `#fmodal`, so the second column is
   empty. What is left in the section is THE WAY TO REACH A PERSON —
   number, email, address, hours — and one button that opens the form.

   ⚠ THERE IS A WIDTH LIMIT: `.contact__side` becomes one long row inside
     the 1180px `.wrap` if left alone. */
.contact{display:grid;justify-items:center;text-align:center}
/* ⚠ `720px` NOW, FORMERLY `560px`. The 560 was for the PARAGRAPH — there
   is no paragraph any more (Aug 13, 2026), and the title that remains is
   longer than the one it replaced: "Have questions? Let's talk." against
   "Get your quote." At 560 it broke into three lines on a laptop. */
.contact__side{width:min(720px,100%)}
/* The button that opens the form. It sits below the ways of getting in
   touch: someone with a phone in their hand calls, everyone else
   writes. */
/* ⚠ NO `gap` IS NEEDED ANY MORE — there is only one child left (the
   button) since `.contact__note` was removed (Aug 13, 2026).
   `display:grid` and `justify-items` stayed because that is what centres
   the button; only the `gap` was left with no work to do. */
.contact__act{margin-top:clamp(22px,3vw,32px);display:grid;justify-items:center}
/* THERE IS NO `.contact__note` ANY MORE. If the small text under the
   button returns:  .contact__note{margin:0;font-size:12.5px;color:var(--ink-2)}
   — and restore the `gap:10px` on `.contact__act` above as well. */

/* ---- ⚠ THREE CARDS, FOLLOWING THE SUPPLIED UI (Aug 13, 2026) ----
   This used to be three stacked rows, text to the left with a small icon
   at the side. They sit side by side now: a bronze circle at the top, a
   title, a short rule, a value — all centred.

   ⚠ ITS WIDTH IS NOT TIED TO `.wrap`. The 560px limit is on
     `.contact__side` and that is for TEXT — three cards should not be
     held to a limit made for a paragraph.

   ⚠ `align-items:stretch` (grid's default). The three values are
     different lengths — the phone is 12 characters and the address is 54 —
     and if the heights are uneven the three circles at the top do not
     line up, and those are the first thing the eye sees. */
.ways{
  list-style:none;margin:clamp(26px,3.4vw,40px) 0 0;
  width:min(1060px,100%);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(12px,1.8vw,26px);
}
.way{display:flex}
.way a{
  flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;
  text-decoration:none;background:var(--paper);
  border:1.6px solid var(--line-2);border-radius:18px;
  padding:clamp(22px,2.6vw,34px) clamp(16px,2vw,26px) clamp(20px,2.4vw,30px);
  box-shadow:0 18px 38px -28px rgba(31,66,128,.6);
  transition:transform .42s var(--back),border-color .32s ease,box-shadow .42s var(--ease);
}
.way[data-reveal]{transition-delay:calc(var(--i,0) * .1s)}

/* ---- THE BRONZE CIRCLE ----
   ⚠ `--sand` IS THE BACKGROUND AND NOT THE SECTION'S GROUND. The two are
     the same bronze to the eye, but the circle sits on top of a WHITE
     card — it has to be seen against white, not against the ground.
   Red on `--sand` = 4.08:1, past the 3:1 for meaningful graphics. */
.way__ico{
  flex:none;display:grid;place-items:center;
  width:clamp(58px,5vw,72px);height:clamp(58px,5vw,72px);
  border-radius:50%;background:var(--sand);color:var(--red);
  transition:transform .5s var(--back),background-color .35s ease,color .35s ease,
             box-shadow .42s var(--ease);
}
.way__ico .ico{width:44%;height:44%;transition:transform .5s var(--back)}

.way__lbl{
  margin-top:clamp(14px,1.6vw,20px);
  font-family:var(--display);font-weight:800;
  font-size:clamp(17px,1.5vw,21px);letter-spacing:-.02em;color:var(--navy);
}
/* ⚠ RED·NAVY·RED IS A CHANGE OF RHYTHM, NOT A MARK OF RANK. It follows
   the supplied UI. None of the three matters more in colour — and nothing
   says it in words any more either: that was in `.way__sub`
   ("Call — this is fastest") and it was removed Aug 13, 2026. If it is
   revisited, see the note on `.way__val--mail` below. */
.way__rule{
  display:block;width:44px;height:3px;border-radius:2px;
  margin:clamp(9px,1vw,12px) 0 clamp(12px,1.4vw,16px);
  transition:width .45s var(--back),background-color .3s ease;
}
.way__rule--red{background:var(--red)}
.way__rule--navy{background:var(--navy)}

/* `--navy` sa `--paper` = 9.62:1 */
.way__val{
  font-size:clamp(14px,1.15vw,16.5px);line-height:1.5;color:var(--navy);font-weight:500;
  transition:color .3s ease;
}
/* ⚠ ONLY THE EMAIL MAY BE BROKEN. It is 27 characters with no space; at
   1/3 of the screen it overflows the card without permission to break.
   The others have spaces, so they do not need this. */
.way__val--mail{overflow-wrap:anywhere}
/* ⚠ THERE IS NO `.way__sub` ANY MORE (Aug 13, 2026 — *"remove the words or
   descriptions below"*). It was a small explanation under each value:
   *"Call — this is fastest"*, *"For a formal quotation"* and
   *"Warehouse & office"* (12.5px, `--ink-2`, 7px top margin).

   ⚠ SOMETHING NON-OBVIOUS WENT WITH IT: those three lines were the ONLY
     place on the page that said WHICH is the fastest way. That was
     deliberate before — the red·navy·red of the rules is a change of
     rhythm and not a mark of rank, so the difference was written in
     WORDS and not in colour. Nothing says it now: the three are equal in
     the reader's eye. ▶ If the idea returns, one line on the phone is
     what is needed — not colour. */

/* ---- THE ACTION ----
   One press is answered by four things at once: the card lifts, the
   circle rotates and turns red, the rule widens, and the value goes red.
   One thing happens to the eye — not four.
   ⚠ `:focus-within` ON EVERY ONE. The whole card is the link; with only
     `:hover` written, anyone tabbing would see no answer at all. */
.way a:focus-within{
  transform:translateY(-7px);border-color:rgba(31,66,128,.28);
  box-shadow:0 30px 54px -28px rgba(31,66,128,.75);
}
@media (hover:hover){ .way a:hover{
  transform:translateY(-7px);border-color:rgba(31,66,128,.28);
  box-shadow:0 30px 54px -28px rgba(31,66,128,.75);
} }
.way a:focus-within .way__ico{
  transform:translateY(-3px) rotate(-8deg) scale(1.07);
  background:var(--red);color:#fff;                    /* puti sa pula = 5.25:1 */
  box-shadow:0 16px 28px -14px rgba(217,4,41,.8);
}
@media (hover:hover){ .way a:hover .way__ico{
  transform:translateY(-3px) rotate(-8deg) scale(1.07);
  background:var(--red);color:#fff;                    /* puti sa pula = 5.25:1 */
  box-shadow:0 16px 28px -14px rgba(217,4,41,.8);
} }
.way a:focus-within .way__ico .ico{transform:rotate(8deg)}
@media (hover:hover){ .way a:hover .way__ico .ico{transform:rotate(8deg)} }
.way a:focus-within .way__rule{width:78px}
@media (hover:hover){ .way a:hover .way__rule{width:78px} }
.way a:focus-within .way__val{color:var(--red)}
@media (hover:hover){ .way a:hover .way__val{color:var(--red)} }
.way a:focus-visible{outline:3px solid var(--navy);outline-offset:4px}
.way a:active{transform:translateY(-3px)}

/* ---- THE HOURS: ONE LINE NOW ----
   This used to be a box and would have been the fourth in a row of three —
   that would break the arrangement. Both sentences are still whole. */
.hours{
  display:flex;gap:9px;align-items:center;justify-content:center;
  margin:clamp(18px,2.2vw,26px) 0 0;font-size:13px;color:var(--ink-2);text-align:left;
}
.hours .ico{width:17px;height:17px;flex:none;color:var(--navy)}
.hours b{font-family:var(--display);font-weight:800;color:var(--navy)}
.hours b.is-open{color:#178A4C}

@media (max-width:760px){
  .ways{grid-template-columns:minmax(0,1fr);gap:11px}
  /* ⚠ BACK TO A ROW ON A PHONE, NOT A CENTRED STACK. Three centred cards
     at 200px tall each is nearly a whole screen of scrolling for three
     lines of text. The circle returns to the side and the text goes left —
     the same content at a third of the height. The eye follows one edge,
     not the centre, when things are stacked. */
  /* ⚠ GRID AND NOT `flex-direction:row`. There are four siblings inside
     the <a>; in a flex row all four would sit side by side on one line.
     The circle has to span the rows of text beside it, and only an
     explicit column instruction can do that — auto-placement fills by
     row, so the second piece of text would land in the first column. */
  .way a{
    display:grid;grid-template-columns:auto minmax(0,1fr);
    column-gap:15px;align-items:center;text-align:left;
    padding:15px 17px;border-radius:14px;
  }
  /* ⚠ `span 2` NOW, FORMERLY `span 3`. There used to be three rows of
     text (label, value, explanation); the explanation is gone
     (`.way__sub`, Aug 13, 2026), so there are two. Left at `span 3`
     there is an empty third row being dragged along by the circle. */
  .way__ico{grid-column:1;grid-row:1 / span 2;width:46px;height:46px}
  .way__ico .ico{width:20px;height:20px}
  .way__lbl{grid-column:2;margin-top:0;font-size:15px}
  .way__val{grid-column:2;font-size:14px}
  .way__rule{display:none}
  .way__val br{display:none}
  .way a:focus-within{transform:translateX(5px)}
  @media (hover:hover){ .way a:hover{transform:translateX(5px)} }
  .hours{align-items:flex-start}
}

/* =========================================================
   ANG LUMULUTANG NA PORMA
   ⚠ MAGAAN NA ANG MODAL, HINDI NA NAVY ANG ULO. Kulay-langit na
     gradient ang likod sa ipinadalang disenyo at nakasentro ang ulo —
     nasa loob niya ang buong eksena, kaya walang navy na banda sa itaas.
   ========================================================= */
.fmodal{
  position:fixed;inset:0;z-index:200;display:grid;place-items:center;
  padding:clamp(10px,2.4vw,28px);
}
.fmodal[hidden]{display:none}
.fmodal__veil{
  position:absolute;inset:0;background:rgba(2,19,52,.6);
  backdrop-filter:blur(3px);opacity:0;transition:opacity .32s var(--ease);
}
.fmodal.is-on .fmodal__veil{opacity:1}
/* ⚠ `max-height` AT `display:flex` — HINDI `height`. Iba-iba ang taas ng
   porma (nagbabago ang ulo ng card, sumusulpot ang mensahe ng mali), at
   ang naka-lock na taas ay puting puwang sa maiksi at putol sa mahaba.
   Ang `max-height` ay bubong lang: hanggang doon lumalaki, at ang
   `.fmodal__body` na lang ang nagsi-scroll pagkatapos. */
.fmodal__box{
  position:relative;z-index:1;
  width:min(620px,100%);max-height:calc(100dvh - clamp(20px,4.8vw,56px));
  display:flex;flex-direction:column;
  border-radius:clamp(18px,2.4vw,26px);overflow:hidden;
  background:linear-gradient(168deg,#EAF2FD 0%,#F7F1E8 46%,#FBF4EA 100%);
  box-shadow:0 44px 90px -40px rgba(2,19,52,.62), 0 10px 26px -14px rgba(2,19,52,.4);
  opacity:0;transform:translateY(22px) scale(.97);
  transition:opacity .34s var(--ease), transform .48s var(--back);
}
.fmodal.is-on .fmodal__box{opacity:1;transform:none}
/* ⚠ LUMULUTANG ANG × SA IBABAW NG NAG-SCROLL NA LAMAN. Wala nang ulo
   siyang matitirhan — kaya `absolute` siya at `z-index`, at may sariling
   maputlang bilog para may makita sa likod niyang teksto man o card. */
.fmodal__x{
  position:absolute;right:clamp(10px,1.6vw,18px);top:clamp(10px,1.6vw,18px);z-index:3;
  width:34px;height:34px;border-radius:50%;border:0;cursor:pointer;
  display:grid;place-items:center;color:var(--navy);
  background:rgba(255,255,255,.86);box-shadow:0 4px 12px -6px rgba(2,19,52,.4);
  transition:all .3s var(--back);
}
.fmodal__x svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.2}
@media (hover:hover){ .fmodal__x:hover{background:var(--red);color:#fff;transform:rotate(90deg)} }
.fmodal__body{
  flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  padding:clamp(24px,3.4vw,38px) clamp(16px,2.6vw,32px) clamp(18px,2.4vw,28px);
}

/* ---- ANG ULO ---- */
.fhead{text-align:center;margin-bottom:clamp(18px,2.4vw,26px)}
/* ⚠ MAY GITLING SA MAGKABILANG DULO at hindi lang sa kaliwa gaya ng
   ibang eyebrow ng pahina. Nakasentro ang ulo rito; ang iisang gitling
   sa kaliwa ay nagmumukhang tumagilid ang lahat. */
.fhead__kick{
  display:inline-flex;align-items:center;gap:10px;margin:0 0 10px;
  font-family:var(--display);font-weight:800;font-size:10.5px;
  letter-spacing:.2em;text-transform:uppercase;color:var(--red);
}
.fhead__kick::before,.fhead__kick::after{
  content:"";width:22px;height:2.5px;border-radius:2px;background:currentColor}
.fhead__title{
  margin:0;font-family:var(--display);font-weight:800;
  font-size:clamp(23px,3vw,34px);line-height:1.16;letter-spacing:-.02em;color:var(--navy);
}
/* ⚠ `--electric` ANG "TapeMate" AT HINDI PULA. Pula na ang guhit sa
   ilalim niya; pulang titik + pulang guhit ay isang malaking pulang
   mantsa sa gitna ng pangungusap. Bughaw ang titik, pula ang guhit —
   dalawang tanda na hindi naglalaban. */
.fhead__hi{color:var(--electric);position:relative;display:inline-block;padding-bottom:.06em}
.fhead__u{position:absolute;left:0;right:0;bottom:-.04em;width:100%;height:auto;color:var(--red);overflow:visible}
.fhead__u path{stroke-dasharray:230;stroke-dashoffset:230;transition:stroke-dashoffset .9s var(--ease) .35s}
.fmodal.is-on .fhead__u path{stroke-dashoffset:0}
.fhead__sub{margin:10px auto 0;max-width:44ch;font-size:clamp(12px,.95vw,14px);
  line-height:1.55;color:var(--ink-2)}

/* =========================================================
   ANG DALAWANG PAGPIPILIAN
   ⚠ `1fr 1fr` KAHIT SA CELLPHONE. Magkatabi sila sa disenyo pati sa
     390px, at kasya: 160px bawat isa, at dalawang salita lang ang
     pinakamahabang pamagat. Ang pagsalansan sa kanila ay nagtutulak sa
     porma pababa ng 90px sa mismong screen na pinakamaikli.
   ========================================================= */
.fpick{display:grid;grid-template-columns:1fr 1fr;gap:clamp(9px,1.2vw,14px);
  margin-bottom:clamp(14px,1.8vw,20px)}
.fpick__c{
  position:relative;overflow:hidden;cursor:pointer;text-align:left;
  display:grid;align-content:start;gap:4px;
  /* ⚠ 30px ANG PADDING SA ITAAS AT HINDI 16px, AT ANG PULANG TSEK ANG
     DAHILAN. 24px ang taas niya mula sa dulong-taas ng card; sa 16px ay
     nakapasok ang icon sa ilalim niya at nagsasapawan sila. Hindi
     kailangan ng kalahati sa dalawa — kailangan ng puwang. */
  padding:clamp(28px,2.6vw,34px) clamp(12px,1.5vw,18px) clamp(13px,1.6vw,18px);
  border-radius:14px;border:1.6px solid var(--line-2);
  background:var(--paper);color:var(--navy);
  box-shadow:0 10px 22px -18px rgba(2,19,52,.5);
  transition:background .3s var(--ease), border-color .3s var(--ease),
             transform .35s var(--back), box-shadow .35s var(--ease);
}
@media (hover:hover){ .fpick__c:hover{transform:translateY(-3px);box-shadow:0 18px 30px -20px rgba(2,19,52,.55)} }
.fpick__c.is-on{
  background:linear-gradient(155deg,#27508F,#1B3A6E);border-color:transparent;color:#fff;
  box-shadow:0 20px 36px -22px rgba(2,19,52,.62);
}
/* ⚠ ANG PULANG TSEK SA SULOK. Nakatago siya hangga't hindi napipili —
   `scale(0)` at hindi `display:none`, kaya may pagdating siya at hindi
   basta sumusulpot. `border-radius:0 0 12px 0` lang: sulok siya ng card,
   kaya matalim ang dalawang gilid na nakadikit sa gilid ng card. */
.fpick__tick{
  position:absolute;left:0;top:0;width:26px;height:24px;
  display:grid;place-items:center;background:var(--red);color:#fff;
  border-radius:0 0 11px 0;
  transform:scale(0);transform-origin:0 0;
  transition:transform .4s var(--back);
}
.fpick__c.is-on .fpick__tick{transform:scale(1)}
.fpick__tick svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2.6}
.fpick__ico{width:clamp(26px,2.4vw,32px);height:clamp(26px,2.4vw,32px);
  margin-bottom:clamp(8px,1vw,12px);fill:none;stroke:currentColor;stroke-width:1.7;color:inherit}
.fpick__t{font-family:var(--display);font-weight:800;font-size:clamp(12.5px,1.05vw,15px);
  line-height:1.25}
.fpick__s{font-size:clamp(10px,.82vw,11.8px);line-height:1.4;opacity:.72}

/* =========================================================
   ANG CARD NG PORMA
   ========================================================= */
.fwrap{background:var(--paper);border-radius:18px;box-shadow:var(--shadow-l);overflow:hidden}
.form{padding:clamp(18px,2.4vw,28px)}

/* ---- ang ulo ng card ---- */
.fcard__head{display:flex;align-items:flex-start;gap:clamp(11px,1.3vw,15px)}
.fcard__ico{flex:none;width:clamp(38px,3.4vw,46px);aspect-ratio:1;border-radius:12px;
  display:grid;place-items:center;background:rgba(59,156,255,.13);color:var(--navy)}
.fcard__ico svg{width:54%;height:54%;fill:none;stroke:currentColor;stroke-width:1.8}
.fcard__txt{display:grid;gap:3px;min-width:0}
.fcard__txt b{font-family:var(--display);font-weight:800;
  font-size:clamp(15px,1.35vw,19px);line-height:1.2;color:var(--navy)}
.fcard__txt span{font-size:clamp(10.6px,.85vw,12.4px);line-height:1.45;color:var(--ink-2)}
/* Ang maikling pulang guhit sa ilalim ng ulo. Hindi siya hati — siya ang
   nagsasabing tapos na ang pagpapakilala at simula na ng tatanungin. */
.fcard__rule{display:block;width:38px;height:3px;border-radius:2px;background:var(--red);
  margin:clamp(12px,1.4vw,16px) 0 clamp(14px,1.8vw,20px)}

/* =========================================================
   ANG MGA PATLANG
   ========================================================= */
.field{position:relative;margin:0 0 clamp(12px,1.5vw,16px)}
.field label,.flabel{display:block;font-family:var(--display);font-weight:700;
  font-size:clamp(10.6px,.85vw,12.2px);color:var(--navy);margin-bottom:6px}
/* Pulang bituin sa kailangan, kulay-abong "(Optional)" sa hindi. Dalawang
   magkasalungat na tanda, at pareho silang nasa disenyo — kaya walang
   patlang na hindi mo alam kung alin siya. */
.field label i,.flabel i{color:var(--red);font-style:normal;font-weight:800}
.field .opt,.flabel .opt{font-weight:500;color:var(--ink-2)}
.field input,.field select,.field textarea{
  width:100%;font:inherit;font-size:clamp(12px,.95vw,13.6px);color:var(--navy);
  background:var(--paper);border:1.5px solid var(--line);border-radius:11px;
  padding:clamp(10px,1.15vw,13px) 14px;
  transition:border-color .25s var(--ease), box-shadow .25s var(--ease), background .25s var(--ease);
}
.field textarea{resize:vertical;min-height:84px;line-height:1.5}
.field input::placeholder,.field textarea::placeholder{color:rgba(87,97,138,.48)}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--electric);background:#fff;
  box-shadow:0 0 0 3.5px rgba(59,156,255,.16)}
.field.is-bad input,.field.is-bad textarea,.field.is-bad .fmulti__ctl{
  border-color:var(--red);box-shadow:0 0 0 3.5px rgba(217,4,41,.1)}
.field.is-good input,.field.is-good textarea{border-color:rgba(38,161,91,.5)}

/* ⚠ MAGKATABI SILA SA LAHAT NG LAPAD, PATI SA 390px — ganoon sa
   ipinadalang disenyo. Nagsalansan sila rito noon sa ilalim ng 560px
   dahil hindi kasya ang bandila + "+63" + ang numero sa 165px.
   ANG "+63" ANG INALIS, HINDI ANG HANAY: nasa placeholder na siya ("+63
   912 345 6789"), kaya dalawang beses siyang nakasulat noon sa isang
   kahon. Bandila at pana na lang ang natira sa kaliwa — 48px — at kasya
   na ang numero. Ganoon din mismo ang nasa disenyo. */
.frow{display:grid;grid-template-columns:1fr 1fr;gap:clamp(8px,1.2vw,14px)}

/* ---- ANG ICON SA KANAN ----
   ⚠ SA KANAN AT HINDI SA KALIWA. Ang icon sa KALIWA ay kumakain ng 44px
     sa sinusulat mo; ang nasa kanan ay tanda lang. Mahaba ang isinusulat
     dito ("Ex. Quezon City, Metro Manila"), kaya sa kanan siya.
   ⚠ `pointer-events:none` — kung hindi, ang pagpindot sa icon ay hindi
     nagbibigay ng focus sa kahon, at wala namang sariling gawain ang
     icon. */
.fbox{position:relative;display:block}
.field--ico input{padding-right:42px}
.fbox__ico{position:absolute;right:14px;top:50%;translate:0 -50%;
  width:16px;height:16px;pointer-events:none;color:var(--ink-2);
  fill:none;stroke:currentColor;stroke-width:1.8;transition:color .25s var(--ease)}
.fbox:focus-within .fbox__ico{color:var(--electric)}

/* =========================================================
   ANG NUMERO AT ANG BANDILA
   ⚠ ISANG KAHON ANG TINGIN, DALAWANG KONTROL ANG LOOB. Ang hangganan ay
     nasa `.fphone` at hindi sa `<input>` — kaya't ang focus ring ay
     paikot sa PAREHO, at hindi lumilitaw ang pangalawang parisukat sa
     gitna ng unang parisukat.
   ========================================================= */
.fphone{display:flex;align-items:stretch;
  border:1.5px solid var(--line);border-radius:11px;background:var(--paper);overflow:hidden;
  transition:border-color .25s var(--ease), box-shadow .25s var(--ease)}
.fphone:focus-within{border-color:var(--electric);background:#fff;
  box-shadow:0 0 0 3.5px rgba(59,156,255,.16)}
.field.is-bad .fphone{border-color:var(--red);box-shadow:0 0 0 3.5px rgba(217,4,41,.1)}
.fphone__cc{position:relative;flex:none;display:flex;align-items:center;gap:5px;
  padding:0 7px 0 9px;background:var(--gray-soft);border-right:1.5px solid var(--line)}
.fphone__flag{width:20px;height:13px;flex:none;border-radius:2px;pointer-events:none;
  box-shadow:0 0 0 1px rgba(2,19,52,.12)}
.fphone__chev{width:9px;height:9px;flex:none;color:var(--ink-2);rotate:90deg;
  fill:none;stroke:currentColor;stroke-width:2.4;pointer-events:none}
/* ⚠ NAKAPATONG ANG `<select>` SA IBABAW NG BANDILA AT `opacity:0` SIYA.
   HINDI `display:none` AT HINDI `hidden` — tunay na kontrol pa rin siya:
   naaabot ng Tab, nabubuksan ng daliri, at nababasa ng screen reader
   ("Country code"). Ang nakikita mo lang ay ang bandila at ang pana na
   iginuhit natin, at iyon ang nasa disenyo — walang "+63" na nakasulat
   sa kaliwa, dahil nasa placeholder na siya sa kanan.
   Ang katutubong hitsura ng `<select>` ay magkaiba sa Chrome, Safari at
   Firefox; ito ang tanging paraan na iisa siya sa tatlo. */
.fphone__cc select{
  position:absolute;inset:0;width:100%;height:100%;
  opacity:0;cursor:pointer;border:0;padding:0;margin:0;
  -webkit-appearance:none;appearance:none;
}
.fphone__cc select:focus{outline:none;box-shadow:none}
/* Nakikita ang focus kahit hindi nakikita ang kontrol mismo. */
.fphone__cc:focus-within{box-shadow:inset 0 0 0 2px var(--electric)}
.fphone input{border:0;border-radius:0;background:transparent;box-shadow:none;flex:1;min-width:0}
.fphone input:focus{box-shadow:none;background:transparent}

/* =========================================================
   ANG PILIANG MARAMI
   ⚠ TUNAY NA CHECKBOX ANG LAMAN NG PANEL. Kaya siyang basahin ng screen
     reader nang walang tulong — nabibilang, at gumagana ang space bar.
     Ang chip sa itaas ay BUOD lang ng nakatsek, kaya `aria-hidden`.
   ========================================================= */
.fmulti{position:relative}
.fmulti__ctl{
  display:flex;align-items:center;flex-wrap:wrap;gap:6px;
  min-height:44px;padding:7px 40px 7px 10px;
  border:1.5px solid var(--line);border-radius:11px;background:var(--paper);cursor:pointer;
  transition:border-color .25s var(--ease), box-shadow .25s var(--ease)}
.fmulti.is-open .fmulti__ctl{border-color:var(--electric);background:#fff;
  box-shadow:0 0 0 3.5px rgba(59,156,255,.16)}
.fmulti__ph{font-size:clamp(12px,.95vw,13.6px);color:rgba(87,97,138,.48);padding-left:4px}
/* ⚠ ANG PARAAN NG PAGTATAGO NG PLACEHOLDER: `.has-any` sa magulang at
   hindi `hidden` sa JS. Isang klase lang ang isinusulat ng JS, at ang
   CSS na ang bahala sa lahat ng sumusunod — kung may chip, walang
   placeholder. Isang pinagmumulan ng katotohanan. */
.fmulti.has-any .fmulti__ph{display:none}
.fmulti__chips{display:contents}
.fchip{display:inline-flex;align-items:center;gap:5px;
  padding:4px 5px 4px 10px;border-radius:8px;
  background:rgba(59,156,255,.12);color:var(--navy);
  font-size:clamp(10.4px,.82vw,11.8px);font-weight:600;white-space:nowrap}
.fchip button{
  width:15px;height:15px;flex:none;border:0;padding:0;cursor:pointer;border-radius:4px;
  display:grid;place-items:center;background:transparent;color:var(--ink-2);
  transition:background .2s var(--ease), color .2s var(--ease)}
@media (hover:hover){ .fchip button:hover{background:var(--red);color:#fff} }
.fchip button svg{width:8px;height:8px;fill:none;stroke:currentColor;stroke-width:2.6}
.fmulti__open{
  position:absolute;right:0;top:0;bottom:0;width:38px;
  border:0;background:transparent;cursor:pointer;display:grid;place-items:center;color:var(--ink-2)}
.fmulti__chev{width:11px;height:11px;rotate:90deg;
  fill:none;stroke:currentColor;stroke-width:2.4;transition:rotate .3s var(--ease)}
.fmulti.is-open .fmulti__chev{rotate:-90deg}

/* ⚠ `position:absolute` AT HINDI SA DALOY. Sa daloy ay tinutulak ng
   panel ang lahat ng nasa ilalim niya sa tuwing bumubukas siya — at
   tumatalon ang buong porma sa ilalim ng daliri mo. Nakalutang siya
   ngayon, at walang gumagalaw.
   ⚠ `max-height` + `overflow-y` — labindalawa sila, at 12 × 36px = 432px
     ng panel sa loob ng modal na nagsi-scroll na mismo. */
.fmulti__pop{
  position:absolute;left:0;right:0;top:calc(100% - 14px);z-index:5;
  display:grid;max-height:224px;overflow-y:auto;overscroll-behavior:contain;
  padding:6px;border-radius:12px;border:1.5px solid var(--line);
  background:var(--paper);box-shadow:0 22px 40px -22px rgba(2,19,52,.5)}
.fmulti__pop[hidden]{display:none}
.fmulti__opt{display:flex;align-items:center;gap:9px;cursor:pointer;
  padding:8px 10px;border-radius:8px;
  font-size:clamp(11.4px,.9vw,13px);color:var(--navy);
  transition:background .2s var(--ease)}
@media (hover:hover){ .fmulti__opt:hover{background:rgba(59,156,255,.09)} }
.fmulti__opt input{width:15px;height:15px;flex:none;accent-color:var(--navy);padding:0;
  border-radius:4px;border:0;box-shadow:none}
.fmulti__opt input:focus{box-shadow:none}

/* ⚠⚠ SPECIFICITY TRAP, AT MATAGAL NA ITONG NARIRITO — hindi ito dala ng
   port. Sinukat sa static at sa Next: PAREHONG `display:block` ang
   nakukuha ng `.fmulti__opt` gayong `flex` ang nakasulat sa itaas.

   Ang dahilan: `<label class="fmulti__opt">` ang bawat pagpipilian, at
   nasa loob siya ng `<div class="field fmulti">`. Kaya tumatama sa kanya
   ang `.field label` — at (0,1,1) iyon samantalang (0,1,0) lang ang
   `.fmulti__opt`. ANG LABEL ANG NANANALO. Ipinapataw niya:

       display:block      -> patay ang `gap:9px` (sa flex/grid lang siya
                             may bisa), kaya NAKADIKIT ang tsek sa teksto
       font-weight:700    -> bold display font ang bawat pagpipilian,
                             mukhang pamagat sa halip na pipiliin
       font-size          -> 12.2px, hindi ang 13px na hiningi sa itaas
       margin-bottom:6px  -> lumalaki ang bawat hilera

   Ang `.field label.fmulti__opt` ay (0,2,1), kaya siya ang tumatalo.

   ⚠ HUWAG ITONG ibalik sa `.fmulti__opt` lang — babalik ang lima sa
     itaas nang sabay-sabay, at tahimik: walang error, mukha lang sirang
     listahan. */
.field label.fmulti__opt{
  display:flex;
  font-family:var(--body);font-weight:500;
  font-size:clamp(11.4px,.9vw,13px);
  margin-bottom:0;
}

/* =========================================================
   ANG PANGAKO AT ANG PINDUTAN
   ========================================================= */
.form__safe{
  display:flex;align-items:center;justify-content:center;gap:7px;
  margin:clamp(14px,1.8vw,20px) 0 clamp(12px,1.5vw,16px);
  font-size:clamp(9.6px,.78vw,11.2px);line-height:1.4;color:var(--ink-2);text-align:center}
.form__safe .ico{width:13px;height:13px;flex:none;color:#26A15B;
  fill:none;stroke:currentColor;stroke-width:1.8}
/* ⚠ MALAKING TITIK AT MALAPAD NA AGWAT ANG PINDUTAN, at nasa disenyo
   iyon. Isang pindutan lang ang buong porma; ang pagsigaw niya ay hindi
   nakikipag-agawan sa kahit ano. */
.fsend{width:100%;border-radius:99px;gap:10px;
  font-size:clamp(12px,1vw,14px);letter-spacing:.09em;text-transform:uppercase}
.fsend .ico{width:15px;height:15px}

/* =========================================================
   ANG TATLONG TATAK SA IBABA
   ========================================================= */
.ftrust{list-style:none;margin:clamp(16px,2vw,24px) 0 0;padding:0;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(6px,1vw,14px)}
.ftrust li{display:flex;align-items:center;gap:8px;min-width:0}
.ftrust .ico{width:clamp(19px,1.8vw,24px);height:clamp(19px,1.8vw,24px);flex:none;
  color:var(--navy);fill:none;stroke:currentColor;stroke-width:1.7}
.ftrust span{font-size:clamp(8.8px,.72vw,10.6px);line-height:1.32;font-weight:600;color:var(--ink-2)}

/* ---- ⚠ SA 700px PATAAS LANG ANG DALAWANG HANAY NG PILIAN ---- */
@media (max-width:479px){
  .fpick__c{padding:12px 10px}
  .fpick__ico{margin-bottom:7px}
  .ftrust{gap:5px}
  .fmodal__body{padding-left:12px;padding-right:12px}
  .form{padding:16px 14px}
}

/* =========================================================
   ANG NATITIRANG KASANGKAPAN NG PORMA
   ========================================================= */
/* Ang bitag ng bot. Hindi `display:none` — hindi pinupuno ng ilang bot
   ang hindi nire-render, at ang buong punto ay mapuno nila ito. */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
/* Nababasa ng screen reader, hindi ng mata. Dito nakasulat kung ilang
   produkto ang napili — `aria-live`, kaya naririnig ang bawat palit. */
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* ⚠ MAY LAGING PUWANG ANG MALI, KAHIT WALA. `min-height` at `opacity` —
   kung `display:none` ito, ang pagsulpot ng "Please enter your name."
   ay TUMUTULAK ng 22px sa lahat ng nasa ilalim, at gumagalaw ang buong
   porma sa ilalim ng daliri mo habang nagli-lista ka ng mali. */
.err{display:block;font-size:11.5px;color:var(--red);margin-top:5px;
  min-height:15px;opacity:0;transition:opacity .25s ease}
.field.is-bad .err{opacity:1}
.hint{display:block;font-size:11.5px;color:var(--kraft-deep);margin-top:6px;font-style:italic}
.field[data-only].is-hidden{display:none}

/* ▶ NAKA-PARKE ANG TSEKBOK NG PAHINTULOT. Wala siya sa ipinadalang
   disenyo — ang `.form__safe` na linya ang kapalit. Buhay ang CSS kaya
   isang linya lang ang pagbabalik (nakakomento sa index.html). */
.consent{display:flex;gap:11px;align-items:center;margin:4px 0 18px;font-size:13px;line-height:1.5;color:var(--navy);cursor:pointer}
.consent input{
  width:20px;height:20px;flex:none;cursor:pointer;appearance:none;-webkit-appearance:none;
  border:1.8px solid var(--line);border-radius:6px;background:#fff;
  display:grid;place-items:center;transition:background .2s ease,border-color .2s ease;
}
.consent input:checked{background:var(--red);border-color:var(--red)}
.consent input:checked::after{
  content:"";width:10px;height:5.5px;
  border-left:2.4px solid #fff;border-bottom:2.4px solid #fff;
  transform:rotate(-45deg) translate(1px,-1.5px);
}

#submitBtn.is-busy{opacity:.75;pointer-events:none}
/* ⚠ SA KANAN NA ANG ICON NGAYON (pana, hindi eroplano), kaya ang
   pangkalahatang `.btn:hover .ico{translateX(4px)}` ang tama na — dating
   nasa kaliwa siya at kailangan pa ng sariling patakaran. */

.sent{padding:clamp(34px,5vw,54px) clamp(22px,3vw,32px);text-align:center;display:grid;justify-items:center}
.sent__seal{
  width:74px;height:74px;border-radius:50%;background:var(--red);color:#fff;display:grid;place-items:center;
  box-shadow:0 16px 32px -18px rgba(217,4,41,.95);animation:pop .6s var(--back);
}
.sent__seal .ico{width:34px;height:34px}
@keyframes pop{from{transform:scale(.4);opacity:0}}
.sent h3{margin-top:20px;font-family:var(--display);font-weight:900;font-style:italic;font-size:26px;color:var(--navy);letter-spacing:-.03em}
.sent p{margin-top:10px;font-size:14.5px;line-height:1.6;color:var(--ink-2);max-width:42ch}
.sent__acts{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}


/* =========================================================
   16b. MAS MAIKLING PORMA   (Ago 20, 2026 — hiling ni Kylie)

   Reklamo #1: "the form UI it's too big — make it all fit in one view."
   Reklamo #2, pagkatapos ng unang subok: "ibalik sa size before bcs
   its not form size js dont make it too long."

   ⚠⚠ ANG UNANG SUBOK AY MALI AT ITO ANG ARAL. Para magkasya ang lahat
      sa isang tanaw ay pinalapad ko ang modal (620 -> 920px) at
      ginawang DALAWANG HANAY ang porma. Kasya nga, pero hindi naman
      laki ng modal ang reklamo — ang HABA. Ang pinalitan ko ay ang
      isang bagay na tama na.

      HINDI NA MULING PAPALAWAKIN ANG MODAL. 620px pa rin siya, at
      ISANG HANAY pa rin ang porma, gaya ng ipinadalang disenyo. Ang
      TAAS lang ang inaayos dito, at wala nang iba.

   Ang sinukat sa 1440x900:

       kahon ng modal      844px
       laman noon        1,446px      (602px ang labis)
       laman ngayon      ~1,130px     (mga 285px ang labis)

   May scroll pa rin — hindi iyon maiiwasan sa walong patlang na
   nakasalansan sa isang hanay, at hindi na iyon ang hiling. Ang hiling
   ay huwag itong masyadong mahaba, at kalahati na lang ang naiwan.

   ⚠ HINDI GINALAW ANG CELLPHONE. `min-width:700px` ang buong bloke.
     MOBILE ang mockup na pinagbatayan ng porma; doon ay tama na ang
     nakasalansan at ang nakareserbang puwang sa mali.

   Saan nanggaling ang 316px, mula sa pinakamalaki:

     1. -159px  ang `.err`. Sa base ay may `min-height:15px` siya at
                `opacity:0` — nakalaan ang puwang para HINDI tumalon
                ang porma pagdating ng mali. Sa `absolute` ay nakukuha
                ang parehong dalawa: walang nakareserba AT walang
                pagtalon. Kasama rito ang pagliit ng `margin` ng bawat
                patlang, 16px -> 14px, dahil doon na lumalapag ang mali.
     2.  -41px  ang ulo.
     3.  -37px  ang textarea.
     4.  -23px  ang dalawang pagpipilian.
     5.  -22px  ang padding ng `.fmodal__body`.
     6.  -34px  ang padding at ang guhit sa loob ng card.

   ▶ PARA IBALIK ANG DATING MAHABA: burahin ang buong bloke. Walang
     ibang bahagi ng CSS ang nakasandal dito.
   ========================================================= */

@media (min-width:700px){

  .fmodal__body{padding:clamp(20px,2.4vw,28px) clamp(16px,2.6vw,32px) clamp(14px,1.6vw,18px)}

  /* ---- ANG ULO ---- */
  .fhead{margin-bottom:clamp(12px,1.5vw,16px)}
  .fhead__kick{margin-bottom:6px}
  .fhead__title{font-size:clamp(21px,2.2vw,28px);line-height:1.14}
  .fhead__sub{margin-top:5px;line-height:1.45}

  /* ---- ANG DALAWANG PAGPIPILIAN ----
     ⚠ NANATILING PATAYO SILA — icon sa itaas, teksto sa ilalim, gaya
       ng disenyo. Ang padding sa IBABA at ang puwang sa ilalim ng icon
       lang ang binawasan. Hindi ginagalaw ang 28px sa itaas: 24px ang
       taas ng pulang tsek sa sulok, at kapag mas mababa pa riyan ay
       nagsasapawan sila ng icon. */
  .fpick{margin-bottom:clamp(11px,1.4vw,15px)}
  .fpick__c{padding-bottom:clamp(11px,1.3vw,14px)}
  .fpick__ico{margin-bottom:clamp(6px,.8vw,8px)}

  /* ---- ANG PORMA ---- */
  .form{padding:clamp(16px,1.9vw,22px)}
  .fcard__head{gap:clamp(10px,1.2vw,13px)}
  .fcard__ico{width:clamp(36px,3.1vw,42px)}
  /* 36px ang margin niya sa base — sa palibot ng 3px na guhit iyon. */
  .form .fcard__rule{margin:10px 0 13px}

  /* ⚠ ANG MALI AY `absolute` NA, AT ANG `margin` NA ITO ANG
       HINIHIGAAN NIYA. 10.5px ang titik at 1.2 ang line-height — 13.6px
       lahat. Huwag itong babaan sa 14px nang hindi pinapaliit din ang
       titik ng `.err`, dahil tatama siya sa label sa ilalim niya.
       Nahuli iyon ng pagsubok sa pagkakapatong, hindi ng mata. */
  .form .field{margin-bottom:14px}
  .form .err{
    position:absolute;left:0;right:0;top:100%;margin-top:1px;
    min-height:0;font-size:10.5px;line-height:1.2;
  }

  /* ⚠ KAILANGAN ANG `height`, HINDI SAPAT ANG `min-height`. May
       `rows="3"` ang textarea sa markup at 89px ang likas na taas
       niyon — mas mataas kaysa sa anumang mas maliit na `min-height`,
       kaya walang epekto iyon. Nananatiling `resize:vertical` siya,
       kaya kayang palakihin ng bumabasa. */
  .form .field textarea{min-height:0;height:56px}

  .form .btn{padding:14px 24px}
  .ftrust{margin-top:clamp(10px,1.2vw,13px)}
}

/* ---- MAIKLING SCREEN (laptop na 768px ang taas) ----
   ⚠ `max-height` AT HINDI `max-width`. Ang problema ay TAAS, at ang
     1366x768 ay malapad pero maikli — hindi siya nahuhuli ng anumang
     `max-width`. */
@media (min-width:700px) and (max-height:830px){
  .fmodal__body{padding:16px clamp(16px,2.2vw,26px) 12px}
  .fhead{margin-bottom:10px}
  .fhead__title{font-size:clamp(19px,1.8vw,23px)}
  .fhead__sub{margin-top:3px;font-size:11.6px}
  .fpick{margin-bottom:10px}
  .fpick__c{padding-bottom:10px}
  .fpick__ico{margin-bottom:5px}
  .form{padding:15px}
  .fcard__ico{width:34px}
  .form .fcard__rule{margin:8px 0 10px}
  .field label,.flabel{margin-bottom:4px}
  .field input,.field select,.field textarea{padding:9px 12px}
  .form .field{margin-bottom:13px}
  .form .err{font-size:10px;line-height:1.15}
  .form .field textarea{height:48px}
  .form .btn{padding:12px 22px}
  .ftrust{margin-top:9px}
}


/* ================= 17. FOOTER ================= */
.foot{background:var(--navy);color:#fff;padding:clamp(48px,7vh,80px) 0 26px;position:relative;overflow:hidden}
/* ⚠⚠ WALA NANG GUHIT ANG FOOTER (Set 2, 2026). Hiling ni Kylie:
     "make the color here plain ... remove the lines."

     `.foot::before` ito noon — pahilis na tela sa -24deg, puti sa
     3.5%, 2px na guhit kada 16px. Sinadya siyang bahagya lang, at sa
     maliit na patlang ay hindi nga siya halata. Pero ang footer ang
     PINAKAMALAKING tuloy-tuloy na navy sa buong pahina, at sa ganoon
     kalawak ay hindi na tela ang dating ng 3.5% na puti kundi banig.

   ⚠ KITA RIN SIYA SA LOOB NG BANDA NG RDR, at doon pa nga
     pinakahalata. `rgba(255,255,255,.06)` lang ang `.foot__rdr` —
     halos salamin — kaya tumatagos ang guhit mula sa likod niya.
     Isang tanggal ang nag-ayos sa dalawa; huwag nang hanapin ang
     pangalawang sanhi doon.

   ⚠ NAIWAN ANG `position:relative` AT `overflow:hidden` SA `.foot`.
     Hindi sila para sa guhit: nakasalalay sa `relative` ang
     `.foot__in`, ang `.foot__rdr` at ang `.foot__base`, at kapag
     tinanggal ay babagsak ang tatlo sa maling puwesto.

   ▶ PAGBABALIK: ibalik ang buong tuntuning ito —
       .foot::before{content:"";position:absolute;inset:0;
         background-image:repeating-linear-gradient(-24deg,
           rgba(255,255,255,.035) 0 2px,transparent 2px 16px);}      */
.foot__in{position:relative;display:grid;grid-template-columns:1.1fr 1.4fr;gap:clamp(30px,5vw,60px)}
.foot__brand p{margin-top:16px;font-size:14px;line-height:1.65;color:rgba(255,255,255,.6);max-width:42ch}
/* ⚠ `.foot__brand .foot__addr` and not just `.foot__addr`.
   This is also a `<p>` inside `.foot__brand`, and the `.foot__brand p`
   above has a specificity of (0,1,1) against (0,1,0) — its
   `margin-top:16px` and `font-size:14px` would beat mine. The same trap
   as `.figs span` before: you cannot see it by eye, but what you wrote
   never lands.

   `align-items:start` and `margin-top:3px` on the icon: the address is
   two lines in a narrow column, and at `center` the pin floats between
   the two instead of lining up with the first line. */
.foot__brand .foot__addr{
  display:flex;align-items:start;gap:9px;margin-top:14px;
  font-size:13.5px;line-height:1.55;
}
.foot__addr .ico{width:15px;height:15px;flex:none;margin-top:3px;color:var(--electric)}
.foot__addr a{color:rgba(255,255,255,.72);text-decoration:none;transition:color .25s ease}
@media (hover:hover){ .foot__addr a:hover{color:#fff;text-decoration:underline;text-underline-offset:3px} }

.foot__soc{display:flex;gap:9px;margin-top:22px}
.foot__soc a{
  width:40px;height:40px;border-radius:50%;display:grid;place-items:center;
  background:rgba(255,255,255,.09);color:#fff;transition:all .3s var(--back);
}
.foot__soc .ico{width:17px;height:17px}
@media (hover:hover){ .foot__soc a:hover{background:var(--red);transform:translateY(-4px)} }

.foot__nav{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.foot__nav h4{font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--electric);margin-bottom:14px}
.foot__nav a{display:block;font-size:14px;color:rgba(255,255,255,.65);text-decoration:none;padding:5px 0;transition:color .25s ease,padding .25s ease}
@media (hover:hover){ .foot__nav a:hover{color:#fff;padding-left:5px} }

/* ---- THE PARTNERSHIP CREDIT ----
   In the footer, not the hero. It is an acknowledgement, not a lure — but
   it is still pressable through to #story so anyone asking has an answer. */
.foot__rdr{
  position:relative;display:flex;align-items:center;gap:13px;
  width:min(1180px,100% - 44px);margin:clamp(30px,4.5vh,48px) auto 0;
  padding:13px 15px;border-radius:14px;text-decoration:none;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);
  transition:background .3s ease,border-color .3s ease,transform .3s var(--back);
}
@media (hover:hover){ .foot__rdr:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.26);transform:translateY(-2px)} }
.foot__rdr-mark{width:36px;height:36px;border-radius:9px;flex:none;display:block}
.foot__rdr span{flex:1;min-width:0;font-size:13.5px;color:rgba(255,255,255,.66);line-height:1.4}
.foot__rdr span b{color:#fff;font-weight:700}
.foot__rdr span i{display:block;margin-top:2px;font-size:12px;font-style:normal;color:var(--electric)}
.foot__rdr-go{width:16px;height:16px;flex:none;color:var(--electric);transition:transform .3s var(--back)}
@media (hover:hover){ .foot__rdr:hover .foot__rdr-go{transform:translateX(4px)} }

.foot__base{
  position:relative;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;
  margin-top:clamp(34px,5vh,54px);padding-top:20px;border-top:1px solid rgba(255,255,255,.12);
  font-size:12.5px;color:rgba(255,255,255,.5);
}


/* ================= 18. FLOATING UI ================= */

/* The "My list" dock was removed (Aug 11, 2026) — the floating button at
   the bottom right with a red count, and its panel with a − 1 + stepper
   per row. It looked like a cart, and this page is not a shop.

   `@keyframes nudge` went with it — nothing else used it.
   Everything was kept in _parked/quote-list-dock.html.txt: markup, CSS,
   JS, and the four steps back. That folder was deleted Aug 18, 2026.

   ⚠ Part of `.pitem` in section 8 was removed along with it (the
     `cursor:pointer`, the `:hover`, and the whole `.is-on`). That was in
     the same parked file — do not forget it if this is ever restored. */

/* The mobile action bar (Call / Chat / Request a Quote) that used to be
   stuck to the bottom of the screen on a phone was removed. The markup
   and the CSS were kept in _parked/mobile-bar.html, deleted Aug 18, 2026.

   ✅ THE SINGLE CTA PROMISED HERE HAS ARRIVED (Aug 13, 2026) — the
      `.ctaf` below. One button at every width, not three. */

/* ---- ⚠ BOTTOM RIGHT, AND THERE IS A REASON ----
   Three things float at the bottom of the screen:
     .totop   bottom left, 46px, z-50
     .toast   centre (`left:50%`), z-70
     .ctaf    bottom right, z-60
   Bottom right is the only one of the three that is free. Moved to the
   centre, the toast would bury it every time the form replies.

   ⚠ ALL THREE HAVE A `bottom` MEASUREMENT AND THEY DIFFER — do not make
     them match. `.ctaf` is 18px so that its centre lines up with `.totop`
     (which was 46px tall, this one is 48px) — with the same `bottom`
     they do not line up to the eye. */
.ctaf{
  position:fixed;right:20px;bottom:18px;z-index:60;
  display:inline-flex;align-items:center;gap:10px;
  padding:12px 20px 12px 12px;border-radius:999px;
  background:var(--red);color:#fff;text-decoration:none;
  font-family:var(--display);font-weight:700;font-size:14.5px;letter-spacing:-.01em;
  white-space:nowrap;
  box-shadow:0 16px 32px -14px rgba(217,4,41,.75), 0 3px 10px -4px rgba(2,19,52,.4);
  opacity:0;pointer-events:none;transform:translateY(18px) scale(.94);
  transition:opacity .4s ease,transform .5s var(--back),background .3s ease,box-shadow .3s ease;
}
.ctaf.is-on{opacity:1;pointer-events:auto;transform:none}
@media (hover:hover){ .ctaf:hover{background:#B80324;box-shadow:0 22px 40px -14px rgba(217,4,41,.85),0 4px 12px -4px rgba(2,19,52,.45)} }
.ctaf:active{transform:scale(.97)}
.ctaf:focus-visible{outline:3px solid var(--navy);outline-offset:3px}
/* A white circle inside the red — white on red is 5.25:1, so the icon is
   RED on white (5.25:1 as well, just reversed). */
.ctaf__ico{
  flex:none;width:30px;height:30px;border-radius:50%;
  display:grid;place-items:center;background:#fff;color:var(--red);
}
.ctaf__ico .ico{width:16px;height:16px}

/* ---- THE RIPPLING RING ----
   It runs once every 4.6s, and it stops once touched — it has already got
   the attention at that point, and repeated movement on something you are
   already holding is noise.
   ⚠ `::after` and `pointer-events:none` — it sits outside the button
     (`inset:-6px`) and would block the press otherwise. */
.ctaf::after{
  content:"";position:absolute;inset:-6px;border-radius:999px;
  border:2px solid rgba(217,4,41,.5);pointer-events:none;
  opacity:0;
}
.ctaf.is-on::after{animation:ctafAlon 4.6s var(--ease) 1.2s infinite}
@media (hover:hover){ .ctaf:hover::after{animation:none;opacity:0} }
@keyframes ctafAlon{
  0%   {opacity:.75;transform:scale(1)}
  55%  {opacity:0;   transform:scale(1.34)}
  100% {opacity:0;   transform:scale(1.34)}
}

/* On a narrow screen it is the icon only — its longest pill is 250px, and
   on a 360px screen that is a third of the whole width sitting on top of
   what is being read. */
@media (max-width:479px){
  .ctaf{padding:12px;gap:0}
  .ctaf__txt{
    position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);
  }
}

.totop{
  position:fixed;left:20px;bottom:20px;z-index:50;width:46px;height:46px;border-radius:50%;
  border:0;background:var(--navy);color:#fff;display:grid;place-items:center;cursor:pointer;
  box-shadow:var(--shadow-m);opacity:0;pointer-events:none;transform:translateY(14px);
  transition:opacity .35s ease,transform .35s var(--back),background .3s ease;
}
.totop.is-on{opacity:1;pointer-events:auto;transform:none}
@media (hover:hover){ .totop:hover{background:var(--red)} }
.totop .ico{width:20px;height:20px;transform:rotate(-90deg)}

.toast{
  position:fixed;left:50%;bottom:34px;translate:-50% 0;z-index:70;
  background:var(--navy);color:#fff;font-family:var(--display);font-weight:600;font-size:14px;
  padding:13px 22px;border-radius:999px;box-shadow:var(--shadow-l);
  opacity:0;pointer-events:none;transform:translateY(16px);transition:opacity .3s ease,transform .35s var(--back);
}
.toast.is-on{opacity:1;transform:none}


/* ================= 19. RESPONSIVE ================= */

/* The shrinking of `#why` is in section 10 now — two columns at 980px,
   one at 560px. This used to be a large block: the nail, the box, and the
   `order` of its six pieces all had to be undone. The box is gone, so it
   is two lines now and they live in their own section. */
@media (max-width:640px){
  .objr{grid-template-columns:1fr}
  /* A long label eats the width and the rules on either side become two
     rows. Only one rule on the right now. */
  .wy__objhead{white-space:normal}
  .wy__objhead::before{display:none}
}
/* The number is the first thing to go when space gets tight, not the CTA
   and not the nav. It is still in the drawer, in the footer, and in
   #contact — it does not leave the page, only the header. */
@media (max-width:1300px){
  .hdr__cta .lnk-call{display:none}
}
@media (max-width:1024px){
  .nav{display:none}
  .hdr__cta .lnk-call{display:none}
  .burger{display:flex}
  /* no nav here, so back to flex to stop the grid breaking apart */
  .hdr__in{display:flex}
  .hdr__cta{margin-left:auto}
  .calc,.contact,.faq{grid-template-columns:1fr}
  .sec__head{grid-template-columns:1fr}
  .carou__arw{width:clamp(52px,6vw,72px)}
  .carou__arw-ico{width:40px;height:40px}
  .carou__arw-txt{font-size:11px}
  .pcard{--kada:3}
  .prodbg{width:min(58%,420px);opacity:.13}
  .proddots{width:min(40%,300px)}
  /* entablado sa itaas, listahan sa ilalim */
  .reel{grid-template-columns:1fr;gap:18px}
  .reel__list{gap:8px}
  /* One column now, but the box is still wide here — around 900px on a
     tablet. So the diagonal split and the same image as the desktop still
     fit.

     There is little padding at the bottom here: the photo is sized with
     `cover`, so whatever the height of the box it is still full. Enlarging
     the padding would only enlarge the box for no gain. */
  .reel__panel--photo{padding-bottom:clamp(24px,6vw,64px)}
  .reel__panel--photo .reel__body{max-width:46ch}
  .supply__row{grid-template-columns:repeat(3,1fr)}
  .foot__in{grid-template-columns:1fr}
}

/* ---- THE FOUR TILES AT THEIR TIGHTEST ----
   Aug 11, 2026, so that "PRINT AVAILABLE" fits on one row.

   THIS IS THE TIGHTEST WIDTH ON THE WHOLE PAGE, and it is easy to miss
   why: THE TEXT AND THE VIDEO ARE STILL SIDE BY SIDE here (only up to
   980px before they stack), while the text column has already narrowed.
   So the four tiles have less room here than at 900px, where the text is
   already full width:

     tile width:  1280 → 103.0    (fits from here, 22px to spare)
                  1180 →  98.6
                  1100 →  91.3
                  1024 →  84.5    ← only 3.6px to spare
                   981 →  80.4    ← 0.5px SHORT
                   980 → 123.4    (the section is one column by now)

   "PRINT AVAILABLE" is 80.9px at .025em. The broken window is narrow —
   roughly 981 to 1075 — and the largest shortfall is 0.5px.

   A NEW BREAKPOINT IS NOT NEEDED FOR SOMETHING THAT SMALL. Two internal
   measurements were tightened, and it stays FOUR COLUMNS across the whole
   desktop range:
     · card side padding:      9.3px → 6px   = +6.6px per tile
     · gap between two cards: 12.8px → 8px   = +3.6px per tile
   Result at 981px: 90.6px of width for 80.9px of text — 9.7px to spare,
   no longer hanging on how the viewer's engine renders the font.

   ⚠ THE SIDES ONLY. The top and bottom padding is not touched
     (clamp(13px,1.4vw,17px)): the card's height is in a row with the
     other cards via `subgrid`, and it is only the width that falls short
     here. */
@media (min-width:981px) and (max-width:1099px){
  .figs{column-gap:8px}
  .figs li{padding-inline:6px}
}

@media (max-width:980px){
  /* The video first, then the text. That is what takes the eye, and it is
     what explains the badge above without anything being read. `order`
     does this, not new markup, so the tab order and the screen reader
     order are unchanged. */
  .feat{grid-template-columns:minmax(0,1fr);gap:clamp(26px,4vw,38px);justify-items:center}
  .feat__copy{order:2;max-width:640px}
  .tube{order:1;max-width:640px}
  .sec--feat .lead{max-width:none}
  /* `column-gap` only — each tile is a white card now, so `row-gap` would
     be space INSIDE the card (icon → number → label). Left as `gap`, the
     space inside each card reaches 30px. */
  .figs{column-gap:clamp(14px,2.4vw,22px)}
}
@media (max-width:900px){
  /* ---- THE THREE PACKAGES: A HORIZONTAL ROW ---- */
  /* This used to be a stack — `grid-template-columns:1fr` — and it added
     nearly 1,000px of scrolling on a phone for a single part. It is one
     card per view now; the finger is what moves it.

     ⚠ IT IS STILL THE SAME `.packs`, not new markup. That is exactly why
       nothing changed on a PC: at 901px and up the browser never reaches
       here and still reads a grid.

     ⚠ THE ROW HAS PADDING TOP AND BOTTOM, and that is not decoration.
       When a box is `overflow-x:auto`, CSS FORCES `overflow-y` to become
       `auto` as well — it cannot stay `visible`. Which means the row
       would cut off the card's shadow and its lift when touched. The
       padding is the space those two live in; it is subtracted again in
       `margin-top` so the gap above does not grow. */
  .packs{
    display:flex;grid-template-columns:none;
    gap:14px;overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;-ms-overflow-style:none;
    /* ⚠ 22px AT THE TOP AND NOT 12px. The selected card grows
       (`scale(1.045)` + `translateY(-8px)`) — that is about 17px above
       its own box, and the row's `overflow` cuts off anything that
       overshoots. Measured: 5px was cut at 12px. */
    margin-top:clamp(14px,2.2vh,24px);padding:22px 0 18px;
  }
  .packs::-webkit-scrollbar{display:none}
  /* The edge of the next card peeks in — THAT is what says there is more,
     before the dots underneath are even noticed. At full width there
     would be no visible reason to swipe.

     ⚠ THERE IS A MAXIMUM (360px), and that is not decoration. It used to
       say only 87%, and on a tablet (768–900px) a single card became
       617–732px wide while only 340px tall — a plaque lying down with
       four ticks in the middle of nothing. With this cap, a tablet shows
       two and a bit and a phone still shows one, all under a single
       rule. */
  .pack{flex:0 0 min(87%,360px);scroll-snap-align:center}
  /* ⚠ THE CARD DOES NOT RISE HERE — IT ONLY APPEARS. `[data-reveal]` has
     a 22px downward push before anything appears; in a row with
     `overflow` those 22 DO NOT fit (368px inside, 340 of card + 28 of
     padding), so the bottom of the card is clipped while it rises.
     Measured: 6px was cut.

     The contents keep their full stagger — badge, icon, rule, ticks — so
     no life was lost, only the movement of the whole box was removed. */
  .pack[data-reveal]{transform:none}

  /* ⚠ THERE ARE NO CONTROLS HERE ANY MORE. This used to be the entire
     appearance of the arrow-and-dot row (`.packs__nav`) because that was
     phone-only. The arrows are inside the card itself now (`.pack__nav`,
     section 12) and at every width — there is no measurement left that
     needs to differ here. */

  .stats{grid-template-columns:repeat(2,1fr)}

  .story__acts .btn{flex:1 1 220px}

  /* ---- the product card: stacked now, image on top ---- */
  /* ---- group header: the image drops to the top ---- */
  .slide__top{grid-template-columns:1fr;gap:16px}
  .slide__shot{aspect-ratio:16/6}
  .slide__shot svg{width:auto;height:90%}
  .slide__tags{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* two and a half per view — the half is deliberate, that is what says
     there is more at the side */
  .pcard{--kada:2.5}

  /* ---- bottom band: text on top, buttons underneath ---- */
  .hunt{grid-template-columns:auto minmax(0,1fr);row-gap:15px}
  .hunt__act{grid-column:1 / -1}
  .hunt__act .btn{flex:1;justify-content:center}
}
@media (max-width:820px){
  .prop{left:var(--ml,var(--l));top:var(--mt,var(--t))}
  .prop[data-mobile="off"]{display:none}

  .segs__tabs{overflow-x:auto;flex-wrap:nowrap}
  .segtab{flex:0 0 auto}
  /* The bottom of the two floating controls used to be at 82px so the
     mobile action bar would not cover them. That is gone, so they have
     come down to the edge itself. The same for the bottom of the footer:
     the old padding was 96px, purely for that bar.

     ⚠ THERE IS ONLY ONE OF THEM NOW. `.dock` used to be here too — the
       "My list" in the right corner. That is gone (Aug 11, 2026); the
       line removed here went with _parked/, deleted Aug 18, 2026. */
  .totop{left:14px;bottom:14px;width:42px;height:42px}
  /* ⚠ `10px` AND NOT `14px`. `.totop` shrinks here (46 → 42) but `.ctaf`
     does not (still 51), so with the same `bottom` their centres would be
     4.5px out. 10px is the exact compensation: 10 + 51/2 = 35.5 against
     14 + 42/2 = 35. */
  .ctaf{bottom:10px}
  /* The toast is centred and the remaining control is in the left corner —
     at 34px (the desktop size) they would overlap on a narrow screen. So
     this sits above it. */
  .toast{bottom:74px}
}
/* ================= THE BOX IN #about, ON A PHONE =================
   The box should not eat the whole screen. When a reader arrives here they
   should see the box above and some of the list below at the same time —
   that is what says there is more to follow.

   Two things are done: the inside of the box is compressed (smaller icon,
   shorter line height), and the photo's space is reduced. The box goes
   from around 590px to around 400px.

   This is also where it switches to the portrait version of the image,
   because this is the only place the box becomes portrait. ============= */
@media (max-width:560px){
  .reel__stage{padding:20px}
  .reel__ico{width:44px;height:44px;border-radius:12px;margin-bottom:13px}
  .reel__ico svg{width:24px;height:24px}
  .reel__big{font-size:23px}
  .reel__body{margin-top:11px;font-size:14px;line-height:1.55}
  .reel__tag{margin-top:13px;padding:6px 12px;font-size:11px}
  .reel__panel--photo{padding-bottom:clamp(104px,27vw,152px)}

  /* ---- controls inside the box ----
     The count at the top right, the button at the bottom right. They are
     placed there because those two corners are free: the icon and the
     text are on the left, and the content of the photo is bottom centre.

     The old vertical list of numbers is gone — that sat in the middle of
     the edge, exactly where the text reaches. */
  .reel__nav{display:block;position:absolute;inset:0;z-index:4;pointer-events:none}
  .reel__count{
    position:absolute;top:19px;right:16px;pointer-events:auto;
    display:flex;align-items:baseline;gap:1px;
    font-family:var(--display);font-weight:800;font-style:italic;
    line-height:1;letter-spacing:-.01em;
  }
  .reel__count b{font-size:15px;color:var(--red)}
  .reel__count i{font-size:11px;font-style:italic;color:rgba(31,66,128,.34)}
  .reel__adv{
    appearance:none;border:0;padding:0;cursor:pointer;pointer-events:auto;
    position:absolute;right:13px;bottom:13px;
    display:grid;place-items:center;width:38px;height:38px;border-radius:50%;
    background:var(--navy);color:#fff;
    box-shadow:0 10px 18px -8px rgba(31,66,128,.95);
    transition:transform .25s var(--back);
  }
  .reel__adv:active{transform:scale(.9)}
  .reel__adv svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2}

  .reel__bg{--pos:50% 100%}
  .reel__bg--warehouse{--photo:url('../img/warehouse-tall.jpg')}
  .reel__bg--team     {--photo:url('../img/team-tall.jpg')}
  .reel__bg--truck    {--photo:url('../img/truck-tall.jpg')}
  .reel__bg--office   {--photo:url('../img/office-tall.jpg')}
  .reel__bg--delivery {--photo:url('../img/delivery-tall.jpg')}
  .reel__bg--dealer   {--photo:url('../img/dealer-tall.jpg')}
  /* the break runs downward here, not diagonally: full-width text */
  .reel__bg::after{
    background:
      radial-gradient(120% 44% at 50% 104%,
        rgba(31,66,128,.20) 0%, rgba(31,66,128,.07) 48%, transparent 78%),
      linear-gradient(184deg,
        rgba(238,244,251,.945)  0%,
        rgba(236,242,251,.925) 38%,
        rgba(238,240,250,.870) 54%,
        rgba(245,239,235,.620) 64%,
        rgba(251,239,226,.240) 74%,
        rgba(255,243,229,.070) 86%,
        rgba(255,248,238,.020) 100%);
  }
}

@media (max-width:640px){
  /* ---- the logo and the truck in the hero ----
     The truck only passes through and is not in the flow, so the logo has
     the full width available — it is larger here than it used to be.

     ⚠ THREE THINGS WERE CHANGED HERE (Aug 10, 2026), all measured at 390px.

     1. A BIGGER TRUCK. It was 117px against a 296px logo — 39%, whereas
        on desktop it is 47%. At that size the shape stopped reading:
        what you saw was not a truck but a cluster of boxes. It is 156px
        now (53%), and 85px tall against the 99px logo — it covers 86% of
        the height of the letters, so the truck really does hide the edge
        of the wipe, which is the whole point.

     2. A CLOSER START. The distance used to be 118vw. At 390px that is
        460px, and the truck spent 1.40s of the 3.85s show simply ARRIVING
        from off-screen — nothing happening on screen for all that time.
        It is 74vw now: the SMALLEST value at which the truck is still not
        visible in the first frame — at 70vw and below its nose is already
        peeking in at the right edge before it sets off.

     3. SHORTER. 3.4s → 1.9s. The wordmark is whole at 1.93s, previously
        2.90s. That matters: the wordmark is the LARGEST thing in the
        first view, and it is hidden by the mask until the wipe finishes.
        The middle of the hero used to be blank for nearly three seconds
        on a phone. The name now also comes before the badge (2.42s) and
        the tagline (2.72s) — they no longer chase each other. */
  .rig{width:clamp(132px,40vw,190px);--span:74vw;
       animation-duration:1.9s;animation-delay:.3s}
  .logo{width:clamp(220px,76vw,420px)}
  .mark img{height:28px}

  /* ---- the badge and the two buttons on a phone ----
     The badge text is still whole — "Recommended by Boss RDR" fits at
     11.5px even at 360px. Only the size is reduced, no word is
     lost. */
  .rec{padding:5px 8px 5px 5px;gap:8px}
  .rec__pic{width:30px;height:30px}
  .rec__stars svg{width:10px;height:10px}
  .rec__txt{font-size:11px}

  .tube__frame{border-radius:13px;box-shadow:0 24px 46px -24px rgba(15,38,86,.55), 0 3px 10px -6px rgba(15,38,86,.25)}
  /* The bar holds three separate pieces of text (the "Featured in", the
     name, and the quote). At narrow widths they break apart one by one,
     so it reads as three rows instead of one sentence. Smaller type and
     an unbreakable name are what fix it. */
  .tube__quote{font-size:10.5px;letter-spacing:.04em;padding:10px 13px;gap:8px}
  .tube__quote b{white-space:nowrap}
  .feat__acts .btn{flex:1 1 100%}
  /* SUBGRID IS RELEASED HERE. In two columns two BANDS of cards appear,
     and the grid has only one `row-gap`: the space BETWEEN the two bands
     would be as tight as the space INSIDE the card (9px), so the two rows
     of cards would touch. Each card is its own grid here. The four
     values are short at this width anyway, so no alignment is lost. */
  .figs{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;gap:14px}
  .figs li{grid-row:auto;grid-template-rows:auto auto auto;row-gap:8px}
  .hacts{gap:8px}
  .hacts .btn{padding:11px 16px;font-size:12.5px}
  .hacts .btn .ico{display:none}

  /* The lockup is one column — two names and the hand do not fit at 390px
     without cramping the text. */
  .lock{flex-direction:column;gap:12px}

  /* ---- the GROUP carousel on a phone ----
     The card is full width now, and the two arrows drop down beside the
     dots. There is no side margin at this width, and putting the arrow on
     top of the card would cover the text. */
  .prodbg{width:82%;opacity:.12}
  .proddots{width:56%;opacity:.75}
  .carou__stage{
    grid-template-areas:"win win win" "prev dots next";
    column-gap:12px;row-gap:15px;
  }
  /* The arrow is only a circle here — there is no width for "Previous
     Category". The full name is still in the `aria-label`. */
  .carou__arw{width:auto}
  .carou__arw-ico{width:42px;height:42px}
  .carou__arw-txt{display:none}
  .carou__dots{gap:11px}

  .slide{padding:15px 14px 17px}
  .slide__head h3{font-size:19px}
  .slide__desc{margin-top:10px;font-size:13.2px}
  .slide__tags{gap:6px;margin-top:12px}
  .ptag{padding:5px 9px;font-size:10.6px}

  /* ---- product row on a phone ----
     One and a half cards fit — the half is deliberate: that is what says
     there is more at the side. The count and the rule are at the top, and
     the two buttons are at the bottom, side by side at half width each —
     large targets for a thumb. */
  .pcard{--kada:1.45}
  .pcarou__bar{
    grid-template-columns:1fr 1fr;
    grid-template-areas:"mid mid" "prev next";
    gap:11px;margin-top:14px;
  }
  .pcarou__mid{grid-area:mid}
  .pcarou__arw{padding:12px 14px;font-size:13.5px}
  .pcarou__arw[data-step="-1"]{grid-area:prev;justify-content:center}
  .pcarou__arw[data-step="1"]{grid-area:next;justify-content:center}
  .pcarou__no{font-size:11.5px}

  /* ---- banda sa ibaba ---- */
  .hunt{grid-template-columns:1fr;row-gap:13px;text-align:left}
  .hunt__act{grid-column:auto}
  .hunt__act .btn{width:100%;flex:none}

  .supply__row{grid-template-columns:repeat(2,1fr)}
  .reel__row{padding:13px 14px;gap:12px}
  .reel__d{font-size:12.5px}
  /* ⚠ WALA NANG `.frow{grid-template-columns:1fr}` DITO (Ago 19, 2026).
     Naisulat siya noong ang `.frow` ay ang pangalan + ang numero, at
     tama noon na magsalansan sila. Sa ipinadalang disenyo ay MAGKATABI
     ANG NUMERO AT ANG EMAIL PATI SA CELLPHONE, at ang linyang ito ang
     tahimik na pumapatay niyon — nakasulat siya 750 linya sa ilalim ng
     `.frow` mismo, kaya siya ang panalo. */
  .tiers{grid-template-columns:1fr 1fr}
  .foot__nav{grid-template-columns:1fr 1fr}
  .deal__count div{min-width:0;flex:1;padding:10px 4px}
  .deal__count b{font-size:22px}
}
@media (max-width:520px){
  .icons{gap:7px}
  .ic{width:32px}
  .tag{font-size:clamp(14px,4.2vw,20px)}
  /* on a small screen the mobile action bar carries the quote CTA —
     this is removed so the logo and the burger fit on one line */
  .hdr__cta .btn--red{display:none}
  .hdr__in{padding:0 6px 0 14px;gap:12px}
  .mark{font-size:17px}
  .btn{padding:13px 20px;font-size:14px}
  .calc__out{grid-template-columns:1fr}
  .stats{grid-template-columns:1fr 1fr}
  /* The old `.intro__copy` is dead — the class is `.intro__head` now, so
     this never matched and the headline stayed at 28px even on a 320px
     screen. */
  .intro__head .h2{font-size:clamp(23px,6.4vw,28px)}
}


/* ================= 19b. TAP TARGET SIZES ON A PHONE =================

   MEASURED at 360px and 390px, in the FINAL state of every animation (CSS
   animations do not advance under `--virtual-time-budget`, so what gets
   measured is half size unless it is forced). These are the ones under 44px:

       .add                 28×28  ×12   ← the worst
       .carou__dots button  10×10  ×3
       .ic                  32×32  ×5
       .reel__adv           38×38
       .mark                84×28  ×2
       .foot__nav a        153×27  ×14
       .calc__range        287×8         ← only 8px to hold on to
       .consent input       19×19
       .tube__yt           177×37

   THE STANDARD: 44×44 (Apple HIG) — Android says 48dp. WCAG 2.5.8 is only
   24×24, and everything above already passes that; it is not a good enough
   reason. A finger uses this, not a cursor.

   THE METHOD: what is VISIBLE is not enlarged, what is REACHABLE is — an
   empty `::after` that extends past the edge. It looks exactly the same,
   and 44px is now reachable. Only `.ic` and the dots genuinely grew, and
   that was deliberate: they were too small to the eye.

   NOT INCLUDED:
     · `#why div>p>a` (17px) — these links sit inside a sentence. WCAG has
       an explicit exception for inline links, and padding would wreck the
       line spacing.
     · `.hp label input` — that is a spam trap, not for a person.
     · `.consent input` — it is wrapped in a `<label>`, so the whole
       sentence is pressable. This is only 22px for a direct press. */
@media (max-width:640px){

  /* ---- "+ Add" sa product card ---- */
  /* 28+8+8 = 44. Its edge ends three pixels from the edge of the card, so
     it does not reach the neighbouring card in the carousel. */
  .add::after{content:"";position:absolute;inset:-8px;border-radius:50%}

  /* ---- carousel dots ---- */
  /* This is the only one `::after` cannot fix on its own: the dot is 10px
     and the gap is 11px, so the centres are 21px apart — widened to 44px,
     two neighbours would overlap and the wrong one would be hit. So the
     gap came first: 20px, making the centres 32px apart. */
  .carou__dots{gap:20px}
  .carou__dots button{width:12px;height:12px}
  .carou__dots button::before{content:"";position:absolute;inset:-16px -10px}

  /* ---- the five social icons in the hero ---- */
  /* This is a genuine enlargement. 32px is small to the eye and small to
     the finger. 5×42 + 4×8 = 242px, which fits the 345px of content at 360px. */
  .ic{width:42px}

  .reel__adv{width:44px;height:44px}
  .tube__yt{min-height:44px}
  /* The two hero buttons are 40px. They are the first thing a visitor
     presses on a phone — they should be the last to fall short. Only the
     height was increased: 138×2 + 8 = 284px, still within 345px of content. */
  .hacts .btn{min-height:44px}

  /* ---- the logo in the header and in the footer ---- */
  .mark{position:relative}
  .mark::after{content:"";position:absolute;inset:-8px -6px}

  /* ---- link sa footer ---- */
  /* `min-height` and not padding: `padding-left` still holds the movement
     on hover, and it is not disturbed. */
  .foot__nav a{min-height:44px;display:flex;align-items:center;padding:4px 0}

  /* ⚠ BOSS RDR'S QUOTE USED TO BE HERE — `.pull{…}` and
     `.pull__pic{width:118px}`. REMOVED (Aug 10, 2026).

     That is what shrank the photo to 118px on a phone, and it beat the
     new arrangement in section 7b (full width, a 16/9 crop) because it
     comes later in the file. Measured: the photo came out at 118×66 with
     only a 24px face, where it should be 346×195 with a 73px face. All
     the phone handling is in 7b now — do not add anything new here. */

  /* ---- the calculator slider ---- */
  /* The input is only 8px tall, so there are only 8px to grab — nearly
     impossible with a finger. The box is 44px now, but the VISIBLE track
     is still 8px: the gradient was moved onto
     `::-webkit-slider-runnable-track`. The pseudo-element inherits
     `--fill`, so the JS still works with nothing changed.

     -9px = (8 − 26) ÷ 2 — centring the 26px handle on the 8px track.
     Firefox centres it on its own, so only the track is set there. */
  .calc__range{height:44px;background:none}
  .calc__range::-webkit-slider-runnable-track{
    height:8px;border-radius:99px;
    background:linear-gradient(90deg,var(--red) var(--fill,5%),var(--gray-soft) var(--fill,5%));
  }
  .calc__range::-webkit-slider-thumb{margin-top:-9px}
  .calc__range::-moz-range-track{
    height:8px;border-radius:99px;
    background:linear-gradient(90deg,var(--red) var(--fill,5%),var(--gray-soft) var(--fill,5%));
  }

  .consent input{width:22px;height:22px}
}


/* ================= 20. REDUCED MOTION ================= */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .bg,.tag,.cue,.rec,.hacts{opacity:1}
  /* Six seconds of unbroken floating on the video — that is exactly the
     kind of movement forbidden here. Every hover stays: those have a
     limit and the user is the one who starts them. */
  .tube__frame,.tube__glow,.tube__base,.featbg::before{animation:none}
  .tube__glow{opacity:.85}
  /* The entire living background of #story. They return to rest — not
     removed, simply not moving. No JS runs there either (section 1d
     returns immediately), so there is no need to undo the custom
     properties. */
  .featbg__pulse,.mote{animation:none}
  /* ⚠ ANG MODAL NG PRODUKTO. Nananatiling NAKIKITA ang lahat — ang
     pagdating-nang-sunod-sunod lang ang inaalis.
     BINABAWASAN NG `.01ms` SA ITAAS ANG TAGAL, HINDI ANG DELAY. May
     delay na hanggang .6s ang chip at ang tatak; kung wala ang linyang
     ito ay SUSULPOT pa rin sila nang isa-isa sa loob ng halos isang
     segundo — walang galaw, pero may kurap. Parehong bitag ng
     `transition-delay` sa #proof sa ibaba. */
  .pmodal__shot img,.pmodal__thumbs li,.pmodal__kick,.pmodal__name,
  .pmodal__rule,.pmodal__desc,
  .pmodal__facts li,.pmodal__foot{animation-delay:0s!important}
  /* #interview. Everything stays VISIBLE — the stroke is whole
     immediately instead of being drawn, and the icons do not rise.
     `--haba` is still written by section 4f even here: the correct
     `dasharray` is still needed so the stroke has no gaps. */
  .hl2__u path,.ribbon path{stroke-dashoffset:0!important;transition:none}
  /* The tape behind stays visible — it simply does not move. */
  .ivtape{animation:none}
  .iq::after,.finds h3::after{transform:none;transition:none}
  /* The whole stagger of the quote cards. Everything is seen at once —
     no curtain, nothing rising, no growing rule. */
  .finds li.is-in .finds__ico,.pull.is-in .pull__mark,
  .pull.is-in .pull__pic::after,.pull.is-in blockquote,
  .pull.is-in .pull__dots,.pull.is-in .pull__who b,
  .pull.is-in .pull__who span{animation:none}
  .pull__who::before{transform:none;transition:none}
  .pull__pic img{translate:none}
  @media (hover:hover){ .pull:hover .pull__body::after{animation:none;opacity:0} .finds li:hover .finds__ico::after{animation:none} }
  /* The colour thread atop the card is whole at once — it does not widen. */
  .finds li::after{transform:none;transition:none}
  .ibar.is-in::after{animation:none;opacity:0}
  .rec__stars svg{animation:none;opacity:1;scale:1;rotate:0deg}
  /* The two new attention-getters. THE BUTTON STAYS — only the repeating
     movement is removed, not the CTA.
     ⚠ The `.01ms` at the top of the block is not enough: both are
       `infinite`, so the result is thousands of cycles a second, not a stop. */
  .btn--red::after{animation:none;opacity:0}
  .ctaf.is-on::after{animation:none;opacity:0}
  .ctaf{transform:none}
  .tube{transform:none}
  /* The truck only passes through and has no resting position, so with
     no movement it has nothing to show — left in the middle it would
     land on top of the logo. The logo is the content of this part. */
  .rig{display:none}
  .logo{-webkit-mask-image:none;mask-image:none}
  .prop{opacity:1;transform:rotate(var(--r))}
  .streaks{opacity:.32}
  .ic{opacity:1;transform:none}
  [data-reveal]{opacity:1;transform:none}
  .hl{background-size:100% .24em}
  /* No sliding on the carousel — an immediate swap. The departing slide
     has to disappear at once too, otherwise it stays visible for .55s
     while there is no visible transition at all. */
  .slide{transition-delay:0s}
  /* The same for the product row: it simply jumps to the next four
     instead of sliding. */
  .pcarou__rail{scroll-behavior:auto}
  /* The package row on a phone. It jumps as well — `behavior:'auto'` is
     in the JS (section 9e), this one is for the swipe itself.
     `scroll-snap` stays: that is not movement, that is position. */
  .packs{scroll-behavior:auto}
  .pack__arrow{transition:none}
  /* The process: an immediate swap, with no panel sliding.
     ⚠ `visibility` IS STILL NEEDED HERE. The `.01ms` at the top of the
       block cuts the duration, but `visibility` is `0s .5s` and that
       DELAY is not reduced — without writing this, the step being left
       behind stays visible for half a second underneath the new one. */
  .flow.is-live .flow__pane{transform:none;transition:opacity .01ms,visibility 0s}
  .flow.is-live .flow__pane.is-past{transform:none}
  .flow.is-live .flow__pane.is-on{transform:none;transition:opacity .01ms,visibility 0s}
  .flow__seg i{transition:none}
  /* ⚠ THE FOUR `transition-delay`s ARE THE REAL DANGER HERE. They are not
     reduced by the `.01ms` at the top of the block — that is duration and
     not delay. Without writing this there is a quarter of a second of
     empty box at every step, and that is precisely the kind of waiting
     being avoided here. */
  .flow.is-live .flow__pane > :not(.flow__mark),
  .flow.is-live .flow__pane.is-on > :not(.flow__mark),
  .flow.is-live .flow__pane .flow__ico,
  .flow.is-live .flow__pane.is-on .flow__ico{transform:none;transition-delay:0s}
  /* The number behind and the glow stay — they simply do not travel.
     They are still seen, only quiet. */
  .flow__mark,.flow.is-live .flow__pane.is-past .flow__mark{transform:none;transition:none}
  .flow::before{transition:none}
  /* The whole background of #process. They stay VISIBLE — they simply do
     not move, as was done in #products and in #dealership.
     ⚠ THE RUNNING LIGHT is not merely switched off: the dash has to be
       OPENED as well, otherwise it is left as a fixed red blot in the
       middle of the route — more startling than the movement was. */
  .prcglow i,.prcdots{animation:none}
  .prcroute__run{animation:none;stroke-dasharray:none;opacity:0}
  /* ---- #products ----
     There are two unbroken movements here, and that is exactly the kind
     of movement forbidden here: the three lights behind and the crawl of
     the dots. They stay VISIBLE — they simply do not move. */
  .prodglow i,.proddots,.prodgrid{animation:none}
  /* The dots behind #proof — the same `pdrift` as #products.
     The background stays VISIBLE; only the movement is removed. */
  .proofbg__dots{animation:none}
  /* ⚠ ANG EKSENA NG #proof. NANANATILING NAKIKITA ANG LAHAT — ang
     paggalaw lang ang inaalis.
     • `animation:none` sa paglutang at sa singsing: `infinite` sila at
       hindi sila napapatay ng `.01ms`.
     • `transition-delay:0s` sa limang card, sa featured, sa pangako at
       sa apat na naka-parkeng highlight: BINABAWASAN NG `.01ms` ANG
       TAGAL, HINDI ANG DELAY — kung wala ito ay SUSULPOT pa rin sila
       nang sunud-sunod sa loob ng halos isang segundo: walang galaw,
       pero may kurap.
     • BUO AGAD ANG LIMANG BAR ng rating. Ang haba ang datos dito, at
       ang datos ay hindi dapat dumarating nang unti-unti kung ayaw mo
       ng galaw — kaya `transition:none` at hindi `0s` na delay.
     • ang guhit sa ilalim ng "Real trust." ay buo agad, hindi iginuguhit. */
  .rvstage.is-in .rev > *{animation:none}
  .rvstage.is-in .rvpop::after{animation:none;opacity:0}
  .rvstage.is-in .rev,.rvstage.is-in .rvbig,.rvstage.is-in .rvpromise,
  .rvfeat li[data-reveal],.rvstage.is-in .rvpop{transition-delay:0s}
  .rvbars__t i{transition:none}
  .rvhi__u path{transition:none;stroke-dashoffset:0}
  /* The whole background of #dealership. They stay VISIBLE — they simply
     do not move. The rotating focus across the three packages no longer
     runs (section 9b of main.js, `if(reduce) return`), so there is no
     `.is-lit` to remove here. */
  .dealwave path,.dealdots{animation:none}
  /* Section 9c no longer writes `--px`/`--py` here, but the `transition`
     is the remaining danger: if a value was written before the setting
     was turned on, there is still one slide left. */
  .dealbg,.dealwave,.dealdots{transition:none;translate:none}
  .deallight{display:none}
  .pack.is-in .ticks li{animation:none}
  /* ⚠ THE `animation-duration:.01ms` AT THE TOP OF THE BLOCK IS NOT ENOUGH.
     It does not reduce `animation-delay`, and five of them have
     `backwards` — so they stay locked in the FIRST keyframe (opacity 0,
     rotated, scaleX 0) until the delay is over. The badge, the icon and
     the rule would vanish for half a second.
     `animation:none` is the only correct answer here. */
  .pack.is-in .pack__ico,
  .pack.is-in .pack__rule{animation:none}
  /* The focus on the selected card stays — that is colour and not
     movement — but there is no sliding growth and no tab gliding
     across.

     ⚠ THE FAN STAYS, ONLY THE SLIDING GOES. The position of the three
       cards is APPEARANCE and not movement: remove the `transform` here
       and the three stack into one box with only a single card
       readable. `transition:none` is the right cure — the card goes
       straight to its new position on every press, with no sliding.
       That includes the `z-index` delay, which is not needed once there
       is no transition to cover. */
  /* ⚠ INCLUDING THE `::after`. The `.pack` in the list does NOT reach
     that — as far as the CSS is concerned it is its own element, with
     its own `transition:opacity` (the fabric in the corner that
     brightens when selected). */
  .pack,.pack::after,
  .pack__tab,.pack__ico,.pack__rule,.pack .ticks .ico{transition:none}
  .ribbon--deal path{transition:none;stroke-dashoffset:0}
  /* ---- #social ----
     ⚠ THE FLOATING OF THE FOUR REACTIONS IS THE MAIN THING TO REMOVE
       HERE. It is the only UNBROKEN movement in the section — it runs
       forever even when the visitor is doing nothing, and that is
       exactly the kind of movement this setting forbids. They stay
       VISIBLE in their final positions; they simply do not move.

     ⚠ THE PHONE'S ROTATION STAYS. That is appearance and not movement —
       it is merely rotated and fixed. What is removed is the
       `transition`, so it no longer glides after the mouse; the JS does
       not write it either, because the guard there is `if(reduce)`.

     ⚠ THE COUNT STILL RUNS BUT WITHOUT COUNTING UP — that decision is in
       the JS (`if(reduce){ sulat(el, tungo); return; }`): straight to
       1.8K, with no numbers passing by. */
  .fbre{animation:none}
  .fbb__stage.is-in .fbre{animation:none}
  .fbb__stage.is-in .fbui__cover,
  .fbb__stage.is-in .fbui__pic,
  .fbb__stage.is-in .fbui__name,
  .fbb__stage.is-in .fbui__meta,
  .fbb__stage.is-in .fbui__acts,
  .fbb__stage.is-in .fbui__likes,
  .fbb__stage.is-in .fbui__tabs,
  .fbb__stage.is-in .fbui__post{animation:none}
  @media (hover:hover){ .fbb__cta:hover .fbb__shine{animation:none} }
  .fbph,.fbb__cta,.fbb__ctaico,.fbb__ctaarrow,.fbb__chip,.fbb__eyerule,.fbre{transition:none}
  .fbb__eyerule{transform:scaleX(1)}
  /* ---- #why ----
     Only two movements are left here: the four cards rising on first
     sight (`[data-reveal]`) and the slight lift on hover. Both are
     already undone — the first by the `[data-reveal]` rule directly
     above this block, the second by section 10's own
     `prefers-reduced-motion`.

     THERE USED TO BE A 3D CARTON HERE, and undoing it took nearly forty
     lines: the nail, the six pieces of the box, and their `order`. That
     is gone (Aug 12, 2026) — there is nothing left to undo. */
  /* ⚠ THE `animation-duration:.01ms` ABOVE IS NOT ENOUGH FOR THIS, and it
     is the easiest mistake in the whole file. The `*` rule forces the
     DURATION and the ITERATIONS — not the DELAY. The 23 names have an
     `animation-delay` of up to .70s and a `backwards` fill, and what
     `backwards` means is that it holds the first keyframe (opacity 0)
     WHILE IT WAITS. So at a `.01ms` duration they are invisible for
     .70s — worse than the animation itself. `animation:none` is the
     only answer. */
  .pcat.is-in .pcat__list > li{animation:none}
  /* The arrival, then: everything is in its correct position at once.
     The movement of the two arcs and the two words has to be undone
     explicitly — they do not fall under `[data-reveal]{transform:none}`
     above, because they have their own stronger rule. */
  .pband__arc{animation:none}
  .pband__h span{opacity:1;transform:none}
}


/* =====================================================================
   ANG CELLPHONE                                        (Set 9, 2026)

   Ulat ni Kylie: "kahapon kasi sa phone para syang may bug every time
   na isscroll ko sya."  Dalawa palang bagay iyon, at magkaiba sila.

   ── 1. ANG DUMIDIKIT NA HOVER ────────────────────────────────────
   Ito ang "may bug". Sinukat sa inaarteng cellphone: pagkatapos
   bitawan ang "See our products" —
        hover: true    transform: matrix(1,0,0,1,0,-3)
   Nakaangat ang pindutan at NANDOON SIYA hanggang may mapindot kang
   ibang bagay. Wala kasing hover ang daliri: ipinapatong ng browser
   ang `:hover` sa pinindot at hindi na ito inaalis.

   MAY 151 NA TUNTUNING `:hover` ANG FILE NA ITO, at 92 sa kanila ang
   gumagalaw ng `transform`, `filter` o `box-shadow`. Bawat pindot ay
   nag-iiwan ng isang bagay na nakaangat o may anino.

   Nasa loob na sila ngayon ng `@media (hover:hover)` — sa PC lang
   sila tumatakbo. Hindi ito ginawa nang kamay: postcss ang naghati.
   ⚠ HINATI, HINDI BINALOT NANG BUO. May 29 na tuntuning pinagsasama
     ang `:hover` at ang `:focus-visible` / `:focus-within` /
     `.is-active`. Kung binalot nang buo ang mga iyon ay mamamatay ang
     FOCUS sa cellphone — at iyon mismo ang paraan ng daliri at ng
     keyboard. Ang bahaging may `:hover` lang ang pumasok.

   ── 2. ANG PALIGID NA GUMAGALAW NANG WALANG NAKAKAKITA ────────────
   Sinukat nang A/B sa LOOB ng iisang pagkakarga (tatlong pares, para
   hindi makialam ang pabago-bagong bilis ng makina):

        may animation   49.5  54.1  69.7 ms kada frame
        wala            38.0  42.9  34.3 ms

   Hindi lang siya mas mabagal — LUMALALA SIYA HABANG TUMATAGAL
   (49.5 -> 69.7) samantalang patag ang wala (38 -> 34). Iyon ang
   naramdaman mong unti-unting sumasama habang nag-iscroll.

   ⚠ HINDI ANG `blur` ANG SALARIN, KAHIT SIYA ANG UNANG HINALA. Nang
     patayin ang lahat ng `filter` ay bahagya lang gumanda; nang
     patayin ang mga animation ay bumagsak ang mahabang gawain mula
     1342 papuntang 66. Mura ang blur na naipinta na — MAHAL siya
     kapag may gumagalaw sa ibabaw niya at napipilitan siyang
     magpinta ulit kada frame. Ang animation ang nagpapamahal sa blur,
     hindi ang blur sa sarili niya.

   ⚠ ANG NAKIKITA AY HINDI GINALAW. Nandiyan pa rin ang marquee ng
     mga logo, ang paglitaw ng bawat seksyon, ang telepono sa #social
     at ang tatak ng logo. Ang tinanggal ay ang HINDI MO NAKIKITA sa
     390px: ang 26 segundong paggalaw ng liwanag sa likod, ang
     alikabok sa hero, ang tuldok na dumadaloy sa likod ng produkto.

   ▶ PAGBABALIK: burahin ang buong bloke. Walang ibang file na
     hahawakan — walang JS na nakikialam dito.
   ===================================================================== */
@media (hover:none){

  /* ---- ang paligid ay huminto ---- */
  .pool::before,.pool::after,
  .featbg::before,.featbg__pulse,
  .mote,.ivtape,
  .proddots,.prodgrid,.prodglow i,
  .prcglow i,.prcdots,.prcroute__run,
  .dealwave path,.dealdots,
  .proofbg__dots,
  .specks i,.streak{animation:none}

  /* ---- ang pindot ay may sariling sagot ---- */
  /* ⚠ KAILANGAN ITO DAHIL SA #1 SA ITAAS. Nawala ang hover sa
     cellphone, kaya kung walang ipapalit ay PATAY ang pakiramdam ng
     bawat pindutan. Ang `:active` ang tunay na katumbas ng hover sa
     daliri — habang nakadiin siya.
     ⚠ PABABA AT PALIIT, hindi paangat. Diin ito, hindi paglapit. */
  .btn:active{
    transform:translateY(1px) scale(.978);
    box-shadow:0 3px 10px -8px rgba(31,66,128,.5);
  }

  /* ⚠ ANG KULAY-ABONG KISLAP NG ANDROID. Parisukat siya at hindi
     sumusunod sa `border-radius`, kaya sa isang pill na pindutan ay
     may lumilitaw na kahon sa likod — mukha talaga siyang sira.
     Pinapalitan siya ng `:active` sa itaas; hindi siya inaalis nang
     walang kapalit. */
  a,button,summary,label,[role="button"],.btn,.pcard,.chip{
    -webkit-tap-highlight-color:transparent;
  }
}
