*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:IRANYekanX,system-ui,-apple-system,Segoe UI,Roboto,Tahoma,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace,IRANYekanX;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-x-3{left:.75rem;right:.75rem}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-6{right:1.5rem}.top-1\.5{top:.375rem}.top-5{top:1.25rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-video{aspect-ratio:16/9}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[52px\]{height:52px}.h-\[56px\]{height:56px}.h-auto{height:auto}.h-full{height:100%}.max-h-24{max-height:6rem}.max-h-72{max-height:18rem}.max-h-\[80dvh\]{max-height:80dvh}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-12{min-height:3rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[52px\]{width:52px}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[150px\]{min-width:150px}.min-w-\[96px\]{min-width:96px}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[170px\]{max-width:170px}.max-w-\[80\%\]{max-width:80%}.max-w-\[88\%\]{max-width:88%}.max-w-full{max-width:100%}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-10{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-10{--tw-translate-y:-2.5rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-0{--tw-translate-y:0px}.transform,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-bounce{animation:bounce 1s infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-3\.5{gap:.875rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.875rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[24px\]{border-radius:24px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-bl-none{border-bottom-left-radius:0}.rounded-br-none{border-bottom-right-radius:0}.border{border-width:1px}.border-0{border-width:0}.border-b{border-bottom-width:1px}.border-r-2{border-right-width:2px}.border-brand-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity,1))}.border-slate-200\/50{border-color:rgba(226,232,240,.5)}.border-white\/90{border-color:hsla(0,0%,100%,.9)}.bg-amber-500\/10{background-color:rgba(245,158,11,.1)}.bg-brand-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.bg-brand-500\/10{background-color:rgba(99,102,241,.1)}.bg-brand-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-500\/10{background-color:rgba(16,185,129,.1)}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-indigo-500\/10{background-color:rgba(99,102,241,.1)}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.bg-rose-500\/10{background-color:rgba(244,63,94,.1)}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity,1))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.bg-sky-500\/10{background-color:rgba(14,165,233,.1)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-100\/70{background-color:rgba(241,245,249,.7)}.bg-slate-100\/80{background-color:rgba(241,245,249,.8)}.bg-slate-200\/60{background-color:rgba(226,232,240,.6)}.bg-slate-200\/70{background-color:rgba(226,232,240,.7)}.bg-slate-200\/75{background-color:rgba(226,232,240,.75)}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity,1))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-50\/80{background-color:rgba(248,250,252,.8)}.bg-slate-50\/90{background-color:rgba(248,250,252,.9)}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-slate-900\/60{background-color:rgba(15,23,42,.6)}.bg-slate-900\/90{background-color:rgba(15,23,42,.9)}.bg-slate-950\/40{background-color:rgba(2,6,23,.4)}.bg-slate-950\/45{background-color:rgba(2,6,23,.45)}.bg-transparent{background-color:transparent}.bg-violet-500\/10{background-color:rgba(139,92,246,.1)}.bg-white\/70{background-color:rgb(255 255 255/.7)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/20{background-color:hsla(0,0%,100%,.2)}.bg-white\/40{background-color:hsla(0,0%,100%,.4)}.bg-white\/95{background-color:hsla(0,0%,100%,.95)}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-brand-600{--tw-gradient-from:#4f46e5 var(--tw-gradient-from-position);--tw-gradient-to:rgba(79,70,229,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-indigo-500{--tw-gradient-to:#6366f1 var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-3{padding-bottom:.75rem}.pb-6{padding-bottom:1.5rem}.pr-2\.5{padding-right:.625rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.pt-6{padding-top:1.5rem}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace,IRANYekanX}.font-sans{font-family:IRANYekanX,system-ui,-apple-system,Segoe UI,Roboto,Tahoma,sans-serif}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-700{color:#b45309}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-brand-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-brand-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-dark-text{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity,1))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.text-slate-400\/70{color:rgb(148 163 184/.7)}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/75{color:hsla(0,0%,100%,.75)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-white\/90{color:hsla(0,0%,100%,.9)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-slate-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.placeholder-slate-400::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.accent-brand-600{accent-color:#4f46e5}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-md,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.\[animation-delay\:0\.15s\]{animation-delay:.15s}.\[animation-delay\:0\.3s\]{animation-delay:.3s}/* یک وزن کافی است: همهٔ متن‌ها در پروژه حداکثر ۵۰۰ هستند و
   متن بدنه ۴۰۰. بازهٔ کامل 100-900 به همان Regular نگاشت می‌شود
   تا ۲۹KB فایل Bold بی‌دلیل دانلود نشود. */
@font-face{font-family:IRANYekanX;src:url(/assets/fonts/iranyekanx/IRANYekanX-Regular.woff2) format("woff2");font-weight:100 501;font-style:normal;font-display:swap}@font-face{font-family:IRANYekanX;src:url(/assets/fonts/iranyekanx/IRANYekanX-DemiBold.woff2) format("woff2");font-weight:502 900;font-style:normal;font-display:swap}@font-face{font-family:remixicon;src:url(/assets/fonts/remixicon-subset.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}:where([class^=ri-],[class*=" ri-"]){display:inline-block;vertical-align:middle}[class*=" ri-"],[class^=ri-]{font-family:remixicon!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;line-height:1!important;font-feature-settings:normal!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px);--sal:env(safe-area-inset-left,0px);--sar:env(safe-area-inset-right,0px)}html{color-scheme:light;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;height:100%;background:#f1f5f9;font-family:IRANYekanX,system-ui,-apple-system,Segoe UI,Roboto,Tahoma,sans-serif;touch-action:manipulation}html.dark{color-scheme:dark;background:#0b0f19}body.app-body{position:fixed;left:0;right:0;top:var(--app-top,0);height:var(--app-h,100vh);height:var(--app-h,100dvh);width:100%;margin:0;overflow:hidden;overscroll-behavior:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.selectable-text,[contenteditable=true],input,textarea{-webkit-user-select:text;-moz-user-select:text;user-select:text;-webkit-touch-callout:default}[role=button],a,button,label,select,summary{touch-action:manipulation}img{-webkit-user-drag:none}.overflow-auto,.overflow-y-auto{overscroll-behavior:contain;-webkit-overflow-scrolling:touch}#messagesContainer{scroll-padding-bottom:1rem;overflow-anchor:none;scroll-behavior:auto}/* صفحهٔ ورود و مودال‌ها باید دقیقاً به اندازهٔ ناحیهٔ دید باشند.
   پیش از این با height:var(--app-h,100vh) و bottom:auto تنظیم می‌شد؛
   در PWA آیوس 100vh شامل نوار وضعیت است و کادر توکن زیر لبه می‌افتد
   (لمس به «فضای مرده» می‌خورد → نه تایپ، نه پیست). حالا با inset و
   dvh، بدون اتکا به هیچ متغیر JS. */
#loginScreen,div[id$=Modal]{top:0;bottom:0;left:0;right:0;height:auto;max-height:100vh}@supports (height:100dvh){#loginScreen,div[id$=Modal]{max-height:100dvh}}div[id$=Modal]{padding:max(.75rem,var(--sat)) max(.75rem,var(--sar)) max(.75rem,var(--sab)) max(.75rem,var(--sal))}#toast{top:calc(var(--sat) + 1.25rem)}#chatPanel{top:var(--app-top,0);height:var(--app-h,100vh);height:var(--app-h,100dvh)}
#chatPanel.is-sliding{will-change:transform}#appScreen,#chatPanel{padding-left:var(--sal);padding-right:var(--sar)}@media (min-width:768px){#chatPanel{top:auto;height:100%;will-change:auto}#appScreen,#chatPanel{padding-left:0;padding-right:0}}.header-standard{height:calc(64px + var(--sat));min-height:calc(64px + var(--sat));max-height:calc(64px + var(--sat));padding-top:var(--sat);display:flex;align-items:center;border-bottom:1px solid rgba(0,0,0,.055)}.dark .header-standard{border-bottom:1px solid hsla(0,0%,100%,.065)}.footer-standard{height:calc(72px + var(--sab));min-height:calc(72px + var(--sab));max-height:calc(72px + var(--sab));padding-bottom:var(--sab);display:flex;align-items:center;border-top:1px solid rgba(0,0,0,.055)}.dark .footer-standard{border-top:1px solid hsla(0,0%,100%,.065)}.composer-footer{min-height:72px;padding-top:12px;padding-bottom:calc(12px + var(--sab));display:flex;align-items:flex-end;border-top:1px solid rgba(0,0,0,.055)}.dark .composer-footer{border-top:1px solid hsla(0,0%,100%,.065)}html.kb-open .composer-footer{padding-bottom:12px}.composer-footer>.composer-box{width:100%}#loginScreen footer{padding-bottom:calc(1.5rem + var(--sab))}html.kb-open #loginScreen footer{padding-bottom:1rem}#loginScreen header{padding-top:calc(1.5rem + var(--sat))}@media (pointer:coarse){input:not([type=checkbox]):not([type=radio]):not(.otp-box),select,textarea{font-size:14px!important}button.w-10,button.w-6,button.w-7,button.w-8,button.w-9{position:relative}button.w-10:after,button.w-6:after,button.w-7:after,button.w-8:after,button.w-9:after{content:"";position:absolute;inset:-6px}}:focus{outline:none}:focus-visible{outline:2px solid #6366f1;outline-offset:2px;border-radius:.5rem}input:focus-visible,textarea:focus-visible{outline:none}html.standalone .hide-in-standalone{display:none!important}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.chat-surface{background-color:#f1f5f9}.dark .chat-surface{background-color:#0b0f19}@media (min-width:768px){#sidebarPanel{border-left:1px solid rgba(0,0,0,.055)}.dark #sidebarPanel{border-left:1px solid hsla(0,0%,100%,.065)}}#pinnedMessageBar{border-bottom:1px solid rgba(0,0,0,.055)}.dark #pinnedMessageBar{border-bottom:1px solid hsla(0,0%,100%,.065)}#adminPanelModal>div,#appSettingsModal>div,#attachmentModal>div,#chatActionModal>div,#inChatSearchBar,#loginScreen .h-\[52px\],#loginScreen .p-1\.5,#confirmModal>div,#messageActionModal>div,#newGroupModal>div,#newTokenModal>div,#optionsDropdown,#pwaBanner,#quickEmojiRow,#replyBanner,#sidebarPanel .h-14>div,#tabSettings .rounded-3xl,#tokenModal>div,.composer-box{border:1px solid rgba(0,0,0,.055)}.dark #adminPanelModal>div,.dark #appSettingsModal>div,.dark #attachmentModal>div,.dark #chatActionModal>div,.dark #inChatSearchBar,.dark #loginScreen .h-\[52px\],.dark #loginScreen .p-1\.5,.dark #confirmModal>div,.dark #messageActionModal>div,.dark #newGroupModal>div,.dark #newTokenModal>div,.dark #optionsDropdown,.dark #pwaBanner,.dark #quickEmojiRow,.dark #replyBanner,.dark #sidebarPanel .h-14>div,.dark #tabSettings .rounded-3xl,.dark #tokenModal>div,.dark .composer-box{border:1px solid hsla(0,0%,100%,.065)}.voice-bar{width:2.5px;border-radius:9999px;transition:height .15s ease,background-color .2s ease}.action-sheet-enter{animation:actionSheetUp .22s cubic-bezier(.16,1,.3,1) forwards}@keyframes actionSheetUp{0%{transform:translateY(18px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.highlight-target-msg{animation:targetPulse 1.2s cubic-bezier(.2,.8,.2,1)}@keyframes targetPulse{0%,to{transform:scale(1);filter:brightness(1);outline:0 solid rgba(99,102,241,0)}35%{transform:scale(1.02);filter:brightness(1.2);outline:3px solid rgba(99,102,241,.45)}}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgba(148,163,184,.2);border-radius:9999px}.dark ::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1)}.fade-in{animation:fadeIn .18s cubic-bezier(.16,1,.3,1) forwards}/* فقط opacity: انیمیشن نباید transform را لمس کند، وگرنه با fill-mode
   forwards مقدار keyframe آخر برای همیشه روی transform می‌ماند و
   ترنسفورم درون‌خطی (کشیدن حباب برای پاسخ) نادیده گرفته می‌شود. */
@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.ri-alert-fill:before{content:"\ea20"}.ri-apps-2-line:before{content:"\ea42"}.ri-arrow-left-line:before{content:"\ea60"}.ri-arrow-left-s-line:before{content:"\ea64"}.ri-arrow-right-s-line:before{content:"\ea6e"}.ri-attachment-2:before{content:"\ea84"}.ri-calendar-event-line:before{content:"\eb25"}.ri-chat-voice-line:before{content:"\eb77"}.ri-check-double-line:before{content:"\eb79"}.ri-check-line:before{content:"\eb7b"}.ri-checkbox-circle-fill:before{content:"\eb80"}.ri-close-line:before{content:"\eb99"}.ri-contacts-book-2-fill:before{content:"\ebcb"}.ri-contacts-book-2-line:before{content:"\ebcc"}.ri-delete-bin-line:before{content:"\ec2a"}.ri-download-2-line:before{content:"\ec54"}.ri-edit-line:before{content:"\ec86"}.ri-emotion-happy-line:before{content:"\ec8d"}.ri-file-copy-line:before{content:"\ecd5"}.ri-file-text-line:before{content:"\ed0f"}.ri-group-line:before{content:"\ede3"}.ri-image-2-line:before{content:"\ee45"}.ri-information-line:before{content:"\ee59"}.ri-key-2-line:before{content:"\ee6f"}.ri-key-line:before{content:"\ee71"}.ri-lock-2-fill:before{content:"\eecb"}.ri-logout-box-r-line:before{content:"\eeda"}.ri-mail-open-line:before{content:"\eefa"}.ri-mail-unread-line:before{content:"\ef02"}.ri-message-3-fill:before{content:"\ef45"}.ri-message-3-line:before{content:"\ef46"}.ri-mic-line:before{content:"\ef50"}.ri-moon-line:before{content:"\ef75"}.ri-more-2-fill:before{content:"\ef76"}.ri-music-2-line:before{content:"\ef83"}.ri-notification-off-line:before{content:"\ef9c"}.ri-paint-brush-line:before{content:"\efc1"}.ri-palette-line:before{content:"\efc5"}.ri-pause-fill:before{content:"\efd7"}.ri-phone-line:before{content:"\efec"}.ri-play-fill:before{content:"\f00a"}.ri-pushpin-2-fill:before{content:"\f036"}.ri-pushpin-2-line:before{content:"\f037"}.ri-pushpin-fill:before{content:"\f038"}.ri-pushpin-line:before{content:"\f039"}.ri-refresh-line:before{content:"\f064"}.ri-reply-line:before{content:"\f07a"}.ri-search-2-line:before{content:"\f0cd"}.ri-search-line:before{content:"\f0d1"}.ri-send-plane-2-fill:before{content:"\f0d7"}.ri-settings-4-fill:before{content:"\f0e7"}.ri-settings-4-line:before{content:"\f0e8"}.ri-share-box-line:before{content:"\f0f4"}.ri-shield-check-line:before{content:"\f100"}.ri-shield-keyhole-line:before{content:"\f107"}.ri-shield-star-line:before{content:"\f10a"}.ri-smartphone-line:before{content:"\f15a"}.ri-sparkling-fill:before{content:"\f36c"}.ri-sun-line:before{content:"\f1bf"}.ri-team-fill:before{content:"\f1ed"}.ri-team-line:before{content:"\f1ee"}.ri-user-add-fill:before{content:"\f25d"}.ri-user-add-line:before{content:"\f25e"}.ri-user-line:before{content:"\f264"}.ri-video-line:before{content:"\f282"}.ri-wifi-off-line:before{content:"\f2c2"}.focus-within\:ring-1:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:ring-2:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:ring-brand-500\/40:focus-within{--tw-ring-color:rgba(99,102,241,.4)}@media (hover:hover) and (pointer:fine){.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-brand-600:hover{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.hover\:bg-brand-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.hover\:bg-rose-500\/15:hover{background-color:rgba(244,63,94,.15)}.hover\:bg-rose-700:hover{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity,1))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-100\/90:hover{background-color:rgba(241,245,249,.9)}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\:bg-slate-200\/50:hover{background-color:rgba(226,232,240,.5)}.hover\:bg-slate-200\/60:hover{background-color:rgba(226,232,240,.6)}.hover\:bg-slate-200\/70:hover{background-color:rgba(226,232,240,.7)}.hover\:bg-slate-300\/60:hover{background-color:rgba(203,213,225,.6)}.hover\:bg-slate-300\/80:hover{background-color:rgba(203,213,225,.8)}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:bg-white\/15:hover{background-color:hsla(0,0%,100%,.15)}.hover\:bg-white\/20:hover{background-color:hsla(0,0%,100%,.2)}.hover\:bg-white\/30:hover{background-color:hsla(0,0%,100%,.3)}.hover\:bg-white\/60:hover{background-color:hsla(0,0%,100%,.6)}.hover\:text-brand-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-brand-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.focus\:ring-brand-500\/50:focus{--tw-ring-color:rgba(99,102,241,.5)}.active\:scale-90:active{--tw-scale-x:.9;--tw-scale-y:.9}.active\:scale-90:active,.active\:scale-95:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95}.active\:scale-98:active{--tw-scale-x:.98;--tw-scale-y:.98}.active\:scale-98:active,.active\:scale-\[0\.99\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:scale-\[0\.99\]:active{--tw-scale-x:0.99;--tw-scale-y:0.99}@media (hover:hover) and (pointer:fine){.group:hover .group-hover\:-translate-x-0\.5{--tw-translate-x:-0.125rem}.group:hover .group-hover\:-translate-x-0\.5,.group\/img:hover .group-hover\/img\:scale-102{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/img:hover .group-hover\/img\:scale-102{--tw-scale-x:1.02;--tw-scale-y:1.02}.group\/vid:hover .group-hover\/vid\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/vid:hover .group-hover\/vid\:bg-brand-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.group:hover .group-hover\:bg-brand-500\/10{background-color:rgba(99,102,241,.1)}.group:hover .group-hover\:text-brand-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.group\/msg:hover .group-hover\/msg\:opacity-100,.group\/vid:hover .group-hover\/vid\:opacity-100{opacity:1}.group:hover .group-hover\:ring-brand-500\/30{--tw-ring-color:rgba(99,102,241,.3)}}.dark\:ml-auto:is(.dark *){margin-left:auto}.dark\:mr-0:is(.dark *){margin-right:0}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:bg-\[\#151f33\]\/90:is(.dark *){background-color:rgba(21,31,51,.9)}.dark\:bg-amber-500\/20:is(.dark *){background-color:rgba(245,158,11,.2)}.dark\:bg-dark-bg:is(.dark *){--tw-bg-opacity:1;background-color:rgb(11 15 25/var(--tw-bg-opacity,1))}.dark\:bg-dark-card:is(.dark *){--tw-bg-opacity:1;background-color:rgb(26 35 59/var(--tw-bg-opacity,1))}.dark\:bg-dark-card\/50:is(.dark *){background-color:rgba(26,35,59,.5)}.dark\:bg-dark-card\/95:is(.dark *){background-color:rgba(26,35,59,.95)}.dark\:bg-dark-surface:is(.dark *){--tw-bg-opacity:1;background-color:rgb(19 27 46/var(--tw-bg-opacity,1))}.dark\:bg-dark-surface\/90:is(.dark *){background-color:rgba(19,27,46,.9)}.dark\:bg-emerald-500\/20:is(.dark *){background-color:rgba(16,185,129,.2)}.dark\:bg-emerald-950\/60:is(.dark *){background-color:rgba(2,44,34,.6)}.dark\:bg-indigo-500\/20:is(.dark *){background-color:rgba(99,102,241,.2)}.dark\:bg-indigo-950\/60:is(.dark *){background-color:rgba(30,27,75,.6)}.dark\:bg-rose-950\/60:is(.dark *){background-color:rgba(76,5,25,.6)}.dark\:bg-sky-500\/20:is(.dark *){background-color:rgba(14,165,233,.2)}.dark\:bg-sky-950\/60:is(.dark *){background-color:rgba(8,47,73,.6)}.dark\:bg-slate-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.dark\:bg-slate-800\/40:is(.dark *){background-color:rgba(30,41,59,.4)}.dark\:bg-violet-500\/20:is(.dark *){background-color:rgba(139,92,246,.2)}.dark\:bg-white\/95:is(.dark *){background-color:hsla(0,0%,100%,.95)}.dark\:text-amber-400:is(.dark *){--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.dark\:text-brand-400:is(.dark *){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.dark\:text-dark-muted:is(.dark *){--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\:text-dark-text:is(.dark *){--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.dark\:text-emerald-600:is(.dark *){--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity,1))}.dark\:text-sky-400:is(.dark *){--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\:text-slate-900:is(.dark *){--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.dark\:text-violet-400:is(.dark *){--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:placeholder-dark-muted:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.dark\:placeholder-dark-muted:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.dark\:ring-dark-card:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(26 35 59/var(--tw-ring-opacity,1))}.dark\:ring-dark-surface:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(19 27 46/var(--tw-ring-opacity,1))}@media (hover:hover) and (pointer:fine){.dark\:hover\:bg-\[\#1a263e\]:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(26 38 62/var(--tw-bg-opacity,1))}.dark\:hover\:bg-\[\#1e2a44\]:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 42 68/var(--tw-bg-opacity,1))}.dark\:hover\:bg-dark-card:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(26 35 59/var(--tw-bg-opacity,1))}.dark\:hover\:bg-dark-surface:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(19 27 46/var(--tw-bg-opacity,1))}.dark\:hover\:bg-rose-950\/20:hover:is(.dark *){background-color:rgba(76,5,25,.2)}.dark\:hover\:bg-slate-800\/60:hover:is(.dark *){background-color:rgba(30,41,59,.6)}.dark\:hover\:text-brand-400:hover:is(.dark *){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.dark\:hover\:text-dark-text:hover:is(.dark *){--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.group:hover .dark\:group-hover\:text-brand-400:is(.dark *){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}}@media (min-width:640px){.sm\:max-w-\[75\%\]{max-width:75%}.sm\:max-w-md{max-width:28rem}.sm\:items-center{align-items:center}.sm\:p-4{padding:1rem}.sm\:pb-8{padding-bottom:2rem}.sm\:pt-8{padding-top:2rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:768px){.md\:static{position:static}.md\:inset-x-auto{left:auto;right:auto}.md\:left-5{left:1.25rem}.md\:left-6{left:1.5rem}.md\:right-5{right:1.25rem}.md\:z-auto{z-index:auto}.md\:hidden{display:none}.md\:w-80{width:20rem}.md\:w-96{width:24rem}.md\:flex-1{flex:1 1 0%}.md\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:p-5{padding:1.25rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:1024px){.lg\:w-96{width:24rem}}.ml-auto{margin-left:auto}.msg-bubble,.msg-bubble-me{border:1px solid rgba(0,0,0,.055)}.dark .msg-bubble,.dark .msg-bubble-me{border:1px solid hsla(0,0%,100%,.065)}.bg-slate-900\/95{background-color:rgba(15,23,42,.95)}.border-slate-900\/5{border-color:rgba(15,23,42,.05)}@media (min-width:640px){.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}.msg-bubble-me{background-color:#dadef8;color:#0f172a}.dark .msg-bubble-me{background-color:#2e326f;color:#f8fafc}@media (pointer:coarse){@supports (-webkit-touch-callout:none){input:not([type=checkbox]):not([type=radio]):not(.otp-box),select,textarea{font-size:16px!important}}}
/* ── حباب رسانه (عکس/ویدیو) ──
   نسبت طبیعی تصویر حفظ می‌شود (cover فقط برای ویدیو که قاب ثابت دارد). */
/* ── حباب رسانه ──
   حباب به اندازهٔ خودِ عکس است تا دو طرف عکس‌های افقی خالی نماند.
   از !important استفاده شده چون کلاس‌های Tailwind قدیمی (w-full،
   object-cover، max-h-72) که به عنصر داده شده‌اند specificity بالاتری
   دارند و عکس را می‌کشیدند/می‌بریدند. */
#messagesContainer [data-media-type] {
  width: fit-content !important;
  max-width: min(72vw, 20rem) !important;
  max-height: 22rem;
  display: block;
}
#messagesContainer [data-media-type] img {
  display: block !important;
  width: auto !important;
  height: auto !important;
  max-width: 100% !important;
  max-height: 22rem !important;
  object-fit: contain !important;
  border-radius: 14px;
}
#messagesContainer [data-media-type] video {
  display: block; width: 100%; height: auto; max-height: 22rem;
  object-fit: contain;
}
/* ── اموجی تنها: بزرگ‌تر ── */
#messagesContainer p.adapter-emoji-1{font-size:2.5rem;line-height:1.15}
#messagesContainer p.adapter-emoji-2{font-size:1.9rem;line-height:1.2}
#messagesContainer p.adapter-emoji-3{font-size:1.5rem;line-height:1.3}

/* ── پیکر ایموجی (تب‌دار، آرت Noto) ── */
#emojiSheet{position:fixed;inset:0;z-index:60}
#emojiSheet.ep-hidden{display:none}
.ep-backdrop{position:absolute;inset:0;background:transparent}
.ep-panel{position:absolute;left:8px;right:8px;bottom:calc(72px + var(--sab));max-height:46dvh;display:flex;flex-direction:column;background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:18px;overflow:hidden;animation:epUp .18s cubic-bezier(.16,1,.3,1)}
.dark .ep-panel{background:#1a233b;border-color:rgba(255,255,255,.07)}
@keyframes epUp{from{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}
.ep-tabs{display:flex;gap:2px;padding:6px;position:sticky;top:0;z-index:3;background:#fff;border-bottom:1px solid rgba(0,0,0,.05)}
.dark .ep-tabs{background:#1a233b;border-color:rgba(255,255,255,.06)}
.ep-tab{flex:1 1 0;min-width:0;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:17px;line-height:1;background:transparent;opacity:.55;transition:background .15s,opacity .15s}
.ep-tab:hover{background:rgba(0,0,0,.04);opacity:1}
.dark .ep-tab:hover{background:rgba(255,255,255,.06)}
.ep-tab-on{background:rgba(99,102,241,.12);opacity:1}
.ep-searchwrap{display:flex;align-items:center;gap:8px;margin:8px 10px 4px;padding:0 10px;height:34px;border-radius:10px;background:rgba(0,0,0,.035)}
.dark .ep-searchwrap{background:rgba(255,255,255,.05)}
.ep-searchwrap i{font-size:14px;opacity:.5}
.ep-search{flex:1;min-width:0;border:0;background:transparent;font-size:12px;color:inherit;outline:none;padding:0}
.ep-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:4px 8px 10px}
.ep-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:2px}
.ep-tile{position:relative;aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-size:23px;line-height:1;border-radius:10px;background:transparent;transition:background .12s,transform .12s}
.ep-tile:hover{background:rgba(0,0,0,.045)}
.dark .ep-tile:hover{background:rgba(255,255,255,.06)}
.ep-tile:active{transform:scale(.9)}
.ep-art{position:absolute;inset:2px;width:calc(100% - 4px);height:calc(100% - 4px);object-fit:contain}
.ep-anim{position:absolute;inset:2px}
.ep-tile-art{color:transparent}
.ep-empty{padding:26px 12px;text-align:center;font-size:12px;opacity:.55}
@media (min-width:768px){.ep-panel{left:0;right:0;max-width:400px;margin:0 auto;max-height:420px}}
.adapter-emoji-art{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none;z-index:1}
.adapter-emoji-art-on{color:transparent!important}
.adapter-emoji-anim{position:absolute;inset:0;pointer-events:none;z-index:2}
.adapter-emoji-art-on .adapter-emoji-art{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}

/* نشانگر آنلاین (اندازه و رینگ هم‌رنگ کارت) */
.adapter-online-dot{position:absolute;bottom:1px;left:1px;width:20px;height:20px;border-radius:999px;background:#10b981;box-shadow:0 0 0 3px #eef2f7}
.dark .adapter-online-dot{box-shadow:0 0 0 3px #1a233b}
.adapter-live-dot{width:6px;height:6px;border-radius:999px;background:#10b981;display:inline-block}

/* استروک کارت اول تنظیمات = همان خط مویی باکس‌های منو */
#tabSettings .adapter-profile-card{border:1px solid rgba(0,0,0,.055)}
.dark #tabSettings .adapter-profile-card{border:1px solid hsla(0,0%,100%,.065)}


/* نشانگر تایپینگ تکراری (وضعیت در هدر نمایش داده می‌شود) */
#typingIndicator{display:none!important}

/* هم‌ترازی نوار نوشتن و نوار ناوبری پایین (ارتفاع و پدینگ یکسان) */
:root{--bottom-bar-h:64px}
.composer-footer{min-height:calc(var(--bottom-bar-h) + var(--sab))!important;padding-top:6.5px!important;padding-bottom:calc(6.5px + var(--sab))!important}
.footer-standard{height:calc(var(--bottom-bar-h) + var(--sab))!important;min-height:calc(var(--bottom-bar-h) + var(--sab))!important;max-height:calc(var(--bottom-bar-h) + var(--sab))!important;padding-top:8px!important;padding-bottom:calc(8px + var(--sab))!important}

/* هم‌ترازی افقی دو نوار پایین: پدینگ افقی یکسان (۱۲px در همهٔ اندازه‌ها) */
.composer-footer, .footer-standard{padding-left:12px!important;padding-right:12px!important}

/* ── کلاس‌های مکمل (بازرسی خودکار: scripts/check-ui-classes.py) ── */
.border-t{border-top-width:1px;border-top-style:solid}
.flex-wrap{flex-wrap:wrap}
.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.mb-1\.5{margin-bottom:.375rem}
.mb-2\.5{margin-bottom:.625rem}
.mb-3{margin-bottom:.75rem}
.mt-3{margin-top:.75rem}
.pb-0\.5{padding-bottom:.125rem}
.pb-1{padding-bottom:.25rem}
.pt-0{padding-top:0}
.py-10{padding-top:2.5rem;padding-bottom:2.5rem}
.py-\[2px\]{padding-top:2px;padding-bottom:2px}
.shadow-lg{box-shadow:0 10px 15px -3px rgba(2,6,23,.1),0 4px 6px -4px rgba(2,6,23,.1)}.shadow-brand-600\/20{box-shadow:0 10px 15px -3px rgba(79,70,229,.2),0 4px 6px -4px rgba(79,70,229,.15)}.shadow-subtle{box-shadow:0 1px 2px rgba(2,6,23,.06),0 1px 3px rgba(2,6,23,.04)}
.translate-x-1\/2{transform:translateX(50%)}
.translate-y-10{transform:translateY(2.5rem)}
.bg-slate-200\/50{background-color:rgba(226,232,240,.5)}
.bg-slate-500\/10{background-color:rgba(100,116,139,.1)}
/* کاشی‌های ایموجی خارج از دید، چیدمان ارزان‌تری داشته باشند */
#emojiSheet .ep-grid > *{content-visibility:auto;contain-intrinsic-size:44px 44px}

/* ورود به گفتگو: پیام‌های موجود بی‌انیمیشن نمایش داده شوند تا لیست «تکون» نخورد */
#messagesContainer.no-entry-anim .fade-in{animation:none!important;opacity:1!important;transform:none!important}

/* عرض ثابت حذف شد: عکس‌های افقی دو طرف خالی می‌ماندند. */

/* ── سواپ نرم فونت (جایگزین رفتار پیش‌فرض مرورگر) ──
   با font-display:block مرورگر وسط رندر فونت را عوض نمی‌کند؛
   اما اگر فونت بیشتر از ~۳ ثانیه نیاید، مرورگر جانشین را نشان می‌دهد.
   برای حذف پرش، جانشین با size-adjust هم‌عرض اصلی تنظیم شده است. */
@font-face{font-family:IRANYekanXFallback;src:local("Tahoma"),local("Segoe UI"),local("Vazirmatn"),local("IRANSans");size-adjust:100%}
/* تا آماده‌شدن فونت اصلی، از جانشین هم‌عرض استفاده کن؛ بعد از آن فونت اصلی */
html:not(.fonts-ready) body,html:not(.fonts-ready) .app-body{font-family:IRANYekanXFallback,IRANYekanX,system-ui,-apple-system,Segoe UI,Roboto,Tahoma,sans-serif}

/* ── پرش ورود به گفتگو ──
   وقتی اسکرول‌بار ظاهر می‌شد، عرض محتوا ۴px کم می‌شد: ارسالی‌ها به راست
   و دریافتی‌ها پایین می‌رفتند. فضای نوار همیشه رزرو می‌شود تا عرض ثابت بماند. */
#messagesContainer{scrollbar-gutter:stable}
@supports not (scrollbar-gutter: stable){
  #messagesContainer{overflow-y:scroll}
}
#messagesContainer::-webkit-scrollbar{width:4px;height:4px}

/* قفل اسکرول پس‌زمینه وقتی مودالی باز است (بدون جابه‌جایی چیدمان) */
body.modal-open .overflow-y-auto{overflow-y:hidden}
body.modal-open #messagesContainer{pointer-events:none}

@keyframes spin{to{transform:rotate(360deg)}}

@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}

/* مودال تأیید باید از همهٔ لایه‌ها بالاتر باشد: صفحهٔ پنل مدیریت z-index 61 می‌گیرد و توست‌ها 99999 هستند. بدون این قاعده، پنجرهٔ «حذف کاربر؟» پشت پنل مدیریت می‌افتاد و دکمه بی‌اثر به‌نظر می‌رسید. */
#confirmModal{z-index:90}

/* کادرهای جستجو روی صفحه‌های لمسی هم ۱۴px می‌مانند.
   قاعدهٔ عمومی `input{font-size:14px/16px!important}` برای جلوگیری از زوم
   خودکار iOS گذاشته شده، ولی کادر جستجو را هم به ۱۶px می‌برد و به‌نظر
   «تغییر نکرده» می‌آمد. انتخابگر ID اختصاصیت بیشتری دارد و برنده می‌شود. */
@media (pointer:coarse) {
  #searchInput, #contactsSearchInput, #inChatSearchInput, #adminUserSearch { font-size: 13px !important; }
}

/* پس‌زمینهٔ ثابت واقعی: یک لایهٔ مجزا زیر پیام‌ها که هرگز اسکرول نمی‌شود.
   background-attachment: fixed روی عنصرِ overflow-auto در iOS Safari کار
   نمی‌کند، پس الگو را از خودِ ظرف اسکرول بیرون می‌آوریم. */
/* ── پس‌زمینهٔ ناحیهٔ گفتگو ──
   #chatBgLayer داخل #chatPanel است و position:absolute دارد تا دقیقاً
   هم‌اندازهٔ پنل گفتگو باشد (نه کل viewport با عرض موبایل).
   خودِ #chatPanel اسکرول نمی‌شود — فقط #messagesContainer — پس این لایه
   با اسکرول پیام‌ها حرکت نمی‌کند و روی همهٔ مرورگرها یک رفتار دارد. */
/* موبایل: #chatPanel خودش fixed است و لایه درونش با inset:0 پر می‌کند.
   دسکتاپ: پنل static است؛ برای مرجع‌شدن absolute، فقط همان‌جا relative
   می‌شود (هرگز در موبایل، وگرنه اسلاید می‌شکند). */
@media (min-width: 768px) {
  #chatPanel { position: relative; }
}
#chatBgLayer {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-color: #e8eef7;
  background-image:
    radial-gradient(rgba(71, 85, 105, 0.153) 1.2px, transparent 1.2px),
    linear-gradient(180deg, #eef3fa 0%, #dde7f3 100%);
  background-size: 15px 15px, 100% 100%;
  background-repeat: repeat, no-repeat;
  background-attachment: local, local;
}
.dark #chatBgLayer {
  background-color: #080c14;
  background-image:
    radial-gradient(rgba(148, 163, 184, 0.108) 1.2px, transparent 1.2px),
    linear-gradient(180deg, #090d16 0%, #16233a 100%);
}
/* هدر، ناحیهٔ پیام‌ها و فوتر بالای لایه بمانند */
#chatPanel > header,
#chatPanel > #messagesContainer,
#chatPanel > footer { position: relative; z-index: 1; }

/* خودِ ناحیهٔ گفتگو شفاف تا لایه دیده شود */
.chat-surface { background-color: transparent; background-image: none; }
.dark .chat-surface { background-color: transparent; background-image: none; }

/* ایموجی آرت داخل پیش‌نمایش فهرست گفتگوها — هم‌اندازهٔ متن و هم‌تراز آن */
.adapter-emoji-inline {
  width: 1.05em;
  height: 1.05em;
  display: inline-block;
  vertical-align: -0.16em;
  margin: 0 1px;
  object-fit: contain;
}

/* ── یکدستی فونت ورودی‌ها ──
   هر متنی که در کادر جستجو/متن نوشته می‌شود، همان اندازهٔ سرچ‌باکس (۱۳px).
   انتخابگر با سه :not اختصاصیت کافی دارد تا بر کلاس‌های text-[Npx] درون‌خطی،
   و بر قاعدهٔ لمسی ۱۴/۱۶px، برنده شود. otp-box و چک‌باکس‌ها مستثنا هستند. */
input:not([type=checkbox]):not([type=radio]):not(.otp-box):not([type=hidden]),
textarea,
select {
  font-size: 13px !important;
}
/* ۱۶px فقط برای ورودی‌هایی که در iOS زوم ایجاد می‌کنند لازم بود؛ حالا با
   ۱۳px یکدست شده و زوم با viewport مدیریت می‌شود. */
@media (pointer: coarse) {
  input:not([type=checkbox]):not([type=radio]):not(.otp-box):not([type=hidden]),
  textarea,
  select {
    font-size: 13px !important;
  }
  #searchInput, #contactsSearchInput, #inChatSearchInput, #adminUserSearch {
    font-size: 13px !important;
  }
}

/* ── چک‌باکس سفارشی ──
   ظاهر بومی مرورگر کنار گذاشته می‌شود و یک مربع گرد با تیک سفید می‌سازیم.
   رنگ فعال همان brand، و در تم تاریک کنتراست حفظ می‌شود. */
.check-field {
  -webkit-appearance: none;
  appearance: none;
  width: 22px;
  height: 22px;
  flex: 0 0 auto;
  border-radius: 7px;
  border: 1.5px solid rgb(148 163 184 / .55);
  background-color: #fff;
  position: relative;
  cursor: pointer;
  transition: background-color .16s ease, border-color .16s ease, transform .1s ease;
  vertical-align: middle;
}
.dark .check-field { background-color: #131b2e; border-color: rgb(148 163 184 / .38); }
.check-field:hover { border-color: rgb(79 70 229 / .65); }
.check-field:active { transform: scale(.93); }
.check-field:checked,
.check-field:indeterminate {
  background-color: #4f46e5;
  border-color: #4f46e5;
}
/* تیک با ماسک SVG تا در هر تم و اندازه یکدست باشد */
.check-field:checked::after {
  content: "";
  position: absolute;
  inset: 0;
  background-color: #fff;
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='none' stroke='black' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round' d='M5 12.5l4.5 4.5L19 7.5'/></svg>") center / 15px 15px no-repeat;
  mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='none' stroke='black' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round' d='M5 12.5l4.5 4.5L19 7.5'/></svg>") center / 15px 15px no-repeat;
}
.check-field:focus-visible {
  outline: 2px solid rgb(79 70 229 / .5);
  outline-offset: 2px;
}
.check-field:disabled { opacity: .45; cursor: not-allowed; }

.bg-amber-500{background-color:#f59e0b}
.bg-amber-500\/15{background-color:rgb(245 158 11/.15)}
.mb-6{margin-bottom:1.5rem}
.mt-6{margin-top:1.5rem}
.py-8{padding-top:2rem;padding-bottom:2rem}
.min-h-full{min-height:100%}
.min-h-\[16px\]{min-height:16px}
/* ── اصلاح جهت اسلاید در RTL ──
   Tailwind `translate-x-full` را با +100% می‌سازد که در RTL یعنی «به راست»
   و پنل گفتگو داخل صفحه دیده می‌شد (و حالت باز هم بیرون می‌رفت).
   در RTL بسته باید -100% باشد.
   نکته: از html[dir="rtl"] استفاده می‌کنیم چون مقدار --tw-translate-x
   روی خود کلاس ست می‌شود و override مستقیم کافی نیست. */
/* ── جهت اسلاید در RTL ──
   پنل گفتگو باید از «راست» وارد شود. حالت بسته = بیرون از سمت راست
   (+100%)، حالت باز = صفر. علامت منفی آن را به چپ می‌برد و از سمت
   اشتباه می‌آمد. */
html[dir="rtl"] .translate-x-full { --tw-translate-x: 100%; }
html[dir="rtl"] .translate-x-0 { --tw-translate-x: 0px; }

.logo-mark{border-radius:30%}

/* ── لایت‌باکس تمام‌صفحه ──
   bg-black در CSS کامپایل‌شده نبود؛ پس پس‌زمینه مودال شفاف می‌ماند و
   گفتگو از پشتش «بوکه» دیده می‌شد. */
#mediaLightboxModal {
  background-color: #000 !important;
  overscroll-behavior: contain;
}
#mediaLightboxModal #lightboxContent { position: relative; background: #000; }
#mediaLightboxModal #lbImage { user-select: none; -webkit-user-drag: none; }

/* اگر عکس از کادر کوچک‌تر است، همان‌جا در مرکز بماند (بدون کشیدگی) */
#mediaLightboxModal img { object-fit: contain; }

/* چرخش نشانگر پردازش آپلود روی حباب */
@keyframes adapterSpin { to { transform: rotate(360deg); } }

/* ── لودینگ آغازین ──
   تا اولین bootstrap و رندر فهرست، صفحهٔ خالی/سفید دیده می‌شد.
   این لایه با لوگوی برند می‌ماند و با محو شدن کنار می‌رود. */
#appSplash {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  background: #e8eef7;
  transition: opacity .26s ease, visibility .26s ease;
}
html.dark #appSplash { background: #080c14; }
#appSplash.is-hidden { opacity: 0; visibility: hidden; pointer-events: none; }
/* اسپلش هرگز لمس/تایپ را نمی‌بلعد؛ فقط تصویری است روی صفحه. */
#appSplash { pointer-events: none; }
#appSplash img {
  width: 76px; height: 76px;
  border-radius: 30%;
  object-fit: cover;
  box-shadow: 0 10px 28px -8px rgba(79, 70, 229, .45);
  animation: splashPulse 1.8s ease-in-out infinite;
}
.app-splash-name {
  font-size: 15px; font-weight: 900; letter-spacing: .02em;
  color: #4f46e5;
}
html.dark .app-splash-name { color: #818cf8; }
.app-splash-dots { display: flex; gap: 5px; }
.app-splash-dots i {
  width: 6px; height: 6px; border-radius: 50%;
  background: currentColor; color: #a5b4fc;
  animation: splashDot 1.1s ease-in-out infinite;
}
.app-splash-dots i:nth-child(2) { animation-delay: .15s; }
.app-splash-dots i:nth-child(3) { animation-delay: .3s; }

@keyframes splashPulse {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.06); }
}
@keyframes splashDot {
  0%, 80%, 100% { opacity: .25; transform: translateY(0); }
  40%           { opacity: 1;   transform: translateY(-3px); }
}
@media (prefers-reduced-motion: reduce) {
  #appSplash img, .app-splash-dots i { animation: none; }
}

/* ── کلاس‌های استفاده‌شده در لایت‌باکس تمام‌صفحه و حباب رسانه ──
   (Tailwind کامپایل‌نشده بود؛ بدون این‌ها پس‌زمینهٔ مودال شفاف می‌ماند) */
.bg-black { background-color: #000; }
.bg-white\/15 { background-color: rgba(255, 255, 255, .15); }
.max-w-\[70\%\] { max-width: 70%; }
.w-auto { width: auto; }

/* ── حذف تأخیر ۳۰۰ms لمس در موبایل ──
   مرورگرهای موبایل پس از هر tap حدود ۳۰۰ms صبر می‌کنند تا مطمئن شوند
   دابل‌تپ (زوم) نیست. این تأخیر باعث می‌شد کلیک روی ردیف گفتگو/مخاطب
   دیر اجرا شود و به‌نظر برسد «انتخاب با تأخیر اعمال می‌شود».
   قاعدهٔ موجود فقط button/a/label را پوشش می‌داد؛ ردیف‌ها div هستند. */
#conversationsContainer > div,
#contactsContainer > div,
.chat-row,
[data-view],
[data-act],
.cursor-pointer {
  touch-action: manipulation;
}

/* ── سقف وزن فونت: حداکثر medium ──
   همهٔ کلاس‌های سنگین‌تر در منبع به font-medium تبدیل شده‌اند؛ این قاعده
   عناصری را می‌گیرد که مرورگر پیش‌فرض بولد می‌کند (th، b، strong،
   headingها) تا هیچ‌جا وزن بالای ۵۰۰ نماند.
   استثنا: .font-bold عمداً آزاد است تا نام مخاطبین/گفتگوها بولد دیده شود. */
th, b, strong, h1, h2, h3, h4, h5, h6,
.font-semibold, .font-extrabold, .font-black {
  font-weight: 500;
}

/* ── رنگ متن: بدون سفید/سیاه مطلق ──
   متن روشن #0f172a (slate-900) از قبل مطلق نبود؛ متن تاریک #f8fafc
   (slate-50) در محیط کم‌نور چشم را می‌زد. هر دو یک پله ملایم شدند:
   روشن → #1e293b (slate-800) · تاریک → #e2e8f0 (slate-200)
   نسبت کنتراست در هر دو حالت بالای ۷:۱ می‌ماند (معیار AAA). */
:root, html:not(.dark) {
  --txt-strong: #1e293b;   /* متن اصلی روشن */
  --txt-muted:  #64748b;   /* متن کم‌رنگ روشن */
}
html.dark {
  --txt-strong: #e2e8f0;   /* متن اصلی تاریک */
  --txt-muted:  #94a3b8;   /* متن کم‌رنگ تاریک */
}
/* نام کامپایل‌شدهٔ Tailwind: dark:text-dark-text → .dark\:text-dark-text */
.text-slate-900 { color: var(--txt-strong); }
.text-dark-text,
.dark\:text-dark-text:is(.dark *),
.dark .dark\:text-dark-text { color: var(--txt-strong); }
/* وزن دستکاری نمی‌شود: نام گفتگوی فعال کلاس text-brand-600 دارد و
   باید همان وزن font-bold خودش را حفظ کند. */

/* سایزهای سفارشی متن */
.text-\[15px\] { font-size: 15px; line-height: 1.45; }
.text-\[14px\] { font-size: 14px; line-height: 1.5; }

/* ── کلاس‌های تازهٔ صفحهٔ حالت نمایش ── */
.max-w-\[85\%\] { max-width: 85%; }
.min-h-\[40px\] { min-height: 40px; }
.text-slate-300 { --tw-text-opacity:1; color: rgb(203 213 225 / var(--tw-text-opacity,1)); }

/* ── مقیاس فونت کاربر ──
   با یک متغیر روی ریشه، کل تایپوگرافی برنامه بزرگ/کوچک می‌شود.
   از calc با ضریب استفاده می‌شود تا نسبت‌ها حفظ شوند و اندازهٔ
   خطوط/پدینگ‌ها ناگهان نپرد (بدون layout shift). */
:root { --font-scale: 1; }
html[data-font-scale="sm"] { --font-scale: .92; }
html[data-font-scale="lg"] { --font-scale: 1.10; }
html[data-font-scale="xl"] { --font-scale: 1.22; }

/* ── مقیاس فونت — پوشش کامل همهٔ سایزهای متن ──
   هر کلاس اندازهٔ صریح با ضریب کاربر بازنویسی می‌شود (با !important
   تا بر Tailwind و قواعد اختصاصی غلبه کند). زمان‌ها (11px) هم
   پیروی می‌کنند تا سلسله‌مراتب حفظ شود. */
html[data-font-scale="sm"] { font-size: 92%; }
html[data-font-scale="lg"] { font-size: 110%; }
html[data-font-scale="xl"] { font-size: 122%; }

html[data-font-scale]:not([data-font-scale="md"]) .text-\[15px\] { font-size: calc(var(--font-scale) * 15px); }
html[data-font-scale]:not([data-font-scale="md"]) .text-\[14px\] { font-size: calc(var(--font-scale) * 14px); }
html[data-font-scale]:not([data-font-scale="md"]) .text-\[13px\] { font-size: calc(var(--font-scale) * 13px); }
html[data-font-scale]:not([data-font-scale="md"]) .text-\[12px\] { font-size: calc(var(--font-scale) * 12px); }
html[data-font-scale]:not([data-font-scale="md"]) .text-\[11px\] { font-size: calc(var(--font-scale) * 11px); }

/* متن پیام و ورودی‌ها — قاعدهٔ !important ورودی‌ها را هم پوشش دهد */
html[data-font-scale]:not([data-font-scale="md"]) #messagesContainer p.selectable-text,
html[data-font-scale]:not([data-font-scale="md"]) #messageInput,
html[data-font-scale]:not([data-font-scale="md"]) #searchInput,
html[data-font-scale]:not([data-font-scale="md"]) #contactsSearchInput,
html[data-font-scale]:not([data-font-scale="md"]) #inChatSearchInput {
  font-size: calc(var(--font-scale) * 13px) !important;
}
html[data-font-scale]:not([data-font-scale="md"]) #chatHeaderName {
  font-size: calc(var(--font-scale) * 14px) !important;
}

/* بدون پس‌زمینهٔ گفتگو */
#messagesContainer.adapter-nobg { background-image: none !important; }

/* ── کلاس‌های تازهٔ صفحهٔ حریم خصوصی ── */
.bg-emerald-500\/15 { background-color: rgba(16,185,129,.15); }
.bg-white\/80 { background-color: rgba(255,255,255,.8); }
.min-h-\[36px\] { min-height: 36px; }
.min-h-\[44px\] { min-height: 44px; }
.text-emerald-700 { --tw-text-opacity:1; color: rgb(4 120 87 / var(--tw-text-opacity,1)); }
.text-emerald-700\/70 { color: rgba(4,120,87,.7); }

/* ── کلاس‌های تازهٔ صفحهٔ نمایه ── */
.h-24 { height: 6rem; }
.w-24 { width: 6rem; }
.min-h-\[48px\] { min-height: 48px; }
.text-\[16px\] { font-size: 16px; line-height: 1.4; }
.text-left { text-align: left; }
.ring-4 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }

/* ── فیلدهای صفحهٔ نمایه ── */
.h-11 { height: 2.75rem; }
.ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }
.focus\:border-brand-500:focus { border-color: rgb(99 102 241); }
.focus\:ring-brand-500\/20:focus { box-shadow: 0 0 0 3px rgba(99,102,241,.2); }

.h-16 { height: 4rem; }
.w-16 { width: 4rem; }

/* ── صفحهٔ اطلاعات کاربر/گروه ── */
.divide-y > :not([hidden]) ~ :not([hidden]) { border-top-width: 1px; }
.divide-slate-200\/50 > :not([hidden]) ~ :not([hidden]) { border-color: rgba(226,232,240,.5); }
html.dark .divide-white\/5 > :not([hidden]) ~ :not([hidden]) { border-color: rgba(255,255,255,.05); }
.h-3\.5 { height: .875rem; }
.w-3\.5 { width: .875rem; }
.max-h-\[85dvh\] { max-height: 85dvh; }
.shadow-xl { box-shadow: 0 20px 25px -5px rgba(0,0,0,.15), 0 8px 10px -6px rgba(0,0,0,.1); }

/* ── ردیف لینک در صفحهٔ اطلاعات ── */
.py-\[7px\] { padding-top: 7px; padding-bottom: 7px; }

/* ── ردیف‌های اطلاعات در صفحهٔ پروفایل/گروه ── */
.py-\[9px\] { padding-top: 9px; padding-bottom: 9px; }
.max-w-\[60\%\] { max-width: 60%; }

/* ── وزن «medium» یک پله سنگین‌تر ──
   قبلاً ۵۰۰ روی فایل Medium رندر می‌شد و از ۴۰۰ فقط کمی متفاوت بود.
   حالا ۶۰۰ می‌شود تا از فایل DemiBold استفاده شود و تفکیک نام‌ها/
   عنوان‌ها از متن بدنه محسوس‌تر باشد.
   همهٔ عناصری که در منبع font-medium دارند از این قاعده پیروی می‌کنند. */
.font-medium { font-weight: 600; }
/* عناصری که با قاعدهٔ سقف ۵۰۰ شده بودند هم یک پله بالاتر */
th, b, strong, h1, h2, h3, h4, h5, h6 { font-weight: 600; }

/* ── محو نرم هنگام ورود به گفتگو ──
   به‌جای visibility:hidden (قطع و وصل ناگهانی که چشمک می‌زد) از
   opacity استفاده شده و این transition محو/ظهور را در ۲۰۰ms نرم
   می‌کند، هماهنگ با سرعت اسلاید پنل در PWA. */
#messagesContainer { transition: opacity 0.2s ease; }

/* ══ فونت وزیرمتن (Vazirmatn UI) ══
   گزینهٔ دوم فونت در «تنظیمات → ظاهر». نسخهٔ UI برای رابط کاربری
   بهینه شده (ارتفاع x-height مناسب متن‌های ریز).
   ۴۰۰ و ۶۰۰ هم‌اندازهٔ دو وزن استفاده‌شده در برنامه. */
@font-face{font-family:Vazirmatn;src:url(/assets/fonts/vazirmatn/Vazirmatn-UI-Regular.woff2) format("woff2");
  font-weight:100 501;font-style:normal;font-display:swap}
@font-face{font-family:Vazirmatn;src:url(/assets/fonts/vazirmatn/Vazirmatn-UI-SemiBold.woff2) format("woff2");
  font-weight:502 900;font-style:normal;font-display:swap}

/* ── تعویض فونت کاربر ──
   با data-font-family روی <html> کل برنامه فونتش را عوض می‌کند.
   پیش‌فرض (نبود صفت یا iranyekan) همان IRANYekanX است. */
html[data-font-family="vazirmatn"] body,
html[data-font-family="vazirmatn"] .app-body,
html[data-font-family="vazirmatn"] button,
html[data-font-family="vazirmatn"] input,
html[data-font-family="vazirmatn"] textarea,
html[data-font-family="vazirmatn"] select,
html[data-font-family="vazirmatn"] .font-sans {
  font-family: Vazirmatn, system-ui, -apple-system, "Segoe UI", Roboto, Tahoma, sans-serif !important;
}
/* ایرادِ فونت: زیر IRANYekanX، اعداد و کدها با فونت مونو نمایش داده
   می‌شوند؛ با وزیر همان حالت حفظ می‌شود تا کد توکن‌ها خوانا بماند. */

/* دکمهٔ انتخاب فونت — ناحیهٔ لمس بزرگ */

.min-h-\[52px\] { min-height: 52px; }

/* ── هایلایت گفتگوی انتخاب‌شده بی‌انیمیشن ──
   ردیف‌های فهرست transition-all دارند (۱۵۰ms) و تغییر background-color
   را هم انیمیت می‌کنند؛ در نتیجه رنگ انتخاب با تأخیر محسوس می‌رسید.
   این‌جا فقط برای ردیف فعال transition رنگ خاموش می‌شود. */
#conversationsContainer > div.adapter-row-active {
  transition-property: transform, opacity !important;
}

/* ── هایلایت گفتگوی فعال — بی‌انیمیشن ──
   کلاس روی ردیف نوشته می‌شود، ولی transition رنگ خاموش است تا رنگ
   همان فریم بنشیند و هیچ «محو شدن از رنگ قبلی» دیده نشود. */
#conversationsContainer > .adapter-row-active { transition-property: transform, opacity !important; }

/* ── اسپینر لودینگ (دکمهٔ ورود) ──
   کلاس animate-spin در باندل Tailwind نیست؛ اینجا دستی تعریف شده. */
.spinner-ring {
  width: 18px; height: 18px;
  border-radius: 50%;
  border: 2px solid rgba(255, 255, 255, .35);
  border-top-color: #fff;
  animation: spinRing .7s linear infinite;
  flex-shrink: 0;
}
@keyframes spinRing { to { transform: rotate(360deg); } }


/* ── آیکون‌هایی که در فونت subset نبودند و در رابط استفاده می‌شوند ── */
.ri-checkbox-circle-line::before, .ri-circle-line::before, .ri-share-forward-line::before, .ri-upload-cloud-2-line::before {
  content: "";
  display: inline-block;
  width: 1em; height: 1em;
  vertical-align: -0.125em;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
}
.ri-checkbox-circle-line::before {
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><circle cx='12' cy='12' r='9'/><path d='M8.5 12.5l2.5 2.5 4.5-5'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><circle cx='12' cy='12' r='9'/><path d='M8.5 12.5l2.5 2.5 4.5-5'/></svg>");
}
.ri-circle-line::before {
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><circle cx='12' cy='12' r='9'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><circle cx='12' cy='12' r='9'/></svg>");
}
.ri-share-forward-line::before {
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M14 4l7 7-7 7v-4c-6 0-9 2-11 6 1-7 4-11 11-12V4z'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M14 4l7 7-7 7v-4c-6 0-9 2-11 6 1-7 4-11 11-12V4z'/></svg>");
}
.ri-upload-cloud-2-line::before {
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M7 18a4 4 0 01-.9-7.9 6 6 0 0111.6-1.6A4.5 4.5 0 0118 18'/><path d='M12 12v8M9 15l3-3 3 3'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M7 18a4 4 0 01-.9-7.9 6 6 0 0111.6-1.6A4.5 4.5 0 0118 18'/><path d='M12 12v8M9 15l3-3 3 3'/></svg>");
}

/* کرسر بزرگ‌نمایی برای عکس‌های قابل کلیک (آواتار پروفایل) */
.cursor-zoom-in { cursor: zoom-in; }

/* ── دسترسی با کیبورد: فوکوس باید دیده شود ──
   پیش از این فقط ۷ عنصر کلاس focus داشتند؛ کاربر کیبورد نمی‌فهمید کجاست.
   از :focus-visible استفاده می‌شود تا لمس/ماوس حلقهٔ اضافه نبیند
   (هیچ هزینهٔ بصری برای کاربر موبایل = بدون تداخل با طراحی). */
:where(button, a, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid rgb(99 102 241 / .85);
  outline-offset: 2px;
  border-radius: 0.75rem;
}
html.dark :where(button, a, input, select, textarea, [tabindex]):focus-visible {
  outline-color: rgb(129 140 248 / .95);
}
/* حذف حلقهٔ پیش‌فرض فقط وقتی focus-visible پشتیبانی می‌شود */
@supports selector(:focus-visible) {
  :where(button, a, [tabindex]):focus:not(:focus-visible) { outline: none; }
}

/* آیکون فلش پایین (دکمهٔ پرش به آخر) — در فونت subset نبود */
.ri-arrow-down-line::before {
  content: "";
  display: inline-block;
  width: 1em; height: 1em;
  vertical-align: -0.125em;
  background-color: currentColor;
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M12 5v14'/><path d='M6 13l6 6 6-6'/></svg>"); mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M12 5v14'/><path d='M6 13l6 6 6-6'/></svg>");
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
}

/* ── اسکلتون بارگذاری ──
   پس‌زمینهٔ ثابت با پالس نرم؛ با transform/opacity کار نمی‌کند تا
   رستر گران نداشته باشد (فقط opacity انیمیت می‌شود). */
.skeleton-box {
  background: rgb(226 232 240 / .75);
  animation: skeletonPulse 1.2s ease-in-out infinite;
}
html.dark .skeleton-box { background: rgb(30 41 59 / .8); }
@keyframes skeletonPulse { 0%,100% { opacity: .55 } 50% { opacity: 1 } }
@media (prefers-reduced-motion: reduce) { .skeleton-box { animation: none } }
