:root{--bg:#0c0e12;--bg-subtle:#10131a;--panel:#151920;--panel-2:#1b2028;--panel-3:#21272f;--line:#2a3140;--line-2:#343d4f;--text:#e8ecf0;--text-2:#c4cad2;--muted:#7c8694;--accent:#6c5ce7;--accent-2:#a29bfe;--accent-bg:#6c5ce714;--accent-bg-2:#6c5ce726;--green:#00cec9;--green-dim:#0a3d3b;--red:#ff6b6b;--red-dim:#3a1a1a;--amber:#fdcb6e;--amber-dim:#3a3218;--font-ui:"Inter", "IBM Plex Sans", system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", "IBM Plex Mono", "Fira Code", ui-monospace, monospace;--radius:8px;--radius-lg:12px;--shadow:0 1px 3px #0000004d, 0 4px 16px #00000026;--transition:.18s cubic-bezier(.4,0,.2,1)}*,:before,:after{box-sizing:border-box}html,body,#root{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;padding:0;font-size:14px;line-height:1.5}a{color:var(--accent-2);transition:color var(--transition);text-decoration:none}a:hover{color:var(--accent)}::selection{background:var(--accent-bg-2);color:var(--text)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--muted)}button,input,textarea,select{font:inherit;color:inherit}button{background:var(--accent);color:#fff;border-radius:var(--radius);cursor:pointer;transition:all var(--transition);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:.4rem;padding:.5rem 1rem;font-size:.8125rem;font-weight:500;display:inline-flex}button:hover:not(:disabled){box-shadow:0 0 0 3px var(--accent-bg-2);background:#5b4bd4}button:active:not(:disabled){transform:scale(.97)}button.secondary{background:var(--panel-2);border:1px solid var(--line);color:var(--text-2)}button.secondary:hover:not(:disabled){background:var(--panel-3);border-color:var(--line-2)}button.danger{background:var(--red-dim);border:1px solid var(--red);color:var(--red)}button.danger:hover:not(:disabled){background:#4a1f1f}button.ghost{color:var(--muted);background:0 0;border:none;padding:.35rem .5rem}button.ghost:hover:not(:disabled){color:var(--text);background:var(--panel-2)}button:disabled{opacity:.45;cursor:not-allowed}input,textarea,select{background:var(--bg-subtle);border:1px solid var(--line);border-radius:var(--radius);width:100%;transition:border-color var(--transition), box-shadow var(--transition);padding:.55rem .75rem}input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);outline:none}input::placeholder,textarea::placeholder{color:var(--muted)}textarea.sql{font-family:var(--font-mono);resize:vertical;tab-size:2;background:var(--bg);border-color:var(--line);min-height:140px;font-size:13px;line-height:1.6}textarea.sql:focus{border-color:var(--accent)}.layout{grid-template-columns:240px 1fr;min-height:100vh;display:grid}.sidebar{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;gap:2px;height:100vh;padding:1.25rem 0;display:flex;position:sticky;top:0;overflow-y:auto}.brand{align-items:center;gap:.6rem;margin-bottom:1.5rem;padding:0 1.25rem;display:flex}.brand-icon{background:var(--accent);border-radius:var(--radius);color:#fff;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;font-weight:700;display:flex}.brand-text{letter-spacing:.01em;font-size:.9375rem;font-weight:600}.brand-text span{color:var(--muted);letter-spacing:.02em;margin-top:1px;font-size:11px;font-weight:400;display:block}.nav-section{margin-top:.5rem;padding:0 .75rem}.nav-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:.4rem .5rem .25rem;font-size:10px;font-weight:600}.sidebar a,.sidebar button.linkish{border-radius:var(--radius);color:var(--text-2);text-align:left;width:calc(100% - 1.5rem);transition:all var(--transition);cursor:pointer;background:0 0;border:none;align-items:center;gap:.5rem;margin:0 .75rem;padding:.45rem .75rem;font-size:.8125rem;font-weight:500;display:flex}.sidebar a:hover,.sidebar button.linkish:hover{background:var(--accent-bg);color:var(--text);text-decoration:none}.sidebar a.active{background:var(--accent-bg-2);color:var(--accent-2)}.sidebar .spacer{flex:1}.sidebar .db-info{background:var(--bg-subtle);border-radius:var(--radius);color:var(--muted);font-size:11px;font-family:var(--font-mono);margin:0 1.25rem;padding:.5rem .75rem}.sidebar .db-info code{color:var(--green);font-weight:500}.main{min-width:0;max-width:1200px;padding:1.75rem 2rem 3rem}.row{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.grid-2{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.stack{flex-direction:column;gap:.75rem;display:flex}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.gap-sm{gap:.4rem}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);transition:border-color var(--transition), box-shadow var(--transition);padding:1.25rem}.card:hover{border-color:var(--line-2)}.card.interactive:hover{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);cursor:pointer}.card.interactive{color:inherit;text-decoration:none;display:block}h1,h2,h3{letter-spacing:-.01em;margin:0 0 .5rem;font-weight:600}h1{font-size:1.5rem}h2{font-size:1.125rem}h3{color:var(--text-2);font-size:.9375rem}p{margin:0}.muted,p.muted{color:var(--muted);font-size:.8125rem}.table-wrap{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg-subtle);overflow:auto}table{border-collapse:collapse;width:100%;font-family:var(--font-mono);font-size:12.5px}th,td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:.5rem .65rem}th{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;background:var(--panel);font-size:11px;font-weight:600;position:sticky;top:0}tbody tr{transition:background var(--transition)}tbody tr:hover{background:var(--accent-bg)}tbody tr:last-child td{border-bottom:none}.badge{border:1px solid var(--line);color:var(--muted);letter-spacing:.02em;border-radius:999px;align-items:center;padding:.15rem .55rem;font-size:11px;font-weight:500;display:inline-flex}.badge.ok{color:var(--green);border-color:var(--green);background:var(--green-dim)}.badge.fail{color:var(--red);border-color:var(--red);background:var(--red-dim)}.badge.admin{color:var(--amber);border-color:var(--amber);background:var(--amber-dim)}.badge.info{color:var(--accent-2);border-color:var(--accent);background:var(--accent-bg)}.error{color:var(--red);background:var(--red-dim);border-radius:var(--radius);border:1px solid #ff6b6b33;padding:.5rem .75rem;font-size:.8125rem}.ok{color:var(--green);background:var(--green-dim);border-radius:var(--radius);border:1px solid #00cec933;padding:.5rem .75rem;font-size:.8125rem}.message-pass{color:var(--green)}.message-fail{color:var(--red)}.login-wrap{background:radial-gradient(ellipse at 50% 0%, #6c5ce71a 0%, transparent 60%), var(--bg);place-items:center;min-height:100vh;padding:1rem;display:grid}.login-card{text-align:center;width:min(400px,100%)}.login-card h1{background:linear-gradient(135deg, var(--accent-2), var(--green));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:1.75rem}.login-card .muted{margin-bottom:.5rem}.login-card button[type=submit]{width:100%;margin-top:.25rem;padding:.65rem}.login-card input{text-align:left}.pg-grid{grid-template-columns:1fr 380px;gap:1rem;min-height:0;display:grid}.pg-grid.no-ai{grid-template-columns:1fr}.pg-editor-section{flex-direction:column;gap:.75rem;display:flex}.pg-toolbar{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.pg-toolbar select{width:auto;min-width:180px;font-size:.8125rem}.ai-panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);flex-direction:column;max-height:calc(100vh - 6rem);display:flex;overflow:hidden}.ai-header{border-bottom:1px solid var(--line);background:var(--panel-2);justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.ai-header-title{align-items:center;gap:.4rem;font-size:.8125rem;font-weight:600;display:flex}.ai-header-title .dot{background:var(--green);border-radius:50%;width:7px;height:7px;animation:2s infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.ai-messages{flex-direction:column;flex:1;gap:.5rem;padding:.75rem;display:flex;overflow-y:auto}.ai-msg{border-radius:var(--radius);white-space:pre-wrap;word-break:break-word;max-width:95%;padding:.55rem .75rem;font-size:.8125rem;line-height:1.55}.ai-msg.user{background:var(--accent-bg-2);color:var(--text);border-bottom-right-radius:3px;align-self:flex-end}.ai-msg.assistant{background:var(--panel-2);color:var(--text-2);border-bottom-left-radius:3px;align-self:flex-start}.ai-msg.assistant code{font-family:var(--font-mono);background:var(--bg);border-radius:4px;padding:.15rem .35rem;font-size:12px}.ai-msg.assistant pre{background:var(--bg);border-radius:var(--radius);font-family:var(--font-mono);margin:.35rem 0;padding:.65rem .75rem;font-size:12px;line-height:1.45;overflow-x:auto}.ai-msg.system{color:var(--muted);text-align:center;align-self:center;font-size:11.5px}.ai-input-row{border-top:1px solid var(--line);background:var(--panel-2);gap:.4rem;padding:.65rem .75rem;display:flex}.ai-input-row input{background:var(--bg);flex:1;font-size:.8125rem}.ai-input-row button{flex-shrink:0;padding:.5rem .75rem}.lesson-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem;display:grid}.lesson-card{position:relative;overflow:hidden}.lesson-card:before{content:"";background:linear-gradient(135deg, var(--accent-bg) 0%, transparent 50%);opacity:0;transition:opacity var(--transition);position:absolute;inset:0}.lesson-card:hover:before{opacity:1}.lesson-card .progress-bar{background:var(--line);border-radius:2px;height:3px;margin-top:.75rem;overflow:hidden}.lesson-card .progress-fill{background:linear-gradient(90deg, var(--accent), var(--green));border-radius:2px;height:100%;transition:width .6s cubic-bezier(.4,0,.2,1)}.exercise-list{flex-direction:column;gap:.35rem;display:flex}.exercise-btn{border-radius:var(--radius);background:var(--panel-2);color:var(--text-2);cursor:pointer;transition:all var(--transition);text-align:left;border:1px solid #0000;justify-content:space-between;align-items:center;width:100%;padding:.55rem .75rem;font-size:.8125rem;font-weight:500;display:flex}.exercise-btn:hover{background:var(--panel-3);border-color:var(--line)}.exercise-btn.active{border-color:var(--accent);background:var(--accent-bg);color:var(--text)}.exercise-btn .check{color:var(--green);font-weight:700}.spinner{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.page-loading{color:var(--muted);justify-content:center;align-items:center;gap:.6rem;padding:3rem;display:flex}.admin-section h2{margin-bottom:.25rem}.terminal{border-radius:var(--radius-lg);cursor:text;font-family:var(--font-mono);background:#0a0b0d;border:1px solid #1e2530;flex-direction:column;min-height:420px;display:flex;overflow:hidden;box-shadow:0 4px 32px #00000080,inset 0 1px #ffffff08}.terminal-bar{-webkit-user-select:none;user-select:none;background:#141820;border-bottom:1px solid #1e2530;flex-shrink:0;align-items:center;gap:6px;padding:.5rem .85rem;display:flex}.terminal-dot{border-radius:50%;flex-shrink:0;width:12px;height:12px}.terminal-dot.red{background:#ff5f57}.terminal-dot.yellow{background:#febc2e}.terminal-dot.green{background:#28c840}.terminal-title{text-align:center;color:#4a5568;letter-spacing:.02em;flex:1;font-size:12px}.terminal-clear-btn{color:#4a5568;font-family:var(--font-mono);cursor:pointer;transition:all var(--transition);background:0 0;border:1px solid #2a3140;border-radius:4px;padding:.15rem .55rem;font-size:11px}.terminal-clear-btn:hover{color:#9ca3af;background:0 0;border-color:#4a5568}.terminal-body{scroll-behavior:smooth;flex:1;padding:.85rem 1rem 1.25rem;overflow-y:auto}.t-dim{white-space:pre-wrap;color:#374151;margin-bottom:.6rem;font-size:12.5px;line-height:1.5}.t-block{margin-bottom:.5rem}.t-input-echo{align-items:baseline;gap:0;line-height:1.5;display:flex}.t-prompt{color:#4ade80;white-space:pre;-webkit-user-select:none;user-select:none;flex-shrink:0;font-size:13px}.t-sql{color:#e2e8f0;white-space:pre-wrap;word-break:break-all;font-size:13px}.t-output{white-space:pre;color:#cbd5e1;margin:.1rem 0 .4rem;padding-bottom:2px;font-size:12.5px;line-height:1.55;overflow-x:auto}.t-error{color:#f87171!important}.t-active-line{align-items:flex-start;gap:0;display:flex;position:relative}.t-prompt-col{flex-direction:column;flex-shrink:0;display:flex}.t-input{color:#e2e8f0;caret-color:#4ade80;flex:1;overflow:hidden;box-shadow:none!important;font-family:var(--font-mono)!important;resize:none!important;background:0 0!important;border:none!important;outline:none!important;width:100%!important;margin:0!important;padding:0!important;font-size:13px!important;line-height:1.5!important}.t-input:focus{box-shadow:none!important;border:none!important;outline:none!important}.t-input:disabled{opacity:.6}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.t-cursor-blink{color:#4ade80;pointer-events:none;font-size:14px;line-height:1.5;animation:.8s step-start infinite blink}.terminal-status-bar{white-space:nowrap;text-overflow:ellipsis;background:#1a0e0e;border-top:1px solid #3b1e1e;flex-shrink:0;padding:.3rem 1rem;font-size:11.5px;overflow:hidden}@media (width<=1100px){.pg-grid{grid-template-columns:1fr}.ai-panel{max-height:400px}}@media (width<=800px){.layout{grid-template-columns:1fr}.sidebar{flex-flow:wrap;gap:.25rem;height:auto;padding:.75rem;position:static}.sidebar .nav-section{display:contents}.sidebar .nav-label{display:none}.sidebar a,.sidebar button.linkish{width:auto;margin:0}.brand{margin-bottom:0}.grid-2{grid-template-columns:1fr}.main{padding:1rem}}
