Mobile traffic was breaking on narrow viewports because the header nav overflowed and several pages used desktop-only spacing. This adds a shared phone breakpoint, a hamburger menu, and scroll-to-top on route changes so footer and menu navigation always land at the top of the page. - Add --page-gutter and max-width 639px rules in base.css - AppHeader: hamburger panel on small screens; flat account links on mobile - AppFooter: stack footer links vertically on phones - Home, compose, edit order, orders, auth, and legal pages: tighter gutters and responsive layout (orders card actions stack; home grids single-column) - Router scrollBehavior: scroll to top on navigation; restore on browser back - Tests: AppHeader menu toggle, Router scrollBehavior, mobile Playwright checks Admin page is intentionally unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
238 lines
5.6 KiB
Vue
238 lines
5.6 KiB
Vue
<script setup lang="ts">
|
|
const contactChannels = [
|
|
{
|
|
variant: 'support',
|
|
title: 'Support',
|
|
description:
|
|
'Beställningar, betalning via Swish, tekniska problem eller frågor om status och spårning.',
|
|
email: 'support@bilhej.se',
|
|
label: 'Skicka till support',
|
|
},
|
|
{
|
|
variant: 'general',
|
|
title: 'Allmän kontakt',
|
|
description:
|
|
'Övriga frågor om tjänsten, synpunkter som inte är klagomål, eller om du är osäker på vilken adress du ska använda.',
|
|
email: 'kontakt@bilhej.se',
|
|
label: 'Skicka e-post',
|
|
},
|
|
{
|
|
variant: 'complaints',
|
|
title: 'Klagomål',
|
|
description:
|
|
'Om något gått fel eller du vill lämna ett klagomål direkt till oss som driver tjänsten.',
|
|
email: 'klagomal@bilhej.se',
|
|
label: 'Skicka klagomål',
|
|
},
|
|
]
|
|
</script>
|
|
|
|
<template>
|
|
<div class="contact">
|
|
<section class="contact__hero">
|
|
<p class="contact__eyebrow">Kontakt</p>
|
|
<h1 class="contact__title">Kontakta oss</h1>
|
|
<p class="contact__lead">
|
|
Vi svarar så snart vi kan. Använd support för beställningar och tekniska
|
|
frågor, kontakt för övrigt, eller klagomål-adressen om något gått fel.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="contact__section">
|
|
<div class="contact__cards">
|
|
<article
|
|
v-for="channel in contactChannels"
|
|
:key="channel.email"
|
|
class="contact__card"
|
|
:class="`contact__card--${channel.variant}`"
|
|
>
|
|
<h2>{{ channel.title }}</h2>
|
|
<p>{{ channel.description }}</p>
|
|
<a
|
|
class="contact__mailto"
|
|
:href="`mailto:${channel.email}`"
|
|
:aria-label="`${channel.label}: ${channel.email}`"
|
|
>
|
|
{{ channel.email }}
|
|
</a>
|
|
</article>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="contact__section">
|
|
<div class="contact__tips">
|
|
<h2 class="contact__tips-title">Innan du skriver</h2>
|
|
<ul class="contact__tips-list">
|
|
<li>
|
|
Har du en pågående beställning? Kontrollera
|
|
<strong>Mina beställningar</strong> först. Där ser du status och
|
|
spårning.
|
|
</li>
|
|
<li>
|
|
Vid klagomål, skriv gärna med beställnings-ID och
|
|
registreringsnummer så kan vi hitta ärendet snabbare.
|
|
</li>
|
|
<li>
|
|
Vi läser all e-post manuellt och återkommer när vi har tittat på
|
|
ditt ärende.
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.contact {
|
|
max-width: 48rem;
|
|
margin: 0 auto;
|
|
padding: clamp(var(--space-xl), 6vw, var(--space-3xl)) var(--page-gutter);
|
|
}
|
|
|
|
.contact__hero {
|
|
margin-bottom: var(--space-2xl);
|
|
padding: var(--space-2xl);
|
|
background: linear-gradient(
|
|
145deg,
|
|
var(--color-surface) 0%,
|
|
#f8faff 55%,
|
|
var(--color-paper) 100%
|
|
);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-xl);
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.contact__eyebrow {
|
|
display: inline-block;
|
|
margin: 0 0 var(--space-md) 0;
|
|
font-size: 0.8125rem;
|
|
font-weight: 600;
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
color: var(--color-primary-dark);
|
|
background: var(--color-primary-soft);
|
|
border: 1px solid #bfdbfe;
|
|
padding: 0.35rem 0.75rem;
|
|
border-radius: var(--radius-full);
|
|
}
|
|
|
|
.contact__title {
|
|
margin: 0 0 var(--space-md) 0;
|
|
font-size: clamp(1.75rem, 4vw, 2.25rem);
|
|
font-weight: 800;
|
|
letter-spacing: -0.02em;
|
|
color: var(--color-ink);
|
|
}
|
|
|
|
.contact__lead {
|
|
margin: 0;
|
|
font-size: 1.0625rem;
|
|
line-height: 1.75;
|
|
color: var(--color-muted);
|
|
}
|
|
|
|
.contact__section {
|
|
margin-bottom: var(--space-2xl);
|
|
}
|
|
|
|
.contact__cards {
|
|
display: grid;
|
|
gap: var(--space-lg);
|
|
}
|
|
|
|
.contact__card {
|
|
position: relative;
|
|
overflow: hidden;
|
|
background: var(--color-surface);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-xl);
|
|
padding: var(--space-xl);
|
|
box-shadow: var(--shadow-card);
|
|
}
|
|
|
|
.contact__card::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
height: 4px;
|
|
background: var(--contact-accent);
|
|
}
|
|
|
|
.contact__card--support {
|
|
--contact-accent: linear-gradient(90deg, #0f766e, #2dd4bf);
|
|
}
|
|
|
|
.contact__card--general {
|
|
--contact-accent: linear-gradient(90deg, #1d4ed8, #60a5fa);
|
|
}
|
|
|
|
.contact__card--complaints {
|
|
--contact-accent: linear-gradient(90deg, #4338ca, #818cf8);
|
|
}
|
|
|
|
.contact__card h2 {
|
|
margin: 0 0 var(--space-sm) 0;
|
|
font-size: 1.125rem;
|
|
color: var(--color-ink);
|
|
}
|
|
|
|
.contact__card p {
|
|
margin: 0 0 var(--space-md) 0;
|
|
font-size: 0.9375rem;
|
|
line-height: 1.65;
|
|
color: var(--color-muted);
|
|
}
|
|
|
|
.contact__mailto {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 0.65rem 1rem;
|
|
font-family: var(--font-sans);
|
|
font-size: 1rem;
|
|
font-weight: 600;
|
|
color: var(--color-primary-dark);
|
|
background: var(--color-primary-soft);
|
|
border: 1px solid #bfdbfe;
|
|
border-radius: var(--radius-md);
|
|
transition:
|
|
background var(--transition-fast),
|
|
border-color var(--transition-fast);
|
|
}
|
|
|
|
.contact__mailto:hover {
|
|
background: #dbeafe;
|
|
border-color: #93c5fd;
|
|
color: var(--color-primary-dark);
|
|
}
|
|
|
|
.contact__tips {
|
|
padding: var(--space-xl);
|
|
background: var(--color-border-light);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-xl);
|
|
}
|
|
|
|
.contact__tips-title {
|
|
margin: 0 0 var(--space-md) 0;
|
|
font-size: 1.0625rem;
|
|
color: var(--color-ink);
|
|
}
|
|
|
|
.contact__tips-list {
|
|
margin: 0;
|
|
padding-left: 1.25rem;
|
|
color: var(--color-muted);
|
|
}
|
|
|
|
.contact__tips-list li + li {
|
|
margin-top: var(--space-sm);
|
|
}
|
|
|
|
.contact__tips-list li {
|
|
font-size: 0.9375rem;
|
|
line-height: 1.65;
|
|
}
|
|
</style>
|