managarten/packages/shared-tailwind/src/components.css
Till-JS ef70a1af0b Commit Message feat: implement comprehensive shared packages architecture for monorepo SUMMARY: Introduce 10 shared packages to unify common code across all 4 web apps, reducing ~3,000 lines of duplicated code and establishing consistent patterns for authentication, UI components, theming, and utilities. NEW SHARED PACKAGES: - @manacore/shared-auth: Unified auth logic (token management, JWT utils, fetch interceptor, storage/device/network adapters) - @manacore/shared-auth-ui: Reusable auth UI (LoginPage, RegisterPage, OAuth buttons for Google/Apple) - @manacore/shared-tailwind: Unified Tailwind config with 4 themes (lume, nature, stone, ocean) and light/dark mode support - @manacore/shared-icons: Phosphor-based icon library (40+ icons) - @manacore/shared-ui: Atomic design system (Text, Button, Badge, Toggle, Input, Modal) - @manacore/shared-i18n: Unified i18n setup with locale detection - @manacore/shared-config: Environment validation with Zod - @manacore/shared-subscriptio n-types: Subscription type definitions - @manacore/shared-subscriptio n-ui: Subscription UI components (planned) EXTENDED PACKAGES: - @manacore/shared-types: Added auth.ts, theme.ts, ui.ts, common.ts - @manacore/shared-utils: Added format.ts, validation.ts APP MIGRATIONS: - memoro/web: Migrated login (549→46 LOC), tailwind (165→12 LOC), removed 15+ duplicate components - manacore/web: Migrated to client-side auth with shared-auth, added new components (Icon, ThemeToggle, Logo) - manadeck/web: Replaced local authService/tokenManager with shared-auth, migrated auth pages - maerchenzauber/web: Added auth setup, stores, components, routes DELETED FILES (migrated to shared packages): - OAuth buttons (Google/Apple) from memoro, manacore, manadeck - Local authService, tokenManager, deviceManager, jwt utils - Duplicate Modal, Toggle, Text components - iconPaths and ManaIcon components - Subscription-related components (CostCard, PackageCard, etc.) BENEFITS: - 92% reduction in login page code - 93% reduction in tailwind config code - Consistent theming across all apps - Single source of truth for auth logic - Easier maintenance and updates BREAKING CHANGES: - Icon imports now from @manacore/shared-icons - Modal imports from @manacore/shared-ui - OAuth config via setGoogleCl ientId()/setAppleConfig()
2025-11-24 21:09:20 +01:00

236 lines
4.8 KiB
CSS

/* Shared Component Styles for Manacore Apps
* Import this in your app.css: @import '@manacore/shared-tailwind/components.css';
*
* Requires theme-variables.css to be imported first for CSS variable support
*/
body {
margin: 0;
font-family: var(--font-body);
}
html {
margin: 0;
padding: 0;
}
@layer base {
h1 {
@apply text-3xl font-bold;
color: var(--color-text);
}
h2 {
@apply text-2xl font-semibold;
color: var(--color-text);
}
h3 {
@apply text-xl font-semibold;
color: var(--color-text);
}
}
@layer components {
.btn-primary {
@apply rounded-lg px-4 py-2 font-semibold transition-colors;
background-color: var(--color-primary-button);
color: var(--color-primary-button-text);
}
.btn-primary:hover {
opacity: 0.9;
}
.btn-secondary {
@apply rounded-lg px-4 py-2 font-semibold transition-colors;
background-color: var(--color-secondary-button);
color: var(--color-text);
border: 1px solid var(--color-border);
}
.btn-secondary:hover {
background-color: var(--color-content-bg-hover);
}
.btn-danger {
@apply rounded-lg px-4 py-2 font-semibold transition-colors;
background-color: var(--color-error);
color: #ffffff;
}
.btn-danger:hover {
opacity: 0.9;
}
.input-field {
@apply w-full rounded-lg px-4 py-2 transition-colors;
background-color: var(--color-content-bg);
color: var(--color-text);
border: 1px solid var(--color-border);
}
.input-field:focus {
outline: none;
border-color: var(--color-primary);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 20%, transparent);
}
.card {
@apply rounded-lg p-6 shadow-sm;
background-color: var(--color-content-bg);
color: var(--color-text);
}
/* Header & Navigation */
.header-style {
background-color: var(--color-menu-bg);
border-bottom: 1px solid var(--color-border);
}
.logo-text {
@apply text-2xl font-bold;
color: var(--color-primary);
}
.nav-link {
@apply transition-colors;
color: var(--color-text);
}
.nav-link:hover {
color: var(--color-primary);
}
.user-email {
@apply text-sm;
color: var(--color-text);
opacity: 0.7;
}
/* Main Content Area */
.main-content {
background-color: var(--color-page-bg);
}
/* Selected/Active State */
.bg-selected {
background-color: color-mix(in srgb, var(--color-primary) 10%, transparent);
}
/* Status Badge Colors */
.status-completed {
background-color: rgba(76, 175, 80, 0.15);
color: #4caf50;
}
.status-processing {
background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
color: var(--color-primary);
}
.status-failed {
background-color: color-mix(in srgb, var(--color-error) 15%, transparent);
color: var(--color-error);
}
.status-default {
background-color: color-mix(in srgb, var(--color-text) 10%, transparent);
color: var(--color-text);
}
/* Info/Alert Boxes */
.info-box {
background-color: color-mix(in srgb, var(--color-primary) 10%, transparent);
border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
}
/* Loading Spinner */
.spinner-border {
border-color: var(--color-primary);
}
/* Focus Ring */
.focus\:ring-primary:focus {
--tw-ring-color: var(--color-primary);
}
.focus\:ring-2:focus {
box-shadow: 0 0 0 2px var(--tw-ring-color, var(--color-primary));
}
}
@layer utilities {
/* Theme Color Utilities - in utilities layer for @apply support */
.bg-content {
background-color: var(--color-content-bg);
}
.bg-content-hover {
background-color: var(--color-content-bg-hover);
}
.hover\:bg-content-hover:hover {
background-color: var(--color-content-bg-hover);
}
.bg-menu {
background-color: var(--color-menu-bg);
}
.bg-menu-hover {
background-color: var(--color-menu-bg-hover);
}
.hover\:bg-menu-hover:hover {
background-color: var(--color-menu-bg-hover);
}
.bg-panel {
background-color: var(--color-panel-bg);
}
.bg-page {
background-color: var(--color-page-bg);
}
.border-theme {
border-color: var(--color-border);
}
.border-theme-light {
border-color: var(--color-border-light);
}
.text-theme {
color: var(--color-text);
}
.text-theme-secondary {
color: var(--color-text);
opacity: 0.6;
}
.text-theme-muted {
color: var(--color-text);
opacity: 0.4;
}
.text-primary {
color: var(--color-primary);
}
.bg-primary {
background-color: var(--color-primary);
}
.bg-primary-button {
background-color: var(--color-primary-button);
}
.text-primary-button-text {
color: var(--color-primary-button-text);
}
.bg-secondary-button {
background-color: var(--color-secondary-button);
}
}