:root{--font-body:Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-heading:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-code:"SF Mono", "Fira Code", "Cascadia Code", monospace;--color-bg:#f7fbff;--color-surface:#fff;--color-text:#172033;--color-heading:#071527;--color-muted:#53647c;--color-border:#c8d7ea;--color-panel:#eaf3ff;--color-primary:#0f6fbd;--color-primary-hover:#084f8c;--color-success:#138a36;--color-error:#b42318;--color-warning:#b65c00;--color-chat:#0f6fbd;--color-file:#b65c00;--color-video:#138a36;--focus-ring:3px solid #ffbf47;--radius:12px;--space:1.25rem;--content-width:920px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-body);color:var(--color-text);background:radial-gradient(circle at top left, #dff0ff 0, var(--color-bg) 38rem);padding:var(--space);max-width:var(--content-width);accent-color:var(--color-primary);margin:0 auto;line-height:1.65}main,.course-card,.demo-panel,.callout,.exercise,knowledge-check,.source-code{border:1px solid var(--color-border);border-radius:var(--radius);background:#ffffffeb;box-shadow:0 10px 28px #07152712}main{padding:clamp(1rem,3vw,2rem)}h1,h2,h3,h4{font-family:var(--font-heading);color:var(--color-heading);line-height:1.25}h1{letter-spacing:-.04em;margin-bottom:.5rem;font-size:clamp(2rem,5vw,3.2rem)}h2{margin-top:2.4rem;margin-bottom:.75rem;font-size:1.45rem}h3{margin-top:1.2rem;margin-bottom:.5rem;font-size:1.1rem}p,ul,ol,figure,table{margin-bottom:1rem}ul,ol{padding-left:1.4rem}a{color:var(--color-primary);font-weight:650}a:focus-visible,button:focus-visible,input:focus-visible{outline:var(--focus-ring);outline-offset:3px}code,pre{font-family:var(--font-code);font-size:.93em}pre{color:#eaf3ff;border-radius:var(--radius);background:#102033;padding:1rem;overflow-x:auto}.lesson-meta{color:var(--color-muted);margin-bottom:.25rem;font-size:.95rem}.subtitle{color:var(--color-muted);max-width:68ch;font-size:1.15rem}.lesson-nav{border-top:1px solid var(--color-border);justify-content:space-between;gap:1rem;margin-top:3rem;padding-top:1rem;display:flex}.nav-prev-next{gap:1rem;margin-left:auto;display:flex}.lesson-nav a{justify-content:center;align-items:center;min-height:44px;display:inline-flex}@media (width<=520px){.lesson-nav{grid-template-columns:repeat(3,minmax(44px,1fr));align-items:center;gap:.55rem;display:grid}.nav-prev-next{display:contents}.lesson-nav a{border:1px solid var(--color-border);background:var(--color-surface);border-radius:999px;min-width:44px;min-height:44px;padding:.5rem;font-size:1.15rem;text-decoration:none}.lesson-nav .nav-label{clip:rect(0,0,0,0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.lesson-nav a:hover{background:var(--color-panel)}}.course-card,.callout,.exercise,knowledge-check,.source-code{margin:1rem 0;padding:1rem}knowledge-check{display:block}.callout{background:#eef7ff;border-color:#9fc7ef}.pro-tip{background:#fff6e9;border-color:#e6a85a}.exercise{background:#eefbf1;border-color:#8bcf9d}.demo-panels{grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);align-items:stretch;gap:1rem;display:grid}@media (width<=780px){.demo-panels{grid-template-columns:1fr}}.demo-panel{padding:1rem;overflow:scroll hidden}.demo-panel h3{margin-top:0}.demo-svg svg{width:100%;height:auto;min-height:260px;display:block}.road{fill:#d9e8f7;stroke:#7aa7d6;stroke-width:2px}.frame{transition:transform .45s,opacity .2s}.frame rect{stroke:#071527;stroke-width:1.5px}.frame.chat rect,.chip.chat{fill:#cfe7ff}.frame.file rect,.chip.file{fill:#ffe0b8}.frame.video rect,.chip.video{fill:#cbf2d5}.frame.web rect,.chip.web{fill:#d8ecff}.frame.db rect,.chip.db{fill:#e6dcff}.frame.dns rect,.chip.dns{fill:#d8f7e2}.frame.drop rect,.chip.drop{fill:#ffd6d1}.frame text{font:12px var(--font-code);fill:#071527;font-weight:700}.endpoint{fill:#fff;stroke:#0f6fbd;stroke-width:2px}.endpoint-label{font:700 14px var(--font-body);fill:#071527}.chip{color:#071527;font-family:var(--font-code);border:1px solid #071527;border-radius:999px;padding:.1rem .45rem;font-size:.78rem;font-weight:700;display:inline-block}.controls{flex-wrap:wrap;align-items:center;gap:.6rem;margin:.75rem 0 1rem;display:flex}button{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);cursor:pointer;border-radius:999px;padding:.55rem .9rem;font-family:inherit;font-size:.95rem;font-weight:700}button:hover:not(:disabled){background:var(--color-panel)}button:disabled{cursor:not-allowed;opacity:.5}button.primary{background:var(--color-primary);border-color:var(--color-primary);color:#fff}button.primary:hover:not(:disabled){background:var(--color-primary-hover)}.connection-indicator{border:1px solid var(--color-border);color:var(--color-heading);background:#fff6e9;border-radius:999px;align-items:center;gap:.45rem;padding:.4rem .7rem;font-weight:800;display:inline-flex}.connection-indicator:before{content:"";background:var(--color-warning);border-radius:999px;width:.65rem;height:.65rem;box-shadow:0 0 0 3px #b65c001f}.connection-indicator[data-state=connected]{background:#eefbf1;border-color:#8bcf9d}.connection-indicator[data-state=connected]:before{background:var(--color-success);box-shadow:0 0 0 3px #138a3624}.connection-indicator[data-state=error]{background:#fff0ee;border-color:#efaaa3}.connection-indicator[data-state=error]:before{background:var(--color-error);box-shadow:0 0 0 3px #b4231824}.channel-form{border:1px solid var(--color-border);border-radius:var(--radius);background:#f8fbff;grid-template-columns:minmax(220px,1fr) auto;align-items:end;gap:.85rem;margin:1rem 0;padding:.9rem;display:grid}.channel-form-field{min-width:0}.channel-form label{margin-top:0}.channel-form input{width:100%;padding:.55rem .9rem}@media (width<=640px){.channel-form{grid-template-columns:1fr}}.media-timeline{border:1px solid var(--color-border);border-radius:var(--radius);background:#f8fbff;gap:.7rem;margin:1rem 0;padding:.85rem;display:grid}.media-axis{color:var(--color-muted);font-family:var(--font-code);grid-template-columns:4.5rem 1fr;gap:.6rem;font-size:.78rem;display:grid}.media-axis-line{justify-content:space-between;padding-inline:.2rem;display:flex}.media-track{grid-template-columns:4.5rem 1fr;align-items:center;gap:.6rem;display:grid}.media-track-label{color:var(--color-heading);font-weight:800}.media-track-line{border:1px solid var(--color-border);background:linear-gradient(90deg,#eaf3ff 0 1px,#0000 1px) 0 0/25% 100%,#fff;border-radius:999px;min-height:2.6rem;position:relative}.media-dot{font-family:var(--font-code);background:var(--color-panel);border:1px solid #071527;border-radius:999px;padding:.22rem .52rem;font-size:.78rem;font-weight:800;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0715271f}.media-dot.played{outline:3px solid var(--color-success);background:#eefbf1}.event-log,.demo-log{color:#eaf3ff;border-radius:var(--radius);background:#102033;max-height:220px;padding:.75rem;font-size:.9rem;overflow-y:auto}.event-log div+div{margin-top:.35rem}table{border-collapse:collapse;background:var(--color-surface);width:100%}caption{text-align:left;color:var(--color-heading);margin-bottom:.35rem;font-weight:800}th,td{text-align:left;border-bottom:1px solid var(--color-border);vertical-align:top;padding:.55rem}th{font-weight:800}.knowledge-feedback{margin-top:.5rem;font-weight:800}fieldset{border:0;margin:0;padding:0}legend{color:var(--color-heading);margin-bottom:.85rem;padding:0;font-size:1.1rem;font-weight:850}label{color:var(--color-heading);margin:.4rem 0;font-weight:750;display:block}knowledge-check label{border:1px solid var(--color-border);border-radius:var(--radius);cursor:pointer;min-height:48px;color:var(--color-text);background:#f8fbff;align-items:flex-start;gap:.7rem;margin:.55rem 0;padding:.7rem .85rem;font-weight:500;display:flex}knowledge-check label:hover{background:var(--color-panel)}input[type=radio]{flex:none;width:1.15rem;height:1.15rem;margin-top:.2rem}textarea,input[type=text]{border:1px solid var(--color-border);border-radius:var(--radius);width:100%;font:inherit;color:var(--color-text);background:var(--color-surface);padding:.65rem}textarea{resize:vertical;min-height:6rem}.worksheet-grid{gap:1rem;display:grid}.print-note{color:var(--color-muted);font-size:.95rem}.pattern-callout{background:#fff6e9;border-color:#e6a85a}.pattern-callout strong{color:#7a3d00}.saved-status{color:var(--color-muted);align-items:center;gap:.45rem;margin:.5rem 0 1rem;font-size:.95rem;display:inline-flex}@media print{body{color:#000;background:#fff;max-width:none}main,.course-card,.callout,.exercise,knowledge-check,.source-code{box-shadow:none}.lesson-nav,.controls,.print-note{display:none}}.source-code figcaption{font-family:var(--font-code);color:var(--color-muted);margin-bottom:.25rem;font-size:.85rem}.source-code pre{max-height:420px;overflow-y:auto}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;position:absolute;overflow:hidden}@view-transition{navigation:auto}@media (prefers-reduced-motion:no-preference){::view-transition-group(root){animation-duration:.52s;animation-timing-function:cubic-bezier(.22,1,.36,1)}::view-transition-old(root){animation:.3s cubic-bezier(.55,0,1,.45) both lesson-page-out}::view-transition-new(root){animation:.52s cubic-bezier(.22,1,.36,1) both lesson-page-in}}@keyframes lesson-page-out{to{opacity:0;filter:blur(2px);transform:translate(-2rem)scale(.98)}}@keyframes lesson-page-in{0%{opacity:0;filter:blur(2px);transform:translate(2rem)scale(.98)}}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}::view-transition-group(root){animation:none!important}}