:root{--accent:#4f7cff;--accent-dark:#2f4cd8;--bg:#fff;--page-bg:#f4f6fb;--canvas-bg:#eef1f7;--node-fill:#fff;--text:#1c1c1e;--muted:#6b7280;--locked:#c7cbd1;--good:#34c759;--bad:#ff3b30;--warn:#ff9500;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{background:var(--page-bg);color:var(--text);margin:0}#root{min-height:100vh}.app-shell{flex-direction:column;min-height:100vh;display:flex}.navbar{z-index:40;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffffd9;border-bottom:1px solid #0000000f;position:sticky;top:0}.navbar-inner{align-items:center;gap:32px;max-width:1180px;margin:0 auto;padding:14px 32px;display:flex}.navbar-brand{cursor:pointer;color:var(--text);background:0 0;border:none;align-items:center;gap:8px;padding:0;font-size:18px;font-weight:800;display:flex}.navbar-links{flex:1;gap:4px;display:flex}.navbar-links button{color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:8px 14px;font-size:14px;font-weight:600;transition:background .15s}.navbar-links button:hover{color:var(--accent);background:#4f7cff1a}.footer{background:#fff;border-top:1px solid #0000000f;margin-top:auto}.footer-inner{max-width:1180px;color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin:0 auto;padding:18px 32px;font-size:13px;display:flex}.footer-inner a{color:var(--muted);text-decoration:none}.footer-inner a:hover{color:var(--accent)}.app-main{flex:1;width:100%;max-width:1180px;margin:0 auto;padding:40px 32px 64px}.muted{color:var(--muted)}.small{font-size:12px}.center{text-align:center}.back-link{color:var(--accent);cursor:pointer;background:0 0;border:none;margin-bottom:16px;padding:0;font-size:14px;font-weight:700}.home-hero{text-align:center;flex-direction:column;align-items:center;gap:10px;padding:20px 0 44px;display:flex}.home-hero h1{margin:8px 0 0;font-size:44px;font-weight:800}.tagline{color:var(--muted);margin:0;font-size:17px}.mode-cards{grid-template-columns:repeat(3,1fr);gap:20px;display:grid}.mode-card{text-align:left;cursor:pointer;background:#fff;border:none;border-radius:18px;flex-direction:column;gap:6px;padding:28px 24px;transition:transform .15s,box-shadow .15s;display:flex;box-shadow:0 1px 3px #0000000f}.mode-card:hover{transform:translateY(-3px);box-shadow:0 8px 20px #0000001a}.mode-card-icon{color:var(--accent);margin-bottom:6px;font-size:28px}.mode-card h3{margin:0;font-size:19px}.mode-card p{color:var(--muted);flex:1;margin:0;font-size:14px;line-height:1.4}.mode-card-cta{color:var(--accent);margin-top:8px;font-size:14px;font-weight:700}.mode-card.ghost{box-shadow:none;background:#fafbfd;border:1px dashed #4f7cff59}@media (width<=860px){.mode-cards{grid-template-columns:1fr}.navbar-links{display:none}}.difficulty-picker h1{margin:4px 0 6px;font-size:30px}.difficulty-grid{grid-template-columns:repeat(3,1fr);gap:20px;margin-top:24px;display:grid}.difficulty-card{text-align:left;cursor:pointer;background:#fff;border:none;border-radius:16px;padding:24px;transition:transform .15s,box-shadow .15s;box-shadow:0 1px 3px #0000000f}.difficulty-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px #0000001a}.difficulty-card h3{margin:0 0 4px;font-size:20px}.difficulty-card p{margin:0 0 12px}.difficulty-count{color:var(--accent);background:#4f7cff1a;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:700}@media (width<=860px){.difficulty-grid{grid-template-columns:1fr}}.roadmap-view h1{margin:4px 0 6px;font-size:28px}.level-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;margin-top:24px;display:grid}.level-box{text-align:left;cursor:pointer;background:#fff;border:none;border-radius:14px;flex-direction:column;gap:10px;min-height:92px;padding:16px;transition:transform .15s,box-shadow .15s;display:flex;box-shadow:0 1px 3px #0000000f}.level-box:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 8px 18px #0000001a}.level-box-top{color:var(--accent);justify-content:space-between;align-items:center;display:flex}.level-number{color:var(--accent);font-size:20px;font-weight:800}.level-title{color:var(--text);font-size:13px;font-weight:600;line-height:1.3}.level-box.done{background:#34c75914}.level-box.done .level-number{color:var(--good)}.level-box.locked{cursor:default;opacity:.75;background:#f1f2f5}.level-box.locked .level-number,.level-box.locked .level-box-top{color:var(--locked)}.level-box.locked .level-title{color:var(--muted)}.game-grid{grid-template-columns:minmax(0,1fr) 340px;align-items:start;gap:28px;margin-top:8px;display:grid}.game-main{flex-direction:column;gap:18px;min-width:0;display:flex}.game-sidebar{flex-direction:column;gap:16px;display:flex;position:sticky;top:90px}@media (width<=980px){.game-grid{grid-template-columns:1fr}.game-sidebar{position:static}}.card{background:#fff;border-radius:16px;padding:18px 20px;box-shadow:0 1px 3px #0000000f}.header-card .eyebrow{color:var(--muted);letter-spacing:.5px;margin:0 0 6px;font-size:12px;font-weight:700}.header-card h2{margin:0 0 8px;font-size:24px}.header-card p{margin:0}.canvas-editor{flex-direction:column;gap:10px;display:flex}.mode-picker{background:#eceef2;border-radius:10px;gap:2px;padding:3px;display:flex}.mode-picker button{cursor:pointer;color:var(--text);background:0 0;border:none;border-radius:8px;flex:1;padding:9px 6px;font-size:13px;font-weight:600;transition:background .15s}.mode-picker button:hover{background:#0000000a}.mode-picker button.active{background:#fff;box-shadow:0 1px 3px #00000026}.canvas-frame{aspect-ratio:1200/700;border-radius:18px;width:100%;position:relative;overflow:hidden;box-shadow:0 1px 3px #00000014}.canvas-svg{touch-action:none;cursor:crosshair;width:100%;height:100%;display:block}.canvas-controls{flex-direction:column;gap:6px;display:flex;position:absolute;bottom:14px;right:14px}.canvas-controls button{cursor:pointer;width:38px;height:38px;color:var(--text);background:#fffffff2;border:none;border-radius:10px;justify-content:center;align-items:center;font-size:18px;font-weight:700;display:flex;box-shadow:0 1px 4px #0003}.canvas-controls button:hover{background:#fff}.hint{color:var(--muted);margin:0;font-size:13px}.tool-row{gap:10px;display:flex}.pill{color:var(--accent);cursor:pointer;background:#4f7cff1f;border:none;border-radius:999px;padding:8px 14px;font-size:13px;font-weight:700;transition:background .15s}.pill:hover{background:#4f7cff38}.control-card{flex-direction:column;gap:12px;display:flex}.test-row{background:#f2f4f8;border-radius:10px;align-items:center;gap:8px;padding:10px 12px;display:flex}.test-row input{background:0 0;border:none;outline:none;flex:1;font-size:14px}.test-row button{color:var(--accent);cursor:pointer;background:0 0;border:none;font-weight:700}.test-row .ok{color:var(--good);font-weight:700}.test-row .bad{color:var(--bad);font-weight:700}.control-card hr{border:none;border-top:1px solid #eee;margin:0}.trace-live{flex-direction:column;gap:6px;display:flex}.action-row{gap:10px;display:flex}.action-row button{cursor:pointer;border:none;border-radius:10px;flex:1;padding:11px;font-size:14px;font-weight:700;transition:filter .15s}.action-row button:hover{filter:brightness(.95)}.action-row .danger{color:var(--bad);background:#ff3b301a}.action-row .primary{background:var(--accent);color:#fff}.result-banner{border-radius:16px;align-items:flex-start;gap:12px;padding:16px;display:flex}.result-banner .badge{border-radius:50%;justify-content:center;align-items:center;width:40px;min-width:40px;height:40px;font-size:18px;display:flex}.result-banner p{color:var(--muted);margin:4px 0 0;font-size:14px}.result-banner strong{font-size:15px}.result-banner.good{background:#34c75914;border:1px solid #34c75940}.result-banner.good .badge{color:var(--good);background:#34c75926}.result-banner.good strong{color:var(--good)}.result-banner.bad{background:#ff3b3014;border:1px solid #ff3b3040}.result-banner.bad .badge{color:var(--bad);background:#ff3b3026}.result-banner.bad strong{color:var(--bad)}.result-banner.warn{background:#ff950014;border:1px solid #ff950040}.result-banner.warn .badge{color:var(--warn);background:#ff950026}.stars{color:#fc0;letter-spacing:2px;font-size:20px}.picker-overlay{z-index:50;background:#00000059;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.picker-card{background:#fff;border-radius:20px;flex-direction:column;gap:8px;width:100%;max-width:380px;padding:24px;display:flex}.picker-title{text-align:center;margin:0 0 8px;font-weight:700}.picker-card button{cursor:pointer;background:#f2f4f8;border:none;border-radius:10px;padding:12px;font-size:15px;font-weight:600}.picker-card button.cancel{color:var(--bad);background:0 0}.picker-card button.remove{color:var(--bad);background:#ff3b301a}.tutorial-overlay{justify-content:center;padding:20px 0 0;display:flex}.tutorial-card{background:#fff;border-radius:20px;flex-direction:column;gap:18px;width:100%;max-width:520px;padding:28px;display:flex;box-shadow:0 1px 3px #0000000f}.tutorial-body{min-height:380px}.tutorial-page{flex-direction:column;gap:10px;display:flex}.tutorial-page h2{margin:0 0 4px;font-size:24px}.tutorial-page p{margin:0;line-height:1.5}.tutorial-page .small{color:var(--muted);font-size:13px}.tutorial-icon{text-align:center;margin:8px 0;font-size:48px}.dfa-nfa-block{background:#fafbfd;border-radius:14px;flex-direction:column;gap:6px;margin-bottom:4px;padding:14px;display:flex}.tutorial-dots{justify-content:center;gap:6px;display:flex}.tutorial-dots .dot{background:#6b728040;border-radius:4px;width:7px;height:7px}.tutorial-dots .dot.active{background:var(--accent);width:18px}.tutorial-nav{justify-content:space-between;align-items:center;display:flex}.primary-btn{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:10px;padding:10px 22px;font-size:14px;font-weight:700}.primary-btn:hover{background:var(--accent-dark)}.primary-btn:disabled{opacity:.4;cursor:default}.pill.active{background:var(--accent);color:#fff}.trace-options{gap:8px;display:flex}.trace-string{gap:10px;font-family:ui-monospace,monospace;font-size:20px;font-weight:700;display:flex}.trace-string span{color:var(--muted)}.trace-string span.consumed{color:var(--accent)}.trace-string span.current{color:var(--text);text-decoration:underline}.trace-result{font-size:16px;font-weight:700}.trace-result.ok{color:var(--good)}.trace-result.bad{color:var(--bad)}
