@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-latin-ext-400-normal.C5H60-Va.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-400-normal.RBey6euL.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-cyrillic-400-normal.DZqxrq2p.woff2)format("woff2"),url(/_astro/ibm-plex-sans-cyrillic-400-normal.BTotfTJu.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-sans-latin-ext-600-normal.DOrvGEcy.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-600-normal.DIrixKbi.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-sans-cyrillic-600-normal.71GNu3SW.woff2)format("woff2"),url(/_astro/ibm-plex-sans-cyrillic-600-normal.BGq0mW3O.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}:root{color-scheme:dark;--bg:#1c0d1a;--bg-2:#261224;--fg:#f6ecf1;--muted:#b39fac;--line:#ffffff17;--pink:#ff2d78;--coral:#ff6a55;--gold:#ffc56b;--lyre:linear-gradient(135deg, var(--pink), var(--coral) 55%, var(--gold));--sans:"IBM Plex Sans", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}html{background:var(--bg)}body{color:var(--fg);font:400 1.0625rem/1.6 var(--sans);-webkit-font-smoothing:antialiased;margin:0}a{color:inherit}img{display:block}::selection{background:var(--pink);color:#fff}.wrap{max-width:72rem;margin:0 auto;padding:0 1.5rem}.label{font:.8rem var(--mono);color:var(--muted);margin:0 0 1.25rem}.top{align-items:center;gap:1.5rem;padding:1.4rem 0;display:flex}.brand{align-items:center;gap:.6rem;margin-right:auto;font-size:1.1rem;font-weight:600;text-decoration:none;display:flex}.brand img{border-radius:8px}.top a:not(.brand){font:.85rem var(--mono);color:var(--muted);text-decoration:none}.top a:not(.brand):hover{color:var(--fg)}.hero{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);align-items:center;gap:3rem;padding:4rem 0 6rem;display:grid}.hero h1{letter-spacing:-.035em;margin:0 0 1.75rem;font-size:clamp(3rem,7.5vw,6rem);font-weight:600;line-height:.98}.hero h1 span{color:var(--coral)}.hero p{color:var(--muted);max-width:30rem;margin:0 0 1.5rem;font-size:1.25rem;line-height:1.5}.hero p b{color:var(--fg);font-weight:500}.stage-count{font:.85rem var(--mono);color:var(--muted);flex-wrap:wrap;gap:1.25rem;display:flex}.stage-count i{vertical-align:.05em;border-radius:50%;width:8px;height:8px;margin-right:.45rem;display:inline-block}.lyre{aspect-ratio:1;border-radius:22%;justify-self:end;width:min(26rem,100%);overflow:hidden;box-shadow:0 40px 90px -40px #ff2d788c}.lyre img{object-fit:cover;width:100%;height:100%}.section{padding:1rem 0 5rem}.section h2{letter-spacing:-.02em;margin:0 0 2rem;font-size:clamp(1.8rem,3.5vw,2.6rem);font-weight:600;line-height:1.1}.app-card{--w-bg:#0b1517;--w-surface:#132124;--w-surface-2:#18292c;--w-fg:#eef3f2;--w-muted:#8fa3a3;--w-line:#22383b;--w-accent:#ff7a59;--w-warning:#f5b841;--w-success:#3ccf91;background:var(--w-surface);color:var(--w-fg);border:1px solid var(--w-line);border-radius:28px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:3rem;padding:3rem;display:grid}.app-card .icon{border-radius:22%;margin-bottom:1.5rem;box-shadow:0 16px 40px -18px #000}.app-card h3{letter-spacing:-.02em;margin:0 0 1rem;font-size:clamp(1.7rem,3vw,2.3rem);font-weight:600;line-height:1.12}.app-card h3 small{font:.85rem var(--mono);letter-spacing:0;color:var(--w-accent);margin-bottom:.6rem;display:block}.app-card p{color:var(--w-muted);max-width:28rem;margin:0 0 1.75rem}.app-card .links{flex-wrap:wrap;align-items:center;gap:1.5rem;display:flex}.app-card .go{background:var(--w-fg);color:var(--w-bg);border-radius:10px;padding:.7rem 1.2rem;font-weight:500;text-decoration:none}.app-card .go:hover{background:var(--w-accent)}.app-card .meta{font:.8rem var(--mono);color:var(--w-muted)}.phone{border:1px solid var(--w-line);background:var(--w-bg);width:100%;max-width:26rem;font-family:var(--sans);border-radius:22px;justify-self:end;padding:.5rem 0 .75rem}.phone-bar{border-bottom:1px solid #ffffff0f;justify-content:space-between;align-items:baseline;padding:.55rem 1.1rem .65rem;display:flex}.phone-bar b{font-size:1.05rem;font-weight:600}.phone-bar span{font:.72rem var(--mono);color:var(--w-muted)}.row{border-bottom:1px solid #ffffff0f;grid-template-columns:10px 1fr;gap:.75rem;padding:.75rem 1.1rem;display:grid}.row:last-child{border-bottom:0}.dot{border-radius:50%;width:9px;height:9px;margin-top:.4rem}.dot.needs{background:var(--w-warning)}.dot.done{background:var(--w-success)}.row-head{justify-content:space-between;align-items:baseline;gap:.5rem;display:flex}.row-head b{white-space:nowrap;text-overflow:ellipsis;font-size:.93rem;font-weight:500;overflow:hidden}.row-head span{font:.68rem var(--mono);color:var(--w-muted);flex:none}.row p{color:var(--w-fg);opacity:.85;max-width:none;margin:.1rem 0 0;font-size:.86rem;line-height:1.4}.row .meta{font:.72rem var(--mono);color:var(--w-muted);margin-top:.15rem}.row .acts{align-items:center;gap:.45rem;margin-top:.55rem;font-size:.8rem;display:flex}.row .acts span{background:var(--w-surface-2);border-radius:7px;padding:.3rem .8rem}.row .acts .ok{background:var(--w-fg);color:var(--w-bg);font-weight:500}.row .acts small{font:.68rem var(--mono);color:var(--w-warning);margin-left:auto}.row.dim{opacity:.85}.rehearsal{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;display:grid}.slot{border:1px dashed #ffffff2e;border-radius:22px;flex-direction:column;justify-content:space-between;min-height:13rem;padding:1.75rem;display:flex}.slot .q{width:64px;height:64px;font:600 1.6rem var(--sans);color:var(--bg);background:var(--lyre);opacity:.9;border-radius:22%;place-items:center;display:grid}.slot:nth-child(2) .q{filter:hue-rotate(-25deg)}.slot b{margin-top:1.5rem;font-weight:500;display:block}.slot span{color:var(--muted);font-size:.95rem}.contact{background:var(--lyre);color:#22101f;border-radius:28px;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:2rem;margin-bottom:4rem;padding:3.5rem 3rem;display:flex}.contact h2{letter-spacing:-.025em;max-width:16ch;margin:0;font-size:clamp(1.8rem,4vw,3rem);font-weight:600;line-height:1.05}.contact a{font:500 1.1rem var(--mono);border-bottom:2px solid;padding-bottom:.1rem;text-decoration:none}.contact a:hover{color:#fff}.foot{font:.8rem var(--mono);color:var(--muted);justify-content:space-between;gap:1rem;padding:0 0 2.5rem;display:flex}@media (width<=880px){.hero{grid-template-columns:1fr;gap:2.5rem;padding:2rem 0 4rem}.lyre{order:-1;justify-self:start;width:9rem}.app-card{grid-template-columns:1fr;gap:2.5rem;padding:2rem 1.5rem}.phone{justify-self:stretch}.rehearsal{grid-template-columns:1fr}.slot{flex-direction:row;justify-content:start;align-items:center;gap:1.25rem;min-height:auto}.slot b{margin-top:0}.contact{padding:2.5rem 1.5rem}.top a:not(.brand):not(:last-child){display:none}}.section h2.label{font:.8rem var(--mono);letter-spacing:0;color:var(--muted);margin:0 0 1.25rem}.notfound{padding:4rem 0 6rem}.notfound h1{letter-spacing:-.03em;margin:0 0 1rem;font-size:clamp(2.4rem,6vw,4rem);font-weight:600;line-height:1}.notfound p{color:var(--muted);font-size:1.15rem}.top a.lang{border:1px solid var(--line);border-radius:5px;padding:.15rem .5rem}@media (width<=880px){.top a.lang{display:inline}}.langs{font:.85rem var(--mono);position:relative}.langs summary{cursor:pointer;color:var(--muted);border:1px solid var(--line);border-radius:5px;padding:.15rem .55rem;list-style:none}.langs summary::-webkit-details-marker{display:none}.langs summary:after{content:" ▾"}.langs[open] summary,.langs summary:hover{color:var(--fg)}.langs ul{z-index:20;background:var(--bg-2);border:1px solid var(--line);border-radius:8px;min-width:12rem;max-height:70vh;margin:0;padding:.35rem 0;list-style:none;position:absolute;top:calc(100% + .4rem);right:0;overflow:auto;box-shadow:0 18px 40px -20px #000000b3}.top .langs li a{color:var(--muted);padding:.35rem .9rem;display:block}.top .langs li a:hover,.top .langs li a[aria-current]{color:var(--fg);background:#ffffff0d}@media (width<=880px){.top .langs{display:block}}:lang(ja) body{font-family:var(--sans), "Hiragino Sans", "Yu Gothic", "Noto Sans JP", sans-serif}:lang(ko) body{font-family:var(--sans), "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", sans-serif}:lang(zh-Hans) body{font-family:var(--sans), "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif}:lang(zh-Hant) body{font-family:var(--sans), "PingFang TC", "Microsoft JhengHei", "Noto Sans TC", sans-serif}.foot a{color:var(--muted);text-decoration:none}.foot a:hover{color:var(--fg)}.blog-head{max-width:46rem;padding:3rem 0 2rem}.blog-head h1{letter-spacing:-.03em;margin:0 0 1rem;font-size:clamp(2.4rem,6vw,4rem);font-weight:600;line-height:1}.blog-head p{color:var(--muted);margin:0;font-size:1.2rem}.posts{gap:1.25rem;margin:0 0 3rem;padding:0;list-style:none;display:grid}.posts a{background:var(--bg-2);border:1px solid var(--line);border-radius:18px;padding:1.5rem;text-decoration:none;display:block}.posts a.has-cover{grid-template-columns:minmax(0,17rem) minmax(0,1fr);align-items:center;gap:1.5rem;padding:1rem;display:grid}.posts .post-cover{aspect-ratio:16/9;object-fit:cover;border-radius:12px;width:100%;height:auto;display:block}.posts .post-text{padding-right:.5rem;display:block}.posts a:hover{border-color:#ff6a5573}.posts .meta{font:.78rem/1.6 var(--mono);color:var(--muted);margin-bottom:.35rem;display:block}.posts .meta b{color:var(--gold);font-weight:400}.posts h2{letter-spacing:-.015em;margin:0 0 .45rem;font-size:1.45rem;font-weight:600;line-height:1.2}.posts p{color:var(--muted);margin:0}.post{max-width:44rem;margin:0 auto;padding:3rem 0 2rem}.post .crumbs{font:.8rem var(--mono);color:var(--muted);margin:0 0 1rem}.post .crumbs a{color:var(--muted)}.post h1{letter-spacing:-.025em;margin:0 0 1rem;font-size:clamp(2rem,4.5vw,3rem);font-weight:600;line-height:1.1}.post-meta{font:.8rem var(--mono);color:var(--muted);margin:0 0 2.5rem}.post-meta b{color:var(--gold);font-weight:400}.post .cover{border-radius:18px;width:100%;height:auto;margin:0 0 2rem}.prose{font-size:1.08rem;line-height:1.75}.prose h2{letter-spacing:-.015em;margin:2.75rem 0 .75rem;font-size:1.6rem;font-weight:600;line-height:1.25}.prose h3{margin:2rem 0 .5rem;font-size:1.2rem;font-weight:600}.prose p,.prose li{color:#e3d6dd}.prose a{color:var(--fg);text-decoration-color:var(--pink);text-underline-offset:.2em}.prose a:hover{color:var(--coral)}.prose ul,.prose ol{padding-left:1.3rem}.prose li{margin:.35rem 0}.prose blockquote{border-left:3px solid var(--coral);color:var(--muted);margin:1.5rem 0;padding:.25rem 0 .25rem 1.25rem}.prose code{font:.88em var(--mono);background:#ffffff12;border-radius:4px;padding:.1em .35em}.prose pre{border:1px solid var(--line);font:.85rem/1.6 var(--mono);background:#120811;border-radius:12px;padding:1rem 1.2rem;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;padding:0}.prose img{border-radius:12px;width:auto;max-width:100%;height:auto;max-height:720px;margin:1.5rem auto;display:block}.post-cta{background:#132124;border:1px solid #22383b;border-radius:18px;align-items:center;gap:1.25rem;margin:3.5rem 0 0;padding:1.75rem;display:flex}.post-cta img{border-radius:22%;flex:none}.post-cta h2{margin:0 0 .25rem;font-size:1.15rem}.post-cta p{color:#8fa3a3;margin:0 0 .5rem}.post-cta a{color:#eef3f2}.more-posts{margin:3rem 0 0}.more-posts h2{font:.8rem var(--mono);color:var(--muted);margin:0 0 1rem;font-weight:400}.home-blog{padding:1rem 0 5rem}.home-blog .see-all{font:.85rem var(--mono);color:var(--muted)}@media (width<=700px){.posts a.has-cover{grid-template-columns:1fr;gap:1rem}.post-cta{flex-direction:column;align-items:flex-start}}.blog-featured{background:var(--bg-2);border:1px solid var(--line);border-radius:22px;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:center;gap:2rem;margin:0 0 1.5rem;padding:1rem;text-decoration:none;transition:border-color .15s,transform .15s;display:grid}.blog-featured img{aspect-ratio:16/9;object-fit:cover;border-radius:14px;width:100%;height:auto;display:block}.blog-featured h2{letter-spacing:-.02em;margin:0 0 .75rem;font-size:clamp(1.5rem,3vw,2.1rem);font-weight:600;line-height:1.15}.blog-featured .sum{color:var(--muted);margin:0 0 1rem;font-size:1.05rem}.blog-featured .arrow{font:1.4rem var(--mono);color:var(--coral)}.blog-featured:hover,.blog-grid a:hover{border-color:#ff6a558c;transform:translateY(-2px)}.blog-featured:hover h2,.blog-grid a:hover h3{color:var(--coral)}.blog-featured .meta,.blog-grid .meta{font:.78rem/1.6 var(--mono);color:var(--muted);margin:0 0 .5rem}.blog-featured .meta b,.blog-grid .meta b{color:var(--gold);font-weight:400}.blog-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem;margin:0 0 2.5rem;padding:0;list-style:none;display:grid}.blog-grid a{background:var(--bg-2);border:1px solid var(--line);border-radius:18px;flex-direction:column;height:100%;text-decoration:none;transition:border-color .15s,transform .15s;display:flex;overflow:hidden}.blog-grid img,.blog-grid .no-cover{aspect-ratio:16/9;object-fit:cover;width:100%;height:auto;display:block}.blog-grid .no-cover{background:linear-gradient(135deg,#ff2d7840,#ffc56b26)}.blog-grid a>div{padding:1.1rem 1.2rem 1.3rem}.blog-grid h3{letter-spacing:-.01em;margin:0 0 .5rem;font-size:1.15rem;font-weight:600;line-height:1.25}.blog-grid .sum{color:var(--muted);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;font-size:.95rem;display:-webkit-box;overflow:hidden}.pager{font:.85rem var(--mono);justify-content:center;align-items:center;gap:1.25rem;margin:1rem 0 2rem;display:flex}.pager a,.pager span{color:var(--muted);text-decoration:none}.pager a:hover{color:var(--fg)}.pager .off{opacity:.35}.pager ol{gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.pager ol a,.pager ol span{border:1px solid var(--line);border-radius:8px;place-items:center;min-width:2rem;height:2rem;display:inline-grid}.pager ol span[aria-current]{color:var(--bg);background:var(--coral);border-color:var(--coral)}.rss{font:.8rem var(--mono);margin:0 0 1rem}.rss a{color:var(--muted)}@media (width<=960px){.blog-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=700px){.blog-featured{grid-template-columns:1fr;gap:1rem}.blog-grid{grid-template-columns:1fr}}
