:root{--night:#101715;--paper:#fffdf8;--ink:#202b28;--muted:#59675f;--line:#dedfd6;--accent:#14664f;--body-size:18px;--sans:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--serif:Georgia,"Palatino Linotype",Palatino,"Times New Roman",serif;color-scheme:light}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--night);font-family:var(--serif);color:var(--ink);line-height:1.8}a{color:var(--accent);text-underline-offset:3px}button,input,summary,.book-header,.eyebrow,.chapter-number,.unit-number,.contents,.callout-label,.chapter-nav,.book-footer{font-family:var(--sans)}button,a,input,summary{touch-action:manipulation}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible{outline:3px solid #a5ca76;outline-offset:3px}.skip-link{position:fixed;left:12px;top:-60px;z-index:30;background:white;padding:10px}.skip-link:focus{top:12px}.book-header{position:sticky;top:0;z-index:10;background:rgba(16,23,21,.97);color:#eef4e8;border-bottom:1px solid #34413c;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:12px 26px;min-height:70px}.book-brand{color:#f2f5ea;text-decoration:none;font-size:16px;font-weight:700}.book-brand span{color:#9fce92}.header-links{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.header-links a,.header-links button{font-size:12px;color:#edf3e6;background:none;border:1px solid #526256;border-radius:6px;padding:7px 10px;text-decoration:none;cursor:pointer}.reading-progress{position:fixed;top:0;left:0;width:100%;height:3px;z-index:20;appearance:none;border:0;background:transparent}.reading-progress::-webkit-progress-bar{background:transparent}.reading-progress::-webkit-progress-value{background:#a6cd7d}.reading-progress::-moz-progress-bar{background:#a6cd7d}.book-layout{display:grid;grid-template-columns:280px minmax(0,1050px);max-width:1390px;margin:auto;gap:22px;padding:24px 20px 60px}.sidebar{position:sticky;top:94px;align-self:start;max-height:calc(100vh - 116px);overflow:auto;padding:8px 10px 20px 0;color:#d1dccc;font:13px/1.55 var(--sans);scrollbar-color:#526256 transparent}.sidebar h2{font-size:12px;text-transform:uppercase;letter-spacing:1.8px;color:#b8cbb1}.sidebar label{display:block;font-size:12px;margin-bottom:6px}.sidebar input{width:100%;font-size:13px;background:#1c2923;color:#eff3e6;border:1px solid #526256;border-radius:6px;padding:10px}.sidebar a{color:#cad8c6;text-decoration:none;display:block;padding:6px 8px;border-radius:4px}.sidebar a[aria-current="location"]{background:#2d4837;color:#e9f7da;border-left:3px solid #a5ca76}.sidebar details{margin:10px 0;border-bottom:1px solid #35443b;padding-bottom:7px}.sidebar summary{font-size:12px;cursor:pointer;color:#e4eadc;font-weight:650}.sidebar small{font-size:10px;display:block;color:#9db498;letter-spacing:.7px}.sidebar .toc-search-status{font-size:11px;color:#b7c7ae}.book{min-width:0;background:var(--paper);border-radius:5px;box-shadow:0 18px 65px #0005;padding:clamp(24px,5vw,72px);font-size:var(--body-size)}.book-cover{padding:5px 0 36px;border-bottom:double 4px var(--ink)}.eyebrow{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--accent);font-weight:750}.book-cover h1{font-size:clamp(36px,5vw,60px);font-weight:400;line-height:1.12;letter-spacing:-1.3px;margin:18px 0}.book-cover .standfirst{font-size:21px;line-height:1.6;color:var(--muted)}.cover-meta{font:12px var(--sans);display:flex;flex-wrap:wrap;gap:10px;color:var(--muted)}.cover-meta span{padding-right:10px;border-right:1px solid var(--line)}.unit-index{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:22px 0}.unit-index a{display:block;border:1px solid var(--line);padding:12px;color:var(--ink);text-decoration:none;font:12px/1.5 var(--sans);border-radius:5px}.unit-index a:hover{background:#edf3e8}.unit-index strong{display:block;color:var(--accent);font-size:10px;text-transform:uppercase;letter-spacing:1px;margin-bottom:5px}.contents{font-size:13px;margin:30px 0}.contents details{border-bottom:1px solid var(--line);padding:11px 0}.contents summary{cursor:pointer;font-weight:700}.contents ol{margin:10px 0;padding-left:26px;columns:2;column-gap:24px}.contents li{break-inside:avoid;margin:6px 0}.contents a{text-decoration:none}.unit{margin-top:65px;padding-top:28px;border-top:3px solid var(--accent)}.unit-number{font-size:11px;text-transform:uppercase;letter-spacing:2px;color:var(--accent);font-weight:750}.unit>h2{font-size:34px;line-height:1.25;font-weight:400;margin:10px 0 16px}.unit-deck{font-size:19px;color:var(--muted);font-style:italic}.chapter{padding:30px 0;border-bottom:1px solid var(--line);scroll-margin-top:90px}.chapter-number{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--accent)}.chapter h3{font-size:27px;line-height:1.3;font-weight:400;margin:10px 0 22px}.chapter h4{font-size:20px;line-height:1.5;margin:26px 0 9px}.chapter p{margin:12px 0}.chapter li+li{margin-top:8px}.chapter ol,.chapter ul{padding-left:25px}.chapter strong{font-weight:700}.callout{margin:23px 0;padding:16px 20px;border-left:4px solid #287252;background:#e9f3e9;border-radius:0 6px 6px 0;font-size:16px}.callout p{margin:7px 0}.callout-label{font-size:10px;text-transform:uppercase;letter-spacing:1.2px;font-weight:800;color:#23593f}.callout.method{background:#eaf1f8;border-color:#3e7096}.callout.method .callout-label{color:#315875}.callout.caution{background:#fff0dc;border-color:#ac7027}.callout.caution .callout-label{color:#805018}.callout.result{background:#f1eafa;border-color:#7c5ba6}.callout.result .callout-label{color:#65478a}.table-wrap{overflow:auto;margin:20px 0}table{width:100%;border-collapse:collapse;font:13px/1.6 var(--sans)}th,td{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:10px 9px}th{background:#edf1e8;font-size:11px}code{font:13px/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;padding:2px 4px;background:#eef0e8;overflow-wrap:anywhere}pre{overflow:auto;background:#eef0e8;padding:16px;border-radius:5px;font-size:13px;line-height:1.6}pre code{padding:0}.workflow{display:flex;flex-wrap:wrap;gap:6px;font:12px/1.6 var(--sans);margin:18px 0}.workflow span{padding:7px 10px;background:#eef2e8;border-radius:5px;border:1px solid var(--line)}.workflow span+span:before{content:'→ ';color:var(--accent)}figure{margin:25px 0}figure img{display:block;max-width:100%;height:auto;border:1px solid var(--line);border-radius:4px}figcaption{font-size:13px;line-height:1.6;color:var(--muted);margin-top:8px}.chapter-nav{display:flex;justify-content:space-between;gap:20px;margin-top:26px;font-size:11px}.chapter-nav a{max-width:47%;text-decoration:none}.chapter-nav a:last-child{text-align:right}.book-footer{font-size:12px;border-top:double 4px var(--ink);padding-top:25px;margin-top:55px;color:var(--muted)}.book.dark{--paper:#1c2722;--ink:#e9eadd;--muted:#b7c4b5;--line:#445448;--accent:#a2cf98;color-scheme:dark}.book.dark .callout{background:#223c2e}.book.dark .callout.method{background:#223749}.book.dark .callout.caution{background:#453623}.book.dark .callout.result{background:#392d48}.book.dark .callout-label{color:#b4d7b1}.book.dark .callout.caution .callout-label{color:#e8c18b}.book.dark .callout.method .callout-label{color:#a5c7e2}.book.dark .callout.result .callout-label{color:#cbb3e8}.book.dark th,.book.dark code,.book.dark pre,.book.dark .workflow span,.book.dark .unit-index a:hover{background:#29382e}.mobile-contents{display:none}[hidden]{display:none!important}@media(max-width:1050px){.book-layout{grid-template-columns:220px minmax(0,1fr);gap:14px;padding:15px}.book{padding:32px}.unit-index{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:760px){.book-layout{display:block;padding:12px 8px}.sidebar{position:static;max-height:none;padding:0 10px 16px}.sidebar nav{display:none}.sidebar input{max-width:100%}.sidebar .toc-search-status{display:none}.book{padding:28px 20px}.book-header{padding:10px 14px;align-items:flex-start}.header-links{justify-content:flex-end;gap:5px}.header-links a,.header-links button{padding:5px 7px;font-size:10px}.contents ol{columns:1}.book-cover .standfirst{font-size:18px}.unit>h2{font-size:29px}.chapter h3{font-size:25px}.unit-index{grid-template-columns:repeat(2,minmax(0,1fr))}.mobile-contents{display:block}.sidebar h2{margin:0 0 8px}}@media print{body{background:white}.book-header,.sidebar,.reading-progress,.chapter-nav,.header-links,.unit-index{display:none}.book-layout{display:block;padding:0}.book{padding:0;box-shadow:none;font-size:11pt}.unit{break-before:page}.chapter{break-inside:auto}.callout,figure,tr{break-inside:avoid}.contents details:not([open])>*{display:block}.contents ol{columns:1}a{color:inherit}.book.dark{--paper:white;--ink:black;--muted:#444;--line:#ccc;--accent:#164e35}}
/* Reviewer-first tutorials: light green navigation, plain opening, one chapter sequence. */
:root{--night:#edf5ec;--paper:#fffefa;--ink:#243b2d;--muted:#586b5d;--line:#d7e3d4;--accent:#28704b}
.book-header{background:rgba(228,242,224,.98);color:#23412b;border-bottom-color:#c5dac0}.book-brand{color:#23412b}.book-brand span{color:#397d45}.header-links a,.header-links button{color:#2b5736;border-color:#aacba5}.book-layout{max-width:1450px}.sidebar{color:#395a3c}.sidebar h2{color:#426e45}.sidebar label,.sidebar .toc-search-status{color:#536e52}.sidebar input{background:white;color:#243b2d;border-color:#b8cfb1}.sidebar a{color:#355637}.sidebar a:hover{background:#dcefd4}.sidebar a[aria-current="location"]{background:#d4eacb;color:#214c2c;border-left-color:#6da45b}.sidebar summary{color:#2f5b35}.sidebar details{border-bottom-color:#c9dcc2}.sidebar small{color:#5e7d56}.book{border:1px solid #d6e3cf;border-radius:12px;box-shadow:0 10px 32px #2440200a;padding-top:34px}.tutorial-title{font-size:42px;line-height:1.2;font-weight:400;margin:0 0 26px}.contents{margin-top:16px}.contents ol,.sidebar ol{list-style:none;padding-left:0}.sidebar li{margin:2px 0}.learning-routes{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.learning-routes a{font:600 11px var(--sans);text-transform:uppercase;letter-spacing:.6px;border:1px solid #b7d4ac;border-radius:6px;padding:10px 12px;text-decoration:none;background:#eef7e8;color:#2c6034}.unit{border-top-color:#a3c88f}.route-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:22px 0}.route-cards a{display:block;border:1px solid #bbd5af;border-radius:9px;padding:15px;background:#f2f8ed;text-decoration:none;font:13px/1.6 var(--sans)}.route-cards strong{display:block;margin-bottom:7px;color:#285f36}.route-cards span{color:#4b6650}.platform-diagram{padding:22px;border:1px solid #bfd7b2;background:#f2f8ed;border-radius:10px;text-align:center;font:13px/1.6 var(--sans);margin:24px 0}.diagram-heading{font-weight:750;color:#3c7042;margin-bottom:12px}.diagram-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.diagram-grid span{background:white;padding:10px 6px;border:1px solid #cfdfc7;border-radius:6px}.diagram-arrow{padding:12px;color:#4e7651}.diagram-core{display:block;padding:16px;border:1px solid #9bc38b;border-radius:8px;background:#dfefd5;color:#315f36}.diagram-optional{margin-top:16px;border-top:1px dashed #adc69f;padding-top:14px;color:#626040}.scientific-gallery{display:grid;grid-template-columns:1fr;gap:22px}.example-card{border:1px solid #d3e2cd;border-radius:10px;padding:20px;background:#fafcf7}.example-card h5{font-size:22px;line-height:1.4;margin:0 0 12px;font-weight:400}.capability-tags{display:flex;flex-wrap:wrap;gap:6px}.capability-tags span{font:11px var(--sans);border-radius:12px;padding:5px 9px;background:#e3f0d9;color:#39633a}.example-card p,.example-card li{font-size:15px}.route-button{display:inline-block;border:1px solid #a8c698;border-radius:6px;background:#dfefd6;padding:8px 12px;text-decoration:none;font:600 12px var(--sans);margin-right:8px}.live-preview{overflow:hidden;border:1px solid #d4dfcc;border-radius:6px;background:white}.live-preview iframe{width:100%;height:300px;border:0;background:white}.live-preview figcaption{padding:9px 12px;margin:0;border-top:1px solid #e1e7da;background:#f0f6eb}.guided-tour{margin:25px 0;padding:20px;background:#eaf2fb;border-left:4px solid #7b9cb9}.guided-tour h4{margin-top:0}@media(max-width:1050px){.route-cards{grid-template-columns:1fr}.diagram-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:760px){.book{padding:24px 20px}.tutorial-title{font-size:36px}.sidebar h2{color:#3e6a3e}.learning-routes a{font-size:10px;padding:8px}.live-preview iframe{height:240px}}@media print{.learning-routes,.live-preview iframe{display:none}.book{border:0}.example-card{break-inside:avoid}.platform-diagram,.route-cards{break-inside:avoid}}
