@font-face{font-family:Inter;src:url('assets/fonts/Inter.ttf') format('truetype');font-style:normal;font-weight:100 900;font-display:swap}
:root{--ink:#172421;--body:#19231f;--muted:#34433c;--accent:#155c49;--line:#d5dbd5;--paper:#fff;--canvas:#fafbf8;--drawing:#e8e6dc;--tint:#eff3ed}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body.skills-site{margin:0;color:var(--body);background:var(--canvas);font:16px/1.7 Inter,system-ui,-apple-system,"Segoe UI",Arial,sans-serif}a{color:var(--accent);text-underline-offset:4px}button{font:14px Arial,sans-serif;color:var(--ink);cursor:pointer}button,a,summary{outline-offset:5px}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent)}img{display:block;max-width:100%;height:auto}figure{margin:0}p{margin:0 0 18px}h1,h2,h3{font-family:Inter,Arial,Helvetica,sans-serif;color:var(--ink);font-weight:600;line-height:1.2;letter-spacing:-.035em}h1{font-size:clamp(28px,3.1vw,42px);margin:17px 0 21px}h2{font-size:clamp(25px,2.3vw,32px);margin:0 0 19px}h3{font-size:26px;margin:0 0 17px}button{border:1px solid var(--line);border-radius:3px;background:var(--paper);padding:8px 12px}.skip{position:fixed;top:-90px;left:20px;background:white;padding:12px;z-index:90}.skip:focus{top:10px}.site-header{max-width:1280px;margin:auto;padding:0 32px}.masthead{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:29px 0 24px}.brand{font:600 21px Arial,sans-serif;text-decoration:none;color:var(--ink);letter-spacing:-.025em}.site-label{font:13px Arial,sans-serif;color:var(--muted)}.skill-tabs{display:flex;align-items:center;gap:25px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font:14px Arial,sans-serif;min-height:54px;flex-wrap:wrap;padding:0}.skill-tabs a,.skill-tabs summary{padding:17px 0;color:var(--muted);text-decoration:none;cursor:pointer;line-height:1.4}.skill-tabs>a[aria-current=page]{color:var(--accent);box-shadow:inset 0 -2px var(--accent);font-weight:600}.skill-switch{position:relative}.skill-switch summary{list-style:none}.skill-switch summary::-webkit-details-marker{display:none}.skill-switch summary:after{content:'⌄';margin-left:9px}.skill-switch .skill-options{position:absolute;z-index:20;min-width:240px;top:52px;left:0;background:white;padding:8px 18px;border:1px solid var(--line);box-shadow:0 8px 20px #192c1710;display:grid}.skill-options a{padding:10px 0}.page{max-width:1280px;margin:auto;padding:0 32px 35px}.intro{padding:55px 0 28px;border-bottom:1px solid var(--line)}.intro>p{max-width:none}.eyebrow{font:12px Arial,sans-serif;color:var(--accent);letter-spacing:.04em}.section-links{display:flex;flex-wrap:wrap;gap:12px 27px;font:14px/1.5 Arial,sans-serif;margin:26px 0 0}.section-links a{text-decoration:none;padding-bottom:5px;border-bottom:1px solid #94ab9d}.chapter{padding-top:45px;scroll-margin-top:25px}.chapter-heading{display:flex;justify-content:space-between;align-items:baseline;gap:20px}.chapter-heading h2{margin-bottom:15px}.text-link,.back-link{font:14px Arial,sans-serif;text-decoration:none}.course-title{white-space:nowrap}.model-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin:27px 0 16px}.model{min-width:0}.model .zoom{height:238px;padding:7px;background:#f0f1ee;border:1px solid var(--line)}.model .zoom img{width:100%;height:100%;object-fit:contain}.model figure>figcaption{display:none}.model-copy{padding:15px 2px 10px}.model-copy h3{font-size:18px;line-height:1.35;letter-spacing:-.015em;margin-bottom:8px}.model-copy p{font-size:17px;line-height:1.5;margin:0}.zoom{display:block;position:relative;text-decoration:none;cursor:zoom-in}.zoom::after{content:'+';position:absolute;right:9px;bottom:9px;background:#ffffffec;color:var(--accent);font:18px/28px Arial,sans-serif;text-align:center;width:28px;height:28px;border:1px solid #bec9c0;border-radius:3px}.zoom:hover{outline:1px solid #91a999;outline-offset:2px}.project{border-top:1px solid var(--line);padding:35px 0 45px;margin-top:28px}.project-heading{display:flex;justify-content:space-between;gap:25px;align-items:baseline;margin-bottom:18px}.project-heading .eyebrow{display:block;margin-bottom:12px}.project-heading h3{font-size:clamp(24px,2.4vw,32px);margin:0}.date{font:14px/1.5 Arial,sans-serif;white-space:nowrap;color:var(--muted)}.specs{display:flex;flex-wrap:wrap;gap:22px 50px;margin:25px 0 28px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.specs dt{font:13px/1.4 Arial,sans-serif;color:var(--muted)}.specs dd{margin:5px 0 0;font:600 19px Arial,sans-serif}.visual-pair{display:grid;grid-template-columns:1fr 1fr;gap:22px}.visual-pair figure{min-width:0}.visual-pair .zoom{height:390px;padding:15px;border:1px solid var(--line);background:var(--drawing)}.visual-pair img{width:100%;height:100%;object-fit:contain}.cad .zoom{background:#edf0f0}.drawing .zoom{background:var(--drawing)}figcaption{font:14px/1.5 Arial,sans-serif;color:var(--muted);padding-top:10px}.film{margin-top:25px}.film video{display:block;width:100%;aspect-ratio:16/9;background:#edf0f0;border:1px solid var(--line);max-height:650px}.gallery-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:26px}.gallery-strip .zoom{height:240px;padding:10px;border:1px solid var(--line)}.gallery-strip img{height:100%;width:100%;object-fit:contain}.gallery-strip.two{grid-template-columns:repeat(2,minmax(0,1fr))}.project-action{margin:25px 0 0}.button{display:inline-block;font:14px/1.4 Arial,sans-serif;background:var(--accent);color:#fff;border:1px solid var(--accent);border-radius:3px;padding:12px 17px;text-decoration:none}.button:hover{background:#0f4538}.page-footer{border-top:1px solid var(--line);padding-top:22px;margin-top:20px;display:flex;justify-content:space-between;gap:20px;font:13px/1.5 Arial,sans-serif}.detail-header{padding:40px 0 0}.detail-header h1{font-size:clamp(26px,3vw,38px);max-width:none}.detail-header>p{max-width:none}.detail-header .date{margin-top:14px}.detail-header+.section-links{border-bottom:1px solid var(--line);padding:0 0 22px;margin-top:25px}.detail-tools{display:flex;justify-content:space-between;align-items:center;font:13px Arial,sans-serif;color:var(--muted);margin:25px 0 12px}.detail-tools button{font-size:12px;padding:6px 9px}.calc-block{border-top:1px solid var(--line);padding:0;scroll-margin-top:22px}.calc-block:last-of-type{border-bottom:1px solid var(--line);margin-bottom:40px}.calc-block>summary{list-style:none;display:flex;align-items:center;gap:20px;padding:24px 0;cursor:pointer}.calc-block>summary::-webkit-details-marker{display:none}.calc-block>summary:after{content:'+';margin-left:auto;font:22px Arial,sans-serif;color:var(--accent)}.calc-block[open]>summary:after{content:'−'}.calc-block summary h2{font-size:24px;margin:0;letter-spacing:-.02em}.step-number{font:12px Arial,sans-serif;color:var(--accent);min-width:24px}.calc-content{padding:0 0 28px 44px}.calc-content p{margin:0 0 17px;max-width:none}.calc-content h3{font-size:20px;letter-spacing:-.02em;margin:25px 0 16px}.calc-content .visual-pair{margin-top:24px}.calc-content .visual-pair .zoom{height:330px}.calc-content .gallery-strip .zoom{height:215px}.equation{overflow-x:auto;overflow-y:hidden;padding:18px 10px;margin:18px 0;background:#f1f4ee;font-size:100%;border-radius:3px}.equation .MathJax_Display{margin:0!important}.notation{font-size:16px!important;color:var(--muted)}.table-wrap{overflow-x:auto;max-width:100%;margin:17px 0 24px}table{width:100%;border-collapse:collapse;font-size:17px;line-height:1.5}td,th{text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:top}th{font:600 13px Arial,sans-serif;background:#edf1e9;color:var(--ink)}td:first-child{min-width:115px}.drawing-grid{display:grid;gap:27px}.drawing-grid .zoom{padding:17px;border:1px solid var(--line)}.drawing-grid img{max-height:800px;object-fit:contain;margin:auto}.lightbox{width:min(1350px,96vw);max-width:96vw;padding:0;border:1px solid #65736a;border-radius:4px;background:white;color:var(--ink);overflow:hidden}.lightbox::backdrop{background:#14221de8}.lightbox-bar{display:flex;align-items:center;justify-content:space-between;gap:15px;padding:12px 15px;border-bottom:1px solid var(--line)}.lightbox-title{font:600 14px Arial,sans-serif}.lightbox-controls{display:flex;gap:7px;align-items:center}.lightbox-controls button{font-size:12px;padding:6px 10px}.lightbox-scroll{height:76dvh;overflow:auto;background:#edf0eb;display:flex;justify-content:center;align-items:flex-start;padding:15px}.lightbox-scroll img{max-height:100%;max-width:100%;width:auto;height:auto;object-fit:contain;align-self:center}.lightbox.actual .lightbox-scroll{display:block}.lightbox.actual img{max-width:none;max-height:none;margin:auto}.lightbox-caption{font:13px/1.5 Arial,sans-serif;padding:12px 15px;color:var(--muted)}.course-entry{padding:35px 0;border-bottom:1px solid var(--line)}
@media(max-width:1000px){.model-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.model .zoom{height:280px}.gallery-strip .zoom{height:190px}.visual-pair .zoom{height:330px}.skill-tabs{gap:20px}.course-title{white-space:normal}.detail-header h1{font-size:31px}}
@media(max-width:650px){body.skills-site{font-size:16px;line-height:1.65}.site-header{padding:0 20px}.masthead{padding:23px 0 20px;align-items:baseline}.brand{font-size:18px}.site-label{font-size:12px}.skill-tabs{gap:0 18px;font-size:12px;padding:4px 0}.skill-tabs a,.skill-tabs summary{padding:12px 0}.skill-tabs>a:first-child{width:100%;padding-bottom:6px;box-shadow:none}.skill-switch .skill-options{top:43px;left:auto;right:0}.page{padding:0 20px 30px}.intro{padding:35px 0 25px}.intro h1{font-size:30px;line-height:1.25}.chapter{padding-top:32px}.chapter-heading{display:block}.chapter-heading .text-link{display:inline-block;margin-bottom:17px}.chapter-heading h2{font-size:26px}.section-links{gap:12px 19px;font-size:13px}.model-grid{gap:16px}.model .zoom{height:190px;padding:5px}.model-copy{padding-top:12px}.model-copy h3{font-size:16px}.model-copy p{font-size:16px}.project{padding-top:27px;padding-bottom:33px;margin-top:20px}.project-heading{display:block}.project-heading h3{font-size:27px}.project-heading .date{display:block;margin-top:12px}.specs{gap:18px 30px;margin:22px 0}.specs dd{font-size:17px}.specs dt{font-size:12px}.visual-pair{grid-template-columns:1fr;gap:20px}.visual-pair .zoom{height:350px;padding:9px}.gallery-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 14px;margin-top:24px}.gallery-strip .zoom{height:185px;padding:6px}.gallery-strip.two .zoom{height:180px}figcaption{font-size:13px}.detail-header{padding-top:30px}.detail-header h1{font-size:29px;line-height:1.25}.detail-header>p{font-size:16px}.calc-block>summary{padding:20px 0;gap:11px}.calc-block summary h2{font-size:21px}.step-number{min-width:19px}.calc-content{padding-left:0}.calc-content .visual-pair .zoom{height:320px}.equation{font-size:90%;padding:16px 6px}.table-wrap{margin:15px 0 20px}table{font-size:16px}td,th{padding:9px 10px}.drawing-grid .zoom{padding:7px}.lightbox-bar{flex-wrap:wrap;gap:10px}.lightbox-controls{margin-left:auto}.lightbox-scroll{height:68dvh;padding:7px}.lightbox-caption{font-size:12px}.course-title{white-space:normal}}
@media(max-width:380px){.model-grid{grid-template-columns:1fr}.model .zoom{height:300px}.brand{font-size:16px}.gallery-strip{grid-template-columns:1fr}.gallery-strip .zoom{height:250px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}
@media print{.site-header,.lightbox,.section-links,.detail-tools,.button,.back-link{display:none!important}.page{max-width:none;padding:0}.calc-block .calc-content{display:block!important;content-visibility:visible!important}.calc-block>summary:after{display:none}.calc-content{padding-left:0}.calc-block{break-inside:avoid}.equation{background:white}.zoom:after{display:none}.film{display:none}.page-footer{margin-top:30px}}

/* Skill categories above the links belonging to the selected category. */
.skill-tabs{display:block;min-height:0}
.skill-primary,.skill-secondary{display:flex;flex-wrap:wrap;align-items:center;gap:0 30px}
.skill-primary{border-bottom:1px solid var(--line)}
.skill-primary>a{display:block;white-space:nowrap}
.skill-primary>a[aria-current=page]{color:var(--accent);box-shadow:inset 0 -2px var(--accent);font-weight:600}
.skill-secondary{gap:0 25px;font-size:13px}
.skill-secondary>a,.skill-secondary summary{display:block;padding:12px 0}
.skill-switch .skill-options{top:42px}
.nav-short{display:none}
.chapter-heading .text-link{flex-shrink:0}
.topic-list{margin:0;padding:0 0 0 24px}
.topic-list li{padding-left:4px;margin:6px 0}
.tutorial-entry{padding-bottom:9px}
.tutorial-entry+.tutorial-entry{margin-top:30px;padding-top:35px;border-top:1px solid var(--line)}
.tutorial-entry:last-of-type{padding-bottom:36px}
.analysis-section{border-top:1px solid var(--line);margin-top:30px;padding-top:35px;padding-bottom:35px}
.analysis-gallery{display:grid;gap:30px;margin-top:27px}
.analysis-figure .zoom{padding:18px;border:1px solid var(--line);background:#fff}
.analysis-figure img{width:100%;height:auto}
.fea-example{border-top:1px solid var(--line);padding:30px 0;margin-top:25px}
@media(max-width:650px){
  .skill-tabs{padding:0}
  .skill-primary{gap:0 18px}
  .skill-primary>a{padding:14px 0}
  .skill-secondary{gap:0 20px;font-size:12px;position:relative}
  .skill-secondary>a,.skill-secondary summary{padding:11px 0}
  .nav-full{display:none}.nav-short{display:inline}
  .skill-switch{position:static}
  .skill-switch .skill-options{top:100%;left:0;right:auto;width:min(300px,100%);min-width:0}
  .analysis-figure .zoom{padding:7px}
  .analysis-gallery{gap:25px;margin-top:23px}
  .tutorial-entry+.tutorial-entry,.analysis-section{margin-top:23px;padding-top:28px}
  .topic-list{padding-left:21px}
}
