/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.static{position:static}.start{inset-inline-start:var(--spacing)}.top-1\/2{top:50%}.left-1\/2{left:50%}.block{display:block}.hidden{display:none}.h-1\/2{height:50%}.h-full{height:100%}.w-0\.5{width:calc(var(--spacing) * .5)}.w-full{width:100%}.origin-top{transform-origin:top}.resize{resize:both}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#00e5a0\]{--tw-gradient-from:#00e5a0;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}:root{color-scheme:light;--bg-desk:#c4b9a6;--bg-page:#f5f0e6;--bg-page-alt:#ede5d5;--bg-card:#faf7f0;--bg-card-hover:#f0ead8;--text-heading:#2c1810;--text-body:#3d2b1f;--text-secondary:#5c4033;--text-muted:#8b7355;--accent:#8b1a1a;--accent-hover:#a52020;--accent-gold:#c5a55a;--border:#d4c5a9;--border-light:#e8ddca;--shadow:#2c18101a;--shadow-heavy:#2c181033;--ink:#8b1a1a0e;--bg-code:#ede5d5;--text-code:#3d2b1f;--turner-back:#d5c8b0;--page-curl:#2c181014;--spine-dark:#00000014;--spine-mid:#00000021;--font-display:"Libre Baskerville", serif;--font-body:"Lora", serif;--font-mono:"Courier Prime", monospace}:root.dark{color-scheme:dark;--bg-desk:#0f0b08;--bg-page:#1e1610;--bg-page-alt:#2a1f17;--bg-card:#352a20;--bg-card-hover:#3f3228;--text-heading:#f0eae0;--text-body:#d8ccba;--text-secondary:#c0b49e;--text-muted:#8c7e6c;--accent:#e8dcc8;--accent-hover:#f5efe5;--accent-gold:#c8a55a;--border:#4a3c2e;--border-light:#5a4a3a;--shadow:#00000040;--shadow-heavy:#00000073;--ink:#c8a55a0b;--bg-code:#2a1f17;--text-code:#d8ccba;--turner-back:#2a1f17;--page-curl:#c8a55a0f;--spine-dark:#0000002e;--spine-mid:#00000040}*{transition:background-color .4s,color .4s,border-color .4s,box-shadow .4s,fill .4s}html{scroll-behavior:smooth}body{background:var(--bg-desk);color:var(--text-body);font-family:var(--font-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:1rem;line-height:1.75;overflow:hidden}h1,h2,h3,h4{font-family:var(--font-display);color:var(--text-heading);margin:0;line-height:1.25}h1{font-size:2.2rem}h2{font-size:1.5rem}h3{font-size:1.15rem}p{margin:0 0 1em}a{color:var(--accent);text-decoration:none;transition:color .2s}a:hover{color:var(--accent-hover)}code{font-family:var(--font-mono);background:var(--bg-page-alt);border-radius:3px;padding:.15em .35em;font-size:.85em}::selection{background:var(--accent);color:var(--bg-page)}:root.dark ::selection{background:var(--accent-gold);color:var(--bg-page)}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.book-wrapper{box-sizing:border-box;justify-content:center;align-items:center;height:100dvh;padding:0;display:flex;position:relative}.book{background:var(--bg-page);width:100%;height:100%;position:relative;overflow:hidden}:root.dark .book{box-shadow:0 0 1px #c8a55a14,0 1px 4px var(--shadow),0 6px 30px var(--shadow-heavy),0 0 80px #c8a55a09}.book-spine{display:none}.spread{display:contents}.page{box-sizing:border-box;opacity:0;visibility:hidden;pointer-events:none;flex-direction:column;width:100%;height:100%;padding:1.5rem 1.5rem 0;display:flex;position:absolute;inset:0}.page.active-page{opacity:1;visibility:visible;pointer-events:auto}.toc-page{display:none!important}.page-content{scrollbar-width:thin;scrollbar-color:var(--border) transparent;flex:1;padding-bottom:3.5rem;overflow-y:auto}.page-content::-webkit-scrollbar{width:4px}.page-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.scroll-hint{z-index:6;opacity:0;pointer-events:none;cursor:pointer;background:0 0;border:none;padding:0;transition:opacity .3s;position:absolute;bottom:3.2rem;left:50%;transform:translate(-50%)}.scroll-hint.visible{opacity:1;pointer-events:auto}.scroll-hint svg{width:18px;height:18px;color:var(--text-muted);animation:1.8s ease-in-out infinite scrollBounce}@keyframes scrollBounce{0%,to{opacity:.4;transform:translateY(0)}50%{opacity:.8;transform:translateY(4px)}}.page-number{display:none}.page-turner{z-index:25;pointer-events:none;perspective:2500px;width:100%;height:100%;display:none;position:absolute;top:0}.page-turner.forward{left:auto;right:0}.page-turner.backward{left:0;right:auto}.turner-inner{width:100%;height:100%;transform-style:preserve-3d;position:relative}.page-turner.forward .turner-inner{transform-origin:0}.page-turner.backward .turner-inner{transform-origin:100%}.turner-face{backface-visibility:hidden;background:var(--bg-page);position:absolute;inset:0}.turner-front{box-shadow:-5px 0 18px #0000001f}.turner-back{background:var(--turner-back);transform:rotateY(180deg);box-shadow:5px 0 18px #0000001f}.page-turner.backward .turner-front{box-shadow:5px 0 18px #0000001f}.page-turner.backward .turner-back{box-shadow:-5px 0 18px #0000001f}@keyframes flipForward{0%{transform:rotateY(0)}to{transform:rotateY(-180deg)}}@keyframes flipBackward{0%{transform:rotateY(0)}to{transform:rotateY(180deg)}}.turner-inner.flipping-forward{animation:.7s cubic-bezier(.645,.045,.355,1) forwards flipForward}.turner-inner.flipping-backward{animation:.7s cubic-bezier(.645,.045,.355,1) forwards flipBackward}.book-footer-nav{z-index:20;background:linear-gradient(transparent 0%,var(--bg-page) 40%);pointer-events:none;justify-content:space-between;align-items:center;padding:.65rem 1.5rem;display:flex;position:absolute;bottom:0;left:0;right:0}.book-footer-nav>*{pointer-events:auto}.fnav-btn{cursor:pointer;color:var(--text-secondary);font-family:var(--font-display);background:0 0;border:1px solid #0000;border-radius:3px;align-items:center;gap:.4rem;min-width:5rem;padding:.35rem .7rem;font-size:.78rem;transition:all .2s;display:flex}.fnav-prev{justify-content:flex-start}.fnav-next{justify-content:flex-end}.fnav-btn:hover{color:var(--accent-gold);border-color:var(--border);background:var(--bg-card)}.fnav-btn:disabled{opacity:.2;cursor:default;color:var(--text-muted);background:0 0;border-color:#0000}.fnav-btn:disabled:hover{color:var(--text-muted);background:0 0;border-color:#0000}.fnav-arrow{font-size:1.1em;line-height:1}.fnav-indicator{font-family:var(--font-display);color:var(--text-muted);letter-spacing:.08em;align-items:center;gap:.3rem;font-size:.72rem;display:flex}.page-edge{z-index:18;cursor:pointer;opacity:0;width:44px;font:inherit;color:inherit;background:0 0;border:none;align-items:center;transition:opacity .25s;display:flex;position:absolute;top:0;bottom:48px}.page-edge:hover,.page-edge:active{opacity:1}.page-edge:disabled,.page-edge.disabled{cursor:default;pointer-events:none;opacity:0!important}.edge-prev{background:linear-gradient(to right,var(--page-curl),transparent);justify-content:flex-start;padding-left:8px;left:0}.edge-next{background:linear-gradient(to left,var(--page-curl),transparent);justify-content:flex-end;padding-right:8px;right:0}.edge-icon{width:14px;height:14px;color:var(--text-muted);opacity:.5}.toc{z-index:5;flex-direction:column;justify-content:center;height:100%;display:flex;position:relative}.toc-heading{font-family:var(--font-display);letter-spacing:.18em;text-transform:uppercase;color:var(--text-muted);margin-bottom:2rem;font-size:1rem}.toc-list{margin:0;padding:0;list-style:none}.toc-entry{cursor:pointer;width:100%;color:var(--text-secondary);font:inherit;text-align:left;background:0 0;border:none;border-radius:3px;align-items:baseline;padding:.55rem .85rem;text-decoration:none;transition:color .2s,background-color .2s;display:flex}.toc-entry:hover{color:var(--accent);background:var(--bg-card)}.toc-entry:active{background:var(--bg-card-hover)}.toc-chapter{font-family:var(--font-display);color:var(--accent-gold);flex-shrink:0;width:2rem;font-size:.82rem}.toc-title{font-family:var(--font-display);font-size:1.02rem}.toc-dots{border-bottom:1px dotted var(--border);opacity:.4;flex:1;align-self:end;margin:0 .6rem .3em}.toc-page-num{font-family:var(--font-mono);color:var(--text-muted);flex-shrink:0;font-size:.78rem}.toc-blog-link{font-family:var(--font-serif);color:var(--accent-gold);align-items:center;gap:.4rem;margin-top:1rem;padding:.4rem .85rem;font-size:.88rem;text-decoration:none;transition:color .2s;display:inline-flex}.toc-blog-link:hover{color:var(--accent)}.toc-blog-arrow{transition:transform .2s}.toc-blog-link:hover .toc-blog-arrow{transform:translate(3px)}.toc-blog-link-back:hover .toc-blog-arrow{transform:translate(-3px)}.hero-section{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.profile-img{object-fit:cover;border:3px solid var(--accent-gold);width:96px;height:96px;box-shadow:0 0 0 1px var(--border),3px 3px 10px var(--shadow);border-radius:4px;margin-bottom:1.15rem;transition:all .4s}.hero-name{margin-bottom:.15rem;font-size:2.2rem;font-weight:700}.hero-tagline{font-family:var(--font-display);color:var(--text-muted);margin-bottom:1.15rem;font-size:.92rem;font-style:italic}.hero-intro{max-width:26rem;color:var(--text-secondary);margin:0 auto 1.5rem;font-size:.9rem;line-height:1.75}.hero-intro:first-letter{float:left;color:var(--accent);font-size:2.6em;line-height:.82;font-family:var(--font-display);margin-top:.04em;margin-right:.06em;font-weight:700}.hero-links{z-index:5;flex-wrap:wrap;justify-content:center;gap:.65rem;display:flex;position:relative}.link-icon{flex-shrink:0;width:14px;height:14px}.hero-links a{color:var(--text-secondary);border:1px solid var(--border);border-radius:3px;align-items:center;gap:.35rem;padding:.35rem .75rem;font-size:.8rem;transition:all .2s;display:inline-flex}.hero-links a:hover{color:var(--accent);border-color:var(--accent);background:var(--bg-card)}.hero-links a:active{background:var(--bg-card-hover);transform:scale(.97)}.section-header{margin-bottom:1.5rem}.section-number{font-family:var(--font-display);letter-spacing:.15em;text-transform:uppercase;color:var(--accent-gold);margin-bottom:.12rem;font-size:.72rem;display:block}.section-title{font-size:1.45rem;font-weight:700}.experience-entry{border-left:2px solid var(--accent-gold);margin-bottom:1.5rem;padding-left:1.15rem}.experience-entry:last-child{margin-bottom:0}.exp-company{font-family:var(--font-display);color:var(--text-heading);margin-bottom:.06rem;font-size:1.05rem;font-weight:700}.exp-company a{color:inherit;z-index:5;transition:color .2s;position:relative}.exp-company a:hover{color:var(--accent)}.exp-role{color:var(--text-secondary);margin-bottom:.04rem;font-size:.85rem}.exp-period{color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin-bottom:.45rem;font-size:.7rem}.exp-highlights{margin:0 0 .5rem;padding:0;list-style:none}.exp-highlights li{color:var(--text-body);margin-bottom:.2rem;padding-left:.85rem;font-size:.82rem;line-height:1.55;position:relative}.exp-highlights li:before{content:"·";color:var(--accent-gold);font-size:1.1em;font-weight:700;position:absolute;left:0}.exp-highlights a{color:var(--accent);text-underline-offset:2px;z-index:5;text-decoration:underline;text-decoration-thickness:1px;transition:color .2s;position:relative}.exp-highlights a:hover{color:var(--accent-hover)}.projects-grid{grid-template-columns:1fr;gap:.75rem;display:grid}a.project-card{background:var(--bg-card);border:1px solid var(--border-light);cursor:pointer;color:inherit;border-radius:3px;flex-direction:column;padding:.85rem 1rem;text-decoration:none;transition:all .25s;display:flex}a.project-card:hover{background:var(--bg-card-hover);box-shadow:0 3px 12px var(--shadow);transform:translateY(-1px)}.project-name{font-family:var(--font-display);color:var(--text-heading);margin-bottom:.08rem;font-size:1rem;font-weight:700;transition:color .2s}a.project-card:hover .project-name{color:var(--accent)}.project-meta{color:var(--text-muted);margin-bottom:.15rem;font-size:.68rem}.project-description{color:var(--text-secondary);flex:1;margin-bottom:.45rem;font-size:.8rem;line-height:1.5}.project-tech{flex-wrap:wrap;gap:.3rem;display:flex}.project-tech span{color:var(--text-muted);background:var(--bg-page-alt);font-size:.66rem;font-family:var(--font-mono);border-radius:2px;padding:.1rem .4rem}.projects-more{z-index:5;margin-top:.85rem;position:relative}.projects-more a{color:var(--text-muted);border:1px solid var(--border-light);border-radius:3px;align-items:center;gap:.35rem;padding:.3rem .6rem;font-size:.8rem;transition:all .2s;display:inline-flex}.projects-more a:hover{color:var(--accent);border-color:var(--accent);background:var(--bg-card)}.projects-more a:active{background:var(--bg-card-hover);transform:scale(.97)}.book-intro-text{color:var(--text-secondary);margin-top:.75rem;font-size:.88rem;line-height:1.55}.book-list{margin:0;padding:0;list-style:none}.book-item-title{color:var(--text-heading);font-family:var(--font-display);margin-bottom:.12rem;font-size:1rem;font-weight:600;display:block}.book-item-title:hover{color:var(--accent)}.book-date{color:var(--text-muted);font-size:.7rem}.book-chapters{color:var(--text-muted);font-size:.68rem;font-family:var(--font-mono)}.book-meta{align-items:center;gap:.75rem;display:flex}.book-card{color:inherit;border-radius:3px;padding:.75rem .85rem;text-decoration:none;transition:background-color .2s,color .2s;display:block}.book-card:hover{background:var(--bg-card)}.book-card:hover .book-item-title{color:var(--accent)}.book-end{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;height:100%;display:flex}.book-end-text{font-family:var(--font-serif);color:var(--text-muted);font-size:1.5rem;font-style:italic}.toc-entry.toc-active{color:var(--accent);font-weight:700}.toc-entry.toc-active .toc-title{color:var(--accent)}.edu-entry{border-left:2px solid var(--accent-gold);margin-bottom:1.25rem;padding-left:1.15rem}.edu-entry:last-of-type{margin-bottom:0}.edu-school{font-family:var(--font-display);color:var(--text-heading);margin-bottom:.06rem;font-size:1.05rem;font-weight:700}.edu-degree{color:var(--text-secondary);margin-bottom:.04rem;font-size:.85rem}.edu-period{color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin:0;font-size:.7rem}.skills-label{font-family:var(--font-display);color:var(--text-heading);margin-top:1.5rem;margin-bottom:.85rem;font-size:1rem;font-weight:700}.skills-grid{grid-template-columns:1fr;gap:.6rem;display:grid}.skill-group{flex-direction:column;gap:.1rem;display:flex}.skill-cat{font-family:var(--font-display);letter-spacing:.08em;text-transform:uppercase;color:var(--accent-gold);font-size:.75rem}.skill-items{color:var(--text-body);font-size:.82rem;line-height:1.5}.soft-skills-list{columns:2;column-gap:1.5rem;margin:0;padding:0;list-style:none}.soft-skills-list li{color:var(--text-body);break-inside:avoid;margin-bottom:.2rem;padding-left:.85rem;font-size:.82rem;line-height:1.55;position:relative}.soft-skills-list li:before{content:"·";color:var(--accent-gold);font-size:1.1em;font-weight:700;position:absolute;left:0}.contact-intro{color:var(--text-secondary);margin-bottom:1.25rem;font-size:.88rem}.contact-grid{grid-template-columns:1fr;gap:.45rem;display:grid}.contact-item{background:var(--bg-card);border:1px solid var(--border-light);color:var(--text-body);border-radius:3px;flex-direction:column;padding:.65rem .85rem;text-decoration:none;transition:all .25s;display:flex}.contact-item:hover{background:var(--bg-card-hover);border-color:var(--accent);box-shadow:0 3px 12px var(--shadow);transform:translateY(-1px)}.contact-item:active{transform:translateY(0)}.contact-label{font-family:var(--font-display);letter-spacing:.08em;text-transform:uppercase;color:var(--accent-gold);align-items:center;gap:.35rem;margin-bottom:.08rem;font-size:.7rem;display:inline-flex}.contact-value{color:var(--text-secondary);font-size:.82rem}.contact-item:hover .contact-value{color:var(--accent)}.contact-copy{color:var(--text-muted);margin-top:1.25rem;font-size:.7rem}.ink-splash{pointer-events:none;z-index:1;fill:var(--ink);position:absolute;overflow:visible}.ink-tl{width:100px;height:100px;top:-8px;left:-8px}.ink-tr{width:110px;height:110px;top:-5px;right:-5px;transform:rotate(90deg)}.ink-br{width:80px;height:80px;bottom:50px;right:10px;transform:rotate(200deg)}.ink-bl{width:90px;height:90px;bottom:-5px;left:8px;transform:rotate(-45deg)}.ink-center{opacity:.5;width:120px;height:120px;top:50%;left:50%;transform:translate(-50%,-50%)rotate(30deg)}.ink-mid-r{width:70px;height:70px;top:40%;right:-8px;transform:rotate(120deg)}.fixed-controls{z-index:1000;align-items:center;gap:.4rem;display:flex;position:fixed;top:.75rem;right:.75rem}.ctrl-btn,.mode-toggle{border:1px solid var(--border);background:var(--bg-card);width:34px;height:34px;color:var(--text-muted);cursor:pointer;box-shadow:0 2px 8px var(--shadow);border-radius:50%;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:all .25s;display:flex;position:static}.ctrl-btn:hover,.mode-toggle:hover{color:var(--accent-gold);border-color:var(--accent-gold);transform:scale(1.08)}.ctrl-btn:active,.mode-toggle:active{transform:scale(.95)}.ctrl-btn svg,.mode-toggle svg{width:15px;height:15px}.mode-toggle .icon-sun{display:none}:root.dark .mode-toggle .icon-sun{display:block}:root.dark .mode-toggle .icon-moon{display:none}.prose{font-size:.95rem;line-height:1.8}.prose h1{margin-bottom:.5rem;font-size:1.85rem}.prose h2{margin-top:2.5rem;margin-bottom:.6rem;font-size:1.3rem}.prose h3{margin-top:1.8rem;margin-bottom:.4rem;font-size:1.05rem}.prose p{margin-bottom:1.3rem}.prose ul,.prose ol{margin-bottom:1.3rem;padding-left:1.5rem}.prose ul{list-style-type:disc}.prose ol{list-style-type:decimal}.prose li{margin-bottom:.4rem}.prose a{color:var(--accent);text-underline-offset:2px;text-decoration:underline;text-decoration-thickness:1px;transition:color .2s}.prose a:hover{color:var(--accent-gold)}.prose code{font-family:var(--font-mono);background:var(--bg-code);color:var(--text-code);border-radius:2px;padding:.15em .35em;font-size:.82em}.prose pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}.prose table{border-collapse:collapse;width:100%;margin-bottom:1.3rem;font-size:.85rem}.prose th,.prose td{border:1px solid var(--border-light);text-align:left;padding:.5rem .75rem}.prose th{background:var(--bg-card);color:var(--text-heading);font-size:.8rem;font-weight:600}.prose tr:nth-child(2n){background:var(--bg-page-alt)}.prose blockquote{border-left:3px solid var(--accent-gold);color:var(--text-secondary);margin:1.3rem 0;padding-left:1.15rem;font-style:italic}.prose pre{border:1px solid var(--border-light);border-left:3px solid var(--accent-gold);font-family:var(--font-mono);color:var(--text-code);border-radius:2px;margin-bottom:1.3rem;padding:1rem;font-size:.78rem;line-height:1.6;overflow-x:auto;background-color:var(--bg-code)!important}.dark .astro-code,.dark .astro-code span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;-webkit-text-decoration:var(--shiki-dark-text-decoration)!important;text-decoration:var(--shiki-dark-text-decoration)!important;background-color:#0000!important}.prose img{border-radius:3px;max-width:100%;margin:1.3rem 0}.prose hr{border:none;border-top:1px solid var(--border-light);margin:2rem 0}.prose strong{color:var(--text-heading)}.series-label{font-family:var(--font-mono);color:var(--accent-gold);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.5rem;font-size:.7rem;display:inline-block}.post-title{font-family:var(--font-display);color:var(--text-heading);margin-bottom:.35rem;font-size:1.65rem;line-height:1.3}.post-date{color:var(--text-muted);margin-bottom:.5rem;font-size:.75rem;display:block}.post-tags{flex-wrap:wrap;gap:.4rem;display:flex}.post-tag{font-family:var(--font-mono);color:var(--text-muted);background:var(--bg-page-alt);border-radius:2px;padding:.15em .5em;font-size:.65rem}.series-nav{border-top:1px solid var(--border-light);grid-template-columns:1fr 1fr;gap:1rem;margin-top:2.5rem;padding-top:1.5rem;display:grid}.series-nav-link{border:1px solid var(--border-light);background:var(--bg-card);border-radius:4px;flex-direction:column;padding:.85rem;text-decoration:none;display:flex}.series-nav-link:hover{background:var(--bg-card-hover);border-color:var(--border)}.series-nav-link.next{text-align:right}.series-nav-dir{color:var(--text-muted);margin-bottom:.2rem;font-size:.7rem}.series-nav-title{font-family:var(--font-display);color:var(--text-heading);font-size:.85rem;font-weight:600}.book-single{flex-direction:column;max-width:100%;height:100%;padding:1.5rem;display:flex;overflow-y:auto}.book-single .site-nav{border-bottom:1px solid var(--border-light);justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:.85rem;display:flex}.nav-title{font-family:var(--font-display);color:var(--text-heading);font-size:1rem;font-weight:700}.nav-title:hover{color:var(--text-heading)}.nav-links{gap:1.25rem;display:flex}.nav-links a{color:var(--text-secondary);font-size:.82rem}.nav-links a:hover{color:var(--text-heading)}.book-single .site-footer{border-top:1px solid var(--border-light);text-align:center;margin-top:auto;padding-top:1.5rem}.footer-links{justify-content:center;gap:1.5rem;margin-bottom:.65rem;display:flex}.footer-links a{color:var(--text-muted);font-size:.8rem}.footer-links a:hover{color:var(--accent)}.footer-copy{color:var(--text-muted);margin:0;font-size:.7rem}@media(min-width:640px){.book-wrapper{padding:1.5rem}.book{max-width:560px;height:92%;box-shadow:0 1px 4px var(--shadow),0 6px 24px var(--shadow-heavy),0 14px 60px var(--shadow-heavy);border-radius:5px}.book:before,.book:after{content:"";background:var(--bg-page-alt);z-index:-1;border-radius:0 4px 4px 0;position:absolute}.book:before{box-shadow:0 1px 5px var(--shadow);inset:3px -3px -3px 3px}.book:after{opacity:.5;inset:6px -5px -5px 5px}.page{padding:2rem 2.25rem 0}.book-footer-nav{padding:.65rem 2rem}.hero-name{font-size:2.4rem}.contact-grid{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}.book-single{max-width:560px;height:92%;box-shadow:0 1px 4px var(--shadow),0 6px 24px var(--shadow-heavy),0 14px 60px var(--shadow-heavy);border-radius:5px;padding:2rem 2.5rem}.book-single:before,.book-single:after{content:"";background:var(--bg-page-alt);z-index:-1;border-radius:4px;position:absolute}.book-single:before{box-shadow:0 1px 5px var(--shadow);inset:3px -3px -3px 3px}.book-single:after{opacity:.5;inset:6px -5px -5px 5px}}@media(min-width:1025px){.book-wrapper{padding:1.25rem 2rem 2rem}.book{border-radius:3px 6px 6px 3px;width:calc(100vw - 4rem);max-width:1600px;height:calc(100dvh - 4rem)}.book:before,.book:after{border-radius:0 5px 5px 0}.spread{opacity:0;visibility:hidden;pointer-events:none;display:flex;position:absolute;inset:0}.spread.active{opacity:1;visibility:visible;pointer-events:auto}.page{width:50%;height:100%;padding:2rem 2.5rem 0;position:relative}.spread.active .page{opacity:1;visibility:visible;pointer-events:auto}.toc-page{display:flex!important}.book-spine{background:linear-gradient(90deg,transparent 0%,var(--spine-dark) 20%,var(--spine-mid) 45%,var(--spine-mid) 55%,var(--spine-dark) 80%,transparent 100%);z-index:15;pointer-events:none;width:28px;height:100%;display:block;position:absolute;top:0;left:50%;transform:translate(-50%)}.page-turner{width:50%}.page-number{font-family:var(--font-display);color:var(--text-muted);opacity:.4;flex-shrink:0;padding:.35rem 0;font-size:.7rem;display:block}.page-left .page-number{text-align:left}.page-right .page-number{text-align:right}.page-edge{width:52px;padding-left:10px;padding-right:10px}.book-footer-nav{padding:.6rem 2.5rem}}@media(max-width:400px){.page{padding:1.25rem 1.15rem 0}.hero-name{font-size:1.75rem}.hero-intro{font-size:.85rem}.hero-links{flex-direction:column;align-items:center}.projects-grid{grid-template-columns:1fr}.book-footer-nav{padding:.55rem 1rem}.fnav-label{font-size:.68rem}}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
