/* ============================================================
   1st Class Driving School (Apka Desi) — Dev Site design system
   Scoped under #apk so it ports cleanly back into a WP child-theme
   template (self-contained, collision-free). Yellow/black brand.
   ============================================================ */

/* ---- fonts: self-hosted latin subsets (SIL OFL 1.1, see fonts/OFL.txt) ----
   These came from Google Fonts: a render-blocking stylesheet on a second
   origin, then the font files from a third, arriving after first paint. Their
   late swap reflowed the header (the nav wrapped in the fallback font) and was
   most of the homepage's 0.2 desktop CLS; the four files were also 58% of its
   transfer. Same files, same unicode-range, now same-origin and preloaded in
   each page's <head> (Inter and Oswald). Inter and Oswald are variable fonts:
   one file covers every weight the site uses. */
@font-face{font-family:'Inter';font-style:normal;font-weight:400 800;font-display:swap;
  src:url(fonts/inter-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Oswald';font-style:normal;font-weight:500 700;font-display:swap;
  src:url(fonts/oswald-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;
  src:url(fonts/ibm-plex-mono-600-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:700;font-display:swap;
  src:url(fonts/ibm-plex-mono-700-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

:root{
  --brand:#EED80F; --brand-deep:#C4A800; --brand-soft:#FBEF9C;
  --ink:#12110C; --ink-soft:#2A2822;
  --paper:#FCFAF3; --paper-2:#F4F0E3; --card:#FFFFFF;
  /* "Route green" — the color of a US/PA highway guide sign. Replaces a
     generic teal; the --teal/--teal-ink names stay so every inline
     style="color:var(--teal-ink)" baked into _gen templates repaints for
     free with no per-template edit. */
  --teal:#1C6B4A; --teal-ink:#0F4A31;
  --muted:#6E6B5E; --line:#E4DFCF;
  --ok:#177A42; --shadow:0 1px 2px rgba(18,17,12,.04), 0 8px 30px rgba(18,17,12,.07);
  --shadow-lg:0 14px 40px rgba(18,17,12,.12);
  /* .trust's number color: matched to --brand by default since .trust's own
     background (var(--ink)) is dark in this theme; redefined per-theme below
     wherever that background inverts to light instead. */
  --ink-accent:var(--brand);
  /* Logo mark ink: fixed brand tones from the logo/ style guide, not the
     generic --ink token, so the mark reads correctly against whichever
     ground it sits on (header = --paper ground, footer = --ink ground)
     without being recoloured per section. --logo-accent reuses the site's
     existing --brand yellow in place of the guide's default red bead. */
  --logo-ink:#0E4034; --logo-ink-inv:#F3F2F2; --logo-accent:var(--brand);
  /* "Apka Desi" highlight ink: raw --brand yellow is unreadable as text on
     --paper (contrast ~1.4:1) — this is the same "flip with the ground"
     shape as --teal-ink, deep in light mode, full brand yellow once --paper
     goes dark. Used only where the mark sits directly on --paper (the header
     wordmark); the footer's "Apka Desi" sits on --ink instead and already
     has the right token for that: --ink-accent. */
  --brand-ink:#7A6300;
  --maxw:1160px; --r:16px;
  /* Type system: Oswald (condensed, FHWA-signage DNA) carries headings, nav,
     buttons and labels — the "signage" register. Inter carries paragraph
     copy across 100+ content pages. IBM Plex Mono marks numbers that read
     like a printed form: prices, phone digits, stat counters. */
  --display:'Oswald',system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --sans:'Inter',system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  /* PA route-marker silhouette (the "keystone" shape on every PA road sign) —
     the page's one signature device. Applied to icon tiles, eyebrow tags and
     other short English-only labels; never to running text or non-Latin
     script (clipping risk on tall diacritics). */
  --keystone:polygon(0 0,100% 0,84% 100%,16% 100%);
  /* same silhouette, gentler taper — for single-line text badges, where the
     box is too short for a 16% inset to clear ascenders/descenders */
  --keystone-tag:polygon(0 0,100% 0,95% 100%,5% 100%);
}
/* Three color bugs found together, all the same shape: a themed color with no
   dark-mode variant, unlike every other one defined above.
   --teal-ink (#0F4A31, near-black forest green) is unreadable against the
   dark --card/--paper it sits on in dark mode — it's the color behind every
   inline style="color:var(--teal-ink)" baked into _gen/generate.js (sidebar
   "Other services" links, "how it works" steps, prose links, etc.), so fixing
   the variable repaints all of them with no per-template edit.
   --ok (#1B8A4B) has the same problem at font-weight:800 in the pricing
   comparison table's "yes" column (table.cmp td.y), against dark --paper-2.
   --ink-accent is different in kind: it's for text that sits directly on a
   var(--ink)-colored background (.trust, footer.site) — an intentional dark
   ribbon in light mode that becomes a pale one in dark mode since --ink
   itself inverts. Text there needs to invert with it, not just get lighter. */
@media (prefers-color-scheme:dark){
  :root{ --paper:#111009; --paper-2:#17150D; --card:#1D1A10; --ink:#FAF6E6; --ink-soft:#E6E1CC;
    --line:#2E2A1B; --muted:#A7A08A; --brand-soft:#3A3410;
    --ok:#34D399; --teal:#34D399; --teal-ink:#6EE7B7; --ink-accent:#12110C;
    --logo-ink:#F3F2F2; --logo-ink-inv:#0E4034; --brand-ink:#EED80F;
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 12px 34px rgba(0,0,0,.5);
    --shadow-lg:0 16px 44px rgba(0,0,0,.6);}
}
:root[data-theme="dark"]{ --paper:#111009; --paper-2:#17150D; --card:#1D1A10; --ink:#FAF6E6; --ink-soft:#E6E1CC;
  --line:#2E2A1B; --muted:#A7A08A; --brand-soft:#3A3410; --ok:#34D399; --teal:#34D399; --teal-ink:#6EE7B7;
  --ink-accent:#12110C;
  --logo-ink:#F3F2F2; --logo-ink-inv:#0E4034; --brand-ink:#EED80F;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 12px 34px rgba(0,0,0,.5); --shadow-lg:0 16px 44px rgba(0,0,0,.6);}
:root[data-theme="light"]{ --paper:#FCFAF3; --paper-2:#F4F0E3; --card:#FFFFFF; --ink:#12110C; --ink-soft:#2A2822;
  --line:#E4DFCF; --muted:#6E6B5E; --brand-soft:#FBEF9C; --ok:#177A42; --teal:#1C6B4A; --teal-ink:#0F4A31;
  --ink-accent:var(--brand);
  --logo-ink:#0E4034; --logo-ink-inv:#F3F2F2; --brand-ink:#7A6300;
  --shadow:0 1px 2px rgba(18,17,12,.04), 0 8px 30px rgba(18,17,12,.07); --shadow-lg:0 14px 40px rgba(18,17,12,.12);}

#apk *{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);
  line-height:1.6;-webkit-font-smoothing:antialiased;}
#apk .wrap{max-width:var(--maxw);margin:0 auto;padding:0 22px}
#apk a{color:inherit}
/* height:auto, or the stamped height="" attribute survives the max-width
   shrink: a 1024x1024 post image rendered 288x1024 on a phone (66 of 67 post
   images were distorted on mobile). The width/height attributes still reserve
   the right aspect ratio before the file loads, so nothing shifts. */
#apk img{max-width:100%;height:auto}
#apk h1,#apk h2,#apk h3{margin:0;text-wrap:balance;font-family:var(--display);font-weight:700;letter-spacing:-.01em;line-height:1.04}
#apk nav.main a,#apk .drawer-panel a,#apk .btn,#apk footer h4,#apk footer .fh,#apk .brandmark .bm-txt b,
#apk footer .fbrand b,#apk .plan h3,#apk .side-card h3,#apk .branch .pin{font-family:var(--display)}
/* ---- eyebrow: the page's signature tag, cut to the PA route-marker
   silhouette. One rule, ~100 pages — every phero section on the site wears
   the same small keystone. ---- */
#apk .eyebrow{
  display:inline-flex;align-items:center;
  font-family:var(--display);font-size:.72rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:#12110C;background:var(--brand);
  padding:7px 20px;clip-path:var(--keystone-tag);
}

/* ---- buttons ---- */
#apk .btn{display:inline-flex;align-items:center;gap:.5em;border:0;cursor:pointer;
  font-weight:600;font-size:.98rem;letter-spacing:.02em;text-transform:uppercase;padding:.85em 1.5em;border-radius:999px;
  text-decoration:none;transition:transform .15s ease, box-shadow .15s ease;white-space:nowrap;
  max-width:100%;flex-wrap:wrap;justify-content:center;text-align:center}
/* long button labels wrap instead of widening the page on small screens */
@media (max-width:560px){#apk .btn{white-space:normal}}
/* <button class="btn"> sizes its line box like the <a class="btn"> beside it */
#apk button.btn{line-height:inherit}
#apk .btn-primary{background:var(--brand);color:#12110C;box-shadow:0 6px 20px rgba(238,216,15,.35)}
#apk .btn-primary:hover{transform:translateY(-2px)}
#apk .btn-dark{background:var(--ink);color:var(--paper)}
#apk .btn-dark:hover{transform:translateY(-2px)}
#apk .btn-ghost{background:transparent;color:inherit;border:2px solid currentColor;padding:.75em 1.3em}
#apk .btn-sm{padding:.55em 1em;font-size:.9rem}
#apk .btn-lg{padding:1em 1.7em;font-size:1.08rem}

/* ---- utility bar + header ---- */
#apk .util{background:var(--ink);color:var(--paper);font-size:.85rem}
#apk .util .wrap{display:flex;gap:18px;align-items:center;justify-content:space-between;padding:8px 22px;flex-wrap:wrap}
#apk .util a{text-decoration:none;opacity:.9}
/* The theme toggle is a <button> (it acts, it doesn't navigate): same look as the links beside it. */
#apk .util button{background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer}
#apk .util a:hover{opacity:1}
#apk .langs{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
#apk .chip{font-size:.72rem;font-weight:700;border:1px solid rgba(252,250,243,.28);padding:2px 9px;border-radius:999px}
/* The header/footer now ship inside [data-inc] in the served HTML (seo.js, from
   _gen/chrome.js), so nothing is swapped in after load. These floors date from
   when apk.js injected them; they match the real chrome (util bar ~36px +
   header ~70px) and stay as a guard for any page served without it. */
#apk [data-inc="header"]{min-height:106px}
#apk [data-inc="footer"]{min-height:320px}
@media (max-width:980px){
  #apk [data-inc="header"]{min-height:98px}
  #apk [data-inc="footer"]{min-height:560px}
}
#apk header.site{position:sticky;top:0;z-index:60;background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
/* A phone number is a left-to-right sequence. On the RTL Arabic page the bidi
   algorithm treats the area-code parentheses as neutral and flips them to the
   wrong end — "(215) 740-2841" rendered as "740-2841 (215)", a wrong number in
   front of the exact audience that page exists for. Isolate every tel: link so
   it always reads in the intended order. */
#apk a[href^="tel:"]{direction:ltr;unicode-bidi:isolate;font-family:var(--mono)}
/* numerals that read like a printed form: prices, stat counters, plan amounts */
#apk .book .price b,#apk .plan .amt b,#apk .trust .big,#apk [data-count]{font-family:var(--mono)}
#apk header .wrap{display:flex;align-items:center;gap:20px;padding:12px 22px}
#apk .logo{height:44px;width:auto;display:block}
#apk .brandmark{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--logo-ink)}
#apk .brandmark .bm-logo{height:46px;width:46px;display:block;flex:0 0 auto;transition:transform .25s}
#apk .brandmark:hover .bm-logo{transform:rotate(-8deg)}
#apk .brandmark .bm-ico{height:44px;width:44px;border-radius:12px;background:var(--brand);color:#12110C;
  display:grid;place-items:center;font-weight:900;font-size:1.15rem;box-shadow:0 4px 14px rgba(238,216,15,.4);flex:0 0 auto}
#apk .brandmark .bm-txt{display:flex;flex-direction:column;line-height:1.02}
#apk .brandmark .bm-txt b{font-size:1.02rem;font-weight:900;letter-spacing:-.02em}
#apk .brandmark .bm-txt span{font-size:.68rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
/* "Apka Desi" is the name people actually search/ask for — mark it out from
   the surrounding "· since 2003" caption with brand-ink instead of leaving
   the whole line flat yellow-on-paper (that combo was ~1.4:1 contrast, i.e.
   effectively invisible in light mode). */
#apk .brandmark .bm-txt span .apka{color:var(--brand-ink);font-weight:900}
/* Below 480px the header can't fit the wordmark next to the nav burger —
   drop to the mark alone, per the logo style guide's own rule. */
@media (max-width:480px){#apk .brandmark .bm-txt{display:none}}

/* ---- animated brand mark (graduation cap + wheel), from logo/logo-snippet.html ---- */
#apk .bm-logo{overflow:visible;stroke:currentColor;fill:none;stroke-width:7;
  stroke-linejoin:miter;stroke-linecap:butt}
#apk .bm-logo [data-a]{animation-fill-mode:both}
#apk .bm-logo .bm-wheel{transform-origin:60px 78px;animation:bm-wheel .9s cubic-bezier(.16,1,.3,1)}
#apk .bm-logo .bm-cap{transform-origin:60px 30px;animation:bm-cap .7s .4s cubic-bezier(.34,1.5,.5,1)}
#apk .bm-logo [data-d]{stroke-dasharray:1;animation:bm-draw .6s linear}
@keyframes bm-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes bm-wheel{from{transform:rotate(-150deg) scale(.86);opacity:0}60%{opacity:1}to{transform:none;opacity:1}}
@keyframes bm-cap{from{transform:translateY(-46px) scale(.96);opacity:0}55%{opacity:1}to{transform:none;opacity:1}}
/* plays once per browser session (see apk.js); settled state for repeat pages.
   .bm-played is set on <html> by the inline flag at the top of the header
   (chrome.js), before the logo is parsed, so a repeat view never starts it. */
#apk .bm-logo.is-settled *,.bm-played #apk .bm-logo *{animation:none!important}
@media (prefers-reduced-motion:reduce){#apk .bm-logo *{animation:none!important}}

#apk nav.main{display:flex;gap:22px;margin-left:8px;flex:1}
/* nowrap: in the fallback font the nav links wrapped to two lines and the
   header shrank 61px -> 36px when the web font arrived -- most of the
   homepage's 0.200 desktop CLS. */
#apk nav.main a{text-decoration:none;font-weight:600;font-size:.95rem;padding:6px 0;position:relative;white-space:nowrap}
#apk nav.main a::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:2px;background:var(--brand);transition:right .2s}
#apk nav.main a:hover::after,#apk nav.main a.active::after{right:0}
#apk nav.main a.active{font-weight:800}
#apk .hdr-cta{display:flex;gap:10px;align-items:center}
#apk .burger{display:none;background:none;border:0;cursor:pointer;padding:6px;color:inherit}
#apk .burger svg{display:block}

/* ---- mobile drawer ---- */
#apk .drawer{position:fixed;inset:0;z-index:80;background:rgba(18,17,12,.5);opacity:0;pointer-events:none;transition:opacity .2s;overflow:hidden}
#apk .drawer.open{opacity:1;pointer-events:auto}
#apk .drawer-panel{position:absolute;top:0;right:0;height:100%;width:min(84vw,340px);background:var(--paper);
  box-shadow:-20px 0 60px rgba(0,0,0,.3);transform:translateX(100%);transition:transform .25s ease;padding:22px;overflow:auto}
#apk .drawer.open .drawer-panel{transform:none}
#apk .drawer-panel a{display:block;text-decoration:none;font-weight:700;font-size:1.1rem;padding:14px 0;border-bottom:1px solid var(--line)}
#apk .drawer-close{background:none;border:0;font-size:1.6rem;cursor:pointer;color:inherit;float:right;line-height:1}

/* ---- page hero (inner pages) ---- */
#apk .phero{position:relative;overflow:hidden;border-bottom:1px solid var(--line)}
#apk .phero-band{position:absolute;inset:0;z-index:-1;
  background:radial-gradient(120% 100% at 88% -20%, var(--brand-soft) 0%, transparent 52%),linear-gradient(180deg, transparent 55%, var(--paper-2) 100%);}
#apk .phero .wrap{padding:34px 22px 44px}
#apk .crumbs{font-size:.82rem;color:var(--muted);margin-bottom:16px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
#apk .crumbs a{text-decoration:none;color:var(--muted)}
#apk .crumbs a:hover{color:var(--ink)}
#apk .crumbs .sep{opacity:.5}
#apk .phero h1{font-size:clamp(1.9rem,4.4vw,3.1rem);font-weight:900;max-width:20ch}
#apk .phero .sub{font-size:1.12rem;color:var(--ink-soft);max-width:56ch;margin:14px 0 0}
#apk .phero-cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px}
#apk .stars{color:var(--brand);letter-spacing:2px}
#apk .phero .heritage{margin-top:18px;font-size:.88rem;color:var(--muted);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#apk .phero .heritage b{color:var(--ink)}

/* ---- hero (home) ---- */
#apk .hero{position:relative;overflow:hidden}
#apk .hero .wrap{display:grid;grid-template-columns:1.15fr .85fr;gap:40px;align-items:center;padding:64px 22px 54px}
#apk .hero-band{position:absolute;inset:0;z-index:-1;
  background:radial-gradient(120% 90% at 92% -10%, var(--brand-soft) 0%, transparent 55%),linear-gradient(180deg, transparent 60%, var(--paper-2) 100%);}
#apk .hero h1{font-size:clamp(2.3rem,5.2vw,3.9rem);font-weight:900}
#apk .hero h1 .hl{background:linear-gradient(180deg,transparent 62%, var(--brand) 62%);padding:0 .06em}
#apk .hero p.lead{font-size:1.15rem;color:var(--ink-soft);max-width:36ch;margin:18px 0 26px}
#apk .hero-cta{display:flex;gap:12px;flex-wrap:wrap}
#apk .heritage{margin-top:20px;font-size:.85rem;color:var(--muted);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#apk .heritage b{color:var(--ink)}
#apk .book{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:24px}
#apk .book h3{font-size:1.15rem;margin-bottom:4px}
#apk .book .price{display:flex;align-items:baseline;gap:8px;margin:10px 0 4px}
#apk .book .price b{font-size:2.4rem;font-weight:900;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
#apk .book .price span{color:var(--muted);font-size:.9rem}
#apk .book ul{list-style:none;padding:0;margin:14px 0 18px;display:grid;gap:9px}
#apk .book li{display:flex;gap:10px;align-items:flex-start;font-size:.94rem}
#apk .book li svg{flex:0 0 auto;margin-top:3px;color:var(--teal)}
@media (prefers-color-scheme:dark){#apk .book li svg{color:var(--brand)}}
#apk .book .btn{width:100%;justify-content:center}
#apk .book small{display:block;text-align:center;color:var(--muted);margin-top:10px;font-size:.8rem}

/* ---- trust strip ---- */
/* Each stat opens with a yellow rule on its left — the same "route marker
   post" the mono numerals read against, left-aligned like a printed form. */
#apk .trust{background:var(--ink);color:var(--paper)}
#apk .trust .wrap{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;padding:26px 22px}
#apk .trust .item{text-align:left;padding:4px 8px 4px 16px;border-left:3px solid var(--brand)}
/* .trust deliberately inverts using --ink as its OWN background (a dark
   ribbon in light mode, carrying every per-page price/stat row via the
   shared .item/.big/.lbl markup — not just the homepage). --ink flips to a
   light color in dark mode by design, so that ribbon becomes a pale card —
   but .big's number color needs to flip with it to stay readable, hence its
   own themed variable rather than a bare --brand reference. */
#apk .trust .big{font-size:1.6rem;font-weight:900;font-variant-numeric:tabular-nums;color:var(--ink-accent)}
#apk .trust .lbl{font-size:.78rem;letter-spacing:.04em;opacity:.85;margin-top:2px}

/* ---- sections ---- */
#apk section.pad{padding:66px 0}
#apk section.pad-sm{padding:44px 0}
/* Area pages: the one-paragraph answer under the trust strip. No bottom
   padding, the section.pad after it already spaces the next block. */
#apk section.glance-sec{padding:36px 0 0}
#apk .glance{max-width:860px;margin:0 auto;padding:16px 20px;border-left:4px solid var(--brand);background:var(--card);border-radius:12px;box-shadow:var(--shadow);line-height:1.6}
#apk .glance a{color:var(--teal-ink);font-weight:700;text-underline-offset:3px}
#apk .sec-head{max-width:62ch;margin-bottom:34px}
#apk .sec-head.center{margin-left:auto;margin-right:auto;text-align:center}
#apk .sec-head h2{font-size:clamp(1.7rem,3.4vw,2.5rem);font-weight:900;margin:10px 0 8px}
#apk .sec-head p{color:var(--muted);font-size:1.05rem;margin:0}
#apk .alt{background:var(--paper-2);position:relative}
/* lane-line divider: every alternating section opens like a new stretch of
   road — the same dashed motif the hero's asphalt runs on, just resting flat */
#apk .alt::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background-image:repeating-linear-gradient(90deg,var(--brand) 0 28px,transparent 28px 50px);
  opacity:.6}

/* ---- finder ---- */
#apk .finder-box{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:26px;max-width:720px;margin:0 auto}
#apk .finder-in{display:flex;gap:10px;flex-wrap:wrap}
#apk .finder input{flex:1;min-width:220px;font-family:inherit;font-size:1.05rem;padding:.85em 1em;border:2px solid var(--line);border-radius:12px;background:var(--paper);color:var(--ink)}
#apk .finder input:focus{outline:3px solid var(--brand);outline-offset:1px;border-color:var(--brand-deep)}
#apk .finder-results{margin-top:16px;display:flex;flex-wrap:wrap;gap:8px;min-height:8px}
#apk .area-tag{text-decoration:none;font-size:.9rem;font-weight:600;background:var(--brand-soft);color:var(--ink);padding:7px 13px;border-radius:999px;border:1px solid var(--brand-deep);transition:transform .12s}
#apk .area-tag:hover{transform:translateY(-2px)}
#apk .finder-none{color:var(--muted);font-size:.92rem}
#apk .finder small,#apk .finder-box>small{display:block;color:var(--muted);margin-top:14px;font-size:.82rem}

/* ---- cards / grids ---- */
#apk .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
#apk .grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
#apk .card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:24px;box-shadow:var(--shadow);transition:transform .18s ease, box-shadow .18s ease;text-decoration:none;color:inherit;display:block}
#apk a.card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
#apk .card .ico{width:46px;height:52px;clip-path:var(--keystone);background:var(--brand);color:#12110C;display:grid;place-items:center;padding-bottom:4px;margin-bottom:14px;font-size:1.4rem}
#apk .card h3{font-size:1.15rem;margin-bottom:6px}
#apk .card p{color:var(--muted);font-size:.93rem;margin:0 0 14px}
#apk .card .more{font-weight:800;font-size:.9rem;color:var(--teal-ink);display:inline-flex;gap:6px;align-items:center}
@media (prefers-color-scheme:dark){#apk .card .more{color:var(--brand)}}
#apk a.card:hover .more span{transform:translateX(3px)}
#apk .card .more span{transition:transform .15s;display:inline-block}

/* ---- numbered step cards (how it works) ----
   The one place mono numbering is earned: a real 3-step sequence. Hard
   yellow offset shadows + a 3px rule give the cards the weight of stacked
   road signs; hover shifts the card into its own shadow. ---- */
#apk .steps{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
#apk .step{background:var(--card);border:3px solid var(--ink);padding:26px;
  box-shadow:8px 8px 0 var(--brand);transition:transform .2s ease,box-shadow .2s ease}
#apk .step:hover{transform:translate(-4px,-4px);box-shadow:12px 12px 0 var(--brand)}
#apk .step .num{font-family:var(--mono);font-weight:700;font-size:.95rem;color:var(--teal-ink)}
@media (prefers-color-scheme:dark){#apk .step .num{color:var(--brand)}}
#apk .step h3{font-size:1.2rem;margin:8px 0;text-transform:uppercase}
#apk .step p{color:var(--muted);font-size:.93rem;margin:0}
#apk .step p a{color:var(--teal-ink);font-weight:700}
@media (prefers-color-scheme:dark){#apk .step p a{color:var(--brand)}}
@media (max-width:900px){#apk .steps{grid-template-columns:1fr}}

/* ---- why / features (dark) ---- */
#apk .why{background:var(--ink);color:var(--paper)}
#apk .why .sec-head h2{color:var(--paper)}
/* Was a hardcoded near-white rgba() rather than var(--paper) like its h2
   sibling above — .why's own background (var(--ink)) inverts from dark to
   light in dark mode, so a fixed near-white paragraph color (still ~70%
   opacity white) went from "dim text on dark" to "near-invisible white on
   the now-light background". */
#apk .why .sec-head p{color:var(--paper);opacity:.7}
#apk .compare{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
#apk .feat{background:rgba(252,250,243,.04);border:1px solid rgba(252,250,243,.12);border-radius:var(--r);padding:22px}
#apk .feat .t{font-weight:800;font-size:1.05rem;margin-bottom:6px;display:flex;align-items:center;gap:9px}
#apk .feat .t .dot{width:10px;height:10px;border-radius:50%;background:var(--brand);flex:0 0 auto}
/* Same fix as .why .sec-head p above: .feat cards live inside .why, whose
   own background (var(--ink)) inverts to light in dark mode. */
#apk .feat p{margin:0;font-size:.9rem;color:var(--paper);opacity:.75}

/* ---- people ---- */
#apk .people{display:grid;grid-template-columns:1fr 1fr;gap:18px}
#apk .person{display:flex;gap:16px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:20px;box-shadow:var(--shadow)}
#apk .avatar{flex:0 0 64px;height:64px;width:64px;border-radius:50%;background:linear-gradient(135deg,var(--brand),var(--brand-deep));display:grid;place-items:center;font-weight:900;font-size:1.5rem;color:#12110C}
#apk .person h3{font-size:1.1rem}
#apk .person .role{font-size:.8rem;font-weight:700;color:var(--teal-ink);text-transform:uppercase;letter-spacing:.06em;margin:2px 0 8px}
@media (prefers-color-scheme:dark){#apk .person .role{color:var(--brand)}}
#apk .person p{margin:0;font-size:.9rem;color:var(--muted)}

/* ---- reviews ---- */
#apk .reviews{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
#apk .review{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:22px;box-shadow:var(--shadow)}
#apk .review .stars{font-size:1rem;margin-bottom:10px}
#apk .review p{margin:0 0 14px;font-size:.95rem}
#apk .review .who{font-weight:800;font-size:.9rem}
#apk .review .src{font-size:.78rem;color:var(--muted)}

/* ---- FAQ ---- */
#apk .faq{max-width:820px;margin:0 auto}
#apk details{border-bottom:1px solid var(--line);padding:16px 0}
#apk summary{cursor:pointer;font-weight:700;font-size:1.05rem;list-style:none;display:flex;justify-content:space-between;gap:16px;align-items:center}
#apk summary::-webkit-details-marker{display:none}
#apk summary .pm{flex:0 0 auto;font-size:1.4rem;color:var(--brand-deep);transition:transform .2s}
#apk details[open] summary .pm{transform:rotate(45deg)}
#apk details .ans{margin:12px 0 0;color:var(--muted)}
#apk details .ans p{margin:0 0 10px}
#apk details .ans p:last-child{margin-bottom:0}

/* ---- pricing ---- */
#apk .plans{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;align-items:stretch}
#apk .plan{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:24px;box-shadow:var(--shadow);display:flex;flex-direction:column;position:relative}
#apk .plan.pop{border:2px solid var(--brand);box-shadow:0 14px 40px rgba(238,216,15,.25)}
#apk .plan .tag{position:absolute;top:-12px;left:24px;background:var(--brand);color:#12110C;font-family:var(--display);font-size:.7rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;padding:5px 16px;clip-path:var(--keystone-tag)}
#apk .plan h3{font-size:1.15rem}
#apk .plan .who{font-size:.85rem;color:var(--muted);margin:4px 0 0;min-height:2.6em}
#apk .plan .amt{display:flex;align-items:baseline;gap:6px;margin:16px 0 2px}
#apk .plan .amt b{font-size:2.5rem;font-weight:900;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
#apk .plan .amt span{color:var(--muted);font-size:.85rem}
#apk .plan .per{font-size:.82rem;color:var(--muted);margin-bottom:8px}
#apk .plan .save{font-size:.82rem;font-weight:700;color:var(--teal-ink);margin:0 0 16px;line-height:1.45}
#apk .plan .amt s{color:var(--muted);font-weight:600}
#apk .plan ul{list-style:none;padding:0;margin:0 0 20px;display:grid;gap:10px;flex:1}
#apk .plan li{display:flex;gap:9px;align-items:flex-start;font-size:.9rem}
#apk .plan li svg{flex:0 0 auto;margin-top:3px;color:var(--teal)}
@media (prefers-color-scheme:dark){#apk .plan li svg{color:var(--brand)}}
#apk .plan .btn{width:100%;justify-content:center}

/* ---- comparison table ---- */
#apk .tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);background:var(--card)}
/* bare tables in article prose (imported posts) scroll sideways instead of
   stretching the page on small screens */
#apk .prose table{display:block;overflow-x:auto;max-width:100%}
#apk table.cmp{border-collapse:collapse;width:100%;min-width:560px}
#apk table.cmp th,#apk table.cmp td{text-align:left;padding:14px 18px;border-bottom:1px solid var(--line);font-size:.94rem}
#apk table.cmp thead th{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--paper-2)}
#apk table.cmp td.y{color:var(--ok);font-weight:800}
#apk table.cmp td.n{color:var(--muted)}
#apk table.cmp tbody tr:last-child td{border-bottom:0}
#apk table.cmp .us{background:color-mix(in srgb,var(--brand) 12%,transparent);font-weight:700}

/* ---- prose (content pages) ---- */
#apk .prose{max-width:72ch}
#apk .prose h2{font-size:clamp(1.5rem,3vw,2rem);font-weight:900;margin:38px 0 12px}
#apk .prose h3{font-size:1.25rem;font-weight:800;margin:26px 0 8px}
#apk .prose p{margin:0 0 16px;font-size:1.02rem;color:var(--ink-soft)}
#apk .prose ul{margin:0 0 18px;padding-left:0;list-style:none;display:grid;gap:10px}
/* block + absolute check (not flex): inline children like <strong> must wrap
   with the text instead of becoming side-by-side flex items */
#apk .prose ul li{display:block;position:relative;padding-left:24px;font-size:1rem;color:var(--ink-soft)}
#apk .prose ul li::before{content:"✓";color:var(--teal);font-weight:900;position:absolute;left:0;top:0}
@media (prefers-color-scheme:dark){#apk .prose ul li::before{color:var(--brand)}}
#apk .prose a{color:var(--teal-ink);font-weight:700;text-underline-offset:3px}
@media (prefers-color-scheme:dark){#apk .prose a{color:var(--brand)}}
#apk .layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:44px;align-items:start}
/* long <select> options and unbreakable strings must never widen a column */
#apk .layout>*{min-width:0}
#apk .form select{max-width:100%}
@media (max-width:980px){
  #apk .layout{grid-template-columns:1fr;gap:28px}
  #apk .sidebar{position:static}
}
#apk .sidebar{position:sticky;top:96px;display:grid;gap:18px}
#apk .side-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:22px}
#apk .side-card h3{font-size:1.05rem;margin-bottom:12px}
#apk .side-card .btn{width:100%;justify-content:center;margin-top:6px}
#apk .side-card ul{list-style:none;padding:0;margin:0;display:grid;gap:9px}
#apk .side-card li{display:flex;gap:9px;font-size:.9rem;align-items:flex-start}
#apk .side-card li svg{flex:0 0 auto;margin-top:3px;color:var(--teal)}
/* Numbered steps: the flex li above suppresses the marker, so opt ordered
   lists back into normal list rendering (the booking page's "how it works"). */
#apk .side-card ol{list-style:decimal;padding-left:20px;margin:0;display:grid;gap:7px}
#apk .side-card ol li{display:list-item;font-size:.9rem;line-height:1.5}
@media (prefers-color-scheme:dark){#apk .side-card li svg{color:var(--brand)}}

/* ---- county columns (areas hub) ---- */
#apk .counties{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}
#apk .county h3{font-size:1.05rem;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--brand)}
#apk .county ul{list-style:none;padding:0;margin:0;display:grid;gap:2px}
#apk .county a{text-decoration:none;font-size:.92rem;padding:6px 0;display:block;color:var(--ink-soft);transition:color .12s,padding .12s}
#apk .county a:hover{color:var(--ink);padding-left:6px}

/* ---- contact ---- */
#apk .branches{display:grid;grid-template-columns:1fr 1fr;gap:18px}
#apk .branch{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:24px}
#apk .branch .pin{font-size:.72rem;font-weight:900;letter-spacing:.1em;text-transform:uppercase;color:var(--teal-ink)}
@media (prefers-color-scheme:dark){#apk .branch .pin{color:var(--brand)}}
#apk .branch h3{font-size:1.2rem;margin:6px 0 10px}
#apk .branch p{margin:0 0 8px;color:var(--ink-soft);font-size:.95rem}
#apk .branch .row{display:flex;gap:10px;align-items:center;font-size:.95rem;margin-bottom:8px}
#apk .form{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:26px}
#apk .form .field{margin-bottom:16px}
#apk .form label{display:block;font-weight:700;font-size:.88rem;margin-bottom:6px}
#apk .form input,#apk .form select,#apk .form textarea{width:100%;font-family:inherit;font-size:1rem;padding:.75em .9em;border:2px solid var(--line);border-radius:12px;background:var(--paper);color:var(--ink)}
#apk .form input:focus,#apk .form select:focus,#apk .form textarea:focus{outline:3px solid var(--brand);outline-offset:1px;border-color:var(--brand-deep)}
#apk .form .two{display:grid;grid-template-columns:1fr 1fr;gap:14px}

/* ---- cta band + footer ---- */
/* ---- CTA band: the last exit before the footer. A hazard-stripe edge on
   both sides reads as the yellow/black barrier tape at a road's shoulder —
   the same idea as the hero's lane markings, now bookending the page. ---- */
#apk .cta-band{background:var(--brand);color:#12110C;position:relative;overflow:hidden}
/* a large keystone silhouette drifting in the band's right gutter — the same
   mark as the logo and icon tiles, here as a floating watermark */
#apk .cta-band .ks{position:absolute;right:3%;top:50%;width:120px;height:130px;margin-top:-65px;
  clip-path:var(--keystone);background:rgba(18,17,12,.09);pointer-events:none;
  animation:ksfloat 7s ease-in-out infinite}
@keyframes ksfloat{0%,100%{transform:translateY(0) rotate(-6deg)}50%{transform:translateY(-16px) rotate(-2deg)}}
@media (max-width:900px){#apk .cta-band .ks{display:none}}
#apk .cta-band::before,#apk .cta-band::after{content:"";position:absolute;left:0;right:0;height:8px;
  background-image:repeating-linear-gradient(135deg,#12110C 0 14px,transparent 14px 28px);opacity:.16}
#apk .cta-band::before{top:0}
#apk .cta-band::after{bottom:0}
#apk .cta-band .wrap{display:flex;align-items:center;justify-content:space-between;gap:26px;padding:48px 22px}
#apk .cta-band h2{font-size:clamp(1.6rem,3.4vw,2.3rem);max-width:20ch}
#apk .cta-band p{margin:6px 0 0;font-weight:600}

/* ---- footer ---- */
#apk footer.site{background:var(--ink);color:var(--paper);padding:50px 0 26px}
#apk footer .cols{display:grid;grid-template-columns:1.4fr .9fr .9fr .85fr .85fr 1fr;gap:26px}
@media (max-width:1100px){#apk footer .cols{grid-template-columns:1fr 1fr 1fr}}
/* Column titles are h2 (.fh), not h4: they follow the CTA band's h2, and a
   skipped level reads as a missing section to screen readers and crawlers.
   line-height restated because the site-wide h2 rule tightens it to 1.04. */
#apk footer h4,#apk footer .fh{font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-accent);
  margin:0 0 16px;padding-bottom:9px;border-bottom:2px solid rgba(238,216,15,.3);display:inline-block;line-height:1.6}
#apk footer a{display:block;text-decoration:none;opacity:.78;font-size:.9rem;margin-bottom:9px;
  transition:opacity .15s,transform .15s}
#apk footer a:hover{opacity:1;transform:translateX(3px)}
#apk footer .fine{border-top:1px solid rgba(252,250,243,.14);margin-top:34px;padding-top:18px;font-size:.8rem;opacity:.7;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
#apk footer .fbrand{display:flex;align-items:center;gap:11px;margin-bottom:6px}
#apk footer .fbrand .bm-logo{height:44px;width:44px;display:block;flex:0 0 auto;color:var(--logo-ink-inv)}
#apk footer .fbrand .bm-ico{height:44px;width:44px;border-radius:12px;background:var(--brand);color:#12110C;display:grid;place-items:center;font-weight:900;font-size:1.15rem;flex:0 0 auto}
#apk footer .fbrand b{font-size:1.05rem}
/* color-mix instead of opacity: opacity would dim the highlighted <b> below
   right along with the rest of the line, since opacity composites the whole
   element (children included) rather than just the text color. This mixes
   toward the footer's own background (var(--ink)) instead, so the muted
   base color and the full-strength brand highlight can coexist in one line. */
/* 68%, not 55%: in dark mode the footer ground is pale and the 55% mix read at
   4.1:1; this is ~6:1 there and ~8.5:1 in light mode. */
#apk footer .ftag{font-family:var(--mono);font-size:.72rem;letter-spacing:.04em;
  color:color-mix(in srgb, var(--paper) 68%, var(--ink));
  margin:0 0 18px;text-transform:uppercase}
/* --ink-accent, not --brand: this <b> sits on the footer's own --ink ground,
   which inverts from dark to pale between light/dark mode, and raw --brand
   yellow only reads against the dark side of that flip. --ink-accent already
   tracks the same inversion for exactly this case (see its definition). */
#apk footer .ftag b{color:var(--ink-accent);font-weight:600}

/* ---- Google reviews / GMB CTA ---- */
#apk .gmap{display:flex;align-items:center;gap:9px;text-decoration:none;font-weight:800;font-size:.95rem;
  border:1px solid var(--line);border-radius:12px;padding:11px 14px;background:var(--paper);color:var(--ink);transition:border-color .2s,transform .2s}
#apk .gmap:hover{border-color:var(--brand);transform:translateY(-1px)}
#apk .gmap .gstars{color:#f6b100;letter-spacing:1px}

/* ---- locations grid (our-branches) ---- */
#apk .locgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
#apk .loc{border:1px solid var(--line);border-radius:14px;padding:14px 16px;background:var(--card)}
#apk .loc b{font-size:1.02rem;display:block}
#apk .loc .lr{color:var(--teal-ink);font-weight:800;font-size:.85rem;margin:5px 0 10px;display:flex;align-items:center;gap:6px}
#apk .loc .lr .gstars{color:#f6b100;letter-spacing:1px}
#apk .loc .ll{display:flex;flex-direction:column;gap:5px}
#apk .loc .ll a{font-size:.85rem;font-weight:700;color:var(--teal-ink);text-decoration:none}
#apk .loc .ll a:hover{text-decoration:underline}
#apk .gmap small{display:block;font-weight:600;color:var(--muted);font-size:.78rem}
#apk .glogo{flex:0 0 auto}
#apk footer .fcol-google{display:inline-flex;align-items:center;gap:7px;color:var(--paper);text-decoration:none;font-weight:700;opacity:.9}
#apk footer .fcol-google:hover{opacity:1}

/* ---- sticky mobile call bar ---- */
#apk .callbar{position:fixed;left:0;right:0;bottom:0;z-index:70;display:none;gap:10px;padding:10px 14px;
  background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:blur(10px);border-top:1px solid var(--line)}
#apk .callbar .btn{flex:1;justify-content:center}

/* ---- WhatsApp button + floating action button ---- */
#apk .btn-wa{background:#25D366;color:#fff}
#apk .callbar .btn-wa{flex:0 0 auto;padding-left:16px;padding-right:16px}
#apk .wa-fab{position:fixed;right:18px;bottom:22px;z-index:71;width:54px;height:54px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;background:#25D366;color:#fff;
  box-shadow:0 8px 22px rgba(0,0,0,.28);text-decoration:none;transition:transform .18s ease,box-shadow .18s ease}
#apk .wa-fab svg{width:28px;height:28px}
#apk .wa-fab:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 12px 28px rgba(0,0,0,.34)}

/* ---- reveal ---- */
@media (prefers-reduced-motion:reduce){#apk *{transition:none!important;animation:none!important}}
#apk .reveal{opacity:0;transform:translateY(14px);transition:opacity .6s ease, transform .6s ease}
#apk .reveal.in{opacity:1;transform:none}

/* ============================================================
   3D FULL-SCREEN HERO  —  #apk .hero3d
   Pure CSS 3D. No library, no canvas, no external request, no image.
   Every animation runs on transform/opacity only (compositor thread),
   so it costs no layout and no main-thread work — which matters because
   this sits above the fold and must not damage LCP/INP.
   The hero is deliberately dark in BOTH themes: it keeps text contrast
   fixed (light ink on asphalt) and makes the brand yellow read as light.
   ============================================================ */
#apk .hero3d{
  --h3-ink:#FFFDF4;
  --h3-dim:rgba(255,253,244,.74);
  --h3-line:rgba(238,216,15,.38);
  --h3-line-soft:rgba(238,216,15,.12);
  --h3-mark:rgba(255,251,232,.85);
  --h3-cell:72px;          /* grid period — the scroll animation moves exactly this far */
  position:relative;
  /* Exactly one viewport MINUS the injected utility bar + header, so the hero
     fills the screen with no scroll needed. --top-h is measured once by apk.js;
     the 104px fallback is the desktop height if JS hasn't run yet. */
  min-height:calc(100vh - var(--top-h,104px));
  min-height:calc(100svh - var(--top-h,104px));
  display:flex; align-items:center;
  overflow:hidden; isolation:isolate;
  color:var(--h3-ink);
  background:radial-gradient(125% 82% at 50% 56%, #2B2411 0%, #14110A 44%, #070603 100%);
}

/* ---- scene: everything behind the copy. Mouse parallax lands here. ---- */
#apk .h3-scene{
  position:absolute; inset:0; z-index:0; pointer-events:none;
  transform:translate3d(calc(var(--px,0) * -16px), calc(var(--py,0) * -10px), 0);
  transition:transform .5s cubic-bezier(.2,.7,.3,1);
}

/* horizon glow — the "sunrise" the road runs into */
#apk .h3-glow{
  position:absolute; left:50%; top:52%; width:min(1100px,140vw); height:min(1100px,140vw);
  transform:translate(-50%,-50%);
  background:radial-gradient(circle, rgba(238,216,15,.34) 0%, rgba(238,216,15,.12) 34%, transparent 66%);
  animation:h3pulse 7s ease-in-out infinite;
}
@keyframes h3pulse{ 0%,100%{opacity:.75;transform:translate(-50%,-50%) scale(1)}
  50%{opacity:1;transform:translate(-50%,-50%) scale(1.07)} }

/* a thin bright line exactly on the horizon */
#apk .h3-horizon{
  position:absolute; left:0; right:0; top:52%; height:2px;
  background:linear-gradient(90deg,transparent,rgba(238,216,15,.85) 22%,#FFF6B0 50%,rgba(238,216,15,.85) 78%,transparent);
  filter:blur(.4px); opacity:.85;
}

/* ---- the 3D ground. perspective lives here so the planes are direct children ---- */
#apk .h3-world{
  position:absolute; inset:0;
  perspective:520px; perspective-origin:50% 52%;
  transform-style:preserve-3d;
}
#apk .h3-plane{
  position:absolute; left:50%; top:52%;
  width:300vw; margin-left:-150vw; height:200vh;
  transform-origin:50% 0%;
  transform:rotateX(86deg);
  overflow:hidden;
  /* Without this the far half of the plane compresses into a solid slab of
     colour at the horizon instead of reading as receding lines. The mask fades
     out the distant portion so the road dissolves into the glow. */
  -webkit-mask-image:linear-gradient(to bottom, transparent 0 14%, #000 48%);
  mask-image:linear-gradient(to bottom, transparent 0 14%, #000 48%);
}
/* the texture layer is what actually moves — one full grid cell per loop,
   so the repeat is seamless and the road appears infinite */
#apk .h3-tex{
  position:absolute; left:0; right:0; top:calc(var(--h3-cell) * -2); bottom:0;
  animation:h3run 1s linear infinite;
}
@keyframes h3run{ from{transform:translate3d(0,0,0)} to{transform:translate3d(0,var(--h3-cell),0)} }

/* plane 1 — the wide world grid (yellow, receding) */
#apk .h3-plane.grid .h3-tex{
  background:
    repeating-linear-gradient(to bottom, var(--h3-line) 0 2px, transparent 2px var(--h3-cell)),
    repeating-linear-gradient(to right,  var(--h3-line-soft) 0 2px, transparent 2px 96px);
}
/* plane 2 — the asphalt strip you're driving on */
#apk .h3-plane.road{ width:700px; margin-left:-350px; }
#apk .h3-plane.road::before{
  content:""; position:absolute; inset:0;
  /* deliberately LIGHTER than the surrounding ground so the asphalt strip reads
     as a distinct road rather than disappearing into the background */
  background:linear-gradient(180deg,#1B1810 0%, #26220F 55%, #2E2912 100%);
  box-shadow:0 0 90px 30px rgba(0,0,0,.5);
}
#apk .h3-plane.road .h3-tex{
  animation-name:h3run;
  background:
    /* center dashes */
    repeating-linear-gradient(to bottom, var(--h3-mark) 0 30px, transparent 30px var(--h3-cell)),
    /* left + right edge lines (solid) */
    linear-gradient(var(--h3-mark),var(--h3-mark)),
    linear-gradient(var(--h3-mark),var(--h3-mark));
  background-size:10px 100%, 7px 100%, 7px 100%;
  background-position:50% 0, 22px 0, calc(100% - 22px) 0;
  background-repeat:no-repeat;
}

/* haze band that dissolves the far end of the road into the glow */
#apk .h3-haze{
  position:absolute; left:0; right:0; top:0; height:78%;
  background:linear-gradient(to bottom,
    rgba(8,7,4,0) 0%, rgba(10,8,5,.55) 26%, rgba(26,22,11,.72) 46%, rgba(26,22,11,.38) 57%, transparent 78%);
}
/* vignette so the copy always has a dark bed under it */
/* Beds the copy: darkens the whole scene, hardest at the edges. The center is
   only partly cleared so the headline always has contrast to sit on. */
#apk .h3-vign{
  position:absolute; inset:0;
  background:
    radial-gradient(58% 40% at 50% 38%, rgba(6,5,3,.52) 0%, rgba(6,5,3,.20) 62%, transparent 100%),
    radial-gradient(112% 80% at 50% 46%, transparent 32%, rgba(4,4,2,.66) 100%);
}

/* ---- the car ahead of you ---- */
/* Sits low and small so it reads as "a car ahead of you on the road" rather
   than colliding with the headline and CTA block above it. */
#apk .h3-car{
  position:absolute; left:50%; bottom:4%; width:min(210px,30vw);
  transform:translate(-50%,0) translate3d(calc(var(--px,0) * 10px), calc(var(--py,0) * 6px), 0);
  animation:h3bob 3.4s ease-in-out infinite;
  transition:transform .5s cubic-bezier(.2,.7,.3,1);
}
/* The individual `translate` property, not margin-top: animating a margin
   forced a layout 60 times a second (301 layouts, 2.2s of main-thread work in
   5 idle seconds on a throttled phone). `translate` composes with the parallax
   `transform` above and runs on the compositor. */
@keyframes h3bob{ 0%,100%{translate:0 0} 50%{translate:0 -7px} }
#apk .h3-car svg{display:block;width:100%;height:auto;filter:drop-shadow(0 18px 26px rgba(0,0,0,.6))}
#apk .h3-car .tl{animation:h3tail 3.4s ease-in-out infinite}
@keyframes h3tail{0%,100%{opacity:.85}50%{opacity:1}}

/* ---- floating language / proof chips, each at its own depth ---- */
#apk .h3-chips{position:absolute;inset:0}
#apk .h3-chip{
  position:absolute;
  display:inline-flex; align-items:center; gap:7px;
  padding:9px 15px; border-radius:999px;
  font-size:.86rem; font-weight:800; letter-spacing:.01em;
  color:#FFFDF4; white-space:nowrap;
  background:rgba(255,253,244,.07);
  border:1px solid rgba(238,216,15,.30);
  box-shadow:0 10px 30px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.09);
  backdrop-filter:blur(7px);
  transform:translate3d(calc(var(--px,0) * var(--d,20px)), calc(var(--py,0) * var(--d,20px)), 0);
  transition:transform .5s cubic-bezier(.2,.7,.3,1);
  animation:h3float 6s ease-in-out infinite;
}
#apk .h3-chip b{color:var(--brand)}
@keyframes h3float{0%,100%{translate:0 0}50%{translate:0 -12px}}
/* Chips live ONLY in the side gutters, clear of the centered copy column.
   Below 1200px there is no gutter, so they vanish — the same facts appear
   in the marquee and trust bar immediately after the hero. */
#apk .h3-chip.c1{left:3.5%;  top:24%; --d:34px; animation-delay:-.4s}
#apk .h3-chip.c2{left:4.5%;  top:60%; --d:46px; animation-delay:-2.1s}
#apk .h3-chip.c3{right:3.5%; top:24%; --d:38px; animation-delay:-1.2s}
#apk .h3-chip.c4{right:4.5%; top:60%; --d:52px; animation-delay:-3.0s}
@media (max-width:1200px){#apk .h3-chips{display:none}}

/* ---- passing headlight streaks: two blurred light bars that sweep across
   just under the horizon, like oncoming traffic on the far side. They start
   at opacity 0, so reduced-motion (which kills the animation) hides them
   entirely instead of freezing a bar mid-sweep. ---- */
#apk .h3-streak{position:absolute;left:0;width:220px;height:6px;border-radius:99px;opacity:0;
  background:linear-gradient(90deg,transparent,#FFF6B0,#FFFDF4);filter:blur(2px);
  animation:h3streak 3.6s linear infinite}
#apk .h3-streak.s1{top:55%}
#apk .h3-streak.s2{top:59%;width:150px;height:4px;animation-delay:1.8s;
  background:linear-gradient(90deg,transparent,#FFE98A)}
@keyframes h3streak{
  0%{transform:translateX(-30vw) skewX(-24deg);opacity:0}
  12%{opacity:.8}55%{opacity:.4}
  100%{transform:translateX(130vw) skewX(-24deg);opacity:0}}

/* ---- foreground copy ---- */
/* Staggered entrance: eyebrow → headline → lead → CTAs → proof, each rising
   into place on load. `both` keeps pre-animation frames invisible; with
   reduced motion the global animation kill-switch leaves everything at
   full opacity, so nothing is ever hidden from those users. */
#apk .h3-content{position:relative;z-index:2;width:100%;text-align:center;padding:96px 22px 120px}
@keyframes h3rise{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:none}}
#apk .h3-content>*{animation:h3rise .7s cubic-bezier(.2,.7,.2,1) both}
#apk .h3-content>.h3-eyebrow{animation-delay:.05s}
/* The headline is the homepage's LCP element, and an element held at opacity 0
   isn't painted, so fading it in pushed LCP 1-1.4s past first paint. It rises
   into place at full opacity instead; the lines around it still fade. */
@keyframes h3rise-solid{from{transform:translateY(30px)}to{transform:none}}
#apk .hero3d .h3-content h1{animation-name:h3rise-solid;animation-delay:.16s}
#apk .h3-content>.h3-lead{animation-delay:.3s}
#apk .h3-content>.h3-cta{animation-delay:.44s}
#apk .h3-content>.h3-proof{animation-delay:.56s}
#apk .h3-eyebrow{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--display);font-size:.72rem;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:#0F0D07;background:var(--brand);padding:8px 22px;clip-path:var(--keystone-tag);
  filter:drop-shadow(0 8px 26px rgba(238,216,15,.4))}
#apk .hero3d h1{
  margin:22px auto 0; max-width:17ch;
  font-family:var(--display);
  font-size:clamp(2.5rem,7.4vw,5rem); font-weight:700; letter-spacing:-.01em; line-height:1.03;
  color:#FFFDF4;
  text-shadow:0 1px 0 rgba(0,0,0,.5), 0 14px 44px rgba(0,0,0,.6);
}
#apk .hero3d h1 .hl3{
  position:relative; display:inline-block; color:var(--brand);
  background:linear-gradient(92deg,#FFEB6A 0%, var(--brand) 46%, #F5BE18 100%);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
  text-shadow:none; filter:drop-shadow(0 8px 26px rgba(238,216,15,.30));
  /* background-clip:text only paints inside the border box; at line-height
     1.03 the descenders of p/y/g fall outside it and render transparent.
     Pad the box down to cover them, and pull the layout back by the same
     amount so the tight leading is unchanged. */
  padding-bottom:.18em; margin-bottom:-.18em;
}
#apk .hero3d .h3-lead{
  margin:20px auto 0; max-width:56ch; font-size:clamp(1.02rem,2.1vw,1.22rem);
  color:var(--h3-dim); text-shadow:0 2px 14px rgba(0,0,0,.6)}
#apk .h3-cta{display:flex;gap:13px;justify-content:center;flex-wrap:wrap;margin-top:30px}
#apk .h3-cta .btn-glass{
  background:rgba(255,253,244,.09); color:#FFFDF4;
  border:1.5px solid rgba(255,253,244,.34); backdrop-filter:blur(7px)}
#apk .h3-cta .btn-glass:hover{background:rgba(255,253,244,.16);transform:translateY(-2px)}
#apk .h3-proof{
  margin-top:26px;display:flex;gap:10px 22px;justify-content:center;flex-wrap:wrap;
  font-size:.9rem;color:var(--h3-dim)}
#apk .h3-proof b{color:#FFFDF4}
#apk .h3-proof .stars{color:var(--brand)}

/* scroll cue */
#apk .h3-scroll{
  position:absolute;left:50%;bottom:22px;transform:translateX(-50%);z-index:3;
  display:flex;flex-direction:column;align-items:center;gap:7px;
  font-size:.7rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;
  color:rgba(255,253,244,.62);text-decoration:none}
#apk .h3-scroll .mouse{
  width:24px;height:38px;border:2px solid rgba(255,253,244,.42);border-radius:13px;position:relative}
#apk .h3-scroll .mouse::after{
  content:"";position:absolute;left:50%;top:7px;width:3px;height:7px;border-radius:2px;
  background:var(--brand);transform:translateX(-50%);animation:h3wheel 1.7s ease-in-out infinite}
@keyframes h3wheel{0%{opacity:0;transform:translate(-50%,0)}30%{opacity:1}100%{opacity:0;transform:translate(-50%,13px)}}

/* ---- 3D tilt cards (used on the service/feature grids) ---- */
#apk .tilt{transform-style:preserve-3d;transition:transform .28s cubic-bezier(.2,.7,.3,1),box-shadow .28s}
#apk .tilt.on{
  transform:perspective(760px) rotateX(calc(var(--ty,0) * -5deg)) rotateY(calc(var(--tx,0) * 6deg)) translateY(-5px);
  box-shadow:var(--shadow-lg)}

/* The utility bar wraps onto 3-4 lines on a phone, which pushed the full-screen
   hero ~180px down the page. The language chips and opening hours both appear
   again inside the hero and the footer, so they're dropped here. */
@media (max-width:760px){
  #apk .util .langs,#apk .util .util-hours{display:none}
  #apk .util .wrap{justify-content:space-between;padding:6px 22px}
}

/* ---- hero responsive ---- */
@media (max-width:900px){
  #apk .hero3d{--h3-cell:52px}
  #apk .h3-plane.road{width:480px;margin-left:-240px}
  #apk .h3-content{padding:78px 20px 104px}
  /* clears the sticky mobile call bar */
  #apk .h3-car{bottom:11%;width:min(150px,34vw)}
}
@media (max-width:560px){
  #apk .h3-scroll{display:none}
}
/* Motion-sensitive users get the same scene, frozen. The global
   prefers-reduced-motion rule above already kills the animations;
   these two keep it composed rather than mid-frame. */
@media (prefers-reduced-motion:reduce){
  #apk .h3-scene,#apk .h3-car,#apk .h3-chip{transform:none!important}
  #apk .h3-glow{opacity:.85}
}

/* ---- responsive ---- */
@media (max-width:1000px){
  #apk .plans{grid-template-columns:1fr 1fr}
  #apk .counties{grid-template-columns:1fr 1fr}
  #apk .compare{grid-template-columns:1fr 1fr}
}
@media (max-width:900px){
  #apk nav.main{display:none}
  #apk .burger{display:block}
  #apk .hero .wrap{grid-template-columns:1fr;padding:40px 22px}
  #apk .trust .wrap{grid-template-columns:repeat(2,1fr)}
  #apk .grid,#apk .grid-2,#apk .reviews{grid-template-columns:1fr}
  #apk .people{grid-template-columns:1fr}
  #apk .layout{grid-template-columns:1fr}
  #apk .sidebar{position:static}
  #apk .branches{grid-template-columns:1fr}
  #apk footer .cols{grid-template-columns:1fr 1fr}
  #apk .callbar{display:flex}
  #apk body{padding-bottom:66px}
  #apk .wa-fab{bottom:80px}
}
@media (max-width:560px){
  #apk .plans{grid-template-columns:1fr}
  #apk .counties{grid-template-columns:1fr}
  #apk .form .two{grid-template-columns:1fr}
  #apk .hdr-cta .btn{display:none}
  #apk footer .cols{grid-template-columns:1fr}
}

/* ============================================================
   v2 DYNAMICS — scroll reveal, count-up, marquee, elevation.
   All JS-driven and additive: with JS off (or reduced motion)
   nothing is hidden and nothing moves. Zero libraries.
   ============================================================ */
#apk .rv{opacity:0;transform:translateY(24px) scale(.985);
  transition:opacity .65s cubic-bezier(.2,.7,.3,1),transform .65s cubic-bezier(.2,.7,.3,1);
  transition-delay:var(--rvd,0s)}
/* Layer promotion only while a card is waiting to reveal; left on permanently
   it kept 73-98 compositor layers alive on the homepage. */
#apk .rv:not(.in){will-change:opacity,transform}
#apk .rv.in{opacity:1;transform:none}
#apk header.site{transition:box-shadow .25s}
#apk header.site.scrolled{box-shadow:0 10px 34px rgba(18,17,12,.14)}
#apk :is(a,button):focus-visible{outline:3px solid var(--teal);outline-offset:2px;border-radius:6px}
#apk .btn{transition:transform .15s ease, box-shadow .2s ease}
#apk .btn:active{transform:translateY(0) scale(.97)}
#apk .btn-primary:hover{box-shadow:0 10px 32px rgba(238,216,15,.5)}

/* language / USP marquee — the multilingual signature strip */
#apk .mq{overflow:hidden;background:var(--brand);color:#12110C;border-block:1px solid rgba(18,17,12,.14)}
#apk .mq-track{display:flex;align-items:center;width:max-content;animation:mq 30s linear infinite}
#apk .mq-track span{display:inline-block;padding:10px 0 10px 1.4em;font-weight:600;font-size:1.05rem;
  font-family:var(--display);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
#apk .mq-track span.s{opacity:.45;font-weight:900}
#apk .mq:hover .mq-track{animation-play-state:paused}
@keyframes mq{from{transform:translateX(0)}to{transform:translateX(-50%)}}

@media (prefers-reduced-motion:reduce){
  #apk .rv{opacity:1;transform:none;transition:none}
  #apk .mq-track{animation:none}
}

/* ---- announcement banner + footer social links (set from /admin/) ---- */
#apk .announce{background:var(--ink);color:var(--paper);font-size:.92rem}
#apk .announce .wrap{display:flex;align-items:center;gap:12px;padding:9px 20px}
#apk .announce a,#apk .announce span{color:var(--paper);flex:1;min-width:0;text-decoration:none}
#apk .announce a{text-decoration:underline;text-underline-offset:3px}
#apk .announce button{background:none;border:0;color:var(--paper);opacity:.7;cursor:pointer;font-size:1rem;padding:2px 6px}
#apk .announce button:hover{opacity:1}
#apk .fsocial{display:flex;gap:14px;margin-top:10px;flex-wrap:wrap}
#apk .fsocial a{font-size:.88rem}

/* ---- fixed AdSense box (desktop only, set from /admin/) ---- */
#apk~.adbox,.adbox{position:fixed;bottom:18px;left:18px;z-index:70;background:var(--paper,#FCFAF3);border:1px solid rgba(0,0,0,.18);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.18);overflow:hidden}
.adbox-bar{display:flex;justify-content:space-between;align-items:center;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;opacity:.75;padding:4px 8px}
.adbox-bar button{background:none;border:0;cursor:pointer;font-size:.85rem;padding:0 2px;margin:0;color:inherit}
@media(max-width:980px){.adbox{display:none}}

/* ---- in-content ad units (blog archive + article pages) ----
   Each unit is a fixed size (see execution/ADS-SETUP.md); the JS reserves the
   height inline before the ad loads so a fill never shifts the article. The
   label and the rules above/below are what keep AdSense's "clearly
   distinguishable from content" requirement satisfied on a text-heavy page. */
#apk .apk-ad{display:flex;flex-direction:column;align-items:center;gap:6px;margin:28px 0;padding:14px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden}
#apk .apk-ad-lbl{font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600}
#apk .apk-ad ins{margin:0 auto}
/* The archive unit is a grid item: span the full row so it never squeezes a
   300px ad into a 240px card column. */
#apk .apk-ad-feed{grid-column:1/-1;margin:6px 0}
/* Sidebar unit sits below the CTA cards and sticks while the article scrolls. */
#apk .apk-ad-side{margin:0;border:1px solid var(--line);border-radius:14px;padding:12px 0;position:sticky;top:88px}
@media(max-width:991px){#apk .apk-ad-top,#apk .apk-ad-side{display:none}}
/* On phones narrower than the 300px unit, let the box reach the screen edges
   instead of clipping the ad. */
@media(max-width:359px){#apk .apk-ad{margin-left:-14px;margin-right:-14px}}

/* ---- payment page: Zelle QR + instructions ---- */
#apk .zelle-grid{display:grid;grid-template-columns:minmax(220px,300px) 1fr;gap:28px;align-items:start}
#apk .zelle-grid ol{margin:0;padding-left:20px;display:grid;gap:10px}
@media(max-width:760px){
  #apk .zelle-grid{grid-template-columns:1fr;gap:20px}
  #apk .zelle-grid img{margin:0 auto;max-width:260px}
}
