diff --git a/app/app.vue b/app/app.vue index 2b1be09..84cd848 100644 --- a/app/app.vue +++ b/app/app.vue @@ -3,3 +3,18 @@ + + diff --git a/app/components/ui/button/index.ts b/app/components/ui/button/index.ts index bddebae..300e7b8 100644 --- a/app/components/ui/button/index.ts +++ b/app/components/ui/button/index.ts @@ -9,20 +9,20 @@ export const buttonVariants = cva( variants: { variant: { default: 'btn-experimenta', - destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 rounded-md', - outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground rounded-md', - secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 rounded-md', - ghost: 'hover:bg-accent hover:text-accent-foreground rounded-md', + destructive: 'btn-destructive', + outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground rounded-[25px]', + secondary: 'btn-secondary', + ghost: 'hover:bg-accent hover:text-accent-foreground rounded-[25px]', link: 'text-primary underline-offset-4 hover:underline', experimenta: 'btn-experimenta', }, size: { default: 'px-[30px] py-[10px] text-lg leading-[1.7em]', - sm: 'h-9 rounded-md px-3', - lg: 'h-11 rounded-md px-8', - icon: 'h-10 w-10', - 'icon-sm': 'size-9', - 'icon-lg': 'size-11', + sm: 'h-9 rounded-[25px] px-3', + lg: 'h-11 rounded-[25px] px-8', + icon: 'h-10 w-10 rounded-[25px]', + 'icon-sm': 'size-9 rounded-[25px]', + 'icon-lg': 'size-11 rounded-[25px]', experimenta: 'px-[30px] py-[10px] text-lg leading-[1.7em]', }, }, diff --git a/app/pages/index.vue b/app/pages/index.vue index 7772b24..802bd49 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -20,6 +20,18 @@ const handleClick = () => {

+ +
+
+

Verlängerungsfortschritt

+
2963 / 4931
+
+
+
+
60.1%
+
+
+

experimenta Button

diff --git a/assets/css/tailwind.css b/assets/css/tailwind.css index 4c3cb86..6945652 100644 --- a/assets/css/tailwind.css +++ b/assets/css/tailwind.css @@ -12,6 +12,33 @@ @tailwind components; @tailwind utilities; +/* ======================================== + FONT FACE DECLARATIONS (Roboto - Local) + ======================================== */ + +/** + * Roboto Variable Font - Local Hosting + * + * Font files are hosted locally for DSGVO compliance and better performance. + * This variable font supports all weights from 100-900. + * + * Format: WOFF2 (best compression, modern browsers) + * Coverage: Latin characters + * File location: /public/fonts/roboto/Roboto-VariableFont-latin.woff2 + */ + +/* Roboto Variable Font - Normal Style (Latin) */ +/* Supports all weights from 100-900 (including 300, 400, 500, 700 that we use) */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100 900; + font-stretch: 100%; + font-display: block; + src: url('/fonts/roboto/Roboto-VariableFont-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + /* ======================================== CSS CUSTOM PROPERTIES ======================================== */ @@ -243,15 +270,45 @@ } } + /* Secondary Button (White Border) */ .btn-secondary { - @apply bg-transparent border-2 border-accent text-accent; - @apply px-8 py-2.5 rounded-2xl; - @apply text-lg font-medium; - @apply transition-all duration-300; + @apply inline-block relative; + @apply px-[30px] py-[10px]; + @apply text-lg font-medium text-white; + @apply rounded-[25px]; + @apply cursor-pointer; + @apply bg-transparent; + @apply border-2 border-white/30; + @apply outline-0; + @apply no-underline; + line-height: 1.7em; + transition: all 0.3s ease; } .btn-secondary:hover { - @apply bg-accent text-white; + @apply bg-white text-purple-darkest; + @apply border-white; + } + + /* Destructive Button (EXP Signalorange - Warning/Danger Actions) */ + .btn-destructive { + @apply inline-block relative; + @apply px-[30px] py-[10px]; + @apply text-lg font-medium text-white; + @apply rounded-[25px]; + @apply cursor-pointer; + @apply border-0 outline-0; + @apply no-underline; + background: #ea5b0c; + background-image: linear-gradient(to left, #ea5b0c, #ea5b0c, #c7490a, #ea5b0c); + background-size: 300%; + background-position: 0%; + line-height: 1.7em; + transition: background-position 1s, all 0.3s ease; + } + + .btn-destructive:hover { + background-position: 100%; } /* Cards */ @@ -280,6 +337,76 @@ @apply text-accent font-medium mb-4; } + /* Progress Card - with Safrangold accent border */ + .card-progress { + background: rgba(255, 255, 255, 0.08); + @apply rounded-2xl md:rounded-lg; + @apply p-8 md:p-6 sm:p-5; + } + + /* Accent Border (Left) - Safrangold (#f59d24) */ + .card-accent-border { + border-left: 6px solid #f59d24; + @apply rounded-l-lg; + } + + /* Progress Bar Components */ + .card-progress .progress-header { + @apply flex justify-between items-center mb-5 flex-wrap gap-2; + } + + .card-progress .progress-title { + @apply text-xl font-medium m-0; + color: #f59d24; + font-size: 20px; + } + + .card-progress .progress-stats { + @apply text-lg font-normal; + color: rgba(255, 255, 255, 0.9); + } + + .card-progress .progress-bar-wrapper { + @apply relative w-full; + height: 50px; + background: rgba(255, 255, 255, 0.1); + border-radius: 25px; + overflow: hidden; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .card-progress .progress-bar { + height: 100%; + background: linear-gradient(90deg, #46c74a 0%, #66d96a 50%, #46c74a 100%); + border-radius: 25px; + @apply transition-all duration-300; + position: relative; + background-size: 200% 100%; + animation: shimmer 3s ease-in-out infinite; + } + + @keyframes shimmer { + 0% { + background-position: -200% 0; + } + 100% { + background-position: 200% 0; + } + } + + .card-progress .progress-percentage { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 20px; + @apply font-semibold text-white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.7); + z-index: 2; + width: 100%; + text-align: center; + } + .card-info p { @apply text-white/90; } diff --git a/docs/design-examples/components/ExperimentaCard.vue b/docs/design-examples/components/ExperimentaCard.vue index 8b9401d..9a8cdcc 100644 --- a/docs/design-examples/components/ExperimentaCard.vue +++ b/docs/design-examples/components/ExperimentaCard.vue @@ -89,9 +89,10 @@ withDefaults(defineProps(), { @apply rounded-2xl md:rounded-lg; } -/* Accent Border (Left) */ +/* Accent Border (Left) - Safrangold (#f59d24) */ .card-accent-border { - @apply border-l-4 border-accent; + border-left: 6px solid #f59d24; + @apply rounded-l-lg; } /* Card Title */