:root{--bg:#0d1117;--surface:#161b22;--surface-2:#1c2330;--border:#2a3240;--text:#e6edf3;--muted:#8b98a9;--primary:#3fb950;--primary-hover:#46c95a;--danger:#f85149;--accent:#58a6ff;--radius:12px;--shadow:0 8px 30px #00000059}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background-color:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;background-image:radial-gradient(1200px 600px at 70% -10%,#12233a 0%,#0000 60%);background-repeat:no-repeat;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.muted{color:var(--muted)}.small{font-size:.8rem}.mono{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.center-screen{place-items:center;min-height:100%;padding:24px;display:grid}.page{min-height:100%}.content{max-width:1080px;margin:0 auto;padding:32px 24px 64px}.content-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.grid{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:18px;display:grid}.app-header{border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:10;background:#0d1117b3;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;padding:16px 24px;display:flex;position:sticky;top:0}.brand{cursor:pointer;align-items:center;gap:10px;font-weight:700;display:flex}.logo-sm{object-fit:contain;width:26px;height:26px;display:block}.header-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px 12px;min-width:0;display:flex}.user-email{font-size:.85rem}.user-menu{min-width:0;position:relative}.user-menu-trigger{-webkit-tap-highlight-color:transparent;max-width:46vw;font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;padding:6px 10px;font-size:.85rem;display:inline-flex}.user-menu-trigger:hover,.user-menu-trigger[aria-expanded=true]{color:var(--text);background:var(--surface-2);border-color:var(--border)}.user-menu-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu-caret{opacity:.7;flex-shrink:0;font-size:.7em}.user-menu-pop{background:var(--surface);border:1px solid var(--border);min-width:15rem;max-width:min(20rem,100vw - 32px);box-shadow:var(--shadow);z-index:20;border-radius:10px;padding:6px;position:absolute;top:calc(100% + 6px);right:0}.user-menu-who{border-bottom:1px solid var(--border);overflow-wrap:anywhere;margin-bottom:4px;padding:6px 10px 8px}.user-menu-drive{margin-top:8px;display:flex}.user-menu-item{width:100%;font:inherit;text-align:left;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:9px 10px;font-size:.88rem;display:block}.user-menu-item:hover{background:var(--surface-2)}.user-menu-item-danger{color:#e8a0ab}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.login-card{text-align:center;width:380px;max-width:100%}.login-card h1{margin:8px 0}.logo{object-fit:contain;width:72px;height:72px}.world-card{flex-direction:column;gap:14px;min-width:0;display:flex}.world-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.world-head-main{overflow-wrap:anywhere;flex:auto;min-width:0}.world-corner{flex-direction:column;flex-shrink:0;align-items:flex-end;gap:4px;display:flex}.world-players{white-space:nowrap;font-variant-numeric:tabular-nums}.world-players strong{color:var(--text)}@media (width<=420px){.world-players-label{display:none}}.world-head h3{margin:0 0 4px}.world-meta{flex-wrap:wrap;gap:6px;display:flex}.tag{background:var(--surface-2);border:1px solid var(--border);color:var(--muted);border-radius:999px;padding:3px 8px;font-size:.72rem}.tag-game{color:#c4b5fd;background:#a78bfa1a;border-color:#a78bfa47}.tag-type{color:#7fd4c1;background:#2dd4bf1a;border-color:#2dd4bf42}.tag-version{color:#e0c184;background:#fbbf241a;border-color:#fbbf2442}.tag-memory{color:#8fc6ea;background:#38bdf81a;border-color:#38bdf842}.tag-lock{color:#e8a0ab;background:#fb71851a;border-color:#fb718542}.tag-warn{color:#f0a35e;background:#f0883e1a;border-color:#f0883e4d}.tag-accent{color:var(--accent);background:#58a6ff1a;border-color:#58a6ff66}.world-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.world-edit{justify-content:center;align-items:center;margin-left:auto;display:inline-flex}.btn.world-edit{width:2.25rem;height:2.25rem;padding:0}.world-edit svg{width:86%;height:86%;transition:transform .15s;display:block}.world-edit:hover:not(:disabled) svg{transform:rotate(45deg)}@media (prefers-reduced-motion:reduce){.world-edit svg{transition:none}.world-edit:hover:not(:disabled) svg{transform:none}}.btn{font:inherit;cursor:pointer;color:var(--text);border:1px solid #0000;border-radius:8px;align-items:center;padding:8px 14px;font-size:.88rem;font-weight:600;text-decoration:none;transition:background .15s,border .15s,opacity .15s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-sm{padding:4px 10px;font-size:.8rem}.btn-block{justify-content:center;width:100%;margin-top:8px}.btn-primary{background:var(--primary);color:#0b1f10}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-secondary{background:var(--surface-2);border-color:var(--border)}.btn-secondary:hover:not(:disabled){border-color:var(--accent)}.btn-ghost{color:var(--muted);background:0 0;border-color:#0000}.btn-ghost:hover:not(:disabled){color:var(--text)}.btn-danger{color:var(--danger);background:0 0;border-color:#f8514966}.btn-danger:hover:not(:disabled){background:#f851491f}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:.78rem;font-weight:600;display:inline-flex}.badge .dot{background:currentColor;border-radius:50%;width:8px;height:8px}.badge-running{color:var(--primary);background:#3fb9501f}.badge-sleeping{color:#d29922;background:#d299221f}.badge-off{color:var(--muted);background:var(--surface-2)}.badge-error{color:var(--danger);background:#f851491f}.badge-deleting,.badge-stopping,.badge-starting{color:var(--accent);background:#58a6ff1f}.badge-starting .dot,.badge-stopping .dot{animation:1.4s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.25}}.badge-server-side{color:var(--primary);background:#3fb9501f;padding:2px 8px;font-size:.68rem;font-weight:600}.pill{border-radius:999px;padding:4px 10px;font-size:.78rem}.pill-ok{color:var(--primary);background:#3fb9501f}.notice{color:var(--text);border-radius:var(--radius);background:#58a6ff1a;border:1px solid #58a6ff4d;margin-bottom:20px;padding:12px 16px}.notice-warn{background:#ffb0201f;border-color:#ffb02073}.notice a{color:var(--accent)}.risk-banner{color:var(--text);border-radius:var(--radius);background:#d299221f;border:1px solid #d2992266;padding:12px 16px;font-size:.9rem}.risk-banner ul{margin:8px 0 0;padding-left:18px}.change-list{margin:0;padding-left:18px;font-size:.9rem}.change-list .change-label{color:var(--muted)}.modal-divider{border:none;border-top:1px solid var(--border);margin:4px 0}.field-label{margin-top:4px;font-weight:600}.content-section{flex-direction:column;gap:8px;display:flex}.content-picker{flex-direction:column;gap:4px;padding:6px 0;display:flex}.error-banner{color:var(--danger);background:#f851491a;border:1px solid #f851494d;border-radius:8px;padding:8px 12px;font-size:.85rem}.form{text-align:left;flex-direction:column;gap:14px;display:flex}.form label,.add-user-form input{color:var(--muted);flex-direction:column;gap:6px;font-size:.85rem;display:flex}.form-row{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}input,select{font:inherit;background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:8px;outline:none;padding:9px 11px}input:focus,select:focus{border-color:var(--accent)}.hint{font-size:.75rem}.world-password{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.world-password code{min-width:8ch}.secret-field{align-items:stretch;gap:8px;display:flex}.secret-field input{flex:1;min-width:0}.secret-field .btn{flex:none}.secret-field input[readonly]{background:var(--bg);color:var(--muted);cursor:default}.modal-backdrop{z-index:50;background:#0000008c;grid-template-columns:minmax(0,1fr);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.modal{width:520px;max-width:100%;max-height:calc(100dvh - 48px);overflow-y:auto}.modal-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:8px;display:flex}.table-scroll{-webkit-overflow-scrolling:touch;padding-bottom:4px;overflow-x:auto}.table-scroll>.data-table{width:max-content;min-width:100%}.data-table,.backups-table{border-collapse:collapse;width:100%;margin-top:12px;font-size:.85rem}.data-table th{text-align:left;color:var(--muted);border-bottom:1px solid var(--border);padding:8px;font-weight:600}.data-table td,.backups-table td{border-bottom:1px solid var(--border);padding:8px}.backups{border-top:1px solid var(--border);padding-top:8px}.backups-caption{margin-bottom:4px;line-height:1.5}.backups-caption code{font-size:.85em}.backup-failed{color:var(--danger);cursor:help}.backup-actions{text-align:right}.toggle-row{cursor:pointer;flex-direction:row;align-items:center;gap:8px;display:flex}.toggle-row input{flex:none;width:auto;margin:0}.form .toggle-row{flex-direction:row;align-items:center}.btn-link-danger{color:var(--danger);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;font-size:.85em}.btn-link-danger:hover:not(:disabled){text-decoration:underline}.btn-link-danger:disabled{opacity:.4;cursor:not-allowed}.add-user-form{gap:10px;margin:12px 0;display:flex}.add-user-form input{flex:1}.admin-section{margin-top:32px}.settings-form{text-align:left;flex-direction:column;gap:14px;max-width:520px;margin-top:12px;display:flex}.settings-form .field{color:var(--muted);flex-direction:column;gap:6px;font-size:.85rem;display:flex}.sub-box{background:var(--bg);border:1px solid var(--border);border-radius:8px;align-items:center;gap:10px;margin:16px 0;padding:10px 12px;display:flex}.sub-box code{word-break:break-all;text-align:left;flex:1;font-size:.85rem}.empty{text-align:center;padding:48px}.fineprint{margin-top:16px;font-size:.75rem}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:28px;height:28px;margin:40px auto;animation:.8s linear infinite spin}.spinner-sm{border-width:2px;width:16px;height:16px;margin:0}.inline-progress{align-items:center;gap:8px;margin:4px 0;display:flex}.modal-sm{max-width:460px}.confirm-message{white-space:pre-wrap;margin:0 0 8px}.confirm-subdomain{margin:4px 0;font-weight:600}@keyframes spin{to{transform:rotate(360deg)}}.content-head-actions{gap:10px;display:flex}.webview-warning{color:var(--text);border-radius:var(--radius);text-align:left;background:#d299221a;border:1px solid #d2992259;margin:16px 0;padding:14px 16px}.webview-warning strong{color:#e3b341;margin-bottom:4px;display:block}.webview-warning p{color:var(--muted);margin:0 0 10px;font-size:.85rem}.world-status{align-items:center;gap:6px;display:flex}.info-tip{cursor:help;outline:none;display:inline-flex;position:relative}.info-tip-icon{border:1px solid var(--border);width:16px;height:16px;color:var(--muted);border-radius:50%;justify-content:center;align-items:center;font-size:.7rem;font-style:italic;font-weight:700;line-height:1;display:inline-flex}.info-tip:hover .info-tip-icon,.info-tip:focus .info-tip-icon{color:var(--accent);border-color:var(--accent)}.info-tip-bubble{z-index:60;background:var(--surface-2);border:1px solid var(--border);width:260px;box-shadow:var(--shadow);color:var(--text);text-align:left;opacity:0;visibility:hidden;border-radius:8px;padding:10px 12px;font-size:.78rem;line-height:1.5;transition:opacity .12s,transform .12s,visibility .12s;position:absolute;top:calc(100% + 8px);right:0;transform:translateY(-4px)}.info-tip-bubble strong{color:var(--text)}.info-tip:hover .info-tip-bubble,.info-tip:focus .info-tip-bubble{opacity:1;visibility:visible;transform:translateY(0)}.modal-wide{width:620px}.modal-head{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.modal-head h2{margin:0}.modal-subtitle{text-align:right;flex-direction:column;align-items:flex-end;gap:2px;min-width:0;display:flex}.modal-subtitle>span:first-child{color:var(--text);font-weight:600}.modal-head-right{align-items:flex-start;gap:10px;display:flex}.modal-close{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:1.5rem;line-height:1}.modal-close:hover{color:var(--text)}.form-row-2{grid-template-columns:1fr 1fr}.content-block{flex-direction:column;gap:6px;display:flex}.content-dropdown{border:1px solid var(--border);background:var(--bg);border-radius:8px}.content-dropdown>summary{cursor:pointer;color:var(--text);-webkit-user-select:none;user-select:none;padding:9px 11px;font-size:.85rem;list-style:none}.content-dropdown>summary::-webkit-details-marker{display:none}.content-dropdown>summary:after{content:"▾";float:right;color:var(--muted)}.content-dropdown[open]>summary:after{content:"▴"}.content-dropdown-list{border-top:1px solid var(--border);flex-direction:column;gap:6px;max-height:200px;padding:8px 11px;display:flex;overflow-y:auto}.installed-list{flex-direction:column;gap:4px;max-height:180px;display:flex;overflow-y:auto}.installed-row{background:var(--surface-2);border:1px solid var(--border);border-radius:8px;align-items:center;gap:8px;padding:6px 10px;font-size:.85rem;display:flex}.installed-name{flex:1}.installed-remove{margin-left:auto}.backups-scroll{max-height:320px;margin-top:4px;overflow-y:auto}.source-tabs{background:var(--bg);border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;gap:6px;padding:4px;display:flex}.modal>.source-tabs{margin-bottom:16px}.source-tabs .tab{min-width:0;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;flex:auto;padding:8px 10px;font-size:.85rem}.source-tabs .tab-active{background:var(--surface-2);color:var(--text)}input[type=file]{cursor:pointer;padding:8px}.row-actions{white-space:nowrap}.row-actions .btn+.btn{margin-left:6px}.drive-archives{border-top:1px solid var(--border);margin-top:.6rem;padding-top:.6rem}.accordion-toggle{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-size:.85rem}.accordion-toggle:hover{text-decoration:underline}.accordion-body{border-left:2px solid var(--border);flex-direction:column;gap:.5rem;margin-top:.5rem;padding-left:10px;display:flex}.world-card{border-width:2px 2px 2px 5px;border-left-style:solid;border-left-color:#0000;transition:background-color .2s,border-color .2s}.world-card--ready{--muted:#a3b0c0;background:linear-gradient(0deg, #3fb95040, #3fb95040), var(--surface);border-color:#3fb95061;border-left-color:var(--primary)}.world-card--starting,.world-card--stopping{background:linear-gradient(0deg, #58a6ff0f, #58a6ff0f), var(--surface);border-color:#58a6ff3d;border-left-color:var(--accent)}.world-card--sleeping{background:linear-gradient(0deg, #d299220d, #d299220d), var(--surface);border-color:#d2992238 #d2992238 #d2992238 #d29922}.world-card--error,.world-card--unresponsive{background:linear-gradient(0deg, #f851490f, #f851490f), var(--surface);border-color:#f8514947;border-left-color:var(--danger)}.world-card,.world-card>.world-head,.world-card>.world-meta,.world-card>.error-banner,.world-card>.world-actions{position:relative}.world-card--art{--muted:#a3b0c0}.world-card--art.world-card--ready{--muted:#bac5d2}.world-card-art{border-radius:inherit;pointer-events:none;position:absolute;inset:0;overflow:hidden}.world-card-art:before{content:"";opacity:.1;background-position:50%;background-repeat:no-repeat;background-size:cover;transition:transform .25s ease-out;position:absolute;inset:0}.world-card--game-minecraft .world-card-art:before{transform-origin:top;background-image:url(/assets/minecraft-art-kfhEa8Mg.webp);background-position:top}.world-card--game-palworld .world-card-art:before{background-image:url(/assets/palworld-art-Dgkfhod1.webp)}.world-card:hover .world-card-art:before{transform:scale(1.06)}@media (prefers-reduced-motion:reduce){.world-card,.world-card-art:before{transition:none}.world-card:hover .world-card-art:before{transform:none}}.copyable{max-width:100%;font:inherit;color:var(--muted);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;margin:0 0 2px -2px;padding:2px 6px 2px 0;font-size:.82rem;display:inline-flex}.copyable:hover,.copyable:focus-visible{color:var(--text);background:var(--surface-2);border-color:var(--border);margin-left:-6px;padding-left:6px}.copyable-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.copyable-icon{opacity:.65;flex-shrink:0;font-size:.9em}.copyable:hover .copyable-icon,.copyable:focus-visible .copyable-icon{opacity:1}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.backups-bar{gap:8px;margin-top:10px;display:flex}.tab-danger{color:#d98a85}.tab-danger.tab-active{color:var(--danger)}.danger-pane .danger-copy h3{margin:0 0 6px;font-size:1rem}.danger-pane .danger-copy p{max-width:54ch;margin:0 0 8px}.danger-pane{border-left:3px solid #f8514980;padding-left:14px}.tag-shared{color:#b9a5d6;font-variant:small-caps;background:#a78bfa14;border-color:#a78bfa4d}@media (width<=560px){.app-header{padding:12px 16px}.header-actions{justify-content:flex-start}.user-menu-trigger{max-width:100%}.modal-backdrop{padding:10px}.modal{max-height:calc(100dvh - 20px);padding:16px}.source-tabs .tab{padding:9px 10px;font-size:.8rem}.modal .source-tabs .tab{flex:0 auto}.modal-actions{flex-direction:column;align-items:stretch}.modal-actions .btn{width:100%}.form-row,.form-row-2{grid-template-columns:1fr}.content-head{flex-wrap:wrap;gap:10px}.content{padding:20px 14px 48px}.grid{grid-template-columns:1fr}}.world-icon{width:40px;height:40px;image-rendering:pixelated;border-radius:6px;flex:none}.icon-picker{flex-direction:column;gap:6px;display:flex}.icon-picker-label{color:var(--muted);font-size:.85rem}.icon-picker-row{align-items:center;gap:14px;display:flex}.icon-picker-side{flex-direction:column;align-items:flex-start;gap:4px;display:flex}.icon-tile{border:1px solid var(--border);background:var(--surface-2);width:64px;height:64px;color:var(--text);border-radius:8px;flex:none;padding:0;position:relative;overflow:hidden}.icon-tile img{width:100%;height:100%;image-rendering:pixelated;display:block}.icon-tile-empty{background:0 0;border-style:dashed}button.icon-tile{cursor:pointer;transition:border-color .15s}button.icon-tile:hover:not(:disabled),button.icon-tile:focus-visible{border-color:var(--accent);outline:none}button.icon-tile:focus-visible{box-shadow:0 0 0 2px #58a6ff66}button.icon-tile:disabled{cursor:progress;opacity:.6}.icon-tile-pencil{border:1px solid var(--border);background:#0d1117cc;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;transition:color .15s;display:flex;position:absolute;bottom:3px;right:3px}.icon-tile-empty .icon-tile-pencil{bottom:50%;right:50%;transform:translate(50%,50%)}.icon-tile-pencil svg{width:13px;height:13px}button.icon-tile:hover:not(:disabled) .icon-tile-pencil,button.icon-tile:focus-visible .icon-tile-pencil{color:var(--accent)}.icon-clear-list{flex-direction:column;gap:10px;margin:0 0 8px;padding:0;list-style:none;display:flex}.icon-clear-list li{align-items:center;gap:12px;display:flex}.icon-clear-list code{overflow-wrap:anywhere}.icon-tile-sm{width:40px;height:40px}.list-toolbar{justify-content:flex-end;margin:-8px 0 12px;display:flex}.world-sort{align-items:center;gap:8px;display:inline-flex}.world-sort select{width:auto}.content-head-actions{flex-wrap:wrap;justify-content:flex-end}.world-error{background:#f8514914;border:1px solid #f851494d;border-radius:8px;margin:10px 0 0;font-size:.85rem;position:relative}.world-error summary{cursor:pointer;align-items:baseline;gap:8px;min-width:0;padding:8px 12px;list-style:none;display:flex}.world-error summary::-webkit-details-marker{display:none}.world-error summary:before{content:"▸";color:var(--danger);transition:transform .15s}.world-error[open] summary:before{transform:rotate(90deg)}.world-error-title{color:var(--danger);white-space:nowrap;font-weight:600}.world-error-summary{color:var(--text);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.world-error-log{background:var(--bg);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;border-radius:6px;max-height:280px;margin:0 12px 8px;padding:10px;font-size:.75rem;line-height:1.4;overflow:auto}.world-error-when{padding:0 12px 10px}.toasts{z-index:200;flex-direction:column;gap:10px;width:min(380px,100vw - 40px);display:flex;position:fixed;bottom:20px;right:20px}.toast{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 14px;animation:.2s ease-out toast-in}.toast-error{border-left:3px solid var(--danger)}.toast-head{align-items:flex-start;gap:8px;display:flex}.toast-title{flex:1;font-size:.9rem}.toast-close{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:1.2rem;line-height:1}.toast-close:hover{color:var(--text)}.toast-body{color:var(--muted);-webkit-line-clamp:3;word-break:break-word;-webkit-box-orient:vertical;margin-top:6px;font-size:.8rem;display:-webkit-box;overflow:hidden}.toast-actions{justify-content:flex-end;margin-top:8px;display:flex}.toast-more{text-align:center;padding:8px}@keyframes toast-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.toast{animation:none}}
