@font-face{font-family:Fredoka;src:url(/fonts/fredoka-latin.woff2)format("woff2");font-weight:400 700;font-style:normal;font-display:swap}:root{--bg:#1d1410;--bg-deep:#140d0a;--panel:#2a1d16;--panel-2:#34241b;--border:#4a3327;--text:#fdf0e0;--muted:#c2a38d;--accent:#f4843f;--accent-deep:#b85a20;--accent2:#ffd166;--success:#7bc96f;--error:#ef5350;--request:#6ec6ff;--response:#e98fb8;--font-ui:"Fredoka", ui-rounded, "Hiragino Maru Gothic ProN", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--radius:14px;--shadow-btn:0 5px 0 #00000059}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);overscroll-behavior:none;font-size:16px;font-weight:500;line-height:1.6}code{font-family:var(--font-mono);color:var(--accent2);font-size:.92em}.app{max-width:1100px;margin:0 auto;padding:1.5rem 1rem}.app.minimal{max-width:860px;height:100dvh;padding:.6rem .8rem calc(.6rem + env(safe-area-inset-bottom));flex-direction:column;display:flex;overflow:hidden}@keyframes screenFade{0%{opacity:0}to{opacity:1}}@keyframes screenRise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes screenPop{0%{opacity:0;transform:scale(.82)}70%{opacity:1;transform:scale(1.03)}to{opacity:1;transform:scale(1)}}@keyframes screenZoom{0%{opacity:0;transform:scale(1.18)}to{opacity:1;transform:scale(1)}}.screen-fade{animation:.35s ease-out both screenFade}.screen-rise{animation:.4s cubic-bezier(.2,.9,.3,1) both screenRise}.screen-pop{animation:.45s cubic-bezier(.2,.9,.3,1.2) both screenPop}.screen-zoom{animation:.25s ease-out both screenZoom}@keyframes lineIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.logline,.tl-exchange{animation:.3s ease-out both lineIn}button{font-family:var(--font-ui);touch-action:manipulation;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}button.primary{background:var(--accent);border-radius:var(--radius);color:#2a1408;cursor:pointer;box-shadow:0 5px 0 var(--accent-deep);border:none;padding:.6rem 1.2rem;font-size:1rem;font-weight:700;transition:transform 60ms,box-shadow 60ms,filter .15s}button.primary:hover{filter:brightness(1.08)}button.primary:active{box-shadow:0 1px 0 var(--accent-deep);transform:translateY(4px)}button.primary:disabled{opacity:.4;cursor:default}button.big{padding:.9rem 2.4rem;font-size:1.15rem}.menu-screen,.intro-screen,.title-screen{text-align:center;padding:2rem;padding-top:calc(2rem + env(safe-area-inset-top));padding-bottom:calc(2rem + env(safe-area-inset-bottom));cursor:pointer;z-index:10;background:radial-gradient(ellipse at center, #2a1d16 0%, var(--bg) 75%);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.menu-screen:before,.title-screen:before{content:"";opacity:.07;pointer-events:none;background:url(/assets/bg-circuit.webp) 50%/cover;position:absolute;inset:0}.menu-screen>*,.title-screen>*{position:relative}.menu-screen h1{letter-spacing:.3em;color:var(--text);text-shadow:0 4px #0000004d;margin:1rem 0 .3rem;font-size:2.9rem;font-weight:700}.menu-sub{color:var(--muted);max-width:560px;margin-bottom:2rem}.menu-panda{width:220px;max-width:55vw;image-rendering:pixelated;border-radius:18px;animation:3.2s ease-in-out infinite float;box-shadow:0 8px #0000004d}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.promo-grade{color:var(--accent2);margin-bottom:.4rem;font-size:1.7rem;font-weight:700}.intro-screen{background:radial-gradient(ellipse at center, #241a13 0%, var(--bg) 80%)}.intro-art{width:200px;max-width:50vw;image-rendering:pixelated;border-radius:16px;margin-bottom:1.5rem;box-shadow:0 6px #0000004d}.intro-text{max-width:620px;margin-bottom:2rem;font-size:1.1rem;line-height:1.8;animation:.35s ease-out both screenRise}.intro-hint{color:var(--muted);font-size:.9rem;animation:1.6s step-start infinite blink}@keyframes blink{50%{opacity:.35}}.difficulty-grid{grid-template-columns:repeat(3,minmax(200px,260px));justify-content:center;gap:1rem;width:100%;max-width:780px;display:grid}@media (width<=640px){.difficulty-grid{grid-template-columns:1fr}}.diff-btn{background:var(--panel-2);border:2px solid var(--border);color:var(--text);border-radius:var(--radius);cursor:pointer;box-shadow:var(--shadow-btn);flex-direction:column;align-items:center;gap:.3rem;padding:1.2rem 1rem;transition:transform 60ms,box-shadow 60ms,border-color .15s;display:flex}.diff-btn:hover{border-color:var(--accent);transform:translateY(-2px)}.diff-btn:active{transform:translateY(3px);box-shadow:0 2px #00000059}.diff-face{font-size:1.9rem}.diff-name{font-size:1.15rem;font-weight:600}.diff-time{color:var(--accent2);font-variant-numeric:tabular-nums;font-size:.95rem}.title-content{text-align:center;max-width:640px;padding:1rem}.loop-glyph{color:var(--accent);text-shadow:0 0 24px #f4843f73;margin-bottom:.5rem;font-size:4rem;animation:6s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.title-content h1{letter-spacing:.35em;text-shadow:0 4px #0000004d;margin-bottom:1rem;font-size:3rem;font-weight:700}.tagline{color:var(--accent2);margin-bottom:1.2rem;font-weight:600}.mission{color:var(--muted);margin-bottom:2rem}.loop-stats{color:var(--muted);margin-bottom:1.5rem;font-size:.9rem}.start-btn{border:2px solid var(--accent);color:var(--accent);border-radius:var(--radius);cursor:pointer;background:0 0;padding:.9rem 2.2rem;font-size:1.1rem;font-weight:700;transition:background .15s;animation:2s ease-in-out infinite pulse}.start-btn:hover{background:#f4843f24}@keyframes pulse{0%,to{box-shadow:0 0 #f4843f66}50%{box-shadow:0 0 0 14px #f4843f00}}.hud{border:2px solid var(--border);border-radius:var(--radius);background:var(--panel);flex-shrink:0;justify-content:space-between;align-items:center;gap:.7rem;margin-bottom:.5rem;padding:.55rem .8rem;display:flex}.hud-left{align-items:center;gap:.6rem;min-width:0;display:flex}.hud-panda{object-fit:cover;width:36px;height:36px;image-rendering:pixelated;border-radius:10px}.hud-panda.worried{animation:.5s ease-in-out infinite wobble}@keyframes wobble{0%,to{transform:rotate(0)}25%{transform:rotate(-4deg)}75%{transform:rotate(4deg)}}.hud-titles{flex-direction:column;line-height:1.3;display:flex}.hud .level{color:var(--accent);font-size:1rem;font-weight:700}.hud .loop{color:var(--muted);font-size:.85rem}.patience{align-items:center;gap:.5rem;margin-left:auto;display:flex}.patience-face{font-size:1.3rem;transition:transform .2s}.patience.urgent .patience-face{animation:.4s ease-in-out infinite wobble}.patience-bar{background:var(--bg-deep);border:1px solid var(--border);border-radius:6px;width:110px;height:12px;overflow:hidden}.patience-fill{background:linear-gradient(90deg, var(--accent2), var(--accent));border-radius:6px;height:100%;transition:width .1s linear}.patience.urgent .patience-fill{background:var(--error)}.patience-time{font-family:var(--font-mono);color:var(--success);font-variant-numeric:tabular-nums;min-width:3ch;font-size:1.15rem}.patience.urgent .patience-time{color:var(--error);animation:1s step-start infinite blink}.briefing{border:2px solid var(--border);border-radius:var(--radius);background:var(--panel);flex-shrink:0;margin:0 0 .4rem;padding:.55rem .9rem}.briefing .human{white-space:nowrap;text-overflow:ellipsis;align-items:baseline;gap:.35rem;font-size:.95rem;display:flex;overflow:hidden}.briefing .human code{text-overflow:ellipsis;min-width:9ch;overflow:hidden}.briefing .human strong{white-space:nowrap;flex-shrink:0}.briefing .goal{color:var(--accent2);margin-top:.15rem;font-size:.88rem}@media (width<=480px){.briefing .goal{font-size:0}.briefing .goal:before{content:"Bonne séquence, sinon erreur réseau.";font-size:.88rem}}.stepper{flex-shrink:0;justify-content:center;align-items:center;gap:.5rem;margin:.3rem 0 .2rem;display:flex}.st-dot{border:2px solid var(--border);background:var(--panel-2);width:31px;height:31px;color:var(--muted);border-radius:50%;justify-content:center;align-items:center;font-size:.8rem;font-weight:700;transition:background .2s,border-color .2s;display:inline-flex}.st-dot.done{background:var(--success);border-color:var(--success);color:#0d2818}.st-dot.current{background:var(--accent);border-color:var(--accent);color:#2a1408;animation:1.4s ease-in-out infinite currentPulse}@keyframes currentPulse{0%,to{box-shadow:0 0 0 3px #f4843f40}50%{box-shadow:0 0 0 7px #f4843f0f}}.live-log{min-height:2.5em;font-family:var(--font-mono);text-align:center;color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;flex-shrink:0;margin-bottom:.2rem;font-size:.85rem;line-height:1.25;animation:.3s ease-out both lineIn;display:-webkit-box;overflow:hidden}.action-grid{flex:auto;grid-template-columns:repeat(2,1fr);align-content:center;gap:.75rem;width:100%;max-width:640px;min-height:0;margin:0 auto;display:grid}.action-btn{background:var(--panel-2);border:2px solid var(--border);color:var(--text);border-radius:var(--radius);cursor:pointer;text-align:left;min-height:62px;box-shadow:var(--shadow-btn);align-items:center;gap:.7rem;padding:.7rem .8rem;font-size:1.02rem;font-weight:600;transition:transform 60ms,box-shadow 60ms,border-color .12s;display:flex}.action-btn:hover:not(:disabled){border-color:var(--accent);transform:translateY(-2px)}.action-btn:active:not(:disabled){border-color:var(--accent2);transform:translateY(4px);box-shadow:0 1px #00000059}.action-btn:disabled{opacity:.35;border-color:var(--success);cursor:default}.action-btn.good{animation:.38s ease-out btnPop}@keyframes btnPop{0%{transform:scale(1)}35%{border-color:var(--success);transform:scale(1.06);box-shadow:0 0 18px #7bc96f8c}to{transform:scale(1)}}.shake{animation:.38s ease-in-out appShake}@keyframes appShake{0%,to{transform:translate(0)}15%{transform:translate(-9px)}35%{transform:translate(8px)}55%{transform:translate(-6px)}75%{transform:translate(4px)}}.error-flash{pointer-events:none;z-index:30;background:radial-gradient(#ef535047,#ef53506b);animation:.42s ease-out both flashOut;position:fixed;inset:0}@keyframes flashOut{0%{opacity:1}to{opacity:0}}.urgency-vignette{pointer-events:none;z-index:5;animation:1.1s ease-in-out infinite urgencyPulse;position:fixed;inset:0;box-shadow:inset 0 0 100px 28px #ef535080}@keyframes urgencyPulse{0%,to{opacity:.25}50%{opacity:.75}}.f5-flash{pointer-events:none;background:#fdf0e0;animation:.55s ease-out both f5Flash;position:absolute;inset:0}@keyframes f5Flash{0%{opacity:.95}to{opacity:0}}.mute-btn{background:var(--panel-2);border:2px solid var(--border);cursor:pointer;border-radius:10px;flex-shrink:0;padding:.25rem .5rem;font-size:1rem;box-shadow:0 3px #00000059}.mute-btn:active{transform:translateY(2px);box-shadow:0 1px #00000059}.action-icon{width:36px;height:36px;image-rendering:pixelated;border-radius:8px;flex-shrink:0}.timeline{flex-direction:column;gap:.5rem;width:100%;max-width:640px;margin:0 auto;display:none}@media (width>=900px){.stepper,.live-log{display:none}.timeline{flex:auto;min-height:0;display:flex;overflow-y:auto}.action-grid{flex:none;margin:1rem auto}}@media (width<=480px){.hud .loop{display:none}.patience-bar{width:80px}}.tl-step{border:2px solid var(--border);border-radius:var(--radius);background:var(--panel);opacity:.45;padding:.6rem .9rem;transition:opacity .2s,border-color .2s}.tl-step.current{opacity:1;border-color:var(--accent);box-shadow:0 0 0 3px #f4843f2e}.tl-step.done{opacity:.85;border-color:var(--success)}.tl-step.error{opacity:1;border-color:var(--error)}.tl-head{align-items:center;gap:.7rem;display:flex}.tl-index{background:var(--panel-2);border:2px solid var(--border);width:1.6rem;height:1.6rem;color:var(--muted);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.8rem;font-weight:700;display:inline-flex}.tl-step.current .tl-index{background:var(--accent);border-color:var(--accent);color:#2a1408}.tl-step.done .tl-index{background:var(--success);border-color:var(--success);color:#0d2818}.tl-label{flex:1;font-size:.95rem}.tl-exchanges{border-left:2px solid var(--border);flex-direction:column;gap:.15rem;margin-top:.45rem;margin-left:.8rem;padding-left:2.3rem;display:flex}.tl-exchange{font-size:.82rem;font-family:var(--font-mono)}.error-screen{z-index:20;background:radial-gradient(#3a1414 0%,#200808 80%);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.error-content{text-align:center;max-width:560px;padding:1rem}.error-glyph{font-size:3.5rem;animation:.5s ease-in-out shake}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-10px)}75%{transform:translate(10px)}}.error-content h1{color:var(--error);letter-spacing:.1em;margin:.5rem 0 1rem;font-size:2.2rem;font-weight:700}.error-msg{margin-bottom:.5rem}.error-f5{color:var(--muted);margin-bottom:1.5rem;font-style:italic}.won-screen{background:radial-gradient(ellipse at center, #22301c 0%, var(--bg-deep) 80%);z-index:15;padding:2rem 1rem;position:fixed;inset:0;overflow-y:auto}.won-content{text-align:center;max-width:700px;margin:0 auto}.won-glyph{font-size:3rem;animation:.5s cubic-bezier(.2,.9,.3,1.4) both screenPop}.won-content h1{color:var(--success);letter-spacing:.08em;margin:.5rem 0 .4rem;font-weight:700}.won-sub{color:var(--muted);margin-bottom:1.4rem;font-size:.92rem}.browser-mock{border:2px solid var(--border);border-radius:var(--radius);max-width:480px;box-shadow:var(--shadow-btn);background:#fdf6ec;margin:0 auto 1.2rem;animation:.5s cubic-bezier(.2,.9,.3,1.3) .15s both screenPop;overflow:hidden}.browser-chrome{background:var(--panel-2);align-items:center;gap:.4rem;padding:.45rem .7rem;display:flex}.browser-chrome .dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.browser-chrome .dot.red{background:var(--error)}.browser-chrome .dot.yellow{background:var(--accent2)}.browser-chrome .dot.green{background:var(--success)}.browser-url{font-family:var(--font-mono);color:var(--muted);background:var(--bg-deep);text-align:left;text-overflow:ellipsis;white-space:nowrap;border-radius:6px;flex:1;margin-left:.5rem;padding:.2rem .6rem;font-size:.75rem;overflow:hidden}.browser-page{color:#3a2a1c;padding:1.3rem 1rem;font-size:1.1rem;font-weight:600}.log-icon{width:1.3em;display:inline-block}.panel{background:var(--panel);border:2px solid var(--border);border-radius:var(--radius);padding:1rem}.panel h2{color:var(--accent2);margin-bottom:.8rem;font-size:.95rem}.run-log{text-align:left;font-family:var(--font-mono);margin-bottom:1rem;font-size:.85rem}.pedagogy{border-left:4px solid var(--success);text-align:left;margin-bottom:1.5rem}.end{color:var(--muted);font-style:italic}.confetti{pointer-events:none;z-index:16;position:fixed;inset:0;overflow:hidden}.confetti span{border-radius:2px;animation:linear both confettiFall;position:absolute;top:-12px}@keyframes confettiFall{0%{opacity:1;transform:translateY(0)rotate(0)}to{opacity:.6;transform:translateY(105vh)rotate(540deg)}}
