﻿*{margin:0;padding:0;box-sizing:border-box}:root{view-transition-name:root;--expo-in: linear( 0 0%, 0.0085 31.26%, 0.0167 40.94%, 0.0289 48.86%, 0.0471 55.92%, 0.0717 61.99%, 0.1038 67.32%, 0.1443 72.07%, 0.1989 76.7%, 0.2659 80.89%, 0.3465 84.71%, 0.4419 88.22%, 0.554 91.48%, 0.6835 94.51%, 0.8316 97.34%, 1 100% );--mask-gif: url("https://media.tenor.com/cyORI7kwShQAAAAi/shigure-ui-dance.gif");--mask-gif-dance: url("/shigure-ui-dance.gif");--mask-gif-bad-apple: url("/bad-apple-mask-full.gif");--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--text-3xl: 1.875rem;--text-3xl--line-height: calc(2.25 / 1.875);--text-4xl: 2.25rem;--text-4xl--line-height: calc(2.5 / 2.25);--text-5xl: 3rem;--text-5xl--line-height: 1;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-black: 900;--tracking-tighter: -.05em;--tracking-tight: -.025em;--tracking-wider: .05em;--leading-relaxed: 1.625;--bg-color: #0f0f0f;--card-bg: #151515;--text-color: #e0e0e0;--logo-color: #ffffff;--header-border: #333333;--back-link-color: #888888;--back-link-hover-color: #fafafa;--h1-color: #ffffff;--meta-color: #666666;--tag-color: #4a9eff;--content-p-color: #ccc;--hr-color: #555555;--content-link-color: #4a9eff;--content-link-hover-color: #6bb3ff;--link-hover-color: #8899ff;--h2-color: #ffffff;--code-bg: #151515;--code-border: #2a2a2a;--code-text: #e0e0e0;--code-keyword: #ff79c6;--code-function: #50fa7b;--code-string: #f1fa8c;--code-type: #8be9fd;--code-comment: #6272a4;--copy-btn-bg: #2a2a2a;--copy-btn-border: #3a3a3a;--copy-btn-text: #888888;--copy-btn-hover-bg: #3a3a3a;--copy-btn-hover-text: #ffffff;--toggle-btn-color: #888888;--toggle-btn-hover-color: #ffffff;--toggle-btn-hover-bg: rgba(255, 255, 255, 0.1);--card-border: #2a2a2a;--card-hover-border: #f1efea;--subtitle-color: #888888}html[data-theme=light]{--bg-color: #ffffff;--card-bg: #ffffff;--text-color: #2b2b2b;--logo-color: #0a0a0a;--header-border: #e0e0e0;--back-link-color: #555555;--back-link-hover-color: #0a0a0a;--h1-color: #0a0a0a;--meta-color: #777777;--tag-color: #0066cc;--content-p-color: #333333;--hr-color: #cccccc;--content-link-color: #0066cc;--content-link-hover-color: #004499;--h2-color: #0a0a0a;--code-bg: #f0f0f0;--code-border: #e0e0e0;--code-text: #222222;--code-keyword: #a71d5d;--code-function: #0086b3;--code-string: #183691;--code-type: #0086b3;--code-comment: #969896;--copy-btn-bg: #e0e0e0;--copy-btn-border: #d0d0d0;--copy-btn-text: #555555;--copy-btn-hover-bg: #d0d0d0;--copy-btn-hover-text: #222222;--toggle-btn-color: #555555;--toggle-btn-hover-color: #0a0a0a;--toggle-btn-hover-bg: rgba(0, 0, 0, 0.06);--card-border: #e0e0e0;--card-hover-border: #222222;--subtitle-color: #555555;--link-hover-color: #0000ee}body{background:var(--bg-color);color:var(--text-color);font-family:"Geist",sans-serif;font-optical-sizing:auto;font-weight:var(--font-weight-medium);font-style:normal;line-height:1.6;padding:5.2rem 20px 20px}.container{max-width:1200px;margin:0 auto}nav{position:fixed;top:0;left:0;right:0;z-index:1000;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;gap:1.6rem;margin:0 0 2.4rem;padding:1.4rem 1.6rem;background:var(--bg-color);font-size:.96rem}nav a{color:var(--subtitle-color);text-decoration:none}nav a:hover{color:var(--link-hover-color)}.penguin-logo{font-family:"Lilita One",sans-serif;font-size:1.25rem;color:var(--h1-color);letter-spacing:.5px}.penguin-logo:hover,.desktop-links a:hover{color:var(--link-hover-color);text-shadow:none}.right{margin-left:auto;padding:2px 6px;background:none;border:none;display:flex;align-items:center;justify-content:center;gap:1.2rem}.desktop-links{display:flex;align-items:center;gap:1.2rem}.desktop-links a{font-family:"Lilita One",sans-serif;color:var(--subtitle-color);text-decoration:none}.theme-toggle{margin-left:0;background:var(--bg-color);border:1px solid var(--card-border);border-radius:14px;width:52px;height:28px;cursor:pointer;color:var(--subtitle-color);display:flex;align-items:center;padding:0;z-index:101;position:relative}.theme-toggle::before{content:"";position:absolute;top:1.5px;left:1.5px;width:23px;height:23px;border-radius:50%;background:var(--text-color)}html[data-theme=light] .theme-toggle::before{transform:translateX(24px)}html[data-theme=dark] .theme-toggle::before{transform:translateX(0)}.theme-toggle:hover{border-color:var(--card-hover-border)}.solar-switch{display:block;width:15px;height:15px;position:absolute;top:5.5px;left:5.5px;color:var(--bg-color);z-index:2}html[data-theme=light] .solar-switch{transform:translateX(24px)}html[data-theme=dark] .solar-switch{transform:translateX(0)}.solar-switch path{transform-origin:12.5px 12.5px;transform-box:view-box;stroke-dasharray:1;stroke-dashoffset:0}.mobile-menu-btn{display:none;background:none;border:none;padding:0;margin-left:12px;cursor:pointer;color:var(--subtitle-color);z-index:101}.mobile-menu-overlay{position:fixed;top:4.5rem;right:1.6rem;width:auto;min-width:160px;background:var(--card-bg);border:1px solid var(--card-border);border-radius:12px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end;gap:1.2rem;padding:1.2rem;font-size:1.2rem;opacity:0;pointer-events:none;transform:translateY(-10px);box-shadow:0 4px 20px rgba(0,0,0,.15)}.mobile-menu-overlay.open{opacity:1;pointer-events:auto;transform:translateY(0)}.mobile-menu-overlay a{font-family:"Lilita One",sans-serif;color:var(--subtitle-color);text-decoration:none}.back-link{display:inline-block;color:var(--back-link-color);text-decoration:none;margin-bottom:30px}.back-link::before{content:"← "}.back-link:hover{color:var(--link-hover-color)}h1{font-size:var(--text-3xl);line-height:var(--text-3xl--line-height);letter-spacing:var(--tracking-tight);margin-bottom:15px;color:var(--h1-color);font-weight:var(--font-weight-semibold)}.meta{color:var(--meta-color);margin-bottom:40px;font-size:.9rem}.meta::before{content:"published: "}.tag{color:var(--tag-color);margin-left:5px}.content{max-width:900px}.content img{display:block;max-width:100%;height:auto}html[data-theme=dark] .content img.theme-aware{filter:invert(1) hue-rotate(180deg)}.content p,.content li{font-size:var(--text-lg);line-height:var(--leading-relaxed);margin-bottom:1.5rem;color:var(--content-p-color)}.content hr{border:none;border-top:1px solid var(--hr-color);width:80%;max-width:600px;margin:32px auto}.content a{color:var(--content-link-color);text-decoration:none}.content a:hover{color:var(--link-hover-color);text-decoration:underline}h2,h3,h4{color:var(--h2-color);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);letter-spacing:var(--tracking-tight);margin:40px 0 20px 0;font-weight:var(--font-weight-semibold)}.code-block{background:var(--code-bg);border:1px solid var(--code-border);border-radius:8px;padding:20px;margin:25px 0;overflow-x:auto;position:relative}.content pre{background:var(--code-bg);border:1px solid var(--code-border);border-radius:8px;padding:20px;margin:25px 0;overflow-x:auto;position:relative}.code-header{color:var(--meta-color);font-size:.85rem;margin-bottom:15px;padding-bottom:10px;border-bottom:1px solid var(--code-border)}.code-block code{color:var(--code-text);font-family:"Monaco","Menlo","Ubuntu Mono",monospace;font-size:.9rem;line-height:1.6}.keyword{color:var(--code-keyword)}.function{color:var(--code-function)}.string{color:var(--code-string)}.type{color:var(--code-type)}.comment{color:var(--code-comment)}.copy-btn{position:absolute;top:15px;right:15px;background:var(--copy-btn-bg);border:1px solid var(--copy-btn-border);color:var(--copy-btn-text);padding:5px 12px;border-radius:4px;cursor:pointer;font-size:.8rem}.copy-btn:hover{background:var(--copy-btn-hover-bg);color:var(--copy-btn-hover-text)}.copy-btn.copied{color:#50fa7b}@media (max-width: 768px){.desktop-links{display:none !important}.mobile-menu-btn{display:block !important}nav{margin-bottom:1.8rem;padding:1rem 1.2rem}body{padding:4.8rem 15px 15px}h1{font-size:1.5rem}.code-block{padding:15px}}@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:0s !important;animation-delay:0s !important;transition-duration:0s !important;transition-delay:0s !important}}.theme-toggle{flex:0 0 52px;overflow:hidden;appearance:none;-webkit-appearance:none}html.theme-toggled *,html.theme-toggled *::before,html.theme-toggled *::after{transition:none !important}::view-transition{position:fixed;inset:0;z-index:2147483647;pointer-events:none;isolation:isolate}::view-transition-group(root){position:absolute;inset:0;z-index:2147483647;animation-timing-function:var(--expo-in)}::view-transition-image-pair(root){position:absolute;inset:0;z-index:2147483647;isolation:auto}::view-transition-old(root),::view-transition-new(root){position:absolute;inset:0;display:block;mix-blend-mode:normal}::view-transition-old(root){z-index:0}::view-transition-new(root){z-index:1}html[data-theme=light]::view-transition-new(root){-webkit-mask-image:var(--current-mask-gif, var(--mask-gif-dance));mask-image:var(--current-mask-gif, var(--mask-gif-dance));-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;animation:scale-light 1.8s both}html[data-theme=light]::view-transition-old(root){animation:old-exit-light 1.8s both}html[data-theme=dark]::view-transition-new(root){-webkit-mask-image:var(--current-mask-gif, var(--mask-gif-bad-apple));mask-image:var(--current-mask-gif, var(--mask-gif-bad-apple));-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;animation:scale-dark 2.8s both}html[data-theme=dark]::view-transition-old(root){animation:old-exit-dark 2.8s both}@keyframes scale-light{0%{-webkit-mask-size:0;mask-size:0}10%{-webkit-mask-size:50vmax;mask-size:50vmax}85%{-webkit-mask-size:50vmax;mask-size:50vmax}100%{-webkit-mask-size:2000vmax;mask-size:2000vmax}}@keyframes old-exit-light{0%{opacity:1}100%{opacity:1}}@keyframes scale-dark{0%{-webkit-mask-size:0;mask-size:0}8%{-webkit-mask-size:28vmax;mask-size:28vmax}73%{-webkit-mask-size:28vmax;mask-size:28vmax}100%{-webkit-mask-size:2000vmax;mask-size:2000vmax}}@keyframes old-exit-dark{0%{opacity:1}100%{opacity:1}}@media (prefers-reduced-motion: reduce){::view-transition-group(root),::view-transition-old(root),::view-transition-new(root){animation:none !important}.solar-switch path{transition:none !important}}