.error-boundary{z-index:var(--z-modal);background:linear-gradient(135deg,#1a1a1a,#2d2d2d);justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.error-boundary-content{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);text-align:center;background:#ffffff0d;border:1px solid #ffffff1a;border-radius:16px;width:100%;max-width:600px;padding:40px;box-shadow:0 20px 60px #0000004d}.error-icon{margin-bottom:24px;font-size:64px;animation:2s ease-in-out infinite errorPulse}.error-title{color:#fff;margin:0 0 16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:28px;font-weight:700}.error-message{color:#ccc;max-width:500px;margin:0 auto 32px;font-size:16px;line-height:1.6}.error-details{text-align:left;background:#0000004d;border:1px solid #ffffff1a;border-radius:8px;margin:24px 0;padding:16px}.error-details summary{color:orange;cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:12px;font-weight:600}.error-details summary:hover{color:#ffb84d}.error-stack{margin-top:12px}.error-stack h4{color:#fff;margin:16px 0 8px;font-size:14px;font-weight:600}.error-stack pre{color:#ff6b6b;white-space:pre-wrap;word-break:break-word;background:#00000080;border:1px solid #ffffff1a;border-radius:4px;margin:0 0 12px;padding:12px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;overflow-x:auto}.error-actions{flex-wrap:wrap;gap:12px;margin-bottom:24px}.error-actions,.error-button,.network-error-boundary{justify-content:center;display:flex}.error-button{cursor:pointer;border:none;border-radius:8px;align-items:center;gap:8px;min-width:120px;padding:12px 24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:600;transition:all .3s}.error-button-primary{color:#fff;background:linear-gradient(135deg,#4a90e2,#357abd);box-shadow:0 4px 16px #4a90e24d}.error-button-primary:hover{background:linear-gradient(135deg,#5ba0f2,#4080cd);transform:translateY(-2px);box-shadow:0 6px 24px #4a90e266}.error-button-secondary{color:#fff;background:#ffffff1a;border:1px solid #fff3}.error-button-secondary:hover{background:#fff3;transform:translateY(-2px)}.error-button-tertiary{color:#ccc;background:0 0;border:1px solid #ffffff1a}.error-button-tertiary:hover{color:#fff;background:#ffffff0d}.error-button:active{transform:translateY(0)}.error-info{border-top:1px solid #ffffff1a;margin-top:16px;padding-top:16px}.error-id,.error-time{color:#888;margin:4px 0;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px}.network-error-boundary{z-index:var(--z-modal);background:linear-gradient(135deg,#1a1a1a,#2d2d2d);align-items:center;padding:20px;position:fixed;top:0;bottom:0;left:0;right:0}.network-error-content{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);text-align:center;background:#ffffff0d;border:1px solid #ffffff1a;border-radius:16px;width:100%;max-width:400px;padding:40px;box-shadow:0 20px 60px #0000004d}.network-error-icon{margin-bottom:20px;font-size:48px;animation:1.5s ease-in-out infinite networkPulse}.network-error-content h3{color:#fff;margin:0 0 12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:24px;font-weight:700}.network-error-content p{color:#ccc;margin:0 0 24px;font-size:16px;line-height:1.6}@keyframes errorPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes networkPulse{0%,to{opacity:1;transform:rotate(0)scale(1)}50%{opacity:.7;transform:rotate(10deg)scale(1.1)}}@media (max-width:768px){.error-boundary-content{margin:20px;padding:30px 20px}.error-icon{margin-bottom:20px;font-size:48px}.error-title{font-size:24px}.error-message{font-size:15px}.error-actions{flex-direction:column;align-items:center}.error-button{width:100%;max-width:200px}.error-stack pre{padding:10px;font-size:11px}}@media (max-width:480px){.error-boundary-content{margin:16px;padding:24px 16px}.error-icon{margin-bottom:16px;font-size:40px}.error-title{font-size:20px}.error-message{font-size:14px}.error-button{min-width:100px;padding:10px 20px;font-size:13px}.network-error-content{margin:20px;padding:30px 20px}.network-error-icon{margin-bottom:16px;font-size:40px}.network-error-content h3{font-size:20px}.network-error-content p{font-size:14px}}@media (prefers-color-scheme:dark){.error-boundary{background:linear-gradient(135deg,#0a0a0a,#1a1a1a)}.error-boundary-content{background:#ffffff08;border:1px solid #ffffff14}.network-error-boundary{background:linear-gradient(135deg,#0a0a0a,#1a1a1a)}.network-error-content{background:#ffffff08;border:1px solid #ffffff14}}@media (prefers-contrast:high){.error-boundary-content{background:#000;border:2px solid #fff}.error-message,.error-title{color:#fff}.error-button-primary{background:#06c;border:2px solid #fff}.error-button-secondary{color:#fff;background:#333;border:2px solid #fff}}@media (prefers-reduced-motion:reduce){.error-icon,.network-error-icon{animation:none}.error-button{transition:none}.error-button:hover{transform:none}}.globe-loader{z-index:10000;position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden}.globe-map-container{width:100%;height:100%;position:absolute;top:0;bottom:0;left:0;right:0}.globe-loader .mapboxgl-ctrl,.globe-loader .mapboxgl-ctrl-attrib,.globe-loader .mapboxgl-ctrl-logo{display:none!important}.globe-bottom-gradient{pointer-events:none;background:linear-gradient(#0000,#0b0b19b3 60%,#0b0b19f2);height:260px}.globe-bottom-gradient,.globe-content{position:absolute;bottom:0;left:0;right:0}.globe-content{z-index:10;flex-direction:column;align-items:center;padding:0 20px 50px;display:flex}.globe-header{text-align:center;margin-bottom:28px}.globe-title{color:#fff;letter-spacing:1px;margin:0 0 6px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:32px;font-weight:600}.globe-subtitle{color:#ffffff80;margin:0;font-size:14px;font-weight:400}.globe-action{width:100%;max-width:280px}.globe-bar{background:#ffffff14;border:1px solid #ffffff1f;border-radius:22px;height:44px;transition:all .4s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.globe-action.is-ready .globe-bar{cursor:pointer;background:#ffffff1a;border-color:#fff3}.globe-action.is-ready .globe-bar:hover{background:#ffffff26;border-color:#ffffff4d;transform:scale(1.02)}.globe-action.is-ready .globe-bar:active{transform:scale(.98)}.globe-bar-fill{background:#ffffff1a;border-radius:22px;height:100%;transition:width .15s ease-out;position:absolute;top:0;left:0}.globe-bar-text{color:#ffffffb3;letter-spacing:.5px;justify-content:center;align-items:center;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;font-weight:500;transition:all .3s;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.globe-action.is-ready .globe-bar-text{color:#ffffffe6}.globe-bar-hint{text-align:center;color:#fff6;letter-spacing:.3px;margin:10px 0 0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:12px;animation:.5s ease-out fadeIn}@media (max-width:480px){.globe-content{padding:0 16px 40px}.globe-title{font-size:26px}.globe-action{max-width:240px}.globe-bar{border-radius:20px;height:40px}}.mapboxgl-marker{will-change:transform}.marker-pin-hidden{opacity:0!important;pointer-events:none!important;transition:none!important}*{box-sizing:border-box;margin:0;padding:0}.feedback-toast,.menu-btn:active,.photo-nav:active,.toolbar button:active{will-change:transform,opacity}:root{--bg-primary:#f8fafc;--bg-secondary:#fff;--bg-tertiary:#f1f5f9;--bg-hover:#e2e8f0;--border:#e2e8f0;--border-light:#f1f5f9;--text-primary:#1e293b;--text-secondary:#475569;--text-muted:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--accent-light:#dbeafe;--danger:#ef4444;--danger-light:#fee2e2;--success:#22c55e;--success-light:#dcfce7;--warning:#f59e0b;--shadow-sm:0 1px 2px #0000000d;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-xl:20px}body{background:var(--bg-primary);color:var(--text-primary);-webkit-user-select:none;user-select:none;-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5;overflow:hidden}.app{width:100vw;height:100vh;display:flex}.window-drag-region{-webkit-app-region:drag;z-index:9999;pointer-events:none;height:36px;position:fixed;top:0;left:0;right:140px}.search-bar-container,.toolbar,.toolbar button{-webkit-app-region:no-drag}@keyframes slideDown{0%{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}@keyframes slideLeft{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes slideRight{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@keyframes rippleOut{0%{opacity:.5;width:0;height:0}to{opacity:0;width:60px;height:60px}}@keyframes markerDrop{0%{opacity:0;transform:scale(.3)}60%{opacity:1;transform:scale(1.15)}80%{transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes modalSlideIn{0%{opacity:0;transform:scale(.9)translateY(20px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes modalSlideOut{0%{opacity:1;transform:scale(1)translateY(0)}to{opacity:0;transform:scale(.9)translateY(20px)}}@keyframes overlayFadeIn{0%{opacity:0}to{opacity:1}}@keyframes overlayFadeOut{0%{opacity:1}to{opacity:0}}@keyframes buttonPress{0%{transform:scale(1)}50%{transform:scale(.95)}to{transform:scale(1)}}.modal-enter{animation:.3s cubic-bezier(.34,1.56,.64,1) forwards modalSlideIn}.modal-exit{animation:.25s cubic-bezier(.25,.46,.45,.94) forwards modalSlideOut}.overlay-enter{animation:.3s ease-out forwards overlayFadeIn}.overlay-exit{animation:.25s ease-in forwards overlayFadeOut}.btn-press{animation:.15s ease-out buttonPress}.map-container{flex:1;height:100vh;position:relative}.mapboxgl-canvas{cursor:crosshair}.mapboxgl-ctrl-attrib,.mapboxgl-ctrl-logo{opacity:.5}.click-ripple{pointer-events:none;z-index:9999;position:fixed;transform:translate(-50%,-50%)}.click-ripple:after,.click-ripple:before{content:"";border:2px solid var(--accent);border-radius:50%;animation:.5s ease-out forwards rippleOut;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.click-ripple:after{animation-delay:.1s}.cursor-info{color:var(--accent);z-index:100;pointer-events:none;border:1px solid var(--border-light);white-space:nowrap;background:#fffffff2;border-radius:4px;padding:4px 8px;font-family:SF Mono,Consolas,monospace;font-size:10px;font-weight:600;transition:opacity .15s;position:fixed;box-shadow:0 1px 3px #0000001a}.toolbar{z-index:500;flex-direction:column;gap:8px;display:flex;position:fixed;top:12px}.toolbar-left{animation:.4s cubic-bezier(.4,0,.2,1) slideRight;left:12px}.toolbar-right{animation:.4s cubic-bezier(.4,0,.2,1) slideLeft;right:12px}.toolbar button{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#30415f;cursor:pointer;background:#ffffffe0;border:1px solid #ffffffb3;border-radius:12px;justify-content:center;align-items:center;width:44px;min-width:44px;height:44px;min-height:44px;transition:all .2s;display:flex;position:relative;overflow:hidden;box-shadow:0 4px 12px #0c142224}.toolbar button svg{width:20px;height:20px;transition:all .2s}.main-tool-icon{font-size:19px;line-height:1;transition:transform .2s}.toolbar button:before{content:"";opacity:0;background:radial-gradient(circle at 50% 20%,#508cff2e,#0000 58%);border-radius:12px;transition:opacity .2s;position:absolute;top:0;bottom:0;left:0;right:0}.toolbar button:hover{background:#fff;border-color:#a7c6ffbf;transform:translateY(-2px)scale(1.03);box-shadow:0 8px 18px #111d3033}.toolbar button:hover .main-tool-icon,.toolbar button:hover svg{color:#2f5fb3;transform:scale(1.1)}.toolbar button:hover:before{opacity:1}.toolbar button:active{transition-duration:.1s;transform:translateY(0)scale(.96)}.toolbar button.active{color:#2f5fb3;background:#edf3ff;border-color:#7dabf5b3;box-shadow:0 7px 16px #2a5db538}.toolbar button.active svg{stroke:#2f5fb3}.toolbar button.active:hover{transform:translateY(-2px)scale(1.03);box-shadow:0 10px 20px #2a5db542}.search-bar-container{z-index:600;align-items:flex-start;gap:12px;width:440px;max-width:calc(100vw - 180px);animation:.5s cubic-bezier(.34,1.56,.64,1) searchBarEnter;display:flex;position:fixed;top:14px;left:50%;transform:translate(-50%)}@keyframes searchBarEnter{0%{opacity:0;transform:translate(-50%)translateY(-20px)scale(.95)}to{opacity:1;transform:translate(-50%)translateY(0)scale(1)}}.search-bar-wrapper{flex:1;min-width:0;position:relative}.search-bar{border:2px solid var(--border);cursor:text;background:#fff;border-radius:27px;align-items:center;gap:12px;width:100%;min-height:54px;padding:14px 20px;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;position:relative;box-shadow:0 4px 20px #00000014,0 2px 6px #0000000d}.search-bar *{cursor:text}.search-bar button{cursor:pointer}.search-bar:hover{border-color:var(--accent);transform:translateY(-1px);box-shadow:0 6px 28px #0000001f,0 3px 8px #0000000f}.search-bar:focus-within{border-color:var(--accent);transform:translateY(-2px);box-shadow:0 8px 36px #3b82f62e,0 0 0 3px #3b82f61a}.search-icon{color:var(--text-muted);-webkit-user-select:none;user-select:none;pointer-events:none;cursor:text;flex-shrink:0;align-items:center;font-size:18px;line-height:1;transition:all .3s cubic-bezier(.34,1.56,.64,1);display:flex}.search-bar:focus-within .search-icon{color:var(--accent);transform:scale(1.1)rotate(-8deg)}.search-bar input{color:var(--text-primary);cursor:text;background:0 0;border:none;outline:none;flex:1;min-width:0;padding:0;font-size:15px;font-weight:500;line-height:1.5}.search-bar input::placeholder{color:var(--text-muted);font-weight:400;transition:opacity .2s}.search-bar:focus-within input::placeholder{opacity:.5}.search-clear{background:var(--bg-tertiary);width:28px;height:28px;color:var(--text-muted);cursor:pointer;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;transition:all .25s cubic-bezier(.34,1.56,.64,1);animation:.2s fadeIn;display:flex}.search-clear:hover{background:var(--danger);color:#fff;transform:scale(1.15)}.search-clear:active{transform:rotate(90deg)scale(.9)}.web-download-beside-search{flex-shrink:0;align-self:flex-start}.search-results{border:1px solid var(--border);z-index:10;background:#fff;border-radius:16px;max-height:340px;margin-top:0;animation:.25s cubic-bezier(.34,1.56,.64,1) searchResultsEnter;position:absolute;top:calc(100% + 10px);left:0;right:0;overflow:hidden auto;box-shadow:0 8px 40px #0000001f,0 2px 8px #0000000f}@keyframes searchResultsEnter{0%{opacity:0;transform:translateY(-10px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.search-result-item{cursor:pointer;border-bottom:1px solid var(--border-light);contain:layout style;align-items:center;gap:14px;padding:14px 16px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;position:relative}.search-result-item:last-child{border-bottom:none}.search-result-item:before{content:"";background:linear-gradient(180deg,var(--accent),#818cf8);border-radius:0 2px 2px 0;width:3px;transition:transform .25s cubic-bezier(.34,1.56,.64,1);position:absolute;top:0;bottom:0;left:0;transform:scaleY(0)}.search-result-item.selected,.search-result-item:hover{background:linear-gradient(90deg,var(--accent-light),transparent);padding-left:20px}.search-result-item.selected:before,.search-result-item:hover:before{transform:scaleY(1)}.search-result-item:hover .result-icon{animation:.4s bounce}.result-icon{flex-shrink:0;font-size:18px}.result-info{flex:1;min-width:0}.result-name{color:var(--text-primary);font-size:14px;font-weight:500}.result-address,.result-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.result-address{margin-top:2px}.result-address,.result-distance,.search-history-header{color:var(--text-muted);font-size:12px}.result-distance{flex-shrink:0;margin-left:8px}.search-history-header{border-bottom:1px solid var(--border-light);justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.search-history-header button{color:var(--accent);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:12px}.search-history-header button:hover{background:var(--accent-light)}.history-item .result-icon{color:var(--text-muted)}.search-tip{padding:20px}.search-empty,.search-loading,.search-tip{text-align:center;color:var(--text-muted);font-size:13px}.search-empty,.search-loading{padding:28px}.search-loading{justify-content:center;align-items:center;gap:8px;display:flex}.loading-spinner{width:16px;height:16px}.search-overlay{z-index:550;position:fixed;top:0;bottom:0;left:0;right:0}.context-menu{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);z-index:1000;min-width:240px;max-width:280px;box-shadow:var(--shadow-xl);will-change:transform,opacity;animation:.25s cubic-bezier(.34,1.56,.64,1) modalSlideIn;position:fixed;overflow:hidden;transform:translateZ(0)}.menu-close{width:24px;min-width:24px;height:24px;min-height:24px;color:var(--text-muted);cursor:pointer;z-index:10;opacity:.6;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:12px;transition:all .2s;display:flex;position:absolute;top:8px;right:8px}.menu-close:hover{background:var(--danger);color:#fff;opacity:1;transform:scale(1.1)}.menu-close:active{transform:scale(.95)}.context-menu-header{border-bottom:1px solid var(--border-light);background:linear-gradient(180deg,var(--bg-tertiary),transparent);padding:12px 36px 10px 12px}.context-menu-header .place-name{color:var(--text-primary);word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:4px;font-size:13px;font-weight:600;line-height:1.4;display:-webkit-box;overflow:hidden}.context-menu-header .meta-row{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.context-menu-header .coords{color:var(--text-muted);font-family:SF Mono,Consolas,monospace;font-size:11px;font-weight:500}.context-menu-header .photo-count{color:var(--success);font-size:11px;font-weight:500}.menu-actions{flex-direction:column;gap:2px;padding:6px;display:flex}.menu-actions-primary{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:4px;display:grid}.menu-btn{width:100%;min-height:38px;color:var(--text-primary);cursor:pointer;border-radius:var(--radius-md);text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:10px 12px;font-size:13px;font-weight:500;transition:all .2s;display:flex;position:relative;overflow:hidden}.menu-btn.primary{background:var(--accent-light);color:var(--accent);border-radius:10px;flex-direction:row;justify-content:center;gap:8px;min-height:42px;padding:10px 12px}.menu-btn.primary:hover{background:var(--accent);color:#fff;transform:translateY(-2px);box-shadow:0 4px 12px #6366f140}.menu-btn:active{transition-duration:.1s;transform:translateY(0)scale(.95)}.menu-btn.primary .btn-icon{font-size:16px;transition:transform .2s}.menu-btn.primary:hover .btn-icon{transform:scale(1.1)}.menu-btn.primary span:last-child{font-size:13px;font-weight:500}.menu-btn:not(.primary):before{content:"";background:var(--accent);width:3px;transition:transform .2s;position:absolute;top:0;bottom:0;left:0;transform:scaleY(0)}.menu-btn:not(.primary):hover{background:var(--accent-light);color:var(--accent);transform:translate(4px)}.menu-btn:not(.primary):hover:before{transform:scaleY(1)}.menu-btn:hover .btn-icon{transform:scale(1.15)}.menu-btn.danger:before{background:var(--danger)}.menu-btn.danger:hover{background:var(--danger-light);color:var(--danger)}.btn-icon{font-size:15px;transition:transform .2s cubic-bezier(.4,0,.2,1)}.add-photo-zone{border:2px dashed var(--border);background:var(--bg-tertiary);cursor:pointer;border-radius:var(--radius-md);flex-direction:column;justify-content:center;align-items:center;gap:6px;margin:4px 8px 8px;padding:24px 16px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.add-photo-zone:hover{border-color:var(--accent);background:var(--accent-light);transform:scale(1.02)}.add-photo-zone:hover .zone-icon{transform:scale(1.2)rotate(-10deg)}.add-photo-zone.drag-active{border-color:var(--accent);background:var(--accent-light);border-style:solid;animation:.5s infinite pulse}.add-photo-zone .zone-icon{font-size:28px;transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.add-photo-zone .zone-text{color:var(--accent);font-size:14px;font-weight:600}.add-photo-zone .zone-hint{color:var(--text-muted);font-size:11px}.add-photo-zone.small{flex-direction:row;gap:10px;margin:0;padding:12px 14px}.add-photo-zone.small .zone-icon{font-size:18px}.zone-text-inline{color:var(--success);font-size:13px;font-weight:500}.menu-btn.primary.add{background:var(--success-light,#10b9811a);color:var(--success)}.menu-btn.primary.add:hover,.menu-btn.primary.drag-active{background:var(--success);color:#fff}.menu-btn.primary.drag-active{animation:.5s infinite pulse}.context-overlay{z-index:800;animation:.25s ease-out forwards overlayFadeIn;position:fixed;top:0;bottom:0;left:0;right:0}.marker-pin{cursor:pointer;filter:drop-shadow(0 2px 4px #00000026);transition:filter .2s cubic-bezier(.4,0,.2,1)}.marker-pin:hover{filter:drop-shadow(0 4px 8px #0003)}.marker-visual{transform-origin:bottom;flex-direction:column;align-items:center;display:flex}.marker-visual-new{animation:.4s ease-out both markerDrop}.marker-pin svg{display:block;overflow:visible}.marker-pin svg path{stroke:#fff;stroke-width:1.5px;stroke-linejoin:round}@media (prefers-reduced-motion:reduce){.marker-visual-new{animation:none}}.mapboxgl-marker{z-index:1!important}.map-container,.mapboxgl-canvas-container{overflow:visible!important}.marker-photo-preview{background:var(--bg-tertiary);border-radius:var(--radius-md);width:64px;height:64px;box-shadow:var(--shadow-md);border:3px solid #fff;margin-bottom:4px;transition:border-color .2s,transform .2s;position:relative;overflow:hidden}.marker-pin:hover .marker-photo-preview{border-color:var(--accent);transform:scale(1.05)}.marker-photo-preview img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.photo-badge{background:var(--accent);color:#fff;box-shadow:var(--shadow-sm);border-radius:12px;padding:3px 7px;font-size:11px;font-weight:600;position:absolute;top:-5px;right:-5px}.marker-list-overlay{z-index:1500;pointer-events:none;background:0 0;justify-content:center;align-items:center;padding:24px;transition:background .35s;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.marker-list-overlay.open{pointer-events:auto;background:#00000085}.marker-list-overlay.closing{pointer-events:none;background:0 0}.marker-list-panel{width:var(--target-w,calc(min(90vw,600px)));height:var(--target-h,calc(min(85vh,800px)));-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;will-change:transform,opacity;transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) scale(var(--start-scale,0));opacity:0;background:#fff;border-radius:16px;flex-direction:column;transition:transform .45s cubic-bezier(.16,.82,.16,1),opacity .3s;display:flex;position:fixed;top:50%;left:50%;box-shadow:0 20px 60px #0000004d}.marker-list-panel.open{opacity:1;transition:transform .45s cubic-bezier(.16,.82,.16,1),opacity .25s;transform:translate(-50%,-50%)scale(1)}.marker-list-panel.closing{transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) scale(var(--start-scale,0));opacity:0;transition:transform .4s cubic-bezier(.65,0,.75,.3),opacity .12s .28s}.marker-list-panel-inner{border-radius:16px;flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.marker-list-panel-inner>*{opacity:0;transition:opacity .18s,transform .18s;transform:translateY(6px)}.marker-list-panel.content-hidden .marker-list-panel-inner>*{opacity:0;transition-duration:.14s;transition-delay:0s;transform:translateY(10px)}.marker-list-panel.open .marker-list-panel-inner>*{opacity:1;transition-delay:.34s;transform:translateY(0)}.marker-list-panel.closing .marker-list-panel-inner>*{opacity:0;transition-duration:.15s;transition-delay:0s;transform:translateY(8px)}.marker-list-header{background:#fff;border-bottom:1px solid #e8e8e8}.marker-list-header h3{color:#000;font-size:18px;font-weight:700}.header-actions{gap:10px}.batch-toggle-btn{background:#000;border-radius:6px;padding:8px 16px;font-size:12px;font-weight:600}.batch-toggle-btn:hover{opacity:.85}.panel-close{color:#666;cursor:pointer;background:#f5f5f5;border:none;border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.panel-close:hover{color:#fff;background:#000;transform:scale(1.1)}.marker-list-toolbar{background:#fff;border-bottom:1px solid #e8e8e8;flex-direction:column;flex-shrink:0;gap:12px;padding:16px 24px;display:flex}.marker-search{color:#000;background:#fafafa;border:1px solid #e0e0e0;border-radius:8px;outline:none;width:100%;padding:12px 16px;font-size:14px;transition:all .2s}.marker-search:focus{background:#fff;border-color:#000}.marker-search::placeholder{color:#999}.toolbar-actions{gap:10px;display:flex}.dropdown-wrapper{flex:1;position:relative}.toolbar-btn{color:#333;cursor:pointer;background:#fff;border:1px solid #e0e0e0;border-radius:8px;justify-content:center;align-items:center;gap:4px;width:100%;padding:10px 14px;font-size:13px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.toolbar-btn:hover{color:#000;background:#fafafa;border-color:#000}.dropdown-menu{z-index:100;background:#fff;border:1px solid #e0e0e0;border-radius:8px;animation:.15s ease-out dropdownSlideUp;position:absolute;bottom:calc(100% + 4px);left:0;right:0;overflow:hidden;box-shadow:0 -4px 12px #0000001a}@keyframes dropdownSlideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.dropdown-item{color:#333;cursor:pointer;border-bottom:1px solid #f0f0f0;padding:10px 14px;font-size:13px;transition:all .15s}.dropdown-item:last-child{border-bottom:none}.dropdown-item:hover{color:#000;background:#fafafa}.dropdown-item.active{color:#fff;background:#000;font-weight:600}.time-filter-menu{min-width:180px}.custom-date-range{border-top:1px solid #f0f0f0;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.date-field{align-items:center;gap:8px;display:flex}.date-field label{color:#666;min-width:20px;font-size:13px}.date-field input[type=date]{color:#333;cursor:pointer;background:#fafafa;border:1px solid #e0e0e0;border-radius:6px;outline:none;flex:1;padding:6px 8px;font-size:13px}.date-field input[type=date]:focus{background:#fff;border-color:#000}.ui-theme-film .date-field label{color:#aab}.ui-theme-film .date-field input[type=date]{color:#e8f4ff;background:#ffffff14;border-color:#ffffff26}.ui-theme-film .date-field input[type=date]:focus{background:#ffffff1f;border-color:#bce0ff80}.ui-theme-film .custom-date-range{border-top-color:#ffffff1a}.sort-btns{gap:10px;display:flex}.sort-btns button{color:#333;cursor:pointer;background:#fff;border:1px solid #e0e0e0;border-radius:8px;flex:1;padding:10px 14px;font-size:13px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1)}.sort-btns button:hover{color:#000;border-color:#000;transform:translateY(-1px)}.sort-btns button.active{color:#fff;background:#000;border-color:#000;box-shadow:0 2px 8px #00000026}.marker-list-content{background:#fafafa;flex:1;padding:12px 24px;overflow-y:auto}.marker-list-scroll{flex-direction:column;display:flex}.marker-grid-container{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));grid-auto-flow:dense;gap:10px;padding:12px;display:grid}.marker-grid-item-wrapper{position:relative}.marker-grid-item{cursor:pointer;background:#fff;border:1px solid #e8e8e8;border-radius:6px;flex-direction:column;height:100%;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;overflow:hidden}.marker-grid-item:hover{border-color:#000;box-shadow:0 3px 8px #00000014}.marker-grid-item.selected{background:#f5f5f5;border:2px solid #000}.marker-grid-thumb-wrapper{aspect-ratio:1;width:100%;position:relative;overflow:hidden}.marker-grid-thumb{-o-object-fit:cover;object-fit:cover;background:#f5f5f5;width:100%;height:100%}.marker-grid-check{color:#fff;z-index:2;background:#000;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:12px;font-weight:700;animation:.2s cubic-bezier(.34,1.56,.64,1) checkPop;display:flex;position:absolute;top:4px;right:4px;box-shadow:0 2px 6px #0000004d}.marker-grid-info{flex-direction:column;gap:3px;padding:8px;display:flex}.marker-grid-name{color:#000;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;line-height:1.3;overflow:hidden}.marker-grid-meta{color:#666;justify-content:space-between;align-items:center;gap:4px;font-size:10px;display:flex}.grid-expand-btn{color:#666;cursor:pointer;background:#fafafa;border:1px solid #e0e0e0;border-radius:3px;margin-left:auto;padding:1px 4px;font-size:9px;transition:all .2s}.grid-expand-btn:hover{color:#fff;background:#000;border-color:#000}.photo-grid-expanded-inline{z-index:10;background:#fff;border:1px solid #e8e8e8;border-radius:6px;grid-template-columns:repeat(auto-fill,minmax(60px,1fr));gap:6px;max-height:250px;margin-top:3px;padding:8px;animation:.3s ease-out expandSlide;display:grid;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px #0000001a}.marker-list-item{cursor:pointer;background:#fff;border:1px solid #e8e8e8;border-radius:8px;gap:10px;padding:10px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.marker-list-item:hover{background:#fafafa;border-color:#000}.marker-list-item.selected{background:#f5f5f5;border:2px solid #000}.marker-list-item.focused{background:#eef4fb;border-color:#4a90e2;box-shadow:inset 0 0 0 1px #4a90e2}.ui-theme-film .marker-list-item.focused{background:#4a90e226;border-color:#bce0ff99;box-shadow:inset 0 0 0 1px #bce0ff4d}.marker-list-item:hover .marker-list-thumb{transform:scale(1.05)}.marker-list-thumb-wrapper{flex-shrink:0;position:relative}.marker-list-thumb{-o-object-fit:cover;object-fit:cover;background:#f5f5f5;border-radius:6px;flex-shrink:0;width:50px;height:50px;transition:transform .2s;box-shadow:0 1px 3px #0000001a}.marker-list-check{color:#fff;z-index:2;background:#000;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;font-weight:700;animation:.2s cubic-bezier(.34,1.56,.64,1) checkPop;display:flex;position:absolute;top:-4px;right:-4px;box-shadow:0 2px 8px #0000004d}.marker-list-info{flex-direction:column;flex:1;justify-content:center;gap:6px;min-width:0;display:flex}.marker-list-name{color:var(--text-primary);font-size:15px;font-weight:500}.marker-list-name,.marker-list-note{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.marker-list-note{color:var(--text-muted);opacity:.9;margin-top:2px;font-size:11px;line-height:1.3}.marker-list-meta{color:var(--text-muted);font-size:12px}.marker-thumb-wrapper{background:#f5f5f5;border-radius:6px;flex-shrink:0;width:48px;height:48px;position:relative;overflow:hidden}.marker-thumb{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.marker-thumb-placeholder{background:#f5f5f5;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;font-size:20px;display:flex}.marker-info{flex-direction:column;flex:1;justify-content:center;gap:4px;min-width:0;display:flex}.marker-name{color:#000;white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:500;line-height:1.3;overflow:hidden}.marker-meta{color:#888;flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;line-height:1;display:flex}.marker-note-preview{color:#666;white-space:nowrap;text-overflow:ellipsis;vertical-align:middle;max-width:160px;font-style:italic;display:inline-block;overflow:hidden}.marker-check{color:#fff;z-index:2;background:#000;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;font-weight:700;display:flex;position:absolute;top:-4px;right:-4px;box-shadow:0 2px 6px #0003}.marker-list-meta mark,.marker-list-name mark{color:#000;background:#fff3a8;border-radius:2px;padding:0 2px;font-weight:600}.ui-theme-film .marker-list-meta mark,.ui-theme-film .marker-list-name mark{color:#fff;background:#b8952e}.marker-list-empty{text-align:center;color:#999;padding:40px 20px;font-size:13px}.marker-list-empty:before{content:"📍";opacity:.5;margin-bottom:10px;font-size:32px;display:block}.search-results-grouped{outline:none;flex-direction:column;gap:16px;display:flex}.result-group{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:12px}.result-group-title{color:#666;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px;padding-left:4px;font-size:12px;font-weight:700}.result-group .marker-list-item{margin-bottom:4px}.result-group .marker-list-item:last-child{margin-bottom:0}.note-item .marker-list-name{color:#000;font-style:italic}.result-more{text-align:center;color:#999;border-top:1px dashed #e0e0e0;margin-top:8px;padding:8px;font-size:12px}.semantic-score{color:#8b5cf6;font-size:11px;font-weight:500}.embedding-progress{background:#f0f0ff;border-bottom:1px solid #e0e0f0;align-items:center;gap:8px;padding:6px 12px;display:flex}.embedding-progress-bar{background:#e0e0f0;border-radius:3px;flex:1;height:6px;overflow:hidden}.embedding-progress-fill{background:linear-gradient(90deg,#6366f1,#8b5cf6);border-radius:3px;height:100%;transition:width .3s}.embedding-progress-text{color:#6366f1;white-space:nowrap;font-size:11px}.photo-viewer{z-index:2000;cursor:pointer;contain:strict;background:#000000f2;animation:.25s fadeIn;position:fixed;top:0;bottom:0;left:0;right:0}.photo-main-wrapper,.photo-nav,.photo-viewer{justify-content:center;align-items:center;display:flex}.photo-main-wrapper{cursor:grab;max-width:90vw;max-height:85vh;animation:.35s cubic-bezier(.34,1.56,.64,1) scaleIn;overflow:hidden}.photo-main-wrapper:active{cursor:grabbing}.photo-main-wrapper img{-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;user-select:none;border-radius:var(--radius-md);will-change:transform;transform-origin:50%;-webkit-backface-visibility:hidden;backface-visibility:hidden;max-width:100%;max-height:85vh}.photo-nav{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--border-light);width:48px;height:48px;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:2100;background:#fffffff2;transition:all .2s cubic-bezier(.4,0,.2,1);position:fixed;top:50%;transform:translateY(-50%)}.photo-nav svg{width:22px;height:22px}.photo-nav.prev{left:24px}.photo-nav.next{right:24px}.photo-nav:hover{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:var(--shadow-xl),0 4px 12px #3b82f666;transform:translateY(-50%)scale(1.08)}.photo-nav:active{transform:translateY(-50%)scale(.95)}.photo-container{flex-direction:row;align-items:center;gap:20px;animation:.35s cubic-bezier(.34,1.56,.64,1) scaleIn;display:flex}.photo-toolbar-side{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);z-index:2100;background:#fffffff2;gap:10px;padding:14px 10px;flex-flow:column!important;display:flex!important}.photo-toolbar-side .toolbar-btn{border:1px solid var(--border-light);width:48px;min-width:48px;height:48px;min-height:48px;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);background:0 0;justify-content:center;align-items:center;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;position:relative}.photo-toolbar-side .toolbar-btn svg{width:24px;height:24px}.photo-toolbar-side .toolbar-btn:hover{background:var(--accent-light);border-color:var(--accent);color:var(--accent);transform:scale(1.08)}.photo-toolbar-side .toolbar-btn.danger:hover{background:var(--danger-light);border-color:var(--danger);color:var(--danger)}.photo-toolbar-side .toolbar-btn.close:hover{background:var(--danger);border-color:var(--danger);color:#fff}.photo-toolbar-side .toolbar-divider{background:var(--border-light);height:1px;margin:4px 0}[data-tooltip]{position:relative}[data-tooltip]:after,[data-tooltip]:before{opacity:0;visibility:hidden;pointer-events:none;z-index:10000;transition:all .2s cubic-bezier(.4,0,.2,1);position:absolute}[data-tooltip]:after{content:attr(data-tooltip);color:#fff;white-space:pre-wrap;word-wrap:break-word;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#1e1e1ef2;border-radius:8px;max-width:200px;padding:8px 12px;font-size:13px;font-weight:500;line-height:1.4;top:50%;left:100%;transform:translateY(-50%)translate(8px);box-shadow:0 4px 12px #0000004d}[data-tooltip]:before{content:"";border:6px solid #0000;border-right-color:#1e1e1ef2;width:0;height:0;top:50%;left:100%;transform:translateY(-50%)translate(2px)}[data-tooltip]:hover:after,[data-tooltip]:hover:before{opacity:1;visibility:visible}[data-tooltip]:hover:after{transform:translateY(-50%)translate(12px)}[data-tooltip]:hover:before{transform:translateY(-50%)translate(6px)}.toolbar-left [data-tooltip]:after{top:50%;left:100%;right:auto;transform:translateY(-50%)translate(8px)}.toolbar-left [data-tooltip]:before{border-left-color:#0000;border-right-color:#1e1e1ef2;top:50%;left:100%;right:auto;transform:translateY(-50%)translate(2px)}.toolbar-left [data-tooltip]:hover:after{transform:translateY(-50%)translate(12px)}.toolbar-left [data-tooltip]:hover:before{transform:translateY(-50%)translate(6px)}.toolbar-right [data-tooltip]:after{top:50%;left:auto;right:100%;transform:translateY(-50%)translate(-8px)}.toolbar-right [data-tooltip]:before{border-left-color:#1e1e1ef2;border-right-color:#0000;top:50%;left:auto;right:100%;transform:translateY(-50%)translate(-2px)}.toolbar-right [data-tooltip]:hover:after{transform:translateY(-50%)translate(-12px)}.toolbar-right [data-tooltip]:hover:before{transform:translateY(-50%)translate(-6px)}.photo-nav.prev[data-tooltip]:after{left:100%;right:auto;transform:translateY(-50%)translate(8px)}.photo-nav.prev[data-tooltip]:before{border-left-color:#0000;border-right-color:#1e1e1ef2;left:100%;right:auto;transform:translateY(-50%)translate(2px)}.photo-nav.prev[data-tooltip]:hover:after{transform:translateY(-50%)translate(12px)}.photo-nav.prev[data-tooltip]:hover:before{transform:translateY(-50%)translate(6px)}.photo-nav.next[data-tooltip]:after{left:auto;right:100%;transform:translateY(-50%)translate(-8px)}.photo-nav.next[data-tooltip]:before{border-left-color:#1e1e1ef2;border-right-color:#0000;left:auto;right:100%;transform:translateY(-50%)translate(-2px)}.photo-nav.next[data-tooltip]:hover:after{transform:translateY(-50%)translate(-12px)}.photo-nav.next[data-tooltip]:hover:before{transform:translateY(-50%)translate(-6px)}.photo-toolbar-side [data-tooltip]:after{top:50%;left:auto;right:100%;transform:translateY(-50%)translate(-8px)}.photo-toolbar-side [data-tooltip]:before{border-left-color:#1e1e1ef2;border-right-color:#0000;top:50%;left:auto;right:100%;transform:translateY(-50%)translate(-2px)}.photo-toolbar-side [data-tooltip]:hover:after{transform:translateY(-50%)translate(-12px)}.photo-toolbar-side [data-tooltip]:hover:before{transform:translateY(-50%)translate(-6px)}.marker-count-btn{z-index:500;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);color:#1a2a4a;cursor:pointer;background:linear-gradient(135deg,#fffffff2,#f5f8fff2);border:1px solid #ffffffd9;border-radius:24px;align-items:center;gap:14px;width:auto;min-width:auto;height:auto;min-height:auto;padding:12px 22px 12px 18px;font-family:inherit;line-height:1;transition:all .25s cubic-bezier(.34,1.56,.64,1);display:flex;position:fixed;bottom:24px;right:24px;box-shadow:0 6px 20px #0c14222e,0 0 0 1px #a7c6ff33}.marker-count-btn:hover{background:linear-gradient(135deg,#fff,#f0f5ff);border-color:#a7c6ffe6;transform:translateY(-3px)scale(1.04);box-shadow:0 12px 28px #2a5db533,0 0 0 1px #649bff59}.marker-count-btn:active{transition-duration:.1s;transform:translateY(0)scale(.97);box-shadow:0 3px 10px #0c14221f}.marker-count-btn.active{color:#2f5fb3;background:linear-gradient(135deg,#edf3ff,#e0ebff);border-color:#7dabf599;box-shadow:0 7px 20px #2a5db538,0 0 0 1px #649bff4d}.marker-stats{flex-direction:row;gap:10px}.marker-stats,.photo-bottom-bar,.pv-btn,.pv-toolbar,.stat-item{align-items:center;display:flex}.stat-item{white-space:nowrap;gap:6px;font-size:14px}.stat-icon{font-size:15px;line-height:1}.stat-num{color:inherit;font-size:13px;font-weight:700;line-height:1}.marker-stats .stat-item+.stat-item{padding-left:2px;position:relative}.marker-stats .stat-item+.stat-item:before{content:"";background:#00000014;width:1px;height:14px;position:absolute;top:50%;left:-6px;transform:translateY(-50%)}.marker-count-btn.origin-hidden{opacity:0;pointer-events:none;transition:all .3s cubic-bezier(.4,0,.2,1);transform:scale(.8)translateY(10px)}.marker-count-btn.reveal-on-close{opacity:1;pointer-events:auto;transform:scale(1)translateY(0)}.marker-count-btn[data-tooltip]:after,.measure-btn[data-tooltip]:after{top:auto;bottom:100%;left:50%;right:auto;transform:translate(-50%)translateY(-8px)}.marker-count-btn[data-tooltip]:before,.measure-btn[data-tooltip]:before{border-color:#1e1e1ef2 #0000 #0000;top:auto;bottom:100%;left:50%;right:auto;transform:translate(-50%)translateY(-2px)}.marker-count-btn[data-tooltip]:hover:after,.measure-btn[data-tooltip]:hover:after{transform:translate(-50%)translateY(-12px)}.marker-count-btn[data-tooltip]:hover:before,.measure-btn[data-tooltip]:hover:before{transform:translate(-50%)translateY(-6px)}.pv-btn[data-tooltip]:after{top:100%;bottom:auto;left:50%;right:auto;transform:translate(-50%)translateY(8px)}.pv-btn[data-tooltip]:before{border-color:#0000 #0000 #1e1e1ef2;top:100%;bottom:auto;left:50%;right:auto;transform:translate(-50%)translateY(2px)}.pv-btn[data-tooltip]:hover:after{transform:translate(-50%)translateY(12px)}.pv-btn[data-tooltip]:hover:before{transform:translate(-50%)translateY(6px)}.menu-btn[data-tooltip]:after{top:50%;left:100%;right:auto;transform:translateY(-50%)translate(8px)}.menu-btn[data-tooltip]:before{border-left-color:#0000;border-right-color:#1e1e1ef2;top:50%;left:100%;right:auto;transform:translateY(-50%)translate(2px)}.menu-btn[data-tooltip]:hover:after{transform:translateY(-50%)translate(12px)}.menu-btn[data-tooltip]:hover:before{transform:translateY(-50%)translate(6px)}.photo-container .photo-main-wrapper{animation:none}.pv-toolbar{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:2200;background:#0009;border-radius:12px;gap:6px;padding:8px 12px;position:fixed;top:20px;left:50%;transform:translate(-50%)}.pv-btn{color:#fffc;cursor:pointer;background:0 0;border:none;border-radius:10px;justify-content:center;width:40px;height:40px;transition:all .15s}.pv-btn svg{fill:currentColor;width:22px;height:22px}.pv-btn:hover{color:#fff;background:#ffffff26}.pv-btn:active{transform:scale(.92)}.pv-btn-danger:hover{color:#fca5a5;background:#ef444440}.pv-btn-accent:hover{color:#93c5fd;background:#3b82f640}.pv-btn-close{color:#fca5a5;background:#ef444433}.pv-btn-close:hover{color:#fff;background:#ef4444}.pv-divider{background:#fff3;width:1px;height:24px;margin:0 4px}.photo-bottom-bar{z-index:2100;background:linear-gradient(#0000,#000000b3);flex-direction:column;gap:8px;padding:16px 24px 20px;position:fixed;bottom:0;left:0;right:0}.photo-edit-hint{color:#ffffffb3;background:#3b82f64d;border-radius:12px;padding:4px 12px;font-size:12px}.crop-mode{cursor:crosshair}.crop-hint{color:#fff;z-index:2300;background:#000000b3;border-radius:8px;padding:8px 16px;font-size:13px;position:fixed;top:80px;left:50%;transform:translate(-50%)}.crop-overlay{pointer-events:none;z-index:2150;position:fixed;top:0;bottom:0;left:0;right:0}.crop-selection{background:#3b82f626;border:2px dashed #3b82f6;box-shadow:0 0 0 9999px #00000080}.pv-btn-active{color:#60a5fa!important;background:#3b82f64d!important}.photo-counter{color:#fff;letter-spacing:2px;border-radius:var(--radius-lg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff26;padding:8px 18px;font-size:14px;font-weight:600}.photo-note-bar{color:#ffffffd9;text-align:center;max-width:560px;font-size:14px;line-height:1.6}.photo-info-panel{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:var(--radius-xl);z-index:2200;background:#1e1e1ef2;border:1px solid #ffffff1a;flex-direction:column;width:280px;animation:.25s slideLeft;display:flex;position:fixed;top:80px;bottom:100px;right:20px;box-shadow:0 8px 32px #0006}.photo-info-header{border-bottom:1px solid #ffffff1a;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.photo-info-header h4{color:#fff;margin:0;font-size:14px;font-weight:600}.panel-close-sm{color:#ffffffb3;cursor:pointer;background:#ffffff1a;border:none;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;transition:all .2s;display:flex}.panel-close-sm:hover{color:#fff;background:#ff6464cc}.photo-info-content{flex:1;padding:12px;overflow-y:auto}.info-section{margin-bottom:16px}.info-section:last-child{margin-bottom:0}.info-title{color:#ffffff80;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;padding-left:2px;font-size:11px;font-weight:600}.info-row{border-radius:var(--radius-sm);background:#ffffff0d;justify-content:space-between;align-items:center;margin-bottom:4px;padding:6px 8px;display:flex}.info-row:last-child{margin-bottom:0}.info-label{color:#fff9;font-size:12px}.info-value{color:#fff;text-align:right;text-overflow:ellipsis;white-space:nowrap;max-width:160px;font-size:12px;font-weight:500;overflow:hidden}.info-loading{text-align:center;color:#ffffff80;padding:40px 20px;font-size:13px}.toolbar-btn.active{background:var(--accent);color:#fff}.settings-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1800;background:#00000080;justify-content:center;align-items:center;padding:24px;animation:.3s ease-out forwards overlayFadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.settings-panel{background:#fff;border-radius:16px;width:100%;max-width:840px;height:600px;max-height:calc(100vh - 48px);animation:.3s cubic-bezier(.34,1.56,.64,1) scaleIn;display:flex;overflow:hidden;box-shadow:0 20px 60px #0000004d}.settings-nav{background:#f5f5f5;border-right:1px solid #e0e0e0;flex-direction:column;flex-shrink:0;width:200px;display:flex}.settings-nav-header{border-bottom:1px solid #e0e0e0;align-items:center;gap:10px;padding:20px 18px;display:flex}.settings-nav-header .nav-icon{font-size:22px}.settings-nav-header .nav-title{color:#000;font-size:17px;font-weight:700}.settings-nav-items{flex-direction:column;flex:1;display:flex}.settings-nav-items button{color:#000;cursor:pointer;background:0 0;border:none;border-bottom:1.5px solid #d0d0d0;border-radius:0;flex:1;justify-content:center;align-items:center;gap:10px;min-height:56px;padding:14px 16px;font-size:18px;font-weight:500;transition:box-shadow .25s,transform .25s;display:flex}.settings-nav-items button:last-child{border-bottom:none}.settings-nav-items button span{font-size:22px}.settings-nav-items button:hover{color:#000}.settings-nav-items button.active{background:#fff;border-bottom:none;font-weight:700;transform:translateY(-2px);box-shadow:0 8px 30px #0000001f,0 2px 8px #00000014}.settings-nav-items button.active+button{border-top:1.5px solid #d0d0d0}.settings-content{flex-direction:column;flex:1;padding:24px;display:flex;position:relative;overflow-y:auto}.settings-close{color:#666;z-index:100;background:#f5f5f5;border:none;border-radius:50%;font-size:14px;transition:all .2s cubic-bezier(.4,0,.2,1);position:absolute;top:16px;right:16px}.settings-header{background:#fff;border-bottom:2px solid #000;flex-shrink:0;justify-content:space-between;align-items:center;padding:20px 28px;display:flex}.settings-header h1{letter-spacing:-.5px;text-transform:uppercase;margin:0}.settings-close,.settings-header h1{color:#000;font-size:18px;font-weight:700}.settings-close{cursor:pointer;background:#fff;border:2px solid #000;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;transition:all .2s;display:flex}.settings-close:hover{color:#fff;background:#000}.settings-tabs{background:#f5f5f5;border-bottom:2px solid #000;flex-shrink:0;gap:0;padding:0;display:flex}.settings-tabs button{color:#666;cursor:pointer;text-transform:uppercase;letter-spacing:.5px;background:0 0;border:none;border-right:1px solid #d0d0d0;flex:1;padding:14px 20px;font-size:13px;font-weight:600;transition:all .2s;position:relative}.settings-tabs button:last-child{border-right:none}.settings-tabs button:hover{color:#000;background:#e8e8e8}.settings-tabs button.active{color:#fff;background:#000;font-weight:700}.settings-page{animation:.25s cubic-bezier(.4,0,.2,1) slideUp}.settings-page h2{color:#000;margin:0 0 8px;font-size:20px;font-weight:700}.settings-page .page-desc{color:#666;margin:0 0 28px;font-size:14px;line-height:1.6}.setting-group{background:#fff;border:1px solid #e8e8e8;border-radius:12px;margin-bottom:28px;padding:24px;transition:box-shadow .25s,transform .25s;box-shadow:0 1px 3px #0000000d}.setting-group:hover{transform:translateY(-2px);box-shadow:0 8px 30px #0000001f,0 2px 8px #00000014}.setting-group h3{color:#666;text-transform:uppercase;letter-spacing:.8px;margin:0 0 20px;font-size:13px;font-weight:600}.setting-row{border-bottom:1px solid #f0f0f0;justify-content:space-between;align-items:center;gap:32px;padding:18px 0;transition:all .15s;display:flex}.setting-row:last-child{border-bottom:none;padding-bottom:0}.setting-row:first-of-type{padding-top:0}.setting-info,.setting-label{flex:1;min-width:0}.setting-label strong{color:#000;margin-bottom:6px;font-size:15px;font-weight:600;line-height:1.4;display:block}.setting-label span{color:#666;font-size:13px;line-height:1.6;display:block}.setting-section{background:#fff;border:2px solid #000;margin-bottom:16px;padding:20px;transition:all .2s;box-shadow:4px 4px #0000001a}.setting-section:hover{transform:translate(-1px,-1px);box-shadow:6px 6px #00000026}.setting-section:last-child{margin-bottom:0}.setting-section h3{color:#000;text-transform:uppercase;letter-spacing:1px;border-bottom:2px solid #000;margin:0 0 16px;padding-bottom:8px;font-size:12px;font-weight:700}.setting-item{border-bottom:1px solid #e8e8e8;justify-content:space-between;align-items:center;gap:24px;padding:14px 0;display:flex}.setting-item:last-child{border-bottom:none;padding-bottom:0}.setting-item:first-child{padding-top:0}.setting-name{color:#000;margin-bottom:4px;font-size:14px;font-weight:600}.setting-desc{color:#666;font-size:12px;line-height:1.5}.switch{flex-shrink:0;width:50px;height:28px;margin-left:16px;position:relative}.switch input{opacity:0;width:0;height:0}.switch .slider{cursor:pointer;background:#d0d0d0;border-radius:14px;top:0;bottom:0;left:0;right:0}.switch .slider,.switch .slider:before{transition:all .25s cubic-bezier(.4,0,.2,1);position:absolute}.switch .slider:before{content:"";background:#fff;border-radius:50%;width:22px;height:22px;top:3px;left:3px;box-shadow:0 2px 4px #0003}.switch:hover .slider{background:#b0b0b0}.switch input:checked+.slider{background:#000}.switch input:checked+.slider:before{transform:translate(22px)}.range-control{flex-shrink:0;align-items:center;gap:14px;margin-left:16px;display:flex}.range-control input[type=range]{cursor:pointer;-webkit-appearance:none;appearance:none;background:#e0e0e0;border:none;border-radius:3px;outline:none;width:140px;height:6px;transition:background .2s}.range-control.wide input[type=range]{width:180px}.range-control input[type=range]:hover{background:#d0d0d0}.range-control input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#000;border-radius:50%;width:18px;height:18px;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 6px #00000040}.range-control input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.2);box-shadow:0 3px 10px #0000004d,0 0 0 4px #0000001a}.range-control .range-value{text-align:right;color:#000;min-width:60px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,monospace;font-size:14px;font-weight:600}.setting-tip{background:#f5f5f5;border:1px solid #e0e0e0;border-radius:10px;align-items:flex-start;gap:12px;margin-top:24px;padding:16px 18px;display:flex}.setting-tip span{flex-shrink:0;font-size:18px;line-height:1}.setting-tip p{color:#666;margin:0;font-size:13px;line-height:1.6}.feature-inline-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.feature-inline-item{background:#f8f8f8;border:1px solid #f0f0f0;border-radius:8px;align-items:center;gap:8px;padding:10px 12px;transition:all .15s;display:flex}.feature-inline-item:hover{background:#f0f0f0;border-color:#e0e0e0}.feature-inline-item .fi-icon{flex-shrink:0;font-size:16px}.feature-inline-item .fi-name{color:#000;font-size:13px;font-weight:600}.storage-cards{grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:16px;display:grid}.storage-card{text-align:center;background:#f8f8f8;border:1px solid #e8e8e8;border-radius:10px;padding:14px 16px;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.storage-card:before{content:"";background:linear-gradient(90deg,#000,#666);height:3px;transition:transform .3s;position:absolute;top:0;left:0;right:0;transform:scaleX(0)}.storage-card:hover{border-color:#000;transform:translateY(-4px);box-shadow:0 8px 20px #0000001f}.storage-card:hover:before{transform:scaleX(1)}.storage-card:hover .storage-icon{transform:scale(1.15)rotate(-5deg)}.storage-card .storage-icon{margin-bottom:6px;font-size:22px;transition:transform .3s cubic-bezier(.34,1.56,.64,1);display:inline-block}.storage-card .storage-value{color:#000;margin-bottom:4px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:22px;font-weight:700;line-height:1}.storage-card .storage-label{color:#666;text-transform:uppercase;letter-spacing:.5px;font-size:11px;font-weight:500}.action-buttons{flex-direction:column;gap:12px;display:flex}.action-btn{color:#000;cursor:pointer;text-align:left;background:#fff;border:1px solid #e8e8e8;border-radius:10px;align-items:center;gap:16px;width:100%;padding:16px 18px;font-size:14px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;position:relative;overflow:hidden}.action-btn:before{content:"";background:#000;width:4px;transition:transform .2s;position:absolute;top:0;bottom:0;left:0;transform:scaleY(0)}.action-btn:hover:before{transform:scaleY(1)}.action-btn span{flex-shrink:0;font-size:24px;transition:transform .2s}.action-btn div{flex:1}.action-btn strong{margin-bottom:4px;font-size:14px;font-weight:600;display:block}.action-btn small{color:#666;font-size:12px;line-height:1.5;display:block}.action-btn:hover{background:#fafafa;border-color:#000;transform:translate(6px)}.action-btn:hover span{transform:scale(1.1)rotate(-3deg)}.action-btn.danger:before{background:#dc2626}.action-btn.danger:hover{color:#dc2626;background:#fef2f2;border-color:#dc2626}.memory-monitor{margin-top:8px}.memory-item{margin-bottom:16px}.memory-item:last-child{margin-bottom:0}.memory-label{color:#666;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:11px;font-weight:600}.memory-bar{background:#f0f0f0;border:2px solid #000;width:100%;height:8px;margin-bottom:6px;overflow:hidden}.memory-bar-fill{background:#000;height:100%;transition:width .3s}.memory-stats{color:#000;justify-content:space-between;font-family:Courier New,monospace;font-size:11px;font-weight:600;display:flex}.memory-total{color:#999}.cache-stats{grid-template-columns:repeat(2,1fr);gap:12px;margin-top:12px;display:grid}.cache-item{background:#f8f8f8;border:2px solid #e0e0e0;justify-content:space-between;align-items:center;padding:10px 12px;transition:all .2s;display:flex}.cache-item:hover{background:#fff;border-color:#000}.cache-item.total{color:#fff;background:#000;border-color:#000;grid-column:1/-1}.cache-item.total .cache-label,.cache-item.total .cache-value{color:#fff}.cache-label{color:#666;text-transform:uppercase;letter-spacing:.3px;font-size:11px;font-weight:600}.cache-value{color:#000;font-family:Courier New,monospace;font-size:13px;font-weight:700}.stats-grid{grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px;display:grid}.stat-card{text-align:center;background:#fff;border:2px solid #000;padding:18px;transition:all .2s;box-shadow:3px 3px #0000001a}.stat-card:hover{transform:translate(-2px,-2px);box-shadow:5px 5px #0003}.stat-value{color:#000;margin-bottom:6px;font-family:Courier New,monospace;font-size:32px;font-weight:900;line-height:1}.stat-label{color:#666;letter-spacing:.8px;font-size:10px}.action-button,.stat-label{text-transform:uppercase;font-weight:700}.action-button{color:#000;cursor:pointer;text-align:center;letter-spacing:.5px;background:#fff;border:2px solid #000;width:100%;margin-bottom:10px;padding:12px 16px;font-size:13px;transition:all .2s;box-shadow:3px 3px #0000001a}.action-button:last-child{margin-bottom:0}.action-button:hover{color:#fff;background:#000;transform:translate(-2px,-2px);box-shadow:5px 5px #0003}.action-button.danger{color:#d32f2f;border-color:#d32f2f}.action-button.danger:hover{color:#fff;background:#d32f2f;border-color:#d32f2f}.about-page{justify-content:center;align-items:center;min-height:320px;display:flex}.about-content{text-align:center;background:#fff;border:3px solid #000;padding:40px 30px;box-shadow:6px 6px #00000026}.about-content h2{color:#000;letter-spacing:-1px;text-transform:uppercase;margin:0 0 12px;font-size:28px;font-weight:900}.about-content .version{color:#fff;letter-spacing:1px;background:#000;margin-bottom:16px;padding:6px 14px;font-family:Courier New,monospace;font-size:11px;font-weight:700;display:inline-block}.about-desc{color:#666;margin-bottom:24px;font-size:14px;line-height:1.6}.about-tech{color:#fff;letter-spacing:.5px;text-transform:uppercase;background:#000;border:2px solid #000;padding:12px 20px;font-size:12px;font-weight:700;display:inline-block}.settings-footer{background:linear-gradient(#0000,#fff 30%);justify-content:flex-end;margin-top:auto;padding:16px 0 4px;display:flex;position:sticky;bottom:0}.save-btn{color:#999;cursor:not-allowed;background:#d0d0d0;border:none;border-radius:6px;min-width:90px;padding:10px 24px;font-size:13px;font-weight:600;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 6px #00000014}.save-btn:not(:disabled){color:#fff;cursor:pointer;background:#000;box-shadow:0 2px 8px #00000026}.save-btn:not(:disabled):hover{background:#2a2a2a;transform:translateY(-2px);box-shadow:0 4px 12px #00000040}.dev-tools-btns button{background:var(--bg-primary);border:1px solid var(--border-light);border-radius:var(--radius-md);color:var(--text-secondary);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:6px;padding:10px 16px;font-size:13px;transition:all .2s;display:flex}.dev-tools-btns button:hover{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.about-footer{border-top:1px solid var(--border-light);margin-top:20px;padding-top:18px}.about-footer p{color:var(--text-muted);margin:0;font-size:12px}.life-panel-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:1100;background:#00000073;justify-content:center;align-items:center;padding:24px;animation:.2s ease-out overlayFadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.life-panel{background-color:#fff;background-image:none;background-position:0 0;background-repeat:repeat;background-size:100% 28px,100% 100%;background-attachment:scroll;background-origin:padding-box;background-clip:border-box;border:1px solid #000;border-radius:16px;width:100%;max-width:620px;height:72vh;min-height:500px;max-height:640px;animation:.28s cubic-bezier(.34,1.56,.64,1) scaleIn;overflow:hidden;box-shadow:0 26px 70px #31220842,0 8px #825b1a33}.life-panel,.life-panel-inner{flex-direction:column;display:flex}.life-panel-inner{height:100%}.life-panel-header{background:#fff;border-bottom:1px dashed #000;flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.life-panel-header h3{color:#3c2a09;letter-spacing:.4px;text-align:center;flex:1;margin:0;font-size:21px;font-weight:800}.life-back-btn{cursor:pointer;color:#555;background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:6px 12px;font-size:12px;font-weight:600;transition:all .2s}.life-back-btn:hover{color:#fff;background:#000;border-color:#000}.life-close-btn{color:#666;cursor:pointer;background:#f0f0f0;border:none;border-radius:50%;justify-content:center;align-items:center;width:30px;height:30px;font-size:12px;transition:all .18s;display:flex}.life-close-btn:hover{color:#fff;background:#000}.life-panel-content{flex-direction:column;flex:1;gap:14px;padding:16px;display:flex;overflow-y:auto}.poster-overlay{z-index:3000;background:#00000094;padding:8px}.poster-card{background:#fff;border:1px solid #000;border-radius:16px;width:calc(min(96vw,1240px));max-height:96vh;padding:14px;overflow:auto}.poster-toolbar{flex-wrap:wrap;justify-content:space-between;gap:10px;margin-bottom:10px;display:flex}.poster-style-tabs,.poster-toolbar-actions{gap:8px;display:flex}.poster-style-tabs button{color:#573d0f;cursor:pointer;background:#fff;border:1px solid #000;border-radius:999px;height:32px;padding:0 14px;font-weight:700}.poster-style-tabs button.active{color:#fff;background:#4d3308}.poster-action{cursor:pointer;background:#fff;border:1px solid #000;border-radius:8px;height:32px;padding:0 12px;font-weight:600}.poster-action.primary{color:#fff;background:#3d2808;border-color:#3d2808}.poster-photo-strip{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;max-height:130px;margin-bottom:12px;display:grid;overflow-y:auto}.poster-photo-thumb{cursor:pointer;background:#fff;border:1px solid #000;border-radius:8px;height:76px;padding:0;overflow:hidden}.poster-photo-thumb img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;display:block}.poster-photo-thumb.active{border:2px solid #332106}.poster-photo-empty{color:#8f6e34;padding:8px;font-size:12px}.poster-preview{border-radius:14px;height:calc(min(68vh,700px));min-height:520px}.poster-mask{background:linear-gradient(#110a004d,#110a001a 65%,#110a008f);height:100%;padding:20px}.poster-mask h2{text-shadow:0 2px 8px #00000080;font-size:34px;font-weight:900}.poster-stats-row-top{flex-wrap:wrap;gap:8px;display:flex}.poster-stats-row-top span{background:#fff3;border:1px solid #ffffff59;border-radius:999px;padding:5px 10px;font-size:12px}.poster-stats-grid{gap:12px}.poster-stats-grid div{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#ffffff24;border-radius:12px;padding:12px}.poster-stats-grid strong{font-size:34px;line-height:1.1}.poster-style-film .poster-mask{background:linear-gradient(#0000001f,#000000b3)}.poster-style-postcard .poster-preview{border:14px solid #fff;box-shadow:0 14px 28px #0000003d}.poster-style-postcard .poster-mask{background:linear-gradient(#1a120a14,#1a120a52)}.poster-style-note .poster-preview{background-blend-mode:multiply;border-radius:10px}.poster-close{height:38px}.overseas-count-wrap{flex-direction:column;gap:4px;display:flex}.overseas-count-tip{color:#7a5a21;white-space:nowrap;font-size:11px}.poster-preview{aspect-ratio:4/3;width:100%;height:auto;min-height:560px;max-height:82vh;position:relative}.poster-mask{z-index:2;background:linear-gradient(#110a0029,#110a000d 60%,#110a0073);position:relative}.poster-template-note{background:#fff}.poster-template-film{background:repeating-linear-gradient(90deg,#ffffff0a 0 4px,#0000 0 10px),linear-gradient(160deg,#161616,#2b2b2b 45%,#4e4e4e)}.poster-template-postcard{background:radial-gradient(circle at 80% 22%,#ffffff73,#0000 28%),linear-gradient(135deg,#7ec2ff,#dff3ff 52%,#fff)}.poster-frames-layer{z-index:1;position:absolute;top:0;bottom:0;left:0;right:0}.poster-frame-slot{background:#fff3;border:6px solid #fff;transition:all .2s;position:absolute;overflow:hidden;box-shadow:0 8px 20px #00000038}.poster-frame-slot.drag-over{border-color:#000;box-shadow:0 0 0 3px #ffd66080,0 8px 20px #00000038}.poster-frame-slot img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;display:block}.poster-frame-placeholder{color:#ffffffd9;justify-content:center;align-items:center;width:100%;height:100%;font-size:28px;font-weight:700;display:flex}.poster-page{border-radius:16px;grid-template-columns:290px 1fr;gap:12px;width:calc(min(92vw,1240px));height:calc(min(88vh,880px));display:grid;overflow:hidden}.poster-page,.poster-sidebar{background:#fff;border:1px solid #000;padding:12px}.poster-sidebar{border-radius:12px;flex-direction:column;gap:10px;display:flex;overflow:auto}.poster-sidebar h4{color:#4c340e;margin:0;font-size:15px}.poster-side-group{flex-direction:column;gap:7px;display:flex}.poster-side-group label{color:#7a5a21;font-size:12px;font-weight:700}.poster-side-group small{color:#96723a;font-size:11px}.poster-pills{flex-wrap:wrap;gap:7px;display:flex}.life-view{flex-direction:column;height:100%;display:flex}.life-view-enter{animation:.22s ease-out lifeViewEnter}.life-view-exit{animation:.18s ease-in forwards lifeViewExit}@keyframes lifeViewEnter{0%{opacity:0;transform:translate(14px)}to{opacity:1;transform:translate(0)}}@keyframes lifeViewExit{to{opacity:0;transform:translate(-10px)}}.overseas-controls{grid-template-columns:1.6fr 1fr 1fr 1fr;gap:8px;margin-bottom:10px;display:grid}.life-note-card{background:#fff;border:1px solid #000;box-shadow:inset 0 1px #ffffffb3}.life-note-top{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.life-edit-btn{color:#000;cursor:pointer;background:#fff;border:1px solid #000;border-radius:999px;height:30px;padding:0 12px;font-size:12px;font-weight:700}.life-edit-btn.active{color:#fff;background:#000;border-color:#000}.overseas-result-line{color:#7a5a21;margin-bottom:8px;font-size:12px;font-weight:600}.overseas-count-input{min-width:84px}.poster-controls{grid-template-columns:140px 1fr;gap:8px;margin-bottom:10px;display:grid}.poster-controls input,.poster-controls select{background:#fff;border:1px solid #000;border-radius:8px;height:34px;padding:0 10px;font-size:12px}.poster-preview{background:#fff 50%/cover;border:1px solid #000;border-radius:12px;min-height:240px;overflow:hidden}.poster-mask{color:#fff;background:#1d13025c;flex-direction:column;justify-content:space-between;min-height:240px;display:flex}.poster-mask h2{margin:0;font-size:19px;font-weight:800}.poster-stats-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.poster-stats-grid div{text-align:center;background:#ffffff26;border:1px solid #ffffff47;border-radius:10px;padding:8px}.poster-stats-grid strong{font-size:18px;display:block}.poster-stats-grid span{font-size:11px}.poster-style-film .poster-preview{border-radius:0;box-shadow:inset 0 0 0 10px #171717}.poster-style-postcard .poster-preview{border:8px solid #fff;border-radius:4px}.poster-close{background:#2f1e04;border:none;width:100%;height:34px;margin-top:10px;font-weight:700}.overseas-input,.overseas-select{color:#333;background:#fff;border:1px solid #e5e7eb;border-radius:8px;height:34px;padding:0 10px;font-size:12px}.overseas-input:focus,.overseas-select:focus{border-color:#000;outline:none}.social-header-single{justify-content:space-between;padding:12px 16px}.social-single-title{color:#000;margin:0;font-size:15px;font-weight:700}.globe-village-btn{cursor:pointer;background:#071a46;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-self:center;align-items:center;width:44px;min-width:44px;height:44px;transition:transform .45s cubic-bezier(.18,.84,.28,1),box-shadow .45s;display:flex;box-shadow:0 8px 26px #04102ea8}.globe-village-icon{font-size:22px;line-height:1;transition:transform .5s cubic-bezier(.2,.85,.2,1);display:inline-block}.globe-village-btn:hover{transform:translateY(-3px)scale(1.16);box-shadow:0 16px 38px #081f50b8,0 0 0 6px #508cff29}.globe-village-btn:hover .globe-village-icon{transform:rotate(-24deg)scale(1.18)}.globe-village-btn.active{transform:scale(1.06)}.globe-village-btn.disabled{opacity:.52;cursor:not-allowed;filter:grayscale(.25)}.globe-village-btn.disabled:hover{transform:none;box-shadow:0 8px 26px #04102e6b}.globe-village-btn.origin-hidden{opacity:0;pointer-events:none;transform:scale(.8)}.village-modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1450;background:#00000040;position:fixed;top:0;bottom:0;left:0;right:0}.village-modal-shell{width:var(--target-w,calc(min(92vw,1080px)));height:var(--target-h,calc(min(82vh,640px)));will-change:transform,opacity,border-radius;transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) scale(var(--start-scale,0));opacity:0;background:#fff;border-radius:50%;grid-template-columns:minmax(0,1.65fr) minmax(300px,1fr);gap:12px;padding:12px;display:grid;position:fixed;top:50%;left:50%;overflow:hidden;box-shadow:0 20px 60px #00000026,0 0 0 1px #0000000d}.village-modal-shell.open{animation:.65s cubic-bezier(.16,.82,.16,1) forwards villageMorphIn}.village-modal-shell.closing{animation:.38s cubic-bezier(.65,0,.75,.3) forwards villageMorphOut}@keyframes villageMorphIn{0%{transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) scale(var(--start-scale,0));opacity:0;border-radius:50%}15%{opacity:1}to{opacity:1;border-radius:26px;transform:translate(-50%,-50%)scale(1)}}@keyframes villageMorphOut{0%{opacity:1;border-radius:26px;transform:translate(-50%,-50%)scale(1)}85%{opacity:1}to{transform:translate(calc(-50% + var(--dx,0px)),calc(-50% + var(--dy,0px))) scale(var(--start-scale,0));opacity:0;border-radius:50%}}.village-modal-left,.village-modal-right{color:#1e293b;opacity:0;z-index:1;background:#f8fafc;border:1px solid #e2e8f0;border-radius:14px;padding:16px;transition:opacity .18s,transform .18s;position:relative;transform:translateY(6px)}.village-social-hero{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:10px;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;display:flex}.hero-main{flex-direction:column;gap:2px;display:flex}.hero-main strong{color:#1e293b;font-size:13px}.hero-main span{color:#64748b;font-size:11px}.hero-post-btn{color:#fff;cursor:pointer;background:#3b82f6;border:none;border-radius:8px;height:30px;padding:0 14px;font-size:12px;font-weight:600;transition:background .15s}.hero-post-btn:hover{background:#2563eb}.village-modal-shell.open .village-modal-left,.village-modal-shell.open .village-modal-right{opacity:1;transition-delay:.3s;transition-timing-function:cubic-bezier(.2,.82,.18,1);transform:translateY(0)}.village-modal-shell.closing .village-modal-left,.village-modal-shell.closing .village-modal-right{opacity:0;transition-duration:.12s;transition-delay:0s;transform:translateY(8px)}.village-modal-left{flex-direction:column;gap:10px;min-width:0;display:flex;overflow-y:auto}.village-modal-head{justify-content:space-between;align-items:center;display:flex}.village-modal-head h3{color:#1e293b;align-items:center;gap:8px;margin:0;font-size:18px;font-weight:700;display:flex}.village-title-icon{font-size:18px}.village-shell-close{color:#64748b;cursor:pointer;z-index:3;opacity:0;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;width:32px;height:32px;font-size:13px;transition:opacity .18s,transform .18s,background .15s,color .15s;position:absolute;top:12px;right:12px;transform:translateY(-6px)}.village-modal-shell.open .village-shell-close{opacity:1;transition-delay:.45s;transform:translateY(0)}.village-modal-shell.closing .village-shell-close{opacity:0;transition-delay:0s;transform:translateY(-6px)}.village-shell-close:hover{color:#1e293b;background:#e2e8f0}.village-status-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.village-friend-item,.village-status-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;align-items:center;gap:8px;padding:8px;transition:border-color .15s,box-shadow .15s;display:flex}.village-friend-item:hover{border-color:#cbd5e1;box-shadow:0 2px 8px #0000000a}.village-avatar{color:#1e40af;background:#dbeafe;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;font-size:13px;font-weight:700;display:flex}.village-avatar.online{box-shadow:inset 0 0 0 2px #22c55e}.village-avatar.offline{box-shadow:inset 0 0 0 2px #e2e8f0}.village-avatar.small{width:28px;height:28px;font-size:11px}.village-friend-text,.village-status-info{flex-direction:column;min-width:0;display:flex}.village-friend-text strong,.village-status-info strong{color:#1e293b;white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.village-friend-text span,.village-status-info span{color:#64748b;font-size:11px}.village-stats-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.village-feed-card,.village-stats-grid.note-style div{background:#fff;border:1px solid #e2e8f0}.village-stats-grid div{text-align:center;border-radius:10px;padding:10px}.village-stats-grid strong{color:#1e293b;font-size:20px;display:block}.village-stats-grid span{color:#64748b;font-size:11px}.village-feed-card{border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex}.village-feed-title{color:#1e293b;font-size:13px;font-weight:700}.village-feed-list{flex-direction:column;gap:6px;max-height:160px;display:flex;overflow:auto}.village-feed-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;justify-content:space-between;gap:8px;padding:8px 10px;display:flex}.village-feed-main{flex-direction:column;gap:2px;display:flex}.village-feed-main strong{color:#1e293b;font-size:12px}.village-feed-main span{color:#64748b;font-size:11px}.village-feed-item small{color:#94a3b8;white-space:nowrap;font-size:10px}.village-feed-empty{color:#94a3b8;font-size:12px}.village-main-btn{color:#fff;cursor:pointer;background:#3b82f6;border:none;border-radius:10px;height:38px;font-size:13px;font-weight:600;transition:background .15s}.village-main-btn:hover{background:#2563eb}.village-main-btn.ghost{color:#3b82f6;background:#fff;border:1px solid #e2e8f0}.village-main-btn.ghost:hover{background:#f8fafc;border-color:#cbd5e1}.village-empty-state{color:#64748b;text-align:center;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:10px;min-height:160px;padding:20px 16px;display:flex}.village-empty-badge{color:#3b82f6;background:#dbeafe;border:1px solid #bfdbfe;border-radius:999px;padding:4px 10px;font-size:11px}.village-empty-state h4{color:#1e293b;margin:0;font-size:15px}.village-empty-state p{color:#64748b;max-width:380px;margin:0;font-size:12px;line-height:1.5}.village-empty-actions{gap:8px;display:flex}.village-modal-right h4{color:#1e293b;margin:0 0 8px;font-size:13px;font-weight:700}.village-modal-right{flex-direction:column;min-height:0;display:flex}.village-friend-tools{flex-direction:column;gap:6px;margin-bottom:8px;display:flex}.village-friend-add{gap:6px;display:flex}.village-friend-add input,.village-friend-search{color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;height:30px;padding:0 10px;font-size:12px;transition:border-color .15s}.village-friend-add input:focus,.village-friend-search:focus{border-color:#3b82f6}.village-friend-add input::-moz-placeholder{color:#94a3b8}.village-friend-search::-moz-placeholder{color:#94a3b8}.village-friend-add input::placeholder,.village-friend-search::placeholder{color:#94a3b8}.village-friend-add input{flex:1}.village-friend-add button{color:#fff;cursor:pointer;background:#3b82f6;border:none;border-radius:8px;padding:0 12px;font-size:12px;font-weight:600;transition:background .15s}.village-friend-add button:hover{background:#2563eb}.village-friend-list{min-height:0;padding-right:2px;overflow-y:auto}.village-friend-item-wrap,.village-friend-list{flex-direction:column;gap:4px;display:flex}.village-friend-item{cursor:pointer}.village-friend-actions{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.village-friend-actions button{color:#64748b;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:6px;height:26px;font-size:11px;transition:background .15s,color .15s,border-color .15s}.village-friend-actions button:hover{color:#1e293b;background:#f1f5f9;border-color:#cbd5e1}.village-friend-empty{color:#94a3b8;font-size:12px}@media (max-width:1180px){.village-modal-shell{--target-w:calc(min(95vw, 920px));--target-h:calc(min(88vh, 700px));grid-template-columns:minmax(0,1.3fr) minmax(260px,.95fr)}.village-stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:900px){.village-modal-shell{--target-w:calc(min(96vw, 760px));--target-h:calc(min(90vh, 760px));grid-template-columns:1fr}.village-modal-right{max-height:36vh}.village-empty-actions{flex-direction:column;width:100%}}.themed-floating-panel{position:relative}.themed-floating-panel:after{content:"";pointer-events:none;border-radius:inherit;opacity:0;transition:opacity .25s;position:absolute;top:0;bottom:0;left:0;right:0}.social-close{color:#666;cursor:pointer;background:#f5f5f5;border:none;border-radius:50%;justify-content:center;align-items:center;width:30px;height:30px;font-size:13px;transition:all .2s;display:flex}.social-close:hover{color:#fff;background:#000}.social-content{overscroll-behavior:contain;flex:1;position:relative;overflow-y:auto}.social-page{flex-direction:column;gap:16px;padding:20px;animation:.22s ease-out socialPageFadeIn;display:flex}@keyframes socialPageFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.social-overview-cards{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.soc-card{text-align:center;background:#f8f8f8;border:1px solid #f0f0f0;border-radius:12px;padding:14px 10px;transition:all .2s}.soc-card:hover{border-color:#e0e0e0;transform:translateY(-2px);box-shadow:0 4px 12px #0000000f}.soc-card-icon{margin-bottom:6px;font-size:20px}.soc-card-value{color:#000;margin-bottom:4px;font-size:22px;font-weight:700;line-height:1}.soc-card-label{color:#888;font-size:11px;font-weight:500}.social-section{background:#fff;border:1px solid #f0f0f0;border-radius:14px;padding:16px}.social-section h3{color:#000;margin:0 0 12px;font-size:13px;font-weight:700}.social-section-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.social-section-header h3{color:#000;margin:0;font-size:13px;font-weight:700}.life-breadcrumb{flex-wrap:wrap;align-items:center;gap:6px;padding:8px 4px;font-size:12px;display:flex}.bc-link{color:#888;cursor:pointer;transition:color .15s}.bc-link:hover{color:#000;text-decoration:underline}.bc-active{color:#000;font-weight:700}.bc-sep{color:#ccc;font-size:14px}.life-global-cards{flex-direction:column;gap:10px;display:flex}.life-globe-card{cursor:pointer;background:#fff;border:1px solid #e8e8e8;border-radius:14px;align-items:center;gap:14px;padding:16px;transition:all .2s;display:flex}.life-globe-card:hover{border-color:#000;transform:translate(4px);box-shadow:0 4px 16px #00000014}.life-globe-card.disabled{opacity:.5;cursor:default;pointer-events:none}.lgc-icon{flex-shrink:0;font-size:28px}.lgc-info{flex:1}.lgc-info strong{color:#000;margin-bottom:3px;font-size:15px;font-weight:700;display:block}.lgc-info span{color:#888;font-size:12px}.lgc-arrow{color:#ccc;font-size:20px}.lgc-badge{color:#999;background:#f5f5f5;border-radius:20px;padding:3px 8px;font-size:11px;font-weight:600}.province-drill-list{flex-direction:column;gap:8px;display:flex}.province-drill-item{cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:8px 10px;transition:background .15s;display:flex}.province-drill-item:hover{background:#f5f5f5}.province-drill-item.no-arrow{cursor:default}.province-drill-item.no-arrow:hover{background:0 0}.pdl-rank{text-align:center;flex-shrink:0;width:28px;font-size:15px}.pdl-name{color:#000;flex-shrink:0;width:48px;font-size:13px;font-weight:600}.pdl-bar-wrap{background:#f0f0f0;border-radius:3px;flex:1;height:5px;overflow:hidden}.pdl-bar{background:linear-gradient(90deg,#000,#555);border-radius:3px;height:100%;transition:width .4s}.pdl-count{color:#888;text-align:right;flex-shrink:0;width:32px;font-size:12px}.pdl-arrow{color:#ccc;flex-shrink:0;font-size:16px}.province-rank-item{align-items:center;gap:8px;display:flex}.rank-num{flex-shrink:0;width:24px;font-size:16px}.rank-name{flex-shrink:0;width:48px;font-size:13px;font-weight:600}.rank-bar-wrap{background:#f0f0f0;border-radius:3px;flex:1;height:6px;overflow:hidden}.rank-bar{background:linear-gradient(90deg,#000,#555);border-radius:3px;height:100%;transition:width .5s}.rank-count{color:#666;text-align:right;flex-shrink:0;width:36px;font-size:12px}.province-tags{flex-wrap:wrap;gap:6px;display:flex}.province-tag{border-radius:20px;padding:4px 10px;font-size:12px;font-weight:500}.province-tag.visited{color:#fff;background:#000}.province-tag.unvisited{color:#999;background:#f5f5f5;border:1px dashed #ddd}.social-actions{flex-direction:column;gap:10px;display:flex}.social-action-btn{cursor:pointer;text-align:left;background:#fff;border:1px solid #e8e8e8;border-radius:12px;align-items:center;gap:14px;width:100%;padding:14px 16px;transition:all .2s;display:flex}.social-action-btn:hover{background:#fafafa;border-color:#000;transform:translate(4px)}.social-action-btn span{flex-shrink:0;font-size:22px}.social-action-btn strong{color:#000;margin-bottom:2px;font-size:14px;font-weight:600;display:block}.social-action-btn small{color:#888;font-size:12px;display:block}.village-entry-card{cursor:pointer;color:#fff;background:linear-gradient(135deg,#0f0f0f,#1a1a2e 50%,#0d1b2a);border-radius:16px;align-items:center;gap:14px;padding:18px 16px;transition:all .3s cubic-bezier(.34,1.56,.64,1);display:flex;position:relative;overflow:hidden}.village-entry-card:before{content:"";pointer-events:none;background:radial-gradient(at 20%,#63b3ed1f,#0000 60%);position:absolute;top:0;bottom:0;left:0;right:0}.village-entry-card:hover{transform:translateY(-3px);box-shadow:0 12px 32px #0000004d}.village-entry-card:hover .village-entry-globe{animation:1.2s ease-in-out infinite globeFloat}.village-entry-globe{filter:drop-shadow(0 0 8px #63b3ed66);flex-shrink:0;font-size:32px;transition:transform .3s}@keyframes globeFloat{0%,to{transform:translateY(0)rotate(0)}25%{transform:translateY(-6px)rotate(-3deg)}75%{transform:translateY(-3px)rotate(3deg)}}.page-exit{animation:.35s ease-in forwards pageExit}@keyframes pageExit{to{opacity:0;transform:scale(.96)translateY(8px)}}.village-page{flex-direction:column;height:100%;animation:.4s cubic-bezier(.34,1.56,.64,1) villageEnter;display:flex;overflow-y:auto}@keyframes villageEnter{0%{opacity:0;transform:scale(1.04)translateY(-12px)}to{opacity:1;transform:scale(1)translateY(0)}}.village-page-hero{text-align:center;color:#fff;background:linear-gradient(160deg,#0f0f0f,#1a1a2e 60%,#0d2137);flex-shrink:0;padding:28px 20px 24px;position:relative}.village-globe-anim{filter:drop-shadow(0 4px 20px #63b3ed80);margin-bottom:10px;font-size:48px;animation:8s linear infinite globeSpin;display:block}@keyframes globeSpin{0%{transform:rotate(-3deg)scale(1)}25%{transform:rotate(3deg)scale(1.04)}50%{transform:rotate(-2deg)scale(1)}75%{transform:rotate(4deg)scale(1.03)}to{transform:rotate(-3deg)scale(1)}}.village-page-hero h2{letter-spacing:-.5px;margin:0 0 6px;font-size:20px;font-weight:800}.village-page-hero p{color:#fff9;margin:0;font-size:13px}.village-page-body{flex-direction:column;flex:1;gap:14px;padding:16px;display:flex;overflow-y:auto}.village-map-full{background:#f0f4f8;border:1px solid #e8e8e8;border-radius:14px;height:160px;position:relative;overflow:hidden}.village-map-inner{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:relative}.village-map-dots{position:absolute;top:0;bottom:0;left:0;right:0}.vmap-dot{opacity:.15;background:#000;border-radius:50%;width:8px;height:8px;animation:2.5s ease-in-out infinite dotPulse;position:absolute}.village-map-hint-inner{text-align:center;color:#888;z-index:1}.village-map-hint-inner span{margin-bottom:6px;font-size:28px;display:block}.village-map-hint-inner p{color:#555;margin:0 0 4px;font-size:13px;font-weight:600}.village-map-hint-inner small{font-size:11px}.village-stats-row{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.vstat{text-align:center;background:#f8f8f8;border:1px solid #f0f0f0;border-radius:12px;padding:12px 8px}.vstat span{color:#000;margin-bottom:4px;font-size:22px;font-weight:800;line-height:1;display:block}.vstat small{color:#888;font-size:11px;font-weight:500}.village-members-section{background:#fff;border:1px solid #f0f0f0;border-radius:14px;padding:14px}.village-members-header{color:#000;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:13px;font-weight:700;display:flex}.village-invite-btn{color:#fff;cursor:pointer;background:#000;border:1px solid #000;border-radius:8px;padding:5px 12px;font-size:12px;font-weight:600;transition:all .2s}.village-invite-btn:hover{background:#333}.village-empty{text-align:center;padding:16px 8px}.village-empty-icons span{margin-bottom:8px;font-size:32px;display:block}.village-empty p{color:#333;margin:0 0 4px;font-size:14px;font-weight:600}.village-empty small{color:#888;margin-bottom:14px;font-size:12px;display:block}.village-invite-big-btn{color:#fff;cursor:pointer;background:#000;border:none;border-radius:10px;padding:10px 20px;font-size:13px;font-weight:700;transition:all .2s}.village-invite-big-btn:hover{background:#333;transform:translateY(-1px)}.village-back-btn{cursor:pointer;color:#555;background:#fff;border:1px solid #e0e0e0;border-radius:10px;flex-shrink:0;margin:0 16px 16px;padding:10px;font-size:13px;font-weight:600;transition:all .2s}.village-back-btn:hover{color:#fff;background:#000;border-color:#000}.friend-list{flex-direction:column;gap:8px;display:flex}.friend-item{background:#f8f8f8;border:1px solid #f0f0f0;border-radius:10px;gap:12px;padding:10px 12px}.friend-avatar,.friend-item{align-items:center;display:flex}.friend-avatar{color:#fff;background:#000;border-radius:50%;flex-shrink:0;justify-content:center;width:36px;height:36px;font-size:16px;font-weight:700}.friend-info{flex:1}.friend-info strong{color:#000;font-size:14px;font-weight:600;display:block}.friend-info small{color:#888;font-size:12px}.friend-action-btn{cursor:pointer;background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:6px 14px;font-size:12px;font-weight:600;transition:all .2s}.friend-action-btn:hover{color:#fff;background:#000;border-color:#000}.add-friend-btn{color:#fff;cursor:pointer;background:#000;border:1px solid #000;border-radius:8px;padding:6px 14px;font-size:12px;font-weight:600;transition:all .2s}.add-friend-btn:hover{background:#333}.empty-hint{text-align:center;color:#999;padding:24px}.empty-hint span{margin-bottom:8px;font-size:28px;display:block}.empty-hint p{margin:0;font-size:13px}.back-btn{cursor:pointer;background:#fff;border:1px solid #e0e0e0;border-radius:8px;align-self:flex-start;margin-bottom:4px;padding:8px 16px;font-size:13px;font-weight:600;transition:all .2s}.back-btn:hover{color:#fff;background:#000;border-color:#000}.village-map-placeholder{background:#f5f5f5;border:2px dashed #e0e0e0;border-radius:12px;justify-content:center;align-items:center;height:200px;display:flex}.village-map-hint{text-align:center;color:#999}.village-map-hint span{margin-bottom:8px;font-size:32px;display:block}.village-map-hint p{color:#666;margin:0 0 4px;font-size:14px;font-weight:600}.village-map-hint small{font-size:12px}.poster-overlay{z-index:2000;background:#000000b3;justify-content:center;align-items:center;padding:24px;animation:.2s overlayFadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.poster-card{color:#fff;text-align:center;background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);border-radius:20px;width:100%;max-width:380px;padding:32px;position:relative;box-shadow:0 24px 64px #00000080}.poster-header h2{margin:0 0 6px;font-size:22px;font-weight:800}.poster-header p{opacity:.7;margin:0 0 24px;font-size:13px}.poster-stats{grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:20px;display:grid}.poster-stat{background:#ffffff1a;border-radius:12px;padding:14px 10px}.poster-stat span{margin-bottom:4px;font-size:28px;font-weight:800;display:block}.poster-stat small{opacity:.7;font-size:11px}.poster-highlight{opacity:.9;background:#ffffff14;border-radius:10px;margin-bottom:20px;padding:12px 16px;font-size:13px;line-height:1.6}.poster-highlight strong{color:gold}.poster-footer p{opacity:.5;margin:0 0 20px;font-size:11px}.poster-close{color:#fff;cursor:pointer;background:0 0;border:1px solid #ffffff4d;border-radius:8px;padding:10px 24px;font-size:13px;transition:all .2s}.poster-close:hover{background:#ffffff26}.poster-pills button{color:#000;cursor:pointer;background:#fff;border:1px solid #000;border-radius:999px;height:30px;padding:0 11px;font-size:12px;font-weight:700}.poster-pills button.active{color:#fff;background:#4d3308}.poster-photo-list-panel{background:#fff;border:1px solid #000;border-radius:10px;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;max-height:210px;padding:7px;display:grid;overflow:auto}.poster-side-actions{grid-template-columns:1fr 1fr;gap:8px;margin-top:auto;display:grid}.poster-canvas-wrap{background:#f7edd0;border:1px solid #000;border-radius:12px;justify-content:center;align-items:center;padding:8px;display:flex;overflow:auto}.poster-preview{width:min(100%,900px);min-height:0;max-height:100%}.poster-portrait{aspect-ratio:9/16;height:min(100%,760px)}.poster-landscape{aspect-ratio:16/9;height:min(100%,520px)}.poster-mask{pointer-events:none;justify-content:flex-end;gap:10px;padding:16px}.poster-mask h2{font-size:24px}.postcard-dropzone{z-index:1;background:#ffffff14;border:3px dashed #fffc;border-radius:14px;justify-content:center;align-items:center;transition:all .2s;display:flex;position:absolute;top:8%;bottom:24%;left:8%;right:8%;overflow:hidden}.postcard-dropzone.drag-over{background:#fff3;border-color:#fff;transform:scale(1.01)}.postcard-main-photo{-o-object-fit:contain;object-fit:contain;background:#00000038;width:100%;height:100%}.postcard-drop-hint{color:#fff;text-shadow:0 2px 6px #00000059;font-size:16px;font-weight:700}.poster-link-btn{color:#8e6521;text-align:left;cursor:pointer;background:0 0;border:none;padding:0;font-size:12px}.poster-link-btn:hover{color:#5b3d0f;text-decoration:underline}@media (max-width:1200px){.poster-page{grid-template-columns:1fr;height:calc(min(92vh,920px));overflow:auto}.poster-sidebar{max-height:34vh}.poster-canvas-wrap{min-height:50vh}}.notes-panel-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1900;background:#00000080;justify-content:center;align-items:center;padding:24px;animation:.2s fadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.notes-panel{background:var(--bg-secondary);border-radius:var(--radius-xl);width:100%;max-width:560px;max-height:calc(100vh - 48px);box-shadow:var(--shadow-xl);flex-direction:column;animation:.3s cubic-bezier(.34,1.56,.64,1) scaleIn;display:flex;overflow:hidden}.notes-panel-header{border-bottom:1px solid var(--border-light);background:linear-gradient(180deg,var(--bg-tertiary),transparent);justify-content:space-between;align-items:center;padding:18px 20px;display:flex}.notes-panel-header h3{margin:0;font-size:16px;font-weight:600}.notes-panel-header .header-actions{align-items:center;gap:8px;display:flex}.notes-panel-header .cancel-btn,.notes-panel-header .edit-btn,.notes-panel-header .save-btn{border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);padding:8px 14px;font-size:13px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1)}.notes-panel-header .edit-btn:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}.notes-panel-header .save-btn{background:var(--accent);color:#fff;border-color:var(--accent)}.notes-panel-header .save-btn:hover{background:var(--accent-hover);transform:translateY(-1px);box-shadow:0 4px 12px #3b82f64d}.notes-list{flex:1;padding:16px;overflow-y:auto}.note-item{background:var(--bg-tertiary);border-radius:var(--radius-lg);border:1px solid var(--border-light);gap:14px;margin-bottom:12px;padding:14px;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.note-item:hover{border-color:var(--border);transform:translate(4px)}.note-item:last-child{margin-bottom:0}.note-thumb{-o-object-fit:cover;object-fit:cover;border-radius:var(--radius-md);background:var(--bg-hover);width:72px;height:72px;box-shadow:var(--shadow-sm);flex-shrink:0;transition:transform .2s}.note-item:hover .note-thumb{transform:scale(1.05)}.note-content{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.note-label{color:var(--text-muted);text-transform:uppercase;font-size:12px;font-weight:600}.note-text{color:var(--text-secondary);font-size:14px;line-height:1.5}.note-content textarea{border:1px solid var(--border);background:var(--bg-secondary);min-height:60px;color:var(--text-primary);border-radius:var(--radius-md);resize:none;outline:none;flex:1;padding:10px 12px;font-family:inherit;font-size:14px;transition:all .2s}.note-content textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}.note-editor-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2500;background:#0009;justify-content:center;align-items:center;padding:24px;animation:.2s fadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.note-editor{background:var(--bg-secondary);border-radius:var(--radius-xl);width:100%;max-width:480px;box-shadow:var(--shadow-xl);padding:24px;animation:.3s cubic-bezier(.34,1.56,.64,1) scaleIn}.note-editor h3{color:var(--text-primary);margin:0 0 16px;font-size:18px;font-weight:600}.note-editor textarea{border:1px solid var(--border);background:var(--bg-tertiary);width:100%;min-height:120px;color:var(--text-primary);border-radius:var(--radius-md);resize:vertical;outline:none;padding:14px;font-family:inherit;font-size:14px;line-height:1.6;transition:all .2s}.note-editor textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}.note-editor-btns{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.note-editor-btns button{border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);padding:10px 20px;font-size:14px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1)}.note-editor-btns button:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}.note-editor-btns button.save{background:var(--accent);color:#fff;border-color:var(--accent)}.note-editor-btns button.save:hover{background:var(--accent-hover);transform:translateY(-1px);box-shadow:0 4px 12px #3b82f64d}.photo-search-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1600;background:#00000080;justify-content:center;align-items:center;animation:.2s fadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.photo-search-panel{background:var(--bg-secondary);border-radius:var(--radius-xl);width:480px;max-width:calc(100vw - 40px);max-height:calc(100vh - 80px);box-shadow:var(--shadow-xl);flex-direction:column;animation:.3s cubic-bezier(.34,1.56,.64,1) scaleIn;display:flex;overflow:hidden}.photo-search-header{border-bottom:1px solid var(--border-light);background:linear-gradient(180deg,var(--bg-tertiary),transparent);justify-content:space-between;align-items:center;padding:18px 20px;display:flex}.photo-search-header h3{margin:0;font-size:16px;font-weight:600}.photo-search-input-wrap{border-bottom:1px solid var(--border-light);align-items:center;gap:10px;padding:16px;display:flex}.photo-search-input-wrap input{border:1px solid var(--border);background:var(--bg-primary);color:var(--text-primary);border-radius:var(--radius-md);outline:none;flex:1;padding:12px 16px;font-size:14px;transition:all .2s}.photo-search-input-wrap input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}.photo-search-results{flex:1;max-height:400px;padding:10px;overflow-y:auto}.photo-search-item{cursor:pointer;border-radius:var(--radius-md);border:1px solid #0000;gap:14px;margin-bottom:6px;padding:12px;transition:all .2s;display:flex}.photo-search-item:hover{background:var(--accent-light);border-color:var(--accent);transform:translate(4px)}.photo-search-thumb{-o-object-fit:cover;object-fit:cover;border-radius:var(--radius-md);background:var(--bg-tertiary);width:64px;height:64px;box-shadow:var(--shadow-sm);flex-shrink:0}.photo-search-info{flex-direction:column;flex:1;justify-content:center;gap:6px;min-width:0;display:flex}.photo-search-note{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:14px;font-weight:500;display:-webkit-box;overflow:hidden}.photo-search-location{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.photo-editor-overlay{z-index:2100;background:#000;animation:.2s fadeIn;position:fixed;top:0;bottom:0;left:0;right:0}.photo-editor-modern{background:#000;flex-direction:column;width:100%;height:100%;display:flex}.pe-header{z-index:20;background:linear-gradient(#000c,#0000);justify-content:space-between;align-items:center;padding:12px 16px;display:flex;position:absolute;top:0;left:0;right:0}.pe-btn{color:#fff;cursor:pointer;background:0 0;border:none;border-radius:8px;padding:8px 16px;font-size:16px;transition:all .2s}.pe-cancel:hover{background:#ffffff1a}.pe-done{color:#ffffff4d;font-weight:600}.pe-done.active{color:#0a84ff}.pe-done.active:hover{background:#0a84ff26}.pe-done:disabled{cursor:not-allowed}.pe-title{color:#fff;font-size:17px;font-weight:600}.pe-canvas-area{flex:1;justify-content:center;align-items:center;padding:60px 20px 100px;display:flex;position:relative;overflow:hidden}.pe-image-container{cursor:crosshair;max-width:100%;max-height:100%;position:relative}.pe-image-container img{-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;max-width:100%;max-height:calc(100vh - 200px);transition:transform .3s;display:block}.pe-crop-overlay{pointer-events:none;background:#0009;position:absolute;top:0;bottom:0;left:0;right:0}.pe-crop-box{cursor:move;background:0 0;border:2px solid #fff;position:absolute;box-shadow:0 0 0 9999px #0009}.pe-grid{pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.pe-grid-h,.pe-grid-v{background:#ffffff4d;position:absolute}.pe-grid-h{height:1px;left:0;right:0}.pe-grid-v{width:1px;top:0;bottom:0}.crop-handle{z-index:10;width:24px;height:24px;position:absolute}.crop-handle:after,.crop-handle:before{content:"";background:#fff;position:absolute}.crop-handle.tl{cursor:nwse-resize;top:-3px;left:-3px}.crop-handle.tl:before{width:24px;height:3px;top:0;left:0}.crop-handle.tl:after{width:3px;height:24px;top:0;left:0}.crop-handle.tr{cursor:nesw-resize;top:-3px;right:-3px}.crop-handle.tr:before{width:24px;height:3px;top:0;right:0}.crop-handle.tr:after{width:3px;height:24px;top:0;right:0}.crop-handle.bl{cursor:nesw-resize;bottom:-3px;left:-3px}.crop-handle.bl:before{width:24px;height:3px;bottom:0;left:0}.crop-handle.bl:after{width:3px;height:24px;bottom:0;left:0}.crop-handle.br{cursor:nwse-resize;bottom:-3px;right:-3px}.crop-handle.br:before{width:24px;height:3px;bottom:0;right:0}.crop-handle.br:after{width:3px;height:24px;bottom:0;right:0}.pe-reset-btn{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff26;border:none;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;transition:all .2s;display:flex;position:absolute;top:50%;right:20px;transform:translateY(-50%)}.pe-reset-btn svg{fill:currentColor;width:20px;height:20px}.pe-reset-btn:hover{background:#ffffff40;transform:translateY(-50%)scale(1.1)}.pe-hint{color:#ffffff80;font-size:14px}.pe-hint,.pe-status{pointer-events:none;position:absolute;bottom:100px;left:50%;transform:translate(-50%)}.pe-status{gap:12px;display:flex}.pe-status-item{color:#fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff26;border-radius:16px;padding:6px 12px;font-size:12px;font-weight:500}.pe-toolbar{background:linear-gradient(#0000,#000c);gap:12px;padding:20px;position:absolute;bottom:0;left:0;right:0}.memory-monitor-toggle,.pe-tool,.pe-toolbar{justify-content:center;align-items:center;display:flex}.pe-tool{color:#fff;cursor:pointer;background:#ffffff1a;border:none;border-radius:50%;width:48px;height:48px;transition:all .2s}.pe-tool svg{fill:currentColor;width:22px;height:22px}.pe-tool:hover{background:#fff3;transform:scale(1.1)}.pe-tool:active{transform:scale(.95)}.memory-monitor-toggle{color:#fff;cursor:pointer;z-index:9999;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#0009;border:none;border-radius:50%;width:36px;height:36px;font-size:16px;transition:all .2s;position:fixed;bottom:20px;left:20px}.memory-monitor-toggle:hover{background:#000c;transform:scale(1.1)}.memory-monitor-panel{color:#fff;z-index:9999;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#000000d9;border-radius:12px;width:200px;padding:12px;font-size:12px;position:fixed;bottom:70px;left:20px;box-shadow:0 4px 20px #0000004d}.mm-header{border-bottom:1px solid #fff3;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;font-weight:600;display:flex}.mm-header button{color:#fff9;cursor:pointer;background:0 0;border:none;width:20px;height:20px;padding:0;font-size:16px}.mm-header button:hover{color:#fff}.mm-section{margin-bottom:12px}.mm-section:last-child{margin-bottom:0}.mm-title{color:#fff9;text-transform:uppercase;margin-bottom:6px;font-size:11px}.mm-row{justify-content:space-between;padding:2px 0;display:flex}.mm-value{color:#4ade80;font-family:monospace}.mm-total{border-top:1px solid #ffffff1a;margin-top:4px;padding-top:4px;font-weight:600}.mm-bar{background:#fff3;border-radius:2px;height:4px;margin-top:6px;overflow:hidden}.mm-bar-fill{background:linear-gradient(90deg,#4ade80,#facc15,#ef4444);border-radius:2px;height:100%;transition:width .3s}.marker-list-header{border-bottom:1px solid #e5e7eb;flex-shrink:0;justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.marker-list-header h3{color:#111;margin:0;font-size:20px;font-weight:600}.header-actions{align-items:center;gap:12px;display:flex}.batch-toggle-btn{color:#fff;cursor:pointer;background:#4a90e2;border:none;border-radius:8px;padding:9px 18px;font-size:14px;font-weight:500;transition:all .2s}.batch-toggle-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px #4a90e24d}.batch-actions-bar{background:#fff;border-top:1px solid #e8e8e8;flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 24px;display:flex;box-shadow:0 -4px 12px #0000000d}.batch-count{color:#000;font-size:15px;font-weight:600}.batch-buttons{gap:10px;display:flex}.batch-btn{cursor:pointer;border:none;border-radius:6px;padding:8px 16px;font-size:13px;font-weight:600;transition:all .2s}.batch-merge{color:#fff;background:#000}.batch-merge:hover:not(:disabled){background:#2a2a2a;transform:translateY(-1px);box-shadow:0 4px 12px #0003}.batch-merge:disabled{cursor:not-allowed;opacity:.6;background:#d0d0d0}.batch-delete{color:#fff;background:#dc2626}.batch-delete:hover{background:#b91c1c;transform:translateY(-1px);box-shadow:0 4px 12px #dc26264d}.marker-list-item-wrapper{flex-direction:column;margin-bottom:12px;display:flex}.expand-btn{color:#666;cursor:pointer;background:#fafafa;border:1px solid #e0e0e0;border-radius:4px;flex-shrink:0;margin-left:auto;padding:6px 10px;font-size:12px;transition:all .2s}.expand-btn:hover{color:#fff;background:#000;border-color:#000}.photo-grid-expanded{background:#fafafa;border:1px solid #e8e8e8;border-radius:8px;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:8px;margin-top:8px;padding:12px;animation:.3s ease-out expandSlide;display:grid}@keyframes expandSlide{0%{opacity:0;transform-origin:top;transform:scaleY(.8)}to{opacity:1;transform:scaleY(1)}}.photo-item-expanded{aspect-ratio:1;cursor:pointer;background:#fff;border:2px solid #e8e8e8;border-radius:6px;transition:all .2s;position:relative}.photo-item-expanded:hover{border-color:#000;transform:scale(1.05);box-shadow:0 2px 8px #0000001a}.photo-item-expanded.selected{border-color:#000;transform:scale(1.02);box-shadow:0 0 0 3px #0000001a}.photo-item-expanded.selected:before{content:"";pointer-events:none;z-index:1;background:#0000000d;position:absolute;top:0;bottom:0;left:0;right:0}.photo-thumb-expanded{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.photo-check-expanded{color:#fff;z-index:2;background:#000;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;font-weight:700;animation:.2s cubic-bezier(.34,1.56,.64,1) checkPop;display:flex;position:absolute;top:4px;right:4px;box-shadow:0 2px 8px #0000004d}.photo-grid-batch{background:#fafafa;border-radius:8px;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:8px;margin-top:8px;padding:12px;display:grid}.photo-item-batch{aspect-ratio:1;cursor:pointer;background:#fff;border:2px solid #e8e8e8;border-radius:6px;transition:all .2s;position:relative;overflow:hidden}.photo-item-batch:hover{border-color:#000;transform:scale(1.05);box-shadow:0 2px 8px #0000001a}.photo-item-batch.selected{border-color:#000;transform:scale(1.02);box-shadow:0 0 0 3px #0000001a}.photo-item-batch.selected:before{content:"";pointer-events:none;z-index:1;background:#0000000d;position:absolute;top:0;bottom:0;left:0;right:0}.photo-thumb-batch{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.photo-check{color:#fff;z-index:2;background:#000;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;font-weight:700;animation:.2s cubic-bezier(.34,1.56,.64,1) checkPop;display:flex;position:absolute;top:4px;right:4px;box-shadow:0 2px 8px #0000004d}@keyframes checkPop{0%{transform:scale(0)}to{transform:scale(1)}}.merge-dialog-overlay{z-index:10000;background:#00000080;justify-content:center;align-items:center;animation:.2s fadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.merge-dialog{background:#fff;border-radius:12px;flex-direction:column;width:90%;max-width:600px;max-height:80vh;animation:.3s slideUp;display:flex;box-shadow:0 20px 60px #0000004d}.merge-dialog-header{border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:20px;display:flex}.merge-dialog-header h3{color:#111;margin:0;font-size:18px}.merge-dialog-content{flex:1;padding:20px;overflow-y:auto}.merge-hint{color:#6b7280;margin:0 0 16px;font-size:14px}.merge-photo-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;display:grid}.merge-photo-item{cursor:pointer;border:2px solid #e5e7eb;border-radius:8px;transition:all .2s;position:relative;overflow:hidden}.merge-photo-item:hover{border-color:#3b82f6;transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.merge-photo-item.target{border-width:3px;border-color:#10b981;box-shadow:0 0 0 3px #10b98133}.merge-photo-thumb{aspect-ratio:1;-o-object-fit:cover;object-fit:cover;width:100%}.merge-photo-info{background:#fff;padding:8px}.merge-photo-location{color:#374151;white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.merge-target-badge{color:#fff;background:#10b981;border-radius:4px;padding:4px 8px;font-size:11px;font-weight:600;position:absolute;top:8px;right:8px;box-shadow:0 2px 8px #10b9814d}.merge-dialog-footer{border-top:1px solid #e5e7eb;justify-content:flex-end;gap:12px;padding:16px 20px;display:flex}.merge-cancel-btn,.merge-confirm-btn{cursor:pointer;border:none;border-radius:6px;padding:10px 20px;font-size:14px;font-weight:500;transition:all .2s}.merge-cancel-btn{color:#374151;background:#f3f4f6}.merge-cancel-btn:hover{background:#e5e7eb}.merge-confirm-btn{color:#fff;background:#10b981}.merge-confirm-btn:hover:not(:disabled){background:#059669}.merge-confirm-btn:disabled{cursor:not-allowed;background:#d1d5db}.photo-viewer.batch-select-mode{background:#000000f2}.batch-select-container{background:#fff;border-radius:12px;flex-direction:column;width:90%;max-width:1200px;height:90vh;display:flex;overflow:hidden}.batch-select-header{background:#fff;border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:20px;display:flex}.batch-select-header h3{color:#111;margin:0;font-size:18px}.batch-select-grid{flex:1;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));align-content:start;gap:16px;padding:20px;display:grid;overflow-y:auto}.batch-select-item{aspect-ratio:1;cursor:pointer;background:#f3f4f6;border:3px solid #0000;border-radius:8px;transition:all .2s;position:relative;overflow:hidden}.batch-select-item:hover{transform:scale(1.05);box-shadow:0 4px 12px #00000026}.batch-select-item.selected{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f633}.batch-select-item img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.batch-select-check{color:#fff;background:#3b82f6;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;font-weight:700;display:flex;position:absolute;top:8px;right:8px;box-shadow:0 2px 8px #3b82f666}.batch-select-note{color:#fff;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(#0000,#000c);padding:8px;font-size:12px;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.photo-item-inner{cursor:pointer;border-radius:6px;width:100%;height:100%;position:relative;overflow:hidden}.photo-cover-badge{color:#fff;text-align:center;pointer-events:none;background:#0009;padding:2px 0;font-size:10px;position:absolute;bottom:0;left:0;right:0}.photo-item-menu{z-index:10;background:#000000d9;border-radius:6px;flex-direction:column;gap:2px;min-width:96px;padding:4px;animation:.15s ease-out menuFadeIn;display:flex;position:absolute;top:-6px;left:50%;transform:translate(-50%,-100%);box-shadow:0 -2px 12px #0000004d}.photo-item-menu:after{content:"";border-top:6px solid #000000d9;border-left:6px solid #0000;border-right:6px solid #0000;width:0;height:0;position:absolute;top:100%;left:50%;transform:translate(-50%)}@keyframes menuFadeIn{0%{opacity:0;transform:translate(-50%,-100%)translateY(4px)}to{opacity:1;transform:translate(-50%,-100%)translateY(0)}}.photo-item-menu button{color:#fff;cursor:pointer;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:4px;padding:5px 8px;font-size:11px}.photo-item-menu button:hover{background:#ffffff26}.photo-item-menu button.danger{color:#f87171}.photo-item-menu button.danger:hover{background:#f8717133}.photo-note-label{color:#fff;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;background:linear-gradient(#0000 40%,#000000b3);border-radius:0 0 6px 6px;padding:16px 6px 4px;font-size:10px;line-height:1.2;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.photo-item-add{cursor:pointer;color:#999;justify-content:center;align-items:center;min-height:72px;font-size:24px;transition:border-color .2s,color .2s;display:flex;background:0 0!important;border:2px dashed #999!important}.photo-item-add:hover{color:#333;border-color:#333!important}.pv-btn-active{opacity:.4;cursor:default}.simple-loader{z-index:3000;background:linear-gradient(135deg,#667eea,#764ba2);justify-content:center;align-items:center;animation:.5s fadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.app-icon{margin-bottom:16px;font-size:64px;animation:2s ease-in-out infinite bounce}.loader-content h1{text-shadow:0 2px 4px #0000004d;margin:0 0 32px;font-size:32px;font-weight:700}.progress-ring{display:inline-block;position:relative}.progress-text{color:#fff;font-size:18px;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.starfield{pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.stars-layer:before{content:"";background-image:radial-gradient(1px 1px at 15% 25%,#ffffffe6,#0000),radial-gradient(1px 1px at 85% 15%,#ffffffb3,#0000),radial-gradient(1px 1px at 45% 75%,#fffc,#0000),radial-gradient(1px 1px at 75% 85%,#fff9,#0000),radial-gradient(1px 1px at 25% 55%,#ffffff80,#0000),radial-gradient(1px 1px at 65% 35%,#ffffffe6,#0000);background-repeat:repeat;background-size:300px 200px;animation:6s ease-in-out infinite starTwinkle;position:absolute;top:0;bottom:0;left:0;right:0}@keyframes starTwinkle{0%,to{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.1)}}@keyframes filmSpin{0%{transform:rotateY(0)rotateX(0)}25%{transform:rotateY(90deg)rotateX(15deg)}50%{transform:rotateY(180deg)rotateX(0)}75%{transform:rotateY(270deg)rotateX(-15deg)}to{transform:rotateY(1turn)rotateX(0)}}.film-progress-container{width:400px;height:40px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.film-progress-bar{background:linear-gradient(90deg,#e8e8e8,#d4d4d4 20%,silver 40%,#a8a8a8 60%,#909090 80%,#787878);border:2px solid #505050;border-radius:6px;height:100%;transition:width .3s ease-out;position:relative;overflow:hidden;box-shadow:0 4px 12px #0000004d,inset 0 2px #fff6,inset 0 -2px #0003}.film-frames{background-image:radial-gradient(circle at 8px 4px,#0000 2px,#2a2a2a 0 3px,#0000 0),radial-gradient(circle at 24px 4px,#0000 2px,#2a2a2a 0 3px,#0000 0),radial-gradient(circle at 40px 4px,#0000 2px,#2a2a2a 0 3px,#0000 0),radial-gradient(circle at 8px calc(100% - 4px),#0000 2px,#2a2a2a 0 3px,#0000 0),radial-gradient(circle at 24px calc(100% - 4px),#0000 2px,#2a2a2a 0 3px,#0000 0),radial-gradient(circle at 40px calc(100% - 4px),#0000 2px,#2a2a2a 0 3px,#0000 0),repeating-linear-gradient(90deg,#1a1a1a,#1a1a1a 1px,#2a2a2a 0 15px,#1a1a1a 0 16px);background-repeat:repeat-x;background-size:16px 8px,16px 8px,16px 8px,16px 8px,16px 8px,16px 8px,16px 100%;border-radius:2px;position:absolute;top:4px;bottom:4px;left:4px;right:4px}.film-icons{pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.film-icon{font-size:32px;animation:2s ease-in-out infinite filmIconFloat;position:absolute;top:50%;transform:translateY(-50%)}.film-icon.left{animation-delay:0s;left:-50px}.film-icon.right{animation-delay:1s;right:-50px}@keyframes filmIconFloat{0%,to{transform:translateY(-50%)rotate(0)}50%{transform:translateY(-60%)rotate(10deg)}}.film-ribbon{transform-style:preserve-3d;background:linear-gradient(#e8e8e8,#d4d4d4 20%,silver 40%,#a8a8a8 60%,#909090 80%,#787878);border:2px solid #505050;border-radius:3px;position:relative;box-shadow:0 3px 8px #0006,0 1px 3px #0003,inset 0 1px #ffffff80,inset 0 -1px #0003}.film-perforations{pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.film-perforations:after,.film-perforations:before{content:"";background-color:#0000;background-image:radial-gradient(circle at 6px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 18px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 30px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 42px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 54px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 66px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 78px,#0000 2px,#1a1a1a 0 3px,#0000 0),radial-gradient(circle at 90px,#0000 2px,#1a1a1a 0 3px,#0000 0);background-position:0 0;background-repeat:repeat-x;background-size:12px 6px;background-attachment:scroll;background-origin:padding-box;background-clip:border-box;border-radius:3px;height:6px;position:absolute;left:0;right:0;box-shadow:inset 0 1px 2px #000c,0 1px #ffffff1a}.film-perforations:before{top:3px}.film-perforations:after{bottom:3px}.film-ribbon:after{content:"";background:repeating-linear-gradient(90deg,#2a2a2a,#2a2a2a 1px,#1a1a1a 0 8px,#2a2a2a 0 9px,#1a1a1a 0 16px);border:1px solid #0a0a0a;border-radius:1px;position:absolute;top:11px;bottom:11px;left:6px;right:6px;box-shadow:inset 0 1px 2px #0009,inset 0 -1px 1px #ffffff1a,0 1px #ffffff0d}.connection-effect{width:100px;height:100px}.connection-effect,.ripple{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.ripple{border:2px solid #fff9;border-radius:50%;width:20px;height:20px;animation:2s ease-out infinite rippleExpand}.ripple.delay-1{border-color:#3b82f699;animation-delay:.5s}.ripple.delay-2{border-color:#8b5cf699;animation-delay:1s}@keyframes rippleExpand{0%{opacity:1;width:20px;height:20px}to{opacity:0;width:100px;height:100px}}.loader-info{text-align:center;animation:.8s cubic-bezier(.34,1.56,.64,1) .5s both slideUp;position:absolute;bottom:100px;left:50%;transform:translate(-50%)}.loader-title{background:linear-gradient(135deg,#fff,#e2e8f0 50%,#cbd5e1);-webkit-text-fill-color:transparent;text-shadow:0 0 20px #ffffff4d;letter-spacing:1px;-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-size:28px;font-weight:700}.loader-subtitle{color:#ffffffb3;letter-spacing:.5px;font-size:14px;font-weight:400;transition:all .5s}.film-loader.connecting .film-progress-bar{animation:1s ease-in-out infinite alternate filmGlow}@keyframes filmGlow{0%{box-shadow:0 4px 12px #0000004d,inset 0 2px #fff6,inset 0 -2px #0003}to{box-shadow:0 6px 20px #3b82f666,inset 0 2px #fff9,inset 0 -2px #0003,0 0 20px #3b82f64d}}.film-loader.complete{animation:1.2s reverse forwards fadeIn}.film-loader.complete .film-ribbon{animation:1.2s forwards fadeOut}@keyframes fadeOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.1)}}.apple-loader{z-index:3000;background:radial-gradient(800px 600px at 20% 30%,#ffffff26,#0000 50%) 0 0/150% 120%,radial-gradient(600px 400px at 80% 70%,#c8c8c81a,#0000 50%) 0 0/120% 100%,radial-gradient(400px 300px at 60% 20%,#96969614,#0000 50%) 0 0/100% 80%,linear-gradient(135deg,#000,#1a1a1a 15%,#333 30%,#4d4d4d 45%,#666 60%,gray 75%,#999 85%,#ccc 95%,#fff) 0 0/300% 300%;justify-content:center;align-items:center;transition:all .5s;animation:6s ease-in-out infinite waveLayer1,8s ease-in-out infinite reverse waveLayer2,10s ease-in-out infinite waveLayer3,12s ease-in-out infinite waveGradient;display:flex;position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden}.apple-loader:before{background:radial-gradient(ellipse 500px 300px at var(--before-pos-1,40% 80%),#ffffff0d 0,transparent 60%),radial-gradient(ellipse 300px 200px at var(--before-pos-2,90% 10%),#b4b4b414 0,transparent 50%);background-size:200% 150%,150% 120%;animation:7s ease-in-out infinite waveOverlay1,9s ease-in-out infinite reverse waveOverlay2}.apple-loader:after,.apple-loader:before{content:"";pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.apple-loader:after{background:radial-gradient(ellipse 700px 400px at var(--after-pos-1,10% 60%),#dcdcdc0f 0,transparent 70%),radial-gradient(ellipse 400px 250px at var(--after-pos-2,70% 40%),#a0a0a00a 0,transparent 60%);background-size:180% 140%,130% 110%;animation:11s ease-in-out infinite waveOverlay3,13s ease-in-out infinite reverse waveOverlay4}.apple-loader.interactive-mode:before{background-size:250% 180%,180% 140%;transition:background .5s cubic-bezier(.25,.46,.45,.94);animation:none}.apple-loader.interactive-mode:after{background-size:220% 160%,160% 130%;transition:background .6s cubic-bezier(.25,.46,.45,.94);animation:none}.apple-loader.interactive-mode{background-size:200% 150%,150% 120%,120% 100%,400% 400%;transition:background-position .4s cubic-bezier(.25,.46,.45,.94);animation:none}@keyframes waveGradient{0%{background-position:0,20% 30%,80% 70%,0 0}15%{background-position:25% 60%,30% 20%,70% 80%,15% 10%}30%{background-position:60% 80%,50% 40%,60% 60%,40% 30%}45%{background-position:90% 70%,80% 60%,40% 40%,70% 60%}60%{background-position:100% 40%,90% 80%,20% 20%,90% 80%}75%{background-position:80% 20%,70% 90%,10%,60% 90%}90%{background-position:40% 30%,40% 70%,30% 80%,20% 70%}to{background-position:0,20% 30%,80% 70%,0 0}}@keyframes waveLayer1{0%,to{background-position:0 40%,10% 60%}25%{background-position:30% 70%,40% 30%}50%{background-position:70% 80%,80% 20%}75%{background-position:90%,60% 90%}}@keyframes waveLayer2{0%,to{background-position:100% 60%,90% 40%}20%{background-position:80% 30%,70% 80%}40%{background-position:50% 20%,40% 90%}60%{background-position:20% 70%,10%}80%{background-position:10% 90%,30% 20%}}@keyframes waveLayer3{0%,to{background-position:50%,60% 70%}30%{background-position:80% 20%,90% 40%}60%{background-position:20% 90%,10% 80%}90%{background-position:40% 30%,50% 10%}}@keyframes waveOverlay1{0%,to{background-position:20% 80%,80% 20%}33%{background-position:60% 40%,40% 70%}66%{background-position:90% 10%,10% 90%}}@keyframes waveOverlay2{0%,to{background-position:70% 30%,30% 80%}25%{background-position:40% 60%,80% 40%}50%{background-position:10% 90%,90% 10%}75%{background-position:50% 20%,60% 70%}}@keyframes waveOverlay3{0%,to{background-position:40% 60%,70% 40%}40%{background-position:80% 90%,20% 10%}80%{background-position:10% 30%,90% 80%}}@keyframes waveOverlay4{0%,to{background-position:60% 20%,40% 90%}50%{background-position:20% 70%,80% 30%}}.loader-content{text-align:center;color:#fff;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);z-index:10;background:#0006;border:1px solid #ffffff26;border-radius:24px;width:90%;max-width:500px;padding:50px 40px;position:relative;box-shadow:0 20px 40px #0000004d}.loader-decorations{pointer-events:none;z-index:5;position:absolute;top:0;bottom:0;left:0;right:0}.floating-icon{opacity:.6;font-size:24px;animation:4s ease-in-out infinite floatIcon;position:absolute}.icon-1{animation-delay:0s;top:15%;left:10%}.icon-2{animation-delay:1s;top:25%;right:15%}.icon-3{animation-delay:2s;bottom:30%;left:8%}.icon-4{animation-delay:3s;bottom:20%;right:12%}@keyframes floatIcon{0%,to{opacity:.4;transform:translateY(0)rotate(0)}50%{opacity:.8;transform:translateY(-20px)rotate(5deg)}}.app-branding{margin-bottom:60px;animation:.8s ease-out fadeInUp}.logo-container{justify-content:center;align-items:center;gap:16px;margin-bottom:20px;display:flex}.app-logo{font-size:40px;animation:3s ease-in-out infinite logoSpin}@keyframes logoSpin{0%,to{transform:rotate(0)scale(1)}50%{transform:rotate(10deg)scale(1.1)}}.app-title{color:#fff;letter-spacing:-1px;text-shadow:0 4px 8px #00000080;background:linear-gradient(135deg,#fff,#e0e0e0);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin:0;font-size:42px;font-weight:700}.app-subtitle,.app-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.app-subtitle{color:#b0b0b0;text-shadow:0 2px 4px #00000080;margin:12px 0 24px;font-size:16px;font-weight:400}.feature-tags{flex-wrap:wrap;justify-content:center;gap:12px;margin-top:16px;display:flex}.tag{color:#e0e0e0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff1a;border:1px solid #fff3;border-radius:20px;padding:6px 14px;font-size:13px;transition:all .3s}.tag:hover{background:#ffffff26;transform:translateY(-2px)}.progress-section{animation:.8s ease-out .2s both fadeInUp}.progress-indicator{margin-bottom:20px}.stage-dots{justify-content:center;align-items:center;gap:12px;display:flex}.stage-dot{background:#fff3;border-radius:50%;width:8px;height:8px;transition:all .4s cubic-bezier(.34,1.56,.64,1);position:relative}.stage-dot.active{background:#fff;transform:scale(1.3);box-shadow:0 0 12px #fffc}.stage-dot.active:after{content:"";border:2px solid #ffffff4d;border-radius:50%;animation:1s ease-out infinite dotPulse;position:absolute;top:-4px;bottom:-4px;left:-4px;right:-4px}@keyframes dotPulse{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.5)}}.progress-container{margin-bottom:16px;position:relative}.progress-track{background:#ffffff26;border-radius:2px;width:100%;height:3px;position:relative;overflow:visible;box-shadow:inset 0 1px 3px #0000004d}.progress-fill-left{transform-origin:0;background:linear-gradient(90deg,#fff,#f0f0f0);left:0}.progress-fill-left,.progress-fill-right{border-radius:2px;height:100%;transition:width .3s;position:absolute;top:0;box-shadow:0 0 10px #ffffff80}.progress-fill-right{transform-origin:100%;background:linear-gradient(270deg,#fff,#f0f0f0);right:0}.progress-glow{pointer-events:none;background:radial-gradient(#ffffff4d,#0000);border-radius:4px;animation:2s ease-in-out infinite glowPulse;position:absolute;top:-2px;bottom:-2px;left:-2px;right:-2px}@keyframes glowPulse{0%,to{opacity:.5}50%{opacity:1}}.progress-percentage{color:#fff;text-shadow:0 2px 8px #00000080;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:20px;font-weight:700;position:absolute;top:-30px;left:50%;transform:translate(-50%)}.progress-info{text-align:center;margin-top:20px}.progress-text{color:#d0d0d0;text-shadow:0 2px 4px #00000080;justify-content:center;align-items:center;min-height:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:15px;font-weight:500;transition:all .3s;display:flex}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.enter-button-section{animation:1.2s ease-out buttonFadeIn}.success-message{text-align:center;margin-bottom:40px}.success-icon{margin-bottom:16px;font-size:48px;animation:1s ease-out successBounce}@keyframes successBounce{0%{transform:scale(0)rotate(0)}50%{transform:scale(1.2)rotate(180deg)}to{transform:scale(1)rotate(1turn)}}.success-title{color:#fff;text-shadow:0 2px 8px #00000080;margin:0 0 8px;font-size:28px;font-weight:700}.enter-map-button,.success-subtitle,.success-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.success-subtitle{color:silver;margin:0;font-size:16px;font-weight:400}.enter-map-button{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);text-shadow:0 2px 4px #00000080;background:linear-gradient(135deg,#ffffff26,#ffffff0d);border:2px solid #ffffff4d;border-radius:50px;justify-content:center;align-items:center;gap:12px;min-width:220px;margin:0 auto 32px;padding:18px 36px;font-size:18px;font-weight:600;transition:all .4s cubic-bezier(.34,1.56,.64,1);display:flex;position:relative;overflow:hidden;box-shadow:0 8px 32px #0000004d}.enter-map-button:hover{background:linear-gradient(135deg,#ffffff40,#ffffff1a);border-color:#ffffff80;transform:translateY(-4px)scale(1.02);box-shadow:0 12px 48px #fff3}.enter-map-button:active{transform:translateY(-2px)scale(.98);box-shadow:0 6px 24px #ffffff26}.button-icon{font-size:20px;animation:2s ease-in-out infinite iconFloat}@keyframes iconFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.button-text{z-index:2;position:relative}.button-wave-effect{border-radius:inherit;z-index:1;background:linear-gradient(45deg,#ffffff1a,#ffffff0d,#ffffff1a) 0 0/200% 200%;animation:3s ease-in-out infinite buttonWave;position:absolute;top:0;bottom:0;left:0;right:0}@keyframes buttonWave{0%,to{background-position:0}50%{background-position:100%}}.quick-features{flex-wrap:wrap;justify-content:center;gap:24px;display:flex}.feature-item{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff0d;border:1px solid #ffffff1a;border-radius:16px;flex-direction:column;align-items:center;gap:8px;min-width:80px;padding:16px 12px;transition:all .3s;display:flex}.feature-item:hover{background:#ffffff1a;transform:translateY(-2px)}.feature-icon{font-size:20px}.feature-text{color:#d0d0d0;text-align:center;font-size:12px;font-weight:500}@keyframes buttonFadeIn{0%{opacity:0;transform:translateY(40px)scale(.9)}60%{opacity:.8;transform:translateY(-8px)scale(1.02)}to{opacity:1;transform:translateY(0)scale(1)}}@media (max-width:768px){.loader-content{max-width:450px;margin:20px;padding:40px 30px}.app-title{font-size:36px}.app-subtitle{font-size:15px}.app-branding{margin-bottom:50px}.floating-icon{font-size:20px}.feature-tags{gap:8px}.tag{padding:5px 12px;font-size:12px}.enter-map-button{min-width:200px;padding:16px 32px;font-size:16px}.quick-features{gap:16px}.feature-item{min-width:70px;padding:12px 8px}}@media (max-width:480px){.loader-content{width:90%;max-width:380px;padding:35px 25px}.app-title{font-size:32px}.app-subtitle{font-size:14px}.app-branding{margin-bottom:40px}.floating-icon{font-size:18px}.feature-tags{gap:6px}.tag{padding:4px 10px;font-size:11px}.progress-text{font-size:14px}.enter-map-button{min-width:180px;padding:14px 28px;font-size:15px}.success-title{font-size:24px}.success-icon{font-size:40px}.quick-features{gap:12px}.feature-item{min-width:60px;padding:10px 6px}.feature-text{font-size:11px}}.login-buttons-container{gap:16px;animation:.8s cubic-bezier(.34,1.56,.64,1) forwards dropDown;top:80px;left:50%;transform:translate(-50%)}@keyframes dropDown{0%{opacity:0;transform:translate(-50%)translateY(-200px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.login-drop-btn{-webkit-backdrop-filter:blur(20px);border:1px solid #ffffff4d;border-radius:12px;gap:10px;padding:14px 24px;font-size:15px;transition:all .3s cubic-bezier(.34,1.56,.64,1);display:flex;box-shadow:0 4px 16px #0000001a}.login-drop-btn:hover:not(:disabled){transform:translateY(-3px);box-shadow:0 8px 24px #00000026}.login-drop-btn:active:not(:disabled){transform:translateY(-1px)}.login-drop-btn:disabled{opacity:.6;cursor:not-allowed}.login-drop-btn .btn-icon{justify-content:center;align-items:center;font-size:20px;transition:transform .3s;display:flex}.login-drop-btn:hover:not(:disabled) .btn-icon{transform:scale(1.15)}.login-drop-btn .btn-text{font-weight:500}.login-drop-btn.primary{background:#dcdcdc4d;border-color:#fff6}.login-drop-btn.primary:hover:not(:disabled){background:#f0f0f066;border-color:#ffffff80}.login-drop-btn.secondary{color:#fff;background:#c8c8c840;border-color:#ffffff4d}.login-drop-btn.secondary:hover:not(:disabled){background:#dcdcdc59;border-color:#fff6}.login-drop-btn.tertiary{color:#ffffffe6;background:#b4b4b433;border-color:#ffffff40;padding:12px 20px;font-size:14px}.login-drop-btn.tertiary:hover:not(:disabled){background:#c8c8c84d;border-color:#ffffff59}.login-spinner{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(1turn)}}.logged-in-bar{z-index:10000;gap:12px;animation:.4s ease-out fadeIn;position:fixed;top:20px;right:20px}.github-oauth-overlay,.logged-in-bar,.user-avatar{align-items:center;display:flex}.user-avatar{background:#ffffff40;border:2px solid #fff6;border-radius:50%;justify-content:center;width:36px;height:36px;font-size:15px;font-weight:600}.logout-btn,.user-avatar{color:#fff;-webkit-backdrop-filter:blur(20px)}.logout-btn{cursor:pointer;background:#dcdcdc4d;border:1px solid #ffffff4d;border-radius:10px;gap:8px;padding:10px 18px;font-size:14px;font-weight:500;transition:all .3s cubic-bezier(.34,1.56,.64,1);box-shadow:0 4px 16px #0000001a}.logout-btn:hover{background:#f0f0f066;border-color:#fff6;transform:translateY(-2px);box-shadow:0 6px 20px #00000026}.logout-btn:active{transform:translateY(0)}.github-oauth-overlay{-webkit-backdrop-filter:blur(12px);z-index:10002;background:#0009;justify-content:center;animation:.3s ease-out fadeIn;position:fixed;top:0;bottom:0;left:0;right:0}.github-oauth-modal{text-align:center;background:#24292ff2;border-radius:16px;padding:48px 40px;animation:.3s cubic-bezier(.34,1.56,.64,1) scaleIn;box-shadow:0 20px 60px #0006}@keyframes scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.github-oauth-icon{color:#fff;margin-bottom:20px;animation:1.5s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.github-oauth-text{color:#ffffffe6;margin:0 0 20px;font-size:16px}.github-oauth-dots{justify-content:center;gap:8px;display:flex}.github-oauth-dots span{background:#fff9;border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite dotBounce}.github-oauth-dots span:nth-child(2){animation-delay:.2s}.github-oauth-dots span:nth-child(3){animation-delay:.4s}@keyframes dotBounce{0%,80%,to{opacity:.4;transform:scale(.6)}40%{opacity:1;transform:scale(1)}}.email-form-overlay{-webkit-backdrop-filter:blur(10px);z-index:10001;background:#00000080;justify-content:center;align-items:center;animation:.3s ease-out fadeIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.email-form-modal{-webkit-backdrop-filter:blur(30px);background:#fffffff2;border-radius:16px;width:380px;max-width:90vw;padding:0;animation:.3s cubic-bezier(.34,1.56,.64,1) slideUp;overflow:hidden;box-shadow:0 20px 60px #0000004d}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.email-form-tabs{border-bottom:1px solid #00000014;align-items:center;padding:0;display:flex}.tab-btn{color:#9ca3af;cursor:pointer;border:none;flex:1;padding:16px 0;font-size:15px;font-weight:500;transition:all .2s;position:relative}.tab-btn.active:after{content:"";background:#1a1a1a;border-radius:1px;width:60%;height:2px;position:absolute;bottom:0;left:20%}.tab-btn:hover:not(.active){color:#6b7280}.email-form-tabs .close-btn{color:#9ca3af;cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;margin-right:8px;transition:all .2s;display:flex}.email-form-tabs .close-btn:hover{color:#ef4444;background:#ef444414;border-radius:8px}.email-form{padding:24px 28px 28px}.form-hint{color:#6b7280;margin:0 0 16px}.form-hint,.form-message{font-size:13px;line-height:1.5}.form-message{border-radius:8px;margin:16px 28px 0;padding:10px 16px}.form-message.error{color:#dc2626;background:#ef444414;border:1px solid #ef444426}.form-message.success{color:#16a34a;background:#22c55e14;border:1px solid #22c55e26}.form-field{margin-bottom:16px}.form-field label{color:#4b5563;margin-bottom:6px;font-size:13px;font-weight:500;display:block}.form-field input{color:#1a1a1a;box-sizing:border-box;background:#fffc;border:1px solid #0000001a;border-radius:10px;width:100%;padding:12px 16px;font-size:15px;transition:all .2s}.form-field input:focus{background:#fffffff2;border-color:#0000004d;outline:none;box-shadow:0 0 0 3px #0000000d}.form-field input::placeholder{color:#9ca3af}.form-field input:disabled{opacity:.6;cursor:not-allowed}.password-input-wrapper{position:relative}.password-input-wrapper input{padding-right:44px}.password-toggle{color:#9ca3af;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;width:32px;height:32px;transition:all .2s;display:flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.password-toggle:hover{color:#4b5563;background:#0000000a}.form-submit-btn{color:#fff;cursor:pointer;background:#1a1a1ae6;border:none;justify-content:center;align-items:center;gap:8px;width:100%;margin-top:8px;padding:14px;font-size:15px;font-weight:600;transition:all .2s;display:flex}.form-submit-btn:hover:not(:disabled){background:#000;transform:translateY(-2px);box-shadow:0 4px 12px #0003}.form-submit-btn:active:not(:disabled){transform:translateY(0)}.form-submit-btn:disabled{opacity:.6;cursor:not-allowed}.form-submit-btn .login-spinner{border-color:#fff #ffffff4d #ffffff4d}.form-link-btn{color:#6b7280;cursor:pointer;text-align:center;background:0 0;border:none;width:100%;margin-top:8px;padding:10px;font-size:13px;transition:color .2s;display:block}.form-link-btn:hover{color:#1a1a1a}@media (max-width:768px){.login-buttons-container{flex-direction:column;gap:12px;top:60px}.login-drop-btn{padding:12px 20px;font-size:14px}.logged-in-bar{top:16px;right:16px}.logout-btn{padding:8px 14px;font-size:13px}.email-form-modal{width:340px}}.map-container.measure-mode,.map-container.measure-mode .mapboxgl-canvas{cursor:crosshair!important}.measure-hint{background:var(--bg-secondary);color:var(--text-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);border:1px solid var(--border);padding:12px 24px;font-size:14px;font-weight:600;animation:.3s cubic-bezier(.4,0,.2,1) slideDown;top:12px}.measure-hint,.measure-toolbar{z-index:600;position:fixed;left:50%;transform:translate(-50%)}.measure-toolbar{gap:10px;animation:.3s cubic-bezier(.4,0,.2,1) slideUp;display:flex;bottom:20px}.measure-btn{background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:12px 20px;font-size:14px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1)}.measure-btn:hover{border-color:var(--accent);color:var(--accent);box-shadow:var(--shadow-lg);transform:translateY(-2px)}.measure-btn.exit{background:var(--danger);color:#fff;border-color:var(--danger)}.measure-btn.exit:hover{box-shadow:var(--shadow-lg),0 4px 12px #ef44444d;background:#dc2626;transform:translateY(-2px)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@media (max-width:768px){.settings-panel{width:95%;max-height:90vh}.settings-tabs{padding:0 16px;overflow-x:auto}.settings-tabs button{flex-shrink:0;padding:10px 14px}.stats-grid{grid-template-columns:repeat(2,1fr)}.search-bar-container{width:calc(100vw - 120px);max-width:none}.marker-list-panel{width:var(--target-w,calc(min(94vw,600px)));max-width:var(--target-w,calc(min(94vw,600px)))}}.tooltip{position:relative}.tooltip:after{content:attr(data-tooltip);background:var(--text-primary);color:var(--bg-secondary);white-space:nowrap;border-radius:var(--radius-sm);opacity:0;visibility:hidden;pointer-events:none;z-index:9999;padding:6px 10px;font-size:12px;font-weight:500;transition:all .2s;position:absolute;bottom:100%;left:50%;transform:translate(-50%)translateY(-4px)}.tooltip:hover:after{opacity:1;visibility:visible;transform:translate(-50%)translateY(-8px)}.loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:24px;height:24px;animation:.7s linear infinite spin}.skeleton{background:linear-gradient(90deg,var(--bg-tertiary) 25%,var(--bg-hover) 50%,var(--bg-tertiary) 75%);border-radius:var(--radius-sm);background-size:200% 100%;animation:1.5s ease-in-out infinite skeleton-loading}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-marker{flex-direction:column;align-items:center;display:flex}.skeleton-thumb{border-radius:var(--radius-md);width:48px;height:48px;margin-bottom:4px}.skeleton-list-thumb,.skeleton-pin,.skeleton-text,.skeleton-thumb{background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%) 0 0/200% 100%;animation:1.2s ease-in-out infinite skeleton-loading}.skeleton-pin{border-radius:50%/60% 60% 40% 40%;width:20px;height:26px}.skeleton-list-item{gap:12px;margin-bottom:8px;padding:12px;display:flex}.skeleton-list-thumb{border-radius:var(--radius-md);flex-shrink:0;width:56px;height:56px}.skeleton-list-info{flex-direction:column;flex:1;justify-content:center;gap:8px;display:flex}.skeleton-text{border-radius:4px;height:14px}.skeleton-text.short{width:60%}.skeleton-text.medium{width:80%}.skeleton-text.long{width:100%}.ripple-btn{position:relative;overflow:hidden}.ripple-btn:after{content:"";pointer-events:none;opacity:0;background-image:radial-gradient(circle,#ffffff4d 10%,#0000 0);background-position:50%;background-repeat:no-repeat;width:100%;height:100%;transition:transform .4s,opacity .8s;position:absolute;top:0;left:0;transform:scale(10)}.ripple-btn:active:after{opacity:.3;transition:all;transform:scale(0)}@keyframes successPop{0%{opacity:0;transform:scale(.8)}50%{transform:scale(1.1)}to{opacity:1;transform:scale(1)}}@keyframes errorShake{0%,to{transform:translate(0)}20%,60%{transform:translate(-6px)}40%,80%{transform:translate(6px)}}@keyframes checkmark{0%{stroke-dashoffset:50px}to{stroke-dashoffset:0}}.feedback-toast{border-radius:var(--radius-lg);z-index:9999;box-shadow:var(--shadow-lg);align-items:center;gap:10px;padding:12px 24px;font-size:14px;font-weight:600;animation:.3s cubic-bezier(.34,1.56,.64,1) successPop;display:flex;position:fixed;top:20px;left:50%;transform:translate(-50%)}.feedback-toast.success{background:var(--success);color:#fff}.feedback-toast.error{background:var(--danger);color:#fff;animation:.3s cubic-bezier(.34,1.56,.64,1) successPop,.4s .3s errorShake}.feedback-toast.info{background:var(--accent);color:#fff}.feedback-toast .toast-icon{font-size:18px}.action-btn:active,.download-btn:active,.login-btn:active,.menu-btn:active,.save-btn:active,.search-clear:active,.sort-btns button:active,.toolbar button:active{transition:transform .1s;transform:scale(.95)}.btn-loading{pointer-events:none;position:relative;color:#0000!important}.btn-loading:after{content:"";border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:16px;height:16px;margin:-8px 0 0 -8px;animation:.6s linear infinite spin;position:absolute;top:50%;left:50%}.img-placeholder{background:linear-gradient(90deg,var(--bg-tertiary) 25%,var(--bg-hover) 50%,var(--bg-tertiary) 75%);color:var(--text-muted);background-size:200% 100%;justify-content:center;align-items:center;font-size:24px;animation:1.2s ease-in-out infinite skeleton-loading;display:flex}.hover-lift{transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s}.hover-lift:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)}.click-feedback{pointer-events:none;z-index:9998;background:var(--accent);opacity:.4;border-radius:50%;width:20px;height:20px;animation:.4s ease-out forwards clickFeedback;position:fixed;transform:translate(-50%,-50%)scale(0)}@keyframes clickFeedback{0%{opacity:.4;transform:translate(-50%,-50%)scale(0)}to{opacity:0;transform:translate(-50%,-50%)scale(3)}}:root{--paper-white:#fff;--paper-card:#f8fafc;--paper-border:#e2e8f0;--paper-border-light:#eef2f7;--paper-tear:#f1f5f9;--ink-primary:#0f172a;--ink-secondary:#475569;--ink-muted:#64748b;--ink-faint:#cbd5e1;--darkroom-red:#2563eb;--darkroom-red-hover:#1d4ed8;--darkroom-red-light:#eff6ff;--darkroom-red-glow:#2563eb24;--specimen-green:#4a7c59;--specimen-green-light:#edf5ef;--map-brass:#d4a017;--map-brass-light:#fdf8e8;--bg-primary:var(--paper-white);--bg-secondary:var(--paper-card);--bg-tertiary:var(--paper-tear);--bg-hover:var(--paper-border-light);--border:var(--paper-border);--border-light:var(--paper-border-light);--border-focus:var(--darkroom-red);--text-primary:var(--ink-primary);--text-secondary:var(--ink-secondary);--text-muted:var(--ink-muted);--text-inverse:#fff;--on-accent:#fff;--accent:var(--darkroom-red);--accent-hover:var(--darkroom-red-hover);--accent-light:var(--darkroom-red-light);--accent-subtle:var(--darkroom-red-light);--danger:#dc2626;--danger-hover:#b91c1c;--danger-light:#dc26261a;--success:var(--specimen-green);--success-hover:#3d694b;--success-light:var(--specimen-green-light);--warning:var(--map-brass);--warning-light:var(--map-brass-light);--info:#5b7a9a;--info-light:#edf3f8;--surface:var(--paper-white);--surface-muted:var(--paper-card);--surface-subtle:var(--paper-tear);--surface-elevated:#fffffff0;--surface-elevated-border:#e2e8f0e6;--control-shadow:0 8px 24px #0f172a1f;--control-shadow-hover:0 12px 30px #0f172a29;--focus-ring:0 0 0 3px var(--darkroom-red-glow);--control-height:44px;--control-radius:12px;--shadow-xs:0 1px 2px #0f172a0a;--shadow-sm:0 1px 3px #0f172a0f;--shadow-md:0 4px 8px #0f172a14;--shadow-lg:0 8px 24px #0f172a1a;--shadow-xl:0 16px 40px #0f172a24;--shadow-crease:0 2px 1px #2c24160a, inset 0 1px 0 #fff9;--overlay:#0f172a6b;--overlay-light:#1a16124d;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--font-sans:"Noto Sans SC", "Source Sans 3", -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif;--font-serif:var(--font-sans);--font-mono:"JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--font-italic:"Crimson Text", "Noto Serif SC", "Georgia", serif;--text-xs:.75rem;--text-sm:.8125rem;--text-base:.875rem;--text-md:.9375rem;--text-lg:1.0625rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--weight-normal:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--transition-fast:.15s ease;--transition-base:.2s ease;--transition-slow:.3s cubic-bezier(.4, 0, .2, 1);--transition-spring:.35s cubic-bezier(.34, 1.56, .64, 1);--transition-drawer-in:.4s cubic-bezier(.22, .61, .36, 1);--transition-drawer-out:.28s cubic-bezier(.55, .06, .68, .19);--z-dropdown:500;--z-sticky:600;--z-overlay:1000;--z-modal:2000;--z-toast:3000;--z-tooltip:4000;--z-texture:9999;--mouse-x:0px;--mouse-y:0px}[data-theme=dark]{--paper-white:#0f172a;--paper-card:#172033;--paper-border:#334155;--paper-border-light:#243149;--paper-tear:#1e293b;--ink-primary:#f8fafc;--ink-secondary:#cbd5e1;--ink-muted:#94a3b8;--ink-faint:#475569;--on-accent:#0f172a;--darkroom-red:#60a5fa;--darkroom-red-hover:#93c5fd;--darkroom-red-light:#172554;--darkroom-red-glow:#60a5fa33;--specimen-green:#5c9a6e;--specimen-green-light:#1a2a1e;--map-brass:#c49518;--map-brass-light:#2a2210;--shadow-xs:0 1px 2px #00000026;--shadow-sm:0 1px 3px #00000040;--shadow-md:0 4px 8px #00000059;--shadow-lg:0 8px 24px #00000080;--shadow-xl:0 16px 40px #000000a6;--shadow-crease:0 2px 1px #0003, inset 0 1px 0 #ffffff0a;--overlay:#000000a6;--overlay-light:#0006;--surface-elevated:#0f172af0;--surface-elevated-border:#475569cc;--control-shadow:0 8px 24px #00000057;--control-shadow-hover:0 12px 30px #00000075}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--paper-white:#0f172a;--paper-card:#172033;--paper-border:#334155;--paper-border-light:#243149;--paper-tear:#1e293b;--ink-primary:#f8fafc;--ink-secondary:#cbd5e1;--ink-muted:#94a3b8;--ink-faint:#475569;--on-accent:#0f172a;--darkroom-red:#60a5fa;--darkroom-red-hover:#93c5fd;--darkroom-red-light:#172554;--specimen-green:#5c9a6e;--specimen-green-light:#1a2a1e;--map-brass:#c49518;--map-brass-light:#2a2210;--shadow-xs:0 1px 2px #00000026;--shadow-sm:0 1px 3px #00000040;--shadow-md:0 4px 8px #00000059;--shadow-lg:0 8px 24px #00000080;--shadow-xl:0 16px 40px #000000a6;--overlay:#000000a6;--overlay-light:#0006;--surface-elevated:#0f172af0;--surface-elevated-border:#475569cc;--control-shadow:0 8px 24px #00000057;--control-shadow-hover:0 12px 30px #00000075}}body,html{overflow-x:clip}body{font-family:var(--font-sans)}.app,.map-container{min-height:100dvh}.app input,.app select,.app textarea{-webkit-user-select:text;user-select:text;font-family:var(--font-sans)}.app button,.app select{font-family:var(--font-sans)}.map-icon{stroke:currentColor;width:20px;height:20px;transition:transform var(--transition-fast),color var(--transition-fast);flex:none;display:block}.app button:focus-visible{box-shadow:var(--focus-ring);outline:none}.app input:focus-visible{box-shadow:var(--focus-ring);outline:none}.app select:focus-visible{box-shadow:var(--focus-ring);outline:none}.app textarea:focus-visible{box-shadow:var(--focus-ring);outline:none}.map-header{top:max(16px,env(safe-area-inset-top));z-index:var(--z-sticky);width:calc(min(560px,100vw - 400px));animation:.36s cubic-bezier(.2,.8,.2,1) both map-header-in;position:fixed;left:50%;transform:translate(-50%)}@keyframes map-header-in{0%{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%)}}.app .map-header .search-bar-container{align-items:center;gap:8px;width:100%;max-width:none;animation:none;display:flex;position:relative;top:auto;bottom:auto;left:auto;right:auto;transform:none}.app .map-header .search-bar-wrapper{min-width:0}.map-header .search-bar{border:1px solid var(--surface-elevated-border);border-radius:var(--control-radius);background:var(--surface-elevated);min-height:48px;color:var(--text-primary);box-shadow:var(--control-shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);gap:10px;padding:4px 8px 4px 14px}.map-header .search-bar:hover{border-color:var(--border);box-shadow:var(--control-shadow-hover);transform:translateY(-1px)}.map-header .search-bar:focus-within{border-color:var(--accent);box-shadow:var(--focus-ring),var(--control-shadow);transform:translateY(-1px)}.map-header .search-icon{width:22px;height:22px;color:var(--text-secondary);transition:color var(--transition-fast),transform var(--transition-fast);place-items:center;display:grid}.map-header .search-icon .map-icon{width:18px;height:18px}.map-header .search-bar:focus-within .search-icon{color:var(--accent);transform:scale(1.04)}.map-header .search-bar input{min-width:0;min-height:38px;color:var(--text-primary);font-size:15px;font-weight:var(--weight-medium);background:0 0;border:0;outline:0;flex:1;padding:0}.map-header .search-bar input::placeholder{color:var(--text-muted);font-weight:var(--weight-normal)}.app .map-header .search-bar input:focus{box-shadow:none;outline:none}.map-header .globe-village-btn,.map-header .search-clear,.map-header .web-dl-btn{min-width:var(--control-height);min-height:var(--control-height);border:1px solid var(--surface-elevated-border);border-radius:var(--control-radius);background:var(--surface-elevated);color:var(--text-primary);box-shadow:var(--control-shadow);transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);place-items:center;display:inline-grid}.map-header .search-clear{background:var(--surface-subtle);width:36px;min-width:36px;min-height:36px;color:var(--text-secondary);box-shadow:none;border:0;animation:.16s both control-in}.map-header .globe-village-btn:hover:not(:disabled),.map-header .search-clear:hover,.map-header .web-dl-btn:hover{border-color:var(--accent);background:var(--accent-light);color:var(--accent);box-shadow:none;transform:translateY(-1px)}.map-header .globe-village-btn:active:not(:disabled),.map-header .search-clear:active,.map-header .web-dl-btn:active{transform:translateY(1px)scale(.96)}.map-header .globe-village-btn{width:var(--control-height);flex:0 0 var(--control-height);margin:0}.map-header .globe-village-btn.active{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.map-header .web-download-beside-search{max-width:none;position:absolute;top:50%;left:calc(100% + 8px);transform:translateY(-50%)}.map-header .web-dl-btn{min-width:auto;color:var(--text-secondary);white-space:nowrap;padding:0 12px 0 8px;line-height:1}.map-header .search-results{border:1px solid var(--surface-elevated-border);border-radius:var(--control-radius);background:var(--surface-elevated);max-height:calc(min(380px,55dvh));box-shadow:var(--control-shadow-hover);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);animation:.18s both dropdown-in;position:absolute;top:calc(100% + 8px);left:0;right:0;overflow:auto}@keyframes dropdown-in{0%{opacity:0;transform:translateY(-5px)scale(.985)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes control-in{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.map-header .search-result-item{border-bottom:1px solid var(--border-light);min-height:60px;transition:background var(--transition-fast),transform var(--transition-fast);gap:12px;padding:10px 14px}.map-header .search-result-item:before{background:var(--accent);width:3px;transition:transform var(--transition-fast);border-radius:0 2px 2px 0}.map-header .search-result-item.selected,.map-header .search-result-item:hover{background:var(--accent-light);padding-left:14px;transform:translate(2px)}.map-header .result-icon{background:var(--surface-subtle);width:32px;height:32px;color:var(--accent);border-radius:10px;flex:0 0 32px;place-items:center;display:grid}.map-header .result-icon .map-icon{width:17px;height:17px}.map-header .result-address,.map-header .result-distance,.map-header .result-name,.map-header .search-empty,.map-header .search-loading,.map-header .search-tip{color:var(--text-secondary)}.map-header .result-name{color:var(--text-primary);font-weight:var(--weight-semibold)}.map-header .search-history-header{min-height:44px;padding:8px 12px}.map-header .search-history-title{align-items:center;gap:8px;display:inline-flex}.map-header .search-history-title .map-icon{width:16px;height:16px;color:var(--text-muted)}.map-header .search-history-header button{min-height:32px;color:var(--accent);transition:background var(--transition-fast),transform var(--transition-fast);background:0 0;border:0;border-radius:8px;padding:0 8px}.map-header .search-history-header button:hover{background:var(--accent-light);transform:translateY(-1px)}.map-header .search-empty,.map-header .search-loading,.map-header .search-tip{padding:28px 18px}.app .marker-list-overlay,.app .settings-overlay{z-index:var(--z-overlay);background:var(--overlay);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);grid-template-columns:minmax(0,1fr);place-items:center;padding:24px;animation:.22s both overlay-in;display:grid;position:fixed;top:0;bottom:0;left:0;right:0}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.app .marker-list-panel,.app .settings-panel,.app .themed-floating-panel.theme-note{border:1px solid var(--surface-elevated-border);background:var(--surface);color:var(--text-primary);box-shadow:var(--shadow-xl);border-radius:20px;overflow:hidden}.app .settings-panel{width:min(760px,100%);max-width:none;height:calc(min(600px,100dvh - 48px));animation:.26s cubic-bezier(.2,.8,.2,1) both panel-in;display:flex}@keyframes panel-in{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.app .settings-nav{border-right:1px solid var(--border);background:var(--surface-muted);flex:0 0 172px;width:172px;padding:14px 10px}.app .settings-nav-header{border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:40px;padding:0 10px 12px;display:flex}.app .settings-nav-header .nav-icon,.app .settings-nav-items .map-icon{width:18px;height:18px;color:var(--text-secondary)}.app .settings-nav-header .nav-title{color:var(--text-primary);font:var(--weight-semibold) var(--text-lg)/1.2 var(--font-sans)}.app .settings-nav-items{flex:none;grid-auto-rows:44px;align-content:start;gap:4px;padding:16px 0;display:grid}.app .settings-nav-items button{min-height:44px;color:var(--text-secondary);font-size:13px;font-weight:var(--weight-medium);text-align:left;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);background:0 0;border:1px solid #0000;border-radius:10px;justify-content:flex-start;align-items:center;gap:10px;padding:0 12px;display:flex}.app .settings-nav-items button:hover{background:var(--surface-subtle);color:var(--text-primary);transform:translate(2px)}.app .settings-nav-items button.active{border-color:var(--border);background:var(--surface);color:var(--accent);box-shadow:var(--shadow-sm)}.app .settings-nav-items button.active .map-icon{color:var(--accent)}.app .settings-nav-items button.active+button{border-top-color:#0000}.app .settings-content{background:var(--surface);flex:1;min-width:0;min-height:0;padding:0;position:relative;overflow:hidden}.app .settings-scroll{scrollbar-gutter:stable;height:100%;min-height:0;padding:20px 20px 76px;overflow:auto}.app .settings-close{z-index:2;border:1px solid var(--border);background:var(--surface-muted);width:36px;height:36px;color:var(--text-secondary);transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);border-radius:10px;place-items:center;font-size:0;display:grid;position:absolute;top:14px;right:14px}.app .settings-close:before{display:none}.app .settings-close .map-icon{width:18px;height:18px}.app .settings-close:hover{border-color:var(--accent);background:var(--accent-light);color:var(--accent);transform:rotate(90deg)}.app .settings-page{width:100%;max-width:none;animation:.22s both content-in}@keyframes content-in{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.app .settings-page h2{color:var(--text-primary);font-family:var(--font-sans);font-size:18px;font-weight:var(--weight-semibold);letter-spacing:-.02em;align-items:center;margin:0 48px 8px 0;display:flex}.app .setting-group h3 .map-icon,.app .settings-page h2 .map-icon{width:20px;height:20px;color:var(--accent);vertical-align:-3px;margin-right:8px}.app .settings-page .page-desc{color:var(--text-secondary);margin:0 0 18px;font-size:13px}.app .setting-group{border:1px solid var(--border);background:var(--surface-muted);box-shadow:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast);border-radius:10px;margin-bottom:12px;padding:14px}.app .setting-group:hover{border-color:var(--border-focus);box-shadow:var(--shadow-sm);transform:none}.app.ui-theme-note .marker-list-item,.app.ui-theme-note .result-group,.app.ui-theme-note .setting-group{border:1px solid var(--border);background:var(--surface-muted);box-shadow:none}.app.ui-theme-note .result-group-title,.app.ui-theme-note .setting-group h3{color:var(--text-secondary);border-bottom:0;padding-bottom:0}.app .switch:hover .slider{background:var(--border)}.app .switch input:checked+.slider{background:var(--accent)}.app .setting-group h3{color:var(--text-secondary);font-size:12px;font-weight:var(--weight-semibold);letter-spacing:.02em;text-transform:uppercase;margin:0 0 8px}.app .setting-row{border-color:var(--border-light);flex-wrap:wrap;gap:12px;min-height:48px;padding:8px 0}.app .setting-row .setting-label{flex:160px}.app .setting-row>:not(.setting-label){flex-shrink:0;max-width:100%}.app .setting-label strong{color:var(--text-primary);font-size:13px}.app .setting-label span{color:var(--text-secondary);font-size:12px}.app .action-btn>.map-icon,.app .benefit-icon,.app .fi-icon,.app .guest-icon,.app .setting-tip>.map-icon,.app .stat-icon,.app .storage-icon{color:var(--accent);place-items:center;display:inline-grid}.app .benefit-icon .map-icon,.app .fi-icon .map-icon,.app .guest-icon .map-icon,.app .stat-icon .map-icon,.app .storage-icon .map-icon{width:20px;height:20px}.app .setting-group h3{align-items:center;display:flex}.app .action-btn,.app .login-prompt-btn,.app .settings-footer .save-btn{transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)}.app .action-btn:hover,.app .login-prompt-btn:hover{transform:translateY(-1px)}.app .settings-footer{border-top:1px solid var(--border);background:color-mix(in srgb,var(--surface) 92%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);margin:0;padding:10px 20px;position:absolute;bottom:0;left:0;right:0}.app .settings-footer .save-btn{border:1px solid var(--border);background:var(--surface-subtle);min-height:36px;color:var(--text-secondary);border-radius:10px;padding:0 18px}.app .settings-footer .save-btn:not(:disabled){border-color:var(--accent);background:var(--accent);color:var(--on-accent)}.app .settings-footer .save-btn:not(:disabled):hover{background:var(--accent-hover);transform:translateY(-1px)}.app .toolbar{top:max(16px,env(safe-area-inset-top));z-index:calc(-20 + var(--z-sticky));box-shadow:none;background:0 0;border:0;gap:8px;padding:0;animation:.36s both toolbar-in;display:flex}@keyframes toolbar-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.app .toolbar-left{left:16px}.app .toolbar-right{right:16px}.app .marker-count-btn,.app .toolbar button{border:1px solid var(--surface-elevated-border);background:var(--surface-elevated);color:var(--text-primary);box-shadow:var(--control-shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)}.app .toolbar button{width:var(--control-height);height:var(--control-height);min-width:var(--control-height);min-height:var(--control-height);border-radius:var(--control-radius);overflow:visible}.app .toolbar button:before{display:none}.app .toolbar button:hover:not(:disabled){border-color:var(--accent);background:var(--accent-light);color:var(--accent);box-shadow:var(--control-shadow-hover);transform:translateY(-2px)}.app .toolbar button:active:not(:disabled){box-shadow:var(--shadow-sm);transform:translateY(1px)scale(.95)}.app .toolbar button[aria-pressed=true]{border-color:var(--accent);background:var(--accent-light);color:var(--accent);box-shadow:var(--shadow-md)}.app .toolbar button[data-action=refresh]:active .map-icon{transform:rotate(180deg)}.app .toolbar button[data-action=locate]:active .map-icon{transform:scale(.84)}.app .toolbar button[data-action=zoom-in]:active .map-icon{transform:scale(1.12)}.app .toolbar button[data-action=zoom-out]:active .map-icon{transform:scale(.88)}.app .toolbar button[data-action=settings]:hover .map-icon{transform:rotate(18deg)}.app .toolbar [data-tooltip]:after{white-space:nowrap}.app .toolbar [data-tooltip]:focus-visible:after{opacity:1;visibility:visible}.app .toolbar [data-tooltip]:focus-visible:before{opacity:1;visibility:visible}.app .map-bottom-actions{right:20px;bottom:max(20px,12px + env(safe-area-inset-bottom));z-index:var(--z-sticky);align-items:center;gap:8px;display:flex;position:fixed}.app .marker-count-btn{width:176px;min-width:0;min-height:48px;color:var(--text-primary);border-radius:12px;align-items:center;gap:8px;padding:7px 10px;display:flex;position:relative;top:auto;bottom:auto;left:auto;right:auto}.app .marker-count-btn:hover{border-color:var(--accent);background:var(--accent-light);box-shadow:var(--control-shadow-hover);transform:translateY(-1px)}.app .marker-count-btn:active{box-shadow:var(--shadow-sm);transform:translateY(1px)scale(.98)}.app .marker-count-btn .map-icon{width:16px;height:16px;color:var(--accent)}.app .marker-count-btn .album-button-content{text-align:left;flex:1;min-width:0}.app .album-button-icon{background:var(--accent-light);border-radius:8px;place-items:center;width:30px;height:30px;display:grid}.app .life-entry-btn{border:1px solid var(--surface-elevated-border);background:var(--surface-elevated);min-height:48px;color:var(--text-secondary);box-shadow:var(--control-shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:12px;align-items:center;gap:7px;padding:0 12px;font-size:13px;transition:background .15s,border-color .15s,transform .15s;display:inline-flex}.app .life-entry-btn .map-icon{width:18px;height:18px;color:var(--accent)}.app .life-entry-btn:hover,.app .life-entry-btn[aria-pressed=true]{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.app .life-entry-btn:hover{transform:translateY(-1px)}.app .life-entry-btn:active{transform:scale(.97)}.app .album-button-title{color:var(--text-primary);font-size:13px;font-weight:var(--weight-semibold)}.app .marker-stats{color:var(--text-secondary);gap:6px}.app .stat-item{gap:2px;font-size:11px}.app .stat-num{color:var(--text-primary);font-family:var(--font-mono);font-weight:var(--weight-semibold)}.app .marker-count-btn.origin-hidden{pointer-events:none;opacity:0;transform:translateY(10px)scale(.94)}.app .marker-count-btn.reveal-on-close{pointer-events:auto;opacity:1;transform:translateY(0)scale(1)}.app .measure-hint{top:max(16px,env(safe-area-inset-top));z-index:var(--z-sticky);border:1px solid var(--surface-elevated-border);background:var(--surface-elevated);min-height:40px;color:var(--text-primary);box-shadow:var(--control-shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:999px;align-items:center;gap:8px;padding:0 14px;animation:.24s both map-header-in;display:inline-flex;position:fixed;left:50%;transform:translate(-50%)}.app .measure-hint .map-icon{width:17px;height:17px;color:var(--accent)}.app .measure-toolbar{z-index:var(--z-sticky);gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.app .measure-btn{min-height:var(--control-height);border:1px solid var(--surface-elevated-border);border-radius:var(--control-radius);background:var(--surface-elevated);color:var(--text-primary);box-shadow:var(--control-shadow);transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);align-items:center;gap:8px;padding:0 14px;display:inline-flex}.app .measure-btn:hover{border-color:var(--accent);background:var(--accent-light);color:var(--accent);transform:translateY(-2px)}.app .measure-btn:active{transform:translateY(1px)scale(.97)}.app .measure-btn.exit:hover{border-color:var(--danger);background:var(--danger-light);color:var(--danger)}.app .map-unavailable{border:1px solid var(--border);background:var(--surface);width:max-content;max-width:calc(100vw - 32px);color:var(--text-secondary);box-shadow:var(--shadow-sm);border-radius:12px;padding:14px 18px;font-size:13px;line-height:1.6;position:fixed;bottom:110px;left:50%;transform:translate(-50%)}.app .map-unavailable button{min-height:36px;color:var(--accent);background:0 0;border:0;margin-left:8px;padding:0 8px}@media (max-width:768px){.map-header{top:max(12px,env(safe-area-inset-top));width:calc(100vw - 24px)}.app .toolbar-left,.app .toolbar-right{top:84px}.app .toolbar-left{left:12px}.app .toolbar-right{right:12px}.map-header .web-download-beside-search{display:none}.app .map-bottom-actions{right:16px}.app .map-bottom-actions,.app .measure-toolbar{bottom:max(16px,12px + env(safe-area-inset-bottom))}.app .measure-toolbar{flex-wrap:wrap;justify-content:flex-end;left:12px;right:12px}.app .measure-btn{min-height:42px}}@media (max-width:374px){.map-header .search-bar input{font-size:14px}}@media (prefers-reduced-motion:reduce){.app .toolbar,.map-header,.map-header .search-clear,.map-header .search-results{animation:none!important}}.app .marker-list-panel{width:calc(min(960px,100vw - 48px));height:calc(min(720px,100dvh - 48px));animation:.26s cubic-bezier(.2,.8,.2,1) both panel-in}.app .marker-list-panel-inner{background:var(--surface);flex-direction:column;height:100%;display:flex}.app .marker-list-header{border-bottom:1px solid var(--border);background:var(--surface);justify-content:space-between;align-items:center;gap:16px;min-height:54px;padding:12px 18px;display:flex}.app .marker-list-header h3{color:var(--text-primary);font-size:15px;font-weight:var(--weight-semibold);align-items:center;gap:8px;margin:0;display:inline-flex}.app .marker-list-toolbar{border-bottom:1px solid var(--border);background:var(--surface-muted);align-items:center;gap:10px;padding:12px 18px;display:flex}.app .marker-list-toolbar .marker-search{border:1px solid var(--border);background:var(--surface);min-width:0;min-height:40px;color:var(--text-primary);border-radius:10px;flex:1}.app .batch-toggle-btn,.app .marker-list-toolbar .toolbar-btn,.app .panel-close{border:1px solid var(--border);background:var(--surface);min-height:38px;color:var(--text-secondary);transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);border-radius:9px}.app .batch-toggle-btn{align-items:center;gap:6px;padding:0 12px;display:inline-flex}.app .batch-toggle-btn .map-icon{width:16px;height:16px}.app .batch-toggle-btn:hover,.app .marker-list-toolbar .toolbar-btn:hover,.app .panel-close:hover{border-color:var(--accent);background:var(--accent-light);color:var(--accent);transform:translateY(-1px)}.app .marker-list-toolbar .toolbar-btn{justify-content:center;align-items:center;gap:6px;padding:0 10px;display:inline-flex}.app .marker-list-toolbar .toolbar-btn .map-icon,.app .menu-check{width:15px;height:15px}.app .menu-check{color:var(--accent);vertical-align:-3px;margin-right:5px}.app .panel-close{width:38px;padding:0;font-size:0}.app .panel-close:before{display:none}.app .panel-close .map-icon{width:18px;height:18px}.app .marker-list-content{background:var(--surface);flex:1;min-height:0;overflow:auto}.app .dropdown-menu{border:1px solid var(--border);background:var(--surface-elevated);box-shadow:var(--control-shadow-hover);border-radius:10px}.app .dropdown-item{transition:background var(--transition-fast),color var(--transition-fast)}.app .dropdown-item.active,.app .dropdown-item:hover{background:var(--accent-light);color:var(--accent)}.app .result-group-title{align-items:center;gap:6px;display:flex}.app .result-group-title .map-icon{width:15px;height:15px;color:var(--accent)}.app .empty-state{align-content:center;place-items:center;gap:10px;min-height:180px;display:grid}.app .empty-state .map-icon{width:28px;height:28px;color:var(--text-muted)}.app .marker-list-meta .map-icon{vertical-align:-2px;width:13px;height:13px;margin-right:3px}.app .batch-btn{align-items:center;gap:6px;display:inline-flex}.app .batch-btn .map-icon{width:16px;height:16px}@media (max-width:768px){.app .marker-list-overlay,.app .settings-overlay{padding:12px}.app .marker-list-panel,.app .settings-panel{width:100%;height:calc(100dvh - 24px);max-height:none}.app .settings-panel{flex-direction:column}.app .settings-nav{border-right:0;border-bottom:1px solid var(--border);flex:none;width:100%;padding:8px}.app .settings-nav-header{display:none}.app .settings-nav-items{flex-direction:row;gap:4px;padding:0;display:flex;overflow-x:auto}.app .settings-nav-items button{white-space:nowrap;flex:1 0 0;justify-content:center;min-width:84px;padding:0 8px}.app .settings-content{padding:0}.app .settings-scroll{padding:18px 14px 72px}.app .settings-footer{margin:0;padding:10px 14px}.app .marker-list-toolbar{flex-direction:column;align-items:stretch}.app .marker-list-toolbar .toolbar-actions{width:100%;display:flex;overflow-x:auto}.app .marker-list-toolbar .toolbar-btn{white-space:nowrap;flex:1}}@media (prefers-reduced-motion:reduce){.app .marker-list-overlay,.app .marker-list-panel,.app .settings-overlay,.app .settings-page,.app .settings-panel{animation:none!important}}.app .marker-open{min-width:0;color:var(--text-primary);text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:10px;padding:0;display:flex}.app .marker-grid-info,.app .marker-info{flex-direction:column;gap:6px;display:flex}.app .marker-grid-meta,.app .marker-meta{color:var(--text-secondary);align-items:center;gap:5px;display:flex}.app .marker-grid-meta .map-icon,.app .marker-meta .map-icon{width:14px;height:14px}.app .marker-thumb{-o-object-fit:cover;object-fit:cover;border-radius:10px;flex-shrink:0;width:48px;height:48px}.app .marker-list-item{border:1px solid var(--border);background:var(--surface);box-shadow:none;border-radius:12px;padding:10px 12px}.app .marker-list-item:hover{background:var(--surface-muted);border-color:var(--accent);transform:none}.app .marker-list-item.selected{background:var(--accent-light);border-color:var(--accent)}.app .marker-grid-name,.app .marker-name{color:var(--text-primary);font-size:14px}.app .marker-grid-meta,.app .marker-meta{font-size:12px}.app .marker-grid-item{border:1px solid var(--border);background:var(--surface);padding:0;position:relative}.app .grid-open{flex-direction:column;align-items:stretch;gap:0;width:100%}.app .marker-grid-info{padding:12px}.app .grid-expand-btn{position:absolute;bottom:8px;right:8px}.app .expand-btn,.app .grid-expand-btn{min-width:40px;min-height:40px;color:var(--text-secondary);border:1px solid var(--border);background:var(--surface-muted);border-radius:8px;place-items:center;padding:0;display:grid}.app .expand-btn .map-icon,.app .grid-expand-btn .map-icon{transition:transform .15s}.app .expand-btn[aria-expanded=true] .map-icon,.app .grid-expand-btn[aria-expanded=true] .map-icon{transform:rotate(180deg)}.app .photo-item-inner{background:var(--surface-muted);border:0;width:100%;height:100%;padding:0;display:block}.app .photo-item-expanded{position:relative}.app .photo-item-menu{background:var(--surface);border-color:var(--border)}.app .photo-item-menu button{color:var(--text-primary);align-items:center;gap:6px;min-height:40px;display:flex}.app .photo-item-menu button.danger{color:var(--danger)}.app .photo-item-add{background:var(--surface-muted);border:1px dashed var(--border);color:var(--text-secondary);place-items:center;display:grid}.app .map-icon{fill:none;flex-shrink:0;width:20px;height:20px}.app button{font-family:var(--font-sans);cursor:pointer}.app button:disabled{opacity:.45;cursor:default;transform:none}.app [tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app textarea:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app .marker-list-empty:before,.app .settings-page .action-btn:before,.app .settings-page .storage-card:before,.app .themed-floating-panel:after{display:none}.app .marker-list-panel{opacity:1;will-change:auto;margin:0;transition:none;position:relative;top:auto;bottom:auto;left:auto;right:auto;transform:none}.app .marker-list-panel.closing{animation:.18s both ui-panel-out}.app .marker-list-panel-inner>*{opacity:1;transition:none;transform:none}.app .marker-list-overlay.closing{pointer-events:auto;background:var(--overlay)}.app .dropdown-item{text-align:left;width:100%;color:var(--text-primary);background:0 0;border:0}.app .batch-toggle-btn[aria-pressed=true]{background:var(--accent-light);color:var(--accent);border-color:var(--accent)}.app .theme-select{border:1px solid var(--border);background:var(--surface);min-height:36px;color:var(--text-primary);border-radius:9px;padding:0 10px}.app .settings-page{font-size:13px;line-height:1.6}.app .settings-page .setting-label{overflow-wrap:anywhere;min-width:0}.app .settings-page .setting-label span{line-height:1.5}.app .settings-page .setting-tip{background:var(--surface-muted);border-color:var(--border);gap:8px;margin-top:12px;padding:12px}.app .settings-page .feature-inline-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.app .settings-page .feature-inline-item{background:var(--surface);border-color:var(--border);padding:8px 10px}.app .settings-page .fi-name{color:var(--text-primary);font-size:12px}.app .settings-page .range-control{gap:8px;margin-left:0}.app .settings-page .range-control input[type=range]{width:110px}.app .settings-page .range-value{min-width:42px;color:var(--text-secondary);font-size:12px}.app .settings-page .stat-value,.app .settings-page .storage-value{color:var(--text-primary);font-size:20px;font-weight:600}.app .settings-page .storage-card{background:var(--surface);border-color:var(--border);padding:10px}.app .settings-page .storage-card:hover{box-shadow:none;transform:none}.app .settings-page .action-btn{background:var(--surface);border-color:var(--border);min-height:44px;color:var(--text-primary);gap:10px;padding:10px 12px}.app .settings-page .action-btn strong{font-size:13px}.app .settings-page .action-btn small{color:var(--text-secondary)}.app .settings-page .guest-card,.app .settings-page .user-profile-card{border:1px solid var(--border);background:var(--surface-muted);border-radius:10px;margin-bottom:12px;padding:16px}.app .settings-page .guest-card h3{margin:8px 0;font-size:15px}.app .settings-page .guest-card p{color:var(--text-secondary);margin:8px 0 12px;font-size:13px}.app .settings-page .login-prompt-btn{border:1px solid var(--border);background:var(--surface);min-height:36px;color:var(--accent);border-radius:8px;align-items:center;gap:6px;padding:0 12px;font-size:13px;display:inline-flex}.app .settings-page .benefits-list{gap:10px;display:grid}.app .settings-page .benefit-item,.app .settings-page .user-profile-card{align-items:center;gap:12px;display:flex}.app .settings-page .benefit-text{gap:2px;display:grid}.app .settings-page .benefit-text strong{font-size:13px;font-weight:500}.app .settings-page .benefit-text small{color:var(--text-secondary);font-size:12px}.app .settings-page .user-name{font-size:15px;font-weight:600}.app .settings-page .user-avatar{background:var(--accent-light);width:40px;height:40px;color:var(--accent);border-radius:10px;flex:0 0 40px;place-items:center;display:grid}.app .context-menu{border:1px solid var(--border);background:var(--surface-elevated);width:calc(min(280px,100vw - 24px));max-height:calc(100dvh - 24px);color:var(--text-primary);box-shadow:var(--control-shadow-hover);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:16px;padding:18px;animation:.18s both content-in;overflow:auto}.app .context-menu-header{border-bottom:1px solid var(--border);background:0 0}.app .place-name{color:var(--text-primary);padding-right:24px;font-size:14px;font-weight:600}.app .coords .map-icon,.app .photo-count .map-icon,.app .place-name .map-icon{vertical-align:-2px;width:14px;height:14px}.app .life-close-btn,.app .menu-close,.app .village-shell-close{border:1px solid var(--border);background:var(--surface-muted);width:40px;height:40px;color:var(--text-secondary);border-radius:10px;place-items:center;display:grid}.app .menu-close{width:32px;height:32px;top:10px;right:10px}.app .add-photo-zone{background:var(--surface-muted);width:100%;color:var(--text-secondary);border:1px dashed var(--border);border-radius:12px}.app .add-photo-zone.drag-active,.app .add-photo-zone:hover{border-color:var(--accent);background:var(--accent-light)}.app .zone-icon .map-icon{width:28px;height:28px;color:var(--accent)}.app .photo-add-menu{padding:14px}.app .photo-add-menu .context-menu-header{border-bottom:none;margin-bottom:12px;padding:0 28px 0 0}.app .photo-add-label{color:var(--text-muted);margin:0 0 8px;font-size:11px;font-weight:500}.app .photo-add-menu .place-name{align-items:flex-start;gap:6px;padding:0;line-height:1.5;display:flex}.app .photo-add-menu .place-name .map-icon{flex:0 0 14px;margin-top:3px}.app .photo-add-place{-webkit-line-clamp:2;-webkit-box-orient:vertical;min-width:0;display:-webkit-box;overflow:hidden}.app .photo-add-menu .coords{align-items:center;gap:6px;margin-top:5px;font-size:11px;display:flex}.app .photo-add-menu .menu-actions{padding:0}.app .photo-add-menu .menu-close{opacity:1;background:0 0;border-color:#0000}.app .photo-add-menu .menu-close:hover{background:var(--surface-muted);color:var(--text-primary);transform:none}.app .photo-add-menu .add-photo-zone{text-align:left;flex-direction:row;justify-content:flex-start;gap:12px;min-height:84px;margin:0;padding:14px;transition:background-color .15s,border-color .15s}.app .photo-add-menu .add-photo-zone.drag-active,.app .photo-add-menu .add-photo-zone:hover{animation:none;transform:none}.app .photo-add-menu .add-photo-zone:disabled{cursor:wait}.app .photo-add-menu .zone-icon{background:var(--accent-light);border-radius:9px;flex:0 0 36px;place-items:center;width:36px;height:36px;display:grid}.app .photo-add-menu .zone-icon .map-icon{width:20px;height:20px}.app .photo-add-menu .add-photo-zone:hover .zone-icon{transform:none}.app .photo-add-copy{gap:3px;display:grid}.app .photo-add-menu .zone-text{color:var(--text-primary);font-size:13px}.app .photo-add-menu .zone-hint{font-size:11px;font-weight:400}@media (prefers-reduced-motion:reduce){.app .photo-add-menu,.app .photo-add-menu .add-photo-zone,.app .photo-add-menu .zone-icon{transition:none;animation:none}}.app .menu-btn{border:1px solid var(--border);background:var(--surface-muted);min-height:42px;color:var(--text-primary);box-shadow:none;border-radius:10px}.app .menu-btn:hover{border-color:var(--accent);background:var(--accent-light);color:var(--accent)}.app .menu-btn.danger{color:var(--danger)}.app .menu-btn.danger:hover{border-color:var(--danger);background:var(--danger-light)}.app .life-panel-overlay,.app .merge-dialog-overlay,.app .notes-panel-overlay,.app .village-modal-overlay{background:var(--overlay);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);place-items:center;padding:24px;display:grid}.app .life-panel,.app .merge-dialog,.app .notes-panel,.app .village-modal-shell{background:var(--surface);color:var(--text-primary);border:1px solid var(--border);box-shadow:var(--shadow-xl);border-radius:20px;min-height:0;animation:.22s cubic-bezier(.2,.8,.2,1) both panel-in}.app .life-panel{width:min(clamp(480px,40vw,620px),100%);max-width:none;height:calc(min(600px,100dvh - 48px));max-height:none}.app .life-panel-overlay{grid-template-columns:minmax(0,1fr);justify-items:center}.app .life-view{flex-direction:column;height:100%;min-height:0;display:flex}.app .life-view-enter{animation:.16s both content-in}.app .life-panel-header{background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;gap:12px;padding:12px 16px}.app .life-panel-header h3{text-align:left;color:var(--text-primary);letter-spacing:0;overflow-wrap:anywhere;justify-content:flex-start;align-items:center;gap:8px;min-width:0;margin:0;font-size:16px;font-weight:600;line-height:1.5;display:flex}.app .life-panel-content{background:var(--surface);flex:1;min-height:0;padding:16px;overflow:auto}.app .life-back-btn{min-height:40px;color:var(--text-secondary);border-color:var(--border);background:var(--surface-muted);align-items:center;gap:4px;display:flex}.app .life-back-btn:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-light)}.app .social-section{box-shadow:none;background:0 0;border:0;border-radius:0;margin:16px 0 0;padding:0}.app .social-section h3{color:var(--text-primary);border:0;align-items:center;gap:8px;margin:0 0 10px;font-size:14px;font-weight:600;display:flex}.app .life-panel-overlay .social-overview-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.app .soc-card{border:1px solid var(--border);background:var(--surface-muted);box-shadow:none;-moz-column-gap:8px;text-align:left;border-radius:12px;grid-template-columns:20px minmax(0,1fr);gap:3px 8px;padding:10px 8px;display:grid}.app .soc-card:hover{box-shadow:none;transform:none}.app .soc-card-icon{color:var(--text-muted);grid-row:1/3;align-self:center;margin:0;font-size:0}.app .soc-card-value{color:var(--text-primary);margin:0;font-size:20px;font-weight:600;line-height:1.2}.app .soc-card-label{color:var(--text-secondary);grid-column:2;margin:0;font-size:12px;line-height:1.4}.app .life-global-cards{grid-template-columns:1fr 1fr;gap:8px;display:grid}.app .life-globe-card{text-align:left;background:var(--surface-muted);width:100%;color:var(--text-primary);border:1px solid var(--border);box-shadow:none;border-radius:12px;gap:10px;padding:12px;transition:border-color .15s,background .15s;display:flex}.app .life-globe-card:hover{background:var(--accent-light);border-color:var(--accent);transform:none}.app .lgc-icon{font-size:18px}.app .lgc-info strong{color:var(--text-primary);font-size:14px}.app .lgc-info span,.app .overseas-result-line,.app .pdl-count{color:var(--text-secondary)}.app .lgc-arrow{width:16px;height:16px;color:var(--text-muted)}.app .social-action-btn{border:1px solid var(--border);background:var(--surface-muted);min-height:48px;color:var(--text-primary);box-shadow:none;border-radius:12px;padding:10px 12px}.app .social-action-btn:hover{background:var(--accent-light);border-color:var(--accent);transform:none}.app .pdl-name,.app .social-action-btn strong{color:var(--text-primary);font-size:13px}.app .social-action-btn small{color:var(--text-secondary)}.app .province-drill-item{border-bottom:1px solid var(--border);color:var(--text-primary);background:0 0}.app .pdl-bar{background:var(--accent)}.app .life-edit-btn,.app .overseas-input,.app .overseas-select{border:1px solid var(--border);background:var(--surface-muted);min-height:40px;color:var(--text-primary);border-radius:8px}.app .life-edit-btn.active{color:var(--accent);border-color:var(--accent);background:var(--accent-light)}.app .overseas-item{background:var(--surface-muted);color:var(--text-primary);border:1px solid var(--border);border-radius:8px}.app .overseas-item.visited{border-color:var(--accent);background:var(--accent-light)}.app .overseas-name{color:var(--text-primary)}.app .life-panel-overlay .life-panel-content{gap:0}.app .life-header-spacer{flex:0 0 40px;width:40px}.app .lgc-icon{width:24px;height:24px;color:var(--accent);flex:0 0 24px;place-items:center;display:grid}.app .lgc-icon .map-icon,.app .life-panel-header h3 .map-icon,.app .life-recent-heading .map-icon,.app .social-section h3 .map-icon{width:18px;height:18px}.app .life-recent-section{margin-top:16px}.app .life-recent-heading,.app .overseas-heading{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.app .life-recent-heading h3,.app .overseas-heading h4{color:var(--text-primary);align-items:center;gap:8px;margin:0;font-size:14px;font-weight:600;display:flex}.app .life-recent-heading time,.app .overseas-heading span{color:var(--text-muted);font-size:12px}.app .life-recent-card,.app .life-recent-empty{border:1px solid var(--border);background:var(--surface-muted);border-radius:12px;align-items:center;gap:12px;min-height:88px;padding:10px;display:flex}.app .life-recent-copy,.app .life-recent-empty>div{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.app .life-recent-copy strong,.app .life-recent-empty strong{overflow-wrap:anywhere;color:var(--text-primary);font-size:14px;font-weight:600}.app .life-recent-copy span,.app .life-recent-copy time,.app .life-recent-empty span{color:var(--text-secondary);font-size:12px;line-height:1.45}.app .life-recent-photo,.app .life-recent-photo-empty{-o-object-fit:cover;object-fit:cover;border-radius:8px;flex:0 0 92px;width:92px;height:68px}.app .life-recent-photo-empty{background:var(--surface);color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;gap:3px;font-size:11px;display:flex}.app .life-recent-empty>.map-icon,.app .life-recent-photo-empty .map-icon{flex:none;width:20px;height:20px}.app .life-recent-empty>.map-icon{color:var(--accent);margin-top:1px}.app .life-recent-empty{align-items:flex-start;padding:14px 12px}.app .life-photo-strip{margin:12px 0 16px}.app .life-photo-strip h3{color:var(--text-primary);margin:0 0 7px;font-size:13px;font-weight:600}.app .life-photo-strip-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.app .life-photo-strip-item{min-width:0;margin:0}.app .life-photo-strip-item img{background:var(--surface-muted);-o-object-fit:cover;object-fit:cover;border-radius:8px;width:100%;height:64px;display:block}.app .life-photo-strip-item figcaption{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:10px;line-height:1.3;overflow:hidden}.app .life-photo-strip-empty{border:1px dashed var(--border);color:var(--text-secondary);background:var(--surface-muted);border-radius:9px;margin:0;padding:9px 10px;font-size:12px;line-height:1.45}.app .overseas-section{margin:0}.app .overseas-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0 0 10px;display:grid}.app .overseas-search{grid-column:1/-1;width:100%}.app .overseas-controls .overseas-input,.app .overseas-controls .overseas-select{min-width:0;min-height:38px;padding:7px 9px;font-size:12px}.app .overseas-result-line{margin:0 0 8px;font-size:12px}.app .overseas-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;display:grid}.app .overseas-item{align-items:center;gap:7px;min-width:0;min-height:58px;padding:8px;transition:border-color .15s,background-color .15s;display:flex}.app .overseas-globe{width:18px;height:18px;color:var(--accent);flex:0 0 18px;place-items:center;display:grid}.app .overseas-globe .map-icon{width:16px;height:16px}.app .overseas-country-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.app .overseas-country-main .overseas-name{overflow-wrap:anywhere;font-size:12px;line-height:1.3}.app .overseas-code{color:var(--text-muted);letter-spacing:.06em;font-size:10px}.app .overseas-country-meta{max-width:76px;color:var(--text-secondary);text-align:right;flex-direction:column;flex:none;align-items:flex-end;gap:2px;font-size:10px;display:flex}.app .overseas-item.visited .overseas-status{color:var(--accent);font-weight:600}.app .overseas-count{color:var(--text-secondary);white-space:nowrap}.app .overseas-empty{border:1px dashed var(--border);color:var(--text-secondary);border-radius:10px;align-items:center;gap:9px;padding:18px 12px;font-size:13px;line-height:1.5;display:flex}.app .overseas-empty .map-icon{width:18px;height:18px;color:var(--text-muted);flex:none}.app .overseas-more-button{border:1px solid var(--border);background:var(--surface-muted);width:100%;min-height:38px;color:var(--accent);cursor:pointer;border-radius:9px;margin-top:10px;font-size:12px;font-weight:600;transition:background-color .15s,border-color .15s}.app .overseas-more-button:hover{border-color:var(--accent);background:var(--accent-light)}.app .life-panel :-webkit-any(button,input,select):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app .life-panel :is(button,input,select):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app .social-action-btn:disabled{cursor:not-allowed;opacity:.65}@media (max-width:374px){.app .life-panel-overlay .social-overview-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:420px){.app .overseas-list{grid-template-columns:minmax(0,1fr)}.app .life-recent-photo,.app .life-recent-photo-empty{flex-basis:80px;width:80px}}@media (prefers-reduced-motion:reduce){.app .life-globe-card,.app .life-panel,.app .life-view-enter,.app .overseas-item,.app .overseas-more-button{transition:none;animation:none}}.app .village-modal-shell{opacity:1;will-change:auto;gap:24px;width:min(1080px,100%);height:calc(min(720px,100dvh - 48px));padding:24px;position:relative;top:auto;bottom:auto;left:auto;right:auto;transform:none}.app .village-modal-shell.open{animation:.22s both panel-in}.app .village-modal-left,.app .village-modal-right{opacity:1;min-height:0;color:var(--text-primary);box-shadow:none;background:0 0;border:0;padding:0;animation:none;overflow:auto;transform:none}.app .village-modal-right{border-left:1px solid var(--border);padding-left:24px}.app .village-modal-head h3,.app .village-modal-right h4{color:var(--text-primary);font-size:18px}.app .village-title-icon{vertical-align:-3px;display:inline-flex}.app .village-shell-close{opacity:1;animation:none;position:absolute;top:12px;right:12px;transform:none}.app .village-social-hero{background:var(--surface-muted);color:var(--text-primary);border:1px solid var(--border);box-shadow:none;border-radius:12px}.app .hero-main strong{color:var(--text-primary);font-size:16px}.app .hero-main span,.app .village-empty-state p{color:var(--text-secondary)}.app .village-empty-state,.app .village-feed-card,.app .village-stats-grid{background:var(--surface-muted);color:var(--text-primary);border:1px solid var(--border);box-shadow:none;border-radius:12px}.app .village-empty-state h4{color:var(--text-primary)}.app .village-empty-badge{background:var(--accent-light);color:var(--accent);border:0}.app .hero-post-btn,.app .village-friend-add button,.app .village-main-btn{border:1px solid var(--border);background:var(--surface-subtle);min-height:40px;color:var(--text-primary);box-shadow:none;border-radius:8px}.app .village-friend-add input,.app .village-friend-search{border:1px solid var(--border);background:var(--surface);min-height:42px;color:var(--text-primary)}.app .village-friend-item{text-align:left;background:var(--surface-muted);border:1px solid var(--border);width:100%;color:var(--text-primary)}.app .village-feed-title,.app .village-friend-text strong{color:var(--text-primary)}.app .village-friend-text span{color:var(--text-secondary)}.app .merge-dialog,.app .notes-panel{max-width:100%;max-height:calc(100dvh - 48px);overflow:hidden}.app .merge-dialog-overlay,.app .note-editor-overlay,.app .notes-panel-overlay,.app .village-modal-overlay{grid-template-columns:minmax(0,1fr);min-width:0}.app .notes-panel{width:min(clamp(520px,42vw,680px),100%)}.app .merge-dialog{width:min(640px,100%)}.app .note-editor{width:min(520px,100%);max-width:none;max-height:calc(100dvh - 48px);overflow:auto}.app .merge-dialog-header,.app .notes-panel-header{background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;flex:none;gap:12px 24px;padding:18px 20px}.app .merge-dialog-header h3,.app .notes-panel-header h3{min-width:0;margin:0;font-size:16px;line-height:1.5}.app .notes-panel-header .header-actions{flex:none;gap:8px;margin-left:auto}.app .notes-panel-header button{white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:6px;min-height:36px;padding:7px 12px;line-height:1.4;display:inline-flex}.app .notes-panel-header .panel-close{width:36px;height:36px;padding:0;position:static}.app .notes-panel-header button .map-icon{width:16px;height:16px}.app .notes-panel-header [role=alert]{overflow-wrap:anywhere;flex-basis:100%;margin:0}.app .merge-dialog-content,.app .notes-list{min-height:0;padding:20px;overflow:auto}.app .note-item{background:var(--surface-muted);border-color:var(--border);border-radius:12px;align-items:flex-start;gap:16px;padding:14px}.app .note-item:hover,.app .note-item:hover .note-thumb{transform:none}.app .note-thumb{width:80px;height:80px}.app .note-content{gap:8px}.app .note-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65}.app .note-editor h3{align-items:center;gap:8px;display:flex}.app .merge-dialog h3,.app .notes-panel h3{color:var(--text-primary);align-items:center;gap:8px;display:flex}.app .note-content textarea{background:var(--surface);width:100%;min-height:96px;color:var(--text-primary);border-color:var(--border);line-height:1.6}.app .merge-photo-item{text-align:left;color:var(--text-primary);background:var(--surface-muted);border:2px solid var(--border)}.app .merge-photo-item.target{border-color:var(--accent)}.app .poster-page{border:1px solid var(--border);border-radius:20px}.app .poster-page,.app .poster-sidebar{background:var(--surface);color:var(--text-primary)}.app .poster-canvas-wrap{background:var(--surface-subtle);border:1px solid var(--border)}.app .poster-action,.app .poster-photo-list-panel,.app .poster-pills button{border-color:var(--border);background:var(--surface-muted);color:var(--text-primary)}.app .poster-action.primary,.app .poster-pills button.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}@keyframes ui-panel-out{to{opacity:0;transform:translateY(8px)scale(.98)}}@media (max-width:768px){.app .life-panel-overlay,.app .merge-dialog-overlay,.app .notes-panel-overlay,.app .village-modal-overlay{padding:12px}.app .life-panel,.app .village-modal-shell{border-radius:16px;height:calc(100dvh - 24px)}.app .life-panel-content{padding:16px}.app .life-global-cards{grid-template-columns:1fr}.app .village-modal-shell{grid-template-columns:1fr;padding:20px 16px;display:block;overflow:auto}.app .village-modal-left,.app .village-modal-right{overflow:visible}.app .village-modal-right{border-left:0;border-top:1px solid var(--border);margin-top:20px;padding:20px 0 0}.app .poster-page{max-height:calc(100dvh - 24px);overflow:auto}.app .social-actions{flex-direction:column}}@media (max-width:480px){.app .note-editor-overlay{padding:12px}.app .merge-dialog-header,.app .notes-panel-header{gap:12px;padding:14px 16px}.app .notes-panel-header .header-actions{flex-basis:100%;justify-content:flex-end}.app .merge-dialog-content,.app .notes-list{padding:16px}.app .note-item{gap:12px;padding:12px}.app .note-thumb{width:56px;height:56px}.app .note-editor{max-height:calc(100dvh - 24px);padding:20px}}@media (prefers-reduced-motion:reduce){.app *,.app :after,.app :before{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app .photo-editor-overlay,.app .photo-viewer{color:#f8fafc;background:#090e18}.app .pv-toolbar{width:max-content;max-width:calc(100vw - 32px);left:auto;top:max(16px,env(safe-area-inset-top));background:#172033;border:1px solid #334155;border-radius:14px;padding:6px;right:16px;transform:none;box-shadow:0 8px 32px #0004}.app .pe-tool,.app .photo-nav,.app .pv-btn{color:#e2e8f0;background:0 0;border:1px solid #0000;border-radius:10px;place-items:center;width:44px;height:44px;padding:0;transition:background .15s,transform .15s;display:inline-grid}.app .pe-tool:hover,.app .photo-nav:hover,.app .pv-btn:hover{background:#334155;transform:none}.app .pe-tool:active,.app .pv-btn:active{transform:scale(.94)}.app .pv-btn-danger{color:#fca5a5}.app .pv-btn-danger:hover{background:#450a0a}.app .pe-tool svg,.app .photo-nav svg,.app .pv-btn svg{fill:none;stroke:currentColor;width:20px;height:20px}.app .photo-nav{background:#172033cc;border-color:#334155}.app .photo-nav:hover{transform:translateY(-50%)}.app .photo-nav.prev{left:16px}.app .photo-nav.next{right:16px}.app .photo-main-wrapper{width:calc(100% - 144px);height:calc(100% - 180px)}.app .photo-main-wrapper img{-o-object-fit:contain;object-fit:contain;border-radius:4px;max-width:100%;max-height:100%}.app .photo-counter,.app .photo-note-bar{color:#e2e8f0;box-shadow:none;background:#172033;border:1px solid #334155;border-radius:10px}.app .photo-note-bar{white-space:normal;overflow-wrap:anywhere;max-width:calc(min(680px,100vw - 32px));line-height:1.6}.app .batch-select-container{background:var(--surface);color:var(--text-primary);border:1px solid var(--border);border-radius:20px}.app .batch-select-header{background:var(--surface);border-color:var(--border)}.app .batch-select-header .pv-btn{color:var(--text-primary)}.app .batch-select-item{background:var(--surface-muted);border:2px solid #0000;padding:0}.app .batch-select-item.selected{border-color:var(--accent)}.app .pe-header,.app .pe-toolbar{background:#172033;border-color:#334155;flex-wrap:wrap;gap:12px;min-height:68px;padding:12px 16px;position:relative}.app .pe-toolbar{padding-bottom:max(12px,env(safe-area-inset-bottom));flex-shrink:0;justify-content:center;gap:12px}.app .pe-btn{color:#cbd5e1;border:1px solid #0000;border-radius:10px;min-height:44px;padding:0 14px}.app .pe-done.active{color:#fff;background:#2563eb}.app .pe-done.active:hover{background:#1d4ed8}.app .pe-title{color:#f8fafc;font-size:16px}.app .photo-editor-modern{background:#090e18}.app .pe-canvas-area{min-height:0;padding:0;overflow:hidden}.app .pe-image-container{touch-action:none;flex:none;overflow:hidden}.app .pe-image-container img{-o-object-fit:fill;object-fit:fill;max-width:none;max-height:none;transition:none;position:absolute;top:50%;left:50%}.app .pe-hint{color:#94a3b8;pointer-events:none;margin:0;font-size:12px;position:absolute;bottom:8px}.app .pe-status{color:#fecaca;background:#450a0a;border-radius:8px;padding:8px 12px;position:absolute;top:12px}.app .crop-handle{touch-action:none;width:24px;height:24px}@media (max-width:600px){.app .pv-toolbar{justify-content:center;width:auto;top:12px;left:12px;right:12px}.app .photo-main-wrapper{width:calc(100% - 32px);height:calc(100% - 210px)}.app .photo-nav{top:auto;bottom:90px;transform:none}.app .photo-nav:hover{transform:none}.app .photo-bottom-bar{max-height:64px;bottom:16px;overflow:auto}.app .pe-header{gap:4px;padding:8px}.app .pe-btn{padding:0 10px}}.login-buttons-container{z-index:10000;top:max(20px,env(safe-area-inset-top));flex-direction:row;align-items:center;gap:8px;width:max-content;max-width:calc(100vw - 24px);animation:.18s ease-out both auth-choice-in;display:flex;position:fixed;left:auto;right:24px;transform:none}@keyframes auth-choice-in{0%{opacity:0}to{opacity:1}}.login-drop-btn{box-sizing:border-box;color:#f1f5f9;min-width:0;height:44px;min-height:44px;box-shadow:none;font:inherit;white-space:nowrap;cursor:pointer;background:#0f172a6b;border:1px solid #ffffff2e;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:9px 12px;font-size:14px;font-weight:500;transition:background-color .15s,border-color .15s,box-shadow .15s,transform .15s;display:inline-flex}.login-buttons-container .login-drop-btn.primary,.login-buttons-container .login-drop-btn.tertiary{padding:9px 12px;font-size:14px;line-height:1.2}.login-drop-btn:after,.login-drop-btn:before{display:none}.login-drop-btn .map-icon,.login-drop-btn svg{flex:0 0 18px;width:18px;height:18px;display:block}.login-drop-btn.primary{color:#fff;background:#ffffff0d;border-color:#ffffff4d}.login-drop-btn.secondary{color:#e2e8f09e;width:max-content;max-width:100%;height:36px;min-height:36px;box-shadow:none;-webkit-backdrop-filter:none;cursor:not-allowed;opacity:1;background:0 0;border-color:#0000;padding:6px 12px}.login-drop-btn.secondary small{color:#e2e8f080;font-size:11px;font-weight:500}.login-drop-btn.tertiary{color:#e2e8f0;background:0 0;border-color:#0000}.login-drop-btn:not(:disabled):hover{background:#ffffff14;border-color:#ffffff4d;transform:translateY(-1px)}.login-drop-btn.primary:not(:disabled):hover{background:#ffffff14;border-color:#ffffff80}.login-buttons-container .login-drop-btn.tertiary:hover:not(:disabled){background:#ffffff14;border-color:#ffffff4d;transform:translateY(-1px)}.login-drop-btn:not(:disabled):active{transform:translateY(0)}.globe-action.is-ready .globe-bar:focus-visible{outline-offset:3px;outline:2px solid #fff;box-shadow:0 0 0 5px #0f172ad1}.login-drop-btn:focus-visible{outline-offset:3px;outline:2px solid #fff;box-shadow:0 0 0 5px #0f172ad1}.email-form-modal button:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;box-shadow:none}.globe-action.is-ready .globe-bar{box-sizing:border-box;border:1px solid var(--accent);background:var(--accent);width:100%;height:44px;min-height:44px;color:var(--on-accent);box-shadow:var(--shadow-md);font-family:var(--font-sans);border-radius:12px;padding:0 16px;transition:background-color .15s,border-color .15s,box-shadow .15s,transform .15s}.globe-action.is-ready .globe-bar-fill{background:0 0}.globe-action.is-ready .globe-bar-text{color:var(--on-accent);letter-spacing:0;font-size:14px;font-weight:600}.globe-action.is-ready .globe-bar:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover);transform:translateY(-1px)}.globe-action.is-ready .globe-bar:active:not(:disabled){transform:translateY(0)}.email-form-overlay{background:var(--overlay);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:16px}.email-form-modal{border:1px solid var(--surface-elevated-border);background:var(--surface-elevated);width:min(420px,100%);max-height:calc(100dvh - 32px);color:var(--text-primary);box-shadow:var(--shadow-xl);border-radius:20px;animation:.22s both panel-in;overflow:auto}.email-form-tabs{border-color:var(--border);background:var(--surface-muted)}.tab-btn{min-height:44px;color:var(--text-secondary);background:0 0}.tab-btn.active{color:var(--accent)}.email-form input{border:1px solid var(--border);background:var(--surface-muted);min-height:46px;color:var(--text-primary);border-radius:10px}.email-form input:focus{border-color:var(--accent);box-shadow:var(--focus-ring)}.email-form .form-field label{color:var(--text-secondary);font-size:13px}.password-toggle{width:44px;min-height:44px;color:var(--text-secondary);font-size:12px}.form-submit-btn{background:var(--accent);min-height:46px;color:var(--on-accent);border-radius:10px}.form-submit-btn:hover:not(:disabled){background:var(--accent-hover);box-shadow:none;transform:none}.email-form .form-hint{color:var(--text-muted);text-align:center;font-size:12px}.email-form-tabs .close-btn{width:44px;height:44px;color:var(--text-secondary);place-items:center;display:grid}.form-message.error{border:1px solid var(--danger);background:var(--danger-light);color:var(--danger)}.logged-in-bar{border:1px solid var(--surface-elevated-border);background:var(--surface-elevated);box-shadow:var(--shadow-md);border-radius:12px}.logout-btn{color:var(--text-secondary);background:0 0;align-items:center;gap:6px;display:flex}@media (max-width:640px){.login-buttons-container{top:max(16px,env(safe-area-inset-top));grid-template-columns:repeat(2,max-content);gap:4px 8px;display:grid;right:12px}.login-drop-btn.secondary{grid-column:1/-1;justify-self:end}}@media (max-width:359px){.login-buttons-container{gap:4px}.login-drop-btn{gap:6px;padding-inline-start:8px;padding-inline-end:8px}.login-drop-btn.secondary{height:36px;padding-inline-start:8px;padding-inline-end:8px}.login-buttons-container .login-drop-btn.primary,.login-buttons-container .login-drop-btn.tertiary{padding-inline-start:8px;padding-inline-end:8px}}@media (prefers-reduced-motion:reduce){.email-form-modal,.email-form-overlay,.login-buttons-container{animation:none}.email-form-modal,.email-form-overlay,.globe-action.is-ready .globe-bar,.login-drop-btn{transition:none;transform:none}.globe-action.is-ready .globe-bar-fill{transition:none}.globe-action.is-ready .globe-bar:active:not(:disabled),.globe-action.is-ready .globe-bar:hover:not(:disabled),.login-buttons-container .login-drop-btn.primary:active:not(:disabled),.login-buttons-container .login-drop-btn.primary:hover:not(:disabled),.login-buttons-container .login-drop-btn.tertiary:active:not(:disabled),.login-buttons-container .login-drop-btn.tertiary:hover:not(:disabled){transform:none}}.globe-split{background:#0b0b19}.globe-split:before{content:"";pointer-events:none;z-index:1;background:linear-gradient(90deg,#0b0b1940,#0b0b1920 32%,#0000 60%);transition:opacity .5s;position:absolute;top:0;bottom:0;left:0;right:0}.globe-split .globe-map-container{width:100%;height:100%;top:0;bottom:0;left:0;right:0}.globe-split .globe-bottom-gradient{display:none}.globe-split .globe-content{text-align:left;justify-content:center;align-items:stretch;gap:28px;width:calc(min(360px,32vw));padding:40px 0;transition:opacity .4s,transform .5s;top:0;bottom:0;left:calc(clamp(32px,6vw,112px));right:auto}.globe-split.is-entering .globe-content{opacity:0;pointer-events:none;transform:translate(-16px)}.globe-split.is-entering:before{opacity:0}.globe-split .globe-header{text-align:left;margin:0}.globe-split .globe-title{letter-spacing:-.04em;color:#f8fafc;text-shadow:none;margin:0 0 18px;font-size:calc(clamp(32px,3.2vw,48px));font-weight:600;line-height:1.15}.globe-split .globe-subtitle{color:#e2e8f0;margin:0;font-size:16px;line-height:1.6}.globe-split .globe-description{color:#94a3b8;max-width:28em;margin:10px 0 0;font-size:13px;line-height:1.8}.globe-split .login-buttons-container{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:100%;max-width:none;display:grid;position:static;transform:none}.globe-split .login-drop-btn{border-radius:10px;width:100%;min-width:0;height:44px;padding:0 12px}.globe-split .login-drop-btn.primary{color:#0f172a;background:#f1f5f9;border-color:#f1f5f9}.globe-split .login-drop-btn.primary:hover:not(:disabled){background:#fff;border-color:#fff}.globe-split .login-drop-btn.tertiary{background:0 0;border-color:#ffffff30}.globe-split .login-drop-btn.secondary{grid-column:1/-1;justify-content:flex-start;justify-self:start;width:auto;height:36px;padding:0}.globe-split .logged-in-bar{width:100%;box-shadow:none;background:0 0;border:0;gap:10px;padding:0;animation:none;position:static;transform:none}.globe-split .user-avatar{color:#cbd5e1;background:#ffffff0d;border:1px solid #ffffff26;flex:0 0 32px;width:32px;height:32px;font-size:13px}.globe-split .logout-btn .map-icon,.globe-split .user-avatar .map-icon{width:16px;height:16px}.globe-split .logged-in-name{text-overflow:ellipsis;white-space:nowrap;color:#cbd5e1;flex:1;min-width:0;font-size:13px;overflow:hidden}.globe-split .logout-btn{color:#94a3b8;box-shadow:none;background:0 0;border:0;align-items:center;gap:6px;padding:8px;font-size:12px;display:inline-flex}.globe-split .logout-btn:hover{color:#f8fafc;background:#ffffff0d;transform:none}@media (max-width:760px) and (max-height:600px){.globe-split .globe-description{display:none}}.globe-split .globe-action{width:100%;max-width:none;margin:0}.globe-split .globe-bar-hint{text-align:left;margin:12px 0 0;font-size:12px;line-height:1.5}@media (max-width:760px){.globe-split{overflow-y:auto}.globe-split:before{background:linear-gradient(#0000 28%,#0b0b1940 48%,#0b0b1960)}.globe-split .globe-content{gap:18px;width:100%;max-width:440px;margin:0 auto;padding:16px 24px 24px;top:calc(max(150px,38dvh));bottom:auto;left:0;right:0}.globe-split .globe-title{margin-bottom:10px;font-size:32px}.globe-split .globe-subtitle{font-size:14px}.globe-split .globe-description{margin-top:6px;font-size:12px}}@media (prefers-reduced-motion:reduce){.globe-split .globe-content,.globe-split:before{transition:none}}.desktop-download-overlay{z-index:11000;background:var(--overlay);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);place-items:center;padding:16px;display:grid;position:fixed;top:0;bottom:0;left:0;right:0}.desktop-download-dialog{border:1px solid var(--border);background:var(--surface);width:min(460px,100%);color:var(--text-primary);box-shadow:var(--shadow-xl);font-family:var(--font-sans);border-radius:20px;padding:24px;animation:.22s both panel-in}.desktop-download-dialog header{justify-content:space-between;align-items:center;gap:12px;display:flex}.desktop-download-dialog h2{margin:0;font-size:18px}.desktop-download-dialog header button{border:1px solid var(--border);width:40px;height:40px;color:var(--text-secondary);background:var(--surface-muted);border-radius:10px;place-items:center;display:grid}.desktop-download-dialog .map-icon{fill:none;width:20px;height:20px}.desktop-download-dialog p{color:var(--text-secondary);font-size:14px;line-height:1.7}.desktop-download-dialog .desktop-download-intro{margin:14px 0 18px}.desktop-download-features{background:var(--surface-muted);border-radius:12px;gap:14px;padding:16px;display:grid}.desktop-download-features>div,.desktop-download-link{align-items:center;gap:8px;display:flex}.desktop-download-features>div{align-items:flex-start;gap:12px}.desktop-download-features>div>.map-icon{width:19px;height:19px;color:var(--accent);flex:0 0 19px;margin-top:2px}.desktop-download-features>div>span{gap:3px;display:grid}.desktop-download-features strong{font-size:14px;font-weight:600}.desktop-download-features small{color:var(--text-secondary);font-size:12px;line-height:1.55}.desktop-download-link{background:var(--accent);min-height:44px;color:var(--on-accent);border-radius:10px;justify-content:center;font-size:14px;text-decoration:none}.desktop-download-link:hover{background:var(--accent-hover)}.desktop-download-dialog .download-note{margin:14px 0;font-size:12px;line-height:1.6}.desktop-download-dialog .download-signature-note{color:var(--text-secondary);margin:10px 0 0;font-size:11px;line-height:1.5}.desktop-download-dialog button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.desktop-download-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app .web-dl-btn{justify-content:center;align-items:center;gap:8px;animation:none;display:inline-flex}.app .web-dl-btn-icon{background:var(--accent-light);width:28px;height:28px;color:var(--accent);transition:background var(--transition-fast),color var(--transition-fast),transform var(--transition-fast);border-radius:9px;flex:0 0 28px;place-items:center;display:grid}.app .web-dl-btn-icon .map-icon{stroke-width:1.9px;width:16px;height:16px}.app .web-dl-btn-label{white-space:nowrap;line-height:1}.app .web-dl-btn:hover .web-dl-btn-icon{background:var(--accent);color:var(--on-accent);transform:translateY(-1px)}.globe-title-row{justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;display:flex}.globe-title-row .globe-title{white-space:nowrap;flex:none;margin:0}.globe-title-row .web-dl-btn{box-sizing:border-box;color:#e2e8f0;height:calc(clamp(36.8px,3.68vw,55.2px));min-height:0;font:inherit;cursor:pointer;background:#0f172a4d;border:1px solid #e2e8f03d;border-radius:11px;justify-content:center;align-items:center;gap:8px;padding:0 12px 0 8px;font-size:13px;transition:background .16s,border-color .16s,transform .16s;display:inline-flex}.globe-title-row .web-dl-btn:hover{background:#e2e8f01f;border-color:#e2e8f07a;transform:translateY(-1px)}.globe-title-row .web-dl-btn:focus-visible{outline-offset:3px;outline:2px solid #93c5fd}.globe-title-row .web-dl-btn-icon{color:#bfdbfe;background:#93c5fd24;border-radius:8px;flex:0 0 28px;place-items:center;width:28px;height:28px;display:grid}.globe-title-row .web-dl-btn-icon .map-icon{width:16px;height:16px}.globe-title-row .web-dl-btn-label{white-space:nowrap}@media (max-width:760px){.globe-title-row{margin-bottom:10px}}@media (max-width:380px){.globe-title-row .web-dl-btn{padding-right:8px}.globe-title-row .web-dl-btn-label{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@media (prefers-reduced-motion:reduce){.app .web-dl-btn-icon,.globe-title-row .web-dl-btn{transition:none}}.web-dl-btn{color:#475569;cursor:pointer;white-space:nowrap;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;align-items:center;gap:4px;padding:8px 14px;font-size:13px;transition:all .15s;display:inline-flex}.web-dl-btn:hover{color:#fff;background:#3b82f6;border-color:#3b82f6}.web-dl-overlay{z-index:9999;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.web-dl-modal{background:#fff;border-radius:12px;width:320px;overflow:hidden;box-shadow:0 8px 30px #00000026}.web-dl-header{border-bottom:1px solid #f1f5f9;justify-content:space-between;align-items:center;padding:14px 16px;font-size:15px;font-weight:600;display:flex}.web-dl-header button{color:#94a3b8;cursor:pointer;background:0 0;border:none;font-size:18px;line-height:1}.web-dl-body{padding:16px}.web-dl-body p{color:#64748b;text-align:center;margin:0 0 14px;font-size:13px}.web-dl-main{color:#fff;text-align:center;background:#3b82f6;border-radius:8px;padding:12px;font-size:14px;font-weight:500;text-decoration:none;transition:background .15s;display:block}.web-dl-main:hover{background:#2563eb}.web-dl-others{border-top:1px solid #f1f5f9;justify-content:center;gap:16px;margin-top:12px;padding-top:12px;display:flex}.web-dl-others a{color:#64748b;font-size:12px;text-decoration:none}.web-dl-others a:hover{color:#3b82f6}.web-download-beside-search{z-index:600;white-space:nowrap;position:absolute;top:50%;left:calc(100% + 12px);transform:translateY(-50%)}.web-app .search-bar-container{z-index:600;width:420px;max-width:calc(100vw - 40px);position:fixed;top:12px;left:50%;transform:translate(-50%)}
