/* Ocean Heart concierge chat — site palette (ocean ink / pearl), Plus Jakarta Sans, shares the phone booking row. */
:root{--oh-chat-launcher-width:124px;--oh-chat-launcher-gap:12px}
.oh-chat{position:fixed;right:22px;bottom:22px;z-index:40;font-family:var(--sans,system-ui);color:#18261b}
.oh-chat-fab{display:flex;align-items:center;gap:10px;height:52px;padding:0 20px 0 16px;border:1.5px solid #2e5a2c;border-radius:26px;background:#fcfbf6;color:#2e5a2c;
 box-shadow:0 6px 20px #0c201424;font:600 15px/1 var(--sans,system-ui);cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}
.oh-chat-fab:hover{transform:translateY(-2px);box-shadow:0 16px 36px #0c201452}
/* Fixed icon slot can later hold the hotel host avatar without changing the row (C00 0439). */
.oh-chat-icon{position:relative;display:inline-flex;flex:0 0 22px;width:22px;height:22px}
.oh-chat-online{position:absolute;right:-3px;top:-2px;width:9px;height:9px;border:2px solid #fcfbf6;border-radius:50%;background:#2e7a42}
.oh-chat-hint{position:absolute;bottom:calc(100% + 10px);right:0;width:max-content;max-width:min(248px,80vw);margin:0;padding:10px 13px;border:1px solid #c6d7bf;border-radius:12px;background:#fcfbf6;color:#2e5a2c;box-shadow:0 4px 18px #0c20141c;font:500 13px/1.45 var(--sans,system-ui);pointer-events:none}
.oh-chat-hint::after{content:"";position:absolute;right:25px;bottom:-5px;width:8px;height:8px;background:#fcfbf6;border-right:1px solid #c6d7bf;border-bottom:1px solid #c6d7bf;transform:rotate(45deg)}
.oh-chat.is-open .oh-chat-fab,.oh-chat.is-open .oh-chat-hint{display:none}
.oh-chat-panel{position:relative;width:min(var(--chat-panel-width,494px),calc(100vw - 44px));height:min(var(--chat-panel-height,728px),calc(100dvh - 44px));display:flex;flex-direction:column;background:#fcfbf6;
 border-radius:16px;box-shadow:0 30px 70px #0c201452;overflow:hidden}
.oh-chat-panel[hidden]{display:none}
.oh-chat-panel header{height:auto;min-height:80px;flex:0 0 auto;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;background:#2e5a2c;color:#fcfbf6}
.oh-chat-panel header strong{display:block;font:400 20px/1.2 var(--serif,serif)}
.oh-chat-panel header small{display:block;margin-top:3px;font-size:12px;opacity:.8}
.oh-chat-close{flex:0 0 auto;min-width:64px;min-height:44px;background:#ffffff14;border:1px solid #ffffff80;color:#fcfbf6;border-radius:22px;padding:8px 12px;font:600 14px var(--sans,system-ui);cursor:pointer}
.oh-chat-handle{display:none}
.oh-chat-resize{display:none}
.oh-chat.is-resizing{user-select:none}
@media(min-width:761px){
 .oh-chat-resize{position:absolute;z-index:4;top:5px;left:5px;display:grid;place-items:center;width:32px;height:32px;padding:0;border:1px solid #ffffff70;border-radius:9px;background:#ffffff12;color:#fcfbf6;cursor:nwse-resize;touch-action:none}
 .oh-chat-resize:hover,.oh-chat-resize:focus-visible{background:#ffffff2a;outline:2px solid #fcfbf6;outline-offset:1px}
 .oh-chat-panel header{padding-left:46px}
}
.oh-chat-log{flex:1;min-height:0;overflow:auto;overscroll-behavior-y:contain;margin:0;padding:16px;list-style:none;display:flex;flex-direction:column;gap:10px}
.oh-chat-msg{max-width:86%;padding:10px 13px;border-radius:14px;font-size:14px;line-height:1.5;white-space:pre-wrap;word-break:break-word}
.oh-chat-msg.host{align-self:flex-start;background:#edf4e8;border-bottom-left-radius:4px}
.oh-chat-msg.guest{align-self:flex-end;background:#2e5a2c;color:#fcfbf6;border-bottom-right-radius:4px}
.oh-chat-msg.typing{opacity:.6;letter-spacing:.2em}
.oh-chat-msg a{color:inherit;font-weight:600}
.oh-chat-chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 10px}
.oh-chat-chips button{border:1px solid #d9e2cf;background:#fff;border-radius:16px;padding:7px 11px;font:500 13px var(--sans,system-ui);color:#18261b;cursor:pointer}
.oh-chat-form{display:flex;gap:8px;padding:12px 14px 14px;border-top:1px solid #e4e9e1}
.oh-chat-form input{flex:1;min-width:0;height:42px;border:1px solid #d9e2cf;border-radius:21px;padding:0 14px;font:400 15px var(--sans,system-ui)}
.oh-chat-send{height:42px;border:0;border-radius:21px;padding:0 16px;background:#2e5a2c;color:#fcfbf6;font:600 14px var(--sans,system-ui);cursor:pointer}
.oh-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
/* Read-aloud speaker after each of Mere's replies (chat.mjs addSpeaker, device voice). Small and quiet; filled while reading. */
.oh-chat-read{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin-inline-start:6px;padding:0;vertical-align:middle;border:1px solid #2e5a2c33;border-radius:50%;background:transparent;color:#2e5a2c;opacity:.72;cursor:pointer;transition:opacity .15s,background .15s,color .15s}
.oh-chat-read:hover,.oh-chat-read:focus-visible{opacity:1}
.oh-chat-read:focus-visible{outline:2px solid #2c7f76;outline-offset:2px}
.oh-chat-read[data-reading="true"]{opacity:1;background:#2e5a2c;color:#fff;border-color:#2e5a2c}
@media(max-width:760px){
 /* D-0354: on phones the chat is a round button in the same bottom row as "Plan your stay" (never a second layer over the
    page), and it steps aside with that bar while the 3D room sheet or another bottom panel is up (mobile-cta.mjs). */
 .oh-chat{right:max(5%,env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px))}
 .oh-chat-fab{width:var(--oh-chat-launcher-width);min-width:0;height:48px;padding:0 12px;gap:7px;justify-content:center;border-radius:24px;font-size:14px}
 .oh-chat-fab .oh-chat-fab-label{display:inline;position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:nowrap}
 .oh-chat:not(.is-open).is-covering{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s,visibility 0s .2s}
 .oh-chat.is-open{right:auto;left:calc(8px + var(--chat-visible-left,0px));width:calc(var(--chat-visible-width,100vw) - 16px);bottom:calc(8px + env(safe-area-inset-bottom,0px) + var(--chat-keyboard-inset,0px));z-index:60}
 .oh-chat-panel{width:auto;height:min(620px,calc(var(--chat-visible-height,100dvh) - 32px - env(safe-area-inset-bottom,0px)))}
 .oh-chat-handle{display:flex;align-items:center;justify-content:center;flex:0 0 32px;min-height:32px;width:100%;padding:0;border:0;background:#2e5a2c;touch-action:none;cursor:grab}
 .oh-chat-handle span{width:38px;height:4px;border-radius:3px;background:#fff9}
 .oh-chat-panel header{min-height:68px;padding-top:2px}
 .oh-chat-form input{font-size:16px}
 /* Specificity wins the later legacy controls.css 58px allowance. Same row, no new layer. */
 body>.mobile-book{right:calc(max(5%,env(safe-area-inset-right,0px)) + var(--oh-chat-launcher-width) + var(--oh-chat-launcher-gap));bottom:calc(12px + env(safe-area-inset-bottom,0px))}
 .oh-chat-form,.oh-chat-chips{flex:0 0 auto}
 /* Keyboard up (chat.mjs adds .is-typing): the panel is exactly the visible strip above the keyboard; the conversation keeps the room.
    :is() lifts these over mobile-parity.css (html.mp-host/.mp-viewer). Owner 10-03 Messenger report. */
 :is(html,html.mp-host,html.mp-viewer) .oh-chat.is-open.is-typing{top:calc(var(--chat-visible-top,0px) + 6px);bottom:auto;left:calc(6px + var(--chat-visible-left,0px));right:auto;width:calc(var(--chat-visible-width,100vw) - 12px)}
 :is(html,html.mp-host,html.mp-viewer) .oh-chat.is-typing .oh-chat-panel{height:calc(var(--chat-visible-height,100dvh) - 12px);max-height:none}
 .oh-chat.is-typing .oh-chat-handle,.oh-chat.is-typing .oh-chat-chips,.oh-chat.is-typing .oh-chat-sub,.oh-chat.is-typing .oh-mara-text-state{display:none}
 /* Mere stays in view while typing, small: her portrait image in a 36px circle; the live portrait waits until typing ends. */
 .oh-chat.is-typing .oh-mara-header{flex:0 0 36px;width:36px;height:36px;border-radius:50%;background:#fcfbf6 url(../mara/mere-card-portrait.webp) center 18%/cover no-repeat}
 .oh-chat.is-typing .oh-mara-header>*{visibility:hidden}
 .oh-chat.is-typing .oh-chat-panel header{min-height:0;padding-top:8px;padding-bottom:8px}
 .oh-chat.is-typing .oh-chat-log{flex:1 1 auto;min-height:0}
 html.oh-chat-typing :is(.mp-capsule,.mp-menu,body>.mobile-book){visibility:hidden}
}
@media(prefers-reduced-motion:reduce){.oh-chat-fab{transition:none}}
/* Full-screen 3D hides the closed launcher. An already-open chat stays on screen. */
html.oh-3d-full .oh-chat.is-open{display:block!important;z-index:120}
/* Phones: with the booking form on screen the bubble folds to Mere's face (mobile-parity.css); it no longer steps away (C09 09-30). */
