body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}:root{--bg:#f4f6fb;--card:#fff;--text:#0f1115;--muted:#6b7280;--accent:#3b82f6;--success:#16a34a;--border:#d1d5db;--viewer-bg:#f4f4f4;--skeleton-1:#0000000f;--skeleton-2:#0000001f;--nav-h:64px;--footer-h:64px}[data-theme=dark]{--bg:#0f1115;--card:#161a22;--text:#e6e6e6;--muted:#a3a3a3;--accent:#4ea1ff;--border:#232936;--viewer-bg:#0b0d12;--skeleton-1:#ffffff14;--skeleton-2:#ffffff29}#root,body,html{height:100%}body{background:#f4f6fb;background:var(--bg);color:#0f1115;color:var(--text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,Helvetica Neue,Arial,Apple Color Emoji,Segoe UI Emoji;margin:0}@media (hover:none) and (pointer:coarse){*{-webkit-tap-highlight-color:transparent}}.app-shell{display:flex;flex-direction:column;min-height:100dvh}.app-main{display:block;min-height:calc(100dvh - 64px);min-height:calc(100dvh - var(--nav-h));padding-top:64px;padding-top:var(--nav-h)}.navbar{-webkit-backdrop-filter:saturate(1.5) blur(8px);backdrop-filter:saturate(1.5) blur(8px);background:color-mix(in sRGB,#f4f6fb 90%,#0000);background:color-mix(in sRGB,var(--bg) 90%,#0000);border-bottom:1px solid #d1d5db;border-bottom:1px solid var(--border);height:64px;height:var(--nav-h);left:0;position:fixed;right:0;top:0;z-index:10}.nav-inner{align-items:center;display:flex;gap:12px;height:100%;justify-content:space-between;margin:0 auto;max-width:1200px;padding:0 16px}.brand{align-items:center;color:#0f1115;color:var(--text);display:inline-flex;font-weight:700;gap:8px;text-decoration:none}.brand-logo{display:inline-block;height:40px;object-fit:contain;width:40px}.brand-text{font-size:20px;font-weight:700}.nav-links{align-items:center;display:flex;gap:6px}.nav-links a{border-radius:6px;color:#6b7280;color:var(--muted);margin:0 4px;padding:6px 8px;text-decoration:none;transition:background-color .16s ease,color .16s ease,transform .16s ease}.nav-links a:hover{transform:translateY(-1px)}.nav-links .active,.nav-links a:hover{background:#d1d5db;background:var(--border);color:#0f1115;color:var(--text)}.nav-right{align-items:center;display:flex;gap:10px}.avatar-link{align-items:center;display:inline-flex;height:36px;justify-content:center;overflow:hidden;width:36px}.avatar-link,.avatar-link img{border-radius:50%;text-decoration:none}.avatar-link img{display:block;height:32px;width:32px}.avatar-fallback{background:#d1d5db;background:var(--border);color:#0f1115;color:var(--text);font-weight:600}.avatar-fallback,.avatar-initial-primary{align-items:center;border-radius:50%;display:inline-flex;height:32px;justify-content:center;text-decoration:none;width:32px}.avatar-initial-primary{background:#3b82f6;background:var(--accent);color:#fff;font-weight:700}.avatar-link,.avatar-link:active,.avatar-link:focus,.avatar-link:hover,.avatar-link:link,.avatar-link:visited{text-decoration:none}.theme-switch{background:#0000;border:none;cursor:pointer;height:28px;padding:0;position:relative;width:48px}.switch-track{background:#d1d5db;background:var(--border);border-radius:999px;inset:0;position:absolute;transition:background-color .24s ease}.switch-thumb{background:#fff;background:var(--card);border-radius:50%;box-shadow:0 2px 6px #0003;height:22px;left:3px;position:absolute;top:3px;transition:transform .24s ease,background-color .24s ease;width:22px}.switch-thumb .moon-icon,.switch-thumb .sun-icon{font-size:14px;left:50%;line-height:1;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(0deg);transition:opacity .2s ease,transform .24s ease}.switch-thumb .sun-icon{color:#f59e0b;opacity:1}.switch-thumb .moon-icon{color:#93c5fd;opacity:0;transform:translate(-50%,-50%) rotate(-20deg)}.theme-switch.is-dark .switch-track{background:#3b82f6;background:var(--accent);opacity:.8}.theme-switch.is-dark .switch-thumb{transform:translateX(20px)}.theme-switch.is-dark .switch-thumb .sun-icon{opacity:0;transform:translate(-50%,-50%) rotate(20deg)}.theme-switch.is-dark .switch-thumb .moon-icon{opacity:1;transform:translate(-50%,-50%) rotate(0deg)}.btn,.detail,.detail-viewer,.materials li,.mobile-menu,.model-card,.navbar,.page,body{transition:background-color .22s ease,color .22s ease,border-color .22s ease}.hamburger{align-items:center;background:#0000;border:none;border-radius:0;display:none;flex-direction:column;gap:5px;height:36px;justify-content:center;padding:6px;width:36px}.hamburger span{background:#0f1115;background:var(--text);border-radius:2px;display:block;height:2px;width:20px}.mobile-menu{background:#fff;background:var(--card);border-bottom:1px solid #d1d5db;border-bottom:1px solid var(--border);box-shadow:0 8px 24px #0000001f;display:block;left:0;max-height:0;opacity:0;overflow:hidden;padding:8px 12px;pointer-events:none;position:fixed;right:0;top:64px;top:var(--nav-h);transform:translateY(-6px);transition:max-height .28s ease,opacity .22s ease,transform .22s ease}.mobile-menu a{border-radius:8px;color:#0f1115;color:var(--text);display:block;padding:10px 8px;text-decoration:none}.mobile-menu a:hover{background:#d1d5db;background:var(--border)}.mobile-menu.open{max-height:260px;opacity:1;pointer-events:auto;transform:translateY(0)}@media (max-width:800px){.nav-links{display:none}.hamburger{display:inline-flex}.brand-text,.theme-switch-wrap{display:none}.nav-right .theme-switch{display:none!important}.nav-right{gap:4px}.nav-user,.nav-user .btn{min-width:84px}.nav-user .avatar-initial-primary,.nav-user img{height:32px;width:32px}.nav-user{box-sizing:initial}@media (max-width:520px){.nav-user,.nav-user .btn{min-width:44px!important}.nav-user .btn{padding:6px 8px!important}}}.mobile-menu .theme-switch{align-items:center;display:inline-flex;height:28px;justify-content:center;padding:0;width:48px}.mobile-menu .theme-switch .switch-track{border-radius:999px}.mobile-menu .theme-switch .switch-thumb{height:22px;left:3px;top:3px;width:22px}.mobile-menu .theme-switch.is-dark .switch-thumb{transform:translateX(20px)}.mobile-menu .theme-switch .switch-thumb .moon-icon,.mobile-menu .theme-switch .switch-thumb .sun-icon{font-size:14px;left:50%;line-height:1;position:absolute;top:50%;transform:translate(-50%,-50%)}.home{margin:0 auto;max-width:1200px;padding:24px}.home-header{align-items:center;display:flex;gap:16px;justify-content:space-between}.home-left{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.home-filter{margin-top:2px}.home-header h1{font-size:24px;margin:0}.home-header .subtle{color:#6b7280;color:var(--muted);margin:0}.upload-btn{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;color:#0f1115;color:var(--text);cursor:pointer;padding:10px 14px}.upload-btn:hover{border-color:#3b82f6;border-color:var(--accent)}.empty{color:#6b7280;color:var(--muted);padding:60px 0;text-align:center}.grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));margin-top:20px}.fade-in{animation:fadeIn .4s ease both}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.model-card{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;box-shadow:0 1px 2px #0000000f;overflow:hidden;position:relative;transition:border-color .15s ease,transform .2s ease;-webkit-user-select:none;user-select:none}.model-card:hover{border-color:#3b82f6;border-color:var(--accent);transform:translateY(-2px)}.model-card-viewer{background:#f4f4f4;background:var(--viewer-bg);height:220px;width:100%}.model-card-info{align-items:flex-start;display:flex;flex-direction:column;gap:6px;padding:12px}.model-card-title{font-weight:600;line-height:1.25;max-width:100%;overflow:visible;text-overflow:clip;white-space:normal;word-break:break-word}.model-card-desc{font-size:13px}.model-card-meta{display:none}.model-card-actions{padding:0 12px 12px}.btn{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:10px;color:#0f1115;color:var(--text);cursor:pointer;padding:8px 12px;text-decoration:none;transition:border-color .16s ease,transform .16s ease,box-shadow .2s ease,background-color .2s ease,color .2s ease}.btn:hover{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 6px 18px #00000014;transform:translateY(-1px)}.btn:active{box-shadow:0 2px 8px #0000000f;transform:translateY(0)}.btn.primary{background:#3b82f6;background:var(--accent);border-color:#3b82f6;border-color:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.03)}.btn:focus-visible{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in sRGB,#3b82f6 24%,#0000);box-shadow:0 0 0 3px color-mix(in sRGB,var(--accent) 24%,#0000);outline:none}.btn:disabled{cursor:not-allowed;opacity:.6}.unsaved-toast{align-items:center;animation:slideUp .3s cubic-bezier(.2,.9,.2,1) both;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:10px;bottom:24px;box-shadow:0 10px 30px #0000001f;display:flex;flex-direction:column;gap:10px;left:50%;padding:12px 14px;position:fixed;transform:translateX(-50%);z-index:1200}.unsaved-toast .btn{padding:8px 12px}.unsaved-toast .unsaved-text{font-weight:600}@keyframes slideUp{0%{opacity:0;transform:translateX(-50%) translateY(18px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}@keyframes slideDown{0%{opacity:1;transform:translateX(-50%) translateY(0)}to{opacity:0;transform:translateX(-50%) translateY(18px)}}.unsaved-toast.closing{animation:slideDown .3s cubic-bezier(.2,.9,.2,1) both}.snackbar{animation:snackIn .26s cubic-bezier(.2,.9,.2,1) both;border-radius:10px;bottom:20px;box-shadow:0 10px 30px #0000002e;color:#fff;max-width:420px;min-width:160px;padding:10px 14px;position:fixed;right:20px;z-index:1300}.snackbar.info{background:#1e1e1ee6}.snackbar.success{background:#16a34a}.snackbar.error{background:#dc2626}@keyframes snackIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.btn.danger{background:#ef4444;border-color:#ef4444;color:#fff}.btn.danger:hover{filter:brightness(.95)}.btn.success{background:#16a34a;border-color:#16a34a;color:#fff}.btn.success:hover{filter:brightness(.95)}.detail{margin:0 auto;max-width:1200px;padding:24px}.detail,.detail *{box-sizing:border-box}.detail{overflow-x:hidden}.detail-header{align-items:center;display:flex;gap:16px;margin-bottom:20px}.detail-header h2{margin:0}.back-btn{align-items:center;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;color:#0f1115;color:var(--text);display:inline-flex;gap:8px;padding:6px 10px;text-decoration:none;transition:border-color .16s ease,transform .16s ease,box-shadow .2s ease,background-color .2s ease,color .2s ease}.back-btn:hover{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 6px 18px #00000014;transform:translateY(-1px)}.back-btn:active{box-shadow:0 2px 8px #0000000f;transform:translateY(0)}.back-btn:focus-visible{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in sRGB,#3b82f6 24%,#0000);box-shadow:0 0 0 3px color-mix(in sRGB,var(--accent) 24%,#0000);outline:none}.detail-layout{grid-gap:20px;align-items:start;display:grid;gap:20px;grid-template-columns:1.2fr .8fr}.detail-viewer{background:#f4f4f4;background:var(--viewer-bg);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;margin-top:16px;overflow:hidden;position:relative}.viewer-controls{display:flex;flex-direction:row;gap:6px;position:absolute;right:12px;top:12px;z-index:40}.viewer-controls .icon-btn{align-items:center;background:#0000;border:none;border-radius:6px;box-shadow:none;color:#0f1115;color:var(--text);cursor:pointer;display:inline-flex;height:34px;justify-content:center;transition:transform .16s cubic-bezier(.2,.9,.2,1),opacity .14s ease,color .14s ease,filter .16s ease;width:34px}.viewer-controls .icon-btn:active{transform:scale(.94)}.viewer-controls .icon-btn .fa-fw{font-size:16px}.viewer-controls .icon-heart{color:inherit}.viewer-controls .icon-heart.active{color:#ef4444;filter:drop-shadow(0 6px 18px rgba(239,68,68,.12))}.viewer-controls .icon-star{color:inherit}.viewer-controls .icon-star.active{color:#f59e0b;filter:drop-shadow(0 6px 18px rgba(245,158,11,.12))}.tooltip-box{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;bottom:calc(100% + 8px);box-shadow:0 8px 24px #0000001f;color:#0f1115;color:var(--text);font-size:13px;left:50%;opacity:0;padding:6px 10px;pointer-events:none;position:absolute;transform:translateX(-50%) translateY(6px);transition:transform .18s cubic-bezier(.2,.9,.2,1),opacity .18s ease;white-space:nowrap;z-index:60}.tooltip-box.visible{opacity:1;pointer-events:auto;transform:translateX(-50%) translateY(0)}.tooltip-box .tooltip-content{display:block}.tooltip-box .tooltip-arrow{background:#fff;background:var(--card);border-bottom:1px solid #d1d5db;border-bottom:1px solid var(--border);border-left:1px solid #d1d5db;border-left:1px solid var(--border);border-right:1px solid #d1d5db;border-right:1px solid var(--border);bottom:-6px;-webkit-clip-path:polygon(50% 0,0 100%,100% 100%);clip-path:polygon(50% 0,0 100%,100% 100%);height:8px;left:50%;position:absolute;transform:translateX(-50%);width:10px}[data-theme=dark] .tooltip-box .tooltip-arrow{border-bottom:none;border-left:none;border-right:none}.tooltip-box.position-bottom{bottom:auto;top:calc(100% + 8px);transform:translateX(-50%) translateY(-6px)}.tooltip-box.position-bottom.visible{transform:translateX(-50%) translateY(0)}.tooltip-box.position-bottom .tooltip-arrow{bottom:auto;top:-6px;transform:translateX(-50%) rotate(180deg)}[data-theme=dark] .tooltip-box.position-bottom .tooltip-arrow{border-left:none;border-right:none;border-top:none}.tooltip-target{display:inline-block}@keyframes popPulse{0%{transform:scale(1)}30%{transform:scale(1.22)}50%{transform:scale(.98)}to{transform:scale(1)}}.pop-anim{animation:popPulse .3s cubic-bezier(.2,.9,.2,1);transform-origin:center}.comment-input{background:#0000;border:none;border-bottom:1px solid #d1d5db;border-bottom:1px solid var(--border);border-radius:0;color:#0f1115;color:var(--text);font-family:inherit;font-size:14px;outline:none;padding:8px 6px}.comment-input:focus{border-bottom-color:#3b82f6;border-bottom-color:var(--accent);box-shadow:0 2px 6px #0000000a}.comment-input{min-height:40px;overflow:hidden;resize:none;width:100%}.comment-action-icon{align-items:center;background:#0000;border:none;border-radius:6px;color:#6b7280;color:var(--muted);cursor:pointer;display:inline-flex;justify-content:center;padding:6px;transition:color .14s ease,transform .12s ease}.comment-action-icon:hover{color:#0f1115;color:var(--text);transform:translateY(-1px)}.comment-action-icon:active{transform:translateY(0)}.comments-divider{background:#d1d5db;background:var(--border);border-radius:1px;height:1px;margin:12px 0}.viewer-like-badge{left:12px;padding:4px 8px;top:12px;z-index:39}.model-like-badge,.viewer-like-badge{background:color-mix(in sRGB,#fff 96%,#0000);background:color-mix(in sRGB,var(--card) 96%,#0000);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:999px;box-shadow:0 6px 18px #00000014;color:#0f1115;color:var(--text);font-size:13px;position:absolute}.model-like-badge{align-items:center;bottom:8px;display:inline-flex;gap:6px;left:10px;padding:6px 8px;z-index:20}.model-card-viewer{position:relative}.detail-side{margin-top:16px}.detail-desc{color:#0f1115;color:var(--text)}.detail-info{color:#6b7280;color:var(--muted);margin-top:12px}.materials{margin-top:16px}.materials h3{margin:0 0 8px}.materials ul{list-style:none;margin:0;padding:0}.materials li{border-bottom:1px dashed #d1d5db;border-bottom:1px dashed var(--border);justify-content:space-between;padding:6px 0}.mat-left,.materials li{align-items:center;display:flex}.mat-left{gap:8px}.mat-icon{background:#0000;border-radius:0;height:24px;image-rendering:pixelated;width:24px}.mat-name{color:#0f1115;color:var(--text)}.mat-amount,.muted{color:#6b7280;color:var(--muted)}.holoprint{margin-top:16px;position:relative}.holoprint h3{margin:0 0 8px}.holoprint h3,.holoprint-title{gap:6px;position:relative}.holoprint h3,.holoprint-title,.info{align-items:center;display:inline-flex}.info{cursor:default;font-size:16px;justify-content:center;line-height:1}.info,.info .fa-circle-info{color:#3b82f6;color:var(--accent)}.info-bubble{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 24px #0000001f;color:#0f1115;color:var(--text);font-size:12px;font-weight:400;left:calc(100% + 8px);max-width:calc(100vw - 32px);opacity:0;padding:8px 10px;pointer-events:none;position:absolute;top:50%;transform:translateY(-6px);transition:opacity .18s ease,transform .18s ease,visibility 0s linear .18s;visibility:hidden;width:320px;z-index:60}.holoprint-title .info:active+.info-bubble,.holoprint-title .info:focus+.info-bubble,.holoprint-title .info:focus-visible+.info-bubble,.holoprint-title.is-open .info-bubble,.holoprint-title:focus-within .info-bubble,.holoprint-title:hover .info-bubble{opacity:1;pointer-events:auto;transform:translateY(0);transition-delay:0s;visibility:visible}@media (max-width:600px){.info-bubble{bottom:auto;box-shadow:0 12px 40px #0000001f;left:50%;max-width:calc(100vw - 32px);position:fixed;top:auto;transform:translateX(-50%) translateY(-6px);width:min(320px,calc(100vw - 32px));z-index:9999}.holoprint-title .info:active+.info-bubble,.holoprint-title .info:focus+.info-bubble,.holoprint-title .info:focus-visible+.info-bubble,.holoprint-title.is-open .info-bubble,.holoprint-title:focus-within .info-bubble,.holoprint-title:hover .info-bubble{transform:translateX(-50%) translateY(0)!important}}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.skeleton{animation:shimmer 1.2s ease-in-out infinite;background:linear-gradient(90deg,#0000000f,#0000001f,#0000000f);background:linear-gradient(90deg,var(--skeleton-1),var(--skeleton-2),var(--skeleton-1));background-size:200% 100%;border-radius:6px;overflow:hidden;position:relative}.skeleton-icon{border-radius:4px;height:24px;width:24px}.skeleton-text{height:14px;width:140px}.skeleton-amount{height:14px;width:48px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.holoprint .actions{margin-top:8px}.page{margin:0 auto;max-width:1200px;padding:24px}.site-footer{background:color-mix(in sRGB,#f4f6fb 96%,#0000);background:color-mix(in sRGB,var(--bg) 96%,#0000);border-top:1px solid #d1d5db;border-top:1px solid var(--border);height:64px;height:var(--footer-h)}.footer-inner,.site-footer{align-items:center;display:flex}.footer-inner{box-sizing:border-box;color:#6b7280;color:var(--muted);font-size:14px;gap:12px;justify-content:space-between;margin:0 auto;max-width:1100px;padding:12px 0;width:100%}.footer-nav{display:flex;gap:12px}@media (max-width:600px){.site-footer{border-top-width:1px;height:auto}.footer-inner{font-size:13px;justify-content:center;padding:8px 6px}.footer-nav{display:flex;font-size:12px;gap:8px;margin-left:8px}.footer-left{white-space:nowrap}}.model-card-author{color:#6b7280;color:var(--muted);font-size:12px;margin-bottom:8px;margin-top:6px}.model-card-desc{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;color:#6b7280;color:var(--muted);display:-webkit-box;font-size:15px;margin-top:4px;max-height:3em;overflow:hidden;text-overflow:ellipsis}.preview-grid-container{background:#f4f4f4;background:var(--viewer-bg);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;height:100%;overflow:hidden;position:relative;width:100%}.preview-grid-overlay{background-image:linear-gradient(#0000001a 1px,#0000 0),linear-gradient(90deg,#0000001a 1px,#0000 0);background-size:24px 24px;inset:0;opacity:.12;pointer-events:none;position:absolute;z-index:40}[data-theme=dark] .preview-grid-overlay{background-image:linear-gradient(#ffffff0f 1px,#0000 0),linear-gradient(90deg,#ffffff0f 1px,#0000 0);opacity:.14}.comment-author,.comment-author:active,.comment-author:hover,.comment-author:link,.comment-author:visited,.model-card-author a,.muted a{color:#6b7280;color:var(--muted);text-decoration:none}.comment-author:hover,.model-card-author a:hover,.muted a:hover{color:#0f1115;color:var(--text);text-decoration:underline}.upload-page h2{margin-top:0}.form-card{box-shadow:0 1px 2px #0000000f}.form-card,.panel{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;padding:16px}.panel+.panel{margin-top:12px}.panel-head{align-items:center;box-sizing:border-box;cursor:pointer;display:flex;height:20px;justify-content:space-between;margin-bottom:6px;padding:0 8px}.panel-head strong{font-size:12px;font-weight:600;line-height:12px}.panel-head:hover{background:color-mix(in sRGB,#d1d5db 12%,#0000);background:color-mix(in sRGB,var(--border) 12%,#0000)}.toggle-materials{align-items:center;background:#0000;border:none;display:inline-flex;height:100%;padding:0 6px;pointer-events:none}.toggle-materials .fa-chevron-right{display:inline-block;font-size:18px;line-height:1;transform-origin:center;transition:transform .18s ease;vertical-align:middle}.toggle-materials .fa-chevron-right.is-open{transform:rotate(90deg)}.panel-body{max-height:0;opacity:0;overflow:hidden;transition:max-height .34s cubic-bezier(.2,.9,.2,1),opacity .22s ease}.panel-body.is-open{max-height:50vh;opacity:1;overflow:auto}.panel-body.is-open::-webkit-scrollbar{width:10px}.panel-body.is-open::-webkit-scrollbar-thumb{background:color-mix(in sRGB,#d1d5db 75%,#fff);background:color-mix(in sRGB,var(--border) 75%,var(--card));border-radius:8px}.panel-body.is-open::-webkit-scrollbar-thumb:hover{background:color-mix(in sRGB,#d1d5db 90%,#fff);background:color-mix(in sRGB,var(--border) 90%,var(--card))}.panel-body.is-open{scrollbar-color:color-mix(in sRGB,#d1d5db 75%,#fff) #0000;scrollbar-color:color-mix(in sRGB,var(--border) 75%,var(--card)) #0000;scrollbar-width:thin}.materials-list{grid-gap:0;display:grid;gap:0;grid-template-columns:repeat(2,1fr);list-style:none;margin:0;padding:0}.materials-list li{align-items:center;border-bottom:1px solid #d1d5db;border-bottom:1px solid var(--border);display:flex;gap:8px;padding:10px 8px}.materials-list li img{flex:0 0 auto}.materials-list li>span:first-of-type{flex:1 1 auto}@media (max-width:600px){.materials-list{grid-template-columns:1fr}.materials-list li{padding:10px 6px}}.btn-ghost{background:#0000;border:1px solid #0000}.field-row{grid-gap:12px;display:grid;gap:12px;grid-template-columns:1fr;margin-top:10px}.field-row.two{grid-template-columns:1fr 1fr}@media (max-width:900px){.field-row.two{grid-template-columns:1fr}}.field{display:flex;flex-direction:column;gap:6px}.field.actions{align-self:end}.preview-panel{box-sizing:border-box;display:flex;gap:12px;height:280px;max-height:280px;max-width:920px;min-height:280px;overflow:hidden;width:100%}.preview-panel .viewer{border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;display:flex;flex:1 1;height:100%;min-height:0;min-width:0;overflow:hidden}.preview-panel .viewer>*{height:100%;width:100%}.preview-panel .preview-box{display:flex;flex:1 1;flex-direction:column;gap:8px;height:100%;min-width:0}.preview-panel .preview-image{align-items:center;display:flex;flex:1 1;justify-content:center;min-height:0;overflow:hidden}.preview-panel .preview-image img{border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;display:block;height:100%;object-fit:cover;width:100%}.preview-panel .preview-actions{align-items:center;display:flex;gap:8px;justify-content:space-between}label{color:#0f1115;color:var(--text);font-weight:600}.req{color:#ef4444;margin-left:2px}.input,.input-file,.textarea,select.input{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:10px;color:#0f1115;color:var(--text);outline:none;padding:10px 12px;transition:border-color .16s ease,box-shadow .18s ease}.input-file:focus,.input:focus,.textarea:focus,select.input:focus{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in sRGB,#3b82f6 24%,#0000);box-shadow:0 0 0 3px color-mix(in sRGB,var(--accent) 24%,#0000)}.input-error{border-color:#ef4444!important;box-shadow:0 0 0 3px color-mix(in sRGB,#ef4444 24%,#0000)}.textarea{min-height:90px;resize:vertical}.help{color:#6b7280;color:var(--muted);font-size:13px}.error-text{color:#ef4444;font-size:13px}.file-meta{color:#6b7280;color:var(--muted);font-size:12px}.code-block{background:#f4f4f4;background:var(--viewer-bg);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;color:#0f1115;color:var(--text);max-height:320px;overflow:auto;padding:12px}.chips{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:10px;display:flex;flex-wrap:wrap;min-height:44px;padding:6px}.chip,.chips{align-items:center;gap:6px}.chip{background:#d1d5db;background:var(--border);border-radius:999px;color:#0f1115;color:var(--text);display:inline-flex;padding:6px 10px}.chip-x{color:#6b7280;color:var(--muted);cursor:pointer;font-size:14px;line-height:1}.chip-input,.chip-x{background:#0000;border:none}.chip-input{color:#0f1115;color:var(--text);flex:1 1;min-width:160px;outline:none;padding:8px}.guide-section{margin-top:8px}.guide-section h3{font-size:16px;margin:6px 0}.guide-section ol{margin:6px 0 0 18px}.guide-section li{margin:8px 0}.screenshot-ph{background:none;border:none;border-radius:8px;display:block;height:auto;margin-top:6px;max-width:50%;object-fit:contain}.screenshot-ph.small{max-width:40%}.guide .panel-head .guide-title{font-size:25px}.guide .guide-note{font-size:15px;margin:4px 0 20px}.credits{margin-top:16px}.credits h3{margin:0 0 4px}.credits-row{align-items:center;display:flex;gap:10px;margin-left:10px}.author-label{color:#6b7280;color:var(--muted);margin-right:4px}.author-name{color:#0f1115;color:var(--text)}.social-icons{gap:2px}.social-icon,.social-icons{align-items:center;display:inline-flex}.social-icon{color:#6b7280;color:var(--muted);height:28px;justify-content:center;text-decoration:none;width:28px}.social-icon:hover{color:#3b82f6;color:var(--accent)}.mobile-meta{display:none}@media (max-width:900px){.detail-layout{grid-gap:16px!important;align-items:start;display:grid!important;gap:16px!important;grid-template-columns:1fr;grid-template-columns:1fr!important}.detail-left,.detail-side{width:100%!important}.detail-viewer{height:220px!important;margin-top:8px!important}.detail-viewer>.model-viewer-root{height:100%!important;min-height:0!important}}@media (max-width:900px){@media (max-width:420px){.detail-viewer{min-height:220px!important}}.detail-left .field input[type=range]{width:100%!important}.viewer-like-badge{padding:3px 6px;top:8px}.model-like-badge,.viewer-like-badge{font-size:12px;left:8px;line-height:20px}.model-like-badge{bottom:8px;height:auto;padding:4px 6px}.viewer-controls .icon-btn{height:30px;width:30px}.mobile-meta{display:block!important;margin-top:12px}.detail-side .categories,.detail-side .description,.detail-side .dimensions,.detail-side .published{display:none!important}}.filter-bar{align-items:center;display:flex;gap:10px;justify-content:center;width:100%}.cat-picker{position:relative}.cat-button{align-items:center;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:10px;box-shadow:0 2px 10px #0000000d;color:#0f1115;color:var(--text);cursor:pointer;display:inline-flex;gap:8px;padding:10px 12px;transition:border-color .16s ease,transform .16s ease,box-shadow .2s ease,background-color .2s ease,color .2s ease}.cat-button:hover{transform:translateY(-1px)}.cat-button:focus-visible{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in sRGB,#3b82f6 24%,#0000);box-shadow:0 0 0 3px color-mix(in sRGB,var(--accent) 24%,#0000);outline:none}.cat-caret{color:#6b7280;color:var(--muted);font-size:12px}.cat-panel{animation:ddIn .16s ease-out both;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;box-shadow:0 18px 42px #00000024;color:#0f1115;color:var(--text);left:0;max-height:300px;overflow:hidden;position:absolute;top:calc(100% + 8px);width:280px;z-index:20}@keyframes ddIn{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.cat-search-wrap{border-bottom:1px solid #d1d5db;border-bottom:1px solid var(--border);padding:8px}.cat-search{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;box-sizing:border-box;color:#0f1115;color:var(--text);outline:none;padding:8px 10px;transition:border-color .16s ease,box-shadow .18s ease;width:100%}.cat-search:focus{border-color:#3b82f6;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in sRGB,#3b82f6 24%,#0000);box-shadow:0 0 0 3px color-mix(in sRGB,var(--accent) 24%,#0000)}.cat-options{max-height:240px;overflow:auto;padding:6px}.cat-empty{color:#6b7280;color:var(--muted);padding:12px;text-align:center}.cat-option{align-items:center;background:#0000;border:none;border-radius:8px;color:#0f1115;color:var(--text);cursor:pointer;display:flex;justify-content:space-between;padding:8px 10px;text-align:left;width:100%}.cat-option:hover{background:#d1d5db;background:var(--border)}.cat-option.selected{background:color-mix(in sRGB,#3b82f6 12%,#0000);background:color-mix(in sRGB,var(--accent) 12%,#0000)}.cat-check{color:#3b82f6;color:var(--accent)}.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.tag{align-items:center;background:#d1d5db;background:var(--border);border-radius:999px;color:#0f1115;color:var(--text);display:inline-flex;font-size:12px;padding:4px 8px}.skeleton-viewer{border-radius:0;height:220px;width:100%}.skeleton-line{height:14px;width:70%}.skeleton-button{border-radius:8px;height:36px;width:120px}.admin-page h2{margin:0}.admin-head{display:flex;gap:12px;justify-content:space-between;margin-bottom:12px}.admin-head,.tabs{align-items:center}.tabs{display:inline-flex;gap:8px}.materials-modal{max-height:80vh;overflow:hidden;width:min(520px,96vw)}.materials-modal .modal-head{font-size:16px;font-weight:700}.materials-list-modal li{animation:materialItemIn .22s cubic-bezier(.2,.9,.2,1) forwards;opacity:0;transform:translateY(6px)}.materials-list-modal li:first-child{animation-delay:40ms}.materials-list-modal li:nth-child(2){animation-delay:70ms}.materials-list-modal li:nth-child(3){animation-delay:.1s}.materials-list-modal li:nth-child(4){animation-delay:.13s}.materials-list-modal li:nth-child(5){animation-delay:.16s}.materials-list-modal li:nth-child(6){animation-delay:.19s}.materials-list-modal li:nth-child(7){animation-delay:.22s}.materials-list-modal li:nth-child(8){animation-delay:.25s}@keyframes materialItemIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.materials-list-modal li{align-items:center;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;display:flex;justify-content:space-between;padding:8px}@media (max-width:720px){.admin-head{align-items:flex-start;flex-direction:column;gap:8px}.tabs{display:flex;flex-wrap:wrap;gap:8px;width:100%}.tabs .tab{flex:0 0 auto;white-space:nowrap}}.profile-head{gap:12px;justify-content:space-between;margin-bottom:12px}.profile-actions,.profile-head{align-items:center;display:flex}.profile-actions{gap:8px}@media (max-width:720px){.profile-head{align-items:flex-start!important;flex-direction:column!important}.profile-actions{display:flex;gap:8px;justify-content:flex-start;margin-top:8px;width:100%}.profile-actions .btn{flex:0 0 auto}.profile-head>div:first-child{align-items:flex-start!important;display:flex!important;gap:12px;width:100%!important}.profile-head>div:first-child>div{text-align:left!important;width:100%!important}.profile-head .avatar-initial-primary,.profile-head img{flex:0 0 auto;margin-right:12px}}.tab{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:999px;color:#0f1115;color:var(--text);cursor:pointer;padding:8px 12px}.tab.active{background:color-mix(in sRGB,#3b82f6 14%,#fff);background:color-mix(in sRGB,var(--accent) 14%,var(--card));border-color:#3b82f6;border-color:var(--accent)}.admin-card{background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;box-shadow:0 1px 2px #0000000f;margin:40px auto;max-width:420px;padding:16px}.admin-form{display:flex;flex-direction:column;gap:12px}.submissions-grid{grid-gap:12px;display:grid;gap:12px;grid-template-columns:1fr}.submission-card{grid-gap:12px;align-items:start;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;display:grid;gap:12px;grid-template-columns:1.2fr .8fr;overflow:hidden}.submission-viewer{align-items:center;background:#f4f4f4;background:var(--viewer-bg);display:flex;justify-content:center;min-height:260px;overflow:hidden}.materials-panel{margin-top:8px}.materials-header{align-items:center;cursor:pointer;display:flex;gap:8px;justify-content:space-between}.materials-header .muted{font-weight:600}.materials-body{margin-top:6px;max-height:180px;overflow:auto;padding-right:8px}.materials-body ul{column-count:2;column-gap:24px;margin:0;padding-left:18px}.materials-collapsed-preview{color:#6b7280;color:var(--muted);font-size:13px}.materials-body{scrollbar-color:#78787899 #0000000a;scrollbar-width:thin}.materials-body::-webkit-scrollbar{height:10px;width:10px}.materials-body::-webkit-scrollbar-track{background:#0000}.materials-body::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#787878a6,#58585899);background-clip:padding-box;border:2px solid #0000;border-radius:8px}.materials-body::-webkit-scrollbar-thumb:hover{filter:brightness(.95)}.materials-body:after,.materials-body:before{content:"";height:8px;left:0;pointer-events:none;position:-webkit-sticky;position:sticky;right:0;z-index:2}.materials-body:before{background:linear-gradient(180deg,#0000000f,#0000);display:block;top:0}.materials-body:after{background:linear-gradient(0deg,#0000000a,#0000);bottom:0;display:block}.submission-card.materials-open{align-items:stretch}.submission-card.materials-open .submission-viewer{min-height:260px}.submission-info{display:flex;flex-direction:column;gap:8px;padding:12px}.submission-info .actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}@media (max-width:900px){.submission-card{grid-template-columns:1fr}}.modal-backdrop{align-items:center;animation:fadeIn .18s ease-out both;background:#00000073;display:flex;inset:0;justify-content:center;position:fixed;z-index:1000}.modal{animation:scaleIn .2s ease-out both;background:#fff;background:var(--card);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:12px;box-shadow:0 18px 42px #0000002e;color:#0f1115;color:var(--text);padding:16px;width:min(520px,92vw)}.modal-head{font-size:18px;margin-bottom:6px}@keyframes scaleIn{0%{opacity:0;transform:translateY(4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.captcha-modal{border-radius:14px;box-shadow:0 28px 64px #02061752;padding:22px 20px;text-align:center}.captcha-modal .modal-head{font-size:20px;font-weight:700;margin-bottom:6px}.captcha-modal .muted{color:#6b7280;color:var(--muted);font-size:14px}.captcha-modal .hcaptcha-widget{align-items:center;display:flex;justify-content:center;margin:8px auto 12px}.captcha-modal .modal-actions{display:flex;gap:10px;justify-content:center;margin-top:6px}.captcha-modal .btn{min-width:110px}.captcha-modal .btn.primary{min-width:120px}@media (max-width:520px){.captcha-modal{padding:16px}.captcha-modal .modal-head{font-size:18px}}@keyframes confirmPop{0%{opacity:0;transform:translateY(6px) scale(.98)}50%{opacity:1;transform:translateY(-6px) scale(1.06)}to{opacity:1;transform:translateY(0) scale(1)}}.confirm-pop{animation:confirmPop .22s cubic-bezier(.2,.9,.2,1) both;transform-origin:center}@keyframes toastIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.toast-item{animation:toastIn .32s cubic-bezier(.2,.9,.2,1) both;max-width:720px}@keyframes toastOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(8px)}}.toast-exit{animation:toastOut .22s cubic-bezier(.2,.9,.2,1) both}.pager{align-items:center;animation:pagerIn .26s cubic-bezier(.2,.9,.2,1) both;display:flex;gap:8px}.pager .btn{background:#0000;border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;color:#0f1115;color:var(--text);height:36px;min-width:36px;padding:8px 10px}.pager .btn:hover{transform:translateY(-2px)}.pager .btn.pager-active{background:#0000;border-color:#3b82f6;border-color:var(--accent);box-shadow:none;color:#3b82f6;color:var(--accent)}.pager-summary{color:#6b7280;color:var(--muted);font-size:13px;text-align:center}.viewer-spinner{align-items:center;display:flex;inset:0;justify-content:center;pointer-events:none;position:absolute}.spinner-ring{animation:spin .82s linear infinite;border:4px solid #00000014;border-radius:50%;border-top:4px solid var(--accent);box-shadow:0 4px 14px #00000014;height:44px;width:44px}@keyframes spin{to{transform:rotate(1turn)}}@media (max-width:600px){.spinner-ring{border-width:3px;height:36px;width:36px}}.glb-preview{background:#f4f4f4;background:var(--viewer-bg);border:1px solid #d1d5db;border:1px solid var(--border);border-radius:8px;box-sizing:border-box;height:220px;max-width:100%;overflow:hidden;width:100%}.glb-preview canvas{display:block;height:100%!important}.glb-preview canvas,.glb-preview>div{width:100%!important}.detail-viewer canvas,.detail-viewer>canvas{display:block;height:100%!important;width:100%!important}.detail-left .field input[type=range]{width:220px}.detail-left .field div{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}@keyframes pagerIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
/*# sourceMappingURL=main.fd6a4cc6.css.map*/