:root{color-scheme:light dark;--surface: #ffffff;--surface-raised: #f6f7f9;--surface-sunken: #eceef2;--border: #d3d7de;--border-strong: #b0b6c0;--text: #14181f;--text-muted: #5b6472;--accent: #1f3a5f;--accent-contrast: #ffffff;--accent-soft: #e5ecf5;--danger: #a12c22;--danger-soft: #fbeae8;--warning: #8a5a00;--warning-soft: #fdf1dc;--success: #2f6f4f;--success-soft: #e4f1ea;--seat-fill: #ffffff;--seat-empty-fill: #f2f4f7;--seat-stroke: #98a1af;--center-fill: #eef1f6;--object-fill: #dfe4ec;--region-stroke: #7f8ea3;--radius: 8px;--radius-sm: 5px;--shadow: 0 1px 2px rgb(20 24 31 / 8%), 0 4px 12px rgb(20 24 31 / 6%);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--font: "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;--font-size: 14px}@media (prefers-color-scheme: dark){:root{--surface: #171a20;--surface-raised: #1f232b;--surface-sunken: #101318;--border: #333944;--border-strong: #4c5461;--text: #e9ecf1;--text-muted: #a1abba;--accent: #8fb3dd;--accent-contrast: #10141a;--accent-soft: #24303f;--danger: #f0938a;--danger-soft: #3a2320;--warning: #e5bd76;--warning-soft: #362b16;--success: #85c9a5;--success-soft: #1d2f26;--seat-fill: #262b34;--seat-empty-fill: #1c2027;--seat-stroke: #5b6573;--center-fill: #20252d;--object-fill: #2a303a;--region-stroke: #6e7c8f;--shadow: 0 1px 2px rgb(0 0 0 / 40%), 0 4px 12px rgb(0 0 0 / 30%)}}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);font-size:var(--font-size);color:var(--text);background:var(--surface-sunken);-webkit-text-size-adjust:100%}h1,h2,h3,h4{margin:0;font-weight:600;line-height:1.25}h1{font-size:1.4rem}h2{font-size:1.05rem}h3{font-size:.95rem}p{margin:0;line-height:1.5}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}button{font:inherit;color:inherit;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);cursor:pointer;min-height:34px;display:inline-flex;align-items:center;gap:var(--space-2);transition:background .12s ease,border-color .12s ease}button:hover:not(:disabled){background:var(--surface-raised);border-color:var(--border-strong)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);color:var(--accent-contrast);border-color:var(--accent);font-weight:600}button.primary:hover:not(:disabled){background:var(--accent);filter:brightness(1.08)}button.subtle{border-color:transparent;background:transparent}button.subtle:hover:not(:disabled){background:var(--surface-raised);border-color:var(--border)}button.danger{color:var(--danger);border-color:var(--border)}button.pressed{background:var(--accent-soft);border-color:var(--accent)}input,select,textarea{font:inherit;color:inherit;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-2);min-height:34px;width:100%}textarea{min-height:120px;resize:vertical;font-family:inherit}label{display:block;font-size:.82rem;color:var(--text-muted);margin-bottom:var(--space-1)}.field{margin-bottom:var(--space-3)}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2)}.checkbox{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);font-size:.88rem;color:var(--text);cursor:pointer}.checkbox input{width:auto;min-height:auto;margin:0;accent-color:var(--accent)}.app{display:flex;flex-direction:column;height:100%;background:var(--surface-sunken)}.app-header{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-4);background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.app-header .brand{display:flex;flex-direction:column}.app-header .brand small{color:var(--text-muted)}.steps{display:flex;gap:var(--space-1);flex-wrap:wrap}.steps button{border-color:transparent;background:transparent}.steps button[aria-current=step]{background:var(--accent-soft);border-color:var(--accent);font-weight:600}.header-actions{margin-left:auto;display:flex;gap:var(--space-2);flex-wrap:wrap}.badge{font-size:.75rem;padding:2px var(--space-2);border-radius:999px;background:var(--success-soft);color:var(--success);border:1px solid currentColor;white-space:nowrap}.workspace{flex:1;display:grid;grid-template-columns:300px minmax(0,1fr) 320px;gap:var(--space-3);padding:var(--space-3);min-height:0}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;min-height:0;overflow:hidden}.panel-header{padding:var(--space-3);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap}.panel-body{padding:var(--space-3);overflow:auto;flex:1;min-height:0}.panel-body.tight{padding:var(--space-2)}.panel-footer{padding:var(--space-3);border-top:1px solid var(--border)}.stack{display:flex;flex-direction:column;gap:var(--space-2)}.row{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.muted{color:var(--text-muted);font-size:.85rem}.empty-state{color:var(--text-muted);font-size:.88rem;padding:var(--space-4);text-align:center}.notice{border:1px solid var(--border);border-left-width:4px;border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font-size:.85rem;margin-bottom:var(--space-2);background:var(--surface-raised)}.notice.warning{border-left-color:var(--warning);background:var(--warning-soft);color:var(--warning)}.notice.error{border-left-color:var(--danger);background:var(--danger-soft);color:var(--danger)}.notice.success{border-left-color:var(--success);background:var(--success-soft);color:var(--success)}.notice strong{display:block;margin-bottom:var(--space-1)}.canvas-wrap{flex:1;min-height:0;position:relative;overflow:hidden;background:var(--surface-sunken)}.canvas-wrap svg{display:block;width:100%;height:100%;touch-action:none}.canvas-toolbar{display:flex;gap:var(--space-1);padding:var(--space-2);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;background:var(--surface)}.canvas-toolbar .separator{width:1px;align-self:stretch;background:var(--border);margin:0 var(--space-1)}.seat-shape{cursor:pointer}.seat-shape:focus-visible{outline:none}.seat-shape.selected .seat-rect,.center-shape.selected .center-rect,.object-shape.selected .object-rect,.region-shape.selected .region-rect{stroke:var(--accent);stroke-width:3}.seat-shape.violating .seat-rect{stroke:var(--danger);stroke-width:2.5;stroke-dasharray:6 3}.seat-shape.drop-target .seat-rect{stroke:var(--success);stroke-width:3}.seat-name{pointer-events:none;-webkit-user-select:none;user-select:none}.student-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.student-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2);border:1px solid transparent;border-radius:var(--radius-sm);background:var(--surface-raised);cursor:grab}.student-item:hover{border-color:var(--border)}.student-item.active{border-color:var(--accent);background:var(--accent-soft)}.student-item.seated{background:transparent}.student-item .name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.student-item .seat-tag{font-size:.72rem;color:var(--text-muted);border:1px solid var(--border);border-radius:999px;padding:0 6px;white-space:nowrap}.student-item .lock{font-size:.72rem}.rule-card{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-2);margin-bottom:var(--space-2);background:var(--surface-raised)}.rule-card.disabled{opacity:.6}.rule-card .rule-title{font-weight:600;font-size:.9rem;display:flex;align-items:center;gap:var(--space-2)}.tag{font-size:.7rem;border-radius:999px;padding:1px 8px;border:1px solid currentColor;white-space:nowrap}.tag.required{color:var(--danger)}.tag.preferred{color:var(--text-muted)}.tag.ok{color:var(--success)}.suggestion-card{border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-3);margin-bottom:var(--space-3);background:var(--surface-raised)}.suggestion-card.applied{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.score{font-size:1.6rem;font-weight:700;line-height:1}.score-bar{height:6px;border-radius:999px;background:var(--surface-sunken);overflow:hidden;margin:var(--space-2) 0}.score-bar span{display:block;height:100%;background:var(--success)}.score-bar.invalid span{background:var(--danger)}.suggestion-preview{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);overflow:hidden}.suggestion-preview svg{display:block;width:100%;height:auto}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0c108c;display:flex;align-items:center;justify-content:center;padding:var(--space-4);z-index:40}.dialog{background:var(--surface);border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow);width:min(720px,100%);max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.dialog-header,.dialog-footer{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.dialog-footer{border-bottom:none;border-top:1px solid var(--border);justify-content:flex-end}.dialog-body{padding:var(--space-4);overflow:auto}.preview-table{width:100%;border-collapse:collapse;font-size:.82rem}.preview-table th,.preview-table td{border:1px solid var(--border);padding:var(--space-1) var(--space-2);text-align:left;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}.preview-table th{background:var(--surface-raised)}.preview-table td.name-column{background:var(--accent-soft);font-weight:600}.table-scroll{overflow:auto;max-height:260px;border-radius:var(--radius-sm)}.start{max-width:960px;margin:0 auto;padding:var(--space-6) var(--space-4);display:flex;flex-direction:column;gap:var(--space-5)}.start-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--space-3)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);text-align:left;display:flex;flex-direction:column;gap:var(--space-2);align-items:stretch;min-height:auto}.card strong{font-size:.95rem}.card .card-preview{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-raised);overflow:hidden}.card .card-preview svg{display:block;width:100%;height:auto}.export-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--space-3);height:100%;min-height:0}.export-preview{background:var(--surface-sunken);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);overflow:auto;display:flex;justify-content:center;align-items:flex-start}.export-page{background:#fff;box-shadow:var(--shadow);max-width:100%}.export-page svg{display:block;width:100%;height:auto}@media (max-width: 1180px){.workspace{grid-template-columns:260px minmax(0,1fr)}.workspace>.panel.tertiary{grid-column:1 / -1;max-height:320px}.export-layout{grid-template-columns:minmax(0,1fr)}}@media (max-width: 820px){.workspace{grid-template-columns:minmax(0,1fr);grid-auto-rows:minmax(220px,auto);overflow:auto}.workspace>.panel{max-height:none}.workspace>.panel.canvas-panel{min-height:60vh}.app-header{gap:var(--space-2)}.steps{order:3;width:100%}.steps button{flex:1;justify-content:center}button{min-height:40px}.student-item{padding:var(--space-3) var(--space-2)}}@media print{body{background:#fff}.app-header,.panel:not(.print-target),.canvas-toolbar,.no-print{display:none!important}.workspace,.export-layout{display:block;padding:0}.export-preview{border:none;padding:0;background:none;overflow:visible}.export-page{box-shadow:none}@page{margin:0}}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
