:root{color-scheme:light;--ink:#172f34;--muted:#617477;--green:#08796d;--line:#dce5e1;--paper:#f4f5ef;--panel:#fff}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.65 'Segoe UI','Microsoft YaHei',sans-serif}header{padding:22px 5%;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:#fafbf6;gap:20px}.brand{display:flex;gap:12px;align-items:center;font-size:19px;font-weight:700}.brandmark{display:grid;place-items:center;background:var(--green);color:white;width:42px;height:42px;border-radius:12px;font-size:28px}small{display:block;font-size:10px;letter-spacing:1.8px;color:var(--muted)}a{color:var(--green);text-decoration:none}a:hover{text-decoration:underline}main{max-width:1450px;margin:auto;padding:0 5%}.intro{display:flex;justify-content:space-between;align-items:center;padding:45px 0 36px;gap:20px}.eyebrow{font-size:12px;letter-spacing:1.5px;color:var(--green);font-weight:700}h1{font-size:42px;line-height:1.24;margin:12px 0 17px;letter-spacing:-1.3px}em{font-style:normal;color:var(--green)}.intro p{margin:0;color:var(--muted)}.intro-note{width:240px;border-left:1px solid var(--line);padding-left:36px}.intro-note b{font-size:66px;font-weight:500;line-height:1.2;display:block}.intro-note span{color:var(--muted);font-size:13px}hr{border:0;border-top:1px solid var(--line);margin:18px 0}.workspace{display:grid;grid-template-columns:210px minmax(0,1fr);gap:24px;align-items:start}nav{display:grid;gap:5px;position:sticky;top:15px}nav button{display:flex;align-items:center;text-align:left;gap:11px;padding:12px;background:transparent;border:1px solid transparent;color:var(--muted);font-size:14px}nav button span{font:12px Consolas,monospace;opacity:.65}nav button[aria-selected=true]{background:#e2eee7;border-color:#c6ddcf;color:var(--green);font-weight:700}.experiment{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:26px;min-width:0}.exp-heading{display:flex;justify-content:space-between;align-items:center;gap:15px}h2{margin:4px 0 0;font-size:26px}#description{color:var(--muted);margin:12px 0 20px}.controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}.control{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.control label{font-size:13px}.control input[type=range]{width:100px;accent-color:var(--green)}output{min-width:25px;font-size:12px;font-variant-numeric:tabular-nums}button,select{font:inherit;font-size:13px;padding:8px 12px;background:#f4f7f3;border:1px solid #d2ded7;border-radius:8px;color:var(--ink);cursor:pointer}button:hover{background:#e1ede6}button.primary{background:var(--green);border-color:var(--green);color:#fff}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #efa75c;outline-offset:2px}#stage{position:relative;overflow:hidden;background:#101f2b;border-radius:12px}canvas{display:block;width:100%;height:auto;touch-action:none}#overlay{position:absolute;inset:0;pointer-events:none}#overlay>*{pointer-events:auto}#status{padding:14px 0;font-size:14px;font-weight:500;color:var(--green);min-height:51px}.learn{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;border-top:1px solid var(--line);padding-top:13px}.learn h3{font-size:13px;margin:0 0 7px}.learn p,details p{font-size:13px;color:var(--muted);margin:0}details{border-top:1px solid var(--line);margin-top:20px;padding-top:14px}summary{cursor:pointer;font-size:13px;color:var(--green)}details p{margin-top:9px}footer{font-size:12px;color:var(--muted);padding:28px 0 36px}.piano{position:absolute;bottom:9%;left:5%;width:90%;height:36%;display:flex}.piano button{flex:1;border-radius:0 0 5px 5px;background:#f4f1e5;color:#22353d;position:relative;display:flex;justify-content:center;align-items:end;padding-bottom:10px;font-size:14px;min-width:0}.piano button.active{background:#7de6cd}.piano button.black{position:absolute;top:0;height:60%;width:6.5%;background:#24303b;color:#fff;z-index:2;border-radius:0 0 4px 4px;align-items:end}.piano button.black.active{background:#0d9d83}.fibgrid{position:absolute;top:7%;left:7%;width:44%;height:85%;display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:10px;background:#243644;border-radius:12px}.fibgrid div{background:#354857;border-radius:7px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:clamp(14px,2.5vw,28px);color:#fff}.fibside{position:absolute;left:57%;top:20%;right:5%;color:#d4e4e3}.fibside b{font-size:clamp(16px,2.7vw,35px);display:block}.fibside p{font-size:clamp(11px,1.4vw,16px)}.directions{display:flex;gap:5px;flex-wrap:wrap}.report{max-width:1080px;padding:45px 5%;margin:auto}.report h1{font-size:34px}.report h2{margin-top:32px}.report table{width:100%;border-collapse:collapse;background:white;font-size:13px}.report th,.report td{border-bottom:1px solid var(--line);padding:12px;text-align:left;vertical-align:top}.report pre{background:#172f34;color:#c6ebe2;padding:15px;overflow:auto;border-radius:8px}.report section{margin-top:30px}.report p,.report li{color:#445e61}.tablewrap{overflow:auto}@media(max-width:1000px){.workspace{grid-template-columns:170px minmax(0,1fr);gap:14px}.experiment{padding:18px}.learn{grid-template-columns:1fr;gap:12px}.intro{padding-top:30px}h1{font-size:35px}}@media(max-width:720px){main{padding:0 4%}.intro-note{display:none}.workspace{display:block}nav{position:static;grid-template-columns:repeat(2,1fr);margin-bottom:15px;gap:3px}nav button{padding:8px;font-size:12px}.experiment{padding:14px;border-radius:12px}header{padding:15px 4%;align-items:start}.brand{font-size:15px}.brand small{font-size:8px}header a{font-size:12px;white-space:nowrap}h1{font-size:32px}h2{font-size:21px}.intro{padding:25px 0}.fibgrid{gap:4px;padding:5px}.fibside{top:8%;left:56%}.piano button{font-size:11px;padding:2px}.fibside p{margin:5px 0}.directions button{padding:3px 7px}.controls{gap:7px}button{min-height:34px}}
:root .experiment[data-project="11"] .fibside p{line-height:1.45}
.fibgrid{touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab}
.fibgrid.is-dragging{cursor:grabbing}
.fibgrid div{pointer-events:none}
.header-links{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px 22px}
.briefing-main{max-width:1320px}
.brief-summary,.brief-route{margin:0 0 32px;padding:24px;border:1px solid var(--line);border-radius:16px;background:white}
.brief-summary h2,.brief-route h2{font-size:23px;margin:0 0 16px}
.brief-summary p,.brief-route p{color:var(--muted);margin:8px 0 14px}
.brief-columns{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.brief-columns h3{font-size:16px;margin:0 0 8px;color:var(--green)}
.brief-section-heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:35px 0 22px}
.brief-section-heading span{font-size:12px;color:var(--muted)}
.brief-projects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;margin-bottom:35px}
.brief-project{padding:22px;background:white;border:1px solid var(--line);border-radius:15px;min-width:0;scroll-margin-top:20px}
.brief-card-heading h3{margin:0;font-size:20px}.brief-tag{font-size:12px;color:var(--green)}
.brief-project img{width:100%;display:block;border-radius:8px;aspect-ratio:16/9;object-fit:cover;margin:14px 0 18px}
.brief-project p,.brief-project li{font-size:13px;color:var(--muted);margin:8px 0}.brief-project b{color:var(--ink)}
.brief-project ol,.leaderbrief ol{padding-left:22px}.brief-project ol{border-left:3px solid #cce1d4;padding-left:25px;margin:16px 0}
.brief-action{display:inline-block;background:var(--green);color:white;border-radius:8px;padding:8px 15px;margin-top:8px;font-size:13px}
.leaderbrief p,.leaderbrief li,.leaderbrief a{font-size:13px}.leaderbrief li{color:var(--muted);margin:6px 0}.leaderbrief a{display:block;margin-top:10px}
@media(max-width:720px){.brief-columns,.brief-projects{grid-template-columns:1fr}.brief-section-heading{display:block}.brief-summary,.brief-route,.brief-project{padding:17px}.header-links{gap:5px 10px}.header-links a{font-size:11px;white-space:normal}.brief-project img{object-fit:contain;background:#101f2b}.brief-card-heading h3{font-size:18px}}
.experiment[data-project="0"] #stage{background:#9bcbdf;border-radius:10px}
.experiment[data-project="0"] #canvas[hidden]{display:none}
#voxelcanvas{display:block;width:100%;height:auto;aspect-ratio:16/9;outline-offset:-4px;image-rendering:pixelated}
.voxelstats{position:absolute;top:15px;left:16px;display:grid;gap:3px;padding:10px 13px;color:white;background:#183324b8;font-size:12px;font-family:Consolas,'Microsoft YaHei',monospace;text-shadow:1px 2px #152f26;pointer-events:none!important}
.voxelstats b{font-size:14px;color:#f8e8b7;letter-spacing:1px}
.voxelcrosshair{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font:30px/1 monospace;color:white;text-shadow:0 1px 2px black;pointer-events:none!important}
.voxelhint{position:absolute;left:50%;bottom:92px;transform:translateX(-50%);padding:3px 10px;background:#11291b9e;color:white;font-size:11px;white-space:nowrap;pointer-events:none!important}
.voxelhotbar{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);display:flex;gap:3px;background:#152b23b5;padding:5px;border:2px solid #bcbaa3;max-width:97%}
.voxelhotbar button{position:relative;width:61px;height:63px;background:#606453ce;border:2px solid #8d9581;border-radius:0;padding:3px;color:white;display:grid;justify-items:center;align-content:center;gap:3px;text-shadow:1px 1px #202c23}
.voxelhotbar button[aria-pressed=true]{border-color:#fff1ad;background:#929079ce;box-shadow:0 0 0 1px #e0dcb3}
.voxelnumber{position:absolute;left:3px;top:0;font:11px Consolas,monospace;color:#e8eacf}
.voxelquantity{position:absolute;right:3px;top:1px;font:12px Consolas,monospace}
.voxelblock{display:block;width:25px;height:24px;background:var(--block-color);box-shadow:inset -6px -3px #0003,inset 0 6px #fff2;border:1px solid #2430208c;transform:skewY(-8deg)}
.voxelname{font-size:10px;white-space:nowrap}
.voxelsplash{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:linear-gradient(#081b1820,#081b1859);color:white;text-shadow:1px 2px #233526}
.voxelsplash[hidden]{display:none}
.voxelsplash b{font-size:28px;letter-spacing:2px}.voxelsplash span{font-size:14px}.voxelsplash small{color:#f6f5d7;letter-spacing:0;font-size:11px}
.voxelsplash button{background:#357543;border:2px solid #c4cda4;color:white;border-radius:0;padding:9px 34px;font-weight:700;font-size:17px;box-shadow:3px 3px #142e1cb3}
.voxelhand{position:absolute;bottom:14%;right:3%;width:13%;height:24%;transform:rotate(-24deg);pointer-events:none!important;opacity:.9}
.voxelhand div{width:100%;height:100%;background:linear-gradient(to right,#5d8cae 0 12%,#79a8c3 12% 75%,#4d7194 75%);border-top:28px solid #c6946c;border-right:15px solid #94744f;box-shadow:3px 3px #0002}
.voxeltouch{display:none}
@media(max-width:800px){.voxelhotbar button{width:45px;height:50px}.voxelstats{font-size:10px;top:8px;left:8px;padding:6px}.voxelstats b{font-size:11px}.voxelblock{width:19px;height:18px}.voxelname{font-size:9px}.voxelhint{bottom:77px;font-size:9px}.voxelsplash b{font-size:23px}.voxelsplash span{font-size:12px}}
@media(max-width:720px){#voxelcanvas{aspect-ratio:auto;height:350px}.voxelhotbar{bottom:8px;gap:2px;padding:3px}.voxelhotbar button{width:31px;height:44px;padding:2px}.voxelnumber,.voxelquantity{font-size:9px}.voxelname{font-size:7px}.voxelblock{width:15px;height:16px}.voxelhint{display:none}.voxelstats{max-width:90%;font-size:9px}.voxelsplash span{font-size:11px}.voxelsplash b{font-size:20px}.voxelsplash small{font-size:9px}.voxeltouch{display:flex;position:absolute;bottom:67px;left:10px;gap:3px}.voxeltouch button{background:#112f249e;color:white;border:1px solid #b8c8b8;padding:5px 10px;min-height:36px}.voxelhand{right:4%;bottom:21%;height:25%;width:16%}}
@media(max-width:720px){.experiment[data-project="11"] #stage{height:280px}.experiment[data-project="11"] canvas{height:280px}.experiment[data-project="11"] .fibside{top:12%}.experiment[data-project="11"] .fibside b{font-size:25px}.experiment[data-project="11"] .fibside p{font-size:11px;line-height:1.4}}
