:root{--font-sans:"Inter","Noto Sans TC",system-ui,-apple-system,"PingFang TC","Microsoft JhengHei",sans-serif;--font-disp:"Fraunces","Noto Serif TC",Georgia,serif;--font-mono:"IBM Plex Mono",ui-monospace,"SFMono-Regular",monospace;--fs-xs:11px;--fs-sm:13px;--fs-base:15px;--fs-md:16px;--fs-lg:20px;--fs-xl:26px;--fs-2xl:34px;--fs-3xl:52px;--lh-tight:1.08;--lh-snug:1.4;--lh-body:1.6;--lh-lyric:2;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:20px;--s-6:24px;--s-8:32px;--s-10:40px;--s-12:48px;--s-16:64px;--s-20:80px;--r-sm:7px;--r-md:10px;--r-lg:14px;--r-full:999px;--dur-fast:120ms;--dur:220ms;--ease:cubic-bezier(.4,0,.2,1);--shadow-sm:0 1px 2px rgba(0,0,0,.4);--shadow-md:0 20px 60px -24px rgba(0,0,0,.7);--shadow-lg:0 30px 80px -30px rgba(0,0,0,.8);--bg:#111110;--surface:#171715;--surface-2:#1E1E1B;--stroke:rgba(238,232,220,.09);--stroke-2:rgba(238,232,220,.16);--fg:#EFEBE2;--fg-soft:#C4BFB2;--muted:#8C877A;--faint:#605C52;--primary:#C9A86A;--primary-strong:#B8965A;--primary-fg:#141310;--primary-soft:rgba(201,168,106,.12);--accent:#8FA98C;--destructive:#C97A6A;--focus-ring:rgba(201,168,106,.45)}*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{color-scheme:dark}body,html{font-size:var(--fs-base)}body{font-family:var(--font-sans);line-height:var(--lh-body);color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-disp);font-weight:500;line-height:var(--lh-tight);color:var(--fg);margin-bottom:var(--s-4)}h1{font-size:var(--fs-2xl)}h2{font-size:var(--fs-xl)}h3{font-size:var(--fs-lg)}h4{font-size:var(--fs-md)}p{margin-bottom:var(--s-4)}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}ol,ul{list-style:none}img{max-width:100%;display:block}button{cursor:pointer}button,input,select,textarea{font-family:inherit;font-size:inherit}[hidden]{display:none!important}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.header{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:var(--s-5);padding:var(--s-4) var(--s-8);background:color-mix(in srgb,var(--bg) 82%,transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--stroke)}.header__logo{font-family:var(--font-disp);font-weight:500;font-size:var(--fs-lg);letter-spacing:.04em;color:var(--primary)}.header__nav{display:flex;align-items:center;gap:var(--s-5);margin-left:var(--s-8);flex-wrap:wrap}.header__nav a{color:var(--muted);font-weight:500;font-size:var(--fs-sm);letter-spacing:.02em}.header__nav a:hover{color:var(--fg);text-decoration:none}.header__spacer{flex:1 1}.header__badges{display:flex;align-items:center;gap:var(--s-4)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);padding:10px 18px;border:1px solid var(--stroke-2);border-radius:var(--r-full);font-weight:500;letter-spacing:.02em;text-align:center;background:transparent;color:var(--fg-soft);transition:all var(--dur)}.btn:hover{border-color:var(--muted);color:var(--fg);text-decoration:none}.btn--primary{background:var(--primary);color:var(--primary-fg);border-color:var(--primary)}.btn--primary:hover{background:var(--primary-strong);border-color:var(--primary-strong);color:var(--primary-fg)}.btn--danger{background:var(--destructive)}.btn--danger,.btn--danger:hover{color:var(--primary-fg);border-color:var(--destructive)}.btn--danger:hover{opacity:.9}.btn--block{display:flex;width:100%}.btn--icon{display:inline-flex;align-items:center;justify-content:center;padding:4px 6px;line-height:0}.btn--icon svg{display:block;width:14px;height:14px}.btn:disabled{opacity:.5;cursor:not-allowed}.card{background:var(--surface);border:1px solid var(--stroke);border-radius:var(--r-lg);padding:var(--s-6);margin-bottom:var(--s-4)}.card__title{font-family:var(--font-disp);font-weight:500;margin-bottom:var(--s-2)}.card__meta{font-size:var(--fs-sm);color:var(--muted)}.card__body{white-space:pre-wrap;font-size:var(--fs-base);margin:var(--s-2) 0}.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:var(--r-full);font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:400;letter-spacing:.06em;border:1px solid transparent}.badge--credits{background:var(--primary-soft);color:var(--primary);border-color:var(--primary)}.badge--subscription{background:color-mix(in srgb,var(--accent) 15%,var(--bg));color:var(--accent)}.badge--subscription.badge--inactive{background:var(--surface-2);color:var(--muted)}.badge--ai{background:var(--primary-soft);color:var(--primary);border:1px dashed var(--primary)}.badge--tag{background:var(--surface-2);color:var(--fg-soft);margin-right:4px}.badge--soon{background:var(--primary-soft);color:var(--primary);border:1px dashed var(--primary);font-size:var(--fs-xs)}.field{margin-bottom:var(--s-6)}.field__label{display:block;font-family:var(--font-mono);font-weight:400;font-size:var(--fs-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-bottom:var(--s-3)}.input,.select,.textarea{width:100%;padding:var(--s-3) 0;border:0;border-bottom:1px solid var(--stroke-2);border-radius:0;background:transparent;color:var(--fg);transition:border-color var(--dur)}.input::placeholder,.textarea::placeholder{color:var(--faint)}.input:focus,.select:focus,.textarea:focus{outline:none;border-bottom-color:var(--primary)}select optgroup,select option{background-color:var(--surface);color:var(--fg)}select option:disabled{color:var(--faint)}.textarea{min-height:120px;resize:vertical;line-height:1.7}.field__hint{font-family:var(--font-sans);font-size:var(--fs-xs);letter-spacing:0;text-transform:none;color:var(--faint);margin-top:var(--s-2)}.state{padding:var(--s-10) var(--s-6);text-align:center;color:var(--muted)}.state--error{color:var(--destructive)}.spinner{display:inline-block;width:28px;height:28px;border:3px solid var(--stroke-2);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite;margin-bottom:var(--s-2)}@keyframes spin{to{transform:rotate(1turn)}}.footer{padding:var(--s-6) var(--s-4);text-align:center;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em;color:var(--faint);border-top:1px solid var(--stroke);background:transparent}.page{min-height:100vh;display:flex;flex-direction:column}.page__main{flex:1 1;width:100%;max-width:1180px;margin:0 auto;padding:var(--s-8) var(--s-6)}.page__main--wide{max-width:1440px}.page__main--bleed{max-width:none;margin:0;padding:0;display:flex;min-height:0}@media (min-width:1024px){.page:has(.page__main--bleed){height:100vh;overflow:hidden}.page:has(.page__main--bleed) .footer{display:none}}.studio{display:grid;grid-template-columns:320px minmax(0,1fr) 300px;gap:var(--s-8);align-items:start}.studio__col{background:var(--surface);border:1px solid var(--stroke);border-radius:var(--r-lg);padding:var(--s-5)}.studio__col--center{min-height:420px}@media (max-width:980px){.studio{grid-template-columns:1fr}}.studio--create{grid-template-columns:1fr;gap:0;align-items:stretch;flex:1 1;min-height:0;width:100%}.studio--create>.studio__col{background:var(--surface);border:0;border-bottom:1px solid var(--stroke);border-radius:0;box-shadow:none}.studio--create>.studio__col:last-child{border-bottom:0}@media (min-width:1024px){.studio--create{grid-template-columns:repeat(4,1fr)}.studio--create>.studio__col{border-bottom:0;border-right:1px solid var(--stroke);overflow-y:auto;min-height:0}.studio--create>.studio__col:last-child{border-right:0}.studio--create>.studio__col--center{min-height:0}}.studio--create .studio__list{max-height:none;overflow:visible}.studio__list{display:flex;flex-direction:column;gap:var(--s-3);max-height:72vh;overflow-y:auto}.list-row{border:1px solid var(--stroke);border-radius:var(--r-md);padding:var(--s-3);cursor:pointer;background:var(--surface-2)}.list-row:hover{border-color:var(--stroke-2)}.list-row--active{border-color:var(--primary)}.list-row__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2)}.list-row__topic{font-weight:600;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.list-row__titles{min-width:0;flex:1 1}.list-row__sub{margin-top:2px;font-size:var(--fs-xs);font-weight:400;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-row__dot{flex:none;width:8px;height:8px;border-radius:var(--r-full);align-self:center}.list-row__dot--run{background:var(--destructive)}.list-row__dot--ok{background:var(--accent)}.list-row__meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);margin-top:var(--s-2);font-size:var(--fs-sm);color:var(--fg-soft)}.list-row__secs,.list-row__time{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--muted)}.list-row__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2);margin-top:var(--s-2)}.auth-shell{max-width:420px;margin:var(--s-16) auto}.route-list{margin-top:var(--s-4)}.route-list li{display:flex;justify-content:space-between;gap:var(--s-4);padding:var(--s-2) 0;border-bottom:1px dashed var(--stroke);font-size:var(--fs-sm);color:var(--fg-soft)}.route-list li:last-child{border-bottom:none}.route-list li span{font-family:var(--font-mono);color:var(--faint);font-size:var(--fs-xs);letter-spacing:.04em}.lyrics-block{white-space:pre-wrap;font-family:var(--font-disp);font-size:var(--fs-md);line-height:var(--lh-lyric);color:var(--fg)}.stanza{margin-bottom:var(--s-6)}.stanza__label{display:block;font-family:var(--font-mono);font-weight:400;font-size:var(--fs-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--faint);margin-bottom:var(--s-2)}.stanza--chorus{padding-left:var(--s-6);border-left:1px solid var(--primary)}.stanza--chorus .stanza__label{color:var(--primary)}.song-title{font-family:var(--font-disp);font-weight:400;font-size:var(--fs-2xl);line-height:var(--lh-tight);color:var(--fg);margin-bottom:var(--s-4)}.song-title--sm{font-size:var(--fs-lg)}.lyrics-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);margin-bottom:var(--s-2)}.lyrics-head__label{font-family:var(--font-mono);font-weight:400;font-size:var(--fs-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--faint)}.style-card{border:1px solid var(--stroke);border-radius:var(--r-lg);padding:var(--s-4);margin-bottom:var(--s-4);background:var(--surface-2)}.style-card__head{display:flex;align-items:center;gap:var(--s-2);margin-bottom:var(--s-2);flex-wrap:wrap}.style-card__name{font-weight:600}.badge-count{margin-left:auto;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em;color:var(--muted);background:var(--bg);border:1px solid var(--stroke);border-radius:var(--r-full);padding:2px 10px}.style-card__tags{font-size:var(--fs-sm);line-height:1.8;word-break:break-word;color:var(--fg-soft);margin-bottom:0}.style-card__exclude{margin-top:var(--s-2);font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.03em;color:var(--muted);margin-bottom:0}.style-card__exclude b{color:var(--fg-soft);font-weight:500}.pill-stat{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em;color:var(--muted);margin-right:var(--s-4)}.pill-stat--ok{color:var(--accent)}.pill-stat--bad{color:var(--destructive)}.pill-stat--accent{color:var(--primary)}.btn--mini{padding:4px 12px;font-size:var(--fs-xs);font-family:var(--font-mono);letter-spacing:.04em;white-space:nowrap}.lib-item{padding:0;overflow:hidden}.lib-item__summary{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;padding:var(--s-4) var(--s-6);cursor:pointer;list-style:none}.lib-item__summary::-webkit-details-marker{display:none}.lib-item__summary::marker{content:""}.lib-item__time{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em;color:var(--muted)}.lib-item__topic{font-weight:600;color:var(--fg)}.lib-item__body{padding:var(--s-4) var(--s-6) var(--s-6);border-top:1px solid var(--stroke)}.lib-item__toggle{margin-top:var(--s-4);display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap}.tabs{display:flex;gap:var(--s-2);margin-bottom:var(--s-4)}.tab{flex:1 1;padding:8px 0;border:1px solid var(--stroke-2);border-radius:var(--r-full);background:var(--surface-2);color:var(--fg-soft);font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.tab:hover{color:var(--fg);border-color:var(--muted)}.tab--active{background:var(--primary);border-color:var(--primary);color:var(--primary-fg);font-weight:600}.err-note{color:var(--destructive);font-weight:600;margin-top:var(--s-4)}.out-head{display:flex;align-items:center;gap:var(--s-4);margin-bottom:var(--s-4);flex-wrap:wrap}