@font-face{font-family:Vazir;src:url('./fonts/vazir-regular.woff2') format('woff2');font-weight:400;font-display:swap}@font-face{font-family:Vazir;src:url('./fonts/vazir-medium.woff2') format('woff2');font-weight:500;font-display:swap}@font-face{font-family:Vazir;src:url('./fonts/vazir-bold.woff2') format('woff2');font-weight:700;font-display:swap}:root{font-family:Vazir,Tahoma,sans-serif;color:#233a36;--brand:var(--theme-primary,#168c7e);--brand-dark:var(--theme-primary-dark,#08796d);--line:#e1e8e6;--muted:#7c8d89;--panel:#fff;--side:#fff;--chat:#e7efec}*{box-sizing:border-box}html,body{height:100%;margin:0}button,input,textarea,select{font:inherit}.shell{height:100%;display:grid;grid-template-columns:360px minmax(420px,1fr);background:var(--panel)}.side{position:relative;border-left:1px solid var(--line);background:var(--side);overflow:hidden}.side-head{height:calc(64px + env(safe-area-inset-top));display:flex;gap:10px;align-items:center;padding:calc(9px + env(safe-area-inset-top)) 12px 9px}.round{width:42px;height:42px;border:0;border-radius:50%;background:transparent;color:#627571;font-size:21px;cursor:pointer}.round:hover{background:#f0f4f3}.search{height:42px;flex:1;display:flex;align-items:center;gap:8px;border-radius:22px;background:#f0f3f3;padding:0 14px;color:#7b8c88}.search input{border:0;outline:0;background:transparent;width:100%;font-size:16px}.side-title{padding:7px 18px 10px}.side-title strong,.side-title span{display:block}.side-title strong{font-size:18px}.side-title span{font-size:12px;color:var(--muted);margin-top:2px}#list{height:calc(100% - 112px);overflow:auto;padding:0 7px}.conversation{display:flex;align-items:center;gap:12px;min-height:68px;padding:8px 10px;border-radius:12px;cursor:pointer}.conversation:hover{background:#f2f6f5}.conversation.active{background:color-mix(in srgb,var(--theme-primary,#168c7e) 12%,transparent)}.conversation .circle{width:50px;height:50px;flex:none;border-radius:50%;background:linear-gradient(145deg,#41aa9d,var(--brand,#168c7e));color:#fff;display:grid;place-items:center;font-size:18px;font-weight:500}.conversation>div:last-child{min-width:0}.conversation strong,.conversation span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conversation strong{font-size:14px}.conversation span{font-size:12px;color:var(--muted);margin-top:5px}.empty{text-align:center;color:var(--muted);margin-top:35px}.empty-onboarding{text-align:center;padding:0 24px}.empty-onboarding #empty-new-chat{margin-top:14px;border:0;border-radius:22px;padding:11px 20px;background:var(--brand);color:#fff;font:inherit;font-weight:700;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:7px}.empty-onboarding #empty-new-chat:hover{filter:brightness(1.05)}.empty-onboarding #empty-new-chat svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.floating{position:absolute;left:20px;bottom:22px;width:54px;height:54px;border:0;border-radius:50%;background:var(--brand);color:#fff;font-size:22px;box-shadow:0 6px 18px #08796d50;cursor:pointer}main{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--chat);background-image:radial-gradient(#6c817a12 1px,transparent 1px);background-size:22px 22px}.top{height:calc(64px + env(safe-area-inset-top));flex:none;display:flex;align-items:center;gap:7px;padding:calc(7px + env(safe-area-inset-top)) 13px 7px;background:#fff;border-bottom:1px solid var(--line)}#back{display:none}.head-avatar{width:44px;height:44px;border-radius:50%;background:linear-gradient(145deg,#41aa9d,var(--brand,#168c7e));color:#fff;display:grid;place-items:center}.chat-identity{flex:1;text-align:right;border:0;background:transparent;cursor:pointer;padding:3px}.chat-identity strong,.chat-identity small{display:block}.chat-identity strong{font-size:15px}.chat-identity small{font-size:12px;color:var(--muted);margin-top:2px}#messages{flex:1;overflow:auto;padding:18px clamp(18px,5vw,64px)}.welcome{text-align:center;max-width:410px;margin:18vh auto;padding:18px;border-radius:16px;background:#ffffffd9;box-shadow:0 3px 16px #34554d18}.welcome b{font-size:40px}.welcome h2{font-size:18px}.welcome p{color:var(--muted);font-size:13px}.row{display:flex;align-items:flex-end;gap:7px;margin:7px 0}.row.mine{flex-direction:row-reverse}.avatar{width:32px;height:32px;flex:none;border-radius:50%;background:#f8faf9;display:grid;place-items:center;color:var(--brand)}.bubble{position:relative;max-width:min(78%,760px);padding:8px 11px 5px;background:var(--bubble-theirs,#fff);border-radius:12px 12px 12px 3px;box-shadow:0 1px 2px #2d4f4722;font-size:14px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.mine .bubble{background:var(--bubble-mine,#dcf8ed);border-radius:12px 12px 3px 12px}.bubble small{display:block;text-align:left;color:#7b8d88;font-size:10px;line-height:1.3;margin-top:2px}#composer{flex:none;display:flex;flex-direction:column;padding:9px clamp(14px,2vw,28px) calc(9px + env(safe-area-inset-bottom));background:#f4f7f6;border-top:1px solid var(--line)}.composer-row{display:flex;align-items:flex-end;gap:8px}.composer-row[hidden]{display:none}#composer button{border:0;cursor:pointer}.attach{width:44px;height:44px;border-radius:50%;background:transparent;color:#71837f;font-size:20px}.input-wrap{min-height:44px;flex:1;border-radius:23px;background:#fff;display:flex;align-items:flex-end;padding:2px 5px 2px 13px;border:1px solid #dde6e3}.input-wrap textarea{flex:1;min-height:38px;max-height:120px;padding:9px 5px;border:0;outline:0;resize:none;background:transparent}.input-wrap button{width:40px;height:40px;border-radius:50%;background:transparent;color:#71837f;font-size:20px}.send{width:46px;height:46px;border-radius:50%;background:var(--brand);color:#fff;font-size:18px}.send:disabled{background:#afbfbb}.info{position:fixed;z-index:10;top:0;left:0;width:340px;height:100%;background:#fff;border-right:1px solid var(--line);box-shadow:8px 0 26px #183d3420;transform:translateX(-105%);transition:transform .22s ease}.shell.info-open .info{transform:translateX(0)}.info header{height:64px;display:flex;align-items:center;gap:12px;padding:8px 13px;border-bottom:1px solid var(--line)}.info .logo{width:84px;height:84px;margin:30px auto 12px;border-radius:50%;background:var(--brand);color:#fff;display:grid;place-items:center;font-weight:700}.info h2,.info p{text-align:center}.info p{font-size:13px;color:var(--muted)}.info nav{border-top:10px solid #f1f4f3;margin-top:25px;padding-top:6px}.info nav button{display:block;width:100%;text-align:right;border:0;background:#fff;padding:14px 20px;cursor:pointer}.info nav button:hover{background:#f2f6f5}dialog{border:0;border-radius:16px;width:min(420px,92vw);padding:24px;box-shadow:0 20px 70px #183d3460}dialog::backdrop{background:#173d3666}dialog h2{margin-top:0}dialog label{display:block;margin:14px 0;color:#526662}dialog input,dialog select{display:block;width:100%;margin-top:6px;padding:11px;border:1px solid var(--line);border-radius:10px}dialog form>div{display:flex;justify-content:flex-end;gap:8px}dialog button{border:0;padding:9px 18px;border-radius:8px;cursor:pointer}.primary{background:var(--brand);color:#fff}#toast{position:fixed;z-index:30;bottom:22px;left:50%;transform:translateX(-50%);background:#203d38;color:#fff;padding:9px 16px;border-radius:20px;opacity:0;pointer-events:none;transition:.2s}#toast.show{opacity:1}@media(max-width:720px){.shell{display:block}.side{height:100%;border:0}.shell.open .side{display:none}main{display:none;height:100%}.shell.open main{display:flex}.top{height:calc(58px + env(safe-area-inset-top));padding:calc(5px + env(safe-area-inset-top)) 7px 5px}#back{display:block}.top>.round:last-child{display:none}#messages{padding:12px 9px}.bubble{max-width:84%}#composer{padding:7px 7px calc(7px + env(safe-area-inset-bottom))}.composer-row{gap:4px}.attach{display:none}.info{width:min(100%,340px)}.floating{bottom:calc(18px + env(safe-area-inset-bottom))}}
.label-bar{margin-top:12px}.label-bar button{border:0;background:#eef5f3;color:var(--brand,#168c7e);border-radius:15px;padding:5px 9px;font-size:11px;cursor:pointer}.label-chip{display:inline-flex;align-items:center;gap:4px;margin:5px 3px 0 0;padding:4px 8px;border-radius:13px;background:#e2f1ed;color:#27645b;font-size:11px;cursor:pointer}.unread{margin-right:auto;background:var(--brand,#168c7e);color:white;border-radius:12px;padding:2px 7px;font-size:10px}.mention-badge{background:#e2811c!important;color:#fff!important;font-weight:700}
.bubble-wrap{position:relative;display:flex;align-items:flex-end;gap:3px}.message-arrow{border:0;background:transparent;color:#70847e;width:23px;height:27px;border-radius:50%;font-size:18px;cursor:pointer;opacity:.85}.message-arrow:hover{background:#dcebe7;opacity:1}.message-menu{position:fixed;z-index:100;min-width:175px;padding:5px;border-radius:12px;background:#fff;box-shadow:0 8px 30px #153d3430;border:1px solid #dce7e3}.message-menu button{display:block;width:100%;padding:9px 12px;border:0;background:transparent;text-align:right;border-radius:8px;font:inherit;font-size:13px;color:#29433e;cursor:pointer}.message-menu button:hover{background:#edf5f2}
.attach-menu{position:fixed;z-index:80;bottom:78px;right:18px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 8px 28px #173d3428;padding:6px;min-width:190px}.attach-menu button{display:block;width:100%;border:0;background:transparent;text-align:right;padding:10px;border-radius:8px;cursor:pointer}.attach-menu button:hover{background:#edf5f2}
.header-menu{position:fixed;z-index:1000;min-width:190px;padding:8px;background:#fff;border:1px solid #d8e3e0;border-radius:12px;box-shadow:0 12px 32px #163d3533;direction:rtl}
.header-menu button{display:block;width:100%;padding:11px 12px;border:0;border-radius:8px;background:transparent;text-align:right;font:inherit;color:#183b34;cursor:pointer}
.header-menu button:hover,.header-menu button:focus-visible{background:color-mix(in srgb,var(--theme-primary,#168c7e) 12%,transparent);outline:none}
.member-list{max-height:190px;overflow:auto;border:1px solid #dce8e4;border-radius:10px;background:#fbfdfc}.member-list label{display:flex;gap:9px;align-items:center;padding:10px;border-bottom:1px solid #edf2f0;cursor:pointer}.member-list label:last-child{border-bottom:0}.member-list input{accent-color:var(--brand,#168c7e)}.member-list p{padding:10px;margin:0;color:#6b817a}.message-file{display:block;margin-top:8px;padding:9px 11px;border-radius:10px;background:color-mix(in srgb,var(--theme-primary,#168c7e) 12%,transparent);color:var(--theme-primary-dark,#08796d);text-decoration:none;font-size:13px}.message-image{display:block;margin-top:8px}.message-image img{display:block;max-width:min(300px,65vw);max-height:260px;border-radius:10px;object-fit:cover}.message-text{white-space:pre-wrap}.bubble:has(.message-image){min-width:180px}#attachment-draft,#reply-draft{position:absolute;bottom:60px;right:18px;left:18px;z-index:2;background:#f5fbf9;border:1px solid #cfe4dd;border-radius:10px;padding:7px 10px;font-size:12px;color:#34564e}#attachment-draft span{display:inline-flex;gap:5px;align-items:center;margin-left:8px}.upload-ring{display:inline-block;width:14px;height:14px;border-radius:50%;flex:none;background:conic-gradient(var(--brand,#168c7e) calc(var(--p)*1%),#d7e3df 0);transition:background .15s linear}#attachment-draft button,#reply-draft button{border:0;background:transparent;color:#ad2e45;font:inherit;cursor:pointer}

/* File attachment chip: name opens the file for viewing, the small button saves it. */
.message-file{display:flex;align-items:center;gap:6px;margin-top:8px;padding:8px 10px;border-radius:10px;background:color-mix(in srgb,var(--theme-primary,#168c7e) 12%,transparent);font-size:13px;max-width:min(320px,72vw)}
.message-file-name{flex:1;min-width:0;color:var(--theme-primary-dark,#08796d);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}
.message-file-name:hover{text-decoration:underline}
.message-file-save{flex:none;border:0;background:color-mix(in srgb,var(--theme-primary,#168c7e) 12%,transparent);color:var(--theme-primary-dark,#08796d);width:30px;height:30px;border-radius:50%;font-size:15px;line-height:1;cursor:pointer;display:grid;place-items:center}
.message-file-save:active{background:color-mix(in srgb,var(--theme-primary,#168c7e) 24%,transparent)}
.mine .message-file{background:#e3f5ec}

/* Fullscreen image viewer (authenticated-media.js). */
.img-lightbox{position:fixed;inset:0;z-index:600;display:flex;align-items:center;justify-content:center;background:rgba(6,14,12,.92);padding:24px}
.img-lightbox[hidden]{display:none}
.img-lightbox img{max-width:100%;max-height:100%;border-radius:8px;object-fit:contain}
.img-lightbox-close,.img-lightbox-save,.img-lightbox-share{position:absolute;top:calc(14px + env(safe-area-inset-top));width:42px;height:42px;border:0;border-radius:50%;background:rgba(255,255,255,.16);color:#fff;font-size:19px;cursor:pointer;display:grid;place-items:center;text-decoration:none}
.img-lightbox-close{inset-inline-end:16px}
.img-lightbox-save{inset-inline-end:66px}.img-lightbox-share{inset-inline-end:118px}
.img-lightbox-close:active,.img-lightbox-save:active,.img-lightbox-share:active{background:rgba(255,255,255,.3)}
/* Apple-style (UIActivityIndicatorView) fading-blade spinner — a generic "something is happening"
   overlay any async action can show via showBusy()/withBusy() in authenticated-media.js, not just
   attachment downloads. Appears after a beat of visible silence, not instantly, so a near-instant
   action never flashes it; a slow one (native file save+open, a big attachment fetch) always shows
   *something* instead of looking like the tap did nothing. */
.hchat-busy{position:fixed;inset:0;z-index:5000;display:grid;place-items:center;background:rgba(20,30,28,.12);backdrop-filter:blur(1px);animation:hchat-busy-in .15s ease .12s both}
.hchat-busy[hidden]{display:none}
@keyframes hchat-busy-in{from{opacity:0}to{opacity:1}}
.hchat-spinner{position:relative;width:34px;height:34px;padding:14px;box-sizing:content-box;background:rgba(30,40,38,.55);border-radius:16px}
.hchat-spinner i{position:absolute;top:14px;left:50%;width:3px;height:9px;margin-left:-1.5px;background:#fff;border-radius:2px;transform-origin:1.5px 17px;animation:hchat-blade 1s linear infinite;opacity:.25}
@keyframes hchat-blade{0%{opacity:1}100%{opacity:.25}}

/* iPhone zooms the whole page in when a text field under 16px gets focus — and does not zoom back
   (editing a message left the app enlarged and spilling off the screen). Every field on a touch
   screen is at least 16px. */
@media (pointer:coarse){input,textarea,select{font-size:max(16px,1em)!important}}
.message-editor-dialog textarea{width:100%;box-sizing:border-box;font-size:16px}
.message-editor-dialog{max-width:calc(100vw - 24px);box-sizing:border-box}
/* Full-screen layers keep clear of the status bar and home indicator (contentInset "never"). */
.img-lightbox{padding-top:max(env(safe-area-inset-top,0px),12px);padding-bottom:env(safe-area-inset-bottom,0px)}
@media (max-width:720px){.info{padding-top:env(safe-area-inset-top,0px);box-sizing:border-box}}

/* «چیدمان پیام‌ها» = راست‌چین (ظاهر و زبان): own messages on the right, others on the left, and every
   message's ⋮ on its left side. html[data-message-side] is set by auth-ui.js before first paint. */
html[data-message-side="right"] .row{flex-direction:row-reverse}
html[data-message-side="right"] .row.mine{flex-direction:row}
html[data-message-side="right"] .bubble-wrap{flex-direction:row-reverse}
/* In-app update notice (app-update.js). */
.app-update{position:fixed;inset-inline:12px;bottom:calc(84px + env(safe-area-inset-bottom));z-index:60;display:flex;justify-content:center;pointer-events:none}
.app-update.required{inset:0;bottom:0;align-items:center;background:rgba(0,0,0,.55);padding:16px}
.app-update-card{pointer-events:auto;width:min(420px,100%);display:flex;flex-direction:column;gap:6px;padding:14px 16px;border-radius:14px;background:var(--surface,#fff);color:inherit;box-shadow:0 10px 30px rgba(0,0,0,.25);border-top:4px solid var(--theme-primary,#168c7e)}
.app-update-card b{font-size:15px}.app-update-card small{opacity:.7}.app-update-card p{margin:2px 0;font-size:13px;white-space:pre-line}
.app-update-must{color:#b3261e;opacity:1!important;font-weight:600}
.app-update-actions{display:flex;gap:8px;margin-top:4px}
.app-update-go{flex:1;text-align:center;padding:10px;border-radius:10px;background:var(--theme-primary,#168c7e);color:#fff!important;text-decoration:none;font-weight:700}
.app-update-later{padding:10px 14px;border:0;border-radius:10px;background:rgba(0,0,0,.07);font:inherit;cursor:pointer}
@media print and (prefers-color-scheme:dark){.app-update-card{background:#1f2427}}
/* Image viewer zoom (authenticated-media.js wireZoom). */
.img-lightbox img{touch-action:none;transform-origin:center center;transition:transform .05s linear;user-select:none;-webkit-user-select:none}
.img-lightbox img.zoomed{cursor:grab}
/* The zoomable photo is transformed (its own layer) and comes after the buttons in the page, so it
   was drawn over ✕ / ⭳ / ↑. Keep the buttons above it. */
.img-lightbox-close,.img-lightbox-save,.img-lightbox-share{z-index:3}
.img-lightbox img{position:relative;z-index:1}
/* Viewer buttons stay readable on any photo (white or dark): solid dark disc, white icon, soft ring. */
.img-lightbox-close,.img-lightbox-save,.img-lightbox-share{background:rgba(20,22,24,.72)!important;color:#fff!important;border:1px solid rgba(255,255,255,.35)!important;box-shadow:0 2px 10px rgba(0,0,0,.35);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.img-lightbox-close:active,.img-lightbox-save:active,.img-lightbox-share:active{background:rgba(20,22,24,.9)!important}
