:root{--text:#4b5563;--text-h:#0f1115;--bg:#e9ecf2;--surface:#fff;--surface-alt:#f2f4f8;--border:#d6dae2;--accent:#2f5fdb;--accent-bg:#2f5fdb14;--accent-border:#2f5fdb59;--shadow:#0f11150f 0 1px 2px, #0f11150f 0 8px 20px -6px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;font:16px/1.5 var(--sans);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--text:#b3b8c2;--text-h:#f3f4f6;--bg:#12131a;--surface:#1a1c25;--surface-alt:#20222c;--border:#2e303a;--accent:#7f9dff;--accent-bg:#7f9dff1f;--accent-border:#7f9dff66;--shadow:#0006 0 1px 2px, #00000059 0 8px 20px -6px}}*{box-sizing:border-box}body{margin:0}#root{flex-direction:column;min-height:100svh;display:flex}h1,h2,h3{font-family:var(--sans);color:var(--text-h);margin:0;font-weight:600}p{margin:0}a{color:inherit}.site-header{border-bottom:1px solid var(--border);background:var(--surface)}.site-header-inner{flex-wrap:wrap;align-items:baseline;gap:12px;max-width:1080px;margin:0 auto;padding:24px;display:flex}.site-title{color:var(--text-h);font-size:22px;font-weight:700;text-decoration:none}.site-subtitle{color:var(--text);font-size:15px}.site-header-nav{flex-wrap:wrap;align-items:center;gap:20px;margin-left:auto;display:flex}.site-header-link{color:var(--text);font-size:14px;font-weight:500;text-decoration:none}.site-header-link:hover{color:var(--accent)}.site-header-email{word-break:break-all}.tech-toggle{color:var(--text);cursor:pointer;background:0 0;border:none;align-self:center;align-items:center;gap:8px;padding:4px 0;font-size:14px;font-weight:500;display:inline-flex}.tech-toggle[aria-pressed=true]{color:var(--accent)}.tech-toggle-track{background:var(--border);border-radius:999px;flex-shrink:0;width:34px;height:20px;transition:background .15s;display:inline-block;position:relative}.tech-toggle[aria-pressed=true] .tech-toggle-track{background:var(--accent)}.tech-toggle-thumb{background:var(--surface);border-radius:50%;width:16px;height:16px;transition:left .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0003}.tech-toggle[aria-pressed=true] .tech-toggle-thumb{left:16px}.site-footer{border-top:1px solid var(--border);text-align:center;color:var(--text);padding:24px;font-size:14px}.home{flex:1;width:100%;max-width:1080px;margin:0 auto;padding:40px 24px 64px}.intro{max-width:640px;margin-bottom:32px}.intro h1{letter-spacing:-.6px;margin-bottom:12px;font-size:34px}.intro p{font-size:16px;line-height:1.6}.tag-filter{margin-bottom:24px}.tag-filter-toggle{font:inherit;color:var(--text-h);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:8px 16px;font-size:14px;font-weight:600;display:inline-flex}.tag-filter-toggle:hover{border-color:var(--accent-border)}.tag-filter-count{background:var(--accent-bg);min-width:20px;height:20px;color:var(--accent);border-radius:999px;justify-content:center;align-items:center;padding:0 6px;font-size:12px;font-weight:700;display:inline-flex}.tag-filter-chevron{opacity:.7;transition:transform .15s;display:inline-block}.tag-filter-chevron.open{transform:rotate(180deg)}.tag-filter-summary{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.tag-filter-panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:16px;margin-top:12px;padding:20px 20px 4px;animation:.15s ease-out tag-filter-panel-open;display:flex}@keyframes tag-filter-panel-open{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.tag-filter-group{flex-wrap:wrap;align-items:baseline;gap:14px;padding-bottom:16px;display:flex}.tag-filter-group+.tag-filter-group{border-top:1px solid var(--border);padding-top:16px}.tag-filter-group-label{text-transform:uppercase;letter-spacing:.06em;color:var(--text);opacity:.7;flex:0 0 110px;font-size:12px;font-weight:600}.tag-filter-list{flex-wrap:wrap;flex:1;gap:8px;display:flex}.tag-chip{font:inherit;border:1px solid var(--border);background:var(--surface-alt);color:var(--text);cursor:pointer;border-radius:999px;padding:6px 12px;font-size:13px;transition:border-color .15s,color .15s,background .15s}.tag-chip:hover{border-color:var(--accent-border)}.tag-chip-active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent);font-weight:600}.tag-clear{font:inherit;color:var(--accent);cursor:pointer;white-space:nowrap;background:0 0;border:none;align-self:flex-start;padding:0;font-size:13px;text-decoration:underline}.tag-filter-panel>.tag-clear{padding-bottom:16px}.project-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:20px;display:grid}.project-card{background:var(--surface);border:1px solid var(--border);height:100%;min-height:220px;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;padding:20px;transition:transform .15s,border-color .15s;display:flex}.project-card-compact{min-height:150px}.project-card:hover{border-color:var(--accent-border);transform:translateY(-2px)}.project-card-main-link{color:inherit;text-decoration:none;display:block}.project-card h3{margin-bottom:8px;font-size:18px}.project-card-tagline{min-height:42px;margin-bottom:16px;font-size:14px;line-height:1.5}.project-card-tags{flex-wrap:wrap;gap:6px;display:flex}.project-card-more-info{color:var(--accent);align-self:flex-end;margin-top:auto;padding-top:12px;font-size:13px;font-weight:500;text-decoration:none}.project-card-more-info:hover{text-decoration:underline}.tag-pill{background:var(--accent-bg);color:var(--accent);border-radius:999px;padding:3px 10px;font-size:12px;font-weight:500}.tag-pill-more{color:var(--text);background:0 0}.empty-state{color:var(--text);padding:32px 0;font-size:15px}.project-detail{flex:1;width:100%;max-width:720px;margin:0 auto;padding:40px 24px 64px}.back-link{color:var(--accent);margin-bottom:24px;font-size:14px;text-decoration:none;display:inline-block}.project-detail h1{margin-bottom:8px;font-size:32px}.project-detail-tagline{margin-bottom:20px;font-size:17px}.project-detail-tags{flex-wrap:wrap;gap:8px;margin:12px 0 10px;display:flex}.project-detail-links{flex-wrap:wrap;gap:12px;margin-bottom:36px;display:flex}.btn{border:1px solid #0000;border-radius:8px;padding:10px 18px;font-size:14px;font-weight:600;text-decoration:none;display:inline-block}.btn-primary{background:var(--accent);color:#fff}.btn-secondary{background:var(--surface);border-color:var(--border);color:var(--text-h)}.project-detail-section{margin-bottom:28px}.project-detail-about h2{margin-bottom:14px;font-size:24px}.project-detail-about p{font-size:18px;line-height:1.8}.project-detail-games h2{margin-bottom:14px;font-size:24px}.project-detail-games p{font-size:18px;line-height:1.8}.related-games-list{margin:10px 0 14px;padding-left:20px;font-size:18px;line-height:1.8}.affiliate-disclosure{opacity:.7;font-style:italic;font-size:13px!important}.project-detail-technical{border:1px solid var(--border);color:var(--text);opacity:.8;border-radius:8px;margin-bottom:28px;padding:14px 16px}.project-detail-technical h2{text-transform:uppercase;letter-spacing:.03em;color:var(--text);margin:0;font-size:13px;font-weight:600}.project-detail-technical p{margin:12px 0 10px;font-size:13px;line-height:1.6}.tech-list{margin:0;padding-left:20px;font-size:13px;line-height:1.7}.resume{flex:1;width:100%;max-width:760px;margin:0 auto;padding:40px 24px 64px}.resume-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px;display:flex}.resume-headline h1{margin-bottom:4px;font-size:32px}.resume-title{color:var(--text);font-size:17px}.resume-contact{text-align:right;flex-direction:column;align-items:flex-end;gap:4px;display:flex}.resume-contact-link{color:var(--accent);font-size:14px;text-decoration:none}.resume-contact-link:hover{text-decoration:underline}.resume-downloads{flex-wrap:wrap;gap:12px;margin-bottom:36px;display:flex}.resume-section{margin-bottom:32px}.resume-section h2{text-transform:uppercase;letter-spacing:.06em;color:var(--text);opacity:.75;border-bottom:1px solid var(--border);margin-bottom:16px;padding-bottom:8px;font-size:15px}.resume-overview{font-size:17px;line-height:1.7}.resume-impact{flex-direction:column;gap:12px;font-size:15px;line-height:1.6;list-style:none;display:flex}.resume-impact strong,.resume-job-head strong{color:var(--text-h)}.resume-skills{flex-direction:column;gap:10px;display:flex}.resume-skill-row{align-items:baseline;gap:14px;font-size:15px;display:flex}.resume-skill-row dt{color:var(--text-h);flex:0 0 130px;font-weight:600}.resume-skill-row dd{flex:1;line-height:1.6}.resume-job{margin-bottom:22px}.resume-job-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}.resume-job-head h3{color:var(--text-h);font-size:17px}.resume-job-company{opacity:.4;font-weight:400}.resume-job-dates{color:var(--text);opacity:.8;white-space:nowrap;font-size:13px}.resume-job-highlights{flex-direction:column;gap:6px;margin:10px 0 0;padding-left:20px;font-size:15px;line-height:1.6;display:flex}.resume-personal{flex-direction:column;gap:10px;margin:0;padding-left:20px;font-size:15px;line-height:1.6;display:flex}.resume-personal a,.resume-contact a{color:var(--accent)}@media (width<=600px){.site-header-inner{padding:16px}.resume{padding:24px 16px 48px}.resume-skill-row{flex-direction:column;gap:2px}.resume-skill-row dt{flex:none}.home{padding:24px 16px 48px}.intro{margin-bottom:20px}.intro h1{font-size:26px}.intro p{font-size:15px}.tag-filter-panel{padding:16px 16px 4px}.tag-filter-group{flex-direction:column;align-items:flex-start;gap:8px}.tag-filter-group-label{flex:none}.project-grid{grid-template-columns:1fr}.project-detail{padding:24px 16px 48px}}
