Merge main: Guidad Felsökning flyttar ur roten till felsokning/
Main är sedan den här grenen skapades en helt annan produkt — Semantika,
en mobilapp med egen CDK-infrastruktur. Den äger nu repots rot: en
npm-workspaces-monorepo med apps/mobile, services/api och infra.
För att båda ska rymmas i samma repo flyttar Guidad Felsökning in i en
egen katalog i stället för att göra anspråk på roten:
felsokning/app webbklienten (Vite, egen package.json och
eslint-/vitest-konfiguration)
felsokning/services plattformstjänsten och AI-orkestern
felsokning/infra Terraform och databasschemat
felsokning/docs vision, moduler, drift
felsokning/supabase edge-funktion och migrationer
Merge:n hade tagit bort 128 filer som Guidad Felsökning bygger på —
värdapplikationens komponenter, Supabase-klienten, tillgångar — eftersom
main raderat dem och den här grenen inte råkat ändra just dem. De är
återställda på sin nya plats. Utan dem gick varken bygget eller
testerna: ai.ts och synk.ts importerar Supabase-klienten.
Semantikas rotfiler är orörda: package.json, eslint.config.js och
.github/workflows/ är deras. Guidad Felsökning har egna motsvarigheter i
sin katalog.
CI flyttar samtidigt från GitHub Actions till .gitea/workflows — samma
syntax, egna runners. .github/workflows/ tillhör Semantika härefter.
Verifierat på den nya platsen: 96 vitest-tester, typkontroll, eslint på
både klient och tjänster, bygge, och integrationstest mot riktig Postgres.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
/* Lennart Svenssons Konditorivaror - Traditionell Svensk Konditoristil */
|
||||
|
||||
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500&family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400&display=swap');
|
||||
|
||||
@layer base {
|
||||
:root {
|
||||
--background: 38 25% 96%;
|
||||
--foreground: 25 30% 12%;
|
||||
|
||||
--card: 40 30% 94%;
|
||||
--card-foreground: 25 30% 12%;
|
||||
|
||||
--popover: 40 30% 94%;
|
||||
--popover-foreground: 25 30% 12%;
|
||||
|
||||
--primary: 4 70% 45%;
|
||||
--primary-foreground: 40 30% 96%;
|
||||
|
||||
--secondary: 35 20% 88%;
|
||||
--secondary-foreground: 25 30% 18%;
|
||||
|
||||
--muted: 35 15% 85%;
|
||||
--muted-foreground: 0 0% 0%;
|
||||
|
||||
--accent: 4 70% 45%;
|
||||
--accent-foreground: 40 30% 96%;
|
||||
|
||||
--destructive: 4 70% 40%;
|
||||
--destructive-foreground: 40 30% 96%;
|
||||
|
||||
--border: 30 20% 80%;
|
||||
--input: 30 20% 80%;
|
||||
--ring: 4 70% 45%;
|
||||
|
||||
--radius: 0.25rem;
|
||||
|
||||
/* Custom tokens */
|
||||
--gradient-warm: linear-gradient(180deg, hsl(40 30% 94%) 0%, hsl(35 25% 90%) 100%);
|
||||
--shadow-classic: 0 4px 20px -4px hsl(25 30% 12% / 0.15);
|
||||
--shadow-card: 0 2px 8px hsl(25 30% 12% / 0.08);
|
||||
|
||||
--font-display: 'Cormorant Garamond', serif;
|
||||
--font-body: 'Crimson Text', serif;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: 25 20% 8%;
|
||||
--foreground: 38 25% 92%;
|
||||
--card: 25 18% 12%;
|
||||
--card-foreground: 38 25% 92%;
|
||||
--primary: 30 50% 55%;
|
||||
--primary-foreground: 25 20% 8%;
|
||||
--secondary: 25 15% 18%;
|
||||
--secondary-foreground: 38 25% 92%;
|
||||
--muted: 25 12% 22%;
|
||||
--muted-foreground: 30 15% 60%;
|
||||
--border: 25 15% 25%;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
scrollbar-width: none; /* Firefox */
|
||||
-ms-overflow-style: none; /* IE/Edge */
|
||||
}
|
||||
|
||||
html::-webkit-scrollbar {
|
||||
display: none; /* Chrome, Safari, Opera */
|
||||
}
|
||||
|
||||
body {
|
||||
@apply bg-background text-foreground antialiased;
|
||||
font-family: var(--font-body);
|
||||
}
|
||||
|
||||
/* Ensure full-width layout (avoid template max-width/padding on #root) */
|
||||
#root {
|
||||
max-width: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-display);
|
||||
}
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.hero-gradient {
|
||||
background: var(--gradient-warm);
|
||||
}
|
||||
|
||||
.text-accent-warm {
|
||||
color: hsl(var(--accent));
|
||||
}
|
||||
|
||||
.card-classic {
|
||||
box-shadow: var(--shadow-card);
|
||||
border: 1px solid hsl(var(--border));
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.card-classic:hover {
|
||||
box-shadow: var(--shadow-classic);
|
||||
transform: translateY(-4px);
|
||||
}
|
||||
|
||||
.btn-classic {
|
||||
@apply bg-primary text-primary-foreground font-semibold transition-all duration-300;
|
||||
border: 2px solid hsl(var(--primary));
|
||||
}
|
||||
|
||||
.btn-classic:hover {
|
||||
@apply bg-transparent;
|
||||
color: hsl(var(--primary));
|
||||
}
|
||||
|
||||
.btn-outline-classic {
|
||||
@apply bg-transparent font-semibold transition-all duration-300;
|
||||
color: hsl(var(--primary));
|
||||
border: 2px solid hsl(var(--primary));
|
||||
}
|
||||
|
||||
.btn-outline-classic:hover {
|
||||
@apply bg-primary text-primary-foreground;
|
||||
}
|
||||
|
||||
.divider-ornament {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.divider-ornament::before,
|
||||
.divider-ornament::after {
|
||||
content: '';
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
background: linear-gradient(90deg, transparent, hsl(var(--border)), transparent);
|
||||
}
|
||||
|
||||
.ornament {
|
||||
color: hsl(var(--primary));
|
||||
font-family: var(--font-display);
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@layer utilities {
|
||||
.animate-fade-up {
|
||||
animation: fadeUp 0.8s ease-out forwards;
|
||||
}
|
||||
|
||||
@keyframes fadeUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.text-balance {
|
||||
text-wrap: balance;
|
||||
}
|
||||
|
||||
/* Calculator slider — minimal, exclusive */
|
||||
.calculator-slider {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
height: 4px;
|
||||
background: hsl(var(--border));
|
||||
border-radius: 999px;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
.calculator-slider:hover {
|
||||
background: hsl(var(--muted));
|
||||
}
|
||||
.calculator-slider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
border-radius: 50%;
|
||||
background: hsl(var(--primary));
|
||||
border: 3px solid hsl(var(--card));
|
||||
box-shadow: 0 2px 10px hsl(var(--primary) / 0.35);
|
||||
cursor: grab;
|
||||
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
||||
}
|
||||
.calculator-slider::-webkit-slider-thumb:hover {
|
||||
transform: scale(1.1);
|
||||
box-shadow: 0 4px 16px hsl(var(--primary) / 0.5);
|
||||
}
|
||||
.calculator-slider::-webkit-slider-thumb:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
.calculator-slider::-moz-range-thumb {
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
border-radius: 50%;
|
||||
background: hsl(var(--primary));
|
||||
border: 3px solid hsl(var(--card));
|
||||
box-shadow: 0 2px 10px hsl(var(--primary) / 0.35);
|
||||
cursor: grab;
|
||||
}
|
||||
}
|
||||
|
||||
/* Guidad Felsökning: utskriftsvänlig kundrapport — mörkt arbetsläge på
|
||||
skärm, svart på vitt på papper. Interaktiva element döljs vid utskrift. */
|
||||
@media print {
|
||||
.felsokning-print,
|
||||
.felsokning-print * {
|
||||
background: #fff !important;
|
||||
color: #111 !important;
|
||||
border-color: #d4d4d8 !important;
|
||||
animation: none !important;
|
||||
}
|
||||
.felsokning-print nav,
|
||||
.felsokning-print button,
|
||||
.felsokning-print input,
|
||||
.felsokning-print textarea {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user