/* ==================== SELF-HOSTED FONTS ==================== */
@font-face{font-family:'Fraunces';font-style:italic;font-weight:300 900;font-display:swap;src:url('../fonts/fraunces-italic-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Fraunces';font-style:italic;font-weight:300 900;font-display:swap;src:url('../fonts/fraunces-italic-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Fraunces';font-style:normal;font-weight:300 900;font-display:swap;src:url('../fonts/fraunces-normal-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Fraunces';font-style:normal;font-weight:300 900;font-display:swap;src:url('../fonts/fraunces-normal-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:italic;font-weight:400;font-display:swap;src:url('../fonts/ibmplexmono-italic400-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:italic;font-weight:400;font-display:swap;src:url('../fonts/ibmplexmono-italic400-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/ibmplexmono-normal400-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/ibmplexmono-normal400-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/ibmplexmono-normal500-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/ibmplexmono-normal500-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/ibmplexmono-normal600-latinext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/ibmplexmono-normal600-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
.screen-reader-text:where(:not(:focus-within,:active)){position:absolute!important;clip-path:inset(50%)!important;overflow:hidden!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;border:0!important;white-space:nowrap!important}.skip-link{position:absolute;top:-100px;left:16px;background:var(--accent);color:#fff;font-family:var(--mono);font-size:13px;padding:10px 20px;z-index:10000;text-decoration:none;transition:top 0.2s}.skip-link:focus{top:16px}:focus-visible{outline:2px solid var(--accent-text);outline-offset:3px}:focus:not(:focus-visible){outline:none}:root{--lab-sweep:rgba(206,182,148,0.34);--lab-spark:rgba(151,112,48,0.85);--lab-spark-s:1.7;--bg:#FAFAF8;--bg-2:#F2F0EB;--bg-3:#E6E3DC;--text:#0A0A0A;--text-dim:rgba(17,17,17,0.68);--accent:#FF3F00;--accent-text:#B52B00;--err:#C0392B;--ok:#1E7B4D;--accent-dim:rgba(255,63,0,0.08);--accent-mid:rgba(255,63,0,0.25);--border:rgba(0,0,0,0.09);--border-strong:rgba(0,0,0,0.15);--nav-bg:rgba(250,250,248,0.94);--shadow:0 2px 16px rgba(0,0,0,0.06);--mono:'IBM Plex Mono','Courier New',monospace;--serif:'Fraunces',Georgia,serif;--max:1080px;--gap:110px;color-scheme:light}[data-theme="dark"]{--lab-sweep:rgba(255,242,230,0.12);--lab-spark:rgba(255,248,238,0.92);--lab-spark-s:1;--bg:#0D0D0D;--bg-2:#131313;--bg-3:#1C1C1C;--text:#F0EDE8;--text-dim:rgba(240,237,232,0.62);--accent:#FF3F00;--accent-text:#FF8C5A;--err:#FF8A75;--ok:#5FD08A;--accent-dim:rgba(255,63,0,0.10);--accent-mid:rgba(255,63,0,0.35);--border:rgba(240,237,232,0.09);--border-strong:rgba(240,237,232,0.18);--nav-bg:rgba(13,13,13,0.94);--shadow:0 2px 24px rgba(0,0,0,0.40);color-scheme:dark}[data-theme="dark"] body{background-image:radial-gradient(rgba(255,63,0,0.06) 1px,transparent 1px)}[data-theme="dark"] body::after{content:'';position:fixed;inset:0;pointer-events:none;background:repeating-linear-gradient( 0deg,transparent,transparent 2px,rgba(0,0,0,0.018) 2px,rgba(0,0,0,0.018) 4px );z-index:9998}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:68px;scrollbar-gutter:stable}body{font-family:var(--mono);background-color:var(--bg);background-image:radial-gradient(rgba(0,0,0,0.18) 1px,transparent 1px);background-size:28px 28px;color:var(--text);line-height:1.7;font-size:15px;-webkit-font-smoothing:antialiased;overflow-x:hidden;transition:background-color 0.25s,color 0.25s}img{max-width:100%;display:block}a{color:var(--accent-text);text-decoration:underline}a:hover{text-decoration:none}.container{max-width:var(--max);margin:0 auto;padding:0 40px}.section-label{font-family:var(--mono);font-size:10.5px;letter-spacing:0.22em;text-transform:uppercase;color:var(--accent-text);margin-bottom:14px;display:block;background-color:var(--bg)}.section-label::before{content:'// '}.section-title{font-family:var(--serif);font-size:clamp(30px,4vw,42px);font-weight:800;line-height:1.08;letter-spacing:-0.02em;margin-bottom:36px;margin-top:8px}.site-nav{position:fixed;top:0;left:0;right:0;z-index:500;height:60px;display:flex;align-items:center;background:var(--nav-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--border);transition:background 0.25s,border-color 0.25s}.site-nav .container{width:100%;display:flex;align-items:center;justify-content:space-between}.nav-logo{font-family:var(--mono);font-size:13px;font-weight:600;color:var(--text);text-decoration:none;letter-spacing:0.04em;transition:color 0.2s}.nav-logo::before{content:'>';color:var(--accent-text)}.nav-logo span{color:var(--accent-text)}.nav-logo:hover{color:var(--accent-text);text-decoration:none}.nav-right{display:flex;align-items:center;gap:28px}.nav-menu{display:flex;gap:26px;list-style:none;margin:0;padding:0}.nav-menu a{font-family:var(--mono);font-size:12px;color:var(--text);text-decoration:none;letter-spacing:0.10em;transition:color 0.2s,opacity 0.2s;position:relative;opacity:0.75;white-space:nowrap}.nav-menu a::before{content:'./';color:var(--accent-text);opacity:0;transition:opacity 0.2s;margin-right:1px;font-weight:400}.nav-menu a:hover{color:var(--text);opacity:1}.nav-menu a:hover::before{opacity:1}.nav-menu .current-menu-item>a,.nav-menu .current_page_item>a{color:var(--text);opacity:1;font-weight:600}.nav-menu .current-menu-item>a::before,.nav-menu .current_page_item>a::before{opacity:1}.nav-menu .current-menu-item>a .nav-label,.nav-menu .current_page_item>a .nav-label{border-bottom:1.5px solid var(--accent-text);padding-bottom:1px}.theme-toggle{background:none;border:1px solid var(--border);cursor:pointer;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:var(--text-dim);transition:border-color 0.2s,color 0.2s,background 0.2s;flex-shrink:0}.theme-toggle:hover{border-color:var(--accent-mid);color:var(--accent-text);background:var(--accent-dim)}.theme-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.nav-toggle{display:none}.icon-sun{display:none}.icon-moon{display:block}[data-theme="dark"] .icon-sun{display:block}[data-theme="dark"] .icon-moon{display:none}.page-wrapper{padding-top:60px}.home-hero{display:flex;align-items:center}.hero-inner{display:grid;grid-template-columns:1fr 260px;gap:80px;align-items:center;padding:48px 0 52px;width:100%}.hero-eyebrow{font-family:var(--mono);font-size:10.5px;letter-spacing:0.22em;text-transform:uppercase;color:var(--accent-text);margin-bottom:20px}.hero-name{font-family:var(--serif);font-size:clamp(40px,5.5vw,64px);font-weight:800;line-height:1.05;letter-spacing:-0.025em;margin-bottom:26px;color:var(--text)}.hero-tagline{font-family:var(--mono);font-size:14.5px;color:var(--text-dim);margin-bottom:26px;line-height:1.6}.cursor{display:inline-block;width:9px;height:1.05em;background:var(--accent);margin-left:3px;vertical-align:middle;animation:blink 1.15s step-end infinite}@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}.hero-bio{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.9;max-width:510px;margin-bottom:38px}.hero-bio p+p{margin-top:20px}.hero-socials{display:flex;gap:10px;flex-wrap:wrap}.social-link{display:inline-flex;align-items:center;font-family:var(--mono);font-size:11.5px;text-decoration:none;color:var(--text-dim);border:1px solid var(--border-strong);padding:8px 18px;transition:all 0.2s;letter-spacing:0.08em}.social-link::before{content:'@';color:var(--accent-text);margin-right:2px}.social-link:hover{color:var(--accent-text);border-color:var(--accent-text);background:var(--accent-dim);text-decoration:none}.hero-photo{position:relative}.photo-frame{width:100%;aspect-ratio:4/5;position:relative;overflow:hidden;border:1px solid var(--border)}.photo-frame img{width:100%;height:100%;object-fit:cover;object-position:center top}.hero-photo::after{content:'';position:absolute;inset:0;outline:1px solid var(--accent);outline-offset:10px;pointer-events:none;opacity:0.45}.page-hero{padding:80px 0 64px;border-bottom:1px solid var(--border)}.page-hero-inner{display:grid;grid-template-columns:1fr 340px;gap:60px;align-items:start}.page-hero-no-photo{grid-template-columns:1fr}.page-hero h1{font-family:var(--serif);font-size:clamp(48px,7vw,80px);font-weight:800;line-height:0.96;letter-spacing:-0.03em;margin-bottom:22px;margin-top:8px;color:var(--text)}.page-hero-sub{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.88;margin-bottom:14px}.page-hero-photo img{width:100%;height:100%;min-height:320px;object-fit:cover;display:block;border:1px solid var(--border)}.page-hero-photo{position:relative}.page-hero-photo::after{content:'';position:absolute;inset:0;outline:1px solid var(--accent);outline-offset:8px;pointer-events:none;opacity:0.4}.page-hero-simple{padding:80px 0 52px;border-bottom:1px solid var(--border)}.page-hero-simple h1{font-family:var(--serif);font-size:clamp(48px,7vw,80px);font-weight:800;line-height:0.96;letter-spacing:-0.03em;margin-bottom:0;margin-top:8px}.page-hero-simple p,.page-hero-desc p{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.88;max-width:540px;margin-top:20px}.timeline-section{padding:var(--gap) 0;border-top:1px solid var(--border)}.timeline-grid{display:grid;grid-template-columns:240px 1fr;gap:72px;align-items:start}.timeline-intro{position:sticky;top:80px}.timeline-intro p{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.85;margin-bottom:24px}.timeline-intro .see-all{font-family:var(--mono);font-size:12px;color:var(--accent-text);text-decoration:none;letter-spacing:0.06em;border-bottom:1px solid var(--accent-mid);padding-bottom:2px;transition:border-color 0.2s}.timeline-intro .see-all::after{content:' →'}.timeline-intro .see-all:hover{border-color:var(--accent-text);text-decoration:none}.timeline{position:relative;padding-left:38px}.timeline::before{content:'';position:absolute;left:7px;top:8px;bottom:8px;width:1px;background:linear-gradient(to bottom,var(--accent) 0%,var(--accent-mid) 60%,transparent 100%)}.timeline-item{position:relative;margin-bottom:50px;opacity:0;transform:translateX(16px);transition:opacity 0.5s ease,transform 0.5s ease}.timeline-item:last-child{margin-bottom:0}.timeline-item.visible{opacity:1;transform:translateX(0)}.timeline-item::before{content:'›';position:absolute;left:-38px;top:2px;font-family:var(--mono);font-size:15px;color:var(--accent-text);font-weight:700}.timeline-year{font-family:var(--mono);font-size:10px;letter-spacing:0.18em;color:var(--accent-text);text-transform:uppercase;margin-bottom:6px}.timeline-title{font-family:var(--serif);font-size:21px;font-weight:700;margin-bottom:10px;color:var(--text);line-height:1.2}.timeline-desc{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.88;max-width:580px}.media-section{padding:var(--gap) 0;border-top:1px solid var(--border)}.filter-bar{display:inline-flex;border:1px solid var(--border-strong);overflow:hidden;margin-top:28px}.filter-btn{font-family:var(--mono);font-size:11px;letter-spacing:0.10em;padding:9px 18px;background:none;border:none;border-right:1px solid var(--border-strong);color:var(--text-dim);cursor:pointer;transition:all 0.18s;text-transform:lowercase}.filter-btn:last-child{border-right:none}.filter-btn:hover{background:var(--accent-dim);color:var(--text)}.filter-btn.active{background:var(--accent-text);color:var(--bg);font-weight:600}.media-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px;margin-top:28px}.media-card{background:var(--bg-2);border:1px solid var(--border);display:flex;flex-direction:column;transition:border-color 0.2s,box-shadow 0.2s;overflow:hidden}.media-card:hover{border-color:var(--accent-mid);box-shadow:var(--shadow)}.media-card.hidden{display:none}.media-card-image{width:100%;height:220px;overflow:hidden;flex-shrink:0;background:var(--bg-3);position:relative}.media-card-image img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 0.35s ease}.media-card:hover .media-card-image img{transform:scale(1.03)}.media-card-play-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.28);opacity:0;transition:opacity 0.2s;cursor:pointer;border:none;width:100%}.media-card:hover .media-card-play-overlay{opacity:1}.media-card-play-overlay svg{width:52px;height:52px;fill:#fff;filter:drop-shadow(0 2px 8px rgba(0,0,0,0.5))}.media-card-body{padding:20px 24px 22px;display:flex;flex-direction:column;flex:1}.card-platform{display:inline-block;font-family:var(--mono);font-size:9.5px;letter-spacing:0.16em;text-transform:uppercase;color:var(--accent-text);border:1px solid var(--accent-mid);padding:3px 9px;margin-bottom:12px;align-self:flex-start}.card-title{font-family:var(--serif);font-size:17px;font-weight:700;line-height:1.25;margin-bottom:10px}.card-title a{color:var(--text);text-decoration:none;transition:color 0.2s}.card-title a:hover{color:var(--accent-text)}.card-desc{font-size:13px;color:var(--text-dim);line-height:1.78;flex:1;margin-bottom:16px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.card-meta{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--border);padding-top:24px;margin-top:auto;gap:12px}.card-date{font-family:var(--mono);font-size:10.5px;color:var(--text-dim);flex-shrink:0}.card-source-link{font-family:var(--mono);font-size:11px;text-decoration:none;color:var(--accent-text);letter-spacing:0.06em;display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}.card-source-link:hover{text-decoration:underline}.card-source-link svg{width:11px;height:11px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.embed-modal{width:calc(100% - 48px);max-width:860px;margin:auto;padding:0;background:var(--bg-2);color:inherit;border:1px solid var(--border);max-height:calc(100dvh - 48px);overflow:auto;opacity:0;translate:0 20px;transition:opacity 0.25s ease,translate 0.25s ease,display 0.25s,overlay 0.25s;transition-behavior:allow-discrete}.embed-modal[open]{opacity:1;translate:0 0}@starting-style{.embed-modal[open]{opacity:0;translate:0 20px}}.embed-modal::backdrop{background:rgba(0,0,0,0.82);opacity:0;transition:opacity 0.25s ease,display 0.25s,overlay 0.25s;transition-behavior:allow-discrete}.embed-modal[open]::backdrop{opacity:1}@starting-style{.embed-modal[open]::backdrop{opacity:0}}html:has(.embed-modal[open]){overflow:hidden}@media (prefers-reduced-motion:reduce){.embed-modal{translate:none;transition-duration:0.01ms}.embed-modal[open]{translate:none}@starting-style{.embed-modal[open]{translate:none}}}.embed-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--border)}.embed-modal-title{font-family:var(--mono);font-size:12px;color:var(--text-dim);letter-spacing:0.08em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:16px}.embed-modal-close{background:none;border:1px solid var(--border);width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-dim);flex-shrink:0;transition:border-color 0.2s,color 0.2s}.embed-modal-close:hover{border-color:var(--accent-mid);color:var(--accent-text)}.embed-modal-close svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}.embed-modal-content{padding:0;line-height:0;position:relative;aspect-ratio:16 / 9;width:100%}.embed-modal-content iframe{position:absolute;inset:0;width:100%;height:100%;display:block;border:none}.blog-section{padding:var(--gap) 0;border-top:1px solid var(--border)}.blog-list{display:flex;flex-direction:column}.blog-post-item{padding:34px 0;display:grid;grid-template-columns:110px 1fr auto;gap:40px;align-items:start;text-decoration:none;color:inherit}.blog-post-item:hover{text-decoration:none}.blog-post-item:hover .post-title a{color:var(--accent-text)}.post-date{display:block;font-family:var(--mono);font-size:11px;color:var(--text-dim);letter-spacing:0.10em;padding-top:4px;line-height:1.4}.post-title{font-family:var(--serif);font-size:21px;font-weight:700;line-height:1.2;margin-bottom:10px;color:var(--text)}.post-title a{color:var(--text);text-decoration:none;transition:color 0.2s}.post-title a:hover{color:var(--accent-text)}.post-excerpt{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.82}.post-tag,a.post-tag{font-family:var(--mono);font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--accent-text);border:1px solid var(--accent-mid);padding:4px 10px;white-space:nowrap;text-decoration:none;display:inline-block;transition:color 0.2s,border-color 0.2s,background 0.2s}a.post-tag:hover{background:var(--accent-dim);text-decoration:none}.post-tags{display:inline-flex;flex-direction:column;align-items:flex-start;gap:4px;align-self:flex-start;margin-top:4px}.post-taxonomy{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:28px 0;border-top:1px solid var(--border);max-width:700px}.post-taxonomy-label{font-family:var(--mono);font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:var(--text-dim);margin-right:4px}.pagination{padding:48px 0 0;font-family:var(--mono);font-size:12px}.pagination ul{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;list-style:none;margin:0;padding:0}.pagination .page-numbers{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--border-strong);text-decoration:none;color:var(--text-dim);transition:all 0.18s}.pagination a.page-numbers:hover{border-color:var(--accent-text);color:var(--accent-text);text-decoration:none}.pagination .current{background:var(--accent-text);color:#FFF;border-color:var(--accent-text)}[data-theme="dark"] .pagination .current{color:var(--bg)}.post-hero{padding:80px 0 52px;border-bottom:1px solid var(--border)}.post-back{font-family:var(--mono);font-size:12px;color:var(--text-dim);text-decoration:none;letter-spacing:0.08em;display:inline-flex;align-items:center;gap:6px;margin-bottom:40px;transition:color 0.2s}.post-back::before{content:'←';color:var(--accent-text)}.post-back:hover{color:var(--accent-text);text-decoration:none}.post-hero-meta{display:flex;align-items:center;gap:18px;margin-bottom:24px;flex-wrap:wrap}.post-hero-tag{font-family:var(--mono);font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--accent-text);border:1px solid var(--accent-mid);padding:4px 12px}.post-hero-date{font-family:var(--mono);font-size:11px;color:var(--text-dim);letter-spacing:0.10em}.post-hero h1{font-family:var(--serif);font-size:clamp(34px,5vw,58px);font-weight:800;line-height:1.06;letter-spacing:-0.025em;margin-bottom:22px;max-width:820px}.post-hero-sub{font-size:17px;color:var(--text-dim);line-height:1.7;max-width:620px;font-style:italic;font-family:var(--serif)}.post-body{max-width:700px;padding:56px 0 var(--gap)}.post-body p{font-size:16px;font-weight:500;line-height:1.9;color:var(--text);margin-bottom:26px}.post-body h2{font-family:var(--serif);font-size:28px;font-weight:700;margin-top:52px;margin-bottom:18px;line-height:1.15}.post-body h3{font-family:var(--serif);font-size:22px;font-weight:700;margin-top:38px;margin-bottom:14px}.post-body h4{font-family:var(--mono);font-size:13px;font-weight:600;letter-spacing:0.12em;text-transform:uppercase;margin-top:32px;margin-bottom:10px;color:var(--accent-text)}.post-body a{color:var(--accent-text)}.post-body ul,.post-body ol{padding-left:22px;margin-bottom:26px}.post-body li{font-size:16px;font-weight:500;line-height:1.82;color:var(--text);margin-bottom:6px}.post-body blockquote{border-left:2px solid var(--accent);margin:40px 0;padding:18px 0 18px 28px;background:var(--accent-dim)}.post-body blockquote p{font-family:var(--serif);font-size:20px;font-style:italic;line-height:1.55;margin-bottom:0}.post-body img{max-width:100%;height:auto;margin:36px 0;border:1px solid var(--border)}.post-body figure{margin:36px 0}.post-body figure img{margin:0}.post-body figcaption,.post-body .wp-element-caption{font-family:var(--mono);font-size:11.5px;color:var(--text);letter-spacing:0.06em;margin-top:10px;line-height:1.6}.post-body figcaption::before,.post-body .wp-element-caption::before{content:'// ';color:var(--accent-text)}.post-body figure.aligncenter{text-align:center}.post-body figure.alignleft{float:left;margin-right:28px}.post-body figure.alignright{float:right;margin-left:28px}.post-body hr{border:none;border-top:1px solid var(--border);margin:48px 0}.post-body code{font-family:var(--mono);font-size:13px;background:var(--bg-2);border:1px solid var(--border);padding:2px 6px}.post-body pre{background:var(--bg-2);border:1px solid var(--border);padding:20px;overflow-x:auto;margin-bottom:26px}.post-body pre code{background:none;border:none;padding:0}.post-author{border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:36px 0;display:flex;align-items:center;gap:28px;max-width:700px}.post-author img{width:72px;height:72px;object-fit:cover;object-position:center top;border:1px solid var(--border);flex-shrink:0}.post-author-info strong{display:block;font-family:var(--serif);font-size:17px;font-weight:700;margin-bottom:4px}.post-author-info span{font-family:var(--mono);font-size:12px;color:var(--text-dim)}.strip-section{padding:var(--gap) 0;border-top:1px solid var(--border)}.strip-header{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:36px}.see-all{font-family:var(--mono);font-size:12px;color:var(--accent-text);text-decoration:none;letter-spacing:0.06em;border-bottom:1px solid var(--accent-mid);padding-bottom:2px;white-space:nowrap;transition:border-color 0.2s}.see-all::after{content:' →'}.see-all:hover{border-color:var(--accent-text);text-decoration:none}.contact-intro-hero{margin-top:20px}.contact-section{padding:48px 0}.contact-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media(max-width:640px){.contact-form-grid{grid-template-columns:1fr}}.contact-text p,.contact-intro p{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.88;margin-bottom:14px}.contact-socials{margin-top:40px;padding-top:36px;border-top:1px solid var(--border)}.contact-socials-links{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px;margin-top:18px}.contact-form{display:flex;flex-direction:column;gap:20px}.form-group{display:flex;flex-direction:column;gap:8px}.form-group label{font-family:var(--mono);font-size:10.5px;letter-spacing:0.18em;text-transform:uppercase;color:var(--accent-text)}.form-group input,.form-group textarea,.form-group select{background:var(--bg-2);border:1px solid var(--border-strong);color:var(--text);font-family:var(--mono);font-size:14px;padding:12px 16px;outline:none;transition:border-color 0.2s,background 0.2s;resize:none;width:100%;-webkit-appearance:none}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text-dim);opacity:0.6}.form-group input:focus,.form-group textarea:focus{border-color:var(--accent-text);background:var(--bg)}.form-group textarea{min-height:140px}.submit-btn{font-family:var(--mono);font-size:12px;letter-spacing:0.12em;background:var(--accent-text);color:#FFF;border:none;padding:14px 32px;cursor:pointer;text-transform:lowercase;font-weight:600;transition:opacity 0.2s;align-self:flex-start}.submit-btn:hover{opacity:0.84}.submit-btn:disabled{opacity:0.5;cursor:not-allowed}.form-message{display:none;font-family:var(--mono);font-size:13px;padding:16px;text-align:center}.form-message.success{color:#2d9f5c;border:1px solid rgba(45,159,92,0.30);background:rgba(45,159,92,0.06)}.form-message.error{color:var(--accent-text);border:1px solid var(--accent-mid);background:var(--accent-dim)}.error-page{min-height:calc(100vh - 60px);min-height:calc(100dvh - 60px);display:flex;align-items:center}.error-inner{padding:80px 0}.error-code{font-family:var(--serif);font-size:clamp(80px,16vw,180px);font-weight:800;line-height:1;color:var(--accent-text);opacity:0.15;letter-spacing:-0.04em;margin-bottom:-20px}.error-inner h1{font-family:var(--serif);font-size:clamp(32px,5vw,54px);font-weight:800;margin-bottom:20px;line-height:1.1}.error-inner p{color:var(--text-dim);font-size:14px;line-height:1.85;max-width:420px;margin-bottom:36px}.btn-primary{display:inline-flex;font-family:var(--mono);font-size:12px;letter-spacing:0.10em;background:var(--accent-text);color:#FFF;text-decoration:none;padding:14px 28px;transition:opacity 0.2s}.btn-primary:hover{opacity:0.84;text-decoration:none}[data-theme="dark"] .btn-primary{color:var(--bg)}.events-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--border);border:1px solid var(--border)}.event-card{background:var(--bg);padding:28px 32px;display:flex;flex-direction:column;gap:14px;transition:background 0.2s}.event-card:hover{background:var(--bg-2)}.event-card-top{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.event-date-label{font-family:var(--mono);font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--accent-text);border:1px solid var(--accent-mid);padding:3px 10px;white-space:nowrap}.event-location{font-family:var(--mono);font-size:11px;color:var(--text-dim);letter-spacing:0.08em}.event-title{font-family:var(--serif);font-size:22px;font-weight:700;line-height:1.2;color:var(--text)}.event-title a{color:var(--text);text-decoration:none;transition:color 0.2s}.event-title a:hover{color:var(--accent-text)}.event-desc{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.82}.event-desc p{margin:0 0 12px}.event-desc p:last-child{margin-bottom:0}.event-cta{margin-top:auto;padding-top:18px;border-top:1px solid var(--border)}.event-cta-link{font-family:var(--mono);font-size:11.5px;color:var(--accent-text);text-decoration:none;letter-spacing:0.06em;border-bottom:1px solid var(--accent-mid);padding-bottom:2px;transition:border-color 0.2s}.event-cta-link::after{content:' \2192'}.event-cta-link:hover{border-color:var(--accent-text);text-decoration:none}.media-embed-wrapper{position:relative;width:100%}.media-embed-wrapper iframe{max-width:100%;border:1px solid var(--border)}.cursor-dot,.cursor-ring{display:none}.cursor-trail-dot{position:fixed;left:0;top:0;width:7px;height:7px;background:var(--accent);border-radius:50%;pointer-events:none;z-index:99999;opacity:0;display:none;will-change:transform,opacity}@media (hover:none) and (pointer:coarse){.cursor-trail-dot{display:none}}.site-footer{border-top:1px solid var(--border);padding:36px 0;background:var(--bg);transition:background 0.25s}.site-footer .container{display:flex;align-items:center;justify-content:space-between}.footer-left{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-family:var(--mono);font-size:12px;color:var(--text-dim)}.footer-left strong{color:var(--text);font-weight:600}.footer-sep{color:var(--text-dim);opacity:0.45}.footer-left a{color:var(--text-dim);text-decoration:none;transition:color 0.2s}.footer-left a:hover{color:var(--accent-text)}.footer-menu{display:flex;align-items:center;gap:24px;list-style:none;margin:0;padding:0}.footer-links a{font-family:var(--mono);font-size:12px;color:var(--text-dim);text-decoration:none;transition:color 0.2s}.footer-links a:hover{color:var(--accent-text)}.fade-in{opacity:0;transform:translateY(16px);transition:opacity 0.55s ease,transform 0.55s ease}.fade-in.visible{opacity:1;transform:translateY(0)}@media (max-width:960px){:root{--gap:80px}.hero-inner{grid-template-columns:1fr;gap:48px;padding:60px 0 80px}.hero-photo{max-width:260px}.photo-frame{aspect-ratio:1}.timeline-grid{grid-template-columns:1fr;gap:36px}.timeline-intro{position:static}.contact-grid{grid-template-columns:1fr;gap:48px}.page-hero-inner{grid-template-columns:1fr;gap:40px}.page-hero-photo{width:100%}.blog-post-item{grid-template-columns:1fr;gap:8px}.post-tag{align-self:auto}.post-tags{flex-direction:row;flex-wrap:wrap;gap:8px;margin-top:4px}.strip-header{flex-direction:column;align-items:flex-start;gap:14px}}@media (max-width:640px){.container{padding:0 20px}.media-grid{grid-template-columns:1fr}.events-grid{grid-template-columns:1fr}.filter-bar{flex-wrap:wrap;width:100%}.filter-btn{flex:1 1 auto;border-right:none;border-bottom:1px solid var(--border-strong)}.filter-btn:last-child{border-bottom:none}.site-footer .container{flex-direction:column;gap:20px;text-align:center}.footer-left{justify-content:center}.page-wrapper{padding-top:60px}.fade-in{transform:translateY(8px)}}
/* The primary nav needs ~800px to lay out on one line (751px with the logo touching the menu,
   measured with the current 5 items). Below that the desktop nav overflowed the container and the
   last item plus the theme toggle were clipped off-screen by body{overflow-x:hidden} — unreachable,
   not scrollable. The hamburger therefore takes over at 860px, not 640px, leaving headroom for one
   more menu item. Kept separate from the 640px block so grids, container padding and the stacked
   footer still switch at 640. */
@media (max-width:860px){.site-nav{height:60px;padding:0;position:relative}.site-nav .container{flex-wrap:nowrap;align-items:center;height:60px}.nav-logo{flex:1}.theme-toggle{margin-left:8px}.nav-toggle{display:flex;margin-left:8px;background:none;border:1px solid var(--border);cursor:pointer;width:34px;height:34px;align-items:center;justify-content:center;color:var(--text-dim);transition:border-color 0.2s,color 0.2s,background 0.2s;flex-shrink:0}.nav-toggle:hover{border-color:var(--accent-mid);color:var(--accent-text);background:var(--accent-dim)}.nav-toggle svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round}.icon-close-nav{display:none}.icon-hamburger{display:block}.site-nav.nav-open .icon-close-nav{display:block}.site-nav.nav-open .icon-hamburger{display:none}.nav-right{position:absolute;top:60px;left:0;right:0;background:var(--nav-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--border);max-height:0;overflow:hidden;transition:max-height 0.28s ease;width:auto;margin-top:0;z-index:499}.site-nav.nav-open .nav-right{max-height:400px}.nav-menu{flex-direction:column;gap:0;padding:0;flex-wrap:wrap;width:100%}.nav-menu li{width:100%}.nav-menu a{display:block;padding:14px 20px;opacity:1;font-size:13px;border-bottom:1px solid var(--border);white-space:normal;letter-spacing:0.08em}.nav-menu a::before{opacity:1}.nav-menu li:last-child a{border-bottom:none}}.admin-bar .site-nav{top:32px}.admin-bar html{scroll-padding-top:100px}@media screen and (max-width:782px){.admin-bar .site-nav{top:46px}}@media(prefers-reduced-motion:no-preference){:root:has(::view-transition) body,:root:has(::view-transition) .site-nav,:root:has(::view-transition) .site-footer{transition:none!important}}@media(max-width:640px){@media(prefers-reduced-motion:no-preference){::view-transition-group(*){animation-duration:0.2s!important}}}
/* ==================== CHANGELOG ==================== */
.changelog-hero .page-hero-desc p{max-width:720px}
.infrastructure-hero .page-hero-desc p{max-width:720px}
/* Anatomy section reuses .timeline-year for entry counts instead of a year label — needs to read as data, not a small caption */
.anatomy-timeline .timeline-year{font-family:var(--serif);font-size:26px;font-weight:800;letter-spacing:0;text-transform:none;color:var(--accent-text);line-height:1;margin-bottom:8px}
.changelog-stats{display:flex;flex-wrap:wrap;gap:36px;margin-top:36px;padding-top:28px;border-top:1px solid var(--border)}
.changelog-stat{display:flex;flex-direction:column;gap:4px}
.changelog-stat-num{font-family:var(--serif);font-size:26px;font-weight:800;color:var(--accent-text);line-height:1}
.changelog-stat-label{font-family:var(--mono);font-size:10.5px;letter-spacing:0.12em;text-transform:uppercase;color:var(--text-dim)}
.changelog-stat-live{flex-direction:row;align-items:center;gap:8px;align-self:flex-end}
.changelog-live-dot{width:7px;height:7px;border-radius:50%;background:var(--accent-text);display:inline-block;animation:changelog-pulse 1.8s ease-in-out infinite}
@keyframes changelog-pulse{0%,100%{opacity:1}50%{opacity:0.25}}
.changelog-section{padding:48px 0 var(--gap);border-top:none}
.changelog-filters{margin-bottom:44px}
.changelog-feed{position:relative;padding-left:38px}
.changelog-feed::before{content:'';position:absolute;left:7px;top:8px;bottom:8px;width:1px;background:linear-gradient(to bottom,var(--accent) 0%,var(--accent-mid) 60%,transparent 100%)}
.changelog-entry{position:relative;margin-bottom:34px;opacity:0;transform:translateY(16px);transition:opacity 0.5s ease,transform 0.5s ease}
.changelog-entry:last-child{margin-bottom:0}
.changelog-entry.visible{opacity:1;transform:translateY(0)}
.changelog-entry::before{content:'';position:absolute;left:-35px;top:6px;width:9px;height:9px;border-radius:50%;background:var(--accent-text)}
.changelog-entry.hidden{display:none}
.changelog-entry-summary{cursor:pointer;list-style:none}
.changelog-entry-summary::-webkit-details-marker{display:none}
.changelog-entry-summary::marker{display:none}
.changelog-entry-summary:hover .changelog-title{color:var(--accent-text)}
.changelog-entry-summary:hover .changelog-toggle{border-color:var(--accent-text);background:var(--accent-dim)}
.changelog-entry-meta{display:flex;align-items:center;gap:14px;margin-bottom:8px}
.changelog-version{font-family:var(--mono);font-size:11px;letter-spacing:0.06em;color:var(--accent-text);background:var(--accent-dim);padding:3px 9px;border-radius:3px;font-weight:600}
.changelog-date{font-family:var(--mono);font-size:11px;letter-spacing:0.08em;text-transform:uppercase;color:var(--text-dim)}
.changelog-permalink{position:relative;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:-4px;border-radius:4px;color:var(--text-dim);opacity:0;text-decoration:none;transition:opacity 0.2s,color 0.2s,background 0.2s}
.changelog-entry-summary:hover .changelog-permalink,.changelog-permalink:focus-visible,.changelog-permalink.copied{opacity:1}
.changelog-permalink:hover,.changelog-permalink.copied{color:var(--accent-text);background:var(--accent-dim)}
.changelog-permalink::after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%) translateY(4px);background:var(--text);color:var(--bg);font-family:var(--mono);font-size:10.5px;letter-spacing:0.05em;padding:5px 9px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 0.15s ease,transform 0.15s ease;z-index:5}
.changelog-permalink:hover::after,.changelog-permalink.copied::after{opacity:1;transform:translateX(-50%) translateY(0)}
.changelog-entry:target::before{box-shadow:0 0 0 5px var(--accent-dim)}
.changelog-title-row{display:flex;align-items:center;gap:14px}
.changelog-title{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--text);line-height:1.3;transition:color 0.2s}
.changelog-toggle-wrap{position:relative;display:inline-flex;flex-shrink:0}
.changelog-toggle-wrap::after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 8px);right:0;background:var(--text);color:var(--bg);font-family:var(--mono);font-size:10.5px;letter-spacing:0.05em;padding:5px 9px;border-radius:4px;white-space:nowrap;opacity:0;transform:translateY(4px);pointer-events:none;transition:opacity 0.15s ease,transform 0.15s ease;z-index:5}
.changelog-toggle-wrap:hover::after{opacity:1;transform:translateY(0)}
.changelog-toggle{flex-shrink:0;position:relative;width:26px;height:26px;border:1px solid var(--border-strong);border-radius:5px;transition:border-color 0.2s,background 0.2s}
.changelog-toggle::before,.changelog-toggle::after{content:'';position:absolute;top:50%;left:50%;background:var(--accent-text);transition:transform 0.2s ease}
.changelog-toggle::before{width:12px;height:1.5px;transform:translate(-50%,-50%)}
.changelog-toggle::after{width:1.5px;height:12px;transform:translate(-50%,-50%)}
.changelog-entry[open] .changelog-toggle::after{transform:translate(-50%,-50%) scaleY(0)}
.changelog-entry-body{margin-top:18px;padding-top:18px;border-top:1px solid var(--border)}
.changelog-body{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.8;max-width:600px;overflow-wrap:break-word}
.changelog-body p{margin:0 0 12px}
.changelog-body p:last-child{margin-bottom:0}
.changelog-highlight{display:flex;gap:10px;margin-top:16px;padding:14px 16px;background:var(--accent-dim);border-left:2px solid var(--accent-text);max-width:600px}
.changelog-highlight-marker{flex-shrink:0;font-family:var(--mono);color:var(--accent-text);font-size:15px;line-height:1.6}
.changelog-highlight p{min-width:0;font-size:13.5px;font-style:italic;color:var(--text);line-height:1.7;margin:0;overflow-wrap:break-word}
@media (max-width:640px){.changelog-feed{padding-left:26px}.changelog-entry::before{left:-23px}.changelog-stats{gap:24px}.changelog-stat-live{align-self:flex-start}.changelog-permalink{opacity:0.55}}
/* ==================== REDUCED MOTION ==================== */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0.01ms!important;animation-iteration-count:1!important;transition-duration:0.01ms!important;scroll-behavior:auto!important}
}
/* ==================== MOBILE INPUT ZOOM FIX ==================== */
/* iOS Safari auto-zooms on focus when an input's font-size is under 16px */
@media (max-width:640px){
  .form-group input,.form-group textarea,.form-group select{font-size:16px}
}
/* ==================== TYPOGRAPHIC WRAPPING ==================== */
h1,h2,h3,h4,h5,h6{text-wrap:balance}
p{text-wrap:pretty}
/* ==================== PLUGIN CARDS (Plugins archive) ==================== */
/* Same shape as .media-grid/.media-card, renamed for a different content type */
/* Footer carries several links (page links + social + rss) — wrap on narrow viewports */
@media (max-width:640px){.footer-menu{flex-wrap:wrap;justify-content:center;row-gap:10px}}
.footer-menu li{display:flex;align-items:center}
.footer-links a{display:inline-flex;align-items:center;gap:6px}
.footer-nav-icon{display:block}
.ms-hp{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;overflow:hidden!important}.field-error{display:block;margin:6px 0 0;min-height:0;font-size:.85rem;line-height:1.4;color:var(--err)}.field-error:empty{display:none}.form-group input:user-valid,.form-group textarea:user-valid{border-color:var(--ok)}.form-group input:user-invalid,.form-group textarea:user-invalid{border-color:var(--err)}.form-group:has(:user-invalid) label{color:var(--err)}[aria-invalid="true"]{border-color:var(--err)!important}
/* ==================== HERO: ASK THE SITE ==================== */
/* Sits in .hero-socials alongside the two social pills; matches their metrics
   but is accent-tinted to read as an action rather than an outbound link.
   Stays hidden until JS confirms the site-chat widget is on the page. */
.hero-ask-btn{align-items:center;gap:8px;font-family:var(--mono);font-size:11.5px;letter-spacing:0.08em;color:var(--accent-text);background:var(--accent-dim);border:1px solid var(--accent-mid);padding:8px 18px;cursor:pointer;transition:border-color 0.2s,background 0.2s}
.hero-ask-btn:not([hidden]){display:inline-flex}
.hero-ask-btn:hover{border-color:var(--accent-text)}
.hero-ask-btn svg{width:13px;height:13px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
/* ==================== THE LAB ==================== */
.lab-lede{font-size:15.5px;font-weight:500;line-height:1.85;color:var(--text);max-width:680px;margin-bottom:38px;border-left:2px solid var(--accent);padding-left:22px}
.lab-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--border);border:1px solid var(--border)}
.lab-tile{background:var(--bg);padding:28px 32px 26px;display:flex;flex-direction:column;gap:12px;transition:background 0.2s}
.lab-tile:hover{background:var(--bg-2)}
.lab-tile-num{font-family:var(--mono);font-size:10.5px;letter-spacing:0.22em;color:var(--accent-text);font-weight:600}
.lab-tile-title{font-family:var(--serif);font-size:20px;font-weight:700;line-height:1.22;color:var(--text)}
.lab-tile-desc{font-size:14.5px;font-weight:500;color:var(--text-dim);line-height:1.8}
.lab-tile-link{font-family:var(--mono);font-size:11.5px;color:var(--accent-text);text-decoration:none;letter-spacing:0.06em;border-bottom:1px solid var(--accent-mid);padding-bottom:2px;align-self:flex-start;margin-top:auto;transition:border-color 0.2s}
.lab-tile-link::after{content:' \2192'}
.lab-tile-link:hover{border-color:var(--accent-text);text-decoration:none}
.lab-log{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:24px;padding:16px 22px;border:1px solid var(--border);background:var(--bg-2);font-family:var(--mono);font-size:12px}
.lab-log-label{display:inline-flex;align-items:center;gap:8px;font-size:10.5px;letter-spacing:0.18em;text-transform:uppercase;color:var(--text-dim);white-space:nowrap}
.lab-log-title{color:var(--text);text-decoration:none;font-size:13px;border-bottom:1px solid var(--border-strong);padding-bottom:1px;transition:color 0.2s,border-color 0.2s}
.lab-log-title:hover{color:var(--accent-text);border-color:var(--accent-mid);text-decoration:none}
.lab-log-meta{color:var(--text-dim);font-size:11px;letter-spacing:0.06em;display:inline-flex;gap:10px;white-space:nowrap}
.lab-log-all{margin-left:auto;border-bottom-color:var(--accent-mid)}
/* ==================== EXPERIMENT WRITE-UPS ==================== */
.exp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--border);border:1px solid var(--border)}
.exp-card{background:var(--bg);padding:26px 28px 24px;display:flex;flex-direction:column;gap:12px;transition:background 0.2s}
.exp-card:hover{background:var(--bg-2)}
.exp-card-date{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:0.14em;color:var(--accent-text);text-transform:uppercase}
.exp-card-title{font-family:var(--serif);font-size:19px;font-weight:700;line-height:1.22}
.exp-card-title a{color:var(--text);text-decoration:none;transition:color 0.2s}
.exp-card-title a:hover{color:var(--accent-text)}
.exp-card-excerpt{font-size:14px;font-weight:500;color:var(--text-dim);line-height:1.78;flex:1}
.exp-card-link{font-family:var(--mono);font-size:11.5px;color:var(--accent-text);text-decoration:none;letter-spacing:0.06em;margin-top:auto;padding-top:16px;border-top:1px solid var(--border);width:100%}
.exp-card-link::after{content:' \2192'}
.exp-card-link:hover{text-decoration:underline}
@media (max-width:860px){
  .exp-grid{grid-template-columns:1fr}
  .lab-log-all{margin-left:0}
}
@media (max-width:640px){
  .lab-grid{grid-template-columns:1fr}
  .lab-lede{padding-left:16px;font-size:15px}
  .lab-tile{padding:24px 22px}
  .exp-card{padding:22px 22px 20px}
  .lab-log{padding:14px 18px;gap:10px}
  .lab-log-meta{white-space:normal}
}
.error-recovery{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:56px;padding-top:36px;border-top:1px solid var(--border);max-width:760px}
.error-recovery-group h2{font-family:var(--mono);font-size:10.5px;letter-spacing:0.18em;text-transform:uppercase;color:var(--accent-text);margin-bottom:14px;font-weight:600}
.error-recovery-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
.error-recovery-list li{font-family:var(--mono);font-size:12.5px;color:var(--text-dim);line-height:1.6}
.error-recovery-list a{color:var(--text);text-decoration:none;border-bottom:1px solid var(--accent-mid);transition:color 0.2s,border-color 0.2s}
.error-recovery-list a:hover{color:var(--accent-text);border-color:var(--accent-text);text-decoration:none}
@media (max-width:640px){.error-recovery{grid-template-columns:1fr;gap:32px;margin-top:44px}}
.lab-strip{border-bottom:1px solid var(--border);background:var(--bg-2);padding:7px 0;font-family:var(--mono);position:relative;z-index:2;overflow:hidden}.lab-strip>*{position:relative;z-index:1}.lab-strip .container{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.lab-strip-label{display:inline-flex;align-items:center;gap:7px;font-size:10px;font-weight:600;letter-spacing:0.11em;text-transform:uppercase;color:var(--text);white-space:nowrap}.lab-strip-items{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}.lab-strip-item{display:inline-flex;align-items:baseline;font-size:10px;letter-spacing:0.1em;text-transform:uppercase;color:var(--text-dim);white-space:nowrap;text-decoration:none;transition:color 0.2s}.lab-strip-item b{font-family:var(--serif);font-weight:800;font-size:14px;letter-spacing:0;color:var(--accent-text);margin-right:6px}a.lab-strip-item:hover,a.lab-strip-item:focus-visible{color:var(--text)}a.lab-strip-item:hover b,a.lab-strip-item:focus-visible b{text-decoration:underline;text-underline-offset:3px}a.lab-strip-item:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.lab-strip-item-ext::after{content:"\2197";margin-left:5px;font-size:10px;opacity:0.6}.lab-strip-label-link{text-decoration:none;color:var(--text);border-bottom:1px solid var(--border-strong);padding-bottom:2px;transition:color 0.2s,border-color 0.2s}.lab-strip-label-link:hover{color:var(--accent-text);border-bottom-color:var(--accent-text)}/* The band is one line by design. At the 1080px container it uses ~940 of 1000px; as the container starts shrinking with the viewport that margin vanishes (944px available at 1024px wide, 943px used — one pixel of slack). Step the numbers down before it gets there rather than letting it silently wrap. */@media (max-width:1120px){.lab-strip .container{gap:13px}.lab-strip-items{gap:13px}.lab-strip-item b{font-size:13px}}@media (max-width:860px){.lab-strip{padding:7px 0}.lab-strip .container{gap:10px}.lab-strip-items{gap:13px}.lab-strip-item b{font-size:13px}}/* Below 640 the items box is wider than the viewport on its own, so it always took a separate line from the label and the band ran to four rows. Dissolving the wrapper lets label and stats wrap together as one list. */@media (max-width:640px){.lab-strip-items{display:contents}.lab-strip .container{gap:9px 14px}}
/* ==================== LIVE STATS BAND — MOTION ====================
   Three separate effects, all opt-in via prefers-reduced-motion. The global
   reduce rule further down zeroes animation-duration with !important, which for
   a scroll-driven animation would pin it to its END state (opacity 0) rather
   than disabling it — so every rule here is wrapped in no-preference and simply
   does not exist for a reduced-motion visitor, instead of being neutered.
   1. SWEEP — a slow gleam crossing the band every 20s, taking ~4.3s to cross.
      Two layers: ::after is the broad halo, ::before a small field of glints
      that trails it and twinkles. Both ride *behind* the text (.lab-strip > * is
      lifted to z-index 1), so nothing ever washes out a number. Warm-neutral
      rather than accent-tinted — at the site accent it read as a red wash.
   2. EXIT — the band resists the scroll instead of riding it. Geometry first:
      the band sits at y=60-99 beneath a fixed 60px nav, so left alone it is
      fully occluded after ~39px of scroll — about a third of one wheel notch,
      which is why easing a 48px or 72px range changed nothing perceptible.
      position:sticky would be the obvious fix and does NOT work here: body has
      overflow-x:hidden, which makes the sticky element track scroll 1:1 (tested).
      So the band translates *down* as the page scrolls up — 105px of translate
      across 150px of scroll, i.e. it climbs at roughly 0.3x scroll speed. It
      hangs near the nav, fading and blurring, and slides under on its own clock.
      Visible for ~130px of scroll rather than 39px. It needs z-index:2 to stay
      above the hero during the overlap. Driven by scroll(), so there is no
      scroll listener and no JS; browsers without scroll-driven animations just
      get the plain scroll-away.
   3. READOUT — items rise in sequence once on load, like a gauge populating.
      Only `from` is declared, so the resting state is whatever the rules above
      set, and nothing depends on the animation having run. */
@media (prefers-reduced-motion:no-preference){
  .lab-strip::after,.lab-strip::before{
    content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
    transform:translateX(-75%);
  }
  /* Broad soft halo — the light itself. */
  .lab-strip::after{
    background:linear-gradient(100deg,transparent 30%,var(--lab-sweep) 50%,transparent 70%);
    animation:lab-sweep 12s linear 3s infinite;
  }
  /* Glint field — a handful of small points clustered on the halo's core, so the
     pass reads as sparkle rather than a flat wash. They sit at 43-58% of the
     band, which is off-screen at the animation's resting translateX(-75%), so
     nothing shows between passes. Trails the halo by 0.2s and twinkles on its
     own clock, which keeps the two from looking welded together. */
  .lab-strip::before{
    background-image:
      radial-gradient(circle calc(var(--lab-spark-s) * 2.0px) at 43% 32%, var(--lab-spark) 0%, transparent 100%),
      radial-gradient(circle calc(var(--lab-spark-s) * 1.5px) at 46% 72%, var(--lab-spark) 0%, transparent 100%),
      radial-gradient(circle calc(var(--lab-spark-s) * 2.5px) at 49% 46%, var(--lab-spark) 0%, transparent 100%),
      radial-gradient(circle calc(var(--lab-spark-s) * 1.5px) at 52% 24%, var(--lab-spark) 0%, transparent 100%),
      radial-gradient(circle calc(var(--lab-spark-s) * 2.0px) at 54% 79%, var(--lab-spark) 0%, transparent 100%),
      radial-gradient(circle calc(var(--lab-spark-s) * 1.5px) at 56% 58%, var(--lab-spark) 0%, transparent 100%),
      radial-gradient(circle calc(var(--lab-spark-s) * 2.0px) at 58% 38%, var(--lab-spark) 0%, transparent 100%);
    animation:lab-sweep 12s linear 3.2s infinite, lab-twinkle 2.1s ease-in-out infinite;
  }
  .lab-strip-label,.lab-strip-item{animation:lab-in 0.55s cubic-bezier(0.22,0.7,0.3,1) backwards}
  .lab-strip-label{animation-delay:0.04s}
  .lab-strip-items>.lab-strip-item:nth-child(1){animation-delay:0.10s}
  .lab-strip-items>.lab-strip-item:nth-child(2){animation-delay:0.15s}
  .lab-strip-items>.lab-strip-item:nth-child(3){animation-delay:0.20s}
  .lab-strip-items>.lab-strip-item:nth-child(4){animation-delay:0.25s}
  .lab-strip-items>.lab-strip-item:nth-child(5){animation-delay:0.30s}
  .lab-strip-items>.lab-strip-item:nth-child(6){animation-delay:0.35s}
}
@keyframes lab-sweep{
  0%{transform:translateX(-75%);animation-timing-function:cubic-bezier(0.4,0.05,0.6,0.95)}
  52%{transform:translateX(75%)}
  100%{transform:translateX(75%)}
}
@keyframes lab-twinkle{0%,100%{opacity:1}50%{opacity:0.4}}
@keyframes lab-in{from{opacity:0;transform:translateY(5px)}}
@keyframes lab-exit{
  0%{opacity:1;transform:translateY(0);filter:blur(0);pointer-events:auto}
  55%{opacity:0.42;transform:translateY(58px);filter:blur(1.4px)}
  85%{pointer-events:auto}
  100%{opacity:0;transform:translateY(105px);filter:blur(3px);pointer-events:none}
}
@supports (animation-timeline:scroll()){
  @media (prefers-reduced-motion:no-preference){
    .lab-strip{
      animation:lab-exit linear both;
      animation-timeline:scroll(root block);
      animation-range:0 150px;
    }
  }
}
/* ==================== API DOCS PAGE ==================== */
.api-page .page-hero-simple h1{font-size:clamp(32px,8vw,80px);overflow-wrap:break-word}
.api-page .page-hero-desc p{max-width:720px}
.api-toc{display:flex;flex-wrap:wrap;gap:10px 8px;margin-top:32px;padding-top:26px;border-top:1px solid var(--border)}
.api-toc a{font-family:var(--mono);font-size:11.5px;letter-spacing:0.08em;text-transform:lowercase;color:var(--text-dim);border:1px solid var(--border);padding:6px 12px;text-decoration:none;transition:color 0.15s,border-color 0.15s,background-color 0.15s}
.api-toc a:hover,.api-toc a:focus-visible{color:var(--accent-text);border-color:var(--accent-mid);background:var(--accent-dim)}
.api-section{padding:var(--gap) 0;border-top:1px solid var(--border)}
.api-section .section-title{margin-bottom:20px}
.api-lede{font-size:15px;font-weight:500;color:var(--text-dim);line-height:1.88;max-width:720px;margin-bottom:44px}
.api-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.api-card{border:1px solid var(--border);background:var(--bg-2);padding:26px 24px 24px;display:flex;flex-direction:column;min-width:0}
.api-card h3{font-family:var(--serif);font-size:20px;font-weight:700;line-height:1.2;margin-bottom:12px}
.api-card p{font-size:14px;font-weight:500;color:var(--text-dim);line-height:1.8;margin-bottom:18px;flex:1}
.api-card pre{margin:0}
.api-list{list-style:none;padding:0;margin:0;border-top:1px solid var(--border)}
.api-list-item{display:grid;grid-template-columns:minmax(0,260px) minmax(0,1fr);gap:8px 32px;padding:20px 0;border-bottom:1px solid var(--border);align-items:baseline}
.api-list-url{font-family:var(--mono);font-size:13.5px;font-weight:500;color:var(--accent-text);word-break:break-word}
.api-list-desc{font-size:14px;font-weight:500;color:var(--text-dim);line-height:1.8}
.api-endpoint{display:flex;flex-wrap:wrap;align-items:center;gap:10px;border:1px solid var(--border-strong);background:var(--bg-2);padding:16px 20px;margin-bottom:40px}
.api-method{font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:0.14em;text-transform:uppercase;padding:4px 9px;border:1px solid var(--border-strong);color:var(--text)}
.api-method-get{background:var(--bg-3)}
.api-method-post{background:var(--accent-dim);border-color:var(--accent-mid);color:var(--accent-text)}
.api-path{font-family:var(--mono);font-size:13.5px;word-break:break-all;background:none;border:none;padding:0}
.api-prose{max-width:760px}
.api-prose h3{font-family:var(--serif);font-size:22px;font-weight:700;margin-top:44px;margin-bottom:14px;line-height:1.2}
.api-prose h3:first-child{margin-top:0}
.api-prose p{font-size:15px;font-weight:500;color:var(--text);line-height:1.88;margin-bottom:22px}
.api-prose ul{padding-left:20px;margin-bottom:22px}
.api-prose li{font-size:15px;font-weight:500;color:var(--text);line-height:1.8;margin-bottom:8px}
.api-prose a{color:var(--accent-text)}
.api-page code{font-family:var(--mono);font-size:13px;background:var(--bg-2);border:1px solid var(--border);padding:2px 6px}
.api-page pre{font-family:var(--mono);background:var(--bg-2);border:1px solid var(--border);padding:18px;overflow-x:auto;margin-bottom:24px;font-size:12.5px;line-height:1.7;min-width:0;max-width:100%}
.api-page pre code{background:none;border:none;padding:0;font-size:inherit}
.api-table{width:100%;border-collapse:collapse;margin-bottom:24px;display:block;overflow-x:auto}
.api-table th,.api-table td{text-align:left;vertical-align:top;padding:14px 16px 14px 0;border-bottom:1px solid var(--border);font-size:14px;font-weight:500;line-height:1.7}
.api-table thead th{font-family:var(--mono);font-size:10.5px;letter-spacing:0.14em;text-transform:uppercase;color:var(--accent-text);border-bottom:1px solid var(--border-strong);padding-top:0}
.api-table tbody th{white-space:nowrap;color:var(--text)}
.api-table td{color:var(--text-dim)}
.api-type{font-family:var(--mono);font-size:12.5px;white-space:nowrap}
.api-req{display:inline-block;font-family:var(--mono);font-size:9.5px;letter-spacing:0.12em;text-transform:uppercase;color:var(--accent-text);margin-left:8px;vertical-align:middle}
@media (max-width:860px){.api-cards{grid-template-columns:1fr}.api-list-item{grid-template-columns:1fr;gap:6px}}
@media (max-width:640px){.api-toc a{font-size:11px;padding:5px 10px}.api-page pre{font-size:11.5px;padding:14px}.api-table th,.api-table td{padding-right:12px}}
/* ---- GitHub repo card (single plugin) ---- */
/* GitHub's own surface colours, scoped to the card — the dark band is what makes
   it read as GitHub at a glance, so it stays dark in the light theme too. In the
   dark theme it lifts to GitHub's raised surface, which the page bg can't swallow. */
.repo-card{--gh-band:#0D1117;--gh-band-text:#F0F6FC;--gh-band-dim:rgba(240,246,252,0.62)}
[data-theme="dark"] .repo-card{--gh-band:#21262D}
.repo-card-wrap{margin-bottom:40px}
.repo-card{display:block;background:var(--bg-2);border:1px solid var(--border-strong);text-decoration:none;color:var(--text);transition:border-color 0.2s,box-shadow 0.2s,transform 0.2s}
.repo-card:hover,.repo-card:focus-visible{border-color:var(--accent-mid);box-shadow:var(--shadow);transform:translateY(-2px)}
.repo-card-band{display:flex;align-items:center;gap:10px;padding:11px 18px;background:var(--gh-band);color:var(--gh-band-text);font-family:var(--mono);font-size:12px}
.repo-card-mark{flex-shrink:0}
.repo-card-brand{font-weight:600;letter-spacing:0.04em}
.repo-card-host{color:var(--gh-band-dim);font-size:11px;letter-spacing:0.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.repo-card-go{margin-left:auto;font-size:14px;transition:transform 0.2s}
.repo-card:hover .repo-card-go{transform:translate(2px,-2px)}
.repo-card-body{display:grid;gap:10px;padding:20px 18px}
.repo-card-path{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-family:var(--mono);font-size:18px;line-height:1.3}
.repo-card-repoicon{flex-shrink:0;color:var(--text-dim)}
.repo-card-name{word-break:break-word}
.repo-card-owner{color:var(--text-dim)}
.repo-card-repo{color:var(--accent-text);font-weight:600}
.repo-card:hover .repo-card-repo{text-decoration:underline;text-underline-offset:3px}
.repo-card-badge{font-size:10px;letter-spacing:0.1em;text-transform:uppercase;color:var(--text-dim);border:1px solid var(--border-strong);border-radius:2em;padding:2px 9px;line-height:1.6}
.repo-card-desc{font-size:14px;line-height:1.6;color:var(--text-dim);max-width:60ch}
.repo-card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px 18px;margin-top:2px;padding-top:12px;border-top:1px solid var(--border);font-family:var(--mono);font-size:12px;color:var(--text-dim)}
.repo-card-stat{display:inline-flex;align-items:center;gap:6px}
.repo-card-dot{width:10px;height:10px;border-radius:50%;display:inline-block;flex-shrink:0}
.repo-card-cta{margin-left:auto;color:var(--accent-text);letter-spacing:0.06em}
.repo-card--plain{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;font-family:var(--mono);font-size:13px}
@media (max-width:600px){.repo-card-host{display:none}.repo-card-body{padding:18px 16px}.repo-card-path{font-size:16px}.repo-card-cta{margin-left:0;width:100%}}
/* Events: an odd card out spans the full row, so one event (or three) never leaves an empty cell beside it. */.event-card:last-child:nth-child(odd){grid-column:1/-1}
/* Six primary-nav items: between the hamburger breakpoint and ~1060px the default gaps leave the menu touching the logo, so tighten them. */@media (min-width:861px) and (max-width:1060px){.nav-menu{gap:16px}.nav-right{gap:18px}}
/* Plugin grids (homepage + /plugins/): a GitHub "pinned repositories" panel. The band and tile pieces reuse the single-plugin .repo-card-* rules; only the panel and tile layout are new. */.gh-panel{--gh-band:#0D1117;--gh-band-text:#F0F6FC;--gh-band-dim:rgba(240,246,252,0.62);background:var(--bg-2);border:1px solid var(--border-strong)}[data-theme="dark"] .gh-panel{--gh-band:#21262D}.gh-panel-band{text-decoration:none}.gh-panel-band:hover .repo-card-go,.gh-panel-band:focus-visible .repo-card-go{transform:translate(2px,-2px)}.gh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:16px;padding:16px}.gh-tile{position:relative;background:var(--bg);border:1px solid var(--border-strong);padding:16px 18px;display:flex;flex-direction:column;gap:10px;transition:border-color 0.2s,box-shadow 0.2s,transform 0.2s}.gh-tile:hover,.gh-tile:focus-within{border-color:var(--accent-mid);box-shadow:var(--shadow);transform:translateY(-2px)}.gh-tile-image{margin:-16px -18px 4px;height:160px;overflow:hidden;background:var(--bg-3)}.gh-tile-image img{width:100%;height:100%;object-fit:cover;display:block}.gh-tile-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-family:var(--mono);font-size:15px;font-weight:400;line-height:1.3}.gh-tile-name{color:var(--accent-text);font-weight:600;text-decoration:none}.gh-tile-name::after{content:'';position:absolute;inset:0}.gh-tile:hover .gh-tile-name{text-decoration:underline;text-underline-offset:3px}.gh-tile-desc{font-size:13.5px;flex:1}.gh-tile-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 16px;padding-top:10px;border-top:1px solid var(--border);font-family:var(--mono);font-size:12px;color:var(--text-dim)}.gh-tile-source{position:relative;z-index:1;margin-left:auto;color:var(--accent-text);text-decoration:none;letter-spacing:0.06em}.gh-tile-source:hover,.gh-tile-source:focus-visible{text-decoration:underline}.plugins-home-section .lab-lede a{color:var(--accent-text)}
@media (max-width:640px){.gh-grid{padding:12px;gap:12px}.gh-tile{padding:14px 16px}.gh-tile-image{margin:-14px -16px 4px}}
/* Keep the Public pill beside the name (the name wraps instead) and the meta row on one line at the 3-column tile width. */.gh-tile-head{flex-wrap:nowrap;align-items:flex-start}.gh-tile-head .repo-card-repoicon{margin-top:2px}.gh-tile-name{min-width:0}.gh-tile-head .repo-card-badge{flex-shrink:0}.gh-tile-meta{gap:6px 12px}
/* The live nav item is "My Plugins", ~25px wider than the "Plugins" the 1.4.133 gaps were sized for; at 861px that left 0px beside the logo. Tighten gap and tracking a step further in the same range. */@media (min-width:861px) and (max-width:1060px){.nav-menu{gap:12px}.nav-right{gap:14px}.nav-menu a{letter-spacing:0.06em}}
/* "How this site is built" plugin section: the spacing the old .plugin-grid rule used to give it. */.infra-plugin-grid{margin-top:28px}
/* /plugins/ reading list: the posts that link to each plugin, grouped under the plugin they're about. Same shape as .error-recovery — the site's other grouped list of internal links — with a date column so the groups read as a log rather than a nav block. */.plugin-writing-section{padding:var(--gap) 0;border-top:1px solid var(--border)}.plugin-writing-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:44px 60px}.plugin-writing-name{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:0.18em;text-transform:uppercase;margin-bottom:16px}.plugin-writing-name a{color:var(--accent-text);text-decoration:none;border-bottom:1px solid var(--accent-mid);padding-bottom:2px;transition:border-color 0.2s}.plugin-writing-name a:hover,.plugin-writing-name a:focus-visible{border-color:var(--accent-text);text-decoration:none}.plugin-writing-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.plugin-writing-list li{display:flex;align-items:baseline;justify-content:space-between;gap:20px}.plugin-writing-list a{font-family:var(--serif);font-size:17px;font-weight:700;line-height:1.3;color:var(--text);text-decoration:none;transition:color 0.2s}.plugin-writing-list a:hover,.plugin-writing-list a:focus-visible{color:var(--accent-text);text-decoration:none}.plugin-writing-date{font-family:var(--mono);font-size:10.5px;letter-spacing:0.10em;color:var(--text-dim);white-space:nowrap;flex-shrink:0}
@media (max-width:860px){.plugin-writing-grid{grid-template-columns:1fr;gap:38px}}
/* The date can't share a line with a wrapped title at phone width without squeezing it to two words per line. */@media (max-width:560px){.plugin-writing-list li{flex-direction:column;gap:4px}.plugin-writing-date{align-self:flex-start}}
/* YouTube facade — ms_youtube_facade() + main.js */
.yt-facade{position:relative;display:block;width:100%;aspect-ratio:16/9;background:#000;overflow:hidden;cursor:pointer}
.yt-facade .yt-facade-thumb{position:absolute;inset:0;width:100%;max-width:none;height:100%;margin:0;border:0;object-fit:cover}
.yt-facade-play{position:absolute;top:50%;left:50%;width:68px;height:48px;translate:-50% -50%;background:rgba(23,23,23,0.82);border-radius:12px;transition:background 0.2s}
.yt-facade-play::before{content:"";position:absolute;inset:0;margin:auto;width:0;height:0;border-style:solid;border-width:11px 0 11px 19px;border-color:transparent transparent transparent #fff;translate:3px 0}
.yt-facade:hover .yt-facade-play,.yt-facade:focus-visible .yt-facade-play{background:var(--accent)}
.yt-facade:focus-visible{outline:2px solid var(--accent);outline-offset:-4px}
.yt-facade-frame{display:block;width:100%;aspect-ratio:16/9;border:0}
.post-body .wp-block-embed__wrapper .yt-facade{position:absolute;inset:0}
.media-embed-wrapper .yt-facade,.media-embed-wrapper .yt-facade-frame{border:1px solid var(--border)}
