:root{--paper:#f4f2e9;--ink:#243a30;--muted:#59685e;--line:#cbd1c4;--lime:#d9ee91;--dark:#1c3028}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.6 Arial,Helvetica,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit}a:focus-visible,button:focus-visible{outline:3px solid #a36c00;outline-offset:4px}.wrap{width:min(1200px,calc(100% - 64px));margin-inline:auto}.skip-link{position:absolute;top:-100px;left:20px;background:#fff;padding:12px;z-index:10}.skip-link:focus{top:12px}.site-header{min-height:96px;display:flex;align-items:center;justify-content:space-between;gap:24px;border-bottom:1px solid var(--line)}.wordmark{font-size:1.8rem;font-weight:800;letter-spacing:-.09em;white-space:nowrap}.wordmark span{font-weight:400}.site-header nav{display:flex;gap:30px;font-size:.88rem}.site-header nav a:hover,.site-header nav a[aria-current=page]{text-decoration:underline;text-underline-offset:7px}.header-contact{font-size:.86rem;border-bottom:1px solid var(--ink);white-space:nowrap}.eyebrow{font:.75rem/1.5 'Courier New',monospace;font-weight:bold;letter-spacing:.13em;margin:0 0 24px}.portfolio-hero{min-height:620px;display:grid;grid-template-columns:1.2fr .8fr;align-items:center;gap:50px;padding-block:80px}.portfolio-hero h1,.curve-hero h1{font-size:clamp(3.4rem,6vw,6.2rem);line-height:1.02;letter-spacing:-.07em;font-weight:500;margin:0}.portfolio-hero h1 em,.curve-hero h1 em,.about-grid h2 em{font-family:Georgia,serif;font-weight:400}.intro{font-size:1.12rem;line-height:1.7;color:var(--muted);max-width:570px;margin:30px 0}.button{min-height:52px;display:inline-flex;align-items:center;gap:48px;justify-content:space-between;padding:14px 20px;font-size:.9rem}.dark{background:var(--dark);color:#fff}.button:hover{background:#334d3e}.hero-mark{aspect-ratio:1;max-width:410px;width:100%;margin-left:auto;border-radius:50%;background:var(--lime);display:flex;flex-direction:column;align-items:center;justify-content:center;transform:rotate(9deg);box-shadow:20px 18px 0 #e1e5d4}.hero-mark>span{font-size:clamp(10rem,18vw,18rem);font-weight:700;line-height:.8;letter-spacing:-.14em;margin-right:.13em}.hero-mark small{font:.72rem/1.4 'Courier New',monospace;letter-spacing:.16em;text-align:center;margin-top:27px}.projects{padding-block:72px 100px}.section-heading{display:grid;grid-template-columns:1fr 1fr;gap:10px 50px;align-items:end;margin-bottom:34px}.section-heading .eyebrow{grid-column:1/-1;margin:0}.section-heading h2,.elsewhere h2,.curve-story h2,.next-project h2{font-size:clamp(2.6rem,4vw,4.5rem);line-height:1.1;letter-spacing:-.06em;font-weight:500;margin:0}.section-heading>p:last-child{margin:0;color:var(--muted);max-width:410px}.project-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:28px}.project-tabs a{padding:14px 22px;min-height:48px;font-size:.86rem}.project-tabs a[aria-current=page]{background:var(--dark);color:#fff}.project-tabs a:not([aria-current=page]):hover{background:#e6e9dc}.project-card{display:grid;grid-template-columns:1.1fr .9fr;border:1px solid var(--line);min-height:430px;overflow:hidden}.project-card:hover .project-link{text-decoration:underline;text-underline-offset:6px}.project-art,.curve-art-large{display:flex;align-items:center;justify-content:center;background:#cad9c5;padding:40px;overflow:hidden}.curve-window{position:relative;width:min(100%,470px);aspect-ratio:1.4;border:12px solid var(--dark);border-radius:44px;background:#f2f4ea;box-shadow:18px 20px 0 #20382b30;transform:rotate(-5deg)}.curve-rail{position:absolute;inset:-23px -22px auto -22px;height:36px;border:4px solid var(--lime);border-radius:30px;display:flex;align-items:center;gap:10px;padding-left:30px}.curve-rail i{width:11px;height:11px;border-radius:50%;background:var(--lime)}.curve-address{position:absolute;top:30px;left:15%;width:70%;height:24px;border-radius:14px;border:1px solid #aebdab;background:#fff}.curve-shape{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font:italic 13rem/.8 Georgia,serif;color:#294333}.project-copy{display:flex;flex-direction:column;justify-content:center;padding:55px}.project-copy h3{font-size:clamp(3rem,5vw,5.5rem);letter-spacing:-.07em;line-height:1;margin:0 0 22px;font-weight:500}.project-copy>p:not(.eyebrow){max-width:400px;color:var(--muted);margin:0 0 55px}.project-link{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:18px;font-size:.9rem}.project-footnote{font:.8rem 'Courier New',monospace;color:var(--muted);margin-top:22px}.about-band,.feature-band{background:#e5eadd;padding-block:95px}.about-grid{display:grid;grid-template-columns:.6fr 1.3fr 1fr;gap:45px}.about-grid h2{font-size:clamp(2.5rem,4vw,4.7rem);line-height:1.1;letter-spacing:-.06em;font-weight:500;margin:0}.about-grid p:not(.eyebrow),.story-copy p{color:#4d5d53;line-height:1.8;margin-top:0}.elsewhere{padding-block:90px;display:grid;grid-template-columns:1fr 1fr;gap:100px}.elsewhere p:not(.eyebrow){color:var(--muted)}.text-link{display:flex;justify-content:space-between;border-bottom:1px solid var(--ink);padding-block:15px;max-width:410px}.social-links{align-self:center;border-top:1px solid var(--line);padding-top:24px}.social-pending{font-size:1.2rem!important;color:var(--ink)!important}.social-caption{font-size:.85rem}.site-footer{border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:25px;align-items:center;padding-block:30px}.footer-brand{display:flex;align-items:center;gap:20px}.footer-brand>span{font-size:.75rem;color:var(--muted)}.site-footer nav{display:flex;flex-wrap:wrap;gap:20px;font-size:.78rem}.site-footer button{border:0;background:none;color:inherit;padding:0;cursor:pointer;font-size:inherit}.project-breadcrumb{display:flex;justify-content:space-between;padding-top:36px;font:.78rem 'Courier New',monospace;letter-spacing:.08em}.project-breadcrumb a{text-decoration:underline;text-underline-offset:4px}.curve-hero{min-height:570px;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center;padding-block:70px 95px}.curve-art-large{min-height:390px}.curve-art-large .curve-window{transform:rotate(5deg)}.status-pill{display:inline-block;border:1px solid var(--ink);border-radius:30px;padding:8px 15px;font:.78rem 'Courier New',monospace}.curve-story{padding-block:80px;display:grid;grid-template-columns:1fr 1fr;gap:80px}.curve-story .section-heading{display:block;margin:0}.curve-story .eyebrow{margin-bottom:20px}.story-copy{font-size:1.1rem}.feature-band .eyebrow{margin-bottom:40px}.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}.feature-grid article{border-top:1px solid var(--ink);padding-top:20px}.feature-grid span{font:.8rem 'Courier New',monospace}.feature-grid h3{font-size:1.5rem;line-height:1.25;margin:35px 0 15px}.feature-grid p{color:var(--muted);margin:0}.next-project{padding-block:95px}.next-project p:not(.eyebrow){max-width:550px;color:var(--muted);line-height:1.8}.policy{max-width:820px;padding-block:65px 100px}.policy h1{font-size:clamp(3rem,5vw,5rem);letter-spacing:-.07em;line-height:1.1;font-weight:500;margin:0 0 20px}.policy h2{font-size:1.5rem;line-height:1.2;margin-top:45px}.policy p,.policy li{line-height:1.8;color:#46574c}.policy a{text-decoration:underline;text-underline-offset:3px}.policy-date{font-size:.85rem}.back-link{text-decoration:underline;text-underline-offset:4px}.cookie-notice{position:fixed;bottom:20px;left:20px;right:20px;z-index:5;max-width:900px;margin:auto;background:var(--dark);color:#fff;padding:20px 25px;display:flex;gap:35px;align-items:center;box-shadow:0 10px 35px #17291b55}.cookie-notice h2{font-size:1rem;margin:0 0 5px}.cookie-notice p{font-size:.84rem;line-height:1.5;margin:0}.cookie-actions{display:flex;align-items:center;gap:15px;white-space:nowrap;font-size:.8rem}.cookie-actions a{text-decoration:underline}.cookie-actions button{min-height:44px;background:var(--lime);color:var(--ink);border:0;padding:0 17px;cursor:pointer}[hidden]{display:none!important}@media(max-width:850px){.wrap{width:calc(100% - 40px)}.site-header{flex-wrap:wrap;padding-block:20px}.site-header nav{order:3;width:100%;justify-content:space-between}.portfolio-hero,.curve-hero{grid-template-columns:1fr;min-height:auto}.hero-mark{max-width:300px;margin:20px auto}.project-card{grid-template-columns:1fr}.project-art{min-height:320px}.about-grid{grid-template-columns:1fr 1fr}.about-grid .eyebrow{grid-column:1/-1}.elsewhere{gap:45px}.site-footer{align-items:start;flex-direction:column}}@media(max-width:600px){.site-header nav{gap:12px;font-size:.78rem}.header-contact{font-size:.78rem}.portfolio-hero{padding-block:70px 60px}.portfolio-hero h1,.curve-hero h1{font-size:3.55rem}.hero-mark{max-width:250px}.section-heading,.about-grid,.elsewhere,.curve-story,.feature-grid{display:block}.section-heading h2,.about-grid h2{margin:18px 0}.projects{padding-block:60px}.project-art{min-height:260px;padding:28px}.project-copy{padding:32px}.project-copy>p:not(.eyebrow){margin-bottom:30px}.about-band,.feature-band{padding-block:65px}.elsewhere{padding-block:65px}.social-links{margin-top:45px}.curve-hero{gap:30px;padding-block:50px}.curve-art-large{min-height:280px;padding:25px}.curve-window{border-width:8px;border-radius:32px}.curve-shape{font-size:9rem}.curve-story{padding-block:65px}.feature-grid article{margin-top:35px}.feature-grid h3{margin-top:15px}.cookie-notice{display:block}.cookie-actions{margin-top:15px;flex-wrap:wrap;white-space:normal}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{text-transform:lowercase}

/* Public contribution calendar, matched to the portfolio's quiet green palette. */
#contributions .section-title>a{font-size:.8rem;color:var(--muted);text-decoration:underline;text-underline-offset:4px}
.contribution-scroll{overflow-x:auto;padding:20px 0 12px;scrollbar-color:#626b55 transparent}
.contribution-scroll:focus-visible{outline:2px solid var(--lime);outline-offset:5px}
.contribution-grid{display:grid;grid-template-rows:repeat(7,10px);grid-auto-flow:column;grid-auto-columns:10px;gap:3px;width:max-content;min-height:88px}
.contribution-day,.contribution-key i{border-radius:2px;background:#272c24;border:1px solid #434b3a}
.contribution-day{width:10px;height:10px}.level-1,.contribution-key i:nth-of-type(2){background:#4d6335}.level-2,.contribution-key i:nth-of-type(3){background:#7a964c}.level-3,.contribution-key i:nth-of-type(4){background:#a4c66b}.level-4,.contribution-key i:nth-of-type(5){background:#d9ee91}
.contribution-caption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;font-size:.7rem;color:var(--muted);margin-top:8px}
.contribution-key{display:flex;align-items:center;gap:4px}.contribution-key i{display:inline-block;width:10px;height:10px}
.home .contribution-source{font-size:.8rem;margin-top:22px}
.home .project-row:not(a):hover{background:none;padding-inline:0}

/* OpenStill shares the portfolio's type, texture, and quiet palette. */
.portfolio-project{margin-bottom:28px}.project-repo{font-size:.8rem;margin:12px 0 0}.project-repo a{text-decoration:underline;text-underline-offset:4px;color:var(--muted)}
.project-actions{display:flex;align-items:center;flex-wrap:wrap;gap:14px 26px;margin-top:30px}.project-actions .read-more{margin-top:0}.project-primary{display:inline-flex;align-items:center;gap:16px;min-height:48px;background:var(--lime);color:#20251d!important;padding:10px 20px;border-radius:5px;font-size:.9rem;text-decoration:none!important}
.personal-intro .openstill-tagline{font-size:1.55rem!important;line-height:1.35!important;color:var(--ink)!important;letter-spacing:-.025em}
.openstill-features{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:40px 34px;margin:36px 0}.feature-number{font:.7rem/1.5 "Courier New",monospace;color:var(--lime)}.openstill-features h3{font-size:1.15rem;font-weight:550;letter-spacing:-.02em;margin:12px 0}.openstill-features p{font-size:.94rem;line-height:1.75;color:var(--muted);margin:0}.personal-section .project-note{font-size:.78rem}
@media(max-width:520px){.openstill-features{grid-template-columns:1fr;gap:30px}.openstill-page .section-title{align-items:flex-start}.openstill-page .section-title>span{max-width:145px;text-align:right}.project-actions{gap:18px}}

/* Real app screenshots and the complete, keyboard-operable feature index. */
.home .openstill-gallery.wrap{width:min(1120px,calc(100% - 48px));padding-bottom:64px}
.openstill-gallery .section-title,.gallery-intro,.screenshot-credit{max-width:720px;margin-left:auto;margin-right:auto}
.gallery-intro{color:var(--muted);font-size:.95rem;line-height:1.7;margin-bottom:28px}
.openstill-gallery figure{margin:0}.openstill-gallery img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:14px;background:#252923}
.openstill-gallery figure>a{display:block;border-radius:14px}.openstill-gallery figure>a:hover{outline:1px solid var(--lime);outline-offset:4px}
.openstill-gallery figcaption{font-size:.84rem;line-height:1.65;color:var(--muted);padding:16px 0 0}.openstill-gallery figcaption strong{color:var(--ink);font-weight:550}
.screenshot-pair{display:grid;grid-template-columns:1fr 1fr;gap:28px;margin-top:34px}
.screenshot-credit{font-size:.72rem;line-height:1.7;color:var(--muted);margin-top:30px}.screenshot-credit a{color:inherit;text-decoration:underline;text-underline-offset:3px}
.feature-index{margin-top:32px}.feature-detail{border-top:1px solid var(--line)}.feature-detail:last-child{border-bottom:1px solid var(--line)}
.feature-detail summary{display:flex;align-items:center;gap:18px;min-height:72px;padding:18px 0;cursor:pointer;list-style:none}.feature-detail summary::-webkit-details-marker{display:none}
.feature-detail summary h3{font-size:1.03rem;font-weight:550;line-height:1.4;margin:0;flex:1}.feature-detail summary::after{content:'+';font-size:1.3rem;color:var(--lime);font-weight:400}.feature-detail[open] summary::after{content:'−'}
.feature-detail summary:hover h3{color:var(--lime)}.feature-detail summary:focus-visible{outline:2px solid var(--lime);outline-offset:4px;border-radius:3px}
.feature-detail-body{padding:0 0 22px 35px}.feature-detail-body ul{padding:0;list-style:none;margin:0}.feature-detail-body li{font-size:.91rem;line-height:1.8;color:var(--muted);margin:0 0 18px}.feature-detail-body strong{color:var(--ink);font-weight:550}
@media(max-width:650px){.home .openstill-gallery.wrap{width:calc(100% - 42px)}.screenshot-pair{grid-template-columns:1fr;gap:28px}.openstill-gallery img{border-radius:8px}.feature-detail-body{padding-left:0}.feature-detail summary{gap:12px}.feature-detail summary h3{font-size:.96rem}}

/* Curve is a mod showcase, with user-controlled demo playback. */
.home .mod-demo.wrap{width:min(1040px,calc(100% - 48px));padding-bottom:64px}.mod-demo .section-title{max-width:720px;margin-inline:auto}
.mod-demo figure,.mod-showcase figure{margin:0}.mod-demo video{display:block;width:100%;height:auto;aspect-ratio:16/9;background:#080a0a;border:1px solid var(--line);border-radius:12px}
.mod-demo figcaption,.mod-showcase figcaption{color:var(--muted);font-size:.8rem;line-height:1.7;margin-top:14px}
.demo-description{margin-top:22px;max-width:720px;margin-inline:auto;font-size:.86rem;color:var(--muted)}.demo-description summary{cursor:pointer;min-height:44px;align-content:center;color:var(--ink)}.demo-description p{line-height:1.8}
.curve-mod-page summary:focus-visible{outline:2px solid var(--lime);outline-offset:4px}.curve-mod-page .personal-intro .mod-status{font-size:.78rem;color:var(--lime);margin-top:26px}
.mod-showcase>h3{font-size:1.65rem;line-height:1.3;letter-spacing:-.035em;margin:0 0 18px;font-weight:550}.mod-showcase>p{font-size:1rem;line-height:1.8;color:var(--muted);margin:0 0 28px}.mod-showcase img{width:100%;height:auto;display:block;border-radius:12px;border:1px solid var(--line)}.mod-showcase figure>a{display:block;border-radius:12px}
.mod-points{display:grid;grid-template-columns:1fr 1fr;gap:28px 32px;margin-top:34px}.mod-points h4{font-size:.96rem;font-weight:550;margin:0 0 8px}.mod-points p{font-size:.88rem;line-height:1.8;color:var(--muted);margin:0}.personal-section .more-mods{font-size:.83rem;margin:36px 0 0;padding-top:25px;border-top:1px solid var(--line)}
.mod-install{padding-left:23px;color:var(--muted);font-size:.93rem;line-height:1.8;margin:26px 0}.mod-install li{padding-left:6px;margin-bottom:14px}.mod-install a,.demo-description a{color:var(--ink);text-decoration:underline;text-underline-offset:4px}.mod-install code{overflow-wrap:anywhere}
@media(max-width:650px){.home .mod-demo.wrap{width:calc(100% - 42px)}.mod-demo .section-title{align-items:flex-start}.mod-demo .section-title>span{max-width:110px;text-align:right}.mod-points{grid-template-columns:1fr;gap:22px}.mod-demo video,.mod-showcase img{border-radius:8px}}
