:root {
  --ink: #283c34;
  --muted: #6d776e;
  --paper: #f7f5ef;
  --green: #365e4b;
  --line: #dedfd5;
  --pale: #eaf0e7;
  --gold: #b28541;
  --danger: #913b32;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  font-size: 17px;
  color: var(--ink);
  background: var(--paper);
}
.calendar-image-button{position:relative;display:block;width:100%;padding:0;overflow:hidden;border:1px solid var(--line);background:var(--image-surface);}
.calendar-image-button>img{display:block;width:100%;height:100%;object-fit:cover;margin:0;border-radius:0;}
.calendar-image-button>span{position:absolute;right:5px;bottom:5px;padding:3px 7px;border-radius:5px;background:#17251ddd;color:#fff;font-size:11px;line-height:1.2;opacity:0;transition:opacity .15s;}
.calendar-image-button:hover>span,.calendar-image-button:focus-visible>span{opacity:1;}
.calendar-person-photo{width:min(100%,107px);height:65px;margin-top:4px;border-radius:4px;}
.calendar-person-photo>img.calendar-photo-full{object-fit:contain;}
.calendar-person-photo.has-person-crop{height:65px;overflow:hidden;}
.calendar-person-photo>img.calendar-photo-crop{object-fit:cover;}
.calendar-person-photo-wrap{display:flex;align-items:center;gap:4px;width:min(100%,148px);margin-top:4px;}
.calendar-person-photo{flex:1;min-width:0;margin-top:0;}
.calendar-photo-crop-button{padding:4px 6px;font-size:10px;}
.calendar-person-name{display:block;width:100%;padding:0;border:0;border-radius:3px;background:transparent;color:var(--ink);font-size:13px;font-weight:650;line-height:1.3;text-align:left;overflow-wrap:anywhere;}
.calendar-person-name:hover{background:var(--pale);}
.calendar-photo-count{position:absolute;top:3px;right:3px;min-width:16px;color:#fff;background:#17251ddd;font-size:10px;font-weight:700;line-height:1;padding:3px 4px;border-radius:8px;text-align:center;}
.calendar-collage-image{width:min(100%,145px);height:112px;border-radius:6px;}
.crop-stage{position:relative;display:block;width:fit-content;max-width:100%;height:auto;margin:0 auto 18px;padding:0;overflow:hidden;background:#222;cursor:crosshair;}
.crop-stage img{display:block;width:auto;height:auto;max-width:min(100%,660px);max-height:48vh;object-fit:contain;}
.crop-stage canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}
.crop-controls{display:flex;align-items:center;gap:14px;margin:12px 0 18px;}
.crop-controls .muted{font-size:14px;}
@media(max-width:600px){.crop-controls{align-items:flex-start;flex-direction:column;gap:8px}.calendar-image-button>span{opacity:1}}
* { box-sizing: border-box; }
body { margin: 0; background: var(--paper); }
button, input, select, textarea { font: inherit; }
button, .button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 10px 16px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  color: var(--ink);
  text-decoration: none;
  cursor: pointer;
  line-height: 1.3;
}
button:hover, .button:hover { border-color: var(--green); background: var(--pale); }
button:disabled { opacity: .45; cursor: default; }
.primary { background: var(--green); color: #fff; border-color: var(--green); }
.primary:hover { background: #274636; color: #fff; }
.danger { color: var(--danger); }
:focus-visible { outline: 3px solid #ba934e; outline-offset: 3px; }
a { color: var(--green); }
.shell { max-width: 1360px; margin: auto; padding: 42px 44px 18px; }
.masthead { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding-bottom: 32px; }
.eyebrow { font-size: 12px; letter-spacing: 3px; font-weight: 700; color: var(--gold); }
h1, h2, h3, p { margin-top: 0; }
h1 { font-family: Georgia, serif; font-weight: 400; font-size: 44px; letter-spacing: -1px; margin: 12px 0; }
h2 { font-size: 25px; }
h3 { font-size: 19px; line-height: 1.4; margin-bottom: 8px; }
.masthead p { color: var(--muted); margin-bottom: 0; }
.header-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.tabs { display: flex; gap: 24px; border-bottom: 1px solid var(--line); }
.tabs button { background: none; border: 0; border-radius: 0; padding: 14px 2px; color: var(--muted); border-bottom: 3px solid transparent; }
.tabs .active { color: var(--ink); border-bottom-color: var(--green); font-weight: 650; }
.workspace { min-height: 65vh; padding: 30px 0; }
.toolbar { display: flex; justify-content: space-between; align-items: center; gap: 20px; margin-bottom: 20px; }
.toolbar h2 { margin-bottom: 5px; }
.toolbar p { font-size: 15px; color: var(--muted); margin: 0; }
.filters { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 24px; align-items: end; }
.filters label { margin: 0; font-size: 14px; }
.filters input { min-width: 240px; }
.filters select { max-width: 230px; }
.month-nav { display: flex; gap: 5px; padding-bottom: 1px; }
input, select, textarea { display: block; border: 1px solid #cdd2c8; border-radius: 7px; padding: 10px 12px; background: white; color: var(--ink); max-width: 100%; width: 100%; margin-top: 6px; }
textarea { min-height: 95px; resize: vertical; }
label { display: block; margin-bottom: 17px; font-size: 15px; font-weight: 550; }
label small { font-weight: 400; color: var(--muted); display: block; margin-top: 5px; }
input[type=checkbox] { width: auto; display: inline; margin: 0 9px 0 0; accent-color: var(--green); }
.check-label { display: flex; align-items: center; font-weight: 400; }
.grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.card { background: white; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; }
.card-image { height: 210px; background: #e9e9df; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.card-image img { width: 100%; height: 100%; object-fit: contain; }
.card-body { padding: 18px; display: flex; flex-direction: column; flex: 1; }
.card-body h3 { overflow-wrap: anywhere; }
.card-body p { font-size: 15px; line-height: 1.5; margin-bottom: 10px; }
.card-body .card-buttons { margin-top: auto; display: flex; gap: 7px; flex-wrap: wrap; padding-top: 12px; }
.muted { color: var(--muted); font-size: 14px; }
.tag { background: var(--pale); padding: 4px 8px; border-radius: 5px; display: inline-block; font-size: 12px; align-self: flex-start; margin-bottom: 10px; }
.tag.review { background: #fff1d7; color: #78561b; }
.placeholder { font: 60px Georgia, serif; color: #8b9f8c; }
.person-row { display: flex; background: #fff; border: 1px solid var(--line); border-radius: 10px; align-items: center; gap: 18px; padding: 16px; margin-bottom: 12px; }
.avatar { width: 78px; height: 78px; flex-shrink: 0; background: var(--pale); border-radius: 9px; overflow: hidden; display: flex; align-items: center; justify-content: center; font: 30px Georgia, serif; color: #7a917e; }
.avatar img { width: 100%; height: 100%; object-fit: cover; }
.avatar-photo-button { width: 100%; height: 100%; display: block; padding: 0; border: 0; border-radius: inherit; background: transparent; cursor: pointer; }
.avatar-photo-button:focus-visible { outline: 3px solid var(--green); outline-offset: -3px; }
.avatar-photo-button:hover img { opacity: .82; }
.person-info { flex: 1; }
.person-info h3 { margin-bottom: 4px; }
.person-info p { margin: 4px 0; color: var(--muted); font-size: 15px; }
.date-line { display: inline-block; margin-right: 18px; }
.empty { text-align: center; padding: 60px 20px; border: 1px dashed #c6cfc0; border-radius: 12px; color: var(--muted); background: #fff9; }
.empty h3 { color: var(--ink); }
#status { font-size: 15px; margin-bottom: 14px; }
#status:empty { display: none; }
.error { color: var(--danger); background: #fff0ec; padding: 12px; border-radius: 7px; }
.success { color: var(--green); background: var(--pale); padding: 12px; border-radius: 7px; }
.pagination { display: flex; justify-content: center; align-items: center; gap: 18px; margin-top: 26px; }
footer { border-top: 1px solid var(--line); padding: 20px 0; display: flex; gap: 20px; justify-content: space-between; align-items: center; }
footer button { font-size: 14px; padding: 8px 12px; }
#sharing { font-size: 13px; display: flex; gap: 12px; align-items: center; max-width: 55%; flex-wrap: wrap; }
#sharing-status { max-width: 440px; overflow-wrap: anywhere; }
dialog { border: 1px solid var(--line); border-radius: 14px; padding: 26px; width: 760px; max-width: 94vw; max-height: 90vh; color: var(--ink); box-shadow: 0 30px 100px #20352b30; }
dialog::backdrop { background: #16251f66; }
.dialog-head { display: flex; align-items: center; justify-content: space-between; gap: 15px; margin-bottom: 20px; }
.dialog-head h2 { margin: 0; }
.dialog-head button { border: none; }
.form-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end; position: sticky; bottom: -26px; background: white; padding: 18px 0 8px; border-top: 1px solid var(--line); }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.date-fields { display: flex; gap: 10px; }
.date-fields label { flex: 1; min-width: 0; }
.section-line { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin: 24px 0 12px; }
.section-line h3 { margin: 0; }
.mini-row { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--line); }
.mini-row img { width: 64px; height: 64px; object-fit: contain; background: var(--paper); border-radius: 5px; }
.mini-row .grow { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.mini-row p { margin: 4px 0; font-size: 14px; }
.mini-row button { font-size: 13px; padding: 8px; }
.photo-preview { max-height: 290px; max-width: 100%; display: block; margin: 0 auto 20px; border-radius: 8px; }
.identify-photo-preview { max-width: min(100%, 640px); max-height: 52vh; object-fit: contain; background: #e9e9df; }
.person-marker-editor { border: 1px solid var(--line); border-radius: 10px; padding: 14px; margin-bottom: 22px; background: var(--soft-surface, #fafaf6); }
.marker-toolbar,.marker-tools,.marker-assignment-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.marker-toolbar { margin-bottom: 12px; }
.marker-toolbar p { margin: 4px 0 0; color: var(--muted); font-size: 14px; }
.marker-tools label { margin: 0; display: flex; align-items: center; gap: 8px; font-size: 13px; }
.marker-tools select { width: auto; margin: 0; padding: 7px 9px; }
.marker-viewport { max-height: 56vh; overflow: auto; border-radius: 8px; background: #e5e4dc; padding: 8px; }
.marker-canvas { position: relative; width: max-content; max-width: none; margin: 0 auto; }
.marker-canvas img { display: block; max-width: none; height: auto; user-select: none; }
.detected-face-box { position: absolute; z-index: 1; box-sizing: border-box; border: 2px solid #d04b38; background: #d04b3812; pointer-events: none; }
.detected-face-box.covered { border-color: #37805b; background: #37805b12; }
.marker-pin { position: absolute; z-index: 2; transform: translate(-50%,-50%); width: 38px; height: 38px; min-width: 38px; padding: 0; border: 3px solid #fff; border-radius: 50%; background: #365e4b; color: #fff; font-weight: 750; box-shadow: 0 1px 6px #0008; touch-action: none; }
.marker-pin.active { background: #a65f19; outline: 3px solid #fff; }
.marker-status { margin: 10px 0; }
.marker-roster { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 6px; margin: 10px 0 16px; }
.marker-row { display: flex; min-width: 0; align-items: center; gap: 5px; padding: 5px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface,#fff); }
.marker-row.selected { border-color: var(--green); background: var(--pale); }
.marker-row-select { flex: 1; min-width: 0; justify-content: flex-start; padding: 6px; border: 0; background: transparent; overflow-wrap: anywhere; text-align: left; }
.marker-number,.marker-person-initials { display: inline-flex; flex: 0 0 30px; width: 30px; height: 30px; align-items: center; justify-content: center; border-radius: 50%; background: var(--green); color: white; font-size: 14px; font-weight: 700; }
.marker-delete { padding: 6px 8px; font-size: 12px; }
.marker-assignment { border-top: 1px solid var(--line); padding-top: 12px; }
.marker-assignment-head { margin-bottom: 8px; }
.marker-assignment-head button { padding: 7px 10px; font-size: 13px; }
.marker-search { margin: 8px 0; font-size: 13px; }
.marker-search input { margin-top: 4px; }
.marker-person-picker { max-height: 250px; overflow: auto; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 6px; }
.marker-person-choice { justify-content: flex-start; min-width: 0; padding: 6px; text-align: left; font-size: 13px; overflow-wrap: anywhere; }
.marker-person-choice.selected { border-color: var(--green); background: var(--pale); }
.marker-person-choice img,.marker-person-initials { flex: 0 0 42px; width: 42px; height: 42px; border-radius: 6px; object-fit: cover; }
.marker-person-initials { border-radius: 50%; font-size: 12px; }
.marker-person-choice small { display: block; color: var(--muted); font-size: 11px; font-weight: 400; }
.marker-person-choice[hidden] { display: none; }
.marker-no-match { grid-column: 1/-1; margin: 8px; }
.picker { max-height: 240px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; padding: 12px; margin: 10px 0 18px; }
.picker label { margin: 0; padding: 8px; font-size: 14px; display: flex; align-items: center; gap: 9px; font-weight: 400; }
.picker img { width: 42px; height: 42px; object-fit: contain; }
.picker input[type=checkbox] { flex-shrink: 0; }
.help { padding: 12px 16px; background: var(--paper); border-radius: 7px; font-size: 14px; line-height: 1.6; margin-bottom: 20px; }
.drop-zone { padding: 24px; border: 2px dashed #acbdab; border-radius: 10px; text-align: center; margin-bottom: 22px; color: var(--muted); background: #eef2e8; }
.drop-zone.drag { background: #dde8d9; border-color: var(--green); }
.header-layout { max-width: 850px; }
.header-layout textarea { margin-bottom: 20px; }
.source-details { font-size: 13px; margin: 18px 0; overflow-wrap: anywhere; }
.source-details pre { white-space: pre-wrap; }
.login-page { display: flex; min-height: 100vh; align-items: center; justify-content: center; padding: 25px; }
.login-card { max-width: 480px; background: white; border: 1px solid var(--line); border-radius: 16px; padding: 40px; }
.login-card h1 { font-size: 38px; }
.login-card p { line-height: 1.6; color: var(--muted); }
.login-card button { width: 100%; }
.event-badge { margin-left: 8px; font-size: 12px; color: #916519; }
.button-link { border: none; background: none; color: var(--green); text-decoration: underline; }
.upload-item { padding: 10px 0; border-bottom: 1px solid var(--line); font-size: 14px; overflow-wrap: anywhere; }
.attention-section { margin: 0 0 38px; }
.attention-section > p { color: var(--muted); font-size: 15px; }
.attention-photo-list { border-top: 1px solid var(--line); }
.attention-photo { display: flex; align-items: center; gap: 18px; padding: 14px 0; border-bottom: 1px solid var(--line); }
.attention-thumb { width: 96px; height: 78px; flex: 0 0 96px; display: flex; justify-content: center; align-items: center; overflow: hidden; border-radius: 7px; background: var(--pale); }
.attention-thumb img { width: 100%; height: 100%; object-fit: contain; }
.attention-photo-button { width: 100%; height: 100%; display: block; padding: 0; border: 0; border-radius: inherit; background: transparent; cursor: pointer; }
.attention-photo-button:focus-visible { outline: 3px solid var(--green); outline-offset: -3px; }
.attention-photo-button:hover img { opacity: .82; }
.attention-photo-info { flex: 1; min-width: 0; }
.attention-photo-info h3 { overflow-wrap: anywhere; margin-bottom: 4px; }
.attention-photo-info p { margin: 4px 0; font-size: 14px; overflow-wrap: anywhere; }
.attention-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 7px; }
.attention-tags .tag { margin: 0; }
.attention-photo .card-buttons { display: flex; flex-wrap: wrap; gap: 7px; }
.attention-photo .card-buttons button { font-size: 13px; padding: 8px 10px; }
@media(max-width:600px){.marker-toolbar{align-items:flex-start;flex-direction:column}.marker-tools{width:100%;justify-content:flex-start}.marker-viewport{max-height:50vh;padding:5px}.marker-roster,.marker-person-picker{grid-template-columns:minmax(0,1fr)}.marker-row-select{font-size:14px}}
@media(max-width:750px) {
  .attention-photo { align-items: flex-start; flex-wrap: wrap; gap: 10px 12px; }
  .attention-thumb { width: 72px; height: 64px; flex-basis: 72px; }
  .attention-photo-info { width: calc(100% - 84px); flex: 1 1 calc(100% - 84px); }
  .attention-photo .card-buttons { width: 100%; margin-left: 84px; }
}
.upload-item progress { width: 100%; }
@media(max-width:1050px) {
  .grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .masthead { align-items: flex-start; }
  .header-actions { justify-content: flex-end; }
  .shell { padding: 28px; }
}
@media(max-width:750px) {
  .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .shell { padding: 20px 16px; }
  .masthead { display: block; }
  .header-actions { justify-content: flex-start; margin-top: 20px; }
  h1 { font-size: 35px; }
  .tabs { gap: 18px; }
  .tabs button { font-size: 15px; }
  .toolbar { align-items: flex-start; }
  .toolbar h2 { font-size: 23px; }
  .filters { gap: 9px; }
  .filters label { flex: 1; min-width: 135px; }
  .filters input { min-width: 0; }
  .filters select { max-width: none; }
  .person-row { gap: 12px; padding: 12px; }
  .person-row > button { padding: 9px 12px; }
  .avatar { width: 54px; height: 64px; }
  footer { align-items: flex-start; flex-direction: column; }
  #sharing { max-width: 100%; }
  .form-grid { grid-template-columns: 1fr; }
  .card-image { height: 175px; }
  .card-body { padding: 12px; }
  .card h3 { font-size: 17px; }
  .mini-row { flex-wrap: wrap; }
}
@media(max-width:420px) {
  .grid { grid-template-columns: 1fr; }
  .card-image { height: 250px; }
  .login-card { padding: 25px; }
  .date-fields { gap: 6px; }
  .date-fields input, .date-fields select { padding: 9px 6px; }
}

[hidden]{display:none!important}
.review-nav{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 22px}.review-card{padding:22px;margin-bottom:16px;background:white;border:1px solid var(--line);border-radius:10px}.table-wrap{overflow-x:auto}.master-table{width:100%;border-collapse:collapse;background:white}.master-table th,.master-table td{text-align:left;vertical-align:top;padding:15px;border-bottom:1px solid var(--line)}.master-table th{background:var(--pale);font-size:14px}.master-table td:nth-child(2){min-width:180px}.master-table td:nth-child(3){min-width:150px}.master-table p{margin:8px 0}.master-table small{display:block;margin-top:5px}.merge-person{margin:16px 0;padding:14px;background:var(--paper);border-radius:8px}.summary-photos{display:flex;flex-wrap:wrap;gap:8px}.summary-photos img{width:100px;height:100px;object-fit:contain;background:white}.gallery-controls{display:flex;gap:14px;margin-top:16px}.gallery-controls label{flex:1}.visual-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;max-height:440px;overflow:auto;padding:5px;margin-bottom:20px}.gallery-photo{display:flex;flex-direction:column;justify-content:flex-start;padding:9px;min-width:0;text-align:center;overflow-wrap:anywhere}.gallery-photo img{width:100%;height:135px;object-fit:contain}.gallery-photo span{font-size:14px}.gallery-photo small{font-size:11px;color:var(--muted)}.gallery-photo.selected{border:3px solid var(--green);background:var(--pale);padding:7px}.day-photo{width:160px;height:160px;object-fit:contain}@media(max-width:750px){.visual-gallery{grid-template-columns:repeat(2,minmax(0,1fr))}.gallery-controls{flex-direction:column;gap:0}.master-table th,.master-table td{padding:10px}.master-table td:nth-child(2){min-width:140px}}
.person-photo-preference{border:0;padding:0;margin:0 0 20px;min-width:0}.person-photo-preference legend{font-weight:600;font-size:17px}.person-photo-preference p{font-size:14px;color:var(--muted)}input[type=radio]{display:inline;width:auto;margin:0 9px 0 0;accent-color:var(--green)}.person-photo-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.person-photo-option{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px;border:1px solid var(--line);border-radius:9px;text-align:center;overflow-wrap:anywhere;cursor:pointer;margin:0}.person-photo-option img{width:100%;height:170px;object-fit:contain}.person-photo-option:has(input:checked){border-color:var(--green);background:var(--pale)}@media(max-width:420px){.person-photo-options{grid-template-columns:1fr}}
.person-upload{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:8px 0 20px}.person-upload .muted{min-width:0;overflow-wrap:anywhere}

.duplicate-photo-picker{border:0;padding:0;margin:0 0 20px;min-width:0}.duplicate-photo-picker legend{font-size:19px;font-weight:650}.duplicate-photo-picker>p{font-size:14px;color:var(--muted)}.duplicate-photo-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}.duplicate-photo-option{display:flex;flex-direction:column;align-items:stretch;gap:8px;min-width:0;margin:0;padding:10px;border:2px solid var(--line);border-radius:10px;background:var(--surface);cursor:pointer;overflow-wrap:anywhere}.duplicate-photo-option:has(input:checked){border-color:var(--green);background:var(--pale)}.duplicate-photo-select{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:650}.duplicate-photo-select input{flex:none;margin:0}.duplicate-photo-image{display:block;width:100%;height:190px;object-fit:contain;border-radius:5px;background:var(--image-surface)}.duplicate-photo-title{font-weight:600}.duplicate-photo-option small{color:var(--muted);font-size:12px;overflow-wrap:anywhere}@media(max-width:420px){.duplicate-photo-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.duplicate-photo-option{padding:7px}.duplicate-photo-image{height:145px}}

.tabs{flex-wrap:wrap}.hardcopy-card{overflow-wrap:anywhere}.hardcopy-card figure{margin:24px 0 0}.hardcopy-card figure img{display:block;max-width:100%;max-height:620px;object-fit:contain}.hardcopy-card figcaption{font-size:14px;color:var(--muted);margin-top:8px}.hardcopy-display-note{white-space:pre-wrap;padding:14px;background:var(--pale);border-radius:8px}.hardcopy-notes{white-space:pre-wrap;padding:14px;background:var(--pale);border-radius:8px}
.header-candidates{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.header-candidates .card-image{height:160px}.header-candidates .card-body{padding:12px}.header-candidates .card h3{font-size:16px}@media(max-width:750px){.header-candidates{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:420px){.header-candidates{grid-template-columns:1fr}}
.header-toggle{display:inline-flex;align-items:center;gap:10px;flex:0 0 100%;min-height:42px;margin:4px 0 0;padding:4px 0;font-size:14px;font-weight:500;cursor:pointer}.header-toggle input{position:absolute;opacity:0;width:1px;height:1px;margin:0}.switch-track{position:relative;display:inline-block;flex:none;width:44px;height:26px;border-radius:999px;background:#b9c1b8;transition:background .15s}.switch-track::before{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:white;box-shadow:0 1px 3px #0003;transition:transform .15s}.header-toggle input:checked+.switch-track{background:var(--green)}.header-toggle input:checked+.switch-track::before{transform:translateX(18px)}.header-toggle input:focus-visible+.switch-track{outline:3px solid #ba934e;outline-offset:3px}.header-toggle input:disabled+.switch-track{opacity:.55}


.master-filter-grid{display:grid;grid-template-columns:minmax(260px,1.7fr) minmax(370px,1.7fr) minmax(155px,1fr) minmax(135px,.8fr);gap:14px;align-items:end;width:100%}.master-filter-grid>label,.master-search label,.master-month label{min-width:0;margin:0}.master-filter-grid input,.master-filter-grid select{min-width:0;max-width:none}.master-month{display:flex;align-items:end;gap:7px;min-width:0}.master-month label{flex:1}.master-month .month-nav{flex:none}.master-month .month-nav button{padding:10px 8px;white-space:nowrap;font-size:13px}.master-month.is-filtered select{border-color:var(--green);box-shadow:0 0 0 2px #365e4b22;background:var(--pale);font-weight:650}.master-filter-context{grid-column:1/-1;display:flex;align-items:center;gap:12px;width:max-content;max-width:100%;padding:7px 10px;border-radius:7px;background:var(--pale);color:var(--green);font-size:14px;font-weight:650}.master-filter-context button{padding:3px 7px;border:0;background:transparent;color:var(--green);text-decoration:underline;font-size:13px}.master-filter-context button:hover{background:#dce8d9}
@media(max-width:950px){.master-filter-grid{grid-template-columns:minmax(220px,1.4fr) minmax(370px,1fr)}.master-filter-context{grid-column:1/-1}}
@media(max-width:600px){.master-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.master-search,.master-month{grid-column:1/-1}.master-month{flex-wrap:wrap}.master-month label,.master-month .month-nav{flex:1 0 100%}.master-month .month-nav button{flex:1}.master-filter-context{grid-column:1/-1}}

/* User-selectable dark theme. Keep the familiar light palette as the default. */
:root{color-scheme:light;--surface:#fff;--surface-raised:#fff;--control:#fff;--image-surface:#e9e9df;--border-control:#cdd2c8;--soft-surface:#eef2e8;--hover-surface:var(--pale)}
:root[data-theme="dark"]{color-scheme:dark;--ink:#e6ece7;--muted:#aab6ad;--paper:#171c19;--green:#91b99f;--line:#39443d;--pale:#26352b;--gold:#d6b46d;--danger:#f09a8e;--surface:#202723;--surface-raised:#252d28;--control:#1c231f;--image-surface:#303832;--border-control:#4a574e;--soft-surface:#263129;--hover-surface:#304136;background:var(--paper);color:var(--ink)}
:root[data-theme="dark"] body{background:var(--paper);color:var(--ink)}
:root[data-theme="dark"] button,:root[data-theme="dark"] .button{background:var(--surface-raised);color:var(--ink)}
:root[data-theme="dark"] button:hover,:root[data-theme="dark"] .button:hover{background:var(--hover-surface);border-color:var(--green)}
:root[data-theme="dark"] .tabs button{background:transparent}
:root[data-theme="dark"] input,:root[data-theme="dark"] select,:root[data-theme="dark"] textarea{background:var(--control);color:var(--ink);border-color:var(--border-control)}
:root[data-theme="dark"] .card,:root[data-theme="dark"] .person-row,:root[data-theme="dark"] .review-card,:root[data-theme="dark"] .master-table,:root[data-theme="dark"] .login-card{background:var(--surface);color:var(--ink)}
:root[data-theme="dark"] .card-image,:root[data-theme="dark"] .avatar,:root[data-theme="dark"] .mini-row img,:root[data-theme="dark"] .summary-photos img{background:var(--image-surface)}
:root[data-theme="dark"] .empty{background:var(--surface);border-color:var(--line)}
:root[data-theme="dark"] .empty h3{color:var(--ink)}
:root[data-theme="dark"] .master-table th,:root[data-theme="dark"] .merge-person,:root[data-theme="dark"] .hardcopy-notes,:root[data-theme="dark"] .help{background:var(--soft-surface)}
:root[data-theme="dark"] .master-filter-context{background:var(--pale);color:var(--green)}
:root[data-theme="dark"] .master-filter-context button,:root[data-theme="dark"] .button-link,:root[data-theme="dark"] a{color:var(--green)}
:root[data-theme="dark"] .dialog-head button{background:transparent}
:root[data-theme="dark"] dialog{background:var(--surface);color:var(--ink);box-shadow:0 30px 100px #0009}
:root[data-theme="dark"] .form-actions{background:var(--surface);border-color:var(--line)}
:root[data-theme="dark"] .drop-zone{background:var(--soft-surface);border-color:var(--line)}
:root[data-theme="dark"] .drop-zone.drag{background:var(--pale);border-color:var(--green)}
:root[data-theme="dark"] .tag.review{background:#49391e;color:#f0d28c}
:root[data-theme="dark"] .error{background:#482b29;color:#ffb5aa}
:root[data-theme="dark"] .success{background:#263b2c;color:#b6dfbf}
:root[data-theme="dark"] .person-photo-option{background:var(--surface)}
:root[data-theme="dark"] .duplicate-photo-option{background:var(--surface)}
:root[data-theme="dark"] .person-photo-option:has(input:checked),:root[data-theme="dark"] .gallery-photo.selected{background:var(--pale)}
:root[data-theme="dark"] .primary{background:#477458;color:#fff;border-color:#477458}
:root[data-theme="dark"] .primary:hover{background:#56866a;color:#fff}
:root[data-theme="dark"] .event-badge{color:#e0c27c}
:root[data-theme="dark"] .tag{color:var(--ink)}
:root[data-theme="dark"] .tag.review{color:#f0d28c}

/* Keep the filter toolbar consistent across the organizer tabs. */
.filters{display:grid;grid-template-columns:minmax(220px,1.5fr) minmax(320px,1.7fr) repeat(2,minmax(150px,1fr));gap:12px;align-items:end;padding:16px;margin-bottom:24px;border:1px solid var(--line);border-radius:12px;background:#fff}
.filters>label{min-width:0;margin:0;font-size:14px}
.filters input,.filters select{min-width:0;max-width:none;width:100%;margin-top:6px}
.toolbar-month{display:flex;flex-wrap:wrap;align-items:end;gap:6px;min-width:0}
.toolbar-month>label{flex:1;min-width:0;margin:0;font-size:14px}
.toolbar-month>.month-nav{flex:1 0 100%;display:flex;gap:6px;padding:0}
.toolbar-month .month-nav button{flex:1;padding:8px 6px;font-size:12px;white-space:nowrap}
.master-filter-context{grid-column:1/-1;display:flex;align-items:center;gap:12px;width:max-content;max-width:100%;padding:7px 10px;border-radius:7px;background:var(--pale);color:var(--green);font-size:14px;font-weight:650}
.master-filter-context button{padding:3px 7px;border:0;background:transparent;color:var(--green);text-decoration:underline;font-size:13px}
.master-filter-context button:hover{background:#dce8d9}
.filters-headers{grid-template-columns:minmax(320px,1fr) 2fr;max-width:860px}
.filters-hardcopy{grid-template-columns:minmax(240px,1.5fr) minmax(180px,1fr);max-width:900px}
.filters-people,.filters-photos,.filters-headers,.filters-hardcopy{grid-template-columns:repeat(12,minmax(0,1fr))}
.filters-people>label:first-child,.filters-photos>label:first-child,.filters-hardcopy>label:first-child{grid-column:span 3}
.filters-people .toolbar-month,.filters-photos .toolbar-month,.filters-headers .toolbar-month{grid-column:span 4}
.filters-people>label:nth-child(3),.filters-photos>label:nth-child(2){grid-column:span 2}
.filters-people>label:nth-child(4),.filters-photos>label:nth-child(4){grid-column:span 3}
.filters-photos>label:nth-child(2){grid-column:span 2}
.filters-hardcopy>label:nth-child(2){grid-column:span 2}
.filters-attention{display:none}
@media(max-width:1050px){.filters-people,.filters-photos{grid-template-columns:repeat(2,minmax(0,1fr))}.filters-people>label,.filters-photos>label,.filters-hardcopy>label{grid-column:span 1}.filters-people .toolbar-month,.filters-photos .toolbar-month{grid-column:1/-1}.filters-headers{grid-template-columns:repeat(2,minmax(0,1fr))}.filters-hardcopy{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.filters{grid-template-columns:minmax(0,1fr);padding:12px}.filters-people,.filters-photos,.filters-headers,.filters-hardcopy{grid-template-columns:minmax(0,1fr)}.filters-people .toolbar-month,.filters-photos .toolbar-month,.filters-headers .toolbar-month{grid-column:1}.filters>label,.filters .toolbar-month{grid-column:1!important}.toolbar-month{align-items:end}.month-nav button{padding:9px 8px;font-size:12px}.master-filter-context{grid-column:1;flex-wrap:wrap;width:100%}}
:root[data-theme="dark"] .filters{background:var(--surface)}

.calendar-preview{min-width:0}.calendar-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.calendar-month-picker{width:min(280px,45%);margin:0}.calendar-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.calendar-table{width:100%;min-width:980px;table-layout:fixed;border-collapse:collapse}.calendar-table th{padding:10px 8px;background:var(--pale);border:1px solid var(--line);font-size:14px}.calendar-day,.calendar-empty{height:154px;vertical-align:top;border:1px solid var(--line);padding:7px;background:var(--surface)}.calendar-empty{background:var(--soft-surface)}.calendar-date{display:flex;justify-content:flex-end;margin-bottom:5px;font-weight:700}.calendar-date time{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--soft-surface)}.calendar-person{padding:5px 0;border-top:1px solid var(--line);font-size:13px;overflow-wrap:anywhere}.calendar-person:first-of-type{border-top:0}.calendar-person strong{display:block;font-size:13px;line-height:1.3}.calendar-person-photo img,.calendar-shared-photo img{display:block;width:100%;height:65px;object-fit:cover;border-radius:4px;margin-top:4px;background:var(--image-surface)}.calendar-person-photo img.calendar-photo-full{object-fit:contain}.calendar-person-photo.has-person-crop{height:65px;overflow:hidden}.calendar-person-photo img.calendar-photo-crop{object-fit:cover}.calendar-choice{width:100%;justify-content:flex-start;margin:4px 0 0;padding:5px 6px;font-size:11px;line-height:1.3;text-align:left;overflow-wrap:anywhere}.calendar-choice span{flex:none;font-weight:800}.calendar-choice-shared,.calendar-choice-photo,.calendar-choice-none{background:#fff1d7;border-color:#e1c78f;color:#684914}.calendar-remembrances{margin-top:6px;padding-top:5px;border-top:1px dashed var(--line);font-size:12px;overflow-wrap:anywhere}.calendar-section-label{display:block;margin-bottom:3px;color:var(--muted);font-weight:650}.calendar-remembrance{margin-top:3px}.calendar-date-review{display:block;color:#78561b;font-size:10px;line-height:1.2;margin-top:3px}.calendar-leap-day{margin-top:14px;padding:14px 18px;border:1px solid var(--line);border-radius:9px;background:var(--surface)}.calendar-leap-day p,.calendar-leap-day ul{margin:7px 0 0}.calendar-leap-day li{margin-top:4px}
.filters-calendar{display:none}
.calendar-scroll-hint{display:none;color:var(--muted);font-size:13px;margin:0 0 8px}
:root[data-theme="dark"] .calendar-choice-shared,:root[data-theme="dark"] .calendar-choice-photo,:root[data-theme="dark"] .calendar-choice-none{background:#49391e;border-color:#74613e;color:#f0d28c}
@media(max-width:600px){.calendar-toolbar{gap:6px}.calendar-toolbar button{padding:8px;font-size:12px}.calendar-month-picker{width:min(170px,43%);font-size:13px}.calendar-scroll-hint{display:block}.calendar-table{min-width:900px}.calendar-day,.calendar-empty{height:144px;padding:5px}}

/* Person-specific calendar crops use named CSS classes because inline styles are blocked by CSP. */
.calendar-person-photo img.calendar-photo-crop.calendar-crop-2-0{width:200%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-2-1{width:200%;max-width:none;transform:translateX(-50%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-3-0{width:300%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-3-1{width:300%;max-width:none;transform:translateX(-33.3333%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-3-2{width:300%;max-width:none;transform:translateX(-66.6667%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-4-0{width:400%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-4-1{width:400%;max-width:none;transform:translateX(-25%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-4-2{width:400%;max-width:none;transform:translateX(-50%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-4-3{width:400%;max-width:none;transform:translateX(-75%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-5-0{width:500%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-5-1{width:500%;max-width:none;transform:translateX(-20%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-5-2{width:500%;max-width:none;transform:translateX(-40%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-5-3{width:500%;max-width:none;transform:translateX(-60%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-5-4{width:500%;max-width:none;transform:translateX(-80%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-6-0{width:600%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-6-1{width:600%;max-width:none;transform:translateX(-16.6667%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-6-2{width:600%;max-width:none;transform:translateX(-33.3333%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-6-3{width:600%;max-width:none;transform:translateX(-50%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-6-4{width:600%;max-width:none;transform:translateX(-66.6667%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-6-5{width:600%;max-width:none;transform:translateX(-83.3333%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-0{width:700%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-1{width:700%;max-width:none;transform:translateX(-14.2857%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-2{width:700%;max-width:none;transform:translateX(-28.5714%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-3{width:700%;max-width:none;transform:translateX(-42.8571%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-4{width:700%;max-width:none;transform:translateX(-57.1429%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-5{width:700%;max-width:none;transform:translateX(-71.4286%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-7-6{width:700%;max-width:none;transform:translateX(-85.7143%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-0{width:800%;max-width:none;transform:translateX(-0%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-1{width:800%;max-width:none;transform:translateX(-12.5%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-2{width:800%;max-width:none;transform:translateX(-25%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-3{width:800%;max-width:none;transform:translateX(-37.5%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-4{width:800%;max-width:none;transform:translateX(-50%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-5{width:800%;max-width:none;transform:translateX(-62.5%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-6{width:800%;max-width:none;transform:translateX(-75%)}
.calendar-person-photo img.calendar-photo-crop.calendar-crop-8-7{width:800%;max-width:none;transform:translateX(-87.5%)}

.calendar-collage{margin:14px 0 18px;padding:16px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.calendar-collage .section-line{align-items:center;margin:0}.calendar-collage h3{margin:0 0 4px}.calendar-collage .muted{margin:0}.calendar-collage-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(145px,1fr));gap:12px;margin-top:14px}.calendar-collage-photos figure{margin:0;min-width:0}.calendar-collage-photos img{display:block;width:100%;height:112px;object-fit:cover;border-radius:6px;background:var(--image-surface)}.calendar-collage-photos figcaption{margin-top:5px;font-size:13px;overflow-wrap:anywhere}.empty-inline{margin:12px 0 0;color:var(--muted)}

.duplicate-photo-stats{display:grid;gap:2px;color:var(--muted);font-size:12px;line-height:1.4}.duplicate-photo-stats strong{color:var(--ink);font-weight:650}

.attention-bulk { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin:12px 0; }
.attention-bulk label, .attention-select { display:inline-flex; align-items:center; gap:7px; margin:0; }
.attention-bulk input, .attention-select input { width:auto; margin:0; }

.filters-qr-codes{display:none}.album-qr-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}.album-qr-image{display:block;width:100%;max-width:320px;height:auto;margin:12px auto;background:white}.album-qr-pending{padding:24px 16px;margin:12px 0;background:var(--pale);border:1px dashed var(--line);border-radius:8px;text-align:center}.album-qr-pending p{margin-bottom:0}

.filters-month-images,.filters-covers{display:none}.month-images-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),600px));justify-content:center}.month-print-image{display:block;width:100%;height:auto;margin:12px auto;border:1px solid var(--line)}
.tabs{flex-wrap:wrap;column-gap:24px;row-gap:0}
