:root{--navy:#102b43;--navy2:#183f60;--teal:#087f72;--teal-soft:#dff4ef;--blue:#2468a7;--blue-soft:#e7f0fa;--amber:#b87416;--amber-soft:#fbefd9;--rose:#b84d5a;--rose-soft:#f9e8e9;--purple:#7051a6;--ink:#18251f;--sub:#61716a;--line:#d8ddd7;--paper:#f3f0e7;--card:#fffdf8;--terminal:#0b1714;--term:#d9eee7}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:Sarabun,sans-serif;line-height:1.65}.sitebar{max-width:1240px;margin:auto;padding:16px 24px;display:flex;justify-content:space-between}.sitebar a,footer a{color:var(--teal);text-decoration:none;font-weight:700}main{max-width:1240px;margin:auto;padding:0 24px 80px}.hero{display:grid;grid-template-columns:1fr 220px;gap:48px;align-items:end;padding:56px 0 44px;border-top:1px solid var(--line)}.eyebrow{margin:0 0 9px;color:var(--teal);font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.hero h1{font-size:clamp(43px,6.6vw,78px);line-height:.98;letter-spacing:-.04em;margin:0 0 20px;max-width:920px}.hero p{max-width:800px;color:var(--sub);font-size:18px;margin:0}.hero aside{border-left:1px solid var(--line);padding:20px 0 20px 30px}.hero aside span{display:block;color:var(--teal);font-size:12px;font-weight:800;letter-spacing:.12em}.hero aside strong{display:block;font:600 50px/1 'IBM Plex Mono',monospace;color:var(--navy)}.hero aside small{color:var(--sub)}.lab,.lesson{background:var(--card);border:1px solid #d9d3c5;border-radius:22px;padding:30px;margin-top:22px}.lab{box-shadow:0 16px 45px rgba(35,42,35,.08)}.section-head{display:flex;justify-content:space-between;align-items:end;gap:28px}.section-head h2{font-size:30px;line-height:1.15;margin:0}.section-head>p{max-width:470px;color:var(--sub);margin:0}.controls{display:flex;flex-wrap:wrap;gap:12px;align-items:end;margin:24px 0}.controls label{min-width:170px;flex:1}.controls span,.field-label{display:block;color:var(--teal);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;margin-bottom:5px}select,input,textarea,button{font:inherit}select,input,textarea{width:100%;padding:11px 12px;border:1px solid #cdd5cf;border-radius:9px;background:#fff;color:var(--ink)}button,.button{display:inline-block;border:1px solid #c8d1ca;border-radius:9px;padding:10px 15px;background:#fff;color:var(--teal);font-weight:800;cursor:pointer;text-decoration:none}button:hover,.button:hover{transform:translateY(-1px)}button.primary,.button.primary{background:var(--teal);border-color:var(--teal);color:#fff}.button-row{display:flex;gap:9px;flex-wrap:wrap;margin:16px 0}.stage{display:grid;grid-template-columns:repeat(var(--cols,5),minmax(110px,1fr));gap:26px;align-items:center;margin:28px 0;position:relative}.node{position:relative;min-height:118px;padding:16px 12px;border-radius:14px;background:#f5f7f2;border:1px solid var(--line);text-align:center;display:flex;flex-direction:column;justify-content:center;transition:.25s}.node:after{content:"→";position:absolute;right:-23px;top:38%;color:#8aa098;font:600 24px/1 'IBM Plex Mono',monospace}.node:last-child:after{display:none}.node.active{background:var(--teal-soft);border-color:var(--teal);transform:translateY(-4px)}.node.fail{background:var(--rose-soft);border-color:var(--rose)}.node b{color:var(--navy);font-size:16px}.node span{color:var(--sub);font-size:12px}.node code{font:500 11px 'IBM Plex Mono',monospace;color:var(--teal);margin-top:4px;overflow-wrap:anywhere}.event{background:var(--terminal);color:var(--term);border-radius:14px;padding:18px;font:400 13px/1.55 'IBM Plex Mono',monospace;min-height:118px;white-space:pre-wrap;overflow-wrap:anywhere}.event b{color:#7dd9c5}.event .warn{color:#f1bd69}.event .error{color:#f4989f}.status{display:flex;gap:12px;align-items:baseline;background:var(--teal-soft);border-left:4px solid var(--teal);border-radius:9px;padding:13px 16px}.status b{color:var(--teal)}.status span{color:#45625a}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:15px}.metric{background:#f5f7f2;border-radius:12px;padding:15px}.metric span{display:block;color:var(--sub);font-size:12px}.metric strong{font:600 23px 'IBM Plex Mono',monospace;color:var(--navy)}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:22px 0}.tabs button[aria-selected=true]{background:var(--teal);color:white;border-color:var(--teal)}.tab-panel[hidden]{display:none}.grid2,.grid3,.grid4{display:grid;gap:14px;margin-top:20px}.grid2{grid-template-columns:repeat(2,1fr)}.grid3{grid-template-columns:repeat(3,1fr)}.grid4{grid-template-columns:repeat(4,1fr)}.concept{background:#f6f6f0;border-radius:13px;padding:19px}.concept h3{margin:0 0 6px;color:var(--navy)}.concept p{margin:0;color:var(--sub)}.concept code{font-family:'IBM Plex Mono',monospace;color:var(--teal);overflow-wrap:anywhere}.table-wrap{overflow-x:auto;margin-top:20px}table{border-collapse:collapse;width:100%}th,td{text-align:left;vertical-align:top;padding:12px 13px;border-bottom:1px solid var(--line)}th{color:var(--teal)}.exercise-list{columns:2;column-gap:45px}.exercise-list li{break-inside:avoid;margin:0 0 11px;padding-left:6px}.callout{background:var(--amber-soft);border-left:4px solid var(--amber);border-radius:9px;padding:15px 17px;margin-top:17px}.diagram-label{text-align:center;color:var(--sub);font-size:12px}.check-row{display:flex;gap:14px;flex-wrap:wrap;align-items:center}.check-row label{display:flex;align-items:center;gap:6px}.check-row input{width:auto}.certificate{background:#f6f6f0;padding:18px;border-radius:13px}.certificate dl{display:grid;grid-template-columns:150px 1fr;gap:7px 12px;margin:0}.certificate dt{font-weight:700;color:var(--teal)}.certificate dd{margin:0;overflow-wrap:anywhere}.good{color:var(--teal)}.bad{color:var(--rose)}footer{max-width:1240px;margin:auto;padding:24px;border-top:1px solid var(--line);display:flex;justify-content:space-between}@media(max-width:980px){.stage{grid-template-columns:1fr 1fr;--cols:2!important}.node:after{display:none}.grid3,.grid4{grid-template-columns:1fr 1fr}}@media(max-width:700px){main{padding:0 14px 60px}.sitebar{padding:14px}.hero{grid-template-columns:1fr;padding:38px 4px 25px}.hero aside{border-left:0;border-top:1px solid var(--line);padding:18px 0 0}.lab,.lesson{padding:20px 16px;border-radius:16px}.section-head{display:block}.section-head>p{margin-top:10px}.stage,.grid2,.grid3,.grid4,.metrics{grid-template-columns:1fr}.exercise-list{columns:1}.status{display:block}.certificate dl{grid-template-columns:1fr}.certificate dd{margin-bottom:8px}footer{display:block}footer a{display:block;margin-top:8px}}
