@charset "UTF-8";
:root{color-scheme:light;--bg:#f7f9fc;--paper:#fff;--silver:#f1f5fa;--ink:#17243a;--muted:#53647b;--stroke:#dce5f1;--blue:#1169e7;--purple:#594acc;--teal:#0a9fba;--grad:linear-gradient(110deg,#1169e7 0%,#594acc 54%,#0a9fba 100%);--shadow:0 12px 38px rgba(20,42,78,.06);--scale:1;--header-h:104px}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:115px;overflow-x:clip}body{margin:0;background:var(--bg);color:var(--ink);font:calc(16px * var(--scale))/1.75 system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;overflow-x:clip;min-width:0}button,select,input{font:inherit}button{cursor:pointer}a{color:var(--blue)}a:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid #078fa9;outline-offset:3px}.skip{position:absolute;transform:translateY(-200%);background:#fff;color:#111;z-index:999;padding:8px 14px}.skip:focus{transform:translateY(0)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.icon-sprites{position:absolute;top:-999px;left:-999px}.ico{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none;vertical-align:middle}
.site-header{position:sticky;top:0;z-index:40;background:rgba(248,250,253,.97);border-bottom:1px solid var(--stroke);box-shadow:0 2px 14px rgba(20,40,70,.04)}.header-row{max-width:1560px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:5px 20px;min-width:0}.header-row.lower{padding-top:1px;padding-bottom:5px;gap:12px}.brand{display:inline-flex;align-items:center;text-decoration:none;color:var(--ink);min-width:145px;flex:none}.brand img{object-fit:contain;object-position:left center;width:172px;height:58px;max-width:100%}.brand-fallback{display:none;font-weight:850;letter-spacing:-.03em;background:var(--grad);background-clip:text;-webkit-background-clip:text;color:transparent;font-size:1.25rem}.brand img:not([src])+.brand-fallback{display:inline}.brand img.is-missing{display:none}.brand img.is-missing+.brand-fallback{display:inline}.header-buttons{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.header-buttons button,.translator button{border:1px solid var(--stroke);border-radius:8px;background:var(--paper);color:var(--ink);padding:4px 10px;line-height:1.5;font-weight:700;font-size:.78rem;min-height:33px}.header-buttons button:hover,.translator button:hover{border-color:var(--blue);color:var(--blue)}.header-buttons button:first-child{display:inline-flex;align-items:center;gap:5px}.top-nav{display:flex;align-items:center;gap:2px;flex-wrap:wrap;min-width:0}.top-nav a{font-weight:720;font-size:.77rem;text-decoration:none;color:var(--ink);padding:5px 8px;white-space:nowrap;border-radius:6px}.top-nav a:hover{color:var(--blue);background:var(--silver)}.translator{display:flex;align-items:center;gap:6px;white-space:nowrap;font-size:.73rem;min-width:0}.translator select{max-width:135px;padding:3px 6px;border:1px solid var(--stroke);border-radius:5px;background:var(--paper);color:var(--ink);height:32px}.translator label{color:var(--muted)}.google-label{color:var(--muted);font-size:.7rem}.translator button{color:var(--blue)}.mobile-menu{display:none}
.course-wrap{max-width:1550px;margin:0 auto;display:grid;grid-template-columns:minmax(250px,292px) minmax(0,1fr);gap:24px;padding:22px 22px 55px}.chapter-sidebar{position:sticky;top:114px;max-height:calc(100dvh - 127px);overflow-y:auto;background:var(--paper);border:1px solid var(--stroke);border-radius:11px;padding:12px;align-self:start;scrollbar-width:thin}.sidebar-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--stroke);padding:4px 3px 8px}.close-side{background:transparent;color:#c1273d;border:0;padding:3px}.chapter-sidebar .course-home{display:block;background:var(--grad);color:#fff;margin:11px 0;padding:9px 10px;border-radius:7px;text-decoration:none;font-weight:700;font-size:.84rem}.chapter-sidebar input{display:block;width:100%;height:38px;border:1px solid var(--stroke);background:var(--paper);color:var(--ink);padding:5px 8px;border-radius:6px}.search-count{color:var(--muted);font-size:.75rem;margin:7px 0 9px}.level-nav h3{font-size:.82rem;margin:14px 0 5px;padding:4px 6px;background:var(--silver);border-inline-start:3px solid var(--blue)}.chapter-item{display:grid;grid-template-columns:28px minmax(0,1fr);gap:8px;align-items:start;color:var(--ink);padding:7px 4px;text-decoration:none;border-bottom:1px solid var(--stroke);font-size:.79rem;line-height:1.45;overflow-wrap:anywhere}.chapter-item>span{color:var(--blue);font-size:.72rem;font-weight:800}.chapter-item:hover,.chapter-item.current{background:linear-gradient(100deg,rgba(24,100,236,.10),rgba(71,62,210,.08));color:var(--blue)}.chapter-item.current{font-weight:800;border-inline-start:3px solid var(--blue)}.hidden{display:none!important}.sidebar-hidden{grid-template-columns:minmax(0,1fr)}.sidebar-hidden>.chapter-sidebar{display:none}.reader{min-width:0}.breadcrumbs{display:flex;flex-wrap:wrap;gap:9px;font-size:.77rem;color:var(--muted);margin:5px 0 13px}.breadcrumbs a{text-decoration:none}.lesson-header,.panel{background:var(--paper);border:1px solid var(--stroke);border-radius:12px;box-shadow:var(--shadow)}.lesson-header{padding:22px 26px;border-top:5px solid var(--blue);border-image:var(--grad) 1}.eyebrow{font-size:.77rem;letter-spacing:.07em;text-transform:uppercase;font-weight:800;color:var(--blue)}h1{font-size:clamp(1.62rem,2.5vw,2.35rem);line-height:1.22;letter-spacing:-.025em;margin:10px 0}.subtitle{font-size:1.02rem;color:var(--muted);max-width:78ch}.meta-strip{display:flex;flex-wrap:wrap;gap:8px}.meta-strip span{font-size:.78rem;font-weight:700;padding:3px 8px;border-radius:5px;background:var(--silver);color:var(--ink)}.disclaimer{margin:14px 0;background:var(--silver);border-radius:8px;border:1px solid var(--stroke);color:var(--muted);font-size:.84rem}.disclaimer summary{padding:9px 13px;cursor:pointer;font-weight:800}.disclaimer div{padding:0 12px 12px}.lesson-parts{margin-top:14px}.lesson-part{background:var(--paper);border:1px solid var(--stroke);border-radius:10px;margin-bottom:10px;overflow:hidden}.lesson-part>summary{list-style:none;font-size:1rem;font-weight:850;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 18px;background:linear-gradient(110deg,rgba(17,105,231,.08),rgba(89,74,204,.055))}.lesson-part>summary::-webkit-details-marker{display:none}.lesson-part>summary svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;transition:transform .1s}.lesson-part[open]>summary svg{transform:rotate(180deg)}.part-body{padding:18px 22px}.part-body h3{line-height:1.4;margin:20px 0 9px;font-size:1.04rem}.part-body p,.part-body li{overflow-wrap:anywhere}.part-body .lead{font-size:1.03rem;font-weight:500}.part-body ul,.part-body ol{padding-inline-start:22px}.part-body li{margin:7px 0}.terms{display:grid;grid-template-columns:minmax(110px,170px) minmax(0,1fr);gap:3px 10px}.terms dt{font-weight:800;color:var(--blue)}.terms dd{margin:0 0 8px}.point-box,.checkpoint,.caution{padding:12px 16px;margin:10px 0;background:var(--silver);border-inline-start:4px solid var(--blue);border-radius:5px}.point-box>strong{color:var(--blue);font-size:.77rem;letter-spacing:.08em}.point-box p,.checkpoint p{margin:3px 0 0}.line-guide{display:grid;gap:8px;padding:0!important;list-style:none}.line-guide li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 12px;background:var(--silver);padding:10px;border-radius:6px}.line-guide li>span:last-child{grid-column:2}.line-badge{color:var(--blue);font-size:.74rem;font-weight:900}.line-guide code{background:var(--paper);padding:1px 5px;direction:ltr;text-align:left;unicode-bidi:isolate;overflow-wrap:anywhere}.code-case{margin:14px 0 22px;border:1px solid var(--stroke);border-radius:8px;overflow:hidden;background:var(--paper)}.case-heading{padding:9px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--silver)}.case-heading h3{margin:0;font-size:.98rem}.pill{font-size:.66rem;font-weight:800;color:var(--blue);white-space:nowrap}.code-bar,.output-head{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:.71rem;letter-spacing:.055em;font-weight:850;padding:6px 11px;background:#0b342e;color:#aee1c0}.code-bar button{color:#fff;border:1px solid #7cb89d;border-radius:4px;background:#1a574a;padding:3px 9px;font-size:.71rem}.code-case pre{margin:0;white-space:pre;overflow-x:auto;max-width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;tab-size:4;line-height:1.55;font-size:calc(.84rem * var(--scale));direction:ltr;text-align:left;unicode-bidi:isolate;padding:15px 14px}.syntax{background:#09291f;color:#f0f9e7}.output-head{background:#e7f5eb;color:#20663f;letter-spacing:0}.output{background:#f0faf3;color:#133e27;border-bottom:1px solid var(--stroke);min-height:30px}.code-explain{font-size:.9rem;margin:0!important;padding:11px 14px}.input-note{margin:10px 12px!important}.answer{border:1px solid var(--stroke);padding:8px 11px;border-radius:6px}.answer summary{cursor:pointer;font-weight:800}.prev-next{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:26px 0}.prev-next a{display:flex;align-items:center;justify-content:center;gap:5px;text-decoration:none;min-height:48px;background:var(--paper);border:1px solid var(--stroke);padding:10px;border-radius:8px;font-weight:800;font-size:.84rem;text-align:center}.prev-next a:last-child{background:var(--grad);color:#fff}.level-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:22px 0}.level-card{background:var(--paper);padding:14px;border:1px solid var(--stroke);border-radius:9px;text-decoration:none}.level-card:hover{border-color:var(--blue)}.level-card h2{font-size:1.05rem;margin:0 0 5px}.level-card p{color:var(--muted);font-size:.85rem;margin:0}.toc-groups{display:grid;gap:9px}.toc-group{border:1px solid var(--stroke);border-radius:8px;background:var(--paper);overflow:hidden}.toc-group h2{margin:0;font-size:1rem;padding:10px 15px;background:var(--silver)}.toc-group .toc-entries{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:0}.toc-entry{font-size:.85rem;padding:10px 12px;border-bottom:1px solid var(--stroke);text-decoration:none}.toc-entry:hover{background:var(--silver)}.specialization-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:13px}.special-card{border:1px solid var(--stroke);border-radius:9px;padding:15px;background:var(--paper)}.special-card h2{font-size:1.1rem;margin:0 0 7px}.special-card ul{font-size:.9rem}.footer{background:#f3f6fb;border-top:1px solid var(--stroke);padding:28px 24px 10px}.footer-inner{max-width:1500px;margin:auto;display:grid;grid-template-columns:1.1fr 1.9fr 1fr;gap:22px}.footer h2{font-size:1rem;margin:8px 0 11px}.footer-col p{font-size:.84rem;color:var(--muted)}.foot-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 10px}.foot-links a{text-decoration:none;font-size:.8rem;color:var(--ink)}.foot-links a:hover{color:var(--blue)}.socials{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px}.social-icon{display:grid;place-items:center;width:36px;height:36px;border:1px solid #b8cae1;background:var(--paper);border-radius:8px;color:#185ba4}.social-icon .ico{width:20px;height:20px}.social-icon:hover{color:#fff;background:var(--blue)}.promo-row{max-width:1500px;display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:24px auto 15px}.promo-link{text-decoration:none;padding:15px 18px;border-radius:8px;background:var(--grad);color:#fff;display:flex;flex-direction:column;gap:1px}.promo-link span{font-size:.83rem;color:#eaf1ff}.copybar{max-width:1500px;margin:auto;border-top:1px solid var(--stroke);display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:12px 0;font-size:.74rem;color:var(--muted)}.cookie{position:fixed;inset:auto 10px 10px 10px;margin:auto;max-width:760px;z-index:80;background:var(--paper);color:var(--ink);border:1px solid var(--stroke);box-shadow:0 10px 45px #0002;padding:14px 18px;border-radius:8px;display:none;gap:10px;align-items:center;justify-content:space-between}.cookie p{margin:0;font-size:.84rem;flex:1}.cookie button{white-space:nowrap;border-radius:5px;padding:6px 11px;background:var(--blue);color:#fff;border:0;font-size:.81rem}.cookie button.secondary{background:var(--silver);color:var(--ink)}.to-top{position:fixed;right:12px;bottom:15px;width:36px;height:36px;border:1px solid var(--stroke);background:var(--paper);color:var(--blue);display:grid;place-items:center;border-radius:6px;z-index:30}
html[data-theme=dark]{color-scheme:dark;--bg:#0d1730;--paper:#162543;--silver:#1c3054;--ink:#f2f6ff;--muted:#c5d1e6;--stroke:#31476a;--blue:#78c4ff;--shadow:0 12px 38px #0002}html[data-theme=dark] .site-header{background:rgba(19,33,58,.97)}html[data-theme=dark] .footer{background:#15233e}html[data-theme=dark] .output{background:#153b2f;color:#d9ffde}html[data-theme=dark] .output-head{background:#1c4f3b;color:#c7f7d7}html[data-theme=dark] .syntax{background:#071f18;color:#eaffeb}html[data-theme=dark] .promo-link{color:#fff}html[data-theme=dark] .line-guide code{color:var(--ink)}
[dir=rtl] .brand img{object-position:right center}[dir=rtl] .chapter-item{direction:rtl}[dir=rtl] .code-case pre,[dir=rtl] .line-guide code{direction:ltr;text-align:left}[dir=rtl] .to-top{right:auto;left:12px}
@media(max-width:1120px){.course-wrap{grid-template-columns:245px minmax(0,1fr);padding:14px 12px;gap:12px}.translator label{display:none}.header-row{padding-inline:10px}.top-nav a{font-size:.72rem;padding:5px 6px}}
@media(max-width:830px){:root{--header-h:104px}.site-header{position:sticky}.header-row{padding:4px 10px}.header-row.lower{display:block;padding:2px 9px 7px}.brand{min-width:0}.brand img{width:116px;height:42px}.header-buttons{gap:3px}.header-buttons button{min-height:31px;padding:3px 6px;font-size:.73rem}.header-buttons button:first-child span{display:none}.mobile-menu{display:inline-flex}.top-nav{display:none;position:fixed;top:var(--mobile-top,99px);inset-inline:0;background:var(--paper);border:1px solid var(--stroke);padding:8px;z-index:42;max-height:60dvh;overflow-y:auto;box-shadow:0 15px 25px #0002;display:none;grid-template-columns:repeat(3,minmax(0,1fr));gap:2px}.top-nav.is-open{display:grid}.top-nav a{font-size:.77rem}.translator{justify-content:flex-end;gap:5px}.translator select{width:120px}.translator button{min-height:27px;padding:2px 5px}.course-wrap{display:block;padding:10px 9px}.chapter-sidebar{display:none;position:fixed;top:var(--mobile-top,99px);left:0;right:0;width:min(88vw,360px);margin:0;bottom:0;max-height:calc(100dvh - var(--mobile-top,99px));border-radius:0 12px 0 0;z-index:41;box-shadow:0 20px 45px #0003}.chapter-sidebar.is-open{display:block}.footer-inner{grid-template-columns:1fr 1fr}.footer-col:first-child{grid-column:1/-1}.lesson-header{padding:16px}.part-body{padding:12px}.lesson-part>summary{padding:11px 13px;font-size:.92rem}}
@media(max-width:490px){.header-buttons button{padding:3px 5px}.translator .google-label{font-size:.62rem}.translator select{width:95px}.header-buttons .ico{width:15px;height:15px}.course-wrap{padding:7px}.foot-links{grid-template-columns:1fr}.footer-inner{grid-template-columns:1fr 1fr}.footer-col:first-child{grid-column:1/-1}.promo-row{grid-template-columns:1fr}.prev-next{grid-template-columns:1fr}.meta-strip span{font-size:.68rem}.line-guide li{grid-template-columns:1fr}.line-guide li>span:last-child{grid-column:auto}.terms{grid-template-columns:1fr}.cookie{display:none;flex-direction:column;align-items:stretch}.cookie p{font-size:.76rem}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}

/* 2026 reader refinements: two independent menus, compact navigation, real logo. */
    .brand img{width:180px;height:auto;aspect-ratio:480/220;object-fit:contain;max-width:100%}
    .brand-fallback{display:none!important}
    .footer .brand img{width:200px;max-width:100%;height:auto}
    .footer-inner{display:grid;grid-template-columns:minmax(200px,1.05fr) minmax(220px,1.3fr) minmax(200px,1fr);gap:24px}
    .prev-next{display:flex;justify-content:space-between;gap:8px;align-items:center}
    .prev-next a{padding:5px 11px!important;min-height:32px!important;min-width:96px!important;width:auto!important;max-width:160px!important;display:inline-flex!important;align-items:center;justify-content:center;gap:5px;font-size:.78rem!important;white-space:nowrap;border-radius:6px}
    .prev-next .ico{width:13px;height:13px}
    .lesson-header .meta-strip a,.pdf-download-note a{color:var(--blue);font-weight:700;text-decoration:underline;text-underline-offset:3px}
    .example-lines{margin:10px 0 0;background:var(--silver);padding:8px 12px;border-radius:7px}
    .example-lines summary{cursor:pointer;font-weight:700}
    .example-lines ol{padding-inline-start:20px;line-height:1.6}
    .example-lines li{margin:6px 0;overflow-wrap:anywhere}
    .example-lines code{font-size:.81rem;color:var(--ink)}
    .enhanced-example{margin-top:18px}
    .site-header .brand{flex-shrink:0}
    @media(max-width:830px){.brand img{width:126px;height:auto}.footer .brand img{width:175px}.footer-inner{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:530px){.brand img{width:105px;height:auto}.footer-inner{grid-template-columns:1fr}.footer-col:first-child{grid-column:auto}.prev-next{display:flex;flex-direction:row;justify-content:space-between}.prev-next a{min-width:86px!important;padding:4px 7px!important;font-size:.76rem!important}.meta-strip a{font-size:.76rem}}
    
/* Two three-bar buttons: chapter menu is gradient; website menu is neutral. */
#chapterToggle{background:linear-gradient(118deg,#076dd0,#1585ad,#2c985a);color:#fff;border:0}
#chapterToggle .ico{stroke:currentColor}

/* ETG 2026-11 sidebar layout fix: closed chapter navigation must release its
   grid track, so the reader occupies the available viewport width. */
@media (min-width:831px) {
  .course-wrap.sidebar-hidden {
    grid-template-columns: minmax(0, 1fr);
    width: 100%;
    max-width: none;
  }
  .course-wrap.sidebar-hidden > .reader {
    grid-column: 1 / -1;
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }
  .course-wrap.sidebar-hidden > .chapter-sidebar { display: none; }
}
@media (max-width:830px) {
  .course-wrap > .reader {
    display: block;
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }
}


/* ETG 2026-11-08 fix: no empty 292px track after chapter menu closes */
html body .course-wrap.sidebar-hidden,
html body .course-wrap[data-chapter-menu="closed"] {
  display:block !important;
  width:100% !important;
  max-width:1550px;
  min-width:0 !important;
  margin-inline:auto !important;
}
html body .course-wrap.sidebar-hidden > .chapter-sidebar,
html body .course-wrap[data-chapter-menu="closed"] > .chapter-sidebar {display:none!important}
html body .course-wrap.sidebar-hidden > .reader,
html body .course-wrap[data-chapter-menu="closed"] > .reader {
  display:block !important;
  width:100% !important;
  min-width:0 !important;
  max-width:none !important;
  grid-column:1 / -1 !important;
}
@media(max-width:830px){html body .course-wrap{display:block!important}html body .course-wrap>.reader{width:100%!important;min-width:0!important;max-width:none!important}}
html[dir="rtl"] .course-wrap>.reader{min-width:0}
