:root{font-family:"Yu Gothic UI",system-ui,sans-serif;color:#18332e;background:#f4f7f5}*{box-sizing:border-box}body{margin:0}header{min-height:68px;background:#fff;border-bottom:1px solid #dce6e1;display:flex;align-items:center;justify-content:space-between;padding:14px max(24px,5vw);gap:24px}header>a{font-weight:800;color:#153d34;text-decoration:none;font-size:20px;white-space:nowrap}nav{display:flex;gap:16px;flex-wrap:wrap;justify-content:flex-end}nav a{color:#365e55;text-decoration:none;font-size:14px}main{max-width:1180px;margin:0 auto;padding:42px 24px}.hero{background:linear-gradient(135deg,#0d604f,#27806c);color:#fff;padding:42px;border-radius:20px}.hero h1{font-size:36px;margin:10px 0}.badge{display:inline-block;background:#d9f56b;color:#234400;padding:6px 10px;border-radius:99px;font-weight:700}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:22px}.stats>*{background:#fff;padding:24px;border-radius:14px;text-decoration:none;color:inherit;box-shadow:0 3px 14px #163b2b10}.stats strong{display:block;font-size:34px}.stats span{color:#60776f}.export-stats{grid-template-columns:repeat(5,1fr)}.panel{background:#fff;padding:24px;border-radius:16px;box-shadow:0 4px 18px #163b2b12;margin-top:24px}.panel h2,.panel h3{margin-top:0}.panel-head,.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.button-link{display:inline-block;background:#0d6a57;color:#fff;text-decoration:none;padding:11px 16px;border-radius:9px;white-space:nowrap}.mini-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:18px}.mini-stats>div{background:#f4f7f5;padding:18px;border-radius:12px}.mini-stats strong{display:block;font-size:28px}.mini-stats span{color:#60776f}.tabs{display:flex;flex-wrap:wrap;gap:8px}.tabs a{padding:9px 12px;border-radius:99px;background:#fff;border:1px solid #cad8d2;color:#365e55;text-decoration:none}.tabs a.active{background:#0d6a57;color:#fff;border-color:#0d6a57}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;margin-top:20px}.card{background:#fff;padding:16px;border-radius:16px;box-shadow:0 4px 18px #163b2b12}.images img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:12px}.images a{display:block;margin:9px 0;color:#176c5b}.meta{font-size:13px;color:#657a73;margin:8px 0}.candidates{padding-left:22px}.candidates span{color:#657a73;font-size:13px}form{display:grid;gap:8px}input,select,button{font:inherit;padding:11px;border:1px solid #cad8d2;border-radius:9px;background:#fff}button{cursor:pointer}.primary{background:#0d6a57;color:#fff;border:0}.secondary{display:grid;grid-template-columns:1fr 1fr;gap:8px}.empty{background:#fff;padding:40px;border-radius:14px;text-align:center}.notice{background:#fff6d9;border:1px solid #ead389;padding:16px;border-radius:12px;margin:16px 0}.compact-form{display:block}.batch-list{display:grid;gap:14px}.batch-card{border:1px solid #e3ebe7;border-radius:14px;padding:18px;display:grid;gap:14px}.batch-card h3{margin-bottom:6px}.batch-card p{margin:0 0 8px;color:#657a73}.batch-counts{display:flex;gap:8px;flex-wrap:wrap}.batch-counts span{background:#f4f7f5;padding:7px 10px;border-radius:99px;font-size:13px}.batch-actions{display:grid;grid-template-columns:1fr 2fr;gap:12px}.batch-actions form:last-child{grid-template-columns:1fr auto}.status-pill{display:inline-block;padding:4px 8px;border-radius:99px;background:#e9efec;font-size:12px}.status-cloud_confirmed,.status-verified{background:#dff5e9;color:#155f3f}.status-failed,.status-missing,.status-hash_mismatch,.status-partial{background:#ffe3e0;color:#8a2b24}.status-running{background:#fff2cc;color:#785d00}table{width:100%;border-collapse:collapse;background:#fff;margin:18px 0}th,td{text-align:left;padding:12px;border-bottom:1px solid #e3ebe7;vertical-align:top}code{white-space:pre-wrap;word-break:break-all}.inline-form{grid-template-columns:repeat(4,1fr)}@media(max-width:900px){.export-stats{grid-template-columns:repeat(2,1fr)}.batch-actions{grid-template-columns:1fr}.batch-actions form:last-child{grid-template-columns:1fr}.mini-stats{grid-template-columns:1fr}}@media(max-width:700px){header{height:auto;padding:16px;align-items:flex-start;gap:12px;flex-direction:column}nav{gap:12px;justify-content:flex-start}.stats{grid-template-columns:1fr 1fr}.hero{padding:26px}.hero h1{font-size:28px}.inline-form{grid-template-columns:1fr}.page-head,.panel-head{flex-direction:column}table{display:block;overflow:auto}}

/* Stage 3: photo-level review */
.photo-review-list{display:grid;gap:22px;margin-top:22px}.photo-review-card{background:#fff;border-radius:18px;box-shadow:0 4px 18px #163b2b12;padding:18px;display:grid;gap:18px}.photo-review-main{display:grid;grid-template-columns:240px minmax(0,1fr);gap:18px;align-items:start}.photo-main-link{position:relative;display:block;width:240px;max-width:100%;text-decoration:none}.photo-main-image{display:block;width:100%;height:180px;max-height:180px;object-fit:contain;background:#edf2ef;border-radius:14px}.photo-enlarge-hint{position:absolute;right:8px;bottom:8px;padding:5px 8px;border-radius:99px;background:#18332ed9;color:#fff;font-size:12px;line-height:1}.photo-meta{display:flex;flex-direction:column;gap:8px;color:#60776f}.photo-meta strong{font-size:20px;color:#18332e}.photo-state{display:inline-flex;align-self:flex-start;padding:6px 10px;border-radius:99px;background:#e9efec;font-weight:700;font-size:13px}.photo-state-pending{background:#fff2cc;color:#785d00}.photo-state-confirmed{background:#dff5e9;color:#155f3f}.photo-state-unregistered-person,.photo-state-mixed{background:#efe4ff;color:#5a2a87}.photo-state-not-a-face,.photo-state-no-face{background:#edf0f2;color:#4b5961}.photo-review-form{gap:16px}.face-selector-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(145px,1fr));gap:12px}.face-choice{position:relative;display:grid;gap:6px;padding:10px;border:2px solid #dce6e1;border-radius:13px;background:#fafcfb;cursor:pointer}.face-choice:has(input:checked){border-color:#0d6a57;background:#f0fbf7}.face-choice input{position:absolute;top:8px;left:8px;width:20px;height:20px;accent-color:#0d6a57}.face-choice img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:9px}.face-choice-title{font-weight:700}.face-child{font-size:13px;color:#176c5b}.face-choice small{color:#657a73}.bulk-controls{display:grid;grid-template-columns:minmax(140px,1fr) minmax(180px,1.3fr) repeat(4,minmax(130px,auto));gap:8px;align-items:stretch}.no-face-message{background:#f4f7f5;padding:18px;border-radius:12px;color:#60776f}.secondary-three{grid-template-columns:repeat(3,1fr)}.status-pending{background:#fff2cc;color:#785d00}.status-confirmed{background:#dff5e9;color:#155f3f}.status-unregistered_person{background:#efe4ff;color:#5a2a87}.status-not_a_face{background:#edf0f2;color:#4b5961}@media(max-width:1050px){.bulk-controls{grid-template-columns:1fr 1fr}.photo-review-main{grid-template-columns:220px minmax(0,1fr)}.photo-main-link{width:220px}.photo-main-image{height:165px;max-height:165px}}@media(max-width:700px){.photo-review-main{grid-template-columns:1fr}.photo-main-link{width:100%;max-width:320px;margin:0 auto}.photo-main-image{height:220px;max-height:220px}.bulk-controls{grid-template-columns:1fr}.secondary-three{grid-template-columns:1fr}}

/* Stage 4: individual face decisions and staff-confirmed reference learning */
.learning-tools{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,430px);gap:18px;align-items:center;background:#eaf6f1;border:1px solid #b9daca;padding:18px;border-radius:14px;margin:16px 0}.learning-tools p{margin:5px 0 0;color:#4f6d64}.rejudge-form{grid-template-columns:1fr auto}.face-decision-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px}.face-decision-card{display:grid;gap:8px;padding:12px;border:2px solid #dce6e1;border-radius:14px;background:#fafcfb}.face-decision-card img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:10px}.face-decision-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.decision-label{font-size:13px;font-weight:700;color:#365e55}.face-decision-card small{color:#657a73;min-height:34px}.photo-save-controls{display:grid;grid-template-columns:minmax(180px,1fr) minmax(260px,auto);gap:10px;max-width:720px}.photo-main-link{width:420px!important;height:315px!important;overflow:hidden!important;background:#edf2ef!important;border-radius:14px!important}.photo-main-image{width:420px!important;height:315px!important;min-width:420px!important;min-height:315px!important;max-width:420px!important;max-height:315px!important;object-fit:cover!important;object-position:center!important}.photo-review-main{grid-template-columns:minmax(340px,420px) minmax(0,1fr)!important}@media(max-width:900px){.learning-tools{grid-template-columns:1fr}.rejudge-form{grid-template-columns:1fr auto}}@media(max-width:700px){.rejudge-form,.photo-save-controls{grid-template-columns:1fr}.photo-review-main{grid-template-columns:1fr!important}.photo-main-link{width:100%!important;height:280px!important}.photo-main-image{width:100%!important;height:280px!important;min-width:100%!important;min-height:280px!important;max-width:100%!important;max-height:280px!important}}

/* Stage 4.1: save message and session actor memory */
.save-success{background:#dff5e9;border:1px solid #9ed3b7;color:#155f3f;padding:14px 16px;border-radius:12px;margin:16px 0;font-weight:700}

/* Stage 4.2: child management and AI candidate shortcuts */
.child-add-form{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr)) auto;gap:12px;align-items:end}.child-add-form label{display:grid;gap:6px}.child-row-form{display:flex;gap:8px;align-items:center}.child-row-form input{max-width:150px}.child-inactive{opacity:.68}.danger-button{background:#8f2d2d!important;color:#fff!important;border-color:#8f2d2d!important}.ai-candidate-button,.apply-all-ai-candidates{margin-top:8px}.ai-candidate-applied{outline:3px solid rgba(35,125,80,.25)}.ai-candidate-note{display:block;margin-top:6px;font-weight:700;color:#176b45}@media(max-width:900px){.child-add-form{grid-template-columns:1fr}.child-row-form{flex-wrap:wrap}}
.review-progress-stats{margin:0 0 16px}.review-progress-stats div{min-width:160px}
.ai-no-candidate{display:block;min-height:34px;padding:8px;border-radius:8px;background:#fff4d8;color:#745900}

/* Stage 4.3 staff registry */
.status-staff,.photo-state-staff{background:#dceeff;color:#174f78}.staff-candidate{background:#eef7ff}
