/* ============================================================================
   LearnWisej — shared design system for the app pages (course player + dashboard)
   Mirrors the tokens of the marketing landing page so the product feels like
   one continuous experience.
   ========================================================================== */
:root{
  --bg:#0c0913;
  --bg-2:#100b1a;
  --panel:#15101f;
  --panel-2:#1a1429;
  --panel-3:#1f1830;
  --line:rgba(151,0,253,.16);
  --line-soft:rgba(255,255,255,.07);
  --ink:#efeaf8;
  --ink-soft:#b6adc8;
  --ink-mute:#8a8199;
  --indigo:#5b21c0;
  --violet:#9700fd;
  --violet-lift:#b15bff;
  --violet-glow:rgba(151,0,253,.45);
  --magenta:#d6249f;
  --magenta-glow:rgba(214,36,159,.42);
  --coral:#f0476a;
  --orange:#f97316;
  --orange-soft:#fb923c;
  /* brand gradient — mirrors the Wisej.NET logo: indigo → violet → magenta → coral → orange */
  --brand-grad:linear-gradient(100deg,var(--indigo),var(--violet) 28%,var(--magenta) 56%,var(--coral) 78%,var(--orange));
  --brand-grad-text:linear-gradient(100deg,#a06bff,#b15bff 22%,#e24fb0 52%,#f76a64 76%,#fb923c);
  --green:#3fe0ac;
  --green-deep:#1f9d72;
  --red:#fb7185;
  --amber:#fbbf24;
  /* section-type semantics */
  --pdf:#7c9ce6;
  --video:#b15bff;
  --quiz:#f97316;
  --lab:#3fe0ac;
  --radius:18px;
  --radius-sm:12px;
  --radius-lg:24px;
  --maxw:1440px;
  --shadow:0 30px 80px -30px rgba(0,0,0,.8);
  --shadow-sm:0 12px 30px -16px rgba(0,0,0,.7);
  --ease:cubic-bezier(.22,.61,.36,1);
  --nav-bg:rgba(12,9,19,.78);
  --grid-line:rgba(255,255,255,.035);
  --card-bg:linear-gradient(180deg,var(--panel-2),var(--panel));
  color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#f4f1fb;
  --bg-2:#eae4f7;
  --panel:#ffffff;
  --panel-2:#f8f5ff;
  --panel-3:#f1ecfb;
  --line:rgba(151,0,253,.20);
  --line-soft:rgba(28,20,48,.12);
  --ink:#1b1430;
  --ink-soft:#4c4366;
  --ink-mute:#736a89;
  --violet-lift:#7a14d8;
  --violet-glow:rgba(151,0,253,.28);
  --magenta:#bc1f8c;
  --magenta-glow:rgba(214,36,159,.26);
  --coral:#e23355;
  --brand-grad-text:linear-gradient(100deg,var(--indigo),#8a14d8 24%,#c0258f 54%,#e23355 78%,#e8631a);
  --green:#16a37b;
  --green-deep:#0f7a59;
  --shadow:0 30px 70px -34px rgba(74,32,128,.30);
  --shadow-sm:0 14px 30px -22px rgba(74,32,128,.4);
  --nav-bg:rgba(255,255,255,.8);
  --grid-line:rgba(28,20,48,.05);
  --pdf:#3b62b8;
  --video:#7a14d8;
  --lab:#10936c;
  --card-bg:linear-gradient(180deg,#ffffff,var(--panel-2));
  color-scheme:light;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg);
  color:var(--ink);
  font-family:'Inter',system-ui,sans-serif;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4,h5{font-family:'Plus Jakarta Sans','Inter',sans-serif;line-height:1.2;font-weight:700}
code,kbd,pre,.mono{font-family:'JetBrains Mono',ui-monospace,monospace}
:focus-visible{outline:2px solid var(--violet-lift);outline-offset:2px;border-radius:6px}

/* atmospheric background */
.bg-fx{position:fixed;inset:0;z-index:-2;pointer-events:none}
.bg-fx::before{
  content:"";position:absolute;inset:0;
  background:
    radial-gradient(60% 50% at 82% -8%, rgba(151,0,253,.26), transparent 60%),
    radial-gradient(46% 40% at 48% 2%, rgba(214,36,159,.14), transparent 60%),
    radial-gradient(50% 40% at 5% 6%, rgba(151,0,253,.14), transparent 55%),
    radial-gradient(40% 40% at 90% 64%, rgba(240,71,106,.10), transparent 60%),
    radial-gradient(45% 45% at 95% 92%, rgba(249,115,22,.10), transparent 60%),
    linear-gradient(180deg,var(--bg),var(--bg-2));
}
.bg-grid{position:fixed;inset:0;z-index:-2;pointer-events:none;opacity:.4;
  background-image:linear-gradient(var(--grid-line) 1px,transparent 1px),
    linear-gradient(90deg,var(--grid-line) 1px,transparent 1px);
  background-size:64px 64px;
  mask-image:radial-gradient(80% 60% at 50% 0%,#000,transparent 75%);
}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}

/* ---------- top app bar ---------- */
.appbar{position:sticky;top:0;z-index:50;backdrop-filter:blur(18px);
  background:var(--nav-bg);border-bottom:1px solid var(--line-soft)}
.appbar-in{max-width:var(--maxw);margin:0 auto;padding:12px 24px;display:flex;align-items:center;gap:18px}
.brand{display:flex;align-items:center;gap:10px;font-family:'Plus Jakarta Sans';font-weight:800;font-size:1.12rem;letter-spacing:-.01em}
.brand .mark{width:30px;height:30px;border-radius:8px;flex:none}
.brand b{background:var(--brand-grad-text);-webkit-background-clip:text;background-clip:text;color:transparent}
.brand-logo{height:38px;width:auto;display:block}
.brand-logo-light{display:none}
:root[data-theme="light"] .brand-logo-dark{display:none}
:root[data-theme="light"] .brand-logo-light{display:block}
.appnav{display:flex;gap:4px;margin-left:8px}
.appnav a{padding:8px 14px;border-radius:10px;font-weight:600;font-size:.92rem;color:var(--ink-soft);transition:.18s var(--ease)}
.appnav a:hover{color:var(--ink);background:var(--line-soft)}
.appnav a.active{color:var(--violet-lift);background:linear-gradient(180deg,rgba(151,0,253,.16),rgba(151,0,253,.05))}
.appbar-right{margin-left:auto;display:flex;align-items:center;gap:12px}

/* mobile menu trigger — hidden on desktop, shown when .appnav collapses */
.app-burger{display:none;width:38px;height:38px;border-radius:11px;border:1px solid var(--line-soft);
  background:var(--panel-2);color:var(--ink);place-items:center;cursor:pointer;transition:.18s}
.app-burger:hover{border-color:var(--line)}
.app-burger svg{width:20px;height:20px}

/* slide-in nav drawer (mirrors the homepage drawer) */
.app-drawer-scrim{position:fixed;inset:0;z-index:120;background:rgba(6,4,12,.62);backdrop-filter:blur(5px);
  opacity:0;pointer-events:none;transition:opacity .26s var(--ease)}
.app-drawer-scrim.open{opacity:1;pointer-events:auto}
.app-drawer{position:fixed;top:0;right:0;height:100%;width:min(320px,86vw);z-index:121;
  background:var(--drawer-bg,linear-gradient(180deg,var(--panel-2),var(--panel)));border-left:1px solid var(--line);
  box-shadow:var(--shadow);display:flex;flex-direction:column;padding:20px;gap:4px;
  transform:translateX(100%);transition:transform .3s var(--ease)}
.app-drawer-scrim.open .app-drawer{transform:none}
.app-drawer .dtop{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.app-drawer .dclose{width:36px;height:36px;border-radius:10px;border:1px solid var(--line-soft);background:var(--panel-2);
  color:var(--ink-soft);display:grid;place-items:center;cursor:pointer}
.app-drawer .dclose:hover{color:var(--ink)}
.app-drawer .dclose svg{width:18px;height:18px}
.app-drawer a{font-family:'Plus Jakarta Sans';font-size:1.1rem;font-weight:600;color:var(--ink-soft);
  padding:13px 8px;border-bottom:1px solid var(--line-soft);transition:color .18s}
.app-drawer a:hover,.app-drawer a.active{color:var(--violet-lift)}
.app-drawer .d-toggle{margin-top:20px;align-self:flex-start}

.credits-pill{display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel-2);font-size:.85rem;font-weight:600}
.credits-pill b{color:var(--orange-soft)}
/* Credit coin — a single flat gradient circle, reused everywhere (size via context). */
.coin{width:14px;height:14px;border-radius:50%;flex:none;
  background:linear-gradient(150deg,#fcb045,#f97316)}
/* reward / earned-credits variant — same coin, green */
.coin.reward{background:linear-gradient(150deg,#7af0c8,var(--lab))}

/* cart button + badge */
.cart-btn{position:relative;width:38px;height:38px;border-radius:11px;border:1px solid var(--line-soft);
  background:var(--panel-2);color:var(--ink-soft);display:grid;place-items:center;cursor:pointer;transition:.18s}
.cart-btn:hover{color:var(--ink);border-color:var(--line)}
.cart-btn svg{width:18px;height:18px}
.cart-badge{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;
  background:linear-gradient(105deg,var(--violet),var(--magenta) 60%,var(--coral));color:#fff;
  font-family:'Plus Jakarta Sans';font-size:.66rem;font-weight:800;line-height:1;
  display:none;align-items:center;justify-content:center}
.cart-btn.has-items .cart-badge{display:inline-flex}

/* theme toggle */
.theme-toggle{display:inline-flex;border:1px solid var(--line-soft);border-radius:999px;padding:3px;background:var(--panel-2)}
.theme-toggle button{width:30px;height:30px;border:0;background:transparent;color:var(--ink-mute);border-radius:999px;cursor:pointer;display:grid;place-items:center;transition:.18s}
.theme-toggle button svg{width:15px;height:15px}
.theme-toggle button.active{background:var(--violet);color:#fff}

.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:.82rem;
  color:#fff;cursor:pointer;border:2px solid var(--line);background:linear-gradient(135deg,var(--violet),var(--magenta) 55%,var(--orange))}

.iconbtn{width:38px;height:38px;border-radius:11px;border:1px solid var(--line-soft);background:var(--panel-2);
  color:var(--ink-soft);display:grid;place-items:center;cursor:pointer;transition:.18s}
.iconbtn:hover{color:var(--ink);border-color:var(--line)}
.iconbtn svg{width:18px;height:18px}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:9px;padding:11px 20px;border-radius:12px;font-weight:600;
  font-family:'Plus Jakarta Sans';font-size:.95rem;cursor:pointer;border:1px solid transparent;transition:.2s var(--ease);white-space:nowrap}
.btn svg{width:16px;height:16px}
.btn-primary{background:linear-gradient(105deg,var(--violet),var(--magenta) 60%,var(--coral));color:#fff;
  box-shadow:0 12px 30px -12px var(--magenta-glow)}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 18px 40px -14px var(--magenta-glow)}
.btn-ghost{background:var(--panel-2);border-color:var(--line);color:var(--ink)}
.btn-ghost:hover{border-color:var(--violet-lift);color:var(--violet-lift)}
.btn-green{background:linear-gradient(180deg,var(--green),var(--green-deep));color:#06231a}
.btn-green:hover{transform:translateY(-2px)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}
.btn-sm{padding:8px 14px;font-size:.85rem}

/* ---------- generic surfaces ---------- */
.panel{background:var(--card-bg);border:1px solid var(--line-soft);border-radius:var(--radius);box-shadow:var(--shadow-sm)}
.eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:.74rem;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--violet-lift)}
.muted{color:var(--ink-mute)}

/* section-type tokens */
.tIcon{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:9px;flex:none}
.tIcon svg{width:17px;height:17px}
.tIcon.pdf{color:var(--pdf);background:color-mix(in srgb,var(--pdf) 16%,transparent)}
.tIcon.video{color:var(--video);background:color-mix(in srgb,var(--video) 16%,transparent)}
.tIcon.quiz{color:var(--quiz);background:color-mix(in srgb,var(--quiz) 16%,transparent)}
.tIcon.lab{color:var(--lab);background:color-mix(in srgb,var(--lab) 16%,transparent)}

/* ---------- progress bar / ring ---------- */
.bar{height:8px;border-radius:999px;background:var(--panel-3);overflow:hidden}
.bar > i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--violet),var(--magenta) 50%,var(--coral) 75%,var(--orange));
  transition:width .6s var(--ease)}
.bar.green > i{background:linear-gradient(90deg,var(--green),var(--green-deep))}

.ring{--p:0;--sz:120px;width:var(--sz);height:var(--sz);border-radius:50%;flex:none;display:grid;place-items:center;
  background:conic-gradient(var(--violet-lift) calc(var(--p)*1%), var(--panel-3) 0)}
.ring::before{content:"";position:absolute;width:calc(var(--sz) - 18px);height:calc(var(--sz) - 18px);border-radius:50%;background:var(--panel)}
.ring.done{background:conic-gradient(var(--green) calc(var(--p)*1%), var(--panel-3) 0)}
.ring-wrap{position:relative;display:inline-grid;place-items:center}
.ring-val{position:absolute;inset:0;display:grid;place-items:center;text-align:center;z-index:1;font-family:'Plus Jakarta Sans';font-weight:800;font-size:1.3rem;line-height:1}
.ring-val small{display:block;font-size:.62rem;font-weight:600;letter-spacing:.1em;color:var(--ink-mute);text-transform:uppercase;margin-top:3px}

/* ---------- onboarding modal ---------- */
.modal-scrim{position:fixed;inset:0;z-index:200;background:rgba(6,4,12,.72);backdrop-filter:blur(6px);
  display:none;align-items:center;justify-content:center;padding:24px}
.modal-scrim.open{display:flex}
.modal{width:min(460px,100%);background:var(--card-bg);border:1px solid var(--line);border-radius:var(--radius-lg);
  padding:34px;box-shadow:var(--shadow);animation:pop .4s var(--ease)}
@keyframes pop{from{transform:translateY(14px) scale(.97);opacity:0}to{transform:none;opacity:1}}
.modal h2{font-size:1.5rem;margin-bottom:6px}
.modal p{color:var(--ink-soft);margin-bottom:20px}
.field{margin-bottom:14px}
.field label{display:block;font-size:.82rem;font-weight:600;color:var(--ink-soft);margin-bottom:6px}
.field input{width:100%;padding:12px 14px;border-radius:11px;border:1px solid var(--line);background:var(--panel);
  color:var(--ink);font-size:.95rem;font-family:inherit}
.field input:focus{border-color:var(--violet-lift);outline:none}

/* ---------- profile drawer ---------- */
.profile-scrim{position:fixed;inset:0;z-index:210;background:rgba(6,4,12,.62);backdrop-filter:blur(5px);
  display:flex;justify-content:flex-end;opacity:0;transition:opacity .28s var(--ease)}
.profile-scrim.open{opacity:1}
.profile{position:relative;width:min(424px,100%);height:100%;background:var(--card-bg);border-left:1px solid var(--line);
  box-shadow:var(--shadow);display:flex;flex-direction:column;overflow-y:auto;
  transform:translateX(28px);opacity:.3;transition:transform .32s var(--ease),opacity .32s var(--ease)}
.profile-scrim.open .profile{transform:none;opacity:1}
.pf-x{position:absolute;top:15px;right:15px;width:34px;height:34px;border-radius:10px;border:1px solid var(--line-soft);
  background:var(--panel-2);color:var(--ink-soft);display:grid;place-items:center;cursor:pointer;transition:.18s;z-index:1}
.pf-x:hover{color:var(--ink);border-color:var(--line)}
.pf-x svg{width:17px;height:17px}

.pf-head{padding:34px 26px 22px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:3px;
  border-bottom:1px solid var(--line-soft);
  background:radial-gradient(120% 90% at 50% 0,color-mix(in srgb,var(--violet) 15%,transparent),transparent 70%)}
.pf-ava{width:74px;height:74px;border-radius:50%;display:grid;place-items:center;color:#fff;margin-bottom:11px;
  font-family:'Plus Jakarta Sans';font-weight:800;font-size:1.7rem;border:2px solid var(--line);
  background:linear-gradient(135deg,var(--violet),var(--magenta) 55%,var(--orange));box-shadow:0 12px 30px -12px var(--magenta-glow)}
.pf-name-row{display:flex;align-items:center;gap:7px}
.pf-name{font-family:'Plus Jakarta Sans';font-weight:800;font-size:1.3rem;letter-spacing:-.01em}
.pf-edit{width:26px;height:26px;border-radius:8px;border:1px solid var(--line-soft);background:var(--panel-2);
  color:var(--ink-mute);display:grid;place-items:center;cursor:pointer;transition:.18s;flex:none}
.pf-edit:hover{color:var(--violet-lift);border-color:var(--line)}
.pf-edit svg{width:14px;height:14px}
.pf-email{color:var(--ink-mute);font-size:.86rem;word-break:break-all}
.pf-badges{display:flex;gap:7px;margin-top:11px;flex-wrap:wrap;justify-content:center}
.pf-name-edit{display:flex;gap:7px;width:100%;max-width:280px}
.pf-name-edit input{flex:1;min-width:0;padding:8px 11px;border-radius:9px;border:1px solid var(--line);
  background:var(--panel);color:var(--ink);font:inherit;font-size:.95rem}
.pf-name-edit input:focus{border-color:var(--violet-lift);outline:none}

.pf-body{padding:22px 24px 26px;display:flex;flex-direction:column;gap:24px;flex:1}
.pf-sec-t{font-size:.72rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-mute);font-weight:700;
  margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:8px}

.pf-balance{display:flex;align-items:center;gap:12px;padding:15px 18px;border-radius:14px;border:1px solid var(--line-soft);
  background:linear-gradient(120deg,color-mix(in srgb,var(--violet) 12%,var(--panel)),var(--panel))}
.pf-balance .coin{width:24px;height:24px}
.pf-balance .b{font-family:'Plus Jakarta Sans';font-weight:800;font-size:1.5rem;line-height:1}
.pf-balance .l{font-size:.76rem;color:var(--ink-mute);margin-top:2px}

.pf-stats{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.pf-stat{padding:14px;border-radius:13px;border:1px solid var(--line-soft);background:var(--panel)}
.pf-stat .n{font-family:'Plus Jakarta Sans';font-weight:800;font-size:1.55rem;line-height:1}
.pf-stat .l{font-size:.74rem;color:var(--ink-mute);margin-top:5px}

.pf-course{display:flex;gap:12px;align-items:center;padding:12px 0;border-top:1px solid var(--line-soft);text-decoration:none;color:inherit}
.pf-course:first-child{border-top:0}
.pf-course .dot{width:9px;height:9px;border-radius:50%;flex:none}
.pf-course .mid{flex:1;min-width:0}
.pf-course .nm{font-weight:600;font-size:.88rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pf-course .bar{margin-top:7px;height:6px}
.pf-course .pc{font-family:'Plus Jakarta Sans';font-weight:800;font-size:.95rem;flex:none;color:var(--violet-lift)}
.pf-course .pc.done{color:var(--green)}

.pf-cert{display:flex;gap:12px;align-items:flex-start;padding:13px;border-radius:13px;margin-bottom:10px;
  border:1px solid color-mix(in srgb,var(--green) 32%,transparent);background:color-mix(in srgb,var(--green) 8%,transparent)}
.pf-cert:last-child{margin-bottom:0}
.pf-cert .seal{width:38px;height:38px;border-radius:50%;flex:none;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--violet),var(--magenta) 55%,var(--orange))}
.pf-cert .seal svg{width:20px;height:20px;color:#fff}
.pf-cert .mid{flex:1;min-width:0}
.pf-cert .ct{font-weight:700;font-size:.88rem}
.pf-cert .cs{font-size:.74rem;color:var(--ink-mute);font-family:'JetBrains Mono',monospace;margin-top:1px}
.pf-cert-actions{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap}

.pf-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px;padding-top:4px}

@media(max-width:480px){.profile{width:100%}}

/* ---------- toast ---------- */
.toast-wrap{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:300;display:flex;flex-direction:column;gap:10px;align-items:center}
.toast{display:flex;align-items:center;gap:10px;padding:12px 18px;border-radius:12px;background:var(--panel-2);
  border:1px solid var(--line);box-shadow:var(--shadow);font-size:.9rem;font-weight:500;
  animation:toastIn .35s var(--ease)}
.toast .tIcon,.toast svg{flex:none}
.toast.good{border-color:color-mix(in srgb,var(--green) 50%,transparent)}
.toast.warn{border-color:color-mix(in srgb,var(--amber) 50%,transparent)}
@keyframes toastIn{from{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}

/* utility */
.reveal{opacity:0;transform:translateY(16px);transition:opacity .7s var(--ease),transform .7s var(--ease)}
.reveal.in{opacity:1;transform:none}
.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:.72rem;font-weight:700;
  letter-spacing:.04em;border:1px solid var(--line-soft);white-space:nowrap}
.pill.free{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}
.pill.lvl{color:var(--ink-soft);background:var(--panel-3)}
.pill.done{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent);background:color-mix(in srgb,var(--green) 12%,transparent)}
/* "Locked" (buy to unlock) vs "Coming soon" (not built yet) — kept visually distinct */
.pill.locked{color:var(--violet-lift);border-color:color-mix(in srgb,var(--violet) 42%,transparent);background:color-mix(in srgb,var(--violet) 12%,transparent)}
.pill.soon{color:var(--orange-soft);border-color:color-mix(in srgb,var(--orange) 42%,transparent);background:color-mix(in srgb,var(--orange) 12%,transparent)}

/* collapse the appnav into the burger menu before the bar gets crowded —
   the full nav + credits pill + theme toggle + avatar stop fitting well below 900px */
@media(max-width:900px){
  .appnav{display:none}
  .appbar-right .theme-toggle{display:none}
  .app-burger{display:grid}
}
@media(max-width:760px){
  .credits-pill span:not(.coin){display:none}
  .appbar-in{padding:10px 16px}
}
@media(max-width:620px){
  .wrap{padding:0 16px}
  /* tighten the bar so the logo and the right-hand controls keep breathing room
     as the viewport shrinks instead of crowding together */
  .appbar-in{gap:12px;padding:10px 14px}
  .appbar-right{gap:8px}
  .brand-logo{height:34px}
}
@media(max-width:360px){
  /* smallest phones: drop the balance pill from the bar (it stays in the menu
     drawer and profile) so the remaining controls never get cramped */
  .credits-pill{display:none}
}

/* ---------- page transitions --------------------------------------------
   A top progress bar shown while navigating between pages, plus a soft
   fade-in of the page content on arrival. Wired globally in app.js
   (LW.initPageTransitions) so every page gets it for free. */
.lw-pagebar{
  position:fixed;top:0;left:0;height:3px;width:0;z-index:9999;
  background:var(--brand-grad);
  box-shadow:0 0 10px var(--violet-glow),0 0 2px var(--violet-lift);
  border-radius:0 3px 3px 0;
  opacity:0;pointer-events:none;
  transition:width .2s var(--ease),opacity .35s ease;
}
.lw-pagebar.run{opacity:1}
.lw-pagebar.done{opacity:0}

@media (prefers-reduced-motion: no-preference){
  body.lw-page-in{animation:lw-page-in .45s var(--ease) both}
}
@keyframes lw-page-in{from{opacity:0}to{opacity:1}}

/* Full-page spinner shown while a freshly-navigated page boots and its
   catalog/learner/progress fetches resolve — fills the empty-panel gap. */
.lw-loader{
  position:fixed;inset:0;z-index:150;
  display:flex;align-items:center;justify-content:center;
  background:var(--bg);
  opacity:1;transition:opacity .4s ease;
}
.lw-loader.hide{opacity:0;pointer-events:none}
.lw-loader-in{display:flex;flex-direction:column;align-items:center;gap:16px}
.lw-spinner{
  width:48px;height:48px;border-radius:50%;
  background:conic-gradient(from 90deg,transparent 0 6%,var(--violet) 32%,var(--magenta) 58%,var(--orange) 84%,transparent);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 3px));
  mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 3px));
  animation:lw-spin .85s linear infinite;
}
.lw-loading-label{font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute);font-weight:600}
@keyframes lw-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.lw-spinner{animation-duration:1.7s}}

/* ---------- footer ---------------------------------------------------------
   Shared footer for the app pages that load app.css (e.g. /scorm). The
   homepage carries its own copy of these rules inline; keep them in sync. */
footer{border-top:1px solid var(--line-soft);margin-top:80px;padding:56px 0 36px;background:var(--bg-2)}
.foot-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:36px}
.foot-brand .brand{margin-bottom:14px}
.foot-brand p{color:var(--ink-soft);font-size:.92rem;max-width:26em}
.foot-col h5{font-family:'JetBrains Mono';font-size:.74rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:14px}
.foot-col a{display:block;color:var(--ink-soft);font-size:.9rem;padding:5px 0;transition:color .2s}
.foot-col a:hover{color:var(--violet-lift)}
.foot-bottom{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;
  margin-top:44px;padding-top:24px;border-top:1px solid var(--line-soft);color:var(--ink-mute);font-size:.85rem}
.foot-bottom .ice{display:flex;align-items:center;gap:10px}
.foot-bottom .ice b{color:var(--ink-soft)}
.foot-bottom .ndf{display:flex;align-items:center;gap:8px;font-family:'JetBrains Mono';font-size:.78rem;color:var(--ink-mute);border:1px solid var(--line-soft);border-radius:999px;padding:5px 12px}
.foot-bottom .foot-legal{display:flex;gap:18px}
.foot-bottom .foot-legal a{color:var(--ink-mute);transition:color .2s}
.foot-bottom .foot-legal a:hover{color:var(--violet-lift)}
@media(max-width:980px){.foot-grid{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.foot-grid{grid-template-columns:1fr}}

/* "A product of Ice Tea Group" footer badge — mirrors wisej.netlify.app. */
.itg-badge{display:inline-flex;align-items:center;gap:10px;margin-top:18px;background:color-mix(in srgb,var(--violet) 7%,transparent);border:1px solid color-mix(in srgb,var(--violet) 20%,transparent);border-radius:12px;padding:9px 15px;text-decoration:none;transition:border-color .2s,transform .2s}
.itg-badge:hover{border-color:var(--violet-lift);transform:translateY(-2px)}
.itg-badge-logo{width:22px;height:22px;display:block;flex:none;object-fit:contain}
.itg-badge-text{font-size:.88rem;color:var(--ink-soft);line-height:1.3}
.itg-badge-text strong{color:var(--ink);font-weight:700}
.itg-badge-arrow{color:var(--violet-lift);font-weight:700;margin-left:4px}
