.page-with-promo{max-width:1440px;margin:0 auto;padding:24px;display:block}.page-with-promo--wide{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:32px;display:grid}.page-with-promo__main{min-width:0}.page-with-promo__main>.page,.page-with-promo__main>.dashboard,.page-with-promo__main>.lesson,.page-with-promo__main>.playground,.page-with-promo__main>.achievements-page{width:100%;max-width:none;margin:0;padding-left:0;padding-right:0}.promo-side{flex-direction:column;gap:16px;padding-top:8px;display:flex}.promo-side__card{border:1px solid var(--border,#e3e8ee);background:var(--surface,#fff);border-radius:14px;flex-direction:column;gap:8px;padding:16px;transition:box-shadow .15s,border-color .15s;display:flex}.promo-side__card:hover{border-color:var(--border-strong,#cbd5e1);box-shadow:0 4px 16px #0f172a14}.promo-side__label{background:var(--surface-2,#f1f5f9);color:var(--text-muted,#64748b);letter-spacing:.06em;text-transform:uppercase;border-radius:6px;align-self:flex-start;padding:2px 8px;font-size:10px;font-weight:600}.promo-side__image{border-radius:8px;width:100%;height:auto;display:block}.promo-side__title{color:var(--text,#0f172a);margin:0;font-size:15px;font-weight:700;line-height:1.35}.promo-side__text{color:var(--text-soft,#475569);margin:0;font-size:13px;line-height:1.5}.promo-side__cta{color:var(--accent,#2ecc8f);margin-top:4px;font-size:13px;font-weight:600;text-decoration:none}.promo-side__cta:hover{text-underline-offset:3px;text-decoration:underline}.theme-dark .promo-side__card{background:#151d29;border-color:#24303f}.theme-dark .promo-side__card:hover{border-color:#34455c;box-shadow:0 4px 16px #00000073}.theme-dark .promo-side__label{color:#8b9bb0;background:#1d2836}.theme-dark .promo-side__title{color:#e8eef5}.theme-dark .promo-side__text{color:#9fb0c3}.legal{max-width:760px;margin:0 auto;line-height:1.7}.legal__head{margin-bottom:var(--sp-6);padding-bottom:var(--sp-4);border-bottom:1px solid var(--border)}.legal__title{font-size:var(--fs-xl);margin-bottom:var(--sp-2)}.legal__date{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.legal__section{margin-bottom:var(--sp-6)}.legal__section h2{font-size:var(--fs-lg);margin-bottom:var(--sp-3)}.legal__section p{margin:0 0 var(--sp-3);color:var(--text)}.legal__section a{color:var(--accent);text-decoration:underline}.legal__list{margin:0 0 var(--sp-3);padding-left:var(--sp-5);color:var(--text)}.legal__list li{margin-bottom:var(--sp-2)}.legal__foot{gap:var(--sp-4);margin-top:var(--sp-8);padding-top:var(--sp-4);border-top:1px solid var(--border);flex-wrap:wrap;display:flex}.legal__foot a{color:var(--accent);font-size:var(--fs-sm);text-decoration:none}.legal__foot a:hover{text-decoration:underline}:root{--font-sans:"Segoe UI", "Inter", "PT Sans", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;--font-display:"Segoe UI Semibold", "Inter", "PT Sans", system-ui, sans-serif;--font-mono:"Cascadia Code", "JetBrains Mono", "Fira Code", Consolas, "Courier New", monospace;--fs-xs:.8125rem;--fs-sm:.9375rem;--fs-base:1.0625rem;--fs-md:1.1875rem;--fs-lg:1.375rem;--fs-xl:1.75rem;--fs-2xl:2.125rem;--fs-3xl:2.625rem;--lh-tight:1.2;--lh-base:1.6;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--sp-12:48px;--sp-16:64px;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:24px;--radius-pill:999px;--python-900:#064a3c;--python-800:#076650;--python-700:#0a7a5d;--python-600:#0b8a68;--python-500:#0a7a5d;--python-400:#2fb98f;--python-100:#d7f3ea;--python-50:#ecfaf5;--sql-500:#4a4ad4;--sql-600:#4a4ad4;--sql-700:#4040c0;--sql-300:#9d9df5;--sql-100:#e2e2fb;--sql-50:#f1f1fe;--amber-500:#f2a516;--amber-100:#fdf0d5;--rose-500:#e5484d;--rose-100:#fde8e8;--sky-500:#0ea5e9;--sky-100:#e0f2fe;--violet-500:#8b5cf6;--violet-100:#efe8fe;--bg:#f7f8fb;--bg-elevated:#fff;--bg-subtle:#eef1f6;--bg-inset:#f2f4f8;--bg-code:#0f1729;--text:#18202f;--text-muted:#5b6675;--text-subtle:#626d7c;--text-inverse:#fff;--text-on-code:#e6ebf5;--border:#dfe4ec;--border-strong:#78828f;--border-field:#78828f;--primary:var(--python-700);--primary-hover:#08614a;--primary-soft:var(--python-50);--primary-text:#0b6b52;--link:var(--primary-text);--accent:var(--sql-600);--accent-text:var(--sql-600);--accent-soft:var(--sql-50);--success:#17803d;--success-soft:#e8f8ee;--warning:#8a4b06;--warning-soft:#fff4e0;--danger:#b3261e;--danger-soft:#fdeaea;--info:#1a5f9e;--info-soft:#e8f2fc;--code-keyword:#7dd3fc;--code-string:#86efac;--code-number:#fbbf24;--code-function:#c4b5fd;--code-comment:#94a3b8;--shadow-xs:0 1px 2px #1018280f;--shadow-sm:0 1px 3px #10182814, 0 1px 2px #1018280a;--shadow-md:0 4px 10px #10182814, 0 2px 4px #1018280a;--shadow-lg:0 12px 28px #1018281f, 0 4px 8px #1018280d;--shadow-focus:0 0 0 3px #0f9d7759;--ease:cubic-bezier(.2, .8, .2, 1);--dur-fast:.12s;--dur:.2s;--dur-slow:.32s;--gold:#8a5a00;--gold-soft:#fdf3d8;--on-primary:#fff;--on-python-bright:#06140f;--on-success:#fff;--on-accent:#fff;--gradient-brand:linear-gradient(120deg, var(--python-500), var(--sql-500));--gradient-python:linear-gradient(120deg, var(--python-500), var(--sky-500));--gradient-sql:linear-gradient(120deg, var(--sql-500), var(--violet-500));--gradient-xp:linear-gradient(120deg, var(--amber-500), var(--gold));--header-height:68px;--content-max:1320px;--content-narrow:520px;--content-reading:760px;--lesson-left-width:44%;--lesson-gap:var(--sp-4);--topbar-height:60px;--bottom-nav-height:64px;--touch-target:48px;--z-header:50;--z-sticky:60;--z-modal:100;--z-toast:200}[data-theme=dark]{--bg:#0d1117;--bg-elevated:#161b24;--bg-subtle:#1c2230;--bg-inset:#11161e;--bg-code:#0a0e15;--text:#eef1f7;--text-muted:#a3adbb;--text-subtle:#98a2b0;--text-inverse:#10151d;--text-on-code:#e6ebf5;--border:#262e3b;--border-strong:#68737f;--border-field:#68737f;--python-100:#123f34;--python-50:#0f2c26;--python-500:#5ee8b5;--python-700:#5ee8b5;--sql-100:#24244a;--sql-50:#1a1a33;--sql-300:#9d9df5;--sql-500:#9d9df5;--sql-600:#9d9df5;--amber-100:#3d2f10;--rose-100:#3a1c1d;--sky-100:#0d2b3d;--violet-100:#2a1f45;--primary-soft:#10302a;--primary-text:#4fd1a8;--primary:#4fd1a8;--primary-hover:#6ee0bb;--accent-text:#a5a5f7;--accent:var(--accent-text);--accent-soft:#1b1b36;--success:#4ade80;--success-soft:#10291a;--warning:#fbbf24;--warning-soft:#2f2510;--danger:#f87171;--danger-soft:#331519;--info:#60a5fa;--info-soft:#12243a;--code-keyword:#7dd3fc;--code-string:#86efac;--code-number:#fbbf24;--code-function:#c4b5fd;--code-comment:#94a3b8;--shadow-xs:0 1px 2px #0006;--shadow-sm:0 1px 3px #00000073;--shadow-md:0 6px 16px #00000080;--shadow-lg:0 16px 36px #0009;--shadow-focus:0 0 0 3px #4fd1a866;--gold:#fbbf24;--gold-soft:#3a2c0c;--on-primary:#06140f;--on-success:#06140f;--on-accent:#06140f}[data-track=python]{--track-strong:var(--python-700);--track-soft:var(--python-100);--track-tint:var(--python-50);--track-gradient:var(--gradient-python);--track-icon:var(--python-800);--track-on:var(--on-primary)}[data-track=sql]{--track-strong:var(--sql-600);--track-soft:var(--sql-100);--track-tint:var(--sql-50);--track-gradient:var(--gradient-sql);--track-icon:var(--sql-700);--track-on:var(--on-accent)}[data-theme=dark] [data-track=python]{--track-strong:var(--primary-text);--track-icon:var(--python-400)}[data-theme=dark] [data-track=sql]{--track-strong:var(--accent-text);--track-icon:var(--sql-300)}:root{--track-strong:var(--primary);--track-soft:var(--primary-soft);--track-tint:var(--bg-subtle);--track-gradient:var(--gradient-brand);--track-icon:var(--primary);--track-on:var(--on-primary)}*,:before,:after{box-sizing:border-box}html{-moz-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-sans);font-size:var(--fs-base);line-height:var(--lh-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:background-color var(--dur) var(--ease), color var(--dur) var(--ease);margin:0}h1,h2,h3,h4{font-family:var(--font-display);line-height:var(--lh-tight);margin:0 0 var(--sp-3);color:var(--text);letter-spacing:-.01em}h1{font-size:var(--fs-2xl)}h2{font-size:var(--fs-xl)}h3{font-size:var(--fs-lg)}h4{font-size:var(--fs-md)}p{margin:0 0 var(--sp-3)}a{color:var(--primary-text);border-radius:var(--radius-sm);text-decoration:none}a:hover{text-decoration:underline}code,kbd,pre,samp{font-family:var(--font-mono);font-size:.94em}:not(pre)>code{background:var(--bg-subtle);border:1px solid var(--border);color:var(--text);white-space:nowrap;border-radius:6px;padding:.1em .38em}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}img,svg{max-width:100%;display:block}:focus-visible{outline:3px solid var(--primary);outline-offset:2px;border-radius:var(--radius-sm)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-pill)}::-webkit-scrollbar-track{background:0 0}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.stack{gap:var(--sp-4);flex-direction:column;display:flex}.row{align-items:center;gap:var(--sp-3);display:flex}.spacer{flex:auto}.page{width:100%;max-width:var(--content-max);padding:var(--sp-6) var(--sp-6) var(--sp-12);margin:0 auto}.dim{color:var(--text-muted)}@media screen and (max-width:720px){:root{--fs-base:1rem;--fs-2xl:1.75rem;--fs-xl:1.5rem}.page{padding:var(--sp-4) var(--sp-3) var(--sp-10)}}@media screen and (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.btn{justify-content:center;align-items:center;gap:var(--sp-2);min-height:44px;padding:0 var(--sp-5);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-sm);white-space:nowrap;transition:background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);-webkit-user-select:none;user-select:none;border:1px solid #0000;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.btn:hover{text-decoration:none}.btn:active{transform:translateY(1px)}.btn:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:not-allowed;transform:none}.btn--primary{background:var(--primary);color:var(--on-primary);box-shadow:var(--shadow-sm)}.btn--primary:hover:not(:disabled){background:var(--primary-hover)}.btn--secondary{background:var(--bg-elevated);color:var(--text);border-color:var(--border-strong)}.btn--secondary:hover:not(:disabled){background:var(--bg-subtle)}.btn--ghost{color:var(--text-muted);background:0 0}.btn--ghost:hover:not(:disabled){background:var(--bg-subtle);color:var(--text)}.btn--success{background:var(--success);color:var(--on-success)}.btn--success:hover:not(:disabled){filter:brightness(.95)}.btn--danger{background:var(--danger);color:var(--on-primary);box-shadow:var(--shadow-sm)}.btn--danger:hover:not(:disabled){filter:brightness(.94)}.btn--track{background:var(--track-strong,var(--primary));color:var(--track-on,var(--on-primary));box-shadow:var(--shadow-sm)}.btn--track:hover:not(:disabled){filter:brightness(.94)}.btn--outline-track{color:var(--track-strong,var(--primary));border-color:var(--track-strong,var(--primary));background:0 0}.btn--outline-track:hover:not(:disabled){background:var(--track-tint,var(--primary-soft))}.btn__icon,.btn__label{align-items:center;display:inline-flex}.btn__spinner{border:2px solid;border-top-color:#0000;border-radius:50%;width:16px;height:16px;animation:.7s linear infinite btn-spin}@keyframes btn-spin{to{transform:rotate(360deg)}}.btn--lg{min-height:56px;padding:0 var(--sp-8);font-size:var(--fs-md);border-radius:var(--radius-lg)}.btn--xl{min-height:56px;padding:0 var(--sp-6);border-radius:var(--radius-lg);font-size:1.125rem;font-weight:700}.btn--xl .btn__icon{font-size:1.1em}.btn--sm{min-height:36px;padding:0 var(--sp-3);font-size:var(--fs-xs)}.btn--block{width:100%}.btn--icon{min-width:44px;padding:0}.card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);padding:var(--sp-5)}.card--flush{padding:0;overflow:hidden}.card--interactive{transition:box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease), border-color var(--dur) var(--ease);cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit}.card--interactive:hover{box-shadow:var(--shadow-md);border-color:var(--border-strong);transform:translateY(-2px)}.card__title{font-family:var(--font-display);font-size:var(--fs-md);margin:0 0 var(--sp-1)}.badge{border-radius:var(--radius-pill);background:var(--bg-subtle);color:var(--text-muted);font-size:var(--fs-xs);white-space:nowrap;align-items:center;gap:6px;padding:3px 10px;font-weight:600;line-height:1.5;display:inline-flex}.badge--xp{background:var(--amber-100);color:var(--gold)}.badge--success{background:var(--success-soft);color:var(--success)}.badge--danger{background:var(--danger-soft);color:var(--danger)}.badge--info{background:var(--info-soft);color:var(--info)}.badge--warning{background:var(--warning-soft);color:var(--warning)}.badge--muted{background:var(--bg-inset);color:var(--text-subtle)}.badge--track{background:var(--track-soft,var(--bg-subtle));color:var(--track-strong,var(--text))}.badge--lg{font-size:var(--fs-sm);padding:6px 14px}[data-theme=dark] .badge--xp{color:var(--amber-500)}.progress{border-radius:var(--radius-pill);background:var(--bg-subtle);width:100%;height:12px;overflow:hidden}.progress--lg{height:18px}.progress__fill{border-radius:inherit;background:linear-gradient(90deg, var(--python-500), var(--sql-500));height:100%;transition:width var(--dur-slow) var(--ease)}.progress--python .progress__fill{background:var(--gradient-python)}.progress--sql .progress__fill{background:var(--gradient-sql)}.progress--track .progress__fill{background:var(--track-gradient,var(--gradient-brand))}.progress--xp .progress__fill{background:var(--gradient-xp)}.progress--sm{height:8px}.progress--xl{height:22px}.surface-track{background:var(--bg-elevated);border:1px solid var(--border);border-top:4px solid var(--track-strong,var(--primary));border-radius:var(--radius-lg)}.field{gap:var(--sp-2);flex-direction:column;display:flex}.field__label{font-size:var(--fs-sm);color:var(--text);font-weight:600}.field__hint{font-size:var(--fs-xs);color:var(--text-muted)}.field__error{font-size:var(--fs-xs);color:var(--danger);font-weight:600}.input,.textarea,.select{width:100%;min-height:48px;padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);border:1px solid var(--border-field);background:var(--bg-elevated);color:var(--text);font-size:var(--fs-base);transition:border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease)}.input:focus,.textarea:focus,.select:focus{border-color:var(--primary);box-shadow:var(--shadow-focus);outline:none}.input[aria-invalid=true]{border-color:var(--danger)}.textarea{resize:vertical;min-height:96px;font-family:var(--font-mono);font-size:var(--fs-sm)}.alert{gap:var(--sp-3);padding:var(--sp-4);border-radius:var(--radius-md);font-size:var(--fs-sm);border:1px solid #0000;display:flex}.alert--error{background:var(--danger-soft);border-color:color-mix(in srgb, var(--danger) 30%, transparent);color:var(--danger)}.alert--success{background:var(--success-soft);border-color:color-mix(in srgb, var(--success) 30%, transparent);color:var(--success)}.alert--info{background:var(--info-soft);border-color:color-mix(in srgb, var(--info) 25%, transparent);color:var(--info)}.alert--warning{background:var(--warning-soft);border-color:color-mix(in srgb, var(--warning) 30%, transparent);color:var(--warning)}.tabs{gap:var(--sp-1);padding:var(--sp-1);border-radius:var(--radius-md);background:var(--bg-subtle);display:flex}.tabs__tab{border-radius:var(--radius-sm);min-height:40px;color:var(--text-muted);font-size:var(--fs-sm);background:0 0;border:0;flex:1;font-weight:600}.tabs__tab[aria-selected=true]{background:var(--bg-elevated);color:var(--text);box-shadow:var(--shadow-xs)}.skeleton{background:linear-gradient(90deg, var(--bg-subtle) 25%, var(--bg-inset) 37%, var(--bg-subtle) 63%);border-radius:var(--radius-sm);background-size:400% 100%;animation:1.4s infinite skeleton-shimmer}@keyframes skeleton-shimmer{0%{background-position:100%}to{background-position:0}}.toast-region{right:var(--sp-6);bottom:var(--sp-6);z-index:var(--z-toast);gap:var(--sp-2);pointer-events:none;flex-direction:column;align-items:flex-end;display:flex;position:fixed}.toast{align-items:flex-start;gap:var(--sp-3);z-index:auto;pointer-events:auto;padding:var(--sp-4) var(--sp-5);border-radius:var(--radius-md);background:var(--bg-elevated);border:1px solid var(--border-strong);border-left:4px solid var(--info);box-shadow:var(--shadow-lg);font-size:var(--fs-sm);max-width:380px;animation:toast-in var(--dur) var(--ease);display:flex;position:relative;bottom:auto;right:auto}.toast--success{border-left-color:var(--success)}.toast--warning{border-left-color:var(--warning)}.toast--error{border-left-color:var(--danger)}.toast__icon{line-height:1.4}.toast__body{flex-direction:column;gap:2px;display:flex}.toast__title{font-size:var(--fs-sm)}.toast__message{color:var(--text-muted)}.toast__close{color:var(--text-subtle);font-size:var(--fs-sm);padding:var(--sp-1);border-radius:var(--radius-sm);background:0 0;border:0;margin-left:auto;line-height:1}.toast__close:hover{color:var(--text);background:var(--bg-subtle)}@keyframes toast-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media screen and (max-width:720px){.toast-region{left:var(--sp-3);right:var(--sp-3);bottom:calc(var(--bottom-nav-height) + var(--sp-3));align-items:stretch}.toast{max-width:none}}.section-header{align-items:center;gap:var(--sp-3);margin:var(--sp-2) 0 var(--sp-3);display:flex}.section-title{font-family:var(--font-display);font-size:var(--fs-lg);margin:0}.section-subtitle{color:var(--text-muted);font-size:var(--fs-sm);margin:0}.empty-state{text-align:center;align-items:center;gap:var(--sp-2);padding:var(--sp-8) var(--sp-4);color:var(--text-muted);font-size:var(--fs-sm);flex-direction:column;display:flex}.empty-state__icon{font-size:var(--fs-3xl);line-height:1}.empty-state__title{color:var(--text);font-family:var(--font-display);font-size:var(--fs-md)}.modal{z-index:var(--z-modal);padding:var(--sp-4);background:color-mix(in srgb, var(--text) 45%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:modal-fade var(--dur-fast) var(--ease);place-items:center;display:grid;position:fixed;inset:0}.modal__panel{width:100%;max-width:520px;max-height:calc(100vh - 2 * var(--sp-4));background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--sp-6);animation:modal-pop var(--dur) var(--ease);overflow:auto}.modal__panel--sm{max-width:400px}.modal__panel--lg{max-width:760px}.modal__title{font-size:var(--fs-xl);margin:0 0 var(--sp-2)}.modal__description{color:var(--text-muted);font-size:var(--fs-sm)}.modal__body{margin-top:var(--sp-3)}.field__required{color:var(--danger);margin-left:2px}.field--invalid .field__label{color:var(--danger)}.md-inline{display:contents}.console__text{white-space:pre-wrap;word-break:break-word}.friendly-error__icon{font-size:var(--fs-lg);flex:none;line-height:1}.theory-text>:last-child,.theory-table{margin-bottom:0}.theory-table{margin-top:var(--sp-2)}.playground__extra{gap:var(--sp-2);flex-direction:column;align-items:flex-start;display:flex}.auth__panel{min-width:0}.modal__footer{gap:var(--sp-2);margin-top:var(--sp-5);flex-wrap:wrap;justify-content:flex-end;display:flex}@keyframes modal-fade{0%{opacity:0}}@keyframes modal-pop{0%{opacity:0;transform:translateY(10px)scale(.98)}}.avatar{background:var(--gradient-brand);width:44px;height:44px;color:var(--on-primary);font-weight:700;font-size:var(--fs-sm);letter-spacing:.02em;-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;place-items:center;display:inline-grid}.avatar--lg{width:64px;height:64px;font-size:var(--fs-lg)}.card--flat{box-shadow:none}.card--tinted{background:var(--track-tint,var(--bg-subtle))}.data-table-wrap{border-radius:var(--radius-md);border:1px solid var(--border);max-width:100%;overflow:auto}.data-table{border-collapse:collapse;width:100%;font-size:var(--fs-sm)}.data-table th,.data-table td{padding:var(--sp-2) var(--sp-3);text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}.data-table thead th{background:var(--bg-subtle);color:var(--text-muted);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;z-index:1;font-weight:700;position:sticky;top:0}.data-table tbody tr:last-child td{border-bottom:0}.data-table tbody tr:nth-child(2n){background:var(--bg-inset)}.data-table td.is-null{color:var(--text-subtle);font-style:italic}.data-table td.is-numeric{text-align:right;font-variant-numeric:tabular-nums}.chipbar{gap:var(--sp-2);flex-wrap:wrap;display:flex}.chip{align-items:center;gap:var(--sp-2);min-height:40px;padding:0 var(--sp-4);border-radius:var(--radius-pill);border:1px solid var(--border-strong);background:var(--bg-elevated);color:var(--text-muted);font-size:var(--fs-sm);font-weight:600;display:inline-flex}.chip:hover{background:var(--bg-subtle);color:var(--text)}.chip[aria-pressed=true],.chip.is-active{background:var(--track-tint,var(--primary-soft));border-color:var(--track-strong,var(--primary));color:var(--track-strong,var(--primary-text))}.skeleton-lines{gap:var(--sp-2);flex-direction:column;width:100%;display:flex}.skeleton--card{border-radius:var(--radius-lg);width:100%}.skeleton--avatar{border-radius:50%;flex:none;width:44px;height:44px}.page-header{align-items:flex-end;gap:var(--sp-3);margin-bottom:var(--sp-5);flex-wrap:wrap;display:flex}.page-title{font-size:var(--fs-2xl);margin:0}.page-lead{color:var(--text-muted);margin:0}.grid-auto{gap:var(--sp-4);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));display:grid}.stack-sm{gap:var(--sp-2);flex-direction:column;display:flex}.stack-md{gap:var(--sp-4);flex-direction:column;display:flex}.row-wrap{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.text-sm{font-size:var(--fs-sm)}.text-xs{font-size:var(--fs-xs)}.text-strong{font-weight:700}.text-mono{font-family:var(--font-mono)}.text-success{color:var(--success)}.text-danger{color:var(--danger)}.text-warning{color:var(--warning)}.text-muted{color:var(--text-muted)}.m-0{margin:0}.skip-link{left:var(--sp-3);z-index:calc(var(--z-toast) + 1);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);background:var(--bg-elevated);border:1px solid var(--border-strong);box-shadow:var(--shadow-md);color:var(--text);font-weight:600;position:absolute;top:-100px}.skip-link:focus{top:var(--sp-3)}.spinner{border:3px solid var(--border-strong);border-top-color:var(--primary);border-radius:50%;flex:none;width:22px;height:22px;animation:.8s linear infinite btn-spin}.spinner--lg{border-width:4px;width:36px;height:36px}.center-box{justify-content:center;align-items:center;gap:var(--sp-3);padding:var(--sp-10) var(--sp-4);color:var(--text-muted);display:flex}.logo{align-items:center;gap:var(--sp-3);color:var(--text);border-radius:var(--radius-md);flex:none;text-decoration:none;display:inline-flex}.logo:hover{text-decoration:none}.logo__mark{background:var(--gradient-brand);width:42px;height:42px;box-shadow:var(--shadow-sm);border-radius:13px;flex:none;place-items:center;display:grid}.logo__glyph{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--on-primary);letter-spacing:-.05em;font-weight:700}.logo__text{flex-direction:column;line-height:1.1;display:flex}.logo__title{font-family:var(--font-display);font-size:var(--fs-base);letter-spacing:-.01em;font-weight:700}.logo__subtitle{font-size:var(--fs-xs);color:var(--text-muted);letter-spacing:.14em;text-transform:uppercase}.theme-toggle{align-items:center;gap:var(--sp-2);border:1px solid var(--border-strong);border-radius:var(--radius-pill);background:var(--bg-subtle);width:64px;height:36px;transition:background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);flex:none;padding:3px;display:inline-flex;position:relative}.theme-toggle__icon{z-index:1;width:28px;height:28px;font-size:var(--fs-sm);order:0;place-items:center;display:grid;position:relative}.theme-toggle__knob{background:var(--bg-elevated);width:28px;height:28px;box-shadow:var(--shadow-sm);transition:transform var(--dur) var(--ease);border-radius:50%;position:absolute;top:3px;left:3px}[data-theme=dark] .theme-toggle__knob{transform:translate(28px)}[data-theme=dark] .theme-toggle__icon{order:1}.xp-badge{align-items:center;gap:var(--sp-2);min-height:40px;padding:4px var(--sp-3);border-radius:var(--radius-pill);background:var(--bg-elevated);border:1px solid var(--border-strong);box-shadow:var(--shadow-xs);font-size:var(--fs-sm);flex:none;font-weight:700;display:inline-flex}.xp-badge--button{cursor:pointer;font:inherit;font-weight:700}.xp-badge--button:hover{background:var(--bg-subtle)}.xp-badge__icon{font-size:var(--fs-sm)}.xp-badge__value{color:var(--text);font-variant-numeric:tabular-nums;align-items:baseline;gap:3px;display:inline-flex}.xp-badge__unit{font-size:var(--fs-xs);color:var(--gold);font-weight:700}.xp-badge__divider{background:var(--border);width:1px;height:20px}.xp-badge__level{color:var(--text-muted);align-items:center;gap:4px;font-weight:600;display:inline-flex}.xp-badge__level-name{white-space:nowrap}.xp-badge__progress{border-radius:var(--radius-pill);background:var(--bg-subtle);width:56px;height:6px;display:none;overflow:hidden}.xp-badge__progress-fill{background:var(--gradient-xp);border-radius:inherit;height:100%;transition:width var(--dur-slow) var(--ease);display:block}.main-nav{align-items:center;gap:var(--sp-1);display:flex}.main-nav__link{align-items:center;gap:var(--sp-2);min-height:40px;padding:0 var(--sp-3);border-radius:var(--radius-md);color:var(--text-muted);font-size:var(--fs-sm);transition:background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);font-weight:600;text-decoration:none;display:inline-flex}.main-nav__link:hover{background:var(--bg-subtle);color:var(--text);text-decoration:none}.main-nav__link.is-active{background:var(--primary-soft);color:var(--primary-text)}.main-nav__icon{font-size:var(--fs-sm)}.main-nav--bottom{display:none}.user-menu{flex:none;position:relative}.user-menu__trigger{align-items:center;gap:var(--sp-2);min-height:44px;padding:0 var(--sp-2) 0 0;border-radius:var(--radius-pill);color:var(--text);font-size:var(--fs-sm);background:0 0;border:0;font-weight:600;display:inline-flex}.user-menu__trigger:hover{background:var(--bg-subtle)}.user-menu__name{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.user-menu__chevron{color:var(--text-subtle)}.user-menu__panel{right:0;top:calc(100% + var(--sp-2));z-index:var(--z-header);min-width:260px;padding:var(--sp-2);border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--border);box-shadow:var(--shadow-lg);animation:menu-in var(--dur-fast) var(--ease);position:absolute}@keyframes menu-in{0%{opacity:0;transform:translateY(-6px)}}.user-menu__head{align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border);margin-bottom:var(--sp-2);display:flex}.user-menu__head-text{flex-direction:column;min-width:0;display:flex}.user-menu__head-text strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__meta{font-size:var(--fs-xs);color:var(--text-muted)}.user-menu__note{font-size:var(--fs-xs);color:var(--text-muted);background:var(--bg-inset);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-2)}.user-menu__item{align-items:center;gap:var(--sp-2);width:100%;min-height:42px;padding:0 var(--sp-3);border-radius:var(--radius-sm);color:var(--text);font-size:var(--fs-sm);text-align:left;background:0 0;border:0;font-weight:600;display:flex}.user-menu__item:hover{background:var(--bg-subtle)}.app-shell{background:var(--bg);flex-direction:column;min-height:100vh;display:flex}.app-header{z-index:var(--z-header);background:color-mix(in srgb, var(--bg-elevated) 88%, transparent);-webkit-backdrop-filter:saturate(140%)blur(10px);backdrop-filter:saturate(140%)blur(10px);border-bottom:1px solid var(--border);position:sticky;top:0}.app-header__inner{align-items:center;gap:var(--sp-4);width:100%;max-width:var(--content-max);min-height:var(--header-height);padding:0 var(--sp-6);margin:0 auto;display:flex}.app-header__nav{flex:auto;justify-content:center;min-width:0;display:flex}.app-header__actions{align-items:center;gap:var(--sp-3);flex:none;margin-left:auto;display:flex}.app-main{width:100%;max-width:var(--content-max);padding:var(--sp-6) var(--sp-6) var(--sp-12);outline:none;flex:auto;margin:0 auto}.app-main--wide{max-width:none;padding:0}.app-shell--wide .app-main{min-height:calc(100vh - var(--header-height));flex-direction:column;display:flex}.app-bottomnav{display:none}@media screen and (min-width:1024px){.xp-badge__progress{display:block}}@media screen and (max-width:1023.98px){.app-header__nav{display:none}.app-header__inner{padding:0 var(--sp-4);min-height:var(--topbar-height);gap:var(--sp-2)}.app-main{padding:var(--sp-4) var(--sp-4) calc(var(--bottom-nav-height) + var(--sp-8))}.app-main--wide{padding:0 0 calc(var(--bottom-nav-height) + var(--sp-4))}.app-bottomnav{z-index:var(--z-header);background:var(--bg-elevated);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom,0);display:block;position:fixed;bottom:0;left:0;right:0}.main-nav--bottom{min-height:var(--bottom-nav-height);justify-content:space-around;align-items:stretch;gap:0;display:flex}.main-nav--bottom .main-nav__link{padding:var(--sp-1);min-height:var(--bottom-nav-height);font-size:var(--fs-xs);border-radius:0;flex-direction:column;flex:1 1 0;justify-content:center;gap:2px;font-weight:600}.main-nav--bottom .main-nav__icon{font-size:var(--fs-lg);line-height:1.1}.main-nav--bottom .main-nav__link.is-active{color:var(--primary);background:0 0}.main-nav--bottom .main-nav__link.is-active .main-nav__icon{transform:translateY(-1px)}.logo__text,.user-menu__name,.user-menu__chevron{display:none}}@media screen and (max-width:720px){.xp-badge__level,.xp-badge__divider{display:none}.app-header__actions{gap:var(--sp-2)}.main-nav--bottom .main-nav__label{font-size:var(--fs-xs);line-height:1.2}}@media screen and (max-width:420px){.logo__mark{border-radius:11px;width:36px;height:36px}.theme-toggle{width:56px;height:32px}.theme-toggle__icon,.theme-toggle__knob{width:24px;height:24px}[data-theme=dark] .theme-toggle__knob{transform:translate(24px)}}.landing{flex-direction:column;min-height:100vh;display:flex}.landing-header{z-index:var(--z-header);background:color-mix(in srgb, var(--bg) 86%, transparent);-webkit-backdrop-filter:saturate(140%)blur(10px);backdrop-filter:saturate(140%)blur(10px);border-bottom:1px solid var(--border);position:sticky;top:0}.landing-header__inner{justify-content:space-between;align-items:center;gap:var(--sp-4);max-width:var(--content-max);min-height:var(--header-height);padding:0 var(--sp-6);margin:0 auto;display:flex}.landing-header__actions{align-items:center;gap:var(--sp-2);display:flex}.hero{padding:var(--sp-16) var(--sp-6) var(--sp-12);background:radial-gradient(1200px 480px at 12% -10%, var(--python-50), transparent 68%), radial-gradient(900px 420px at 92% 8%, var(--sql-50), transparent 66%), var(--bg);border-bottom:1px solid var(--border);position:relative;overflow:hidden}.link-button{color:var(--link);font-size:var(--fs-base);text-underline-offset:3px;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.link-button:disabled{opacity:.6;cursor:wait}.hero-card{border-radius:var(--radius-xl);background:var(--bg-code);border:1px solid var(--border-strong);width:100%;max-width:420px;box-shadow:var(--shadow-lg);padding:var(--sp-4);color:var(--text-on-code);transform:rotate(-1.2deg)}.hero-card__bar{align-items:center;gap:var(--sp-2);padding-bottom:var(--sp-3);margin-bottom:var(--sp-3);border-bottom:1px solid color-mix(in srgb, var(--text-on-code) 14%, transparent);display:flex}.hero-card__dot{background:var(--text-subtle);border-radius:50%;width:10px;height:10px}.hero-card__dot--python{background:var(--python-400)}.hero-card__dot--sql{background:var(--violet-500)}.hero-card__dot--amber{background:var(--amber-500)}.hero-card__title{font-family:var(--font-mono);font-size:var(--fs-xs);opacity:.75;margin-left:auto}.hero-card__code{margin:0 0 var(--sp-4);font-family:var(--font-mono);font-size:var(--fs-sm);white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65}.tok-kw{color:var(--code-keyword)}.tok-str{color:var(--code-string)}.tok-num{color:var(--code-number)}.tok-fn{color:var(--code-function)}.hero-card__result{justify-content:space-between;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-md);background:color-mix(in srgb, var(--success) 18%, var(--bg-code));font-size:var(--fs-sm);margin-bottom:var(--sp-3);font-weight:600;display:flex}.hero-card__ok{color:var(--success)}.hero-card__level{align-items:center;gap:var(--sp-2);font-size:var(--fs-xs);opacity:.85;display:flex}.hero-card__levelbar{border-radius:var(--radius-pill);background:color-mix(in srgb, var(--text-on-code) 14%, transparent);flex:1;height:8px;overflow:hidden}.hero-card__levelbar>span{border-radius:inherit;background:var(--gradient-xp);height:100%;display:block}.stat{text-align:center;flex-direction:column;align-items:center;gap:2px;display:flex}.step{gap:var(--sp-4);align-items:flex-start;display:flex}.feature{padding:var(--sp-5);border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--border);box-shadow:var(--shadow-xs)}.cta{padding:var(--sp-16) var(--sp-6)}.cta__inner{text-align:center;max-width:760px;padding:var(--sp-10) var(--sp-6);border-radius:var(--radius-xl);background:var(--gradient-brand);color:var(--on-primary);box-shadow:var(--shadow-lg);margin:0 auto}.cta__title{color:var(--on-primary);font-size:clamp(1.5rem, 3vw, var(--fs-2xl));margin:0 0 var(--sp-2)}.cta__text{color:color-mix(in srgb, var(--on-primary) 88%, transparent);margin:0 0 var(--sp-5)}.cta .btn--primary{background:var(--bg-elevated);color:var(--primary-text)}.landing-footer{border-top:1px solid var(--border);background:var(--bg-elevated);padding:var(--sp-8) var(--sp-6);margin-top:auto}.landing-footer__inner{justify-content:space-between;align-items:center;gap:var(--sp-4);max-width:var(--content-max);flex-wrap:wrap;margin:0 auto;display:flex}.landing-footer__text{font-size:var(--fs-sm);color:var(--text-muted);flex:260px;margin:0}.landing-footer__links{gap:var(--sp-4);font-size:var(--fs-sm);display:flex}.auth{background:radial-gradient(800px 400px at 100% 0%, var(--sql-50), transparent 70%), radial-gradient(700px 380px at 0% 100%, var(--python-50), transparent 70%), var(--bg);flex-direction:column;min-height:100vh;display:flex}.auth__header{justify-content:space-between;align-items:center;gap:var(--sp-3);max-width:var(--content-max);width:100%;padding:var(--sp-4) var(--sp-6);margin:0 auto;display:flex}.auth__header-actions{align-items:center;gap:var(--sp-3);display:flex}.auth__home-link{font-size:var(--fs-sm);color:var(--text-muted)}.auth__main{align-items:start;gap:var(--sp-10);width:100%;max-width:1080px;padding:var(--sp-6) var(--sp-6) var(--sp-12);flex:auto;grid-template-columns:minmax(0,520px) minmax(0,1fr);margin:0 auto;display:grid}.auth__card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-md);padding:var(--sp-8)}.auth__title{font-size:var(--fs-xl);margin:0 0 var(--sp-1)}.auth__subtitle{color:var(--text-muted);font-size:var(--fs-sm);margin:0 0 var(--sp-5)}.auth__form{gap:var(--sp-4);margin-bottom:var(--sp-5);flex-direction:column;display:flex}.auth__divider{align-items:center;gap:var(--sp-3);margin:var(--sp-4) 0;color:var(--text-subtle);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.08em;display:flex}.auth__divider:before,.auth__divider:after{content:"";background:var(--border);flex:1;height:1px}.auth__note{margin:var(--sp-3) 0 0;font-size:var(--fs-xs);color:var(--text-muted)}.auth__footer{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--border)}.auth__switch{font-size:var(--fs-sm);color:var(--text-muted);text-align:center;margin:0}.auth__side-card{top:var(--sp-8);gap:var(--sp-3);padding:var(--sp-8);border-radius:var(--radius-xl);background:var(--bg-elevated);border:1px solid var(--border);box-shadow:var(--shadow-sm);flex-direction:column;display:flex;position:sticky}.auth__side-emoji{font-size:var(--fs-3xl);line-height:1}.auth__side-emoji--sql{margin-top:calc(-1 * var(--sp-6));margin-left:var(--sp-8);font-size:var(--fs-2xl)}.auth__side-title{font-size:var(--fs-lg);margin:0}.auth__side-text{color:var(--text-muted);font-size:var(--fs-sm);margin:0}.auth__side-list{gap:var(--sp-2);font-size:var(--fs-sm);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.error-notice{margin-bottom:var(--sp-4);align-items:flex-start}.error-notice__icon{line-height:1.4}.error-notice__body{gap:var(--sp-1);flex-direction:column;display:flex}.error-notice__title{font-size:var(--fs-sm)}.error-notice__hint{font-size:var(--fs-xs);opacity:.9}.error-notice__retry{margin-top:var(--sp-2);align-self:flex-start}.page-loading,.app-boot{justify-content:center;align-items:center;gap:var(--sp-3);min-height:60vh;color:var(--text-muted);flex-direction:column;display:flex}.app-boot{min-height:100vh}.page-loading__label{font-size:var(--fs-sm)}.notfound{flex-direction:column;min-height:100vh;display:flex}.notfound__header{max-width:var(--content-max);width:100%;padding:var(--sp-4) var(--sp-6);justify-content:space-between;align-items:center;margin:0 auto;display:flex}.notfound__main{text-align:center;justify-content:center;align-items:center;gap:var(--sp-3);padding:var(--sp-10) var(--sp-6) var(--sp-16);flex-direction:column;flex:auto;display:flex}.notfound__code{font-family:var(--font-display);background:var(--gradient-brand);color:#0000;-webkit-background-clip:text;background-clip:text;margin:0;font-size:clamp(4rem,14vw,8rem);font-weight:800;line-height:1}.notfound__emoji{font-size:var(--fs-3xl);margin-top:calc(-1 * var(--sp-4))}.notfound__title{font-size:var(--fs-2xl);margin:0}.notfound__text{max-width:48ch;color:var(--text-muted);margin:0}.notfound__actions{gap:var(--sp-3);margin-top:var(--sp-3);flex-wrap:wrap;justify-content:center;display:flex}.notfound__hint{font-size:var(--fs-sm);color:var(--text-muted)}@media screen and (max-width:1023.98px){.hero{padding:var(--sp-10) var(--sp-4) var(--sp-8)}.hero__inner{gap:var(--sp-8);grid-template-columns:1fr}.hero__art{order:2}.hero-card{max-width:100%;transform:none}.landing-section{padding:var(--sp-10) var(--sp-4)}.landing-section__head{margin-bottom:var(--sp-6)}.stats-strip__inner{gap:var(--sp-5) var(--sp-3);grid-template-columns:repeat(2,minmax(0,1fr))}.auth__main{max-width:560px;padding:var(--sp-4) var(--sp-4) var(--sp-10);grid-template-columns:1fr}.auth__side{display:none}}@media screen and (max-width:720px){.landing-header__inner,.auth__header,.notfound__header{padding-inline:var(--sp-4)}.landing-hide-sm{display:none}.auth__card{padding:var(--sp-5)}.cta__inner{padding:var(--sp-8) var(--sp-4)}.landing-footer__inner{flex-direction:column;align-items:flex-start}}.course-progress__head{justify-content:space-between;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3);display:flex}.course-progress__value{font-family:var(--font-display);font-size:var(--fs-2xl);color:var(--primary-text);font-weight:700;line-height:1}.course-progress__text{margin:var(--sp-2) 0 0;font-size:var(--fs-sm);color:var(--text-muted)}.progress-bar__head{justify-content:space-between;align-items:baseline;gap:var(--sp-2);margin-bottom:var(--sp-1);display:flex}.progress-bar__label{font-size:var(--fs-xs);color:var(--text-muted);font-weight:600}.progress-bar__value{font-size:var(--fs-xs);color:var(--text-muted);font-variant-numeric:tabular-nums}.lesson-list{margin:var(--sp-2) 0 0;gap:var(--sp-2);flex-direction:column;padding:0;list-style:none;display:flex}.achievement-mini-list{gap:var(--sp-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.empty-state-text{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.section-link{font-size:var(--fs-sm);margin-left:auto;font-weight:600}.achievement{gap:var(--sp-1);padding:var(--sp-4);border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg-elevated);flex-direction:column;height:100%;display:flex}.achievement--unlocked{border-top:4px solid var(--amber-500);box-shadow:var(--shadow-sm)}.achievement--locked{background:var(--bg-inset);opacity:.72}.achievement--locked .achievement__icon{filter:grayscale()}.achievement__icon{font-size:var(--fs-2xl);line-height:1.1}.achievement__title{font-size:var(--fs-base);margin:0}.achievement__text{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.achievement__text--clamp{-webkit-line-clamp:2;font-size:var(--fs-xs);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.achievement__status{font-size:var(--fs-xs);color:var(--text-muted);margin-top:auto;font-weight:600}.achievement__status.is-unlocked{color:var(--success)}.achievement--compact{align-items:center;gap:var(--sp-2);padding:var(--sp-2);border-radius:var(--radius-md);border-top-width:1px;flex-flow:wrap}.achievement--compact .achievement__icon{font-size:var(--fs-lg)}.achievement--compact .achievement__title{font-size:var(--fs-sm)}.achievement--compact .achievement__text,.achievement--compact .achievement__status{flex-basis:100%;margin-top:0}.achievements-page{gap:var(--sp-2);flex-direction:column;max-width:980px;display:flex}.achievements-summary,.rewards-summary{align-items:center;gap:var(--sp-5);margin-bottom:var(--sp-4);grid-template-columns:minmax(0,1fr) minmax(200px,320px);display:grid}.rewards-summary{padding:var(--sp-4) var(--sp-5);border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--border)}.rewards-summary__title{font-size:var(--fs-lg);margin:0}.achievements-grid{gap:var(--sp-4);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.achievements__group-title{margin:var(--sp-6) 0 var(--sp-3)}.playground__toolbar{align-items:flex-end;gap:var(--sp-3);margin-bottom:var(--sp-4);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--border);flex-wrap:wrap;display:flex}.playground__db{gap:var(--sp-1);flex-direction:column;display:flex}.playground__db-select{min-width:200px;min-height:44px;padding-block:var(--sp-1)}.playground__grid{gap:var(--sp-4);grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:start;display:grid}.playground__editor{gap:var(--sp-3);flex-direction:column;min-width:0;display:flex}.playground__editor-box{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-elevated);height:56vh;min-height:340px;overflow:hidden}.playground__stdin{gap:var(--sp-1);flex-direction:column;display:flex}.playground__schema{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--sp-3);background:var(--bg-elevated);font-size:var(--fs-sm)}.playground__schema summary{cursor:pointer;font-weight:600}.playground__schema .schema{margin-top:var(--sp-2)}.playground__result{padding:var(--sp-4);border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--border);gap:var(--sp-3);flex-direction:column;min-width:0;min-height:300px;display:flex}.playground__result-head{align-items:center;gap:var(--sp-2);display:flex}.playground__hint{padding-top:var(--sp-2);font-size:var(--fs-xs);color:var(--text-muted);margin:auto 0 0}.playground__hint kbd{border:1px solid var(--border-strong);background:var(--bg-subtle);font-size:var(--fs-xs);border-radius:4px;padding:0 4px}.admin-stats{gap:var(--sp-3);margin:var(--sp-3) 0 var(--sp-6);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));display:grid}.admin-stat{gap:var(--sp-1);padding:var(--sp-4);flex-direction:column;display:flex}.admin-stat__label{font-size:var(--fs-xs);color:var(--text-muted);font-weight:600}.admin-stat__value{font-family:var(--font-display);font-size:var(--fs-xl);font-variant-numeric:tabular-nums;margin:0;font-weight:700}.admin-section{margin-bottom:var(--sp-8)}.admin-search{flex:240px;min-width:240px;max-width:360px;position:relative}.admin-search .input{min-height:44px;padding-left:calc(var(--sp-4) + 26px)}.admin-search__icon{left:var(--sp-3);pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.admin-users{background:var(--bg-elevated)}.admin-user{align-items:center;gap:var(--sp-2);display:inline-flex}.admin-user .avatar{width:32px;height:32px;font-size:var(--fs-xs)}.admin-role-select{min-width:150px;min-height:38px;padding-block:var(--sp-1);font-size:var(--fs-sm)}.admin-note{margin:var(--sp-2) 0 0;font-size:var(--fs-xs);color:var(--text-muted)}.admin-denied{place-items:center;min-height:60vh;display:grid}.admin-denied__card{text-align:center;max-width:520px;padding:var(--sp-8)}.admin-denied__icon{font-size:var(--fs-3xl);margin-bottom:var(--sp-3);display:block}.admin-denied__title{font-size:var(--fs-xl);margin:0 0 var(--sp-2)}.admin-denied__text{color:var(--text-muted)}.admin-denied__actions{margin-top:var(--sp-4);justify-content:center}@media screen and (max-width:1023.98px){.dashboard__grid,.playground__grid{grid-template-columns:1fr}.playground__editor-box{height:46vh}.achievements-summary{grid-template-columns:1fr}}@media screen and (max-width:720px){.achievements-grid{gap:var(--sp-3);grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.achievement{padding:var(--sp-3)}.achievement__icon{font-size:var(--fs-xl)}.admin-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.admin-search{width:100%;max-width:none}}.dashboard--simple{gap:var(--sp-6);flex-direction:column;max-width:980px;display:flex}.dashboard__hello{font-size:var(--fs-2xl);margin:0}.dashboard__guest{margin:calc(var(--sp-3) * -1) 0 0;font-size:var(--fs-sm);color:var(--text-muted)}.big-continue{align-items:center;gap:var(--sp-6);padding:var(--sp-6);border-radius:var(--radius-xl);background:var(--primary-soft);border:2px solid var(--track-strong,var(--primary));display:flex}.big-continue__text{gap:var(--sp-2);flex-direction:column;flex:auto;min-width:0;display:flex}.big-continue__title{font-size:var(--fs-xl);margin:0;line-height:1.25}.big-continue__sub{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.big-continue__cta{flex:none;min-width:220px}.quick-stats{gap:var(--sp-3);grid-template-columns:repeat(3,minmax(0,1fr));margin:0;display:grid}.quick-stat{padding:var(--sp-4) var(--sp-3);border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--border);text-align:center;flex-direction:column;align-items:center;gap:2px;display:flex}.quick-stat dt{font-size:var(--fs-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700}.quick-stat dd{font-size:var(--fs-lg);color:var(--text);margin:0;font-weight:800}.dashboard__tracks{gap:var(--sp-6);flex-direction:column;display:flex}.track-block{gap:var(--sp-3);flex-direction:column;display:flex}.track-block__head{align-items:center;gap:var(--sp-3);display:flex}.track-block__icon{border-radius:var(--radius-md);background:var(--track-soft,var(--bg-subtle));width:44px;height:44px;font-size:var(--fs-lg);place-items:center;display:grid}.track-block__title{font-size:var(--fs-xl);margin:0}.track-block__count{font-size:var(--fs-sm);color:var(--text-muted);margin-left:auto;font-weight:700}.lesson-grid{gap:var(--sp-2);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));margin:0;padding:0;list-style:none;display:grid}.lesson-tile{align-items:center;gap:var(--sp-3);min-height:64px;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);transition:transform var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);font-weight:600;text-decoration:none;display:flex}.lesson-tile:hover{border-color:var(--track-strong,var(--primary));box-shadow:var(--shadow-sm);text-decoration:none;transform:translateY(-1px)}.lesson-tile__num{background:var(--track-soft,var(--bg-subtle));width:40px;height:40px;color:var(--track-strong,var(--text-muted));font-size:var(--fs-md);border-radius:50%;flex:none;place-items:center;font-weight:800;display:grid}.lesson-tile__title{font-size:var(--fs-sm);min-width:0;line-height:1.3}.lesson-tile--done{background:var(--success-soft);border-color:color-mix(in srgb, var(--success) 35%, transparent)}.lesson-tile--done .lesson-tile__num{background:var(--success);color:var(--on-success)}.lesson-tile--next{border:2px solid var(--track-strong,var(--primary))}.dashboard__rewards{gap:var(--sp-3);flex-direction:column;display:flex}@media screen and (max-width:860px){.big-continue{padding:var(--sp-5);align-items:stretch;gap:var(--sp-4);flex-direction:column}.big-continue__cta{width:100%}.quick-stats{gap:var(--sp-2);grid-template-columns:repeat(3,minmax(0,1fr))}.quick-stat dd{font-size:var(--fs-md)}.lesson-grid{grid-template-columns:1fr}}@media screen and (max-width:520px){.quick-stat{padding:var(--sp-3) var(--sp-2)}.quick-stat dt{font-size:.6875rem}}.landing--simple .landing-footer--simple{padding:var(--sp-6) var(--sp-4)}.landing-simple{align-items:center;gap:var(--sp-10);max-width:860px;padding:var(--sp-10) var(--sp-5) var(--sp-12);text-align:center;flex-direction:column;margin:0 auto;display:flex}.hello{align-items:center;gap:var(--sp-4);flex-direction:column;max-width:640px;display:flex}.hello__title{letter-spacing:-.02em;margin:0;font-size:clamp(2rem,6vw,3.25rem);line-height:1.1}.hello__accent{color:var(--primary-text)}.hello__lead{font-size:var(--fs-md);color:var(--text-muted);max-width:480px;margin:0}.hello__cta{min-width:240px;margin-top:var(--sp-2)}.hello__guest{font-size:var(--fs-sm);color:var(--text-muted);cursor:pointer;padding:var(--sp-2);min-height:var(--touch-target);background:0 0;border:0;text-decoration:underline}.hello__guest:hover{color:var(--text)}.hello-points{gap:var(--sp-4);grid-template-columns:repeat(3,minmax(0,1fr));width:100%;display:grid}.hello-point{align-items:center;gap:var(--sp-2);padding:var(--sp-6) var(--sp-4);border-radius:var(--radius-xl);background:var(--bg-elevated);border:2px solid var(--border);flex-direction:column;display:flex}.hello-point__icon{font-size:2.5rem;line-height:1}.hello-point__title{font-size:var(--fs-lg);margin:0}.hello-point__text{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.hello-steps{align-items:center;gap:var(--sp-4);flex-direction:column;width:100%;display:flex}.hello-steps__title{font-size:var(--fs-xl);margin:0}.hello-steps__list{gap:var(--sp-3);text-align:left;flex-direction:column;width:100%;max-width:480px;margin:0;padding:0;list-style:none;display:flex}.hello-step{align-items:center;gap:var(--sp-3);font-size:var(--fs-md);font-weight:600;display:flex}.hello-step__num{background:var(--primary-soft);width:40px;height:40px;color:var(--primary-text);border-radius:50%;flex:none;place-items:center;font-weight:800;display:grid}.hello-teacher{font-size:var(--fs-sm);color:var(--text-muted)}.hello-teacher__text{margin:0 0 var(--sp-2)}@media screen and (max-width:720px){.landing-simple{padding:var(--sp-6) var(--sp-4) var(--sp-10);gap:var(--sp-8)}.hello-points{gap:var(--sp-3);grid-template-columns:1fr}.hello-point{text-align:left;padding:var(--sp-4);gap:var(--sp-4);flex-direction:row}.hello-point__icon{flex:none;font-size:2rem}.hello__cta{width:100%}}.lesson{min-height:calc(100vh - var(--header-height));background:var(--bg);flex-direction:column;display:flex}.lesson--loading{min-height:calc(100vh - var(--header-height))}.lesson__error{padding:var(--sp-8) var(--sp-6)}.lesson__split{grid-template-columns:var(--lesson-left-width) minmax(0, 1fr);gap:var(--lesson-gap);height:calc(100vh - var(--header-height));padding:var(--lesson-gap);align-items:stretch;display:grid;overflow:hidden}.lesson__left{overscroll-behavior:contain;min-width:0;padding-right:var(--sp-2);overflow-y:auto}.lesson__right{gap:var(--sp-3);flex-direction:column;min-width:0;min-height:0;display:flex}.lesson__theory{gap:var(--sp-4);padding-bottom:var(--sp-8);flex-direction:column;display:flex}.lesson__header{gap:var(--sp-2);flex-direction:column;display:flex}.lesson__title{font-size:var(--fs-xl);align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;margin:0;display:flex}.lesson-block{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--sp-5);box-shadow:var(--shadow-xs)}.lesson-block--task{border-left:4px solid var(--track-strong,var(--primary))}.lesson-block__title{font-size:var(--fs-md);margin:0 0 var(--sp-3);align-items:center;gap:var(--sp-2);display:flex}.lesson-task__md{font-size:var(--fs-base)}.lesson-task__subtitle{font-size:var(--fs-sm);color:var(--text-muted);margin:var(--sp-4) 0 var(--sp-2);text-transform:uppercase;letter-spacing:.06em;font-weight:700}.lesson-task__schema,.lesson-task__examples{margin-top:var(--sp-4)}.lesson-task__sources{margin-top:var(--sp-4);font-size:var(--fs-sm);color:var(--text-muted)}.lesson-task__sources summary{cursor:pointer;font-weight:600}.lesson-task__sources ul{margin:var(--sp-2) 0 0;padding-left:var(--sp-5)}.example{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--sp-3);background:var(--bg-inset);margin-bottom:var(--sp-2)}.example__row{gap:var(--sp-2);align-items:flex-start;display:flex}.example__row+.example__row{margin-top:var(--sp-2)}.example__label{font-size:var(--fs-xs);color:var(--text-muted);min-width:52px;padding-top:2px;font-weight:700}.example__pre{flex:1;min-width:0;margin:0}.theory-list{gap:var(--sp-4);flex-direction:column;display:flex}.theory-code{margin:0}.theory-code__caption{font-size:var(--fs-xs);color:var(--text-muted);margin-bottom:var(--sp-2);font-weight:600}.theory-code__pre,.md-pre{padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);background:var(--bg-code);color:var(--text-on-code);font-family:var(--font-mono);font-size:var(--fs-sm);white-space:pre;tab-size:4;margin:0;line-height:1.6;overflow-x:auto}.callout{gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg-inset);border-left-width:4px;display:flex}.callout__icon{flex:none;line-height:1.5}.callout__body{min-width:0}.callout__title{margin-bottom:var(--sp-1);font-size:var(--fs-sm);display:block}.callout__text .md-p:last-child{margin-bottom:0}.callout--info{background:var(--info-soft);border-left-color:var(--info)}.callout--tip{background:var(--success-soft);border-left-color:var(--success)}.callout--warning{background:var(--warning-soft);border-left-color:var(--warning)}.markdown{color:var(--text);overflow-wrap:anywhere;line-height:1.65}.markdown .md-p{margin:0 0 var(--sp-3)}.markdown .md-p:last-child{margin-bottom:0}.markdown .md-heading{margin:var(--sp-4) 0 var(--sp-2);font-family:var(--font-display);line-height:1.25}.markdown .md-h1{font-size:var(--fs-xl)}.markdown .md-h2{font-size:var(--fs-lg)}.markdown .md-h3{font-size:var(--fs-md)}.markdown .md-h4,.markdown .md-h5,.markdown .md-h6{font-size:var(--fs-base)}.markdown .md-heading:first-child{margin-top:0}.markdown .md-list{margin:0 0 var(--sp-3);padding-left:var(--sp-6);gap:var(--sp-1);flex-direction:column;display:flex}.markdown .md-list--ordered{list-style:decimal}.markdown .md-quote{margin:0 0 var(--sp-3);padding:var(--sp-2) var(--sp-4);border-left:4px solid var(--border-strong);background:var(--bg-inset);border-radius:var(--radius-sm);color:var(--text-muted)}.markdown .md-hr{border:0;border-top:1px solid var(--border);margin:var(--sp-4) 0}.markdown .md-code{background:var(--bg-subtle);border:1px solid var(--border);font-family:var(--font-mono);white-space:nowrap;border-radius:6px;padding:.1em .38em;font-size:.92em}.markdown .md-codeblock{margin:0 0 var(--sp-3);position:relative}.markdown .md-codeblock__lang{top:var(--sp-2);left:var(--sp-3);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--code-comment);font-family:var(--font-mono);position:absolute}.markdown .md-codeblock__lang+.md-pre{padding-top:calc(var(--sp-3) + 12px)}.markdown .md-codeblock__copy{top:var(--sp-1);right:var(--sp-1);color:var(--text-on-code);background:color-mix(in srgb, var(--bg-code) 70%, transparent);position:absolute}.markdown .md-codeblock__copy:hover{background:color-mix(in srgb, var(--bg-code) 90%, transparent);color:var(--text-on-code)}.markdown-inline{overflow-wrap:anywhere}.markdown-inline .md-code{background:var(--bg-subtle);border:1px solid var(--border);font-family:var(--font-mono);border-radius:6px;padding:.1em .38em}.schema__tables{gap:var(--sp-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.schema__details{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-inset);padding:var(--sp-2) var(--sp-3)}.schema__summary{cursor:pointer;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);min-height:32px;font-weight:600;display:flex}.schema__table-icon{font-size:var(--fs-sm)}.schema__table-name{font-family:var(--font-mono)}.schema__table-count{font-size:var(--fs-xs);color:var(--text-muted);margin-left:auto;font-weight:400}.schema__table-desc{font-size:var(--fs-xs);color:var(--text-muted);margin:var(--sp-2) 0}.schema__columns{border-collapse:collapse;width:100%;font-size:var(--fs-xs);margin-top:var(--sp-2)}.schema__columns th,.schema__columns td{text-align:left;border-top:1px solid var(--border);vertical-align:top;padding:4px 6px}.schema__columns th{color:var(--text-muted);font-weight:700}.schema__type{font-family:var(--font-mono);color:var(--text-muted);white-space:nowrap}.schema__col-desc{color:var(--text-muted);min-width:120px}.schema__pk{margin-left:var(--sp-1);font-size:var(--fs-xs);padding:0 6px}.hints{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--sp-5);gap:var(--sp-3);flex-direction:column;display:flex}.hints__head{align-items:center;gap:var(--sp-2);display:flex}.hints__title{font-size:var(--fs-md);align-items:center;gap:var(--sp-2);margin:0;display:flex}.hints__note{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.hint__solution-title{margin:0 0 var(--sp-2);font-size:var(--fs-sm);color:var(--text);font-weight:700}.hint{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--sp-3);background:var(--bg-inset);gap:var(--sp-2);animation:hint-in var(--dur) var(--ease);flex-direction:column;display:flex}.hint--level-3{border-color:var(--warning);background:var(--warning-soft)}@keyframes hint-in{0%{opacity:0;transform:translateY(-4px)}}.hint__head{align-items:center;gap:var(--sp-2);display:flex}.hint__text .md-p{margin-bottom:var(--sp-2)}.hint__code{gap:var(--sp-2);flex-direction:column;align-items:flex-start;display:flex}.hint__code .md-pre,.hint__solution .md-pre{width:100%}.hint__solution{gap:var(--sp-2);flex-direction:column;align-items:flex-start;display:flex}.hints__error{color:var(--danger);font-size:var(--fs-sm);margin:0}.hints__done{font-size:var(--fs-sm);color:var(--text-muted);margin:0}.lesson__editor-pane{gap:var(--sp-2);flex-direction:column;height:100%;min-height:0;display:flex}.save-state{font-size:var(--fs-xs);color:var(--text-muted);align-items:center;gap:4px;font-weight:600;display:inline-flex}.save-state--saved{color:var(--success)}.save-state--offline{color:var(--warning)}.save-state--error{color:var(--danger)}.lesson__editor{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-elevated);flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.lesson__editor-box{flex:auto;min-height:0;overflow:hidden}.lesson__splitter{cursor:row-resize;background:var(--bg-subtle);border-block:1px solid var(--border);touch-action:none;flex:none;place-items:center;height:12px;display:grid}:is(.lesson__splitter:hover,.lesson__splitter:focus-visible){background:var(--bg-inset)}.lesson__splitter-grip{border-radius:var(--radius-pill);background:var(--border-strong);width:44px;height:4px}.lesson__console-head{align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-3);border-bottom:1px solid var(--border);background:var(--bg-elevated);flex:none;display:flex}.lesson__console-title{font-size:var(--fs-sm);margin:0;font-weight:700}.lesson__stdin{padding:var(--sp-2) var(--sp-3) 0}.lesson__stdin textarea{min-height:60px}.lesson__result{min-height:0;padding:var(--sp-3);flex:auto;overflow:auto}.lesson__check-fail{padding:var(--sp-2) var(--sp-3);background:var(--danger-soft);color:var(--danger);border-top:1px solid var(--border);font-size:var(--fs-sm);flex:none}.lesson__success{align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-md);background:var(--success-soft);border:1px solid var(--success);animation:success-pop var(--dur-slow) var(--ease);display:flex}@keyframes success-pop{0%{opacity:0;transform:scale(.96)}60%{transform:scale(1.01)}to{opacity:1;transform:scale(1)}}.lesson__success-check{background:var(--success);width:36px;height:36px;color:var(--on-success);font-size:var(--fs-lg);animation:check-pop .52s var(--ease);border-radius:50%;flex:none;place-items:center;font-weight:700;display:grid}@keyframes check-pop{0%{transform:scale(0)}70%{transform:scale(1.15)}to{transform:scale(1)}}.lesson__success-text{color:var(--success);font-size:var(--fs-sm);flex-direction:column;display:flex}.code-editor{width:100%;height:100%;min-height:240px;position:relative}.code-editor__monaco{position:absolute;inset:0}.code-editor__loading{padding:var(--sp-4);background:var(--bg-elevated);align-items:flex-start;display:flex;position:absolute;inset:0}.code-editor--error{padding:var(--sp-3);height:auto;overflow:auto}.code-editor__fallback{min-height:260px}.editor-error-line{background:color-mix(in srgb, var(--danger) 18%, transparent);border-left:3px solid var(--danger)}.console{gap:var(--sp-3);flex-direction:column;height:100%;display:flex}.console--running,.console--empty{justify-content:center;align-items:center;gap:var(--sp-2);min-height:120px;color:var(--text-muted);font-size:var(--fs-sm);flex-direction:row;display:flex}.console__hint{color:var(--text-subtle);font-size:var(--fs-sm);text-align:center}.console__screen{border-radius:var(--radius-md);background:var(--bg-code);color:var(--text-on-code);border:1px solid var(--border);overflow:hidden}.console__titlebar{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:color-mix(in srgb, var(--text-on-code) 8%, var(--bg-code));border-bottom:1px solid color-mix(in srgb, var(--text-on-code) 12%, transparent);display:flex}.console__dot{background:var(--text-subtle);border-radius:50%;width:9px;height:9px}.console__dot--a{background:var(--rose-500)}.console__dot--b{background:var(--amber-500)}.console__dot--c{background:var(--python-400)}.console__label{font-size:var(--fs-xs);color:var(--text-on-code);opacity:.8;font-weight:600}.console__time{font-size:var(--fs-xs);opacity:.65;font-variant-numeric:tabular-nums;margin-left:auto}.console__transcript{padding:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-sm);white-space:pre-wrap;overflow-wrap:anywhere;max-height:340px;line-height:1.6;overflow:auto}.console__line{display:block}.console__line--input{flex-wrap:wrap;gap:4px;display:flex}.console__prompt{color:var(--code-keyword)}.console__typed{color:var(--code-string);text-underline-offset:3px;text-decoration:underline}.console__stdout{font-family:inherit;font-size:inherit;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.console__statusline{padding:0 var(--sp-3) var(--sp-3)}.console__truncated{padding:0 var(--sp-3) var(--sp-3);color:var(--amber-500);font-size:var(--fs-xs);margin:0}.friendly-error{border-radius:var(--radius-md);border:1px solid var(--danger);background:var(--danger-soft);padding:var(--sp-3) var(--sp-4);color:var(--danger);font-size:var(--fs-sm)}.friendly-error__head{gap:var(--sp-2);align-items:flex-start;display:flex}.friendly-error__title{font-size:var(--fs-base)}.friendly-error__line{margin-left:var(--sp-2);color:inherit;border-radius:var(--radius-pill);font-size:var(--fs-xs);background:0 0;border:1px solid;padding:1px 8px;font-weight:600}.friendly-error__message{margin:var(--sp-2) 0 0}.friendly-error__fix{margin:var(--sp-2) 0 0;padding:var(--sp-2) var(--sp-3);background:var(--bg-elevated);border-radius:var(--radius-sm);color:var(--text)}.friendly-error__details{margin-top:var(--sp-2);font-size:var(--fs-xs)}.friendly-error__details summary{cursor:pointer;font-weight:600}.friendly-error__trace{margin:var(--sp-2) 0 0;padding:var(--sp-2);background:var(--bg-code);color:var(--text-on-code);border-radius:var(--radius-sm);white-space:pre-wrap;max-height:200px;font-size:var(--fs-xs);overflow:auto}.sql-result{gap:var(--sp-3);flex-direction:column;display:flex}.sql-result__bar{justify-content:space-between;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--text-muted);flex-wrap:wrap;display:flex}.sql-result__count{font-size:var(--fs-sm);color:var(--text-muted);margin:0;font-weight:600}.sql-result__table-wrap{background:var(--bg-elevated);max-height:360px;overflow:auto}.sql-result__table{font-size:var(--fs-sm)}.sql-result__table thead th{background:var(--track-soft,var(--bg-subtle));color:var(--track-strong,var(--text-muted))}.sql-result__rownum{color:var(--text-subtle);font-variant-numeric:tabular-nums;text-align:right;width:1%;font-size:var(--fs-xs);background:var(--bg-inset)}.sql-result__note{font-size:var(--fs-xs);color:var(--text-muted);margin:0}.lesson__mobile{min-height:calc(100vh - var(--topbar-height) - var(--bottom-nav-height));padding-bottom:var(--sp-2);flex-direction:column;display:flex}.lesson__tabs{top:var(--topbar-height);z-index:var(--z-sticky);gap:var(--sp-1);padding:var(--sp-2) var(--sp-3);background:var(--bg-elevated);border-bottom:1px solid var(--border);display:flex;position:sticky}.lesson__tab{border-radius:var(--radius-md);background:var(--bg-subtle);min-height:44px;color:var(--text-muted);font-size:var(--fs-sm);border:1px solid #0000;flex:1;font-weight:600}.lesson__tab[aria-selected=true]{background:var(--primary-soft);border-color:var(--primary);color:var(--primary-text)}.lesson__panel{padding:var(--sp-3);outline:none;flex:auto}.lesson__panel-code,.lesson__panel-result{gap:var(--sp-2);flex-direction:column;min-height:60vh;display:flex}.lesson__panel-code .code-editor{border:1px solid var(--border);border-radius:var(--radius-md);height:60vh;min-height:60vh;overflow:hidden}.lesson__sticky-actions{bottom:calc(var(--bottom-nav-height) + var(--sp-1));gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:color-mix(in srgb, var(--bg) 92%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid var(--border);display:flex;position:sticky}.lesson__sticky-actions .btn{flex:1}.lesson__success--mobile{bottom:calc(var(--bottom-nav-height) + 64px);margin:0 var(--sp-3) var(--sp-2);position:sticky}@media screen and (max-width:1023.98px){.lesson{min-height:auto}}@media screen and (max-width:720px){.lesson__title{font-size:var(--fs-lg)}.lesson-block,.hints{padding:var(--sp-4)}.lesson__tab{font-size:var(--fs-xs);padding:0 var(--sp-1)}}.lesson-head{align-items:center;gap:var(--sp-4);padding:var(--sp-3) var(--sp-5);background:var(--bg-elevated);border-bottom:1px solid var(--border);z-index:2;display:flex;position:sticky;top:0}.lesson-head__back{min-height:var(--touch-target);padding:0 var(--sp-3);border-radius:var(--radius-md);color:var(--text-muted);font-weight:700;font-size:var(--fs-sm);flex:none;align-items:center;gap:6px;text-decoration:none;display:inline-flex}.lesson-head__back:hover{background:var(--bg-subtle);color:var(--text)}.lesson-head__center{flex-direction:column;flex:auto;gap:6px;min-width:0;max-width:560px;display:flex}.lesson-head__title{font-size:var(--fs-lg);font-family:var(--font-display);align-items:center;gap:var(--sp-2);min-width:0;margin:0;line-height:1.25;display:flex}.lesson-head__number{background:var(--track-soft,var(--primary-soft));min-width:34px;height:34px;color:var(--track-strong,var(--primary-text));font-size:var(--fs-sm);border-radius:50%;flex:none;place-items:center;font-weight:800;display:inline-grid}.lesson-head__spacer{flex:auto}.lesson-actions{gap:var(--sp-3);width:100%;display:flex}.lesson-actions__run,.lesson-actions__check{flex:1 1 0;min-width:0}.lesson__action-row{align-items:center;gap:var(--sp-3);display:flex}.lesson__more{min-height:56px;padding:0 var(--sp-4);border-radius:var(--radius-lg);border:1px solid var(--border-strong);background:var(--bg-elevated);color:var(--text-muted);font-size:var(--fs-sm);cursor:pointer;flex:none;font-weight:700}.lesson__more:hover{background:var(--bg-subtle);color:var(--text)}.lesson__settings{gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--bg-inset);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;display:flex}.lesson__stdin{flex-direction:column;gap:6px;display:flex}.lesson__stdin-label{font-size:var(--fs-xs);color:var(--text-muted);font-weight:700}.lesson__reset{min-height:40px;padding:0 var(--sp-3);border-radius:var(--radius-md);border:1px solid var(--border-strong);background:var(--bg-elevated);color:var(--text-muted);font-size:var(--fs-sm);cursor:pointer;align-self:flex-start;font-weight:600}.lesson__reset:hover{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}.lesson__result-box{gap:var(--sp-2);flex-direction:column;min-height:0;display:flex;overflow:hidden}.lesson__console-head{align-items:center;gap:var(--sp-2);padding:0 var(--sp-1);display:flex}.lesson__console-title{font-size:var(--fs-sm);font-family:var(--font-display);color:var(--text-muted);margin:0}.lesson__success{align-items:center;gap:var(--sp-4);padding:var(--sp-4) var(--sp-5);border-radius:var(--radius-lg);background:var(--success-soft);border:2px solid var(--success);flex-wrap:wrap}.lesson__success-text strong{font-size:var(--fs-lg)}.lesson__success-text{color:var(--success);font-weight:600}@media screen and (max-width:1023.98px){.lesson-head{padding:var(--sp-2) var(--sp-3);gap:var(--sp-2)}.lesson-head__title{font-size:var(--fs-md)}.lesson__action-row,.lesson__settings{margin-inline:var(--sp-3)}.lesson__success--mobile{margin:0 var(--sp-3) var(--sp-2);flex-wrap:nowrap}}@media screen and (max-width:480px){.lesson-actions__run,.lesson-actions__check{padding:0 var(--sp-3);font-size:1rem}.lesson__more{padding:0 var(--sp-3)}}.auth__qr{flex-direction:column;align-items:center;gap:14px;width:100%;display:flex}.auth__qr-frame{background:#fff;border-radius:18px;justify-content:center;align-items:center;width:260px;height:260px;padding:12px;display:flex;box-shadow:0 8px 28px #0000002e}.auth__qr-frame img{object-fit:contain;width:100%;height:100%;display:block}.auth__qr-placeholder{color:#6c7784;font-size:14px}.auth__qr-steps{color:var(--text-soft,#5d6a76);margin:0;padding-left:22px;font-size:15px;line-height:1.7}.auth__qr-steps li::marker{color:var(--accent,#2ecc8f);font-weight:700}.auth__qr-hint{text-align:center;color:var(--text-muted,#8b95a1);font-variant-numeric:tabular-nums;margin:0;font-size:13px}.auth__qr-refresh{font:inherit;color:var(--accent,#2ecc8f);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:0;font-size:13px;text-decoration:underline}.auth__qr-refresh:hover{opacity:.75}@media screen and (prefers-color-scheme:dark){.auth__qr-frame{box-shadow:0 8px 28px #0000008c}}.auth__oauth{border:1px solid var(--border,#e3e8ee);color:#fff;background:#fc3f1d;border-radius:12px;justify-content:center;align-items:center;gap:10px;width:100%;padding:14px 20px;font-size:15px;font-weight:600;text-decoration:none;transition:filter .15s,transform .1s;display:flex}.auth__oauth:hover{filter:brightness(1.08)}.auth__oauth:active{transform:translateY(1px)}.auth__oauth:focus-visible{outline:2px solid var(--accent,#2ecc8f);outline-offset:2px}.auth__oauth-icon{color:#fc3f1d;background:#fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:14px;font-weight:700;line-height:1;display:inline-flex}
