:root{--bg:#05060a;--bg-alt:#080a10;--accent:#ff3b3b;--accent-soft:rgba(255,59,59,.28);--accent-link:rgba(255,59,59,.8);--accent-link-visited:#b82a2a;--accent-link-visited-hover:#e53935;--panel-bg:rgba(15,17,25,.8);--panel-border:rgba(255,255,255,.05);--landing-gradient-overlay:rgba(0,0,0,.45);--text:#f5f5f7;--muted:#a2a4b0;--radius-lg:18px;--radius-sm:10px;--shadow-soft:0 18px 40px rgba(0,0,0,.6);--transition-fast:180ms ease-out;--transition-med:260ms ease-out;--max-width:1080px;--placeholder:rgba(255,255,255,.4);--nav-offset:110px;--tooltip-opacity:.85;--landing-pronounce-border:rgba(255,255,255,.2);--landing-pronounce-bg:rgba(255,255,255,.04);--landing-pronounce-fg:var(--muted);--landing-pronounce-border-active:rgba(255,255,255,.35);--landing-pronounce-bg-active:rgba(255,255,255,.08);--landing-pronounce-fg-active:#fff;--landing-pronounce-pulse-duration:1.05s;--landing-pronounce-pulse-easing:ease-in-out;--color-type-bg:rgba(58,129,255,.2);--color-type-border:rgba(58,129,255,.7);--color-type-text:#e9f2ff;--color-type-hover-bg:rgba(58,129,255,.14);--color-type-hover-border:rgba(58,129,255,.5);--color-project-bg:rgba(255,213,79,.22);--color-project-border:rgba(255,213,79,.7);--color-project-text:#fff7d1;--color-project-hover-bg:rgba(255,213,79,.16);--color-project-hover-border:rgba(255,213,79,.55);--color-genre-bg:rgba(229,57,53,.22);--color-genre-border:rgba(229,57,53,.7);--color-genre-text:#ffe0de;--color-genre-hover-bg:rgba(229,57,53,.16);--color-genre-hover-border:rgba(229,57,53,.5);--color-platform-bg:rgba(255,255,255,.18);--color-platform-border:rgba(255,255,255,.5);--color-platform-text:#ffffff;--color-platform-hover-bg:rgba(255,255,255,.12);--color-platform-hover-border:rgba(255,255,255,.5);--color-tech-bg:rgba(76,175,80,.2);--color-tech-border:rgba(76,175,80,.7);--color-tech-text:#e4f8e5;--color-tech-hover-bg:rgba(76,175,80,.16);--color-tech-hover-border:rgba(76,175,80,.6);}*{box-sizing:border-box;}[hidden]{display:none!important;}::placeholder{color:var(--placeholder);opacity:1;}::-webkit-input-placeholder{color:var(--placeholder);opacity:1!important;}html{scroll-behavior:smooth;scroll-padding-top:var(--nav-offset);scrollbar-gutter:stable both-edges;}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}@media (max-width:819px){:root{--nav-offset:120px}}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:Verdana,Arial,Helvetica,sans-serif;-webkit-font-smoothing:antialiased;}body{min-height:100vh;display:flex;flex-direction:column;align-items:center;background-image:linear-gradient(to right,rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.03) 1px,transparent 1px);background-size:64px 64px;background-attachment:fixed;}.page{width:100%;max-width:var(--max-width);padding:24px 16px 64px;}@media (min-width:768px){.page{padding:32px 24px 80px}}.fade-up{opacity:.0001;transform:translateY(12px);animation:fadeUp var(--transition-med) forwards;}.fade-up.delay-1{animation-delay:.08s;}.fade-up.delay-2{animation-delay:.16s;}.fade-up.delay-3{animation-delay:.24s;}.fade-up.delay-4{animation-delay:.32s;}@keyframes fadeUp{to{opacity:1;transform:translateY(0)}}pre{max-width:100%;white-space:pre;overflow-x:auto;}code{display:inline;max-width:100%;white-space:normal;overflow-wrap:anywhere;word-break:break-word;background-color:#222222;color:#fff;padding:4px;}u,ins{text-decoration:underline;}.bi{display:inline-block;width:1em;height:1em;fill:currentColor;vertical-align:-.125em;}.bi.bi-exclamation-triangle{color:#ffc107;}ul{margin:0;padding-inline-start:20px;}.page>.nav{display:flex;align-items:center;justify-content:center;margin-bottom:40px;gap:16px;position:sticky;top:32px;z-index:10;padding:14px 18px;background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);flex-wrap:wrap;}.nav-top{display:flex;align-items:center;gap:12px;}.nav-left{display:flex;flex-direction:row;align-items:center;gap:6px;}.nav-logo img{display:block;width:32px;height:32px;}.nav-right{display:flex;align-items:center;justify-content:center;gap:6px;flex:1;flex-wrap:wrap;}.nav-toggle{display:none;align-items:center;gap:8px;margin-left:auto;padding:8px 12px;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:var(--text);font-weight:600;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast),opacity var(--transition-fast);}.nav-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}.nav-toggle:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.2);}.nav-toggle-bars{display:inline-flex;flex-direction:column;gap:5px;}.nav-toggle-bars span{display:block;width:18px;height:2px;background:currentColor;border-radius:999px;transition:transform var(--transition-fast),opacity var(--transition-fast),width var(--transition-fast);}.nav.nav-open .nav-toggle-bars span:nth-child(1){transform:translateY(7px) rotate(45deg);}.nav.nav-open .nav-toggle-bars span:nth-child(2){opacity:0;width:12px;}.nav.nav-open .nav-toggle-bars span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}.nav-brand{font-weight:600;letter-spacing:.14em;text-transform:uppercase;font-size:1.05rem;color:var(--muted);}.nav-links{display:flex;gap:6px;font-size:.9rem;flex-wrap:wrap;align-items:center;}.nav-link{position:relative;display:inline-flex;align-items:center;gap:10px;padding:12px 14px;min-height:44px;border-radius:var(--radius-sm);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);color:var(--muted)!important;text-decoration:none;transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);}.nav-link:hover{color:var(--text)!important;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.14);}.nav-link.is-active,.nav-link[aria-current="page"]{color:var(--text)!important;background:rgba(255,59,59,.14);border-color:rgba(255,59,59,.42);}.nav-link-text{white-space:nowrap;}.nav-social{display:flex;align-items:center;justify-content:center;gap:1px;flex-wrap:wrap;position:relative;padding:9px 12px;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.02);}.nav-social-link{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;opacity:.9;transition:opacity var(--transition-fast);position:relative;}.nav-social-link:hover,.nav-social-link:focus-visible{opacity:1;outline:none;}.nav-social-icon{width:16px;height:16px;display:block;background-color:var(--muted);mask:center / contain no-repeat;-webkit-mask:center / contain no-repeat;transition:background-color var(--transition-fast);}.nav-social-link:hover .nav-social-icon,.nav-social-link:focus-visible .nav-social-icon{background-color:#fff;}.nav-social-icon.rss{mask-image:url("/libs/bootstrap-icons/rss-fill.svg");-webkit-mask-image:url("/libs/bootstrap-icons/rss-fill.svg");}.nav-social-icon.li{mask-image:url("/libs/bootstrap-icons/linkedin.svg");-webkit-mask-image:url("/libs/bootstrap-icons/linkedin.svg");}.nav-social-icon.gh{mask-image:url("/libs/bootstrap-icons/github.svg");-webkit-mask-image:url("/libs/bootstrap-icons/github.svg");}.nav-social-icon.t{mask-image:url("/libs/bootstrap-icons/twitch.svg");-webkit-mask-image:url("/libs/bootstrap-icons/twitch.svg");}.nav-social-icon.x{mask-image:url("/libs/bootstrap-icons/twitter-x.svg");-webkit-mask-image:url("/libs/bootstrap-icons/twitter-x.svg");}.nav-social-icon.bc{mask-image:url("/assets/img/bandcamp.svg");-webkit-mask-image:url("/assets/img/bandcamp.svg");}.nav-social-icon.dc{mask-image:url("/assets/img/discogs.svg");-webkit-mask-image:url("/assets/img/discogs.svg");}.nav-social-icon.yt{mask-image:url("/libs/bootstrap-icons/youtube.svg");-webkit-mask-image:url("/libs/bootstrap-icons/youtube.svg");}@media (max-width:819px){.page>.nav{top:16px;flex-direction:column;align-items:stretch;gap:10px}.nav-top{justify-content:space-between;width:100%}.nav-right{width:100%;justify-content:center;gap:10px;flex-direction:column;align-items:stretch}.nav-links{flex:0 1 auto;justify-content:center;gap:10px;flex-direction:column;align-items:stretch}.nav-social{margin-left:0;gap:6px;justify-content:center}.nav-social::before{display:none}.nav-link-text{display:inline}.nav-toggle{display:inline-flex}.has-js .nav-right{max-height:0;opacity:0;pointer-events:none;overflow:hidden;transform:translateY(-6px);transition:max-height 240ms ease,opacity var(--transition-fast),transform var(--transition-fast)}.has-js .nav.nav-open .nav-right{max-height:620px;opacity:1;pointer-events:auto;transform:translateY(0);overflow:visible}.nav.nav-open .nav-right{border-top:1px solid var(--panel-border);padding-top:10px}.has-js .nav:not(.nav-open){gap:0}}@media (min-width:820px){.nav-right{flex-wrap:nowrap}.nav-links{flex-wrap:nowrap}.nav-social{flex-wrap:nowrap}}@media (max-width:360px){.page{padding:16px 10px 48px}}.landing-separator{width:100%;max-width:320px;height:1px;margin:18px auto 20px;background:linear-gradient(to right,transparent,var(--accent),transparent);transform:scaleX(0);transform-origin:center;animation:landingLine .9s cubic-bezier(.2,.9,.4,1) forwards;}@keyframes landingLine{to{transform:scaleX(1)}}@keyframes landingPronounceIconPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.1)}}@media (prefers-reduced-motion:reduce){.landing-avatar-pronounce-control.is-speaking .landing-avatar-pronounce-icon{animation:none}}.page--landing{max-width:var(--max-width);}.page--landing>.nav{margin-bottom:40px;}.landing-overview{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:34px;align-items:start;margin-bottom:40px;}.landing-overview.panel{background:radial-gradient(circle at top left,rgba(40,10,12,.35),transparent 55%),radial-gradient(circle at bottom right,rgba(50,8,10,.35),transparent 55%),linear-gradient(to bottom,rgba(255,255,255,.02),var(--landing-gradient-overlay));}.landing-profile{align-self:center;display:grid;grid-template-columns:150px minmax(0,1fr);grid-template-areas:"avatar title" "role role" "separator separator" "intro intro";column-gap:24px;row-gap:10px;align-items:start;}.landing-avatar{grid-area:avatar;align-self:start;position:relative;display:block;width:150px;max-width:100%;aspect-ratio:1 / 1;margin:0;padding:0;flex:0 0 auto;background:rgba(255,255,255,.02);border-radius:50%;color:var(--landing-pronounce-fg);}.landing-avatar-pronounce-control:disabled{display:none;}.landing-avatar-pronounce-control{position:absolute;right:8px;bottom:8px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;margin:0;padding:0;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;background:rgba(0,0,0,.58);color:var(--landing-pronounce-fg);cursor:pointer;box-shadow:0 6px 14px rgba(0,0,0,.4);opacity:.78;transition:opacity var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast),background-color var(--transition-fast);}.landing-avatar-pronounce-control.has-tooltip,.landing-avatar-pronounce-control[data-tooltip]{position:absolute;}.landing-avatar-pronounce-icon{position:relative;z-index:1;width:18px;height:18px;fill:currentColor;}.landing-avatar-pronounce-control:not(:disabled):hover,.landing-avatar-pronounce-control:focus-visible,.landing-avatar-pronounce-control.is-speaking{opacity:1;background:rgba(0,0,0,.72);color:var(--landing-pronounce-fg-active);}.landing-avatar-pronounce-control:focus-visible{outline:none;box-shadow:0 0 0 2px var(--accent-soft),0 6px 14px rgba(0,0,0,.4);}.landing-avatar-pronounce-control.is-speaking .landing-avatar-pronounce-icon{animation:landingPronounceIconPulse var(--landing-pronounce-pulse-duration) var(--landing-pronounce-pulse-easing) infinite;}.landing-title{grid-area:title;align-self:center;text-align:center;font-size:2rem;line-height:1.25;margin:0;}.landing-role{grid-area:role;margin:0;color:var(--muted);font-weight:600;text-align:center;}.landing-separator{grid-area:separator;margin:8px auto 6px;}.landing-intro{grid-area:intro;margin:0;color:var(--muted);line-height:1.75;font-size:1rem;text-align:center;}.landing-showcase{display:grid;gap:14px;}.landing-showcase-link{display:grid;gap:14px;color:var(--text);text-decoration:none;}.landing-showcase-link:visited{color:var(--text);}.landing-showcase img{display:block;width:100%;aspect-ratio:16 / 10;object-fit:cover;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.12);box-shadow:var(--shadow-soft);background:rgba(255,255,255,.03);transition:transform var(--transition-fast),border-color var(--transition-fast);}.landing-showcase-link:hover img,.landing-showcase-link:focus-visible img{transform:translateY(-2px);border-color:rgba(255,59,59,.45);}.landing-showcase-caption{display:grid;gap:4px;justify-items:center;text-align:center;color:var(--muted);line-height:1.5;}.landing-showcase-caption strong{color:var(--accent);font-size:1rem;transition:color var(--transition-fast);}.landing-showcase-link:hover .landing-showcase-caption strong,.landing-showcase-link:focus-visible .landing-showcase-caption strong{color:var(--accent-link-visited);}.landing-showcase-desc{margin:0;color:var(--muted);line-height:1.5;text-align:center;}.landing-kicker{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:rgba(245,245,247,.72);}.landing-section{margin-bottom:40px;}.landing-section-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(--panel-border);}.landing-section-header h2{display:inline-flex;align-items:center;gap:8px;margin:0;color:var(--muted);font-size:1.05rem;letter-spacing:.12em;text-transform:uppercase;}.landing-section-link{white-space:nowrap;}.landing-project-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;}.landing-project-detail-link,.project-thumb-link{display:block;color:inherit;text-decoration:none;}.landing-project-detail-link:visited,.project-thumb-link:visited{color:inherit;}.landing-project-detail-link:focus-visible,.project-thumb-link:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}.landing-project-title-link,.landing-project-title-link:visited,.project-title-link,.project-title-link:visited{color:inherit;text-decoration:none;}.landing-project-title-link:hover,.landing-project-title-link:focus-visible,.project-title-link:hover,.project-title-link:focus-visible{color:var(--accent-link-visited);}.landing-project-grid .project-tags{margin-top:auto;}.landing-project-grid .project-ctas{margin-bottom:0;}.landing-tags{display:flex;flex-wrap:wrap;gap:6px;}.landing-tag{display:inline-flex;align-items:center;min-height:24px;border-radius:999px;padding:4px 8px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);color:var(--muted);font-size:.72rem;line-height:1;}@media (max-width:1020px){.landing-overview{grid-template-columns:minmax(0,1fr)}.landing-project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:680px){.landing-profile{grid-template-columns:minmax(0,1fr);grid-template-areas:"avatar" "title" "role" "separator" "intro";justify-items:center;text-align:center}.landing-avatar{margin:0 0 8px}.landing-title{justify-content:center;text-align:center;font-size:1.55rem}.landing-section-header{align-items:flex-start;flex-direction:column}.landing-project-grid{grid-template-columns:minmax(0,1fr)}}.section{margin-bottom:40px;}.section-header{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;width:100%;margin-bottom:12px;gap:4px;}.section-title{font-size:1.05rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);}.section-subtitle{font-size:.85rem;color:rgba(162,164,176,.85);margin:0;}.section-header.project-detail-title{flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;}.panel{background:var(--panel-bg);border-radius:var(--radius-lg);border:1px solid var(--panel-border);box-shadow:var(--shadow-soft);padding:18px 18px;}@media (min-width:768px){.panel{padding:20px 22px}}.featured-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;}@media (min-width:768px){.featured-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.project-card{display:flex;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.06);background:linear-gradient(to bottom right,rgba(255,255,255,.02),rgba(0,0,0,.4));padding:0;transition:transform var(--transition-fast),box-shadow var(--transition-fast),border-color var(--transition-fast),background var(--transition-fast);position:relative;overflow:hidden;}.project-card::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at top right,var(--accent-soft),transparent 60%);opacity:0;pointer-events:none;z-index:0;transition:opacity var(--transition-med);}.project-card:has(.has-tooltip:hover),.project-card:has(.has-tooltip:focus-visible),.project-card:has([data-tooltip]:hover),.project-card:has([data-tooltip]:focus-visible){overflow:visible;}.project-card:hover::before{opacity:1;}.project-card:hover{transform:translateY(-3px);box-shadow:0 8px 14px rgba(0,0,0,.75);border-color:rgba(255,255,255,.12);}.project-title{min-width:0;color:var(--accent);font-size:.98rem;font-weight:700;line-height:1.3;margin:0;}.project-heading{display:flex;flex-direction:column;gap:6px;}.project-heading-main{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;align-items:start;}.project-state-pills{justify-self:start;display:flex;flex-wrap:wrap;align-items:center;gap:6px;}.project-status-pill{display:inline-flex;align-items:center;justify-content:center;max-width:100%;min-height:21px;border:1px solid rgba(255,255,255,.16);border-radius:999px;padding:3px 7px;color:var(--text);background:rgba(255,255,255,.055);font-size:.68rem;line-height:1.2;text-align:center;white-space:nowrap;cursor:help;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);}.project-status-pill--wip{border-color:rgba(255,59,59,.42);color:#ffdada;background:rgba(255,59,59,.13);}.project-status-pill--wip:hover,.project-status-pill--wip:focus-visible{border-color:rgba(255,59,59,.72);color:#fff0f0;background:rgba(255,59,59,.22);}.project-status-pill--released{border-color:rgba(76,175,80,.54);color:#dff7e2;background:rgba(76,175,80,.14);}.project-status-pill--released:hover,.project-status-pill--released:focus-visible{border-color:rgba(76,175,80,.82);color:#f1fff3;background:rgba(76,175,80,.24);}.project-updated-pill{border-color:rgba(58,129,255,.54);color:#dce9ff;background:rgba(58,129,255,.15);}.project-updated-pill:hover,.project-updated-pill:focus-visible{border-color:rgba(58,129,255,.82);color:#f0f6ff;background:rgba(58,129,255,.25);}.project-updated-pill::after{max-width:180px;padding:5px 8px;font-size:.72rem;line-height:1.25;text-align:left;}.project-desc{font-size:.86rem;color:var(--muted);margin:0;}.project-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}.project-badge-icons{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:flex-start;width:100%;min-height:34px;}.project-badge-icon,.project-badge-icon:visited{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:0;border-radius:6px;background:transparent;color:rgb(116,166,255);text-decoration:none;cursor:pointer;transition:color var(--transition-fast);}.project-badge-icon .bi{width:24px;height:24px;}.project-badge-icon:hover,.project-badge-icon:focus-visible,.project-badge-icon:visited:hover,.project-badge-icon:visited:focus-visible,.project-badge-icon[aria-pressed="true"]{background:transparent;color:rgb(58,129,255);outline:none;}.project-badge-icon:focus-visible{box-shadow:0 0 0 2px var(--accent-soft);}.tag{border-radius:999px;padding:4px 10px;min-height:24px;font-size:.7rem;line-height:1;background:rgba(255,255,255,.04);color:var(--muted);border:1px solid rgba(255,255,255,.06);display:inline-flex;align-items:center;}.tag-label{min-width:0;}.tag-icon{width:1em;height:1em;flex:0 0 1em;}.tag.badge.external-download{background:rgba(251,146,60,.2);border-color:rgba(251,146,60,.5);color:#ffe3c1;cursor:help;}.tag.badge.external-download i{font-size:.85em;line-height:1;vertical-align:middle;}.tag.badge.external-download:hover,.tag.badge.external-download:focus-visible{background:rgba(251,146,60,.32);border-color:rgba(251,146,60,.7);color:#fff0d8;}.project-filter-link{color:var(--muted);text-decoration:none;gap:5px;}.project-filter-link:link,.project-filter-link:visited{color:var(--muted);}.project-filter-link:hover,.project-filter-link:focus-visible{color:var(--text)!important;text-decoration:none;}.tag.meta-chip{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.1);color:var(--text);cursor:pointer;gap:5px;transition:background var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);}.tag.meta-chip[data-group="genre"]{background:rgba(229,57,53,.18);border-color:rgba(229,57,53,.5);color:#ffd8d6;}.tag.meta-chip[data-group="platform"]{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.2);color:#ffffff;}.tag.meta-chip[data-group="tech"]{background:rgba(76,175,80,.18);border-color:rgba(76,175,80,.5);color:#d9f5da;}.tag.meta-chip:hover,.tag.meta-chip:focus-visible{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.18);box-shadow:none;transform:none;}.tag.meta-chip[data-group="genre"]:hover,.tag.meta-chip[data-group="genre"]:focus-visible{background:rgba(229,57,53,.28);border-color:rgba(229,57,53,.65);color:#ffecec;}.tag.meta-chip[data-group="platform"]:hover,.tag.meta-chip[data-group="platform"]:focus-visible{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.3);color:#ffffff;}.tag.meta-chip[data-group="tech"]:hover,.tag.meta-chip[data-group="tech"]:focus-visible{background:rgba(76,175,80,.28);border-color:rgba(76,175,80,.6);color:#e8fbe9;}.tag.meta-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}.tag.badge{cursor:pointer;background:rgba(58,129,255,.16);border-color:rgba(58,129,255,.4);color:#cfe3ff;display:inline-flex;align-items:center;gap:4px;transition:background var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);}.tag.badge:hover,.tag.badge:focus-visible{background:rgba(58,129,255,.32);border-color:rgba(58,129,255,.8);color:#e9f2ff;box-shadow:none;transform:none;}.tag.badge:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}.news-link,.project-link{font-size:.86rem;color:var(--accent);text-decoration:none;display:inline-flex;align-items:center;gap:.35em;min-height:24px;padding:4px 6px;}.news-link:hover,.project-link:hover{text-decoration:none;}.featured-title{font-size:.85rem;text-transform:uppercase;letter-spacing:.2em;color:var(--accent);margin:10px 0 14px;}.featured-projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;margin-bottom:36px;}.project-card.featured{border:2px solid var(--accent-soft);}.project-card-link{display:flex;flex-direction:column;gap:0;width:100%;height:100%;flex:1;color:inherit;text-decoration:none;position:relative;z-index:1;}a.project-card-link,a.project-card-link:visited{color:inherit;}a.project-card-link:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:inherit;}.project-thumb{position:relative;width:100%;aspect-ratio:16 / 10;overflow:hidden;background:rgba(255,255,255,.02);background-size:cover;background-repeat:no-repeat;background-position:center;}.project-thumb::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.02) 0%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.02) 100%);background-size:200% 100%;opacity:0;transition:opacity var(--transition-fast);pointer-events:none;}.project-thumb.is-loading::after{opacity:1;animation:thumb-shimmer 1.1s linear infinite;}.project-thumb.is-error::after{opacity:0;animation:none;}.project-thumb.is-error{background:rgba(255,255,255,.04);}.project-thumb.is-loaded::after{opacity:0;animation:none;}.project-thumb img{display:block;width:100%;height:100%;object-fit:cover;position:relative;z-index:1;}@keyframes thumb-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.toolbar{display:grid;gap:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-sm);padding:12px;margin-bottom:14px;}.toolbar-header{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}.toolbar-header .inline-clear{margin-left:6px;padding:3px 8px;}.toolbar .title{font-size:.78rem;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;}.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;}.sort-group{display:grid;gap:6px;}.sort-options{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;}.sort-option{display:inline-flex;align-items:center;gap:0;min-height:28px;color:var(--text);font-size:.8rem;cursor:pointer;}.sort-option input{position:absolute;opacity:0;pointer-events:none;}.sort-option span{display:inline-flex;align-items:center;gap:8px;}.sort-option span::before{content:"";width:11px;height:11px;flex:0 0 11px;border-radius:50%;background:var(--bg);border:1px solid rgba(255,255,255,.24);box-shadow:0 0 0 3px rgba(255,255,255,.05);}.sort-option input:checked + span::before{background:var(--accent);border-color:var(--bg);box-shadow:0 0 0 3px var(--accent-soft);}.sort-option:hover span::before,.sort-option input:focus-visible + span::before{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);}.filter-btn{background:rgba(255,255,255,.05);color:var(--text);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:6px 10px;min-height:28px;font-size:.82rem;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);}.filter-btn:hover,.filter-btn:focus-visible{background:rgba(58,129,255,.12);border-color:rgba(58,129,255,.4);outline:none;}.filter-btn[aria-pressed="true"]{background:rgba(58,129,255,.2);border-color:rgba(58,129,255,.7);color:#e9f2ff;}.search{position:relative;display:inline-flex;align-items:center;flex:1;min-width:220px;}.search input{width:100%;padding:8px 34px 8px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.04);color:var(--text);font-size:.88rem;}.search input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;}.search input:focus{outline:1px solid var(--accent);border-color:var(--accent);}.clear-btn{position:absolute;right:6px;background:none;border:none;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border-radius:6px;}.clear-btn:hover,.clear-btn:focus-visible{color:var(--text);}.tag-group{border-top:1px solid rgba(255,255,255,.06);padding-top:10px;}.tag-group .title{display:inline-flex;align-items:center;gap:6px;cursor:pointer;line-height:1.1;min-height:24px;padding:4px 6px;border-radius:6px;}.tag-group .title .accordion-icon{display:inline-flex;align-items:center;color:var(--muted);font-size:.82rem;transition:transform var(--transition-fast);transform:rotate(90deg);}.tag-group.collapsed .title .accordion-icon{transform:rotate(0deg);}.tag-group.collapsed .tags,.tag-group.collapsed .tag-clear{display:none;}.has-news-tag-param .news-tag-group{padding-bottom:10px;}.has-news-tag-param .news-tag-group .title .accordion-icon{transform:rotate(90deg);}.has-news-tag-param .news-tag-group .tags,.has-news-tag-param .news-tag-group .tag-clear{display:flex;}.projects-empty{display:none;grid-template-columns:auto 1fr;gap:10px;align-items:center;margin-top:12px;padding:12px;border:1px dashed rgba(255,255,255,.15);border-radius:var(--radius-sm);background:rgba(255,255,255,.04);color:var(--muted);}.projects-empty.is-visible{display:grid;}.projects-empty-icon{width:32px;height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);color:var(--text);font-size:1rem;}.tag-group .title{font-size:.82rem;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;}.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;margin-bottom:6px;}.tag-btn{border-radius:999px;padding:6px 10px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.04);color:var(--text);font-size:.8rem;min-height:28px;display:inline-flex;align-items:center;gap:6px;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);}.tag-btn[aria-pressed="true"]{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.18);color:var(--text);}.tag-btn:hover,.tag-btn:focus-visible{background:rgba(255,255,255,.12);border-color:rgba(58,129,255,.4);}.tag-group #tags-permalink .tag-btn[aria-pressed="true"]{background:var(--color-project-bg);border-color:var(--color-project-border);color:var(--color-project-text);}.tag-group #tags-permalink .tag-btn:hover,.tag-group #tags-permalink .tag-btn:focus-visible{background:var(--color-project-hover-bg);border-color:var(--color-project-hover-border);}.tag-group #tags-genre .tag-btn[aria-pressed="true"]{background:var(--color-genre-bg);border-color:var(--color-genre-border);color:var(--color-genre-text);}.tag-group #tags-genre .tag-btn:hover,.tag-group #tags-genre .tag-btn:focus-visible{background:var(--color-genre-hover-bg);border-color:var(--color-genre-hover-border);}.tag-group #tags-platform .tag-btn[aria-pressed="true"]{background:var(--color-platform-bg);border-color:var(--color-platform-border);color:var(--color-platform-text);}.tag-group #tags-platform .tag-btn:hover,.tag-group #tags-platform .tag-btn:focus-visible{background:var(--color-platform-hover-bg);border-color:var(--color-platform-hover-border);}.tag-group #tags-tech .tag-btn[aria-pressed="true"]{background:var(--color-tech-bg);border-color:var(--color-tech-border);color:var(--color-tech-text);}.tag-group #tags-tech .tag-btn:hover,.tag-group #tags-tech .tag-btn:focus-visible{background:var(--color-tech-hover-bg);border-color:var(--color-tech-hover-border);}.chip-pill{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;background:rgba(255,255,255,.06);color:var(--text);border:1px solid rgba(255,255,255,.14);font-size:.82rem;margin:4px 6px 0 0;}.chip-pill--type{background:var(--color-type-bg);border-color:var(--color-type-border);color:var(--color-type-text);}.chip-pill--project{background:var(--color-project-bg);border-color:var(--color-project-border);color:var(--color-project-text);}.chip-pill--tech{background:var(--color-tech-bg);border-color:var(--color-tech-border);color:var(--color-tech-text);}.chip-pill--genre{background:var(--color-genre-bg);border-color:var(--color-genre-border);color:var(--color-genre-text);}.chip-pill--platform{background:var(--color-platform-bg);border-color:var(--color-platform-border);color:var(--color-platform-text);}.chip-pill button{background:none;border:none;color:inherit;cursor:pointer;width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;line-height:1;}.chip-pill button:hover,.chip-pill button:focus-visible{color:#ffffff;}.chip-pill button i{display:block;line-height:1;transform:translateY(1px);}.tag-clear{margin-top:6px;background:none;border:1px solid rgba(255,255,255,.12);color:var(--text);border-radius:8px;padding:6px 10px;min-height:28px;cursor:pointer;font-size:.75rem;display:inline-flex;align-items:center;gap:4px;background:rgba(255,255,255,.04);transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);}.tag-clear[hidden]{display:none!important;}.tag-clear:hover,.tag-clear:focus-visible{color:var(--text);border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.08);}.project-card-body{display:flex;flex-direction:column;gap:10px;height:100%;padding:12px;}.project-tags{margin-top:10px;}.project-cta{font-size:.86rem;display:inline-flex;align-items:center;gap:6px;width:fit-content;min-height:24px;padding:4px 0;}.project-cta .bi{width:16px;height:16px;flex:0 0 16px;}.project-ctas{display:flex;flex-direction:column;gap:6px;margin-bottom:auto;}.project-cta.project-download{display:inline-flex;}@media (max-width:600px){.project-card-body{height:auto}}.project-detail-layout{display:flex;flex-direction:column-reverse;gap:14px;}.project-detail-main{display:flex;flex-direction:column;gap:14px;}.project-detail-tagline{font-size:1rem;color:var(--text);margin:0;}.project-detail-description img{max-width:100%;border-radius:var(--radius-sm);}.project-metrics-accordion{border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-sm);background:rgba(255,255,255,.02);overflow:hidden;}.project-metrics-accordion>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;user-select:none;}.project-metrics-accordion>summary::-webkit-details-marker{display:none;}.project-metrics-title{font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--text);flex:1 1 auto;min-width:0;}.project-metrics-chevron{display:inline-flex;align-items:center;justify-content:center;color:var(--muted);flex:0 0 auto;margin-left:auto;transform:rotate(0deg);transition:transform var(--transition-fast);}.project-metrics-accordion[open] .project-metrics-chevron{transform:rotate(90deg);}.project-metrics-wrap{border-top:1px solid rgba(255,255,255,.08);padding:10px 12px 12px;overflow-x:auto;}.project-metrics-table{width:100%;border-collapse:collapse;font-family:Consolas,"Courier New",monospace;font-size:.82rem;color:var(--text);}.project-metrics-table th,.project-metrics-table td{padding:4px 8px;}.project-metrics-table thead th{text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;color:var(--muted);border-bottom:1px solid rgba(255,255,255,.14);}.project-metrics-table th:first-child,.project-metrics-table td:first-child{text-align:left;}.project-metrics-table th:not(:first-child),.project-metrics-table td:not(:first-child){text-align:right;}.project-metrics-table tbody tr + tr td,.project-metrics-table tbody tr + tr th{border-top:1px solid rgba(255,255,255,.04);}.project-metrics-table tfoot th,.project-metrics-table tfoot td{font-weight:700;border-top:1px solid rgba(255,255,255,.16);}@media (min-width:900px){.project-detail-layout{display:block}.project-detail-layout::after{content:"";display:block;clear:both}.project-detail-main{display:block}.project-detail-main>* + *{margin-top:14px}.project-detail-main .project-detail-gallery{width:calc(100% - (min(420px,46%) + 24px));margin-right:0}.project-detail-main .project-detail-gallery--single{width:calc(100% - (min(420px,46%) + 24px));margin:0}.project-detail-meta{float:right;width:min(420px,46%);margin:0 0 14px 24px}}.project-detail-gallery{border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-sm);padding:8px;background:rgba(255,255,255,.02);width:100%;box-sizing:border-box;}.project-detail-gallery--single{display:block;width:100%;margin:0;}.project-detail-thumbs{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;}.project-detail-gallery--single .project-detail-thumbs{display:flex;justify-content:center;width:100%;}.project-detail-gallery--single .project-detail-thumb{width:auto;max-width:100%;}.project-detail-thumb{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-sm);padding:6px;cursor:pointer;color:var(--text);display:flex;flex-direction:column;gap:6px;align-items:center;transition:border-color var(--transition-fast),background var(--transition-fast),transform var(--transition-fast);}.project-detail-thumb--solo-row{grid-column:1 / -1;justify-self:center;width:var(--solo-row-thumb-width,auto);max-width:100%;}.project-detail-thumb img{display:block;width:100%;max-width:100%;height:auto;object-fit:contain;border-radius:var(--radius-sm);}.project-detail-thumb-caption{font-size:.8rem;color:var(--muted);text-align:center;}.project-detail-title{display:flex;align-items:center;gap:8px;}.project-detail-title .section-title{margin:0;flex:1;}.news-detail-heading{display:flex;align-items:center;gap:8px;}.news-detail-heading .section-title{margin:0;flex:1;}.project-permalink-btn{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);color:var(--text);border-radius:8px;padding:6px 8px;min-width:32px;min-height:32px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast);}.project-permalink-btn:hover,.project-permalink-btn:focus-visible{background:rgba(58,129,255,.18);border-color:rgba(58,129,255,.5);color:#e9f2ff;}.project-permalink-btn.copied{background:rgba(76,175,80,.2);border-color:rgba(76,175,80,.6);color:#e8fbe9;}.project-detail-thumb:hover,.project-detail-thumb:focus-visible{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.14);transform:translateY(-2px);}.project-detail-meta{border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-sm);background:rgba(255,255,255,.02);padding:8px;display:flex;flex-direction:column;gap:12px;}.project-detail-block{display:flex;flex-direction:column;gap:6px;}.project-detail-label{font-size:.78rem;color:var(--text);letter-spacing:.06em;text-transform:uppercase;}.project-detail-value{display:flex;flex-wrap:wrap;gap:6px;}.project-detail-back,.news-detail-back{margin-top:14px;}.projects-grid{margin-top:14px;display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;}.project-card--solo-row{grid-column:1 / -1;justify-self:center;width:var(--solo-row-card-width,auto);max-width:100%;}.projects-grid--skeleton .project-card{pointer-events:none;}.projects-grid--skeleton .project-card::before{display:none;}.projects-grid--skeleton .project-card:hover{transform:none;box-shadow:none;border-color:rgba(255,255,255,.06);}.skeleton-line,.skeleton-pill,.skeleton-chip,.skeleton-tag{display:inline-block;background:linear-gradient(90deg,rgba(255,255,255,.04) 0%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.04) 100%);background-size:200% 100%;animation:thumb-shimmer 1.1s linear infinite;}.skeleton-line{height:10px;border-radius:6px;width:100%;}.skeleton-title{height:14px;width:68%;}.skeleton-meta{width:42%;}.skeleton-desc.short{width:72%;}.skeleton-pill{height:14px;width:110px;border-radius:999px;}.skeleton-chip{height:20px;width:56px;border-radius:999px;}.skeleton-tag{display:inline-flex;align-items:center;height:28px;min-width:64px;border-radius:999px;border:1px solid rgba(255,255,255,.08);pointer-events:none;}.download-list{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;}.download-item{border-radius:var(--radius-sm);padding:10px 11px;border:1px solid rgba(255,255,255,.06);background:rgba(0,0,0,.45);display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;}.download-meta{display:flex;flex-direction:column;gap:6px;flex:1;}.download-link{font-size:.86rem;margin-top:4px;align-self:flex-start;display:inline-flex;align-items:center;gap:.35em;min-height:24px;padding:4px 6px;}.download-name{font-size:.9rem;}.download-desc{font-size:.86rem;color:var(--muted);margin-top:2px;margin-bottom:2px;}.download-desc p{margin:0;}.download-desc p + p{margin-top:6px;}.download-extra{font-size:.72rem;color:rgba(162,164,176,.85);}.download-actions{display:flex;align-items:center;justify-content:flex-end;margin-left:auto;align-self:center;}@media (max-width:640px){.download-actions{width:100%;margin-left:0;justify-content:flex-start}}.news-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:.85rem;color:var(--muted);padding-bottom:8px;height:34px;}.news-filter-status{font-weight:600;color:var(--text);flex:1 1 auto;min-width:160px;display:inline-flex;align-items:center;}.news-filter-clear{font-size:.8rem;color:var(--text)!important;text-decoration:none;display:inline-flex;align-items:center;gap:6px;padding:6px 10px;min-height:28px;border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast);}.news-filter-clear:link,.news-filter-clear:visited{color:var(--text)!important;}.news-filter-clear[hidden]{display:none;}.news-filter-clear:hover,.news-filter-clear:focus-visible{background:rgba(255,255,255,.1);color:var(--text)!important;border-color:rgba(255,255,255,.2);}.news-controls{display:flex;flex-direction:column;gap:12px;align-items:stretch;width:100%;}.news-controls .search{display:flex;width:100%;min-width:0;}.news-tag-group{margin:0;width:100%;border-top:1px solid rgba(255,255,255,.06);border-bottom:1px solid rgba(255,255,255,.06);padding-bottom:10px;}.news-tag-group .tags{gap:8px;}.news-tag-group .tag-btn{text-transform:none;border-color:rgba(255,255,255,.12);}.news-tag-group .tag-btn[aria-pressed="true"]{background:rgba(255,59,59,.22);border-color:rgba(255,59,59,.7);color:#ffeaea;}.news-tag-group .tag-btn:hover,.news-tag-group .tag-btn:focus-visible{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.2);outline:none;box-shadow:0 0 0 2px rgba(255,255,255,.08);}.news-load-more-wrap{display:flex;justify-content:center;margin-top:10px;}.news-load-more{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.06);color:var(--text);border:1px solid rgba(255,255,255,.2);border-radius:var(--radius-sm);padding:8px 14px;font-size:.9rem;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);}.news-load-more .bi{width:14px;height:14px;flex:0 0 14px;}.news-load-more:hover,.news-load-more:focus-visible{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);color:var(--text);}.news-empty{display:none;grid-template-columns:14px 1fr;column-gap:12px;align-items:center;padding:10px 0;color:var(--muted);font-size:.9rem;}.news-empty.is-visible{display:grid;}.news-empty-text{padding:10px 12px;border:1px dashed rgba(255,255,255,.15);border-radius:var(--radius-sm);background:rgba(255,255,255,.04);}.news{display:flex;flex-direction:column;gap:12px;padding:10px 0;background:linear-gradient(to bottom,rgba(255,255,255,.22),rgba(255,255,255,.05)) no-repeat;background-size:1px calc(100% - 20px);background-position:7px 10px;}.news-item{display:grid;grid-template-columns:14px 1fr;column-gap:12px;align-items:start;padding:4px 0;}.news-bullet{width:11px;height:11px;border-radius:50%;background:var(--bg);border:1px solid var(--accent);box-shadow:0 0 0 3px var(--accent-soft);justify-self:center;margin-top:8px;}.news-headline{display:flex;flex-direction:column;gap:4px;margin:0;min-width:0;}.news-content{display:flex;flex-direction:column;gap:8px;min-width:0;}.news-meta{display:flex;flex-wrap:wrap;align-items:center;column-gap:6px;row-gap:2px;font-size:.75rem;letter-spacing:.06em;color:var(--muted);}.news-meta time,.news-meta span{line-height:1.2;}.news-meta-separator{opacity:.55;}.news-read-time{white-space:nowrap;}.news-title-link,.news-title-link:link,.news-title-link:visited{align-self:flex-start;display:inline-block;max-width:100%;text-decoration:none;font-size:1rem;line-height:1.35;}.news-title-link:hover,.news-title-link:focus-visible{text-decoration:none;}.news-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px;}.news-tag{text-decoration:none;padding:4px 10px;line-height:1.2;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.12);color:var(--muted)!important;}.news-tag:link,.news-tag:visited{color:var(--muted)!important;}.news-tag.tag{border-color:rgba(255,255,255,.12);}.news-tag.is-active{background:rgba(255,59,59,.22);border-color:rgba(255,59,59,.7);color:#ffeaea!important;}.news-tag:hover,.news-tag:focus-visible{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.2);color:var(--text)!important;}.news-tag.is-active:hover,.news-tag.is-active:focus-visible{background:rgba(255,59,59,.28);border-color:rgba(255,59,59,.75);color:#fff6f6!important;}.section-body{font-size:.9rem;color:var(--muted);line-height:1.6;}.section-body img{display:inline;max-width:100%;height:auto;}.landing-avatar::before{content:"";position:absolute;inset:0;border-radius:50%;background:linear-gradient(90deg,rgba(255,255,255,.02) 0%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.02) 100%);background-size:200% 100%;opacity:0;transition:opacity var(--transition-fast);pointer-events:none;z-index:0;}.landing-avatar.is-loading::before{opacity:1;animation:thumb-shimmer 1.1s linear infinite;}.center-image{width:100%;height:100%;border-radius:50%;object-fit:cover;box-shadow:0 0 10px rgba(0,0,0,.1);position:absolute;inset:0;margin:auto;z-index:1;}a{color:var(--accent-link);text-decoration:none;}a:hover{color:var(--accent);}a:visited{color:var(--accent-link-visited);}a:visited:hover{color:var(--accent-link-visited-hover);}a[href^="http"]:not([href*="havoc.de"]):not([href*="havocspage.net"]):not(.nav-social-link):after{content:"";display:inline-block;width:.85em;height:.85em;margin-left:5px;background-color:currentColor;mask:url("/libs/bootstrap-icons/box-arrow-up-right.svg") center / contain no-repeat;-webkit-mask:url("/libs/bootstrap-icons/box-arrow-up-right.svg") center / contain no-repeat;}a.project-cta[href^="http"]:not([href*="havoc.de"]):not([href*="havocspage.net"]):not(.nav-social-link):after{margin-left:0;}.footer{display:grid;gap:12px;margin-top:36px;font-size:.875rem;color:rgba(162,164,176,.7);text-align:center;}.footer-links{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 14px;}.footer a{color:var(--muted);text-decoration:none;margin:0;}.footer a:hover{color:var(--accent);text-decoration:none;}.has-tooltip,[data-tooltip]{position:relative;cursor:pointer;}.project-status-pill.has-tooltip,.project-status-pill[data-tooltip]{cursor:help;}.has-tooltip::after,[data-tooltip]::after{content:attr(data-tooltip);position:absolute;bottom:120%;left:50%;transform:translate(-50%,4px);background:rgb(48,48,48);color:#fff;padding:6px 10px;font-size:.82rem;line-height:1.2;border-radius:6px;white-space:normal;word-break:break-word;overflow-wrap:anywhere;width:max-content;text-align:center;opacity:0;pointer-events:none;transition:opacity var(--transition-fast),transform var(--transition-fast);z-index:100;max-width:min(240px,80vw);box-shadow:0 6px 14px rgba(0,0,0,.45);}.has-tooltip:hover::after,.has-tooltip:focus-visible::after,[data-tooltip]:hover::after,[data-tooltip]:focus-visible::after{opacity:var(--tooltip-opacity,1);transform:translate(-50%,0);}.has-tooltip[data-tooltip-pos="bottom"]::after,[data-tooltip][data-tooltip-pos="bottom"]::after{top:120%;bottom:auto;}.has-tooltip.tooltip-align-left::after,[data-tooltip].tooltip-align-left::after{left:0;right:auto;}.has-tooltip.tooltip-align-right::after,[data-tooltip].tooltip-align-right::after{left:auto;right:0;}.has-tooltip[data-tooltip-pos="left"]::after,[data-tooltip][data-tooltip-pos="left"]::after{top:50%;bottom:auto;right:120%;left:auto;transform:translate(-4px,-50%);}.has-tooltip[data-tooltip-pos="right"]::after,[data-tooltip][data-tooltip-pos="right"]::after{top:50%;bottom:auto;left:120%;right:auto;transform:translate(4px,-50%);}.has-tooltip[data-tooltip-pos="left"]:hover::after,.has-tooltip[data-tooltip-pos="left"]:focus-visible::after,[data-tooltip][data-tooltip-pos="left"]:hover::after,[data-tooltip][data-tooltip-pos="left"]:focus-visible::after{transform:translate(0,-50%);}.has-tooltip[data-tooltip-pos="right"]:hover::after,.has-tooltip[data-tooltip-pos="right"]:focus-visible::after,[data-tooltip][data-tooltip-pos="right"]:hover::after,[data-tooltip][data-tooltip-pos="right"]:focus-visible::after{transform:translate(0,-50%);}.has-tooltip[data-tooltip-pos="top"].tooltip-align-left::after,[data-tooltip][data-tooltip-pos="top"].tooltip-align-left::after,.has-tooltip[data-tooltip-pos="bottom"].tooltip-align-left::after,[data-tooltip][data-tooltip-pos="bottom"].tooltip-align-left::after,.has-tooltip[data-tooltip-pos="top"].tooltip-align-right::after,[data-tooltip][data-tooltip-pos="top"].tooltip-align-right::after,.has-tooltip[data-tooltip-pos="bottom"].tooltip-align-right::after,[data-tooltip][data-tooltip-pos="bottom"].tooltip-align-right::after{transform:translate(0,4px);}.has-tooltip[data-tooltip-pos="top"].tooltip-align-left:hover::after,.has-tooltip[data-tooltip-pos="top"].tooltip-align-left:focus-visible::after,[data-tooltip][data-tooltip-pos="top"].tooltip-align-left:hover::after,[data-tooltip][data-tooltip-pos="top"].tooltip-align-left:focus-visible::after,.has-tooltip[data-tooltip-pos="bottom"].tooltip-align-left:hover::after,.has-tooltip[data-tooltip-pos="bottom"].tooltip-align-left:focus-visible::after,[data-tooltip][data-tooltip-pos="bottom"].tooltip-align-left:hover::after,[data-tooltip][data-tooltip-pos="bottom"].tooltip-align-left:focus-visible::after,.has-tooltip[data-tooltip-pos="top"].tooltip-align-right:hover::after,.has-tooltip[data-tooltip-pos="top"].tooltip-align-right:focus-visible::after,[data-tooltip][data-tooltip-pos="top"].tooltip-align-right:hover::after,[data-tooltip][data-tooltip-pos="top"].tooltip-align-right:focus-visible::after,.has-tooltip[data-tooltip-pos="bottom"].tooltip-align-right:hover::after,.has-tooltip[data-tooltip-pos="bottom"].tooltip-align-right:focus-visible::after,[data-tooltip][data-tooltip-pos="bottom"].tooltip-align-right:hover::after,[data-tooltip][data-tooltip-pos="bottom"].tooltip-align-right:focus-visible::after{transform:translate(0,0);}.tooltip-measure{position:fixed;left:-9999px;top:-9999px;padding:6px 10px;font-size:.82rem;line-height:1.2;border-radius:6px;white-space:normal;word-break:break-word;overflow-wrap:anywhere;width:max-content;text-align:center;max-width:min(240px,80vw);visibility:hidden;pointer-events:none;}@media (max-width:600px){.has-tooltip::after,[data-tooltip]::after{transform:translate(-50%,4px);max-width:min(240px,calc(100vw - 24px))}.has-tooltip:hover::after,.has-tooltip:focus-visible::after,[data-tooltip]:hover::after,[data-tooltip]:focus-visible::after{transform:translate(-50%,0)}.project-card .has-tooltip::after,.project-card [data-tooltip]::after{left:0;right:auto;transform:translate(0,4px)}.project-card .has-tooltip:hover::after,.project-card .has-tooltip:focus-visible::after,.project-card [data-tooltip]:hover::after,.project-card [data-tooltip]:focus-visible::after{transform:translate(0,0)}}