*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{color:#1a1a1a;-webkit-font-smoothing:antialiased;background:#f3f3f3;font-family:Segoe UI,system-ui,-apple-system,sans-serif;font-size:14px}.login-screen{background:#f3f3f3;justify-content:center;align-items:center;height:100%;display:flex}.login-card{background:#fff;border:1px solid #e5e5e5;border-radius:12px;flex-direction:column;align-items:center;gap:16px;width:360px;padding:48px 40px;display:flex;box-shadow:0 4px 24px #00000012}.login-logo{width:64px;height:64px}.login-title{color:#1a1a1a;margin:0;font-size:22px;font-weight:700}.login-subtitle{color:#888;text-align:center;margin:0;font-size:13px;line-height:1.5}.login-btn{color:#fff;cursor:pointer;background:#0078d4;border:none;border-radius:6px;width:100%;margin-top:8px;padding:11px 0;font-family:inherit;font-size:14px;font-weight:600;transition:background .15s}.login-btn:hover{background:#106ebe}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#d0d0d0;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#b0b0b0}.app-shell{height:100%;display:flex;overflow:hidden}.main{flex-direction:column;flex:1;min-width:0;height:100%;display:flex}.sidebar-backdrop{display:none}@media (width<=768px){.sidebar-backdrop{z-index:199;background:#0006;display:block;position:fixed;inset:0}.login-card{width:90vw;padding:36px 24px}}.sidebar{background:#fafafa;border-right:1px solid #e5e5e5;flex-direction:column;width:250px;min-width:250px;height:100%;display:flex;overflow:hidden}.sidebar-header{border-bottom:1px solid #e5e5e5;flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.ms-logo{align-items:center;gap:10px;display:flex}.brand-logo{flex-shrink:0;width:40px;height:40px}.app-name{color:#1a1a1a;letter-spacing:.01em;font-size:18px;font-weight:700}.sidebar-search{border-bottom:1px solid #e5e5e5;flex-shrink:0;padding:10px 12px;position:relative}.sidebar-search input{color:#1a1a1a;box-sizing:border-box;background:#fff;border:1px solid #ddd;border-radius:6px;outline:none;width:100%;padding:6px 28px 6px 10px;font-family:inherit;font-size:13px}.sidebar-search input:focus{border-color:#0078d4}.search-clear{cursor:pointer;color:#aaa;background:0 0;border:none;padding:0 2px;font-size:16px;line-height:1;position:absolute;top:50%;right:20px;transform:translateY(-50%)}.search-clear:hover{color:#555}.job-label mark{color:inherit;background:#fff3b0;border-radius:2px;padding:0 1px}.job-list{flex:1;min-height:0;overflow:hidden}.no-results{color:#999;padding:12px 16px;font-size:13px}.loading-progress{padding:6px 16px;font-size:11px}.job-item{cursor:pointer;color:#444;-webkit-user-select:none;user-select:none;border-left:3px solid #0000;align-items:center;gap:8px;padding:9px 16px;font-size:13px;font-weight:400;display:flex}.job-item:hover{color:#1a1a1a;background:#f0f0f0}.job-item.active{color:#0078d4;background:#e8f0fb;border-left-color:#0078d4;font-weight:600}.job-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.folder-item{cursor:pointer;color:#888;-webkit-user-select:none;user-select:none;border-left:3px solid #0000;align-items:center;gap:6px;padding:5px 16px 5px 32px;font-size:12px;display:flex}.folder-item:hover{color:#555;background:#f0f0f0}.folder-item.active{color:#0078d4;background:#f0f5ff;border-left-color:#0078d4;font-weight:600}.sidebar-footer{color:#888;border-top:1px solid #e5e5e5;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 16px;font-size:12px;display:flex}.sign-out{cursor:pointer;color:#0078d4}.sign-out:hover{text-decoration:underline}@media (width<=768px){.sidebar{z-index:200;width:280px;min-width:280px;height:100%;transition:transform .25s;position:fixed;top:0;left:0;transform:translate(-100%);box-shadow:4px 0 24px #00000026}.sidebar--open{transform:translate(0)}}.photo-grid-wrapper{flex-direction:column;flex:1;min-height:0;display:flex}.photo-scroll-area{flex:1;min-height:0;overflow-y:auto}.photo-grid{grid-template-columns:repeat(auto-fill,200px);align-content:start;justify-items:start;gap:16px;padding:24px;display:grid}.photo-list{flex-direction:column;gap:4px;padding:12px 20px;display:flex}.photo-card.list{cursor:pointer;background:#fff;border:1px solid #e5e5e5;border-radius:6px;align-items:center;gap:12px;padding:8px 12px;transition:background .1s;display:flex}.photo-card.list:hover{background:#f5f5f5}.photo-card.list.selected{background:#e8f0fb;border-color:#0078d4}.photo-card.list .photo-thumb{background:#f0f0f0;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;display:flex;overflow:hidden}.photo-card.list .thumb-img{object-fit:cover;width:44px;height:44px;display:block}.photo-card.list .thumb-icon{font-size:20px}.photo-card.list .photo-info{flex:1;min-width:0}.photo-card.grid{cursor:pointer;background:#fff;border:1px solid #ebebeb;border-radius:8px;width:200px;transition:border-color .15s,box-shadow .15s,transform .12s;overflow:hidden}.photo-card.grid:hover{border-color:#0078d4;transform:translateY(-2px);box-shadow:0 4px 16px #0000001a}.photo-card.grid.selected{background:#e8f0fb;border-color:#0078d4}.photo-card.grid .photo-thumb{background:#f0f0f0;justify-content:center;align-items:center;width:200px;height:150px;display:flex;position:relative;overflow:hidden}.photo-card.grid .thumb-img{object-fit:cover;width:200px;height:150px;display:block}.photo-card.grid .thumb-icon{font-size:36px}.thumb-generating{color:#aaa;text-align:center;padding:4px;font-size:10px;line-height:1.3}.info-btn{color:#ffffffe6;cursor:pointer;opacity:0;background:#00000059;border:none;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-family:Georgia,serif;font-size:12px;font-style:italic;font-weight:700;line-height:1;transition:opacity .15s,background .15s;display:flex;position:absolute;bottom:6px;right:6px}.photo-card.grid:hover .info-btn{opacity:1}.info-btn:hover{background:#0009!important}.photo-card.grid .photo-info{padding:9px 10px}.photo-name{color:#1a1a1a;white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.photo-meta{color:#b0b0b0;margin-top:3px;font-size:11px}.grid-empty{color:#aaa;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;font-size:14px;display:flex}.empty-icon{font-size:40px}.grid-status{color:#aaa;border-top:1px solid #e5e5e5;flex-shrink:0;padding:8px 20px;font-size:11px}.folder-card{cursor:pointer;box-sizing:border-box;background:#fafafa;border:1px solid #e5e5e5;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:10px;width:200px;height:150px;padding:12px;transition:background .15s,box-shadow .15s,transform .15s;display:flex}.folder-card:hover{background:#f0f5ff;border-color:#0078d4;transform:translateY(-2px);box-shadow:0 2px 8px #0078d41f}.folder-card-icon{font-size:40px;line-height:1}.folder-card-name{color:#333;text-align:center;text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:12px;font-weight:500;overflow:hidden}.grid-section-label{color:#aaa;text-transform:uppercase;letter-spacing:.05em;padding:16px 24px 8px;font-size:11px;font-weight:600}@media (width<=768px){.photo-grid{grid-template-columns:repeat(2,1fr);gap:10px;padding:12px}.photo-card.grid{width:100%}.photo-thumb{height:130px}.folder-card{width:100%;height:110px}.photo-list{padding:8px 12px}.grid-empty{padding:40px 20px}}.topbar{background:#fff;border-bottom:1px solid #e5e5e5;flex-shrink:0;align-items:center;gap:16px;height:64px;min-height:64px;padding:0 20px;display:flex}.topbar-context{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.topbar-eyebrow{color:#999;letter-spacing:.02em;text-transform:uppercase;font-size:11px}.topbar-title{align-items:baseline;gap:10px;display:flex}.topbar-title-text{color:#1a1a1a;white-space:nowrap;text-overflow:ellipsis;font-size:17px;font-weight:600;overflow:hidden}.topbar-title-hint{color:#bbb;font-size:15px;font-style:italic}.topbar-count{color:#999;white-space:nowrap;font-size:12px;font-weight:400}.topbar-actions{flex-shrink:0;gap:4px;display:flex}.topbar-mobile-search{display:none}.topbar-hamburger{color:#555;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:4px 6px;font-size:20px;line-height:1;display:none}.upload-btn{color:#fff;cursor:pointer;background:#0078d4;border:1px solid #0078d4;border-radius:6px;padding:5px 14px;font-size:13px;font-weight:500;line-height:1.4}.upload-btn:hover{background:#006cbd;border-color:#006cbd}.view-btn{cursor:pointer;color:#888;background:0 0;border:1px solid #ddd;border-radius:6px;padding:5px 9px;font-size:14px;line-height:1}.view-btn:hover{color:#333;background:#f5f5f5}.view-btn.active{color:#0078d4;background:#e8f0fb;border-color:#0078d4}@media (width<=768px){.topbar-hamburger{display:block}.topbar{gap:8px;height:56px;min-height:56px;padding:0 12px}.topbar-title-text{font-size:14px}.topbar-eyebrow,.view-btn{display:none}.topbar-mobile-search{flex:1;min-width:0;display:block;position:relative}.topbar-search-input{color:#1a1a1a;box-sizing:border-box;background:#f5f5f5;border:1px solid #ddd;border-radius:20px;outline:none;width:100%;padding:7px 12px;font-family:inherit;font-size:14px}.topbar-search-input:focus{background:#fff;border-color:#0078d4}.topbar-search-results{z-index:300;background:#fff;border:1px solid #e5e5e5;border-radius:10px;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow:hidden;box-shadow:0 8px 24px #0000001f}.topbar-search-result{color:#333;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #f0f0f0;padding:12px 16px;font-size:14px;overflow:hidden}.topbar-search-result:last-child{border-bottom:none}.topbar-search-result:active{background:#f0f5ff}.topbar-context{display:none}.topbar-actions{flex-shrink:0;gap:4px}.upload-btn{padding:5px 10px;font-size:12px}}.detail-pane{background:#fff;border-left:1px solid #e5e5e5;flex-direction:column;width:280px;min-width:280px;height:100%;display:flex;overflow:hidden}.detail-header{border-bottom:1px solid #e5e5e5;flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.detail-title{color:#888;text-transform:uppercase;letter-spacing:.05em;font-size:12px;font-weight:600}.detail-close{cursor:pointer;color:#aaa;background:0 0;border:none;border-radius:4px;padding:2px 4px;font-size:16px;line-height:1}.detail-close:hover{color:#555;background:#f0f0f0}.detail-body{flex-direction:column;flex:1;gap:24px;padding:20px 16px;display:flex;overflow-y:auto}.detail-preview{background:#f8f8f8;border-radius:8px;flex-direction:column;align-items:center;gap:10px;padding:20px 0;display:flex}.detail-preview-icon{font-size:48px;line-height:1}.detail-preview-name{color:#1a1a1a;text-align:center;word-break:break-all;padding:0 12px;font-size:12px;font-weight:600}.detail-section{flex-direction:column;gap:10px;display:flex}.detail-section-label{color:#bbb;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid #f0f0f0;padding-bottom:6px;font-size:11px;font-weight:700}.detail-section-body{flex-direction:column;gap:10px;display:flex}.detail-field-label{color:#aaa;margin-bottom:2px;font-size:11px}.detail-field-value{color:#333;word-break:break-all;font-size:13px}.detail-field-value.mono{color:#777;font-family:Consolas,Courier New,monospace;font-size:11px}.detail-loading,.detail-no-exif{color:#bbb;font-size:12px;font-style:italic}.detail-more{margin-top:4px}.detail-more summary{color:#0078d4;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0;font-size:12px;list-style:none}.detail-more summary::-webkit-details-marker{display:none}.detail-more summary:before{content:"› "}.detail-more[open] summary:before{content:"‹ "}.detail-more-body{flex-direction:column;gap:10px;margin-top:10px;display:flex}.detail-actions{border-top:1px solid #e5e5e5;flex-direction:column;flex-shrink:0;gap:8px;padding:16px;display:flex}.detail-btn{color:#333;cursor:pointer;background:#fff;border:1px solid #ddd;border-radius:6px;width:100%;padding:9px 0;font-family:inherit;font-size:13px;font-weight:500;transition:background .15s,border-color .15s}.detail-btn:hover{background:#f5f5f5;border-color:#ccc}.detail-btn:disabled{opacity:.5;cursor:default}.detail-btn.primary{color:#fff;background:#0078d4;border-color:#0078d4}.detail-btn.primary:hover{background:#106ebe;border-color:#106ebe}.lightbox-backdrop{z-index:1000;background:#000000d9;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lightbox{background:#1a1a1a;border-radius:10px;flex-direction:column;width:96vw;max-width:1800px;height:94vh;display:flex;overflow:hidden;box-shadow:0 24px 80px #0009}.lightbox-header{background:#111;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 16px;display:flex}.lightbox-name{color:#e0e0e0;white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:500;overflow:hidden}.lightbox-header-actions{flex-shrink:0;gap:8px;display:flex}.lightbox-body{flex:1;align-items:center;min-height:0;display:flex;position:relative}.lightbox-img-wrap{flex:1;justify-content:center;align-items:center;min-width:0;height:100%;padding:16px;display:flex}.lightbox-img{object-fit:contain;border-radius:4px;max-width:100%;max-height:100%}.lb-loading{color:#888;font-size:14px}.lb-non-image{color:#aaa;flex-direction:column;align-items:center;gap:16px;font-size:14px;display:flex}.lb-nav{color:#aaa;cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:100%;font-size:36px;transition:color .15s,background .15s;display:flex}.lb-nav:hover{color:#fff;background:#ffffff0f}.lightbox-footer{color:#777;background:#111;flex-shrink:0;justify-content:space-between;align-items:center;padding:6px 16px;font-size:12px;display:flex}.lb-btn{color:#ccc;cursor:pointer;background:0 0;border:1px solid #444;border-radius:6px;padding:6px 12px;font-size:12px;transition:background .15s,color .15s}.lb-btn:hover{color:#fff;background:#ffffff1a}.lb-btn.close{border-color:#0000;padding:4px 8px;font-size:16px}.lb-btn.close:hover{color:#fff;background:#ffffff1a}.lb-zoom-controls{border:1px solid #444;border-radius:6px;align-items:center;gap:4px;display:flex;overflow:hidden}.lb-zoom-btn{border:none;border-radius:0;padding:6px 10px;font-size:16px;line-height:1}.lb-zoom-level{color:#ccc;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:40px;font-size:12px}.lb-zoom-level:hover{color:#fff}.lightbox-img-wrap.zoomed{cursor:grab;overflow:hidden}.lightbox-img-wrap.zoomed:active{cursor:grabbing}.lb-zoom-hint{color:#555;font-size:11px}.upload-backdrop{z-index:300;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.upload-panel{background:#fff;border-radius:12px;flex-direction:column;width:520px;max-width:95vw;max-height:85vh;display:flex;overflow:hidden;box-shadow:0 20px 60px #0000004d}.upload-header{border-bottom:1px solid #e5e5e5;flex-shrink:0;justify-content:space-between;align-items:flex-start;padding:20px 20px 16px;display:flex}.upload-title{color:#1a1a1a;font-size:16px;font-weight:600}.upload-dest{color:#888;align-items:center;gap:8px;margin-top:2px;font-size:12px;display:flex}.upload-change-job{color:#0078d4;cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;font-size:11px}.upload-change-job:hover{text-decoration:underline}.upload-close{color:#aaa;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0;font-size:16px;line-height:1}.upload-close:hover{color:#333}.upload-dropzone{text-align:center;cursor:pointer;border:2px dashed #ddd;border-radius:10px;flex-shrink:0;margin:16px;padding:32px 20px;transition:border-color .15s,background .15s}.upload-dropzone:hover,.upload-dropzone.dragging{background:#f0f5ff;border-color:#0078d4}.upload-dropzone-icon{color:#0078d4;margin-bottom:10px;font-size:32px}.upload-dropzone-text{color:#333;margin-bottom:6px;font-size:14px;font-weight:500}.upload-dropzone-hint{color:#aaa;font-size:12px}.upload-file-list{flex:1;min-height:0;padding:0 16px 8px;overflow-y:auto}.upload-file-item{border-bottom:1px solid #f0f0f0;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;display:flex}.upload-file-item:last-child{border-bottom:none}.upload-file-name{color:#333;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.upload-file-item.done .upload-file-name{color:#888}.upload-file-item.error .upload-file-name{color:#c00}.upload-file-right{flex-shrink:0;justify-content:flex-end;align-items:center;width:120px;display:flex}.upload-status-text{color:#aaa;font-size:12px}.upload-progress-bar{background:#e5e5e5;border-radius:2px;width:100px;height:4px;overflow:hidden}.upload-progress-fill{background:#0078d4;border-radius:2px;height:100%;transition:width .1s}.upload-status-icon{font-size:14px;font-weight:600}.upload-status-icon.done{color:#22a855}.upload-status-icon.error{color:#c00;cursor:help}.upload-footer{border-top:1px solid #e5e5e5;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.upload-summary{color:#666;font-size:13px}.upload-done-btn{color:#fff;cursor:pointer;background:#0078d4;border:none;border-radius:6px;padding:7px 20px;font-size:13px;font-weight:500}.upload-done-btn:hover{background:#006cbd}.upload-step{flex-direction:column;gap:8px;padding:16px 20px;display:flex;overflow:hidden}.upload-step-label{color:#1a1a1a;flex-direction:column;gap:2px;font-size:13px;font-weight:600;display:flex}.upload-step-hint{color:#888;font-size:12px;font-weight:400}.upload-text-input{box-sizing:border-box;color:#1a1a1a;border:1px solid #ddd;border-radius:6px;outline:none;width:100%;padding:7px 10px;font-family:inherit;font-size:13px}.upload-text-input:focus{border-color:#0078d4}.upload-text-input.error{border-color:#d93025}.upload-field-error{color:#d93025;font-size:11px}.upload-continue-btn{color:#fff;cursor:pointer;background:#0078d4;border:none;border-radius:6px;align-self:flex-start;padding:7px 20px;font-family:inherit;font-size:13px;font-weight:500}.upload-continue-btn:hover{background:#006cbd}.upload-job-list{border:1px solid #e5e5e5;border-radius:6px;flex-shrink:0;max-height:220px;overflow-y:auto}.upload-job-item{color:#333;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #f0f0f0;padding:8px 12px;font-size:13px;overflow:hidden}.upload-job-item:last-child{border-bottom:none}.upload-job-item:hover{color:#0078d4;background:#f0f5ff}.upload-job-empty{color:#aaa;text-align:center;padding:12px;font-size:13px}.upload-newjob-check{color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;margin-top:4px;font-size:13px;display:flex}
