:root{--bg:#0b0f10;--fg:#c6f7d0;--fg-dim:#9ad4ac;--accent:#6ff7ff;--accent-2:#ffd16f;--border:#1b2a2a;--chip-bg:#0f1718;--chip-fg:#b8f0c6;--shadow:0 0 0.5px rgba(111, 247, 255, 0.35),
    0 0 6px rgba(111, 247, 255, 0.15), 0 0 18px rgba(111, 247, 255, 0.08)}.projects-section{color:var(--fg);font:15px/1.7 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;isolation:isolate}.projects-section::before{content:"";position:fixed;inset:-10px;pointer-events:none;z-index:0;background:repeating-linear-gradient( to bottom,rgba(111,247,255,5%),rgba(111,247,255,5%) 1px,transparent 1px,transparent 3px );mix-blend-mode:screen;opacity:.35}.projects-header{max-width:920px;margin:0 auto 6px;padding:8px 4px 0}.projects-title{margin:0 0 4px;font-size:clamp(18px,3.2vw,24px);letter-spacing:.08em;color:var(--accent);text-shadow:var(--shadow)}.projects-sub{margin:0;color:var(--fg-dim);opacity:.9}.p-log{list-style:none;margin:20px auto 0;padding:0;max-width:920px;border-left:2px dashed var(--border);position:relative}.p-entry{position:relative;margin:0;padding:20px 0 20px 18px}.p-entry::before{content:"";position:absolute;left:-6px;top:28px;width:10px;height:10px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px rgba(111,247,255,.6)}.p-entry::after{content:"";position:absolute;left:-2px;top:38px;width:2px;height:calc(100% - 38px);background:linear-gradient(var(--border),transparent)}.p-row{display:flex;gap:14px;flex-wrap:wrap;align-items:baseline}.p-time{color:var(--fg-dim);font-size:13px}.p-head{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}.p-pointer{color:var(--accent-2)}.p-title{font-weight:700}.p-link{color:var(--accent-2);text-decoration:none;border-bottom:1px dashed var(--accent-2)}.p-link:hover{opacity:.85}.p-desc{margin:6px 0 0;color:var(--fg)}.p-stacks{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.6rem}.chip{background:var(--chip-bg);color:var(--chip-fg);border-radius:999px;padding:.25rem .6rem;font-size:.8rem;border:1px solid var(--border);box-shadow:0 0 10px rgba(111,247,255,5%)inset}@supports(animation-timeline:view()) or (animation-timeline:scroll()){.p-entry{view-timeline-name:--row;view-timeline-axis:block;animation:row-glow 1s linear both;animation-timeline:--row;animation-range:entry 0% cover 60%}@keyframes row-glow{from{filter:brightness(1)}to{filter:brightness(1.12)}}}@media(prefers-reduced-motion:reduce){.p-entry{animation:none !important}}