:root{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}.page{background:radial-gradient(circle at top,#22384a 0%,#0f1620 65%);flex-direction:column;gap:16px;min-height:100vh;padding:18px;display:flex}.header{text-align:center;color:#f3e8cf}.header h1{letter-spacing:.12em;text-transform:uppercase;margin:0;font-size:clamp(2rem,3vw,3rem)}.header p{letter-spacing:.22em;text-transform:uppercase;opacity:.9;margin-top:6px;font-size:.88rem}.canvas-wrap{background:#02080d73;border:1px solid #f3e8cf38;border-radius:14px;width:100%;padding:10px}.seating-chart{border-radius:12px;width:100%;height:auto;display:block}.controls{color:#f6e9ce;background:#09121a5c;border:1px solid #f3e8cf2e;border-radius:12px;gap:10px;padding:12px;display:grid}.toolbar-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.field{flex-direction:column;gap:6px;font-size:.9rem;display:flex}.field.compact{min-width:148px}.field input[type=number],.field input[type=text]{color:#f7efdc;background:#09121a94;border:1px solid #f5e3c273;border-radius:8px;width:140px;padding:7px 9px}.field.readonly input{opacity:.8}.toolbar-btn{color:#f7efdb;cursor:pointer;background:#0d1f29b8;border:1px solid #f6e9ce73;border-radius:8px;align-items:center;min-height:36px;padding:8px 14px;font-size:.9rem;line-height:1;text-decoration:none;transition:background .2s,border-color .2s;display:inline-flex}.toolbar-btn:hover{background:#102a37d9;border-color:#f6e9cead}.toolbar-btn:disabled{cursor:wait;opacity:.7}.toolbar-btn-primary{background:#3a708bb8}.toolbar-btn-primary:hover{background:#4282a1d9}.toolbar-metrics{flex-wrap:wrap;align-items:end;gap:10px 14px;display:flex}.file-input{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.import-notice{color:#f6e9ce;margin:0 0 3px;font-size:.9rem}.messages{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;display:grid}.message-block{border-radius:10px;padding:10px 12px;font-size:.9rem}.message-block h2{margin:0 0 8px;font-size:1rem}.message-block ul{gap:4px;margin:0;padding-left:18px;display:grid}.message-block.error{color:#ffd5d5;background:#58171773;border:1px solid #ff81818c}.message-block.warning{color:#ffe7bb;background:#573c1266;border:1px solid #ffd2698c}.chart-bg{fill:#16222e}.chart-main-title{fill:#f3e8cf;letter-spacing:.06em;font-family:Georgia,Times New Roman,serif;font-size:68px}.chart-main-subtitle{fill:#f3e8cf;letter-spacing:.2em;opacity:.95;font-size:28px}.paddle-outline{fill:none;stroke:#f3e8cff7;stroke-width:4.2px;stroke-linecap:round;stroke-linejoin:round}.paddle-grip{fill:#f3e8cff5}.paddle-cap{fill:#f3e8cfe6}.paddle-ball{fill:#f3e8cff2}.paddle-ball-seam{fill:none;stroke:#16222e;stroke-width:1.3px;stroke-linecap:round}.paddle-swoosh{fill:none;stroke:#f3e8cf57;stroke-width:2.8px;stroke-linecap:round}.paddle-swoosh.soft{stroke-width:2.2px;stroke:#f3e8cf33}.connector{fill:none;stroke:#d0c8b4;stroke-width:2.5px;opacity:.8}.court-frame{fill:#213845;stroke:#dfd6c0;stroke-width:2px}.court-divider{stroke:#dfd6c0e6;stroke-width:1.4px}.court-divider-faint{stroke:#dfd6c073;stroke-width:1px}.court-title{fill:#f2dfba;letter-spacing:.1em;font-size:16px;font-weight:700}.guest-name{fill:#f5f4ee;letter-spacing:.02em;font-size:12px}.centre-outer{fill:#2f5e72;stroke:#d8c49d;stroke-width:2.4px}.centre-inner{fill:#3f7a91;stroke:#d8c49dbf;stroke-width:1.2px}.centre-title{fill:#f7ead0;letter-spacing:.2em;font-size:18px;font-weight:600}.couple-name{fill:#f8f0de;dominant-baseline:middle;font-family:Georgia,Times New Roman,serif;font-size:56px}.couple-ampersand{fill:#f8f0de;dominant-baseline:middle;font-family:Georgia,Times New Roman,serif;font-size:28px}.centre-date{fill:#f7ead0;letter-spacing:.14em;font-size:21px;font-weight:500}.centre-side-connector{fill:none;stroke:#f7ead0cc;stroke-width:1.4px}.instruction-text{fill:#f3e8cff2;letter-spacing:.01em;font-size:20px}.sand-shore{fill:#e9dac2}.sand-dot{fill:#b1977652}.sand-grain-layer{opacity:.72}
