@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,400,0,0";/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.fixed{position:fixed}.static{position:static}.container{width:100%}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.flex-shrink{flex-shrink:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.border{border-style:var(--tw-border-style);border-width:1px}.underline{text-decoration-line:underline}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}:root{--ink:#24292f;--ink-soft:#57606a;--paper:#fff;--paper-raised:#fff;--line:#d0d7de;--surface:#f6f8fa;--focus:#0969da;--python:#3b6ea5;--python-bg:#eaf0f7;--oop:#4e5fa8;--oop-bg:#ecedf8;--sql:#2a7f72;--sql-bg:#e7f3f1;--api:#6d5aa6;--api-bg:#f0edf7;--web:#b8672e;--web-bg:#faeee3;--js:#9c7f1f;--js-bg:#f8f1de;--react:#2478a3;--react-bg:#e7f1f6;--capstone:#a23e3e;--capstone-bg:#faebeb;--shadow-sm:0 1px 0 #00000005, 0 1px 3px #0000000a;--shadow-md:0 1px 0 #0000000a, 0 3px 6px #00000014;--transition-fast:.15s cubic-bezier(.33, .66, .66, 1);--transition-base:.3s cubic-bezier(.33, .66, .66, 1)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:15.5px;line-height:1.55}h1,h2,h3{margin:0;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Segoe UI,sans-serif}.mono{font-family:IBM Plex Mono,monospace}@media (prefers-reduced-motion:reduce){*{transition-duration:10ms!important;animation-duration:10ms!important}}header{background:var(--ink);color:var(--paper);border-bottom:1px solid #444c56;padding:56px 24px 40px}.header-inner{max-width:1080px;margin:0 auto}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:#8b95a7;margin-bottom:14px;font-family:IBM Plex Mono,monospace;font-size:12.5px;font-weight:500}header h1{letter-spacing:-.01em;max-width:780px;font-size:clamp(28px,4vw,42px);font-weight:700;line-height:1.2}header p.sub{color:#c7ccda;max-width:640px;margin-top:14px;font-size:16px;line-height:1.6}.stat-row{border-top:1px solid #444c56;flex-wrap:wrap;gap:0;margin-top:36px;display:flex}.stat{border-right:1px solid #444c56;flex:130px;padding:18px 20px 0}.stat:last-child{border-right:none}.stat .num{font-family:Space Grotesk,sans-serif;font-size:26px;font-weight:700}.stat .label{color:#8b95a7;margin-top:2px;font-size:12.5px}.tech-chips{flex-wrap:wrap;gap:8px;margin-top:14px;display:flex}.chip{color:var(--paper);transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);background:#ffffff1a;border:1px solid #fff3;border-radius:999px;padding:6px 10px;font-size:13px;font-weight:500}.chip:hover{background:#ffffff26;border-color:#ffffff4d}.chip{align-items:center;gap:8px;display:inline-flex}.chip-icon{-o-object-fit:contain;object-fit:contain;flex:0 0 18px;width:18px;height:18px}.layout{align-items:flex-start;gap:36px;max-width:1080px;margin:0 auto;padding:36px 24px 100px;display:flex}nav.spine{flex-direction:column;flex:0 0 230px;display:flex;position:sticky;top:24px}nav.spine a{color:var(--ink-soft);transition:color var(--transition-fast),border-color var(--transition-fast),background var(--transition-fast);border-left:3px solid #0000;align-items:center;gap:12px;padding:9px 4px 9px 16px;font-size:13.5px;font-weight:500;text-decoration:none;display:flex;position:relative}nav.spine a:hover{color:var(--ink);background:var(--surface);border-left-color:var(--focus)}nav.spine a:focus-visible{outline:2px solid var(--focus);outline-offset:2px}nav.spine .dot{border:2px solid var(--paper);width:9px;height:9px;box-shadow:0 0 0 2px var(--line);transition:box-shadow var(--transition-fast);border-radius:50%;flex:none;margin-left:-21px}nav.spine a:hover .dot{box-shadow:0 0 0 2px var(--line),0 0 8px currentColor}nav.spine .dayrange{color:#9aa0ae;margin-left:auto;font-family:IBM Plex Mono,monospace;font-size:11px}main{flex:auto;min-width:0}.note-box{background:var(--paper-raised);border:1px solid var(--line);border-left:3px solid var(--ink);color:var(--ink-soft);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast),border-color var(--transition-fast);border-radius:8px;margin-bottom:32px;padding:16px 20px;font-size:14px}.note-box strong{color:var(--ink)}.note-box:hover{box-shadow:var(--shadow-md);border-left-color:var(--focus)}.module{margin-bottom:20px;scroll-margin-top:20px;animation:.4s ease-out forwards moduleIn}@keyframes moduleIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.module-head{background:var(--paper-raised);border:1px solid var(--line);cursor:pointer;transition:all var(--transition-fast);box-shadow:var(--shadow-sm);border-radius:10px;align-items:center;gap:16px;padding:18px 20px;display:flex}.module-head:hover{box-shadow:var(--shadow-md);border-color:#c6d1da;transform:translateY(-1px)}.module-head:focus-within{outline:2px solid var(--focus);outline-offset:2px}.module-head .idx{text-align:center;width:34px;height:34px;transition:transform var(--transition-fast);border-radius:6px;justify-content:center;align-items:center;font-family:Space Grotesk,sans-serif;font-size:20px;font-weight:700;display:flex}.module-head:hover .idx{transform:scale(1.05)}.module-head .titles{flex:auto}.module-head h2{font-size:17px;line-height:1.3}.module-head .meta{color:var(--ink-soft);margin-top:3px;font-size:12.5px}.module-head .chev{color:var(--ink-soft);transition:transform var(--transition-base);flex:none;font-size:13px}details[open]>.module-head .chev{transform:rotate(90deg)}details>.module-head{list-style:none}details>.module-head::-webkit-details-marker{display:none}.day-list{border:1px solid var(--line);background:var(--paper-raised);box-shadow:var(--shadow-sm);border-top:none;border-radius:0 0 10px 10px;margin-top:-1px;padding:6px 0}.day{transition:background var(--transition-fast);border-top:1px solid #eeede7;grid-template-columns:78px 1fr;gap:16px;padding:14px 20px;display:grid}.day .tag{white-space:nowrap;height:-moz-fit-content;height:fit-content;transition:all var(--transition-fast);border-radius:5px;padding:4px 8px;font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:600}.day:hover .tag{transform:scale(1.04)}.lesson-content{min-width:0}.lesson-heading{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.day h3{margin-bottom:6px;font-size:14.5px;font-weight:600}.day ul{color:var(--ink-soft);margin:0;padding-left:18px;font-size:13.6px}.day li{margin-bottom:2px}.day .flag{background:var(--capstone-bg);color:var(--capstone);transition:all var(--transition-fast);border-radius:4px;margin-left:8px;padding:2px 6px;font-family:IBM Plex Mono,monospace;font-size:10.5px;font-weight:600;display:inline-block}.day:hover .flag{box-shadow:0 0 0 2px var(--capstone-bg);transform:scale(1.05)}.lesson-resources{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.lesson-resources a{border:1px solid var(--line);color:var(--focus);background:var(--paper);border-radius:5px;align-items:center;padding:4px 9px;font-size:11.5px;font-weight:600;text-decoration:none;display:inline-flex}.lesson-resources a:hover{background:var(--focus);border-color:var(--focus);color:var(--paper)}.lesson-resources a:focus-visible{outline:2px solid var(--focus);outline-offset:2px}body{color:#1d2226;background:#f3f2ef;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Segoe UI,sans-serif}.material-symbols-rounded{letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;direction:ltr;font-family:Material Symbols Rounded;font-size:19px;font-style:normal;font-weight:400;line-height:1;display:inline-block}header{color:var(--ink);background:#fff;border-bottom:1px solid #dde1e5;padding:42px 24px 32px}header p.sub{color:var(--ink-soft)}.eyebrow{color:var(--focus);align-items:center;gap:7px;display:flex}.eyebrow .material-symbols-rounded{font-size:18px}.stat-row{border-top-color:#dde1e5}.stat{border-right-color:#dde1e5}.stat .label{color:#6b737a}.tech-chips{display:none}.layout{gap:20px;max-width:1120px;padding:24px 20px 80px}nav.spine{background:#fff;border:1px solid #dde1e5;border-radius:8px;flex-basis:250px;padding:10px;box-shadow:0 1px 2px #0000000a}nav.spine a{border-left:0;border-radius:6px;padding:10px 10px 10px 15px}nav.spine a:hover{background:#eef3f8;border-left:0}nav.spine .dot{margin-left:-20px}.module{margin-bottom:18px}.module-head{background:#fff;border-radius:8px;padding:20px}.module-head h2{font-size:19px}.day-list{background:#fff;border-radius:0 0 8px 8px;padding:0;box-shadow:0 1px 2px #0000000a}.day{border-top:1px solid #e5e8eb;gap:18px;padding:20px}.day:first-child{border-top:0}.day:hover{background:#fff}.session-card .tag{letter-spacing:.04em;align-items:center;gap:5px;font-size:10px;display:flex}.session-card .tag .material-symbols-rounded{font-size:16px}.lesson-heading{align-items:flex-start}.day h3{margin-bottom:4px;font-size:16px;line-height:1.35}.session-meta{color:#6b737a;flex-wrap:wrap;gap:14px;margin:4px 0 10px;font-size:12px;display:flex}.session-meta span{align-items:center;gap:4px;display:inline-flex}.session-meta .material-symbols-rounded{color:#8a9299;font-size:16px}.day ul{font-size:13.5px}.lesson-resources{border-top:1px solid #e5e8eb;gap:8px;margin-top:14px;padding-top:12px}.lesson-resources a{color:#0a66c2;background:#fff;border-radius:5px;gap:5px;padding:7px 11px;font-size:12px}.lesson-resources a.resource-primary{color:#fff;background:#0a66c2;border-color:#0a66c2}.lesson-resources a:hover{color:#004182;background:#e8f3ff;border-color:#0a66c2}.lesson-resources a.resource-primary:hover{color:#fff;background:#004182}.animations-link{gap:7px}.animations-link .material-symbols-rounded{font-size:18px}footer{background:#fff;margin-top:0}.m-python .idx,.m-python .tag{background:var(--python-bg);color:var(--python)}.m-oop .idx,.m-oop .tag{background:var(--oop-bg);color:var(--oop)}.m-sql .idx,.m-sql .tag{background:var(--sql-bg);color:var(--sql)}.m-api .idx,.m-api .tag{background:var(--api-bg);color:var(--api)}.m-web .idx,.m-web .tag{background:var(--web-bg);color:var(--web)}.m-js .idx,.m-js .tag{background:var(--js-bg);color:var(--js)}.m-react .idx,.m-react .tag{background:var(--react-bg);color:var(--react)}.m-capstone .idx,.m-capstone .tag{background:var(--capstone-bg);color:var(--capstone)}.nav-dot-python{background:var(--python)}.nav-dot-oop{background:var(--oop)}.nav-dot-sql{background:var(--sql)}.nav-dot-api{background:var(--api)}.nav-dot-web{background:var(--web)}.nav-dot-js{background:var(--js)}.nav-dot-react{background:var(--react)}.nav-dot-capstone{background:var(--capstone)}.cut-box{background:var(--paper-raised);border:1px solid var(--line);box-shadow:var(--shadow-sm);transition:all var(--transition-fast);border-radius:10px;margin-top:36px;padding:22px 24px}.cut-box:hover{box-shadow:var(--shadow-md);border-color:#c6d1da}.cut-box h2{color:var(--ink);margin-bottom:10px;font-size:16px}.cut-box p{color:var(--ink-soft);margin:0 0 12px;font-size:13.8px}.cut-box ul{color:var(--ink-soft);-moz-columns:2;columns:2;-moz-column-gap:32px;column-gap:32px;margin:0;padding-left:20px;font-size:13.8px}.cut-box li{-moz-column-break-inside:avoid;break-inside:avoid;transition:color var(--transition-fast);margin-bottom:6px}.cut-box li:hover{color:var(--ink)}@media (max-width:800px){.layout{flex-direction:column}nav.spine{flex-flow:wrap;gap:8px 4px;width:100%;position:static}nav.spine a{border-left:none;padding-left:4px}nav.spine .dot{margin-left:0}nav.spine .dayrange{display:none}.day{grid-template-columns:1fr;gap:6px}.cut-box ul{-moz-columns:1;columns:1}}footer{text-align:center;color:#8b95a7;border-top:1px solid var(--line);margin-top:60px;padding:30px 24px 60px;font-size:12.5px}@keyframes slideInUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.module{animation:.4s ease-out forwards slideInUp}.module:nth-child(2){animation-delay:50ms}.module:nth-child(3){animation-delay:.1s}.module:nth-child(4){animation-delay:.15s}.module:nth-child(5){animation-delay:.2s}.module:nth-child(6){animation-delay:.25s}.module:nth-child(7){animation-delay:.3s}.module:nth-child(8){animation-delay:.35s}.module:nth-child(9){animation-delay:.4s}.module:nth-child(10){animation-delay:.45s}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}button,a,summary{transition:all var(--transition-fast)}details[open] .day-list{animation:.3s ease-out slideInUp}.animation-frame-container{background:var(--paper-raised);border:1px solid var(--line);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast);border-radius:10px;margin:32px 0;overflow:hidden}.animation-frame-container:hover{box-shadow:var(--shadow-md)}.animation-frame-header{border-bottom:1px solid var(--line);background:var(--surface);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.animation-frame-title{color:var(--ink);margin:0;font-size:15px;font-weight:600}.animation-frame-description{color:var(--ink-soft);margin:4px 0 0;font-size:13px}.animation-frame-link{background:var(--paper);border:1px solid var(--line);width:32px;height:32px;color:var(--ink-soft);transition:all var(--transition-fast);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;font-weight:600;text-decoration:none;display:inline-flex}.animation-frame-link:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);transform:scale(1.08)}.animation-frame-wrapper{background:var(--paper);width:100%;padding-bottom:66.66%;position:relative;overflow:hidden}.animation-frame-loader{background:var(--surface);color:var(--ink-soft);justify-content:center;align-items:center;font-size:14px;animation:.3s ease-out fadeIn;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.animation-frame-iframe{border:none;width:100%;height:100%;position:absolute;top:0;left:0}.back-link{color:var(--ink-soft);transition:all var(--transition-fast);align-items:center;gap:6px;margin-bottom:16px;font-size:13.5px;font-weight:500;text-decoration:none;display:inline-flex}.back-link:hover{color:var(--ink);transform:translate(-2px)}.back-link:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.animations-main{flex:auto;min-width:0}.animation-section{margin-bottom:64px;scroll-margin-top:20px;animation:.4s ease-out forwards slideInUp}.animation-section:nth-of-type(2){animation-delay:.1s}.animation-section:nth-of-type(3){animation-delay:.2s}.animation-header{margin-bottom:20px}.animation-header h2{color:var(--ink);margin-bottom:6px;font-size:clamp(24px,5vw,32px)}.animation-header .meta{color:var(--ink-soft);font-size:15px;line-height:1.5}.animation-catalog{animation:.4s ease-out forwards slideInUp}.animation-list{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;display:grid}.animation-card{background:var(--paper-raised);border:1px solid var(--line);min-height:164px;color:var(--ink);box-shadow:var(--shadow-sm);transition:transform var(--transition-fast),box-shadow var(--transition-fast),border-color var(--transition-fast);border-radius:10px;align-items:flex-start;gap:16px;padding:20px;text-decoration:none;display:flex}.animation-card:hover{border-color:var(--focus);box-shadow:var(--shadow-md);transform:translateY(-3px)}.animation-card-index{border:1px solid var(--line);width:34px;height:34px;color:var(--focus);border-radius:7px;flex:0 0 34px;justify-content:center;align-items:center;font-size:18px;display:flex}.animation-card-topic{color:var(--focus);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:700}.animation-card h3{margin:8px 0 6px;font-size:18px}.animation-card p{color:var(--ink-soft);margin:0;font-size:13.5px;line-height:1.5}.animations-link{background:var(--surface);border:1px solid var(--line);color:var(--focus);border-left:3px solid var(--focus);transition:all var(--transition-fast);border-radius:8px;align-items:center;gap:8px;margin-top:24px;padding:12px 16px 12px 14px;font-size:13.5px;font-weight:600;text-decoration:none;display:flex}.animations-link:hover{background:var(--focus);color:var(--paper);border-left-color:var(--paper);transform:translate(4px)}.coming-soon{background:var(--paper-raised);border:2px dashed var(--line);text-align:center;color:var(--ink-soft);border-radius:10px;margin-top:64px;padding:32px 24px}.coming-soon h3{color:var(--ink);margin-bottom:8px;font-size:18px}.coming-soon p{margin:0;font-size:14px;line-height:1.6}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
