You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

325 lines
10 KiB

@import url('https://cdn.jsdelivr.net/gh/rastikerdar/[email protected]/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;
}