*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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{text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-16{height:4rem}.h-24{height:6rem}.min-h-screen{min-height:100vh}.w-24{width:6rem}.w-40{width:10rem}.w-full{width:100%}.max-w-\[1600px\]{max-width:1600px}.max-w-sm{max-width:24rem}.animate-fadeUp{animation:fadeUp .4s ease-out}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-\[color\:var\(--line\)\]{border-color:var(--line)}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.bg-\[color\:var\(--line\)\]{background-color:var(--line)}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pt-2{padding-top:.5rem}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,SF Mono,ui-monospace,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-\[color\:var\(--brand\)\]{color:var(--brand)}.text-\[color\:var\(--ink-2\)\]{color:var(--ink-2)}.text-\[color\:var\(--ink-3\)\]{color:var(--ink-3)}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.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)}:root{color-scheme:light;--bg:#ffffff;--card:#ffffff;--ink:#111111;--ink-2:#5f5f5f;--ink-3:#8e8e8e;--line:#efefef;--brand:#e60023;--brand-hover:#ad081b}*{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,html{background:var(--bg);color:var(--ink);font-feature-settings:"cv02","cv03","cv04","cv11"}.topbar{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.92);backdrop-filter:saturate(140%) blur(10px);border-bottom:1px solid var(--line)}@media (min-width:1024px){.masonry{-moz-column-count:3;column-count:3}}@media (min-width:1400px){.masonry{-moz-column-count:4;column-count:4}}.pin{-moz-column-break-inside:avoid;break-inside:avoid;display:block;margin-bottom:16px;padding:18px 18px 16px;background:var(--card);border:1px solid var(--line);border-radius:8px;transition:box-shadow .15s ease,transform .15s ease,border-color .15s ease;position:relative}.pin:hover{box-shadow:0 6px 22px -6px rgba(0,0,0,.12);border-color:#dedede}.pin-accent{border-top:3px solid var(--brand);border-top-left-radius:8px;border-top-right-radius:8px}.pin-label{font-size:11px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.09em;margin-bottom:8px;display:flex;align-items:center;gap:8px}.pin-value{font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-size:30px;font-weight:700;color:var(--ink);line-height:1.1}.pin-value small{font-size:15px;font-weight:500;color:var(--ink-3);margin-left:4px}.pin-sub{font-size:12px;color:var(--ink-2);margin-top:6px}.bar{width:100%;height:4px;border-radius:2px;background:#f1f1f1;overflow:hidden;margin-top:12px}.bar>i{display:block;height:100%;background:var(--brand);border-radius:inherit;transition:width .5s ease}.bar>i.warn{background:#f59e0b}.bar>i.ok{background:#059669}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:500;background:#f4f4f4;color:var(--ink-2);border:1px solid var(--line)}.chip-ok{background:#ecfdf5;color:#047857;border-color:#a7f3d0}.chip-warn{background:#fffbeb;color:#b45309;border-color:#fde68a}.chip-err{background:#fef2f2;color:#b91c1c;border-color:#fecaca}.dot{display:inline-block;width:8px;height:8px}.btn,.dot{border-radius:999px}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;background:#efefef;color:var(--ink);border:none;cursor:pointer;transition:background .15s ease}.btn:hover{background:#e2e2e2}.btn-primary{background:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-hover)}.btn-ghost{background:transparent}.btn-ghost:hover{background:#f2f2f2}.btn:disabled{opacity:.5;cursor:not-allowed}.input{width:100%;padding:12px 16px;border-radius:999px;background:#efefef;border:2px solid transparent;color:var(--ink);font-size:14px;outline:none;transition:all .12s}.input:focus{border-color:var(--brand);background:#fff}.mini-table{width:100%;font-size:13px}.mini-table td{padding:8px 0;border-top:1px solid var(--line)}.mini-table tr:first-child td{border-top:none}.mini-table td.name{color:var(--ink);font-weight:500}.mini-table td.ver{color:var(--ink-2);font-family:ui-monospace,SF Mono,JetBrains Mono,monospace;font-size:11px;text-align:right}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.animate-fadeUp{animation:fadeUp .35s ease-out both}@keyframes pulse2{0%,to{opacity:1}50%{opacity:.35}}.animate-pulse2{animation:pulse2 1.6s ease-in-out infinite}a{color:inherit;text-decoration:none}.site-footer{padding:20px 16px 28px;text-align:center;font-size:12px;line-height:1.9;border-top:1px solid var(--line);margin-top:40px;background:transparent}.site-footer,.site-footer a{color:var(--ink-3)}.site-footer a:hover{color:var(--brand)}.home-topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.85);backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid var(--line)}.home-topbar-inner{max-width:1400px;margin:0 auto;padding:0 24px;height:64px;justify-content:space-between}.home-brand,.home-topbar-inner{display:flex;align-items:center}.home-brand{gap:10px;font-size:17px;font-weight:700;letter-spacing:-.01em}.home-nav{display:flex;gap:6px}.home-nav a{padding:8px 14px;border-radius:999px;font-size:14px;color:var(--ink-2);transition:background .15s,color .15s}.home-nav a:hover{background:#f5f5f5;color:var(--ink)}.home-main{max-width:1400px;margin:0 auto;padding:0 24px 60px}.home-hero{padding:80px 0 60px;text-align:center}.home-title{font-size:clamp(48px,8vw,80px);font-weight:800;letter-spacing:-.03em;line-height:1}.home-section{margin-top:48px}.home-section-head{display:flex;align-items:baseline;gap:12px;margin-bottom:20px;padding-bottom:12px;border-bottom:1px solid var(--line)}.home-section-head h2{font-size:22px;font-weight:700;letter-spacing:-.01em}.home-section-sub{font-size:13px;color:var(--ink-3)}.masonry{-moz-column-count:1;column-count:1;-moz-column-gap:16px;column-gap:16px}@media (min-width:640px){.masonry{-moz-column-count:2;column-count:2}}@media (min-width:900px){.masonry{-moz-column-count:3;column-count:3}}@media (min-width:1200px){.masonry{-moz-column-count:4;column-count:4}}.masonry>*{-moz-column-break-inside:avoid;break-inside:avoid;margin-bottom:16px;display:block}.project-card{padding:0;overflow:hidden;transition:transform .15s ease,box-shadow .15s ease;cursor:pointer}.project-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px -8px rgba(0,0,0,.12)}.project-accent{height:6px;width:100%}.project-body{padding:16px 18px 18px}.project-title{font-size:15px;font-weight:700;letter-spacing:-.01em;margin-bottom:6px}.project-desc{font-size:13px;color:var(--ink-2);line-height:1.55;margin-bottom:12px}.project-tags{display:flex;flex-wrap:wrap;gap:6px}.project-tags .chip{font-size:11px;padding:2px 8px;background:#f5f5f5;color:var(--ink-2);border-radius:999px}.home-pin-skeleton{padding:16px}.skel-bar{border-radius:6px;margin-bottom:10px}.skel-bar,.skel-line{background:linear-gradient(90deg,#f0f0f0 25%,#f8f8f8 50%,#f0f0f0 75%);background-size:200% 100%;animation:skel 1.6s ease-in-out infinite}.skel-line{height:10px;border-radius:4px}.skel-line.w-40{width:60%}.skel-line.w-24{width:35%}@keyframes skel{0%{background-position:200% 0}to{background-position:-200% 0}}.imggen-select{width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:10px;font-size:13px;background:#fff;cursor:pointer}.imggen-select:focus{outline:2px solid var(--brand);outline-offset:-1px}@media (max-width:800px){.imggen-grid{grid-template-columns:1fr!important}}.loader-dots{display:flex;gap:8px}.loader-dots span{width:10px;height:10px;border-radius:50%;background:var(--brand);animation:dot-bounce 1.4s ease-in-out infinite both}.loader-dots span:first-child{animation-delay:-.32s}.loader-dots span:nth-child(2){animation-delay:-.16s}@keyframes dot-bounce{0%,80%,to{transform:scale(.6);opacity:.5}40%{transform:scale(1);opacity:1}}.btn-ghost{background:#fff;color:var(--ink-2);border:1px solid var(--line)}.btn-ghost:hover{background:#f5f5f5}.tool-card{padding:0;overflow:hidden;transition:transform .15s,box-shadow .15s;cursor:pointer;display:block}.tool-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px -8px rgba(0,0,0,.12)}.tool-accent{height:100px;display:flex;align-items:flex-end;padding:14px 16px}.tool-accent-label{font-size:11px;font-weight:600;color:rgba(255,255,255,.95);letter-spacing:.05em;text-transform:uppercase;padding:3px 10px;background:rgba(255,255,255,.2);border-radius:999px;backdrop-filter:blur(6px)}.tool-body{padding:14px 16px 16px}.tool-title{font-size:15px;font-weight:700;letter-spacing:-.01em;margin-bottom:4px}.tool-desc{font-size:12.5px;color:var(--ink-2);line-height:1.5;margin-bottom:10px}.tool-tags{display:flex;flex-wrap:wrap;gap:4px}.tool-tags .chip{font-size:10.5px;padding:2px 8px;background:#f5f5f5;color:var(--ink-2);border-radius:999px}.gen-pin{padding:0;overflow:hidden;position:relative;transition:transform .15s,box-shadow .15s}.gen-pin:hover{transform:translateY(-2px);box-shadow:0 8px 24px -8px rgba(0,0,0,.15)}.gen-pin img{transition:transform .3s ease}.gen-pin:hover img{transform:scale(1.03)}.gen-pin-meta{position:absolute;left:0;right:0;bottom:0;padding:24px 12px 10px;background:linear-gradient(0deg,rgba(0,0,0,.85) 0,transparent);color:#fff;opacity:0;transition:opacity .2s;pointer-events:none}.gen-pin:hover .gen-pin-meta{opacity:1}.gen-pin-prompt{font-size:12px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.gen-pin-info{margin-top:6px;font-size:10.5px;opacity:.75;display:flex;gap:6px}.lightbox{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.92);display:flex;align-items:center;justify-content:center;padding:40px 60px;animation:lb-fade .2s ease-out;cursor:zoom-out}@keyframes lb-fade{0%{opacity:0}to{opacity:1}}.lightbox-inner{max-width:100%;max-height:100%;display:flex;flex-direction:column;align-items:center;gap:12px;cursor:default}.lightbox-img{max-width:100%;max-height:calc(100vh - 160px);-o-object-fit:contain;object-fit:contain;border-radius:6px;box-shadow:0 20px 60px rgba(0,0,0,.5);animation:lb-zoom .18s ease-out}@keyframes lb-zoom{0%{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}.lightbox-caption{color:#eaeaea;max-width:720px;width:100%;font-size:13px;line-height:1.6}.lightbox-prompt{color:#fff;margin-bottom:6px;word-break:break-word}.lightbox-info{display:flex;gap:8px;flex-wrap:wrap;color:rgba(255,255,255,.65);font-size:12px}.lightbox-close,.lightbox-nav{position:absolute;background:rgba(255,255,255,.1);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;backdrop-filter:blur(6px)}.lightbox-close:hover,.lightbox-nav:hover{background:rgba(255,255,255,.2)}.lightbox-close{top:20px;right:20px;width:40px;height:40px;font-size:22px}.lightbox-close,.lightbox-nav{border-radius:50%;line-height:1}.lightbox-nav{top:50%;transform:translateY(-50%);width:48px;height:48px;font-size:28px}.lightbox-nav:hover{transform:translateY(-50%) scale(1.08)}.lightbox-prev{left:20px}.lightbox-next{right:20px}@media (max-width:640px){.lightbox{padding:20px 12px}.lightbox-nav{width:40px;height:40px;font-size:22px}.lightbox-prev{left:8px}.lightbox-next{right:8px}}@media (min-width:768px){.md\:flex{display:flex}}