@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css');
:root{--navy:#1e2761;--ink:#101831;--muted:#586780;--line:#dce3ed;--paper:#f5f7fb;--gold:#ffcf48;--teal:#117365;--white:#fff;--mono:ui-monospace,SFMono-Regular,Consolas,'Liberation Mono',monospace;--sans:Pretendard,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;font-family:var(--sans);color:var(--ink);background:var(--paper);line-height:1.75}button,input,textarea,select{font:inherit}button,a,input,select,textarea{touch-action:manipulation}a{color:var(--navy);text-underline-offset:4px}button,.button,.file-button{border:1px solid #c8d2e0;border-radius:8px;background:#fff;color:var(--ink);padding:9px 15px;cursor:pointer;text-decoration:none;font-size:14px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:10px;line-height:1.5}button:hover,.button:hover,.file-button:hover{background:#edf2fa;border-color:#8c9bb6}button:disabled{opacity:.5;cursor:not-allowed}.primary,.button.primary{background:var(--navy);border-color:var(--navy);color:#fff}.primary:hover{background:#303f89}:focus-visible{outline:3px solid #d79400;outline-offset:3px}h1,h2,h3,h4,p{margin-top:0}h1,h2,h3{line-height:1.3;letter-spacing:-.035em}h1{font-size:clamp(34px,4.8vw,64px)}h2{font-size:29px;margin-bottom:20px}h3{font-size:21px}p{margin-bottom:18px}pre,code{font-family:var(--mono)}pre{overflow:auto;white-space:pre;line-height:1.75;font-size:13px}label{display:block;font-size:14px;font-weight:600}input:not([type=checkbox]):not([type=radio]):not([type=file]),textarea,select{display:block;width:100%;border:1px solid #b9c5d8;background:#fff;border-radius:7px;padding:10px 12px;color:var(--ink);margin:7px 0 12px}textarea{resize:vertical}input[type=checkbox],input[type=radio]{accent-color:var(--teal);width:18px;height:18px;flex:none}select{max-width:100%}.sr-only{position:absolute;clip:rect(0,0,0,0);width:1px;height:1px;overflow:hidden}.skip{position:fixed;top:-100px;left:10px;padding:10px;background:white;z-index:100}.skip:focus{top:10px}.top{height:78px;padding:0 max(5%,calc((100vw - 1200px)/2));display:flex;align-items:center;justify-content:space-between;gap:24px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.brand{text-decoration:none;font-weight:800;display:flex;align-items:center;gap:12px;white-space:nowrap;font-size:17px}.brand-mark{background:var(--navy);color:#fff;padding:4px 9px;border-radius:9px;font:700 20px var(--mono)}.brand-mark span{color:var(--gold)}.top nav{display:flex;gap:28px}.top nav a{text-decoration:none;color:var(--muted);font-size:14px;font-weight:600;white-space:nowrap}.top nav a:hover{color:var(--navy)}.hero{max-width:1200px;margin:auto;padding:84px 0 72px}.home-hero{display:grid;grid-template-columns:1.1fr 1fr;gap:65px;align-items:center}.eyebrow{font:700 11px var(--mono);letter-spacing:.13em;color:var(--teal);margin:0 0 17px}.hero h1{font-weight:850;margin:0 0 24px;line-height:1.22}.hero h1 em{font-style:normal;color:var(--navy)}.lead{color:var(--muted);font-size:17px;line-height:1.9}.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:20px 0}.hero-stats{display:flex;gap:32px;border-top:1px solid var(--line);padding-top:24px;margin-top:34px;color:var(--muted);font-size:12px}.hero-stats b{font:700 24px var(--mono);display:block;color:var(--navy);margin-bottom:6px}.code-art{background:#131e36;color:#dce6ef;border-radius:16px;box-shadow:0 24px 50px #17244322;transform:rotate(-1deg);position:relative;margin-bottom:25px}.code-top{display:flex;justify-content:space-between;gap:12px;padding:13px 18px;background:#202d47;color:#c6d3e5;font:12px var(--mono);border-radius:12px 12px 0 0}.code-top span:first-child{color:#7a8caa}.code-art pre{padding:24px 25px 38px;margin:0;font-size:13px}.dim{color:#a2b1c8}.gold{color:var(--gold)}.mint{color:#93dfc1}.art-output{padding:15px 24px;border-top:1px solid #38445a;color:#aabacf;font-size:12px;display:flex;align-items:center;gap:9px}.status-dot{width:7px;height:7px;background:#70d7b0;border-radius:50%}.art-card{background:#fff;color:var(--ink);padding:15px 22px;position:absolute;right:22px;bottom:-54px;border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 28px #1c2b4515;transform:rotate(1deg)}.art-card span{font:10px var(--mono);letter-spacing:.12em;color:var(--teal)}.art-card b{display:block;font-size:16px;margin:4px 0}.art-card small{color:var(--muted)}.section{margin:0 auto 40px;padding:36px;background:#fff;border:1px solid var(--line);border-radius:14px}.home-hero+.section,main>.record{max-width:1200px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.section-head h2{margin:0}.pill{display:inline-block;padding:6px 12px;border-radius:30px;background:#e9f2ef;color:#176c5f;font-size:12px;white-space:nowrap}.prep-card{display:flex;align-items:center;gap:24px;border:1px solid var(--line);background:#f8faff;border-radius:10px;text-decoration:none;padding:22px;margin-bottom:22px}.number{font:600 28px var(--mono);color:#9aa7bb}.prep-card h3{margin:0 0 5px;font-size:18px}.prep-card p{margin:0;color:var(--muted);font-size:14px}.prep-card>span:last-child{margin-left:auto;font-size:13px;font-weight:700}.course-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.course-card{padding:28px;border:1px solid var(--line);border-radius:12px;text-decoration:none;transition:transform .2s,box-shadow .2s;background:linear-gradient(145deg,#fff,#f5f8ff)}.course-card:nth-child(2){background:linear-gradient(145deg,#fff,#f1f8f5)}.course-card:hover{transform:translateY(-4px);box-shadow:0 12px 28px #17244312}.course-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:26px}.course-top .number{color:var(--navy);font-size:36px}.arrow{border:1px solid var(--line);border-radius:50%;width:34px;height:34px;text-align:center;color:var(--muted)}.course-card h3{font-size:25px;margin-bottom:14px}.course-card p{color:var(--muted);font-size:15px;max-width:36ch}.tags{display:flex;gap:8px;flex-wrap:wrap}.tags span{font-size:11px;padding:3px 9px;border:1px solid #d4ddeb;border-radius:5px;background:#ffffff70;color:var(--muted)}.progress-label{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin:30px 0 8px}progress{width:100%;height:5px;border:none;border-radius:10px;display:block;accent-color:var(--teal)}progress::-webkit-progress-bar{background:#e0e7ee;border-radius:10px}progress::-webkit-progress-value{background:var(--teal);border-radius:10px}.future-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:22px}.future-grid>div{border:1px dashed #c9d3df;border-radius:10px;padding:22px;color:var(--muted)}.future-grid span{font-size:11px}.future-grid h3{font-size:18px;margin:8px 0}.future-grid p{font-size:13px;margin:0}.record{background:#f0f4fa}.record-tools{display:flex;flex-wrap:wrap;gap:10px}.small,small{font-size:12px;color:var(--muted)}.small{margin:16px 0 0;line-height:1.8}.file-button{position:relative;overflow:hidden}.file-button input{position:absolute;inset:0;opacity:0;width:100%;cursor:pointer}.file-button:focus-within{outline:3px solid #d79400}.unit-hero{background:var(--navy);padding:54px max(5%,calc((100vw - 1200px)/2));color:white}.unit-hero .eyebrow{color:var(--gold)}.unit-hero h1{font-size:43px;margin-bottom:18px}.unit-hero>p:not(.eyebrow){color:#d1d9ed}.unit-hero .tags span{color:#d6def1;background:#ffffff08;border-color:#ffffff30}.unit-hero .primary{background:var(--gold);color:var(--ink);border-color:var(--gold)}.course-layout{max-width:1300px;margin:36px auto 60px;display:grid;grid-template-columns:230px minmax(0,1fr);gap:30px}.rail{position:sticky;top:104px;align-self:start;max-height:calc(100vh - 130px);overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px 13px}.rail .eyebrow{padding-left:8px}.rail a{display:flex;gap:9px;padding:8px;border-radius:5px;text-decoration:none;font-size:12px;line-height:1.5;color:var(--muted)}.rail a:hover{background:#eef2fa;color:var(--navy)}.rail a span{font-family:var(--mono);color:#9aa8bc}.lesson{background:#fff;border:1px solid var(--line);padding:32px 36px;border-radius:13px;margin-bottom:24px;scroll-margin-top:100px}.lesson-meta{display:flex;justify-content:space-between;gap:10px;font:11px var(--mono);color:var(--teal);margin-bottom:18px}.lesson h2{font-size:26px}.lesson>p{font-size:15px;line-height:1.95}.lesson-lead{color:var(--navy);font-weight:650;border-left:3px solid var(--gold);padding-left:15px;margin-bottom:24px}.example-links{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:25px 0}.example-links button{display:flex;align-items:flex-start;flex-direction:column;text-align:left;font-size:13px;padding:12px 15px;background:#f4f7fc}.example-links button span{font:10px var(--mono);color:var(--teal)}.task-box{padding:20px;background:#fffaeb;border:1px solid #eadfbf;border-radius:8px;font-size:14px;margin-top:24px}.task-box h3{font-size:15px;margin-bottom:12px}.task-box ol{margin:0;padding-left:20px}.task-box li{margin:8px 0}.completion{border-top:1px dashed var(--line);padding-top:18px;margin-top:22px;display:flex;align-items:center;gap:10px;font-size:13px;color:var(--teal)}.lab{background:#fff;border:2px solid #bcc9dd;border-radius:13px;padding:28px;margin:38px 0}.note{background:#edf3fc;border-left:3px solid #7188ad;padding:13px 15px;font-size:13px;color:#425471;line-height:1.8}.editor-layout{display:grid;grid-template-columns:190px minmax(0,1fr);border:1px solid #34415a;border-radius:9px;overflow:hidden;margin:18px 0}.file-panel{background:#eaf0f7;padding:14px 10px;overflow:auto}.file-panel .eyebrow{font-size:10px}.file-panel button{font:11px var(--mono);display:block;width:100%;text-align:left;justify-content:flex-start;overflow-wrap:anywhere;padding:7px;margin-bottom:5px;border-color:transparent;background:transparent}.file-panel button.active{background:var(--navy);color:white}.file-panel>#add-file,.file-panel>#delete-file{border-color:#becbdb;font-family:var(--sans);margin-top:12px;background:#fff}.editor-main{min-width:0;background:#101a2f}.editor-bar{background:#23314b;color:#dce7f5;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;font:12px var(--mono);overflow-wrap:anywhere}.editor-bar button{font-size:11px;padding:3px 8px;background:#ffffff10;color:#fff;border-color:#ffffff40}.editor-bar>div{display:flex;gap:5px;flex:none}#code-editor{margin:0;border:0;border-radius:0;background:#101a2f;color:#e0e8f3;min-height:340px;font:13px/1.8 var(--mono);padding:18px;tab-size:4;white-space:pre;overflow:auto}#code-editor:focus{outline:2px solid var(--gold);outline-offset:-2px}.input-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}.input-grid label{font-size:11px}.input-grid textarea,.input-grid input,.input-grid select{font:12px var(--mono)}#output{padding:20px;background:#0f1c28;color:#d5eadf;min-height:100px;max-height:350px;border-radius:9px;white-space:pre-wrap;overflow-wrap:anywhere}.gallery-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.gallery-card{border:1px solid var(--line);border-radius:10px;overflow:hidden}.gallery-card img{display:block;width:100%;height:205px;object-fit:contain;background:#e8ecf1;padding:10px}.gallery-card>div{padding:17px}.gallery-card h3{font-size:19px;margin-bottom:8px}.gallery-card p{font-size:13px;margin-bottom:5px}.gallery-card small{display:block;margin-bottom:12px}.gallery-card button{font-size:12px}.compare-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:15px}.compare-grid.single{grid-template-columns:minmax(0,1fr)}.compare-grid pre{background:#111d33;color:#dfe7f3;padding:15px;max-height:500px;border-radius:8px}.compare-grid h4{margin:10px 0}.sim-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.demo-window{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#f7f9fc}.demo-body{padding:18px}.demo-body pre{font-size:11px;white-space:pre-wrap;color:var(--teal)}#layout-preview{display:flex;gap:8px;margin:25px 0}#layout-preview.vertical{flex-direction:column}#layout-preview.horizontal{flex-direction:row}#layout-preview.grid{display:grid;grid-template-columns:1fr 1fr}#layout-preview button{flex:1;background:#e7edf8}.memo-demo{margin-top:20px}#demo-result{background:#e8f4ef;padding:10px;border-radius:7px;font-size:14px}.filter-row{display:grid;grid-template-columns:1fr 1fr 2fr;gap:15px}.count{font:20px var(--mono);background:#e8eef7;border-radius:6px;padding:3px 9px;color:var(--navy)}.question{border:1px solid var(--line);border-radius:10px;padding:24px;margin-bottom:18px}.question-meta{font-size:11px;color:var(--teal);margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap}.question h3{font-size:17px;letter-spacing:0;line-height:1.7;white-space:pre-wrap}.question .options label{display:flex;gap:10px;align-items:center;padding:10px 12px;background:#f5f7fb;margin:6px 0;border-radius:6px;font-weight:400;font-size:14px}.question details{margin:14px 0;font-size:14px;border-top:1px dashed var(--line);padding-top:12px}.question summary{cursor:pointer;font-weight:650;color:var(--navy)}.question details p,.question details pre{margin-top:10px;white-space:pre-wrap;overflow-wrap:anywhere}.question textarea.code-answer{font:13px/1.8 var(--mono);min-height:170px;background:#15223a;color:#e5ecf6}.question .feedback{font-size:13px;padding:10px 14px;border-radius:7px;background:#edf2f8;white-space:pre-wrap;max-height:260px;overflow:auto}.question .feedback.success{background:#e8f6ee;color:#176544}.question .feedback.retry{background:#fff1e9;color:#a44517}.order-list{list-style:none;padding:0}.order-list li{display:flex;align-items:center;gap:7px;border:1px solid var(--line);padding:8px 10px;margin:6px 0;border-radius:6px}.order-list li span{flex:1;font-size:14px}.order-list button{padding:2px 8px}.source-page{max-width:1000px;margin:45px auto;padding:35px;background:#fff;border:1px solid var(--line);border-radius:15px}.source-page h1{font-size:36px}.source-page h2{margin-top:35px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:12px;border-bottom:1px solid var(--line)}th{background:#f0f4f9}.end-nav{justify-content:flex-end}footer{border-top:1px solid var(--line);padding:30px 5%;text-align:center;color:var(--muted);font-size:12px;background:#fff}footer p{margin:4px}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);padding:10px 20px;background:#112746;color:white;border-radius:8px;z-index:100;box-shadow:0 8px 20px #0002;max-width:90%;font-size:13px}#toast:empty{display:none}
@media(min-width:1450px){.course-layout{max-width:1360px}}@media(max-width:1280px){.hero{margin:0 5%;gap:35px}.home-hero+.section,main>.record{margin-left:5%;margin-right:5%}.course-layout{margin-left:3%;margin-right:3%}}@media(max-width:960px){.top{padding:0 4%;gap:12px}.top nav{gap:14px}.brand{font-size:14px}.home-hero{grid-template-columns:1fr;padding-top:45px;gap:30px}.code-art{max-width:620px;width:100%;margin-bottom:50px}.hero h1{font-size:48px}.course-layout{display:block}.rail{position:static;max-height:210px;display:flex;flex-wrap:wrap;gap:5px;margin-bottom:24px;padding:14px}.rail .eyebrow{width:100%;margin:0 0 5px}.rail a{border:1px solid var(--line);padding:5px 9px}.input-grid{grid-template-columns:1fr 1fr}.input-grid>label:last-child{grid-column:1/-1}.source-page{margin:25px 4%}}@media(max-width:640px){html{scroll-padding-top:110px}.top{height:auto;min-height:84px;flex-direction:column;align-items:flex-start;gap:9px;padding:12px 5%}.brand{font-size:15px}.top nav{gap:21px;overflow:auto;width:100%}.top nav a{font-size:12px}.hero{padding:40px 0 35px}.hero h1{font-size:37px}.hero .lead{font-size:15px}.code-art pre{font-size:11px;padding:20px 15px 32px}.art-card{bottom:-40px;right:10px;padding:12px 18px}.hero-stats{gap:27px}.section{padding:22px 18px}.section-head{align-items:flex-start;gap:10px}.section-head h2{font-size:23px}.section-head>.pill{display:none}.course-grid,.future-grid,.gallery-grid,.sim-grid,.compare-grid{grid-template-columns:minmax(0,1fr)}.prep-card{gap:14px;padding:16px;flex-wrap:wrap}.prep-card>span:last-child{margin-left:43px}.prep-card h3{font-size:17px}.prep-card p{font-size:12px}.prep-card>div{flex:1}.course-card{padding:22px}.unit-hero{padding:32px 5%}.unit-hero h1{font-size:32px}.unit-hero .actions .button{font-size:12px}.lesson{padding:25px 20px}.lesson h2{font-size:23px}.lesson-meta{font-size:10px}.lesson>p{font-size:14px}.example-links{grid-template-columns:1fr}.lab{padding:20px 14px}.editor-layout{grid-template-columns:minmax(0,1fr)}.file-panel{max-height:170px}.file-panel #file-tree{display:flex;flex-wrap:wrap;gap:4px}.file-panel button{width:auto;display:inline-block;margin:0}.file-panel>#add-file,.file-panel>#delete-file{margin-top:10px}.editor-bar{font-size:11px}#code-editor{font-size:12px;padding:13px;min-height:300px}.input-grid,.filter-row{grid-template-columns:1fr}.input-grid>label:last-child{grid-column:auto}.question{padding:18px 14px}.question h3{font-size:15px}.question .options label{font-size:13px}.question .actions{gap:7px}.question button{font-size:12px}.record-tools{flex-direction:column;align-items:stretch}.source-page{padding:24px 18px}.source-page h1{font-size:29px}.gallery-card img{height:auto;max-height:320px}.hero-stats b{font-size:22px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;transform:none!important}}@media print{.top,.rail,.actions,.record-tools,.lab,.gallery-grid,.sim-grid,#toast,footer{display:none!important}.course-layout{display:block;margin:0}.lesson,.section{break-inside:avoid;border:0}.unit-hero{background:white;color:black}body{background:white}}
