/* ============================================================
   tailwind-utils.css — 本地Tailwind工具类替代CDN
   覆盖首页、聊天页、管理后台等所有页面的常用类
   ============================================================ */

/* === Display === */
.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}
.block{display:block}.inline-block{display:inline-block}.inline{display:inline}
.hidden{display:none}

/* === Flex === */
.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}
.items-start{align-items:flex-start}.items-center{align-items:center}.items-end{align-items:flex-end}
.justify-start{justify-content:flex-start}.justify-center{justify-content:center}
.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-end{justify-content:flex-end}
.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}
.gap-0\.5{gap:0.125rem}.gap-1{gap:0.25rem}.gap-1\.5{gap:0.375rem}.gap-2{gap:0.5rem}.gap-3{gap:0.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}
.space-y-3>*+*{margin-top:0.75rem}

/* === Grid === */
.grid-cols-1{grid-template-columns:repeat(1,1fr)}.grid-cols-2{grid-template-columns:repeat(2,1fr)}
.col-span-full{grid-column:1/-1}

/* === Width === */
.w-2\.5{width:0.625rem}.w-3{width:0.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}
.w-9{width:2.25rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}
.w-full{width:100%}.w-\[90\%\]{width:90%}.w-2\/3{width:66.666%}.w-4\/5{width:80%}
.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}

/* === Height === */
.h-2\.5{height:0.625rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}
.h-9{height:2.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}
.min-h-screen{min-height:100vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[40vh\]{max-height:40vh}
.h-full{height:100%}

/* === Padding === */
.p-0{padding:0}.p-3{padding:0.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}
.px-1{padding-left:0.25rem;padding-right:0.25rem}.px-2{padding-left:0.5rem;padding-right:0.5rem}
.px-3{padding-left:0.75rem;padding-right:0.75rem}.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}
.px-8{padding-left:2rem;padding-right:2rem}
.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-1\.5{padding-top:0.375rem;padding-bottom:0.375rem}
.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.py-2\.5{padding-top:0.625rem;padding-bottom:0.625rem}
.py-3{padding-top:0.75rem;padding-bottom:0.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}
.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}
.py-20{padding-top:5rem;padding-bottom:5rem}
.pt-4{padding-top:1rem}.pb-1{padding-bottom:0.25rem}.pb-24{padding-bottom:6rem}

/* === Margin === */
.m-0{margin:0}.mx-3{margin-left:0.75rem;margin-right:0.75rem}.mx-auto{margin-left:auto;margin-right:auto}
.mt-0{margin-top:0}.mt-1{margin-top:0.25rem}.mt-2{margin-top:0.5rem}.mt-3{margin-top:0.75rem}
.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}
.mt-12{margin-top:3rem}.mt-16{margin-top:4rem}.-mt-5{margin-top:-1.25rem}.-mt-14{margin-top:-3.5rem}
.mb-0{margin-bottom:0}.mb-1{margin-bottom:0.25rem}.mb-2{margin-bottom:0.5rem}
.mb-3{margin-bottom:0.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}
.mb-8{margin-bottom:2rem}.mb-12{margin-bottom:3rem}.mb-16{margin-bottom:4rem}
.ml-1{margin-left:0.25rem}.ml-3{margin-left:0.75rem}.ml-auto{margin-left:auto}
.mr-2{margin-right:0.5rem}.mr-3{margin-right:0.75rem}

/* === Typography === */
.text-xs{font-size:0.75rem;line-height:1rem}.text-sm{font-size:0.875rem;line-height:1.25rem}
.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}
.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}
.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}
.text-\[10px\]{font-size:10px}
.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-medium{font-weight:500}.font-normal{font-weight:400}
.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}
.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}
.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.break-all{word-break:break-all}
.no-underline{text-decoration:none}

/* === Text Colors === */
.text-white{color:#fff}.text-black{color:#000}
.text-gray-300{color:#d1d5db}.text-gray-400{color:#9ca3af}.text-gray-500{color:#6b7280}
.text-purple-300{color:#c4b5fd}.text-purple-400{color:#a78bfa}.text-purple-500{color:#8b5cf6}
.text-pink-400{color:#f472b6}.text-pink-500{color:#ec4899}
.text-yellow-400{color:#facc15}.text-yellow-500{color:#eab308}
.text-red-400{color:#f87171}.text-red-500{color:#ef4444}
.text-green-400{color:#4ade80}.text-green-500{color:#22c55e}.text-blue-400{color:#60a5fa}
.placeholder-gray-400::placeholder{color:#9ca3af}.placeholder-gray-500::placeholder{color:#6b7280}

/* === Backgrounds === */
.bg-transparent{background:transparent}
.bg-white{background:#fff}.bg-black{background:#000}
.bg-white\/5{background:rgba(255,255,255,0.05)}.bg-white\/10{background:rgba(255,255,255,0.1)}
.bg-white\/20{background:rgba(255,255,255,0.2)}
.bg-purple-500{background:#8b5cf6}.bg-purple-500\/5{background:rgba(139,92,246,0.05)}
.bg-purple-500\/20{background:rgba(139,92,246,0.2)}.bg-purple-500\/30{background:rgba(139,92,246,0.3)}
.bg-purple-500\/50{background:rgba(139,92,246,0.5)}
.bg-pink-500{background:#ec4899}.bg-red-500{background:#ef4444}.bg-red-500\/80{background:rgba(239,68,68,0.8)}
.bg-red-500\/20{background:rgba(239,68,68,0.2)}
.bg-yellow-500\/20{background:rgba(234,179,8,0.2)}.bg-yellow-500\/30{background:rgba(234,179,8,0.3)}
.bg-green-500{background:#22c55e}.bg-green-500\/10{background:rgba(34,197,94,0.1)}
.bg-gray-100{background:#f3f4f6}
.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}
.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}
.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}
.from-purple-500{--tw-gradient-from:#8b5cf6;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to,rgba(139,92,246,0))}
.to-pink-500{--tw-gradient-to:#ec4899}

/* === Borders === */
.border{border:1px solid}.border-2{border:2px solid}.border-4{border:4px solid}
.border-0{border:0}.border-none{border:none}
.border-t{border-top:1px solid}.border-b{border-bottom:1px solid}
.border-white\/5{border-color:rgba(255,255,255,0.05)}.border-white\/10{border-color:rgba(255,255,255,0.1)}
.border-white\/20{border-color:rgba(255,255,255,0.2)}
.border-purple-400\/50{border-color:rgba(168,85,247,0.5)}
.border-purple-500\/20{border-color:rgba(139,92,246,0.2)}.border-purple-500\/30{border-color:rgba(139,92,246,0.3)}
.border-red-500\/30{border-color:rgba(239,68,68,0.3)}
.border-t-purple-400{border-top-color:#a78bfa}
.border-purple-400{border-color:#a78bfa}
.rounded-sm{border-radius:0.125rem}.rounded{border-radius:0.25rem}.rounded-md{border-radius:0.375rem}
.rounded-lg{border-radius:0.5rem}.rounded-xl{border-radius:0.75rem}.rounded-2xl{border-radius:1rem}
.rounded-full{border-radius:9999px}
.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}

/* === Position & Z-index === */
.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.sticky{position:sticky}
.inset-0{top:0;right:0;bottom:0;left:0}
.top-0{top:0}.top-1{top:0.25rem}.top-4{top:1rem}.top-1\/2{top:50%}
.bottom-0{bottom:0}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1{right:0.25rem}.right-2{right:0.5rem}.right-3{right:0.75rem}
.-translate-x-1\/2{transform:translateX(-50%)}
.z-0{z-index:0}.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-\[300\]{z-index:300}

/* === Overflow === */
.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}
.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}
.overflow-x-hidden{overflow-x:hidden}

/* === Effects === */
.opacity-0{opacity:0}.opacity-50{opacity:0.5}.opacity-75{opacity:0.75}.opacity-100{opacity:1}
.shadow{box-shadow:0 1px 3px rgba(0,0,0,.1),0 1px 2px rgba(0,0,0,.06)}
.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)}
.shadow-\[0_0_20px_rgba\(139\,92\,246\,0\.5\)\]{box-shadow:0 0 20px rgba(139,92,246,0.5)}
.backdrop-blur-sm{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.backdrop-blur{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.backdrop-blur-xl{-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px)}
.backdrop-blur-3xl{-webkit-backdrop-filter:blur(64px);backdrop-filter:blur(64px)}

/* === Transitions === */
.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:.15s}
.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4,0,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(0.4,0,0.2,1);transition-duration:.15s}
.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:.15s}
.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}

/* === Interactions === */
.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}
.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}
.select-none{user-select:none}.resize-none{resize:none}.outline-none{outline:none}

/* === Object Fit === */
.object-cover{object-fit:cover}.object-contain{object-fit:contain}

/* === Animations === */
@keyframes spin{to{transform:rotate(360deg)}}
.animate-spin{animation:spin 1s linear infinite}
@keyframes pulse{50%{opacity:.5}}
.animate-pulse{animation:pulse 2s cubic-bezier(0.4,0,0.6,1) infinite}

/* === Responsive: sm: (≥640px) === */
@media(min-width:640px){
  .sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:hidden{display:none}
  .sm\:text-sm{font-size:0.875rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}
  .sm\:h-\[300px\]{height:300px}
}

/* === Responsive: md: (≥768px) === */
@media(min-width:768px){
  .md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,1fr)}
}

/* === Responsive: lg: (≥1024px) === */
@media(min-width:1024px){
  .lg\:grid-cols-3{grid-template-columns:repeat(3,1fr)}
}

/* === xl: (≥1280px) === */
@media(min-width:1280px){
  .xl\:mx-auto{margin-left:auto;margin-right:auto}.xl\:px-0{padding-left:0;padding-right:0}
}

/* === Hover === */
.hover\:bg-white\/5:hover{background:rgba(255,255,255,0.05)}
.hover\:bg-white\/10:hover{background:rgba(255,255,255,0.1)}
.hover\:bg-purple-500\/10:hover{background:rgba(139,92,246,0.1)}
.hover\:text-white:hover{color:#fff}.hover\:text-purple-400:hover{color:#a78bfa}
.hover\:text-pink-400:hover{color:#f472b6}
.hover\:opacity-80:hover{opacity:0.8}
.hover\:scale-105:hover{transform:scale(1.05)}
.hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)}

/* === Focus === */
.focus-within\:border-purple-400:focus-within{border-color:#a78bfa}
.focus-within\:shadow-\[0_0_15px_rgba\(139\,92\,246\,0\.3\)\]:focus-within{box-shadow:0 0 15px rgba(139,92,246,0.3)}
.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}
.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}
.focus\:ring-purple-500:focus{--tw-ring-color:#8b5cf6}

/* === Misc === */
.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-\[var\(--p-bg\2c \#171426\)\]{--tw-ring-color:var(--p-bg,#171426)}
.scrollbar-none{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-none::-webkit-scrollbar{display:none}
.peer{-peer-checked:}
