/* ==========================================================================
   Wati9a — liquid glass over a living aurora.
   Layout order: 1 tokens 2 background 3 base 4 header 5 shell 6 hero
   7 marquee 8 cards 9 content 10 forms/footer 11 motion 12 responsive 13 a11y
   Every animation below is transform/opacity/filter on a promoted layer and is
   switched off wholesale in the prefers-reduced-motion block at the bottom.
   ========================================================================== */
:root{--bg:#0a0820;--ink:#edeefc;--mut:#a9afd2;--line:rgba(255,255,255,.12);
--acc:#6366f1;--acc2:#a855f7;--acc3:#22d3ee;--accd:#b9c0ff;--gold:#fcd34d;
--soft:rgba(255,255,255,.055);--chip:rgba(139,92,246,.22);
--brd:rgba(255,255,255,.13);--brd2:rgba(255,255,255,.32);
--glass:linear-gradient(158deg,rgba(255,255,255,.11),rgba(255,255,255,.025) 46%,rgba(255,255,255,.065));
--panel:rgba(17,14,42,.5);--panel2:rgba(27,22,58,.46);
--ring:inset 0 1px 0 rgba(255,255,255,.17),inset 0 0 0 1px rgba(255,255,255,.035);
--sh:0 24px 54px -28px rgba(0,0,0,.85),0 6px 16px -10px rgba(0,0,0,.55);
--blur:blur(12px) saturate(150%);--ease:cubic-bezier(.2,.7,.3,1);--r:18px;color-scheme:dark}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
/* dark, unobtrusive scrollbars on the panels that scroll inside themselves */
.dropmenu,.tablewrap,.readme table,.mobnav,pre{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.24) transparent}
body{margin:0;font-family:"Inter",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg);line-height:1.62;-webkit-font-smoothing:antialiased}

/* ===== 2. living background ================================================
   One fixed, GPU-promoted layer: a painted-once gradient field, four slowly
   drifting colour bodies, a sweeping light band, a contrast veil (this is the
   old body:after — it is what keeps text legible) and a fine grain. */
.bg{position:fixed;inset:-10vmax;z-index:-3;pointer-events:none;overflow:hidden;contain:layout paint;transform:translate3d(0,0,0);
background:radial-gradient(120% 85% at 50% -12%,#3a2a86 0,rgba(58,42,134,0) 62%),radial-gradient(85% 62% at 100% 2%,#15496b 0,rgba(21,73,107,0) 58%),radial-gradient(75% 62% at 0% 100%,#3b1663 0,rgba(59,22,99,0) 60%),linear-gradient(180deg,#120d33,#0c0926 55%,#08071c)}
.bg .b{position:absolute;border-radius:50%;background:radial-gradient(closest-side,var(--c),rgba(10,8,32,0) 72%);will-change:transform;animation:drift var(--t) var(--ease) var(--dl,0s) infinite alternate}
.b1{--c:rgba(120,120,255,.7);--dx:9vw;--dy:6vh;--s:1.18;--t:46s;width:64vw;height:64vw;left:-16vw;top:-18vh}
.b2{--c:rgba(180,95,255,.55);--dx:-11vw;--dy:8vh;--s:1.22;--t:59s;--dl:-9s;width:56vw;height:56vw;right:-14vw;top:-10vh}
.b3{--c:rgba(34,211,238,.32);--dx:8vw;--dy:-9vh;--s:1.16;--t:67s;--dl:-21s;width:48vw;height:48vw;left:16vw;bottom:-20vh}
.b4{--c:rgba(236,72,153,.26);--dx:-9vw;--dy:-7vh;--s:1.26;--t:75s;--dl:-34s;width:42vw;height:42vw;right:4vw;bottom:-16vh}
@keyframes drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(var(--dx),var(--dy),0) scale(var(--s))}}
.band{position:absolute;left:-30%;right:-30%;top:18%;height:40vh;filter:blur(34px);will-change:transform;
background:linear-gradient(100deg,rgba(124,58,237,0) 22%,rgba(147,197,253,.1) 44%,rgba(216,180,254,.15) 56%,rgba(124,58,237,0) 78%);
animation:band 41s ease-in-out infinite alternate}
@keyframes band{from{transform:rotate(-8deg) translate3d(-7%,2%,0)}to{transform:rotate(-4deg) translate3d(7%,-4%,0)}}
.veil{position:absolute;inset:0;background:radial-gradient(125% 95% at 50% 0,rgba(6,5,20,0),rgba(6,5,20,.5) 78%),linear-gradient(180deg,rgba(7,6,22,.12),rgba(7,6,22,.34) 45%,rgba(7,6,22,.62))}
.grain{position:absolute;inset:0;opacity:.05;background-size:150px 150px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='150' height='150'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='150' height='150' filter='url(%23n)'/%3E%3C/svg%3E")}

/* ===== 3. base ===== */
.wrap{max-width:1120px;margin:0 auto;padding:0 22px}
a{color:var(--accd);text-decoration:none;transition:color .2s}a:hover{text-decoration:underline}
a.card:hover,a.ccard:hover,a.mitem:hover,.logo:hover{text-decoration:none}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
img{max-width:100%}
:focus-visible{outline:2px solid #c7b9ff;outline-offset:3px;border-radius:6px}
::selection{background:rgba(168,85,247,.4);color:#fff}
h1{font-size:clamp(27px,4.2vw,36px);letter-spacing:-.025em;line-height:1.16;margin:.1em 0 .4em}
h2{font-size:clamp(20px,2.6vw,23px);letter-spacing:-.015em;margin:1.7em 0 .6em}
h3{font-size:17px;margin:1.2em 0 .35em}
.lead{font-size:18.5px;color:var(--mut);margin:0 0 20px;max-width:760px}.muted{color:var(--mut)}
/* the glass recipe every surface shares */
.glass,main.wrap,.formwrap,.cta,.tablewrap,.hglass{background-image:var(--glass);background-color:var(--panel);border:1px solid var(--brd);box-shadow:var(--ring),var(--sh);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}

/* ===== 4. header + nav ===== */
header.site{position:sticky;top:0;z-index:40;background:rgba(11,9,32,.5);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border-bottom:1px solid rgba(255,255,255,.08);box-shadow:inset 0 1px 0 rgba(255,255,255,.09);transition:background .35s ease,box-shadow .35s ease}
body.scrolled header.site{background:rgba(9,7,28,.8);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 16px 40px -22px rgba(0,0,0,.9)}
.hbar{display:flex;align-items:center;gap:14px;height:66px}
.logo{display:flex;align-items:center;gap:10px;font-weight:800;font-size:19px;color:#fff;letter-spacing:-.02em}
.mark{position:relative;display:inline-flex;width:32px;height:32px;border-radius:10px;background:linear-gradient(135deg,var(--acc),var(--acc2));color:#fff;align-items:center;justify-content:center;font-weight:800;box-shadow:0 6px 18px rgba(99,102,241,.5),var(--ring);overflow:hidden}
.mark:after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 34%,rgba(255,255,255,.55) 50%,transparent 66%);transform:translateX(-130%);animation:sheen 7s ease-in-out 2s infinite}
@keyframes sheen{0%{transform:translateX(-130%)}22%,100%{transform:translateX(130%)}}
.nav{display:flex;align-items:center;gap:4px;margin-left:6px}
.nav>a,.dropbtn{position:relative;font-size:14.5px;font-weight:600;color:#d8daf0;padding:8px 11px;border-radius:10px;background:none;border:0;cursor:pointer;display:inline-flex;align-items:center;gap:5px;font-family:inherit;white-space:nowrap;transition:color .2s,background .2s}
.nav>a:hover,.dropbtn:hover{color:#fff;background:rgba(255,255,255,.1);text-decoration:none}
.nav .api{color:var(--gold);background:rgba(251,191,36,.13);box-shadow:inset 0 0 0 1px rgba(251,191,36,.2)}
.nav .api:hover{background:rgba(251,191,36,.22)}
.drop{position:relative}
.dropmenu{position:absolute;top:calc(100% + 8px);left:0;background:rgba(17,13,44,.95);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);border:1px solid var(--brd);border-radius:16px;box-shadow:var(--ring),0 24px 60px -18px rgba(0,0,0,.85);padding:8px;min-width:300px;display:grid;grid-template-columns:1fr 1fr;gap:2px;opacity:0;visibility:hidden;transform:translateY(8px) scale(.985);transition:opacity .2s var(--ease),transform .2s var(--ease),visibility .2s;max-height:min(70vh,560px);overflow:auto}
.dropmenu.wide{grid-template-columns:repeat(3,1fr);min-width:560px}
.drop:hover .dropmenu,.drop:focus-within .dropmenu{opacity:1;visibility:visible;transform:none}
.dropmenu a{font-size:13.5px;font-weight:600;color:var(--ink);padding:8px 10px;border-radius:9px;white-space:nowrap}
.dropmenu a:hover{background:var(--chip);color:#fff;text-decoration:none}
.search{margin-left:auto;display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.07);border:1px solid var(--brd);border-radius:12px;padding:0 12px;color:#c6c9e6;transition:border-color .2s,background .2s,box-shadow .2s}
.search:focus-within{border-color:rgba(167,139,250,.8);background:rgba(255,255,255,.13);box-shadow:0 0 0 4px rgba(139,92,246,.18)}
.search input{border:0;background:none;outline:none;padding:9px 2px;font-size:14px;width:140px;color:#fff}
.search input::placeholder{color:#a9adcf}
.req{position:relative;overflow:hidden;background:linear-gradient(135deg,var(--acc),var(--acc2));color:#fff!important;font-weight:700;font-size:14px;padding:9px 15px;border-radius:11px;white-space:nowrap;box-shadow:0 8px 20px -8px rgba(99,102,241,.9),var(--ring);transition:transform .2s var(--ease),box-shadow .2s}
.req:hover{text-decoration:none;transform:translateY(-1px);box-shadow:0 12px 26px -8px rgba(139,92,246,.95),var(--ring)}
.burger{display:none;flex-direction:column;gap:5px;background:none;border:0;cursor:pointer;padding:8px}
.burger span{width:22px;height:2px;background:#fff;border-radius:2px;transition:transform .25s var(--ease),opacity .2s}
body.navopen .burger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
body.navopen .burger span:nth-child(2){opacity:0}
body.navopen .burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.mobnav{display:none}
body.navopen .mobnav{display:block;border-top:1px solid var(--line);padding:14px 22px;background:rgba(13,10,36,.94);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);max-height:78vh;overflow:auto;animation:drop .3s var(--ease)}
@keyframes drop{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
.mobnav>a{display:block;padding:11px 8px;font-weight:700;color:var(--ink);border-bottom:1px solid var(--line)}
.mobnav>strong{display:block;margin:12px 0 4px;color:var(--mut);font-size:13px}
.mcats{display:grid;grid-template-columns:1fr 1fr;gap:2px}.mcats a{padding:8px;font-size:13px;font-weight:600;color:var(--mut)}

/* ===== 5. page shell ===== */
.container{padding:30px 0 64px}
main.wrap{position:relative;border-radius:28px;margin:26px auto 50px;padding:0 36px}
main.wrap:before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:radial-gradient(90% 40% at 50% 0,rgba(168,85,247,.13),transparent 70%)}
main.wrap>.container{position:relative;padding:36px 0 58px}
/* home floats straight on the aurora — no sheet */
body.home main.wrap{background:none;background-color:transparent;box-shadow:none;border:0;-webkit-backdrop-filter:none;backdrop-filter:none;padding:0 22px;margin:0 auto}
body.home main.wrap:before{display:none}
body.home main.wrap>.container{padding:0 0 70px}
body.home .hero{background:none;border:0;box-shadow:none;border-radius:0;padding:104px 26px 44px;-webkit-backdrop-filter:none;backdrop-filter:none}
body.home .secthead h2{color:#fff}
.crumbs{font-size:13px;color:var(--mut);margin:0 0 20px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.crumbs a{color:var(--mut)}.crumbs a:hover{color:var(--accd)}.crumbs span{color:var(--mut);opacity:.6}.crumbs .cur{color:var(--ink);font-weight:600}

/* ===== 6. hero ===== */
.hero{position:relative;text-align:center;padding:56px 26px 44px;margin:0 -22px;border-radius:0 0 30px 30px;overflow:hidden;color:#fff;
background-image:var(--glass);background-color:rgba(30,25,74,.5);border:1px solid var(--brd);border-top:0;box-shadow:var(--ring),var(--sh);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
.hero:before{content:"";position:absolute;inset:-40% -20% auto;height:560px;z-index:0;
background:radial-gradient(50% 60% at 32% 12%,rgba(139,92,246,.5),transparent 70%),radial-gradient(40% 50% at 74% 6%,rgba(34,211,238,.2),transparent 70%);
animation:pulse 16s ease-in-out infinite alternate}
@keyframes pulse{from{transform:translate3d(-2%,0,0) scale(1);opacity:.85}to{transform:translate3d(3%,2%,0) scale(1.12);opacity:1}}
.hero>*{position:relative;z-index:1}
/* interior heroes (404, thank-you) sit inside the sheet, so they close all four sides */
body:not(.home) .hero{margin:0;padding:52px 26px 46px;border-radius:24px;border:1px solid var(--brd)}
.badge{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);box-shadow:var(--ring);color:var(--gold);font-weight:700;font-size:13px;padding:7px 15px;border-radius:999px;margin-bottom:18px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.hero h1{font-size:clamp(32px,6.4vw,56px);line-height:1.06;letter-spacing:-.035em;margin:0 0 16px;color:#fff}
.hero h1 .g{background:linear-gradient(100deg,#a5b4fc,#f0abfc 26%,#67e8f9 50%,#fcd34d 72%,#a5b4fc 100%);background-size:260% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:flow 18s linear infinite}
@keyframes flow{to{background-position:260% 0}}
.hero p{font-size:19px;color:#cdc8f7;max-width:660px;margin:0 auto 22px}
.hbtns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,var(--acc),var(--acc2) 55%,#7c3aed);background-size:200% 200%;color:#fff;padding:12px 22px;border-radius:12px;font-weight:700;font-size:15px;border:0;cursor:pointer;box-shadow:0 14px 30px -12px rgba(99,102,241,.9),var(--ring);transition:transform .22s var(--ease),box-shadow .25s,background-position .6s var(--ease)}
.btn:hover{text-decoration:none;transform:translateY(-2px);background-position:100% 50%;box-shadow:0 18px 38px -12px rgba(168,85,247,.95),var(--ring)}
.btn:after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 36%,rgba(255,255,255,.4) 50%,transparent 64%);transform:translateX(-130%)}
.btn:hover:after{animation:swipe .75s var(--ease)}
@keyframes swipe{to{transform:translateX(130%)}}
.btn.ghost{background:rgba(255,255,255,.08);color:#eef0fb;border:1px solid var(--brd);box-shadow:var(--ring);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.btn.ghost:hover{background:rgba(255,255,255,.16);box-shadow:var(--ring),0 12px 28px -14px rgba(0,0,0,.8)}
.searchbox{max-width:560px;margin:26px auto 0;position:relative}
.searchbox input{width:100%;padding:16px 18px;border-radius:15px;font-size:16px;font-family:inherit;background:rgba(255,255,255,.07);border:1px solid var(--brd);color:var(--ink);box-shadow:var(--ring),0 10px 30px -18px rgba(0,0,0,.9);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transition:border-color .2s,box-shadow .25s,background .2s}
.searchbox input::placeholder{color:#a9adcf}
.searchbox input:focus{outline:none;border-color:rgba(167,139,250,.85);background:rgba(255,255,255,.12);box-shadow:var(--ring),0 0 0 4px rgba(139,92,246,.2),0 14px 36px -18px rgba(139,92,246,.9)}
.hero .btn.ghost{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.26)}
.hero .btn.ghost:hover{background:rgba(255,255,255,.2)}
.stats{display:flex;gap:12px;justify-content:center;margin:30px 0 0;flex-wrap:wrap}
.stats>div{flex:0 1 190px;padding:16px 18px;border-radius:16px;background-image:var(--glass);background-color:var(--panel2);border:1px solid var(--brd);box-shadow:var(--ring);color:var(--mut);font-size:13.5px;font-weight:600;letter-spacing:.02em;transition:transform .3s var(--ease),border-color .3s}
.stats>div:hover{transform:translateY(-3px);border-color:var(--brd2)}
.stats b{display:block;font-size:30px;color:var(--ink);font-weight:800;letter-spacing:-.03em;line-height:1.1;font-variant-numeric:tabular-nums;
background:linear-gradient(120deg,#fff,#c4b5fd);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ===== 7. logo marquee (real tools, real icons) ===== */
/* Deliberately NOT glass. A backdrop-filter here composites the strip into its own layer, and the
   child .mrow animating to translate3d(-50%) then lands on fractional pixels inside that layer —
   which is what made the icons and labels look blurry. It is also the most expensive surface on the
   page: the only region that never stops moving, forcing the GPU to re-blur its backdrop every
   frame. An opaque panel reads almost identically and is crisp and cheap. */
.marqwrap{position:relative;margin:26px 0 4px;padding:18px 0 20px;border-radius:22px;overflow:hidden;
background-image:var(--glass);background-color:rgba(26,21,60,.92);border:1px solid var(--brd);box-shadow:var(--ring),var(--sh)}
.marqcap{margin:0 0 14px;text-align:center;font-size:13px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--mut)}
.marq{position:relative;overflow:hidden;padding:5px 0;
-webkit-mask-image:linear-gradient(90deg,transparent,#000 13%,#000 87%,transparent);mask-image:linear-gradient(90deg,transparent,#000 13%,#000 87%,transparent)}
.mrow{display:flex;gap:10px;width:max-content;animation:slide var(--t,64s) linear infinite;will-change:transform;transform:translateZ(0);backface-visibility:hidden}
.mrow.rev{animation-direction:reverse}
.marq:hover .mrow,.marq:focus-within .mrow{animation-play-state:paused}
@keyframes slide{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
.mitem{display:flex;align-items:center;gap:9px;flex:none;padding:8px 15px 8px 9px;border-radius:13px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);box-shadow:var(--ring);color:var(--ink);font-size:13.5px;font-weight:600;white-space:nowrap;transition:background .25s,border-color .25s,transform .25s var(--ease)}
.mitem:hover{background:rgba(255,255,255,.12);border-color:var(--brd2);transform:translateY(-2px)}
.mitem img{width:30px;height:30px;border-radius:9px;background:#fff;flex:none}

/* ===== 8. cards + grids ===== */
.secthead{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin:46px 0 4px}
.secthead h2{position:relative;margin:0;padding-bottom:8px}
.secthead h2:after{content:"";position:absolute;left:0;bottom:0;width:56px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--acc),var(--acc2),var(--acc3),var(--acc));background-size:300% 100%;animation:flow 9s linear infinite}
.secthead a{font-size:14px;font-weight:700;white-space:nowrap}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px;margin:22px 0}
.card{position:relative;isolation:isolate;border:1px solid var(--brd);border-radius:var(--r);padding:20px;overflow:hidden;color:inherit;
background-image:var(--glass);background-color:var(--panel2);box-shadow:var(--ring),0 16px 36px -24px rgba(0,0,0,.85);
transition:transform .35s var(--ease),box-shadow .35s var(--ease),border-color .35s}
.card:before{content:"";position:absolute;inset:0 0 auto 0;height:2px;z-index:2;background:linear-gradient(90deg,var(--acc),var(--acc2),var(--acc3));transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease)}
.card:after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:0;transition:opacity .4s;
background:radial-gradient(300px circle at var(--mx,50%) var(--my,0%),rgba(168,85,247,.22),transparent 62%)}
.card:hover{transform:translateY(-5px);border-color:var(--brd2);box-shadow:var(--ring),0 28px 54px -26px rgba(0,0,0,.95),0 0 34px -14px rgba(139,92,246,.55)}
.card:hover:before{transform:scaleX(1)}
.card:hover:after{opacity:1}
.chead{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.chead strong{font-size:16px;font-weight:700;color:var(--ink)}
.chead .chip{margin:0 0 0 auto}
.ico{width:40px;height:40px;border-radius:11px;box-shadow:0 4px 14px -6px rgba(0,0,0,.8),var(--ring);background:#fff;flex:none}
.card h3{margin:.15em 0 .35em;font-size:17px}
.card h3 a{color:var(--ink)}.card h3 a:hover{color:#fff;text-decoration:none}
.card p{color:var(--mut);font-size:14px;margin:.2em 0 0}
.card .meta{font-size:12.5px;color:var(--mut);margin-top:10px;opacity:.85}
.chip{display:inline-block;background:var(--chip);color:var(--accd);font-size:11.5px;font-weight:700;padding:4px 11px;border-radius:999px;text-transform:uppercase;letter-spacing:.03em;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08);transition:background .2s,color .2s}
a.chip:hover{background:rgba(139,92,246,.42);color:#fff;text-decoration:none}
.catico{display:inline-flex;width:40px;height:40px;border-radius:12px;background:linear-gradient(150deg,rgba(139,92,246,.4),rgba(99,102,241,.16));color:#dcd7ff;align-items:center;justify-content:center;flex:none;box-shadow:var(--ring)}
.catico svg{width:22px;height:22px}
.pthumb{width:40px;height:40px;border-radius:11px;box-shadow:0 4px 14px -6px rgba(0,0,0,.8),var(--ring);background:#fff;flex:none}
/* trust strip */
.trust{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:30px 0 6px;padding:0}
.ti{display:flex;align-items:center;gap:8px;color:#d5d9ef;font-size:13.5px;font-weight:600;padding:9px 15px;border-radius:999px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);box-shadow:var(--ring);transition:transform .3s var(--ease),background .3s}
.ti:hover{transform:translateY(-2px);background:rgba(255,255,255,.1)}
.ti svg{width:18px;height:18px;color:var(--accd)}
/* carousel */
.carousel{position:relative;margin:14px -22px 0}
.ctrack{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;padding:10px 22px 20px;scrollbar-width:none}
.ctrack::-webkit-scrollbar{display:none}
/* Per-card glass is the single most expensive thing on this page: 25 .ccard surfaces were
   blurring 1.85M px2 of backdrop, and the footer another 1.13M - together ~75%% of all
   backdrop work, recomputed on every scroll frame. Opaque panels are visually near-identical
   against the aurora and cost nothing. Glass is kept for the few small chrome surfaces
   (header, dropdowns, search) where it actually reads as glass. */
.ccard{flex:0 0 270px;scroll-snap-align:start;border:1px solid var(--brd);border-radius:20px;padding:22px;color:inherit;position:relative;overflow:hidden;
background-image:var(--glass);background-color:rgba(26,21,60,.90);box-shadow:var(--ring),0 16px 36px -24px rgba(0,0,0,.85);
transition:transform .35s var(--ease),box-shadow .35s,border-color .35s}
.ccard:hover{transform:translateY(-6px);border-color:var(--brd2);box-shadow:var(--ring),0 30px 56px -26px rgba(0,0,0,.95),0 0 34px -14px rgba(99,102,241,.6)}
.ccard img{width:54px;height:54px;border-radius:15px;box-shadow:0 6px 18px -8px rgba(0,0,0,.8),var(--ring);background:#fff}
.ccard h3{margin:14px 0 6px;font-size:17px;color:var(--ink)}
.ccard p{color:var(--mut);font-size:13.5px;margin:0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.cbtn{position:absolute;top:38%;width:44px;height:44px;border-radius:50%;border:1px solid var(--brd);background:rgba(24,19,56,.75);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);color:var(--ink);font-size:22px;cursor:pointer;box-shadow:var(--ring),0 10px 26px -12px rgba(0,0,0,.9);z-index:2;display:flex;align-items:center;justify-content:center;line-height:1;transition:transform .25s var(--ease),color .2s,border-color .2s}
.cbtn:hover{color:#fff;border-color:var(--brd2);transform:scale(1.08)}
.cbtn.prev{left:8px}.cbtn.next{right:8px}

/* ===== 9. content blocks ===== */
.toolhead{display:flex;align-items:center;gap:16px;margin-bottom:4px}
.toolhead .ico{width:60px;height:60px;border-radius:17px}
.cta{border-radius:20px;padding:24px;margin:24px 0;display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;position:relative;overflow:hidden;background-color:rgba(64,44,132,.34)}
.cta:before{content:"";position:absolute;inset:0;background:radial-gradient(70% 140% at 12% 0,rgba(139,92,246,.3),transparent 70%);animation:pulse 14s ease-in-out infinite alternate}
.cta>*{position:relative}
.cta strong{font-size:18px;letter-spacing:-.01em}
.steps{list-style:none;padding:0;margin:14px 0;display:grid;gap:12px}
.steps li{display:flex;gap:14px;align-items:flex-start;background:var(--soft);border:1px solid var(--brd);border-radius:16px;padding:15px 17px;box-shadow:var(--ring);transition:transform .3s var(--ease),background .3s,border-color .3s}
.steps li:hover{transform:translateX(4px);background:rgba(255,255,255,.08);border-color:var(--brd2)}
.steps .num{flex:none;width:30px;height:30px;border-radius:10px;background:linear-gradient(135deg,var(--acc),var(--acc2));color:#fff;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:14px;box-shadow:0 8px 18px -8px rgba(99,102,241,.9)}
.steps strong{display:block;font-size:15.5px}
.steps p{margin:3px 0 0;color:var(--mut);font-size:14px}.steps pre{margin:8px 0 0}
.tablewrap{overflow:auto;border-radius:16px}
table.io{border-collapse:collapse;width:100%;font-size:14px;min-width:480px}
table.io th,table.io td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:top}
table.io th{background:rgba(255,255,255,.05);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--mut)}
table.io tbody tr{transition:background .2s}table.io tbody tr:hover{background:rgba(255,255,255,.04)}
table.io tr:last-child td{border-bottom:0}
table.io td code{background:var(--chip);color:var(--accd);padding:2px 7px;border-radius:6px;font-size:13px}
.ty{color:var(--mut);font-size:12.5px}
.fields{display:flex;flex-wrap:wrap;gap:7px;margin:12px 0}
.fields code{background:var(--soft);border:1px solid var(--brd);padding:5px 11px;border-radius:9px;font-size:13px;color:var(--ink);box-shadow:var(--ring);transition:transform .2s var(--ease),border-color .2s}
.fields code:hover{transform:translateY(-2px);border-color:var(--brd2)}
/* rating / usage / price — the facts the page must SHOW, because the JSON-LD states them */
.tmeta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:2px 0 14px;font-size:14px;color:var(--mut)}
.tmeta .rating{display:inline-flex;align-items:center;gap:7px}
.tmeta .stars{color:var(--gold);letter-spacing:1px;font-size:13px}
.tmeta .rating b{color:var(--ink);font-size:15px}
.tmeta .usage:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--acc3);display:inline-block;margin-right:8px;vertical-align:middle}
.tmeta .pricetag{color:var(--ink);font-weight:650;background:var(--soft);border:1px solid var(--brd);border-radius:999px;padding:3px 12px;box-shadow:var(--ring)}
.bigprice{margin:0 0 14px;font-size:16px;color:var(--mut)}
.bigprice b{font-size:30px;color:var(--ink);font-weight:800;letter-spacing:-.02em}
.bigprice span{font-size:16px}
.bigprice em{font-style:normal;color:var(--accd);margin-left:8px;font-size:14.5px}
table.io td.num,table.io th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.xlinks dl{margin:10px 0 0;display:grid;grid-template-columns:auto 1fr;gap:10px 18px;align-items:baseline}
.xlinks dt{color:var(--mut);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:700}
.xlinks dd{margin:0;display:flex;flex-wrap:wrap;gap:7px}
.xchip{display:inline-block;background:var(--soft);border:1px solid var(--brd);border-radius:999px;padding:4px 12px;font-size:13px;color:var(--accd);box-shadow:var(--ring);transition:transform .2s var(--ease),border-color .2s,color .2s}
.xchip:hover{transform:translateY(-2px);border-color:var(--brd2);color:var(--ink);text-decoration:none}
@media(max-width:560px){.xlinks dl{grid-template-columns:1fr;gap:4px 0}.xlinks dt{margin-top:10px}}
.toolgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:14px 0}
.tool{background:var(--soft);border:1px solid var(--brd);border-radius:13px;padding:13px 15px;font-weight:600;font-size:14px;box-shadow:var(--ring);transition:transform .25s var(--ease),border-color .25s,background .25s}
.tool:hover{border-color:var(--brd2);background:rgba(255,255,255,.09);transform:translateY(-3px)}
.readme{margin-top:16px;color:#d5d9ee}
.readme h2{font-size:21px}.readme h3{font-size:16px}
.readme table{border-collapse:collapse;width:100%;margin:14px 0;font-size:14px;display:block;overflow:auto}
.readme th,.readme td{border:1px solid var(--line);padding:9px 12px;text-align:left}
.readme th{background:rgba(255,255,255,.05)}
.readme pre{background:rgba(6,5,20,.72);color:#e3e8f6;padding:16px;border-radius:14px;border:1px solid var(--brd);box-shadow:var(--ring);overflow:auto;font-size:13px;line-height:1.5}
.readme code{background:var(--chip);color:#cdd2ff;padding:2px 6px;border-radius:6px;font-size:.9em}
.readme pre code{background:none;color:inherit;padding:0}
pre{background:rgba(6,5,20,.72);color:#e3e8f6;padding:14px;border-radius:13px;border:1px solid var(--brd);box-shadow:var(--ring);overflow:auto;font-size:13px}
pre code{background:none;color:inherit}
.smsec{margin:24px 0}
.smlist{list-style:none;padding:0;margin:10px 0;display:grid;gap:7px}
.smlist.cols{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}
.smlist li{font-size:14.5px}.smlist a{color:var(--accd)}.smlist a:hover{color:#fff}

/* ===== 10. forms + footer ===== */
.rbanner{max-width:760px;margin:8px auto 4px;border-radius:20px;overflow:hidden;border:1px solid var(--brd);box-shadow:var(--ring),var(--sh)}
.rbanner img,.rbanner picture{display:block;width:100%;height:auto}
.formwrap{max-width:640px;border-radius:20px;padding:28px;margin:18px auto}
.field{margin:0 0 16px}
.field label{display:block;font-weight:600;font-size:14px;margin:0 0 6px}
.field input,.field textarea,.field select{width:100%;padding:12px 14px;border:1px solid var(--brd);border-radius:12px;font-size:15px;font-family:inherit;background:rgba(255,255,255,.06);color:var(--ink);box-shadow:var(--ring);transition:border-color .2s,box-shadow .25s,background .2s}
.field input::placeholder,.field textarea::placeholder{color:#a9adcf}
.field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:rgba(167,139,250,.85);background:rgba(255,255,255,.1);box-shadow:var(--ring),0 0 0 4px rgba(139,92,246,.2)}
.field textarea{min-height:120px;resize:vertical}
.hp{position:absolute;left:-9999px}
footer.site{border-top:1px solid rgba(255,255,255,.1);background:rgba(9,7,28,.6);box-shadow:inset 0 1px 0 rgba(255,255,255,.08);margin-top:48px;background-color:rgba(20,16,46,.94)}
.fgrid{display:grid;grid-template-columns:1.15fr 2.1fr .9fr;gap:34px;padding:40px 22px}
.fcol{display:flex;flex-direction:column;gap:8px;font-size:14px}
/* 41 platforms would otherwise be a 41-row column on every page */
.fplist{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 18px}
.fcol strong{margin-bottom:4px;color:#fff}
.fcol a{color:#c6c9e6}.fcol a:hover{color:#fff}
.fcol p{color:#a9adcf;margin:6px 0 0;max-width:300px}
footer.site .logo{color:#fff}
.fbot{padding:16px 22px;border-top:1px solid rgba(255,255,255,.1);color:#a9adcf;font-size:13px}

/* ===== 11. scroll reveal ===== */
.js .reveal{opacity:0;transform:translateY(16px) scale(.994);transition:opacity .5s var(--ease),transform .5s var(--ease)}
.js .reveal.in{opacity:1;transform:none}
.js .grid>.reveal:nth-child(3n+2){transition-delay:.07s}
.js .grid>.reveal:nth-child(3n+3){transition-delay:.14s}

/* ===== 12. responsive ===== */
@media(max-width:980px){
.nav,.search,.req{display:none}.burger{display:flex}
.fgrid{grid-template-columns:1fr 1fr}.fplats{grid-column:1/-1;order:3}
main.wrap{padding:0 22px;margin:18px auto 38px}
main.wrap>.container{padding:28px 0 48px}
body.home .hero{padding:78px 22px 34px}
.hero h1{letter-spacing:-.03em}
}
@media(max-width:760px){
/* heavy effects degrade: no giant blurs, cheaper glass, calmer drift */
.band{display:none}
.card,.ccard,.marqwrap{-webkit-backdrop-filter:none;backdrop-filter:none}
.card,.ccard{background-color:rgba(24,19,56,.78)}
.marqwrap{background-color:rgba(24,19,56,.72)}
main.wrap,.hero,.formwrap,.cta{-webkit-backdrop-filter:blur(10px) saturate(150%);backdrop-filter:blur(10px) saturate(150%)}
.bg .b{opacity:.85}
.mrow{--t:44s}
.stats>div{flex:1 1 44%;padding:13px 12px}
.stats b{font-size:25px}
}
@media(max-width:560px){
.hero p{font-size:17px}
.fgrid{grid-template-columns:1fr}.fplist{grid-template-columns:1fr 1fr}
main.wrap{padding:0 15px;margin:12px auto 28px;border-radius:20px}
main.wrap>.container{padding:20px 0 38px}
body.home main.wrap{padding:0 15px}
body.home .hero{padding:62px 12px 28px}
.hero{margin:0 -15px;padding:44px 16px 34px}
.carousel{margin:14px -15px 0}
.ctrack{padding:10px 15px 20px}
.grid{grid-template-columns:1fr;gap:13px}
.secthead{margin:34px 0 4px}
.toolhead .ico{width:48px;height:48px;border-radius:14px}
.mitem span{max-width:150px;overflow:hidden;text-overflow:ellipsis}
}

/* ===== 13. accessibility: motion off ===== */
@media(prefers-reduced-motion:reduce){
html{scroll-behavior:auto}
*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
.bg .b,.band,.hero:before,.cta:before,.mark:after,.mrow,.hero h1 .g,.secthead h2:after{animation:none!important}
.hero h1 .g{background-position:0 0}
.js .reveal{opacity:1!important;transform:none!important}
.card:hover,.ccard:hover,.btn:hover,.ti:hover,.tool:hover,.mitem:hover,.stats>div:hover,.steps li:hover,.fields code:hover,.xchip:hover{transform:none}
.marq{overflow-x:auto}  /* the strip no longer moves, so let the reader move it */
}
@media(prefers-contrast:more){
.veil{background:linear-gradient(180deg,rgba(5,4,16,.8),rgba(5,4,16,.9))}
.card,.ccard{background-color:rgba(17,13,44,.92)}
}
