@import "https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;700&display=swap";*{box-sizing:border-box}html,body{margin:0;padding:0}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-1)}::-webkit-scrollbar-thumb{background:var(--bg-5);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--tx-3)}::-webkit-scrollbar-corner{background:var(--bg-1)}body{color:#eceaf0;-webkit-font-smoothing:antialiased;background:#0e0c12;font-family:Noto Sans TC,system-ui,sans-serif;font-size:14px}button{cursor:pointer;font-family:inherit}input,textarea,select{font-family:inherit}:root{--bg-0:#0a090d;--bg-1:#0e0c12;--bg-2:#15131b;--bg-3:#1b1822;--bg-4:#221e2c;--bg-5:#2a2536;--br:#ffffff12;--br-2:#ffffff21;--tx-1:#eceaf0;--tx-2:#aaa5b4;--tx-3:#7e778d;--ac:#a370ff;--ac-soft:#a370ff29;--ac-line:#a370ff59;--dn:#ff3c78;--ok:#64e9d6}.app{background:var(--bg-1);grid-template-rows:56px 1fr;height:100vh;display:grid}.topbar{background:var(--bg-0);border-bottom:1px solid var(--br);align-items:center;gap:16px;padding:0 20px;display:flex}.brand{align-items:center;gap:10px;width:220px;padding-right:16px;display:flex}.brand-mark{color:#fff;background:linear-gradient(135deg,#a370ff,#f465dd);border-radius:8px;place-items:center;width:28px;height:28px;font-size:13px;font-weight:700;display:grid}.brand-name{letter-spacing:.2px;font-size:14px;font-weight:700}.brand-name span{color:var(--tx-3);margin-left:6px;font-size:12px;font-weight:500}.search{background:var(--bg-3);border:1px solid var(--br);border-radius:10px;flex:1;align-items:center;gap:8px;max-width:560px;height:36px;padding:0 12px;transition:all .15s;display:flex}.search:focus-within{border-color:var(--ac);background:#1f1b28}.search input{color:var(--tx-1);background:0 0;border:0;outline:0;flex:1;font-size:13px}.search input::placeholder{color:var(--tx-3)}.search kbd{color:var(--tx-3);border:1px solid var(--br);background:#ffffff0d;border-radius:4px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:11px}.spacer{flex:1}.row{align-items:center;gap:8px;display:flex}.btn{border:1px solid var(--br);background:var(--bg-3);height:36px;color:var(--tx-1);white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:0 14px;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.btn:hover{background:var(--bg-4);border-color:var(--br-2)}.btn:active{transform:scale(.98)}.btn.primary{background:var(--ac);border-color:var(--ac);color:#fff;font-weight:600}.btn.primary:hover{background:#b385ff;border-color:#b385ff}.btn.ghost{background:0 0}.btn.danger{background:var(--dn);border-color:var(--dn);color:#fff;font-weight:600}.btn.danger:hover{background:#ff5589;border-color:#ff5589}.btn.sm{border-radius:6px;height:28px;padding:0 10px;font-size:12px}.btn.icon{width:36px;padding:0}.btn.icon.sm{width:28px}.user-chip{background:var(--bg-3);border:1px solid var(--br);border-radius:1000px;align-items:center;gap:8px;height:36px;padding:0 12px 0 4px;font-size:13px;display:inline-flex}.user-chip .av{color:#fff;background:linear-gradient(135deg,#a370ff,#f465dd);border-radius:1000px;place-items:center;width:28px;height:28px;font-size:11px;font-weight:700;display:grid}.user-chip .role{color:var(--ok);border:1px solid #64e9d64d;border-radius:4px;margin-left:4px;padding:1px 6px;font-size:10px}.body{grid-template-columns:220px 1fr;min-height:0;display:grid}.sidebar{background:var(--bg-2);border-right:1px solid var(--br);padding:16px 0;overflow-y:auto}.side-section{padding:0 12px 16px}.side-head{letter-spacing:.6px;color:var(--tx-3);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 8px;font-size:11px;font-weight:600;display:flex}.side-head button{color:var(--tx-3);background:0;border:0;border-radius:4px;place-items:center;padding:2px;display:grid}.side-head button:hover{color:var(--tx-1);background:#ffffff0d}.tag-row{color:var(--tx-2);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 8px;font-size:13px;transition:background .12s;display:flex}.tag-row:hover{color:var(--tx-1);background:#ffffff0a}.tag-row.active{background:var(--ac-soft);color:var(--tx-1)}.tag-dot{background:#ffffff40;border-radius:50%;flex-shrink:0;width:8px;height:8px}.tag-name{flex:1}.tag-count{font-variant-numeric:tabular-nums;color:var(--tx-3);font-size:12px}.tag-row.active .tag-count{color:var(--tx-2)}.tag-pills{flex-wrap:wrap;gap:6px;padding:4px 8px 0;display:flex}.tag-pill{border:1px solid var(--br);color:var(--tx-2);background:#ffffff0d;border-radius:1000px;align-items:center;gap:6px;padding:5px 10px;font-size:12px;display:inline-flex}.tag-pill:hover{color:var(--tx-1);background:#ffffff14}.tag-pill.active{background:var(--ac);border-color:var(--ac);color:#fff}.tag-pill .tag-count{color:inherit;opacity:.7}.tag-grp__h{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--tx-3);text-transform:uppercase;letter-spacing:.6px;align-items:center;gap:6px;padding:6px 8px;font-size:11px;font-weight:700;display:flex}.tag-grp__h:hover{color:var(--tx-1)}.tag-grp__chev{transition:transform .15s;display:inline-flex}.tag-grp.open .tag-grp__chev{transform:rotate(90deg)}.tag-grp__b{padding-left:4px;display:none}.tag-grp.open .tag-grp__b{display:block}.content{flex-direction:column;min-width:0;min-height:0;display:flex}.content-bar{border-bottom:1px solid var(--br);flex-wrap:wrap;align-items:center;gap:12px;padding:14px 24px;display:flex}.content-title{font-size:18px;font-weight:700}.content-title small{color:var(--tx-3);margin-left:8px;font-size:13px;font-weight:500}.fpill{background:var(--ac-soft);border:1px solid var(--ac-line);color:#d8c4ff;border-radius:1000px;align-items:center;gap:6px;height:28px;padding:0 4px 0 10px;font-size:12px;display:inline-flex}.fpill button{color:#fff;background:#ffffff14;border:0;border-radius:1000px;place-items:center;width:18px;height:18px;display:grid}.fpill button:hover{background:#ffffff2e}.seg{background:var(--bg-3);border:1px solid var(--br);border-radius:8px;padding:2px;display:inline-flex}.seg button{color:var(--tx-3);background:0;border:0;border-radius:6px;align-items:center;gap:5px;height:28px;padding:0 10px;font-size:12px;display:inline-flex}.seg button:hover{color:var(--tx-1)}.seg button.active{background:var(--bg-5);color:var(--tx-1)}.select{background:var(--bg-3) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%237E778D' stroke-width='2'><polyline points='6 9 12 15 18 9'/></svg>") no-repeat right 10px center;border:1px solid var(--br);height:32px;color:var(--tx-1);appearance:none;border-radius:8px;padding:0 28px 0 12px;font-size:12px}.gridw{flex:1;padding:18px 24px 32px;overflow:hidden auto}.grid{grid-template-columns:repeat(auto-fill, minmax(min(var(--card-min,200px), 100%), 1fr));gap:14px;display:grid}.grid.masonry{column-count:auto;column-width:var(--card-min,200px);column-gap:14px;display:block}.grid.masonry .card{break-inside:avoid;margin-bottom:14px;display:block}.card{background:var(--bg-3);border:1px solid var(--br);cursor:pointer;border-radius:10px;transition:all .15s ease-out;position:relative;overflow:hidden}.card:hover{border-color:var(--br-2);transform:translateY(-1px)}.card-thumb{width:100%;aspect-ratio:var(--ar,1/1);background:var(--bg-0);place-items:center;display:grid;position:relative;overflow:hidden}.card-thumb img{object-fit:cover;width:100%;height:100%;transition:transform .25s;display:block}.grid{align-items:start}.card:hover .card-thumb img{transform:scale(1.04)}.placeholder{color:#fff3;place-items:center;width:100%;height:100%;font-size:22px;font-weight:700;display:grid}.checker{background-image:repeating-conic-gradient(#ffffff0a 0% 25%,#0000 0% 50%);background-size:16px 16px}.card-meta{border-top:1px solid var(--br);background:var(--bg-3);align-items:center;gap:8px;padding:8px 10px;display:flex}.card-name{min-width:0;color:var(--tx-1);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12px;overflow:hidden}.card-dim{color:var(--tx-3);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px}.card-actions{opacity:0;gap:4px;transition:opacity .15s;display:flex;position:absolute;top:8px;right:8px}.card:hover .card-actions{opacity:1}.card-act{color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0000008c;border:1px solid #ffffff1a;border-radius:6px;place-items:center;width:26px;height:26px;display:grid}.card-act:hover{background:#000000d9;border-color:#fff3}.card-act.on{background:var(--ac);border-color:var(--ac)}.card-act--delete:hover{border-color:var(--dn);background:#ff3c78d9}.is-small .card-meta{padding:6px 8px}.is-small .card-name{font-size:11px}.is-small .card-dim{font-size:10px}.empty{text-align:center;flex:1;place-items:center;padding:80px 24px;display:grid}.empty>div{flex-direction:column;align-items:center;display:flex}.empty-art{background:linear-gradient(135deg, var(--bg-4), var(--bg-2));width:120px;height:120px;color:var(--ac);border:1px dashed #a370ff66;border-radius:24px;place-items:center;margin-bottom:24px;display:grid}.empty-title{margin-bottom:6px;font-size:18px;font-weight:700}.empty-desc{color:var(--tx-3);max-width:360px;margin-bottom:20px;font-size:13px;line-height:1.6}.scrim{z-index:60;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#08060cc7;animation:.18s ease-out fade;position:fixed;inset:0}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes scale-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.lb{z-index:61;pointer-events:none;animation:.2s ease-out scale-in;display:grid;position:fixed;inset:0}.lb>*{pointer-events:auto}.lb.split{grid-template-columns:1fr 380px}.lb.bottom{grid-template-rows:1fr auto}.lb-stage{background:var(--bg-0);position:relative}.lb-img-wrap{justify-content:center;align-items:stretch;display:flex;position:absolute;inset:0;overflow:hidden}.lb-img-wrap img{flex-shrink:0;width:auto;max-width:none;height:100%;max-height:none;display:block}.lb-img-wrap.zoomed{cursor:grab;justify-content:flex-start;align-items:flex-start;display:flex;overflow:auto}.lb-img-wrap.zoomed:active{cursor:grabbing}.lb-img-wrap.zoomed img{flex-shrink:0;width:auto;max-width:none;height:auto;max-height:none;margin:auto;padding:32px}.lb-zoom-btn{color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer;background:#14121ab3;border:1px solid #ffffff1a;border-radius:1000px;place-items:center;width:36px;height:36px;transition:all .15s;display:grid;position:absolute;bottom:16px;right:16px}.lb-zoom-btn:hover,.lb-zoom-btn.active{background:var(--ac);border-color:var(--ac)}.lb-close{z-index:5;position:absolute;top:16px;left:16px}.lb-nav{color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#14121ab3;border:1px solid #ffffff1a;border-radius:1000px;place-items:center;width:44px;height:44px;transition:all .15s;display:grid;position:absolute;top:50%;transform:translateY(-50%)}.lb-nav:hover{background:var(--ac);border-color:var(--ac)}.lb-nav.prev{left:16px}.lb-nav.next,.lb.split .lb-nav.next{right:16px}.lb-counter{color:var(--tx-2);font-variant-numeric:tabular-nums;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#14121ab3;border:1px solid #ffffff14;border-radius:1000px;align-items:center;gap:8px;padding:6px 14px;font-size:12px;display:inline-flex;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.lb-info{background:var(--bg-2);border-left:1px solid var(--br);flex-direction:column;min-height:0;display:flex}.lb.bottom .lb-info{border-left:0;border-top:1px solid var(--br);grid-template-columns:1fr auto;align-items:center;gap:24px;max-height:220px;padding:16px 32px;display:grid}.lb-info-head{border-bottom:1px solid var(--br);padding:20px 24px 16px}.lb-info-name{word-break:break-all;margin-bottom:4px;font-size:16px;font-weight:700}.lb-info-sub{color:var(--tx-3);font-size:12px}.lb-info-body{flex:1;padding:16px 24px;overflow-y:auto}.lb.bottom .lb-info-head{border:0;padding:0}.lb.bottom .lb-info-body{padding:0}.lb-info__main{min-width:0}.lb-meta{grid-template-columns:1fr 1fr;gap:12px 16px;margin-bottom:20px;display:grid}.lb-meta-item{flex-direction:column;gap:2px;display:flex}.lb-meta-item .k{color:var(--tx-3);text-transform:uppercase;letter-spacing:.06em;font-size:11px}.lb-meta-item .v{color:var(--tx-1);font-variant-numeric:tabular-nums;font-size:13px}.lb-section-title{color:var(--tx-3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;font-size:11px;font-weight:600}.lb-tags{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.lb-tag{background:var(--bg-4);border:1px solid var(--br);color:var(--tx-1);border-radius:1000px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;display:inline-flex}.lb-tag .x{cursor:pointer;background:#ffffff14;border-radius:1000px;place-items:center;width:14px;height:14px;display:grid}.lb-tag .x:hover{background:#ffffff2e}.lb-tag.add{border:1px dashed var(--br-2);color:var(--tx-3);cursor:pointer;background:0 0}.lb-tag.add:hover{color:var(--tx-1);border-color:var(--ac)}.lb-note{resize:vertical;background:var(--bg-3);border:1px solid var(--br);width:100%;min-height:80px;color:var(--tx-1);border-radius:8px;outline:0;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.6}.lb-note:focus{border-color:var(--ac)}.lb-note::placeholder{color:var(--tx-3)}.lb-tag-picker{background:var(--bg-3);border:1px solid var(--br-2);border-radius:8px;flex-wrap:wrap;flex-basis:100%;gap:6px;margin-top:6px;padding:10px 12px;display:flex}.lb-tag-picker__empty{color:var(--tx-3);font-size:12px}.lb-info-actions{border-top:1px solid var(--br);gap:8px;padding:16px 24px;display:flex}.lb.bottom .lb-info-actions{border:0;padding:0}.modal-scrim{z-index:70;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#08060cb3;justify-content:center;align-items:flex-start;padding:32px 16px;animation:.18s fade;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--bg-2);border:1px solid var(--br);border-radius:14px;flex-direction:column;width:560px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);margin:auto;animation:.2s ease-out scale-in;display:flex;overflow:hidden}.modal .modal-body{flex:1;min-height:0;overflow-y:auto}.modal.lg{width:720px}.modal-head{border-bottom:1px solid var(--br);justify-content:space-between;align-items:center;padding:18px 24px;display:flex}.modal-title{font-size:16px;font-weight:700}.modal-body{padding:24px}.modal-foot{border-top:1px solid var(--br);background:var(--bg-1);justify-content:flex-end;align-items:center;gap:8px;padding:14px 24px;display:flex}.modal-foot.between{justify-content:space-between}.dropzone{border:1.5px dashed var(--br-2);text-align:center;background:var(--bg-1);border-radius:12px;padding:36px 24px;transition:all .2s}.dropzone.active{border-color:var(--ac);background:#a370ff14}.dropzone-art{background:var(--bg-4);width:56px;height:56px;color:var(--ac);border-radius:14px;place-items:center;margin:0 auto 14px;display:grid}.dropzone h3{margin:0 0 6px;font-size:15px;font-weight:600}.dropzone p{color:var(--tx-3);margin:0 0 14px;font-size:12px}.field{margin-bottom:16px}.field label{color:var(--tx-2);margin-bottom:6px;font-size:12px;font-weight:500;display:block}.input{background:var(--bg-3);border:1px solid var(--br);width:100%;height:36px;color:var(--tx-1);border-radius:8px;outline:0;padding:0 12px;font-size:13px}.input:focus{border-color:var(--ac)}.tag-input-wrap{background:var(--bg-3);border:1px solid var(--br);border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;min-height:40px;padding:6px;display:flex}.tag-input-wrap:focus-within{border-color:var(--ac)}.tag-input-wrap input{min-width:120px;height:26px;color:var(--tx-1);background:0 0;border:0;outline:0;flex:1;padding:0 6px;font-size:13px}.tag-token{background:var(--ac-soft);border:1px solid var(--ac-line);color:#d8c4ff;border-radius:6px;align-items:center;gap:4px;height:26px;padding:0 8px;font-size:12px;font-weight:500;display:inline-flex}.tag-token .x{cursor:pointer;background:#ffffff14;border-radius:4px;place-items:center;width:14px;height:14px;display:grid}.tag-token .x:hover{background:#ffffff2e}.tag-suggestions{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.tag-suggestion{background:var(--bg-3);border:1px dashed var(--br-2);color:var(--tx-2);cursor:pointer;border-radius:1000px;padding:3px 8px;font-size:11px}.tag-suggestion:hover{color:var(--tx-1);border-color:var(--ac);border-style:solid}.upload-list{flex-direction:column;gap:8px;max-height:280px;margin-top:16px;display:flex;overflow-y:auto}.upload-item{background:var(--bg-1);border:1px solid var(--br);border-radius:8px;grid-template-columns:63px 1fr auto auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.upload-thumb{background:var(--bg-4);object-fit:cover;border-radius:6px;width:63px;height:63px}.upload-mid{min-width:0}.upload-name{color:var(--tx-1);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.upload-progress{background:var(--bg-4);border-radius:1000px;height:4px;margin-top:4px;overflow:hidden}.upload-progress>span{background:var(--ac);height:100%;transition:width .2s;display:block}.upload-status{color:var(--tx-3);font-variant-numeric:tabular-nums;font-size:11px}.upload-status.done{color:var(--ok)}.upload-status.err{color:var(--dn)}.login-shell{z-index:80;background:radial-gradient(circle at 30% 20%, #a370ff2e, transparent 50%), radial-gradient(circle at 70% 80%, #f465dd1f, transparent 55%), var(--bg-1);place-items:center;display:grid;position:fixed;inset:0}.login-card{background:var(--bg-2);border:1px solid var(--br);border-radius:14px;width:400px;max-width:calc(100vw - 32px);padding:32px;box-shadow:0 30px 80px #0009}.login-brand{flex-direction:column;align-items:center;margin-bottom:24px;display:flex}.login-brand .brand-mark{border-radius:12px;width:44px;height:44px;font-size:20px}.login-brand h2{margin:14px 0 4px;font-size:18px;font-weight:700}.login-brand p{color:var(--tx-3);margin:0;font-size:12px}.login-foot{text-align:center;color:var(--tx-3);margin-top:16px;font-size:12px}.login-foot a{color:var(--ac);text-decoration:none}.toasts{z-index:90;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast{background:var(--bg-3);border:1px solid var(--br);border-radius:10px;align-items:center;gap:10px;min-width:260px;padding:12px 16px;animation:.2s scale-in;display:flex;box-shadow:0 10px 30px #0006}.toast.success{border-left:3px solid var(--ok)}.toast.error{border-left:3px solid var(--dn)}.toast .toast-icon{border-radius:1000px;flex-shrink:0;place-items:center;width:24px;height:24px;display:grid}.toast.success .toast-icon{color:var(--ok);background:#64e9d62e}.toast.error .toast-icon{color:var(--dn);background:#ff3c782e}.toast .toast-text{font-size:13px}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-block,.skeleton-line{background:linear-gradient(90deg, var(--bg-3) 25%, var(--bg-4) 50%, var(--bg-3) 75%);background-size:200% 100%;animation:1.6s infinite shimmer}.skeleton-card{pointer-events:none}.skeleton-card .card-thumb{background:var(--bg-3)}.skeleton-card .skeleton-block{width:100%;height:100%;display:block}.skeleton-card .card-meta{align-items:center;gap:6px;display:flex}.sidebar-backdrop{z-index:40;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000080;display:none;position:fixed;inset:0}@media (width<=1279px){.brand{width:180px}.body{grid-template-columns:180px 1fr}.sidebar{width:180px}.search{max-width:380px}.content-bar{gap:8px;padding:12px 16px}.gridw{padding:14px 16px 24px}}@media (width<=767px){.topbar{gap:8px;padding:0 12px}.brand{width:auto;padding-right:0}.brand-name span{display:none}.search{flex:1;max-width:none}.search kbd{display:none}.body{grid-template-columns:1fr}.sidebar{z-index:41;width:260px;transition:transform .25s;position:fixed;top:56px;bottom:0;left:0;transform:translate(-100%);box-shadow:4px 0 24px #0006}.sidebar.open{transform:translate(0)}.sidebar-backdrop.open{display:block}#menu-btn{display:inline-flex!important}.content-bar{flex-wrap:wrap;gap:8px;padding:10px 12px}.content-title{font-size:15px}.gridw{padding:12px 12px 24px}.grid{--card-min:140px}.lb.split{grid-template-rows:1fr auto;grid-template-columns:1fr}.lb.split .lb-nav.next{right:16px}.lb-info{border-left:0;border-top:1px solid var(--br);max-height:40vh;overflow-y:auto}.lb-info-head{padding:14px 16px}.lb-info-body,.lb-info-actions{padding:12px 16px}.modal,.modal.lg{width:calc(100vw - 24px)}.modal-scrim{padding:16px 12px}}@media (width<=479px){.topbar{gap:6px;padding:0 10px}.user-chip .role,.user-chip span:not(.av):not(.role){display:none}.seg button{padding:0 7px}.content-bar .select{display:none}}
