*{box-sizing:border-box;margin:0;padding:0}:root{--bg-primary:#1e1e1e;--bg-secondary:#252526;--bg-tertiary:#2d2d2d;--bg-hover:#3e3e3e;--text-primary:#e0e0e0;--text-secondary:#a0a0a0;--accent:#4fc3f7;--border:#3e3e3e;--thumb-size:180px;--sidebar-width:220px;--topbar-height:44px}html,body{background:var(--bg-primary);height:100%;color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow:hidden}#app{flex-direction:column;height:100%;display:flex}#topbar{background:var(--bg-secondary);border-bottom:1px solid var(--border);height:var(--topbar-height);flex-shrink:0;align-items:center;gap:12px;padding:6px 12px;display:flex}#topbar button{background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;white-space:nowrap;border-radius:4px;padding:5px 12px;font-size:13px}#topbar button:hover:not(:disabled){background:var(--bg-hover)}#topbar button:disabled{opacity:.4;cursor:default}#breadcrumb{color:var(--text-secondary);flex:1;align-items:center;gap:4px;font-size:13px;display:flex;overflow:hidden}#breadcrumb .crumb{cursor:pointer;white-space:nowrap;border-radius:3px;padding:2px 6px}#breadcrumb .crumb:hover{background:var(--bg-hover);color:var(--text-primary)}#breadcrumb .separator{color:var(--text-secondary);opacity:.5}#topbar-actions{align-items:center;gap:10px;display:flex}#image-count{color:var(--text-secondary);font-size:12px}#main{flex:1;display:flex;overflow:hidden}#sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--border);flex-shrink:0;padding:8px 0;overflow-y:auto}#folder-tree{font-size:13px}.tree-item{padding:4px 8px 4px calc(8px + var(--depth,0) * 16px);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;display:flex}.tree-item:hover{background:var(--bg-hover)}.tree-item.active{background:var(--bg-tertiary);color:var(--accent)}.tree-item .icon{text-align:center;flex-shrink:0;width:18px;font-size:14px}.tree-item .name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tree-item .count{color:var(--text-secondary);flex-shrink:0;margin-left:auto;font-size:11px}#gallery{flex:1;padding:12px;position:relative;overflow-y:auto}#thumbnail-grid{grid-template-columns:repeat(auto-fill, minmax(var(--thumb-size), 1fr));gap:8px;display:grid}.thumb-item{aspect-ratio:1;cursor:pointer;background:var(--bg-tertiary);content-visibility:auto;contain-intrinsic-size:var(--thumb-size);border-radius:4px;transition:transform .1s;position:relative;overflow:hidden}.thumb-item:hover{transform:scale(1.03);box-shadow:0 2px 8px #0006}.thumb-item img{object-fit:cover;width:100%;height:100%;display:block}.thumb-item .thumb-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;opacity:0;background:linear-gradient(#0000,#000c);padding:4px 6px;font-size:11px;transition:opacity .15s;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.thumb-item:hover .thumb-name{opacity:1}.thumb-item.loading{color:var(--text-secondary);justify-content:center;align-items:center;font-size:24px;display:flex}.folder-item{aspect-ratio:1;cursor:pointer;background:var(--bg-tertiary);border-radius:4px;flex-direction:column;justify-content:center;align-items:center;gap:8px;transition:transform .1s;display:flex;overflow:hidden}.folder-item:hover{background:var(--bg-hover);transform:scale(1.03)}.folder-item .folder-icon{font-size:48px}.folder-item .folder-name{color:var(--text-secondary);text-align:center;text-overflow:ellipsis;white-space:nowrap;max-width:100%;padding:0 8px;font-size:12px;overflow:hidden}#empty-state{color:var(--text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;inset:0}#empty-state p:first-child{font-size:64px}#empty-state .hint{opacity:.6;font-size:12px}#empty-state.hidden{display:none}#privacy-badge{color:#10b981;white-space:nowrap;background:#10b9811a;border:1px solid #10b98140;border-radius:8px;align-items:center;gap:8px;margin-top:20px;padding:10px 16px;font-size:12px;display:flex}#privacy-badge span:first-child{flex-shrink:0;font-size:18px}.download-chrome-btn{background:var(--accent);color:#111;border-radius:6px;margin-top:12px;padding:10px 24px;font-size:14px;font-weight:600;text-decoration:none;display:inline-block}.download-chrome-btn:hover{opacity:.9}#app-footer{bottom:0;left:var(--sidebar-width);text-align:center;color:var(--text-secondary);opacity:.5;pointer-events:none;z-index:1;padding:8px 12px;font-size:11px;transition:opacity .15s;position:fixed;right:0}#app-footer:hover{opacity:.8}#app-footer a{color:var(--accent);pointer-events:auto;text-decoration:none}#app-footer a:hover{opacity:1;text-decoration:underline}.footer-sep{opacity:.4;margin:0 4px}#credits-toggle{cursor:pointer;pointer-events:auto;opacity:.7;transition:opacity .15s}#credits-toggle:hover{opacity:1;color:var(--accent);text-decoration:underline}#credits-popup{background:var(--bg-secondary);border:1px solid var(--border);white-space:nowrap;pointer-events:auto;border-radius:6px;flex-direction:column;gap:2px;margin-bottom:8px;padding:12px 16px;font-size:11px;line-height:1.8;display:flex;position:absolute;bottom:100%;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0006}#credits-popup.hidden{display:none}.credits-title{color:var(--text-primary);margin-bottom:4px;font-size:11px;font-weight:600}#credits-popup a{color:var(--accent);text-decoration:none}#credits-popup a:hover{text-decoration:underline}#viewer{z-index:1000;background:#000;flex-direction:column;display:flex;position:fixed;inset:0}#viewer.hidden{display:none}#viewer-toolbar{z-index:10;background:#000000d9;align-items:center;gap:16px;padding:8px 16px;display:flex}.toolbar-export-btn{color:var(--accent);cursor:pointer;white-space:nowrap;background:#4fc3f71f;border:1px solid #4fc3f74d;border-radius:4px;flex-shrink:0;padding:5px 12px;font-size:12px;font-weight:500}.toolbar-export-btn:hover{border-color:var(--accent);background:#4fc3f738}.toolbar-separator{background:#ffffff26;flex-shrink:0;width:1px;height:20px}#viewer-filename{color:#ccc;text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}#viewer-counter{color:#888;flex-shrink:0;font-size:12px}#viewer-actions{gap:4px;margin-left:auto;display:flex}#viewer-actions button{color:#ccc;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;display:flex}#viewer-actions button:hover{background:#ffffff1a;border-color:#fff3}#viewer-container{flex:1;align-items:center;transition:margin-right .25s;display:flex;position:relative;overflow:hidden}#viewer-container.exif-open{margin-right:360px}#viewer-image-wrap{flex:1;justify-content:center;align-items:center;height:100%;display:flex;position:relative;overflow:auto}.viewer-img{object-fit:contain;-webkit-user-select:none;user-select:none;will-change:transform, opacity;opacity:0;max-width:100%;max-height:100%;transition:opacity .25s;position:absolute}.viewer-img.active{opacity:1;position:relative}.viewer-img.slide-left{animation:.25s forwards slideFromRight}.viewer-img.slide-right{animation:.25s forwards slideFromLeft}@keyframes slideFromRight{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}@keyframes slideFromLeft{0%{opacity:0;transform:translate(-40px)}to{opacity:1;transform:translate(0)}}.viewer-img.fade-out{opacity:0;transition:opacity .2s}.viewer-img.zoom-actual{cursor:grab;max-width:none;max-height:none;transition:transform .25s cubic-bezier(.34,1.25,.64,1)}.viewer-img.zoom-actual:active{cursor:grabbing}#zoom-indicator{color:#fff;pointer-events:none;z-index:30;opacity:1;background:#000000b3;border-radius:8px;padding:12px 24px;font-size:28px;font-weight:600;transition:opacity .3s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#zoom-indicator.hidden{opacity:0;pointer-events:none}#viewer-spinner{z-index:25;pointer-events:none;opacity:0;transition:opacity .2s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#viewer-spinner.visible{opacity:1}#viewer-spinner:after{content:"";border:3px solid #fff3;border-top-color:#fffc;border-radius:50%;width:36px;height:36px;animation:.7s linear infinite spin;display:block}@keyframes spin{to{transform:rotate(360deg)}}.nav-btn{color:#fff;cursor:pointer;z-index:5;opacity:0;background:#00000080;border:none;justify-content:center;align-items:center;width:60px;height:100px;font-size:48px;transition:opacity .2s;display:flex;position:absolute;top:50%;transform:translateY(-50%)}#viewer-container:hover .nav-btn{opacity:.7}.nav-btn:hover{background:#000000b3;opacity:1!important}#btn-prev{border-radius:0 8px 8px 0;left:0}#btn-next{border-radius:8px 0 0 8px;right:0}#viewer-info{color:#888;background:#000000d9;gap:20px;padding:6px 16px;font-size:12px;display:flex}#viewer-info.hidden{display:none}#exif-bar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer;background:#141414eb;border-top:1px solid #ffffff14;flex-shrink:0;justify-content:space-between;align-items:center;min-height:38px;padding:8px 20px;transition:background .15s;display:flex}#exif-bar:hover{background:#282828f2}#exif-bar-content{color:#bbb;letter-spacing:.3px;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}#exif-bar-content .bar-label{color:#666;margin-right:4px;font-size:11px}#exif-bar-content .bar-value{color:#ddd;margin-right:16px;font-weight:500}#exif-bar-content .bar-separator{color:#444;margin:0 8px}#exif-bar-toggle{color:var(--accent);opacity:.7;flex-shrink:0;margin-left:12px;font-size:11px;transition:opacity .15s}#exif-bar:hover #exif-bar-toggle{opacity:1}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.slideshow-active #btn-viewer-slideshow,.slideshow-active #btn-slideshow{color:var(--accent)!important}#exif-panel{top:var(--topbar-height);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-left:1px solid var(--border);z-index:20;background:#1e1e1ef2;flex-direction:column;width:360px;animation:.2s ease-out exif-slide-in;display:flex;position:absolute;bottom:0;right:0;overflow:hidden}#exif-panel.hidden{display:none}@keyframes exif-slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}#exif-panel-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;font-size:14px;font-weight:600;display:flex}#exif-panel-header button{color:#aaa;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;display:flex}#exif-panel-header button:hover{color:#fff;background:#ffffff1a}#exif-panel-content{flex:1;padding:12px 0;overflow-y:auto}.exif-placeholder{height:100%;color:var(--text-secondary);text-align:center;justify-content:center;align-items:center;padding:20px;font-size:13px;display:flex}.exif-highlight-grid{grid-template-columns:1fr 1fr;gap:2px;margin-bottom:12px;padding:0 12px;display:grid}.exif-hl-item{background:#ffffff08;border-radius:4px;padding:8px 10px}.exif-hl-item .hl-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:2px;font-size:10px}.exif-hl-item .hl-value{color:var(--text-primary);word-break:break-all;font-size:13px;font-weight:500}.exif-hl-item.wide{grid-column:1/-1}.exif-section-group{border-top:1px solid var(--border)}.exif-section-toggle{width:100%;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:8px 16px;font-size:13px;display:flex}.exif-section-toggle:hover{background:#ffffff0a}.exif-section-toggle .section-arrow{color:var(--text-secondary);text-align:center;width:14px;font-size:10px;transition:transform .15s}.exif-section-toggle .section-count{color:var(--text-secondary);background:#ffffff0f;border-radius:8px;margin-left:auto;padding:1px 6px;font-size:11px}.exif-section-body{padding:0 16px 8px}.exif-section-body.hidden{display:none}.exif-row{gap:8px;padding:3px 0;font-size:12px;line-height:1.4;display:flex}.exif-row .row-label{color:var(--text-secondary);flex-shrink:0;min-width:120px}.exif-row .row-value{color:var(--text-primary);word-break:break-all}.exif-export-btn{background:var(--bg-tertiary);border:1px solid var(--border);width:calc(100% - 32px);color:var(--text-primary);cursor:pointer;text-align:center;border-radius:4px;margin:12px 16px;padding:8px;font-size:12px;display:block}.exif-export-btn:hover{background:var(--bg-hover)}.exif-map{border:1px solid var(--border);border-radius:6px;margin:8px 12px;overflow:hidden}.modal{z-index:2000;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal.hidden{display:none}.modal-backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#000000b3;position:absolute;inset:0}.modal-dialog{background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;width:420px;max-width:90vw;position:relative;box-shadow:0 16px 48px #00000080}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-header h3{font-size:15px;font-weight:600}.modal-close-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;font-size:18px;display:flex}.modal-close-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.modal-body{flex-direction:column;gap:14px;padding:20px;display:flex}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;padding:16px 20px;display:flex}.resize-row{align-items:center;gap:10px;display:flex}.resize-row label{color:var(--text-secondary);min-width:60px;font-size:13px}.resize-row input[type=number]{background:var(--bg-primary);border:1px solid var(--border);width:90px;color:var(--text-primary);border-radius:4px;padding:6px 8px;font-size:13px}.resize-row input[type=number]:focus{border-color:var(--accent);outline:none}.resize-row select{background:var(--bg-primary);border:1px solid var(--border);color:var(--text-primary);border-radius:4px;flex:1;padding:6px 8px;font-size:13px}.resize-row select:focus{border-color:var(--accent);outline:none}.resize-row input[type=range]{accent-color:var(--accent);flex:1}.resize-hint{color:var(--text-secondary);margin-left:auto;font-size:11px}.lock-btn{border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;font-size:14px;display:flex}.lock-btn.active{color:var(--accent);border-color:var(--accent);background:#4fc3f71a}.resize-presets{gap:8px;display:flex}.preset-btn{background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;border-radius:4px;flex:1;padding:6px 0;font-size:12px}.preset-btn:hover{background:var(--bg-hover);border-color:var(--accent)}.primary-btn{background:var(--accent);color:#111;cursor:pointer;border:none;border-radius:4px;padding:8px 20px;font-size:13px;font-weight:600}.primary-btn:hover{opacity:.9}.primary-btn:disabled{opacity:.4;cursor:default}#resize-progress{background:var(--bg-primary);border-radius:4px;align-items:center;gap:10px;padding:10px 12px;display:flex}#resize-progress.hidden{display:none}#resize-progress-bar{background:var(--border);border-radius:2px;flex:1;height:4px;position:relative;overflow:hidden}#resize-progress-bar:after{content:"";height:100%;width:var(--progress,0%);background:var(--accent);border-radius:2px;transition:width .2s;position:absolute;top:0;left:0}#resize-progress-text{color:var(--text-secondary);flex-shrink:0;font-size:12px}#quality-row.hidden{display:none}#compare-view{z-index:1500;background:#000;flex-direction:column;display:flex;position:fixed;inset:0}#compare-view.hidden{display:none}#compare-toolbar{border-bottom:1px solid var(--border);z-index:5;background:#000000e6;flex-shrink:0;align-items:center;gap:12px;padding:8px 16px;display:flex}.compare-label{color:#ccc;text-overflow:ellipsis;white-space:nowrap;max-width:300px;font-size:13px;overflow:hidden}.compare-vs{color:var(--accent);text-transform:uppercase;letter-spacing:1px;font-size:11px;font-weight:600}.compare-actions{gap:6px;margin-left:auto;display:flex}.compare-actions button{background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;border-radius:4px;padding:5px 12px;font-size:12px}.compare-actions button:hover{background:var(--bg-hover)}#compare-container{cursor:grab;flex:1;position:relative;overflow:hidden}#compare-container:active{cursor:grabbing}#compare-layer-back,#compare-layer-front{position:absolute;inset:0;overflow:hidden}#compare-layer-front{clip-path:inset(0)}#compare-layer-back img,#compare-layer-front img{-webkit-user-select:none;user-select:none;will-change:transform;transform-origin:0 0;position:absolute}#compare-slider{z-index:10;cursor:col-resize;width:3px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}#compare-slider-line{background:var(--accent);position:absolute;inset:0;box-shadow:0 0 6px #4fc3f780}#compare-slider-handle{background:var(--accent);color:#000;letter-spacing:-2px;-webkit-user-select:none;user-select:none;border-radius:6px;padding:8px 4px;font-size:10px;font-weight:700;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 2px 8px #00000080}#compare-info,#compare-strip{border-top:1px solid var(--border);color:#888;background:#000000e6;flex-shrink:0;align-items:center;gap:8px;padding:8px 16px;font-size:12px;display:flex;overflow-x:auto}#compare-strip .strip-thumb{object-fit:cover;cursor:pointer;opacity:.6;border:2px solid #0000;border-radius:4px;flex-shrink:0;width:56px;height:56px;transition:opacity .15s,border-color .15s}#compare-strip .strip-thumb:hover{opacity:.9}#compare-strip .strip-thumb.active{border-color:var(--accent);opacity:1}#compare-strip .strip-thumb.base{opacity:1;border-color:#f59e0b}#compare-strip .strip-label{color:var(--text-secondary);text-align:center;flex-direction:column;flex-shrink:0;align-items:center;gap:4px;font-size:10px;display:flex}#compare-strip .strip-label .key-hint{background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-secondary);border-radius:3px;padding:1px 5px;font-size:10px}#compare-zoom-level{color:var(--accent);font-weight:500}.thumb-item.compare-selected{outline:3px solid var(--accent);outline-offset:-3px}.thumb-item.compare-selected:after{content:"✓";background:var(--accent);color:#000;border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:11px;font-weight:700;display:flex;position:absolute;top:6px;right:6px}#btn-compare-mode.selecting{color:var(--accent)!important;border-color:var(--accent)!important;background:#4fc3f726!important}#drag-select-box{border:2px solid var(--accent);pointer-events:none;z-index:900;background:#4fc3f71f;border-radius:2px;display:none;position:fixed}#drag-select-box.active{display:block}.thumb-item.drag-hover{outline:2px solid var(--accent);outline-offset:-2px;opacity:.85}#batch-progress{background:var(--bg-primary);border-radius:4px;align-items:center;gap:10px;padding:10px 12px;display:flex}#batch-progress.hidden{display:none}#batch-progress-bar{background:var(--border);border-radius:2px;flex:1;height:4px;position:relative;overflow:hidden}#batch-progress-bar:after{content:"";height:100%;width:var(--progress,0%);background:var(--accent);border-radius:2px;transition:width .2s;position:absolute;top:0;left:0}#batch-progress-text{color:var(--text-secondary);flex-shrink:0;font-size:12px}.checkbox-row{color:var(--text-primary);cursor:pointer;align-items:center;gap:8px;font-size:13px;display:flex}.checkbox-row input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px}
