/* ============================================================
   DIGILIBRARY — CASE STUDY
   Mobile-first · 3D concept · advanced JS/AJAX showcase
   Author: developersazzad (Sazzad Hossain)
   ============================================================ */

/* ---------- 1. Tokens ---------- */
:root{
  --bg:#070b18;
  --bg-2:#0c1226;
  --panel:rgba(255,255,255,.045);
  --panel-2:rgba(255,255,255,.07);
  --line:rgba(255,255,255,.10);
  --txt:#e9edf9;
  --muted:#98a2c3;
  --p1:#7c6cf7;            /* primary purple  */
  --p2:#22d3ee;           /* cyan            */
  --p3:#f472b6;           /* pink            */
  --ok:#34d399;
  --warn:#fbbf24;
  --grad:linear-gradient(135deg,#7c6cf7 0%,#5a8bff 45%,#22d3ee 100%);
  --grad-warm:linear-gradient(135deg,#f43f5e,#fb923c);
  --shadow:0 24px 60px -24px rgba(0,0,0,.65);
  --r:18px;
  --nav-h:64px;
  --nav-bg:rgba(7,11,24,.75);
  --font:"Inter","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
}
html[data-theme="light"]{
  --bg:#f2f4fb; --bg-2:#ffffff;
  --nav-bg:rgba(255,255,255,.8);
  --panel:rgba(23,32,61,.035); --panel-2:rgba(23,32,61,.06);
  --line:rgba(23,32,61,.12);
  --txt:#141b33; --muted:#5b6685;
  --shadow:0 24px 50px -28px rgba(23,32,61,.35);
}

/* ---------- 2. Base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0; font-family:var(--font); background:var(--bg); color:var(--txt);
  line-height:1.65; -webkit-font-smoothing:antialiased; overflow-x:hidden;
  transition:background .4s ease,color .4s ease;
}
img{max-width:100%; display:block}
a{color:inherit}
h1,h2,h3,h4{line-height:1.15; margin:0 0 .5em; letter-spacing:-.02em}
p{margin:0 0 1em}
::selection{background:var(--p1); color:#fff}
.wrap{width:min(1180px,100% - 2.4rem); margin-inline:auto}
section{padding:4.2rem 0; scroll-margin-top:calc(var(--nav-h) + 12px); position:relative}
.mono{font-family:var(--mono)}
.muted{color:var(--muted)}
.icon{width:1em;height:1em;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-.14em}

/* eyebrow + section heads */
.eyebrow{
  display:inline-flex;align-items:center;gap:.5rem;font-family:var(--mono);
  font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--p2);
  background:var(--panel);border:1px solid var(--line);border-radius:999px;
  padding:.42rem .9rem;margin-bottom:1rem;
}
.eyebrow::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--grad);box-shadow:0 0 12px var(--p1)}
.sec-title{font-size:clamp(1.6rem,4.6vw,2.5rem);font-weight:800}
.sec-title em{font-style:normal;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.sec-sub{color:var(--muted);max-width:62ch}
.sec-head{margin-bottom:2.4rem}

/* glass card */
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:var(--shadow);position:relative;
}
.card.pad{padding:1.5rem}
.glow-line{position:relative;overflow:hidden}
.glow-line::before{
  content:"";position:absolute;inset:0 0 auto 0;height:2px;background:var(--grad);opacity:.85;
}

/* buttons */
.btn{
  display:inline-flex;align-items:center;gap:.55rem;border:0;cursor:pointer;
  font:600 .92rem/1 var(--font);padding:.95rem 1.5rem;border-radius:14px;
  color:#fff;background:var(--grad);text-decoration:none;
  box-shadow:0 14px 30px -12px rgba(124,108,247,.65);
  transition:transform .25s ease,box-shadow .25s ease,filter .25s;
  transform-style:preserve-3d;
}
.btn:hover{transform:translateY(-3px) rotateX(6deg);filter:brightness(1.08)}
.btn.ghost{background:var(--panel-2);border:1px solid var(--line);box-shadow:none;color:var(--txt)}
.btn.small{padding:.6rem 1rem;font-size:.8rem;border-radius:10px}

/* chips */
.chip{
  display:inline-flex;align-items:center;gap:.4rem;font-family:var(--mono);font-size:.74rem;
  padding:.4rem .75rem;border-radius:999px;border:1px solid var(--line);
  background:var(--panel-2);color:var(--txt);white-space:nowrap;
}
.chip.p{border-color:rgba(124,108,247,.5);color:#b9aefe;background:rgba(124,108,247,.12)}
.chip.c{border-color:rgba(34,211,238,.45);color:#7ee6f5;background:rgba(34,211,238,.10)}
.chip.g{border-color:rgba(52,211,153,.45);color:#7ce7bd;background:rgba(52,211,153,.10)}
.chip.w{border-color:rgba(251,191,36,.45);color:#fcd34d;background:rgba(251,191,36,.10)}
html[data-theme="light"] .chip.p{color:#5b45d6}.chip-row{display:flex;flex-wrap:wrap;gap:.5rem}

/* ---------- 3. Preloader ---------- */
#loader{
  position:fixed;inset:0;z-index:120;display:grid;place-items:center;background:var(--bg);
  transition:opacity .6s ease,visibility .6s;
}
#loader.done{opacity:0;visibility:hidden}
.loader-book{width:74px;height:96px;position:relative;transform-style:preserve-3d;animation:lbSpin 2.4s linear infinite}
.loader-book i{position:absolute;inset:0;border-radius:6px;background:var(--grad);opacity:.9}
.loader-book i:nth-child(2){transform:translateZ(-14px);opacity:.45}
.loader-book i:nth-child(3){transform:translateZ(-28px);opacity:.2}
@keyframes lbSpin{0%{transform:rotateY(0) rotateX(8deg)}100%{transform:rotateY(360deg) rotateX(8deg)}}
#loader p{font-family:var(--mono);letter-spacing:.3em;font-size:.72rem;color:var(--muted);text-transform:uppercase}
.loader-inner{display:grid;justify-items:center;gap:1.1rem;perspective:600px}

/* ---------- 4. Progress + nav ---------- */
#progress{position:fixed;top:0;left:0;height:3px;width:0;background:var(--grad);z-index:110;box-shadow:0 0 14px rgba(124,108,247,.8)}
header.nav{
  position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);
  background:var(--nav-bg,rgba(7,11,24,.75));
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  border-bottom:1px solid var(--line);
}
.nav-inner{display:flex;align-items:center;gap:1rem;height:var(--nav-h)}
.logo{display:flex;align-items:center;gap:.6rem;font-weight:800;text-decoration:none;font-size:1.05rem}
.logo-badge{
  width:38px;height:38px;border-radius:11px;background:var(--grad);display:grid;place-items:center;
  box-shadow:0 8px 20px -8px rgba(124,108,247,.9);transform-style:preserve-3d;transition:transform .5s;
}
.logo:hover .logo-badge{transform:rotateY(180deg)}
.logo-badge .icon{width:20px;height:20px;stroke:#fff}
.logo small{display:block;font:500 .62rem/1 var(--mono);color:var(--muted);letter-spacing:.18em}
.nav-links{display:none;margin:0;padding:0;list-style:none;gap:.2rem;align-items:center}
.nav-links a{
  text-decoration:none;font-size:.86rem;font-weight:600;color:var(--muted);
  padding:.5rem .7rem;border-radius:10px;transition:.25s;
}
.nav-links a:hover,.nav-links a.active{color:var(--txt);background:var(--panel-2)}
.nav-cta{margin-left:auto;display:flex;align-items:center;gap:.5rem}
.icon-btn{
  width:40px;height:40px;border-radius:12px;border:1px solid var(--line);background:var(--panel-2);
  color:var(--txt);display:grid;place-items:center;cursor:pointer;transition:.25s;font-size:1rem;
}
.icon-btn:hover{transform:translateY(-2px);border-color:var(--p1)}
#menu-btn{display:grid}
.mobile-menu{
  position:fixed;top:var(--nav-h);left:0;right:0;z-index:99;background:var(--bg-2);
  border-bottom:1px solid var(--line);padding:1rem 1.2rem 1.4rem;display:grid;gap:.2rem;
  transform:translateY(-120%);transition:transform .45s cubic-bezier(.2,.9,.25,1);
}
.mobile-menu a{text-decoration:none;color:var(--muted);font-weight:600;padding:.7rem .6rem;border-radius:10px}
.mobile-menu a.active,.mobile-menu a:hover{color:var(--txt);background:var(--panel-2)}
body.menu-open .mobile-menu{transform:translateY(0)}
@media(min-width:960px){
  .nav-links{display:flex}
  #menu-btn{display:none}
  .mobile-menu{display:none}
}

/* ---------- 5. Hero ---------- */
#hero{
  min-height:100svh;display:flex;align-items:center;padding:calc(var(--nav-h) + 3rem) 0 4rem;
  overflow:hidden;isolation:isolate;
}
.hero-bg{position:absolute;inset:0;z-index:-1;overflow:hidden}
.orb{position:absolute;border-radius:50%;filter:blur(70px);opacity:.5;animation:orbFloat 14s ease-in-out infinite}
.orb.a{width:44vw;height:44vw;min-width:340px;min-height:340px;background:#5b45d6;top:-12%;left:-14%}
.orb.b{width:36vw;height:36vw;min-width:280px;min-height:280px;background:#0e7490;bottom:-16%;right:-10%;animation-delay:-5s}
.orb.c{width:22vw;height:22vw;min-width:200px;min-height:200px;background:#9d174d;top:38%;right:22%;animation-delay:-9s;opacity:.35}
@keyframes orbFloat{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(4%,6%,0) scale(1.08)}}
.grid-floor{
  position:absolute;left:-30%;right:-30%;bottom:-14%;height:52%;
  background-image:linear-gradient(rgba(124,108,247,.22) 1px,transparent 1px),linear-gradient(90deg,rgba(124,108,247,.22) 1px,transparent 1px);
  background-size:56px 56px;transform:perspective(600px) rotateX(64deg);
  mask-image:linear-gradient(to top,rgba(0,0,0,.9),transparent);
  -webkit-mask-image:linear-gradient(to top,rgba(0,0,0,.9),transparent);
  animation:gridMove 5s linear infinite;
}
@keyframes gridMove{to{background-position:0 56px,0 0}}
#stars{position:absolute;inset:0;width:100%;height:100%}
.hero-grid{display:grid;gap:3rem;align-items:center}
.hero-copy h1{
  font-size:clamp(2.7rem,9vw,5rem);font-weight:900;margin:.2rem 0 .6rem;letter-spacing:-.035em;
}
.hero-copy h1 .grad{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero-copy h1 .cursor{display:inline-block;width:.5ch;background:var(--p2);animation:blink 1s steps(2) infinite;color:var(--p2)}
@keyframes blink{50%{opacity:0}}
.hero-tag{font-size:clamp(1rem,2.6vw,1.18rem);color:var(--muted);max-width:52ch}
.hero-tag b{color:var(--txt)}
.hero-meta{display:flex;flex-wrap:wrap;gap:.5rem;margin:1.4rem 0 1.8rem}
.hero-ctas{display:flex;flex-wrap:wrap;gap:.8rem}
.hero-facts{display:flex;flex-wrap:wrap;gap:1.6rem;margin-top:2.4rem}
.hero-facts div{display:grid;gap:.1rem}
.hero-facts strong{font-size:1.35rem;font-weight:800}
.hero-facts span{font-size:.78rem;color:var(--muted);font-family:var(--mono);letter-spacing:.06em}

/* 3D book scene */
.hero-scene{perspective:1300px;display:grid;place-items:center;min-height:340px}
.book-stage{transform-style:preserve-3d;animation:stageFloat 7s ease-in-out infinite;position:relative}
@keyframes stageFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-16px)}}
.book3d{
  width:min(230px,58vw);height:min(315px,80vw);position:relative;transform-style:preserve-3d;
  animation:bookSpin 16s linear infinite;
}
@keyframes bookSpin{0%{transform:rotateY(-18deg) rotateX(4deg)}50%{transform:rotateY(198deg) rotateX(-4deg)}100%{transform:rotateY(342deg) rotateX(4deg)}}
.face{position:absolute;inset:0;border-radius:8px 14px 14px 8px;display:grid;place-content:center;text-align:center;gap:.4rem;padding:1.2rem;backface-visibility:hidden}
.face.front{
  background:linear-gradient(150deg,#6d5ded 0%,#4338ca 55%,#1e1b4b 100%);
  border:1px solid rgba(255,255,255,.25);transform:translateZ(21px);
  box-shadow:0 30px 60px -20px rgba(0,0,0,.7), inset 0 0 60px rgba(255,255,255,.08);
}
.face.front::before{content:"";position:absolute;left:12px;top:12px;bottom:12px;width:2px;background:rgba(255,255,255,.35);border-radius:2px}
.face.front .bk-logo{font:800 1.5rem/1 var(--font);color:#fff;letter-spacing:-.02em}
.face.front .bk-logo span{color:#8ef0ff}
.face.front .bk-sub{font:500 .62rem/1.5 var(--mono);color:#cfd4ff;letter-spacing:.24em;text-transform:uppercase}
.face.front .bk-icon{font-size:2.2rem;color:#8ef0ff}
.face.back{background:linear-gradient(150deg,#312e81,#111036);transform:rotateY(180deg) translateZ(21px)}
.face.side{
  width:42px;left:auto;right:-21px;transform:rotateY(90deg);border-radius:0;
  background:repeating-linear-gradient(to bottom,#f8fafc 0 3px,#dbe2f0 3px 5px);
}
.face.top{height:42px;bottom:auto;top:-21px;transform:rotateX(90deg);border-radius:0;background:linear-gradient(#fff,#cbd5e1)}
.orbit-ring{position:absolute;inset:-58px;transform-style:preserve-3d;animation:orbitSpin 22s linear infinite}
@keyframes orbitSpin{to{transform:rotateY(360deg)}}
.orbit-chip{
  position:absolute;top:50%;left:50%;font:600 .68rem/1 var(--mono);color:#fff;
  padding:.5rem .8rem;border-radius:999px;white-space:nowrap;
  background:rgba(10,14,30,.72);border:1px solid rgba(124,108,247,.6);backdrop-filter:blur(6px);
  box-shadow:0 8px 22px -8px rgba(0,0,0,.8);
}
.orbit-chip:nth-child(1){transform:rotateY(0deg) translateX(150px)}
.orbit-chip:nth-child(2){transform:rotateY(72deg) translateX(150px)}
.orbit-chip:nth-child(3){transform:rotateY(144deg) translateX(150px)}
.orbit-chip:nth-child(4){transform:rotateY(216deg) translateX(150px)}
.orbit-chip:nth-child(5){transform:rotateY(288deg) translateX(150px)}
.scroll-hint{
  position:absolute;bottom:1.4rem;left:50%;transform:translateX(-50%);
  font:500 .68rem/1 var(--mono);letter-spacing:.28em;color:var(--muted);text-transform:uppercase;
  display:grid;justify-items:center;gap:.5rem;text-decoration:none;
}
.scroll-hint i{width:22px;height:34px;border:2px solid var(--line);border-radius:12px;position:relative;display:block}
.scroll-hint i::after{content:"";position:absolute;top:6px;left:50%;width:3px;height:7px;margin-left:-1.5px;border-radius:3px;background:var(--p2);animation:wheel 1.6s ease-in-out infinite}
@keyframes wheel{0%{transform:translateY(0);opacity:1}70%{transform:translateY(10px);opacity:0}100%{opacity:0}}
@media(min-width:960px){.hero-grid{grid-template-columns:1.05fr .95fr}}

/* ---------- 6. Generic grids ---------- */
.grid-2{display:grid;gap:1.4rem}
.grid-3{display:grid;gap:1.4rem}
.grid-4{display:grid;gap:1.2rem}
@media(min-width:760px){.grid-2{grid-template-columns:1fr 1fr}.grid-4{grid-template-columns:1fr 1fr}}
@media(min-width:1020px){.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}}

/* reveal on scroll */
.reveal{opacity:0;transform:translateY(34px) scale(.98);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.8,.25,1)}
.reveal.in{opacity:1;transform:none}
.reveal.d1{transition-delay:.08s}.reveal.d2{transition-delay:.16s}.reveal.d3{transition-delay:.24s}.reveal.d4{transition-delay:.32s}

/* tilt */
[data-tilt]{transform-style:preserve-3d;transition:transform .18s ease-out,box-shadow .3s;will-change:transform}
[data-tilt] .tz{transform:translateZ(34px)}
.glare{position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .3s;
  background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.16),transparent 45%)}
[data-tilt]:hover .glare{opacity:1}

/* ---------- 7. Overview ---------- */
.ov-card h3{display:flex;align-items:center;gap:.6rem;font-size:1.12rem}
.ov-card h3 .icon{font-size:1.25rem;color:var(--p2)}
.ov-card.problem h3 .icon{color:var(--p3)}
.ov-list{margin:0;padding:0;list-style:none;display:grid;gap:.7rem}
.ov-list li{display:flex;gap:.65rem;font-size:.94rem;color:var(--muted)}
.ov-list li .icon{flex:none;font-size:1rem;margin-top:.28rem;color:var(--p1)}
.fact-table{display:grid;gap:.55rem;margin:0}
.fact-table div{display:flex;justify-content:space-between;gap:1rem;font-size:.88rem;border-bottom:1px dashed var(--line);padding-bottom:.55rem}
.fact-table div:last-child{border:0;padding:0}
.fact-table dt{color:var(--muted);font-family:var(--mono);font-size:.76rem;letter-spacing:.08em;text-transform:uppercase;margin-top:.15rem}
.fact-table dd{margin:0;font-weight:600;text-align:right}

/* ---------- 8. Roles ---------- */
.role-card{padding:1.6rem;display:grid;gap:.9rem;overflow:hidden}
.role-head{display:flex;align-items:center;gap:.9rem}
.role-ico{width:52px;height:52px;flex:none;border-radius:15px;display:grid;place-items:center;font-size:1.5rem;color:#fff;box-shadow:0 12px 26px -10px rgba(0,0,0,.6)}
.role-ico.adm{background:var(--grad-warm)}.role-ico.stf{background:linear-gradient(135deg,#0ea5e9,#22d3ee)}.role-ico.stu{background:var(--grad)}
.role-card h3{margin:0;font-size:1.15rem}
.role-card .role-desc{font-size:.9rem;color:var(--muted);margin:0}
.perm-badges{display:flex;flex-wrap:wrap;gap:.4rem}
.perm{font:600 .68rem/1 var(--mono);padding:.42rem .6rem;border-radius:7px;color:#fff}
.perm.b1{background:#38bdf8}.perm.b2{background:#0d9488}.perm.b3{background:#8b8cf0}.perm.b4{background:#f472b6}.perm.b5{background:#b91c1c}.perm.b6{background:#f59e0b}

/* ---------- 9. Feature tabs ---------- */
.tabs{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.6rem}
.tab-btn{
  border:1px solid var(--line);background:var(--panel);color:var(--muted);cursor:pointer;
  font:700 .86rem/1 var(--font);padding:.8rem 1.15rem;border-radius:12px;display:inline-flex;gap:.5rem;align-items:center;transition:.25s;
}
.tab-btn[aria-selected="true"]{background:var(--grad);color:#fff;border-color:transparent;box-shadow:0 12px 26px -12px rgba(124,108,247,.8);transform:translateY(-2px)}
.tab-panel{display:none;animation:fadeUp .5s ease}
.tab-panel.on{display:grid;gap:1.4rem}
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
.feat-list{margin:0;padding:0;list-style:none;display:grid;gap:.85rem}
.feat-list li{display:flex;gap:.8rem;align-items:flex-start;font-size:.94rem}
.feat-ico{width:38px;height:38px;flex:none;border-radius:11px;display:grid;place-items:center;background:var(--panel-2);border:1px solid var(--line);color:var(--p2);font-size:1.05rem}
.feat-list b{display:block}
.feat-list span{color:var(--muted);font-size:.87rem}
.shot{margin:0;overflow:hidden;border-radius:var(--r);border:1px solid var(--line);box-shadow:var(--shadow);cursor:zoom-in;position:relative}
.shot img{transition:transform .6s cubic-bezier(.2,.8,.25,1);width:100%}
.shot:hover img{transform:scale(1.05)}
.shot figcaption{
  position:absolute;left:0;right:0;bottom:0;padding:.7rem 1rem;font:600 .78rem/1.3 var(--mono);
  background:linear-gradient(to top,rgba(4,8,20,.92),transparent);color:#dfe5ff;
}
@media(min-width:900px){.tab-panel.on{grid-template-columns:1fr 1.15fr;align-items:center}}

/* ---------- 10. Architecture ---------- */
.arch-svg{width:100%;height:auto;display:block}
.arch-note{display:grid;gap:.9rem;margin-top:1.6rem}
.step{display:flex;gap:1rem;align-items:flex-start}
.step-n{
  flex:none;width:40px;height:40px;border-radius:12px;display:grid;place-items:center;
  font:800 1rem/1 var(--mono);color:#fff;background:var(--grad);box-shadow:0 10px 22px -10px rgba(124,108,247,.9);
}
.step h4{margin:0 0 .2rem;font-size:.98rem}
.step p{margin:0;font-size:.87rem;color:var(--muted)}
.schema{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.4rem}
@media(min-width:900px){.arch-note{grid-template-columns:1fr 1fr}}

/* ---------- 11. AJAX console ---------- */
.ajax-grid{display:grid;gap:1.4rem}
@media(min-width:980px){.ajax-grid{grid-template-columns:.9fr 1.1fr}}
.console{border-radius:16px;overflow:hidden;border:1px solid var(--line);background:#0a0f22;box-shadow:var(--shadow);font-family:var(--mono);font-size:.78rem}
.console-bar{display:flex;align-items:center;gap:.5rem;padding:.7rem .9rem;background:#111735;border-bottom:1px solid var(--line)}
.console-bar i{width:11px;height:11px;border-radius:50%}
.console-bar i:nth-child(1){background:#ff5f57}.console-bar i:nth-child(2){background:#febc2e}.console-bar i:nth-child(3){background:#28c840}
.console-bar span{margin-left:.4rem;color:#8b93b8;font-size:.72rem}
.console-body{padding:.9rem;height:300px;overflow-y:auto;display:grid;gap:.45rem;align-content:start;scrollbar-width:thin}
.console-body::-webkit-scrollbar{width:6px}.console-body::-webkit-scrollbar-thumb{background:#2a3358;border-radius:3px}
.cl{display:flex;gap:.5rem;flex-wrap:wrap;align-items:baseline;animation:fadeUp .35s ease}
.cl .m{font-weight:700;padding:.12rem .45rem;border-radius:5px;font-size:.68rem}
.cl .m.get{background:rgba(52,211,153,.16);color:#6ee7b7}
.cl .m.post{background:rgba(251,191,36,.16);color:#fcd34d}
.cl .m.ok{background:rgba(34,211,238,.16);color:#7ee6f5}
.cl .m.sys{background:rgba(124,108,247,.2);color:#b9aefe}
.cl .u{color:#dfe5ff}
.cl .t{color:#5b6685;margin-left:auto;font-size:.68rem}
.cl .j{color:#9aa5c1;width:100%;white-space:pre-wrap;padding-left:.2rem}
.console-actions{display:flex;flex-wrap:wrap;gap:.5rem;padding:.8rem;border-top:1px solid var(--line);background:#0d1330}
.endpoint-table{width:100%;border-collapse:collapse;font-size:.84rem}
.endpoint-table th,.endpoint-table td{text-align:left;padding:.72rem .8rem;border-bottom:1px solid var(--line);vertical-align:top}
.endpoint-table th{font:700 .7rem/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.endpoint-table td:first-child .mono{font-size:.76rem;color:#7ee6f5;background:rgba(34,211,238,.08);padding:.25rem .5rem;border-radius:6px;white-space:nowrap}
.endpoint-table td{color:var(--muted)}
.endpoint-table tr:last-child td{border:0}
.table-scroll{overflow-x:auto}

/* ---------- 12. Gallery coverflow ---------- */
.flow-wrap{perspective:1600px;margin-top:.5rem}
.flow{
  display:flex;gap:1.2rem;overflow-x:auto;padding:2.6rem 1.2rem 3rem;scroll-snap-type:x mandatory;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;transform-style:preserve-3d;
}
.flow::-webkit-scrollbar{display:none}
.flow-card{
  margin:0;flex:0 0 min(78vw,520px);scroll-snap-align:center;border-radius:16px;overflow:hidden;
  border:1px solid var(--line);background:var(--bg-2);box-shadow:var(--shadow);
  transition:transform .45s cubic-bezier(.2,.8,.25,1),box-shadow .45s,opacity .45s;cursor:zoom-in;position:relative;
}
.flow-card img{width:100%;aspect-ratio:16/9;object-fit:cover;object-position:top;border-bottom:1px solid var(--line)}
.flow-card .fc-meta{padding:.85rem 1rem 1rem;display:grid;gap:.3rem}
.flow-card .fc-meta b{font-size:.95rem}
.flow-card .fc-meta p{margin:0;font-size:.79rem;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.flow-card .tag{position:absolute;top:.8rem;left:.8rem;z-index:2}
.flow-hint{text-align:center;font:500 .72rem/1 var(--mono);letter-spacing:.22em;color:var(--muted);text-transform:uppercase}

/* lightbox */
#lightbox{position:fixed;inset:0;z-index:130;display:none;place-items:center;background:rgba(3,6,16,.9);backdrop-filter:blur(8px);padding:1.4rem}
#lightbox.on{display:grid}
#lightbox figure{margin:0;max-width:min(1100px,94vw);display:grid;gap:.8rem;animation:fadeUp .35s ease}
#lightbox img{max-height:74vh;width:auto;max-width:100%;border-radius:14px;border:1px solid var(--line);box-shadow:0 40px 90px -30px #000;margin-inline:auto}
#lightbox figcaption{color:#cdd5f2;font-size:.88rem;text-align:center}
#lightbox figcaption b{color:#fff}
.lb-btn{position:absolute;top:1.1rem;right:1.1rem}
.lb-nav{position:absolute;bottom:1.2rem;left:50%;transform:translateX(-50%);display:flex;gap:.6rem}

/* ---------- 13. Design / 3D notes ---------- */
.design-card{padding:1.5rem;display:grid;gap:.8rem;align-content:start}
.design-card .d-ico{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;font-size:1.3rem;color:#fff;background:var(--grad);box-shadow:0 12px 26px -12px rgba(124,108,247,.9)}
.design-card:nth-child(2) .d-ico{background:linear-gradient(135deg,#0ea5e9,#22d3ee)}
.design-card:nth-child(3) .d-ico{background:var(--grad-warm)}
.design-card:nth-child(4) .d-ico{background:linear-gradient(135deg,#059669,#34d399)}
.design-card h3{margin:0;font-size:1.05rem}
.design-card p{margin:0;font-size:.88rem;color:var(--muted)}
.bp-row{display:flex;gap:.4rem;flex-wrap:wrap}
.swatch{width:26px;height:26px;border-radius:8px;border:1px solid var(--line)}

/* ---------- 14. Challenges ---------- */
.chal{padding:1.6rem;display:grid;gap:.9rem}
.chal .q{display:flex;gap:.7rem;align-items:flex-start;font-weight:700;font-size:.98rem}
.chal .q .icon{color:var(--p3);font-size:1.15rem;margin-top:.15rem}
.chal .a{display:flex;gap:.7rem;align-items:flex-start;font-size:.9rem;color:var(--muted)}
.chal .a .icon{color:var(--ok);font-size:1.15rem;margin-top:.15rem}
.chal .a b{color:var(--txt)}

/* ---------- 15. Results ---------- */
.stat-card{padding:1.4rem;display:grid;gap:.2rem;text-align:left;overflow:hidden}
.stat-card strong{font-size:clamp(1.9rem,5vw,2.6rem);font-weight:900;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;font-variant-numeric:tabular-nums}
.stat-card span{font-weight:700;font-size:.9rem}
.stat-card small{color:var(--muted);font-size:.76rem;font-family:var(--mono)}
.outcomes{margin:1.6rem 0 0;padding:0;list-style:none;display:grid;gap:.7rem}
.outcomes li{display:flex;gap:.7rem;font-size:.94rem;color:var(--muted)}
.outcomes li .icon{color:var(--ok);margin-top:.3rem;flex:none}
.outcomes li b{color:var(--txt)}

/* ---------- 16. Footer / developer ---------- */
footer{border-top:1px solid var(--line);background:var(--bg-2);padding:4rem 0 2rem;margin-top:2rem;position:relative;overflow:hidden}
footer .orb{opacity:.25}
.dev-card{padding:2rem;display:grid;gap:1.6rem;align-items:center}
@media(min-width:820px){.dev-card{grid-template-columns:auto 1fr auto}}
.avatar{
  width:96px;height:96px;border-radius:26px;background:var(--grad);display:grid;place-items:center;
  font:900 2rem/1 var(--font);color:#fff;box-shadow:0 20px 44px -16px rgba(124,108,247,.9);
  transform-style:preserve-3d;transition:transform .6s;
}
.avatar:hover{transform:rotateY(180deg) rotateZ(6deg)}
.dev-info h3{margin:0 0 .2rem;font-size:1.4rem}
.dev-info .handle{font-family:var(--mono);color:var(--p2);font-size:.85rem}
.dev-info p{color:var(--muted);font-size:.92rem;margin:.6rem 0 0;max-width:56ch}
.socials{display:grid;gap:.55rem}
@media(min-width:520px){.socials{grid-template-columns:1fr 1fr}}
@media(min-width:820px){.socials{grid-template-columns:1fr;min-width:230px}}
.social{
  display:flex;align-items:center;gap:.7rem;text-decoration:none;font-size:.86rem;font-weight:600;
  padding:.65rem .9rem;border-radius:12px;border:1px solid var(--line);background:var(--panel);transition:.25s;color:var(--txt);
}
.social:hover{transform:translateX(5px);border-color:var(--p1);background:var(--panel-2)}
.social .icon{font-size:1.05rem;color:var(--p2)}
.foot-bottom{margin-top:2.6rem;padding-top:1.4rem;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.8rem;justify-content:space-between;align-items:center;font-size:.8rem;color:var(--muted)}
.foot-bottom .mono{font-size:.72rem}

/* ---------- 17. Floating ui ---------- */
#top-btn{
  position:fixed;right:1.1rem;bottom:1.1rem;z-index:90;width:46px;height:46px;border-radius:14px;border:0;
  background:var(--grad);color:#fff;display:grid;place-items:center;cursor:pointer;font-size:1.1rem;
  box-shadow:0 16px 34px -12px rgba(124,108,247,.9);opacity:0;transform:translateY(20px);pointer-events:none;transition:.35s;
}
#top-btn.show{opacity:1;transform:none;pointer-events:auto}

/* reduced motion */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001s!important;animation-iteration-count:1!important;transition-duration:.001s!important;scroll-behavior:auto!important}
  .reveal{opacity:1;transform:none}
}
