/* Plano de mesas — tool-specific styles. theme.css covers the rest. *//* The seating-plan canvas already pins its own toolbar; a second sticky bar
   on top eats vertical room and overlaps floating menus. Make the site nav
   scroll away on this page only. */.tools-nav{position:static}.pm-app{--pm-panel-bg:#f3f4f8;--pm-panel-border:#d8dae3;--pm-canvas-bg:#eef0f5;--pm-canvas-border:#c4c8d4;--pm-canvas-dot:#d6d9e1;--pm-table:#f5d9bf;--pm-table-stroke:#b8936a;--pm-seat:#ffffff;--pm-seat-stroke:#9aa0b0;--pm-seat-occupied:var(--primary);--pm-seat-occupied-stroke:#c2541d;--pm-input-border:#c4c8d4;background:var(--bg-card);border:1px solid #cfd1dc;border-radius:20px;padding:20px;box-shadow:0 24px 60px -28px rgba(30, 30, 47, 0.25),0 2px 8px rgba(30, 30, 47, 0.05);/* Break out of the parent .container (1100px) and span almost the full viewport. */width:min(1700px, calc(100vw - 32px));max-width:none;position:relative;left:50%;transform:translateX(-50%);margin:24px 0 0;box-sizing:border-box}.btn-compact{padding:10px 18px;font-size:0.92rem;border-radius:10px;font-weight:600;cursor:pointer;font-family:Inter,sans-serif;border:1px solid #d0d3df;background:#fff;color:var(--text-heading);transition:background 0.15s ease,border-color 0.15s ease,color 0.15s ease}.btn-compact:hover{background:#f5f6fa;border-color:#9aa0b0}.btn-compact.btn-primary{background:linear-gradient(135deg, var(--gradient-start), var(--gradient-end));color:#fff;border:none;box-shadow:0 4px 12px -4px rgba(255, 107, 53, 0.5)}.btn-compact.btn-primary:hover{color:#fff;transform:translateY(-1px);box-shadow:0 6px 16px -4px rgba(255, 107, 53, 0.55)}.btn-compact.btn-ghost{background:#fff;color:var(--text-heading);border:1px solid #d0d3df}.btn-compact.btn-ghost:hover{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.btn-compact.pm-danger:hover{background:#fef0f0;border-color:#d63b3b;color:#d63b3b}.pm-toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin-bottom:16px}.pm-title-field{display:inline-flex;align-items:center;gap:8px}.pm-title-label{font-size:0.85rem;font-weight:600;color:var(--text-muted);font-family:Inter,sans-serif;white-space:nowrap}.pm-title-input{flex:0 0 auto;width:200px;padding:11px 16px;border:1px solid var(--pm-input-border);border-radius:10px;font-size:1rem;font-family:Inter,sans-serif;background:#fff;color:var(--text-heading)}.pm-title-input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-title-input::placeholder{color:#9aa0b0}.pm-toolbar-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}/* Split button: main "Download" action + caret that opens a format dropdown.
   Pattern mirrors the publish/share split-button used elsewhere in the app. */.pm-export-split{position:relative;display:inline-flex;align-items:stretch}.pm-export-split .pm-export-main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.pm-export-split .pm-export-caret{padding:0 10px;border-top-left-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:center;justify-content:center}.pm-export-split .pm-export-caret[aria-expanded="true"]{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.pm-export-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:220px;background:#fff;border:1px solid #d0d3df;border-radius:12px;box-shadow:0 10px 30px -8px rgba(30, 30, 47, 0.18);padding:6px;z-index:60;display:flex;flex-direction:column;gap:2px}.pm-export-menu[hidden]{display:none}.pm-export-menu-group-title{padding:6px 12px 4px;font-family:Inter,sans-serif;font-size:0.7rem;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;color:var(--text-muted)}.pm-export-menu-divider{height:1px;background:#eceef4;margin:6px 4px}.pm-export-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;background:transparent;border:0;border-radius:8px;font-family:Inter,sans-serif;font-size:0.92rem;font-weight:500;color:var(--text-heading);text-align:left;cursor:pointer;transition:background 0.12s ease,color 0.12s ease}.pm-export-menu-item:hover,.pm-export-menu-item:focus-visible{background:var(--primary-soft);color:var(--primary);outline:none}.pm-export-menu-item svg{flex:0 0 16px}/* Compact icon-only toolbar buttons (Undo / Redo). Matches the visual weight of
   .btn-compact.btn-ghost but in a 36×36 square so the row stays short. */.pm-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;background:#fff;border:1px solid #d0d3df;color:var(--text-heading);cursor:pointer;padding:0;transition:background 0.15s ease,border-color 0.15s ease,color 0.15s ease,opacity 0.15s ease}.pm-icon-btn:hover:not(:disabled){background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.pm-icon-btn:disabled{opacity:0.4;cursor:not-allowed}.pm-icon-btn.is-active{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}/* Segmented group — Undo/Redo as a single connected control. */.pm-icon-group{display:inline-flex;align-items:center}.pm-icon-group .pm-icon-btn{border-radius:0;margin-left:-1px}.pm-icon-group .pm-icon-btn:first-child{border-top-left-radius:10px;border-bottom-left-radius:10px;margin-left:0}.pm-icon-group .pm-icon-btn:last-child{border-top-right-radius:10px;border-bottom-right-radius:10px}.pm-icon-group .pm-icon-btn:hover:not(:disabled),.pm-icon-group .pm-icon-btn:focus-visible:not(:disabled){position:relative;z-index:1}/* Fullscreen mode — pin the whole #pm-app over the viewport so the user can
   focus on the seating canvas. Body scroll is locked by JS adding
   .pm-fullscreen-lock on <html>. */.pm-app.pm-app--fullscreen{position:fixed;inset:0;left:0;top:0;width:100vw;height:100vh;max-width:none;margin:0;transform:none;border-radius:0;border:none;box-shadow:none;z-index:9999;padding:16px;overflow:hidden;display:flex;flex-direction:column}.pm-app.pm-app--fullscreen .pm-grid{flex:1 1 auto;min-height:0;height:auto;max-height:none}.pm-app.pm-app--fullscreen .pm-canvas-wrap{height:100%}.pm-app.pm-app--fullscreen .pm-tip{display:none}html.pm-fullscreen-lock,html.pm-fullscreen-lock body{overflow:hidden !important}/* View tabs (Plano / Lista) */.pm-view-tabs{display:inline-flex;background:#eef0f5;border:1px solid #d8dae3;border-radius:10px;padding:3px;gap:2px}.pm-view-tab{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:none;background:transparent;color:var(--text-muted);font-weight:600;font-size:0.88rem;border-radius:7px;cursor:pointer;font-family:Inter,sans-serif;transition:all 0.15s ease}.pm-view-tab:hover{color:var(--text-heading)}.pm-view-tab.is-active{background:#fff;color:var(--primary);box-shadow:0 2px 6px rgba(30, 30, 47, 0.08)}/* Floating "saved" toast inside the canvas */.pm-share-toast{position:absolute;top:12px;left:50%;transform:translateX(-50%);display:flex;align-items:center;flex-wrap:wrap;gap:10px;background:#ffffff;border:1px solid #a7e7c8;border-left:4px solid #1f7a4d;border-radius:12px;padding:8px 8px 8px 14px;box-shadow:0 12px 30px -12px rgba(30, 30, 47, 0.25);z-index:5;max-width:calc(100% - 24px);animation:pm-toast-in 0.25s ease-out}.pm-share-toast[hidden]{display:none}@keyframes pm-toast-in{from{opacity:0;transform:translate(-50%, -8px)}to{opacity:1;transform:translate(-50%, 0)}}.pm-share-icon{color:#fff;background:#22a06b;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.pm-share-label{font-size:0.9rem;color:#1f7a4d;font-weight:600;flex-shrink:0}.pm-share-toast input{flex:1 1 200px;min-width:140px;padding:6px 10px;border:1px solid #d8dae3;border-radius:7px;font-size:0.8rem;background:#f7f8fb;font-family:ui-monospace,monospace;color:var(--text-heading)}.pm-share-btn{padding:7px 14px;background:var(--primary);color:#fff;border:none;border-radius:7px;font-weight:600;font-size:0.85rem;cursor:pointer;font-family:Inter,sans-serif;flex-shrink:0}.pm-share-btn:hover{background:var(--primary-light)}.pm-share-close{background:transparent;border:none;color:var(--text-muted);width:26px;height:26px;border-radius:6px;cursor:pointer;font-size:0.95rem;flex-shrink:0}.pm-share-close:hover{background:#f0f1f5;color:var(--text-heading)}/* Cross-sell line — wraps onto its own row beneath the link + buttons. */.pm-share-cta{flex:1 1 100%;order:6;display:block;margin-top:2px;padding-top:9px;border-top:1px dashed #e3e5ec;font-size:0.82rem;font-weight:600;line-height:1.35;color:var(--primary);text-decoration:none}.pm-share-cta:hover{color:var(--primary-light);text-decoration:underline}@media (max-width: 700px){.pm-share-toast{max-width:calc(100% - 24px)}.pm-share-toast input{flex-basis:100%;order:5}}.pm-grid{display:grid;grid-template-columns:220px 1fr 260px;gap:12px;align-items:stretch;min-height:calc(100vh - 220px);height:calc(100vh - 220px);max-height:1200px}.pm-grid[hidden]{display:none}.pm-rail{background:var(--pm-panel-bg);border:1px solid var(--pm-panel-border);border-radius:12px;min-height:0;position:relative/* overflow stays visible so the floating collapse toggle can sit outside the rail. */}.pm-rail-body{padding:14px;display:flex;flex-direction:column;gap:10px;overflow-y:auto;height:100%;min-height:0;box-sizing:border-box}/* Collapse toggle: pill-shaped chevron centered vertically on the rail edge,
   half-overlapping the canvas (Canva-style affordance). */.pm-rail-collapse{position:absolute;top:50%;width:22px;height:36px;padding:0;border:1px solid var(--pm-panel-border);border-radius:14px;background:#fff;color:var(--text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:3;box-shadow:0 2px 6px rgba(30, 30, 47, 0.08);transition:background 0.15s ease,color 0.15s ease,box-shadow 0.15s ease}.pm-rail-collapse:hover{background:var(--pm-panel-bg-hover, #f4ecfb);color:var(--text-heading);box-shadow:0 3px 10px rgba(30, 30, 47, 0.14)}/* Pull each toggle outward so it straddles the rail/canvas boundary. *//* Left rail (guests) is visually lighter than the right rail — drop the fill
   and rounding so it reads as part of the canvas, but keep a right border +
   inner padding so the collapse handle still lands on a clean edge. */.pm-rail-left{background:transparent;border:none;border-right:1px solid var(--pm-panel-border);border-radius:0}.pm-rail-left .pm-rail-body{padding-left:0;padding-right:14px}/* When the guest list overflows, hint at it with a soft inner shadow at the
   bottom of the rail. JS toggles .pm-rail--has-overflow on the rail itself.
   Keep overflow:visible so the floating collapse caret on the right edge isn't
   clipped — the fade is positioned within the rail bounds either way. */.pm-rail-left::after{content:"";position:absolute;left:0;right:1px;/* sit inside the right border */bottom:0;height:32px;pointer-events:none;background:linear-gradient(to bottom, rgba(255,255,255,0) 0%, rgba(30,30,47,0.12) 100%);opacity:0;transition:opacity 0.15s ease}.pm-rail-left.pm-rail--has-overflow::after{opacity:1}.pm-rail-left  .pm-rail-collapse{right:-11px;transform:translateY(-50%)}.pm-rail-right .pm-rail-collapse{left:-11px;transform:translateY(-50%)}/* When collapsed, the rail is 0 wide — push the toggle further out so it sits
   centered on the canvas border (12px grid gap, so center it at gap midpoint). */.pm-rail-left.pm-rail--collapsed  .pm-rail-collapse{right:-23px}.pm-rail-right.pm-rail--collapsed .pm-rail-collapse{left:-23px}/* Collapsed rail: hide the body and the rail's own chrome so the panel reads as
   fully slid off-screen — only the floating chevron toggle remains, sitting on
   the canvas border. */.pm-rail--collapsed .pm-rail-body{display:none}.pm-rail--collapsed{background:transparent;border-color:transparent;box-shadow:none}/* Flip chevron when collapsed so it points "outward" (expand affordance). */.pm-rail-left.pm-rail--collapsed  .pm-rail-collapse-icon{transform:rotate(180deg)}.pm-rail-right.pm-rail--collapsed .pm-rail-collapse-icon{transform:rotate(180deg)}/* Grid column resizing when either rail collapses. Column collapses to 0 so the
   canvas reclaims the full width; the toggle still has a relative anchor since
   the rail element stays in the DOM at width 0. */.pm-grid--left-collapsed{grid-template-columns:0 1fr 260px}.pm-grid--right-collapsed{grid-template-columns:220px 1fr 0}.pm-grid--left-collapsed.pm-grid--right-collapsed{grid-template-columns:0 1fr 0;gap:0}.pm-rail-title{font-family:'Rubik',sans-serif;font-size:1rem;color:var(--text-heading);margin:0;padding-bottom:4px;border-bottom:1px solid var(--pm-panel-border)}.pm-rail-title-sub{margin-top:14px;padding-top:12px;border-top:1px solid var(--pm-panel-border);border-bottom:1px solid var(--pm-panel-border);padding-bottom:4px}.pm-rail-help{font-size:0.8rem;color:var(--text-muted);margin:0}.pm-guest-form{display:flex;gap:6px}.pm-guest-form input{flex:1;padding:8px 12px;border:1px solid var(--pm-input-border);border-radius:8px;font-size:0.9rem;font-family:Inter,sans-serif;min-width:0;background:#fff;color:var(--text-heading)}.pm-guest-form input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-guest-form input::placeholder{color:#9aa0b0}.pm-guest-form .btn-compact{padding:8px 14px;font-size:1.1rem}/* "Import list" button below the add-guest form */.pm-guest-import{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;padding:8px 12px;background:#fff;border:1px dashed #c4c8d4;border-radius:8px;font-size:0.84rem;font-weight:600;color:var(--text-muted);cursor:pointer;font-family:Inter,sans-serif;transition:border-color 0.15s ease,color 0.15s ease,background 0.15s ease}.pm-guest-import:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft);border-style:solid}/* ----- IMPORT MODAL ----- */.pm-modal[hidden]{display:none}.pm-modal{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:20px}.pm-modal-backdrop{position:absolute;inset:0;background:rgba(30, 30, 47, 0.45);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.pm-modal-card{position:relative;width:min(440px, 100%);background:var(--bg-card);border:1px solid #cfd1dc;border-radius:16px;padding:22px;box-shadow:0 24px 60px -20px rgba(30, 30, 47, 0.4);animation:pm-toast-in 0.2s ease-out}.pm-modal-title{font-family:'Rubik',sans-serif;font-size:1.15rem;color:var(--text-heading);margin:0 0 6px}.pm-modal-desc{font-size:0.88rem;color:var(--text-muted);margin:0 0 12px}.pm-modal-textarea{width:100%;box-sizing:border-box;padding:12px 14px;border:1px solid var(--pm-input-border);border-radius:10px;font-family:Inter,sans-serif;font-size:0.92rem;line-height:1.6;color:var(--text-heading);background:#fff;resize:vertical}.pm-modal-textarea:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-modal-textarea.is-over{border-color:#d63b3b}.pm-modal-textarea.is-over:focus{outline-color:rgba(214, 59, 59, 0.3)}.pm-modal-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px}.pm-import-count{font-size:0.82rem;color:var(--text-muted);font-weight:600}.pm-import-count.is-over{color:#d63b3b}.pm-modal-actions{display:flex;gap:8px}.pm-modal-actions .btn-compact:disabled{opacity:0.5;cursor:not-allowed;transform:none}/* Bulk insert tables modal */.pm-modal-card--wide{width:min(620px, 100%)}.pm-bulk-trigger{margin-top:8px}.pm-bulk-quick{display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:end;margin:6px 0 10px}.pm-bulk-field{display:flex;flex-direction:column;gap:4px;min-width:0}.pm-bulk-field--narrow{width:92px}.pm-bulk-label{font-size:0.78rem;font-weight:600;color:var(--text-muted);font-family:Inter,sans-serif}.pm-bulk-kinds{display:flex;gap:6px;flex-wrap:wrap}.pm-bulk-kind{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;background:#fff;border:1px solid #d0d3df;border-radius:8px;font-family:Inter,sans-serif;font-size:0.85rem;font-weight:600;color:var(--text-heading);cursor:pointer;transition:all 0.15s ease}.pm-bulk-kind:hover{border-color:var(--primary);color:var(--primary)}.pm-bulk-kind.is-active{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.pm-bulk-kind-icon{display:inline-flex}.pm-bulk-input{width:100%;box-sizing:border-box;padding:9px 10px;border:1px solid var(--pm-input-border);border-radius:8px;font-family:Inter,sans-serif;font-size:0.92rem;font-weight:600;color:var(--text-heading);background:#fff;text-align:center}.pm-bulk-input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-bulk-toggle{display:inline-flex;align-items:center;gap:6px;padding:6px 0;background:transparent;border:none;cursor:pointer;color:var(--primary);font-family:Inter,sans-serif;font-size:0.85rem;font-weight:600}.pm-bulk-toggle:hover{text-decoration:underline}.pm-bulk-toggle-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--primary-soft);font-size:0.9rem;line-height:1;transition:transform 0.15s ease}.pm-bulk-toggle[aria-expanded="true"] .pm-bulk-toggle-icon{transform:rotate(45deg)}.pm-bulk-custom{margin-top:4px;padding:10px;background:var(--pm-panel-bg, #f7f7fb);border:1px solid var(--pm-panel-border, #e5e7ef);border-radius:10px}.pm-bulk-custom-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px}.pm-bulk-custom-hint{font-size:0.78rem;color:var(--text-muted)}.pm-bulk-apply-all{background:transparent;border:none;color:var(--primary);font-size:0.8rem;font-weight:600;cursor:pointer;padding:0;font-family:Inter,sans-serif}.pm-bulk-apply-all:hover{text-decoration:underline}.pm-bulk-rows{display:flex;flex-direction:column;gap:6px;max-height:280px;overflow-y:auto;padding-right:2px}.pm-bulk-row{display:grid;grid-template-columns:44px 24px 1fr 60px 1fr 28px;gap:6px;align-items:center;padding:4px 6px;background:#fff;border:1px solid #d0d3df;border-radius:8px;position:relative}.pm-bulk-row-color{width:22px;height:22px;padding:0;border-radius:50%;justify-self:center}.pm-bulk-row.is-custom{border-color:var(--primary)}.pm-bulk-row.is-custom::before{content:"";position:absolute;left:-3px;top:50%;transform:translateY(-50%);width:6px;height:6px;background:var(--primary);border-radius:50%}.pm-bulk-row-num{font-size:0.78rem;font-weight:700;color:var(--text-muted);text-align:center}.pm-bulk-row select,.pm-bulk-row input[type="number"],.pm-bulk-row input[type="text"]{width:100%;box-sizing:border-box;padding:6px 8px;border:1px solid transparent;border-radius:6px;font-family:Inter,sans-serif;font-size:0.85rem;color:var(--text-heading);background:#fff}.pm-bulk-row select:hover,.pm-bulk-row input:hover{border-color:#d0d3df}.pm-bulk-row select:focus,.pm-bulk-row input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-bulk-row-remove{background:transparent;border:none;color:var(--text-muted);cursor:pointer;font-size:0.85rem;padding:4px;border-radius:4px}.pm-bulk-row-remove:hover{color:#d63b3b;background:rgba(214, 59, 59, 0.08)}.pm-bulk-add-row{margin-top:8px;background:transparent;border:1px dashed #d0d3df;border-radius:8px;padding:6px 10px;color:var(--text-muted);font-size:0.82rem;font-weight:600;cursor:pointer;width:100%;font-family:Inter,sans-serif}.pm-bulk-add-row:hover{border-color:var(--primary);color:var(--primary)}.pm-bulk-summary{font-size:0.82rem;color:var(--text-muted);font-weight:600}.pm-guest-list,.pm-table-list{list-style:none;display:flex;flex-direction:column;gap:4px;padding:0;margin:0}.pm-guest-item{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:8px 10px;background:#fff;border:1px solid #d8dae3;border-radius:8px;font-size:0.88rem;color:var(--text-heading);cursor:pointer;transition:border-color 0.15s ease,background 0.15s ease,box-shadow 0.15s ease}.pm-guest-item:hover{border-color:var(--primary)}/* Adult/kid emoji indicator before the name */.pm-guest-emoji{flex-shrink:0;font-size:0.95rem;line-height:1;width:16px;text-align:center;user-select:none}.pm-guest-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}/* Inline flag icons after the name */.pm-guest-flag{flex-shrink:0;font-size:0.85rem;line-height:1;cursor:help;user-select:none}.pm-guest-flag--access{color:#4f8ad4}.pm-guest-flag--allergy{color:#d97706}/* Bride/Groom filter chips below the unassigned count. */.pm-side-filter{display:flex;gap:6px;margin:4px 0 8px;flex-wrap:wrap}.pm-side-filter[hidden]{display:none}.pm-side-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:#fff;border:1px solid #d8dae3;color:var(--text-heading);font-family:Inter,sans-serif;font-size:0.78rem;font-weight:600;cursor:pointer;transition:background 0.12s ease,border-color 0.12s ease,color 0.12s ease}.pm-side-chip:hover{border-color:var(--chip-color)}.pm-side-chip.is-active{background:var(--chip-color);border-color:var(--chip-color);color:#fff}.pm-side-chip.is-active .pm-side-chip-dot{background:#fff;border-color:rgba(255,255,255,0.6)}.pm-side-chip-dot{width:9px;height:9px;border-radius:50%;background:var(--chip-color);border:1px solid rgba(0,0,0,0.15);flex-shrink:0}/* Dimmed state — applied to guest rows + canvas seats that don't match the active filter. */.pm-guest-item.is-dimmed{opacity:0.3}/* Higher-specificity selectors so dimming wins over `.is-occupied`
   (which sets opacity:1) — applies to both empty and occupied seats. */.pm-seat.is-dimmed,.pm-seat.is-occupied.is-dimmed{opacity:0.25}.pm-seat-name.is-dimmed{opacity:0.3}/* Side tag dot (rail + seat picker). Bride / groom color is set inline. */.pm-guest-side-dot{flex-shrink:0;width:10px;height:10px;border-radius:50%;border:1px solid rgba(0, 0, 0, 0.15);cursor:help;margin-left:2px}/* Kebab "more options" button per guest row */.pm-guest-kebab{background:none;border:none;padding:4px 4px;color:var(--text-muted);cursor:pointer;border-radius:6px;line-height:0;display:inline-flex;align-items:center;justify-content:center;transition:background 0.15s ease,color 0.15s ease}.pm-guest-kebab:hover{background:rgba(0,0,0,0.06);color:var(--text-heading)}.pm-guest-item.is-selected .pm-guest-kebab{color:rgba(255,255,255,0.85)}.pm-guest-item.is-selected .pm-guest-kebab:hover{background:rgba(255,255,255,0.18);color:#fff}/* Floating kebab menu — fixed so it can render above the rail's scroll clipping */.pm-guest-menu{position:fixed;z-index:20;min-width:160px;background:#fff;border:1px solid #d8dae3;border-radius:10px;padding:4px;box-shadow:0 14px 30px -10px rgba(30, 30, 47, 0.25),0 2px 6px rgba(30, 30, 47, 0.08);display:flex;flex-direction:column;gap:2px}.pm-guest-menu[hidden]{display:none}.pm-guest-menu-item{display:flex;align-items:center;gap:8px;padding:7px 10px;background:none;border:none;border-radius:6px;cursor:pointer;font-family:Inter,sans-serif;font-size:0.88rem;color:var(--text-heading);text-align:left;transition:background 0.12s ease}.pm-guest-menu-item:hover{background:#f3f4f8}.pm-guest-menu-item.is-current{font-weight:600}.pm-guest-menu-icon{width:16px;text-align:center;flex-shrink:0;font-size:0.95rem;line-height:1}.pm-guest-menu-check{margin-left:auto;color:var(--primary);font-weight:700}.pm-guest-menu-label{padding:6px 10px 2px;font-size:0.7rem;text-transform:uppercase;letter-spacing:0.05em;color:var(--text-muted);font-weight:600}.pm-guest-menu-sep{height:1px;background:#eef0f5;margin:4px 6px}.pm-guest-menu-input{margin:4px 6px 6px;padding:7px 10px;border:1px solid #d8dae3;border-radius:6px;font-family:Inter,sans-serif;font-size:0.85rem;color:var(--text-heading);background:#fff;width:calc(100% - 12px);box-sizing:border-box}.pm-guest-menu-input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-guest-menu-input::placeholder{color:#9aa0b0}/* List view badges (next to guest name in Lista mode) */.pm-list-row-name{flex-shrink:1}.pm-list-row-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:0.75rem;font-weight:600;flex-shrink:0;line-height:1.3}.pm-list-row-badge--access{background:#e3eefb;color:#1f4e91;padding:2px 6px}.pm-list-row-badge--side-bride{background:#fde0ec;color:#a8326a;padding:2px 8px}.pm-list-row-badge--side-groom{background:#dde8f8;color:#1f4e91;padding:2px 8px}.pm-list-row-badge--allergy{background:#fef3c7;color:#92400e;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.pm-guest-item.is-selected{border-color:var(--primary);background:linear-gradient(135deg, var(--gradient-start), var(--gradient-end));color:#fff;box-shadow:0 4px 10px -2px rgba(255, 107, 53, 0.45)}.pm-guest-item.is-selected .pm-guest-seat{color:rgba(255,255,255,0.85)}.pm-guest-item.is-selected button{color:rgba(255,255,255,0.8)}.pm-guest-item.is-seated{color:var(--text-muted);background:#e8eaef;cursor:default}.pm-guest-item .pm-guest-seat{font-size:0.72rem;color:var(--text-muted);white-space:nowrap}.pm-guest-item button{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:1rem;line-height:1;padding:2px 4px}.pm-guest-item button:hover{color:#d63b3b}.pm-table-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px}.pm-table-btn{padding:10px 8px;background:#fff;border:1px solid #d0d3df;border-radius:8px;font-size:0.82rem;font-weight:600;color:var(--text-heading);cursor:pointer;font-family:Inter,sans-serif;transition:all 0.15s ease}.pm-table-btn:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--primary);transform:translateY(-1px)}.pm-table-btn--head{border-style:dashed;color:#6b5b8a}.pm-table-btn--head:hover{border-color:#7a5fb8;background:#f0ecf8;color:#5a3f9a;border-style:solid}/* Split-button for table presets. Main click adds the current default; the caret
   opens a small menu where the user picks a different seat count (and it becomes
   the new default, persisted to localStorage). Layout mirrors the Download split
   button in the toolbar so visuals stay consistent. */.pm-table-buttons{grid-template-columns:1fr}.pm-tbl-split{position:relative;display:flex;align-items:stretch;gap:0}.pm-tbl-split .pm-tbl-split-main{flex:1 1 auto;display:inline-flex;align-items:center;gap:8px;padding:10px 12px;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0;text-align:left}.pm-tbl-split .pm-tbl-split-icon{display:inline-flex;align-items:center;flex:0 0 auto;color:inherit}.pm-tbl-split .pm-tbl-split-label{flex:1 1 auto}.pm-tbl-split .pm-tbl-split-count{color:var(--text-muted);font-weight:500;font-size:0.78rem}.pm-tbl-split .pm-tbl-split-main:hover .pm-tbl-split-count{color:inherit}.pm-tbl-split .pm-tbl-split-caret{flex:0 0 32px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border:1px solid #d0d3df;border-radius:0 8px 8px 0;color:var(--text-muted);cursor:pointer;transition:all 0.15s ease}.pm-tbl-split .pm-tbl-split-caret:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.pm-tbl-split .pm-tbl-split-caret[aria-expanded="true"]{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.pm-tbl-split--head .pm-tbl-split-caret{border-style:dashed;color:#6b5b8a}.pm-tbl-split--head .pm-tbl-split-caret:hover,.pm-tbl-split--head .pm-tbl-split-caret[aria-expanded="true"]{border-color:#7a5fb8;background:#f0ecf8;color:#5a3f9a;border-style:solid}.pm-tbl-split-menu{position:absolute;top:calc(100% + 4px);right:0;left:0;background:#fff;border:1px solid #d0d3df;border-radius:10px;box-shadow:0 10px 30px -8px rgba(30, 30, 47, 0.18);padding:4px;z-index:40;display:flex;flex-direction:column;gap:2px}.pm-tbl-split-menu[hidden]{display:none}.pm-tbl-split-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;background:transparent;border:0;border-radius:6px;font-family:Inter,sans-serif;font-size:0.85rem;font-weight:500;color:var(--text-heading);text-align:left;cursor:pointer;transition:background 0.12s ease,color 0.12s ease}.pm-tbl-split-item:hover,.pm-tbl-split-item:focus-visible{background:var(--primary-soft);color:var(--primary);outline:none}.pm-tbl-split-check{opacity:0;color:var(--primary);font-weight:700}.pm-tbl-split-item.is-current .pm-tbl-split-check{opacity:1}/* Single-button entry to the Elements popover. */.pm-elements-launcher{position:relative;margin-top:12px;border-top:1px solid var(--pm-panel-border);padding-top:12px}.pm-elements-trigger{width:100%;display:inline-flex;align-items:center;gap:8px;padding:10px 12px;background:#fff;border:1px solid #d0d3df;border-radius:8px;font-family:Inter,sans-serif;font-size:0.85rem;font-weight:600;color:var(--text-heading);cursor:pointer;transition:all 0.15s ease}.pm-elements-trigger:hover,.pm-elements-trigger[aria-expanded="true"]{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.pm-elements-trigger span:nth-of-type(1){flex:1 1 auto;text-align:left}.pm-elements-trigger-chev{display:inline-flex;align-items:center;color:var(--text-muted);transition:transform 0.18s ease}.pm-elements-trigger[aria-expanded="true"] .pm-elements-trigger-chev{transform:rotate(180deg)}.pm-elements-popover{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid #d0d3df;border-radius:12px;box-shadow:0 14px 36px -10px rgba(30, 30, 47, 0.22);padding:10px;z-index:50;max-height:60vh;overflow:auto}.pm-elements-popover[hidden]{display:none}.pm-elements-popover .pm-element-buttons{margin-top:0}.pm-elements-search{width:100%;padding:8px 10px;border:1px solid #d0d3df;border-radius:8px;font-family:Inter,sans-serif;font-size:0.85rem;color:var(--text-heading);margin-bottom:8px;box-sizing:border-box}.pm-elements-search:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-elements-popover .pm-element-buttons{margin-top:0}/* Recent-first marker: a thin accent strip on the left edge of the button. */.pm-element-btn.is-recent{box-shadow:inset 3px 0 0 var(--primary);padding-left:9px}.pm-element-btn[hidden]{display:none}.pm-elements-empty{padding:14px 8px;text-align:center;color:var(--text-muted);font-size:0.85rem}.pm-table-list-item{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;background:#fff;border:1px solid #d8dae3;border-radius:8px;font-size:0.85rem;color:var(--text-heading)}.pm-table-list-item button{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:0 4px;font-size:1rem}.pm-table-list-item button:hover{color:#d63b3b}.pm-canvas-wrap{position:relative;background-color:var(--pm-canvas-bg);background-image:radial-gradient(var(--pm-canvas-dot) 1.2px, transparent 1.2px);background-size:22px 22px;background-position:0 0;border:1.5px solid var(--pm-canvas-border);border-radius:12px;overflow:hidden;min-height:0;box-shadow:inset 0 2px 8px rgba(30, 30, 47, 0.06)}.pm-canvas{display:block;width:100%;height:100%;touch-action:none;user-select:none;/* Default cursor — the grab/grabbing pan cursor is applied via inline style
       in tool.js only while Spacebar is held (see the keydown/keyup handlers),
       so it never shows during normal pointing or marquee-select. */cursor:default;overflow:visible/* allow tables outside viewBox to render; .pm-canvas-wrap clips */}.pm-zoom-controls{position:absolute;bottom:12px;right:12px;display:flex;gap:4px;background:rgba(255, 255, 255, 0.92);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid var(--border-light);border-radius:10px;padding:4px;box-shadow:0 4px 12px rgba(0, 0, 0, 0.06)}.pm-zoom-controls button{width:32px;height:32px;border:none;background:transparent;color:var(--text-heading);font-size:1.1rem;font-weight:700;cursor:pointer;border-radius:6px;line-height:1}.pm-zoom-controls button:hover{background:var(--primary-soft);color:var(--primary)}.pm-canvas-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:0.95rem;pointer-events:none;text-align:center;padding:20px}.pm-canvas-empty[hidden]{display:none}.pm-empty-content{display:flex;flex-direction:column;align-items:center;gap:22px;width:100%;max-width:720px}.pm-empty-title{margin:0;font-size:1.05rem;font-weight:600;color:var(--text-heading);letter-spacing:-0.01em}.pm-empty-arrows{display:flex;align-items:center;justify-content:space-between;width:100%;gap:24px}.pm-empty-hint{display:flex;align-items:center;gap:8px;color:var(--text-muted);font-size:0.9rem;font-weight:500;opacity:0.85;transition:opacity 0.3s ease}.pm-empty-hint[data-done="true"]{opacity:0}.pm-empty-arrow{width:110px;height:44px;color:var(--primary);opacity:0.55;flex-shrink:0}.pm-empty-badge{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--primary);color:#fff;font-size:0.78rem;font-weight:700;flex-shrink:0}.pm-empty-label{white-space:nowrap}@media (max-width: 720px){.pm-empty-arrow{width:60px;height:32px}.pm-empty-label{font-size:0.8rem}.pm-empty-title{font-size:0.95rem}}/* SVG table elements */.pm-table-group{cursor:grab}.pm-table-group.is-dragging{cursor:grabbing}.pm-table-shape{fill:var(--pm-table);stroke:var(--pm-table-stroke);stroke-width:2;transition:fill 0.15s ease,stroke 0.15s ease,filter 0.15s ease}.pm-table-group:hover .pm-table-shape{fill:#f0c89d;stroke:#8a6a45;stroke-width:3;filter:drop-shadow(0 4px 10px rgba(184, 147, 106, 0.45))}.pm-table-group.is-dragging .pm-table-shape{fill:#ecb985;stroke:var(--primary);stroke-width:3;filter:drop-shadow(0 8px 16px rgba(255, 107, 53, 0.35))}.pm-table-group:hover .pm-table-label{fill:var(--primary)}.pm-table-group.is-selected .pm-table-shape{fill:#ffd9b8;stroke:var(--primary);stroke-width:3.5;filter:drop-shadow(0 6px 14px rgba(255, 107, 53, 0.4))}.pm-table-group.is-selected .pm-table-label{fill:var(--primary)}/* Canva-style dashed bounding box for multi-selection (drawn into
   #pm-group-bbox-layer, above all items, non-interactive). */.pm-group-bbox{fill:none;stroke:var(--primary);stroke-width:1.5;stroke-dasharray:6 4;opacity:0.9;pointer-events:none}.pm-group-bbox-dot{fill:#fff;stroke:var(--primary);stroke-width:1.5;pointer-events:none}/* Rubber-band marquee rectangle while drag-selecting on empty canvas. */.pm-marquee{fill:rgba(255, 107, 53, 0.10);stroke:var(--primary);stroke-width:1.2;stroke-dasharray:4 3;pointer-events:none}/* Inline rename input (rendered inside an SVG foreignObject) */.pm-table-name-input{width:100%;height:100%;padding:6px 10px;box-sizing:border-box;border:2px solid var(--primary);border-radius:8px;background:#fff;color:var(--text-heading);font-family:'Rubik',sans-serif;font-size:18px;font-weight:600;text-align:center;outline:none;box-shadow:0 6px 18px -8px rgba(255, 107, 53, 0.5)}/* Floating action toolbar above a selected table / element.
   Canva-style: one white pill, thin separators between groups, flat icons inside
   that only show a soft round hover halo (no individual badge borders/shadows). */.pm-table-toolbar-pill{fill:#fff;stroke:#e1e3eb;stroke-width:1;filter:drop-shadow(0 6px 14px rgba(30, 30, 47, 0.14))}.pm-table-toolbar-sep{stroke:#e1e3eb;stroke-width:1;pointer-events:none}.pm-table-action .pm-table-action-bg{fill:transparent;stroke:none;transition:fill 0.12s ease}.pm-table-action .pm-table-action-icon{stroke:var(--primary);pointer-events:none;transition:stroke 0.12s ease}.pm-table-action:hover .pm-table-action-bg{fill:var(--primary-soft)}.pm-table-action:hover .pm-table-action-icon{stroke:var(--primary)}/* Danger variant (trash) — red icon, red soft hover halo. */.pm-table-action--danger .pm-table-action-icon{stroke:#d63b3b}.pm-table-action--danger:hover .pm-table-action-bg{fill:#fde2e2}.pm-table-action--danger:hover .pm-table-action-icon{stroke:#d63b3b}/* Disabled */.pm-table-action.is-disabled .pm-table-action-icon{stroke:#c4c8d4}.pm-table-action.is-disabled:hover .pm-table-action-bg{fill:transparent}.pm-table-action.is-disabled:hover .pm-table-action-icon{stroke:#c4c8d4}.pm-table-action.is-disabled{cursor:not-allowed !important}/* Per-table color picker popover.
   Sits above all mobile chrome (bar/FAB/sheet live at 10040–10080) so it
   doesn't render trapped behind the bottom action bar when opened from the
   mobile color button. */.pm-color-popover{position:fixed;background:#fff;border:1px solid var(--pm-input-border, #d6d9e1);border-radius:12px;box-shadow:0 8px 24px rgba(0, 0, 0, 0.14);padding:10px;z-index:10090}.pm-color-grid{display:grid;grid-template-columns:repeat(4, 28px);gap:8px}.pm-swatch{width:28px;height:28px;border-radius:50%;border:2px solid rgba(0, 0, 0, 0.08);background:var(--c);cursor:pointer;padding:0;transition:transform 0.1s ease}.pm-swatch:hover{transform:scale(1.12)}.pm-swatch.is-selected{border-color:var(--primary, #b8936a);box-shadow:0 0 0 2px #fff inset}.pm-table-label{font-family:'Rubik',sans-serif;font-size:22px;font-weight:600;fill:var(--text-heading);text-anchor:middle;dominant-baseline:middle;user-select:none;cursor:text;transition:fill 0.15s ease}/* Hover affordance: clean elevated chip behind the label so it reads as editable. */.pm-table-label-group{cursor:text}.pm-table-label-bg{fill:#ffffff;stroke:none;opacity:0;transition:opacity 0.18s ease,filter 0.18s ease;filter:drop-shadow(0 6px 14px rgba(30, 30, 47, 0.12)) drop-shadow(0 1px 2px rgba(30, 30, 47, 0.08))}.pm-table-label-group:hover .pm-table-label-bg{opacity:1}.pm-table-label-group:hover .pm-table-label{fill:var(--text-heading)}.pm-seat{fill:var(--pm-seat);stroke:var(--pm-seat-stroke);stroke-width:2;stroke-dasharray:3 3;opacity:0.6;cursor:pointer;transition:fill 0.12s ease,stroke 0.12s ease,opacity 0.12s ease;transform-box:fill-box;transform-origin:center}.pm-seat-label{transform-box:fill-box;transform-origin:center}.pm-seat.is-new{animation:pm-seat-in 320ms cubic-bezier(0.34, 1.56, 0.64, 1) both}.pm-seat-label.is-new{animation:pm-seat-label-in 320ms cubic-bezier(0.34, 1.56, 0.64, 1) both;animation-delay:40ms}.pm-seat.is-removing{animation:pm-seat-out 200ms cubic-bezier(0.4, 0, 1, 1) both;pointer-events:none}.pm-seat-label.is-removing{animation:pm-seat-out 180ms cubic-bezier(0.4, 0, 1, 1) both}@keyframes pm-seat-in{0%{transform:scale(0);opacity:0}60%{opacity:1}100%{transform:scale(1);opacity:0.6}}@keyframes pm-seat-label-in{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes pm-seat-out{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.pm-seat:hover{stroke:var(--primary);stroke-width:2.5;opacity:1}.pm-seat.is-occupied{fill:var(--pm-seat-occupied);stroke:var(--pm-seat-occupied-stroke);stroke-width:2;stroke-dasharray:none;opacity:1}/* Note: access/allergy no longer recolor the seat — all occupied seats share
   the same fill. Those traits are surfaced via the name color and the list view. */.pm-seat.is-selected{stroke:#d63b3b;stroke-width:3;filter:drop-shadow(0 0 6px rgba(214, 59, 59, 0.5))}/* Seat-remove badge (×) that appears next to the name pill when an occupied seat is selected */.pm-seat-remove .pm-seat-remove-bg{fill:#fff;stroke:#d63b3b;stroke-width:1.5;filter:drop-shadow(0 4px 8px rgba(214, 59, 59, 0.3));transition:fill 0.15s ease}.pm-seat-remove .pm-seat-remove-icon{stroke:#d63b3b;pointer-events:none;transition:stroke 0.15s ease}.pm-seat-remove:hover .pm-seat-remove-bg{fill:#d63b3b}.pm-seat-remove:hover .pm-seat-remove-icon{stroke:#fff}.pm-seat-label{font-size:13px;font-weight:600;fill:var(--text-heading);text-anchor:middle;dominant-baseline:middle;pointer-events:none;user-select:none;font-family:Inter,sans-serif}.pm-seat-name{paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round;transform-box:view-box;transform-origin:0 0}.pm-seat-name.pm-seat-name--access{fill:#2f6fb0}.pm-seat-name.pm-seat-name--allergy{fill:#7a4a18}.pm-tip{margin-top:12px;font-size:0.85rem;color:var(--text-muted);text-align:center}/* ----- LIST VIEW ----- */.pm-list-view[hidden]{display:none}.pm-list-view{background:#f5f6fa;border:1px solid #d8dae3;border-radius:14px;padding:18px;min-height:calc(100vh - 260px)}.pm-list-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:18px}.pm-list-summary{font-size:0.92rem;color:var(--text-body);display:inline-flex;align-items:center;gap:16px}.pm-list-summary strong{color:var(--text-heading);font-weight:700;font-size:1.05rem}.pm-list-summary .pm-list-summary-divider{color:#c4c8d4}.pm-list-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));gap:16px}.pm-list-card{background:#fff;border:1px solid #d8dae3;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 4px 12px -8px rgba(30, 30, 47, 0.15);transition:box-shadow 0.18s ease,transform 0.18s ease}.pm-list-card:hover{box-shadow:0 12px 28px -12px rgba(255, 107, 53, 0.25);transform:translateY(-2px)}.pm-list-card--unassigned{border-color:#e8c8ad;background:#fff8f1}.pm-list-card-header{background:linear-gradient(135deg, var(--gradient-start), var(--gradient-end));color:#fff;padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:8px}.pm-list-card--unassigned .pm-list-card-header{background:linear-gradient(135deg, #6b7280, #4b5563)}.pm-list-card-title{font-family:'Rubik',sans-serif;font-size:1.25rem;font-weight:600;margin:0}.pm-list-card-count{font-size:0.82rem;background:rgba(255,255,255,0.18);padding:4px 10px;border-radius:999px;font-weight:600}.pm-list-card-body{padding:8px 0;flex:1}.pm-list-card-empty{padding:24px 18px;text-align:center;font-size:0.9rem;color:var(--text-muted);font-style:italic}.pm-list-row{padding:11px 18px;border-bottom:1px solid #f0f1f5;font-size:1rem;color:var(--text-heading);display:flex;align-items:center;gap:10px}.pm-list-row:last-child{border-bottom:none}.pm-list-row::before{content:'';display:inline-block;width:8px;height:8px;background:#4f8ad4;border-radius:50%;flex-shrink:0}.pm-list-row--kid::before{background:#f59e0b}.pm-list-card--unassigned .pm-list-row::before{background:#9aa0b0}.pm-list-card--unassigned .pm-list-row--kid::before{background:#f59e0b}.pm-list-row-seat{margin-left:auto;font-size:0.78rem;color:var(--text-muted);font-weight:500;flex-shrink:0}.pm-list-empty{text-align:center;padding:60px 20px;color:var(--text-muted);font-size:1rem}.pm-list-empty p{margin:0}.pm-list-empty strong{color:var(--text-heading);display:block;margin-bottom:6px;font-size:1.1rem}@media (max-width: 600px){.pm-list-grid{grid-template-columns:1fr}.pm-list-view{padding:14px;min-height:50vh}}/* Seat-search picker (opens on seat click) */.pm-seat-picker{position:absolute;z-index:6;width:260px;max-width:calc(100% - 24px);background:#fff;border:1px solid #cfd1dc;border-radius:12px;box-shadow:0 18px 40px -12px rgba(30, 30, 47, 0.28),0 2px 6px rgba(30, 30, 47, 0.06);padding:10px;display:flex;flex-direction:column;gap:8px;animation:pm-picker-in 0.18s ease-out}.pm-seat-picker[hidden]{display:none}@keyframes pm-picker-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.pm-seat-picker-input{padding:9px 12px;border:1px solid var(--pm-input-border);border-radius:8px;font-size:0.92rem;font-family:Inter,sans-serif;color:var(--text-heading);background:#fff;width:100%;box-sizing:border-box}.pm-seat-picker-input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-seat-picker-list{list-style:none;margin:0;padding:0;max-height:240px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.pm-seat-picker-item{padding:8px 10px;background:#fff;border-radius:6px;font-size:0.9rem;color:var(--text-heading);cursor:pointer;transition:background 0.12s ease,color 0.12s ease;display:flex;align-items:center;gap:8px}.pm-seat-picker-emoji{font-size:1rem;line-height:1;width:18px;text-align:center;flex-shrink:0;user-select:none}.pm-seat-picker-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pm-seat-picker-flag{flex-shrink:0;font-size:0.85rem;line-height:1;user-select:none}.pm-seat-picker-flag--access{color:#4f8ad4}.pm-seat-picker-flag--allergy{color:#d97706}.pm-seat-picker-item.is-active .pm-seat-picker-flag,.pm-seat-picker-item:hover .pm-seat-picker-flag{color:#fff}.pm-seat-picker-item:hover,.pm-seat-picker-item.is-active{background:var(--primary);color:#fff}.pm-seat-picker-item .pm-seat-picker-hint{margin-left:auto;font-size:0.72rem;opacity:0.7}.pm-seat-picker-empty{padding:10px;font-size:0.85rem;color:var(--text-muted);text-align:center}/* ----- VENUE ELEMENTS (sofas, columns, dance floor, …) ----- *//* Collapsible "Add element" section in the right rail */.pm-element-section{margin-top:10px;border-top:1px solid var(--pm-panel-border);padding-top:10px}.pm-element-section[open] .pm-element-summary-chev{transform:rotate(180deg)}.pm-element-summary{display:flex;align-items:center;justify-content:space-between;cursor:pointer;list-style:none;font-family:'Rubik',sans-serif;font-size:1rem;color:var(--text-heading);padding:2px 0 8px}.pm-element-summary::-webkit-details-marker{display:none}.pm-element-summary-chev{color:var(--text-muted);font-size:0.8rem;transition:transform 0.18s ease}.pm-element-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:4px}.pm-element-btn{padding:8px 6px;background:#fff;border:1px solid #d0d3df;border-radius:8px;font-size:0.78rem;font-weight:600;color:var(--text-heading);cursor:pointer;font-family:Inter,sans-serif;transition:all 0.15s ease;text-align:left}.pm-element-btn:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--primary);transform:translateY(-1px)}/* SVG element rendering */.pm-element{cursor:grab}.pm-element.is-dragging{cursor:grabbing}.pm-element-shape{stroke-width:1.5;transition:filter 0.15s ease,stroke-width 0.15s ease}.pm-element:hover .pm-element-shape{filter:drop-shadow(0 4px 10px rgba(30, 30, 47, 0.18))}.pm-element.is-selected .pm-element-shape,.pm-element.is-dragging .pm-element-shape{stroke:var(--primary) !important;stroke-width:3;filter:drop-shadow(0 6px 14px rgba(255, 107, 53, 0.35))}.pm-element-label{font-family:Inter,sans-serif;font-size:13px;font-weight:600;text-anchor:middle;dominant-baseline:middle;user-select:none;cursor:text}.pm-element-door-arc{pointer-events:none}.pm-element-resize{fill:#fff;stroke:var(--primary);stroke-width:2;cursor:nwse-resize;filter:drop-shadow(0 2px 4px rgba(255, 107, 53, 0.4))}.pm-element-resize:hover{fill:var(--primary)}.pm-align-guide{stroke:#ff00b8;fill:none;pointer-events:none;shape-rendering:crispEdges}@media (max-width: 900px){.pm-grid{grid-template-columns:1fr;height:auto;min-height:0;max-height:none}.pm-rail{max-height:220px}/* Mobile stacks rails above/below canvas, so collapsing them is not useful. */.pm-rail-collapse{display:none}.pm-rail--collapsed .pm-rail-body{display:flex}.pm-canvas-wrap{min-height:60vh;order:-1}.pm-toolbar-actions{width:100%;justify-content:flex-start}}/* ─── Mobile shell (≤768px) ────────────────────────────────────────────────
   Two states on mobile, controlled by JS via classes on #pm-app:
     • .pm-app--mobile-available (added on ≤768px viewports): keeps the
       existing stacked landing layout but shows an "Enter edit mode" overlay
       over the canvas. The toolbar / tip / rails still flow normally.
     • .pm-app--mobile (added when the user taps Enter edit mode): full-screen
       editor with FAB, kebab, quickbar and bottom-sheet guest panel.
   The user can exit via the top-left back arrow which removes .pm-app--mobile
   but leaves .pm-app--mobile-available so the overlay returns. */.pm-mobile-kebab,.pm-mobile-menu,.pm-mobile-quickbar,.pm-mobile-fab,.pm-mobile-actionsheet{display:none}.pm-mobile-sheet-handle{display:none}.pm-mobile-enter-overlay,.pm-mobile-enter-overlay[hidden],.pm-mobile-back{display:none}/* On mobile-available (pre-edit), cap the widget to ~80dvh so it looks like
   a preview teaser rather than dominating the landing scroll. The overlay
   covers the whole widget so the underlying UI is just a hint. */.pm-app.pm-app--mobile-available:not(.pm-app--mobile){position:relative;max-height:80dvh;overflow:hidden}/* Enter-edit overlay covers the entire .pm-app widget. */.pm-app.pm-app--mobile-available:not(.pm-app--mobile) .pm-mobile-enter-overlay:not([hidden]){display:flex;position:absolute;inset:0;z-index:20;align-items:center;justify-content:center;background:rgba(255, 252, 247, 0.72);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);border-radius:inherit;pointer-events:auto}.pm-mobile-enter-btn{display:inline-flex;align-items:center;background:var(--primary, #ff7e3d);color:#fff;border:0;padding:14px 22px;font-size:16px;font-weight:600;border-radius:999px;box-shadow:0 8px 22px rgba(255, 126, 61, 0.45);cursor:pointer}.pm-mobile-enter-btn:active{transform:scale(0.97)}/* Hide the share toast and canvas-wrap popovers behind the overlay on mobile
   landing so they don't peek through. */.pm-app.pm-app--mobile-available:not(.pm-app--mobile) .pm-share-toast,.pm-app.pm-app--mobile-available:not(.pm-app--mobile) .pm-seat-picker,.pm-app.pm-app--mobile-available:not(.pm-app--mobile) #pm-elements-popover{display:none !important}.pm-app.pm-app--mobile{padding:0}.pm-app.pm-app--mobile .pm-toolbar,.pm-app.pm-app--mobile .pm-tip,.pm-app.pm-app--mobile .pm-canvas-empty .pm-empty-arrows{display:none}/* Rail-right hosts the elements popover which we want available on mobile.
   Hide it visually (offscreen + invisibility) but keep it in the layout so
   the popover descendant can opt back into visibility when opened. */.pm-app.pm-app--mobile .pm-rail-right{position:absolute !important;top:-10000px !important;left:-10000px !important;visibility:hidden;pointer-events:none;width:280px;max-height:none;overflow:visible}.pm-app.pm-app--mobile #pm-elements-popover:not([hidden]){visibility:visible;pointer-events:auto}.pm-app.pm-app--mobile .pm-grid{grid-template-columns:1fr;grid-template-rows:1fr;height:100%;min-height:0;gap:0}.pm-app.pm-app--mobile .pm-canvas-wrap{height:100%;min-height:0;width:100%;border-radius:0;order:0}.pm-app.pm-app--mobile .pm-canvas{width:100%;height:100%}/* Back arrow — exits edit mode on mobile */.pm-app.pm-app--mobile .pm-mobile-back{position:fixed;top:calc(env(safe-area-inset-top) + 10px);left:calc(env(safe-area-inset-left) + 10px);z-index:10050;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border:1px solid rgba(0,0,0,0.08);border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.10);color:#2a2331;cursor:pointer}/* Kebab and dropdown menu */.pm-app.pm-app--mobile .pm-mobile-kebab{position:fixed;top:calc(env(safe-area-inset-top) + 10px);right:calc(env(safe-area-inset-right) + 10px);z-index:10050;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border:1px solid rgba(0,0,0,0.08);border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.10);color:#2a2331;cursor:pointer}/* Mobile kebab menu — full-width card under the top bar, matching the
   download/share menu from the website builder (app.php). Larger rows + icons
   so it feels like a native iOS/Android action list rather than a
   desktop-style compact dropdown. */.pm-app.pm-app--mobile .pm-mobile-menu:not([hidden]){position:fixed;top:calc(env(safe-area-inset-top) + 60px);left:calc(env(safe-area-inset-left) + 12px);right:calc(env(safe-area-inset-right) + 12px);z-index:10051;background:#fff;border:1px solid rgba(0,0,0,0.08);border-radius:16px;box-shadow:0 18px 40px rgba(0,0,0,0.22);padding:8px;max-height:calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 80px);overflow-y:auto;-webkit-overflow-scrolling:touch;display:block}.pm-mobile-menu button{display:flex;align-items:center;gap:16px;width:100%;background:transparent;border:0;padding:16px 14px;font-size:16px;line-height:1.2;text-align:left;border-radius:12px;color:#2a2331;cursor:pointer}.pm-mobile-menu button svg{flex:0 0 22px;width:22px;height:22px;color:#6b6378}.pm-mobile-menu button:active{background:#f4eef9}.pm-mobile-menu .pm-mobile-menu-danger,.pm-mobile-menu .pm-mobile-menu-danger svg{color:#c0392b}.pm-mobile-menu-group-title{padding:14px 14px 6px;font-size:12px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:#8a8395}.pm-mobile-menu-divider{height:1px;background:rgba(0, 0, 0, 0.08);margin:6px 8px}/* Top-center quickbar (undo / redo / focus). Sits between the top-left back
   button and the top-right kebab. Was originally bottom-left; moved up so it
   doesn't compete with the FAB and (more importantly) the contextual edit bar
   that replaces it at the bottom when an item is selected. */.pm-app.pm-app--mobile .pm-mobile-quickbar{position:fixed;left:50%;transform:translateX(-50%);top:calc(env(safe-area-inset-top) + 10px);bottom:auto;z-index:10040;display:inline-flex;background:#fff;border:1px solid rgba(0,0,0,0.08);border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.10);padding:4px;gap:2px}.pm-mobile-qbtn{width:44px;height:44px;background:transparent;border:0;border-radius:8px;color:#2a2331;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.pm-mobile-qbtn:disabled{opacity:0.35}.pm-mobile-qbtn:active{background:#f4eef9}/* FAB */.pm-app.pm-app--mobile .pm-mobile-fab{position:fixed;right:calc(env(safe-area-inset-right) + 16px);bottom:calc(env(safe-area-inset-bottom) + 76px);z-index:10040;width:56px;height:56px;border-radius:50%;background:var(--primary, #ff7e3d);color:#fff;border:0;box-shadow:0 6px 18px rgba(255,126,61,0.5);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.pm-mobile-fab:active{transform:scale(0.95)}/* Action sheet */.pm-app.pm-app--mobile .pm-mobile-actionsheet:not([hidden]){position:fixed;inset:0;z-index:10060;display:block}.pm-mobile-actionsheet-backdrop{position:absolute;inset:0;background:rgba(0,0,0,0.34)}.pm-mobile-actionsheet-card{position:absolute;left:0;right:0;bottom:0;background:#fff;border-top-left-radius:18px;border-top-right-radius:18px;padding:12px 12px calc(env(safe-area-inset-bottom) + 12px);box-shadow:0 -8px 24px rgba(0,0,0,0.18);max-height:84dvh;overflow-y:auto;animation:pm-as-slideup 200ms cubic-bezier(0.22, 0.61, 0.36, 1)}@keyframes pm-as-slideup{from{transform:translateY(100%)}to{transform:translateY(0)}}.pm-mobile-actionsheet-title{margin:6px 8px 10px;font-size:12px;color:#7c6a8b;font-weight:600;letter-spacing:0.06em;text-transform:uppercase}.pm-mobile-as-item{display:flex;align-items:center;gap:14px;width:100%;padding:14px 12px;background:transparent;border:0;border-radius:12px;font-size:16px;text-align:left;color:#2a2331;cursor:pointer}.pm-mobile-as-item:active{background:#f4eef9}.pm-mobile-as-ico{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;background:#f4eef9;border-radius:10px;font-size:18px;flex:0 0 auto}.pm-mobile-as-cancel{display:block;width:100%;margin-top:8px;padding:14px;background:#f4eef9;border:0;border-radius:12px;font-size:16px;font-weight:600;color:#2a2331;cursor:pointer}/* Repurpose left rail as a bottom sheet */.pm-app.pm-app--mobile .pm-rail-left{position:fixed;left:0;right:0;bottom:0;top:auto;width:100%;max-width:none;max-height:78dvh;z-index:10045;background:#fff;border-top-left-radius:18px;border-top-right-radius:18px;box-shadow:0 -6px 22px rgba(0,0,0,0.18);transform:translateY(calc(100% - 60px - env(safe-area-inset-bottom)));transition:transform 260ms cubic-bezier(0.22, 0.61, 0.36, 1);padding:0;overflow:hidden;display:flex;flex-direction:column}.pm-app.pm-app--mobile .pm-rail-left.is-expanded{transform:translateY(0)}.pm-app.pm-app--mobile .pm-rail-left.is-dragging{transition:none}.pm-app.pm-app--mobile .pm-rail-collapse{display:none}.pm-app.pm-app--mobile .pm-rail-left .pm-rail-body{flex:1 1 auto;overflow-y:auto;padding:6px 14px calc(env(safe-area-inset-bottom) + 14px);-webkit-overflow-scrolling:touch}.pm-app.pm-app--mobile .pm-rail-left .pm-rail-title{display:none}/* Bottom-sheet drag handle (peek strip) */.pm-app.pm-app--mobile .pm-mobile-sheet-handle{position:relative;flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:18px 16px 10px;background:#fff;border:0;border-bottom:1px solid rgba(0,0,0,0.06);cursor:grab;touch-action:none;-webkit-tap-highlight-color:transparent}.pm-app.pm-app--mobile .pm-mobile-sheet-handle::before{content:"";position:absolute;left:50%;top:7px;width:40px;height:4px;background:#d8d0e0;border-radius:2px;transform:translateX(-50%)}.pm-mobile-sheet-grip{display:none}.pm-mobile-sheet-title{font-weight:700;color:#2a2331;font-size:15px}.pm-mobile-sheet-badge{display:inline-flex;margin-left:auto;background:#ffe8d6;color:#b85e1a;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600}.pm-mobile-sheet-badge[hidden]{display:none !important}/* Constrain canvas popovers to the viewport on mobile.
   The seat picker sits near the TOP of the screen so the on-screen keyboard
   (which always appears from the bottom) doesn't cover the search input or
   push the list off-screen. It also leaves room for the bottom Guests sheet.
   Gated on `html.pm-fullscreen-lock` (same as the bulk/import modals)
   because tool.js reparents the picker to <body> on mobile to escape the
   .pm-app stacking context, so .pm-app--mobile descendant selectors no
   longer reach it. */html.pm-fullscreen-lock .pm-seat-picker:not([hidden]){position:fixed;left:12px !important;right:12px !important;width:auto !important;max-width:none !important;top:calc(env(safe-area-inset-top) + 12px) !important;bottom:auto !important;max-height:50dvh;overflow:auto;box-shadow:0 24px 60px -20px rgba(30, 30, 47, 0.45),0 4px 14px rgba(30, 30, 47, 0.18);z-index:10080}/* 16px input prevents iOS Safari from auto-zooming the page on focus. */html.pm-fullscreen-lock .pm-seat-picker-input{font-size:16px}/* Dim backdrop so the picker reads as a modal rather than a floating popover. */.pm-seat-picker-backdrop{position:fixed;inset:0;background:rgba(20, 18, 30, 0.32);z-index:10079}.pm-seat-picker-backdrop[hidden]{display:none}.pm-app.pm-app--mobile .pm-share-toast:not([hidden]){position:fixed;left:8px !important;right:8px !important;width:auto !important;max-width:none !important;bottom:calc(env(safe-area-inset-bottom) + 150px) !important;top:auto !important;transform:none !important;animation:none !important;flex-wrap:wrap}.pm-app.pm-app--mobile .pm-share-toast input{flex-basis:100%;order:5}.pm-app.pm-app--mobile #pm-elements-popover:not([hidden]){position:fixed;left:8px;right:8px;bottom:calc(env(safe-area-inset-bottom) + 84px);top:auto;width:auto;max-width:none;z-index:10070}/* ─── Mobile edit mode ─────────────────────────────────────────────────
   When a single table/element is selected on the mobile shell, tool.js
   adds `.pm-app--editing-item` to #pm-app. We then:
     • swap the on-canvas SVG action toolbar (too small for fingers, zooms
       with the canvas) for a fixed bottom action bar with 44px targets;
     • surface a fixed rotate handle anchored above the selected item that
       stays a constant size regardless of canvas zoom (Canva-style);
     • hide the FAB and the Invitados sheet so the canvas + bar own the
       screen during the edit. The user deselects (taps empty canvas or
       the close button on the bar) to bring them back. *//* Hide the on-canvas action pill entirely on mobile — the bottom action bar
   replaces it. The rotate handle is rendered as an HTML overlay (below),
   not inside the SVG, so this rule doesn't affect it. */.pm-app.pm-app--mobile .pm-table-toolbar{display:none}/* When editing a single item, get the FAB and the Invitados sheet out of the
   way so the contextual bar can own the bottom of the screen. */.pm-app.pm-app--mobile.pm-app--editing-item .pm-mobile-fab,.pm-app.pm-app--mobile.pm-app--editing-item .pm-rail-left{display:none !important}/* Bottom-center action pill — Canva-style. Mirrors the visual language of
   .pm-mobile-quickbar but spans wider and centers under the canvas. */.pm-app.pm-app--mobile .pm-mobile-edit-bar:not([hidden]){position:fixed;left:50%;transform:translateX(-50%);bottom:calc(env(safe-area-inset-bottom) + 18px);z-index:10055;display:inline-flex;background:#fff;border:1px solid rgba(0,0,0,0.08);border-radius:14px;box-shadow:0 6px 22px rgba(0,0,0,0.18);padding:6px;gap:2px;max-width:calc(100vw - 24px);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}.pm-app.pm-app--mobile .pm-mobile-edit-bar::-webkit-scrollbar{display:none}.pm-mobile-edit-btn{width:46px;height:46px;background:transparent;border:0;border-radius:10px;color:#2a2331;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;position:relative}.pm-mobile-edit-btn:disabled{opacity:0.35}.pm-mobile-edit-btn:active{background:#f4eef9}.pm-mobile-edit-btn--danger{color:#c0392b}.pm-mobile-edit-btn--swatch::after{/* Color preview dot for the color button */content:"";position:absolute;inset:11px;border-radius:50%;background:var(--pm-current-color, #f5d9bf);border:1.5px solid rgba(0,0,0,0.18);box-sizing:border-box}.pm-mobile-edit-sep{width:1px;align-self:stretch;margin:8px 4px;background:rgba(0,0,0,0.08);flex:0 0 auto}/* Rotate handle — fixed-size HTML overlay positioned above the selected
   item by tool.js. Size stays constant regardless of canvas zoom (the
   on-canvas SVG toolbar used to scale with zoom, which made it tiny when
   zoomed out and giant when zoomed in). */.pm-app.pm-app--mobile .pm-mobile-edit-rotate:not([hidden]){position:fixed;z-index:10054;width:40px;height:40px;margin:-20px 0 0 -20px;/* JS sets top/left to the anchor point */border-radius:50%;background:#fff;border:1px solid rgba(0,0,0,0.10);box-shadow:0 4px 12px rgba(0,0,0,0.18);color:#2a2331;display:inline-flex;align-items:center;justify-content:center;cursor:grab;touch-action:none;padding:0}.pm-app.pm-app--mobile .pm-mobile-edit-rotate:active{cursor:grabbing}/* Rename modal — used on mobile in place of the cramped inline-edit pill.
   Reuses .pm-modal / .pm-modal-card scaffolding so it matches the
   bulk/import modal styling. The input is intentionally 16px so iOS Safari
   doesn't zoom the page when it gains focus. */.pm-rename-modal{z-index:10095}.pm-rename-card{width:min(380px, 100%)}.pm-rename-input{width:100%;box-sizing:border-box;padding:12px 14px;border:1px solid var(--pm-input-border);border-radius:10px;font-family:Inter,sans-serif;font-size:16px;color:var(--text-heading);background:#fff;margin-top:4px}.pm-rename-input:focus{outline:2px solid var(--primary-soft-border);border-color:var(--primary)}.pm-rename-footer{justify-content:flex-end}/* Bigger color swatches on the mobile shell — desktop's 28px circles are
   too cramped for thumbs. Gated on html.pm-fullscreen-lock because the
   popover is appended to <body>, outside the .pm-app--mobile scope. */html.pm-fullscreen-lock .pm-color-popover{padding:14px}html.pm-fullscreen-lock .pm-color-grid{grid-template-columns:repeat(4, 48px);gap:14px}html.pm-fullscreen-lock .pm-swatch{width:48px;height:48px;border-width:2.5px}/* On mobile, labels aren't editable from the canvas (rename happens via the
   action bar's pencil button → modal). Suppress the hover-chip and the text
   caret cursor so a tap doesn't leave behind an input-looking pill — :hover
   stays sticky on touch devices after a tap, which is what makes the chip
   linger and read as an input field. */.pm-app.pm-app--mobile .pm-table-label-bg,.pm-app.pm-app--mobile .pm-table-label-group:hover .pm-table-label-bg{opacity:0}.pm-app.pm-app--mobile .pm-table-label,.pm-app.pm-app--mobile .pm-table-label-group,.pm-app.pm-app--mobile .pm-element-label{cursor:pointer}/* Suppress the browser's default focus ring on labels — they're not
   editable inline on mobile, so the ring just reads as a stray input
   outline after a tap. */.pm-app.pm-app--mobile .pm-table-label:focus,.pm-app.pm-app--mobile .pm-table-label-group:focus,.pm-app.pm-app--mobile .pm-element-label:focus,.pm-app.pm-app--mobile .pm-table-label:focus-visible,.pm-app.pm-app--mobile .pm-table-label-group:focus-visible,.pm-app.pm-app--mobile .pm-element-label:focus-visible{outline:none}.pm-app.pm-app--mobile .pm-table-label,.pm-app.pm-app--mobile .pm-element-label{-webkit-tap-highlight-color:transparent}/* Bulk and import modals are reparented to <body> by tool.js, so we can't
   target them via `.pm-app--mobile`. Gate on `html.pm-fullscreen-lock`,
   which only the mobile shell (and desktop fullscreen) sets. They must sit
   above the mobile shell (FAB / sheet / kebab live at ~10040–10050), and
   skip the desktop slide-in animation which leaves the card stuck at
   translate(-50%, 0) — visually off-screen on mobile. */html.pm-fullscreen-lock .pm-modal{z-index:10090}html.pm-fullscreen-lock .pm-modal-card{max-height:86dvh;width:calc(100% - 24px);max-width:520px;animation:none !important;transform:none !important;overflow-y:auto}