:root{--ink:#14222a;--muted:#52636b;--paper:#f5f8f7;--line:#d4dedc;--green:#006d59;--lime:#d4fa64;--navy:#152a34;--rose:#b23269;--mono:ui-monospace,SFMono-Regular,Consolas,monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:6rem}body{margin:0;color:var(--ink);background:var(--paper);font-family:Inter,"Noto Sans JP","Hiragino Kaku Gothic ProN",Meiryo,sans-serif;line-height:1.85;font-size:16px}a{color:var(--green);text-underline-offset:.25em}a:hover{text-decoration-thickness:2px}button,a{touch-action:manipulation}a:focus-visible,button:focus-visible,summary:focus-visible{outline:3px solid #d94908;outline-offset:5px}button{font:inherit}img{max-width:100%;display:block}h1,h2,h3,h4,p,figure{margin:0}h1,h2,h3{line-height:1.4;letter-spacing:-.025em}h1{font-size:clamp(2rem,4.1vw,3.7rem);font-weight:800}h2{font-size:clamp(1.55rem,2.3vw,2rem)}h3{font-size:1.25rem}p+p{margin-top:1rem}ul,ol{padding-left:1.4rem}li+li{margin-top:.4rem}.skip{position:fixed;left:1rem;top:-5rem;background:var(--lime);padding:.7rem;z-index:10}.skip:focus{top:1rem}.site-header{border-bottom:1px solid var(--line);background:#fff}.header-inner,.wrap{width:min(1160px,calc(100% - 64px));margin:auto}.header-inner{min-height:84px;display:flex;justify-content:space-between;gap:24px;align-items:center}.brand{font-weight:800;color:var(--ink);text-decoration:none;display:flex;gap:12px;align-items:center;line-height:1.25}.brand-icon{font-family:var(--mono);background:var(--green);color:var(--lime);font-size:22px;padding:9px 7px;letter-spacing:-3px}.brand small{display:block;font-weight:500;font-size:12px;letter-spacing:.11em;margin-top:6px}.header-inner nav{display:flex;gap:26px;align-items:center}.header-inner nav a{font-size:14px;color:var(--ink);text-decoration:none}.preview-label{font-size:12px;letter-spacing:.03em;background:#e8eeec;padding:4px 9px;border-radius:3px;white-space:nowrap}.intro{padding:48px 0 30px;display:grid;grid-template-columns:1.4fr 1fr;gap:38px;align-items:end}.eyebrow{color:var(--green);font-family:var(--mono);font-size:13px;font-weight:700;letter-spacing:.13em;margin-bottom:15px}.intro p{color:var(--muted);max-width:33em}.intro h1{font-size:clamp(2.05rem,3.2vw,3rem)}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin:28px 0 18px}.section-head .minor{font-size:14px;color:var(--muted)}.game-grid{display:grid;grid-template-columns:1fr 1fr;gap:28px}.game-card{background:#fff;border:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}.game-image{background:#192739;aspect-ratio:4/2.7;display:flex;align-items:center;justify-content:center;padding:18px 20px;border-bottom:1px solid var(--line)}.game-image img{height:100%;width:100%;object-fit:contain;image-rendering:pixelated}.game-copy{padding:26px 28px 28px;flex:1;display:flex;flex-direction:column}.meta{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:13px;letter-spacing:.04em;color:var(--muted);margin-bottom:12px}.tag{background:#edf2f0;color:var(--green);padding:2px 8px;font-weight:700}.game-card h3{font-size:1.75rem;margin-bottom:12px}.game-card p{color:var(--muted);margin-bottom:18px}.learn-tags{font-size:14px;margin:0 0 22px;display:flex;gap:7px 18px;flex-wrap:wrap;padding:0;list-style:none}.learn-tags li{margin:0}.learn-tags li:before{content:'＋';color:var(--green);margin-right:4px}.button{display:inline-flex;justify-content:center;align-items:center;gap:.5rem;min-height:46px;padding:10px 20px;border:1px solid var(--green);background:var(--green);color:white;text-decoration:none;font-weight:700;font-size:15px;border-radius:2px}.button:hover{background:#00523f;border-color:#00523f;text-decoration:none}.button.secondary{background:transparent;color:var(--green)}.button.secondary:hover{background:#edf6ee}.game-card .button{margin-top:auto;align-self:flex-start}.strip{margin:38px 0 0;background:var(--navy);color:white;padding:29px 34px;display:grid;grid-template-columns:1fr 1.8fr;gap:30px}.strip h2{font-size:1.5rem}.strip p{color:#d5e0e3}.strip a{color:var(--lime)}.flow{display:flex;gap:16px;list-style:none;padding:0;margin:20px 0}.flow li{flex:1;margin:0;border-top:3px solid var(--green);padding-top:10px;font-weight:700}.flow li span{display:block;font-size:13px;color:var(--muted);font-weight:400}.home-bottom{display:grid;grid-template-columns:1fr 1fr;gap:50px;margin:44px 0 52px}.home-bottom p{color:var(--muted);margin-top:14px}.newsletter{border-top:1px solid var(--line);margin-top:42px;padding:32px;background:#edf2f0}.newsletter h2{font-size:1.3rem}.newsletter p{font-size:15px;color:var(--muted);margin:12px 0 18px}.newsletter button{background:#dbe3df;border:1px solid #c4cfca;color:#53635e;padding:9px 16px;font-size:14px;cursor:not-allowed}.site-footer{margin-top:50px;border-top:1px solid var(--line);padding:28px 0 32px;font-size:13px;color:var(--muted)}.footer-inner{display:flex;justify-content:space-between;gap:24px}.footer-links{display:flex;gap:22px;flex-wrap:wrap}.breadcrumbs{font-size:13px;color:var(--muted);padding-top:25px;margin-bottom:25px}.breadcrumbs a{color:var(--muted)}.lesson-hero{display:grid;grid-template-columns:1.2fr 1fr;gap:42px;align-items:center;padding-bottom:32px;border-bottom:1px solid var(--line)}.lesson-hero h1{font-size:clamp(2.1rem,3.9vw,3.4rem);margin-bottom:20px}.lesson-hero .lead{color:var(--muted);font-size:17px}.lesson-hero figure{padding:16px;background:var(--navy)}.lesson-hero img{image-rendering:pixelated;width:100%;height:auto}.lesson-hero figcaption{font-size:12px;color:#d8e3e5;padding-top:9px;line-height:1.65}.inline-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}.content-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:52px;align-items:start;margin-top:36px}.toc{position:sticky;top:22px;font-size:14px;border-left:1px solid var(--line);padding-left:20px}.toc strong{display:block;font-size:12px;letter-spacing:.1em;color:var(--muted);margin-bottom:15px}.toc ol{list-style:none;padding:0;margin:0}.toc li{margin:0 0 12px}.toc a{color:var(--muted);text-decoration:none;display:block;line-height:1.65}.toc a:hover{color:var(--green)}.toc a.active{color:var(--green);font-weight:700}.toc .download-mini{display:block;border-top:1px solid var(--line);padding-top:15px;margin-top:20px}.article{min-width:0;max-width:860px}.article section{margin-bottom:52px;scroll-margin-top:25px}.article section>h2{margin-bottom:22px}.article h3{margin-top:26px;margin-bottom:12px}.article p{margin:12px 0}.note{padding:16px 20px;border-left:4px solid var(--green);background:#e9f3ed;color:#214d42;margin:24px 0;line-height:1.8}.note.warning{background:#fff4df;border-color:#d89a18;color:#6d4914}.note strong{display:block;margin-bottom:4px}.facts{display:grid;grid-template-columns:1fr 1fr;gap:18px;border:1px solid var(--line);padding:22px;background:#fff;margin:22px 0}.facts dt{font-size:13px;color:var(--muted)}.facts dd{margin:6px 0 0;font-weight:600}.codebox{position:relative;margin:18px 0;background:#132a34;border:1px solid #132a34;color:#e4edf2;border-radius:3px;overflow:hidden}.code-label{padding:9px 16px;border-bottom:1px solid #3d535d;font-size:12px;color:#b9cace;letter-spacing:.04em;font-family:var(--mono)}pre{font-family:var(--mono);font-size:14px;line-height:1.8;margin:0;overflow:auto;max-height:570px;padding:20px;tab-size:4}code{font-family:var(--mono)}p code,li code,dd code{font-size:.9em;padding:.15em .35em;background:#e6ecea;border-radius:3px;overflow-wrap:anywhere}.copy{position:absolute;top:5px;right:7px;font-size:12px;background:#2b444f;color:#e8f2f4;border:1px solid #58707b;padding:4px 9px;cursor:pointer}.copy:hover{background:#3a5662}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.steps-list{list-style:none;padding:0;margin:20px 0;counter-reset:item}.steps-list>li{position:relative;padding:0 0 24px 41px;margin:0;counter-increment:item}.steps-list>li:before{content:counter(item);position:absolute;left:0;top:0;width:27px;height:27px;border:1px solid var(--green);text-align:center;line-height:25px;color:var(--green);font:700 15px/25px var(--mono)}.steps-list h3{margin:0 0 7px}.steps-list p{margin-top:5px}.step-num{display:inline-block;font:700 12px var(--mono);letter-spacing:.12em;margin-bottom:10px;color:var(--green)}.chapter{border-top:1px solid var(--line);padding-top:28px}.chapter>h2{margin-top:0}.outcome{display:flex;gap:12px;background:#e9f3ed;padding:15px 18px;margin:18px 0}.outcome b{white-space:nowrap;font-size:14px;color:var(--green)}.outcome span{font-size:15px}.exercise{border:1px dashed #a4b7ad;padding:18px 22px;background:white;margin:22px 0}.exercise strong{font-size:14px;color:var(--green)}.exercise p{margin:6px 0 0}.subtle{color:var(--muted);font-size:14px}.download-row{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin:18px 0}.download-row a{font-size:14px;font-weight:600}details{border:1px solid var(--line);margin:17px 0;background:#fff}summary{cursor:pointer;padding:13px 16px;font-weight:600;font-size:15px}details>div{padding:0 17px 12px}details .codebox{margin-top:0}.diagram{background:#fff;border:1px solid var(--line);padding:20px;margin:23px 0}.diagram figcaption{font-size:13px;color:var(--muted);margin-top:12px}.turn-flow{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.turn-flow>div{padding:12px 14px;background:#edf3f0;border-top:3px solid var(--green)}.turn-flow b{font-size:14px}.turn-flow p{font-size:14px;margin:5px 0}.turn-flow code{font-size:13px}.comparison{width:100%;border-collapse:collapse;margin:20px 0;font-size:14px}.comparison th,.comparison td{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:12px 10px}.comparison th{background:#e8efeb}.table-wrap{overflow:auto}.finish{padding:28px;background:var(--navy);color:white;margin:34px 0}.finish h2{font-size:1.7rem}.finish p{color:#d3e1e4}.finish .button{background:var(--lime);border-color:var(--lime);color:var(--ink);margin-top:15px}.next-lesson{display:block;border:1px solid var(--line);padding:20px;margin-top:30px;text-decoration:none;background:white}.next-lesson small{display:block;color:var(--muted);font-size:13px}.next-lesson b{display:block;margin-top:3px;font-size:18px}.setup-page{max-width:870px;margin:0 auto;padding-bottom:20px}.setup-page h1{font-size:2.65rem}.setup-page .lead{color:var(--muted);margin:20px 0 35px}.no-js{padding:14px;background:#fff2d9}.review-chip{font-size:13px;color:#6c541a;background:#faf0d4;border:1px solid #e6d291;padding:10px 16px;margin-bottom:20px}
@media(max-width:950px){.header-inner,.wrap{width:calc(100% - 40px)}.intro{grid-template-columns:1fr;gap:18px}.content-layout{grid-template-columns:1fr;gap:25px}.toc{position:static;border:1px solid var(--line);padding:17px 20px}.toc ol{display:flex;gap:8px 23px;flex-wrap:wrap}.toc li{margin:0}.toc .download-mini{margin-top:12px;padding-top:10px}.lesson-hero{gap:25px}.header-inner nav{gap:16px}.turn-flow{gap:8px}.home-bottom{gap:25px}}
@media(max-width:650px){.header-inner,.wrap{width:calc(100% - 32px)}.header-inner{min-height:82px;gap:15px;flex-wrap:wrap;padding:15px 0}.header-inner nav{gap:18px;width:100%;justify-content:space-between}.header-inner nav a{font-size:13px}.brand small{font-size:11px}.preview-label{font-size:11px}.intro{padding-top:30px}.intro h1{font-size:2.1rem}.game-grid{grid-template-columns:1fr;gap:22px}.game-copy{padding:22px}.game-card h3{font-size:1.55rem}.game-image{aspect-ratio:4/2.9;padding:12px}.section-head{display:block}.section-head .minor{display:block;margin-top:7px}.strip{grid-template-columns:1fr;padding:24px;gap:16px}.home-bottom{grid-template-columns:1fr;margin-top:32px;gap:32px}.lesson-hero{grid-template-columns:1fr;gap:27px}.lesson-hero h1{font-size:2.1rem}.lesson-hero figure{max-width:490px}.lesson-hero .lead{font-size:16px}.inline-actions .button{flex:1;padding:10px 12px;font-size:14px}.content-layout{margin-top:24px}.facts{grid-template-columns:1fr;padding:18px;gap:14px}.article section{margin-bottom:40px}.article section>h2{font-size:1.5rem}.outcome{display:block}.outcome b{display:block;margin-bottom:6px}.turn-flow{grid-template-columns:1fr}.turn-flow>div{padding:12px 15px}.footer-inner{display:block}.footer-links{margin-top:13px;gap:15px}.newsletter{padding:24px 20px}.newsletter h2{font-size:1.2rem}.setup-page h1{font-size:2rem}.codebox pre{padding:16px;font-size:13px}.flow{gap:12px}.flow li{font-size:14px}.flow li span{font-size:12px}.finish{padding:23px}.facts dd code{overflow-wrap:anywhere}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.curriculum-status{display:flex;align-items:center;gap:22px;padding:18px 22px;border:1px solid var(--line);background:#e8f2ee;margin:15px 0 26px}.curriculum-status b{white-space:nowrap;color:var(--green)}.curriculum-status span{font-size:14px;color:var(--muted)}.web-play{border:1px solid var(--line);background:white;padding:25px}.game-frame:empty{display:none}.game-frame{margin:20px 0;background:var(--navy)}.game-frame iframe{display:block;width:100%;height:620px;max-height:85vh;border:0}.web-play button[hidden]{display:none}.game-status{min-height:1.5em}.web-play .inline-actions{gap:9px}.web-play .button{font-size:14px}@media(max-width:650px){.curriculum-status{display:block;padding:17px}.curriculum-status span{display:block;margin-top:8px}.web-play{padding:18px}.game-frame iframe{height:410px}}

.lesson-filter{margin:0 0 1.8rem;padding:1.25rem;border:1px solid var(--line);border-radius:12px;background:var(--paper)}
.lesson-filter label{display:block;font-weight:700;margin-bottom:.65rem}.filter-row{display:flex;gap:.75rem;flex-wrap:wrap}
#lesson-query{flex:1;min-width:12rem;padding:.8rem 1rem;border:1px solid var(--ink);border-radius:6px;background:#fff;color:var(--ink);font:inherit}
#lesson-query:focus-visible{outline:3px solid var(--green);outline-offset:3px}.lesson-filter .subtle{margin:.6rem 0 0}
.game-card[hidden],.lesson-filter[hidden],#lesson-empty[hidden]{display:none!important}
