.projects-scene{background:radial-gradient(#050818 0%,#02040c 60%,#010206 100%);width:100%;height:100vh;position:relative;overflow:hidden}body[data-theme=projects]{overflow:hidden}body[data-theme=projects] .site-footer{display:none}.projects-scene__canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.projects-scene__legend{z-index:10;font-family:var(--font-mono);color:#c4d4ff73;flex-direction:column;gap:.5rem;font-size:.7rem;transition:opacity .45s;display:flex;position:absolute;bottom:5.5rem;left:3rem}.projects-scene__legend.is-hidden{opacity:0}.projects-scene__legend kbd{color:#c4d4ff;background:#78aaff0d;border:1px solid #78aaff4d;border-radius:4px;margin-right:.35rem;padding:.1rem .4rem;display:inline-block}.projects-scene__credits{z-index:10;font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:#c4d4ff66;pointer-events:none;align-items:center;gap:.6rem;font-size:.65rem;transition:opacity .45s;display:flex;position:absolute;bottom:1.75rem;right:2rem}.projects-scene__key{z-index:10;backdrop-filter:blur(8px);color:#e6ecffd9;pointer-events:none;background:#080e208c;border:1px solid #78aaff2e;border-radius:12px;width:14rem;max-width:calc(100vw - 6rem);padding:1.1rem 1.25rem;transition:opacity .45s,transform .45s;position:absolute;top:4.5rem;right:3rem}.projects-scene__key.is-hidden{opacity:0;transform:translateY(-8px)}.projects-scene__key-heading{font-family:var(--font-mono);letter-spacing:.32em;text-transform:uppercase;color:#c4d4ff99;margin:0 0 .85rem;font-size:.65rem}.projects-scene__key-section{font-family:var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:#c4d4ff66;margin:.85rem 0 .55rem;font-size:.58rem}.projects-scene__key-section:first-of-type{margin-top:0}.projects-scene__key-list{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.projects-scene__key-row{align-items:center;gap:.7rem;font-size:.78rem;line-height:1.35;display:flex}.projects-scene__key-line{background-image:linear-gradient(to right, var(--line-color) 0, var(--line-color) 6px, transparent 6px, transparent 10px);height:2px;box-shadow:0 0 6px var(--line-color);background-repeat:repeat-x;background-size:10px 100%;border-radius:1px;flex:0 0 32px}.projects-scene__key-satellite{flex:0 0 28px}.projects-scene__key-text{color:#e6ecffd1}.projects-scene__credits.is-hidden{opacity:0}.projects-scene__credits-sep{color:#78aaff59}.projects-scene__list{z-index:10;backdrop-filter:blur(8px);pointer-events:auto;background:#080e208c;border:1px solid #78aaff2e;border-radius:12px;width:17rem;max-width:calc(100vw - 6rem);max-height:calc(100vh - 21rem);padding:1.1rem 1.25rem;transition:opacity .45s,transform .45s;position:absolute;top:10rem;left:3rem;overflow-y:auto}.projects-scene__list.is-hidden{opacity:0;pointer-events:none;transform:translateY(-8px)}.projects-scene__list-heading{font-family:var(--font-mono);letter-spacing:.32em;text-transform:uppercase;color:#c4d4ff99;margin:0 0 .85rem;font-size:.65rem}.projects-scene__list-items{flex-direction:column;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.projects-scene__list-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:.7rem;padding:.55rem .7rem;transition:background .2s,border-color .2s,transform .2s;display:flex}.projects-scene__list-item:hover,.projects-scene__list-item:focus-visible{border-color:color-mix(in srgb, var(--brand,var(--color-api-accent)) 45%, transparent);background:#78aaff14;transform:translate(2px)}.projects-scene__list-item[data-selected=true]{background:color-mix(in srgb, var(--brand,var(--color-api-accent)) 12%, transparent);border-color:color-mix(in srgb, var(--brand,var(--color-api-accent)) 55%, transparent)}.projects-scene__list-dot{background:var(--brand,var(--color-api-accent));width:.55rem;height:.55rem;box-shadow:0 0 8px var(--brand,var(--color-api-accent));border-radius:50%;flex:0 0 .55rem}.projects-scene__list-text{flex-direction:column;gap:.15rem;min-width:0;display:flex}.projects-scene__list-name{color:#e6ecff;letter-spacing:-.005em;font-size:.92rem;font-weight:600}.projects-scene__list-tagline{font-family:var(--font-mono);color:#c4d4ff99;font-size:.7rem;line-height:1.35}.planet-labels{z-index:5;pointer-events:none;contain:layout style;position:fixed;inset:0}.planet-label{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:#dce8ffc7;white-space:nowrap;text-shadow:0 0 6px #000818e6,0 0 16px #00081899;opacity:0;will-change:transform, opacity;pointer-events:none;font-size:.62rem;transition:opacity .3s;position:fixed;top:0;left:0}.hover-label{z-index:30;pointer-events:none;backdrop-filter:blur(8px);color:#e6ecff;opacity:0;will-change:transform, opacity;background:#080e20d9;border:1px solid #78aaff66;border-radius:10px;flex-direction:column;gap:.2rem;min-width:180px;padding:.85rem 1.1rem;transition:opacity .2s;display:flex;position:fixed;top:0;left:0;transform:translate(-9999px,-9999px)translateY(8px);box-shadow:0 0 24px #5082ff2e}.hover-label[data-visible=true]{opacity:1}.hover-label__name{color:#fff;font-size:1rem;font-weight:600}.hover-label__tag{font-family:var(--font-mono);color:#c4d4ffb3;font-size:.72rem}.hover-label__tech{font-family:var(--font-mono);color:#c4d4ff73;letter-spacing:.05em;font-size:.65rem}.hover-label__apis{border-top:1px solid rgba(var(--color-api-accent-rgb), .18);font-family:var(--font-mono);letter-spacing:.04em;color:var(--color-api-accent);align-items:baseline;gap:.35rem;margin-top:.4rem;padding-top:.4rem;font-size:.68rem;display:flex}@media (width<=1100px){.projects-scene__key{padding:.9rem 1rem;font-size:.72rem}.projects-scene__key-row{font-size:.72rem}.projects-scene__list{width:15rem;padding:.9rem 1rem}.projects-scene__list-name{font-size:.85rem}.projects-scene__list-tagline{font-size:.65rem}}@media (width<=860px){.projects-scene__legend{bottom:4rem;left:1.5rem}.projects-scene__credits{letter-spacing:.15em;font-size:.6rem;bottom:1rem;right:1rem}.projects-scene__key,.projects-scene__list{display:none}body[data-theme=projects]{overflow:auto}body[data-theme=projects] .site-footer{display:flex}}@media (prefers-reduced-motion:reduce){body[data-theme=projects]{overflow:auto}body[data-theme=projects] .site-footer{display:flex}}.projects-fallback{display:none}@media (width<=860px){.projects-scene{display:none}.projects-fallback{display:block}}@media (prefers-reduced-motion:reduce){.projects-scene{display:none}.projects-fallback{display:block}}.projects-scene[data-fallback-active=true]{display:none}.projects-fallback[data-active=true]{display:block}.project-detail{z-index:40;backdrop-filter:blur(12px);color:#e6ecff;opacity:0;pointer-events:none;background:linear-gradient(270deg,#080e20eb,#080e20c7 70%,#080e2000);border-left:1px solid #78aaff2e;width:min(440px,95vw);height:100vh;padding:6rem 2.5rem 2.5rem;transition:transform .6s cubic-bezier(.2,.8,.2,1),opacity .55s;position:fixed;top:0;right:0;overflow-y:auto;transform:translate(40px)}.project-detail[data-open=true]{opacity:1;pointer-events:auto;transform:translate(0)}.project-detail__close{color:#c4d4ff;cursor:pointer;background:#78aaff14;border:1px solid #78aaff59;border-radius:999px;place-items:center;width:2.5rem;height:2.5rem;transition:background .25s,border-color .25s,transform .25s;display:grid;position:absolute;top:1.5rem;right:1.5rem}.project-detail__close:hover{background:#78aaff2e;border-color:#78aaff99;transform:rotate(90deg)}.project-detail__inner{flex-direction:column;gap:1.25rem;display:flex}.project-detail__status{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:#c4d4ff;border:1px solid #78aaff59;border-radius:999px;align-self:flex-start;padding:.25rem .75rem;font-size:.65rem}.project-detail__status[data-status=live]{color:#86efac;background:#4ade8014;border-color:#4ade8080}.project-detail__status[data-status=wip]{color:#fcd34d;background:#fbbf240f;border-color:#fbbf2473}.project-detail__name{letter-spacing:-.02em;margin:0;font-size:2.4rem;font-weight:700}.project-detail__name[data-empty=true]{display:none}.project-detail__tagline{font-family:var(--font-mono);letter-spacing:.05em;color:#c4d4ffb3;margin:0;font-size:.85rem}.project-detail__description{color:#e6ecffc7;border-top:1px solid #78aaff1f;margin:0;padding-top:1rem;font-size:.98rem;line-height:1.6}.project-detail__highlights{flex-wrap:wrap;gap:.5rem;display:flex}.project-detail__highlights .highlight{color:#c4d4ff;background:#78aaff14;border:1px solid #78aaff33;border-radius:6px;padding:.35rem .75rem;font-size:.75rem}.project-detail__label{font-family:var(--font-mono);letter-spacing:.25em;text-transform:uppercase;color:#c4d4ff73;margin:0 0 .5rem;font-size:.65rem}.project-detail__tech{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.project-detail__tech li{font-family:var(--font-mono);color:#e6ecffcc;background:#ffffff0a;border:1px solid #ffffff1a;border-radius:4px;padding:.3rem .65rem;font-size:.72rem}.project-detail__externalApis{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.project-detail__externalApis li{background:rgba(var(--color-api-accent-rgb), .1);border:1px solid rgba(var(--color-api-accent-rgb), .32);font-family:var(--font-mono);letter-spacing:.02em;color:var(--color-api-accent);border-radius:4px;align-items:center;gap:.4rem;padding:.3rem .7rem;font-size:.72rem;display:inline-flex}.project-detail__externalApis li:before{content:"↗";color:var(--color-api-accent);opacity:.85;font-weight:600}.project-detail__links{gap:.75rem;margin-top:.5rem;display:flex}.project-detail__links a{text-align:center;font-family:var(--font-mono);letter-spacing:.05em;border-radius:8px;flex:1;padding:.85rem 1rem;font-size:.8rem;text-decoration:none;transition:background .25s,border-color .25s,transform .25s}.project-detail__links a.primary{color:#fff;background:#78aaff2e;border:1px solid #78aaff80}.project-detail__links a.primary:hover{background:#78aaff4d;border-color:#78aaffcc;transform:translateY(-2px)}.project-detail__links a.secondary{color:#e6ecffcc;background:0 0;border:1px solid #ffffff2e}.project-detail__links a.secondary:hover{background:#ffffff0d;border-color:#ffffff59;transform:translateY(-2px)}@media (width<=720px){.project-detail{width:100vw;padding:5rem 1.5rem 2rem}}@media (prefers-reduced-motion:reduce){.project-detail,.project-detail[data-open=true],.project-detail__close:hover,.project-detail__links a.primary:hover,.project-detail__links a.secondary:hover{transform:none!important}}.project-grid{color:#e6ecff;max-width:1100px;margin:0 auto;padding:7rem 1.5rem 4rem}.project-grid__header{max-width:640px;margin-bottom:3.5rem}.project-grid__eyebrow{font-family:var(--font-mono);letter-spacing:.4em;text-transform:uppercase;color:#c4d4ffbf;margin:0 0 1rem;font-size:.7rem}.project-grid__title{letter-spacing:-.03em;margin:0 0 1rem;font-size:clamp(2.5rem,6vw,4rem);font-weight:700}.project-grid__lede{color:#e6ecffa6;margin:0;font-size:1rem;line-height:1.55}.project-grid__list{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.5rem;margin:0;padding:0;list-style:none;display:grid}.project-card{backdrop-filter:blur(6px);background:#0a12268c;border:1px solid #78aaff29;border-radius:14px;flex-direction:column;gap:1rem;padding:1.75rem 1.75rem 1.5rem;transition:border-color .3s,transform .3s;display:flex}.project-card:hover{border-color:#78aaff59;transform:translateY(-3px)}.project-card__head{align-items:center;gap:.75rem;display:flex}.project-card__dot{border-radius:999px;width:.9rem;height:.9rem;box-shadow:0 0 12px}.project-card__name{margin:0;font-size:1.5rem;font-weight:700}.project-card__status{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:#c4d4ff;border:1px solid #c4d4ff59;border-radius:999px;margin-left:auto;padding:.15rem .55rem;font-size:.6rem}.project-card__status[data-status=live]{color:#86efac;border-color:#4ade8080}.project-card__status[data-status=wip]{color:#fcd34d;border-color:#fbbf2473}.project-card__tagline{font-family:var(--font-mono);color:#c4d4ffa6;margin:0;font-size:.78rem}.project-card__description{color:#e6ecffbf;margin:0;font-size:.92rem;line-height:1.55}.project-card__highlights{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.project-card__highlights li{color:#c4d4ff;background:#78aaff14;border:1px solid #78aaff2e;border-radius:4px;padding:.25rem .6rem;font-size:.7rem}.project-card__tech{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.project-card__tech li{font-family:var(--font-mono);color:#e6ecffb3;background:#ffffff08;border:1px solid #ffffff14;border-radius:4px;padding:.25rem .55rem;font-size:.68rem}.project-card__externalApis-wrap{flex-direction:column;gap:.45rem;display:flex}.project-card__label{font-family:var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:#c4d4ffa6;margin:0;font-size:.62rem}.project-card__externalApis{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.project-card__externalApis li{background:rgba(var(--color-api-accent-rgb), .1);border:1px solid rgba(var(--color-api-accent-rgb), .32);font-family:var(--font-mono);color:var(--color-api-accent);border-radius:4px;align-items:center;gap:.35rem;padding:.25rem .6rem;font-size:.68rem;display:inline-flex}.project-card__externalApis li:before{content:"↗";color:var(--color-api-accent);opacity:.85;font-weight:600}.project-card__links{gap:.5rem;margin-top:auto;display:flex}.project-card__link{text-align:center;font-family:var(--font-mono);letter-spacing:.05em;border-radius:6px;flex:1;padding:.85rem 1rem;font-size:.72rem;text-decoration:none;transition:all .25s}.project-card__link.primary{color:#fff;background:#78aaff2e;border:1px solid #78aaff73}.project-card__link.primary:hover{background:#78aaff4d}.project-card__link.secondary{color:#e6ecffcc;background:0 0;border:1px solid #ffffff2e}.project-card__link.secondary:hover{background:#ffffff0d}@media (prefers-reduced-motion:reduce){.project-card,.project-card:hover{transform:none!important}}
