/* ================================================================
   Flashcards for Life
   ================================================================ */
:root{
  --bg:#07080d; --panel:#11141e; --panel2:#181c29; --panel3:#212739;
  --border:rgba(255,255,255,.07); --border2:rgba(255,255,255,.13);
  --glass:rgba(17,20,31,.62); --glass-brd:rgba(255,255,255,.08);
  --text:#eef0f6; --muted:#8e96ab; --accent:#7c6cff; --accent2:#aa9fff; --accent-soft:rgba(124,108,255,.15);
  --grad:linear-gradient(135deg,#7c6cff 0%,#b46cff 50%,#ff6fae 100%);
  --grad-anim:linear-gradient(90deg,#7c6cff,#b46cff,#ff6fae,#ffb547,#b46cff,#7c6cff);
  --green:#2ecc71; --red:#ff5a6e; --amber:#ffb547; --blue:#4aa8ff; --pink:#ff6fae;
  --barbg:rgba(7,8,13,.72);
  --blob1:rgba(124,108,255,.34); --blob2:rgba(255,111,174,.20); --blob3:rgba(74,168,255,.16);
  --shadow:0 40px 80px -40px rgba(0,0,0,.9);
  --shadow-sm:0 12px 30px -16px rgba(0,0,0,.85);
  --glow:0 12px 30px -10px rgba(124,108,255,.8);
  --hi:rgba(255,255,255,.06);
  --safe-b:env(safe-area-inset-bottom,0px); --safe-t:env(safe-area-inset-top,0px);
  --s1:#3987e5; --s2:#d55181; --line:#aa9fff;
  --ease:cubic-bezier(.2,.8,.2,1); --spring:cubic-bezier(.34,1.4,.5,1);
}
body.light{
  --bg:#f5f6fc; --panel:#ffffff; --panel2:#f2f3f9; --panel3:#e8eaf3;
  --border:rgba(20,20,70,.08); --border2:rgba(20,20,70,.14);
  --glass:rgba(255,255,255,.72); --glass-brd:rgba(255,255,255,.95);
  --text:#151826; --muted:#5e6679; --accent:#5b4ff0; --accent2:#5b4ff0; --accent-soft:rgba(91,79,240,.10);
  --grad:linear-gradient(135deg,#5b4ff0 0%,#a14ff0 50%,#e2468f 100%);
  --grad-anim:linear-gradient(90deg,#5b4ff0,#a14ff0,#e2468f,#e8930c,#a14ff0,#5b4ff0);
  --green:#1f9e57; --red:#e23a52; --amber:#c98112; --blue:#1f7fe0; --pink:#d6428a;
  --barbg:rgba(245,246,252,.8);
  --blob1:rgba(124,108,255,.22); --blob2:rgba(255,111,174,.15); --blob3:rgba(74,168,255,.13);
  --shadow:0 40px 70px -40px rgba(40,40,110,.38);
  --shadow-sm:0 12px 26px -16px rgba(40,40,110,.35);
  --glow:0 12px 26px -10px rgba(91,79,240,.6);
  --hi:rgba(255,255,255,.9);
  --s1:#2a78d6; --s2:#d6428a; --line:#5b4ff0;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Inter","Segoe UI",Roboto,Helvetica,Arial,sans-serif;
     color:var(--text);background:var(--bg);line-height:1.5;min-height:100vh;-webkit-font-smoothing:antialiased;
     transition:background .4s,color .4s}
button{font-family:inherit;color:inherit}
h1,h2,h3{letter-spacing:-.02em}
.muted{color:var(--muted)} .ital{font-style:italic;color:var(--muted)} .small{font-size:.8rem}
.pre{white-space:pre-wrap;word-break:break-word}
.ic{width:1.15em;height:1.15em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none;display:inline-block;vertical-align:middle}
.ic-fill{fill:currentColor;stroke:none}
kbd{font-family:inherit;font-size:.72rem;font-weight:700;background:var(--panel2);border:1px solid var(--border2);border-bottom-width:2px;
    border-radius:6px;padding:1px 6px;margin:0 2px;color:var(--text)}
.show-mobile{display:none!important}

/* ---------- animated background ---------- */
.aurora{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;background:var(--bg);transition:opacity .6s}
.aurora span{position:absolute;width:75vmax;height:75vmax;border-radius:50%;will-change:transform}
.aurora .b1{background:radial-gradient(circle,var(--blob1),transparent 62%);top:-38vmax;left:-22vmax;animation:drift1 24s ease-in-out infinite alternate}
.aurora .b2{background:radial-gradient(circle,var(--blob2),transparent 62%);top:-28vmax;right:-32vmax;animation:drift2 28s ease-in-out infinite alternate}
.aurora .b3{background:radial-gradient(circle,var(--blob3),transparent 62%);bottom:-50vmax;left:15vmax;animation:drift3 32s ease-in-out infinite alternate}
.aurora .gridlines{position:absolute;inset:0;opacity:.55;
  background-image:linear-gradient(var(--border) 1px,transparent 1px),linear-gradient(90deg,var(--border) 1px,transparent 1px);
  background-size:60px 60px;-webkit-mask-image:radial-gradient(ellipse 80% 60% at 50% 0%,#000 20%,transparent 75%);
  mask-image:radial-gradient(ellipse 80% 60% at 50% 0%,#000 20%,transparent 75%)}
@keyframes drift1{to{transform:translate(20vmax,14vmax) scale(1.15)}}
@keyframes drift2{to{transform:translate(-16vmax,20vmax) scale(.88)}}
@keyframes drift3{to{transform:translate(-22vmax,-12vmax) scale(1.2)}}
body[data-screen=app] .aurora{opacity:.6}
body[data-screen=app] .aurora .gridlines{opacity:.25}

/* ---------- screens ---------- */
.screen{display:none}
body[data-screen=loading] #screen-loading,
body[data-screen=landing] #screen-landing,
body[data-screen=auth] #screen-auth,
body[data-screen=app] #screen-app{display:block;animation:screenIn .55s var(--ease)}
@keyframes screenIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- shared bits ---------- */
.logo{width:38px;height:38px;border-radius:12px;background:var(--grad);display:grid;place-items:center;flex:none;color:#fff;
      box-shadow:var(--glow),inset 0 1px 0 rgba(255,255,255,.35)}
.logo .ic{width:20px;height:20px;stroke-width:2.3}
.logo-sm{width:28px;height:28px;border-radius:9px}.logo-sm .ic{width:15px;height:15px}
.logo-lg{width:56px;height:56px;border-radius:17px;margin:0 auto 16px}.logo-lg .ic{width:28px;height:28px}
.logo-xl{width:76px;height:76px;border-radius:22px}.logo-xl .ic{width:38px;height:38px}
.brand{display:flex;align-items:center;gap:11px;min-width:0}
.title{font-weight:800;font-size:1.06rem;letter-spacing:-.02em;white-space:nowrap}
.glass{background:var(--glass);border:1px solid var(--glass-brd);backdrop-filter:blur(20px) saturate(1.5);-webkit-backdrop-filter:blur(20px) saturate(1.5)}
.icon-btn{width:40px;height:40px;border-radius:12px;border:1px solid var(--border2);background:var(--glass);color:var(--text);
          cursor:pointer;display:grid;place-items:center;flex:none;transition:transform .2s var(--spring),background .2s}
.icon-btn:hover{background:var(--panel2);transform:translateY(-1px) rotate(-8deg)}
.icon-btn .ic{width:19px;height:19px}
.pill{display:inline-flex;align-items:center;gap:7px;padding:6px 14px;border-radius:30px;font-size:.8rem;font-weight:700;
      background:var(--accent-soft);color:var(--accent2);border:1px solid rgba(124,108,255,.25)}
.shine-text{background:var(--grad-anim);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;
            -webkit-text-fill-color:transparent;animation:gradMove 7s linear infinite}
@keyframes gradMove{to{background-position:300% 0}}
.link{background:none;border:none;color:var(--accent2);font-weight:700;cursor:pointer;padding:0;font-size:inherit}
.link:hover{text-decoration:underline}

/* buttons */
.btn{position:relative;overflow:hidden;border:none;border-radius:12px;padding:10px 18px;font-weight:700;cursor:pointer;font-size:.9rem;
     display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap;
     transition:transform .18s var(--spring),filter .2s,background .2s,box-shadow .2s}
.btn:active{transform:scale(.96)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn .ic{width:17px;height:17px}
.btn-primary{background:var(--grad);color:#fff;box-shadow:var(--glow),inset 0 1px 0 rgba(255,255,255,.25)}
.btn-primary::after{content:"";position:absolute;top:0;left:-75%;width:50%;height:100%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.4),transparent);transform:skewX(-20deg);transition:left .7s var(--ease)}
.btn-primary:hover{filter:brightness(1.08);transform:translateY(-1px)}
.btn-primary:hover::after{left:135%}
.btn-ghost{background:var(--panel2);color:var(--text);border:1px solid var(--border2)}
.btn-ghost:hover{background:var(--panel3)}
.btn-glass{background:var(--glass);color:var(--text);border:1px solid var(--border2);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.btn-glass:hover{background:var(--panel2)}
.btn-danger{background:rgba(255,90,110,.12);color:var(--red);border:1px solid rgba(255,90,110,.3)}
.btn-danger:hover{background:rgba(255,90,110,.2)}
.btn-success{background:rgba(46,204,113,.12);color:var(--green);border:1px solid rgba(46,204,113,.3)}
.btn-success:hover{background:rgba(46,204,113,.2)}
.btn-sm{padding:6px 12px;font-size:.78rem;border-radius:9px}
.btn-sm .ic{width:14px;height:14px}
.btn-lg{padding:14px 24px;font-size:1rem;border-radius:14px}
.btn-block{width:100%}
.btn .spinner{display:none}
.btn.busy{pointer-events:none}
.btn.busy .spinner{display:inline-block}
.btn.busy .btn-label{opacity:.7}
.spinner{width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(255,255,255,.3);border-top-color:#fff;animation:spin .7s linear infinite;flex:none}
.btn-success .spinner{border-color:rgba(46,204,113,.25);border-top-color:var(--green)}
@keyframes spin{to{transform:rotate(360deg)}}

/* form controls */
select,input[type=text],input[type=email],input[type=password],input[type=date],textarea{background:var(--panel2);color:var(--text);border:1px solid var(--border2);
  border-radius:12px;padding:10px 12px;font-size:.92rem;font-family:inherit;transition:border-color .2s,box-shadow .2s,background .2s}
select{appearance:none;-webkit-appearance:none;padding-right:34px;cursor:pointer;width:100%;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238e96ab' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center}
input[type=text],input[type=date]{width:100%}
input[type=date]{min-height:42px;color-scheme:dark}
body.light input[type=date]{color-scheme:light}
select:focus,input:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
::placeholder{color:var(--muted);opacity:.8}

.badge{font-size:.76rem;padding:4px 11px;border-radius:20px;font-weight:700}
.badge.green{background:rgba(46,204,113,.13);color:var(--green)}
.badge.red{background:rgba(255,90,110,.13);color:var(--red)}
.label{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--accent2);font-weight:800;margin-bottom:6px}
.label-note{color:var(--muted);text-transform:none;letter-spacing:0;font-weight:600}
.sec{margin-bottom:16px}
.gchips{display:flex;gap:6px;flex-wrap:wrap}
.gchip{font-size:.74rem;padding:3px 10px;border-radius:20px;background:var(--accent-soft);color:var(--accent2);font-weight:700;
       display:inline-flex;align-items:center;gap:5px}

.st-learning{--c:var(--red)} .st-almost{--c:var(--amber)} .st-learned{--c:var(--green)}
.st-confused{--c:var(--blue)} .st-hard{--c:var(--pink)} .st-unmarked{--c:var(--border2)}
.dot{width:9px;height:9px;border-radius:50%;background:var(--c);display:inline-block;box-shadow:0 0 10px var(--c)}

/* ================================================================
   LOADING
   ================================================================ */
.loader{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:26px}
.pulse{animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{50%{transform:scale(1.08);box-shadow:0 0 0 14px rgba(124,108,255,.08),var(--glow)}}
.loader-bar{width:140px;height:4px;border-radius:4px;background:var(--panel3);overflow:hidden}
.loader-bar span{display:block;width:40%;height:100%;background:var(--grad);border-radius:4px;animation:loadbar 1.1s ease-in-out infinite}
@keyframes loadbar{0%{transform:translateX(-100%)}100%{transform:translateX(260%)}}

/* ================================================================
   LANDING
   ================================================================ */
.reveal{opacity:0;transform:translateY(26px);transition:opacity .9s var(--ease),transform .9s var(--ease);transition-delay:var(--d,0s)}
.reveal.in{opacity:1;transform:none}
.lp-nav{max-width:1180px;margin:0 auto;padding:calc(18px + var(--safe-t)) 24px 18px;display:flex;align-items:center;justify-content:space-between;gap:14px}
.lp-actions{display:flex;gap:8px;align-items:center}
.hero{max-width:1180px;margin:0 auto;padding:50px 24px 90px;display:grid;grid-template-columns:1.1fr 1fr;gap:50px;align-items:center;min-height:calc(100vh - 90px)}
.hero h1{font-size:clamp(2.7rem,6.2vw,4.6rem);line-height:1.02;margin:22px 0 20px;letter-spacing:-.045em;font-weight:850}
.lead{font-size:clamp(1rem,1.6vw,1.18rem);color:var(--muted);max-width:530px;margin:0 0 30px}
.cta{display:flex;gap:12px;flex-wrap:wrap}
.trust{display:flex;gap:20px;flex-wrap:wrap;margin-top:28px;color:var(--muted);font-size:.86rem;font-weight:600}
.trust span{display:inline-flex;align-items:center;gap:6px}
.trust .ic{color:var(--green);width:16px;height:16px;stroke-width:2.6}

.hero-visual{display:flex;justify-content:center;padding:30px 0}
.demo-stack{position:relative;width:min(420px,84vw);aspect-ratio:4/3;perspective:1400px;animation:float 6s ease-in-out infinite;
            transform-style:preserve-3d;transition:transform .3s var(--ease)}
@keyframes float{50%{translate:0 -14px}}
.demo-card{position:absolute;inset:0;border-radius:26px;background:var(--panel);border:1px solid var(--border2);box-shadow:var(--shadow)}
.dc3{transform:rotate(-9deg) translate(-34px,22px) scale(.9);opacity:.45}
.dc2{transform:rotate(6deg) translate(28px,12px) scale(.95);opacity:.7}
.dc1{background:none;border:none;box-shadow:none;cursor:pointer}
.demo-inner{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .8s var(--spring)}
.dc1.flipped .demo-inner{transform:rotateY(180deg)}
.demo-face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:26px;padding:26px;overflow:hidden;
           display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px;
           background:radial-gradient(120% 70% at 50% 0%,var(--accent-soft),transparent 65%),var(--panel);
           border:1px solid var(--border2);box-shadow:var(--shadow),inset 0 1px 0 var(--hi)}
.demo-face::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--grad)}
.demo-face::after{content:"";position:absolute;inset:-50%;background:linear-gradient(115deg,transparent 40%,rgba(255,255,255,.08) 50%,transparent 60%);
                  animation:sheen 5s ease-in-out infinite}
@keyframes sheen{0%,60%{transform:translateX(-60%)}100%{transform:translateX(60%)}}
.df-back{transform:rotateY(180deg)}
.demo-type{position:absolute;top:18px;left:20px;font-size:.66rem;text-transform:uppercase;letter-spacing:.1em;font-weight:800;color:var(--muted);
           background:var(--panel2);border:1px solid var(--border);padding:3px 10px;border-radius:20px}
.demo-word{font-size:clamp(1.8rem,4.5vw,2.6rem);font-weight:850;letter-spacing:-.03em;line-height:1.15}
.demo-ans{font-size:clamp(1.05rem,2.6vw,1.35rem);font-weight:650;line-height:1.4;max-width:90%}
.demo-hint{font-size:.76rem;color:var(--muted)}
.float-chip{position:absolute;z-index:3;display:flex;align-items:center;gap:8px;padding:9px 14px;border-radius:14px;font-size:.82rem;font-weight:700;
            background:var(--glass);border:1px solid var(--glass-brd);box-shadow:var(--shadow-sm);
            backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);animation:float 5s ease-in-out infinite}
.float-chip .ic{color:var(--accent2);width:16px;height:16px}
.fc-a{top:-18px;right:-14px;animation-delay:-1s}
.fc-b{bottom:-20px;left:-18px;animation-delay:-2.5s}
.fc-c{bottom:32%;right:-34px;animation-delay:-4s}

.features,.steps{max-width:1180px;margin:0 auto;padding:60px 24px}
.sec-head{text-align:center;max-width:640px;margin:0 auto 40px}
.sec-head h2{font-size:clamp(1.8rem,3.6vw,2.6rem);margin:16px 0 10px;line-height:1.1}
.feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.feat{position:relative;padding:26px;border-radius:22px;background:var(--glass);border:1px solid var(--border2);overflow:hidden;
      backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);transition:transform .35s var(--ease),border-color .3s,box-shadow .35s}
.feat::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s;
              background:radial-gradient(380px circle at var(--mx,50%) var(--my,50%),rgba(124,108,255,.18),transparent 45%)}
.feat:hover{transform:translateY(-6px);border-color:rgba(124,108,255,.4);box-shadow:var(--shadow)}
.feat:hover::before{opacity:1}
.feat-ic{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--grad);color:#fff;margin-bottom:18px;
         box-shadow:var(--glow);transition:transform .4s var(--spring)}
.feat:hover .feat-ic{transform:rotate(-8deg) scale(1.08)}
.feat-ic .ic{width:24px;height:24px}
.feat h3{margin:0 0 6px;font-size:1.08rem}
.feat p{margin:0;color:var(--muted);font-size:.92rem}
.step-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;counter-reset:s}
.step{padding:26px;border-radius:22px;border:1px dashed var(--border2);text-align:center}
.step-n{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:50%;font-weight:850;font-size:1.1rem;margin-bottom:12px;
        background:var(--accent-soft);color:var(--accent2);border:1px solid rgba(124,108,255,.35)}
.step h3{margin:0 0 6px;font-size:1.05rem}
.step p{margin:0;color:var(--muted);font-size:.92rem}
.final-cta{max-width:980px;margin:40px auto 60px;padding:56px 24px;text-align:center;border-radius:30px;position:relative;overflow:hidden;
           background:radial-gradient(80% 120% at 50% 0%,rgba(124,108,255,.28),transparent 70%),var(--glass);border:1px solid var(--border2)}
.final-cta h2{font-size:clamp(1.8rem,3.6vw,2.6rem);margin:0 0 10px}
.final-cta p{color:var(--muted);margin:0 0 26px}
.lp-foot{max-width:1180px;margin:0 auto;padding:26px 24px calc(30px + var(--safe-b));display:flex;justify-content:space-between;align-items:center;
         gap:12px;border-top:1px solid var(--border);flex-wrap:wrap;font-weight:700}

/* ================================================================
   AUTH
   ================================================================ */
.auth-wrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:calc(18px + var(--safe-t)) 18px 40px}
.auth-top{width:100%;max-width:1180px;display:flex;justify-content:space-between;align-items:center;margin-bottom:5vh}
.auth-card{width:100%;max-width:420px;border-radius:28px;padding:34px 30px 26px;text-align:center;box-shadow:var(--shadow);animation:cardIn .6s var(--spring)}
@keyframes cardIn{from{opacity:0;transform:translateY(24px) scale(.97)}to{opacity:1;transform:none}}
.auth-card h2{margin:0 0 4px;font-size:1.6rem}
#authSub{margin:0 0 22px}
.auth-card.shake{animation:shake .45s}
@keyframes shake{20%,60%{transform:translateX(-8px)}40%,80%{transform:translateX(8px)}}
.auth-tabs{position:relative;display:grid;grid-template-columns:1fr 1fr;background:var(--panel2);border:1px solid var(--border2);border-radius:14px;padding:4px;margin-bottom:18px}
.auth-tabs button{position:relative;z-index:1;background:none;border:none;padding:9px 0;font-weight:700;font-size:.88rem;color:var(--muted);cursor:pointer;transition:color .25s}
.auth-tabs .tab-ind{position:absolute;top:4px;bottom:4px;left:4px;width:calc(50% - 4px);border-radius:10px;background:var(--panel);
                    box-shadow:0 4px 14px -6px rgba(0,0,0,.5);transition:transform .4s var(--spring)}
.auth-tabs[data-active=signup] .tab-ind{transform:translateX(100%)}
.auth-tabs[data-active=login] button[data-mode=login],.auth-tabs[data-active=signup] button[data-mode=signup]{color:var(--text)}
#authForm{display:flex;flex-direction:column;gap:12px;text-align:left}
.in-field{display:flex;align-items:center;gap:10px;background:var(--panel2);border:1px solid var(--border2);border-radius:14px;padding:0 14px;
          transition:border-color .2s,box-shadow .2s;animation:fadeIn .3s var(--ease)}
.in-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.in-field.invalid{border-color:var(--red);box-shadow:0 0 0 4px rgba(255,90,110,.12)}
.in-field > .ic{color:var(--muted);width:18px;height:18px}
.in-field:focus-within > .ic{color:var(--accent2)}
.in-field input{flex:1;border:none!important;background:none!important;box-shadow:none!important;padding:14px 0!important;font-size:.98rem;min-width:0}
.eye{background:none;border:none;color:var(--muted);cursor:pointer;padding:6px;display:grid;place-items:center}
.eye:hover{color:var(--text)}
.strength{display:flex;align-items:center;gap:10px;padding:0 4px;margin-top:-2px}
.strength .bars{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;flex:1}
.strength .bars span{height:4px;border-radius:4px;background:var(--panel3);transition:background .3s}
.strength em{font-style:normal;font-size:.74rem;color:var(--muted);font-weight:600;white-space:nowrap}
.strength[data-s="1"] .bars span:nth-child(-n+1){background:var(--red)}
.strength[data-s="2"] .bars span:nth-child(-n+2){background:var(--amber)}
.strength[data-s="3"] .bars span:nth-child(-n+3){background:var(--blue)}
.strength[data-s="4"] .bars span{background:var(--green)}
.auth-row{display:flex;justify-content:flex-end;font-size:.84rem;margin-top:-4px}
.auth-error{color:var(--red);font-size:.86rem;font-weight:600;min-height:0;text-align:center}
.auth-error:empty{display:none}
.notice{text-align:left;font-size:.85rem;padding:12px 14px;border-radius:12px;margin-bottom:14px;background:rgba(255,181,71,.12);
        border:1px solid rgba(255,181,71,.35);color:var(--amber);font-weight:600}
.notice.err{background:rgba(255,90,110,.1);border-color:rgba(255,90,110,.3);color:var(--red)}
.notice code{font-size:.8rem;background:var(--panel2);padding:1px 6px;border-radius:5px;color:var(--text)}
.auth-done{animation:fadeIn .4s var(--ease)}
.done-ic{width:64px;height:64px;border-radius:50%;margin:6px auto 14px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent2);
         animation:pulse 2s ease-in-out infinite}
.done-ic .ic{width:28px;height:28px}
.auth-done h3{margin:0 0 6px}
.auth-done p{margin:0 0 20px;font-size:.92rem}
.auth-foot{margin:20px 0 0;font-size:.88rem;color:var(--muted)}
.auth-foot:empty{display:none}

/* ================================================================
   APP
   ================================================================ */
.appbar{position:sticky;top:0;z-index:40;background:var(--barbg);backdrop-filter:saturate(1.5) blur(18px);-webkit-backdrop-filter:saturate(1.5) blur(18px);
        border-bottom:1px solid var(--border);padding-top:var(--safe-t)}
.appbar-in{max-width:1080px;margin:0 auto;padding:12px 18px;display:flex;align-items:center;gap:16px}
.appbar .brand{flex:1}
.brand-text{min-width:0}
.sub{color:var(--muted);font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-right{display:flex;gap:8px;align-items:center}
.avatar{width:40px;height:40px;border-radius:50%;border:none;background:var(--grad);color:#fff;font-weight:800;font-size:1rem;cursor:pointer;
        display:grid;place-items:center;flex:none;box-shadow:0 0 0 2px var(--bg),0 0 0 4px rgba(124,108,255,.45);transition:transform .25s var(--spring);text-transform:uppercase}
.avatar:hover{transform:scale(1.07)}
.avatar-lg{width:56px;height:56px;font-size:1.4rem;cursor:default}
nav{position:relative;display:flex;gap:2px;background:var(--panel);border:1px solid var(--border2);padding:4px;border-radius:15px}
.nav-ind{position:absolute;left:0;top:4px;bottom:4px;width:0;border-radius:11px;background:var(--accent-soft);
         transition:transform .45s var(--spring),width .45s var(--spring);pointer-events:none}
.nav-btn{position:relative;z-index:1;display:flex;align-items:center;gap:7px;background:none;border:none;color:var(--muted);padding:8px 13px;
         border-radius:11px;cursor:pointer;font-size:.88rem;font-weight:700;transition:color .2s;white-space:nowrap}
.nav-btn:hover{color:var(--text)}
.nav-btn.active{color:var(--accent2)}
.nav-btn.add{background:var(--grad);color:#fff;margin-left:4px;box-shadow:var(--glow)}
.ni{display:grid;place-items:center}
.ni .ic{width:18px;height:18px}
.l-short{display:none}
@media (max-width:1020px) and (min-width:761px){ .sub{display:none} .appbar .brand .title{display:none} }

.view{display:none;max-width:840px;margin:0 auto;padding:24px 18px 70px}
.view.active{display:block;animation:fadeIn .35s var(--ease)}

/* ---------- flashcards ---------- */
.deck-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.stats{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.counter{font-weight:850;font-size:1.05rem;font-variant-numeric:tabular-nums;margin-right:4px}
.opts-toggle{display:none}
.deck-opts{display:grid;grid-template-columns:1.5fr 1fr 1fr .8fr auto;gap:10px;align-items:end;border-radius:18px;padding:12px;box-shadow:var(--shadow-sm)}
.fld{display:flex;flex-direction:column;gap:4px;min-width:0}
.fld > span{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:800;padding-left:3px}
.progress{position:relative;height:6px;background:var(--panel3);border-radius:6px;margin:18px 0 20px;overflow:hidden}
.progress > div{position:relative;height:100%;background:var(--grad);width:0;transition:width .5s var(--spring);border-radius:6px;overflow:hidden}
.progress > div::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);
                        animation:shimmer 2.2s ease-in-out infinite}
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}

.fc-area{display:flex;align-items:center;gap:14px}
.arrow{background:var(--glass);border:1px solid var(--border2);color:var(--text);width:48px;height:48px;border-radius:50%;cursor:pointer;flex:none;
       display:grid;place-items:center;box-shadow:var(--shadow-sm);transition:transform .25s var(--spring),background .2s;
       backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.arrow:hover{background:var(--panel2);transform:scale(1.1)}
.arrow:active{transform:scale(.92)}
.arrow .ic{width:20px;height:20px;stroke-width:2.5}
.fc-wrap{flex:1;perspective:1500px;min-width:0}
.fc-wrap.in-next{animation:inNext .45s var(--spring)}
.fc-wrap.in-prev{animation:inPrev .45s var(--spring)}
@keyframes inNext{from{opacity:0;transform:translateX(60px) rotate(3deg) scale(.96)}to{opacity:1;transform:none}}
@keyframes inPrev{from{opacity:0;transform:translateX(-60px) rotate(-3deg) scale(.96)}to{opacity:1;transform:none}}
.fc-tilt{transform-style:preserve-3d;transition:transform .35s var(--ease);--gx:50%;--gy:0%;--glare:0}
.fc-tilt.tilting{transition:transform .08s linear;--glare:1}
.flashcard{position:relative;width:100%;min-height:410px;cursor:pointer;transform-style:preserve-3d;transition:transform .75s var(--spring)}
.flashcard.flipped{transform:rotateY(180deg)}
.face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:28px;padding:60px 32px 30px;
      display:flex;flex-direction:column;overflow-y:auto;border:1px solid var(--border2);
      box-shadow:var(--shadow),inset 0 1px 0 var(--hi);
      background:radial-gradient(120% 65% at 50% 0%,var(--accent-soft),transparent 65%),var(--panel)}
.face::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--grad-anim);background-size:300% 100%;animation:gradMove 8s linear infinite}
.face::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:var(--glare);transition:opacity .4s;
             background:radial-gradient(600px circle at var(--gx) var(--gy),rgba(255,255,255,.10),transparent 40%)}
.back{transform:rotateY(180deg);background:radial-gradient(120% 65% at 50% 100%,rgba(255,111,174,.08),transparent 65%),var(--panel)}
.face-body{margin:auto 0;width:100%}
.front .face-body{text-align:center;display:flex;flex-direction:column;align-items:center}
.face-top{position:absolute;top:18px;left:20px;right:18px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.type-pill{font-size:.65rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);font-weight:800;
           background:var(--panel2);border:1px solid var(--border);padding:3px 11px;border-radius:20px}
.face-tools{display:flex;gap:6px;align-items:center}
.edit-btn{display:inline-flex;align-items:center;gap:5px;background:var(--panel2);border:1px solid var(--border);color:var(--muted);border-radius:20px;
          padding:4px 11px;font-size:.72rem;cursor:pointer;font-weight:700;transition:color .2s,border-color .2s}
.edit-btn .ic{width:13px;height:13px}
.edit-btn:hover{color:var(--text);border-color:var(--border2)}
.st-pill{font-size:.68rem;padding:3px 10px;border-radius:20px;font-weight:800;background:var(--c);color:#fff;text-transform:capitalize;
         box-shadow:0 4px 14px -4px var(--c);animation:popIn .4s var(--spring)}
.st-pill.st-almost{color:#1a1a1a}
@keyframes popIn{from{transform:scale(.5);opacity:0}to{transform:none;opacity:1}}
.card-word{font-size:clamp(2rem,6vw,2.8rem);font-weight:850;letter-spacing:-.035em;line-height:1.15;white-space:pre-wrap;word-break:break-word}
.card-word.md{font-size:clamp(1.25rem,4.2vw,1.6rem);font-weight:750;letter-spacing:-.015em;line-height:1.35}
.card-word.sm{font-size:1.05rem;font-weight:600;letter-spacing:0;line-height:1.6;text-align:left}
.card-img{max-width:100%;max-height:240px;object-fit:contain;border-radius:14px;margin:4px 0 12px;display:block;animation:fadeIn .4s var(--ease)}
.front .card-img{margin-left:auto;margin-right:auto}
.voice{display:inline-flex;align-items:center;gap:7px;margin-top:18px;background:var(--accent-soft);border:1px solid rgba(124,108,255,.25);color:var(--accent2);
       border-radius:20px;padding:7px 15px;cursor:pointer;font-size:.82rem;font-weight:700;transition:transform .2s var(--spring)}
.voice:hover{transform:scale(1.05)}
.voice .ic{width:16px;height:16px}
.voice.speaking .ic{animation:pulse .8s ease-in-out infinite}
.hint{color:var(--muted);font-size:.76rem;margin-top:16px;opacity:.85}
.hint .m{display:none}
.mobile-ctrl{display:none}
.tagbar{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:22px}
.tag-btn{border:1px solid var(--border2);background:var(--glass);color:var(--muted);border-radius:20px;padding:7px 15px;cursor:pointer;
         font-size:.82rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:7px;
         transition:transform .25s var(--spring),background .2s,color .2s,border-color .2s,box-shadow .2s}
.tag-btn::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--c);flex:none;transition:background .2s}
.tag-btn:hover{color:var(--text);transform:translateY(-2px)}
.tag-btn:active{transform:scale(.94)}
.tag-btn.on{background:var(--c);border-color:var(--c);color:#fff;box-shadow:0 8px 20px -8px var(--c)}
.tag-btn.on::before{background:rgba(255,255,255,.9)}
.tag-btn.st-almost.on{color:#1a1a1a}
.tag-btn.st-almost.on::before{background:rgba(0,0,0,.5)}
.kbd-hint{display:flex;justify-content:center;gap:18px;margin-top:18px;color:var(--muted);font-size:.76rem;flex-wrap:wrap}

.particle{position:fixed;width:8px;height:8px;border-radius:50%;pointer-events:none;z-index:400;transform:translate(-50%,-50%);
          animation:burst .8s var(--ease) forwards}
.particle.sq{border-radius:2px}
@keyframes burst{to{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) rotate(var(--r)) scale(.2);opacity:0}}

/* skeleton */
.skeleton{background:linear-gradient(90deg,var(--panel) 25%,var(--panel2) 50%,var(--panel) 75%);background-size:200% 100%;animation:skel 1.3s ease-in-out infinite;
          border:1px solid var(--border)}
@keyframes skel{from{background-position:200% 0}to{background-position:-200% 0}}
.sk-card{height:410px;border-radius:28px}
.sk-row{display:flex;gap:8px;justify-content:center;margin-top:22px}
.sk-pill{width:86px;height:34px;border-radius:20px}
.sk-item{height:74px;border-radius:16px;margin-bottom:10px}

/* ---------- card list ---------- */
.search{position:relative;margin-bottom:12px}
.search .ic{position:absolute;left:14px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:var(--muted)}
.search input{padding-left:42px;border-radius:14px;padding-top:12px;padding-bottom:12px;background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.filters{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}
.filter-btn{background:var(--glass);border:1px solid var(--border2);color:var(--muted);border-radius:20px;padding:6px 13px;cursor:pointer;
            font-size:.82rem;font-weight:700;white-space:nowrap;flex:none;transition:all .2s}
.filter-btn:hover{color:var(--text)}
.filter-btn.active{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 6px 16px -8px var(--accent)}
.filter-count{opacity:.7;font-size:.74rem;margin-left:4px}
.list-ctrl{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-bottom:14px}
.list-ctrl .l{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.list-ctrl select{width:auto;min-width:140px}
.word-item{position:relative;overflow:hidden;background:var(--glass);border:1px solid var(--border2);border-radius:18px;padding:14px 16px 14px 20px;margin-bottom:10px;
           backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:border-color .2s,box-shadow .3s,transform .3s var(--ease)}
.word-item::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--c)}
.word-item:hover{border-color:rgba(124,108,255,.35);box-shadow:var(--shadow-sm);transform:translateY(-2px)}
.stagger > *{animation:itemIn .5s var(--ease) both;animation-delay:calc(var(--i,0) * 35ms)}
@keyframes itemIn{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
.wi-head{display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer}
.wi-left{display:flex;align-items:center;gap:12px;min-width:0}
.wi-thumb{width:46px;height:46px;border-radius:11px;object-fit:cover;flex:none;border:1px solid var(--border2);background:var(--panel2)}
.wi-text{min-width:0}
.wi-word{font-size:1.06rem;font-weight:750;word-break:break-word}
.wi-meaning{color:var(--muted);font-size:.88rem;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}
.wi-chev{color:var(--muted);transition:transform .35s var(--spring);flex:none;display:grid}
.word-item.open .wi-chev{transform:rotate(90deg)}
.wi-detail{display:grid;grid-template-rows:0fr;transition:grid-template-rows .4s var(--ease)}
.wi-detail > div{overflow:hidden}
.word-item.open .wi-detail{grid-template-rows:1fr}
.wi-detail-in{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.wi-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.wi-tags .tag-btn{padding:5px 11px;font-size:.76rem}
.wi-actions{display:flex;gap:8px;margin-top:12px;justify-content:flex-end}
#list.wide{max-width:1120px}
#wordList.compact{display:flex;flex-wrap:wrap;gap:8px}
.chip{padding:9px 15px;background:var(--glass);border:1px solid var(--border2);border-radius:13px;font-size:.9rem;font-weight:700;cursor:pointer;
      max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:8px;transition:transform .25s var(--spring),border-color .2s}
.chip::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--c);flex:none}
.chip:hover{border-color:var(--accent);transform:translateY(-3px)}
.scrim{position:fixed;inset:0;background:rgba(5,6,12,.55);z-index:90;opacity:0;pointer-events:none;transition:opacity .3s;
       backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
.scrim.show{opacity:1;pointer-events:auto}
.popover{position:fixed;z-index:100;width:350px;max-width:92vw;max-height:75vh;overflow-y:auto;padding:18px;background:var(--panel);
         border:1px solid var(--border2);border-radius:18px;box-shadow:0 30px 60px -20px rgba(0,0,0,.6);
         opacity:0;transform:translateY(10px) scale(.97);pointer-events:none;transition:opacity .25s,transform .35s var(--spring)}
.popover.show{opacity:1;transform:none;pointer-events:auto}
.popover .pw{font-size:1.15rem;font-weight:800;margin-bottom:10px;white-space:pre-wrap}
.popover .card-img{max-height:150px}
.grabber{display:none;width:42px;height:5px;border-radius:5px;background:var(--border2);margin:-4px auto 14px}

/* ---------- concept groups ---------- */
.new-group{display:flex;gap:8px;margin-bottom:12px}
.new-group .btn{flex:none}
.group{background:var(--glass);border:1px solid var(--border2);border-radius:18px;margin-bottom:12px;overflow:hidden;
       backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:box-shadow .3s,border-color .2s}
.group:hover{box-shadow:var(--shadow-sm);border-color:rgba(124,108,255,.3)}
.group-head{padding:15px 16px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:10px}
.gh-left{display:flex;align-items:center;gap:12px;min-width:0}
.gh-icon{width:40px;height:40px;border-radius:12px;background:var(--grad);color:#fff;display:grid;place-items:center;font-weight:850;flex:none;
         text-transform:uppercase;box-shadow:var(--glow);transition:transform .4s var(--spring)}
.group:hover .gh-icon{transform:rotate(-8deg) scale(1.05)}
.gh-icon.plain{background:var(--panel3);color:var(--muted);box-shadow:none}
.gh-name{font-weight:750;word-break:break-word}
.gh-count{font-size:.78rem;color:var(--muted)}
.gh-right{display:flex;gap:6px;align-items:center;flex:none}
.group-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .4s var(--ease)}
.group-body > div{overflow:hidden;padding:0 16px}
.group.open .group-body{grid-template-rows:1fr}
.group.open .group-body > div{padding-bottom:10px}
.cg-word{padding:11px 6px;border-top:1px solid var(--border);cursor:pointer;display:flex;gap:12px;align-items:center;border-radius:10px;transition:background .2s}
.cg-word:hover{background:var(--panel2)}
.cg-w{font-weight:700;color:var(--accent2)}
.cg-b{color:var(--muted);font-size:.9rem}
.empty{text-align:center;color:var(--muted);padding:54px 22px;background:var(--glass);border:1px dashed var(--border2);border-radius:24px;
       backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);animation:fadeIn .4s var(--ease)}
.empty .big{width:74px;height:74px;border-radius:22px;background:var(--grad);display:grid;place-items:center;margin:0 auto 18px;color:#fff;
            box-shadow:var(--glow);animation:float 4s ease-in-out infinite}
.empty .big .ic{width:34px;height:34px}
.empty h3{color:var(--text);margin:0 0 6px;font-size:1.2rem}
.empty .btn{margin-top:20px}

/* ---------- add / edit ---------- */
.form-card{border-radius:24px;padding:24px;margin-bottom:16px;box-shadow:var(--shadow-sm)}
.form-title{font-size:1.3rem;font-weight:850;margin-bottom:2px;letter-spacing:-.02em}
.form-sub{color:var(--muted);font-size:.86rem;margin-bottom:18px}
.seg{position:relative;display:inline-grid;grid-template-columns:repeat(3,1fr);background:var(--panel2);border:1px solid var(--border2);border-radius:14px;padding:4px;margin-bottom:18px}
.seg button{position:relative;z-index:1;background:none;border:none;color:var(--muted);padding:8px 22px;border-radius:10px;cursor:pointer;font-weight:700;font-size:.86rem;transition:color .25s}
.seg button.on{color:var(--text)}
.seg-ind{position:absolute;top:4px;bottom:4px;left:4px;width:calc((100% - 8px) / 3);border-radius:10px;background:var(--panel);
         box-shadow:0 4px 14px -6px rgba(0,0,0,.45);transition:transform .4s var(--spring)}
.seg[data-i="1"] .seg-ind{transform:translateX(100%)}
.seg[data-i="2"] .seg-ind{transform:translateX(200%)}
.sides{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:18px}
.side-box{background:var(--panel2);border:1px solid var(--border2);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:10px;
          transition:border-color .25s,box-shadow .25s}
.side-box.focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.side-head{display:flex;align-items:center;gap:8px}
.side-num{width:22px;height:22px;border-radius:7px;background:var(--grad);color:#fff;font-size:.72rem;font-weight:800;display:grid;place-items:center}
.side-box .label{margin:0}
.side-box textarea{background:var(--panel);min-height:100px;resize:vertical;width:100%}
textarea.full{width:100%;min-height:76px;resize:vertical}
.drop{position:relative;border:2px dashed var(--border2);border-radius:14px;min-height:94px;display:flex;align-items:center;justify-content:center;
      cursor:pointer;color:var(--muted);font-size:.84rem;text-align:center;padding:10px;transition:all .25s;background:var(--panel)}
.drop:hover,.drop.over{border-color:var(--accent);color:var(--text);background:var(--accent-soft)}
.drop.over{transform:scale(1.02)}
.drop-empty{display:flex;flex-direction:column;align-items:center;gap:2px;font-weight:600}
.drop-empty .ic{width:24px;height:24px;margin-bottom:4px;transition:transform .3s var(--spring)}
.drop:hover .drop-empty .ic{transform:translateY(-3px) scale(1.1)}
.drop-empty .small{font-weight:500}
.drop img{display:none;max-width:100%;max-height:200px;border-radius:10px;object-fit:contain;animation:popIn .4s var(--spring)}
.drop.has{border-style:solid}
.drop.has img{display:block}
.drop.has .drop-empty{display:none}
.drop .rm{display:none;position:absolute;top:8px;right:8px;background:rgba(0,0,0,.65);color:#fff;border:none;width:30px;height:30px;
          border-radius:50%;cursor:pointer;place-items:center}
.drop .rm .ic{width:15px;height:15px}
.drop.has .rm{display:grid}
.field{margin-bottom:18px}
.ginput{display:flex;flex-wrap:wrap;gap:6px;align-items:center;background:var(--panel2);border:1px solid var(--border2);border-radius:12px;padding:6px 8px;
        cursor:text;transition:border-color .2s,box-shadow .2s}
.ginput:focus-within{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.ginput input{flex:1;min-width:150px;border:none!important;background:none!important;padding:5px 4px!important;box-shadow:none!important}
.ginput .gchip{animation:popIn .3s var(--spring)}
.gchip .x{cursor:pointer;opacity:.7;display:grid}
.gchip .x .ic{width:12px;height:12px}
.gchip .x:hover{opacity:1}
.gsuggest{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;align-items:center}
.gsuggest button{display:inline-flex;align-items:center;gap:4px;background:var(--panel);border:1px solid var(--border2);color:var(--muted);border-radius:20px;
                 padding:4px 12px;font-size:.78rem;cursor:pointer;font-weight:650;transition:all .2s}
.gsuggest button .ic{width:12px;height:12px}
.gsuggest button:hover{color:var(--text)}
.gsuggest button.on{background:var(--accent-soft);color:var(--accent2);border-color:var(--accent)}
.form-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;align-items:center}
.kbd-tip{font-size:.76rem;color:var(--muted);margin-right:auto}

/* ---------- account modal ---------- */
.modal{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:20px;pointer-events:none}
.modal-card{position:relative;width:100%;max-width:420px;border-radius:26px;padding:26px;box-shadow:var(--shadow);
            opacity:0;transform:translateY(20px) scale(.96);transition:opacity .3s,transform .45s var(--spring)}
.modal.show{pointer-events:auto}
.modal.show .modal-card{opacity:1;transform:none}
.modal-x{position:absolute;top:16px;right:16px;width:34px;height:34px;border-radius:10px}
.acc-head{display:flex;align-items:center;gap:14px;margin-bottom:18px;padding-right:36px}
.acc-email{font-weight:800;word-break:break-all}
.acc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px}
.acc-stat{background:var(--panel2);border:1px solid var(--border);border-radius:14px;padding:12px 8px;text-align:center}
.acc-stat b{display:block;font-size:1.35rem;font-weight:850;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.acc-stat span{font-size:.72rem;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.acc-list{display:flex;flex-direction:column;gap:4px}
.acc-item{display:grid;grid-template-columns:auto 1fr;column-gap:12px;align-items:center;text-align:left;background:none;border:none;border-radius:12px;
          padding:11px 12px;cursor:pointer;font-weight:700;font-size:.92rem;transition:background .2s}
.acc-item:hover{background:var(--panel2)}
.acc-item .ic{width:19px;height:19px;color:var(--accent2);grid-row:span 2}
.acc-item em{grid-column:2;font-style:normal;font-weight:500;font-size:.76rem;color:var(--muted)}
.acc-item.danger,.acc-item.danger .ic{color:var(--red)}

/* ---------- toast ---------- */
.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,30px) scale(.95);display:flex;align-items:center;gap:9px;
       background:var(--text);color:var(--bg);padding:12px 18px;border-radius:16px;font-weight:700;font-size:.88rem;z-index:300;opacity:0;
       pointer-events:none;transition:opacity .3s,transform .45s var(--spring);box-shadow:0 18px 40px -12px rgba(0,0,0,.55);max-width:90vw}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast .ic{width:18px;height:18px;flex:none;stroke-width:2.6}
.toast.ok .ic{color:var(--green)}
.toast.err{background:var(--red);color:#fff}
.toast.info .spinner{border-color:rgba(127,127,127,.3);border-top-color:var(--accent)}

::-webkit-scrollbar{width:10px;height:0}
::-webkit-scrollbar-thumb{background:var(--border2);border-radius:6px;border:2px solid transparent;background-clip:padding-box}

/* ================================================================
   RESPONSIVE
   ================================================================ */
@media (max-width:980px){
  .hero{grid-template-columns:1fr;text-align:center;padding-top:30px;gap:30px;min-height:0}
  .hero .lead{margin-left:auto;margin-right:auto}
  .cta,.trust{justify-content:center}
  .hero-visual{padding:30px 0 10px}
  .feat-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:760px){
  .hide-mobile{display:none!important}
  .show-mobile{display:grid!important}
  .hide-xs{display:none}
  .lp-nav{padding:calc(14px + var(--safe-t)) 16px 10px}
  .hero{padding:24px 18px 60px}
  .hero h1{margin:18px 0 16px}
  .cta .btn{flex:1 1 100%}
  .trust{gap:14px;font-size:.8rem}
  .fc-c{display:none}
  .features,.steps{padding:40px 18px}
  .feat-grid,.step-grid{grid-template-columns:1fr}
  .final-cta{margin:20px 16px 40px;padding:42px 20px;border-radius:24px}
  .lp-foot{padding-left:18px;padding-right:18px;justify-content:center;text-align:center}

  .auth-top{margin-bottom:26px}
  .auth-card{padding:28px 20px 22px;border-radius:24px}

  /* a backdrop-filter on the header would trap the fixed bottom nav inside it */
  .appbar{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--bg)}
  .appbar-in{padding:10px 14px}
  .logo{width:34px;height:34px;border-radius:11px}
  .title{font-size:1rem}
  .sub{font-size:.72rem}
  .avatar{width:36px;height:36px;font-size:.9rem}
  nav{position:fixed;left:0;right:0;bottom:0;z-index:60;display:grid;grid-template-columns:repeat(5,1fr);gap:0;border:none;border-top:1px solid var(--border2);
      border-radius:0;padding:6px 6px calc(6px + var(--safe-b));background:var(--barbg);
      backdrop-filter:saturate(1.5) blur(20px);-webkit-backdrop-filter:saturate(1.5) blur(20px)}
  .nav-ind{display:none}
  .nav-btn[data-view=flash]{order:1} .nav-btn[data-view=review]{order:2} .nav-btn.add{order:3}
  .nav-btn[data-view=list]{order:4} .nav-btn[data-view=concepts]{order:5}
  .nav-btn{flex-direction:column;gap:3px;padding:5px 0;font-size:.68rem;border-radius:10px}
  .nav-btn .ni .ic{width:22px;height:22px;transition:transform .3s var(--spring)}
  .nav-btn.active .ni .ic{transform:translateY(-2px) scale(1.1)}
  .nav-btn.add{background:none;color:var(--muted);box-shadow:none;margin:0}
  .nav-btn.add.active{color:var(--accent2)}
  .nav-btn.add .ni{width:48px;height:48px;margin-top:-24px;border-radius:16px;background:var(--grad);color:#fff;
                   box-shadow:var(--glow),0 0 0 4px var(--bg);transition:transform .3s var(--spring)}
  .nav-btn.add:active .ni{transform:scale(.9) rotate(90deg)}
  .nav-btn.add .ni .ic{width:24px;height:24px;stroke-width:2.6;transform:none}
  .l-long{display:none} .l-short{display:inline}
  .view{padding:14px 12px calc(104px + var(--safe-b))}

  select,input[type=text],input[type=email],input[type=password],textarea{font-size:16px}
  .in-field input{font-size:16px}
  .opts-toggle{display:inline-flex}
  .deck-opts{display:none;grid-template-columns:1fr 1fr;margin-bottom:4px}
  .deck-opts.show{display:grid;animation:fadeIn .3s var(--ease)}
  .deck-opts .btn{grid-column:1 / -1}
  .progress{margin:12px 0 16px}
  .arrow{display:none}
  .flashcard,.sk-card{min-height:56vh;min-height:56dvh}
  .sk-card{height:56dvh}
  .face{padding:56px 20px 22px;border-radius:26px}
  .card-img{max-height:30vh}
  .hint .d{display:none} .hint .m{display:inline}
  .mobile-ctrl{display:grid;grid-template-columns:1fr 1.6fr 1fr;gap:10px;margin-top:16px}
  .mobile-ctrl .btn{padding:14px 0;font-size:.95rem;border-radius:15px}
  .mobile-ctrl .ic{width:20px;height:20px;stroke-width:2.5}
  .tagbar{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-top:12px}
  .tagbar .tag-btn{padding:9px 2px;font-size:.7rem;flex-direction:column;gap:4px;border-radius:13px}

  .filters{flex-wrap:nowrap;overflow-x:auto;margin:0 -12px 12px;padding:0 12px;scrollbar-width:none}
  .filters::-webkit-scrollbar{display:none}
  .list-ctrl{flex-direction:column;align-items:stretch;gap:6px}
  .list-ctrl select{min-width:0;flex:1}
  .list-ctrl .l{flex:1;flex-wrap:nowrap}
  #listCount{text-align:right}
  #list.wide{padding-left:12px;padding-right:12px}
  .chip{max-width:100%}

  .group-head{flex-wrap:wrap}
  .gh-right{width:100%;padding-left:52px}

  .form-card{padding:16px;border-radius:20px}
  .sides{grid-template-columns:1fr;gap:12px}
  .seg{display:grid;width:100%}
  .seg button{padding:9px 0}
  .kbd-tip{display:none}
  .form-actions{position:sticky;bottom:calc(76px + var(--safe-b));z-index:5;margin:0 -8px -8px;padding:10px 8px;border-radius:16px;
                background:var(--barbg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
  .form-actions .btn{flex:1;padding:13px 10px}

  .popover.sheet,.modal-card{border-radius:24px 24px 0 0}
  .popover.sheet{left:0!important;right:0;top:auto!important;bottom:0;width:100%;max-width:none;max-height:80vh;
                 padding:18px 18px calc(22px + var(--safe-b));transform:translateY(100%)}
  .popover.sheet.show{transform:none}
  .popover.sheet .grabber,.modal .grabber{display:block}
  .modal{align-items:flex-end;padding:0}
  .modal-card{max-width:none;padding:18px 18px calc(22px + var(--safe-b));transform:translateY(100%)}
  .modal-x{display:none}
  .acc-head{padding-right:0}
  .toast{bottom:calc(92px + var(--safe-b))}
  body[data-screen=landing] .toast,body[data-screen=auth] .toast{bottom:calc(24px + var(--safe-b))}
}


/* ================================================================
   SPACED REPETITION
   ================================================================ */
.ni{position:relative}
.nav-badge{position:absolute;top:-8px;right:-11px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--red);color:#fff;
           font-size:.64rem;font-weight:800;display:grid;place-items:center;box-shadow:0 0 0 2px var(--panel);animation:popIn .4s var(--spring)}
.switch{position:relative;width:48px;height:28px;flex:none;cursor:pointer;display:inline-block}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch span{position:absolute;inset:0;border-radius:20px;background:var(--panel3);border:1px solid var(--border2);transition:background .25s}
.switch span::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;
                    box-shadow:0 2px 6px rgba(0,0,0,.3);transition:transform .4s var(--spring)}
.switch input:checked + span{background:var(--grad);border-color:transparent;box-shadow:var(--glow)}
.switch input:checked + span::after{transform:translateX(20px)}
.switch input:focus-visible + span{box-shadow:0 0 0 4px var(--accent-soft)}
.toggle-row{display:flex;justify-content:space-between;align-items:center;gap:14px}
.toggle-row em,.set-row > em{display:block;font-style:normal;color:var(--muted);font-size:.8rem;font-weight:500;margin-bottom:8px}
.toggle-row em{margin:0}
.toggle-row .label .ic,.set-title .ic{width:15px;height:15px;margin-top:-2px}

.rv-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
.rv-stat{border-radius:18px;padding:16px 10px;text-align:center;box-shadow:var(--shadow-sm);animation:itemIn .5s var(--ease) both}
.rv-stat:nth-child(2){animation-delay:.05s}.rv-stat:nth-child(3){animation-delay:.1s}.rv-stat:nth-child(4){animation-delay:.15s}
.rv-stat b{display:block;font-size:1.7rem;font-weight:850;line-height:1.15;font-variant-numeric:tabular-nums}
.rv-stat span{font-size:.68rem;color:var(--muted);font-weight:800;text-transform:uppercase;letter-spacing:.07em}
.rv-stat.hl b{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.rv-hero{position:relative;overflow:hidden;border-radius:24px;padding:24px;margin-bottom:14px;display:flex;align-items:center;gap:20px;box-shadow:var(--shadow-sm)}
.rv-hero::before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(80% 160% at 0% 0%,var(--accent-soft),transparent 60%)}
.rv-hero > *{position:relative}
.rv-hero h2{margin:0 0 4px;font-size:1.3rem}
.rv-hero p{margin:0;color:var(--muted);font-size:.9rem}
.rv-hero .btn{margin-left:auto}
.rv-ring{width:86px;height:86px;border-radius:50%;flex:none;display:grid;place-items:center;position:relative;
         background:conic-gradient(from 0deg,#7c6cff,#ff6fae,#ffb547,#4aa8ff,#7c6cff);animation:spin 5s linear infinite;box-shadow:var(--glow)}
.rv-ring::after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--panel)}
.rv-ring b{position:relative;z-index:1;font-size:1.8rem;font-weight:850;animation:spin 5s linear infinite reverse}
.rv-ring.calm{background:conic-gradient(var(--green),#4aa8ff,var(--green));animation-duration:12s}
.rv-ring.calm b{animation-duration:12s}
.rv-ring .ic{position:relative;z-index:1;width:34px;height:34px;color:var(--green);animation:spin 12s linear infinite reverse}
.rv-block{border-radius:22px;padding:20px;margin-bottom:14px;box-shadow:var(--shadow-sm)}
.rv-block h3{margin:0 0 4px;font-size:1.05rem;display:flex;align-items:center;gap:8px}
.rv-block h3 .ic{color:var(--accent2)}
.rv-block > p.muted{margin:0 0 14px;font-size:.86rem}
.up-day{display:flex;gap:14px;padding:11px 0;border-top:1px solid var(--border);animation:itemIn .45s var(--ease) both;animation-delay:calc(var(--i,0)*40ms)}
.up-day:first-child{border-top:none;padding-top:2px}
.up-date{width:104px;flex:none;font-weight:800;font-size:.86rem}
.up-date span{display:block;color:var(--muted);font-weight:600;font-size:.74rem}
.up-cards{display:flex;flex-wrap:wrap;gap:6px;min-width:0}
.up-chip{font-size:.8rem;padding:4px 10px;border-radius:10px;background:var(--panel2);border:1px solid var(--border2);cursor:pointer;max-width:220px;
         overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:650;transition:border-color .2s,transform .2s var(--spring)}
.up-chip:hover{border-color:var(--accent);transform:translateY(-2px)}
.up-empty{color:var(--muted);font-size:.88rem;padding:6px 0}
.bulk-row{display:grid;grid-template-columns:1.3fr 1.2fr 1fr auto;gap:10px;align-items:end}
.bulk-row .btn{height:42px}
.set-row{padding:16px 0;border-top:1px solid var(--border)}
.set-row:first-of-type{border-top:none;padding-top:8px}
.set-title{font-weight:750;font-size:.94rem;display:block;margin-bottom:4px}
.presets{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.preset{background:var(--panel);border:1px solid var(--border2);color:var(--muted);border-radius:20px;padding:5px 12px;font-size:.78rem;cursor:pointer;font-weight:700;transition:all .2s}
.preset:hover{color:var(--text);border-color:var(--accent)}
.preset.on{background:var(--accent-soft);color:var(--accent2);border-color:var(--accent)}
.preset em{font-style:normal;opacity:.65;font-weight:600;margin-left:4px}
.tl{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-top:12px}
.tl-step{display:flex;flex-direction:column;align-items:center;padding:8px 12px;border-radius:12px;background:var(--panel2);border:1px solid var(--border2);
         min-width:66px;animation:popIn .45s var(--spring) both;animation-delay:calc(var(--i)*60ms)}
.tl-step b{font-size:1.02rem;font-weight:850;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.tl-step span{font-size:.64rem;color:var(--muted);font-weight:700;text-align:center;line-height:1.3;text-transform:uppercase;letter-spacing:.04em}
.tl-arrow{color:var(--muted);display:grid}
.tl-arrow .ic{width:14px;height:14px}
.tl-end{font-size:.74rem;color:var(--muted);font-weight:700;margin-left:6px}
.email-opts{display:grid;grid-template-columns:180px 1fr auto;gap:12px;align-items:end;margin-top:12px;animation:fadeIn .3s var(--ease)}
.email-opts .small{padding-bottom:10px}
.set-actions{display:flex;justify-content:flex-end;padding-top:6px}

.rv-show{display:flex;justify-content:center;margin-top:22px}
.rv-show .btn{min-width:220px}
.rate-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:22px;animation:fadeIn .35s var(--ease)}
.rate{--c:var(--accent);position:relative;overflow:hidden;border:1px solid var(--c);background:var(--glass);border-radius:16px;padding:12px 6px;cursor:pointer;
      display:flex;flex-direction:column;align-items:center;gap:1px;transition:transform .25s var(--spring),background .2s,box-shadow .2s;
      backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.rate b{font-size:.98rem;color:var(--c);transition:color .2s}
.rate span{font-size:.74rem;color:var(--muted);font-weight:700;transition:color .2s}
.rate:hover{background:var(--c);transform:translateY(-3px);box-shadow:0 12px 24px -12px var(--c)}
.rate:hover b,.rate:hover span{color:#fff}
.rate:active{transform:scale(.95)}
.rate.again{--c:var(--red)} .rate.hard{--c:var(--amber)} .rate.good{--c:var(--green)} .rate.easy{--c:var(--blue)}
.rv-pick{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:16px;font-size:.86rem;flex-wrap:wrap}
.rv-pick .link{display:inline-flex;align-items:center;gap:6px}
.rv-pick input{width:auto}
#rvWrap .flashcard{min-height:360px}
.sr-chip{display:inline-flex;align-items:center;gap:5px;font-size:.68rem;padding:3px 10px;border-radius:20px;font-weight:800;
         background:var(--accent-soft);color:var(--accent2)}
.sr-chip .ic{width:12px;height:12px}
.due-pill{font-size:.68rem;font-weight:800;padding:3px 9px;border-radius:20px;background:rgba(255,181,71,.15);color:var(--amber);flex:none;white-space:nowrap}
.due-pill.soon{background:var(--accent-soft);color:var(--accent2)}
.due-pill.done{background:rgba(46,204,113,.13);color:var(--green)}
.wi-right{display:flex;align-items:center;gap:8px;flex:none}

.sr-field{background:var(--panel2);border:1px solid var(--border2);border-radius:18px;padding:14px 16px;transition:border-color .25s,box-shadow .25s}
.sr-field.on{border-color:rgba(124,108,255,.45);box-shadow:0 0 0 4px var(--accent-soft)}
.sr-field .label{margin:0}
.sr-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}
.sr-grid select,.sr-grid input{background:var(--panel)}
.sr-status{margin-top:10px}
.sr-status:empty{display:none}

@media (max-width:760px){
  .nav-badge{top:-6px;right:-12px}
  .rv-stats{grid-template-columns:repeat(2,1fr)}
  .rv-hero{flex-direction:column;text-align:center;padding:22px 18px}
  .rv-hero .btn{margin:0;width:100%}
  .bulk-row,.email-opts,.sr-grid{grid-template-columns:1fr}
  .email-opts .small{padding:0}
  .rate-row{grid-template-columns:repeat(4,1fr);gap:6px}
  .rate{padding:12px 2px;border-radius:14px}
  .rate b{font-size:.86rem}
  #rvWrap .flashcard{min-height:48vh;min-height:48dvh}
  .rv-show .btn{width:100%}
  .up-date{width:84px}
  .set-actions .btn{width:100%}
}


/* ---------- legal pages ---------- */
a.brand,a.btn{color:inherit;text-decoration:none}
a.btn-primary{color:#fff}
a.link{text-decoration:none}
.legal{max-width:760px;margin:10px auto 40px;padding:36px 34px;border-radius:26px;box-shadow:var(--shadow);animation:cardIn .6s var(--spring)}
.legal h1{font-size:clamp(1.8rem,4vw,2.4rem);margin:0 0 4px}
.legal h2{font-size:1.1rem;margin:28px 0 8px}
.legal p,.legal li{color:var(--text);opacity:.9;font-size:.96rem}
.legal ul{padding-left:20px;margin:8px 0}
.legal li{margin-bottom:6px}
.auth-legal{font-size:.76rem;color:var(--muted);text-align:center;margin:-2px 0 0}
@media (max-width:760px){ .legal{margin:6px 12px 30px;padding:26px 20px;border-radius:22px} }


/* ================================================================
   RESEARCH + SPONSOR (landing)
   ================================================================ */
.research{max-width:1180px;margin:0 auto;padding:60px 24px 20px;scroll-margin-top:20px}
.rs-card{display:grid;grid-template-columns:1fr 1.2fr;gap:36px;align-items:center;padding:32px;border-radius:28px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
.rs-flip .rs-text{order:2}
.rs-kicker{display:inline-block;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;
           background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.rs-text h3{font-size:clamp(1.35rem,2.6vw,1.75rem);margin:8px 0 12px;line-height:1.15}
.rs-text p{color:var(--muted);margin:0 0 12px;font-size:.98rem}
.rs-text .rs-note{color:var(--text);font-weight:650;font-size:.9rem;padding-left:12px;border-left:3px solid var(--accent)}
.rs-viz{min-width:0}
.viz-title{font-weight:750;font-size:.9rem;margin-bottom:8px}
.viz-title span{display:block;color:var(--muted);font-weight:500;font-size:.78rem}
.viz-legend{display:flex;gap:16px;font-size:.82rem;font-weight:650;margin-bottom:4px;color:var(--text)}
.viz-legend span{display:inline-flex;align-items:center;gap:7px}
.sw{width:11px;height:11px;border-radius:3px;display:inline-block}
.sw.s1,.bar.s1,.bc-fill.s1{background:var(--s1);fill:var(--s1)}
.sw.s2,.bar.s2,.bc-fill.s2{background:var(--s2);fill:var(--s2)}
.viz{width:100%;min-height:220px;position:relative}
.viz svg{display:block;overflow:visible}
.viz .grid{stroke:var(--border);stroke-width:1}
.viz .base{stroke:var(--border2);stroke-width:1}
.viz .ax{fill:var(--muted);font-size:11px;font-weight:600}
.viz .dl{fill:var(--text);font-size:12px;font-weight:800}
.viz .line{fill:none;stroke:var(--line);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;
           stroke-dasharray:var(--len);stroke-dashoffset:var(--len);transition:stroke-dashoffset 1.8s var(--ease)}
.viz.in .line{stroke-dashoffset:0}
.viz .area{opacity:0;transition:opacity 1s .9s}
.viz.in .area{opacity:1}
.viz .area-top{stop-color:var(--line);stop-opacity:.28}
.viz .area-bot{stop-color:var(--line);stop-opacity:0}
.viz .pt{fill:var(--line);stroke:var(--panel);stroke-width:2.5;transform-box:fill-box;transform-origin:center;transform:scale(0);
         transition:transform .45s var(--spring);transition-delay:calc(.3s + var(--i) * .22s)}
.viz.in .pt{transform:scale(1)}
.viz .pt.hl{transform:scale(1.5);transition-delay:0s}
.viz .dl{opacity:0;transition:opacity .5s 1.6s}
.viz.in .dl{opacity:1}
.viz .cross{stroke:var(--muted);stroke-width:1;stroke-dasharray:3 3;opacity:0}
.viz .cross.on{opacity:.7}
.viz .bar{transform-box:fill-box;transform-origin:bottom;transform:scaleY(0);transition:transform .9s var(--spring);transition-delay:calc(var(--i) * .1s)}
.viz.in .bar{transform:scaleY(1)}
.viz .bar-g .bar-dl{transition-delay:calc(.6s + var(--i) * .1s)}
.viz .bar-g.hl .bar{filter:brightness(1.15)}
.viz-tip{position:fixed;z-index:500;pointer-events:none;background:var(--panel);border:1px solid var(--border2);border-radius:12px;padding:8px 12px;
         box-shadow:0 14px 30px -12px rgba(0,0,0,.5);font-size:.82rem;opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s}
.viz-tip.show{opacity:1;transform:none}
.viz-tip b{display:block;font-weight:800}
.viz-tip span{color:var(--muted);font-weight:600}
.viz-table{margin-top:10px;font-size:.8rem}
.viz-table summary{cursor:pointer;color:var(--accent2);font-weight:700;width:max-content}
.viz-table table{width:100%;border-collapse:collapse;margin-top:8px}
.viz-table th,.viz-table td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border)}
.viz-table th{color:var(--muted);font-weight:700}

.big-compare{display:flex;flex-direction:column;gap:18px;margin-top:12px}
.bc-row{display:grid;grid-template-columns:1fr auto;grid-template-areas:"label num" "track track";gap:6px 12px;align-items:end}
.bc-label{grid-area:label;font-weight:650;font-size:.9rem}
.bc-num{grid-area:num;font-size:.95rem;font-weight:700;color:var(--muted)}
.bc-num b{font-size:2.4rem;font-weight:850;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.03em}
.bc-track{grid-area:track;height:16px;border-radius:8px;background:var(--panel3);overflow:hidden}
.bc-fill{height:100%;width:0;border-radius:8px;transition:width 1.6s var(--ease)}
.big-compare.in .bc-fill{width:var(--w)}

.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:6px 0 18px}
.stat{border-radius:22px;padding:22px;box-shadow:var(--shadow-sm);transition:transform .35s var(--ease)}
.stat:hover{transform:translateY(-5px)}
.stat > b{display:block;font-size:2.5rem;font-weight:850;letter-spacing:-.04em;line-height:1.1;font-variant-numeric:tabular-nums;
          background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.stat h4{margin:4px 0 8px;font-size:.98rem}
.stat p{margin:0 0 10px;color:var(--muted);font-size:.86rem}
.stat cite{font-style:normal;font-size:.72rem;color:var(--muted);font-weight:600;opacity:.85}

.dl-list{display:flex;flex-direction:column;gap:6px}
.dl-row{display:grid;grid-template-columns:1fr auto 74px;gap:12px;align-items:center;padding:7px 10px;border-radius:10px;
        opacity:0;transform:translateX(-12px);transition:opacity .5s,transform .5s var(--ease);transition-delay:calc(var(--i) * .07s)}
.dl-list.in .dl-row{opacity:1;transform:none}
.dl-row.lvl-3{background:var(--accent-soft)}
.dl-name{font-weight:650;font-size:.9rem}
.lvl-1 .dl-name{color:var(--muted)}
.dl-pips{display:flex;gap:4px}
.dl-pips i{width:22px;height:8px;border-radius:4px;background:var(--panel3)}
.dl-pips i.on{background:var(--line)}
.lvl-3 .dl-pips i.on{background:var(--grad)}
.dl-lvl{font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-align:right}
.lvl-3 .dl-lvl{color:var(--accent2)}

.built{margin-top:46px}
.built-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.built-item{padding:22px;border-radius:22px;transition:transform .35s var(--ease)}
.built-item:hover{transform:translateY(-5px)}
.built-item h3{margin:0 0 6px;font-size:1rem}
.built-item p{margin:0;color:var(--muted);font-size:.88rem}
.sched-demo{margin-top:14px;padding:22px 26px 26px;border-radius:22px}
.sched-line{position:relative;height:96px;margin:10px 18px 0}
.sl-track{position:absolute;left:0;right:0;top:20px;height:4px;border-radius:4px;background:var(--panel3);overflow:hidden}
.sl-fill{height:100%;width:0;background:var(--grad);transition:width 2.4s var(--ease)}
.sched-line.in .sl-fill{width:100%}
.sl-stop{position:absolute;left:var(--x);top:0;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;text-align:center;
         opacity:0;transition:opacity .4s;transition-delay:calc(var(--i) * .6s)}
.sched-line.in .sl-stop{opacity:1}
.sl-dot{width:22px;height:22px;border-radius:50%;margin:11px 0 8px;background:var(--panel);border:4px solid var(--accent);box-shadow:var(--glow);
        transform:scale(0);transition:transform .5s var(--spring);transition-delay:calc(var(--i) * .6s)}
.sched-line.in .sl-dot{transform:scale(1)}
.sl-stop b{font-size:.8rem;white-space:nowrap}
.sl-stop em{font-style:normal;font-size:.72rem;color:var(--muted);font-weight:600}
.sl-gaps span{position:absolute;top:-4px;left:calc((var(--a) + var(--b)) / 2);transform:translateX(-50%);font-size:.7rem;font-weight:800;
              color:var(--accent2);white-space:nowrap}
.sl-stop:first-of-type{transform:translateX(-20%)} .sl-stop:last-of-type{transform:translateX(-80%)}
.sl-gap-m{display:none}

.refs{max-width:860px;margin:26px auto 0}
.refs summary{cursor:pointer;font-weight:750;color:var(--accent2);text-align:center}
.refs ol{font-size:.82rem;color:var(--muted);padding-left:20px;margin:14px 0 8px}
.refs li{margin-bottom:6px}

.sponsor{max-width:980px;margin:30px auto 10px;padding:0 24px;scroll-margin-top:30px}
.sponsor-card{position:relative;overflow:hidden;display:flex;align-items:center;gap:26px;padding:28px 32px;border-radius:28px;box-shadow:var(--shadow-sm)}
.sponsor-card::after{content:"";position:absolute;inset:-60%;background:linear-gradient(115deg,transparent 45%,rgba(255,255,255,.07) 50%,transparent 55%);
                     animation:sheen 6s ease-in-out infinite;pointer-events:none}
.sponsor-mark{flex:none;width:92px;height:92px;border-radius:24px;display:grid;place-items:center;
              background:linear-gradient(135deg,#1d2a5c,#3b2a7a 55%,#c08a2e);box-shadow:0 14px 30px -12px rgba(60,40,140,.8),inset 0 1px 0 rgba(255,255,255,.2)}
.sponsor-mark span{font-family:Georgia,"Times New Roman",serif;font-weight:700;font-size:1.45rem;letter-spacing:.06em;color:#fff6e0}
.sponsor-text h3{margin:6px 0 6px;font-size:clamp(1.2rem,2.4vw,1.55rem)}
.sponsor-text p{margin:0}
.sponsor-chip{display:inline-flex;align-items:center;gap:10px;margin-top:22px;padding:6px 14px 6px 6px;border-radius:30px;font-size:.82rem;color:var(--muted);
              text-decoration:none;background:var(--glass);border:1px solid var(--border2);transition:border-color .2s,transform .2s var(--spring)}
.sponsor-chip:hover{border-color:var(--accent);transform:translateY(-2px)}
.sponsor-chip b{color:var(--text)}
.sc-mark{display:grid;place-items:center;height:26px;padding:0 9px;border-radius:14px;font-family:Georgia,serif;font-weight:700;font-size:.72rem;letter-spacing:.06em;
         color:#fff6e0;background:linear-gradient(135deg,#1d2a5c,#3b2a7a 55%,#c08a2e)}

@media (max-width:980px){
  .rs-card{grid-template-columns:1fr;gap:20px}
  .rs-flip .rs-text{order:0}
  .stat-grid,.built-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:760px){
  .research{padding:40px 14px 10px}
  .rs-card{padding:22px 16px;border-radius:22px}
  .stat-grid,.built-grid{grid-template-columns:1fr}
  .stat > b{font-size:2.2rem}
  /* vertical timeline on phones */
  .sched-line{height:auto;margin:14px 0 0;padding-left:34px;display:flex;flex-direction:column;gap:18px}
  .sl-track{left:9px;right:auto;top:6px;bottom:6px;width:4px;height:auto}
  .sl-fill{width:100%;height:0;transition:height 2.4s var(--ease)}
  .sched-line.in .sl-fill{width:100%;height:100%}
  .sl-stop,.sl-stop:first-of-type,.sl-stop:last-of-type{position:relative;left:auto;top:auto;transform:none;flex-direction:row;align-items:baseline;gap:10px;text-align:left}
  .sl-dot{position:absolute;left:-34px;top:-2px;margin:0}
  .sl-stop b{font-size:.9rem}
  .sl-stop em{font-size:.8rem}
  .sl-gap-m{display:inline;color:var(--accent2);font-weight:800}
  .sl-gaps{display:none}
  .sponsor{padding:0 14px}
  .sponsor-card{flex-direction:column;text-align:center;padding:26px 20px}
  .sponsor-chip{font-size:.74rem;text-align:left}
  .dl-row{grid-template-columns:1fr auto 62px;gap:8px;padding:7px 8px}
  .dl-pips i{width:16px}
  .dl-lvl{font-size:.66rem}
}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .reveal{opacity:1;transform:none}
}
