:root{--color-brand-50: #e7f8f0;--color-brand-100: #c1f0dd;--color-brand-300: #66dcb2;--color-brand-400: #34cd96;--color-brand-500: #16c08a;--color-brand-600: #12a878;--color-brand-700: #0c8c63;--color-brand-800: #086b4c;--color-brand: var(--color-brand-500);--color-brand-strong: var(--color-brand-700);--gradient-brand: linear-gradient(135deg, var(--color-brand-700) 0%, var(--color-brand-400) 100%);--gradient-brand-hover: linear-gradient(135deg, var(--color-brand-800) 0%, var(--color-brand-600) 100%);--color-brand-ring: rgba(18, 168, 120, .15);--color-brand-ring-strong: rgba(18, 168, 120, .3);--color-danger: #dc2626;--color-danger-hover: #b91c1c;--color-danger-bg: #fef2f2;--color-danger-border: #fca5a5;--color-text: #1f2937;--color-text-secondary: #4b5563;--color-text-muted: #6b7280;--color-text-faint: #9ca3af;--color-bg: #f5f5f5;--color-surface: #ffffff;--color-surface-alt: #fafafa;--color-border: #e0e0e0;--color-border-strong: #d0d7de;--color-border-subtle: #eeeeee;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-pill: 999px;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .06);--shadow-md: 0 4px 16px rgba(0, 0, 0, .12);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .15);--shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--font-xs: 12px;--font-sm: 13px;--font-base: 14px;--font-md: 15px;--font-lg: 16px;--font-xl: 18px;--font-2xl: 20px;--font-3xl: 26px;--font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--z-dropdown: 500;--z-drawer: 1000;--z-dialog: 1000;--z-overlay: 2000}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:var(--font-family-base);background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:inherit;text-decoration:none}button{font-family:inherit}.plant-common-name{font-size:14px;font-weight:500;color:var(--color-text);line-height:1.25}.plant-scientific-name{display:block;font-size:12px;color:var(--color-text-muted);font-family:Georgia,Times New Roman,Times,serif;line-height:1.2;margin-top:1px}.plant-parent-name{font-size:11px;color:var(--color-text-faint);line-height:1.2;margin-top:3px}.zh-avatar{border-radius:50%;object-fit:cover;flex-shrink:0;display:block}.zh-avatar-fallback{display:inline-flex;align-items:center;justify-content:center;background:var(--color-brand-100);color:var(--color-brand-700);font-weight:600;line-height:1}:root{--zh-close-hit: 4px}.zh-close-btn{display:flex;align-items:center;justify-content:center;background:none;border:none;line-height:1;color:var(--color-text-muted);cursor:pointer;padding:var(--zh-close-hit);border-radius:var(--radius-sm)}.zh-close-btn:hover{color:var(--color-text);background:var(--color-surface-alt)}.zh-close-flush{margin-right:calc(-1 * var(--zh-close-hit))}.zh-close-overlay{position:absolute;top:calc(-1 * var(--zh-close-hit));right:calc(-1 * var(--zh-close-hit))}.footer{padding:12px 20px;background-color:#f7f7f7;text-align:center;font-size:12px;color:#888}.footer-content{display:inline-flex;align-items:center;gap:8px}.footer-separator{color:#ccc}.footer-icp{color:inherit;text-decoration:none}.footer-icp:hover{text-decoration:underline}.search-container{position:relative;width:100%;z-index:500}.search-bar{display:flex;background:#fffffff2;border-radius:12px;padding:8px;box-shadow:0 4px 20px #00000026;border:1px solid rgba(67,160,71,.2);transition:all .3s ease}.search-bar:focus-within{box-shadow:0 4px 25px #43a04740;border-color:var(--color-brand-700)}.search-input-wrapper{flex:1;position:relative}.plant-input{width:100%;padding:12px 40px 12px 12px;border:none;border-radius:8px;font-size:15px;outline:none;background:transparent;color:#333;line-height:1.2}.plant-input::placeholder{color:#888;font-size:15px;line-height:1.2}.clear-btn{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:20px;color:#999;cursor:pointer;padding:0 5px;line-height:1;transition:color .2s}.clear-btn:hover{color:var(--color-brand-700)}.search-btn{padding:12px 30px;background:linear-gradient(135deg,var(--color-brand-700) 0%,var(--color-brand-400) 100%);color:#fff;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s ease;white-space:nowrap;margin-left:8px}.search-btn:hover{background:linear-gradient(135deg,var(--color-brand-800) 0%,var(--color-brand-700) 100%);box-shadow:0 4px 12px #43a0474d}.search-btn:disabled{background-color:#ccc;cursor:not-allowed;opacity:.6}.suggestions-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border-radius:12px;box-shadow:0 8px 30px #00000026;max-height:70vh;overflow-y:auto;z-index:1001;border:1px solid rgba(67,160,71,.2);padding:6px 0}.seg-control{display:flex;gap:4px;padding:6px 10px 8px;border-bottom:1px solid #f0f0f0;margin-bottom:4px;position:sticky;top:0;background:#fff;z-index:1;border-radius:12px 12px 0 0}.seg-tab{flex:1;padding:6px 0;border:none;border-radius:6px;background:transparent;color:#666;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:4px}.seg-tab:hover{background:#f5f5f5;color:#333}.seg-tab.active{background:var(--color-brand-50);color:var(--color-brand-700);font-weight:600}.suggestion-divider{height:1px;background:#e8e8e8;margin:4px 10px}.suggestion-item{padding:8px 14px;cursor:pointer;transition:background-color .15s}.suggestion-item.selected{background-color:#43a04714}.suggestion-item:hover{background-color:#43a0470d}.suggestion-content{flex:1;min-width:0}.um-wrap{position:relative}.um-trigger{width:36px;height:36px;padding:0;border-radius:50%;border:1px solid #e0e0e0;background:#fff;cursor:pointer;overflow:hidden;display:flex;align-items:center;justify-content:center}.um-avatar{width:100%;height:100%;object-fit:cover;border-radius:50%}.um-avatar-fallback{display:flex;align-items:center;justify-content:center;background:var(--color-brand-50);color:var(--color-brand-500);font-weight:700;font-size:15px}.um-login{padding:7px 16px;font-size:14px;font-weight:600;color:var(--color-brand-500);background:#fff;border:1px solid var(--color-brand-500);border-radius:8px;cursor:pointer;transition:all .18s}.um-login:hover{background:var(--color-brand-500);color:#fff}.um-dropdown{position:absolute;top:calc(100% + 8px);right:0;min-width:188px;background:#fff;border:1px solid #eaecef;border-radius:12px;box-shadow:0 8px 28px #0000001f;padding:6px;z-index:1000}.um-account{display:flex;align-items:center;gap:10px;padding:8px 10px}.um-account-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover;flex-shrink:0}.um-account-name{font-size:14px;font-weight:600;color:#1f2937;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.um-divider{height:1px;background:#f0f0f0;margin:6px 0}.um-item{display:flex;align-items:center;justify-content:space-between;width:100%;box-sizing:border-box;padding:9px 10px;font-size:14px;color:#374151;text-decoration:none;border:none;background:none;border-radius:8px;cursor:pointer;text-align:left;transition:background .15s}.um-item:hover{background:#f3f4f6}.um-item-current,.um-item-current:hover{color:#9ca3af;cursor:default;background:none}.um-tag{font-size:11px;color:var(--color-brand-500);background:var(--color-brand-50);padding:1px 7px;border-radius:999px}.um-logout{color:var(--color-danger)}.um-logout:hover{background:var(--color-danger-bg)}.overlay-hint{position:absolute;inset:0;display:flex;justify-content:center;align-items:flex-start;padding-top:33vh;background:#00000040;z-index:var(--z-overlay);animation:fadeInOut 3s forwards;pointer-events:none}.overlay-hint-card{background:#fffffff2;padding:28px 36px;border-radius:var(--radius-xl);display:flex;flex-direction:column;align-items:center;gap:var(--space-3);box-shadow:var(--shadow-lg)}.overlay-hint-text{font-size:var(--font-xl);font-weight:600;color:var(--color-text-secondary)}@keyframes fadeInOut{0%{opacity:0}10%{opacity:1}90%{opacity:1}to{opacity:0}}.ui-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:10px 20px;border:1px solid transparent;border-radius:var(--radius-md);font-size:var(--font-base);font-weight:600;cursor:pointer;transition:all .2s ease;white-space:nowrap}.ui-btn:disabled{opacity:.55;cursor:not-allowed}.ui-btn--primary{background:var(--gradient-brand);color:#fff}.ui-btn--primary:not(:disabled):hover{background:var(--gradient-brand-hover);box-shadow:0 4px 12px var(--color-brand-ring-strong)}.ui-btn--secondary{background:var(--color-surface);color:var(--color-text-secondary);border-color:var(--color-border-strong)}.ui-btn--secondary:not(:disabled):hover{background:var(--color-surface-alt)}.ui-btn--danger{background:var(--color-surface);color:var(--color-danger);border-color:var(--color-danger-border)}.ui-btn--danger:not(:disabled):hover{background:var(--color-danger);color:#fff;border-color:var(--color-danger)}.ui-dialog-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;padding:var(--space-5);z-index:var(--z-dialog)}.ui-dialog{width:100%;background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;max-height:90vh}.ui-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border-subtle)}.ui-dialog-title{font-size:var(--font-lg);font-weight:600;color:var(--color-text)}.ui-dialog-body{padding:var(--space-5);overflow-y:auto}.ui-dialog-footer{display:flex;justify-content:flex-end;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-top:1px solid var(--color-border-subtle)}.zhm-tooltip{position:relative;display:inline-flex}.zhm-tooltip:after{content:attr(data-tooltip);position:absolute;padding:5px 10px;background:#000000c7;color:#fff;font-size:13px;font-weight:400;line-height:1.4;white-space:nowrap;border-radius:6px;pointer-events:none;opacity:0;transition:opacity .15s ease;z-index:600}.zhm-tooltip:before{content:"";position:absolute;border:6px solid transparent;opacity:0;transition:opacity .15s ease;z-index:600}.zhm-tooltip:hover:after,.zhm-tooltip:hover:before{opacity:1}.zhm-tooltip--top:after{left:50%;bottom:calc(100% + 10px);transform:translate(-50%)}.zhm-tooltip--top:before{left:50%;bottom:calc(100% + 4px);transform:translate(-50%);border-top-color:#000000c7}.zhm-tooltip--bottom:after{left:50%;top:calc(100% + 10px);transform:translate(-50%)}.zhm-tooltip--bottom:before{left:50%;top:calc(100% + 4px);transform:translate(-50%);border-bottom-color:#000000c7}.zhm-tooltip--right:after{left:calc(100% + 10px);top:50%;transform:translateY(-50%)}.zhm-tooltip--right:before{left:calc(100% + 4px);top:50%;transform:translateY(-50%);border-right-color:#000000c7}.zhm-tooltip--left:after{right:calc(100% + 10px);top:50%;transform:translateY(-50%)}.zhm-tooltip--left:before{right:calc(100% + 4px);top:50%;transform:translateY(-50%);border-left-color:#000000c7}.zhm-switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.zhm-switch--disabled{cursor:not-allowed;opacity:.5}.zhm-switch-track{position:relative;flex-shrink:0;width:38px;height:22px;padding:0;border:none;border-radius:999px;background:var(--color-border-strong);cursor:inherit;transition:background .18s ease}.zhm-switch-track.is-on{background:var(--color-brand)}.zhm-switch-thumb{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #00000040;transition:transform .18s ease}.zhm-switch-track.is-on .zhm-switch-thumb{transform:translate(16px)}.zhm-switch-label{font-size:13px;color:var(--color-text-secondary)}.brand-with-beta{display:inline-flex;align-items:center;gap:6px}.zhm-beta-badge{display:inline-flex;align-items:center;flex-shrink:0;padding:1px 7px;border-radius:999px;background:var(--color-warning-50, #fff7ed);color:var(--color-warning-700, #c2620c);border:1px solid var(--color-warning-200, #fed7aa);font-size:11px;font-weight:600;line-height:1.6;letter-spacing:.3px;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none}.app{display:flex;flex-direction:column;min-height:100vh}.app-main{flex:1;position:relative}.hero{position:relative;height:50vh;min-height:320px;max-height:480px;display:flex;align-items:center;justify-content:center;overflow:visible}.hero-bg{position:fixed;inset:-20px;z-index:-1;background-color:#42513f;background-image:url(/images/bg/Geranium.webp);background-size:cover;background-position:center 30%;filter:blur(6px)}.hero-overlay{position:fixed;inset:0;z-index:-1;background:linear-gradient(to bottom,#00000059,#00000026,#00000080)}.hero-search{position:relative;z-index:1;width:90%;max-width:600px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}.hero-title{font-size:28px;font-weight:700;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.3)}.hero-subtitle{font-size:15px;color:#ffffffd9;text-shadow:0 1px 4px rgba(0,0,0,.25);margin-bottom:4px}.hero-search .search-container{position:relative;top:auto;left:auto;transform:none;width:100%;text-align:left}.content{position:relative;z-index:1;background:#f5f5f5}.app-header{position:sticky;top:0;z-index:600;height:56px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:#fffffff2;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-bottom:1px solid #e5e5e5}.flex-center-gap{display:flex;align-items:center;gap:8px}.header-logo{height:24px;width:24px}.header-brand{display:flex;align-items:center;gap:8px;background:none;border:none;padding:0;cursor:pointer;font:inherit}.app-title{font-size:18px;font-weight:600;color:#222}.left-controls{margin-left:32px}.btn{display:flex;align-items:center;gap:4px;padding:6px 12px;border-radius:4px;cursor:pointer;color:var(--color-brand-500);font-size:15px;font-weight:500;font-family:inherit;background:transparent;border:none}.btn:hover{background:var(--color-brand-50)}.user-btn{display:flex;align-items:center;padding:6px 12px;font-size:14px;font-weight:500;gap:4px;border-radius:6px;border:1px solid #ddd;background:#fff;cursor:pointer}.user-btn:hover{background:#f5f5f5}.edit-field{display:flex;flex-direction:column;gap:var(--space-1)}.edit-field+.edit-field{margin-top:18px}.edit-label{font-size:var(--font-sm);font-weight:600;color:var(--color-text-secondary)}.edit-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:var(--font-base);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);outline:none;font-family:inherit;transition:border-color .18s,box-shadow .18s}.edit-input:focus{border-color:var(--color-brand-500);box-shadow:0 0 0 3px var(--color-brand-ring)}.edit-hint{font-size:var(--font-xs);color:var(--color-text-faint)}.edit-check{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:var(--font-sm);color:var(--color-text-secondary);cursor:pointer}.edit-check+.edit-field{margin-top:18px}.edit-check input{flex-shrink:0;cursor:pointer}.upload-page{min-height:100vh;background:#f5f5f5}.upload-main{max-width:1280px;margin:0 auto;padding:40px 16px}.upload-select{display:flex;justify-content:center}.upload-dropzone{width:100%;max-width:600px;padding:60px 20px;border:2px dashed #ccc;border-radius:16px;text-align:center;cursor:pointer;transition:all .2s;background:#fff;display:flex;flex-direction:column;align-items:center;gap:12px}.upload-dropzone:hover{border-color:var(--color-brand-500);background:#f9fff9}.upload-dropzone h2{font-size:20px;font-weight:600;color:#333;margin:0}.upload-dropzone p{color:#999;font-size:14px;margin:0}.upload-btn-icon{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;border:1px solid #ddd;background:#fff;cursor:pointer;color:#666;transition:all .2s}.upload-btn-icon:hover{background:var(--color-brand-50);border-color:var(--color-brand-500);color:var(--color-brand-700)}.upload-btn-link{background:none;border:none;color:var(--color-brand-500);cursor:pointer;font-size:14px;padding:4px 8px}.upload-status{text-align:center;padding:80px 20px;display:flex;flex-direction:column;align-items:center;gap:16px}.upload-status h2{font-size:22px;font-weight:600;color:#333;margin:0}.upload-status p{color:#999;font-size:15px;margin:0}.upload-spinner{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.upload-progress-bar{width:300px;height:8px;background:#e0e0e0;border-radius:4px;overflow:hidden}.upload-progress-fill{height:100%;background:linear-gradient(90deg,var(--color-brand-700),var(--color-brand-400));border-radius:4px;transition:width .3s ease}.upload-done-actions{display:flex;gap:12px;margin-top:8px}.upload-review{display:flex;flex-direction:column;gap:20px}.upload-review-header{display:flex;align-items:center;justify-content:space-between}.upload-review-header h2{font-size:20px;font-weight:600;color:#222;margin:0}.upload-review-empty{text-align:center;padding:40px;color:#999;display:flex;flex-direction:column;gap:16px;align-items:center}.upload-group{background:#fff;border-radius:12px;padding:16px;box-shadow:0 2px 8px #0000000f}.upload-group-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:8px}.upload-group-plant,.upload-group-name-row{display:flex;align-items:center;gap:8px}.upload-group-name{font-size:16px;font-weight:600;color:var(--color-text)}.upload-name-edit{display:inline-flex;align-items:center;padding:2px 6px;margin:0 -6px;border:none;background:none;border-radius:6px;cursor:pointer;transition:background .15s}.upload-name-edit:hover,.upload-name-edit.active{background:var(--color-brand-50, #f1f8f2)}.upload-group-count{font-size:13px;color:#999}.upload-group-controls{display:flex;align-items:center;gap:8px}.upload-group-visibility{align-self:flex-start;margin-top:2px}.upload-group-name-block{display:flex;flex-direction:column}.upload-group-sci-name{font-size:13px;color:var(--color-text-muted)}.upload-group-parent-name{font-size:12px;color:var(--color-text-faint);margin-top:3px}.upload-group-meta{display:flex;flex-direction:column;gap:2px;margin-top:8px;font-size:13px;color:#666;line-height:1.5}.upload-group-time{white-space:nowrap}.upload-group-location-tip{align-self:stretch;display:block}.upload-group-location{display:flex;width:100%;align-items:center;gap:4px;padding:0;border:none;background:none;font:inherit;color:#666;text-align:left;cursor:pointer}.upload-loc-text{min-width:0;word-break:break-word;padding:2px 6px;margin:0 -6px;border-radius:6px;transition:background .15s;-webkit-box-decoration-break:clone;box-decoration-break:clone}.upload-group-location:hover .upload-loc-text{background:#f0f0f0}.upload-group-location-tip.zhm-tooltip--top:after{left:0;transform:none}.upload-group-location-tip.zhm-tooltip--top:before{left:18px;transform:none}.upload-loc-edit-icon{flex-shrink:0;opacity:0;transition:opacity .15s}.upload-group-location:hover .upload-loc-edit-icon{opacity:.5}.organ-tags{display:flex;gap:4px;flex-wrap:wrap}.organ-tag{padding:3px 10px;border-radius:12px;border:1px solid #ddd;background:#fff;font-size:12px;color:#666;cursor:pointer;transition:all .15s}.organ-tag:hover{border-color:var(--color-brand-500);color:var(--color-brand-700)}.organ-tag.active{background:var(--color-brand-50);border-color:var(--color-brand-500);color:var(--color-brand-700);font-weight:500}.plant-search-dialog-body{overflow:visible}.plant-search-dialog-body .search-bar{box-shadow:none;border-radius:8px;border-color:var(--color-border);padding:4px}.plant-search-dialog-body .search-bar:focus-within{box-shadow:none;border-color:var(--color-brand-500)}.plant-search-dialog-body .plant-input{padding:9px 36px 9px 10px;font-size:14px}.plant-search-dialog-body .search-btn{padding:9px 18px;font-size:14px;margin-left:6px}.upload-thumbnails{display:grid;gap:8px;grid-template-columns:repeat(2,1fr)}@media(min-width:450px){.upload-thumbnails{grid-template-columns:repeat(4,1fr)}}@media(min-width:650px){.upload-thumbnails{grid-template-columns:repeat(6,1fr)}}.upload-thumb{position:relative;aspect-ratio:1;border-radius:8px;overflow:hidden;border:1px solid #eee}.upload-thumb-img{width:100%;height:100%;object-fit:cover;cursor:pointer}.upload-thumb-remove{position:absolute;top:3px;right:3px;width:20px;height:20px;border-radius:50%;border:none;background:#00000080;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s}.upload-thumb:hover .upload-thumb-remove{opacity:1}.upload-thumb-fail{position:absolute;bottom:24px;left:0;right:0;background:#d9534fcc;color:#fff;font-size:11px;text-align:center;padding:2px}.candidate-tags{display:flex;gap:4px;flex-wrap:wrap}.candidate-tag{padding:3px 10px;border-radius:12px;border:1px solid var(--color-brand-300);background:#fff;font-size:12px;color:var(--color-brand-700);cursor:pointer;transition:all .15s}.candidate-tag:hover{background:var(--color-brand-50)}.candidate-tag.active{background:var(--color-brand-700);border-color:var(--color-brand-700);color:#fff;font-weight:500}.candidate-tag-none{border-color:var(--color-border-strong);color:var(--color-text-secondary)}.candidate-tag-none:hover{background:var(--color-surface-alt)}.candidate-tag-none.active{background:var(--color-text-secondary);border-color:var(--color-text-secondary);color:#fff}.upload-thumb{cursor:grab}.upload-thumb:active{cursor:grabbing}.upload-group.drag-over{outline:2px dashed var(--color-brand-500);outline-offset:2px;background:#f9fff9}.upload-thumb-organs{display:flex;gap:1px;position:absolute;bottom:0;left:0;right:0;justify-content:center}.thumb-organ{flex:1;padding:4px 0;border:none;background:#00000073;color:#ccc;font-size:11px;cursor:pointer;transition:all .15s}.thumb-organ:hover{background:#4caf50b3;color:#fff}.thumb-organ.active{background:#4caf50d9;color:#fff;font-weight:600}.upload-new-group-zone{border:2px dashed #ccc;border-radius:12px;padding:24px;text-align:center;color:#bbb;font-size:14px;transition:all .2s}.upload-new-group-zone.drag-over{border-color:var(--color-brand-500);background:#f9fff9;color:var(--color-brand-700)}.upload-toast{position:fixed;top:20px;left:50%;transform:translate(-50%);background:var(--color-danger);color:#fff;padding:12px 24px;border-radius:8px;font-size:14px;z-index:10000;display:flex;align-items:center;gap:12px;box-shadow:0 4px 16px #0003;animation:toast-in .25s ease;max-width:90vw}.upload-toast-close{background:none;border:none;color:#fff;cursor:pointer;opacity:.8;padding:2px;display:flex;align-items:center;flex-shrink:0}.upload-toast-close:hover{opacity:1}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(-12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.upload-preview-overlay{position:fixed;inset:0;z-index:10000;background:#000000e0;display:flex;align-items:center;justify-content:center;animation:preview-fade-in .2s ease}.upload-preview-img{max-width:92vw;max-height:88vh;border-radius:4px;object-fit:contain;box-shadow:0 8px 40px #0006;-webkit-user-select:none;user-select:none}.upload-preview-close{position:absolute;top:16px;right:16px;width:40px;height:40px;border-radius:50%;border:none;background:#ffffff1f;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}.upload-preview-close:hover{background:#ffffff40}.upload-preview-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:none;background:#ffffff1a;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}.upload-preview-nav:hover{background:#ffffff40}.upload-preview-prev{left:16px}.upload-preview-next{right:16px}.upload-preview-counter{position:absolute;bottom:20px;left:50%;transform:translate(-50%);color:#ffffffb3;font-size:14px;background:#00000080;padding:6px 16px;border-radius:20px}@keyframes preview-fade-in{0%{opacity:0}to{opacity:1}}.my-photos-page{min-height:100vh;background:#f5f5f5}.my-photos-main{max-width:1280px;margin:0 auto;padding:24px 16px}.my-photos-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.my-photos-header h2{font-size:22px;font-weight:600;color:#222;margin:0}.mp-sort{display:inline-flex;background:#ececec;border-radius:8px;padding:2px}.mp-sort-btn{display:inline-flex;align-items:center;gap:4px;border:none;background:transparent;color:#777;font-size:13px;padding:5px 12px;border-radius:6px;cursor:pointer;transition:background .15s,color .15s}.mp-sort-btn:hover{color:#444}.mp-sort-btn.active{background:#fff;color:var(--color-brand-700, #086b4c);font-weight:600;box-shadow:0 1px 2px #00000014}.mp-sort-btn svg{flex-shrink:0}.mp-body{display:flex;align-items:flex-start;gap:20px}.mp-content{flex:1;min-width:0}.mp-timeline{flex-shrink:0;position:sticky;top:24px;display:flex;flex-direction:column;gap:2px;width:64px;padding-left:14px;border-left:1px solid #e2e2e2}.mp-year{border:none;background:transparent;color:#999;font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums;text-align:left;padding:6px 8px;border-radius:6px;cursor:pointer;transition:background .15s,color .15s}.mp-year:hover{background:#f0f0f0;color:#555}.mp-year.active{background:var(--color-brand-50, #f1f8f2);color:var(--color-brand-700, #086b4c);font-weight:600}.my-photos-empty{text-align:center;padding:72px 20px 80px;color:#999;font-size:15px;display:flex;flex-direction:column;align-items:center;gap:14px}.mp-empty-icon{width:88px;height:88px;border-radius:50%;background:var(--color-brand-50, #f1f8f2);color:var(--color-brand-500, #16c08a);display:flex;align-items:center;justify-content:center;margin-bottom:2px}.mp-empty-title{font-size:17px;font-weight:600;color:#333;margin:0}.mp-empty-sub{font-size:14px;color:#9aa0a6;margin:0 0 6px}.mp-grid{display:grid;gap:12px;grid-template-columns:repeat(6,minmax(0,1fr))}.mp-card{display:block;cursor:pointer;transition:transform .15s}.mp-card:hover{transform:translateY(-2px)}.mp-card:hover .mp-thumb img{transform:scale(1.05)}.mp-thumb{position:relative;aspect-ratio:1;border-radius:10px;overflow:hidden;background:#e8e8e8;display:flex;align-items:center;justify-content:center;margin-top:8px}.mp-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .3s}.mp-count{position:absolute;top:6px;right:6px;background:#0000008c;color:#fff;font-size:11px;padding:2px 8px;border-radius:10px;line-height:1.6}.mp-private{position:absolute;top:6px;left:6px;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;background:#0000008c;color:#fff;border-radius:50%}.mp-name{font-size:14px;font-weight:600;color:var(--color-text);margin-top:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mp-sci-name{display:block;font-size:13px;color:var(--color-text-muted);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mp-parent-name{display:block;font-size:12px;color:var(--color-text-faint);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mp-context{display:flex;flex-direction:column;gap:3px;margin-top:6px;font-size:12px;color:#9aa0a6}.mp-time-row{display:flex;flex-wrap:wrap;gap:3px 10px}.mp-ctx-item{display:inline-flex;align-items:center;gap:3px;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mp-ctx-item svg{flex-shrink:0;color:#bbb}.mp-ctx-sub{padding-left:15px;color:#b6bbc0}.preview-wm{position:absolute;top:0;left:28px;z-index:2;display:inline-flex;align-items:center;justify-content:center;padding:12px;border-radius:0 0 12px 12px;background:#0000001f;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);opacity:.42;pointer-events:none;-webkit-user-select:none;user-select:none}.preview-wm-logo{width:42px;height:42px;filter:brightness(0) invert(1)}.gd-page{min-height:100vh;background:#f5f5f5}.gd-main{max-width:1280px;margin:0 auto;padding:24px 16px}.gd-loading{text-align:center;padding:60px 20px;color:#999}.gd-topbar{display:flex;align-items:flex-start;gap:12px;margin-bottom:20px}.gd-back-btn{width:36px;height:36px;border-radius:8px;border:1px solid #ddd;background:#fff;cursor:pointer;color:#666;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s}.gd-back-btn:hover{border-color:var(--color-brand-500);color:var(--color-brand-700);background:var(--color-brand-50)}.gd-topbar-info{display:flex;flex-direction:column;flex:1;min-width:0}.gd-name-row{display:flex;align-items:center;gap:8px}.gd-name{font-size:20px;font-weight:600;color:var(--color-brand-700)}.gd-count{font-size:14px;color:#999}.gd-sci-name{display:block;font-size:14px;color:var(--color-text-muted);margin-top:2px}.gd-visibility-badge{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:var(--color-text-muted);white-space:nowrap}.gd-visibility-badge svg{color:var(--color-text-faint)}.gd-edit-toggle{align-self:flex-start;flex-shrink:0;padding:7px 18px;font-size:13px;font-weight:600;color:#374151;background:#fff;border:1px solid #d0d7de;border-radius:8px;cursor:pointer;transition:all .15s}.gd-edit-toggle:hover{background:#f3f4f6;border-color:#afb8c1}.gd-edit-card{margin-top:4px}.gd-search-actions{display:flex;align-items:center;gap:10px;margin-top:8px}.mono-time{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums}.gd-author{font-size:13px;color:#16c08a;margin-top:4px}.gd-grid{display:grid;gap:8px;grid-template-columns:repeat(2,1fr)}@media(min-width:450px){.gd-grid{grid-template-columns:repeat(4,1fr)}}@media(min-width:650px){.gd-grid{grid-template-columns:repeat(6,1fr)}}.gd-thumb{position:relative;aspect-ratio:1;border-radius:8px;overflow:hidden;border:1px solid #eee}.gd-thumb-img{width:100%;height:100%;object-fit:cover;cursor:pointer}.gd-thumb-remove{position:absolute;top:3px;right:3px;width:22px;height:22px;border-radius:50%;border:none;background:#00000080;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s}.gd-thumb:hover .gd-thumb-remove{opacity:1}.gd-thumb-remove:hover{background:#e53935cc}.gd-thumb-organs{display:flex;gap:1px;position:absolute;bottom:0;left:0;right:0;justify-content:center}.gd-thumb-organ{flex:1;padding:4px 0;border:none;background:#00000073;color:#ccc;font-size:11px;cursor:pointer;transition:all .15s}.gd-thumb-organ:hover{background:#4caf50b3;color:#fff}.gd-thumb-organ.active{background:#4caf50d9;color:#fff;font-weight:600}.gd-meta{display:flex;flex-direction:column;gap:4px;margin-top:16px;font-size:13px;color:#8a9097;line-height:1.5}.gd-time-row{display:flex;flex-wrap:wrap;gap:4px 16px}.gd-meta-item{display:inline-flex;align-items:flex-start;gap:4px;max-width:100%;word-break:break-word}.gd-meta-visibility{align-self:flex-start;margin-top:2px}.gd-meta-item svg{flex-shrink:0;color:#bbb;margin-top:3px}.gd-meta-sub{padding-left:17px;color:#b6bbc0}.gd-preview-overlay{position:fixed;inset:0;z-index:10000;background:#000000e0;display:flex;align-items:center;justify-content:center;animation:gd-fade-in .2s ease}.gd-preview-imgwrap{position:relative;display:inline-flex;max-width:92vw;max-height:88vh}.gd-preview-img{max-width:92vw;max-height:88vh;border-radius:4px;object-fit:contain;box-shadow:0 8px 40px #0006;-webkit-user-select:none;user-select:none}.gd-preview-close{position:absolute;top:16px;right:16px;width:40px;height:40px;border-radius:50%;border:none;background:#ffffff1f;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}.gd-preview-close:hover{background:#ffffff40}.gd-preview-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:none;background:#ffffff1a;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}.gd-preview-nav:hover{background:#ffffff40}.gd-preview-prev{left:16px}.gd-preview-next{right:16px}.gd-preview-counter{position:absolute;bottom:20px;left:50%;transform:translate(-50%);color:#ffffffb3;font-size:14px;background:#00000080;padding:6px 16px;border-radius:20px}@keyframes gd-fade-in{0%{opacity:0}to{opacity:1}}.sr-page{min-height:100vh;background:#f5f5f5}.sr-main{max-width:1280px;margin:0 auto;padding:24px 16px}.sr-header{margin-bottom:20px}.sr-header h2{font-size:22px;font-weight:600;color:#222;margin:0}.sr-empty{text-align:center;padding:80px 20px;color:#999;font-size:15px}.sr-grid{display:grid;gap:12px;grid-template-columns:repeat(6,minmax(0,1fr))}.sr-card{display:block;cursor:pointer;transition:transform .15s}.sr-card:hover{transform:translateY(-2px)}.sr-card:hover .sr-thumb img{transform:scale(1.05)}.sr-thumb{position:relative;aspect-ratio:1;border-radius:10px;overflow:hidden;background:#e8e8e8;display:flex;align-items:center;justify-content:center}.sr-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .3s}.sr-count{position:absolute;top:6px;right:6px;background:#0000008c;color:#fff;font-size:11px;padding:2px 8px;border-radius:10px;line-height:1.6}.sr-name{font-size:14px;font-weight:600;color:var(--color-brand-700);margin-top:8px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sr-sci-name{display:block;font-size:13px;color:var(--color-text-muted);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sr-foot{margin-top:8px;padding-top:8px;border-top:1px solid #f0f0f0;display:flex;flex-direction:column;gap:5px}.sr-author-row{display:flex;align-items:center;gap:8px}.sr-author{display:flex;align-items:center;gap:6px;min-width:0;flex:0 1 auto}.sr-date{display:inline-flex;align-items:center;gap:3px;flex-shrink:0;font-size:12px;color:#9aa0a6;white-space:nowrap}.sr-date svg{flex-shrink:0;color:#bbb}.sr-author-fallback{display:flex;align-items:center;justify-content:center;background:var(--color-brand-100, #e6f4ea);color:var(--color-brand-700, #086b4c);font-size:10px;font-weight:600}.sr-author-name{font-size:12.5px;color:#444;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sr-context{display:flex;flex-direction:column;gap:3px;font-size:12px;color:#9aa0a6}.sr-ctx-item{display:inline-flex;align-items:center;gap:3px;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sr-ctx-item svg{flex-shrink:0;color:#bbb}.sr-ctx-sub{padding-left:15px;color:#b6bbc0}
