:root{--night-1: #0b0820;--night-2: #1c1440;--card: #211a3a;--card-edge: rgba(217, 169, 63, .45);--ink: #ece4d0;--ink-dim: #b3a98e;--gold: #d9a93f;--gold-light: #f0cd7a;--arcane: #8b5cf6;--arcane-dim: #5e3fb0;--emerald: #2ea35f;--blood: #e25555;--title: "Cinzel", "Georgia", serif}*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,system-ui,-apple-system,Roboto,sans-serif;color:var(--ink);min-height:100vh;background:linear-gradient(180deg,var(--night-1) 0%,var(--night-2) 60%,#241a4a 100%) fixed}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background-image:radial-gradient(1.5px 1.5px at 12% 18%,#fff8,transparent),radial-gradient(1px 1px at 34% 8%,#fff6,transparent),radial-gradient(2px 2px at 56% 26%,#ffd98344,transparent),radial-gradient(1.5px 1.5px at 78% 12%,#fff7,transparent),radial-gradient(1px 1px at 90% 32%,#fff5,transparent),radial-gradient(1.5px 1.5px at 22% 42%,#fff5,transparent),radial-gradient(1px 1px at 66% 48%,#ffd98333,transparent);animation:twinkle 7s ease-in-out infinite alternate}@keyframes twinkle{0%{opacity:.5}to{opacity:1}}.app{max-width:1280px;margin:0 auto;padding:14px 20px 60px;position:relative;z-index:1}.topbar{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:12px 4px 18px;flex-wrap:wrap}.logo{font-family:var(--title);font-weight:800;font-size:1.5rem;letter-spacing:3px;color:var(--gold-light);text-shadow:0 0 14px rgba(217,169,63,.5)}.who{font-size:.9rem;color:var(--ink-dim)}.link{background:none;border:none;box-shadow:none;width:auto;margin:8px 0 0;padding:0;color:var(--gold);cursor:pointer;font:inherit;text-decoration:underline;display:inline-block}.link:hover{color:var(--gold-light);background:none;transform:none}.xpbar{display:flex;align-items:center;gap:10px;flex:1;max-width:460px;min-width:240px}.xp-title{font-family:var(--title);font-weight:600;font-size:.78rem;color:var(--gold-light);white-space:nowrap}.xp-track{flex:1;height:12px;background:#120e28;border:1px solid var(--card-edge);border-radius:7px;overflow:hidden}.xp-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,#9c7220,var(--gold) 60%,var(--gold-light));box-shadow:0 0 8px #d9a93fb3;transition:width 1s ease}.xp-num{font-size:.78rem;color:var(--ink-dim);white-space:nowrap}.card{background:linear-gradient(180deg,var(--card),#1a1430);border:1px solid var(--card-edge);border-radius:14px;box-shadow:0 8px 40px #00000080,inset 0 1px #f0cd7a1f;padding:26px 30px;margin:16px auto;max-width:880px}.center{text-align:center}.muted{color:var(--ink-dim)}.err{color:var(--blood);font-weight:600}h1{font-family:var(--title);font-weight:800;letter-spacing:2px;color:var(--gold-light);margin:0 0 10px}h2{font-family:var(--title);font-weight:700;font-size:1.35rem;color:var(--gold-light);margin:0 0 14px}h3{margin:0 0 8px}button{display:block;width:100%;font-family:var(--title);font-weight:700;font-size:.95rem;letter-spacing:.5px;color:#241a05;background:linear-gradient(180deg,var(--gold-light),var(--gold) 55%,#b8862a);border:1px solid #8a6418;border-radius:10px;padding:13px 20px;margin-top:16px;cursor:pointer;box-shadow:0 3px 14px #d9a93f59;transition:transform .06s,box-shadow .2s,filter .2s}button:hover{filter:brightness(1.1);box-shadow:0 4px 22px #d9a93f8c}button:active{transform:translateY(1px)}button:disabled{filter:grayscale(.7) brightness(.8);cursor:not-allowed;box-shadow:none}.login{max-width:420px;margin:9vh auto;text-align:center}.login input{display:block;width:100%;margin:12px 0;padding:13px 15px;font-size:1rem;color:var(--ink);background:#120e28;border:1px solid #3a2f6b;border-radius:10px;outline:none}.login input:focus{border-color:var(--gold);box-shadow:0 0 10px #d9a93f4d}.login input::placeholder{color:#6f6593}.intro-screen{max-width:640px;margin-top:8vh;animation:fadeUp .5s ease}.intro-icon{font-size:4rem;margin:10px 0 18px;filter:drop-shadow(0 0 18px rgba(217,169,63,.5))}.intro-text{font-size:1.12rem;line-height:1.8}.intro-dots{margin:18px 0 4px}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#3a2f6b;margin:0 5px;transition:background .3s}.dot.on{background:var(--gold);box-shadow:0 0 8px #d9a93fcc}@keyframes fadeUp{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.world{max-width:940px;margin:0 auto;padding-bottom:170px}.tower{background:linear-gradient(180deg,#170f33,#241a4a);border-color:var(--arcane-dim);box-shadow:0 0 50px #8b5cf640,0 8px 40px #00000080}.tower-icon{font-size:3.4rem;filter:drop-shadow(0 0 22px rgba(139,92,246,.8));animation:towerGlow 4s ease-in-out infinite alternate}@keyframes towerGlow{0%{filter:drop-shadow(0 0 12px rgba(139,92,246,.5))}to{filter:drop-shadow(0 0 26px rgba(139,92,246,.95))}}.region{position:relative;overflow:hidden;background:linear-gradient(180deg,var(--card),#1a1430);border:1px solid var(--card-edge);border-radius:14px;padding:20px 26px;margin:18px 0}.region-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.region-head h3{font-family:var(--title);font-weight:700;font-size:1.1rem;color:var(--gold-light);margin:0}.region-chip{font-size:.78rem;font-weight:700;padding:5px 12px;border-radius:999px;background:#120e28;border:1px solid var(--card-edge);white-space:nowrap}.boss-line{margin:4px 0 0;font-size:.9rem}.region.current{border-color:var(--gold);box-shadow:0 0 34px #d9a93f2e,0 8px 40px #00000080}.region.done{border-color:var(--emerald)}.region.locked:after,.region.future:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(60% 50% at 20% 30%,rgba(160,160,200,.14),transparent),radial-gradient(50% 45% at 70% 60%,rgba(160,160,200,.12),transparent),radial-gradient(55% 50% at 45% 85%,rgba(160,160,200,.1),transparent);animation:fogDrift 16s ease-in-out infinite alternate}@keyframes fogDrift{0%{transform:translate(-4%)}to{transform:translate(4%)}}.region.future{opacity:.7}.region.locked .region-map{opacity:.55}.region-map{width:100%;display:block;margin-top:6px}.trail{fill:none;stroke:var(--gold);stroke-width:4;stroke-linecap:round;stroke-dasharray:2 14;opacity:.65}.node{cursor:pointer}.node.locked{cursor:default}.node-circle{fill:#2a2150;stroke:#4a3d85;stroke-width:3}.node.done .node-circle{fill:#1d3a28;stroke:var(--emerald)}.node.current .node-circle{fill:#3a2c10;stroke:var(--gold);stroke-width:4;transform-box:fill-box;transform-origin:center;animation:nodePulse 1.6s ease-in-out infinite}@keyframes nodePulse{0%,to{transform:scale(1)}50%{transform:scale(1.14)}}.node.sel .node-circle{stroke:var(--gold-light);stroke-width:5}.node-icon{font-size:22px}.node-stars{font-size:14px}.node-label{font-size:16px;fill:var(--ink);font-weight:600}.node.locked .node-label{fill:#6f6593}.node:hover .node-label{fill:var(--gold-light)}.action-panel{position:fixed;left:50%;bottom:14px;transform:translate(-50%);width:min(680px,94vw);margin:0;padding:18px 24px;z-index:10;border-color:var(--gold);box-shadow:0 -4px 50px #0009,0 0 30px #d9a93f26;animation:fadeUp .25s ease}.action-panel .panel-title{margin:0 0 6px;font-size:1.02rem}.action-panel button{margin-top:10px;padding:11px 18px}.lesson-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:20px;align-items:start}.lesson-layout .card{max-width:none;margin:16px 0}.toc{position:sticky;top:14px;padding:18px;max-height:calc(100vh - 40px);overflow:auto}.toc h3{font-family:var(--title);font-size:.95rem;color:var(--gold-light);margin-bottom:12px}.toc a{display:block;padding:7px 10px;margin:2px 0;border-radius:8px;color:var(--ink-dim);text-decoration:none;font-size:.88rem}.toc a:hover{background:#2a2150;color:var(--gold-light)}.toc button{font-size:.85rem;padding:11px 12px}.lesson{line-height:1.7}.lesson .intro{font-size:1.06rem;background:#181232;border:1px solid #3a2f6b;border-left:4px solid var(--arcane);border-radius:10px;padding:14px 18px}.blk{margin:20px 0;padding:16px 20px;border-radius:12px;border:1px solid transparent}.blk h3{font-family:var(--title);font-weight:700;font-size:.98rem;margin-bottom:10px}.blk p{margin:6px 0}.blk ul,.blk ol{margin:8px 0 4px;padding-left:22px}.blk li{margin:7px 0}.blk.concept{padding:4px 2px}.blk.concept h3{color:var(--gold-light);font-size:1.1rem;border-bottom:1px solid rgba(217,169,63,.35);padding-bottom:7px}.blk.objectif{background:#11291d;border-color:#1f5c39;border-left:4px solid var(--emerald)}.blk.objectif h3{color:#5fd695}.blk.definition{background:#241a40;border-color:#4a3d85;border-left:4px solid var(--arcane)}.blk.definition h3{color:#b79df5}.blk.methode{background:#16243d;border-color:#2c4a76;border-left:4px solid #4a7fd4}.blk.methode h3{color:#82aef0}.blk.methode ol li::marker{font-weight:800;color:#82aef0}.blk.exemple{background:#2a2110;border-color:#5c4a1f;border-left:4px solid var(--gold)}.blk.exemple h3{color:var(--gold-light)}.ex-lines{border-left:3px solid #5c4a1f;padding-left:14px}.ex-line{margin:8px 0}.blk.attention{background:#321318;border-color:#6e2a2a;border-left:4px solid var(--blood)}.blk.attention h3{color:#f08a8a}.blk.retenir{background:#11291d;border-color:#1f5c39;border-left:4px solid var(--emerald)}.blk.retenir h3{color:#5fd695}.blk.graphe{background:#181232;border-color:#3a2f6b;border-left:4px solid #8a84b8}.blk.graphe h3{color:#b3aede}.formula{text-align:center;font-size:1.15rem;font-weight:700;font-family:Consolas,monospace;color:var(--gold-light);background:#0d0a1f;border:1px solid var(--card-edge);border-radius:10px;padding:13px;margin:12px auto;letter-spacing:.4px;box-shadow:inset 0 0 18px #d9a93f14}.chat-hint{margin-top:24px}.graph{width:100%;max-width:560px;display:block;margin:10px auto;background:#fdfcf7;border:1px solid var(--card-edge);border-radius:10px}.graph .tick{font-size:11px;fill:#9a93c9}.graph .pt-label{font-size:13px;font-weight:700;fill:#1e1b3a}.legend{display:flex;gap:18px;justify-content:center;font-size:.9rem;flex-wrap:wrap;margin-top:8px}.legend .swatch{display:inline-block;width:14px;height:5px;border-radius:2px;vertical-align:middle;margin-right:4px}.exam-head{display:flex;justify-content:space-between;align-items:center;gap:10px}.warn{color:var(--blood);font-size:.85rem;font-weight:700}.question{padding:16px 0;border-top:1px solid #3a2f6b}.q-enonce{font-size:1.02rem}.pts{color:var(--ink-dim);font-size:.85rem}.choices{display:flex;flex-direction:column;gap:8px;margin-top:10px}.choice{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;border-radius:10px;background:#181232;border:1px solid #3a2f6b;color:var(--ink)}.choice:hover{border-color:var(--gold)}.choice.sel{background:#2a2110;border-color:var(--gold);box-shadow:0 0 10px #d9a93f40}.exam textarea{width:100%;margin-top:10px;padding:12px;font:inherit;color:var(--ink);background:#120e28;border:1px solid #3a2f6b;border-radius:10px;outline:none}.exam textarea:focus{border-color:var(--gold);box-shadow:0 0 10px #d9a93f40}.result .big-score{font-family:var(--title);font-weight:800;font-size:3.4rem;margin:14px 0}.result.pass .big-score{color:#5fd695;text-shadow:0 0 24px rgba(46,163,95,.6)}.result.fail .big-score{color:var(--blood);text-shadow:0 0 24px rgba(226,85,85,.5)}.detail-title{font-family:var(--title);color:var(--gold-light);margin-top:22px}.prof-feedback{background:#241a40;border:1px solid #4a3d85;border-left:4px solid var(--arcane);border-radius:12px;padding:14px 18px;margin:18px 0}.prof-feedback h3{font-family:var(--title);font-size:.95rem;color:#b79df5}.question.corr.good{border-left:4px solid var(--emerald);padding-left:14px}.question.corr.bad{border-left:4px solid var(--blood);padding-left:14px}.q-feedback{background:#181232;border:1px solid #3a2f6b;border-radius:8px;padding:8px 12px}.dialogue-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0805168c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-end;justify-content:center;padding:20px;cursor:pointer;animation:fadeUp .25s ease}.dialogue-box{display:flex;gap:18px;align-items:flex-start;width:min(720px,96vw);min-height:150px;background:linear-gradient(180deg,var(--card),#160f2e);border:1px solid var(--gold);border-radius:16px;box-shadow:0 8px 60px #000000b3,0 0 26px #d9a93f33;padding:18px 22px;margin-bottom:4vh}.dialogue-name{font-family:var(--title);font-weight:700;font-size:.92rem;color:var(--gold-light);margin-bottom:6px}.dialogue-text{margin:0;font-size:1.05rem;line-height:1.7;min-height:3.4em}.dialogue-body{flex:1}.dialogue-next{display:block;text-align:right;color:var(--gold);font-size:.85rem;opacity:0}.dialogue-next.on{opacity:1;animation:bounceDown 1s ease-in-out infinite}@keyframes bounceDown{0%,to{transform:translateY(0)}50%{transform:translateY(4px)}}.portrait{flex-shrink:0;border-radius:50%;overflow:hidden}.portrait svg{width:100%;height:100%;display:block}.portrait-monster{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:2.6rem;background:#1a0f24;border:3px solid var(--blood);border-radius:50%;filter:drop-shadow(0 0 10px rgba(226,85,85,.5))}.monster-banner{display:flex;align-items:center;gap:16px;background:#1a0f24;border:1px solid #6e2a2a;border-radius:14px;padding:14px 18px;margin:14px 0}.monster-banner.boss{border-color:var(--blood);box-shadow:0 0 26px #e2555540}.monster-icon{font-size:2.8rem;filter:drop-shadow(0 0 8px rgba(226,85,85,.6))}.monster-banner.boss .monster-icon{font-size:3.4rem}.monster-info{flex:1}.monster-name{font-family:var(--title);font-weight:700;color:#f0a8a8;margin-bottom:7px}.boss-tag{background:var(--blood);color:#fff;font-size:.7rem;letter-spacing:2px;padding:3px 8px;border-radius:6px;margin-right:6px;vertical-align:middle}.hp-track{height:14px;background:#120a18;border:1px solid #6e2a2a;border-radius:8px;overflow:hidden}.hp-fill{height:100%;border-radius:7px;background:linear-gradient(90deg,#8c1f1f,var(--blood) 60%,#f08a8a);box-shadow:0 0 10px #e25555b3;transition:width 1.6s cubic-bezier(.2,.8,.3,1)}.hp-num{font-size:.8rem;color:var(--ink-dim);margin-top:4px}.monster-banner.shaking{animation:shake .5s ease-in-out 3}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-7px) rotate(-.6deg)}40%{transform:translate(6px) rotate(.5deg)}60%{transform:translate(-5px)}80%{transform:translate(4px)}}.monster-banner.dead .monster-icon{animation:dissolve 1.4s ease forwards}@keyframes dissolve{to{opacity:.15;transform:scale(.7) rotate(12deg);filter:grayscale(1) blur(2px)}}.monster-quote{text-align:center;font-style:italic;color:var(--ink-dim);margin:4px 0 0}.combat-result{animation:fadeUp .5s ease}.pixel-comment{display:flex;gap:10px;align-items:center;background:#181232;border:1px solid #3a2f6b;border-radius:12px;padding:10px 14px;margin:14px 0}.pixel-mini{font-size:1.6rem}.pixel-comment p{margin:0}.lyra-message{display:flex;gap:14px;align-items:center;background:linear-gradient(135deg,#241a40,#1c2440);border:1px solid var(--gold-light);border-radius:14px;padding:14px 18px;margin:16px 0;box-shadow:0 0 26px #f0cd7a2e;animation:fadeUp .6s ease}.lyra-message p{margin:4px 0 0;font-style:italic}.confetti{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:40;overflow:hidden}.confetti span{position:absolute;top:-16px;width:10px;height:14px;border-radius:2px;animation:confFall linear forwards}@keyframes confFall{0%{transform:translateY(0) rotate(0);opacity:1}to{transform:translateY(105vh) rotate(560deg);opacity:.6}}.node.boss .node-circle{stroke-width:4}.node.boss.current .node-circle{fill:#3a1020;stroke:var(--blood)}.node-icon.big{font-size:34px}.qnode{cursor:pointer}.qnode.locked{cursor:default;opacity:.45}.qnode-shape{fill:#1c2440;stroke:#2c4a76;stroke-width:3}.qnode.available .qnode-shape{fill:#12303a;stroke:#3fc4d9;transform-box:fill-box;transform-origin:center;animation:nodePulse 2s ease-in-out infinite}.qnode.submitted .qnode-shape{fill:#2a2110;stroke:var(--gold)}.qnode.done .qnode-shape{fill:#1d3a28;stroke:var(--emerald);animation:none}.qnode-icon{font-size:19px}.qnode-check{font-size:13px}.qnode-label{font-size:13px;fill:var(--ink-dim)}.qnode:hover .qnode-label{fill:#7adeed}.gold-badge{font-weight:700;color:var(--gold-light);white-space:nowrap;background:#120e28;border:1px solid var(--card-edge);border-radius:999px;padding:6px 14px}.quest-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.quest-reward{font-size:.82rem;font-weight:700;color:var(--gold-light);background:#120e28;border:1px solid var(--card-edge);border-radius:999px;padding:6px 12px}.portrait.giver .portrait-monster{border-color:var(--gold);filter:drop-shadow(0 0 10px rgba(217,169,63,.5));background:#241c10}.grimoire-section{font-family:var(--title);color:var(--gold-light);margin:26px 0 12px;border-bottom:1px solid rgba(217,169,63,.3);padding-bottom:7px}.seals-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.seal{display:flex;flex-direction:column;align-items:center;text-align:center;gap:3px;background:#181232;border:1px solid #3a2f6b;border-radius:12px;padding:12px 8px;opacity:.65}.seal.owned{opacity:1;border-color:var(--gold);box-shadow:0 0 18px #d9a93f33}.seal-icon{font-size:1.9rem}.seal.owned .seal-icon{filter:drop-shadow(0 0 8px rgba(217,169,63,.8))}.seal-name{font-size:.82rem;font-weight:700}.seal-boss{font-size:.74rem}.artifact{display:flex;gap:14px;align-items:center;background:#181232;border:1px solid #3a2f6b;border-radius:12px;padding:10px 16px;margin:8px 0}.artifact.rare{border-color:var(--arcane);box-shadow:0 0 14px #8b5cf633}.artifact-icon{font-size:1.8rem}.artifact b{color:var(--gold-light)}.artifact-formula{margin:2px 0 0;font-size:.88rem}@media(max-width:700px){.seals-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:920px){.lesson-layout{grid-template-columns:1fr}.toc{position:static;max-height:none}.card{padding:18px}.xpbar{order:3;max-width:none;width:100%}.node-label{font-size:19px}}
