:root{--paper: #fffef9;--ink: #1c1917;--muted: #57534e;--accent: #0f766e;--accent-strong: #134e4a;--border: rgba(28, 25, 23, .14);--border-strong: rgba(28, 25, 23, .3);--tile-bg: #eceae4;--badge-bg: rgba(28, 25, 23, .78);--badge-ink: #fffef9;--font-serif: "Source Serif 4", Georgia, "Times New Roman", serif;--font-sans: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "JetBrains Mono", "SF Mono", Consolas, Menlo, monospace;--measure: 46rem;--page-max: 72rem;--page-pad: clamp(1rem, 4vw, 2rem)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--paper: #0c0a09;--ink: #fafaf9;--muted: #b3ada7;--accent: #5eead4;--accent-strong: #99f6e4;--border: rgba(250, 250, 249, .16);--border-strong: rgba(250, 250, 249, .35);--tile-bg: #1c1917;--badge-bg: rgba(12, 10, 9, .8);--badge-ink: #fafaf9}}[data-theme=dark]{--paper: #0c0a09;--ink: #fafaf9;--muted: #b3ada7;--accent: #5eead4;--accent-strong: #99f6e4;--border: rgba(250, 250, 249, .16);--border-strong: rgba(250, 250, 249, .35);--tile-bg: #1c1917;--badge-bg: rgba(12, 10, 9, .8);--badge-ink: #fafaf9}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:1rem;line-height:1.6}img{max-width:100%;height:auto}a{color:inherit;text-decoration-color:var(--border-strong);text-underline-offset:.15em}a:hover{color:var(--accent);text-decoration-color:currentColor}:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:2px}::selection{background:var(--accent);color:var(--paper)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:var(--page-pad);top:-100px;z-index:100;padding:.6rem 1rem;background:var(--ink);color:var(--paper);font-weight:600;text-decoration:none;border-radius:0 0 6px 6px}.skip-link:focus{top:0}.page{max-width:var(--page-max);margin:0 auto;padding:0 var(--page-pad)}.site-header{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:1.25rem 0 1rem;border-bottom:1px solid var(--border)}.site-name{margin:0;font-family:var(--font-serif);font-size:1.35rem;font-weight:700;letter-spacing:-.01em;line-height:inherit}.site-name a{text-decoration:none;color:var(--ink)}.tag-title{margin:0;font-family:var(--font-serif);font-size:1.5rem;font-weight:700;letter-spacing:-.01em}.site-nav{display:flex;align-items:center;gap:.25rem 1.1rem;flex-wrap:wrap}.site-nav a{display:inline-flex;align-items:center;min-height:44px;font-size:.92rem;font-weight:500;color:var(--muted);text-decoration:none}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--accent)}.site-nav a[aria-current=page]{text-decoration:underline;text-underline-offset:.35em}.intro{padding:1.75rem 0 .5rem;max-width:var(--measure)}.intro p{margin:0;font-size:1.05rem;color:var(--ink)}.intro .intro-links{margin-top:.5rem;font-size:.92rem;color:var(--muted)}.section{padding:1.75rem 0 2.25rem}.section+.section{border-top:1px solid var(--border)}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:1rem}.section-head h2{margin:0;font-family:var(--font-serif);font-size:1.2rem;font-weight:700;letter-spacing:-.01em}.section-head .section-note{font-size:.85rem;color:var(--muted)}.section-head .section-note a{color:inherit}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-auto-rows:150px;grid-auto-flow:dense;gap:6px;list-style:none;margin:0;padding:0}@media(min-width:700px){.photo-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));grid-auto-rows:170px}}.photo-grid li{margin:0}.photo-grid .tile-wide{grid-column:span 2}.tile{position:relative;display:block;height:100%;overflow:hidden;border-radius:4px;background:var(--tile-bg)}.tile img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s ease}.tile:hover img,.tile:focus-visible img{transform:scale(1.03)}.tile:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.tile-caption{position:absolute;inset:auto 0 0;padding:1.5rem .6rem .5rem;font-size:.8rem;font-weight:500;color:#fff;background:linear-gradient(transparent,#000000bf);opacity:0;transition:opacity .2s ease;pointer-events:none}.tile:hover .tile-caption,.tile:focus-visible .tile-caption{opacity:1}.tile-badge{position:absolute;top:.45rem;right:.45rem;display:inline-flex;align-items:center;gap:.3em;padding:.15rem .5rem;font-family:var(--font-mono);font-size:.72rem;font-weight:500;color:var(--badge-ink);background:var(--badge-bg);border-radius:999px}.sort-controls{display:inline-flex;gap:.3rem;flex-wrap:wrap}.sort-btn{min-height:36px;padding:.3rem .8rem;font:inherit;font-size:.8rem;font-weight:500;color:var(--muted);background:transparent;border:1px solid var(--border-strong);border-radius:999px;cursor:pointer}.sort-btn:hover{color:var(--accent);border-color:var(--accent)}.sort-btn.is-active{color:var(--paper);background:var(--accent);border-color:var(--accent)}.project-list{list-style:none;margin:0;padding:0;max-width:var(--measure)}.project-list li{padding:.85rem 0}.project-list li+li{border-top:1px solid var(--border)}.project-name{font-weight:600;font-size:1rem}.project-desc{margin:.15rem 0 0;font-size:.92rem;color:var(--muted)}.project-meta{margin-top:.3rem;font-family:var(--font-mono);font-size:.78rem;color:var(--muted)}.writing-year{margin:1.25rem 0 .25rem;font-family:var(--font-mono);font-size:.85rem;font-weight:600;color:var(--muted)}.writing-list{list-style:none;margin:0;padding:0;max-width:var(--measure)}.writing-list li{display:flex;align-items:baseline;gap:1rem;padding:.4rem 0}.writing-list li+li{border-top:1px solid var(--border)}.writing-list time{flex:none;width:7ch;white-space:nowrap;font-family:var(--font-mono);font-size:.8rem;color:var(--muted)}.writing-list a{font-size:.98rem;text-decoration:none}.writing-list a:hover{text-decoration:underline}.writing-list .ext{color:var(--muted);font-size:.85em}@media(max-width:480px){.writing-list li{flex-direction:column;gap:.1rem;padding:.55rem 0}.writing-list time{width:auto}}.load-more-container{grid-column:1 / -1;display:flex;justify-content:center;padding:1rem 0 0}.load-more-btn{min-height:44px;padding:.55rem 1.4rem;font:inherit;font-size:.92rem;font-weight:500;color:var(--ink);background:transparent;border:1px solid var(--border-strong);border-radius:999px;cursor:pointer}.load-more-btn:hover{border-color:var(--accent);color:var(--accent)}.site-footer{margin-top:1rem;padding:1.5rem 0 2.5rem;border-top:1px solid var(--border);font-size:.88rem;color:var(--muted)}.site-footer p{margin:.35rem 0}.site-footer a{color:inherit}.footer-links{display:flex;flex-wrap:wrap;gap:.25rem 1.25rem;list-style:none;margin:0 0 .75rem;padding:0}.footer-links a{display:inline-flex;min-height:44px;align-items:center;text-decoration:none;font-weight:500}.footer-links a:hover{color:var(--accent);text-decoration:underline}.theme-toggle{position:fixed;bottom:1.25rem;right:1.25rem;z-index:50;width:44px;height:44px;display:flex;align-items:center;justify-content:center;color:var(--ink);background:var(--paper);border:1px solid var(--border-strong);border-radius:50%;cursor:pointer;box-shadow:0 2px 8px #0000001f}.theme-toggle:hover{color:var(--accent);border-color:var(--accent)}.theme-toggle svg{width:20px;height:20px}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.tile:hover img,.tile:focus-visible img{transform:none}}#online-status{position:fixed;bottom:20px;right:20px;padding:12px 16px;border-radius:8px;font-size:14px;transition:all .3s ease;z-index:1000;pointer-events:none;box-shadow:0 4px 8px #0003;display:none}#online-status.offline{background-color:#f44336;color:#fff;opacity:1;transform:translateY(0)}body.offline #online-status{opacity:1;transform:translateY(0)}.install-button{background-color:var(--accent, #0091ff);color:#fff;border:none;padding:12px 20px;border-radius:4px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;margin-top:20px;box-shadow:0 2px 4px #0000001a;transition:background-color .2s,transform .2s}.install-button:hover{background-color:var(--accent-dark, #0077cc);transform:translateY(-2px)}.install-button svg{margin-right:8px}@supports (-webkit-touch-callout: none){.install-button{display:none}}@media all and (display-mode:standalone){.install-button{display:none}}
