:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#222e2a;background:#f4f6f3;--green:#244d3e;--muted:#78827c;--line:#e3e8e2}*{box-sizing:border-box}body{margin:0}body.has-player{padding-bottom:110px}button,input,select,textarea{font:inherit;color:inherit}button,a{touch-action:manipulation}button{cursor:pointer;background:white;border:1px solid var(--line);border-radius:8px;padding:10px 13px;font-size:12px}button:hover{background:#edf2e8}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible{outline:3px solid #91b4a2;outline-offset:2px}button.primary{color:white;background:var(--green);border-color:var(--green)}a{color:var(--green)}[hidden]{display:none!important}.rep-shell{max-width:1220px;margin:auto;padding:30px 24px 40px}header{display:flex;justify-content:space-between;align-items:start;gap:15px;margin-bottom:24px}h1{font-size:30px;letter-spacing:-1px;margin:7px 0 12px}h2{font-size:18px;margin:0 0 15px}h3{font-size:14px;margin:0}.eyebrow{font-size:10px;letter-spacing:1.8px;color:var(--muted);font-weight:600;margin:0}.muted{font-size:12px;line-height:1.6;color:var(--muted);margin:8px 0}.back-link{font-size:12px;white-space:nowrap;margin-top:8px}#status{position:sticky;top:8px;z-index:5;background:#e9f0e2;border:1px solid #ccdcbc;padding:12px 16px;border-radius:10px;font-size:12px;margin:12px 0}#status.error{background:#fbebe5;border-color:#e9c9ba;color:#8f4435}.actions,.dialog-buttons{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:20px}.panel{padding:22px;background:white;border:1px solid var(--line);border-radius:13px;margin-bottom:20px}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.link-row{display:flex;align-items:center;gap:8px}.link-row input{min-width:0;font-size:11px}.link-row button{flex-shrink:0}.settings-grid label{margin:0}.settings-grid .wide{grid-column:1/-1}.local-warning{color:#8a6736;background:#fcf3e5;padding:12px;border-radius:8px;font-size:12px;line-height:1.5}.stats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}.count-badge{padding:10px 13px;border:1px solid var(--line);border-radius:9px;background:white;font-size:12px}.count-badge strong{margin-left:7px}.filters{display:grid;grid-template-columns:2fr 1.2fr 1.3fr 1.2fr;gap:12px;margin-bottom:14px}.filters label{margin:0}.filters input,.filters select{font-size:12px}input,select,textarea{width:100%;border:1px solid #d9dfd7;border-radius:8px;padding:10px 11px;background:white;margin-top:6px;outline-color:#91b4a2}label{display:block;font-size:12px;margin:16px 0}textarea{resize:vertical}.check{display:flex;gap:9px;align-items:center}.check input,input[type=checkbox]{width:17px;height:17px;accent-color:var(--green);flex-shrink:0;margin:0}.bulk-bar{display:flex;gap:12px;align-items:center;padding:14px;background:#eaf0e5;border-radius:10px;margin-bottom:18px;flex-wrap:wrap;font-size:12px}.bulk-bar select{width:auto;max-width:220px;margin:0}.bulk-bar label{margin:0}.list-count{font-size:11px;color:var(--muted);margin:12px 0}.song-row{display:flex;gap:13px;align-items:center;background:white;padding:17px 18px;border:1px solid var(--line);border-radius:10px;margin:8px 0}.song-row.excluded{opacity:.55}.song-main{flex:1;min-width:0}.song-title{font-size:14px;line-height:1.5;overflow-wrap:anywhere;font-weight:600}.song-artist{font-size:12px;color:var(--muted);margin:4px 0 7px}.song-group{font-size:10px;color:#718065;background:#f0f4eb;border-radius:4px;padding:3px 7px;display:inline-block}.song-note{font-size:12px;color:#6a7262;white-space:pre-wrap;margin:9px 0 0;overflow-wrap:anywhere}.song-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:330px}.song-tools button{padding:8px;font-size:11px}.song-tools .check{font-size:10px;margin:4px}.pref-buttons{display:flex;gap:4px}.pref-buttons button{font-size:11px;padding:8px 10px}.pref-buttons button[aria-pressed=true][data-pref=favorite],.preference.favorite{color:#365e38;background:#e6f0df;border-color:#bed2b5}.pref-buttons button[aria-pressed=true][data-pref=neutral],.preference.neutral{color:#536454;background:#eef1eb;border-color:#c9d3c5}.pref-buttons button[aria-pressed=true][data-pref=dislike],.preference.dislike{color:#914b40;background:#fbece6;border-color:#e6c5b8}.preference{font-size:11px;padding:6px 9px;border:1px solid var(--line);border-radius:7px;white-space:nowrap}.preference.unmarked{color:var(--muted);background:#fafbf9}.empty{text-align:center;padding:40px 18px;color:var(--muted);background:white;border:1px solid var(--line);border-radius:12px;font-size:13px;line-height:1.7}.icon-button{display:grid;place-items:center;width:35px;height:35px;padding:8px;flex-shrink:0}.icon-button svg{width:18px;height:18px;fill:currentColor}.player{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);width:min(680px,calc(100% - 24px));display:flex;gap:10px;align-items:center;background:#fffefb;border:1px solid #ccd7c5;box-shadow:0 8px 40px #163a2729;padding:14px 16px;border-radius:16px;z-index:50}.player-track{flex:1;min-width:0}.player-track strong{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-size:12px;font-weight:500}.player-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.player-progress span{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}.player input[type=range]{height:16px;padding:0;border:0;margin:0;accent-color:var(--green);min-width:0}.player .icon-button{border:0;background:transparent;color:var(--green)}dialog{border:1px solid var(--line);border-radius:16px;width:min(520px,94vw);max-height:90vh;padding:26px;color:inherit;box-shadow:0 20px 100px #0003}dialog::backdrop{background:#10251f55;backdrop-filter:blur(3px)}.dialog-heading{display:flex;justify-content:space-between;align-items:center}.dialog-heading h2{margin:0}.dialog-heading button{border:0}.form-error{font-size:12px;color:#a54436}.event-note-view{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7}.footer-note{font-size:11px;line-height:1.7;color:var(--muted)}@media(max-width:850px){.filters{grid-template-columns:1fr 1fr}.song-row{flex-wrap:wrap}.song-main{min-width:55%}.song-tools{max-width:none;margin-left:auto}.settings-grid{grid-template-columns:1fr}.settings-grid .wide{grid-column:auto}}@media(max-width:480px){.rep-shell{padding:20px 12px}h1{font-size:25px}.panel{padding:16px}.song-row{padding:14px;gap:10px}.song-tools{width:100%;justify-content:flex-start}.pref-buttons{flex:1}.pref-buttons button{flex:1;padding:9px 7px}.player{padding:11px 8px;gap:4px}.link-row{flex-wrap:wrap}.link-row input{flex-basis:100%}.count-badge{padding:8px;font-size:10px}.filters{gap:8px}.back-link{font-size:10px}}

.embedded-catalog .rep-shell{padding:0 2px 30px}.embedded-catalog header .eyebrow,.embedded-catalog header h1{display:none}.embedded-catalog header{margin-bottom:18px}.embedded-catalog header .muted{margin-top:0}
.catalog-table-wrap{border:1px solid var(--line);border-radius:10px;overflow:auto;background:white}.catalog-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:12px}.catalog-table th{background:#f8faf5;color:var(--muted);font-size:10px;font-weight:500;text-align:left;padding:10px 9px;border-bottom:1px solid var(--line)}.catalog-table td{padding:5px 9px;height:37px;border-bottom:1px solid #edf0e9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.catalog-table tr:last-child td{border-bottom:0}.catalog-table tbody tr{cursor:pointer}.catalog-table tbody tr:hover{background:#f5f8f0}.catalog-table .checked-row{background:#eef4e8}.catalog-table .current-row{box-shadow:inset 3px 0 var(--green)}.catalog-table .selection-col{width:37px;text-align:center}.catalog-table .audio-col{width:48px;text-align:center}.catalog-table th:nth-child(2){width:40%}.catalog-table th:nth-child(3){width:25%}.catalog-table .group-col{font-size:10px;color:var(--muted)}.catalog-table .song-open{display:block;width:100%;padding:5px 0;border:0;border-radius:3px;background:transparent;text-align:left;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.catalog-table input[type=checkbox]{vertical-align:middle}.audio-indicator{color:#adb6a6;font-size:11px}.audio-indicator.available{color:var(--green)}.song-details-meta{display:grid;grid-template-columns:140px 1fr;gap:13px;margin:25px 0;font-size:12px;line-height:1.5}.song-details-meta dt{color:var(--muted)}.song-details-meta dd{margin:0;overflow-wrap:anywhere}#song-details h2{overflow-wrap:anywhere;line-height:1.5}#song-details .dialog-heading{align-items:start;gap:14px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}@media(max-width:480px){.catalog-table .group-col{display:none}.catalog-table th:nth-child(2){width:53%}.catalog-table th:nth-child(3){width:auto}.catalog-table td,.catalog-table th{padding-left:6px;padding-right:6px}.catalog-table .selection-col{width:30px}.catalog-table .audio-col{width:36px}.song-details-meta{grid-template-columns:105px 1fr}}

/* Group filters and compact event lists share the catalogue's table layout. */
.group-buttons{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 18px}
.group-buttons button{padding:8px 12px;border-radius:20px;font-size:12px}
.group-buttons button[aria-pressed=true]{background:var(--green);color:white;border-color:var(--green)}
.filters{grid-template-columns:2fr 1fr 1fr}
.count-badge{display:inline-flex;align-items:center;gap:6px;padding:7px 10px}
.count-badge strong{margin-left:2px}
.count-badge svg,.rating-icon svg,.rating-mark svg,.note-icon svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.legend-favorite{color:#266042;background:#e0f3e7;border-color:#c4e3cf}
.legend-neutral{color:#276384;background:#e0f1fc;border-color:#bdddec}
.legend-dislike{color:#a33939;background:#fce5e5;border-color:#efc5c5}
.catalog-table.event-table tbody tr{cursor:default}
.catalog-table.event-table td{white-space:normal;overflow-wrap:anywhere;vertical-align:middle;padding-top:6px;padding-bottom:6px}
.catalog-table.event-table .title-col{width:auto}
.catalog-table.event-table .artist-col{width:21%}
.catalog-table.event-table .group-col{width:19%}
.catalog-table.event-table .preference-col{width:124px;text-align:center;overflow:visible}
.catalog-table.event-table .tools-col{width:86px;padding-left:4px;padding-right:4px}
.catalog-table.event-table .include-col{width:68px;text-align:center}
.table-song-title{font-weight:500;line-height:1.45}
.mobile-artist{display:none}
.event-table .pref-buttons{justify-content:center;gap:4px}
.event-table .pref-buttons .rating-icon{display:grid;place-items:center;flex:none;width:34px;height:34px;padding:7px;background:#ffffffb3;border-color:#d4dcd5;border-radius:7px}
.event-table .rating-icon[data-pref=favorite]{color:#266042}
.event-table .rating-icon[data-pref=neutral]{color:#276384}
.event-table .rating-icon[data-pref=dislike]{color:#a33939}
.event-table .pref-buttons .rating-icon[aria-pressed=true]{color:white;box-shadow:0 0 0 1px currentColor}
.event-table .pref-buttons .rating-icon[aria-pressed=true][data-pref=favorite]{background:#28794d;border-color:#28794d}
.event-table .pref-buttons .rating-icon[aria-pressed=true][data-pref=neutral]{background:#287dab;border-color:#287dab}
.event-table .pref-buttons .rating-icon[aria-pressed=true][data-pref=dislike]{background:#b54141;border-color:#b54141}
.event-table tbody tr.rated-favorite,.event-table tbody tr.rated-favorite:hover{background:#e0f3e7}
.event-table tbody tr.rated-neutral,.event-table tbody tr.rated-neutral:hover{background:#e0f1fc}
.event-table tbody tr.rated-dislike,.event-table tbody tr.rated-dislike:hover{background:#fce5e5}
.event-table .rated-favorite td:first-child{box-shadow:inset 3px 0 #28794d}
.event-table .rated-neutral td:first-child{box-shadow:inset 3px 0 #287dab}
.event-table .rated-dislike td:first-child{box-shadow:inset 3px 0 #b54141}
.event-table tr.excluded{opacity:.55}
.rating-mark{display:inline-flex;align-items:center;justify-content:center;color:#66736b}
.rating-mark.favorite{color:#266042}.rating-mark.neutral{color:#276384}.rating-mark.dislike{color:#a33939}
.table-tools{display:flex;justify-content:flex-end;gap:4px}
.table-tools .icon-button{width:34px;height:34px;padding:7px;background:#ffffffa6}
.table-tools .has-note{color:#276384;border-color:#85b7d0}
.event-table .song-note{font-size:11px;margin-top:4px;color:#4c6258}
#event-note{margin-top:20px}
@media(max-width:640px){
  .filters{grid-template-columns:1fr 1fr}.filters label:first-child{grid-column:1/-1}
  .group-buttons{gap:6px}.group-buttons button{font-size:11px;padding:8px 10px}
  .catalog-table.event-table .group-col,.catalog-table.event-table .artist-col{display:none}
  .catalog-table.event-table .title-col{width:auto}
  .catalog-table.event-table .preference-col{width:108px;padding-left:3px;padding-right:3px}
  .catalog-table.event-table .tools-col{width:70px;padding-left:2px;padding-right:3px}
  .catalog-table.event-table .include-col{width:52px}
  .table-tools{flex-direction:row;align-items:center;gap:3px}
  .event-table .pref-buttons{gap:3px}
  .event-table .pref-buttons .rating-icon,.table-tools .icon-button{width:30px;height:32px;padding:6px}
  .catalog-table.event-table td{padding-top:4px;padding-bottom:4px}
  .mobile-artist{display:block;color:#687970;font-size:10px;margin-top:3px;line-height:1.4}
}

/* Keep touch scrolling while preventing accidental gesture zoom. */
html{touch-action:pan-x pan-y;-webkit-text-size-adjust:100%;text-size-adjust:100%}
@media(max-width:850px){
  /* Mobile Safari zooms focused text fields when their font is too small. */
  input,select,textarea,.filters input,.filters select,.link-row input{font-size:16px}
}

/* Shared mobile repertoire uses the whole page, with one document scroll. */
@media(max-width:850px){
  html{touch-action:pan-y}
  .filters{grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr)}
  .filters label,.filters input,.filters select{min-width:0;max-width:100%}
  body[data-mode=client],body[data-mode=viewer]{min-height:100svh;width:100%;margin:0}
  body[data-mode=client] .rep-shell,body[data-mode=viewer] .rep-shell{width:100%;max-width:none;margin:0;padding:20px 12px 40px}
  body[data-mode=client] .catalog-table-wrap,body[data-mode=viewer] .catalog-table-wrap{width:calc(100% + 24px);margin-inline:-12px;overflow:visible;border-left:0;border-right:0;border-radius:0}
}
@media(max-width:640px){.filters{grid-template-columns:repeat(2,minmax(0,1fr))}}
