@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--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:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--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,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, 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;-webkit-text-decoration:inherit;-webkit-text-decoration: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:where(:not(iframe)){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{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.isolate{isolation:isolate}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.block{display:block}.contents{display:contents}.grid{display:grid}.hidden{display:none}.inline{display:inline}.table{display:table}.shrink{flex-shrink:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.lowercase{text-transform:lowercase}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.invert{--tw-invert:invert(100%);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,)}.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))}}@font-face{font-family:LXGW WenKai Screen;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/lxgw-wenkai-screen-common.woff2)format("woff2");unicode-range:U+2000-206F,U+2E80-303F,U+3400-9FFF,U+F900-FAFF,U+FF00-FFEF,U+20000-2FA1F}@font-face{font-family:LXGW WenKai Screen;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/lxgw-wenkai-screen-site.woff2)format("woff2");unicode-range:U+2014,U+2018-2019,U+2026,U+3001-3002,U+4E00,U+4E09-4E0A,U+4E0E,U+4E2A,U+4E2D,U+4E3A-4E3B,U+4E5F,U+4E8B,U+4E8E,U+4E92,U+4EA4,U+4EA7,U+4EBA,U+4ECB,U+4ECD-4ECE,U+4ED6,U+4EE5,U+4EEA,U+4EEC,U+4EF6,U+4EFB,U+4EFD,U+4F18,U+4F53,U+4F55,U+4F5C,U+4F60,U+4F7F,U+4F8B,U+4FBF,U+4FDD,U+505A,U+50CF,U+5148,U+5168,U+516C,U+5173,U+5176-5177,U+51B3,U+51FA-51FB,U+5206-5207,U+5212,U+5217,U+5219,U+521B,U+5230,U+5236,U+524D,U+52A1,U+52A8,U+5305,U+5316,U+535A,U+5361,U+5373,U+53BB,U+53CA,U+53D1,U+53EF,U+5408,U+540D-540E,U+5411,U+5468,U+547C,U+548C,U+54C1,U+56DB,U+56DE,U+56F4,U+5728,U+5730,U+57FA,U+590D,U+5916,U+591A,U+5931,U+5934,U+5939,U+597D,U+5982,U+59CB,U+5B58,U+5B83,U+5B89,U+5B9E,U+5BA1-5BA2,U+5BF9,U+5BFC,U+5C06,U+5C0F,U+5C1A,U+5C3E,U+5C55,U+5C5E,U+5DE5,U+5DF1-5DF2,U+5E03,U+5E0C,U+5E38,U+5E74,U+5E76,U+5E93-5E94,U+5EA6,U+5ECA,U+5EFA,U+5F00,U+5F0F,U+5F55,U+5F62,U+5FC6,U+6001,U+6027,U+60C5,U+60F3,U+6210-6211,U+6216,U+6253,U+6267,U+627E,U+62D6,U+62DB,U+62EC,U+6301,U+6309,U+6362,U+636E,U+638C,U+63A2,U+63A5,U+63A7,U+63D2,U+641C,U+644A,U+652F,U+6536,U+6548,U+6570,U+6574,U+6587,U+65B0,U+65CB,U+65E5,U+65E9,U+662F,U+666E,U+6670,U+667A,U+66F4,U+6709,U+671B,U+671F,U+672A,U+672C,U+6765,U+677F,U+6784,U+6790,U+67E5,U+6807,U+684C,U+6863,U+6982,U+6B63,U+6B65,U+6BCF,U+6C42,U+6CD5,U+6CE8,U+6D3B,U+6D41,U+6D45,U+6D4F,U+6DB5,U+6DF1,U+6E05,U+6E90,U+6EDA,U+7070,U+70B9,U+70DF,U+7247,U+7259,U+72B6,U+72EC,U+7387,U+73B0,U+73BB,U+7406,U+7483,U+751F,U+7528,U+7559,U+767D,U+7684,U+76D6,U+76D8,U+76EE,U+770B,U+771F,U+7801,U+78C1,U+793A,U+793E,U+79BB,U+79FB,U+7A0B,U+7A7A,U+7ACB,U+7AD9,U+7AE0,U+7AEF,U+7B14,U+7B5B,U+7B7E,U+7BC7,U+7C7B,U+7CBE,U+7CFB,U+7D22,U+7EA7,U+7EB8,U+7EBF,U+7EC8,U+7ECD,U+7ED3,U+7ED5,U+7EDF,U+7EE7,U+7EED,U+7EFF,U+7F51,U+8005,U+80FD,U+81EA,U+822A,U+8272,U+8349,U+884C,U+8868,U+88C5,U+8981,U+89C2,U+89C4,U+89C6,U+89C8,U+89E3,U+8A00,U+8BA1,U+8BA4,U+8BA9,U+8BB0,U+8BBF,U+8BCD,U+8BD5,U+8BE5-8BE6,U+8BED,U+8BF7,U+8BFB,U+8C61,U+8D25,U+8D39,U+8D77,U+8DDF,U+8DF3,U+8F6C,U+8F6F,U+8FC7,U+8FD4,U+8FDB,U+9009,U+9010,U+901A,U+9020,U+90AE,U+90E8,U+90FD,U+914D,U+91CC-91CD,U+91CF,U+949F,U+94FE,U+952E,U+95ED-95EE,U+95F4,U+9605,U+9650,U+9664,U+968F,U+96C6,U+9700,U+9762,U+9875,U+9879,U+987E,U+9898,U+9996,U+9F20,U+FF0C,U+FF1A-FF1B,U+FF1F}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-reading-zh:"LXGW WenKai Screen", var(--font-sans);--page-bg:#fff;--text:#6b6b6b;--text-strong:#242424;--text-quiet:#8a8a8a;--accent:#3a6c63;--note-color:#6679a3;--sage:#497d61;--sage-wash:#eef4ef;--sage-hover:#e3eee5;--clay:#b67b57;--clay-wash:#f7f1ec;--clay-hover:#f0e6dc;--lavender:#8b74ae;--lavender-wash:#f3f0f7;--lavender-hover:#ebe5f2;--chip-bg:#f3f3f2;--chip-hover:#eaecea;--line:#e8e8e6;--icon-filter:none;--tt-in-dur:.15s;--tt-out-dur:50ms;--tt-scale:.98;--tt-delay:80ms;--tt-in-ease:ease-out;--tt-out-ease:ease-out;--tt-bg:#252a27;--tt-fg:#f5f7f4;--modal-open-dur:.25s;--modal-close-dur:.15s;--modal-scale:.96;--modal-scale-close:.96;--modal-ease:cubic-bezier(.22, 1, .36, 1);--dropdown-open-dur:.25s;--dropdown-close-dur:.15s;--dropdown-pre-scale:.97;--dropdown-closing-scale:.99;--dropdown-ease:cubic-bezier(.22, 1, .36, 1);--intro-reveal-duration:1.2s;--intro-reveal-delay:.23s;--intro-reveal-ease:cubic-bezier(.65, 0, .35, 1);--name-sweep-1:#c679c4;--name-sweep-2:#fa3d1d;--name-sweep-3:#ffb005;--name-sweep-4:#e1e1fe;--name-sweep-5:#0358f7}html[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--page-bg:#171918;--text:#a3aaa6;--text-strong:#e7ece8;--text-quiet:#89918c;--accent:#a4c6b9;--note-color:#a4b5df;--sage:#94c2a4;--sage-wash:#24312a;--sage-hover:#2c3e32;--clay:#dbac8e;--clay-wash:#342b25;--clay-hover:#41332b;--lavender:#bca5da;--lavender-wash:#302936;--lavender-hover:#3d3346;--chip-bg:#262b28;--chip-hover:#343c37;--line:#303631;--icon-filter:invert(1);--tt-bg:#f5f7f4;--tt-fg:#252a27}*,:before,:after{box-sizing:border-box}html{scrollbar-gutter:stable;min-height:100%}@supports not (scrollbar-gutter:stable){html{overflow-y:scroll}}body{background:var(--page-bg);min-height:100dvh;color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;flex-direction:column;margin:0;font-size:14.4px;font-weight:400;line-height:1.6;transition:background-color .18s,color .18s;display:flex}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}a{color:inherit}button{cursor:pointer}img{display:block}::selection{color:#20382b;background:#dce9e2}button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:5px;border-radius:4px}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{background:var(--page-bg);z-index:3;padding:8px 12px;position:absolute;top:12px;left:12px;transform:translateY(-150%)}.skip-link:focus{transform:translateY(0)}.page{flex-shrink:0;width:min(540px,100% - 48px);margin:auto;padding:110px 0}.identity{margin-bottom:32px;line-height:0}.identity-orbit{min-height:40px;line-height:1.6}.identity-button{background:0 0;border:0;border-radius:50%;width:40px;height:40px;padding:0;overflow:hidden}.identity-avatar{object-fit:cover;object-position:50% 55%;width:40px;height:40px;transition:transform .25s var(--modal-ease);border-radius:50%}.avatar-dark,html[data-theme=dark] .avatar-light{display:none}html[data-theme=dark] .avatar-dark{display:block}.identity-button:hover .identity-avatar{transform:scale(1.04)}.orbit-navigation{min-height:40px;position:relative}.orbit-trigger{z-index:3;color:var(--text);background:0 0;border:0;align-items:center;gap:12px;padding:0;font-size:12px;line-height:1.6;display:flex;position:relative}.orbit-photo{background:var(--page-bg);border-radius:50%;position:relative}.orbit-mark{background:var(--page-bg);border:1px solid var(--line);width:17px;height:17px;color:var(--text-strong);transition:transform var(--dropdown-open-dur) var(--dropdown-ease);border-radius:50%;place-items:center;font-size:13px;line-height:1;display:grid;position:absolute;bottom:-2px;right:-3px}.orbit-label{white-space:nowrap;transition:opacity .12s;position:absolute;top:calc(50% + 13.5px);left:49px;transform:translateY(-50%)}.orbit-navigation[data-open=true] .orbit-label{opacity:0}.orbit-navigation[data-open=true] .orbit-mark{transform:rotate(45deg)}.orbit-panel{z-index:2;width:min(340px,100%);height:170px;font-size:12px;line-height:1.6;position:absolute;top:-110px;left:0}.orbit-panel:not(.is-open):not(.is-closing){visibility:hidden}.orbit-track{border:1px solid var(--line);pointer-events:none;border-radius:50%;position:absolute;transform:rotate(-13deg)}.orbit-node{border:1px solid var(--line);background:var(--page-bg);color:var(--text-strong);white-space:nowrap;opacity:0;transform:translate(calc(-50% + var(--orbit-return-x)), calc(-50% + var(--orbit-return-y))) scale(.76);transition:transform var(--dropdown-close-dur) var(--dropdown-ease), opacity var(--dropdown-close-dur) var(--dropdown-ease);border-radius:30px;align-items:center;gap:8px;padding:9px 14px;font-size:12px;line-height:1.6;text-decoration:none;display:flex;position:absolute}.orbit-panel.is-open .orbit-node{opacity:1;transition-duration:var(--dropdown-open-dur);transition-delay:var(--orbit-stagger);transform:translate(-50%,-50%)scale(1)}.orbit-node:hover,.orbit-node[aria-current=page]{background:var(--chip-bg);border-color:var(--accent)}.orbit-icon{width:14px;height:14px}.section-title{color:var(--text-strong);letter-spacing:-.025em;margin:0 0 24px;font-size:24px;font-weight:500;line-height:1.4}.introduction>.section-title{margin:0}.back-link{margin-top:32px;display:inline-flex}.product-list{gap:24px;display:grid}.product-list h2{color:var(--text-strong);margin:0 0 6px;font-size:15px;font-weight:500}.product-list p{margin:0}.product-detail-link{color:inherit;font:inherit;background:0 0;border:0;align-items:center;gap:8px;padding:0;display:inline-flex}.product-detail-link:hover{color:var(--accent)}.introduction{flex-direction:column;gap:38px;display:flex}.introduction p{margin:0}html:lang(zh-CN) .introduction,html:lang(zh-CN) .dialog-copy>p:not(.project-reference){font-family:var(--font-reading-zh);font-size:15.5px;line-height:1.8}.intro-lead{color:var(--text-strong)}.tech-term{color:var(--text-strong);white-space:nowrap;align-items:baseline;gap:4px;display:inline-flex}.tech-term-icon{object-fit:contain;flex-shrink:0;align-self:center;width:14px;height:14px}.tech-term-icon-monochrome{filter:var(--icon-filter)}.name-sweep{color:var(--text-strong);display:inline-block}@supports ((-webkit-background-clip:text) or (background-clip:text)){.name-sweep{color:#0000;-webkit-text-fill-color:transparent;background-repeat:no-repeat;background-size:300% 100%;-webkit-background-clip:text;background-clip:text;background-image:linear-gradient(90deg, var(--text-strong) 46%, var(--name-sweep-1) 50%, var(--name-sweep-2) 52.8333%, var(--name-sweep-3) 55.6667%, var(--name-sweep-4) 58.5%, var(--name-sweep-5) 61.3333%, var(--text-strong) 65.3333%);animation:name-sweep var(--intro-reveal-duration) linear var(--intro-reveal-delay) 1 both}}@keyframes name-sweep{0%{background-position:100% 0}to{background-position:0 0}}.text-link{--link-color:var(--accent);color:var(--link-color);text-underline-offset:3px;text-decoration-line:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--link-color);-webkit-text-decoration-color:var(--link-color);-webkit-text-decoration-color:var(--link-color);text-decoration-color:var(--link-color)}@supports (color:color-mix(in lab, red, red)){.text-link{-webkit-text-decoration-color:color-mix(in srgb, var(--link-color) 46%, transparent);-webkit-text-decoration-color:color-mix(in srgb, var(--link-color) 46%, transparent);-webkit-text-decoration-color:color-mix(in srgb, var(--link-color) 46%, transparent);text-decoration-color:color-mix(in srgb, var(--link-color) 46%, transparent)}}.text-link{transition:text-decoration-color .15s}.text-link[data-link=github]{--link-color:var(--note-color)}.text-link:hover{-webkit-text-decoration-color:var(--link-color);-webkit-text-decoration-color:var(--link-color);-webkit-text-decoration-color:var(--link-color);text-decoration-color:var(--link-color)}.underline-reveal{text-decoration-line:none;position:relative}.underline-reveal:after{content:"";background-color:var(--link-color);height:1px;position:absolute;bottom:-1px;left:0;right:0}@supports (color:color-mix(in lab, red, red)){.underline-reveal:after{background-color:color-mix(in srgb, var(--link-color) 46%, transparent)}}.underline-reveal:after{pointer-events:none;transform-origin:0;animation:inline-reveal var(--intro-reveal-duration) var(--intro-reveal-ease) var(--intro-reveal-delay) 1 both;transition:background-color .15s;transform:scaleX(1)}.underline-reveal:hover:after{background-color:var(--link-color)}@keyframes inline-reveal{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.introduction>p:last-child .text-link{white-space:nowrap}.chip{isolation:isolate;color:var(--text-strong);white-space:nowrap;vertical-align:baseline;background:0 0;border-radius:6px;align-items:center;gap:4px;padding:2px 6px;line-height:17px;text-decoration:none;display:inline-flex;position:relative}.chip:before{content:"";z-index:-1;border-radius:inherit;background-color:var(--chip-bg);pointer-events:none;transform-origin:0;animation:inline-reveal var(--intro-reveal-duration) var(--intro-reveal-ease) var(--intro-reveal-delay) 1 both;transition:background-color .15s,box-shadow .15s;position:absolute;inset:0;transform:scaleX(1)}.chip:hover:before{background-color:var(--chip-hover);box-shadow:inset 0 0 0 1px var(--text-strong)}@supports (color:color-mix(in lab, red, red)){.chip:hover:before{box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--text-strong) 8%, transparent)}}.chip[data-view=lattice]{--chip-tone:var(--sage);--chip-bg:var(--sage-wash);--chip-hover:var(--sage-hover)}.chip[data-view=weekly]{--chip-tone:var(--clay);--chip-bg:var(--clay-wash);--chip-hover:var(--clay-hover)}.chip[data-view=vibespace]{--chip-tone:var(--lavender);--chip-bg:var(--lavender-wash);--chip-hover:var(--lavender-hover)}.icon-mask{-webkit-mask:var(--icon) center / contain no-repeat;-webkit-mask:var(--icon) center / contain no-repeat;-webkit-mask:var(--icon) center / contain no-repeat;-webkit-mask:var(--icon) center / contain no-repeat;mask:var(--icon) center / contain no-repeat;background-color:currentColor;flex-shrink:0;display:block}.chip-icon{width:13px;height:13px;color:var(--chip-tone,var(--text-strong))}.footer{border-top:1px solid var(--line);justify-content:space-between;align-items:center;margin-top:40px;padding-top:30px;display:flex}.signature{object-fit:contain;width:64px;height:25px;filter:var(--icon-filter);opacity:.86}.footer-links{align-items:center;gap:6px;display:flex}.footer-links>.t-tt-wrap{align-items:center;line-height:0;display:flex}.footer-links .icon-button{place-items:center;display:grid}.icon-button{width:30px;height:30px;color:var(--text-strong);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:background-color .15s;display:inline-flex}.icon-button img{filter:var(--icon-filter);opacity:.75}.icon-button:hover{background:var(--chip-bg)}.icon-button:hover img{opacity:1}.footer-icon{width:16px;height:16px}.email-button .gmail-icon{filter:none;opacity:1;width:16px;height:16px}.social-icon{opacity:.75}.icon-button:hover .social-icon{opacity:1}.footer-divider{background:var(--line);width:1px;height:12px;margin:0 4px}.site-preferences{flex-shrink:0;align-items:center;gap:6px;display:flex}.site-preferences>.t-tt-wrap{align-items:center;line-height:0;display:flex}.language-toggle{font-size:12px;font-weight:500;line-height:1}.language-toggle>span{opacity:.75}.language-toggle:hover>span{opacity:1}.theme-toggle{place-items:center;display:inline-grid}.theme-toggle .icon-mask{grid-area:1/1;width:16px;height:16px;transition:opacity .18s,transform .18s}.theme-sun,.theme-moon{color:var(--text-strong);opacity:.75}.theme-moon{transform:rotate(-25deg)scale(.75);opacity:0!important}html[data-theme=dark] .theme-sun{transform:rotate(25deg)scale(.75);opacity:0!important}html[data-theme=dark] .theme-moon{transform:rotate(0)scale(1);opacity:.75!important}.t-tt-wrap{display:inline-block;position:relative}.t-tt{transform:translate(-50%, 0) scale(var(--tt-scale));transform-origin:50% 100%;background:var(--tt-bg);color:var(--tt-fg);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--tt-out-dur) var(--tt-out-ease), transform var(--tt-out-dur) var(--tt-out-ease);border-radius:8px;padding:8px 12px;position:absolute;bottom:calc(100% + 8px);left:50%;box-shadow:0 0 0 1px #0000000f,0 2px 6px #0000000d,0 4px 42px #0000000f}.t-tt-wrap:hover .t-tt,.t-tt-trigger:focus-visible+.t-tt{opacity:1;transition-duration:var(--tt-in-dur);transition-timing-function:var(--tt-in-ease);transition-delay:var(--tt-delay);transform:translate(-50%)scale(1)}.t-tt{z-index:2;letter-spacing:0;font-size:11px;font-weight:400;line-height:1.5}.identity-wrap .t-tt{transform:scale(var(--tt-scale));transform-origin:0 100%;left:0}.identity-wrap:hover .t-tt,.identity-wrap .t-tt-trigger:focus-visible+.t-tt{transform:scale(1)}.t-tt-align-end .t-tt{transform:scale(var(--tt-scale));transform-origin:100% 100%;left:auto;right:0}.t-tt-align-end:hover .t-tt,.t-tt-align-end .t-tt-trigger:focus-visible+.t-tt{transform:scale(1)}.detail-dialog{border:1px solid var(--line);width:min(460px,100vw - 40px);max-height:calc(100dvh - 48px);color:var(--text);background:var(--page-bg);border-radius:14px;margin:auto;padding:0;overflow:auto;box-shadow:0 20px 80px #00000014}.detail-dialog::backdrop{background:#00000024}.dialog-close{position:absolute;top:12px;right:12px}.dialog-content{padding:36px}.dialog-eyebrow{color:var(--text-quiet);letter-spacing:.025em;margin-bottom:12px;font-size:11px}.dialog-content h2{color:var(--text-strong);letter-spacing:-.025em;margin:0 0 20px;font-size:20px;font-weight:500;line-height:1.4}.dialog-copy p{margin:0 0 16px}.dialog-copy p:last-child{margin-bottom:0}.dialog-copy a{color:var(--accent);text-underline-offset:3px;text-decoration-line:underline}.project-links{flex-wrap:wrap;gap:10px 20px;display:flex}.project-links .project-reference{margin:0}.project-reference a{align-items:center;gap:6px;display:inline-flex}.project-reference+.project-reference a{color:var(--text)}.project-link-icon{object-fit:contain;flex-shrink:0;width:16px;height:16px;display:block}.external-icon{width:13px;height:13px}.dialog-close-icon{width:16px;height:16px}.t-modal{transform-origin:50%;transform:scale(var(--modal-scale));opacity:0;pointer-events:none;transition:transform var(--modal-open-dur) var(--modal-ease), opacity var(--modal-open-dur) var(--modal-ease);will-change:transform, opacity}.t-modal.is-open{opacity:1;pointer-events:auto;transform:scale(1)}.t-modal.is-closing{transform:scale(var(--modal-scale-close));opacity:0;pointer-events:none;transition:transform var(--modal-close-dur) var(--modal-ease), opacity var(--modal-close-dur) var(--modal-ease)}.t-dropdown{transform-origin:0 0;transform:scale(var(--dropdown-pre-scale));opacity:0;pointer-events:none;transition:transform var(--dropdown-open-dur) var(--dropdown-ease), opacity var(--dropdown-open-dur) var(--dropdown-ease);will-change:transform, opacity}.t-dropdown[data-origin=top-right]{transform-origin:100% 0}.t-dropdown[data-origin=top-center]{transform-origin:top}.t-dropdown[data-origin=bottom-left]{transform-origin:0 100%}.t-dropdown[data-origin=bottom-center]{transform-origin:bottom}.t-dropdown[data-origin=bottom-right]{transform-origin:100% 100%}.t-dropdown.is-open{opacity:1;pointer-events:auto;transform:scale(1)}.t-dropdown.is-closing{transform:scale(var(--dropdown-closing-scale));opacity:0;pointer-events:none;transition:transform var(--dropdown-close-dur) var(--dropdown-ease), opacity var(--dropdown-close-dur) var(--dropdown-ease)}@media (max-width:600px){body{font-size:15px;line-height:1.7}.page{padding:110px 0 40px}.identity{margin-bottom:28px}.identity-orbit,.orbit-navigation{min-height:44px}.orbit-trigger{min-width:44px;min-height:44px}.orbit-node{min-height:44px}.introduction{gap:32px}.footer{margin-top:34px;padding-top:24px}.footer-links,.site-preferences{gap:2px}.footer-home>span{display:none}.icon-button{width:34px;height:34px}.chip{font-size:14px}.t-tt{display:none}.dialog-content{padding:32px 26px}}@media (hover:none){.t-tt{display:none}}@media (pointer:coarse){.identity-orbit,.orbit-navigation{min-height:44px}.orbit-trigger{min-width:44px;min-height:44px}.orbit-node{min-height:44px}}@media (prefers-reduced-motion:reduce){.name-sweep{color:var(--text-strong);-webkit-text-fill-color:var(--text-strong);background-image:none;animation:none}.underline-reveal:after,.chip:before{animation:none;transform:scaleX(1)}.t-tt,.t-modal,.t-dropdown,.orbit-node,.orbit-mark,.orbit-label{transition:none!important}*,:before,:after{transition-duration:0s!important;animation-duration:0s!important}}.github-activity{margin-top:40px}.github-activity-heading{justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:14px;font-size:12px;display:flex}.github-activity-heading h2{color:var(--text-strong);font-size:inherit;margin:0;font-weight:500}.github-activity-heading a{color:var(--text-quiet);white-space:nowrap;text-decoration:none}.github-activity-heading a:hover{color:var(--accent)}.github-activity-months,.github-activity-grid{column-gap:2px;display:grid}.github-activity-months{color:var(--text-quiet);margin-bottom:6px;font-size:11px}.github-activity-grid{grid-template-rows:repeat(7,auto);row-gap:2px}.github-activity-day{aspect-ratio:1;background:#eeeeec;border-radius:2px}.github-activity-day[data-level="1"]{background:#d6e5ee}.github-activity-day[data-level="2"]{background:#accad9}.github-activity-day[data-level="3"]{background:#7ba5bc}.github-activity-day[data-level="4"]{background:#4b7b96}html[data-theme=dark] .github-activity-day{background:#303230}html[data-theme=dark] .github-activity-day[data-level="1"]{background:#344e5c}html[data-theme=dark] .github-activity-day[data-level="2"]{background:#476c80}html[data-theme=dark] .github-activity-day[data-level="3"]{background:#628fa8}html[data-theme=dark] .github-activity-day[data-level="4"]{background:#8cb9cd}.github-activity-caption{color:var(--text-quiet);margin:9px 0 0;font-size:11px}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}
