:root{color-scheme:light;--paper:#f7f6f2;--white:#fff;--ink:#283c34;--muted:#7c8078;--green:#294e42;--line:#e5e6df;--seat:#f7f8f4;--serif:Georgia,'Times New Roman',serif;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-family:var(--sans);color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}body{margin:0}button,input,textarea{font:inherit}button{cursor:pointer}button,textarea,input,a{ -webkit-tap-highlight-color:transparent}button:disabled{cursor:wait;opacity:.6}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--green);outline-offset:4px}button svg,.search-box svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;flex:none}[hidden]{display:none!important}
.app-shell{max-width:1680px;margin:0 auto;padding:0 56px}.masthead{height:105px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink);font-size:11px;letter-spacing:2px;font-weight:650;line-height:1.6}.brand-mark{height:42px;width:42px;border:1px solid #cfd6c8;border-radius:50%;display:grid;place-items:center}.brand-mark svg{width:30px;height:30px}.brand-subtitle{display:block;font-size:9px;font-weight:400;letter-spacing:2.5px;color:var(--muted)}.masthead-note{display:flex;align-items:center;gap:9px;font-size:11px;color:var(--muted)}.small-dot{width:5px;height:5px;background:#7d9177;border-radius:50%;display:inline-block;flex:none}
.intro{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:49px 0 34px}.eyebrow{font-size:9px;font-weight:600;letter-spacing:2px;color:#78896f;margin:0 0 15px}h1{font-family:var(--serif);font-weight:400;font-size:clamp(36px,3.5vw,53px);line-height:1.12;letter-spacing:-1.8px;margin:0 0 18px}h1 em{font-weight:400;color:#65816a}.intro-copy{font-size:12px;line-height:1.9;color:var(--muted);margin:0}.primary-actions{padding-top:24px;flex:none}.action-buttons{display:flex;gap:10px}.button{display:inline-flex;align-items:center;justify-content:center;gap:9px;border-radius:7px;font-size:11px;font-weight:550;line-height:18px;padding:12px 17px;white-space:nowrap;transition:background .15s,box-shadow .15s;border:1px solid transparent}.button-primary{background:var(--green);color:white;border-color:var(--green);box-shadow:0 2px 3px #294e4210}.button-primary:hover{background:#1f3e33}.button-light{background:var(--white);border-color:#dcded6;color:var(--ink)}.button-light:hover{background:#f0f2eb}.save-status{display:flex;gap:7px;align-items:center;justify-content:flex-end;font-size:10px;color:var(--muted);margin:13px 0 0}.save-status.unsaved .small-dot{background:#b38856}
.overview{display:flex;align-items:center;border:1px solid var(--line);border-radius:10px;background:#fcfcf9;padding:25px 28px;margin-bottom:41px;gap:0}.stat{display:flex;align-items:center;gap:12px;padding:0 33px;border-right:1px solid var(--line)}.stat:first-child{padding-left:0}.stat-number{font-family:var(--serif);font-size:32px;line-height:1}.stat-label{font-size:11px;color:var(--muted)}.layout-note{margin-left:auto;display:flex;align-items:center;gap:15px;padding-left:24px;color:#667260;font-size:11px}.layout-note>svg{width:42px;height:30px;fill:none;stroke:#95a18b;stroke-width:1.5;stroke-linecap:round}.layout-note span span{display:block;font-size:10px;color:#93968d;margin-top:5px}
.chart-toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:22px}h2{font-family:var(--serif);font-size:25px;line-height:1.2;font-weight:400;margin:0}.chart-hint{font-size:11px;color:var(--muted);margin:8px 0 0}.chart-tools{display:flex;align-items:center;gap:18px}.search-box{display:flex;align-items:center;gap:9px;background:white;border:1px solid var(--line);border-radius:6px;padding:10px 12px;color:#8c9586}.search-box input{width:156px;border:none;min-width:0;background:transparent;color:var(--ink);font-size:11px;outline:none}.search-box:focus-within{outline:2px solid #8b9e80;outline-offset:2px}.search-box input:focus-visible{outline:none}.search-box input::placeholder{color:#959b91}.text-button{border:0;background:transparent;color:#66745f;padding:5px 0;font-size:11px;text-decoration:underline;text-underline-offset:4px;text-decoration-color:#b8c1af;white-space:nowrap}.text-button:hover{color:#294e42}.icon-button{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);color:#7c8876;background:transparent;border-radius:6px;padding:9px}.icon-button:hover{background:#edf0e7}.chart-meta{display:flex;justify-content:space-between;align-items:center;font-size:9px;color:#8b9285;margin-bottom:15px;gap:15px;min-height:14px}.chart-meta>span:first-child{display:flex;align-items:center;white-space:nowrap}.legend-dot{display:inline-block;width:7px;height:7px;border:1px dashed #bcc5b4;border-radius:2px;margin-right:6px}.legend-dot.filled{background:#dce7d8;border:1px solid #c0cdbb;margin-left:18px}
.tables-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(4,minmax(300px,auto));gap:20px;min-width:1440px}.table-card{border:1px solid #e3e5dd;border-radius:10px;background:#fff;padding:20px 20px 18px;box-shadow:0 2px 4px #283c3402;min-width:0;break-inside:avoid}.table-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:21px}.table-heading h3{display:flex;align-items:center;gap:9px;font-size:12px;font-weight:550;letter-spacing:.1px;margin:0}.table-heading h3 svg{width:15px;height:15px;stroke:#91a085;stroke-width:1.4;fill:none;stroke-linecap:round;stroke-linejoin:round}.table-count{font-size:9px;color:#85917b;background:#f3f5ee;padding:4px 8px;border-radius:4px;font-variant-numeric:tabular-nums}.table-card.complete .table-count{background:#e8f0e4;color:#53734a}.seat-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.seat{position:relative;display:flex;flex-direction:column;align-items:stretch;background:#fafbf8;border:1px dashed #dce1d3;border-radius:6px;min-width:0;min-height:86px;transition:border-color .15s,background .15s}.seat.filled{background:#f0f4ec;border:1px solid #dde5d6}.seat:focus-within{background:#fff;border:1px solid #8fa27f;box-shadow:0 0 0 3px #9aad881e}.seat.match{border-color:#8eaa6f;background:#e5eedb;box-shadow:0 0 0 2px #b4c89a30}.seat-number{font-size:8px;line-height:1;color:#96a18c;text-align:center;padding:10px 0 4px;font-variant-numeric:tabular-nums}.seat textarea{display:block;resize:none;border:0;outline:none;width:100%;height:55px;padding:4px 4px 7px;color:#43523a;background:transparent;font-size:11px;line-height:1.4;text-align:center;border-radius:5px;font-weight:450;scrollbar-width:thin}.seat textarea:focus-visible{outline:none}.seat textarea::placeholder{color:#b1b9a7;font-weight:400;font-size:10px}.print-name{display:none}.tabletop{height:29px;border:1px solid #e6e1d5;background:#f6f3ec;border-radius:8px;margin:9px 0;display:flex;align-items:center;justify-content:center;gap:10px;color:#b1a98f;font-size:8px;letter-spacing:2px;user-select:none}.tabletop::before,.tabletop::after{content:'';display:block;height:1px;background:#e6e0d1;width:25px}.no-results{text-align:center;padding:70px 20px;background:#fff;border:1px solid var(--line);border-radius:10px}.no-results h3{font-family:var(--serif);font-weight:400;font-size:27px;margin:0 0 10px}.no-results p{font-size:12px;color:var(--muted);margin-bottom:20px}.footer{display:flex;align-items:center;justify-content:space-between;margin:35px 0 0;padding:24px 0 28px;border-top:1px solid var(--line);font-size:10px;color:#969b90}.footer>span:first-child{font-family:var(--serif);font-style:italic;font-size:13px}.footer-tools{display:flex;align-items:center;gap:25px}.footer .text-button{font-size:10px;color:#8b9484}
dialog{border:1px solid var(--line);border-radius:16px;padding:30px;width:560px;max-width:calc(100% - 32px);max-height:calc(100dvh - 40px);color:var(--ink);box-shadow:0 24px 100px #14251940;background:var(--paper)}dialog::backdrop{background:#1d312c66;backdrop-filter:blur(4px)}.dialog-header{display:flex;justify-content:space-between;align-items:flex-start;gap:15px}.dialog-header h2{font-size:29px}.dialog-header .eyebrow{margin-bottom:10px}.dialog-copy{font-size:12px;line-height:1.7;color:var(--muted);margin:17px 0 20px}code{font-size:11px;color:#486647}.drop-zone{display:flex;align-items:center;flex-direction:column;border:1px dashed #bec9b3;border-radius:9px;background:#eff3e9;padding:20px;gap:7px;font-size:12px;position:relative}.drop-zone.dragging{background:#e2ebd7;border-color:#526e3c}.drop-zone>svg{height:24px;width:24px;fill:none;stroke:#798d66;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;margin-bottom:3px}.drop-zone strong{font-weight:550}.drop-zone>span{font-size:11px;color:var(--muted)}.file-label{color:var(--green);text-decoration:underline;text-underline-offset:3px;cursor:pointer}.drop-zone input{position:absolute;left:50%;top:60px;width:1px;height:1px;opacity:0}.drop-zone:focus-within{outline:2px solid var(--green);outline-offset:2px}.drop-zone>.file-status{font-size:10px;margin-top:3px;overflow-wrap:anywhere;text-align:center}.field-label{display:block;font-size:11px;font-weight:550;margin:21px 0 9px}.csv-input{width:100%;resize:vertical;min-height:120px;border:1px solid #d9ded1;border-radius:7px;padding:12px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.65;background:white;color:var(--ink)}.csv-input::placeholder{color:#abb0a3}.import-error{font-size:12px;line-height:1.6;color:#a23a2b;padding:10px 12px;background:#f9eae4;border:1px solid #efd4c9;border-radius:6px;margin-bottom:0;overflow-wrap:anywhere}.dialog-footer{display:flex;align-items:center;gap:20px;justify-content:space-between;border-top:1px solid var(--line);padding-top:20px;margin-top:23px}.dialog-footer>span{max-width:175px;font-size:10px;line-height:1.6;color:var(--muted)}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);padding:13px 20px;border-radius:8px;background:#294e42;color:white;box-shadow:0 5px 25px #142d2425;max-width:calc(100vw - 32px);font-size:12px;line-height:1.5;z-index:10;text-align:center}
@media(min-width:1550px){.app-shell{padding:0 48px}.table-card{padding:18px 16px}.seat-row{gap:6px}.seat textarea{font-size:10px}}
@media(max-width:1100px){.app-shell{padding:0 30px}.intro{gap:20px}h1{font-size:39px}.intro-copy{font-size:11px}.stat{padding:0 22px;gap:9px}.layout-note{gap:10px;padding-left:20px}.layout-note span span{max-width:155px;line-height:1.6}.table-card{padding:18px 13px}.seat-row{gap:5px}.seat textarea{font-size:10px}.chart-tools{gap:12px}.search-box input{width:140px}}
@media(max-width:850px){.masthead-note{display:none}.masthead{height:88px}.intro{padding-top:35px;align-items:flex-start;flex-direction:column;gap:0}.primary-actions{padding-top:21px}.save-status{justify-content:flex-start}.desktop-break{display:none}.intro-copy{max-width:480px}.overview{padding:22px;margin-bottom:30px;justify-content:space-between}.stat{padding:0 24px;flex:1}.stat:last-of-type{border-right:0;padding-right:0}.layout-note{display:none}.chart-toolbar{align-items:flex-start;flex-direction:column;gap:18px}.chart-tools{width:100%}.search-box{flex:1;max-width:300px}.search-box input{width:100%}.chart-meta{font-size:8px}.table-card{padding:20px 22px}.seat-row{gap:9px}.seat textarea{font-size:12px;height:57px}.seat{min-height:88px}.footer-tools>span{display:none}}
@media(max-width:480px){.app-shell{padding:0 18px}.intro{padding-top:30px;padding-bottom:25px}h1{font-size:36px;letter-spacing:-1.6px}.eyebrow{font-size:8px;letter-spacing:1.5px}.overview{padding:19px 16px}.stat{gap:6px;flex-direction:column;align-items:flex-start;padding:0 18px}.stat-number{font-size:29px}.stat-label{font-size:9px}.chart-tools{gap:14px}.search-box{padding:9px}.search-box input{font-size:10px}.chart-meta{align-items:flex-start;gap:15px;line-height:1.6}.chart-meta>span:last-child{max-width:165px;text-align:right}.table-card{padding:17px 11px}.table-heading{margin-bottom:16px}.seat-row{gap:4px}.seat-number{padding-top:9px}.seat textarea{font-size:10px;padding-left:2px;padding-right:2px;height:60px}.seat textarea::placeholder{font-size:9px}.seat{min-height:87px}.tabletop{height:25px;margin:7px 0}.table-heading h3{font-size:11px}.table-count{font-size:8px}.footer{gap:12px}.footer>span:first-child{font-size:12px}dialog{padding:22px}.dialog-header h2{font-size:25px}.dialog-footer{align-items:flex-start;flex-direction:column;gap:12px}.dialog-footer>span{max-width:none}.dialog-footer .button{width:100%}}
@media print{@page{size:landscape;margin:12mm}body{background:white;color:#162a20}.app-shell{max-width:none;padding:0}.masthead,.primary-actions,.chart-tools,.chart-hint,.chart-meta,.footer,dialog,.toast,.no-results{display:none!important}.intro{padding:0 0 14px}.intro .eyebrow,.intro-copy{display:none}h1{font-size:30px;margin:0}h1 em{color:inherit}.overview{padding:12px 18px;margin-bottom:16px;break-inside:avoid}.stat-number{font-size:24px}.layout-note{display:flex}.chart-toolbar{margin-bottom:12px}.tables-grid{grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(4,auto);min-width:0;gap:10px}.table-card,.table-card[hidden]{display:block!important;break-inside:avoid;box-shadow:none;padding:12px}.table-heading{margin-bottom:12px}.seat-row{gap:6px}.seat{min-height:65px;border:1px solid #c8cdc4!important;background:white!important;box-shadow:none!important}.seat-number{padding-top:7px}.seat textarea{display:none}.print-name{display:block;text-align:center;padding:4px 3px 8px;font-size:10px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;color:#162a20}.seat-number{font-size:8px;color:#71786a}.tabletop{height:20px;margin:6px 0;color:#8c887c}.tabletop:before,.tabletop:after{display:none}.table-count{background:none!important;color:#4a5e40!important}.chart-section{display:block}}
.export-actions{display:flex;gap:8px}
.export-status{font-size:11px;line-height:1.6;color:var(--green);margin:12px 0 0}
.confirm-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
@media(max-width:480px){.export-actions{width:100%}.export-actions .button{flex:1;padding-left:10px;padding-right:10px}}
/* Compact typography for an internal planning tool. */
:root{--serif:var(--sans)}
.masthead{height:76px}.brand{letter-spacing:1px}.brand-mark{width:34px;height:34px;border-radius:6px}.brand-mark svg{width:26px;height:26px}
.intro{padding:30px 0 26px}h1{font-size:32px;font-weight:600;letter-spacing:-.8px;margin-bottom:12px}.primary-actions{padding-top:0}
.overview{margin-bottom:28px}.stat-number{font-size:28px;font-weight:550}h2{font-size:21px;font-weight:600}.dialog-header h2{font-size:23px}
.footer>span:first-child{font-family:var(--sans);font-size:10px;font-style:normal}
@media(max-width:850px){.intro{gap:20px}.primary-actions{padding-top:0}.masthead-note{display:none}}
@media(max-width:480px){h1{font-size:28px}.chart-hint{line-height:1.6}.dialog-header h2{font-size:22px}}
@media print{.intro{padding:0 0 14px}h1{font-size:25px}.stat-number{font-size:22px}}

/* Table positions stay fixed across screen sizes and search results. */
.tables-scroll {
  overflow-x: auto;
  padding: 4px 4px 12px;
  margin: -4px;
}
.tables-scroll:focus-visible {
  outline: 2px solid var(--green);
  outline-offset: 2px;
}
.layout-help {
  margin: 0 0 16px;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.6;
}
@media screen {
  .tables-grid .table-card { padding: 16px 12px; }
  .tables-grid .seat-row { gap: 5px; }
  .tables-grid .seat { min-height: 98px; }
  .tables-grid .seat textarea { font-size: 11px; height: 74px; }
}
@media print {
  .layout-help { display: none; }
  .tables-scroll { overflow: visible; padding: 0; margin: 0; }
  .tables-grid .table-card { padding: 8px; }
  .tables-grid .seat-row { gap: 3px; }
  .tables-grid .print-name { font-size: 8px; }
}

/* Select a source seat, then drag it or choose a destination button. */
.seat-swap-button {
  flex: none;
  min-height: 27px;
  padding: 5px 2px;
  margin: auto 3px 3px;
  border: 0;
  border-top: 1px solid #dce3d6;
  border-radius: 0 0 3px 3px;
  background: transparent;
  color: #53664a;
  font-size: 9px;
  font-weight: 550;
  line-height: 1.25;
  cursor: pointer;
}
.seat-swap-button:hover { background: #e3ebdb; }
.seat-swap-button:focus-visible { outline-offset: 0; }
.swap-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin: 0 0 16px;
  padding: 10px 14px;
  border: 1px solid #bacbad;
  border-radius: 7px;
  background: #edf3e7;
}
.swap-controls p { margin: 0; color: var(--green); font-size: 12px; line-height: 1.6; }
.swap-controls .button { padding: 6px 11px; }
.swapping .seat textarea { pointer-events: none; user-select: none; }
.seat.swap-active {
  border: 1px solid #638452;
  background: #e7efde;
  box-shadow: 0 0 0 2px #829d6530;
  cursor: grab;
  animation: seat-wiggle .24s ease-in-out infinite alternate;
  z-index: 1;
}
.seat.swap-active .seat-swap-button { color: #314e25; }
.seat.dragging { animation: none; opacity: .5; cursor: grabbing; }
.seat.drop-target {
  outline: 2px solid var(--green);
  outline-offset: 2px;
  background: #dcebcf;
}
@keyframes seat-wiggle {
  from { transform: rotate(-1.5deg); }
  to { transform: rotate(1.5deg); }
}
@media (prefers-reduced-motion: reduce) {
  .seat.swap-active { animation: none; }
}
@media (max-width: 480px) {
  .swap-controls { align-items: flex-start; gap: 10px; padding: 10px; }
  .swap-controls p { font-size: 10px; }
  .seat-swap-button { min-height: 34px; }
}
@media print {
  .seat-swap-button, .swap-controls { display: none !important; }
  .seat.swap-active, .seat.dragging, .seat.drop-target {
    animation: none;
    transform: none;
    opacity: 1;
    outline: none;
    box-shadow: none;
  }
}

.table-swap-button {
  display: block;
  width: 100%;
  margin: 13px 0 0;
  padding: 7px 10px;
  border: 1px solid var(--line);
  border-radius: 5px;
  background: #f8faf5;
  color: #53664a;
  font-size: 10px;
  font-weight: 550;
  cursor: pointer;
}
.table-swap-button:hover { background: #e9f0e2; border-color: #b3c5a5; }
.swapping-tables .seat { pointer-events: none; }
.swapping-tables .seat-swap-button { opacity: .45; }
.table-card.table-swap-active {
  position: relative;
  z-index: 2;
  outline: 2px solid #638452;
  outline-offset: 1px;
  cursor: grab;
  animation: table-wiggle .3s ease-in-out infinite alternate;
}
.table-card.table-dragging { animation: none; opacity: .5; cursor: grabbing; }
.table-card.table-drop-target {
  outline: 3px solid var(--green);
  outline-offset: 1px;
  background: #edf5e6;
}
@keyframes table-wiggle {
  from { transform: rotate(-.5deg); }
  to { transform: rotate(.5deg); }
}
@media (prefers-reduced-motion: reduce) {
  .table-card.table-swap-active { animation: none; }
}
@media print {
  .table-swap-button { display: none !important; }
  .table-card.table-swap-active, .table-card.table-dragging, .table-card.table-drop-target {
    animation: none;
    transform: none;
    opacity: 1;
    outline: none;
    box-shadow: none;
  }
}

/* Leave room for the eight exposed table ends, including in the scroll area. */
.tables-grid { min-width: 1520px; padding-inline: 40px; }
.tabletop { position: relative; }
.head-slot {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 28px;
  height: 28px;
  padding: 0;
  border: 2px solid #9ba991;
  border-radius: 50%;
  background: white;
  cursor: pointer;
}
.head-slot-left { left: -48px; }
.head-slot-right { right: -48px; }
.head-slot:hover { border-color: var(--green); }
.head-slot[aria-pressed="true"] { background: var(--green); border-color: var(--green); }
@media print {
  .tables-grid { min-width: 0; padding-inline: 24px; }
  .head-slot { width: 18px; height: 18px; print-color-adjust: exact; -webkit-print-color-adjust: exact; }
  .head-slot-left { left: -31px; }
  .head-slot-right { right: -31px; }
}
