@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--paper:#f7f6ef;--ink:#213b34;--muted:#59665f;--line:#d5d9ce;--orange:#ae452a;--green:#e5e9de;--font:'DM Sans',Arial,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:25px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}a:hover{color:var(--orange)}button,input{font:inherit}button,a{ -webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,input:focus-visible{outline:3px solid var(--orange);outline-offset:5px}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:'Manrope',Arial,sans-serif;line-height:1.12;letter-spacing:-.045em}h1{font-size:clamp(44px,5.1vw,72px);font-weight:600}h2{font-size:clamp(28px,3vw,39px);font-weight:600}h3{font-size:24px;font-weight:600}p{color:var(--muted)}.wrap{width:min(1240px,calc(100% - 100px));margin:auto}.nav{height:112px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:30px}.brand{display:flex;align-items:center;gap:12px;line-height:1.35;font-size:14px;letter-spacing:.13em;font-weight:700}.brand-icon{width:40px;height:40px;display:grid;place-items:center;background:var(--ink);color:var(--paper);font-size:31px;font-weight:400}.brand-sub{display:block;font-size:10px;letter-spacing:.16em;color:var(--muted);margin-top:3px}.nav nav{display:flex;gap:30px;font-size:14px}.nav-social{border-left:1px solid var(--line);padding-left:30px}.skip{position:absolute;left:10px;top:-60px;background:var(--ink);color:white;padding:10px;z-index:10}.skip:focus{top:10px}.eyebrow{font-size:11px;letter-spacing:.13em;font-weight:700;color:var(--muted);margin-bottom:23px}.hero{display:grid;grid-template-columns:1.12fr 1fr;gap:60px;padding-top:76px;padding-bottom:78px;align-items:center}.orange-dot{display:inline-block;width:7px;height:7px;background:var(--orange);border-radius:50%;margin-right:8px}.hero h1{margin-bottom:27px}.hero em{font-weight:500;color:var(--orange);font-family:Georgia,serif;letter-spacing:-.045em}.hero-deck{font-size:17px;line-height:1.8;max-width:510px}.hero-actions{display:flex;gap:22px;align-items:center;margin-top:32px}.hero-actions>span{font-size:11px;max-width:120px;color:var(--muted)}.button{display:inline-flex;align-items:center;gap:24px;background:var(--ink);color:#fff;padding:14px 20px;font-size:13px;font-weight:500;border:1px solid var(--ink);transition:background .15s}.button:hover{color:white;background:#35554b}.hero-art{background:#eceee5;border:1px solid #d8ddcf;position:relative;padding:24px 0 19px;margin-top:25px}.diagram-heading{padding:0 25px;display:flex;justify-content:space-between;font-size:9px;letter-spacing:.1em;font-weight:700}.diagram-heading span{color:var(--muted);font-size:8px}.hero-art svg{width:100%;display:block}.hero-art .line{fill:none;stroke:#aebbad;stroke-width:2}.hero-art .hot-line{fill:none;stroke:#c25a39;stroke-width:3}.hero-art .node{fill:#213b34;stroke:#eceee5;stroke-width:4}.hero-art .halo{fill:none;stroke:#c25a39;stroke-width:1;opacity:.6}.diagram-box{fill:var(--paper);stroke:#c7d0c4}.hero-art text{font-size:12px;fill:var(--ink);font-family:var(--font)}.hero-art .svg-label{font-size:8px;letter-spacing:1px;fill:#667169}.diagram-caption{font-size:10px;color:var(--muted);padding-left:25px}.focus-band{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.focus-band .wrap{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:22px 0;font-size:13px}.focus-band p{margin:0;color:var(--ink)}.focus-band span:first-child{font-size:9px;font-weight:700;letter-spacing:.15em}.focus-band span:not(:first-child){color:#798577}.section{padding-top:76px;padding-bottom:76px}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:60px;margin-bottom:40px}.section-heading h2{margin-bottom:0}.section-heading .eyebrow{margin-bottom:17px}.section-heading>p{max-width:345px;font-size:14px;line-height:1.7;margin-bottom:0}.project-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:25px}.project-card{border:1px solid var(--line);background:#fbfaf4;display:flex;flex-direction:column}.project-art{padding:19px 15px 11px;background:color-mix(in srgb,var(--accent) 13%,#f2f2e8);border-bottom:1px solid var(--line)}.project-art svg{display:block;width:100%;height:auto;stroke:var(--accent);stroke-width:1.8;fill:none}.project-art svg .route{stroke-width:3}.project-art svg circle{fill:var(--accent);stroke:#f6f5ed;stroke-width:3}.project-art svg .pulse{fill:none;stroke:var(--accent);stroke-width:1}.project-art svg text{fill:var(--ink);stroke:none;font-size:8px;letter-spacing:1px;font-family:var(--font)}.art-label{font-size:8px;letter-spacing:.13em;color:var(--muted)}.card-content{padding:25px;display:flex;flex-direction:column;flex:1}.card-content .eyebrow{font-size:9px;margin-bottom:16px;letter-spacing:.08em}.card-content h3{font-size:25px;margin-bottom:16px}.card-content h3 a{display:flex;justify-content:space-between;gap:8px}.card-content h3 span{font-size:20px;color:var(--orange)}.card-content p{font-size:13px;line-height:1.8;flex:1}.text-link{font-size:13px;font-weight:600;display:inline-block;line-height:1.6;border-bottom:1px solid #9ba99a;padding-bottom:3px}.text-link span{padding-left:20px}.section-footnote{font-size:11px;margin-top:20px;margin-bottom:0}.notes-section{background:#edeee5;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.note-row{display:grid;grid-template-columns:190px 1fr 40px;gap:30px;align-items:center;padding:28px 0;border-top:1px solid #cbd2c4}.note-row:last-child{border-bottom:1px solid #cbd2c4}.note-meta{font-size:13px;font-weight:600}.note-meta small{display:block;margin-top:6px;color:var(--muted);font-size:8px;letter-spacing:.1em}.note-row h3{font-size:25px;margin-bottom:10px}.note-row p{font-size:13px;margin:0}.note-arrow{font-size:28px;text-align:right;color:var(--orange)}.about{display:grid;grid-template-columns:1fr 1.1fr;gap:110px}.about .eyebrow{margin-bottom:19px}.about p{font-size:15px}.about .about-lead{font-size:22px;line-height:1.65;color:var(--ink)}footer{border-top:1px solid var(--line);padding:32px 0 40px;display:flex;justify-content:space-between;align-items:center;gap:25px;font-size:12px}footer p{margin:0;font-size:10px}.footer-name{font-weight:600;font-size:14px}.footer-name span{display:block;font-size:10px;font-weight:400;color:var(--muted);margin-top:4px}.breadcrumb{font-size:12px;display:inline-block;margin-bottom:40px}.project-hero{padding:38px 0 70px}.project-heading{display:grid;grid-template-columns:1.4fr 1fr;gap:80px;align-items:center}.project-heading .eyebrow{margin-bottom:16px}.project-name{font-size:16px;font-weight:600;color:var(--orange);margin-bottom:17px}.project-heading h1{font-size:clamp(38px,4vw,57px)}.project-heading .project-art{border:1px solid var(--line);padding:24px}.demo-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}.demo-hint{font-size:10px;margin-top:12px;margin-bottom:0}.project-details{border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1.7fr;gap:110px}.project-sidebar h2{font-size:26px;line-height:1.35}.status{display:inline-block;font-size:11px;background:var(--green);padding:6px 12px;border:1px solid var(--line);border-radius:2px}.project-details>div:last-child>h2{font-size:28px;margin-top:35px}.project-details>div:last-child>h2:first-child{margin-top:0}.project-details p{line-height:1.9;font-size:15px}.features{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin-top:35px}.features>div{border-top:1px solid var(--line);padding-top:20px}.features h3{font-size:19px;letter-spacing:-.02em;margin-bottom:8px}.features p{font-size:13px}.scope{border-left:3px solid var(--orange);padding:20px 24px;background:#eeeee4;margin:30px 0}.scope h3{font-size:17px;letter-spacing:-.01em;margin-bottom:10px}.scope p{font-size:13px!important;margin:0}.repo-hint{font-size:11px}.related{padding:35px 0 65px;border-top:1px solid var(--line)}.related .eyebrow{margin-bottom:16px}.related h2{font-size:29px}.share{display:flex;flex-wrap:wrap;gap:12px 23px;align-items:center;font-size:12px;margin-top:30px}.share button{border:1px solid #a4afa0;background:transparent;color:var(--ink);padding:8px 13px;cursor:pointer}.share button:hover{background:var(--green)}.share-help{color:var(--muted);font-size:10px;width:100%}.article{max-width:1000px;padding-top:40px;padding-bottom:90px}.article-header{padding-bottom:34px;border-bottom:1px solid var(--line)}.article h1{font-size:clamp(40px,5.1vw,66px);max-width:840px}.article-meta{font-size:12px}.article-meta span{padding:0 9px}.article-body{max-width:700px;margin:45px auto 0;font-size:17px;line-height:1.9}.article-body p{margin-bottom:23px}.article-body h2{font-size:29px;margin-top:38px;margin-bottom:20px}.article-lead{font-size:23px;line-height:1.7;color:var(--ink)}blockquote{font-size:27px;line-height:1.5;font-family:Georgia,serif;color:var(--orange);margin:35px 0;padding:14px 0 14px 27px;border-left:2px solid var(--orange)}#toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);padding:14px 20px;background:var(--ink);color:white;box-shadow:0 4px 30px #0002;font-size:13px;max-width:calc(100% - 30px);width:max-content;display:none;z-index:20}#toast.visible{display:block}#toast input{width:min(600px,100%);margin-top:10px;padding:7px;color:var(--ink)}
@media(min-width:1450px){.hero{gap:90px}}@media(max-width:1000px){.wrap{width:calc(100% - 60px)}.hero{gap:30px}.hero h1{font-size:52px}.hero-actions{gap:15px}.hero-actions>span{display:none}.diagram-heading{font-size:8px}.diagram-heading span{display:none}.section-heading{gap:30px}.project-grid{gap:16px}.card-content{padding:18px}.card-content h3{font-size:22px}.about{gap:55px}.project-heading,.project-details{gap:45px}.note-row{grid-template-columns:140px 1fr 30px;gap:20px}footer p{display:none}}
@media(max-width:700px){.wrap{width:calc(100% - 36px)}.nav{height:auto;min-height:105px;align-items:start;padding:21px 0;gap:15px}.brand{font-size:11px;gap:8px}.brand-icon{width:31px;height:31px;font-size:25px}.brand-sub{font-size:7px}.nav nav{gap:12px;font-size:11px;flex-wrap:wrap;justify-content:end;max-width:170px;padding-top:7px}.nav-social{border:0;padding:0}.hero{grid-template-columns:1fr;padding-top:44px;padding-bottom:40px;gap:28px}.hero h1{font-size:clamp(43px,10.5vw,64px)}.hero .eyebrow{font-size:9px}.hero-deck{font-size:16px}.hero-art{margin-top:0;max-width:520px}.focus-band .wrap{flex-wrap:wrap;justify-content:start;gap:10px 16px;font-size:11px;padding:20px 0}.focus-band span:first-child{width:100%}.section{padding-top:47px;padding-bottom:47px}.section-heading{display:block;margin-bottom:27px}.section-heading>p{margin-top:18px;max-width:100%}.project-grid{grid-template-columns:1fr;gap:24px}.project-card .project-art svg{max-height:220px}.card-content{padding:24px}.card-content h3{font-size:27px}.card-content p{font-size:14px}.note-row{grid-template-columns:1fr 27px;gap:10px;padding:25px 0}.note-meta{grid-column:1 / -1}.note-meta small{display:inline;margin-left:13px}.note-row h3{font-size:23px}.note-row p{font-size:12px}.about{grid-template-columns:1fr;gap:10px}.about .about-lead{font-size:20px}footer{align-items:start;font-size:11px}.footer-name span{max-width:180px}.project-hero{padding-top:27px;padding-bottom:40px}.breadcrumb{margin-bottom:30px}.project-heading{grid-template-columns:1fr;gap:25px}.project-heading h1{font-size:43px}.project-heading .project-art{max-width:500px}.project-details{grid-template-columns:1fr;gap:35px}.project-sidebar h2{max-width:450px}.features{gap:18px}.features h3{font-size:17px}.project-details p{font-size:14px}.related h2{font-size:26px}.article{padding-top:30px;padding-bottom:55px}.article h1{font-size:41px}.article-body{margin-top:30px;font-size:16px}.article-lead{font-size:20px}.article-body h2{font-size:26px}blockquote{font-size:24px}.share{gap:12px}.share-help{line-height:1.6}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}

/* Actual application screenshots on project detail pages. */
.screenshots-section{padding-top:48px;padding-bottom:56px;border-top:1px solid var(--line)}.screenshot-gallery{display:grid;grid-template-columns:1fr 1fr;gap:28px;align-items:start}.screenshot-card{margin:0;border:1px solid var(--line);background:#fbfaf4;min-width:0}.screenshot-card.wide{grid-column:1 / -1}.screenshot-frame{display:block;background:#e5e9de;overflow:hidden}.screenshot-frame img{display:block;width:100%;height:auto}.screenshot-card figcaption{padding:24px 28px}.screenshot-caption-heading{display:flex;gap:20px;align-items:center;justify-content:space-between;margin-bottom:12px}.screenshot-caption-heading h3{margin:0;font-size:23px;letter-spacing:-.03em}.screenshot-caption-heading a{font-size:11px;white-space:nowrap;text-decoration:underline;text-underline-offset:4px}.screenshot-card figcaption p{font-size:14px;line-height:1.8;max-width:900px;margin-bottom:14px}.screenshot-source{display:block;font-size:10px;letter-spacing:.03em;color:var(--muted)}.screenshot-footnote{margin:20px 0 0;font-size:11px}@media(max-width:700px){.screenshots-section{padding-top:35px;padding-bottom:38px}.screenshot-gallery{grid-template-columns:1fr;gap:24px}.screenshot-card figcaption{padding:19px}.screenshot-caption-heading{align-items:start}.screenshot-caption-heading h3{font-size:20px}.screenshot-card figcaption p{font-size:13px}}

/* Four-project homepage; existing project page layouts are preserved. */
.project-grid.portfolio-four{grid-template-columns:repeat(2,minmax(0,1fr))}.portfolio-four .project-art svg{max-height:260px}@media(max-width:700px){.project-grid.portfolio-four{grid-template-columns:1fr}}

/* Visual résumé within About only. */
#about{row-gap:40px}#about .visual-resume{grid-column:1/-1;margin:0;padding-top:35px;border-top:1px solid var(--line)}#about .visual-resume figcaption{margin-bottom:27px}#about .visual-resume h3{font-size:32px;margin-bottom:14px}#about .visual-resume figcaption p{max-width:720px}#about .visual-resume .eyebrow{font-size:11px}.resume-actions{display:flex;gap:20px;flex-wrap:wrap}.resume-image-link{display:block;max-width:980px;margin:0 auto;border:1px solid var(--line);background:var(--paper)}.resume-image-link img{display:block;width:100%;height:auto}.resume-text{margin:25px auto 0;max-width:980px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:17px 0}.resume-text summary{font-size:14px;font-weight:600;cursor:pointer}.resume-text>div{padding:20px 0 5px;max-width:850px}.resume-text h4{margin:22px 0 10px;font-size:17px}.resume-text p,.resume-text li{font-size:14px;line-height:1.8;color:var(--muted)}.resume-text ul{padding-left:22px}.resume-text li{margin-bottom:12px}@media(max-width:700px){#about .visual-resume h3{font-size:27px}.resume-actions{gap:15px}#about{row-gap:30px}}
