:root{--bg:#fbf8f3;--paper:#fff;--ink:#1f1d1a;--muted:#5d5850;--line:#e7e1d7;--accent:#b4462c;--accent2:#1f4e79;--ochre:#c9962b;--sage:#5f7a5a;--r:14px;--max:1080px;
--serif:"Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;--sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.65 var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
img,svg{max-width:100%;height:auto;display:block}
a{color:var(--accent2);text-underline-offset:3px}
a:hover{color:var(--accent)}
h1,h2,h3{font-family:var(--serif);font-weight:600;line-height:1.2;letter-spacing:-.01em;margin:1.4em 0 .5em}
h1{font-size:clamp(2rem,6vw,3.3rem);margin-top:.4em}
h2{font-size:clamp(1.45rem,3.6vw,2rem)}
h3{font-size:1.2rem}
p{margin:.6em 0 1em}
.wrap{max-width:var(--max);margin:0 auto;padding:0 20px}
.skip{position:absolute;left:-999px}.skip:focus{left:10px;top:10px;background:#fff;padding:8px;z-index:99}
header.top{position:sticky;top:0;z-index:20;background:rgba(251,248,243,.94);backdrop-filter:saturate(1.2) blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.bar{display:flex;align-items:center;gap:14px;height:62px}
.logo{display:flex;align-items:center;gap:9px;font:600 1.3rem var(--serif);color:var(--ink);text-decoration:none;margin-right:auto}
.logo svg{width:30px;height:30px}
nav.main{display:flex;gap:4px}
nav.main a{color:var(--ink);text-decoration:none;padding:8px 11px;border-radius:9px;font-size:.95rem}
nav.main a:hover,nav.main a[aria-current]{background:#efe8dc;color:var(--ink)}
.sbox{display:flex}
.sbox input{width:150px;border:1px solid var(--line);background:#fff;border-radius:10px;padding:8px 11px;font:inherit;font-size:.92rem}
details.mnav{display:none}
@media (max-width:1100px){nav.main,.sbox{display:none}details.mnav{display:block}}
details.mnav summary{list-style:none;cursor:pointer;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:.95rem}
details.mnav summary::-webkit-details-marker{display:none}
details.mnav[open] .panel{position:absolute;left:0;right:0;top:62px;background:var(--bg);border-bottom:1px solid var(--line);padding:10px 20px 18px;box-shadow:0 12px 24px rgba(0,0,0,.06)}
.panel a{display:block;padding:11px 4px;border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none}
.panel form{margin-top:12px}.panel input{width:100%;padding:11px;border:1px solid var(--line);border-radius:10px;font:inherit}
.hero{padding:48px 0 26px;display:grid;gap:28px;align-items:center}
@media (min-width:860px){.hero{grid-template-columns:1.1fr .9fr;padding:72px 0 40px}}
.eyebrow{font-size:.8rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);font-weight:600}
.lead{font-size:1.15rem;color:var(--muted);max-width:40em}
.btn{display:inline-block;padding:12px 20px;border-radius:12px;background:var(--ink);color:#fff;text-decoration:none;font-weight:600;border:0;font:600 1rem var(--sans);cursor:pointer;transition:transform .15s,background .15s}
.btn:hover{background:#000;color:#fff;transform:translateY(-1px)}
.btn.ghost{background:transparent;color:var(--ink);border:1px solid var(--ink)}
.btn.ghost:hover{background:#efe8dc;color:var(--ink)}
.btn.small{padding:8px 14px;font-size:.9rem}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:20px;color:var(--ink);text-decoration:none;display:block;transition:border-color .15s,box-shadow .15s}
a.card:hover{border-color:#cdbfa9;box-shadow:0 6px 20px rgba(60,40,10,.06);color:var(--ink)}
.card h3{margin:.3em 0 .3em}.card p{color:var(--muted);margin:.2em 0;font-size:.95rem}
.card .ill{background:#f6f1e8;border-radius:10px;margin:-6px -6px 12px;padding:10px}
.tag{display:inline-block;font-size:.75rem;padding:2px 9px;border-radius:99px;background:#efe8dc;color:var(--muted);margin:2px 4px 2px 0}
section{padding:18px 0 30px}
.crumbs{font-size:.88rem;color:var(--muted);padding-top:18px}
.crumbs a{color:var(--muted)}
.lesson{display:grid;gap:28px}
@media (min-width:900px){.lesson{grid-template-columns:minmax(0,1fr) 300px}}
.lesson aside{align-self:start}
@media (min-width:900px){.lesson aside{position:sticky;top:80px}}
.toc a{display:block;padding:6px 10px;border-radius:8px;color:var(--ink);text-decoration:none;font-size:.93rem}
.toc a:hover{background:#efe8dc}.toc a.on{background:var(--ink);color:#fff}
ol.steps{counter-reset:s;list-style:none;padding:0}
ol.steps li{counter-increment:s;position:relative;padding:12px 0 12px 52px;border-bottom:1px solid var(--line)}
ol.steps li::before{content:counter(s);position:absolute;left:0;top:12px;width:36px;height:36px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;font:600 .95rem var(--serif)}
.note{background:#fff;border-left:4px solid var(--ochre);padding:14px 18px;border-radius:0 12px 12px 0;margin:18px 0}
.note.warn{border-color:var(--accent)}.note.ex{border-color:var(--sage)}
.figure{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px;margin:18px 0}
.figure figcaption{font-size:.85rem;color:var(--muted);margin-top:8px}
.pn{display:flex;justify-content:space-between;gap:12px;margin:30px 0}
.pn a{flex:1;max-width:48%}
.pn a.next{text-align:right;margin-left:auto}
table{border-collapse:collapse;width:100%;font-size:.95rem;background:#fff}
th,td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r)}
.tl{position:relative;padding-left:26px;border-left:2px solid var(--line);margin-left:8px}
.tl .ev{position:relative;padding:4px 0 22px}
.tl .ev::before{content:"";position:absolute;left:-34px;top:12px;width:12px;height:12px;border-radius:50%;background:var(--c,var(--accent));border:3px solid var(--bg)}
.tl .yr{font-size:.82rem;font-weight:600;color:var(--muted);letter-spacing:.04em}
.tl h3{margin:.1em 0 .3em}
.swatches{display:flex;height:18px;border-radius:6px;overflow:hidden;margin:10px 0}
.swatches span{flex:1}
.tool{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:20px}
label{font-size:.9rem;color:var(--muted);display:block;margin:6px 0 4px}
input[type=text],input[type=number],select{font:inherit;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);max-width:100%}
input[type=color]{width:64px;height:48px;border:1px solid var(--line);border-radius:10px;background:#fff;padding:3px;cursor:pointer}
input[type=range]{width:100%}
.sw{width:100%;aspect-ratio:2/1;border-radius:12px;border:1px solid var(--line)}
.two{display:grid;gap:18px}@media (min-width:760px){.two{grid-template-columns:1fr 1fr}}
.big{font:600 3.4rem/1 var(--serif);font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}
.res{padding:14px 0;border-bottom:1px solid var(--line)}
.res a{font-weight:600}.res p{margin:.2em 0;color:var(--muted);font-size:.93rem}
mark{background:#f6e3a6;padding:0 2px;border-radius:3px}
dl.gl dt{font:600 1.1rem var(--serif);margin-top:18px;scroll-margin-top:80px}
dl.gl dd{margin:4px 0 0;color:var(--ink)}
.az{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.az a{padding:4px 10px;border:1px solid var(--line);border-radius:8px;text-decoration:none;background:#fff;font-size:.9rem}
footer.foot{border-top:1px solid var(--line);margin-top:50px;padding:30px 0 40px;font-size:.92rem;color:var(--muted)}
footer.foot .cols{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
footer.foot a{color:var(--muted);text-decoration:none;display:block;padding:3px 0}
footer.foot a:hover{color:var(--accent)}
footer.foot .by{margin-top:24px;padding-top:16px;border-top:1px solid var(--line)}
footer.foot .by a{display:inline;color:var(--ink);font-weight:600}
h2[id],h3[id],section[id]{scroll-margin-top:80px}
.stage{position:relative;background:#f6f1e8;border-radius:12px;overflow:hidden;display:grid;place-items:center;min-height:280px}
.stage canvas{max-width:100%;height:auto;display:block}
/* ---- v2: book, gallery, lightbox, video, games, colour-in, courses */
html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.artgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin:18px 0}
.artgrid.gal{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
figure.art{margin:0;background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;display:flex;flex-direction:column}
figure.art[hidden]{display:none}
figure.art a.lb{display:block;position:relative;background:#efe8dc;cursor:zoom-in}
figure.art img{display:block;width:100%;height:auto;aspect-ratio:auto}
.gal figure.art img,.book .artgrid figure.art img{height:210px;object-fit:cover}
figure.art figcaption{padding:10px 12px 12px;font-size:.84rem;line-height:1.45;color:var(--muted)}
figure.art figcaption b{color:var(--ink)}
.cr{display:block;margin-top:4px;font-size:.78rem}.cr a{color:var(--accent2)}
.hsb{position:absolute;right:8px;bottom:8px;background:rgba(31,29,26,.78);color:#fff;font-size:.72rem;padding:3px 8px;border-radius:99px}
.hero-fig{max-width:460px;margin-left:auto}.hero-fig img{max-height:420px;object-fit:cover}
.filters{background:var(--bg);padding:10px 0;border-bottom:1px solid var(--line)}
.chips{display:flex;gap:6px;overflow-x:auto;padding:4px 0;scrollbar-width:thin}
.chip{flex:0 0 auto;border:1px solid var(--line);background:#fff;border-radius:99px;padding:6px 12px;font:inherit;font-size:.86rem;cursor:pointer;color:var(--ink)}
.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
/* lightbox */
html.lbx-open{overflow:hidden}
.lbx{position:fixed;inset:0;z-index:100;background:rgba(18,16,14,.96);display:flex;flex-direction:column;color:#eee}
.lbx[hidden]{display:none}
.lbx-stage{flex:1;position:relative;overflow:hidden;touch-action:none;cursor:zoom-in;user-select:none}
.lbx.zoomed .lbx-stage{cursor:grab}
.lbx-wrap{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}
.lbx-wrap img{width:100%;height:100%;display:block;pointer-events:none;-webkit-user-drag:none}
.lbx-hs{position:absolute;inset:0}
.hs{position:absolute;width:28px;height:28px;margin:0;border-radius:50%;border:2px solid #fff;background:var(--accent);color:#fff;font:600 13px/24px var(--sans);padding:0;cursor:pointer;transform:translate(-50%,-50%) scale(var(--is,1));box-shadow:0 0 0 3px rgba(0,0,0,.35)}
.hs.on{background:var(--accent2)}
.lbx-bar{position:absolute;top:10px;right:10px;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.lbx-bar button{min-width:40px;height:40px;border-radius:10px;border:1px solid rgba(255,255,255,.25);background:rgba(0,0,0,.55);color:#fff;font:600 16px var(--sans);cursor:pointer}
.lbx-bar button[hidden]{display:none}
.lbx-bar button[aria-pressed=false]{opacity:.6}
.lbx-cap{padding:10px 16px 14px;font-size:.86rem;line-height:1.45;max-height:22vh;overflow:auto;background:#141210}
.lbx-cap a{color:#9cc3e6}
.lbx-note{position:absolute;left:12px;right:12px;bottom:calc(22vh + 10px);max-width:520px;background:#fff;color:var(--ink);border-radius:12px;padding:12px 14px;font-size:.92rem;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.lbx-note[hidden]{display:none}
/* video */
.ytgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin:14px 0 6px}
.yt{margin:0}.yt iframe,.ytb{display:block;width:100%;aspect-ratio:16/9;border:0;border-radius:12px;background:#000}
.ytb{position:relative;padding:0;cursor:pointer;overflow:hidden}
.ytb img{width:100%;height:100%;object-fit:cover;display:block}
.ytb .play{position:absolute;left:50%;top:50%;width:64px;height:44px;margin:-22px 0 0 -32px;border-radius:12px;background:#d02a2a}
.ytb .play:after{content:"";position:absolute;left:26px;top:13px;border:9px solid transparent;border-left:15px solid #fff}
.ytb:hover .play,.ytb:focus-visible .play{background:#f00}
.ytc{font-size:.88rem;margin:6px 2px 0;line-height:1.35}
/* book */
.rp{position:fixed;left:0;right:0;top:0;height:3px;z-index:60;pointer-events:none}
.rp span{display:block;height:100%;background:var(--accent);transform-origin:0 0;transform:scaleX(0)}
.mtoc{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}.mtoc a{font-size:.85rem;border:1px solid var(--line);border-radius:99px;padding:4px 10px;text-decoration:none;color:var(--ink);background:#fff}
.btoc details{margin:6px 0}.btoc summary{cursor:pointer;font-weight:600;font-size:.92rem;padding:4px 0}
.btoc a{display:block;font-size:.88rem;padding:3px 8px}
@media (min-width:900px){.lesson.book aside{position:sticky;top:76px;max-height:calc(100vh - 90px);overflow:auto}}
ol.steps li,ul.tick li{margin:6px 0}
.nowrap{white-space:nowrap}
figure.diag{background:#fff}figure.diag svg{width:100%;height:auto;max-height:620px}
.chc .cimg,.course .cimg{margin:-18px -18px 12px;height:150px;overflow:hidden;border-radius:var(--r) var(--r) 0 0;background:#efe8dc}
.chc .cimg img,.course .cimg img{width:100%;height:100%;object-fit:cover;display:block}
.chc .ph{height:100%;display:grid;place-items:center;font:600 48px var(--serif);color:var(--muted)}
.bml{margin:6px 0 0;padding-left:18px}.linkbtn{border:0;background:none;color:var(--muted);cursor:pointer;font:inherit}
/* games */
.game{border-top:1px solid var(--line);padding-top:8px;margin-top:28px}
.gm{display:grid;gap:16px;grid-template-columns:1fr}@media (min-width:700px){.gm{grid-template-columns:200px 1fr}}
.sw{display:inline-block;width:26px;height:26px;border-radius:7px;border:1px solid rgba(0,0,0,.15);vertical-align:middle}
.big-sw{width:100%;height:160px;border-radius:var(--r)}
.opts{display:grid;gap:8px}.opts.col{grid-template-columns:1fr}
.opt{display:flex;align-items:center;gap:8px;text-align:left;border:1px solid var(--line);background:#fff;border-radius:12px;padding:10px 12px;font:inherit;cursor:pointer;color:var(--ink)}
.opt .res{margin-left:auto}.opt.right{border-color:#3d7a4a;box-shadow:0 0 0 2px #3d7a4a inset}.opt.wrong{border-color:#b4462c;box-shadow:0 0 0 2px #b4462c inset}
.opt:disabled{cursor:default;opacity:1}
.res-msg{min-height:1.4em;font-weight:600}.res-msg.good{color:#2f6b3c}.res-msg.bad{color:#a23b22}
.qz{display:grid;gap:16px}@media (min-width:700px){.qz{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
.qimg img{width:100%;height:auto;max-height:420px;object-fit:contain;background:#efe8dc;border-radius:var(--r)}
.pfigs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.pf{flex-direction:column;align-items:stretch}.pf svg{width:100%;height:auto;max-height:300px}.pfm{color:var(--muted)}
.vs{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.vsw{position:relative;height:90px;border-radius:12px;border:2px solid transparent;cursor:pointer;padding:0;overflow:hidden}
.vsw.sel{border-color:var(--ink);box-shadow:0 0 0 3px #fff inset}
.vsw .g{position:absolute;left:0;right:0;bottom:0;height:28px}
/* colour-in */
.ci{display:grid;gap:18px}@media (min-width:860px){.ci{grid-template-columns:260px 1fr}}
.ci select{width:100%;padding:8px;border:1px solid var(--line);border-radius:10px;font:inherit}
.pal{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.pc{aspect-ratio:1;border-radius:8px;border:1px solid rgba(0,0,0,.2);cursor:pointer;padding:0}
.pc.on{outline:3px solid var(--ink);outline-offset:2px}
.ci-stage{padding:0;background:#fff}.ci-stage svg{display:block;width:100%;height:auto;cursor:pointer;touch-action:manipulation}
/* courses */
.tag.soon{background:#e5eef6;color:var(--accent2)}
.wl{max-width:560px}.wl label{display:block;margin:12px 0 4px;font-weight:600;font-size:.92rem}
.wl input[type=email],.wl select{width:100%;padding:11px;border:1px solid var(--line);border-radius:10px;font:inherit}
.wl .chk{font-weight:400;display:flex;gap:8px;align-items:flex-start;margin:14px 0}
.wl .btn{margin-top:4px}.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.lesson>*{min-width:0}.tablewrap{overflow-x:auto}
@media (min-width:861px){.filters{position:sticky;top:62px;z-index:5}}
@media (max-width:600px){.artgrid.gal{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.gal figure.art img{height:150px}.gal figure.art figcaption{font-size:.76rem;padding:8px}}
