@charset "UTF-8";:root{--paper: #f4f1ea;--paper-2: #ede9e0;--surface: #fbfaf6;--surface-2: #f1ede4;--ink: #1a1916;--ink-soft: #34322c;--muted: #6f6a60;--faint: #9c968a;--line: rgba(26, 25, 22, .16);--line-soft: rgba(26, 25, 22, .08);--accent: #0f5150;--accent-deep: #0a3c3b;--accent-soft: rgba(15, 81, 80, .1);--ok: #2f6b4f;--ok-soft: rgba(47, 107, 79, .12);--err: #9a3b2e;--err-soft: rgba(154, 59, 46, .12);--warn: #8a6d1f;--editor-bg: #1c1b18;--editor-ink: #efe9db;--editor-line: rgba(239, 233, 219, .14);--maxw: 1180px;--nav-h: 64px;--radius: 12px;--radius-sm: 8px;--serif: "Instrument Serif", Georgia, "Times New Roman", serif;--sans: "Inter", system-ui, -apple-system, sans-serif;--mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", monospace}*{box-sizing:border-box}html,body{height:100%}html{scrollbar-gutter:stable}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4{font-family:var(--serif);font-weight:400;letter-spacing:-.01em;line-height:1.08;margin:0 0 .4em}h1{font-size:clamp(2.2rem,5vw,3.4rem)}h2{font-size:clamp(1.6rem,3.4vw,2.3rem)}h3{font-size:clamp(1.25rem,2.4vw,1.5rem)}p{margin:0 0 1rem}a{color:inherit}::selection{background:var(--accent);color:var(--paper)}.container{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:clamp(18px,4vw,48px)}.section{padding-block:clamp(40px,7vw,88px)}.label{font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}.muted{color:var(--muted)}.faint{color:var(--faint)}.mono{font-family:var(--mono)}.serif{font-family:var(--serif)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-family:var(--sans);font-size:.95rem;font-weight:500;line-height:1;padding:.7rem 1.1rem;border-radius:var(--radius-sm);border:1px solid var(--line);background:transparent;color:var(--ink);cursor:pointer;text-decoration:none;transition:background .18s ease,border-color .18s ease,color .18s ease,transform .05s ease}.btn:hover{background:var(--surface-2);border-color:var(--muted)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--solid{background:var(--ink);color:var(--paper);border-color:var(--ink)}.btn--solid:hover{background:var(--accent-deep);border-color:var(--accent-deep);color:var(--paper)}.btn--accent{background:var(--accent);color:var(--paper);border-color:var(--accent)}.btn--accent:hover{background:var(--accent-deep);border-color:var(--accent-deep)}.btn--ghost{border-color:transparent}.btn--ghost:hover{background:var(--surface-2)}.btn--sm{padding:.45rem .75rem;font-size:.85rem}.btn--block{width:100%}.btn--disabled{opacity:.5;pointer-events:none}.btn--locked{opacity:.5;cursor:not-allowed}.field{display:block;margin-bottom:1rem}.field>label{display:block;font-size:.82rem;font-weight:500;color:var(--ink-soft);margin-bottom:.35rem}.input{width:100%;font-family:var(--sans);font-size:.98rem;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:.65rem .8rem;transition:border-color .18s ease,box-shadow .18s ease}.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.input::placeholder{color:var(--faint)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:clamp(18px,3vw,28px)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.tag{display:inline-flex;align-items:center;gap:.35rem;font-family:var(--mono);font-size:.72rem;letter-spacing:.02em;padding:.2rem .5rem;border-radius:999px;border:1px solid var(--line);color:var(--muted)}.tag--ok{color:var(--ok);border-color:var(--ok-soft);background:var(--ok-soft)}.tag--err{color:var(--err);border-color:var(--err-soft);background:var(--err-soft)}.tag--accent{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft)}.alert{border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.9rem;border:1px solid var(--line)}.alert--err{color:var(--err);background:var(--err-soft);border-color:var(--err-soft)}.alert--ok{color:var(--ok);background:var(--ok-soft);border-color:var(--ok-soft)}.sqltable{border-collapse:collapse;margin:.6rem 0 .9rem;font-family:var(--mono);font-size:.84rem;background:var(--surface)}.sqltable caption{caption-side:top;text-align:left;font-family:var(--mono);font-size:.72rem;letter-spacing:.04em;color:var(--muted);margin-bottom:.3rem}.sqltable th,.sqltable td{border:1px solid var(--line);padding:.28rem .7rem;text-align:left;color:var(--ink-soft);white-space:nowrap}.sqltable th{background:var(--surface-2);font-weight:600;color:var(--ink)}.hr{height:1px;background:var(--line);border:0;margin:0}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}@media print{@page{margin:1.7cm}.topbar,.no-print{display:none!important}body{background:#fff;color:var(--ink);-webkit-print-color-adjust:exact;print-color-adjust:exact}.section{padding-block:0}.container{max-width:none;padding-inline:0}.sample{background:#f6f3ec!important;color:#1a1916!important;border:1px solid #d8d2c4!important;white-space:pre-wrap!important;word-break:break-word}.diagram{background:#fff!important;border:1px solid #d8d2c4!important;break-inside:avoid}.course__step{break-inside:avoid}h1,h2,h3,.course__lesson-title{break-after:avoid}.sqltable{break-inside:avoid}.sqltable th{background:#f1ede4!important}}
