429 lines
11 KiB
CSS
429 lines
11 KiB
CSS
/* Google Fonts - Cairo (Arabic) and Montserrat (English) */
|
|
@import url('https://fonts.googleapis.com/css2?family=Cairo:wght@300;400;600;700&family=Montserrat:wght@300;400;600;700&display=swap');
|
|
|
|
@import 'tailwindcss';
|
|
@import '../../vendor/livewire/flux/dist/flux.css';
|
|
|
|
@source '../views';
|
|
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
|
|
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
|
|
@source '../../vendor/livewire/flux/stubs/**/*.blade.php';
|
|
|
|
@custom-variant dark (&:where(.dark, .dark *));
|
|
|
|
@theme {
|
|
/* Font definitions - to be updated in typography story */
|
|
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
|
--font-arabic: 'Cairo', 'Tajawal', ui-sans-serif, system-ui, sans-serif;
|
|
--font-english: 'Montserrat', 'Lato', ui-sans-serif, system-ui, sans-serif;
|
|
|
|
/* Font Size Scale */
|
|
--font-size-xs: 0.75rem; /* 12px */
|
|
--font-size-sm: 0.875rem; /* 14px - Small text */
|
|
--font-size-base: 1rem; /* 16px - Body text */
|
|
--font-size-lg: 1.125rem; /* 18px */
|
|
--font-size-xl: 1.25rem; /* 20px */
|
|
--font-size-2xl: 1.5rem; /* 24px - H3 */
|
|
--font-size-3xl: 2rem; /* 32px - H2 */
|
|
--font-size-4xl: 2.5rem; /* 40px - H1 */
|
|
|
|
/* Primary Brand Colors */
|
|
--color-navy: #0A1F44;
|
|
--color-gold: #D4AF37;
|
|
|
|
/* Supporting Colors */
|
|
--color-gold-light: #F4E4B8;
|
|
--color-cream: #F9F7F4;
|
|
--color-charcoal: #2C3E50;
|
|
|
|
/* Status Colors */
|
|
--color-success: #27AE60;
|
|
--color-danger: #E74C3C;
|
|
--color-warning: #F39C12;
|
|
|
|
/* Semantic Aliases - used by components */
|
|
--color-primary: var(--color-navy);
|
|
--color-accent: var(--color-gold);
|
|
--color-accent-content: var(--color-gold);
|
|
--color-accent-foreground: var(--color-navy);
|
|
--color-background: var(--color-cream);
|
|
--color-text: var(--color-charcoal);
|
|
}
|
|
|
|
@layer theme {
|
|
.dark {
|
|
--color-accent: var(--color-white);
|
|
--color-accent-content: var(--color-white);
|
|
--color-accent-foreground: var(--color-neutral-800);
|
|
}
|
|
}
|
|
|
|
@layer base {
|
|
|
|
*,
|
|
::after,
|
|
::before,
|
|
::backdrop,
|
|
::file-selector-button {
|
|
border-color: var(--color-gray-200, currentColor);
|
|
}
|
|
}
|
|
|
|
/* ==========================================================================
|
|
Flux UI Form Component Styling (Story 9.5)
|
|
========================================================================== */
|
|
|
|
/* Field wrapper - grid layout with gap */
|
|
[data-flux-field]:not(ui-radio, ui-checkbox) {
|
|
@apply grid gap-2;
|
|
}
|
|
|
|
/* Label styling - semibold weight per specs */
|
|
[data-flux-label] {
|
|
@apply !mb-0 !leading-tight font-semibold text-charcoal;
|
|
}
|
|
|
|
/* Input, Textarea, Select base styling */
|
|
input[data-flux-control],
|
|
textarea[data-flux-control],
|
|
[data-flux-control] input,
|
|
select[data-flux-control],
|
|
[data-flux-select-button] {
|
|
@apply border-charcoal/30 rounded-md transition-colors;
|
|
}
|
|
|
|
/* Focus states - Gold border with subtle ring */
|
|
input:focus[data-flux-control],
|
|
textarea:focus[data-flux-control],
|
|
select:focus[data-flux-control],
|
|
[data-flux-control] input:focus,
|
|
[data-flux-select-button]:focus {
|
|
@apply outline-hidden border-gold ring-2 ring-gold/20;
|
|
}
|
|
|
|
/* Textarea minimum height */
|
|
textarea[data-flux-control] {
|
|
@apply min-h-[120px] resize-y;
|
|
}
|
|
|
|
/* Checkbox styling - gold accent when checked */
|
|
[data-flux-checkbox] input[type="checkbox"],
|
|
input[type="checkbox"][data-flux-control] {
|
|
@apply w-5 h-5 rounded border-charcoal/30 text-gold focus:ring-gold focus:ring-offset-0;
|
|
}
|
|
|
|
/* Radio styling - gold accent when selected */
|
|
[data-flux-radio] input[type="radio"],
|
|
input[type="radio"][data-flux-control] {
|
|
@apply w-5 h-5 border-charcoal/30 text-gold focus:ring-gold focus:ring-offset-0;
|
|
}
|
|
|
|
/* Error state styling for Flux fields */
|
|
[data-flux-field]:has([data-flux-error]) input[data-flux-control],
|
|
[data-flux-field]:has([data-flux-error]) textarea[data-flux-control],
|
|
[data-flux-field]:has([data-flux-error]) select[data-flux-control],
|
|
[data-flux-field]:has([data-flux-error]) [data-flux-select-button] {
|
|
@apply border-danger;
|
|
}
|
|
|
|
[data-flux-field]:has([data-flux-error]) input:focus[data-flux-control],
|
|
[data-flux-field]:has([data-flux-error]) textarea:focus[data-flux-control],
|
|
[data-flux-field]:has([data-flux-error]) select:focus[data-flux-control],
|
|
[data-flux-field]:has([data-flux-error]) [data-flux-select-button]:focus {
|
|
@apply border-danger ring-danger/20;
|
|
}
|
|
|
|
/* Error message styling */
|
|
[data-flux-error] {
|
|
@apply text-sm text-danger mt-1;
|
|
}
|
|
|
|
/* RTL support for Flux components */
|
|
[dir="rtl"] [data-flux-label] {
|
|
@apply text-right;
|
|
}
|
|
|
|
[dir="rtl"] [data-flux-error] {
|
|
@apply text-right;
|
|
}
|
|
|
|
[dir="rtl"] input[data-flux-control],
|
|
[dir="rtl"] textarea[data-flux-control],
|
|
[dir="rtl"] select[data-flux-control] {
|
|
@apply text-right;
|
|
}
|
|
|
|
/* \[:where(&)\]:size-4 {
|
|
@apply size-4;
|
|
} */
|
|
|
|
/* Prose Navy styling for blog posts */
|
|
.prose-navy {
|
|
--tw-prose-headings: var(--color-navy);
|
|
--tw-prose-links: var(--color-gold);
|
|
--tw-prose-bold: var(--color-navy);
|
|
--tw-prose-body: var(--color-charcoal);
|
|
}
|
|
|
|
.prose-navy a {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.prose-navy a:hover {
|
|
color: var(--color-gold-light);
|
|
}
|
|
|
|
/* Dynamic Font Selection based on language */
|
|
html[lang="ar"] body {
|
|
font-family: var(--font-arabic);
|
|
}
|
|
|
|
html[lang="en"] body {
|
|
font-family: var(--font-english);
|
|
}
|
|
|
|
/* Typography Base Styles */
|
|
body {
|
|
font-size: var(--font-size-base);
|
|
line-height: 1.6;
|
|
}
|
|
|
|
h1, h2, h3, h4, h5, h6 {
|
|
line-height: 1.3;
|
|
}
|
|
|
|
h1 {
|
|
font-size: var(--font-size-4xl);
|
|
font-weight: 700;
|
|
}
|
|
|
|
h2 {
|
|
font-size: var(--font-size-3xl);
|
|
font-weight: 600;
|
|
}
|
|
|
|
h3 {
|
|
font-size: var(--font-size-2xl);
|
|
font-weight: 600;
|
|
}
|
|
|
|
small, .text-sm {
|
|
font-size: var(--font-size-sm);
|
|
}
|
|
|
|
/* ==========================================================================
|
|
Button Styling System (Story 9.4)
|
|
========================================================================== */
|
|
|
|
/* Primary button - Gold background with Navy text */
|
|
.btn-primary {
|
|
@apply bg-gold text-navy rounded-md px-6 py-3 font-semibold transition-colors;
|
|
@apply hover:bg-gold-light;
|
|
@apply focus:outline-none focus:ring-2 focus:ring-gold focus:ring-offset-2;
|
|
}
|
|
|
|
/* Secondary button - Outlined with Gold border */
|
|
.btn-secondary {
|
|
@apply bg-transparent border-2 border-gold text-gold rounded-md px-6 py-3 font-semibold transition-colors;
|
|
@apply hover:bg-gold hover:text-navy;
|
|
@apply focus:outline-none focus:ring-2 focus:ring-gold focus:ring-offset-2;
|
|
}
|
|
|
|
/* Danger button - Red background */
|
|
.btn-danger {
|
|
@apply bg-danger text-white rounded-md px-6 py-3 font-semibold transition-colors;
|
|
@apply hover:bg-danger/90;
|
|
@apply focus:outline-none focus:ring-2 focus:ring-danger focus:ring-offset-2;
|
|
}
|
|
|
|
/* Disabled state - applies to all button variants */
|
|
.btn-disabled,
|
|
.btn-primary:disabled,
|
|
.btn-secondary:disabled,
|
|
.btn-danger:disabled,
|
|
button.btn-primary:disabled,
|
|
button.btn-secondary:disabled,
|
|
button.btn-danger:disabled {
|
|
@apply !bg-[#CCCCCC] !text-[#666666] !cursor-not-allowed !border-transparent;
|
|
@apply hover:!bg-[#CCCCCC];
|
|
}
|
|
|
|
/* Size variants */
|
|
.btn-sm {
|
|
@apply px-4 py-2 text-sm;
|
|
}
|
|
|
|
.btn-lg {
|
|
@apply px-8 py-4 text-lg;
|
|
}
|
|
|
|
/* Full width for mobile */
|
|
.btn-full {
|
|
@apply w-full;
|
|
}
|
|
|
|
/* Loading state */
|
|
.btn-loading {
|
|
@apply relative pointer-events-none opacity-75;
|
|
}
|
|
|
|
/* Icon spacing within buttons */
|
|
.btn-icon-left {
|
|
@apply flex items-center gap-2;
|
|
}
|
|
|
|
.btn-icon-right {
|
|
@apply flex items-center gap-2 flex-row-reverse;
|
|
}
|
|
|
|
/* Button groups - adjust border-radius for grouped buttons */
|
|
.btn-group {
|
|
@apply flex;
|
|
}
|
|
|
|
.btn-group > .btn-primary:not(:first-child):not(:last-child),
|
|
.btn-group > .btn-secondary:not(:first-child):not(:last-child),
|
|
.btn-group > .btn-danger:not(:first-child):not(:last-child) {
|
|
@apply rounded-none;
|
|
}
|
|
|
|
.btn-group > .btn-primary:first-child,
|
|
.btn-group > .btn-secondary:first-child,
|
|
.btn-group > .btn-danger:first-child {
|
|
@apply rounded-r-none;
|
|
}
|
|
|
|
.btn-group > .btn-primary:last-child,
|
|
.btn-group > .btn-secondary:last-child,
|
|
.btn-group > .btn-danger:last-child {
|
|
@apply rounded-l-none;
|
|
}
|
|
|
|
/* RTL support for button groups */
|
|
[dir="rtl"] .btn-group > .btn-primary:first-child,
|
|
[dir="rtl"] .btn-group > .btn-secondary:first-child,
|
|
[dir="rtl"] .btn-group > .btn-danger:first-child {
|
|
@apply rounded-l-none rounded-r-md;
|
|
}
|
|
|
|
[dir="rtl"] .btn-group > .btn-primary:last-child,
|
|
[dir="rtl"] .btn-group > .btn-secondary:last-child,
|
|
[dir="rtl"] .btn-group > .btn-danger:last-child {
|
|
@apply rounded-r-none rounded-l-md;
|
|
}
|
|
|
|
/* RTL support for icon buttons */
|
|
[dir="rtl"] .btn-icon-left {
|
|
@apply flex-row-reverse;
|
|
}
|
|
|
|
[dir="rtl"] .btn-icon-right {
|
|
@apply flex-row;
|
|
}
|
|
|
|
/* ==========================================================================
|
|
Form Styling System (Story 9.5)
|
|
========================================================================== */
|
|
|
|
/* Input field styling */
|
|
.input-field {
|
|
@apply w-full border border-charcoal/30 rounded-md px-4 py-3
|
|
focus:border-gold focus:ring-2 focus:ring-gold/20
|
|
transition-colors outline-none bg-white;
|
|
}
|
|
|
|
/* Input error state */
|
|
.input-error {
|
|
@apply border-danger focus:border-danger focus:ring-danger/20;
|
|
}
|
|
|
|
/* Form label styling */
|
|
.form-label {
|
|
@apply block text-sm font-semibold text-charcoal mb-2;
|
|
}
|
|
|
|
/* Required field indicator - for manual class usage */
|
|
.form-label-required::after {
|
|
content: ' *';
|
|
@apply text-danger;
|
|
}
|
|
|
|
/* Required indicator styling for Flux labels with .required class */
|
|
[data-flux-label].required::after {
|
|
content: ' *';
|
|
@apply text-danger;
|
|
}
|
|
|
|
/* Error message styling */
|
|
.error-message {
|
|
@apply text-sm text-danger mt-1;
|
|
}
|
|
|
|
/* Textarea specific styling */
|
|
.textarea-field {
|
|
@apply w-full border border-charcoal/30 rounded-md px-4 py-3
|
|
focus:border-gold focus:ring-2 focus:ring-gold/20
|
|
transition-colors outline-none bg-white
|
|
min-h-[120px] resize-y;
|
|
}
|
|
|
|
/* Select dropdown styling */
|
|
.select-field {
|
|
@apply w-full border border-charcoal/30 rounded-md px-4 py-3
|
|
focus:border-gold focus:ring-2 focus:ring-gold/20
|
|
transition-colors outline-none bg-white;
|
|
}
|
|
|
|
/* Custom checkbox styling */
|
|
.checkbox-custom {
|
|
@apply w-5 h-5 rounded border-charcoal/30 text-gold
|
|
focus:ring-gold focus:ring-offset-0;
|
|
}
|
|
|
|
/* Custom radio styling */
|
|
.radio-custom {
|
|
@apply w-5 h-5 border-charcoal/30 text-gold
|
|
focus:ring-gold focus:ring-offset-0;
|
|
}
|
|
|
|
/* Checkbox/Radio with error state */
|
|
.checkbox-error,
|
|
.radio-error {
|
|
@apply border-danger;
|
|
}
|
|
|
|
/* RTL support for form labels */
|
|
[dir="rtl"] .form-label {
|
|
@apply text-right;
|
|
}
|
|
|
|
/* RTL support for error messages */
|
|
[dir="rtl"] .error-message {
|
|
@apply text-right;
|
|
}
|
|
|
|
/* RTL support for form fields - use logical properties */
|
|
[dir="rtl"] .input-field,
|
|
[dir="rtl"] .textarea-field,
|
|
[dir="rtl"] .select-field {
|
|
@apply text-right;
|
|
}
|
|
|
|
/* ==========================================================================
|
|
Card & Container Styling System (Story 9.6)
|
|
========================================================================== */
|
|
|
|
/* Container max-width - 1200px centered */
|
|
.container-max {
|
|
@apply max-w-[1200px] mx-auto px-4 sm:px-6 lg:px-8;
|
|
}
|
|
|
|
/* Card shadow values */
|
|
.shadow-card {
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.shadow-card-hover {
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
}
|