/* The floor planner (assets/js/planner.js), scoped to its root, .fp. */
.fp{--bg:#f6f4f0;--ink:#2b2622;--muted:#7a7068;--line:#e4dfd7;--accent:#a3346f;--accent-soft:#f6e6ef;--bad:#d64545;--warn:#d98a1c;--ok:#2f8a57;--svc:#f1ebe2;color-scheme:light}
.fp button,.fp input,.fp select{font:inherit;color:inherit}
.fp button{cursor:pointer}
.fp input[type=number]{width:72px;padding:5px 8px;border:1px solid var(--line);border-radius:8px;background:#fff}
.fp select{padding:5px 8px;border:1px solid var(--line);border-radius:8px;background:#fff}
.fp .muted{color:var(--muted)}
.fp .btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px}
.fp .btn:hover{border-color:#cbbfb1}
.fp .btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.fp .btn.danger{color:var(--bad)}
.fp .pill{display:inline-block;border-radius:999px;padding:3px 10px;font-weight:600;font-size:12px;white-space:nowrap}
.fp .pill.ok{background:#e3f3e9;color:var(--ok)}
.fp .pill.bad{background:#fde7e7;color:var(--bad)}
.fp .pill.info{background:#fff3df;color:#9a6110}
.fp .stepper{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}
.fp .stepper button{border:0;background:#f5f3ef;width:30px;height:30px;font-size:16px}
.fp .stepper button.max{opacity:.4}
.fp .stepper b{min-width:36px;text-align:center}
.fp .stepper s{color:var(--muted);font-weight:400;margin-left:3px;font-size:11px}
.fp .flash{color:var(--bad);font-size:12px;margin-top:6px}
.fp .ghost{position:fixed;pointer-events:none;transform:translate(-50%,-50%);z-index:999;opacity:.85}
.fp .issues{list-style:none;margin:0;padding:0}
.fp .issues li{display:flex;gap:8px;align-items:flex-start;padding:7px 8px;border-radius:8px;background:#fff;margin-bottom:6px;font-size:13px;cursor:pointer}
.fp .issues li:hover{background:#faf6f0}
.fp .dot{flex:none;width:8px;height:8px;border-radius:50%;margin-top:6px;background:var(--muted)}
.fp .dot.error{background:var(--bad)}
.fp .dot.warn{background:var(--warn)}
.fp .dot.info{background:#c9a35b}
.fp .rules{margin:6px 0 0;padding-left:18px;color:#5b524a;font-size:13px}
.fp .rules li{margin-bottom:4px}
.fp /* ---------- plan (SVG,.fp units = feet) ---------- */
.planner{position:relative;width:100%;height:100%;overflow:hidden;touch-action:none}
.fp .planner svg{width:100%;height:100%;display:block;user-select:none;-webkit-user-select:none}
.fp .floor{fill:#fff}
.fp .open{fill:#faf8f4;stroke:#b8b0a5;stroke-width:.2;stroke-dasharray:1 .6}
.fp .wall{fill:none;stroke:#4d4640;stroke-width:.55}
.fp .wall-thin{fill:none;stroke:#8d857c;stroke-width:.25}
.fp .boh{fill:#efebe5;stroke:#8d857c;stroke-width:.3}
.fp .col{fill:#6d655c}
.fp .door{fill:none;stroke:#9d958c;stroke-width:.15}
.fp .gap{stroke:#fff;stroke-width:.8}
.fp .roomlbl{font-size:1.5px;fill:#a39a8f;letter-spacing:.15px;text-anchor:middle;font-weight:600}
.fp .item .body{fill:#fff;stroke:#5f5750;stroke-width:.18}
.fp .item.service .body{fill:var(--svc)}
.fp .item.zone .body{fill:url(#pdance);stroke:#cbbfae;stroke-width:.2}
.fp .chair{fill:#fff;stroke:#5f5750;stroke-width:.14}
.fp .item.warn .body,.fp .item.warn .chair{stroke:var(--warn);stroke-width:.3}
.fp .item.error .body,.fp .item.error .chair{stroke:var(--bad);stroke-width:.35}
.fp .item.error .body{fill:#fdeaea}
.fp .item.hl .body{stroke:var(--accent);stroke-width:.45}
.fp .item.hit .body{fill:transparent;stroke:none}
.fp .outline{fill:none;stroke:var(--accent);stroke-width:.14;stroke-dasharray:.6 .4}
.fp .handle-line{stroke:var(--accent);stroke-width:.12}
.fp .handle{fill:#fff;stroke:var(--accent);stroke-width:.22;cursor:alias}
.fp .num,.fp .lbl{text-anchor:middle;dominant-baseline:central;pointer-events:none}
.fp .num{font-size:1.8px;font-weight:700;fill:#3b352f}
.fp .lbl{font-weight:600;fill:#6b5f52}
.fp .planner .item{cursor:grab}
.fp .planner.dragging,.fp .planner.dragging .item{cursor:grabbing}
.fp.readonly .planner .item{cursor:pointer}
.fp.readonly .handle,.fp.readonly .handle-line{display:none}
.fp .mini{pointer-events:none;display:block;width:100%;height:auto}
.fp .ticon{pointer-events:none;display:block;flex:none}
.fp /* ---------- start: guest count,.fp then template gallery ---------- */
.page{height:100%;overflow:auto}
.fp .hero{max-width:780px;margin:0 auto;padding:12vh 24px 90px;text-align:center}
.fp .eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:12px;color:var(--accent);font-weight:700;margin:0}
.fp .hero h1{font-size:40px;margin:8px 0 32px;font-family:Georgia,serif;font-weight:400}
.fp .sizes{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.fp .size{background:#fff;border:1px solid var(--line);border-radius:16px;padding:28px 16px;transition:transform .15s,border-color .15s}
.fp .size:hover{border-color:var(--accent);transform:translateY(-2px)}
.fp .size.on{border-color:var(--accent)}
.fp .size b{display:block;font-size:48px;font-family:Georgia,serif;font-weight:400;line-height:1.1}
.fp .size span{color:var(--muted)}
.fp .exact{margin-top:28px;color:var(--muted);display:flex;gap:8px;justify-content:center;align-items:center}
.fp .gallery{max-width:1180px;margin:0 auto;padding:28px 24px 60px}
.fp .gallery h1{font-family:Georgia,serif;font-weight:400;font-size:32px;margin:6px 0 4px}
.fp .gallery h2{font-size:14px;color:var(--muted);font-weight:600;margin:36px 0 0}
.fp .linkbtn{background:none;border:0;color:var(--accent);padding:0;font-weight:600}
.fp .grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:16px}
.fp .grid4.small{gap:12px}
.fp .gcard{background:#fff;border:1px solid var(--line);border-radius:14px;padding:10px;text-align:left}
.fp .gcard:hover{border-color:var(--accent);box-shadow:0 6px 20px rgba(163,52,111,.12)}
.fp .gcard .thumb{background:#f7f5f1;border-radius:8px;padding:6px;margin-bottom:8px}
.fp .gcard b{display:block}
.fp .gcard small{display:block;color:var(--muted);font-size:12px}
.fp .grid4.small .gcard{padding:8px;opacity:.85}
.fp /* ---------- editor ---------- */
.ed{display:grid;grid-template-rows:52px 1fr;height:100%}
.fp .ed-top{display:flex;align-items:center;gap:10px;padding:0 16px;background:#fff;border-bottom:1px solid var(--line)}
.fp .ed-top .brand{font-weight:700;font-size:16px;margin-right:6px}
.fp .ed-top .brand small{color:var(--muted);font-weight:400;margin-left:6px;font-size:13px}
.fp .spacer{flex:1}
.fp .fld{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:13px}
.fp .ed-body{display:grid;grid-template-columns:64px 300px 1fr;min-height:0}
.fp .ed-body.wide{grid-template-columns:64px 600px 1fr}
.fp .rail{background:#3d434b;display:flex;flex-direction:column;padding-top:8px}
.fp .rail button{position:relative;background:none;border:0;color:#cfd5dc;height:62px;font-size:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px}
.fp .rail button.on{background:var(--accent);color:#fff}
.fp .rail svg{width:22px;height:22px}
.fp .rail .count{position:absolute;top:8px;right:10px;background:var(--bad);color:#fff;border-radius:9px;font-size:10px;min-width:16px;height:16px;line-height:16px;padding:0 4px}
.fp .panel{background:#f3f4f5;border-right:1px solid var(--line);overflow:auto;padding:16px}
.fp .panel h2{font-size:12px;letter-spacing:.08em;text-transform:uppercase;margin:0 0 12px;color:#444}
.fp .panel h3{font-size:13px;margin:18px 0 6px}
.fp .hint{color:var(--muted);font-size:12px;margin:0 0 12px}
.fp .seg{display:flex;background:#e4e6e9;border-radius:8px;padding:3px;margin-bottom:12px}
.fp .seg button{flex:1;border:0;background:none;padding:6px;border-radius:6px}
.fp .seg button.on{background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:600}
.fp .tcard{display:grid;grid-template-columns:96px 1fr;gap:10px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px;margin-bottom:8px;width:100%;text-align:left}
.fp .tcard.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.fp .tcard b{display:block}
.fp .tcard small{display:block;color:var(--muted);font-size:12px}
.fp .pal{display:grid;grid-template-columns:44px 1fr;gap:10px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px;margin-bottom:8px;cursor:grab;user-select:none;touch-action:none}
.fp .pal:hover{border-color:var(--accent)}
.fp .pal small{display:block;color:var(--muted);font-size:12px}
.fp .pal .left{color:var(--accent);font-weight:600}
.fp .pal.off{opacity:.45;cursor:not-allowed}
.fp button[disabled]{opacity:.4;cursor:not-allowed}
.fp .note{white-space:pre-line;margin:6px 0 0;font-size:13px;color:#5b524a}
.fp .inspector input[type=number]{width:64px}
.fp .stage{position:relative;min-width:0;background:#eceae6}
.fp .scale{position:absolute;left:16px;bottom:16px;font-size:12px;color:#555;display:flex;align-items:center;gap:8px}
.fp .scale i{display:block;height:6px;border:1.5px solid #555;border-top:0}
.fp .zoom{position:absolute;right:16px;bottom:66px;display:flex;flex-direction:column;background:#fff;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,.12);overflow:hidden}
.fp .zoom button{border:0;background:#fff;width:36px;height:34px;font-size:16px}
.fp .zoom button:hover{background:#f5f3ef}
.fp .counts{position:absolute;right:16px;bottom:16px;display:flex;gap:14px;align-items:center;background:#fff;border-radius:10px;padding:8px 14px;box-shadow:0 2px 8px rgba(0,0,0,.12);font-size:13px}
.fp .inspector{position:absolute;top:16px;right:16px;width:270px;background:#fff;border-radius:12px;box-shadow:0 6px 24px rgba(0,0,0,.15);padding:14px}
.fp .inspector .ihead b{font-size:15px}
.fp .inspector .ihead small{display:block;color:var(--muted)}
.fp .inspector .row{display:flex;align-items:center;gap:8px;margin-top:10px}
.fp .inspector .row>span:first-child{width:56px;color:var(--muted);font-size:12px}
.fp .inspector .rule{margin:8px 0 0;font-size:12px;background:#f7f3ee;border-radius:6px;padding:6px 8px}
.fp .inspector .keys{color:var(--muted);font-size:11px;margin:12px 0 0}
.fp .warnline{color:#9a6110;font-size:12px;margin:8px 0 0}
.fp /* ---------- table list (the wide List tab in the editor) ---------- */
.meter{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.fp .meter .bar{flex:1;height:8px;background:#e4e1dc;border-radius:4px;overflow:hidden}
.fp .meter i{display:block;height:100%}
.fp .list{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:10px;overflow:hidden}
.fp .list th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:10px 6px 6px;border-bottom:1px solid var(--line)}
.fp .list td{padding:4px 6px;border-bottom:1px solid #f1ede7;vertical-align:middle}
.fp .list tr{cursor:pointer}
.fp .list tbody tr:hover td{background:#faf6f0}
.fp .list tr.sel td,.fp .list tr.sel:hover td{background:var(--accent-soft)}
.fp .list td.n{font-weight:700;width:56px}
.fp .list select{max-width:150px}
.fp .list .stepper button{width:26px;height:26px}
.fp .list .stepper b{min-width:44px}
.fp .list td input[type=text]{border:1px solid transparent;background:none;padding:4px 6px;border-radius:6px;width:100%}
.fp .list td input[type=text]:hover,.fp .list td input[type=text]:focus{border-color:var(--line);background:#fff}
.fp .tag{display:inline-block;border-radius:6px;padding:1px 6px;font-size:11px;font-weight:600;margin:1px 2px 1px 0}
.fp .tag.error{background:#fde7e7;color:var(--bad)}
.fp .tag.warn{background:#fff1dc;color:#9a6110}
.fp .tag.info{background:#f4efe6;color:#7a6a52}
.fp .okmark{color:var(--ok);font-weight:700}
.fp .acts{white-space:nowrap;text-align:right}
.fp .acts button{border:0;background:none;padding:3px 5px;border-radius:6px;color:#6b625a}
.fp .acts button:hover{background:#efe9e1}
.fp .adders{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}

/* In the app: the planner fills the page under nothing else. */
.fp{position:fixed;inset:0;font:14px/1.4 system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--ink);background:var(--bg)}
.fp a{color:var(--accent)}
.fp a.btn{color:inherit;text-decoration:none;display:inline-flex;align-items:center}
.fp .back{margin:0 0 18px}
.fp .back a{text-decoration:none;font-weight:600}
.fp .plan-name{font-weight:700;font-size:16px;border:1px solid transparent;background:none;border-radius:8px;padding:4px 8px;min-width:120px;max-width:280px}
.fp .plan-name:hover,.fp .plan-name:focus{border-color:var(--line);background:#fff}
.fp .save{color:var(--muted);font-size:12px;min-width:90px;text-align:right}
.fp .stale{position:absolute;top:16px;left:16px;z-index:5;display:flex;gap:12px;align-items:center;max-width:calc(100% - 318px);min-width:240px;background:#fde7e7;color:var(--bad);font-weight:600;border-radius:12px;padding:10px 14px;box-shadow:0 6px 24px rgba(0,0,0,.15)}
.fp .stale[hidden]{display:none}
.fp .restore{margin:0}
.fp .restore .btn{white-space:nowrap}
.fp a.btn{text-decoration:none}
.fp .stale .btn{flex:none;text-decoration:none}
@media (max-width:900px){
  .fp .ed-body,.fp .ed-body.wide{grid-template-columns:56px 240px 1fr}
  .fp .sizes,.fp .grid4{grid-template-columns:repeat(2,1fr)}
  .fp .inspector{width:230px}
}

/* ---------- seating: chairs by name ---------- */
.fp .chair.taken{fill:var(--accent);stroke:var(--accent)}
.fp .chair.pick{cursor:pointer;stroke:var(--accent);stroke-width:.2}
.fp .chair.pick:hover{fill:var(--accent-soft)}
.fp .chair.taken.pick:hover{fill:#8a2a5d}
.fp .chair.on{stroke:#2b2622;stroke-width:.32}
.fp .ini{font-size:.62px;font-weight:700;fill:#fff;text-anchor:middle;dominant-baseline:central;pointer-events:none}
.fp .inspector{max-height:calc(100% - 32px);overflow:auto}
.fp .chairs{list-style:none;margin:6px 0 0;padding:0}
.fp .chairs>li{position:relative;display:flex;align-items:center;gap:8px;padding:2px 4px;border-radius:6px;min-height:30px}
.fp .chairs>li.on{background:var(--accent-soft)}
.fp .chairs .cn{width:18px;color:var(--muted);font-size:11px;text-align:right}
.fp .chairs .who{flex:1;font-weight:600}
.fp .chairs input{flex:1;min-width:0;padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:#fff}
.fp .chairs button{border:0;background:none;color:#6b625a;padding:2px 6px;border-radius:6px}
.fp .chairs button:hover{background:#efe9e1}
.fp .picks{position:absolute;left:30px;right:4px;top:100%;z-index:3;list-style:none;margin:2px 0 0;padding:4px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 6px 18px rgba(0,0,0,.14)}
.fp .picks li{padding:5px 8px;border-radius:6px;cursor:pointer}
.fp .picks li.on{background:var(--accent-soft)}
.fp .picks li.none{color:var(--muted);cursor:default;font-size:12px}
.fp .needs{list-style:none;margin:0;padding:0}
.fp .needs li{background:#fff;border-radius:8px;padding:6px 10px;margin-bottom:4px}
.fp .needs li[data-seat-guest]{cursor:pointer}
.fp .needs li[data-seat-guest]:hover{background:var(--accent-soft)}
.fp .needs small{display:block;color:#9a6110;font-size:11px}
.fp .addguest{display:flex;gap:6px;margin:14px 0 8px}
.fp .addguest input{flex:1;min-width:0;padding:5px 8px;border:1px solid var(--line);border-radius:8px}
.fp .list td.muted{white-space:nowrap}
.fp .list td.gs small{display:block;color:var(--muted);font-size:11px;max-width:200px}
.fp .rail .count.soft{background:#c9a35b}
