:root{color:#20242a;font-synthesis:none;text-rendering:optimizelegibility;--bg:#f7f8fa;--surface:#fff;--surface-soft:#f0f2f5;--border:#dfe3e8;--border-strong:#cbd1d8;--text:#20242a;--muted:#69717c;--accent:#167a62;--accent-hover:#0f6652;--accent-soft:#e4f3ee;--danger:#b43737;--danger-soft:#fbeaea;--shadow:0 16px 44px #161d251f;background:#f7f8fa;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{background:var(--bg);min-width:320px;min-height:100vh;color:var(--text);letter-spacing:0;margin:0}button,input{font:inherit;letter-spacing:0}button{color:inherit}button:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline-offset:2px;outline:3px solid #167a6238}.centered-page,.login-page{place-items:center;min-height:100vh;padding:28px;display:grid}.centered-page{align-content:center;gap:18px}.muted{color:var(--muted)}.login-page{background:linear-gradient(#ffffffbd, #ffffffbd), repeating-linear-gradient(90deg, transparent 0 47px, #20242a0b 48px), repeating-linear-gradient(0deg, transparent 0 47px, #20242a0b 48px), var(--bg)}.login-panel{border:1px solid var(--border);width:min(100%,410px);box-shadow:var(--shadow);background:#fffffff5;border-radius:8px;padding:30px}.brand-row{align-items:center;gap:10px;font-size:17px;font-weight:750;display:flex}.brand-row.compact{font-size:16px}.brand-mark{color:#fff;background:var(--accent);border-radius:7px;place-items:center;width:38px;height:38px;display:grid}.compact .brand-mark{width:34px;height:34px}.login-copy{margin:34px 0 24px}.login-copy h1{margin:0 0 8px;font-size:25px;line-height:1.2}.login-copy p{color:var(--muted);margin:0;font-size:14px;line-height:1.7}.login-form{gap:10px;display:grid}.login-form label{font-size:13px;font-weight:700}.password-field,.search-field{border:1px solid var(--border-strong);background:var(--surface);border-radius:7px;align-items:center;display:flex}.password-field{height:46px;color:var(--muted);gap:10px;padding:0 13px}.password-field:focus-within,.search-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px #167a621a}.password-field input,.search-field input{width:100%;color:var(--text);background:0 0;border:0;outline:0}.form-error{color:var(--danger);margin:0;font-size:13px}.primary-button,.secondary-button,.danger-button{cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:0 16px;font-weight:700;display:inline-flex}.primary-button{background:var(--accent);color:#fff}.primary-button:hover:not(:disabled){background:var(--accent-hover)}.secondary-button{background:var(--surface);border-color:var(--border-strong)}.secondary-button:hover:not(:disabled){background:var(--surface-soft)}.danger-button{background:var(--danger);color:#fff}.danger-button:hover:not(:disabled){background:#962c2c}.primary-button:disabled,.secondary-button:disabled,.danger-button:disabled,.icon-button:disabled{opacity:.55;cursor:not-allowed}.full-button{width:100%;margin-top:6px}.topbar{z-index:20;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffffeb;position:sticky;top:0}.topbar-inner{justify-content:space-between;align-items:center;width:min(100% - 40px,1180px);height:64px;margin:0 auto;display:flex}.topbar-actions,.toolbar-meta,.card-actions{align-items:center;gap:8px;display:flex}.storage-badge{color:var(--muted);align-items:center;gap:7px;font-size:12px;font-weight:700;display:inline-flex}.storage-badge span{width:7px;height:7px;box-shadow:0 0 0 3px var(--accent-soft);background:#2aa37f;border-radius:50%}.icon-button{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;place-items:center;width:36px;height:36px;padding:0;display:inline-grid}.icon-button:hover:not(:disabled){border-color:var(--border);background:var(--surface-soft)}.library-page{width:min(100% - 40px,1180px);margin:0 auto;padding:42px 0 70px}.page-heading{justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:24px;display:flex}.eyebrow{color:var(--accent);text-transform:uppercase;margin:0 0 6px;font-size:12px;font-weight:800}.page-heading h1{margin:0;font-size:28px;line-height:1.15}.upload-zone{border:1px dashed var(--border-strong);background:var(--surface);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:16px;min-height:132px;padding:24px;transition:border-color .16s,background .16s;display:flex}.upload-zone:hover,.upload-zone.is-dragging{border-color:var(--accent);background:#f4fbf8}.upload-icon{width:48px;height:48px;color:var(--accent);background:var(--accent-soft);border-radius:8px;flex:none;place-items:center;display:grid}.upload-zone strong{margin-bottom:6px;font-size:15px;display:block}.upload-zone p{color:var(--muted);margin:0;font-size:13px;line-height:1.5}.library-toolbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:16px;min-height:68px;display:flex}.search-field{width:min(100%,330px);height:38px;color:var(--muted);gap:8px;padding:0 10px}.search-field input{font-size:13px}.search-field button{width:27px;height:27px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:5px;place-items:center;display:grid}.search-field button:hover{background:var(--surface-soft)}.toolbar-meta{color:var(--muted);font-size:13px}.image-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;padding-top:22px;display:grid}.image-card{border:1px solid var(--border);background:var(--surface);border-radius:7px;min-width:0;overflow:visible}.thumbnail-button{aspect-ratio:4/3;cursor:zoom-in;background:#e9ecf0;border:0;border-radius:6px 6px 0 0;width:100%;padding:0;display:block;position:relative;overflow:hidden}.thumbnail-button img{object-fit:cover;width:100%;height:100%;transition:transform .18s;display:block}.thumbnail-button:hover img{transform:scale(1.02)}.preview-hint{color:#fff;opacity:0;background:#13171cc2;border-radius:6px;align-items:center;gap:5px;padding:6px 8px;font-size:11px;font-weight:700;transition:opacity .16s,transform .16s;display:flex;position:absolute;bottom:10px;right:10px;transform:translateY(3px)}.thumbnail-button:hover .preview-hint,.thumbnail-button:focus-visible .preview-hint{opacity:1;transform:translateY(0)}.image-card-body{justify-content:space-between;align-items:center;gap:8px;min-height:68px;padding:10px 9px 10px 12px;display:flex}.image-info{gap:4px;min-width:0;display:grid}.image-info strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.image-info span{color:var(--muted);white-space:nowrap;font-size:11px}.menu-wrap{position:relative}.action-menu{z-index:12;border:1px solid var(--border);background:var(--surface);width:175px;box-shadow:var(--shadow);border-radius:7px;padding:5px;position:absolute;top:42px;right:0}.action-menu button{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:9px;width:100%;min-height:36px;padding:0 10px;font-size:13px;display:flex}.action-menu button:hover{background:var(--surface-soft)}.action-menu .danger-action{color:var(--danger)}.image-skeleton{aspect-ratio:4/3;background:linear-gradient(100deg,#e8ebef 30%,#f3f5f7 45%,#e8ebef 60%) 0 0/220% 100%;border-radius:7px;animation:1.3s linear infinite shimmer}.empty-state{text-align:center;align-content:center;justify-items:center;min-height:330px;display:grid}.empty-icon{width:52px;height:52px;color:var(--muted);background:var(--surface-soft);border-radius:8px;place-items:center;display:grid}.empty-state h2{margin:16px 0 7px;font-size:17px}.empty-state p{color:var(--muted);margin:0 0 18px;font-size:13px}.load-more-row{justify-content:center;padding-top:28px;display:flex}.upload-status{z-index:35;border:1px solid var(--border);background:var(--surface);width:min(330px,100vw - 44px);box-shadow:var(--shadow);border-radius:8px;padding:14px;position:fixed;bottom:22px;right:22px}.upload-status>strong{margin-bottom:8px;font-size:12px;display:block}.upload-row{min-height:30px;color:var(--muted);align-items:center;gap:8px;font-size:12px;display:flex}.upload-row span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.upload-row.done{color:var(--accent)}.upload-row.error{color:var(--danger)}.toast{z-index:60;color:#fff;max-width:calc(100vw - 32px);min-height:42px;box-shadow:var(--shadow);background:#252a30;border:1px solid #343a41;border-radius:7px;align-items:center;gap:9px;padding:0 10px 0 14px;font-size:13px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.toast.success{background:#125b49;border-color:#176b57}.toast.error{background:#812727;border-color:#9f3030}.toast button{width:27px;height:27px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;place-items:center;display:grid}.toast button:hover{background:#ffffff1a}.dialog-backdrop{z-index:50;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#121519a8;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.preview-dialog{background:var(--surface);width:min(980px,100%);max-height:calc(100vh - 40px);box-shadow:var(--shadow);border-radius:8px;grid-template-rows:auto minmax(0,1fr) auto;display:grid;overflow:hidden}.preview-dialog header,.preview-dialog footer{justify-content:space-between;align-items:center;gap:14px;min-height:66px;padding:12px 16px;display:flex}.preview-dialog header{border-bottom:1px solid var(--border)}.preview-dialog header>div{gap:4px;min-width:0;display:grid}.preview-dialog header strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.preview-dialog header span{color:var(--muted);font-size:12px}.preview-canvas{background:#15191e;place-items:center;min-height:280px;padding:20px;display:grid;overflow:auto}.preview-canvas img{object-fit:contain;max-width:100%;max-height:calc(100vh - 190px)}.preview-dialog footer{border-top:1px solid var(--border)}.link-field{border:1px solid var(--border);background:var(--surface-soft);border-radius:7px;flex:1;align-items:center;min-width:0;height:40px;padding:0 12px;display:flex;overflow:hidden}.link-field span{text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;overflow:hidden}.confirm-dialog{background:var(--surface);width:min(440px,100%);box-shadow:var(--shadow);border-radius:8px;grid-template-columns:auto 1fr;gap:14px;padding:22px;display:grid}.danger-icon{width:42px;height:42px;color:var(--danger);background:var(--danger-soft);border-radius:7px;place-items:center;display:grid}.confirm-dialog h2{margin:1px 0 8px;font-size:18px}.confirm-dialog p{color:var(--muted);overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.6}.confirm-actions{grid-column:1/-1;justify-content:flex-end;gap:8px;padding-top:7px;display:flex}.spin{animation:.85s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes shimmer{to{background-position-x:-220%}}@media (width<=920px){.image-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=680px){.topbar-inner,.library-page{width:min(100% - 28px,1180px)}.library-page{padding-top:28px}.page-heading{align-items:center}.page-heading h1{font-size:24px}.page-heading .primary-button{width:42px;padding:0}.page-heading .primary-button svg{margin:0}.page-heading .primary-button{font-size:0}.upload-zone{justify-content:flex-start;min-height:122px;padding:20px}.library-toolbar{flex-direction:column;justify-content:center;align-items:stretch;padding:14px 0}.search-field{width:100%}.toolbar-meta{justify-content:space-between}.image-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:14px}.image-card-body{min-height:62px;padding-left:9px}.image-info span{font-size:10px}.storage-badge{display:none}.preview-dialog footer{flex-direction:column;align-items:stretch}.preview-dialog footer .primary-button{width:100%}.link-field{flex:0 0 40px}.upload-status{width:calc(100vw - 28px);bottom:14px;right:14px}}@media (width<=430px){.login-page{padding:16px}.login-panel{padding:24px 20px}.upload-zone{gap:12px}.upload-icon{width:42px;height:42px}.upload-zone p{font-size:11px}.thumbnail-button{aspect-ratio:1}.card-actions .icon-button:first-child{display:none}.confirm-dialog{padding:18px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
