*{margin:0;padding:0;box-sizing:border-box}:root{--primary: #e91e63;--primary-hover: #c2185b;--success: #27ae60;--danger: #e74c3c;--warning: #f39c12;--bg: #faf8f6;--card-bg: #ffffff;--text: #2c3e50;--text-light: #7f8c8d;--border: #e8e2dc;--selected-border: #e91e63;--selected-bg: rgba(233, 30, 99, .06)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang TC,Microsoft JhengHei,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh}#app{min-height:100vh}.page{max-width:1200px;margin:0 auto;padding:20px}.page-header{text-align:center;padding:40px 20px 20px}.page-header h1{font-size:1.8em;margin-bottom:8px}.page-header p{color:var(--text-light)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 24px;border:none;border-radius:8px;font-size:1em;font-weight:500;cursor:pointer;transition:all .2s;font-family:inherit}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:disabled{background:#b0c4de;cursor:not-allowed}.btn-success{background:var(--success);color:#fff}.btn-success:hover{background:#219a52}.btn-outline{background:transparent;border:2px solid var(--border);color:var(--text)}.btn-outline:hover{border-color:var(--primary);color:var(--primary)}.btn-sm{padding:6px 14px;font-size:.9em}.card{background:var(--card-bg);border-radius:12px;box-shadow:0 2px 8px #0000000f;padding:24px}.tabs{display:flex;gap:4px;background:var(--card-bg);border-radius:12px;padding:4px;box-shadow:0 2px 8px #0000000f;overflow-x:auto;-webkit-overflow-scrolling:touch}.tab{flex:1;padding:12px 16px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:.9em;font-weight:500;color:var(--text-light);transition:all .2s;white-space:nowrap;font-family:inherit;text-align:center}.tab:hover{background:var(--bg)}.tab.active{background:var(--primary);color:#fff}.tab .badge{display:inline-block;font-size:.75em;margin-left:4px;padding:1px 6px;border-radius:10px;background:#0000001a}.tab.active .badge{background:#ffffff4d}.tab.done{color:var(--success)}.tab.done.active{background:var(--success);color:#fff}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;padding:16px 0}.photo-item{position:relative;border-radius:8px;overflow:hidden;cursor:pointer;border:3px solid transparent;transition:all .2s;aspect-ratio:1;background:#eee}.photo-item img{width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity .3s}.photo-item img.loaded{opacity:1}.photo-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#f0ece8}.spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}.spinner-light{border-color:#fff3;border-top-color:#fff}@keyframes spin{to{transform:rotate(360deg)}}.slide-spinner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:#ffffffb3;font-size:.9em;z-index:1}.photo-item:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026}.photo-item.selected{border-color:var(--selected-border);background:var(--selected-bg)}.photo-item .check-mark{position:absolute;top:8px;right:8px;width:32px;height:32px;border-radius:50%;background:#0000004d;border:2px solid white;color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;opacity:.7;cursor:pointer;transition:all .2s;z-index:2}.photo-item .check-mark:hover{opacity:1;transform:scale(1.1)}.photo-item.selected .check-mark{opacity:1;background:var(--primary);border-color:var(--primary)}.photo-item .photo-label{position:absolute;bottom:0;left:0;right:0;padding:4px;background:#00000080;color:#fff;font-size:.75em;text-align:center}.lightbox-overlay{position:fixed;inset:0;background:#000000eb;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center}.carousel-viewport{width:90vw;max-height:75vh;overflow:hidden;position:relative}.carousel-track{display:flex;will-change:transform}.carousel-slide{flex:0 0 100%;width:100%;display:flex;align-items:center;justify-content:center;max-height:75vh;padding:0 20px}.carousel-slide img{max-width:90vw;max-height:75vh;object-fit:contain;border-radius:4px;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.zoom-hint{position:absolute;bottom:80px;left:50%;transform:translate(-50%);background:#0009;color:#fff;padding:6px 14px;border-radius:16px;font-size:.8em;pointer-events:none;z-index:1001}.lightbox-controls{display:flex;align-items:center;gap:16px;margin-top:16px}.lightbox-nav{position:absolute;top:50%;transform:translateY(-50%);background:#ffffff26;border:none;color:#fff;font-size:2em;width:50px;height:50px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}.lightbox-nav:hover{background:#ffffff4d}.lightbox-nav.prev{left:20px}.lightbox-nav.next{right:20px}.lightbox-close{position:absolute;top:16px;right:20px;background:none;border:none;color:#fff;font-size:1.8em;cursor:pointer}.lightbox-info{color:#ffffffb3;font-size:.9em}.lightbox-count{font-size:.9em;font-weight:600}.lightbox-count.met{color:var(--success)}.lightbox-count.unmet{color:var(--warning)}.toast-msg,.lightbox-toast{left:50%;transform:translate(-50%);background:#e74c3ce6;color:#fff;padding:10px 20px;border-radius:8px;font-size:.95em;white-space:nowrap}.toast-msg{position:fixed;top:70px;z-index:200}.lightbox-toast{position:absolute;top:60px;z-index:1001}.selection-bar{position:fixed;bottom:0;left:0;right:0;background:var(--card-bg);border-top:1px solid var(--border);padding:12px 20px;display:flex;align-items:center;justify-content:center;gap:16px;z-index:100;box-shadow:0 -2px 10px #00000014}.selection-bar .count{font-weight:600;font-size:1.05em}.selection-bar .count.met{color:var(--success)}.selection-bar .count.unmet{color:var(--warning)}.jump-tool{display:flex;align-items:center;gap:8px;margin-bottom:12px}.jump-tool input{padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-size:.9em;width:120px;font-family:inherit}.login-container{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:20px;background:linear-gradient(135deg,#fce4ec,#faf8f6,#fff3e0)}.login-card{background:var(--card-bg);border-radius:16px;padding:40px;box-shadow:0 4px 20px #00000014;text-align:center;width:100%;max-width:400px}.login-card h1{font-size:1.6em;margin-bottom:8px}.login-card .subtitle{color:var(--text-light);margin-bottom:30px}.login-icon{margin-bottom:16px;color:var(--primary)}.input-group{text-align:left;margin-bottom:16px}.input-group label{display:block;font-size:.85em;font-weight:600;margin-bottom:6px;color:var(--text)}.login-card input[type=text],.login-card input[type=password]{width:100%;padding:12px 16px;border:2px solid var(--border);border-radius:8px;font-size:1em;font-family:inherit;transition:border-color .2s}.login-card input:focus{outline:none;border-color:var(--primary)}.error-banner{background:#ffeaea;color:var(--danger);padding:10px 16px;border-radius:8px;font-size:.9em;margin-bottom:16px}.btn-login{width:100%;background:var(--primary);color:#fff;padding:14px;font-size:1.05em;font-weight:600;margin-top:8px}.btn-login:hover{background:var(--primary-hover)}.btn-login:disabled{background:#ccc;cursor:not-allowed}.login-footer{margin-top:24px;color:var(--text-light);font-size:.85em}.error-msg{color:var(--danger);font-size:.9em;margin-bottom:12px}.hint{font-size:.8em;color:var(--text-light);margin:6px 0 0;text-align:left}.success-msg{color:var(--success);font-size:.9em}.navbar{background:var(--card-bg);border-bottom:1px solid var(--border);padding:12px 20px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:50}.navbar .brand{font-weight:600;font-size:1.1em}.navbar .user-info{display:flex;align-items:center;gap:12px;color:var(--text-light)}.review-section{margin-bottom:32px}.review-section h2{font-size:1.2em;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--border)}.review-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}.review-grid img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px}@media(max-width:600px){.navbar{flex-wrap:wrap;gap:8px;padding:10px 12px}.navbar .brand{font-size:1em}.navbar .user-info{gap:8px;font-size:.85em}.photo-grid{grid-template-columns:repeat(3,1fr);gap:6px}.tabs{gap:2px;padding:3px}.tab{padding:10px 8px;font-size:.8em}.page{padding:12px}.selection-bar{padding:10px 12px;gap:8px}.lightbox-nav{width:36px;height:36px;font-size:1.4em}.lightbox-nav.prev{left:8px}.lightbox-nav.next{right:8px}}.admin-grid{display:grid;gap:16px}.progress-table{width:100%;border-collapse:collapse;font-size:.9em}.progress-table th,.progress-table td{padding:10px 12px;text-align:center;border-bottom:1px solid var(--border)}.progress-table th{background:var(--bg);font-weight:600}.progress-table td:first-child{text-align:left;font-weight:500}.guide-overlay{position:fixed;inset:0;background:#00000080;z-index:500;display:flex;align-items:center;justify-content:center;padding:20px}.guide-modal{background:var(--card-bg);border-radius:16px;padding:32px;max-width:480px;width:100%;max-height:85vh;overflow-y:auto;position:relative;box-shadow:0 8px 30px #00000026}.guide-close{position:absolute;top:12px;right:16px;background:none;border:none;font-size:1.6em;color:var(--text-light);cursor:pointer}.guide-modal h2{font-size:1.4em;margin-bottom:12px}.guide-intro{color:var(--text-light);font-size:.95em;line-height:1.7;margin-bottom:20px}.guide-categories{display:flex;flex-direction:column;gap:12px;margin-bottom:20px}.guide-cat-item{background:var(--bg);border-radius:10px;padding:14px 16px}.guide-cat-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.guide-cat-name{font-weight:600;font-size:1em}.guide-cat-badge{background:var(--primary);color:#fff;font-size:.8em;font-weight:500;padding:2px 10px;border-radius:12px}.guide-cat-desc{font-size:.85em;color:var(--text-light)}.guide-tips{background:#fff8e1;border-radius:10px;padding:14px 16px}.guide-tips h3{font-size:.95em;margin-bottom:8px}.guide-tips ul{list-style:none;padding:0}.guide-tips li{font-size:.9em;padding:3px 0;color:var(--text)}.guide-tips li:before{content:"•";color:var(--warning);font-weight:700;margin-right:8px}.has-selection-bar{padding-bottom:80px}
