This commit is contained in:
Gaurav Kumar
2025-09-26 08:49:03 +05:30
commit 6d2a59da38
903 changed files with 93754 additions and 0 deletions

View File

@@ -0,0 +1,602 @@
// ========================================
// ANIMATIONS - Smooth & Modern Transitions
// ========================================
@import './design-tokens';
// Fade Animations
// ========================================
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeInDown {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeInLeft {
from {
opacity: 0;
transform: translateX(-20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
// Scale Animations
// ========================================
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.9);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes scaleOut {
from {
opacity: 1;
transform: scale(1);
}
to {
opacity: 0;
transform: scale(0.9);
}
}
@keyframes scaleUp {
from {
transform: scale(1);
}
to {
transform: scale(1.05);
}
}
@keyframes scaleDown {
from {
transform: scale(1.05);
}
to {
transform: scale(1);
}
}
// Slide Animations
// ========================================
@keyframes slideInUp {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
@keyframes slideInDown {
from {
transform: translateY(-100%);
}
to {
transform: translateY(0);
}
}
@keyframes slideInLeft {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
@keyframes slideInRight {
from {
transform: translateX(100%);
}
to {
transform: translateX(0);
}
}
@keyframes slideOutUp {
from {
transform: translateY(0);
}
to {
transform: translateY(-100%);
}
}
@keyframes slideOutDown {
from {
transform: translateY(0);
}
to {
transform: translateY(100%);
}
}
@keyframes slideOutLeft {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
@keyframes slideOutRight {
from {
transform: translateX(0);
}
to {
transform: translateX(100%);
}
}
// Rotation Animations
// ========================================
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes spinReverse {
from {
transform: rotate(360deg);
}
to {
transform: rotate(0deg);
}
}
@keyframes bounce {
0%, 20%, 53%, 80%, 100% {
transform: translate3d(0, 0, 0);
}
40%, 43% {
transform: translate3d(0, -8px, 0);
}
70% {
transform: translate3d(0, -4px, 0);
}
90% {
transform: translate3d(0, -2px, 0);
}
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.05);
}
100% {
transform: scale(1);
}
}
@keyframes shake {
0%, 100% {
transform: translateX(0);
}
10%, 30%, 50%, 70%, 90% {
transform: translateX(-2px);
}
20%, 40%, 60%, 80% {
transform: translateX(2px);
}
}
@keyframes wiggle {
0%, 7% {
transform: rotateZ(0);
}
15% {
transform: rotateZ(-15deg);
}
20% {
transform: rotateZ(10deg);
}
25% {
transform: rotateZ(-10deg);
}
30% {
transform: rotateZ(6deg);
}
35% {
transform: rotateZ(-4deg);
}
40%, 100% {
transform: rotateZ(0);
}
}
// Loading Animations
// ========================================
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
@keyframes shimmer2 {
0% {
background-position: 200% 0;
}
100% {
background-position: -200% 0;
}
}
@keyframes dots {
0%, 20% {
color: transparent;
text-shadow: 0.25em 0 0 transparent, 0.5em 0 0 transparent;
}
40% {
color: currentColor;
text-shadow: 0.25em 0 0 transparent, 0.5em 0 0 transparent;
}
60% {
text-shadow: 0.25em 0 0 currentColor, 0.5em 0 0 transparent;
}
80%, 100% {
text-shadow: 0.25em 0 0 currentColor, 0.5em 0 0 currentColor;
}
}
@keyframes wave {
0%, 60%, 100% {
transform: initial;
}
30% {
transform: translateY(-15px);
}
}
// Hover Animations
// ========================================
@keyframes float {
0% {
transform: translateY(0px);
}
50% {
transform: translateY(-10px);
}
100% {
transform: translateY(0px);
}
}
@keyframes glow {
0% {
box-shadow: 0 0 5px rgba($primary-500, 0.5);
}
50% {
box-shadow: 0 0 20px rgba($primary-500, 0.8), 0 0 30px rgba($primary-500, 0.6);
}
100% {
box-shadow: 0 0 5px rgba($primary-500, 0.5);
}
}
@keyframes ripple {
0% {
transform: scale(0);
opacity: 1;
}
100% {
transform: scale(4);
opacity: 0;
}
}
// Animation Classes
// ========================================
// Fade Classes
.animate-fade-in {
animation: fadeIn $duration-300 $ease-out;
}
.animate-fade-out {
animation: fadeOut $duration-300 $ease-out;
}
.animate-fade-in-up {
animation: fadeInUp $duration-500 $ease-out;
}
.animate-fade-in-down {
animation: fadeInDown $duration-500 $ease-out;
}
.animate-fade-in-left {
animation: fadeInLeft $duration-500 $ease-out;
}
.animate-fade-in-right {
animation: fadeInRight $duration-500 $ease-out;
}
// Scale Classes
.animate-scale-in {
animation: scaleIn $duration-300 $ease-out;
}
.animate-scale-out {
animation: scaleOut $duration-300 $ease-out;
}
.animate-scale-up {
animation: scaleUp $duration-200 $ease-out;
}
.animate-scale-down {
animation: scaleDown $duration-200 $ease-out;
}
// Slide Classes
.animate-slide-in-up {
animation: slideInUp $duration-500 $ease-out;
}
.animate-slide-in-down {
animation: slideInDown $duration-500 $ease-out;
}
.animate-slide-in-left {
animation: slideInLeft $duration-500 $ease-out;
}
.animate-slide-in-right {
animation: slideInRight $duration-500 $ease-out;
}
.animate-slide-out-up {
animation: slideOutUp $duration-300 $ease-out;
}
.animate-slide-out-down {
animation: slideOutDown $duration-300 $ease-out;
}
.animate-slide-out-left {
animation: slideOutLeft $duration-300 $ease-out;
}
.animate-slide-out-right {
animation: slideOutRight $duration-300 $ease-out;
}
// Rotation Classes
.animate-spin {
animation: spin 1s linear infinite;
}
.animate-spin-reverse {
animation: spinReverse 1s linear infinite;
}
.animate-bounce {
animation: bounce 1s infinite;
}
.animate-pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
.animate-shake {
animation: shake 0.5s ease-in-out;
}
.animate-wiggle {
animation: wiggle 1s ease-in-out;
}
// Loading Classes
.animate-shimmer {
animation: shimmer 1.5s infinite;
}
.animate-shimmer2 {
animation: shimmer2 1.5s infinite;
}
.animate-dots {
animation: dots 1.4s infinite;
}
.animate-wave {
animation: wave 1.4s infinite;
}
// Hover Classes
.animate-float {
animation: float 3s ease-in-out infinite;
}
.animate-glow {
animation: glow 2s ease-in-out infinite;
}
.animate-ripple {
animation: ripple 0.6s linear;
}
// Transition Classes
// ========================================
.transition-all {
transition: all $duration-300 $ease-out;
}
.transition-colors {
transition: color $duration-200 $ease-out, background-color $duration-200 $ease-out, border-color $duration-200 $ease-out;
}
.transition-opacity {
transition: opacity $duration-200 $ease-out;
}
.transition-transform {
transition: transform $duration-200 $ease-out;
}
.transition-shadow {
transition: box-shadow $duration-200 $ease-out;
}
// Hover Effects
// ========================================
.hover-lift {
transition: transform $duration-200 $ease-out, box-shadow $duration-200 $ease-out;
&:hover {
transform: translateY(-2px);
box-shadow: $shadow-lg;
}
}
.hover-glow {
transition: box-shadow $duration-200 $ease-out;
&:hover {
box-shadow: 0 0 20px rgba($primary-500, 0.3);
}
}
.hover-scale {
transition: transform $duration-200 $ease-out;
&:hover {
transform: scale(1.05);
}
}
.hover-rotate {
transition: transform $duration-200 $ease-out;
&:hover {
transform: rotate(5deg);
}
}
.hover-bounce {
transition: transform $duration-200 $ease-bounce;
&:hover {
transform: translateY(-4px);
}
}
// Staggered Animations
// ========================================
.stagger-1 { animation-delay: 0.1s; }
.stagger-2 { animation-delay: 0.2s; }
.stagger-3 { animation-delay: 0.3s; }
.stagger-4 { animation-delay: 0.4s; }
.stagger-5 { animation-delay: 0.5s; }
.stagger-6 { animation-delay: 0.6s; }
.stagger-7 { animation-delay: 0.7s; }
.stagger-8 { animation-delay: 0.8s; }
// Animation States
// ========================================
.animation-paused {
animation-play-state: paused;
}
.animation-running {
animation-play-state: running;
}
// Reduced Motion Support
// ========================================
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
.animate-spin,
.animate-pulse,
.animate-bounce,
.animate-float,
.animate-glow {
animation: none;
}
}

View File

@@ -0,0 +1,411 @@
// ========================================
// BASE STYLES - Modern UI Foundation
// ========================================
@import './design-tokens';
// CSS Reset & Base Styles
// ========================================
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
line-height: 1.5;
-webkit-text-size-adjust: 100%;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
body {
font-family: $font-primary;
font-size: $text-base;
font-weight: $font-normal;
line-height: $leading-normal;
color: $gray-900;
background: linear-gradient(135deg, $gray-50 0%, $gray-100 100%);
min-height: 100vh;
overflow-x: hidden;
}
// Typography
// ========================================
h1, h2, h3, h4, h5, h6 {
font-family: $font-secondary;
font-weight: $font-semibold;
line-height: $leading-tight;
color: $gray-900;
margin: 0;
}
h1 { font-size: $text-4xl; }
h2 { font-size: $text-3xl; }
h3 { font-size: $text-2xl; }
h4 { font-size: $text-xl; }
h5 { font-size: $text-lg; }
h6 { font-size: $text-base; }
p {
margin: 0 0 $space-4 0;
color: $gray-700;
}
a {
color: $primary-600;
text-decoration: none;
transition: color $duration-200 $ease-out;
&:hover {
color: $primary-700;
}
&:focus {
outline: 2px solid $primary-500;
outline-offset: 2px;
border-radius: $radius-sm;
}
}
// Lists
ul, ol {
margin: 0;
padding: 0;
list-style: none;
}
// Images
img {
max-width: 100%;
height: auto;
display: block;
}
// Form Elements
// ========================================
input, textarea, select {
font-family: inherit;
font-size: inherit;
line-height: inherit;
margin: 0;
}
button {
font-family: inherit;
font-size: inherit;
line-height: inherit;
margin: 0;
cursor: pointer;
border: none;
background: none;
}
// Focus Styles
// ========================================
:focus {
outline: 2px solid $primary-500;
outline-offset: 2px;
}
:focus:not(:focus-visible) {
outline: none;
}
:focus-visible {
outline: 2px solid $primary-500;
outline-offset: 2px;
}
// Selection Styles
// ========================================
::selection {
background-color: $primary-100;
color: $primary-900;
}
::-moz-selection {
background-color: $primary-100;
color: $primary-900;
}
// Scrollbar Styles
// ========================================
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: $gray-100;
border-radius: $radius-full;
}
::-webkit-scrollbar-thumb {
background: $gray-300;
border-radius: $radius-full;
transition: background-color $duration-200 $ease-out;
}
::-webkit-scrollbar-thumb:hover {
background: $gray-400;
}
::-webkit-scrollbar-corner {
background: $gray-100;
}
// Utility Classes
// ========================================
// Display
.d-block { display: block; }
.d-inline { display: inline; }
.d-inline-block { display: inline-block; }
.d-flex { display: flex; }
.d-inline-flex { display: inline-flex; }
.d-grid { display: grid; }
.d-none { display: none; }
// Flexbox
.flex-row { flex-direction: row; }
.flex-col { flex-direction: column; }
.flex-wrap { flex-wrap: wrap; }
.flex-nowrap { flex-wrap: nowrap; }
.justify-start { justify-content: flex-start; }
.justify-center { justify-content: center; }
.justify-end { justify-content: flex-end; }
.justify-between { justify-content: space-between; }
.justify-around { justify-content: space-around; }
.items-start { align-items: flex-start; }
.items-center { align-items: center; }
.items-end { align-items: flex-end; }
.items-stretch { align-items: stretch; }
.flex-1 { flex: 1 1 0%; }
.flex-auto { flex: 1 1 auto; }
.flex-initial { flex: 0 1 auto; }
.flex-none { flex: none; }
// Spacing
.m-0 { margin: 0; }
.m-1 { margin: $space-1; }
.m-2 { margin: $space-2; }
.m-3 { margin: $space-3; }
.m-4 { margin: $space-4; }
.m-5 { margin: $space-5; }
.m-6 { margin: $space-6; }
.m-8 { margin: $space-8; }
.mt-0 { margin-top: 0; }
.mt-1 { margin-top: $space-1; }
.mt-2 { margin-top: $space-2; }
.mt-3 { margin-top: $space-3; }
.mt-4 { margin-top: $space-4; }
.mt-5 { margin-top: $space-5; }
.mt-6 { margin-top: $space-6; }
.mt-8 { margin-top: $space-8; }
.mb-0 { margin-bottom: 0; }
.mb-1 { margin-bottom: $space-1; }
.mb-2 { margin-bottom: $space-2; }
.mb-3 { margin-bottom: $space-3; }
.mb-4 { margin-bottom: $space-4; }
.mb-5 { margin-bottom: $space-5; }
.mb-6 { margin-bottom: $space-6; }
.mb-8 { margin-bottom: $space-8; }
.ml-0 { margin-left: 0; }
.ml-1 { margin-left: $space-1; }
.ml-2 { margin-left: $space-2; }
.ml-3 { margin-left: $space-3; }
.ml-4 { margin-left: $space-4; }
.ml-5 { margin-left: $space-5; }
.ml-6 { margin-left: $space-6; }
.ml-8 { margin-left: $space-8; }
.mr-0 { margin-right: 0; }
.mr-1 { margin-right: $space-1; }
.mr-2 { margin-right: $space-2; }
.mr-3 { margin-right: $space-3; }
.mr-4 { margin-right: $space-4; }
.mr-5 { margin-right: $space-5; }
.mr-6 { margin-right: $space-6; }
.mr-8 { margin-right: $space-8; }
.p-0 { padding: 0; }
.p-1 { padding: $space-1; }
.p-2 { padding: $space-2; }
.p-3 { padding: $space-3; }
.p-4 { padding: $space-4; }
.p-5 { padding: $space-5; }
.p-6 { padding: $space-6; }
.p-8 { padding: $space-8; }
.pt-0 { padding-top: 0; }
.pt-1 { padding-top: $space-1; }
.pt-2 { padding-top: $space-2; }
.pt-3 { padding-top: $space-3; }
.pt-4 { padding-top: $space-4; }
.pt-5 { padding-top: $space-5; }
.pt-6 { padding-top: $space-6; }
.pt-8 { padding-top: $space-8; }
.pb-0 { padding-bottom: 0; }
.pb-1 { padding-bottom: $space-1; }
.pb-2 { padding-bottom: $space-2; }
.pb-3 { padding-bottom: $space-3; }
.pb-4 { padding-bottom: $space-4; }
.pb-5 { padding-bottom: $space-5; }
.pb-6 { padding-bottom: $space-6; }
.pb-8 { padding-bottom: $space-8; }
.pl-0 { padding-left: 0; }
.pl-1 { padding-left: $space-1; }
.pl-2 { padding-left: $space-2; }
.pl-3 { padding-left: $space-3; }
.pl-4 { padding-left: $space-4; }
.pl-5 { padding-left: $space-5; }
.pl-6 { padding-left: $space-6; }
.pl-8 { padding-left: $space-8; }
.pr-0 { padding-right: 0; }
.pr-1 { padding-right: $space-1; }
.pr-2 { padding-right: $space-2; }
.pr-3 { padding-right: $space-3; }
.pr-4 { padding-right: $space-4; }
.pr-5 { padding-right: $space-5; }
.pr-6 { padding-right: $space-6; }
.pr-8 { padding-right: $space-8; }
// Text
.text-xs { font-size: $text-xs; }
.text-sm { font-size: $text-sm; }
.text-base { font-size: $text-base; }
.text-lg { font-size: $text-lg; }
.text-xl { font-size: $text-xl; }
.text-2xl { font-size: $text-2xl; }
.text-3xl { font-size: $text-3xl; }
.text-4xl { font-size: $text-4xl; }
.font-thin { font-weight: $font-thin; }
.font-light { font-weight: $font-light; }
.font-normal { font-weight: $font-normal; }
.font-medium { font-weight: $font-medium; }
.font-semibold { font-weight: $font-semibold; }
.font-bold { font-weight: $font-bold; }
.font-extrabold { font-weight: $font-extrabold; }
.font-black { font-weight: $font-black; }
.text-left { text-align: left; }
.text-center { text-align: center; }
.text-right { text-align: right; }
.text-justify { text-align: justify; }
.text-primary { color: $primary-600; }
.text-secondary { color: $secondary-600; }
.text-success { color: $success; }
.text-warning { color: $warning; }
.text-error { color: $error; }
.text-gray-500 { color: $gray-500; }
.text-gray-600 { color: $gray-600; }
.text-gray-700 { color: $gray-700; }
.text-gray-900 { color: $gray-900; }
// Border Radius
.rounded-none { border-radius: $radius-none; }
.rounded-sm { border-radius: $radius-sm; }
.rounded { border-radius: $radius-base; }
.rounded-md { border-radius: $radius-md; }
.rounded-lg { border-radius: $radius-lg; }
.rounded-xl { border-radius: $radius-xl; }
.rounded-2xl { border-radius: $radius-2xl; }
.rounded-3xl { border-radius: $radius-3xl; }
.rounded-full { border-radius: $radius-full; }
// Shadows
.shadow-sm { box-shadow: $shadow-sm; }
.shadow { box-shadow: $shadow-base; }
.shadow-md { box-shadow: $shadow-md; }
.shadow-lg { box-shadow: $shadow-lg; }
.shadow-xl { box-shadow: $shadow-xl; }
.shadow-2xl { box-shadow: $shadow-2xl; }
.shadow-inner { box-shadow: $shadow-inner; }
// Transitions
.transition { transition: all $duration-200 $ease-out; }
.transition-fast { transition: all $duration-150 $ease-out; }
.transition-slow { transition: all $duration-300 $ease-out; }
// Responsive Utilities
// ========================================
@media (max-width: $breakpoint-sm) {
.sm\:hidden { display: none; }
.sm\:block { display: block; }
.sm\:flex { display: flex; }
.sm\:text-sm { font-size: $text-sm; }
.sm\:text-base { font-size: $text-base; }
.sm\:p-2 { padding: $space-2; }
.sm\:p-4 { padding: $space-4; }
}
@media (max-width: $breakpoint-md) {
.md\:hidden { display: none; }
.md\:block { display: block; }
.md\:flex { display: flex; }
.md\:text-sm { font-size: $text-sm; }
.md\:text-base { font-size: $text-base; }
.md\:p-2 { padding: $space-2; }
.md\:p-4 { padding: $space-4; }
}
@media (max-width: $breakpoint-lg) {
.lg\:hidden { display: none; }
.lg\:block { display: block; }
.lg\:flex { display: flex; }
.lg\:text-sm { font-size: $text-sm; }
.lg\:text-base { font-size: $text-base; }
.lg\:p-2 { padding: $space-2; }
.lg\:p-4 { padding: $space-4; }
}
// Accessibility
// ========================================
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
// Reduced Motion
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

View File

@@ -0,0 +1,709 @@
// ========================================
// COMPONENT STYLES - Modern UI Components
// ========================================
@import './design-tokens';
// Card Components
// ========================================
.modern-card {
background: $card-bg;
backdrop-filter: $backdrop-blur-md;
border: 1px solid $card-border;
border-radius: $radius-xl;
box-shadow: $card-shadow;
padding: $space-6;
transition: all $duration-300 $ease-out;
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: $glass-gradient;
}
&:hover {
transform: translateY(-2px);
box-shadow: $shadow-xl;
border-color: rgba($primary-500, 0.2);
}
&.glassmorphism {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: $backdrop-blur-lg;
border: 1px solid rgba(255, 255, 255, 0.2);
}
&.gradient {
background: $gradient-primary;
color: $white;
border: none;
&::before {
background: rgba(255, 255, 255, 0.1);
}
}
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: $space-4;
padding-bottom: $space-4;
border-bottom: 1px solid $gray-200;
.card-title {
font-size: $text-xl;
font-weight: $font-semibold;
color: $gray-900;
margin: 0;
}
.card-actions {
display: flex;
gap: $space-2;
}
}
.card-body {
color: $gray-700;
line-height: $leading-relaxed;
}
.card-footer {
margin-top: $space-4;
padding-top: $space-4;
border-top: 1px solid $gray-200;
display: flex;
justify-content: flex-end;
gap: $space-3;
}
// Button Components
// ========================================
.modern-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: $space-2;
padding: $space-3 $space-6;
font-size: $text-sm;
font-weight: $font-medium;
line-height: 1;
border-radius: $radius-lg;
border: 1px solid transparent;
cursor: pointer;
transition: all $duration-200 $ease-out;
text-decoration: none;
position: relative;
overflow: hidden;
&:focus {
outline: 2px solid $primary-500;
outline-offset: 2px;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
// Sizes
&.btn-sm {
padding: $space-2 $space-4;
font-size: $text-xs;
height: $btn-height-sm;
}
&.btn-md {
padding: $space-3 $space-6;
font-size: $text-sm;
height: $btn-height-md;
}
&.btn-lg {
padding: $space-4 $space-8;
font-size: $text-base;
height: $btn-height-lg;
}
// Variants
&.btn-primary {
background: $gradient-primary;
color: $white;
border-color: $primary-600;
&:hover {
background: linear-gradient(135deg, $primary-600 0%, $primary-800 100%);
transform: translateY(-1px);
box-shadow: $shadow-lg;
}
&:active {
transform: translateY(0);
box-shadow: $shadow-md;
}
}
&.btn-secondary {
background: $white;
color: $gray-700;
border-color: $gray-300;
&:hover {
background: $gray-50;
border-color: $gray-400;
transform: translateY(-1px);
box-shadow: $shadow-md;
}
}
&.btn-outline {
background: transparent;
color: $primary-600;
border-color: $primary-600;
&:hover {
background: $primary-50;
border-color: $primary-700;
color: $primary-700;
}
}
&.btn-ghost {
background: transparent;
color: $gray-600;
border-color: transparent;
&:hover {
background: $gray-100;
color: $gray-900;
}
}
&.btn-success {
background: $gradient-success;
color: $white;
border-color: $accent-green;
&:hover {
background: linear-gradient(135deg, #059669 0%, #047857 100%);
transform: translateY(-1px);
box-shadow: $shadow-lg;
}
}
&.btn-warning {
background: $gradient-warning;
color: $white;
border-color: $accent-orange;
&:hover {
background: linear-gradient(135deg, #d97706 0%, #b45309 100%);
transform: translateY(-1px);
box-shadow: $shadow-lg;
}
}
&.btn-error {
background: $gradient-error;
color: $white;
border-color: $accent-red;
&:hover {
background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
transform: translateY(-1px);
box-shadow: $shadow-lg;
}
}
// Loading state
&.loading {
position: relative;
color: transparent;
&::after {
content: '';
position: absolute;
width: 16px;
height: 16px;
border: 2px solid transparent;
border-top: 2px solid currentColor;
border-radius: 50%;
animation: spin 1s linear infinite;
}
}
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
// Form Components
// ========================================
.modern-form-group {
margin-bottom: $space-6;
.form-label {
display: block;
font-size: $text-sm;
font-weight: $font-medium;
color: $gray-700;
margin-bottom: $space-2;
}
.form-input {
width: 100%;
padding: $space-3 $space-4;
font-size: $text-sm;
line-height: $leading-normal;
color: $gray-900;
background: $white;
border: 1px solid $input-border;
border-radius: $radius-lg;
transition: all $duration-200 $ease-out;
&:focus {
outline: none;
border-color: $input-border-focus;
box-shadow: 0 0 0 3px rgba($primary-500, 0.1);
}
&:disabled {
background: $gray-100;
color: $gray-500;
cursor: not-allowed;
}
&.error {
border-color: $input-border-error;
box-shadow: 0 0 0 3px rgba($error, 0.1);
}
&::placeholder {
color: $gray-400;
}
}
.form-textarea {
@extend .form-input;
min-height: 120px;
resize: vertical;
}
.form-select {
@extend .form-input;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
background-position: right $space-3 center;
background-repeat: no-repeat;
background-size: 16px 12px;
padding-right: $space-10;
appearance: none;
}
.form-error {
margin-top: $space-1;
font-size: $text-xs;
color: $error;
}
.form-help {
margin-top: $space-1;
font-size: $text-xs;
color: $gray-500;
}
}
// Input Group
.input-group {
display: flex;
align-items: stretch;
.input-group-prepend {
display: flex;
align-items: center;
padding: $space-3 $space-4;
background: $gray-100;
border: 1px solid $gray-300;
border-right: none;
border-radius: $radius-lg 0 0 $radius-lg;
color: $gray-600;
}
.input-group-append {
display: flex;
align-items: center;
padding: $space-3 $space-4;
background: $gray-100;
border: 1px solid $gray-300;
border-left: none;
border-radius: 0 $radius-lg $radius-lg 0;
color: $gray-600;
}
.form-input {
border-radius: 0;
&:first-child {
border-radius: $radius-lg 0 0 $radius-lg;
}
&:last-child {
border-radius: 0 $radius-lg $radius-lg 0;
}
&:only-child {
border-radius: $radius-lg;
}
}
}
// Table Components
// ========================================
.modern-table {
width: 100%;
border-collapse: collapse;
background: $white;
border-radius: $radius-xl;
overflow: hidden;
box-shadow: $shadow-lg;
thead {
background: $gray-50;
th {
padding: $space-4 $space-6;
text-align: left;
font-size: $text-xs;
font-weight: $font-semibold;
color: $gray-600;
text-transform: uppercase;
letter-spacing: 0.05em;
border-bottom: 1px solid $gray-200;
&:first-child {
padding-left: $space-8;
}
&:last-child {
padding-right: $space-8;
}
}
}
tbody {
tr {
transition: background-color $duration-150 $ease-out;
&:hover {
background: $gray-50;
}
&:not(:last-child) {
border-bottom: 1px solid $gray-200;
}
}
td {
padding: $space-4 $space-6;
font-size: $text-sm;
color: $gray-700;
&:first-child {
padding-left: $space-8;
}
&:last-child {
padding-right: $space-8;
}
}
}
}
// Badge Components
// ========================================
.modern-badge {
display: inline-flex;
align-items: center;
padding: $space-1 $space-3;
font-size: $text-xs;
font-weight: $font-medium;
border-radius: $radius-full;
text-transform: uppercase;
letter-spacing: 0.05em;
&.badge-primary {
background: $primary-100;
color: $primary-800;
}
&.badge-secondary {
background: $secondary-100;
color: $secondary-800;
}
&.badge-success {
background: rgba($accent-green, 0.1);
color: $accent-green;
}
&.badge-warning {
background: rgba($accent-orange, 0.1);
color: $accent-orange;
}
&.badge-error {
background: rgba($accent-red, 0.1);
color: $accent-red;
}
&.badge-gray {
background: $gray-100;
color: $gray-700;
}
}
// Alert Components
// ========================================
.modern-alert {
padding: $space-4 $space-6;
border-radius: $radius-lg;
border: 1px solid;
margin-bottom: $space-4;
display: flex;
align-items: flex-start;
gap: $space-3;
.alert-icon {
flex-shrink: 0;
margin-top: 2px;
}
.alert-content {
flex: 1;
.alert-title {
font-weight: $font-semibold;
margin-bottom: $space-1;
}
.alert-message {
font-size: $text-sm;
line-height: $leading-relaxed;
}
}
&.alert-info {
background: rgba($primary-500, 0.05);
border-color: rgba($primary-500, 0.2);
color: $primary-800;
.alert-icon {
color: $primary-600;
}
}
&.alert-success {
background: rgba($accent-green, 0.05);
border-color: rgba($accent-green, 0.2);
color: #065f46;
.alert-icon {
color: $accent-green;
}
}
&.alert-warning {
background: rgba($accent-orange, 0.05);
border-color: rgba($accent-orange, 0.2);
color: #92400e;
.alert-icon {
color: $accent-orange;
}
}
&.alert-error {
background: rgba($accent-red, 0.05);
border-color: rgba($accent-red, 0.2);
color: #991b1b;
.alert-icon {
color: $accent-red;
}
}
}
// Modal Components
// ========================================
.modern-modal {
.modal-backdrop {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba($black, 0.5);
backdrop-filter: $backdrop-blur-sm;
z-index: $z-modal-backdrop;
animation: fadeIn $duration-200 $ease-out;
}
.modal-dialog {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: $white;
border-radius: $radius-2xl;
box-shadow: $shadow-2xl;
z-index: $z-modal;
max-width: 90vw;
max-height: 90vh;
overflow: hidden;
animation: slideIn $duration-300 $ease-out;
.modal-header {
padding: $space-6 $space-8;
border-bottom: 1px solid $gray-200;
display: flex;
align-items: center;
justify-content: space-between;
.modal-title {
font-size: $text-xl;
font-weight: $font-semibold;
color: $gray-900;
margin: 0;
}
.modal-close {
background: none;
border: none;
color: $gray-400;
cursor: pointer;
padding: $space-2;
border-radius: $radius-md;
transition: all $duration-200 $ease-out;
&:hover {
background: $gray-100;
color: $gray-600;
}
}
}
.modal-body {
padding: $space-6 $space-8;
max-height: 60vh;
overflow-y: auto;
}
.modal-footer {
padding: $space-6 $space-8;
border-top: 1px solid $gray-200;
display: flex;
justify-content: flex-end;
gap: $space-3;
}
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes slideIn {
from {
opacity: 0;
transform: translate(-50%, -60%);
}
to {
opacity: 1;
transform: translate(-50%, -50%);
}
}
// Loading Components
// ========================================
.modern-spinner {
display: inline-block;
width: 20px;
height: 20px;
border: 2px solid $gray-200;
border-top: 2px solid $primary-500;
border-radius: 50%;
animation: spin 1s linear infinite;
&.spinner-sm {
width: 16px;
height: 16px;
border-width: 1.5px;
}
&.spinner-lg {
width: 32px;
height: 32px;
border-width: 3px;
}
}
.modern-skeleton {
background: linear-gradient(90deg, $gray-200 25%, $gray-100 50%, $gray-200 75%);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
border-radius: $radius-md;
&.skeleton-text {
height: 1em;
margin-bottom: $space-2;
}
&.skeleton-title {
height: 1.5em;
margin-bottom: $space-4;
}
&.skeleton-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
}
&.skeleton-button {
height: 40px;
width: 100px;
}
}
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}

View File

@@ -0,0 +1,258 @@
// ========================================
// DESIGN TOKENS - Modern UI Design System
// ========================================
// Dynamic Theme Variables (CSS Custom Properties)
// ========================================
:root {
// Default theme colors (fallback)
--theme-primary: #0ea5e9;
--theme-secondary: #64748b;
--theme-accent: #8b5cf6;
--theme-error: #ef4444;
--theme-error-dark: #dc2626;
--theme-background: #f8fafc;
--theme-surface: #ffffff;
--theme-text: #1f2937;
--theme-text-secondary: #6b7280;
--theme-border-radius: 0.5rem;
--theme-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
--theme-font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--theme-font-secondary: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--theme-font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
}
// Color Palette
// ========================================
// Primary Colors (with theme support)
$primary-50: #f0f9ff;
$primary-100: #e0f2fe;
$primary-200: #bae6fd;
$primary-300: #7dd3fc;
$primary-400: #38bdf8;
$primary-500: var(--theme-primary, #0ea5e9); // Dynamic primary
$primary-600: #0284c7;
$primary-700: #0369a1;
$primary-800: #075985;
$primary-900: #0c4a6e;
// Secondary Colors (with theme support)
$secondary-50: #f8fafc;
$secondary-100: #f1f5f9;
$secondary-200: #e2e8f0;
$secondary-300: #cbd5e1;
$secondary-400: #94a3b8;
$secondary-500: var(--theme-secondary, #64748b); // Dynamic secondary
$secondary-600: #475569;
$secondary-700: #334155;
$secondary-800: #1e293b;
$secondary-900: #0f172a;
// Accent Colors (with theme support)
$accent-purple: var(--theme-accent, #8b5cf6);
$accent-green: #10b981;
$accent-orange: #f59e0b;
$accent-red: #ef4444;
$accent-pink: #ec4899;
// Neutral Colors (with theme support)
$white: #ffffff;
$gray-50: #f9fafb;
$gray-100: #f3f4f6;
$gray-200: #e5e7eb;
$gray-300: #d1d5db;
$gray-400: #9ca3af;
$gray-500: #6b7280;
$gray-600: #4b5563;
$gray-700: #374151;
$gray-800: #1f2937;
$gray-900: var(--theme-text, #111827); // Dynamic text color
$black: #000000;
// Theme-aware colors
$theme-background: var(--theme-background, #f8fafc);
$theme-surface: var(--theme-surface, #ffffff);
$theme-text: var(--theme-text, #1f2937);
$theme-text-secondary: var(--theme-text-secondary, #6b7280);
// Semantic Colors
$success: $accent-green;
$warning: $accent-orange;
$error: $accent-red;
$info: $primary-500;
// Typography
// ========================================
// Font Families (with theme support)
$font-primary: var(--theme-font-primary, 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif);
$font-secondary: var(--theme-font-secondary, 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif);
$font-mono: var(--theme-font-mono, 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, 'Liberation Mono', Menlo, Courier, monospace);
// Font Sizes
$text-xs: 0.75rem; // 12px
$text-sm: 0.875rem; // 14px
$text-base: 1rem; // 16px
$text-lg: 1.125rem; // 18px
$text-xl: 1.25rem; // 20px
$text-2xl: 1.5rem; // 24px
$text-3xl: 1.875rem; // 30px
$text-4xl: 2.25rem; // 36px
$text-5xl: 3rem; // 48px
$text-6xl: 3.75rem; // 60px
// Font Weights
$font-thin: 100;
$font-light: 300;
$font-normal: 400;
$font-medium: 500;
$font-semibold: 600;
$font-bold: 700;
$font-extrabold: 800;
$font-black: 900;
// Line Heights
$leading-none: 1;
$leading-tight: 1.25;
$leading-snug: 1.375;
$leading-normal: 1.5;
$leading-relaxed: 1.625;
$leading-loose: 2;
// Spacing System
// ========================================
$space-0: 0;
$space-1: 0.25rem; // 4px
$space-2: 0.5rem; // 8px
$space-3: 0.75rem; // 12px
$space-4: 1rem; // 16px
$space-5: 1.25rem; // 20px
$space-6: 1.5rem; // 24px
$space-8: 2rem; // 32px
$space-10: 2.5rem; // 40px
$space-12: 3rem; // 48px
$space-16: 4rem; // 64px
$space-20: 5rem; // 80px
$space-24: 6rem; // 96px
$space-32: 8rem; // 128px
// Border Radius (with theme support)
// ========================================
$radius-none: 0;
$radius-sm: 0.125rem; // 2px
$radius-base: 0.25rem; // 4px
$radius-md: 0.375rem; // 6px
$radius-lg: var(--theme-border-radius, 0.5rem); // Dynamic border radius
$radius-xl: 0.75rem; // 12px
$radius-2xl: 1rem; // 16px
$radius-3xl: 1.5rem; // 24px
$radius-full: 9999px;
// Shadows (with theme support)
// ========================================
$shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
$shadow-base: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
$shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
$shadow-lg: var(--theme-shadow, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)); // Dynamic shadow
$shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
$shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
$shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
// Glassmorphism Shadows
$glass-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
$glass-shadow-lg: 0 20px 40px 0 rgba(31, 38, 135, 0.4);
// Animation
// ========================================
// Timing Functions
$ease-in: cubic-bezier(0.4, 0, 1, 1);
$ease-out: cubic-bezier(0, 0, 0.2, 1);
$ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
$ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
$ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
// Duration
$duration-75: 75ms;
$duration-100: 100ms;
$duration-150: 150ms;
$duration-200: 200ms;
$duration-300: 300ms;
$duration-500: 500ms;
$duration-700: 700ms;
$duration-1000: 1000ms;
// Responsive Breakpoints
// ========================================
$breakpoint-sm: 640px; // Small devices
$breakpoint-md: 768px; // Medium devices
$breakpoint-lg: 1024px; // Large devices
$breakpoint-xl: 1280px; // Extra large devices
$breakpoint-2xl: 1536px; // 2X large devices
// Z-Index Scale
// ========================================
$z-dropdown: 1000;
$z-sticky: 1020;
$z-fixed: 1030;
$z-modal-backdrop: 1040;
$z-modal: 1050;
$z-popover: 1060;
$z-tooltip: 1070;
$z-toast: 1080;
// Component Specific Variables
// ========================================
// Header
$header-height: 4rem; // 64px
$header-bg: rgba(255, 255, 255, 0.95);
$header-border: rgba(0, 0, 0, 0.1);
// Sidebar
$sidebar-width: 16rem; // 256px
$sidebar-width-collapsed: 4rem; // 64px
$sidebar-bg: rgba(255, 255, 255, 0.98);
$sidebar-border: rgba(0, 0, 0, 0.05);
// Cards
$card-bg: rgba(255, 255, 255, 0.9);
$card-border: rgba(0, 0, 0, 0.05);
$card-shadow: $shadow-lg;
// Buttons
$btn-height-sm: 2rem; // 32px
$btn-height-md: 2.5rem; // 40px
$btn-height-lg: 3rem; // 48px
// Form Elements
$input-height: 2.5rem; // 40px
$input-border: rgba(0, 0, 0, 0.1);
$input-border-focus: $primary-500;
$input-border-error: $error;
// Gradients
// ========================================
$gradient-primary: linear-gradient(135deg, $primary-500 0%, $primary-700 100%);
$gradient-secondary: linear-gradient(135deg, $secondary-500 0%, $secondary-700 100%);
$gradient-accent: linear-gradient(135deg, $accent-purple 0%, $accent-pink 100%);
$gradient-success: linear-gradient(135deg, $accent-green 0%, #059669 100%);
$gradient-warning: linear-gradient(135deg, $accent-orange 0%, #d97706 100%);
$gradient-error: linear-gradient(135deg, $accent-red 0%, #dc2626 100%);
// Glassmorphism Gradients
$glass-gradient: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 100%);
$glass-gradient-dark: linear-gradient(135deg, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0.05) 100%);
// Backdrop Blur
$backdrop-blur-sm: blur(4px);
$backdrop-blur-md: blur(8px);
$backdrop-blur-lg: blur(16px);
$backdrop-blur-xl: blur(24px);

View File

@@ -0,0 +1,367 @@
// ========================================
// DYNAMIC THEME VARIABLES
// ========================================
@import './design-tokens';
// CSS Custom Properties for Dynamic Theming
// These variables will be set by the ThemeService at runtime
:root {
// Default theme variables (fallback values)
--theme-primary: #0ea5e9;
--theme-secondary: #64748b;
--theme-accent: #8b5cf6;
--theme-background: #f8fafc;
--theme-surface: #ffffff;
--theme-text: #111827;
--theme-text-secondary: #6b7280;
// Font variables
--theme-font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--theme-font-secondary: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--theme-font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
// Other theme properties
--theme-border-radius: 0.75rem;
--theme-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
// Derived colors for better theme integration
--theme-primary-50: #{rgba(#0ea5e9, 0.05)};
--theme-primary-100: #{rgba(#0ea5e9, 0.1)};
--theme-primary-200: #{rgba(#0ea5e9, 0.2)};
--theme-primary-300: #{rgba(#0ea5e9, 0.3)};
--theme-primary-500: #0ea5e9;
--theme-primary-600: #{darken(#0ea5e9, 10%)};
--theme-primary-700: #{darken(#0ea5e9, 20%)};
--theme-primary-800: #{darken(#0ea5e9, 30%)};
--theme-primary-900: #{darken(#0ea5e9, 40%)};
// Gradient definitions using theme colors
--theme-gradient-primary: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-primary-700) 100%);
--theme-gradient-secondary: linear-gradient(135deg, var(--theme-secondary) 0%, #{darken(#64748b, 20%)} 100%);
--theme-gradient-accent: linear-gradient(135deg, var(--theme-accent) 0%, #{darken(#8b5cf6, 20%)} 100%);
// Glassmorphism effects
--theme-glass-bg: rgba(255, 255, 255, 0.1);
--theme-glass-border: rgba(255, 255, 255, 0.2);
--theme-glass-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
}
// Dark theme overrides
[data-theme="dark"] {
--theme-background: #111827;
--theme-surface: #1f2937;
--theme-text: #f9fafb;
--theme-text-secondary: #d1d5db;
--theme-glass-bg: rgba(0, 0, 0, 0.1);
--theme-glass-border: rgba(255, 255, 255, 0.1);
--theme-glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.5);
}
// Theme-aware utility classes
// ========================================
// Background colors
.bg-theme-primary { background-color: var(--theme-primary) !important; }
.bg-theme-secondary { background-color: var(--theme-secondary) !important; }
.bg-theme-accent { background-color: var(--theme-accent) !important; }
.bg-theme-background { background-color: var(--theme-background) !important; }
.bg-theme-surface { background-color: var(--theme-surface) !important; }
// Text colors
.text-theme-primary { color: var(--theme-primary) !important; }
.text-theme-secondary { color: var(--theme-secondary) !important; }
.text-theme-accent { color: var(--theme-accent) !important; }
.text-theme-text { color: var(--theme-text) !important; }
.text-theme-text-secondary { color: var(--theme-text-secondary) !important; }
// Border colors
.border-theme-primary { border-color: var(--theme-primary) !important; }
.border-theme-secondary { border-color: var(--theme-secondary) !important; }
.border-theme-accent { border-color: var(--theme-accent) !important; }
// Gradients
.bg-gradient-theme-primary { background: var(--theme-gradient-primary) !important; }
.bg-gradient-theme-secondary { background: var(--theme-gradient-secondary) !important; }
.bg-gradient-theme-accent { background: var(--theme-gradient-accent) !important; }
// Font families
.font-theme-primary { font-family: var(--theme-font-primary) !important; }
.font-theme-secondary { font-family: var(--theme-font-secondary) !important; }
.font-theme-mono { font-family: var(--theme-font-mono) !important; }
// Border radius
.rounded-theme { border-radius: var(--theme-border-radius) !important; }
// Shadows
.shadow-theme { box-shadow: var(--theme-shadow) !important; }
// Glassmorphism effects
.glass-theme {
background: var(--theme-glass-bg) !important;
backdrop-filter: blur(16px) !important;
border: 1px solid var(--theme-glass-border) !important;
box-shadow: var(--theme-glass-shadow) !important;
}
// Theme-aware component overrides
// ========================================
// Update existing component styles to use theme variables
.modern-card {
background: var(--theme-surface);
color: var(--theme-text);
border: 1px solid rgba(var(--theme-text-secondary), 0.1);
box-shadow: var(--theme-shadow);
}
.modern-btn {
&.btn-primary {
background: var(--theme-gradient-primary);
color: white;
border-color: var(--theme-primary-600);
}
&.btn-secondary {
background: var(--theme-surface);
color: var(--theme-text);
border-color: rgba(var(--theme-text-secondary), 0.2);
}
&.btn-outline {
background: transparent;
color: var(--theme-primary);
border-color: var(--theme-primary);
}
}
.modern-form-group {
.form-label {
color: var(--theme-text);
}
.form-input {
background: var(--theme-surface);
color: var(--theme-text);
border-color: rgba(var(--theme-text-secondary), 0.2);
&:focus {
border-color: var(--theme-primary);
box-shadow: 0 0 0 3px var(--theme-primary-100);
}
&::placeholder {
color: var(--theme-text-secondary);
}
}
}
.modern-table {
background: var(--theme-surface);
color: var(--theme-text);
thead {
background: var(--theme-background);
th {
color: var(--theme-text-secondary);
}
}
tbody {
tr {
&:hover {
background: var(--theme-background);
}
}
td {
color: var(--theme-text);
}
}
}
.modern-alert {
&.alert-info {
background: var(--theme-primary-100);
border-color: var(--theme-primary-200);
color: var(--theme-primary-800);
}
&.alert-success {
background: rgba(16, 185, 129, 0.1);
border-color: rgba(16, 185, 129, 0.2);
color: #065f46;
}
&.alert-warning {
background: rgba(245, 158, 11, 0.1);
border-color: rgba(245, 158, 11, 0.2);
color: #92400e;
}
&.alert-error {
background: rgba(239, 68, 68, 0.1);
border-color: rgba(239, 68, 68, 0.2);
color: #991b1b;
}
}
// Layout component theme integration
// ========================================
.modern-layout {
background: var(--theme-background);
}
.modern-header {
background: rgba(var(--theme-surface), 0.95);
border-bottom: 1px solid rgba(var(--theme-text-secondary), 0.1);
color: var(--theme-text);
}
.modern-branding {
.company-title {
color: var(--theme-text);
}
.company-subtitle {
color: var(--theme-text-secondary);
}
}
.modern-sidebar {
background: rgba(var(--theme-surface), 0.98);
border-right: 1px solid rgba(var(--theme-text-secondary), 0.05);
color: var(--theme-text);
}
.modern-nav-link,
.modern-nav-link-single {
color: var(--theme-text-secondary);
&:hover {
background: var(--theme-primary-100);
color: var(--theme-primary-700);
}
&.active {
background: var(--theme-primary-100);
color: var(--theme-primary-800);
}
}
.modern-user-button {
background: transparent;
color: var(--theme-text);
border-color: rgba(var(--theme-text-secondary), 0.2);
&:hover {
background: var(--theme-background);
border-color: rgba(var(--theme-text-secondary), 0.3);
}
}
.modern-dropdown-menu {
background: var(--theme-surface);
border-color: rgba(var(--theme-text-secondary), 0.2);
color: var(--theme-text);
}
.modern-dropdown-item {
color: var(--theme-text);
&:hover {
background: var(--theme-background);
color: var(--theme-text);
}
}
// Dashboard theme integration
// ========================================
.modern-dashboard {
background: var(--theme-background);
}
.welcome-section {
background: var(--theme-gradient-primary);
color: white;
}
.stats-card {
background: var(--theme-surface);
color: var(--theme-text);
border: 1px solid rgba(var(--theme-text-secondary), 0.1);
.stats-value {
color: var(--theme-text);
}
.stats-label {
color: var(--theme-text-secondary);
}
}
.action-card {
background: var(--theme-surface);
color: var(--theme-text);
border-color: rgba(var(--theme-text-secondary), 0.2);
&:hover {
border-color: var(--theme-primary-300);
}
h3 {
color: var(--theme-text);
}
p {
color: var(--theme-text-secondary);
}
}
.activity-card {
background: var(--theme-surface);
color: var(--theme-text);
.activity-item {
border-bottom-color: rgba(var(--theme-text-secondary), 0.1);
&:hover {
background: var(--theme-background);
}
.activity-title {
color: var(--theme-text);
}
.activity-time {
color: var(--theme-text-secondary);
}
}
}
// Responsive theme adjustments
// ========================================
@media (prefers-color-scheme: dark) {
:root:not([data-theme]) {
--theme-background: #111827;
--theme-surface: #1f2937;
--theme-text: #f9fafb;
--theme-text-secondary: #d1d5db;
}
}
// Print styles
// ========================================
@media print {
:root {
--theme-background: white;
--theme-surface: white;
--theme-text: black;
--theme-text-secondary: #666;
--theme-shadow: none;
}
}