feat: add initial base pages and mobile-first framework

This commit is contained in:
2026-08-12 12:09:47 +02:00
commit 73d8ee5a8f
8 changed files with 489 additions and 0 deletions
+204
View File
@@ -0,0 +1,204 @@
/* ==========================================================================
Date-Planer Shared mobile-first stylesheet
Base color: love-rose, complemented by warm peach and gold tones.
========================================================================== */
:root {
--color-rose: #e0577e;
--color-rose-dark: #b83a5e;
--color-rose-light: #ffd1dc;
--color-peach: #ffb4a2;
--color-gold: #ffd166;
--color-bg: #fff5f7;
--color-bg-gradient: linear-gradient(160deg, #fff5f7 0%, #ffe8ec 45%, #ffe3d6 100%);
--color-text: #4a2c3d;
--color-text-light: #7a5568;
--color-white: #fffdfd;
--font-heading: "Quicksand", "Segoe UI", sans-serif;
--font-body: "Nunito", "Segoe UI", sans-serif;
--radius-lg: 24px;
--radius-md: 16px;
--shadow-soft: 0 8px 24px rgba(184, 58, 94, 0.2);
--shadow-strong: 0 12px 32px rgba(184, 58, 94, 0.32);
}
* {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
min-height: 100vh;
font-family: var(--font-body);
font-size: clamp(1rem, 3.6vw, 1.15rem);
line-height: 1.5;
color: var(--color-text);
background: var(--color-bg-gradient);
-webkit-font-smoothing: antialiased;
}
h1,
h2,
h3 {
font-family: var(--font-heading);
font-weight: 700;
margin: 0 0 0.5em;
color: var(--color-rose-dark);
}
h1 {
font-size: clamp(1.75rem, 7vw, 2.5rem);
}
p {
margin: 0 0 1em;
}
.container {
width: 100%;
max-width: 480px;
margin: 0 auto;
padding: 24px 20px 40px;
}
/* Buttons -------------------------------------------------------------- */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 56px;
padding: 14px 28px;
border: none;
border-radius: var(--radius-lg);
font-family: var(--font-heading);
font-size: clamp(1.05rem, 4.5vw, 1.25rem);
font-weight: 700;
cursor: pointer;
touch-action: manipulation;
transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.2s ease, opacity 0.2s ease;
}
.btn:active {
transform: scale(0.96);
}
.btn-yes {
background: linear-gradient(135deg, var(--color-rose) 0%, var(--color-rose-dark) 100%);
color: var(--color-white);
box-shadow: var(--shadow-soft);
}
.btn-no {
background: var(--color-white);
color: var(--color-text-light);
box-shadow: var(--shadow-soft);
}
.btn-primary {
width: 100%;
background: linear-gradient(135deg, var(--color-rose) 0%, var(--color-rose-dark) 100%);
color: var(--color-white);
box-shadow: var(--shadow-soft);
}
.btn-primary:disabled {
background: #e6d3d8;
color: #b39aa4;
box-shadow: none;
cursor: not-allowed;
}
/* Heart-shaped decorative background (reused across pages) -------------- */
.heart-background {
position: fixed;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
z-index: 0;
pointer-events: none;
}
.heart-shape {
position: relative;
width: 62vmin;
height: 56vmin;
}
.heart-shape::before,
.heart-shape::after {
content: "";
position: absolute;
top: 0;
width: 31vmin;
height: 50vmin;
background: linear-gradient(135deg, var(--color-rose-light) 0%, var(--color-peach) 100%);
border-radius: 31vmin 31vmin 0 0;
opacity: 0.55;
}
.heart-shape::before {
left: 31vmin;
transform: rotate(45deg);
transform-origin: 0 100%;
}
.heart-shape::after {
left: 0;
transform: rotate(-45deg);
transform-origin: 100% 100%;
}
/* Fixed bottom bar for a primary continue action ------------------------- */
body.has-continue-bar {
padding-bottom: 96px;
}
.continue-bar {
position: fixed;
left: 0;
right: 0;
bottom: 0;
padding: 16px 20px calc(16px + env(safe-area-inset-bottom));
background: linear-gradient(0deg, var(--color-bg) 60%, rgba(255, 245, 247, 0));
}
.continue-bar .container {
padding: 0;
max-width: 480px;
}
/* Back link --------------------------------------------------------------- */
.back-link {
display: inline-flex;
align-items: center;
gap: 4px;
margin-bottom: 12px;
color: var(--color-text-light);
font-family: var(--font-heading);
font-weight: 700;
text-decoration: none;
}
/* Utility ---------------------------------------------------------------- */
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
}