:root{color-scheme:light;--background: #fcf8f3;--text: #07040b;--primary: #472773;--primary-background: var(--primary);--primary-foreground: var(--background);--primary-hover: var(--primary-accent-3);--primary-hover-foreground: var(--background);--primary-accent-1: #c8bed5;--primary-accent-2: #2b1745;--primary-accent-3: #1c102e;--secondary: #b59d16;--border-primary: #c8bed5;--surface-text: var(--background)}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--background: #100e13;--text: #f5effa;--primary: #b69ad9;--primary-background: var(--primary);--primary-foreground: var(--background);--primary-hover: #9e81c0;--primary-hover-foreground: var(--background);--border-primary: #60359c;--primary-accent-1: #d4c4e5;--primary-accent-2: #31223f;--primary-accent-3: #19151f;--secondary: #e4c65a;--surface-text: var(--text)}}.kanit-thin{font-family:Kanit,sans-serif;font-weight:100;font-style:normal}.kanit-extralight{font-family:Kanit,sans-serif;font-weight:200;font-style:normal}.kanit-light{font-family:Kanit,sans-serif;font-weight:300;font-style:normal}.kanit-regular{font-family:Kanit,sans-serif;font-weight:400;font-style:normal}.kanit-medium{font-family:Kanit,sans-serif;font-weight:500;font-style:normal}.kanit-semibold{font-family:Kanit,sans-serif;font-weight:600;font-style:normal}.kanit-bold{font-family:Kanit,sans-serif;font-weight:700;font-style:normal}.kanit-extrabold{font-family:Kanit,sans-serif;font-weight:800;font-style:normal}.kanit-black{font-family:Kanit,sans-serif;font-weight:900;font-style:normal}.kanit-thin-italic{font-family:Kanit,sans-serif;font-weight:100;font-style:italic}.kanit-extralight-italic{font-family:Kanit,sans-serif;font-weight:200;font-style:italic}.kanit-light-italic{font-family:Kanit,sans-serif;font-weight:300;font-style:italic}.kanit-regular-italic{font-family:Kanit,sans-serif;font-weight:400;font-style:italic}.kanit-medium-italic{font-family:Kanit,sans-serif;font-weight:500;font-style:italic}.kanit-semibold-italic{font-family:Kanit,sans-serif;font-weight:600;font-style:italic}.kanit-bold-italic{font-family:Kanit,sans-serif;font-weight:700;font-style:italic}.kanit-extrabold-italic{font-family:Kanit,sans-serif;font-weight:800;font-style:italic}.kanit-black-italic{font-family:Kanit,sans-serif;font-weight:900;font-style:italic}#projects-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,max(22rem,calc((100% - 1.25rem)/2))),1fr));gap:1.25rem}#projects-list>.projects-loading,#projects-list>.no-projects-message{grid-column:1 / -1}#projects-list.error-message{display:block}.projects-filter-trigger{display:none}@media(max-width:900px){.projects-filter-trigger{display:inline-flex;align-items:center;gap:.5rem;min-height:44px;margin:-.5rem 0 1rem;padding:.5rem .85rem;border:1px solid var(--primary);border-radius:6px;color:var(--primary);font-size:1rem;text-decoration:none;cursor:pointer}.projects-filter-trigger:before{content:"◆";font-size:.65rem}.projects-filter-trigger:hover,.projects-filter-trigger:focus-visible{background:var(--primary);color:var(--background)}}.projects-loading{display:grid;justify-items:center;gap:1rem;width:100%;padding:4rem 1rem;color:var(--text);text-align:center}.projects-loading p{margin:0;font-size:1.05rem}.projects-loading-mark{display:block;width:3rem;aspect-ratio:1;background:var(--secondary);clip-path:polygon(50% 0,100% 38%,81% 100%,19% 100%,0 38%);animation:projectLoadingPulse 1.4s ease-in-out infinite}@keyframes projectLoadingPulse{0%,to{opacity:.45;transform:scale(.85) rotate(0)}50%{opacity:1;transform:scale(1) rotate(18deg)}}@media(prefers-reduced-motion:reduce){.projects-loading-mark{animation:none}}#projects-list .project-card{--card-background: var(--primary-accent-3);--card-background-hover: var(--primary-accent-2);--card-text: var(--surface-text);--card-text-muted: var(--primary-accent-1);--card-text-subtle: color-mix(in srgb, var(--primary-accent-1) 60%, var(--primary-accent-3));--card-chip: color-mix(in srgb, var(--primary-accent-1) 14%, transparent);--card-accent: var(--secondary);--card-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--language-color: var(--card-text-subtle);position:relative;display:flex;flex-direction:column;box-sizing:border-box;min-height:17rem;padding:1.6rem 1.9rem 1.5rem;border-radius:16px;background:var(--card-background);color:var(--card-text);box-shadow:0 4px 14px #1c102e38;transition:background-color .2s ease,outline-color .2s ease;outline:2px solid transparent;outline-offset:4px}#projects-list .project-card:hover,#projects-list .project-card:has(.project-link:focus-visible){background:var(--card-background-hover);outline-color:var(--card-accent)}#projects-list .project-meta{display:flex;align-items:center;gap:1rem;min-height:1.75rem}#projects-list .project-context{padding:.3rem .75rem;border-radius:999px;background:var(--card-chip);color:var(--card-text);font-size:.8rem;font-weight:400;line-height:1.2}#projects-list .project-language{display:inline-flex;align-items:center;gap:.5rem;margin-left:auto;color:var(--card-text-muted);font-family:var(--card-mono);font-size:.8rem}#projects-list .project-language-dot{width:.55rem;height:.55rem;border-radius:50%;background:var(--language-color)}#projects-list .project-owner{margin:1.1rem 0 0;color:var(--card-text-subtle);font-family:var(--card-mono);font-size:.85rem;line-height:1.2}#projects-list .project-card-heading>h2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;margin:.15rem 0 0;color:var(--card-text);font-size:1.9rem;font-weight:600;line-height:1.2;overflow-wrap:anywhere}#projects-list .project-card-details{flex:1}#projects-list .project-card-details p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden;max-width:34rem;margin:.8rem 0 0;color:var(--card-text-muted);font-weight:400;line-height:1.6;overflow-wrap:break-word}#projects-list .project-card-footer{display:flex;align-items:center;gap:1rem;margin-top:1.75rem}#projects-list .project-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none}#projects-list .project-tag{padding:.3rem .55rem;border-radius:5px;background:var(--card-chip);color:var(--card-text-muted);font-family:var(--card-mono);font-size:.8rem;line-height:1.2}#projects-list .project-link{display:inline-flex;flex-shrink:0;align-items:center;gap:.5rem;min-height:44px;margin-left:auto;color:var(--card-accent);font-size:.95rem;font-weight:500;text-decoration:none}#projects-list .project-link:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border-radius:inherit}#projects-list .project-link:focus-visible{outline:none}#projects-list .project-link-arrow{font-size:.9rem;line-height:1;transition:transform .2s ease}#projects-list .project-card:hover .project-link-arrow,#projects-list .project-link:focus-visible .project-link-arrow{transform:translate(2px,-2px)}#projects-list .project-card[data-language=TypeScript]{--language-color: #3178c6}#projects-list .project-card[data-language=Python]{--language-color: #3572a5}#projects-list .project-card[data-language=Dart]{--language-color: #00b4ab}#projects-list .project-card[data-language="C#"]{--language-color: #178600}#projects-list .project-card[data-language="C++"]{--language-color: #f34b7d}#projects-list .project-card[data-language=HTML]{--language-color: #e34c26}#projects-list .project-card[data-language=Java]{--language-color: #b07219}#projects-list .project-card[data-language=Processing]{--language-color: #0096d8}@media(prefers-reduced-motion:reduce){#projects-list .project-card,#projects-list .project-link-arrow{transition:none}#projects-list .project-card:hover .project-link-arrow,#projects-list .project-link:focus-visible .project-link-arrow{transform:none}}@media(max-width:600px){#projects-list{gap:1rem}#projects-list .project-card{min-height:0;padding:1.25rem 1.2rem 1rem}#projects-list .project-card-heading>h2{font-size:1.5rem}#projects-list .project-card-details p{font-size:.95rem}#projects-list .project-card-footer{flex-wrap:wrap;gap:.5rem 1rem;margin-top:1.25rem}}.nav-list{list-style:none}.nav-list li{list-style-type:none}.nav-list a{text-decoration:none;color:var(--text);transition:color .2s ease,opacity .2s ease}.nav-list a:hover,.nav-list a:focus-visible{color:var(--primary)}.nav-list a.active{color:var(--primary);font-weight:600;text-decoration:underline;text-decoration-color:var(--secondary);text-decoration-thickness:2px;text-underline-offset:.25em}.nav-list a.back-link{color:var(--secondary);font-weight:700;display:inline-flex;align-items:center;gap:.35rem;opacity:.85;transition:opacity .2s ease,color .2s ease}.nav-list a.back-link:hover{opacity:1}.nav-list li.nav-group{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem}.nav-list li.nav-group .arrow{color:var(--secondary);font-size:.9em}.nav-list li.nav-group .nav-group-divider{color:var(--primary-accent-1);opacity:.6;font-size:.85em}.nav-list .nav-heading{display:block;color:var(--primary);font-weight:700;margin-bottom:.5rem;padding-bottom:.25rem;border-bottom:1px solid var(--primary-accent-1)}.nav-list .nav-heading.filter-heading{margin-top:.75rem;color:var(--text);font-size:.7em;letter-spacing:.05em;text-transform:uppercase}.nav-list a.filter-link{font-size:.8em;opacity:.75}nav{font-size:1rem;position:fixed;z-index:1;right:0;width:max-content;top:50%;transform:translateY(-50%)}nav li{margin:0 2rem 0 0;animation:navItemIn .22s cubic-bezier(.22,1,.36,1) both;animation-delay:calc(var(--i, 0) * 25ms)}@keyframes navItemIn{0%{opacity:0;transform:translate(-6px)}to{opacity:1;transform:translate(0)}}@media(prefers-reduced-motion:reduce){nav li{animation:none}}#menu-toggle{position:fixed;right:20px;bottom:calc(20px + env(safe-area-inset-bottom,0px));width:1px;height:1px;opacity:0;pointer-events:none}.menu-button-container{display:none;position:fixed;right:20px;bottom:calc(20px + env(safe-area-inset-bottom,0px));width:52px;height:52px;border-radius:50%;background:var(--primary);align-items:center;justify-content:center;cursor:pointer;z-index:30;box-shadow:0 8px 24px #47277359}.menu-button,.menu-button:before,.menu-button:after{position:absolute;width:20px;height:2px;background:var(--background);border-radius:2px;transition:transform .25s cubic-bezier(.22,1,.36,1),opacity .2s ease,background .2s ease}.menu-button:before{content:"";transform:translateY(-6px)}.menu-button:after{content:"";transform:translateY(6px)}#menu-toggle:checked~.menu-button-container .menu-button{background:transparent}#menu-toggle:checked~.menu-button-container .menu-button:before{transform:rotate(45deg)}#menu-toggle:checked~.menu-button-container .menu-button:after{transform:rotate(-45deg)}.nav-backdrop{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#1c102e59;opacity:0;pointer-events:none;transition:opacity .25s ease;z-index:20}#menu-toggle:checked~.nav-backdrop{opacity:1;pointer-events:auto}.mobile-nav-sheet{display:none;position:fixed;left:0;right:0;bottom:0;background:var(--background);border-radius:20px 20px 0 0;padding:10px 20px calc(20px + env(safe-area-inset-bottom,0px));transform:translateY(105%);transition:transform .32s cubic-bezier(.22,1,.36,1);z-index:25;box-shadow:0 -8px 32px #1c102e2e}#menu-toggle:checked~.mobile-nav-sheet{transform:translateY(0)}.sheet-handle{width:36px;height:4px;border-radius:2px;background:var(--primary-accent-1);margin:0 auto 16px}.sheet-item{opacity:0;transform:translateY(8px)}#menu-toggle:checked~.mobile-nav-sheet .sheet-item{animation:sheetItemIn .32s cubic-bezier(.22,1,.36,1) both;animation-delay:calc(var(--i, 0) * 55ms)}@keyframes sheetItemIn{to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.sheet-item,#menu-toggle:checked~.mobile-nav-sheet .sheet-item{animation:none;opacity:1;transform:none}}.filter-scroller{display:flex;gap:6px;overflow-x:auto;scroll-snap-type:x mandatory;padding:2px 2px 14px;-webkit-overflow-scrolling:touch}.filter-scroller::-webkit-scrollbar{display:none}.chip{flex:0 0 auto;scroll-snap-align:start;padding:7px 12px;border-radius:999px;border:1.5px solid var(--primary-accent-1);font-size:12px;color:var(--text);opacity:.75;white-space:nowrap;background:transparent;font:inherit}.chip.active{background:var(--primary);border-color:var(--primary);color:var(--background);font-weight:700;opacity:1}@media(max-width:1269px){nav{display:none}.menu-button-container,.nav-backdrop{display:flex}.mobile-nav-sheet{display:block}.mobile-nav-sheet .nav-list{margin:0;padding:0}.mobile-nav-sheet .nav-list a{display:block;min-height:44px;padding:10px 4px;font-size:1.1rem}}.site-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.5rem;padding:2.5rem 15%;background:var(--primary-accent-3);border-top:2px solid var(--secondary)}.footer-signature{display:flex;flex-direction:column;gap:.35rem}.footer-tagline{color:var(--text);font-size:.95rem;opacity:.85}.footer-copy{color:var(--primary-accent-1);font-size:.8rem;letter-spacing:.04em}.footer-links{display:flex;align-items:center;gap:1.25rem}.footer-icon-link{display:inline-flex;align-items:center;color:var(--primary-accent-1);font-size:.9rem;text-decoration:none;opacity:.85;transition:opacity .2s ease,transform .2s ease}.footer-icon-link:hover,.footer-icon-link:focus-visible{opacity:1;transform:translateY(-2px)}.footer-icon-link img{filter:invert(1);opacity:.9}.footer-top-link{display:inline-flex;align-items:center;gap:.35rem;color:var(--secondary);font-weight:700;text-decoration:none;opacity:.9;transition:opacity .2s ease,transform .2s ease}.footer-top-link:hover,.footer-top-link:focus-visible{opacity:1;transform:translateY(-2px)}.footer-top-link .arrow{font-size:.9em}@media(max-width:640px){.site-footer{flex-direction:column;text-align:center;padding:2.5rem 8%}}*,*:before,*:after{box-sizing:border-box}html,body{font-size:16px;min-height:100%;margin:0;line-height:1.5;scroll-snap-type:y mandatory;background:var(--background);color:var(--text)}html{scrollbar-color:var(--primary-accent-1) var(--background);scrollbar-width:thin}html::-webkit-scrollbar{width:10px;height:10px}html::-webkit-scrollbar-track{background:var(--background)}html::-webkit-scrollbar-thumb{border:3px solid var(--background);border-radius:999px;background:var(--primary-accent-1)}html::-webkit-scrollbar-thumb:hover{background:var(--secondary)}body:before,body:after{position:fixed;aspect-ratio:1;background:var(--primary);clip-path:polygon(50% 0,100% 38%,81% 100%,19% 100%,0 38%);content:"";opacity:.1;pointer-events:none;z-index:0}body:before{top:50%;left:50%;width:min(130vmin,120rem);opacity:.045;transform:translate(-50%,-50%) rotate(8deg)}body:after{top:50%;left:50%;width:min(105vmin,96rem);background:var(--secondary);opacity:.035;transform:translate(-50%,-50%) rotate(-12deg)}main{position:relative;z-index:1}#language-toggle{position:fixed;top:1.25rem;right:1.25rem;z-index:15;min-width:3rem;min-height:2.25rem;padding:.35rem .65rem;border:1px solid var(--primary);border-radius:999px;background:color-mix(in srgb,var(--background) 86%,transparent);color:var(--primary);font:inherit;font-size:.8rem;font-weight:700;letter-spacing:.08em;cursor:pointer;transition:background-color .2s ease,color .2s ease,transform .2s ease}#language-toggle:hover,#language-toggle:focus-visible{background:var(--primary);color:var(--background);transform:translateY(-2px)}h1{color:var(--primary)}h2{color:var(--text)}section{min-height:100vh}section>div{padding:10% 15%}.title{font-size:6rem;font-weight:700;text-transform:none}.sub-title{font-size:clamp(1.4rem,2vw,2rem);color:var(--text);max-width:38rem}.medium-title{font-size:2.25rem}.eyebrow{margin:0 0 1rem;color:var(--secondary);font-size:.95rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.home-intro,.contact-copy{max-width:36rem;color:var(--text);font-size:1.15rem}.projects-intro{max-width:34rem;margin:.75rem 0 2.5rem;font-size:1rem;font-weight:400;line-height:1.6;color:var(--primary)}.home-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2rem}.button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:.65rem 1rem;border:2px solid var(--primary);border-radius:6px;font-size:1rem;text-decoration:none;transition:background-color .2s ease,color .2s ease,border-color .2s ease,transform .2s ease,box-shadow .2s ease}.button-primary{background:var(--primary);color:var(--background)}.button-secondary{background:transparent;color:var(--primary)}.button:hover,.button:focus-visible{transform:translateY(-2px);box-shadow:0 5px 16px color-mix(in srgb,var(--primary) 22%,transparent)}.button:active{transform:translateY(0);box-shadow:none}.button-primary:hover,.button-primary:focus-visible{background:var(--primary-hover);border-color:var(--primary-hover);color:var(--primary-hover-foreground)}.button-secondary:hover,.button-secondary:focus-visible{background:var(--primary);color:var(--background)}.no-scroll{overflow:hidden}#home>div{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:100svh}#home .title{max-width:12ch;margin:0;line-height:1.05}#home .eyebrow{margin-bottom:1.25rem}#home .sub-title{max-width:38rem;margin:1.5rem 0 0;line-height:1.25}#home .home-intro{margin:1.25rem 0 0;line-height:1.65}#home .home-actions{justify-content:center;margin-top:2.25rem}#home .home-actions .button{min-width:10.5rem}#about{min-height:70vh}#about>div{min-height:70vh}#about .medium-title{max-width:18ch;margin:0;line-height:1.1}.about-points{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2rem;margin-top:3rem}.about-point{padding-top:1rem;border-top:2px solid var(--secondary)}.about-point h2{margin:0;color:var(--primary);font-size:1.15rem}.about-point p{margin:.75rem 0 0;color:var(--text);font-size:1rem;line-height:1.55}#contact .medium-title{max-width:16ch;margin:0;font-size:clamp(2.5rem,4vw,3.75rem);line-height:1.08}#contact>div{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100svh;text-align:center}#contact .eyebrow{margin-bottom:1.25rem}#contact .contact-copy{max-width:38rem;margin:1.5rem 0 .9rem;font-size:1.25rem;line-height:1.45}#contact .contact-email{display:inline-block;margin:2.25rem 0 0;color:var(--primary);font-size:clamp(1.25rem,3vw,2rem);font-weight:600;text-decoration-color:var(--secondary);text-decoration-thickness:2px;text-underline-offset:.25em;transition:color .2s ease,transform .2s ease}#contact .contact-email:hover,#contact .contact-email:focus-visible{color:var(--secondary);transform:translateY(-2px)}@media(min-width:901px){section>div{width:100%;min-height:100vh;margin:0 auto;padding:8rem 15%}#home .title{font-size:clamp(4rem,5vw,5.25rem)}}@media(max-width:900px){#home .title{font-size:clamp(2.4rem,7vw,3.4rem)}.medium-title{font-size:clamp(2rem,5vw,2.6rem)}}@media(min-width:601px)and (max-width:900px){section>div{padding:10%}#home .title{font-size:clamp(2.75rem,6vw,4rem)}#home .sub-title{max-width:34rem}.about-points{grid-template-columns:1fr;gap:1.5rem;margin-top:2rem}}@media(max-width:600px){html,body{scroll-snap-type:y proximity}section>div{padding:18% 6% 12%}#language-toggle{top:.75rem;right:.75rem}#home .title{font-size:clamp(2rem,9vw,2.8rem);line-height:1.15}#about{min-height:auto}#about>div{min-height:auto}.about-points{grid-template-columns:1fr;gap:1.5rem;margin-top:2rem}#home .sub-title{font-size:1.45rem;line-height:1.3}#home .home-intro{font-size:1.05rem}#home .home-actions{margin-top:1.5rem}#home .home-actions .button{flex:1 1 100%}#contact .medium-title{font-size:clamp(2.35rem,10vw,3.2rem)}#contact .contact-copy{font-size:1.1rem}body:before,body:after{width:150vmin;opacity:.035}body:before{top:50%;left:50%}body:after{top:50%;left:50%;width:122vmin;opacity:.025}.medium-title{font-size:2rem}}
