.gallery-main{padding-top:120px;max-width:1400px;margin:0 auto}.gallery-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:40px}.gallery-header h1{font-size:2.5rem;font-weight:700;color:var(--color-text-primary);margin:0 0 8px}.gallery-subtitle{font-size:1.1rem;color:var(--color-text-secondary);margin:0}.gallery-search{position:relative;display:flex;align-items:center;margin-right:20px}.gallery-search svg{position:absolute;left:14px;color:var(--color-text-tertiary);pointer-events:none}.gallery-search input{padding:10px 16px 10px 44px;border:2px solid var(--color-border);border-radius:12px;font-size:.95rem;width:300px;transition:all .2s ease;background:var(--color-bg)}.gallery-search input:focus{outline:none;border-color:var(--color-primary);box-shadow:var(--focus-ring)}.gallery-filters{display:flex;gap:20px;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--color-border)}.filter-group{display:flex;align-items:center;gap:10px}.filter-group label{font-weight:600;color:var(--color-text-secondary);font-size:.9rem}.filter-group select{padding:8px 32px 8px 12px;border:2px solid var(--color-border);border-radius:8px;font-size:.9rem;background:var(--color-bg);cursor:pointer;transition:all .2s ease}.filter-group select:hover{border-color:var(--color-primary)}.filter-group select:focus{outline:none;border-color:var(--color-primary);box-shadow:var(--focus-ring)}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:28px;margin-bottom:60px}.gallery-card{background:linear-gradient(180deg,#f8faffeb,#fffffffa);border:1px solid rgba(44,62,80,.08);border-radius:20px;overflow:hidden;box-shadow:var(--shadow-sm);transition:all .3s cubic-bezier(.4,0,.2,1);cursor:pointer;display:flex;flex-direction:column}.gallery-card:hover{transform:translateY(-4px);box-shadow:0 18px 40px #0f172a14;border-color:#315fd429}.gallery-card-thumbnail{width:100%;height:200px;object-fit:cover;background:var(--gradient-accent);display:flex;align-items:center;justify-content:center;color:var(--color-text-on-color);font-size:3rem;font-weight:700}.gallery-card-thumbnail img{width:100%;height:100%;object-fit:cover}.gallery-card-content{padding:20px;flex:1;display:flex;flex-direction:column}.gallery-card-title{font-size:1.2rem;font-family:Open Sans,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-weight:700;color:var(--color-text-primary);margin:0 0 12px;line-height:1.4;letter-spacing:-.02em}.gallery-card-description{font-size:.95rem;color:var(--color-text-secondary);line-height:1.6;margin:0 0 16px;flex:1;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.gallery-card-meta{display:flex;flex-direction:column;gap:8px;padding-top:16px;border-top:1px solid var(--color-bg-hover)}.gallery-card-author{font-size:.9rem;font-weight:600;color:var(--color-text-primary);display:grid;grid-template-columns:16px minmax(0,1fr);align-items:start;column-gap:8px;line-height:1.5}.gallery-card-author svg{width:16px;height:16px;color:var(--color-text-tertiary);margin-top:2px}.gallery-card-affiliation{font-size:.85rem;color:var(--color-text-tertiary);display:grid;grid-template-columns:16px minmax(0,1fr);align-items:start;column-gap:8px;line-height:1.5}.gallery-card-affiliation svg{width:16px;height:16px;margin-top:2px}.gallery-loading{grid-column:1 / -1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--color-text-tertiary)}.loading-spinner{width:40px;height:40px;border:4px solid var(--color-bg-hover);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite;margin-bottom:16px}.loading-spinner.small{width:16px;height:16px;border-width:2px;margin:0;display:inline-block;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}.gallery-empty{grid-column:1 / -1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 20px;color:var(--color-text-tertiary)}.gallery-empty svg{margin-bottom:20px;opacity:.5}.gallery-empty h3{font-size:1.5rem;color:var(--color-text-secondary);margin:0 0 8px}.gallery-empty p{font-size:1rem;margin:0}.modal-large{max-width:700px;max-height:90vh;overflow-y:auto}.form-section{margin-bottom:32px}.form-section h3{font-size:1.1rem;font-weight:600;color:var(--color-text-primary);margin:0 0 16px}.form-group{margin-bottom:20px}.form-group label{display:block;font-weight:600;color:var(--color-text-primary);margin-bottom:8px;font-size:.9rem}.form-input{width:100%;padding:12px 16px;border:2px solid var(--color-border);border-radius:8px;font-size:.95rem;font-family:inherit;transition:all .2s ease}.form-input:focus{outline:none;border-color:var(--color-primary);box-shadow:var(--focus-ring)}.form-input::placeholder{color:var(--color-text-tertiary)}textarea.form-input{resize:vertical;min-height:80px}.form-hint{display:block;font-size:.85rem;color:var(--color-text-tertiary);margin-top:6px}.thumbnail-upload-area{position:relative;min-height:200px}.thumbnail-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:40px;border:2px dashed var(--color-border);border-radius:12px;background:var(--color-bg-subtle);transition:all .2s ease}.thumbnail-placeholder:hover{border-color:var(--color-primary);background:#f5f9ff}.thumbnail-placeholder svg{color:var(--color-text-tertiary)}.thumbnail-placeholder p{margin:0;color:var(--color-text-secondary);font-weight:600}.thumbnail-preview{position:relative;border-radius:12px;overflow:hidden;border:2px solid var(--color-border)}.thumbnail-preview img{width:100%;height:auto;display:block}.thumbnail-remove{position:absolute;top:12px;right:12px;width:32px;height:32px;border:none;background:var(--backdrop-overlay);color:var(--color-text-on-color);border-radius:50%;font-size:24px;line-height:1;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;padding:0}.thumbnail-remove:hover{background:var(--color-error-badge);transform:scale(1.1)}.github-notice{display:flex;gap:12px;padding:16px;background:var(--color-bg-secondary);border-radius:12px;border-left:4px solid var(--color-primary)}.github-notice svg{flex-shrink:0;color:var(--color-primary)}.github-notice strong{display:block;color:var(--color-text-primary);margin-bottom:4px}.github-notice p{margin:0;font-size:.9rem;color:var(--color-text-secondary);line-height:1.5}.modal-footer{display:flex;gap:12px;justify-content:flex-end;margin-top:32px;padding-top:20px;border-top:1px solid var(--color-border)}.readonly-bar{position:fixed;top:20px;left:400px;z-index:1100;display:flex;align-items:center;background:var(--color-glass);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:14px;box-shadow:var(--shadow-sm);transition:box-shadow .2s cubic-bezier(.4,0,.2,1);overflow:hidden}.readonly-bar:hover{box-shadow:var(--shadow-hover)}.readonly-btn{display:flex;align-items:center;gap:8px;padding:10px 16px;min-height:56px;box-sizing:border-box;border:none;background:transparent;color:var(--color-text-secondary);font-size:.85rem;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .2s cubic-bezier(.4,0,.2,1)}.readonly-btn:hover{background:var(--backdrop-faint);color:var(--color-primary)}.readonly-btn:hover svg{stroke:var(--color-primary)}.readonly-btn:active{transform:scale(.98)}.readonly-btn svg{flex-shrink:0;opacity:.6;transition:stroke .2s,opacity .2s}.readonly-btn:hover svg{opacity:1}body.shared-readonly-view .readonly-bar{background:color-mix(in srgb,var(--color-bg) 94%,transparent);border:1px solid var(--backdrop-separator);box-shadow:var(--shadow-sm)}body.shared-readonly-view .readonly-btn{color:var(--color-text-primary)}body.shared-readonly-view .readonly-btn:hover{background:var(--backdrop-faint);color:var(--color-primary)}body.shared-readonly-view .readonly-btn svg{opacity:.8}@media(max-width:768px){.gallery-main{padding-top:100px}.gallery-header{flex-direction:column;gap:20px}.gallery-header h1{font-size:2rem}.gallery-search input{width:100%}.gallery-grid{grid-template-columns:1fr;gap:20px}.modal-large{max-width:95%;margin:20px}}body.dark-theme .gallery-header h1,body.dark-theme .gallery-card-title{color:var(--color-text-primary)}body.dark-theme .gallery-subtitle,body.dark-theme .gallery-card-description,body.dark-theme .gallery-card-affiliation,body.dark-theme .gallery-loading,body.dark-theme .gallery-empty{color:var(--color-text-secondary)}body.dark-theme .gallery-search svg{color:var(--color-text-tertiary)}body.dark-theme .gallery-search input,body.dark-theme .filter-group select,body.dark-theme .form-input{background:color-mix(in srgb,var(--dark-bg-surface) 94%,transparent);border-color:var(--backdrop-separator);color:var(--color-text-primary)}body.dark-theme .gallery-search input:focus,body.dark-theme .filter-group select:focus{border-color:var(--dark-accent-border-strong);box-shadow:var(--focus-ring)}body.dark-theme .gallery-filters{border-bottom-color:var(--backdrop-separator)}body.dark-theme .filter-group label{color:var(--color-text-secondary)}body.dark-theme .gallery-card{background:linear-gradient(180deg,color-mix(in srgb,var(--dark-bg-surface-hover) 88%,transparent),color-mix(in srgb,var(--dark-bg-surface) 94%,transparent));border-color:var(--backdrop-separator);box-shadow:var(--shadow-md)}body.dark-theme .gallery-card:hover{border-color:var(--dark-accent-border-soft);box-shadow:var(--shadow-hover)}body.dark-theme .gallery-card-meta{border-top-color:var(--backdrop-separator)}body.dark-theme .gallery-card-author{color:var(--color-text-primary)}body.dark-theme .gallery-card-author svg,body.dark-theme .gallery-card-affiliation svg{color:var(--color-text-tertiary)}body.dark-theme .gallery-loading .loading-spinner{border-color:color-mix(in srgb,var(--dark-bg-elevated) 90%,transparent);border-top-color:var(--color-primary)}body.dark-theme .thumbnail-placeholder,body.dark-theme .github-notice{background:color-mix(in srgb,var(--dark-bg-surface) 94%,transparent);border-color:var(--backdrop-separator);color:var(--color-text-secondary)}body.dark-theme .github-notice{border-left-color:var(--color-primary)}body.dark-theme #loadingState{color:var(--color-text-secondary)!important}
