/* ehlify.com — one road. The hero is a lane-marked road under a traffic signal;
   the licence journey below is the same road drawn as a route with five stops. */
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:400 800;font-display:swap;
  src:url(/fonts/jakarta-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:"Plus Jakarta Sans";font-style:normal;font-weight:400 800;font-display:swap;
  src:url(/fonts/jakarta-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Fira Code";font-style:normal;font-weight:500;font-display:swap;
  src:url(/fonts/fira-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:"Fira Code";font-style:normal;font-weight:500;font-display:swap;
  src:url(/fonts/fira-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}

:root{
  --bg:#F4F7FC; --bg-2:#E9EFF9; --surface:rgba(255,255,255,.82); --surface-solid:#FFFFFF;
  --line:rgba(15,23,42,.10); --text:#0F172A; --text-2:#334155; --text-3:#526077;
  --blue:#2563EB; --blue-ink:#1D4ED8; --cyan:#22D3EE; --amber:#C2410C;
  --road:#0F172A; --road-2:#1E293B; --lane:#FBBF24; --on-road:#E8EDF5; --on-road-2:#A3B1C6;
  --mesh-1:#AFCBFF; --mesh-2:#FFDDB0; --mesh-3:#C4EEDF;
  --sig:#0F172A; --sig-off:#334155; --go:#22C55E; --stop:#EF4444; --wait:#F59E0B;
  --sans:"Plus Jakarta Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --mono:"Fira Code",ui-monospace,SFMono-Regular,Menlo,monospace;
  --r-ctl:10px; --r-card:18px; --ease:cubic-bezier(.16,1,.3,1);
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#070B16; --bg-2:#0C1222; --surface:rgba(17,24,43,.78); --surface-solid:#111A2E;
  --line:rgba(226,232,240,.10); --text:#E8EDF5; --text-2:#CBD5E1; --text-3:#A3B1C6;
  --blue:#3B82F6; --blue-ink:#7DB3FF; --amber:#FB923C; --road:#020510; --road-2:#0B1324;
  --mesh-1:#312E81; --mesh-2:#0E7490; --mesh-3:#5B21B6; --sig:#1E293B; --sig-off:#475569; --go:#4ADE80;
  color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#070B16; --bg-2:#0C1222; --surface:rgba(17,24,43,.78); --surface-solid:#111A2E;
  --line:rgba(226,232,240,.10); --text:#E8EDF5; --text-2:#CBD5E1; --text-3:#A3B1C6;
  --blue:#3B82F6; --blue-ink:#7DB3FF; --amber:#FB923C; --road:#020510; --road-2:#0B1324;
  --mesh-1:#312E81; --mesh-2:#0E7490; --mesh-3:#5B21B6; --sig:#1E293B; --sig-off:#475569; --go:#4ADE80;
  color-scheme:dark}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--text);font:400 16px/1.65 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden}
a{color:var(--blue-ink)}
h1,h2,h3{margin:0;letter-spacing:-.025em;text-wrap:balance}
p{margin:0}
.wrap{max-width:1160px;margin:0 auto;padding-left:max(20px,env(safe-area-inset-left,0px));padding-right:max(20px,env(safe-area-inset-right,0px))}
.skip{position:absolute;left:-9999px}
.skip:focus{left:16px;top:16px;z-index:99;background:var(--surface-solid);padding:8px 12px;border-radius:8px}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px;border-radius:6px}

/* brand + signal */
.brand{display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:var(--text);font:800 22px/1 var(--sans);letter-spacing:-.02em}
.brand .ify{color:var(--blue-ink)}
.brand svg{width:34px;height:34px;flex:none}
.ldot{position:relative}
.ldot::after{content:"";position:absolute;left:50%;top:.02em;width:.2em;height:.2em;margin-left:-.1em;border-radius:50%;background:var(--go);
  animation:dot-on 2.4s var(--ease) both}
.sig-h{fill:var(--sig)}
.sig-1,.sig-2{fill:var(--sig-off)}
.sig-3{fill:var(--go)}
.sig-halo{fill:none;stroke:var(--go);stroke-opacity:.35;stroke-width:2;transform-origin:32px 48px;animation:halo 2.6s 2.4s ease-out infinite}
.brand .sig-1{animation:lamp-red 2.4s both}
.brand .sig-2{animation:lamp-amber 2.4s both}
.brand .sig-3{animation:lamp-green 2.4s both}
@keyframes lamp-red{0%,30%{fill:var(--stop)}34%,100%{fill:var(--sig-off)}}
@keyframes lamp-amber{0%,32%{fill:var(--sig-off)}36%,64%{fill:var(--wait)}68%,100%{fill:var(--sig-off)}}
@keyframes lamp-green{0%,66%{fill:var(--sig-off)}70%,100%{fill:var(--go)}}
@keyframes dot-on{0%,66%{background:var(--sig-off)}70%,100%{background:var(--go)}}
@keyframes halo{0%{transform:scale(.8);stroke-opacity:.5}100%{transform:scale(1.5);stroke-opacity:0}}

/* header */
header.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:color-mix(in srgb,var(--bg) 78%,transparent);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:21;background:var(--bg)}
.top .wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-block:14px}
.top nav{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.top nav a{color:var(--text-2);text-decoration:none;font-weight:600;font-size:14px;padding:8px 12px;border-radius:999px;transition:background .2s,color .2s}
.top nav a:hover,.top nav a[aria-current]{background:var(--bg-2);color:var(--text)}
.top nav a.cta{background:var(--text);color:var(--bg)}
.top nav a.cta:hover{background:var(--blue);color:#fff}
@media (max-width:720px){.top nav a:not(.cta):not(.keep){display:none}}

/* hero */
.hero{position:relative;overflow:hidden;isolation:isolate}
.hero::before{content:"";position:absolute;inset:-20% -10% auto;height:120%;z-index:-2;
  background:radial-gradient(40% 50% at 12% 20%,var(--mesh-1),transparent 70%),radial-gradient(35% 45% at 88% 10%,var(--mesh-2),transparent 70%),radial-gradient(40% 40% at 70% 80%,var(--mesh-3),transparent 70%);
  opacity:.55;animation:mesh 22s ease-in-out infinite alternate}
@keyframes mesh{0%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(-3%,2%,0) scale(1.06)}100%{transform:translate3d(3%,-2%,0) scale(1.02)}}
.hero .wrap{display:grid;grid-template-columns:1.15fr .85fr;gap:48px;align-items:center;padding-block:72px 64px}
@media (max-width:900px){.hero .wrap{grid-template-columns:minmax(0,1fr);padding-block:44px 40px;gap:36px}}
.plate{display:inline-flex;align-items:stretch;border:2px solid var(--text);border-radius:8px;overflow:hidden;font:500 13px/1 var(--mono);letter-spacing:.12em;background:var(--surface-solid);color:var(--text);animation:rise .7s var(--ease) both}
.plate b{background:var(--blue);color:#fff;padding:7px 8px;font-weight:500}
.plate span{padding:7px 12px}
.plate .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--go);margin-right:8px;box-shadow:0 0 0 0 rgba(34,197,94,.6);animation:pulse 2.2s infinite;vertical-align:1px}
@keyframes pulse{70%{box-shadow:0 0 0 8px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
.hero h1{font-size:clamp(42px,6.6vw,80px);line-height:1.02;font-weight:800;margin:22px 0 20px}
.hero h1 .w{display:inline-block;animation:word .9s var(--ease) both;animation-delay:calc(.12s + var(--i) * .09s)}
.hero h1 em{font-style:normal;color:var(--blue-ink)}
.hero h1 .lane{background:repeating-linear-gradient(90deg,var(--lane) 0 18px,transparent 18px 30px) left bottom/100% .1em no-repeat;padding-bottom:.06em;animation:word .9s var(--ease) both,lane 1.4s var(--ease) .8s both;animation-delay:calc(.12s + var(--i) * .09s),.9s}
@keyframes word{from{opacity:.001;transform:translateY(.45em) rotate(2deg)}to{opacity:1;transform:none}}
@keyframes lane{from{background-size:0 .1em}to{background-size:100% .1em}}
@keyframes rise{from{opacity:.001;transform:translateY(16px)}to{opacity:1;transform:none}}
.lede{font-size:clamp(17px,1.6vw,20px);color:var(--text-2);max-width:56ch;animation:rise .8s var(--ease) .55s both}
.soon{margin-top:16px;color:var(--text-3);font-weight:600;max-width:56ch;animation:rise .8s var(--ease) .65s both}

form.wait{margin-top:30px;display:flex;gap:10px;flex-wrap:wrap;max-width:520px;animation:rise .8s var(--ease) .75s both}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
form.wait input{flex:1 1 240px;min-width:0;height:52px;padding:0 18px;border-radius:var(--r-ctl);border:1px solid var(--line);background:var(--surface-solid);color:var(--text);font:500 16px var(--sans);transition:border-color .2s,box-shadow .2s}
form.wait input:focus{border-color:var(--blue);box-shadow:0 0 0 4px color-mix(in srgb,var(--blue) 18%,transparent);outline:none}
form.wait input::placeholder{color:var(--text-3)}
.btn{position:relative;overflow:hidden;height:52px;padding:0 22px;border:0;border-radius:var(--r-ctl);cursor:pointer;text-decoration:none;
  background:var(--text);color:var(--bg);font:700 16px var(--sans);display:inline-flex;align-items:center;gap:10px;transition:transform .25s var(--ease),box-shadow .25s var(--ease)}
.btn::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.35) 50%,transparent 70%);transform:translateX(-120%);transition:transform .7s var(--ease)}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 28px -12px rgba(15,23,42,.55)}
.btn:hover::after{transform:translateX(120%)}
.btn svg{width:18px;height:18px;transition:transform .25s var(--ease)}
.btn:hover svg{transform:translateX(4px)}
.formnote{flex-basis:100%;font-size:13px;color:var(--text-3)}
.formnote[data-state="ok"]{color:#15803D;font-weight:600}
.formnote[data-state="err"]{color:var(--amber);font-weight:600}
.roles{display:flex;gap:18px;flex-wrap:wrap;margin-top:22px;font-size:14px;font-weight:600;animation:rise .8s var(--ease) .85s both}
.roles a{color:var(--text-2);text-decoration-color:var(--line);text-underline-offset:4px}
.roles a:hover{color:var(--blue-ink)}

/* hero road */
.road{position:relative;aspect-ratio:4/5;max-width:440px;width:100%;justify-self:end;border-radius:28px;overflow:hidden;
  background:linear-gradient(180deg,var(--road-2),var(--road));box-shadow:0 40px 80px -40px rgba(15,23,42,.55);border:1px solid rgba(255,255,255,.06);
  animation:rise 1s var(--ease) .2s both}
@media (max-width:900px){.road{justify-self:center;aspect-ratio:5/4;max-width:560px}}
.road>svg{position:absolute;inset:0;width:100%;height:100%}
.road .dash{stroke-dasharray:22 26;animation:drive 1.6s linear infinite}
@keyframes drive{to{stroke-dashoffset:-48}}
.road .star{animation:twinkle 3s ease-in-out infinite}
.road .star:nth-child(2){animation-delay:.8s}.road .star:nth-child(3){animation-delay:1.6s}.road .star:nth-child(4){animation-delay:2.2s}
@keyframes twinkle{50%{opacity:.25}}
.card{position:absolute;left:18px;right:18px;background:rgba(255,255,255,.94);color:#0F172A;border-radius:14px;padding:12px 14px;display:flex;align-items:center;gap:12px;
  box-shadow:0 18px 40px -20px rgba(0,0,0,.6);animation:rise .9s var(--ease) both,float 7s ease-in-out infinite}
.card small{display:block;color:#526077;font-size:12px;font-weight:600}
.card strong{font-size:15px}
.card .ic{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;flex:none;background:#EFF6FF;color:#1D4ED8}
.card .ic svg{width:20px;height:20px}
.card.c1{top:18px;animation-delay:.5s,1.4s}
.card.c2{bottom:18px;animation-delay:.8s,2.6s}
.card .tag{margin-left:auto;font:500 11px var(--mono);letter-spacing:.08em;padding:4px 8px;border-radius:6px;background:#DCFCE7;color:#166534}
@keyframes float{0%,100%{translate:0 0}50%{translate:0 -6px}}

/* sections */
section{padding-block:88px}
@media (max-width:640px){section{padding-block:60px}}
.eyebrow{font:500 12px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--blue-ink)}
.sh{display:grid;gap:14px;max-width:720px;margin-bottom:44px}
.sh h2{font-size:clamp(30px,4vw,46px);line-height:1.1;font-weight:800}
.sh p{color:var(--text-2);font-size:18px}

/* scroll reveal: content is visible without JS; only the .js class hides it until it scrolls in */
.js .reveal{opacity:.001;transform:translateY(28px);transition:opacity .8s var(--ease),transform .8s var(--ease);transition-delay:calc(var(--d,0) * 90ms)}
.js .reveal.in{opacity:1;transform:none}

.split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
@media (max-width:820px){.split{grid-template-columns:minmax(0,1fr)}}
.aud{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);padding:30px;display:grid;gap:18px;align-content:start;
  transition:transform .4s var(--ease),border-color .3s,box-shadow .4s var(--ease)}
.aud:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--blue) 40%,var(--line));box-shadow:0 30px 60px -36px rgba(37,99,235,.45)}
.aud h3{font-size:24px;font-weight:800}
.aud .who{font:500 12px var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-3)}
.aud ul{list-style:none;margin:0;padding:0;display:grid;gap:14px}
.aud li{display:grid;grid-template-columns:24px 1fr;gap:12px;color:var(--text-2)}
.aud li b{color:var(--text);display:block;font-weight:700}
.aud li svg{width:22px;height:22px;color:var(--blue);margin-top:2px;transition:transform .4s var(--ease)}
.aud:hover li svg{transform:scale(1.15) rotate(-6deg)}
.aud.school{background:linear-gradient(160deg,var(--road-2),var(--road));color:var(--on-road);border-color:transparent}
.aud.school h3,.aud.school li b{color:#fff}
.aud.school li,.aud.school .who{color:var(--on-road-2)}
.aud.school li svg{color:var(--cyan)}
.aud .more{font-weight:700;text-decoration:none}
.aud.school .more{color:var(--cyan)}

/* 81 provinces marquee */
.cities{padding-block:56px;overflow:hidden;border-block:1px solid var(--line);background:var(--surface)}
.cities .sh{margin-bottom:26px}
.marquee{display:flex;gap:0;overflow:hidden;-webkit-mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.marquee+.marquee{margin-top:12px}
.marquee ul{display:flex;gap:12px;list-style:none;margin:0;padding:0 12px 0 0;flex:none;animation:scroll 70s linear infinite}
.marquee.rev ul{animation-direction:reverse;animation-duration:80s}
.marquee:hover ul{animation-play-state:paused}
.marquee li{font-weight:700;font-size:15px;color:var(--text-2);border:1px solid var(--line);background:var(--surface-solid);padding:8px 14px;border-radius:999px;white-space:nowrap}
.marquee li:nth-child(5n+1){color:var(--blue-ink)}
@keyframes scroll{to{transform:translateX(-100%)}}

/* journey */
.journey{background:var(--bg-2)}
.route{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);position:relative}
.route::before,.route::after{content:"";position:absolute;left:10%;right:10%;top:27px;height:6px;border-radius:6px}
.route::before{background:repeating-linear-gradient(90deg,var(--text-3) 0 14px,transparent 14px 26px);opacity:.45}
.route::after{background:linear-gradient(90deg,var(--blue),var(--cyan) 70%,var(--go));transform-origin:left;transform:scaleX(1)}
.js .route:not(.in)::after{transform:scaleX(0)}
.js .route.in::after{animation:fill 2.6s var(--ease) both}
@keyframes fill{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.route li{text-align:center;padding:0 10px;display:grid;justify-items:center;gap:10px}
.route .n{width:60px;height:60px;border-radius:50%;display:grid;place-items:center;background:var(--blue);border:2px solid var(--blue);font:500 15px var(--mono);color:#fff;position:relative;z-index:1;transition:transform .3s var(--ease)}
.js .route:not(.in) .n{background:var(--surface-solid);border-color:var(--line);color:var(--text)}
.js .route.in .n{animation:stop-on .5s var(--ease) both;animation-delay:calc(var(--i) * .5s)}
@keyframes stop-on{0%{background:var(--surface-solid);border-color:var(--line);color:var(--text);transform:scale(1)}60%{transform:scale(1.18)}100%{background:var(--blue);border-color:var(--blue);color:#fff;transform:scale(1)}}
.route li:last-child .n{background:var(--go);border-color:var(--go);color:#052e16}
.js .route.in li:last-child .n{animation-name:stop-go}
@keyframes stop-go{0%{background:var(--surface-solid);border-color:var(--line);color:var(--text)}60%{transform:scale(1.25)}100%{background:var(--go);border-color:var(--go);color:#052e16;transform:scale(1)}}
.route li:hover .n{transform:scale(1.1)}
.route h3{font-size:17px;font-weight:700}
.route p{font-size:14.5px;color:var(--text-2);max-width:24ch}
.route .car{position:absolute;top:13px;left:10%;width:34px;height:34px;z-index:2;margin-left:-17px;display:none}
.js .route.in .car{display:block;animation:car 2.6s var(--ease) both}
@keyframes car{0%{left:10%;opacity:1}88%{opacity:1}100%{left:90%;opacity:0}}
@media (max-width:860px){
  .route{grid-template-columns:1fr;gap:22px}
  .route::before,.route::after{left:27px;right:auto;top:20px;bottom:20px;width:6px;height:auto}
  .route::before{background:repeating-linear-gradient(180deg,var(--text-3) 0 14px,transparent 14px 26px)}
  .route::after{background:linear-gradient(180deg,var(--blue),var(--cyan) 70%,var(--go));transform-origin:top;transform:scaleY(1)}
  .js .route:not(.in)::after{transform:scaleY(0)}
  @keyframes fill{from{transform:scaleY(0)}to{transform:scaleY(1)}}
  .route li{grid-template-columns:60px 1fr;text-align:left;justify-items:start;column-gap:18px;padding:0}
  .route .n{grid-row:span 2}
  .route p{max-width:none}
  .route .car{display:none!important}
}

/* guides grid */
.guides{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
@media (max-width:900px){.guides{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:600px){.guides{grid-template-columns:minmax(0,1fr)}}
.guide{position:relative;display:grid;gap:10px;align-content:start;padding:24px;border-radius:var(--r-card);background:var(--surface);border:1px solid var(--line);text-decoration:none;color:var(--text);
  transition:transform .4s var(--ease),border-color .3s,box-shadow .4s var(--ease);overflow:hidden}
.guide::before{content:"";position:absolute;left:0;right:0;bottom:0;height:4px;background:repeating-linear-gradient(90deg,var(--lane) 0 14px,transparent 14px 24px);transform:scaleX(0);transform-origin:left;transition:transform .6s var(--ease)}
.guide:hover{transform:translateY(-5px);border-color:color-mix(in srgb,var(--blue) 40%,var(--line));box-shadow:0 26px 50px -34px rgba(37,99,235,.5)}
.guide:hover::before{transform:scaleX(1)}
.guide .k{font:500 11.5px var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--blue-ink)}
.guide h3{font-size:19px;font-weight:800;line-height:1.25}
.guide p{color:var(--text-2);font-size:14.5px}
.guide .go{font-weight:700;font-size:14px;color:var(--blue-ink)}

/* faq */
.faq{display:grid;gap:12px;max-width:860px}
.faq details{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:4px 22px;transition:border-color .3s}
.faq details[open]{border-color:color-mix(in srgb,var(--blue) 35%,var(--line))}
.faq summary{cursor:pointer;list-style:none;padding:18px 0;font-weight:700;font-size:17px;display:flex;justify-content:space-between;gap:16px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font:500 22px/1 var(--mono);color:var(--blue-ink);transition:transform .3s var(--ease)}
.faq details[open] summary::after{transform:rotate(45deg)}
.faq details p{padding:0 0 20px;color:var(--text-2);max-width:68ch}
.faq details[open] p{animation:rise .5s var(--ease) both}

/* closing */
.closing .box{border-radius:28px;padding:56px clamp(24px,5vw,64px);display:grid;grid-template-columns:auto 1.3fr .7fr;gap:30px;align-items:center;
  background:linear-gradient(120deg,#1D4ED8,#2563EB 45%,#0891B2);background-size:200% 200%;animation:sheen 12s ease-in-out infinite alternate;color:#fff;position:relative;overflow:hidden}
@keyframes sheen{to{background-position:100% 50%}}
.closing .box::after{content:"";position:absolute;left:0;right:0;bottom:22px;height:6px;background:repeating-linear-gradient(90deg,rgba(255,255,255,.5) 0 26px,transparent 26px 46px);animation:drive2 2.4s linear infinite}
@keyframes drive2{to{background-position:-92px 0}}
.closing .bigsig{width:56px;height:112px}
.closing .bigsig .sig-h{fill:#0F172A}.closing .bigsig .sig-1,.closing .bigsig .sig-2{fill:#334155}.closing .bigsig .sig-3{fill:#4ADE80}
.closing .bigsig .sig-halo{stroke:#4ADE80}
.closing h2{font-size:clamp(30px,4vw,48px);font-weight:800;line-height:1.08}
.closing p{color:#DBEAFE;font-size:18px;margin-top:12px}
.closing .btn{background:#fff;color:#0F172A;justify-self:end}
@media (max-width:760px){.closing .box{grid-template-columns:1fr}.closing .btn{justify-self:start}.closing .bigsig{width:40px;height:80px}}

/* article (guides) */
.crumbs{font-size:14px;color:var(--text-3);padding-top:28px}
.crumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.crumbs li+li::before{content:"/";margin-right:6px;color:var(--text-3)}
.crumbs a{color:var(--text-2);text-decoration:none}
.crumbs a:hover{color:var(--blue-ink)}
.art-head{padding-block:28px 36px;display:grid;gap:16px;max-width:820px}
.art-head h1{font-size:clamp(34px,5vw,56px);line-height:1.06;font-weight:800;animation:rise .8s var(--ease) both}
.art-head .sum{font-size:19px;color:var(--text-2);animation:rise .8s var(--ease) .1s both}
.art-head .meta{font:500 12.5px var(--mono);letter-spacing:.06em;color:var(--text-3);display:flex;gap:14px;flex-wrap:wrap}
.art{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:56px;padding-bottom:72px}
@media (max-width:960px){.art{grid-template-columns:minmax(0,1fr)}.toc{display:none}}
.prose{max-width:70ch}
.prose>*+*{margin-top:18px}
.prose h2{font-size:28px;font-weight:800;line-height:1.2;margin-top:44px;scroll-margin-top:90px}
.prose h3{font-size:20px;font-weight:700;margin-top:28px}
.prose p,.prose li{color:var(--text-2);font-size:17px}
.prose ul,.prose ol{padding-left:22px;display:grid;gap:8px}
.prose strong{color:var(--text)}
.prose .note{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--lane);border-radius:12px;padding:16px 18px;font-size:15.5px}
.prose .tbl{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:var(--surface-solid)}
.prose table{border-collapse:collapse;width:100%;min-width:560px;font-size:15px}
.prose th,.prose td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:top}
.prose th{font:500 12px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);background:var(--bg-2)}
.prose tr:last-child td{border-bottom:0}
.prose td:first-child{font-weight:800;color:var(--text);white-space:nowrap}
.prose ol.steps{list-style:none;padding:0;counter-reset:s;gap:14px}
.prose ol.steps>li{counter-increment:s;display:grid;grid-template-columns:44px 1fr;gap:14px;align-items:start}
.prose ol.steps>li::before{content:counter(s);width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--blue);color:#fff;font:500 15px var(--mono)}
.prose .sources{font-size:14px;color:var(--text-3)}
.prose .sources a{color:var(--text-2)}
.toc{position:sticky;top:96px;align-self:start;display:grid;gap:10px;font-size:14px}
.toc b{font:500 12px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3)}
.toc a{color:var(--text-2);text-decoration:none;border-left:2px solid var(--line);padding:2px 0 2px 12px;transition:color .2s,border-color .2s}
.toc a:hover,.toc a.on{color:var(--blue-ink);border-color:var(--blue)}
.related{border-top:1px solid var(--line);padding-block:56px 72px}
.related h2{font-size:26px;font-weight:800;margin-bottom:22px}

footer{padding-block:48px 56px;color:var(--text-3);font-size:14px;border-top:1px solid var(--line)}
footer .wrap{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:28px}
@media (max-width:760px){footer .wrap{grid-template-columns:1fr}}
footer b{display:block;color:var(--text);font-size:14px;margin-bottom:10px}
footer ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
footer a{color:var(--text-2);text-decoration:none}
footer a:hover{color:var(--blue-ink);text-decoration:underline}
footer .legal{grid-column:1/-1;border-top:1px solid var(--line);padding-top:18px}

/* 404 */
.nf{padding-block:96px;text-align:center;display:grid;gap:18px;justify-items:center}
.nf h1{font-size:clamp(36px,6vw,64px);font-weight:800}
.nf p{color:var(--text-2);font-size:18px;max-width:46ch}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}html{scroll-behavior:auto}.js .reveal{opacity:1;transform:none}.marquee ul{flex-wrap:wrap}.marquee{-webkit-mask:none;mask:none}.marquee ul[aria-hidden]{display:none}}
@media (forced-colors:active){.hero::before,.road{background:Canvas}}
