@layer tokens{:root{color-scheme:dark;--bg:#141517;--surface:#1c1e21;--text:#f0eee8;--muted:#aaa9a5;--accent:#e4ae87;--line:#343539;--font:"Segoe UI", Arial, sans-serif;--mono:Consolas, monospace;--radius:3px;--space:clamp(1.25rem, 5vw, 5rem);--max-width:1120px;--ease-out:cubic-bezier(.23, 1, .32, 1)}}@layer base{*{box-sizing:border-box}html{scroll-padding-top:2rem}body{background:var(--bg);color:var(--text);font-family:var(--font);margin:0;font-size:16px;line-height:1.7}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:6px}h1,h2,h3,p{margin:0}h1,h2,h3{letter-spacing:-.04em;font-weight:500;line-height:1.15}h1{font-size:clamp(2.8rem,5.8vw,5rem)}h2{font-size:clamp(1.8rem,3vw,2.4rem)}h3{font-size:1.5rem}p{text-wrap:pretty}::selection{background:var(--accent);color:var(--bg)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}}@layer components{.wrap{width:min(calc(100% - var(--space) * 2), var(--max-width));margin-inline:auto}.skip-link{z-index:10;background:var(--accent);color:var(--bg);padding:.7rem 1rem;position:fixed;top:-100px;left:1rem}.skip-link:focus{top:1rem}.site-header{border-bottom:1px solid var(--line);align-items:center;gap:2.5rem;min-height:100px;display:flex}.brand{letter-spacing:.1em;white-space:nowrap;align-items:center;gap:.7rem;font-size:.75rem;font-weight:600;display:flex}.accent{color:var(--accent)}.quiet{color:var(--muted)}.site-header nav{gap:1.8rem;margin-left:auto;font-size:.85rem;display:flex}.site-header nav a{min-height:44px;color:var(--muted);align-items:center;display:inline-flex}.site-header nav a[aria-current]{color:var(--text);text-underline-offset:8px;text-decoration:underline;text-decoration-color:var(--accent)}.eyebrow{font:.65rem/1.6 var(--mono);text-transform:uppercase;letter-spacing:.15em;color:var(--muted)}.text-link{align-items:center;gap:1.2rem;min-height:44px;font-size:.85rem;display:inline-flex}.section-label{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.25rem;display:flex}.section-label>a{align-items:center;gap:.7rem;min-height:44px;font-size:.75rem;display:inline-flex}.content-note{color:var(--muted);margin-top:.9rem;font-size:.7rem}.writing-empty{padding-block:2rem}.writing-empty h3{letter-spacing:-.03em;margin-block:1rem;font-family:Georgia,serif;font-size:2.3rem;line-height:1.2}.writing-empty>p{color:var(--muted);max-width:400px;margin-top:1rem;font-size:.95rem}.writing-empty .text-link{margin-top:1rem}.elsewhere{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:1.5rem;padding-block:1.7rem;display:flex}.elsewhere a{align-items:center;gap:1rem;min-height:44px;font-size:.8rem;display:inline-flex}.page-hero{max-width:850px;padding-block:75px 40px}.page-hero h1{margin-block:1.2rem}.page-hero>p:last-child{color:var(--muted);max-width:600px}.empty-state{border-top:1px solid var(--line);max-width:850px;margin-bottom:80px;padding-block:2rem}.empty-state h2{margin-bottom:1rem;font-size:1.7rem}.empty-state p{color:var(--muted);max-width:650px;margin-block:1rem}.button{border:1px solid var(--line);align-items:center;gap:1.5rem;min-height:48px;padding:.5rem 1rem;font-size:.85rem;display:inline-flex}.primary{background:var(--accent);color:var(--bg)}.primary:hover{color:var(--bg);background:#efc5a7}.writing-index{max-width:760px;min-height:340px;padding-bottom:4rem}.post-list{margin:0;padding:0;list-style:none}.post-list>li{border-bottom:1px solid var(--line);padding-block:1.6rem}.post-list h3{margin-block:.6rem;font-size:1.5rem;line-height:1.3}.post-list article>p:not(.post-meta){color:var(--muted);font-size:.9rem}.post-meta{color:var(--muted);font:.7rem/1.6 var(--mono);flex-wrap:wrap;gap:1rem;display:flex}.tags{font:.65rem/1.5 var(--mono);color:var(--accent);flex-wrap:wrap;gap:.7rem;margin:1rem 0 0;padding:0;list-style:none;display:flex}.tags li{border:1px solid var(--line);padding:.25rem .5rem}.article-layout{overflow-wrap:anywhere;max-width:740px;margin-inline:auto;padding-block:3rem}.article-header{border-bottom:1px solid var(--line);padding-bottom:2rem}.article-header>.post-meta{margin-top:2rem}.article-header h1{margin-block:1.1rem;font-size:clamp(2.5rem,5vw,4rem)}.article-description{color:var(--muted);font-size:1.2rem}.byline{margin-top:1rem;font-size:.8rem}.article-contents{border-bottom:1px solid var(--line);padding-block:1.5rem;font-size:.9rem}.article-contents ul{padding-left:1.1rem}.prose{font-size:1.075rem;line-height:1.9}.prose>*{margin-block:1.4rem}.prose h2{margin-top:2.7rem;font-size:1.9rem}.prose h3{margin-top:2rem}.prose a{color:var(--accent);text-underline-offset:4px;text-decoration:underline}.prose pre{background:var(--surface);border:1px solid var(--line);max-width:100%;padding:1.3rem;font-size:.85rem;overflow-x:auto}.prose code{font-family:var(--mono)}.prose blockquote{border-left:2px solid var(--accent);color:var(--muted);margin-inline:0;padding-left:1.5rem}.prose img{max-width:100%;height:auto}.prose table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--line);padding:.5rem 1rem}.article-footer{border-top:1px solid var(--line);margin-top:3rem;padding-top:1rem}@media (width<=800px){.elsewhere{flex-wrap:wrap}.elsewhere h2{width:100%}}@media (width<=600px){.site-header{flex-wrap:wrap;gap:.8rem;padding-block:1.2rem}.site-header nav{justify-content:space-between;gap:1rem;width:100%;margin-left:0}.elsewhere{grid-template-columns:1fr;gap:.6rem;display:grid}.elsewhere h2{margin-bottom:.8rem}.elsewhere a{justify-content:space-between}.page-hero{padding-block:3rem 2rem}.article-layout{padding-top:1.5rem}}}.identity{align-items:center;gap:.75rem;display:inline-flex}.identity-symbol{flex:none}.identity-name,.footer-brand{align-items:baseline;display:inline-flex}.identity-name{font-family:var(--font);letter-spacing:-.06em;font-size:1.7rem;font-weight:700;line-height:1}.identity-name .fx{letter-spacing:.01em;margin-left:.04em;font-weight:800}.footer-brand{font-weight:700}.footer-brand .fx{color:var(--accent);font-style:normal;font-weight:800}.hero-actions{flex-wrap:wrap;gap:.8rem;margin-top:1.8rem;display:flex}.pill-button{border:1px solid var(--text);background:var(--text);min-height:48px;color:var(--bg);border-radius:30px;justify-content:space-between;align-items:center;gap:1.5rem;padding:.65rem 1.2rem;font-size:.85rem;font-weight:500;display:inline-flex}.pill-button:hover{color:var(--bg);background:var(--accent);border-color:var(--accent)}.pill-button.secondary{color:var(--text);border-color:var(--line);background:0 0}.pill-button.secondary:hover{color:var(--accent);border-color:var(--accent)}.testimonials-section{border-top:1px solid var(--line);padding-block:2rem 3.5rem}.section-caption{color:var(--muted);font-size:.75rem}.testimonial-empty{border:1px solid var(--line);border-radius:8px;margin-top:1.7rem;padding:1.8rem}.testimonial-empty p{font-size:1.25rem}.testimonial-empty>span{color:var(--muted);margin-top:.5rem;font-size:.9rem;display:block}.testimonial-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-top:1.7rem;display:grid}.testimonial{border:1px solid var(--line);border-radius:8px;margin:0;padding:1.8rem}.testimonial blockquote{margin:0 0 1.5rem;font-size:1.15rem}.testimonial figcaption{font-size:.8rem}.testimonial figcaption span{color:var(--muted);display:block}@media (width<=600px){.section-caption{display:none}.testimonial-grid{grid-template-columns:1fr}}.personal-note{border-top:1px solid var(--line);grid-template-columns:1fr 2fr;gap:2rem;padding-block:3rem;display:grid}.personal-note p:not(.eyebrow){max-width:580px;color:var(--muted);margin-top:1.2rem}.personal-note .text-link{margin-top:1rem}@media (width<=600px){.personal-note{grid-template-columns:1fr;gap:1rem}}.skills-empty{border:1px solid var(--line);border-left:2px solid var(--accent);margin-bottom:3rem;padding:2.5rem}.skills-empty h2{margin-block:1rem}.skills-empty p{color:var(--muted);max-width:600px}.skills-empty .text-link{margin-top:1rem}@media (width<=600px){.skills-empty{padding:1.4rem}.site-header nav{flex-wrap:wrap;gap:.6rem}}.skill-icon{width:44px;height:44px;color:var(--accent);justify-content:center;align-items:center;font-size:1.4rem;display:inline-flex}.skill-icon img{object-fit:contain;width:40px;height:40px;display:block}@keyframes skill-arrive{0%{opacity:.55;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.skill-icon img.is-mono{filter:brightness(0)invert()}body{isolation:isolate;--grid-step:28px}.site-atmosphere{pointer-events:none;z-index:-1;background:#111416;position:fixed;inset:0;overflow:hidden}.atmosphere-glow{background:radial-gradient(at 15% 22%,#3c5e5840,#0000 43%),radial-gradient(at 85% 60%,#8e61332b,#0000 43%);position:absolute;inset:0}.signal-grid,.signal-spot{background-image:radial-gradient(circle at center, var(--dot) var(--dot-size,1px), transparent calc(var(--dot-size,1px) + .6px));background-size:var(--grid-step) var(--grid-step)}.signal-grid{--dot:#ffffff1c;position:absolute;inset:0;mask-image:linear-gradient(#000 0%,#0008 70%,#0003)}.signal-spot{--dot:var(--accent);--dot-size:1.5px;opacity:0;will-change:transform;border-radius:50%;width:320px;height:320px;transition:opacity .6s;position:absolute;top:0;left:0;mask-image:radial-gradient(circle,#000 0%,#0006 45%,#0000 70%)}.signal-spot.is-active{opacity:1;transition-duration:.2s}.signal-ping{opacity:0;width:80px;height:80px;position:absolute;top:-40px;left:-40px}.signal-ping:before{content:"";border:1px solid var(--accent);border-radius:50%;position:absolute;inset:0}.signal-ping.is-pinging:before{animation:.65s cubic-bezier(.2,.7,.3,1) forwards signal-ping}.signal-ping.is-pinging{opacity:1}@keyframes signal-ping{0%{opacity:.9;transform:scale(.2)}to{opacity:0;transform:scale(2.4)}}@media (hover:none){.signal-grid{--dot:#ffffff14}}.scot-guide{z-index:8;position:fixed;bottom:1.5rem;right:1.5rem}.scot-launcher{color:var(--text);cursor:pointer;background:#252720;border:1px solid #6c6658;border-radius:40px;align-items:center;gap:.8rem;min-height:52px;padding:.85rem 1.1rem;font-size:.85rem;list-style:none;display:flex;box-shadow:0 6px 24px #0004}.scot-launcher::-webkit-details-marker{display:none}.scot-launcher svg{color:var(--accent)}.scot-toggle{font-size:1.3rem;line-height:1;transition:transform .2s}.scot-guide[open] .scot-toggle{transform:rotate(45deg)}.scot-panel{background:#1b1e20;border:1px solid #474a45;border-radius:18px;width:min(365px,100vw - 2rem);max-height:calc(100dvh - 120px);padding:1.5rem;animation:.22s skill-arrive;position:absolute;bottom:calc(100% + .8rem);right:0;overflow:auto;box-shadow:0 16px 45px #0005}.scot-panel header{justify-content:space-between;align-items:center;gap:1rem;display:flex}.scot-panel h2{margin-top:.4rem;font-size:1.5rem}.scot-panel>p{color:var(--muted);margin-block:1.3rem;font-size:.85rem}.scot-indicator{background:#c4d8b6;border-radius:50%;width:9px;height:9px}.scot-question{border-top:1px solid var(--line);font-size:.8rem}.scot-question summary{cursor:pointer;padding:1rem 0;line-height:1.6}.scot-question>div{color:var(--muted);padding-bottom:1rem}.scot-question ul{flex-wrap:wrap;gap:.4rem;padding:0;list-style:none;display:flex}.scot-question li a{border:1px solid var(--line);border-radius:20px;padding:.4rem .7rem;display:block}.scot-contact{border-top:1px solid var(--line);color:var(--accent);justify-content:space-between;align-items:center;gap:1rem;padding-top:1rem;font-size:.8rem;display:flex}@media (width<=600px){.scot-guide{bottom:1rem;right:1rem}}.home-skills{border-top:1px solid var(--line);padding-block:1.5rem 2.5rem}.tool-strip ul{--cols:var(--cols-d,5);grid-template-columns:repeat(var(--cols), minmax(0, 1fr));gap:1.25rem .5rem;margin:.5rem 0 0;padding:0;list-style:none;display:grid}.tool-strip li{container-type:inline-size}.tool-strip li a{color:var(--muted);text-align:center;flex-direction:column;align-items:center;gap:clamp(.35rem,6cqi,.75rem);transition:color .2s;display:flex}.tool-strip .skill-icon,.tool-strip .skill-icon img{width:clamp(22px,26cqi,52px);height:clamp(22px,26cqi,52px);transition:transform .2s}.tool-strip li a>span:last-child{overflow-wrap:anywhere;font-size:clamp(.68rem,10cqi,.95rem);line-height:1.2}.tool-strip li a:hover{color:var(--text)}.tool-strip li a:hover .skill-icon{transform:translateY(-4px)}.home-work{border-top:1px solid var(--line);padding-top:2rem}.home-work h2{margin-top:.6rem}.project-cards{grid-template-columns:repeat(auto-fill,minmax(min(100%,420px),1fr));gap:1.25rem;margin:1.75rem 0 2.5rem;padding:0;list-style:none;display:grid}.project-card{border:1px solid var(--line);background:var(--surface);border-radius:14px;flex-direction:column;transition:border-color .2s,transform .2s;display:flex;overflow:hidden}.project-card:hover{border-color:#e4ae8766;transform:translateY(-3px)}.project-card[hidden]{display:none}.project-cover{aspect-ratio:16/9;border-bottom:1px solid var(--line);background:radial-gradient(circle at 50% 55%,#e4ae871f,#0000 60%),radial-gradient(circle,#ffffff1a 1px,#0000 1.6px) 0 0/18px 18px,#15191b;place-items:center;display:grid;overflow:hidden}.project-cover img{object-fit:cover;object-position:top;width:100%;height:100%;transition:transform .4s}.project-card:hover .project-cover img{transform:scale(1.03)}.cover-logo{border-radius:24px;width:96px;height:96px;box-shadow:0 18px 40px #0008}.project-card:hover .cover-logo{transform:translateY(-4px)rotate(-3deg)}.project-card-body{flex-direction:column;flex:1;padding:1.4rem 1.5rem 1.5rem;display:flex}.project-card-head{align-items:center;gap:.8rem;display:flex}.small-logo{border-radius:10px;flex:none;width:40px;height:40px}.project-card h3{font-size:1.45rem}.project-card-body>p{color:var(--muted);margin-top:.7rem;font-size:.95rem}.project-card .project-links{flex-direction:row;gap:1.5rem;margin-top:auto;padding-top:1.25rem}.project-filters{flex-wrap:wrap;gap:.5rem;margin-top:1.25rem;display:flex}.project-filters button{font:inherit;color:var(--muted);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:.45rem .95rem;font-size:.85rem;transition:color .2s,border-color .2s,background .2s}.project-filters button span{opacity:.7;margin-left:.3rem}.project-filters button:hover{color:var(--text);border-color:var(--accent)}.project-filters button[aria-pressed=true]{color:var(--bg);background:var(--accent);border-color:var(--accent)}.project-logo{border:1px solid var(--line);background:var(--surface);border-radius:18px;place-items:center;width:72px;height:72px;transition:transform .2s;display:grid;overflow:hidden}.project-logo img,.project-logo svg{object-fit:cover;width:100%;height:100%;display:block}.project-logo-default text{font-family:var(--font)}.project-hero-logo{border-radius:22px;width:88px;height:88px;margin-block:1.5rem 1.25rem}.trace-link{margin-left:-.45em;padding:.12em .45em;display:inline-block;position:relative}.trace{pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.trace rect{fill:none;stroke:var(--accent);stroke-width:1.5px;vector-effect:non-scaling-stroke}.trace-trail{stroke-dasharray:100;stroke-dashoffset:100px;opacity:0;transition:opacity .25s}.trace-head{stroke-width:3px;stroke-linecap:round;stroke-dasharray:5 95;opacity:0;filter:drop-shadow(0 0 4px var(--accent)) drop-shadow(0 0 8px var(--accent))}@media (hover:hover){.trace-link:hover .trace-trail,.trace-link:focus-visible .trace-trail{opacity:1;animation:.9s linear forwards trace-draw}.trace-link:hover .trace-head,.trace-link:focus-visible .trace-head{animation:.9s linear forwards trace-run,.3s .9s forwards trace-fade}}.trace-link:focus-visible{outline:none}@keyframes trace-draw{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0}}@keyframes trace-run{0%{stroke-dashoffset:5px;opacity:1}to{stroke-dashoffset:-95px;opacity:1}}@keyframes trace-fade{0%{opacity:1}to{opacity:0}}@media (prefers-reduced-motion:reduce){.trace-link:hover .trace-trail,.trace-link:focus-visible .trace-trail{stroke-dashoffset:0}}.project-tags{flex-wrap:wrap;gap:.5rem;margin:1.1rem 0 0;padding:0;list-style:none;display:flex}.project-tags li{border:1px solid var(--line);background:#1b2022;border-radius:999px;align-items:center;gap:.45rem;padding:.35rem .7rem .35rem .5rem;font-size:.8rem;display:inline-flex}.project-tags .project-kind{color:var(--accent);border-color:#e4ae8755}.project-tags .skill-icon,.project-tags .skill-icon img{width:16px;height:16px}.project-tags .skill-icon>span{font-size:.6rem}.projects-content{margin-bottom:3rem}.contact-card{border:1px solid var(--line);background:#1b2022;border-radius:16px;max-width:850px;padding:clamp(1.5rem,4vw,3rem)}.contact-card h2{overflow-wrap:anywhere;margin-block:1rem;font-size:clamp(1.3rem,4vw,2.5rem)}.contact-card p{color:var(--muted)}.contact-card .pill-button{margin-top:1.5rem}.contact-github{margin-block:1.5rem 4rem}@media (width<=700px){.project-card h3{font-size:1.3rem}}@media (prefers-reduced-motion:reduce){.tool-strip li a:hover .skill-icon,.project-card:hover,.project-card:hover .cover-logo,.project-card:hover .project-cover img{transform:none}}.ink{color:var(--accent)}@supports (background-clip:text){.ink{background:linear-gradient(100deg, #f6d9bb 0%, var(--accent) 40%, #d4855a 100%);color:#0000;-webkit-background-clip:text;background-clip:text;padding-right:.04em}.ink .accent{color:var(--accent)}}.status-badge{color:#b7ebcb;background:#6fcf970f;border:1px solid #6fcf9733;border-radius:999px;align-items:center;gap:.55rem;margin-bottom:1.4rem;padding:.35rem .85rem .35rem .7rem;font-size:.8rem;display:inline-flex}.status-dot{background:#6fcf97;border-radius:50%;width:8px;height:8px;animation:2.4s ease-out infinite status-pulse;box-shadow:0 0 #6fcf9766}@keyframes status-pulse{70%{box-shadow:0 0 0 7px #6fcf9700}to{box-shadow:0 0 #6fcf9700}}.profile-links{flex-wrap:wrap;gap:.5rem 1.4rem;margin:1.6rem 0 0;padding:0;font-size:.85rem;list-style:none;display:flex}.profile-links a{color:var(--muted)}.profile-links a:hover{color:var(--accent)}.services{border-top:1px solid var(--line);padding-block:2rem 2.5rem}.services dl{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:1rem;margin:1.4rem 0 0;display:grid}.services dl>div{border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:1.4rem 1.5rem}.services dt{align-items:baseline;gap:.7rem;font-size:1.3rem;font-weight:600;display:flex}.service-index{font:.75rem var(--mono);color:var(--accent)}.services dd{color:var(--muted);margin:.6rem 0 0}.site-header nav a:last-child{border:1px solid var(--accent);color:var(--accent);border-radius:999px;padding:.45rem 1rem}.site-header nav a:last-child:hover,.site-header nav a:last-child[aria-current=page]{background:var(--accent);color:var(--bg)}.project-links{flex-direction:column;align-items:flex-start;gap:1rem;display:flex}.project-story{border-top:1px solid var(--line,#343539);grid-template-columns:1fr 2fr;gap:4rem;padding:3rem 0;display:grid}.project-story h2{font-size:clamp(1.5rem,3vw,2rem)}.project-story p{max-width:65ch;line-height:1.8}.project-story p+h3,.project-story p+p,.project-story .project-links{margin-top:1.5rem}.project-story h3+p{margin-top:.75rem}.decision-list{gap:2rem;display:grid}.decision-list h3{margin-top:0}.workflow{counter-reset:step;gap:.75rem;margin-top:2rem;padding:0;list-style:none;display:grid}.workflow li{counter-increment:step;border:1px solid #343539;border-radius:.5rem;align-items:center;gap:1rem;padding:1rem;display:flex}.workflow li:before{content:"0" counter(step);color:#e4ae87;font-family:monospace}.source-note{color:#aaa9a5;font-size:.85rem}@media (width<=700px){.project-story{grid-template-columns:1fr;gap:1rem}}@media print{.site-atmosphere,.scot-guide{display:none}.project-story,.project-card{break-inside:avoid}}.scot-chat{margin:1rem 0}.scot-chat[hidden]{display:none}.scot-chat label{margin-bottom:.5rem;font-size:.85rem;display:block}.scot-input-row{gap:.5rem;display:flex}.scot-input-row input{min-width:0;color:var(--text);font:inherit;background:#111315;border:1px solid #555;border-radius:.5rem;flex:1;padding:.65rem;font-size:.85rem}.scot-input-row button{color:#141517;background:var(--accent);cursor:pointer;border:0;border-radius:.5rem;padding:.65rem}.scot-hint{margin-top:.5rem;font-size:.72rem!important}.scot-answer:not(:empty){border-left:2px solid var(--accent);background:#232629;margin:1rem 0;padding:.75rem}.scot-answer a{color:var(--accent);margin-top:.75rem;display:inline-block}.scot-owner{color:var(--muted);margin-top:1rem;font-size:.75rem;display:block}.message-card{margin-top:2rem}.contact-form{margin-top:1.5rem}.contact-form label{margin-bottom:1rem;display:block}.contact-form input:not([type=checkbox],[type=radio]),.contact-form textarea{width:100%;color:var(--text);font:inherit;background:#111315;border:1px solid #555;border-radius:.4rem;margin-top:.5rem;padding:.8rem;display:block}.contact-form textarea{resize:vertical}.draft-card{margin-bottom:2rem}.topic-chips{border:0;flex-wrap:wrap;gap:.5rem;margin:0 0 1.2rem;padding:0;display:flex}.topic-chips legend{margin-bottom:.6rem}.topic-chips label{margin:0}.topic-chips input{opacity:0;pointer-events:none;position:absolute}.topic-chips span{border:1px solid var(--line);color:var(--muted);cursor:pointer;border-radius:999px;padding:.5rem 1rem;font-size:.85rem;transition:color .2s,border-color .2s,background .2s;display:inline-block}.topic-chips label:hover span{color:var(--text);border-color:var(--accent)}.topic-chips input:checked+span{color:var(--bg);background:var(--accent);border-color:var(--accent)}.topic-chips input:focus-visible+span{outline:2px solid var(--accent);outline-offset:3px}.contact-form .consent{align-items:start;gap:.75rem;font-size:.85rem;display:flex}.consent input{margin-top:.4rem}.spam-field{position:absolute;left:-9999px}input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.profile-links.contact-github{margin-block:1.5rem 4rem}.cols-d-1{--cols-d:1}.cols-d-2{--cols-d:2}.cols-d-3{--cols-d:3}.cols-d-4{--cols-d:4}.cols-d-5{--cols-d:5}.cols-d-6{--cols-d:6}.cols-d-7{--cols-d:7}.cols-d-8{--cols-d:8}.cols-d-9{--cols-d:9}.cols-d-10{--cols-d:10}.cols-d-11{--cols-d:11}.cols-d-12{--cols-d:12}@media (width<=600px){.tool-strip ul{--cols:var(--cols-m,4)}.cols-m-1{--cols-m:1}.cols-m-2{--cols-m:2}.cols-m-3{--cols-m:3}.cols-m-4{--cols-m:4}.cols-m-5{--cols-m:5}}.project-stats{flex-wrap:wrap;gap:1rem 2.5rem;margin:1.8rem 0 .5rem;display:flex}.project-stats div{flex-direction:column-reverse;display:flex}.project-stats dt{color:var(--muted);font-size:.8rem}.project-stats dd{letter-spacing:-.03em;margin:0;font-size:1.9rem;font-weight:650}@media (width>=900px){.project-card.is-featured{flex-direction:row;grid-column:1/-1}.project-card.is-featured .project-cover{aspect-ratio:auto;border-bottom:0;border-right:1px solid var(--line);flex:1.15;min-height:320px}.project-card.is-featured .project-card-body{flex:1;padding:2rem 2.2rem}.project-card.is-featured h3{font-size:1.9rem}.project-card.is-featured .cover-logo{border-radius:28px;width:120px;height:120px}}.project-updated{color:var(--muted);margin-top:1rem;font-size:.75rem}.more-repos{padding-block:1rem 3rem}.repo-list{margin:0;padding:0;list-style:none}.more-repos>.repo-list{border-top:1px solid var(--line);margin-top:.5rem}.repo-row{border-bottom:1px solid var(--line)}.repo-row summary{cursor:pointer;grid-template-columns:15rem 1fr auto;align-items:center;gap:.4rem 1.5rem;padding:1rem .25rem;list-style:none;transition:background .2s;display:grid}.repo-row summary::-webkit-details-marker{display:none}.repo-row summary:hover,.repo-row[open] summary{background:#ffffff06}.repo-name{font-weight:600}.repo-row summary:hover .repo-name,.repo-row[open] .repo-name{color:var(--accent)}.repo-toggle{width:12px;height:12px;margin-left:.25rem;position:relative}.repo-toggle:before,.repo-toggle:after{content:"";background:currentColor;border-radius:1px;height:2px;transition:transform .2s;position:absolute;inset:5px 0 auto}.repo-toggle:after{transform:rotate(90deg)}.repo-row[open] .repo-toggle:after{transform:rotate(0)}.repo-details{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:1.5rem 2.5rem;padding:.5rem .25rem 1.6rem;display:grid}.repo-details .project-tags{margin-top:.7rem}.repo-links{flex-wrap:wrap;align-items:flex-end;gap:0 1.5rem;display:flex}.language-bar{border-radius:4px;width:100%;height:12px;margin-top:.8rem;display:block;overflow:hidden}.language-bar rect{stroke:#141517;stroke-width:2px;vector-effect:non-scaling-stroke}.language-bar rect:hover{opacity:.85}.language-dot{flex:none}.language-legend{flex-wrap:wrap;gap:.4rem 1.1rem;margin:.7rem 0 0;padding:0;font-size:.8rem;list-style:none;display:flex}.language-legend li{align-items:center;gap:.4rem;display:inline-flex}.language-legend li>span:last-child{color:var(--muted)}.language-dot{border-radius:50%;width:8px;height:8px}.segment-0{fill:#3987e5;background:#3987e5}.segment-1{fill:#d95926;background:#d95926}.segment-2{fill:#199e70;background:#199e70}.segment-3{fill:#c98500;background:#c98500}.segment-4{fill:#d55181;background:#d55181}.segment-5{fill:#008300;background:#008300}.segment-6{fill:#9085e9;background:#9085e9}.segment-7{fill:#e66767;background:#e66767}.repo-more:not([hidden]){gap:.6rem;margin-top:1.25rem;display:flex}.repo-more button{font:inherit;border:1px solid var(--line);color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;padding:.55rem 1.1rem;font-size:.85rem;transition:color .2s,border-color .2s}.repo-more button:hover{color:var(--text);border-color:var(--accent)}.repo-more button[hidden]{display:none}.repo-summary{color:var(--muted);font-size:.9rem}.repo-meta{color:var(--muted);white-space:nowrap;align-items:center;gap:.9rem;font-size:.75rem;display:flex}.repo-tech{align-items:center;gap:.35rem;display:inline-flex}.repo-tech .skill-icon,.repo-tech .skill-icon img{width:14px;height:14px}.repo-tech .skill-icon>span{font-size:.55rem}@media (width<=760px){.repo-row summary{grid-template-columns:1fr}.repo-meta{flex-wrap:wrap}}.stack-languages{padding-block:.5rem 1.5rem}.stack-nav{border-top:1px solid var(--line);flex-wrap:wrap;gap:.5rem;padding-block:1.25rem;display:flex}.stack-nav a{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:.45rem .95rem;font-size:.85rem;transition:color .2s,border-color .2s}.stack-nav a:hover{color:var(--text);border-color:var(--accent)}.stack-nav span{opacity:.7;margin-left:.3rem}.stack-group{padding-block:1.5rem}.stack-group h2{scroll-margin-top:2rem;font-size:1.6rem}.tech-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,230px),1fr));align-items:start;gap:.75rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.tech-tile{border:1px solid var(--line);background:var(--surface);border-radius:12px;scroll-margin-top:6rem;transition:border-color .2s}.tech-tile:hover,.tech-tile[open]{border-color:#e4ae8766}.tech-tile summary{cursor:pointer;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;column-gap:.85rem;padding:.9rem 1rem;list-style:none;display:grid}.tech-tile summary::-webkit-details-marker{display:none}.tech-tile .skill-icon{grid-row:span 2}.tech-tile .skill-icon,.tech-tile .skill-icon img{width:32px;height:32px}.tech-name{font-weight:600}.tech-tile[open] .tech-name{color:var(--accent)}.tech-meta{color:var(--muted);font-size:.78rem}.tech-details{border-top:1px solid var(--line);padding:0 1rem 1rem}.tech-details p{color:var(--muted);margin:.8rem 0 .4rem;font-size:.78rem}.tech-details ul{margin:0;padding:0;list-style:none}.tech-details a{padding-block:.3rem;font-size:.88rem;display:inline-block}.tech-details a:hover{color:var(--accent)}@media (width<=600px){.tech-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.tech-tile summary{grid-template-columns:1fr;row-gap:.4rem;padding:.8rem}.tech-tile .skill-icon{grid-row:auto}.tech-tile .skill-icon,.tech-tile .skill-icon img{width:26px;height:26px}}.portrait{background:radial-gradient(circle at 30% 25%,#ffffff26,#0000 55%),linear-gradient(135deg,#e4ae87,#a8603b);border-radius:50%;place-items:center;display:grid;overflow:hidden}.portrait img{object-fit:cover;width:100%;height:100%;display:block}.portrait span{color:#1a1410;font-size:2rem;font-weight:750}.about-header{align-items:center;gap:2rem;padding-block:4rem 2rem;display:flex}.about-header-photo{width:180px;height:180px;box-shadow:0 0 0 1px var(--line), 0 24px 50px #0008;border-radius:24px;flex:none}.about-header h1{margin-top:.6rem;font-size:clamp(2rem,5vw,3.4rem);line-height:1.05}.about-location{color:var(--muted);margin-top:.6rem}.about-story{max-width:68ch;padding-bottom:2.5rem}.about-story>p{color:var(--muted);font-size:1.05rem;line-height:1.85}.about-story>p:first-child{color:var(--text)}.about-story>p+p{margin-top:1.1rem}.about-actions{margin-block:1.8rem 2.2rem}.online-chips{flex-wrap:wrap;gap:.5rem;margin:.8rem 0 0;padding:0;list-style:none;display:flex}.online-chips a{border:1px solid var(--line);border-radius:999px;padding:.45rem .95rem;font-size:.85rem;transition:border-color .2s;display:inline-block}.online-chips a:hover{border-color:var(--accent)}.about-section{border-top:1px solid var(--line);padding-block:2.2rem}.focus-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:1rem;margin:1.2rem 0 0;padding:0;list-style:none;display:grid}.focus-list li{border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:1.3rem 1.4rem}.focus-list h3{font-size:1.1rem}.focus-list p{color:var(--muted);margin-top:.5rem;font-size:.92rem}.values-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:.9rem 2rem;margin:1.2rem 0 0;padding:0;list-style:none;display:grid}.values-list li{align-items:center;gap:.7rem;display:flex}.values-list svg{color:var(--accent);flex:none}.stack-columns{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:1.5rem 2.5rem;display:grid}.stack-columns h3{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:.75rem}.stack-columns .project-tags{margin-top:.6rem}.stack-columns .project-tags a{align-items:center;gap:.45rem;display:inline-flex}.education-list{gap:.8rem;margin:1.2rem 0 0;padding:0;list-style:none;display:grid}.education-list li{flex-wrap:wrap;align-items:baseline;gap:.2rem .8rem;display:flex}.education-list span{color:var(--muted)}@media (width<=600px){.about-header{flex-direction:column;align-items:flex-start;padding-top:2.5rem}.about-header-photo{width:140px;height:140px}}.hero-wordmark{padding-block:clamp(2.5rem,6vw,5rem) clamp(2.5rem,5vw,4rem)}.wordmark{letter-spacing:-.07em;font-size:clamp(4.2rem,15vw,12rem);font-weight:700;line-height:.95}.wordmark .identity-name{font-size:inherit;letter-spacing:inherit}.wordmark-grid{grid-template-columns:1fr 1.25fr;align-items:end;gap:2rem 3rem;margin-top:2.5rem;display:grid}.wordmark-meta{align-items:center;gap:1rem;display:flex}.wordmark-photo{width:84px;height:84px;box-shadow:0 0 0 3px var(--bg), 0 0 0 4px #e4ae8766;flex:none}.wordmark-name{font-size:1.1rem;font-weight:650}.wordmark-meta p:not(.wordmark-name){color:var(--muted);font-size:.9rem}.wordmark-bio p{color:var(--muted);line-height:1.8}@media (width<=800px){.wordmark-grid{grid-template-columns:1fr}}.fx{color:var(--accent);text-shadow:0 0 .12em #e4ae8740;display:inline-flex;position:relative}.fx-bolts{pointer-events:none;fill:none;stroke:#fff1e0;stroke-width:2.4px;stroke-linejoin:round;stroke-linecap:round;filter:drop-shadow(0 0 .05em #e4ae87b3);width:calc(100% + .16em);height:calc(100% + .24em);position:absolute;inset:-.12em -.08em;overflow:visible}.fx-bolts path{stroke-dasharray:100;stroke-dashoffset:100px;opacity:0;vector-effect:non-scaling-stroke}.wordmark .bolt-strike,.brand:hover .bolt-strike{animation:bolt-strike .7s var(--ease-out) both}.wordmark .fx>span,.brand:hover .fx>span{animation:fx-warm .7s .16s var(--ease-out) both}@keyframes bolt-strike{0%{opacity:.9;stroke-dashoffset:100px}25%{opacity:.9;stroke-dashoffset:0}38%{opacity:.35;stroke-dashoffset:0}48%{opacity:.85;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:0}}@keyframes fx-warm{0%{opacity:.3}35%{opacity:1;color:#f3c9a7}}.identity-symbol{overflow:visible}.identity-symbol .s-trace,.identity-symbol .s-tip,.identity-symbol .spark-ring{fill:none;opacity:0;stroke-linejoin:round;stroke-linecap:round}.identity-symbol .s-trace{stroke:var(--accent);stroke-width:2.6px;stroke-dasharray:100}.identity-symbol .s-tip{stroke:#fff3e4;stroke-width:3.6px;stroke-dasharray:7 93;filter:drop-shadow(0 0 2px var(--accent))}.identity-symbol .spark-ring{stroke:var(--accent);stroke-width:1.4px}.identity-symbol .s-shape,.identity-symbol .identity-spark,.identity-symbol .spark-ring{transform-box:fill-box;transform-origin:50%}.identity-spark{fill:var(--accent)}.is-home .site-header .s-trace,.brand:hover .s-trace{animation:1.2s both mark-trace}.is-home .site-header .s-tip,.brand:hover .s-tip{animation:1.2s both mark-tip}.is-home .site-header .s-shape,.brand:hover .s-shape{animation:1.2s both mark-fill}.is-home .site-header .identity-spark,.brand:hover .identity-spark{animation:mark-spark-pop .45s .82s var(--ease-out) both}.is-home .site-header .spark-ring,.brand:hover .spark-ring{animation:mark-ring .5s .88s var(--ease-out) forwards}@keyframes mark-trace{0%{opacity:1;stroke-dashoffset:100px;animation-timing-function:cubic-bezier(.77,0,.175,1)}58%{opacity:1;stroke-dashoffset:0}75%{opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:0}}@keyframes mark-tip{0%{opacity:1;stroke-dashoffset:7px;animation-timing-function:cubic-bezier(.77,0,.175,1)}58%{opacity:1;stroke-dashoffset:-93px}66%,to{opacity:0;stroke-dashoffset:-93px}}@keyframes mark-fill{0%,45%{opacity:0;transform:none}70%{opacity:1;animation-timing-function:cubic-bezier(.23,1,.32,1);transform:scale(1.08)}to{opacity:1;transform:none}}@keyframes mark-spark-pop{0%{opacity:0;transform:scale(.3)rotate(-120deg)}}@keyframes mark-ring{0%{opacity:.9;transform:scale(.4)}to{opacity:0;transform:scale(2.4)}}.wordmark-block{flex-direction:column;align-items:flex-end;max-width:100%;display:inline-flex}.wordmark-block .wordmark{align-self:flex-start}.wordmark-tagline{color:var(--text);margin-top:.4rem;font-size:clamp(1.15rem,2.4vw,1.8rem)}.wordmark-grid .wordmark-bio>p:first-child{margin-top:0}.scot-avatar{z-index:8;touch-action:none;user-select:none;cursor:pointer;background:0 0;border:0;width:96px;height:96px;padding:0;position:fixed;bottom:1.5rem;right:1.9rem}.scot-avatar[hidden]{display:none}.scot-avatar img,.scot-avatar canvas{object-fit:contain;width:100%;height:100%;image-rendering:pixelated;pointer-events:none;display:block;position:absolute;inset:0}.scot-avatar canvas{opacity:0}.scot-avatar[data-ready=true] canvas{opacity:1}.scot-avatar[data-ready=true] img{opacity:0}.scot-launcher-icon{object-fit:contain;image-rendering:pixelated}.scot-avatar:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:16px}.scot-guide[open]+.scot-avatar{transform:none}@media (width<=760px){.scot-avatar{width:72px;height:72px;bottom:1rem;right:1rem}.scot-guide[open]+.scot-avatar{visibility:hidden;opacity:0;pointer-events:none}}.has-scot .scot-launcher{display:none}.has-scot .footer-bottom{padding-bottom:7rem}.scot-avatar[data-living=true]{cursor:grab}.scot-avatar[data-dragging=true]{cursor:grabbing;z-index:11}.scot-avatar canvas{filter:drop-shadow(2px 0 #0b0f14)drop-shadow(-2px 0 #0b0f14)drop-shadow(0 2px #0b0f14)drop-shadow(0 -2px #0b0f14)}.scot-speech{color:#f0eee8;width:max-content;max-width:180px;font:500 .75rem/1.4 var(--font-body,system-ui);pointer-events:none;background:#222629;border:1px solid #6c5948;border-radius:14px 14px 4px;padding:.6rem .8rem;position:absolute;bottom:calc(100% - 12px);right:0;box-shadow:0 6px 18px #0003}.scot-avatar[data-edge=left] .scot-speech{border-radius:14px 14px 14px 4px;left:0;right:auto}.scot-speech[hidden]{display:none}.site-footer{border-top:1px solid var(--line);margin-top:4rem;font-size:.85rem}.footer-main{grid-template-columns:1.6fr repeat(3,1fr);gap:2rem;padding-block:3rem 2.5rem;display:grid}.footer-name{align-items:center;gap:.6rem;font-size:1.15rem;display:inline-flex}.footer-about p{max-width:30ch;color:var(--muted);margin:.9rem 0 0;line-height:1.6}.footer-about .footer-place{margin-top:.4rem;font-size:.8rem}.footer-col h2{color:var(--text);letter-spacing:.12em;text-transform:uppercase;margin:0 0 .9rem;font-size:.75rem;font-weight:600}.footer-col ul{gap:.15rem;margin:0;padding:0;list-style:none;display:grid}.footer-col a,.footer-bottom a{min-height:32px;color:var(--muted);align-items:center;display:inline-flex}.footer-col a span,.footer-bottom a span{margin-left:.3em}.footer-col a:hover,.footer-bottom a:hover{color:var(--accent)}.footer-bottom{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem 1.5rem;padding-block:1.25rem;font-size:.78rem;display:flex}.footer-bottom p{margin:0}@media (width<=860px){.footer-main{grid-template-columns:repeat(3,1fr)}.footer-about{grid-column:1/-1}}@media (width<=520px){.footer-main{grid-template-columns:repeat(2,1fr)}}.home-all-projects{margin-top:1.5rem;display:inline-flex}
