:root{--bg: #fcfcfa;--surface: #ffffff;--ink: #222223;--muted: #66666b;--line: #e7e6e2;--line-strong: #d5d3ce;--accent: #2f615e;--accent-soft: rgba(47, 97, 94, .1);--shadow-soft: 0 14px 36px rgba(27, 27, 30, .09);--max: 1040px;--radius: 12px}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:IBM Plex Sans,sans-serif;color:var(--ink);background:var(--bg);background-image:radial-gradient(circle at 16% -6%,rgba(47,97,94,.035),transparent 36%);line-height:1.68;letter-spacing:.002em;min-height:100vh;display:flex;flex-direction:column}h1,h2,h3{font-family:Space Grotesk,sans-serif;letter-spacing:-.02em;line-height:1.15}a{color:inherit;text-decoration:none}.container{width:min(100% - 56px,var(--max));margin:0 auto}.grain{position:fixed;inset:0;pointer-events:none;background-image:radial-gradient(rgba(0,0,0,.03) .55px,transparent .55px);background-size:4px 4px;opacity:.1;z-index:0}main{position:relative;z-index:1;flex:1 0 auto}.site-header{border-bottom:1px solid var(--line);background:#fcfcfadb;backdrop-filter:blur(6px);position:sticky;top:0;z-index:10}.nav-wrap{min-height:74px;display:flex;justify-content:space-between;align-items:center;gap:24px}.nav-left{display:flex;align-items:center;gap:28px}.logo{display:inline-flex;align-items:center;gap:8px;font-weight:600;font-size:.95rem}.logo-mark{color:var(--accent)}.nav-main{display:flex;align-items:center;gap:28px}.nav-main a{font-size:.98rem;color:#404046;position:relative;padding-bottom:4px;transition:color .2s ease}.nav-main a:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .22s ease}.nav-main a:hover:after,.nav-main a.active:after{transform:scaleX(1)}.nav-main a:hover,.nav-main a.active{color:var(--ink)}.nav-social{display:flex;align-items:center;gap:18px}.icon-link{display:inline-grid;place-items:center;width:26px;height:26px;color:#333338;border-radius:999px;border:1px solid transparent;transition:transform .2s ease,color .2s ease,border-color .2s ease,background .2s ease}.icon-link:hover{transform:translateY(-1px);color:var(--ink);border-color:var(--line-strong);background:#ffffffa8}.icon-link svg{width:16px;height:16px;fill:currentColor}.home-hero{padding:86px 0 64px;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:44px;align-items:center}.home-copy{max-width:640px}.eyebrow{text-transform:uppercase;letter-spacing:.14em;font-size:.74rem;color:var(--muted);margin-bottom:10px}.home-copy h1{font-size:clamp(2.15rem,4vw,3rem);margin-bottom:14px;max-width:16ch;text-wrap:balance}.wave-hand{display:inline-block;transform-origin:72% 78%;animation:wave-hand 3.2s ease-in-out infinite;will-change:transform}.lead{font-size:1.06rem;color:#35353a;max-width:540px}.home-subtle{margin-top:18px;color:var(--muted);max-width:560px;border-left:2px solid var(--line);padding-left:12px}.button{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:10px 17px;font-size:.88rem;font-weight:600;letter-spacing:.03em;border:1px solid transparent;transition:background .2s ease,border-color .2s ease,transform .2s ease}.button.primary{background:#25262a;color:#f3f3f3}.button.primary:hover{background:#1c1d20;transform:translateY(-1px)}.button.ghost{border-color:var(--line-strong);color:#2e2e33;background:transparent}.button.ghost:hover{border-color:#919198;transform:translateY(-1px)}.portrait-panel{width:min(100%,510px);min-height:0;aspect-ratio:1 / 1;display:grid;place-items:center;overflow:visible;justify-self:end;margin-top:-22px;box-shadow:none;transform:none;transition:none}.portrait-panel:hover{transform:none;box-shadow:none}.cat-avatar{width:min(100%,465px);aspect-ratio:260 / 220;position:relative;transform:rotate(-.2deg);overflow:visible}.cat-sketch{width:100%;height:100%;overflow:visible}.cat-fx-layer{position:absolute;inset:0;pointer-events:none;overflow:visible}.cat-lines path,.cat-lines ellipse{fill:none;stroke:#25262a;stroke-linecap:round;stroke-linejoin:round}.cat-lines.main path,.cat-lines.main ellipse{stroke-width:1.9}.cat-lines.sketch path,.cat-lines.sketch ellipse{stroke-width:.95;stroke:#25262a47}.cat-pupil{fill:#24252a;transition:transform .08s linear;pointer-events:none}.cat-eye-hit{fill:#0000;cursor:pointer;pointer-events:all}.cat-highlight{fill:#f3f3f5;transition:transform .08s linear;pointer-events:none}.cat-fx-dot,.cat-fx-haze{position:absolute;left:0;top:0;transform:translate(-50%,-50%);border-radius:999px;pointer-events:none}.cat-fx-dot{width:var(--size, 3.4px);height:var(--size, 3.4px);background:var(--dot-color, #58b7ad);opacity:.85;animation:cat-fx-dot var(--ttl, .64s) cubic-bezier(.15,.62,.22,1) forwards}.cat-fx-haze{width:var(--size, 20px);height:var(--size, 20px);background:radial-gradient(circle,var(--haze-color, #58b7ad) 0%,rgba(0,0,0,0) 72%);opacity:.35;filter:blur(5px);animation:cat-fx-haze var(--ttl, .76s) ease-out forwards}.cat-note{position:absolute;left:50%;top:22px;transform:translate(-50%,-130%) scale(.95);opacity:0;will-change:opacity,transform;backface-visibility:hidden;pointer-events:none;white-space:pre-line;text-align:center;line-height:1.25;font-size:.72rem;letter-spacing:.02em;color:#2d2e33;background:#fcfcfcdb;border:1px solid var(--line-strong);border-radius:999px;max-width:210px;padding:6px 11px;transition:opacity .2s ease,transform .2s ease}.cat-note.show{opacity:1;transform:translate(-50%,-150%) scale(1)}.cat-note.busy{color:#5d3f34;background:#fff8f1e6;border-color:#d9b89c}.cat-note.special{color:#1e4a47;background:#edfcf8eb;border-color:#9fd8cd}.cat-note.art{font-family:IBM Plex Mono,monospace;font-size:.66rem;letter-spacing:.01em;background:#fbfbfbeb;border-color:#cfcfd4}.portrait-panel img{display:block;width:100%;height:100%;object-fit:cover}.portrait-placeholder{width:84px;height:84px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line-strong);color:#2d2d31;letter-spacing:.06em;font-weight:600;font-size:1rem;background:#ffffffa6}.home-section{padding:32px 0 8px}.home-section+.home-section{border-top:1px dashed var(--line)}.section-headline{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:16px}.section-headline h2{font-size:clamp(1.45rem,2.4vw,1.85rem)}.text-link{color:#3a3a40;text-decoration:underline;text-underline-offset:2px;transition:color .2s ease}.text-link:hover{color:var(--accent)}.post-list,.post-list-page{border-top:1px solid var(--line)}.post-list-page{padding-bottom:74px}.post-empty{color:var(--muted);padding:22px 0}.post-row{display:grid;grid-template-columns:160px minmax(0,1fr);gap:18px;border-bottom:1px solid var(--line);padding:18px 0;transition:background .2s ease,transform .2s ease}.post-row:hover{background:#ffffff8f;transform:translate(2px)}.post-date,.post-time{color:var(--muted);font-size:.86rem}.post-time{margin-top:2px}.post-body h3{font-size:1.06rem;margin-bottom:5px}.post-body h3 a{text-decoration:none;display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.post-lang-tag{display:inline-flex;align-items:center;border:1px solid var(--line-strong);border-radius:999px;padding:1px 7px;font-size:.65rem;line-height:1.2;letter-spacing:.05em;color:#4b4b51;background:#ffffff8c}.post-body h3 a:after{content:"->";font-size:.8rem;color:var(--muted);opacity:0;transform:translate(-5px);transition:opacity .2s ease,transform .2s ease}.post-row:hover .post-body h3 a:after{opacity:1;transform:translate(0)}.post-body p{color:#4f4f54}.about-preview{max-width:760px;color:#3f3f44;font-size:1.03rem}.page-head{padding:62px 0 24px}.page-head h1{font-size:clamp(2rem,4vw,2.8rem);margin-bottom:8px}.page-head p{max-width:760px;color:#44444a}.about-grid{display:grid;grid-template-columns:220px minmax(0,1fr);gap:22px 30px;padding-bottom:78px}.about-label{text-transform:uppercase;letter-spacing:.12em;font-size:.88rem;color:#303035;padding-top:2px}.about-grid p{color:#3d3d42}.post{padding:58px 0 82px}.post-content{max-width:680px}.post-content h1{font-size:clamp(2rem,4vw,2.7rem);margin-bottom:12px}.post-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px 16px;align-items:start}.post-head-switch{justify-self:end;margin-top:2px}.post-content h2{font-size:1.38rem;margin:26px 0 10px}.post-content p{color:#3f3f45;font-size:.98rem;line-height:1.75;margin-bottom:14px}.post-content ul{margin:10px 0 18px 18px}.post-content li{margin-bottom:8px;color:#3f3f45;font-size:.98rem;line-height:1.72}.post-content blockquote{margin:18px 0;padding:12px 14px;border-left:2px solid var(--accent);background:#ffffff75;color:#313137}.site-footer{border-top:1px solid var(--line);padding:20px 0 40px;color:var(--muted);font-size:.9rem;margin-top:auto}.footer-line{color:#5a5b61;letter-spacing:.01em}body[data-theme=mono]{--bg: #f3f3f3;--surface: #ffffff;--ink: #181818;--muted: #5c5c5c;--line: #d7d7d7;--line-strong: #b7b7b7;--accent: #1b1b1b;--accent-soft: rgba(0, 0, 0, .08);--shadow-soft: 0 10px 20px rgba(10, 10, 10, .08);background-image:radial-gradient(circle at 15% -10%,rgba(10,10,10,.05),transparent 34%)}body[data-theme=mono] .logo-mark{color:#151515}body[data-theme=mono] .button.primary{background:#111}body[data-theme=mono] .button.primary:hover{background:#000}body[data-theme=mono] .portrait-panel{transform:none}body[data-theme=mono] .cat-lines.main path,body[data-theme=mono] .cat-lines.main ellipse{stroke:#151515}body[data-theme=mono] .cat-lines.sketch path,body[data-theme=mono] .cat-lines.sketch ellipse{stroke:#15151573}body[data-theme=mono] .cat-pupil{fill:#141414}body[data-theme=mono] .cat-highlight{fill:#f0f0f0}body[data-theme=mono] .post-row:hover{background:#ffffffe0}body[data-theme=mono] .post-content blockquote{border-left-color:#111}body[data-theme=signal]{--bg: #f0ede8;--surface: #f9f6f2;--ink: #252220;--muted: #6f6761;--line: #d9cfc8;--line-strong: #bdaea3;--accent: #8f3f2b;--accent-soft: rgba(143, 63, 43, .1);--shadow-soft: 0 14px 30px rgba(58, 33, 25, .12);background-image:radial-gradient(circle at 16% -6%,rgba(143,63,43,.1),transparent 35%)}body[data-theme=signal] .logo-mark{color:#8f3f2b}body[data-theme=signal] .button.primary{background:#8f3f2b}body[data-theme=signal] .button.primary:hover{background:#783524}body[data-theme=signal] .portrait-panel{transform:rotate(-1deg)}body[data-theme=signal] .cat-lines.main path,body[data-theme=signal] .cat-lines.main ellipse{stroke:#7e3523}body[data-theme=signal] .cat-lines.sketch path,body[data-theme=signal] .cat-lines.sketch ellipse{stroke:#7e352373}body[data-theme=signal] .cat-pupil{fill:#4f1d14}body[data-theme=signal] .cat-highlight{fill:#f7efe8}body[data-theme=signal] .post-content blockquote{border-left-color:#8f3f2b}@keyframes fade-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes wave-hand{0%,62%,to{transform:rotate(0)}66%{transform:rotate(15deg)}70%{transform:rotate(-9deg)}74%{transform:rotate(13deg)}78%{transform:rotate(-6deg)}82%{transform:rotate(9deg)}86%{transform:rotate(0)}}@keyframes cat-fx-dot{0%{transform:translate(-50%,-50%) scale(.95);opacity:.9}to{transform:translate(calc(-50% + var(--dx, 0px)),calc(-50% + var(--dy, 18px))) scale(.2);opacity:0}}@keyframes cat-fx-haze{0%{transform:translate(-50%,-50%) scale(.8);opacity:.34}to{transform:translate(calc(-50% + var(--dx, 0px)),calc(-50% + var(--dy, 18px))) scale(1.75);opacity:0}}.home-copy,.portrait-panel,.home-section{animation:fade-up .5s ease both}.portrait-panel{animation-delay:.08s}.home-section:nth-of-type(2){animation-delay:.12s}.home-section:nth-of-type(3){animation-delay:.18s}@media (max-width: 960px){.container{width:min(100% - 36px,var(--max))}.nav-wrap{min-height:64px}.nav-left{gap:18px}.nav-main{gap:14px}.nav-main a{font-size:.9rem}.home-hero{grid-template-columns:1fr;gap:26px;padding-top:50px}.portrait-panel{width:100%;justify-self:stretch;min-height:250px;aspect-ratio:auto;margin-top:0;transform:none}.cat-avatar{width:min(82%,345px)}.post-row{grid-template-columns:1fr;gap:7px;transform:none!important}.post-head{grid-template-columns:1fr;gap:10px}.post-head-switch{justify-self:start;margin-top:-4px}.about-grid{grid-template-columns:1fr;gap:8px 0}}@media (max-width: 620px){.logo-text{display:none}.nav-social{gap:10px}.icon-link{width:24px;height:24px}}@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto}}
