@font-face{font-family:'Noto Sans';font-weight:400;font-style:normal;src:url("../fonts/Noto-Sans-regular/Noto-Sans-regular.eot");src:url("../fonts/Noto-Sans-regular/Noto-Sans-regular.eot?#iefix") format("embedded-opentype"),local("Noto Sans"),local("Noto-Sans-regular"),url("../fonts/Noto-Sans-regular/Noto-Sans-regular.woff2") format("woff2"),url("../fonts/Noto-Sans-regular/Noto-Sans-regular.woff") format("woff"),url("../fonts/Noto-Sans-regular/Noto-Sans-regular.ttf") format("truetype"),url("../fonts/Noto-Sans-regular/Noto-Sans-regular.svg#NotoSans") format("svg")}@font-face{font-family:'Noto Sans';font-weight:700;font-style:normal;src:url("../fonts/Noto-Sans-700/Noto-Sans-700.eot");src:url("../fonts/Noto-Sans-700/Noto-Sans-700.eot?#iefix") format("embedded-opentype"),local("Noto Sans Bold"),local("Noto-Sans-700"),url("../fonts/Noto-Sans-700/Noto-Sans-700.woff2") format("woff2"),url("../fonts/Noto-Sans-700/Noto-Sans-700.woff") format("woff"),url("../fonts/Noto-Sans-700/Noto-Sans-700.ttf") format("truetype"),url("../fonts/Noto-Sans-700/Noto-Sans-700.svg#NotoSans") format("svg")}@font-face{font-family:'Noto Sans';font-weight:400;font-style:italic;src:url("../fonts/Noto-Sans-italic/Noto-Sans-italic.eot");src:url("../fonts/Noto-Sans-italic/Noto-Sans-italic.eot?#iefix") format("embedded-opentype"),local("Noto Sans Italic"),local("Noto-Sans-italic"),url("../fonts/Noto-Sans-italic/Noto-Sans-italic.woff2") format("woff2"),url("../fonts/Noto-Sans-italic/Noto-Sans-italic.woff") format("woff"),url("../fonts/Noto-Sans-italic/Noto-Sans-italic.ttf") format("truetype"),url("../fonts/Noto-Sans-italic/Noto-Sans-italic.svg#NotoSans") format("svg")}@font-face{font-family:'Noto Sans';font-weight:700;font-style:italic;src:url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot");src:url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot?#iefix") format("embedded-opentype"),local("Noto Sans Bold Italic"),local("Noto-Sans-700italic"),url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2") format("woff2"),url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff") format("woff"),url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf") format("truetype"),url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg#NotoSans") format("svg")}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999;font-weight:bold}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-weight:bold;font-style:italic}.highlight .c,.highlight .cd{color:#999988;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .gd{color:#000000;background-color:#ffdddd}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#aa0000}.highlight .gh{color:#999999}.highlight .gi{color:#000000;background-color:#ddffdd}.highlight .go{color:#888888}.highlight .gp{color:#555555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaaaaa}.highlight .gt{color:#aa0000}.highlight .kc{color:#000000;font-weight:bold}.highlight .kd{color:#000000;font-weight:bold}.highlight .kn{color:#000000;font-weight:bold}.highlight .kp{color:#000000;font-weight:bold}.highlight .kr{color:#000000;font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .k,.highlight .kv{color:#000000;font-weight:bold}.highlight .mf{color:#009999}.highlight .mh{color:#009999}.highlight .il{color:#009999}.highlight .mi{color:#009999}.highlight .mo{color:#009999}.highlight .m,.highlight .mb,.highlight .mx{color:#009999}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .bp{color:#999999}.highlight .nb{color:#0086B3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:#008080}.highlight .nd{color:#3c5d5d;font-weight:bold}.highlight .ni{color:#800080}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nl{color:#990000;font-weight:bold}.highlight .nn{color:#555555}.highlight .nt{color:#000080}.highlight .vc{color:#008080}.highlight .vg{color:#008080}.highlight .vi{color:#008080}.highlight .nv{color:#008080}.highlight .ow{color:#000000;font-weight:bold}.highlight .o{color:#000000;font-weight:bold}.highlight .w{color:#bbbbbb}.highlight{background-color:#f8f8f8}body{background-color:#fff;padding:50px;font:14px/1.5 "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;color:#727272;font-weight:400}h1,h2,h3,h4,h5,h6{color:#222;margin:0 0 20px}p,ul,ol,table,pre,dl{margin:0 0 20px}h1,h2,h3{line-height:1.1}h1{font-size:28px}h2{color:#393939}h3,h4,h5,h6{color:#494949}a{color:#267CB9;text-decoration:none}a:hover,a:focus{color:#069;font-weight:bold}a small{font-size:11px;color:#777;margin-top:-0.3em;display:block}a:hover small{color:#777}.wrapper{width:860px;margin:0 auto}blockquote{border-left:1px solid #e5e5e5;margin:0;padding:0 0 0 20px;font-style:italic}code,pre{font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal, Consolas, Liberation Mono, DejaVu Sans Mono, Courier New, monospace;color:#333}pre{padding:8px 15px;background:#f8f8f8;border-radius:5px;border:1px solid #e5e5e5;overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:5px 10px;border-bottom:1px solid #e5e5e5}dt{color:#444;font-weight:700}th{color:#444}img{max-width:100%}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5;color:#444d56;display:inline-block;font-size:11px;line-height:10px;padding:3px 5px;vertical-align:middle}header{width:270px;float:left;position:fixed;-webkit-font-smoothing:subpixel-antialiased}ul.downloads{list-style:none;height:40px;padding:0;background:#f4f4f4;border-radius:5px;border:1px solid #e0e0e0;width:270px}.downloads li{width:89px;float:left;border-right:1px solid #e0e0e0;height:40px}.downloads li:first-child a{border-radius:5px 0 0 5px}.downloads li:last-child a{border-radius:0 5px 5px 0}.downloads a{line-height:1;font-size:11px;color:#676767;display:block;text-align:center;padding-top:6px;height:34px}.downloads a:hover,.downloads a:focus{color:#675C5C;font-weight:bold}.downloads ul a:active{background-color:#f0f0f0}strong{color:#222;font-weight:700}.downloads li+li+li{border-right:none;width:89px}.downloads a strong{font-size:14px;display:block;color:#222}section{width:500px;float:right;padding-bottom:50px}small{font-size:11px}hr{border:0;background:#e5e5e5;height:1px;margin:0 0 20px}footer{width:270px;float:left;position:fixed;bottom:50px;-webkit-font-smoothing:subpixel-antialiased}@media print, screen and (max-width: 960px){div.wrapper{width:auto;margin:0}header,section,footer{float:none;position:static;width:auto}header{padding-right:320px}section{border:1px solid #e5e5e5;border-width:1px 0;padding:20px 0;margin:0 0 20px}header a small{display:inline}header ul{position:absolute;right:50px;top:52px}}@media print, screen and (max-width: 720px){body{word-wrap:break-word}header{padding:0}header ul,header p.view{position:static}pre,code{word-wrap:normal}}@media print, screen and (max-width: 480px){body{padding:15px}.downloads{width:99%}.downloads li,.downloads li+li+li{width:33%}}@media print{body{padding:0.4in;font-size:12pt;color:#444}}.page-header,.project-name,.project-tagline,.site-header,header[role="banner"],header.page-header,footer.site-footer,footer[role="contentinfo"]{display:none !important}.wrapper{max-width:1100px;padding:0 22px}:root{color-scheme:light dark}:root{--page-bg: #ffffff;--accent: #0ea5a3;--accent-strong: #0b8b89;--bg-soft: #f7faf9;--card-bg: #ffffff;--text: #111111;--text-muted: #667085;--ring: rgba(14,165,163,.35);--radius: 14px;--shadow: 0 8px 24px rgba(16, 24, 40, 0.08);--shadow-hover: 0 12px 32px rgba(16, 24, 40, 0.12);--border-soft: color-mix(in oklab, #000 8%, transparent)}@media (prefers-color-scheme: dark){:root{--page-bg: #0a0f18;--bg-soft: #0f1720;--card-bg: #0b1220;--text: #e5e7eb;--text-muted: #98a2b3;--shadow: 0 8px 24px rgba(0,0,0,.5);--shadow-hover: 0 12px 32px rgba(0,0,0,.6);--border-soft: color-mix(in oklab, #fff 10%, transparent)}}:root[data-theme="light"]{--page-bg: #ffffff;--bg-soft: #f7faf9;--card-bg: #ffffff;--text: #111111;--text-muted: #667085;--shadow: 0 8px 24px rgba(16, 24, 40, 0.08);--shadow-hover: 0 12px 32px rgba(16, 24, 40, 0.12);--border-soft: color-mix(in oklab, #000 8%, transparent)}:root[data-theme="dark"]{--page-bg: #0a0f18;--bg-soft: #101a23;--card-bg: #0d1424;--text: #e5e7eb;--text-muted: #c0c9d6;--accent: #22c6bd;--accent-strong: #19a9a0;--shadow: 0 8px 24px rgba(0,0,0,.5);--shadow-hover: 0 12px 32px rgba(0,0,0,.6);--border-soft: color-mix(in oklab, #fff 10%, transparent)}html{scroll-behavior:smooth}body{background:var(--page-bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.6;transition:background .2s ease, color .2s ease}a{color:var(--accent);text-decoration-thickness:.08em;text-underline-offset:2px;transition:color .15s ease, background .15s ease, box-shadow .15s ease}a:hover{color:var(--accent-strong);text-decoration:none}a:focus-visible{outline:3px solid var(--ring);outline-offset:2px;border-radius:6px}::selection{background:rgba(14,165,163,0.18)}p.muted,.muted{color:var(--text-muted)}.tiny{font-size:.85rem;color:var(--text-muted)}hr.footnote{margin:40px 0}:where(h2[id], h3[id], h4[id]){scroll-margin-top:84px}img{max-width:100%;height:auto}@media (prefers-reduced-motion: reduce){*{transition:none !important;animation:none !important}}.hero{display:flex;gap:24px;align-items:center;background:var(--bg-soft);padding:18px;border-radius:var(--radius);box-shadow:var(--shadow);transition:background .2s ease, box-shadow .2s ease}.hero .headshot{width:120px;height:120px;border-radius:50%;object-fit:cover;box-shadow:var(--shadow)}.hero-text h1{margin:0 0 6px;line-height:1.2}.hero .tagline{margin:0;color:#2d3748}@media (prefers-color-scheme: dark){.hero .tagline{color:var(--text-muted)}}:root[data-theme="dark"] .hero .tagline{color:var(--text-muted)}.hero .links a{font-weight:600}.open-to{margin-top:8px;color:#334155}@media (prefers-color-scheme: dark){.open-to{color:var(--text-muted)}}:root[data-theme="dark"] .open-to{color:var(--text-muted)}.left-rail .hero{flex-direction:column;text-align:center;align-items:center;padding:22px}.left-rail .hero .headshot{width:160px;height:160px;margin-bottom:8px}.left-rail .hero .links{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.left-rail .hero .links a{display:inline-flex;align-items:center;gap:6px;font-weight:700;padding:6px 10px;border-radius:999px;background:var(--card-bg);border:1px solid var(--border-soft);box-shadow:var(--shadow)}.left-rail .hero .links a:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.ico{width:16px;height:16px;flex:0 0 16px}.nav{position:sticky;top:0;z-index:30;display:flex;gap:12px;margin:16px 0 8px;padding:10px 6px;flex-wrap:wrap;backdrop-filter:blur(6px);background:var(--card-bg);background:color-mix(in oklab, var(--card-bg) 92%, transparent);border-radius:12px;box-shadow:var(--shadow)}.nav a{padding:6px 12px;border-radius:999px;background:var(--card-bg);box-shadow:var(--shadow);font-weight:600;white-space:nowrap;transition:transform .15s ease, box-shadow .15s ease}.nav a:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.nav a.active{outline:2px solid var(--accent);outline-offset:2px;background:color-mix(in oklab, var(--accent) 14%, var(--card-bg))}.theme-toggle{margin-left:auto;display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:var(--card-bg);color:var(--text);border:1px solid color-mix(in oklab, var(--text-muted) 30%, transparent);box-shadow:var(--shadow);cursor:pointer;font-weight:700;transition:transform .15s ease, box-shadow .15s ease, background .2s ease, color .2s ease}.theme-toggle:hover{transform:translateY(-1px);box-shadow:var(--shadow-hover)}.theme-toggle:focus-visible{outline:3px solid var(--ring);outline-offset:2px}.theme-toggle .icon{font-size:1rem;line-height:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}:root[data-theme="light"] .icon-sun{display:inline}:root[data-theme="light"] .icon-moon{display:none}:root[data-theme="dark"] .icon-sun{display:none}:root[data-theme="dark"] .icon-moon{display:inline}@media (prefers-color-scheme: dark){:root:not([data-theme]) .icon-sun{display:none}:root:not([data-theme]) .icon-moon{display:inline}}.grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(290px, 1fr));gap:16px;margin-top:8px}.card{background:var(--card-bg);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);transition:transform .15s ease, box-shadow .15s ease, background .2s ease}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}.card h3{margin:6px 0 6px;line-height:1.3}.card .thumb{width:100%;height:auto;aspect-ratio:16 / 9;object-fit:cover;border-radius:12px;margin-bottom:10px;background:var(--bg-soft)}.card ul{margin:8px 0 8px 1rem;padding:0}.card li{margin:4px 0}.card .meta{font-weight:600;margin-top:8px}.tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.tag{font-size:.8rem;background:var(--bg-soft);padding:4px 8px;border-radius:999px;color:#0f172a;border:1px solid var(--border-soft)}:root[data-theme="dark"] .tag{color:var(--text)}details{background:var(--card-bg);border-radius:12px;padding:10px 12px;margin:10px 0;box-shadow:var(--shadow);transition:background .2s ease, box-shadow .2s ease}summary{list-style:none;cursor:pointer;font-weight:700;display:flex;align-items:center;gap:8px}summary::-webkit-details-marker{display:none}summary::before{content:"▸";display:inline-block;transform:translateY(1px);transition:transform .15s ease;color:var(--accent-strong)}details[open] summary::before{transform:rotate(90deg)}.shell{display:grid;grid-template-columns:340px minmax(0, 1fr);gap:24px;align-items:start}.left-rail{position:sticky;top:88px;align-self:start}.content{min-width:0}.xp-card{background:var(--card-bg);border-radius:var(--radius);padding:16px;margin:14px 0;box-shadow:var(--shadow);transition:box-shadow .15s ease, transform .15s ease, background .2s ease}.xp-card:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.xp-card h3{margin:2px 0 4px;line-height:1.3}.xp-meta{color:var(--text-muted);font-size:.95rem;margin:0 0 6px}.xp-dot{margin:0 6px;color:var(--text-muted)}.xp-points{margin-left:1rem}.xp-points li{margin:6px 0}:root[data-theme="dark"] .xp-points li{margin:8px 0}.xp-chip{display:inline-block;padding:2px 8px;border-radius:999px;background:var(--bg-soft);color:var(--text);font-weight:700;font-size:.82rem;line-height:1.6;border:1px solid var(--border-soft)}:root[data-theme="dark"] h1,:root[data-theme="dark"] h2,:root[data-theme="dark"] h3,:root[data-theme="dark"] h4,:root[data-theme="dark"] h5,:root[data-theme="dark"] h6{color:var(--text)}:root[data-theme="dark"] strong{color:var(--text)}:root[data-theme="dark"] .card h3,:root[data-theme="dark"] .xp-card h3{color:var(--text)}:root[data-theme="dark"] .content p strong{color:var(--text)}:root[data-theme="dark"] .open-to{color:var(--text)}.open-to strong{color:var(--text)}:root[data-theme="dark"] details,:root[data-theme="dark"] details p,:root[data-theme="dark"] details strong{color:var(--text)}:root[data-theme="dark"] .muted,:root[data-theme="dark"] .xp-meta{color:var(--text-muted)}.nav a.active{outline:2px solid var(--accent);outline-offset:2px;background:color-mix(in oklab, var(--accent) 14%, var(--card-bg));font-weight:700}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.55rem .9rem;border-radius:12px;font-weight:700;background:var(--accent);color:#fff;text-decoration:none;box-shadow:var(--shadow);border:1px solid color-mix(in oklab, #000 8%, transparent);transition:transform .15s ease, box-shadow .15s ease, background .2s ease}.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-hover)}.btn:focus-visible{outline:3px solid var(--ring);outline-offset:2px}:root[data-theme="dark"] .btn{background:color-mix(in oklab, var(--accent) 88%, #000);border-color:color-mix(in oklab, #fff 12%, transparent)}@media (max-width: 980px){.shell{grid-template-columns:1fr}.left-rail{position:static}}@media (max-width: 640px){.hero{flex-direction:column;text-align:center}.hero .headshot{width:120px;height:120px}.nav{overflow-x:auto;gap:8px}.grid{grid-template-columns:1fr}}@media print{.nav,.tags,.card .thumb{display:none !important}.card,.hero{box-shadow:none !important}}
