.project-gallery.svelte-1ljghm3{container-type:inline-size}.project-filters.svelte-1ljghm3{display:flex;flex-wrap:wrap;gap:.5rem;padding:.9rem 0 1.15rem;margin-bottom:1.25rem;border-block:1px solid var(--project-accent-line)}.project-filters.svelte-1ljghm3 button:where(.svelte-1ljghm3){display:inline-flex;align-items:center;gap:.65rem;padding:.55rem .85rem;min-height:2.75rem;border:1px solid transparent;border-radius:.65rem;color:var(--text-secondary);background:transparent;font-size:.86rem;cursor:pointer;transition:background-color .18s ease,color .18s ease,border-color .18s ease}.project-filters.svelte-1ljghm3 button:where(.svelte-1ljghm3):hover{background:var(--btn-regular-bg);color:var(--project-accent-strong)}.project-filters.svelte-1ljghm3 button.active:where(.svelte-1ljghm3){color:var(--project-accent-strong);border-color:var(--project-accent-line);background:var(--project-accent-soft);font-weight:700}.filter-count.svelte-1ljghm3{font:600 .75rem/1 JetBrains Mono Variable,monospace;font-variant-numeric:tabular-nums}.project-filters.svelte-1ljghm3 button:where(.svelte-1ljghm3):focus-visible{outline:2px solid var(--project-accent);outline-offset:3px}.project-grid.svelte-1ljghm3{--project-columns: 1;display:grid;grid-template-columns:repeat(var(--project-columns),minmax(0,1fr));gap:1rem;align-items:start}.project-grid.svelte-1ljghm3.is-masonry{grid-auto-rows:1px;row-gap:0}.project-item.svelte-1ljghm3{min-width:0;align-self:start}@container (min-width: 540px){.project-grid.svelte-1ljghm3{--project-columns: 2}}@container (min-width: 800px){.project-grid.svelte-1ljghm3{--project-columns: 3}}.project-card.svelte-1ljghm3{display:block;width:100%;position:relative;overflow:hidden;min-width:0;border:1px solid color-mix(in srgb,var(--project-accent-line) 65%,transparent);border-radius:calc(var(--radius-large) - .2rem);background:var(--industrial-surface);transition:border-color .2s ease,box-shadow .2s ease}.project-card.svelte-1ljghm3:hover,.project-card.svelte-1ljghm3:focus-within{border-color:var(--project-accent);box-shadow:0 .4rem 1.2rem #00000014}.dark .project-card.svelte-1ljghm3{background:var(--industrial-surface)}.dark .project-card.svelte-1ljghm3:hover,.dark .project-card.svelte-1ljghm3:focus-within{box-shadow:0 .4rem 1.2rem #00000038}.project-card__hit.svelte-1ljghm3{position:absolute;z-index:2;inset:0;border-radius:inherit}.project-card__hit.svelte-1ljghm3:focus-visible{outline:2px solid var(--project-accent);outline-offset:-3px}.project-media.svelte-1ljghm3{position:relative;overflow:hidden;aspect-ratio:16 / 9;background:var(--industrial-surface-hover)}.project-image.svelte-1ljghm3{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .3s ease}.project-card.svelte-1ljghm3:hover .project-image:where(.svelte-1ljghm3),.project-card.svelte-1ljghm3:focus-within .project-image:where(.svelte-1ljghm3){transform:scale(1.025)}.project-award.svelte-1ljghm3{position:absolute;z-index:3;top:.65rem;left:.65rem;right:.65rem;display:grid;grid-template-columns:2.25rem minmax(0,1fr);align-items:start;color:var(--project-accent-strong);pointer-events:none}.project-award.has-preview.svelte-1ljghm3{grid-template-columns:2.25rem minmax(0,1fr) 2.75rem}.project-award.svelte-1ljghm3:before{content:"";position:absolute;inset:0 auto auto 0;width:2.25rem;height:2.25rem;border:1px solid var(--project-accent-line);border-radius:.6rem;background:var(--card-bg);box-shadow:0 .15rem .6rem #00000024;transition:width .26s ease,height .26s ease}.award-icon.svelte-1ljghm3{position:relative;display:grid;place-items:center;width:2.25rem;height:2.25rem}.award-icon.svelte-1ljghm3 svg:where(.svelte-1ljghm3){width:1.15rem;height:1.15rem}.project-preview.svelte-1ljghm3{position:relative;display:grid;place-items:center;align-self:stretch;min-height:2.75rem;color:inherit;border-radius:.5rem;opacity:0;pointer-events:none;transition:opacity .16s ease}.project-preview.svelte-1ljghm3 svg:where(.svelte-1ljghm3){width:1.15rem;height:1.15rem}.preview-label.svelte-1ljghm3{pointer-events:none;text-decoration:none}.project-preview.svelte-1ljghm3:hover,.preview-label.svelte-1ljghm3:hover{color:var(--project-accent)}.project-preview.svelte-1ljghm3:focus-visible,.preview-label.svelte-1ljghm3:focus-visible{outline:2px solid var(--project-accent);outline-offset:-3px}.project-card.svelte-1ljghm3:hover .project-preview:where(.svelte-1ljghm3),.project-card.svelte-1ljghm3:focus-within .project-preview:where(.svelte-1ljghm3){opacity:1;pointer-events:auto}.project-card.svelte-1ljghm3:hover .preview-label:where(.svelte-1ljghm3),.project-card.svelte-1ljghm3:focus-within .preview-label:where(.svelte-1ljghm3){pointer-events:auto}.award-text.svelte-1ljghm3{position:relative;align-self:center;padding:.5rem .65rem .5rem 0;font-size:.75rem;font-weight:700;line-height:1.25rem;opacity:0;transform:translate(-.3rem);transition:opacity .16s ease,transform .22s ease}.project-card.svelte-1ljghm3:hover .project-award:where(.svelte-1ljghm3):before,.project-card.svelte-1ljghm3:focus-within .project-award:where(.svelte-1ljghm3):before{width:100%;height:100%}.project-card.svelte-1ljghm3:hover .award-text:where(.svelte-1ljghm3),.project-card.svelte-1ljghm3:focus-within .award-text:where(.svelte-1ljghm3){opacity:1;transform:none;transition-delay:80ms}@media(hover:none),(pointer:coarse){.project-award.svelte-1ljghm3:before{width:100%;height:100%}.award-text.svelte-1ljghm3{opacity:1;transform:none}.project-preview.svelte-1ljghm3{opacity:1;pointer-events:auto}.preview-label.svelte-1ljghm3{pointer-events:auto}}.project-content.svelte-1ljghm3{padding:1rem}.project-title-row.svelte-1ljghm3{display:flex;flex-direction:column;align-items:flex-start;gap:.45rem;margin-bottom:.65rem}.project-title-row.svelte-1ljghm3 h2:where(.svelte-1ljghm3){margin:0;font-size:1.08rem;font-weight:750;line-height:1.45;overflow-wrap:anywhere}.project-meta.svelte-1ljghm3{display:flex;align-items:center;flex-wrap:wrap;gap:.45rem .6rem}.status-label.svelte-1ljghm3{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .45rem;border-radius:.35rem;color:var(--text-secondary);border:1px solid color-mix(in srgb,currentColor 35%,transparent);background:color-mix(in srgb,currentColor 4%,transparent);font-size:.68rem;font-weight:600;line-height:1.4;white-space:nowrap}.status-progress.svelte-1ljghm3{color:var(--project-accent-strong);border-color:var(--project-accent-line)}.status-completed.svelte-1ljghm3{color:#28724b;border-color:#28724b59;background:#28724b0d}.dark .status-completed.svelte-1ljghm3{color:#a0c6b0;border-color:#a0c6b066}.dark .status-label.svelte-1ljghm3{background:#ffffff08}.status-progress.svelte-1ljghm3:before{content:"";width:.3rem;height:.3rem;border-radius:50%;background:currentColor}.project-dates.svelte-1ljghm3{color:var(--text-secondary);font-size:.68rem;line-height:1.5;font-variant-numeric:tabular-nums}.project-dates.svelte-1ljghm3 time:where(.svelte-1ljghm3){white-space:nowrap}.project-description.svelte-1ljghm3{margin:0 0 .85rem;color:var(--text-secondary);font-size:.86rem;line-height:1.65;overflow-wrap:anywhere}.project-source.svelte-1ljghm3{position:relative;z-index:4;display:inline;color:var(--project-accent-strong);font:inherit;white-space:nowrap;text-decoration:underline;text-decoration-color:var(--project-accent-line);text-underline-offset:.2em}.project-source.svelte-1ljghm3:hover{text-decoration-color:currentColor}.project-source.svelte-1ljghm3:focus-visible{outline:2px solid var(--project-accent);outline-offset:3px;border-radius:.1rem}.tech-list.svelte-1ljghm3{display:flex;flex-wrap:wrap;gap:.35rem}.tech-chip.svelte-1ljghm3{--tech-chip-color: #94a3b8;padding:.22rem .45rem;border-radius:.4rem;border:1px solid color-mix(in srgb,var(--tech-chip-color) 45%,transparent);background:color-mix(in srgb,var(--tech-chip-color) 8%,transparent);color:var(--text-secondary);font-size:.65rem;line-height:1.4}.tech-chip--ai.svelte-1ljghm3{--tech-chip-color: #a78bfa}.tech-chip--frontend.svelte-1ljghm3{--tech-chip-color: #5cc8ff}.tech-chip--backend.svelte-1ljghm3{--tech-chip-color: #3dd6b0}.tech-chip--language.svelte-1ljghm3{--tech-chip-color: #91a8c5}.tech-chip--infra.svelte-1ljghm3{--tech-chip-color: #f0a86b}.dark .tech-chip.svelte-1ljghm3{background:#ffffff08}.project-empty.svelte-1ljghm3{padding:2rem 0;text-align:center;color:var(--text-secondary)}@media(prefers-reduced-motion:reduce){.project-card.svelte-1ljghm3,.project-image.svelte-1ljghm3,.project-award.svelte-1ljghm3:before,.award-text.svelte-1ljghm3,.project-preview.svelte-1ljghm3,.project-filters.svelte-1ljghm3 button:where(.svelte-1ljghm3){transition:none}.project-card.svelte-1ljghm3:hover .award-text:where(.svelte-1ljghm3),.project-card.svelte-1ljghm3:focus-within .award-text:where(.svelte-1ljghm3){transition-delay:0ms}.project-card.svelte-1ljghm3:hover .project-image:where(.svelte-1ljghm3),.project-card.svelte-1ljghm3:focus-within .project-image:where(.svelte-1ljghm3){transform:none}}p[data-astro-cid-aid3sr62].page-intro-caption{font:400 1rem/1.75 system-ui,PingFang SC,Microsoft YaHei,sans-serif;letter-spacing:.025em;color:var(--text-secondary);margin-block:.65rem 0}.project-shell[data-astro-cid-aid3sr62]{color:#000000e6}html.dark .project-shell[data-astro-cid-aid3sr62]{color:#ffffffe6}.project-intro[data-astro-cid-aid3sr62]{padding-bottom:1.25rem}.project-intro__copy[data-astro-cid-aid3sr62] p[data-astro-cid-aid3sr62]{margin:0;color:var(--text-secondary);font-size:1rem}
