@import url('https://cdn.jsdelivr.net/gh/rastikerdar/vazirmatn@v33.003/Vazirmatn-font-face.css'); @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700;800&display=swap'); @import 'tailwindcss'; @font-face { font-family: 'Vazirmatn'; src: url('/fonts/Vazirmatn-Regular.ttf') format('truetype'); font-weight: 400 500; font-style: normal; font-display: swap; } @font-face { font-family: 'Vazirmatn'; src: url('/fonts/Vazirmatn-Bold.ttf') format('truetype'); font-weight: 600 700 800; font-style: normal; font-display: swap; } @custom-variant dark (&:where(.dark, .dark *)); /* ─── Dashboard Design Tokens → shadcn CSS variables (Dark) ─── */ :root { --background: #18191d; --foreground: #ffffff; --card: #22252c; --card-foreground: #ffffff; --popover: #1e2128; --popover-foreground: #ffffff; --primary: #d09460; /* رنگ اصلی برند عقیله (برنز هویت بصری) */ --primary-foreground: #ffffff; --secondary: #2c303b; --secondary-foreground: #ebebeb; --muted: #2c303b; --muted-foreground: #8b8b8b; --accent: #373c49; --accent-foreground: #ffffff; --destructive: #ef4444; --border: rgba(255, 255, 255, 0.12); --input: rgba(255, 255, 255, 0.06); --ring: rgba(208, 148, 96, 0.55); --radius: 14px; /* پالت سایدبار و پنل کناری */ --sidebar: #131417; --sidebar-foreground: #ebebeb; --sidebar-primary: #d09460; --sidebar-primary-foreground: #ffffff; --sidebar-accent: rgba(255, 255, 255, 0.06); --sidebar-accent-foreground: #ffffff; --sidebar-border: rgba(255, 255, 255, 0.07); --sidebar-ring: rgba(208, 148, 96, 0.55); --sidebar-width: 240px; --panel-width: 384px; --red: #f87171; --red-mid: #ef4444; --red-dark: #dc2626; --grey-1: #ebebeb; --grey-2: #bcbcbc; --grey-3: #8b8b8b; --grey-4: #4d4d4d; --border-soft: rgba(255, 255, 255, 0.07); --g-primary: linear-gradient(135deg, #d09460, #a86e3d); } /* ─── Light Mode Tokens ─── */ html.light { --background: #f8fafc; --foreground: #0f172a; --card: #ffffff; --card-foreground: #0f172a; --popover: #ffffff; --popover-foreground: #0f172a; --primary: #d09460; --primary-foreground: #ffffff; --secondary: #f1f5f9; --secondary-foreground: #1e293b; --muted: #f1f5f9; --muted-foreground: #64748b; --accent: #f1f5f9; --accent-foreground: #0f172a; --destructive: #ef4444; --border: rgba(15, 23, 42, 0.12); --input: rgba(15, 23, 42, 0.06); --ring: rgba(208, 148, 96, 0.55); --sidebar: #ffffff; --sidebar-foreground: #1e293b; --sidebar-primary: #d09460; --sidebar-primary-foreground: #ffffff; --sidebar-accent: rgba(15, 23, 42, 0.05); --sidebar-accent-foreground: #0f172a; --sidebar-border: rgba(15, 23, 42, 0.08); --sidebar-ring: rgba(208, 148, 96, 0.55); --grey-1: #0f172a; --grey-2: #334155; --grey-3: #64748b; --grey-4: #94a3b8; --border-soft: rgba(15, 23, 42, 0.08); } @theme inline { --font-sans: 'Inter', 'Vazirmatn', system-ui, -apple-system, sans-serif; --font-mono: 'Inter', 'Vazirmatn', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); --color-red: var(--red); --color-red-mid: var(--red-mid); --color-red-dark: var(--red-dark); --color-grey-1: var(--grey-1); --color-grey-2: var(--grey-2); --color-grey-3: var(--grey-3); --color-grey-4: var(--grey-4); --color-border-soft: var(--border-soft); --radius-sm: 11px; --radius-md: 13px; --radius-lg: 15px; --radius-xl: 19px; } @layer base { *, *::before, *::after { @apply border-border outline-ring/50; } html { direction: rtl; font-family: 'Inter', 'Vazirmatn', system-ui, -apple-system, sans-serif; font-feature-settings: 'tnum' 1, 'cv05' 1; } body { @apply bg-background text-foreground antialiased; font-family: 'Inter', 'Vazirmatn', system-ui, -apple-system, sans-serif; font-size: 14px; font-feature-settings: 'tnum' 1, 'cv05' 1; } table, thead, tbody, tfoot, tr, th, td { font-family: 'Inter', 'Vazirmatn', system-ui, -apple-system, sans-serif !important; } input, button, select, optgroup, textarea, option { font-family: 'Inter', 'Vazirmatn', system-ui, -apple-system, sans-serif !important; } .font-mono { font-family: 'Inter', 'Vazirmatn', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important; } .tabular-nums, table td, table th, [class*="tabular-nums"] { font-variant-numeric: tabular-nums; font-feature-settings: 'tnum' 1, 'cv05' 1; } ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.14); border-radius: 8px; } ::-webkit-scrollbar-track { background: transparent; } /* override autofill background (مرورگر زرد/سفید می‌کند) */ input:-webkit-autofill, input:-webkit-autofill:focus { -webkit-box-shadow: 0 0 0 1000px var(--card) inset !important; -webkit-text-fill-color: var(--foreground) !important; caret-color: var(--foreground); } } @layer utilities { .bg-g-primary { background: var(--g-primary); } .bg-g-ai { background: var(--g-ai); } .bg-g-progress { background: var(--g-progress); } .bg-g-mic { background: var(--g-mic); } .no-scrollbar::-webkit-scrollbar { display: none; } .no-scrollbar { scrollbar-width: none; } } /* avatar gradient fills (person circles) — same palette as mockups */ .av-1 { background: linear-gradient(135deg, #cd4343, #6a1c1c); } .av-2 { background: linear-gradient(135deg, #4e5467, #272b37); } .av-3 { background: linear-gradient(135deg, #9d2121, #3b4050); } .av-4 { background: linear-gradient(135deg, #a71919, #46141a); } .av-5 { background: linear-gradient(135deg, #5b6378, #36363c); } .av-6 { background: linear-gradient(135deg, #862222, #202227); } /* cover gradient fills (cards / track covers) */ .c-1 { background: linear-gradient(150deg, #cd4343, #5a1414); } .c-2 { background: linear-gradient(150deg, #3b4050, #16181d); } .c-3 { background: linear-gradient(150deg, #9d2121, #2c1230); } .c-4 { background: linear-gradient(150deg, #4e5467, #1d2027); } .c-5 { background: linear-gradient(150deg, #862222, #1f0f0f); } .c-6 { background: linear-gradient(150deg, #a71919, #3b4050); } @keyframes slideIn { from { transform: translateX(-24px); opacity: 0.4; } to { transform: translateX(0); opacity: 1; } } @keyframes pop { from { transform: scale(0.96); opacity: 0; } to { transform: scale(1); opacity: 1; } } .anim-slide-in { animation: slideIn 0.22s ease; } .anim-pop { animation: pop 0.18s ease; } /* ─── Sheet (drawer) enter animations — per side، بدون نیاز به پلاگین animate ─── */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes sheetInRight { from { transform: translateX(100%); } to { transform: translateX(0); } } @keyframes sheetInLeft { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes sheetInTop { from { transform: translateY(-100%); } to { transform: translateY(0); } } @keyframes sheetInBottom { from { transform: translateY(100%); } to { transform: translateY(0); } } @keyframes playerUp { from { transform: translateY(100%); opacity: 0.4; } to { transform: translateY(0); opacity: 1; } } .anim-fade { animation: fadeIn 0.2s ease; } .anim-sheet-right { animation: sheetInRight 0.28s cubic-bezier(0.32, 0.72, 0, 1); } .anim-sheet-left { animation: sheetInLeft 0.28s cubic-bezier(0.32, 0.72, 0, 1); } .anim-sheet-top { animation: sheetInTop 0.28s cubic-bezier(0.32, 0.72, 0, 1); } .anim-sheet-bottom { animation: sheetInBottom 0.28s cubic-bezier(0.32, 0.72, 0, 1); } /* ─── R3: NProgress bar — gradient حسینیه، ۳px، بدون spinner ─── */ #nprogress { pointer-events: none; } #nprogress .bar { position: fixed; top: 0; right: 0; left: 0; z-index: 1000; height: 3px; background: var(--g-progress); } #nprogress .peg { display: block; position: absolute; left: 0; width: 100px; height: 100%; box-shadow: 0 0 10px #ff4a4a, 0 0 5px #ff4a4a; opacity: 1; } #nprogress .spinner { display: none; } /* ─── Shimmer Wave Animation (Aligned with Flutter AppShimmer Neutral Slate Tokens) ─── */ @keyframes shimmerWave { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .shimmer-wave { background: linear-gradient( 90deg, #e2e8f0 0%, #f8fafc 50%, #e2e8f0 100% ); background-size: 200% 100%; animation: shimmerWave 1.5s infinite linear; } html.dark .shimmer-wave, .dark .shimmer-wave { background: linear-gradient( 90deg, #22252c 0%, #333742 50%, #22252c 100% ); background-size: 200% 100%; animation: shimmerWave 1.5s infinite linear; } html.light .shimmer-wave, .light .shimmer-wave { background: linear-gradient( 90deg, #e2e8f0 0%, #f8fafc 50%, #e2e8f0 100% ); background-size: 200% 100%; animation: shimmerWave 1.5s infinite linear; }