.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}:root{color-scheme:dark;--paper:#0b1b3a;--paper-raised:#122750;--paper-sunken:#071227;--ink:#eaf2ff;--ink-soft:#a6bddf;--ink-faint:#6c84ab;--rule:#1e3563;--rule-strong:#2f4d8a;--accent:#6cb6ff;--accent-strong:#3d8bff;--accent-ink:#071227;--accent-soft:#6cb6ff24;--star:#ffd98a;--star-soft:#ffd98a29;--font-display:"Fredoka", ui-rounded, "Segoe UI", system-ui, sans-serif;--font-sans:"Fredoka", ui-rounded, "Segoe UI", system-ui, sans-serif;--font-serif:"Newsreader", "Iowan Old Style", "Palatino Linotype", Georgia, serif;--font-mono:"SFMono-Regular", ui-monospace, "Cascadia Code", Menlo, monospace;--content-width:42rem;--page-gutter:clamp(1.5rem, 5vw, 5rem);--chrome-top:4.25rem;--chrome-bottom:4.25rem;--page-width:100vw;--content-gap-block:clamp(.5rem, 2vh, 1.5rem);--r-sm:10px;--r-md:16px;--r-lg:24px;--r-hand:255px 18px 225px 18px / 18px 225px 18px 255px;--squiggle:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 80 10' preserveAspectRatio='none'%3E%3Cpath d='M2 5 Q 11 0.5 20 5 T 38 5 T 56 5 T 74 5' fill='none' stroke='%236cb6ff' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E");--stars:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='340' height='340'%3E%3Cg fill='%23ffffff'%3E%3Ccircle cx='24' cy='40' r='1' opacity='.5'/%3E%3Ccircle cx='96' cy='18' r='1.4' opacity='.7'/%3E%3Ccircle cx='168' cy='72' r='1' opacity='.4'/%3E%3Ccircle cx='258' cy='34' r='1.2' opacity='.6'/%3E%3Ccircle cx='312' cy='112' r='1' opacity='.45'/%3E%3Ccircle cx='62' cy='156' r='1.3' opacity='.65'/%3E%3Ccircle cx='204' cy='184' r='1' opacity='.4'/%3E%3Ccircle cx='286' cy='226' r='1.5' opacity='.7'/%3E%3Ccircle cx='124' cy='256' r='1' opacity='.5'/%3E%3Ccircle cx='44' cy='296' r='1.2' opacity='.55'/%3E%3Ccircle cx='236' cy='306' r='1' opacity='.4'/%3E%3Ccircle cx='176' cy='124' r='1' opacity='.5'/%3E%3C/g%3E%3C/svg%3E");--ease:cubic-bezier(.22, 1, .36, 1)}*,:before,:after{box-sizing:border-box}html,body{height:100%}body{background-color:var(--paper);background-image:radial-gradient(circle at 16% 8%, #3d8bff4d, transparent 46%), radial-gradient(circle at 84% 4%, #6cb6ff2e, transparent 44%), radial-gradient(circle at 50% 106%, #ffd98a12, transparent 52%), var(--stars);color:var(--ink);font-family:var(--font-serif);font-optical-sizing:auto;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;background-size:100% 100%,100% 100%,100% 100%,340px 340px;background-attachment:fixed;margin:0;font-size:clamp(1.02rem,.55vw + .9rem,1.18rem);line-height:1.75;overflow:hidden}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto;display:block}::selection{background:var(--accent);color:var(--accent-ink)}.sky{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.sky-drift,.sky-drift:after{content:"";background-image:var(--stars);will-change:transform;background-size:340px 340px;animation:180s linear infinite drift;position:absolute;inset:-25%}.sky-drift{--dx:-340px;--dy:-170px}.sky-drift:after{--dx:-560px;--dy:-280px;opacity:.55;background-size:560px 560px;animation-duration:280s;animation-direction:reverse}@keyframes drift{0%{transform:translate(0,0)}to{transform:translate3d(var(--dx,-340px), var(--dy,-170px), 0)}}.milky-way{filter:blur(2px);will-change:transform, opacity;background-image:linear-gradient(118deg,#0000 36%,#6cb6ff1a 45%,#eaf2ff1f 50%,#6cb6ff1a 55%,#0000 64%),radial-gradient(#6cb6ff24,#0000 62%);animation:80s ease-in-out infinite alternate milky;position:absolute;inset:-30%}@keyframes milky{0%{opacity:.5;transform:translate(-2%,-1%)rotate(-1.2deg)}to{opacity:.9;transform:translate(2%,1.5%)rotate(1.2deg)}}.sky-avatar{z-index:20;pointer-events:auto;will-change:transform;border-radius:999px;width:clamp(2.5rem,6vh,3.5rem);height:clamp(2.5rem,6vh,3.5rem);animation:60s linear -24s infinite avatar-drift;position:fixed;top:16%;left:0}.sky-avatar img{object-fit:cover;border:3px solid var(--accent);background:var(--paper-raised);width:100%;height:100%;box-shadow:0 0 0 6px var(--accent-soft), 0 0 30px #6cb6ff80;will-change:transform;border-radius:999px;padding:.2rem;animation:18s linear infinite avatar-spin}.sky-avatar:hover,.sky-avatar:focus-visible,.sky-avatar:hover img,.sky-avatar:focus-visible img{animation-play-state:paused}.sky-avatar:focus-visible{outline:3px solid var(--accent);outline-offset:4px}@keyframes avatar-drift{0%{transform:translate(-18vw)}to{transform:translate(118vw,32vh)}}@keyframes avatar-spin{to{transform:rotate(360deg)}}.book{z-index:1;overscroll-behavior-x:contain;scrollbar-width:none;-ms-overflow-style:none;position:fixed;inset:0;overflow:auto hidden}.book::-webkit-scrollbar{display:none}.book-track{height:100%;padding-block:calc(var(--chrome-top) + var(--content-gap-block)) calc(var(--chrome-bottom) + var(--content-gap-block));column-width:var(--page-width);column-fill:auto;column-gap:0}.panel{break-before:column;padding-inline:var(--page-gutter)}.book-track>:first-child{break-before:auto}.panel-inner{width:100%;max-width:var(--content-width);margin-inline:auto}.panel-cover{height:calc(100dvh - var(--chrome-top) - var(--chrome-bottom) - 2 * var(--content-gap-block) - 2px);break-inside:avoid;flex-direction:column;justify-content:center;display:flex}.skip-link{z-index:100;background:var(--accent);color:var(--accent-ink);font-family:var(--font-display);border-radius:var(--r-sm);transition:top .3s var(--ease);padding:.5rem .9rem;font-size:.85rem;font-weight:500;position:absolute;top:-3rem;left:1rem}.skip-link:focus{top:1rem}.wrap{width:100%;max-width:var(--content-width);margin-inline:auto}.site-header{height:var(--chrome-top);z-index:40;padding-inline:var(--page-gutter);backdrop-filter:blur(12px);background:color-mix(in srgb, var(--paper) 78%, transparent);border-bottom:1px solid var(--rule);transition:border-color .4s var(--ease);align-items:center;display:flex;position:fixed;top:0;left:0;right:0}.site-header[data-scrolled=true]{border-bottom-color:var(--accent)}.site-header .wrap{justify-content:space-between;align-items:center;gap:1.5rem;display:flex}.brand{font-family:var(--font-display);letter-spacing:.02em;color:var(--ink);transition:color .3s var(--ease);align-items:center;gap:.55rem;font-size:1rem;font-weight:600;display:inline-flex}.brand:before{content:"";background:var(--accent);width:.65rem;height:.65rem;transition:transform .5s var(--ease);border-radius:62% 38% 46% 54%/55% 48% 52% 45%}.brand:hover{color:var(--accent)}.brand:hover:before{transform:rotate(90deg)scale(1.1)}.nav{font-family:var(--font-display);letter-spacing:.01em;align-items:center;gap:clamp(.25rem,1.2vw,.5rem);font-size:.84rem;font-weight:500;display:flex}.nav a{color:var(--ink-soft);transition:color .3s var(--ease), background-color .3s var(--ease);border-radius:999px;padding:.35rem .8rem;position:relative}.nav a:hover,.nav a[aria-current=page]{color:var(--accent-ink);background:var(--accent)}.spine{z-index:30;pointer-events:none;user-select:none;flex-direction:column;align-items:center;gap:.75rem;display:flex;position:fixed;top:50%;right:clamp(.6rem,1.8vw,1.6rem);transform:translateY(-50%)}.spine-text{writing-mode:vertical-rl;text-orientation:mixed;font-family:var(--font-display);letter-spacing:.5em;text-transform:uppercase;color:var(--ink-faint);pointer-events:auto;transition:color .5s var(--ease), background-color .5s var(--ease), letter-spacing .6s var(--ease);border-radius:999px;padding:.6rem .35rem;font-size:clamp(.72rem,.55vw + .5rem,.95rem);font-weight:500}.spine-text:hover{color:var(--accent-ink);background:var(--accent);letter-spacing:.62em}.spine-line{background:linear-gradient(to bottom, transparent, var(--accent), transparent);border-radius:999px;width:2px;height:clamp(2rem,6vw,4rem)}.spine-char{opacity:0;animation:spine-in .9s var(--ease) forwards;display:inline-block}@keyframes spine-in{0%{opacity:0;transform:translateY(.6em)}to{opacity:1;transform:translateY(0)}}@media (width<=60rem){.spine{display:none}}.book-bar{height:var(--chrome-bottom);z-index:40;padding-inline:var(--page-gutter);backdrop-filter:blur(12px);background:color-mix(in srgb, var(--paper) 78%, transparent);border-top:1px solid var(--rule);font-family:var(--font-display);letter-spacing:.01em;color:var(--ink-faint);justify-content:space-between;align-items:center;gap:1rem;font-size:.78rem;font-weight:400;display:flex;position:fixed;bottom:0;left:0;right:0}.book-bar-left,.book-bar-right{align-items:center;gap:.85rem;display:flex}.book-bar-center{position:absolute;left:50%;transform:translate(-50%)}.book-count{background:var(--accent);color:var(--accent-ink);font-variant-numeric:tabular-nums;letter-spacing:.04em;white-space:nowrap;border-radius:999px;padding:.2rem .7rem;font-weight:600}.book-turn{border:2px solid var(--rule-strong);border-radius:var(--r-hand);width:2.35rem;height:2.35rem;color:var(--ink-soft);cursor:pointer;box-shadow:0 3px 0 var(--rule-strong);transition:color .25s var(--ease), border-color .25s var(--ease), background-color .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);background:0 0;place-items:center;display:inline-grid}.book-turn:hover:not(:disabled){color:var(--accent-ink);background:var(--accent);border-color:var(--accent);box-shadow:0 4px 0 var(--accent-strong);transform:translateY(-1px)}.book-turn:active:not(:disabled){box-shadow:0 0 0 var(--accent-strong);transform:translateY(3px)}.book-turn:disabled{opacity:.35;cursor:default;box-shadow:none}.book-turn svg{width:1rem;height:1rem}.book-links{align-items:center;gap:1rem;display:flex}.book-links a{color:var(--ink-soft);transition:color .3s var(--ease);align-items:center;gap:.35rem;display:inline-flex}.book-links a:hover{color:var(--accent)}.progress{background:linear-gradient(90deg, var(--accent), var(--star));z-index:60;border-radius:0 999px 999px 0;width:0;height:3px;transition:width .15s linear;position:fixed;top:0;left:0}.hero{flex-direction:column;gap:clamp(.4rem,1.2vh,1.4rem);display:flex;position:relative}.hero-doodle{color:var(--star);opacity:.9;animation:doodle-in 1s var(--ease) both, float 7s ease-in-out infinite;position:absolute;top:-.75rem;right:0}@keyframes doodle-in{0%{opacity:0}to{opacity:.9}}.hero-doodle svg{width:1.75rem;height:1.75rem}@keyframes float{0%,to{transform:translateY(0)rotate(-8deg)}50%{transform:translateY(-9px)rotate(5deg)}}.hero h1{font-family:var(--font-display);color:var(--ink);text-shadow:0 0 60px #6cb6ff8c,0 0 22px #6cb6ff59;margin:0;font-size:clamp(2.75rem,min(16vw,12vh),9rem);font-weight:600;line-height:.9}.hero .kicker{font-family:var(--font-display);letter-spacing:.03em;color:var(--accent-ink);background:var(--accent);border-radius:999px;align-self:flex-start;margin:0;padding:.32rem .8rem;font-size:.74rem;font-weight:500}.hero .jp{font-family:var(--font-serif);color:var(--ink-soft);background:var(--paper-raised);border:1px solid var(--rule);border-left:4px solid var(--accent);border-radius:var(--r-md);max-width:34rem;margin:0;padding:.75rem 1rem;font-size:clamp(.8rem,1.55vh,1rem);line-height:1.6}.hero .intro{max-width:34rem;color:var(--ink);margin:0;font-size:clamp(.88rem,1.7vh,1.05rem)}.cover-meta{font-family:var(--font-display);letter-spacing:.02em;color:var(--ink-faint);margin:.5rem 0 0;font-size:.74rem;font-weight:400}.socials{gap:.75rem;margin-top:.25rem;display:flex}.socials a{border:2px solid var(--rule-strong);border-radius:var(--r-hand);background:var(--paper-raised);width:2.5rem;height:2.5rem;color:var(--ink-soft);box-shadow:0 3px 0 var(--rule-strong);transition:color .25s var(--ease), border-color .25s var(--ease), background-color .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);place-items:center;display:inline-grid}.socials a:hover{color:var(--accent-ink);background:var(--accent);border-color:var(--accent);box-shadow:0 5px 0 var(--accent-strong);transform:translateY(-2px)}.socials a:active{box-shadow:0 0 0 var(--accent-strong);transform:translateY(3px)}.socials svg{width:1rem;height:1rem}.section-writing .panel-inner{padding:8px}.section-head{justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:1.75rem;display:flex}.section-head h2{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);margin:0;font-size:clamp(1.4rem,3vw,2rem);font-weight:600;display:block}.section-head h2[data-index]:before{content:attr(data-index);color:var(--accent-ink);background:var(--accent);border-radius:999px;margin-right:.55rem;padding:.16rem .5rem;font-size:.72rem;font-weight:600;display:inline-block;transform:translateY(-.25em)}.section-head h2:after{content:"";background:var(--squiggle) no-repeat left center / contain;width:4.5rem;height:.6rem;margin-top:.5rem;display:block}.section-head a{font-family:var(--font-display);color:var(--accent);border-bottom:2px dashed var(--accent);transition:opacity .3s var(--ease);padding-bottom:.1rem;font-size:.84rem;font-weight:500}.section-head a:hover{opacity:.7}.toc{margin:0;padding:0;list-style:none}.toc-year{font-family:var(--font-display);letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border-bottom:1px dashed var(--rule-strong);break-after:avoid;margin:2.4rem 0 .8rem;padding-bottom:.4rem;font-size:.84rem;font-weight:600}.toc-year:first-child{margin-top:0}.toc-item{break-inside:avoid;position:relative}.toc-item a{border-radius:var(--r-md);transition:background-color .25s var(--ease), transform .25s var(--ease);align-items:baseline;gap:.6rem;padding:.6rem .8rem;display:flex}.toc-title{color:var(--ink);transition:color .25s var(--ease);font-size:1.12rem;font-weight:500;line-height:1.4}.toc-leader{border-bottom:1px dotted var(--rule-strong);min-width:1.5rem;height:.6em;transition:border-color .25s var(--ease);flex:1;transform:translateY(-.2em)}.toc-date{font-family:var(--font-mono);letter-spacing:.02em;color:var(--ink-faint);white-space:nowrap;transition:color .25s var(--ease);font-size:.72rem}.toc-item a:hover{background:var(--accent-soft);transform:translate(4px)}.toc-item a:hover .toc-title{color:var(--accent)}.toc-item a:hover .toc-leader{border-color:var(--accent)}.toc-item.is-draft .toc-title:after{content:"draft";font-family:var(--font-display);letter-spacing:.02em;color:var(--ink-faint);border:1px dashed var(--rule-strong);vertical-align:middle;border-radius:999px;margin-left:.5rem;padding:.05rem .45rem;font-size:.62rem}.article-header{break-inside:avoid;break-after:avoid;margin-bottom:2.25rem;padding-top:1.75rem}.article-meta{font-family:var(--font-display);letter-spacing:.02em;color:var(--ink-faint);flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-bottom:1rem;font-size:.76rem;font-weight:400;display:flex}.article-meta .dot{background:var(--accent);border-radius:999px;width:5px;height:5px}.article-title{font-family:var(--font-display);letter-spacing:-.015em;color:var(--ink);margin:.6rem 0 0;font-size:clamp(2.1rem,5.5vw,3.4rem);font-weight:600;line-height:1.08}.article-tags{flex-wrap:wrap;gap:.5rem;margin-top:1.25rem;display:flex}.tag{font-family:var(--font-display);letter-spacing:.01em;color:var(--ink-soft);border:1.5px dashed var(--rule-strong);transition:color .25s var(--ease), border-color .25s var(--ease), background-color .25s var(--ease);border-radius:999px;padding:.28rem .8rem;font-size:.74rem;font-weight:400}.tag:hover{color:var(--accent-ink);border-color:var(--accent);background:var(--accent);border-style:solid}.prose{overflow-wrap:break-word;font-size:1.08em;line-height:1.85}.prose>*+*{margin-top:1.35em}.prose p{text-align:justify;hyphens:auto;orphans:2;widows:2;margin:0}.prose>p:first-of-type:first-letter{float:left;color:var(--accent);padding:.06em .14em 0 0;font-size:3.4em;font-weight:500;line-height:.8}.prose h2,.prose h3,.prose h4{font-family:var(--font-display);letter-spacing:-.01em;break-after:avoid;margin-top:2.2em;margin-bottom:-.4em;font-weight:600;line-height:1.25}.prose h2{font-size:1.5em}.prose h2:after{content:"";background:var(--squiggle) no-repeat left center / contain;width:3.5rem;height:.55rem;margin-top:.45rem;display:block}.prose h3{font-size:1.25em}.prose a{color:var(--ink);text-decoration:underline wavy var(--accent);text-underline-offset:.18em;transition:background-color .25s var(--ease), color .25s var(--ease);text-decoration-thickness:1.5px}.prose a:hover{background:var(--accent);color:var(--accent-ink);text-decoration-color:#0000}.prose blockquote{background:var(--accent-soft);border:1px solid var(--rule);border-left:4px solid var(--accent);border-radius:var(--r-md);color:var(--ink-soft);margin-inline:0;padding:1rem 1.15rem;font-style:italic}.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.4em}.prose hr{background:var(--squiggle) no-repeat center / contain;border:0;width:6rem;height:.6rem;margin:2.5rem auto}.prose img{border:2px solid var(--rule-strong);border-radius:var(--r-md);max-height:calc(100dvh - var(--chrome-top) - var(--chrome-bottom) - 4rem);width:auto;margin-inline:auto;box-shadow:0 18px 40px -22px #000000e6}.prose code{font-family:var(--font-mono);color:var(--accent);background:var(--paper-sunken);border:1px solid var(--rule);border-radius:var(--r-sm);padding:.1em .35em;font-size:.86em}.prose pre{border-radius:var(--r-md);border:1px solid var(--rule);border-left:4px solid var(--accent);background:var(--paper-sunken);max-width:100%;padding:1.1rem 1.25rem;font-size:.9rem;overflow-x:auto}.prose pre code{color:inherit;background:0 0;border:0;padding:0}.prose table{border-collapse:collapse;width:100%;font-size:.95em}.prose th,.prose td{border-bottom:1px solid var(--rule);text-align:left;padding:.5rem .75rem}.prose th{font-family:var(--font-display);border-bottom:2px solid var(--accent);font-weight:600}.prose img,.prose pre,.prose blockquote,.prose table,.prose figure{break-inside:avoid}.article-footer{border-top:1px dashed var(--rule-strong);font-family:var(--font-display);break-inside:avoid;justify-content:space-between;gap:1.5rem;margin-top:3.25rem;padding-top:1.75rem;font-size:.84rem;display:flex}.article-footer a{max-width:45%;color:var(--ink-soft);transition:color .3s var(--ease);flex-direction:column;gap:.25rem;display:flex}.article-footer a:hover{color:var(--accent)}.article-footer .dir{color:var(--ink-faint);font-size:.72rem;font-weight:500}.article-footer .next{text-align:right;align-items:flex-end;margin-left:auto}.page-title{font-family:var(--font-display);letter-spacing:-.015em;margin:0 0 .6rem;font-size:clamp(2rem,5vw,3.1rem);font-weight:600;line-height:1.08}.page-lede{color:var(--ink-soft);max-width:34rem;margin:.7rem 0 0}.tag-cloud{flex-wrap:wrap;gap:.6rem;display:flex}.tag-cloud .tag{padding:.35rem .95rem;font-size:.8rem}.tag-cloud .count{color:var(--ink-faint);margin-left:.4rem}.search-field{width:100%;font-family:var(--font-serif);color:var(--ink);background:var(--paper-raised);border:2px solid var(--rule-strong);border-radius:var(--r-md);transition:border-color .3s var(--ease), box-shadow .3s var(--ease);margin-top:.5rem;padding:.85rem 1rem;font-size:1.15rem}.search-field:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft);outline:none}.search-empty{color:var(--ink-faint);margin-top:1.5rem;font-style:italic}[data-reveal]{transition:opacity .8s var(--ease), transform .8s var(--ease)}.has-js [data-reveal]{opacity:0;transform:translateY(1rem)}.has-js [data-reveal].is-visible{opacity:1;transform:none}.rise{animation:rise .9s var(--ease) both}@keyframes rise{0%{opacity:0;translate:0 1.25rem}to{opacity:1;translate:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}[data-reveal]{opacity:1;transform:none}}@media (width<=40rem){:root{--chrome-top:3.75rem;--chrome-bottom:3.75rem;--page-gutter:1.25rem}.article-header{padding-top:1.25rem}.site-header .wrap{gap:.6rem}.brand{gap:.4rem;font-size:.82rem}.brand:before{width:.5rem;height:.5rem}.nav{gap:.1rem;font-size:.74rem}.nav a{padding:.3rem .5rem}.book-bar{gap:.5rem;font-size:.72rem}.book-bar-center{position:static;transform:none}.book-links{gap:.6rem}.book-turn{width:2.1rem;height:2.1rem}.hero h1{font-size:clamp(3rem,min(24vw,13vh),6rem)}.section-head{flex-direction:column;align-items:flex-start;gap:.5rem}}@media (height<=45rem){:root{--chrome-top:3.5rem;--chrome-bottom:3.5rem}.hero .cover-meta{display:none}.socials a{width:2.2rem;height:2.2rem}}@media (height<=33rem){.hero .jp{display:none}.hero h1{font-size:clamp(2.25rem,min(18vw,15vh),3.5rem)}}
