:root{--bg: #1e1e1e;--text: #d3d3d3;--accent: #D90166;--muted: #555;--white: #f0f0f0}[data-theme=midnight]{--bg: #0f0f0f;--text: #c0c0c0;--accent: #D90166;--muted: #444;--white: #e8e8e8}[data-theme=paper]{--bg: #f5f1eb;--text: #2e2e2e;--accent: #D90166;--muted: #999;--white: #3a3a3a}[data-theme=paper] a{color:var(--accent)}[data-theme=paper] .post-title-text a,[data-theme=paper] .proj-name a{color:#3a3a3a}[data-theme=paper] a:hover{background:var(--accent);color:#fff}[data-theme=midnight] .code-block,[data-theme=midnight] .post-content pre{background:#141414;border-color:#333}[data-theme=paper] .code-block,[data-theme=paper] .post-content pre{background:#f5f3ee;border-color:#ccc}code{font-family:Fira Code,monospace;font-size:.9em}.post-content :not(pre)>code,.article p code,.proj-body p code{background:#5553;padding:.15rem .35rem;border-radius:2px;font-style:normal}[data-theme=paper] .post-content :not(pre)>code,[data-theme=paper] .article p code,[data-theme=paper] .proj-body p code{background:#00000014;color:#4a4a4a}[data-theme=midnight] .post-content :not(pre)>code,[data-theme=midnight] .article p code,[data-theme=midnight] .proj-body p code{background:#ffffff0d;color:#aaa}*{margin:0;padding:0;box-sizing:border-box}.tooltip-trigger{position:relative;cursor:help;border-bottom:1px dashed var(--muted)}.tooltip-trigger:hover:after{content:attr(data-tip);position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:var(--bg);color:var(--text);border:1px solid var(--muted);padding:.35rem .5rem;font-size:11px;font-style:normal;white-space:nowrap;z-index:100;margin-bottom:.35rem}html{scroll-behavior:smooth}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--muted);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--accent)}body{color:var(--text);background:var(--bg);font-family:Fira Code,monospace;font-style:italic;line-height:1.6;padding:2rem;margin:0;min-height:100vh;display:flex;justify-content:flex-start}.page{max-width:640px;width:100%;margin:0 auto;padding-top:24px}.theme-switcher{position:fixed;bottom:1rem;right:1rem;font-size:12px;color:var(--muted);font-style:normal;opacity:.6;z-index:100}.theme-switcher a{padding:4px 6px;display:inline-block}::selection{background:var(--accent);color:#fff}a{color:var(--accent);text-decoration:none;padding:0 4px;margin:0 -4px;transition:all .12s;border-radius:2px}a:hover{background:var(--accent);color:#fff;font-style:normal}.post-cat:hover{background:none;color:var(--accent)}.post-categories{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:0}.post-categories .post-cat{font-size:12px}.post-categories .post-cat:before{display:none}hr{border:0;border-top:1px solid var(--muted);margin:1rem 0;opacity:.3}.nav{font-size:14px;display:flex;gap:1rem}.path-nav{font-size:13px;font-style:normal;color:var(--muted)}.path-nav a{color:var(--muted)}.path-nav a:hover{background:none;color:var(--accent)}.path-nav span{color:var(--text)}.sub-nav{font-size:13px;font-style:normal;color:var(--muted);opacity:.6}.sub-nav a{color:var(--muted)}.sub-nav a:hover{background:none;color:var(--accent)}.sub-nav span:not(.sub-nav-sep){color:var(--text)}.sub-nav-sep{color:var(--accent);opacity:.5;margin:0 .25rem}.tag{display:inline-block;border:1px dashed var(--muted);padding:2px 6px;font-size:11px;color:var(--muted);font-style:normal;margin-right:4px}.tag:hover{border-color:var(--accent);color:var(--accent)}.intro{margin:0 0 20px}.intro-line{font-size:clamp(28px,5vw,48px);line-height:1.2;margin-bottom:8px}.intro-line:last-child{margin-bottom:0}.home-text{font-size:15px;white-space:pre-wrap;line-height:1.8}.home-text a{color:var(--accent)}.home-text a:hover{background:none;color:#fff}[data-theme=paper] .home-text a:hover{color:#ff8ab5}.page-title{font-size:clamp(28px,5vw,48px);font-weight:700;font-style:normal;line-height:1.2;color:var(--white);margin-bottom:8px}.page-title em{color:var(--accent);font-style:normal}.page-desc{font-size:14px;color:var(--muted)}.post-list{list-style:none}.post-item{padding:.75rem 0;border-bottom:1px solid rgba(128,128,128,.2)}.post-item:last-child{border-bottom:none}.post-item .archived-banner{display:none}.home-links{display:flex;flex-wrap:wrap;gap:.5rem}.home-link{display:inline-block;border:1px dashed var(--muted);padding:.4rem .8rem;font-size:14px;font-style:normal;color:var(--accent);text-decoration:none;transition:all .12s}.post-title-text{font-size:15px;font-weight:700;font-style:normal;color:var(--white);flex:1;display:flex;align-items:baseline;gap:.35rem}.post-title-text a{color:var(--white);padding:0;margin:0}.post-title-text a:hover{background:none;color:var(--accent)}.related-project-name{color:var(--white);padding:0;margin:0}.related-project-name:hover{background:none;color:var(--accent)}.home-link:hover{border-color:var(--accent);background:var(--accent);color:#fff}.post-cat{font-size:11px;font-style:normal;color:var(--muted);text-decoration:none;padding:0;margin:0;transition:color .12s}.post-cat:hover{color:var(--accent)}.post-cat:before{content:"/";color:var(--muted);opacity:.5;margin-right:.25rem}.post-cat:first-child:before{display:none}.year-divider{font-size:11px;font-style:normal;font-weight:700;letter-spacing:2px;color:var(--muted);padding:.75rem 0 .25rem}.post-header{display:flex;align-items:baseline;gap:.75rem}.post-date-inline{font-size:12px;color:var(--muted);min-width:5rem}.post-title-text a.archived:after{content:" [archived]";font-size:9px;color:var(--muted);opacity:0;transition:opacity .2s}.post-title-text a.archived:hover:after{opacity:.6}.post-meta-top{font-size:12px;color:var(--muted);font-style:normal;margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.meta-num{color:var(--accent);font-weight:700}.meta-date,.meta-read{color:var(--muted)}.meta-type{display:inline-block;font-size:11px;font-style:normal;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--accent);margin-bottom:.5rem}.title-history-btn{color:var(--accent);margin-left:.15rem;font-style:normal;font-size:14px;cursor:pointer;opacity:.7;transition:opacity .12s}.title-history-btn:hover{opacity:1}.title-history{font-size:12px;color:var(--muted);margin:.5rem 0;padding:.5rem 0;border-top:1px dashed var(--muted);border-bottom:1px dashed var(--muted);display:none}.title-history.show{display:block}.fun-fact-tooltip{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;font-style:normal;color:var(--muted);border:1px solid var(--muted);cursor:help;margin-left:.35rem}.post-hero-title{font-size:clamp(28px,5vw,48px);font-weight:700;font-style:normal;line-height:1.1;color:var(--white);margin-bottom:10px}.post-hero-title em{color:var(--accent);font-style:normal}.post-hero-title a{color:var(--white);padding:0;margin:0}.post-hero-title a:hover{background:none;color:var(--accent)}.post-subtitle{color:var(--muted);font-size:14px}.wip-line{font-size:12px;font-style:normal;margin:.5rem 0 1rem}.muted-label{font-size:10px;font-style:normal;color:var(--muted);text-transform:uppercase;letter-spacing:1px}.article p{margin-bottom:1.4rem;font-size:15px}.drop-cap:first-letter{font-size:52px;font-weight:700;font-style:normal;float:left;line-height:.8;margin-right:10px;margin-top:4px;color:var(--accent)}.pull-quote{font-size:clamp(17px,2.5vw,22px);font-weight:700;font-style:normal;line-height:1.3;color:var(--white);border-left:3px solid var(--accent);padding-left:1rem;margin:2rem 0}.pull-quote em{color:var(--accent);font-style:normal}.image-block{border:1px dashed var(--muted);aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;margin:1.5rem 0;font-size:12px;color:var(--muted);font-style:normal;letter-spacing:2px}.image-caption{font-size:11px;color:var(--muted);margin-top:-1rem;margin-bottom:1.5rem}.code-block{border:1px dashed var(--muted);padding:1rem;margin:1.5rem 0;font-style:normal}.code-block code{font-size:13px;color:var(--text);white-space:pre;display:block;overflow-x:auto}.post-content pre{border:1px dashed var(--muted);padding:1rem;margin:1.5rem 0;overflow-x:auto;font-style:normal;position:relative}.post-nav{display:flex;justify-content:space-between;font-size:14px}.proj-card{padding:.75rem 0;border-bottom:1px dashed var(--muted)}.proj-card:last-of-type{border-bottom:none}.proj-card-top{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap}.proj-name{font-size:16px;font-weight:700;font-style:normal;color:var(--white)}.proj-name a{color:var(--white);padding:0;margin:0}.proj-name a:hover{background:none;color:var(--accent)}.proj-desc{font-size:13px;color:var(--muted);margin:4px 0 6px;line-height:1.5}.proj-dates{font-size:11px;color:var(--muted);font-style:normal;display:block;margin-bottom:6px}.proj-tech{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}.proj-tech-tag{font-size:10px;font-style:normal;color:var(--muted);padding:.1rem .4rem;border:1px dashed var(--muted);opacity:.7}.proj-links{font-size:12px;margin-top:6px}.proj-links a{margin-right:12px}.proj-page-title{font-size:clamp(24px,4vw,36px);font-weight:700;font-style:normal;line-height:1.1;color:var(--text);margin-bottom:6px}.proj-page-title em{color:var(--accent);font-style:normal}.proj-page-desc{font-size:14px;color:var(--muted)}.project-header{margin:1.5rem 0}.proj-body p{margin-bottom:1.4rem;font-size:15px}.proj-body ul{list-style:none;margin-bottom:1.4rem}.proj-body ul li{font-size:14px;padding:4px 0}.proj-body ul li:before{content:"→ ";color:var(--accent);font-style:normal}.proj-links-bottom{font-size:14px;display:flex;gap:1rem}.flex-between{display:flex;justify-content:space-between}.muted-text{color:var(--muted);font-style:normal}.post-content pre code{border:none;padding:0}.copy-btn{position:absolute;top:.5rem;right:.5rem;background:var(--muted);color:var(--bg);border:none;padding:.25rem .5rem;font-size:11px;font-family:Fira Code,monospace;font-style:normal;cursor:pointer;opacity:0;transition:opacity .15s}.post-content pre:hover .copy-btn{opacity:1}.copy-btn:hover{background:var(--accent)}.post-content img{max-width:100%;height:auto;margin:1rem 0}.post-content table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:13px}.post-content th,.post-content td{border:1px dashed var(--muted);padding:.5rem;text-align:left}.post-content th{color:var(--accent);font-style:normal;font-weight:700}.post-content details{border:1px dashed var(--muted);margin:1rem 0}.post-content summary{padding:.75rem 1rem;cursor:pointer;font-style:normal;font-weight:700;color:var(--white);list-style:none}.post-content summary::-webkit-details-marker{display:none}.post-content summary:before{content:"+ ";color:var(--accent)}.post-content details[open] summary:before{content:"- "}.post-content details>:not(summary){padding:0 1rem 1rem}.reading-progress{position:fixed;top:0;left:0;width:100%;height:2px;z-index:100;background:transparent}.reading-progress-bar{height:100%;width:0;background:var(--accent);transition:width .1s}.author-line{font-size:13px;margin:.5rem 0 1rem;font-style:normal}.author-line span,.author-line a{margin-right:4px}.cover-image{margin:1.5rem 0;border:1px dashed var(--muted)}.cover-image img{width:100%;display:block}.cover-image figcaption{font-size:11px;color:var(--muted);padding:.5rem;text-align:center}.toc{border:1px dashed var(--muted);margin:1.5rem 0}.toc-header{font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase;letter-spacing:2px;color:var(--accent);padding:.75rem 1rem;cursor:pointer;list-style:none;user-select:none}.toc-header::-webkit-details-marker{display:none}.toc-header:after{content:"+";float:right;color:var(--accent);font-weight:700}.toc[open] .toc-header:after{content:"-"}.toc-header:hover{background:#d901660d}.toc-list{list-style:none;padding:0 1rem .75rem;margin:0}.toc-section{padding:.25rem 0}.toc-section-link{font-size:13px;color:var(--text)}.toc-section-link:hover{color:var(--accent)}.toc-sub{margin:0;border:none}.toc-sub-trigger{list-style:none;cursor:pointer;font-size:11px;color:var(--muted);padding:.15rem 0 .15rem .75rem}.toc-sub-trigger::-webkit-details-marker{display:none}.toc-sub-trigger:before{content:"+ ";color:var(--muted)}.toc-sub[open] .toc-sub-trigger:before{content:"- "}.toc-sub-list{list-style:none;padding:0 0 0 1.5rem;margin:0}.toc-sub-item{padding:.15rem 0}.toc-sub-item a{font-size:12px;color:var(--muted)}.toc-sub-item a:hover{color:var(--accent)}.callout{border:1px dashed var(--muted);padding:1rem;margin:1.5rem 0;background:#d9016608}.callout-info{background:#60a5fa0d}.callout-warning{background:#facc150d}.callout-tip{background:#4ade800d}.callout-danger{background:#f871710d}.callout-note{background:#5555550d}[data-theme=paper] .callout-info{background:#60a5fa14}[data-theme=paper] .callout-warning{background:#facc1514}[data-theme=paper] .callout-tip{background:#4ade8014}[data-theme=paper] .callout-danger{background:#f8717114}[data-theme=paper] .callout-note{background:#55555514}[data-theme=midnight] .callout-info{background:#60a5fa08}[data-theme=midnight] .callout-warning{background:#facc1508}[data-theme=midnight] .callout-tip{background:#4ade8008}[data-theme=midnight] .callout-danger{background:#f8717108}[data-theme=midnight] .callout-note{background:#55555508}.callout-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase;letter-spacing:1px}.callout-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1px solid;font-size:11px;font-weight:700;line-height:1}.callout-content{font-size:14px}.callout-info{border-color:#60a5fa}.callout-info .callout-icon{color:#60a5fa;border-color:#60a5fa}.callout-info .callout-header{color:#60a5fa}.callout-warning{border-color:#facc15}.callout-warning .callout-icon{color:#facc15;border-color:#facc15}.callout-warning .callout-header{color:#facc15}.callout-tip{border-color:#4ade80}.callout-tip .callout-icon{color:#4ade80;border-color:#4ade80}.callout-tip .callout-header{color:#4ade80}.callout-danger{border-color:#f87171}.callout-danger .callout-icon{color:#f87171;border-color:#f87171}.callout-danger .callout-header{color:#f87171}.callout-note{border-color:var(--muted)}.callout-note .callout-icon{color:var(--muted);border-color:var(--muted)}.callout-note .callout-header{color:var(--muted)}.gallery{display:grid;grid-template-columns:repeat(var(--gallery-columns, 2),1fr);gap:.75rem;margin:1.5rem 0}.gallery-item{margin:0}.gallery-item img{width:100%;border:1px dashed var(--muted);display:block}.gallery-caption{font-size:11px;color:var(--muted);padding:.25rem 0;text-align:center}.code-compare{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin:1.5rem 0}.code-compare-panel{border:1px dashed var(--muted)}.code-compare-title{font-size:11px;font-style:normal;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--muted);padding:.5rem;border-bottom:1px dashed var(--muted)}.code-compare-lang{color:var(--accent);font-weight:400;margin-left:.5rem}.code-compare-body{padding:.75rem;overflow-x:auto}.code-compare-body pre{margin:0;padding:0;border:none}.code-compare-body code{font-size:12px;line-height:1.5}.series-nav{border:1px dashed var(--muted);padding:1rem;margin:1.5rem 0}.series-info{display:flex;justify-content:space-between;margin-bottom:.75rem}.series-name{font-size:13px;font-style:normal;font-weight:700;color:var(--accent)}.series-count{font-size:12px;color:var(--muted);font-style:normal}.series-progress{height:2px;background:var(--muted);margin-bottom:.75rem}.series-progress-bar{height:100%;background:var(--accent)}.series-links{display:flex;justify-content:space-between;font-size:13px}.tools-used{margin:1rem 0}.tools-label{font-size:12px;color:var(--muted);font-style:normal;text-transform:uppercase;letter-spacing:1px;margin-right:.5rem}.tools-list{display:inline}.tool-tag{border-color:var(--accent);color:var(--accent)}.tool-tag:hover{background:var(--accent);color:var(--bg)}.footnote{display:flex;gap:.5rem;font-size:13px;color:var(--muted);padding:.5rem 0;border-bottom:1px dashed rgba(85,85,85,.3)}.footnote:last-child{border-bottom:none}.footnote-num{color:var(--accent);font-weight:700;font-style:normal;min-width:1.5rem}.featured-star{display:none}.related-project-card{border:1px dashed var(--muted);padding:1rem;margin:.5rem 0}.related-project-label{font-size:10px;font-style:normal;text-transform:uppercase;letter-spacing:1px;color:var(--muted);display:block;margin-bottom:.5rem}.related-project-name{font-size:16px;font-weight:700;font-style:normal;color:var(--white);padding:0;margin:0}.related-project-name:hover{color:#fff;background:var(--accent)}.related-project-desc{font-size:13px;color:var(--muted);margin:.35rem 0 .5rem;line-height:1.5}.related-project-tech{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:.5rem}.related-project-links{font-size:12px}.related-project-links a{margin-right:12px}@media (max-width: 600px){body{padding:1.5rem 1rem}.page{max-width:100%;padding-top:12px}.theme-switcher{bottom:.75rem;right:.75rem;font-size:14px}.theme-switcher a{padding:8px 10px;min-width:44px;min-height:44px;text-align:center}.intro-line{font-size:clamp(22px,7vw,36px)}.page-title,.post-hero-title{font-size:clamp(22px,6vw,36px)}.proj-page-title{font-size:clamp(20px,5vw,28px)}.code-compare{grid-template-columns:1fr}.gallery{--gallery-columns: 1 !important}.post-header{flex-direction:column;align-items:flex-start;gap:.25rem}.post-date-inline{min-width:auto;font-size:11px}.post-cats{flex-wrap:wrap}.post-nav{flex-direction:column;gap:.5rem}.post-nav a{padding:10px;display:inline-block;min-height:44px}.home-links{flex-direction:column}.home-link{text-align:center;padding:12px;display:inline-block;min-height:44px}.proj-tech{flex-wrap:wrap}.tools-list{display:flex;flex-wrap:wrap;gap:4px}.post-categories{flex-wrap:wrap}.meta-type{display:block;margin-bottom:.25rem}.related-project-card{padding:.75rem}.related-project-links a{margin-right:8px}.sub-nav{font-size:12px}.home-text{font-size:14px}.proj-card-top{flex-direction:column;gap:.25rem}.info-panel{padding:.75rem;font-size:12px}.info-row{flex-direction:column;gap:.25rem}.info-value{text-align:left}.info-tags{justify-content:flex-start}.callout{padding:.75rem}.post-list{padding-left:0}.post-item{padding:.5rem 0}.intro{margin-bottom:12px}.post-content img{max-width:100%;height:auto}.post-content table{display:block;overflow-x:auto;font-size:12px}.post-content pre{padding:.75rem;font-size:12px}.code-block code{font-size:12px}.copy-btn{min-width:44px;min-height:44px;padding:8px}.proj-links a{padding:8px 12px;display:inline-block;min-height:44px}.home-text a{padding:4px 0;display:inline-block}.post-cats .post-cat{padding:6px 10px;display:inline-block}.tag{padding:6px 10px}}
