:root{
  --bg:#0d0a26; --bg2:#171238; --card:#1d1745; --card2:#272058; --text:#f6f4ff; --muted:#a9a4cf;
  --accent:#ff5d8f; --accent2:#ffb547; --ok:#3ddc97; --blue:#5aa9ff;
  --tab-h:58px; --safe-b:env(safe-area-inset-bottom,0px); --safe-t:env(safe-area-inset-top,0px);
  --head-h:calc(var(--safe-t) + 52px);
  --radius:18px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:#05030f;color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,Helvetica,Arial,sans-serif;overscroll-behavior:none;-webkit-text-size-adjust:100%}
body{display:flex;justify-content:center}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
svg{width:24px;height:24px;display:block}
#app{position:relative;width:100%;max-width:480px;height:100vh;height:100dvh;background:var(--bg);overflow:hidden;display:flex;flex-direction:column}
@media (min-width:500px){ #app{margin:0 auto;box-shadow:0 0 0 1px #2b2556,0 30px 80px #000a} }
#views{position:relative;flex:1;min-height:0}
.view{position:absolute;inset:0;display:none;overflow-y:auto;-webkit-overflow-scrolling:touch}
.view.active{display:block}
#view-feed{overflow:hidden}
#view-feed.active{display:block}

/* ---------- tab bar */
#tabbar{display:flex;height:calc(var(--tab-h) + var(--safe-b));padding-bottom:var(--safe-b);background:rgba(13,10,38,.96);border-top:1px solid #241e52;z-index:20}
#tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--muted);font-size:11px;font-weight:600}
#tabbar button svg{width:24px;height:24px}
#tabbar button.active{color:#fff}
#tabbar button.active svg{color:var(--accent)}

/* ---------- feed header */
#feed-head{position:absolute;z-index:10;top:0;left:0;right:0;padding:calc(var(--safe-t) + 8px) 8px 18px 10px;background:linear-gradient(#0d0a26ee 55%,#0d0a2600);pointer-events:none}
#feed-head>*{pointer-events:auto}
.head-row{display:flex;align-items:center;gap:2px}
.chips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;flex:1;min-width:0;padding:2px 0}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;padding:7px 13px;border-radius:99px;background:#ffffff14;color:#d9d5ff;font-size:14px;font-weight:650;white-space:nowrap;border:1px solid transparent}
.chip.on{background:#fff;color:#14102f}
.chips.sub{margin-top:6px;padding-right:8px}
.chips.sub .chip{font-size:12.5px;padding:5px 11px;background:#ffffff0f}
.chips.sub .chip.on{background:var(--accent);color:#fff}
.chips.sub:empty{display:none}
.icon-btn{flex:none;width:40px;height:40px;display:grid;place-items:center;border-radius:50%;color:#fff}
.icon-btn:active{background:#ffffff22}
.icon-btn svg{width:22px;height:22px}

/* ---------- feed */
#feed{position:absolute;inset:0;overflow-y:scroll;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;scrollbar-width:none}
#feed::-webkit-scrollbar{display:none}
.item{position:relative;height:100%;width:100%;scroll-snap-align:start;scroll-snap-stop:always;overflow:hidden;background:linear-gradient(#141c33,#2f204b)}
.item video,.item img.poster{position:absolute;left:0;right:0;bottom:0;width:100%;height:calc(100% - 10px);max-height:100%;object-fit:contain;object-position:center bottom;background:transparent}
.item img.poster{opacity:1}
.item video{opacity:0;transition:opacity .15s}
.item video.show{opacity:1}
.tap{position:absolute;inset:0;z-index:2}
.pause-ico{position:absolute;left:50%;top:46%;width:84px;height:84px;margin:-42px 0 0 -42px;border-radius:50%;background:#0008;display:grid;place-items:center;z-index:3;opacity:0;transform:scale(.8);transition:.18s;pointer-events:none}
.pause-ico svg{width:40px;height:40px;margin-left:4px}
.item.paused .pause-ico{opacity:1;transform:none}
.heart-pop{position:absolute;left:50%;top:44%;width:120px;height:120px;margin:-60px 0 0 -60px;color:var(--accent);z-index:4;pointer-events:none;animation:pop .8s ease-out forwards}
.heart-pop svg{width:100%;height:100%;filter:drop-shadow(0 4px 12px #0008)}
@keyframes pop{0%{opacity:0;transform:scale(.4)}25%{opacity:1;transform:scale(1.15)}60%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.2) translateY(-30px)}}
.spinner{position:absolute;left:50%;top:46%;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;border:3px solid #fff3;border-top-color:#fff;animation:spin .8s linear infinite;z-index:3;opacity:0;pointer-events:none;transition:opacity .2s}
.item.loading .spinner{opacity:1}
@keyframes spin{to{transform:rotate(360deg)}}

.rail{position:absolute;right:6px;bottom:calc(14px + 38px);z-index:5;display:flex;flex-direction:column;align-items:center;gap:15px}
.rail button{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11.5px;font-weight:700;color:#fff;text-shadow:0 1px 6px #000a;min-width:48px}
.rail .rb{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:#0d0a2699;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid #ffffff1f;transition:transform .15s}
.rail button:active .rb{transform:scale(.88)}
.rail svg{width:25px;height:25px}
.rail .on .rb{background:#fff}
.rail .like.on svg{color:var(--accent)}
.rail .save.on svg{color:var(--accent2)}
.rail .cards .rb{background:linear-gradient(135deg,#ff5d8f,#ff8a4c);border-color:transparent}

.meta{position:absolute;left:0;right:70px;bottom:calc(14px + 8px);z-index:5;padding:0 14px;pointer-events:none;text-shadow:0 1px 8px #000b}
.meta .tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.tag{font-size:11px;font-weight:800;letter-spacing:.02em;padding:3px 8px;border-radius:99px;background:#0d0a2699;border:1px solid #ffffff22;text-shadow:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.tag.subj{color:#14102f;border:0}
.tag.higher{background:#ffb547;color:#2a1a00;border:0}
.tag.done{background:var(--ok);color:#06281a;border:0}
.meta h2{font-size:16px;line-height:1.22;margin:0;font-weight:750}
.meta p{margin:3px 0 0;font-size:12.5px;color:#d9d5ff;font-weight:550}

.bar{position:absolute;left:0;right:0;bottom:0;height:22px;z-index:6;touch-action:none}
.bar i{position:absolute;left:0;bottom:0;height:3px;width:0;background:#fff;border-radius:0 2px 2px 0}
.bar::before{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:#ffffff33}
.bar.drag i,.bar.drag::before{height:7px}
.bar .time{position:absolute;left:50%;bottom:30px;transform:translateX(-50%);background:#000b;padding:4px 9px;border-radius:99px;font-size:13px;font-weight:700;display:none}
.bar.drag .time{display:block}

#sound-pill{position:absolute;z-index:12;left:50%;transform:translateX(-50%);top:calc(var(--head-h) + 8px);display:flex;align-items:center;gap:6px;padding:6px 13px;border-radius:99px;background:#fff;color:#14102f;font-weight:800;font-size:13px;box-shadow:0 6px 24px #0007;animation:bob 1.8s ease-in-out infinite}
#sound-pill[hidden]{display:none}
#sound-pill svg{width:18px;height:18px}
@keyframes bob{50%{transform:translateX(-50%) translateY(3px)}}
#view-feed.has-topics #sound-pill{top:calc(var(--head-h) + 52px)}
.end-item{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px;gap:12px}
.end-item h2{margin:0;font-size:24px}
.end-item p{margin:0;color:var(--muted);max-width:28ch}

/* ---------- buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 20px;border-radius:99px;background:linear-gradient(135deg,#ff5d8f,#ff8a4c);color:#fff;font-weight:800;font-size:15px}
.btn.ghost{background:#ffffff14}
.btn.small{padding:8px 14px;font-size:13px}

/* ---------- pages */
.page{padding:calc(var(--safe-t) + 14px) 16px 28px}
.page h1{font-size:26px;margin:4px 0 2px;letter-spacing:-.01em}
.page .sub{color:var(--muted);font-size:14px;margin:0 0 14px}
.search{position:sticky;top:0;z-index:5;background:var(--bg);padding:calc(var(--safe-t) + 12px) 16px 10px}
.search label{display:flex;align-items:center;gap:10px;background:var(--card);border-radius:14px;padding:0 14px;height:46px;border:1px solid #2d2766}
.search input{flex:1;min-width:0;background:none;border:0;outline:0;color:#fff;font-size:16px;height:100%}
.search input::placeholder{color:#8b86bb}
.search svg{width:20px;height:20px;color:var(--muted);flex:none}
.search .clear{width:28px;height:28px;display:none;place-items:center;border-radius:50%;background:#ffffff22}
.search .clear svg{width:16px;height:16px;color:#fff}
.search.has .clear{display:grid}
.explore-body{padding:4px 16px 28px}
.subj-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.subj-card{position:relative;text-align:left;padding:14px;border-radius:var(--radius);background:var(--card);border:1px solid #2d2766;overflow:hidden;min-height:128px;display:flex;flex-direction:column;gap:2px}
.subj-card::before{content:"";position:absolute;inset:0 0 auto 0;height:4px;background:var(--c)}
.subj-card .em{font-size:26px;margin-bottom:6px}
.subj-card b{font-size:16px;line-height:1.15}
.subj-card small{color:var(--muted);font-size:12.5px}
.prog{height:6px;border-radius:9px;background:#ffffff1c;overflow:hidden;margin-top:auto}
.prog i{display:block;height:100%;background:var(--c,var(--ok));border-radius:9px}
.subj-card .prog{margin-top:10px}
.section-title{display:flex;align-items:center;justify-content:space-between;margin:20px 0 10px;font-size:16px;font-weight:800}
.back{display:flex;align-items:center;gap:4px;color:var(--muted);font-weight:700;font-size:14px;margin:2px 0 10px 0}
.back svg{width:20px;height:20px}
.subj-head{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.subj-head .em{font-size:32px}
.subj-head h1{margin:0;font-size:24px}
.subj-head small{color:var(--muted)}
.chips.wrap{flex-wrap:wrap;overflow:visible}
.chips.wrap .chip{background:var(--card)}
.chips.wrap .chip.on{background:#fff}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.tile{position:relative;aspect-ratio:9/16;border-radius:12px;overflow:hidden;background:var(--card);text-align:left;content-visibility:auto;contain-intrinsic-size:auto 200px}
.tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.tile::after{content:"";position:absolute;inset:0;background:linear-gradient(#0000 45%,#000d)}
.tile .tt{position:absolute;left:7px;right:7px;bottom:6px;z-index:2;font-size:11.5px;font-weight:700;line-height:1.2;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.tile .dur{position:absolute;top:6px;right:6px;z-index:2;font-size:10.5px;font-weight:800;background:#000a;padding:2px 6px;border-radius:99px}
.tile .tick{position:absolute;top:6px;left:6px;z-index:2;width:20px;height:20px;border-radius:50%;background:var(--ok);color:#06281a;display:none;place-items:center}
.tile .tick svg{width:14px;height:14px}
.tile.watched .tick{display:grid}
.tile.watched img{opacity:.55}
.tile .hi{position:absolute;bottom:42px;left:6px;z-index:2;font-size:9.5px;font-weight:800;background:var(--accent2);color:#2a1a00;padding:1px 6px;border-radius:99px}
.empty{color:var(--muted);text-align:center;padding:36px 10px;line-height:1.5}
.topic-list{display:flex;flex-direction:column;gap:8px}
.topic-row{display:flex;align-items:center;gap:12px;padding:13px 14px;background:var(--card);border-radius:14px;text-align:left;width:100%;border:1px solid #2d2766}
.topic-row .tx{flex:1;min-width:0}
.topic-row b{display:block;font-size:15px;line-height:1.2}
.topic-row small{color:var(--muted);font-size:12.5px}
.topic-row .go{color:var(--muted)}
.topic-row .go svg{width:18px;height:18px;transform:rotate(180deg)}
.topic-row .prog{margin-top:8px}

/* ---------- me */
.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 0 6px}
.stat{background:var(--card);border-radius:16px;padding:12px;text-align:center;border:1px solid #2d2766}
.stat b{display:block;font-size:24px}
.stat small{color:var(--muted);font-size:12px}
.seg{display:flex;background:var(--card);border-radius:99px;padding:4px;gap:4px;margin:6px 0 12px}
.seg button{flex:1;padding:8px;border-radius:99px;font-weight:700;font-size:14px;color:var(--muted)}
.seg button.on{background:#fff;color:#14102f}
.setting{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid #2d2766}
.setting .tx{flex:1}
.setting b{display:block;font-size:15px}
.setting small{color:var(--muted);font-size:12.5px}
.switch{position:relative;width:50px;height:30px;border-radius:99px;background:#4a4380;flex:none;transition:.2s}
.switch::after{content:"";position:absolute;left:3px;top:3px;width:24px;height:24px;border-radius:50%;background:#fff;transition:.2s}
.switch.on{background:var(--ok)}
.switch.on::after{left:23px}
.install{background:linear-gradient(135deg,#2a2166,#3a1f5e);padding:14px;border-radius:16px;margin:14px 0;font-size:14px;line-height:1.5}
.install b{display:block;margin-bottom:4px}
.fine{color:var(--muted);font-size:12px;line-height:1.5;margin-top:18px}
.link-btn{color:var(--accent);font-weight:700;font-size:14px;padding:8px 0}

/* ---------- flashcard deck */
#deck{position:absolute;inset:0;z-index:50;background:var(--bg);display:flex;flex-direction:column;padding:calc(var(--safe-t) + 8px) 16px calc(var(--safe-b) + 16px);animation:slideup .25s ease-out}
#deck[hidden]{display:none}
@keyframes slideup{from{transform:translateY(40px);opacity:0}}
.deck-top{display:flex;align-items:center;gap:8px;min-height:48px}
.deck-top .ttl{flex:1;min-width:0}
.deck-top b{display:block;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.deck-top small{color:var(--muted);font-size:12.5px}
.deck-prog{height:5px;background:#ffffff1c;border-radius:9px;overflow:hidden;margin:6px 0 14px}
.deck-prog i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent2));width:0;transition:width .25s}
.card-wrap{flex:1;min-height:0;perspective:1200px;display:flex;touch-action:pan-y}
.fc{position:relative;flex:1;transform-style:preserve-3d;transition:transform .45s cubic-bezier(.3,.8,.3,1);cursor:pointer}
.fc.flip{transform:rotateY(180deg)}
.fc.swipe-l{animation:outl .22s ease-in forwards}
.fc.swipe-r{animation:outr .22s ease-in forwards}
@keyframes outl{to{transform:translateX(-120%) rotate(-12deg);opacity:0}}
@keyframes outr{to{transform:translateX(120%) rotate(12deg);opacity:0}}
.face{position:absolute;inset:0;border-radius:24px;padding:26px 22px;display:flex;flex-direction:column;justify-content:center;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow-y:auto;border:1px solid #ffffff1a}
.face .lab{position:absolute;top:16px;left:20px;font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;opacity:.75}
.face .txt{font-size:21px;line-height:1.38;font-weight:650;margin:auto 0;padding:16px 0;white-space:pre-line}
.face.front{background:linear-gradient(160deg,#2b2370,#1d1745)}
.face.back{background:linear-gradient(160deg,#4a1d58,#2b1a52);transform:rotateY(180deg)}
.face.back .txt{font-size:19px;font-weight:550}
.face .hint{position:absolute;bottom:14px;left:0;right:0;text-align:center;font-size:12px;color:#cfc9ff99}
.face .ref{position:absolute;bottom:14px;right:18px;font-size:11px;color:#cfc9ffaa}
.deck-actions{display:flex;gap:10px;margin-top:14px}
.deck-actions button{flex:1;padding:14px 8px;border-radius:16px;font-weight:800;font-size:15px;background:var(--card);border:1px solid #2d2766}
.deck-actions .again{color:#ffb4c6}
.deck-actions .know{background:var(--ok);color:#06281a;border:0}
.deck-nav{display:flex;align-items:center;justify-content:space-between;margin-top:10px;color:var(--muted);font-size:13px;font-weight:600}
.deck-nav button{padding:8px 12px;border-radius:99px;background:#ffffff12;font-weight:700;color:#e8e5ff;display:inline-flex;align-items:center;gap:6px;font-size:13px}
.deck-nav button.on{background:#fff;color:#14102f}
.deck-nav svg{width:16px;height:16px}
.done-card{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;flex:1}
.done-card h2{margin:0;font-size:26px}
.done-card p{color:var(--muted);margin:0}
.done-card .em{font-size:54px}

#toast{position:absolute;left:50%;bottom:calc(var(--tab-h) + var(--safe-b) + 18px);transform:translate(-50%,20px);background:#fff;color:#14102f;padding:10px 16px;border-radius:99px;font-weight:750;font-size:14px;opacity:0;pointer-events:none;transition:.25s;z-index:99;max-width:90%;text-align:center}
#toast.show{opacity:1;transform:translate(-50%,0)}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01s!important;transition-duration:.01s!important}}
.search input::-webkit-search-cancel-button,.search input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}
.face .txt{color:#fff}
