.toast{z-index:9999;border:1px solid #c8c8c8;border-radius:10px;max-width:min(420px,100vw - 32px);padding:12px 18px;font-size:.92rem;line-height:1.4;animation:.22s ease-out toastIn;position:fixed;top:20px;left:50%;transform:translate(-50%);box-shadow:0 6px 24px #0000002e}@keyframes toastIn{0%{opacity:0;transform:translate(-50%)translateY(-8px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.toast-success{color:#141414;background:#f4f4f4;border-color:#9a9a9a}.toast-error{color:#3a1515;background:#f0e8e8;border-color:#b08080}*,:before,:after{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden}body{color:#1a1a1a;background:#e8e8e8;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.45}#root{flex-direction:column;height:100%;min-height:0;display:flex}code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.browseRoot{color:#1a1a1a;background:#e8e8e8;flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.browseHeader{flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;padding:16px 24px;display:flex}.browseTitle{letter-spacing:-.02em;margin:0;font-size:1.5rem;font-weight:600}.browseHeaderActions{align-items:center;gap:10px;display:flex}.browseLink{color:#1a1a1a;background:#fafafa;border:1px solid #c8c8c8;border-radius:8px;align-items:center;gap:8px;padding:8px 14px;font-size:.9rem;text-decoration:none;transition:background .15s,border-color .15s;display:inline-flex}.browseLink:hover{background:#f0f0f0;border-color:#a8a8a8}.browseMain{box-sizing:border-box;flex:1;grid-template-columns:300px 1fr;gap:24px;min-height:0;padding:0 24px 16px;display:grid;overflow:hidden}.browsePanelLeft{flex-direction:column;min-height:0;display:flex;overflow:hidden}.browsePanel{background:#fafafa;border:1px solid #d0d0d0;border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden;box-shadow:0 2px 8px #0000000f}.browsePanelTitle{border-bottom:1px solid #d8d8d8;flex-shrink:0;margin:0;padding:16px 18px 10px;font-size:1rem;font-weight:600}.browseSearch{border-bottom:1px solid #e4e4e4;flex-shrink:0;padding:12px 16px 14px}.browseSearch input{box-sizing:border-box;color:#1a1a1a;background:#fff;border:1px solid #c4c4c4;border-radius:8px;width:100%;padding:10px 12px;font-size:14px}.browseSearch input:focus{border-color:#666;outline:none;box-shadow:0 0 0 2px #00000014}.browseList{-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:8px 10px 14px;overflow:hidden auto}.browseItem{cursor:pointer;border:1px solid #0000;border-radius:8px;margin:4px 0;padding:10px 12px;font-size:.92rem;transition:background .15s}.browseItem:hover{background:#efefef}.browseItemActive{background:#e4e4e4;border-color:#b8b8b8}.browseDetail{flex-direction:column;min-height:0;padding:0;display:flex;overflow:hidden}.browseDetailInner{-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:22px 24px;overflow:hidden auto}.browseDetail h2{margin:0 0 8px;font-size:1.25rem;font-weight:600}.browseIntro{color:#555;margin:0 0 16px;font-size:.92rem}.browseDescription{color:#333;white-space:pre-wrap;margin:0 0 20px;line-height:1.65}.browseVersions{flex-wrap:wrap;gap:10px;display:flex}.browseDownload{color:#f5f5f5;background:#2a2a2a;border:1px solid #999;border-radius:8px;align-items:center;padding:10px 16px;font-size:.9rem;text-decoration:none;transition:background .15s;display:inline-flex}.browseDownload:hover{background:#1a1a1a}.browsePlaceholder{color:#777;margin:0}.browseError{color:#5a2a2a;padding:12px 16px;font-size:.9rem}.browseMuted{color:#777;padding:8px 12px;font-size:.88rem}.browseListFooter{text-align:center;padding:10px 12px 4px;font-size:.82rem}.adminRoot{color:#1a1a1a;background:#e8e8e8;flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.adminHeader{flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;padding:16px 24px;display:flex}.adminTitle{margin:0;font-size:1.35rem;font-weight:600}.adminHeaderActions{align-items:center;gap:10px;display:flex}.adminLink{color:#1a1a1a;background:#fafafa;border:1px solid #c8c8c8;border-radius:8px;align-items:center;gap:8px;padding:8px 14px;font-size:.9rem;text-decoration:none;display:inline-flex}.adminLink:hover{background:#f0f0f0}.adminBtn{color:#1a1a1a;cursor:pointer;background:#fafafa;border:1px solid #c8c8c8;border-radius:8px;align-items:center;gap:8px;padding:8px 14px;font-size:.9rem;display:inline-flex}.adminBtn:hover{background:#f0f0f0}.adminBtnPrimary{color:#f5f5f5;background:#2a2a2a;border-color:#2a2a2a}.adminBtnPrimary:hover{background:#1a1a1a}.adminBtnDanger{color:#4a2020;border-color:#a08080}.adminMain{box-sizing:border-box;flex:1;grid-template-columns:280px 1fr;gap:24px;min-height:0;padding:0 24px 16px;display:grid;overflow:hidden}.adminPanel{background:#fafafa;border:1px solid #d0d0d0;border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden;box-shadow:0 2px 8px #0000000f}.adminPanelLeft{min-height:0}.adminPanelTitle{border-bottom:1px solid #d8d8d8;flex-shrink:0;margin:0;padding:14px 16px 10px;font-size:1rem;font-weight:600}.adminToolbar{border-bottom:1px solid #e4e4e4;flex-shrink:0;gap:8px;padding:10px 12px;display:flex}.adminSearch input{box-sizing:border-box;border:1px solid #c4c4c4;border-radius:8px;width:100%;padding:8px 10px;font-size:14px}.adminList{-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:8px 10px 14px;overflow:hidden auto}.adminItem{cursor:pointer;border:1px solid #0000;border-radius:8px;margin:3px 0;padding:9px 11px;font-size:.9rem}.adminItem:hover{background:#efefef}.adminItemActive{background:#e4e4e4;border-color:#b8b8b8}.adminForm{flex-direction:column;min-height:0;padding:0;display:flex;overflow:hidden}.adminFormInner{-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:18px 20px 22px;overflow:hidden auto}.adminForm h2{margin:0 0 14px;font-size:1.1rem}.adminField{margin-bottom:14px}.adminField label{color:#555;margin-bottom:6px;font-size:.82rem;display:block}.adminField input,.adminField textarea{box-sizing:border-box;color:#1a1a1a;background:#fff;border:1px solid #c4c4c4;border-radius:8px;width:100%;padding:10px 12px;font-family:inherit;font-size:14px}.adminField textarea{resize:vertical;min-height:100px}.adminVersionsTitle{margin:18px 0 10px;font-size:.95rem;font-weight:600}.versionRow{background:#fff;border:1px solid #d6d6d6;border-radius:10px;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:10px;padding:12px;display:flex}.versionRowPending{background:#f4f4f4;border-color:#9a9a9a}.versionInputs{flex-wrap:wrap;flex:1;gap:10px;min-width:200px;display:flex}.versionInputs input{border:1px solid #c4c4c4;border-radius:8px;flex:1;min-width:120px;padding:8px 10px;font-size:13px}.versionActions{gap:8px;display:flex}.adminFormActions{flex-wrap:wrap;gap:10px;margin-top:18px;display:flex}.adminLogin{background:#fafafa;border:1px solid #d0d0d0;border-radius:12px;max-width:400px;margin:60px auto;padding:28px;box-shadow:0 2px 10px #0000000f}.adminLogin h2{margin:0 0 16px;font-size:1.15rem}.adminLogin input[type=password]{box-sizing:border-box;border:1px solid #c4c4c4;border-radius:8px;width:100%;padding:10px 12px;font-size:15px}.adminLoginError{color:#6a2020;margin:8px 0 0;font-size:.88rem}.adminMuted{color:#666;font-size:.88rem}.adminRootSplash{flex:1;justify-content:center;align-items:center;min-height:0;padding:24px;display:flex;overflow:auto}.adminRootLogin{overflow-y:auto}.adminListFooter{text-align:center;padding:10px 12px 4px;font-size:.82rem}.uploadProgress{background:#f0f0f0;border:1px solid #c8c8c8;border-radius:10px;flex-shrink:0;margin:0 0 16px;padding:12px 14px}.uploadProgressMeta{color:#444;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:8px;font-size:.82rem;display:flex}.uploadProgressName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.uploadProgressPct{font-variant-numeric:tabular-nums;color:#222;flex-shrink:0}.uploadProgressTrack{background:#d8d8d8;border-radius:4px;height:8px;overflow:hidden}.uploadProgressFill{background:#3a3a3a;border:none;border-radius:4px;height:100%;margin:0;transition:width .12s ease-out}.uploadProgressIndeterminate .uploadProgressFill{animation:1.1s ease-in-out infinite uploadIndeterminate;width:35%!important}@keyframes uploadIndeterminate{0%{transform:translate(-100%)}to{transform:translate(400%)}}.appShell{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}
