:root,:root[data-theme=dark]{--ink: #ededee;--bright: #ffffff;--muted: rgba(237,237,238,.62);--faint: rgba(237,237,238,.35);--border: rgba(255,255,255,.13);--card: rgba(255,255,255,.04);--mono: "IBM Plex Mono", "Courier New", monospace;--paper: #000;--ascii-base: #2c2c31;--ascii-crest: #4a4a51;--hover: rgba(255,255,255,.05);--sel: rgba(255,255,255,.06);--edge: rgba(255,255,255,.3);--edge-soft: rgba(255,255,255,.35);--id: rgba(237,237,238,.45);--dim: rgba(237,237,238,.28);--past: rgba(237,237,238,.34);--next: rgba(237,237,238,.2);--pane: rgba(0,0,0,.86);--status: rgba(255,255,255,.08);--shine-1: rgba(255,255,255,.13);--shine-2: rgba(255,255,255,.06);--shine-glow: rgba(255,255,255,.06);--shine-text: rgba(255,255,255,.5);--err: rgba(255,255,255,.16);--btn: rgba(255,255,255,.15);--toast: #101216;--flou: blur(7px)}:root[data-theme=light]{--ink: #14151a;--bright: #000000;--muted: rgba(20,21,26,.64);--faint: rgba(20,21,26,.38);--border: rgba(0,0,0,.14);--card: rgba(0,0,0,.035);--paper: #fff;--ascii-base: #dedee3;--ascii-crest: #c2c2ca;--hover: rgba(0,0,0,.045);--sel: rgba(0,0,0,.055);--edge: rgba(0,0,0,.28);--edge-soft: rgba(0,0,0,.3);--id: rgba(20,21,26,.5);--dim: rgba(20,21,26,.32);--past: rgba(20,21,26,.42);--next: rgba(20,21,26,.26);--pane: rgba(255,255,255,.88);--status: rgba(0,0,0,.07);--shine-1: rgba(0,0,0,.1);--shine-2: rgba(0,0,0,.045);--shine-glow: rgba(0,0,0,.05);--shine-text: rgba(0,0,0,.28);--err: rgba(0,0,0,.13);--btn: rgba(0,0,0,.09);--toast: #f3f3f5}*{box-sizing:border-box}.card,.vim,.panneau,.msg,.combo-liste,.atelier-vue,.exercise pre.code,.dactylo .result{backdrop-filter:var(--flou);-webkit-backdrop-filter:var(--flou)}html{background:var(--paper)}body{margin:0;color:var(--ink);background:none;font:14px/1.5 Inter,system-ui,-apple-system,Segoe UI,sans-serif}.ascii-canvas{position:fixed;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;z-index:-1;display:block}a{color:var(--ink)}.page{max-width:1520px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}header{display:flex;align-items:center;gap:22px;padding:18px 32px;border-bottom:1px solid var(--border)}.theme-toggle,.icon-btn{display:grid;place-items:center;width:32px;height:32px;flex:0 0 auto;border:1px solid var(--border);border-radius:2px;background:none;color:var(--muted);cursor:pointer}.theme-toggle:hover,.icon-btn:hover{color:var(--bright);border-color:var(--muted)}.theme-toggle .icon-sun,.theme-toggle .icon-moon{display:none}:root[data-theme-mode=light] .theme-toggle .icon-auto{display:none}:root[data-theme-mode=light] .theme-toggle .icon-sun{display:block}:root[data-theme-mode=dark] .theme-toggle .icon-auto{display:none}:root[data-theme-mode=dark] .theme-toggle .icon-moon{display:block}.tabs{display:flex;gap:22px}.tabs .tab{text-decoration:none;font-size:13px;color:var(--muted);padding-bottom:3px;border-bottom:1px solid transparent}.tabs .tab:hover{color:var(--ink)}.tabs .tab.on{color:var(--bright);border-bottom-color:var(--ink)}.muted{color:var(--muted);font-size:13px}.faint{color:var(--faint)}.mono{font-family:var(--mono);font-size:12px}main{flex:1;display:flex;align-items:stretch}main>*{padding:28px 26px}aside{width:300px;flex-shrink:0;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:30px}.hero{font-size:54px;font-weight:300;line-height:1;letter-spacing:-.035em;color:var(--bright);font-family:Inter Tight,Inter,sans-serif}.track{height:4px;border-radius:2px;background:var(--border);overflow:hidden}.fill{height:100%;border-radius:2px;background:var(--ink)}.row{display:flex;justify-content:space-between;align-items:baseline}.stack{display:flex;flex-direction:column;gap:6px}.section{display:flex;flex-direction:column;gap:14px}.path{width:420px;flex-shrink:0;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:18px}.phase{display:flex;flex-direction:column;gap:4px}.phase h2{margin:0;font-size:13px;font-weight:500;color:var(--ink)}.phase.locked h2{color:var(--faint)}.node{display:flex;align-items:center;gap:10px;padding:5px 10px;border-radius:2px}a.node{text-decoration:none;color:inherit}a.node:hover{background:var(--hover)}.node .id{font-family:var(--mono);font-size:12px;color:var(--id)}.node svg{color:var(--muted);flex-shrink:0}.node.open svg{color:var(--bright)}.node.locked svg{color:var(--faint)}.node.done .title{color:var(--muted)}.node.open .title{color:var(--ink)}.node.locked .id,.node.locked .title{color:var(--faint)}.node.current{background:var(--sel);border:1px solid var(--edge)}.node.current .title{color:var(--bright);font-weight:500}.node.sel{outline:1px solid var(--edge-soft)}.tag{font-size:11px;color:var(--ink);border:1px solid var(--edge);border-radius:4px;padding:1px 7px;margin-left:auto}.detail{flex:1;display:flex;flex-direction:column;gap:16px;min-width:0}.card{background:var(--card);border:1px solid var(--border);border-radius:2px;padding:14px 16px;display:flex;flex-direction:column;gap:8px}.card h3{margin:0;font-size:12px;font-weight:400;color:var(--muted)}h1{margin:0;font-size:30px;font-weight:300;letter-spacing:-.03em;color:var(--bright);font-family:Inter Tight,Inter,sans-serif}.competence{font-size:15px;color:var(--bright)}.metric{font-family:var(--mono);font-size:13.5px;font-weight:500;color:var(--bright)}.checkitem{display:flex;align-items:center;gap:10px;font-size:13.5px}.box{width:15px;height:15px;flex-shrink:0;border-radius:2px;border:1px solid var(--edge)}.box.on{background:var(--ink);border-color:var(--ink)}.checkitem.on span{color:var(--muted)}.exercise{white-space:pre-line;font-size:13px;color:var(--ink)}.exercise pre.code{white-space:pre;overflow-x:auto;margin:10px 0;padding:10px 12px;font-family:var(--mono);font-size:12.5px;color:var(--bright);background:var(--card);border:1px solid var(--border);border-radius:2px}.btn{font:inherit;font-size:13px;padding:9px 16px;border-radius:2px;border:1px solid var(--border);background:var(--btn);color:var(--ink);cursor:pointer}.btn.primary{background:var(--ink);color:var(--paper);border-color:var(--ink);font-weight:500}.btn:hover{filter:brightness(1.2)}.field{font:inherit;font-size:12.5px;font-family:var(--mono);padding:9px 12px;border-radius:2px;border:1px solid var(--border);background:transparent;color:var(--ink)}.field::placeholder{color:var(--faint)}.frow{display:flex;gap:10px;align-items:center}.frow .field{flex:1}.msg{display:none;position:fixed;right:24px;bottom:24px;max-width:460px;z-index:10;white-space:pre-line;font-family:var(--mono);font-size:12px;padding:12px 14px;border-radius:2px;border:1px solid var(--border);background:var(--toast);color:var(--ink);box-shadow:0 8px 30px #00000073;cursor:pointer}.msg.show{display:block}.msg.err{border-color:var(--edge-soft);color:var(--bright)}.checkitem.click{cursor:pointer}.checkitem.click:hover span{color:var(--bright)}.dactylo{flex:1;display:flex;flex-direction:column;gap:18px;min-width:0}.dactylo .stats{display:flex;align-items:baseline;gap:40px}.dactylo .stat{display:flex;flex-direction:column;gap:2px}.dactylo .stat .val{font-size:40px;font-weight:300;line-height:1;letter-spacing:-.03em;color:var(--bright);font-family:Inter Tight,Inter,sans-serif}.dactylo .stat .lab{font-size:12px;color:var(--muted)}.vim{border:1px solid var(--border);border-radius:2px;background:var(--pane);display:flex;flex-direction:column;overflow:hidden}.vim .buf{display:flex;padding:10px 0;font-family:var(--mono);font-size:13.5px;line-height:1.7}.vim .gutter{flex-shrink:0;width:62px;text-align:right;padding-right:14px;border-right:1px solid var(--border);color:var(--dim);-webkit-user-select:none;user-select:none}.vim .code{flex:1;padding-left:16px;white-space:pre;overflow-x:auto}.vim .gutter div,.vim .code div{height:23px}.vim .gutter div.cur{color:var(--bright)}.vim .code div.past{color:var(--past)}.vim .code div.next{color:var(--next)}.vim .code div.cur{color:var(--past);border-radius:2px;background:linear-gradient(90deg,var(--shine-1),var(--shine-2) 45%,transparent 94%);box-shadow:0 0 26px var(--shine-glow)}.vim .code div.cur .ok{text-shadow:0 0 11px var(--shine-text)}.vim .gutter div.cur{background:var(--shine-1);border-radius:2px}.vim .code .ok{color:var(--bright)}.vim .code .ko{color:var(--ink);background:var(--err);text-decoration:underline}.vim .caret{display:inline-block;width:0;border-left:2px solid var(--ink);margin-left:-1px;height:17px;vertical-align:-3px;animation:blink 1.1s steps(1) infinite}@keyframes blink{50%{opacity:0}}.vim .status{display:flex;align-items:center;gap:18px;padding:4px 14px;background:var(--status);border-top:1px solid var(--border);font-family:var(--mono);font-size:12px;color:var(--ink)}.vim .status .mode{font-weight:500;color:var(--bright)}.vim .status .right{margin-left:auto;display:flex;gap:18px;color:var(--muted)}.dactylo .hint{font-size:12px;color:var(--muted)}.vim.over .buf{opacity:.45}.vim.over .caret{display:none}.dactylo .result{display:none;align-items:baseline;gap:14px;padding:12px 16px;border:1px solid var(--border);border-radius:2px;background:var(--card)}.dactylo .result.on{display:flex}.dactylo .result .big{font-size:26px;font-weight:300;letter-spacing:-.03em;color:var(--bright);font-family:Inter Tight,Inter,sans-serif}.dactylo .result .rest{font-size:13px;color:var(--muted)}.btn.github{display:inline-flex;align-items:center;justify-content:center;gap:10px;text-decoration:none;padding:11px 16px}.voile{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:24px;background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.panneau{width:min(560px,100%);max-height:85vh;overflow-y:auto;display:flex;flex-direction:column;gap:16px;padding:22px 24px;border-radius:3px;border:1px solid var(--border);background:var(--pane)}textarea.field{font-family:var(--mono);line-height:1.55;resize:vertical}select.field{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:var(--card);flex:1}select.field option{background:var(--toast);color:var(--ink)}.combo{position:relative;display:flex;flex-direction:column;gap:5px}.combo .field{width:100%}.combo-liste{position:absolute;top:100%;left:0;right:0;z-index:5;max-height:300px;overflow-y:auto;margin-top:3px;border:1px solid var(--border);border-radius:2px;background:var(--toast);box-shadow:0 8px 30px #00000059}.combo-item{display:flex;align-items:baseline;gap:12px;width:100%;padding:7px 10px;font:inherit;text-align:left;border:0;background:none;color:var(--ink);cursor:pointer}.combo-item:hover{background:var(--hover)}.combo-item.on{background:var(--sel)}.atelier-vue{max-height:340px;overflow:auto;margin:0;padding:10px 12px;white-space:pre-wrap;word-break:break-word;font-family:var(--mono);font-size:12px;line-height:1.55;color:var(--ink);background:var(--card);border:1px solid var(--border);border-radius:2px}.atelier-edit{min-height:320px;font-size:12px}.atelier-err{color:var(--bright)}.fiche{max-height:460px;overflow-y:auto;white-space:pre-wrap;font-size:13px;line-height:1.6}.fiche code{font-family:var(--mono);font-size:12.5px}.recap .recap-grille{display:grid;grid-template-columns:150px 1fr;gap:7px 16px;align-items:baseline;font-size:13px}.recap .recap-grille>.muted{font-size:12px}.trace{display:flex;flex-direction:column;gap:7px;padding:10px 0 2px;border-top:1px solid var(--border)}.trace details summary{font-size:12px;cursor:pointer;list-style:revert}.trace details>pre{margin-top:7px}
