Apply glass utility class to form fields and buttons

Use .glass class on form fields and buttons on gradient backgrounds.
Buttons get gradient glow border via background-clip trick. Solid
white fallback preserved for BottomSheet context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-09 18:47:57 +01:00
parent 019ead7be3
commit 64816558c1
3 changed files with 31 additions and 17 deletions

View File

@@ -117,21 +117,24 @@ body::before {
/* Card-style form fields */ /* Card-style form fields */
.form-field { .form-field {
background: var(--color-card); background: var(--color-card);
border: none; border: 1px solid #e0e0e0;
border-radius: var(--radius-card); border-radius: var(--radius-card);
padding: var(--spacing-md) var(--spacing-md); padding: var(--spacing-md) var(--spacing-md);
box-shadow: var(--shadow-card);
width: 100%; width: 100%;
font-family: inherit; font-family: inherit;
font-size: 0.95rem; font-size: 0.95rem;
font-weight: 400; font-weight: 400;
color: var(--color-text); color: var(--color-text);
outline: none; outline: none;
transition: box-shadow 0.2s ease; transition: border-color 0.2s ease;
}
.form-field.glass {
color: var(--color-text-on-gradient);
} }
.form-field:focus { .form-field:focus {
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.18); border-color: var(--color-glass-border-hover);
} }
.form-field::placeholder { .form-field::placeholder {
@@ -139,6 +142,10 @@ body::before {
font-weight: 400; font-weight: 400;
} }
.form-field.glass::placeholder {
color: var(--color-text-muted);
}
textarea.form-field { textarea.form-field {
resize: vertical; resize: vertical;
min-height: 5rem; min-height: 5rem;
@@ -163,22 +170,29 @@ textarea.form-field {
display: block; display: block;
width: 100%; width: 100%;
padding: var(--spacing-md) var(--spacing-lg); padding: var(--spacing-md) var(--spacing-lg);
background: var(--color-accent); background: var(--color-card);
color: var(--color-text); color: var(--color-text);
border: none; border: 1px solid #e0e0e0;
border-radius: var(--radius-button); border-radius: var(--radius-button);
font-family: inherit; font-family: inherit;
font-size: 1rem; font-size: 1rem;
font-weight: 700; font-weight: 700;
cursor: pointer; cursor: pointer;
box-shadow: var(--shadow-button); transition: border-color 0.2s ease, transform 0.1s ease;
transition: opacity 0.2s ease, transform 0.1s ease;
text-align: center; text-align: center;
text-decoration: none; text-decoration: none;
} }
.btn-primary.glass {
color: var(--color-text-on-gradient);
border: 2px solid transparent;
background:
linear-gradient(var(--color-glass-inner), var(--color-glass-inner)) padding-box,
var(--gradient-glow) border-box;
}
.btn-primary:hover { .btn-primary:hover {
opacity: 0.92; border-color: var(--color-glass-border-hover);
} }
.btn-primary:active { .btn-primary:active {
@@ -222,7 +236,7 @@ textarea.form-field {
-webkit-backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
} }
.glass:hover { .glass:hover:not(input):not(textarea):not(.btn-primary) {
background: var(--color-glass-hover); background: var(--color-glass-hover);
border-color: var(--color-glass-border-hover); border-color: var(--color-glass-border-hover);
} }

View File

@@ -12,7 +12,7 @@
id="title" id="title"
v-model="form.title" v-model="form.title"
type="text" type="text"
class="form-field" class="form-field glass"
required required
maxlength="200" maxlength="200"
placeholder="What's the event?" placeholder="What's the event?"
@@ -27,7 +27,7 @@
<textarea <textarea
id="description" id="description"
v-model="form.description" v-model="form.description"
class="form-field" class="form-field glass"
maxlength="2000" maxlength="2000"
placeholder="Tell people more about it…" placeholder="Tell people more about it…"
:aria-invalid="!!errors.description" :aria-invalid="!!errors.description"
@@ -42,7 +42,7 @@
id="dateTime" id="dateTime"
v-model="form.dateTime" v-model="form.dateTime"
type="datetime-local" type="datetime-local"
class="form-field" class="form-field glass"
required required
:aria-invalid="!!errors.dateTime" :aria-invalid="!!errors.dateTime"
:aria-describedby="errors.dateTime ? 'dateTime-error' : undefined" :aria-describedby="errors.dateTime ? 'dateTime-error' : undefined"
@@ -56,7 +56,7 @@
id="location" id="location"
v-model="form.location" v-model="form.location"
type="text" type="text"
class="form-field" class="form-field glass"
maxlength="500" maxlength="500"
placeholder="Where is it?" placeholder="Where is it?"
:aria-invalid="!!errors.location" :aria-invalid="!!errors.location"
@@ -71,7 +71,7 @@
id="expiryDate" id="expiryDate"
v-model="form.expiryDate" v-model="form.expiryDate"
type="date" type="date"
class="form-field" class="form-field glass"
required required
:min="tomorrow" :min="tomorrow"
:aria-invalid="!!errors.expiryDate" :aria-invalid="!!errors.expiryDate"
@@ -80,7 +80,7 @@
<span v-if="errors.expiryDate" id="expiryDate-error" class="field-error" role="alert">{{ errors.expiryDate }}</span> <span v-if="errors.expiryDate" id="expiryDate-error" class="field-error" role="alert">{{ errors.expiryDate }}</span>
</div> </div>
<button type="submit" class="btn-primary" :disabled="submitting"> <button type="submit" class="btn-primary glass" :disabled="submitting">
{{ submitting ? 'Creating…' : 'Create Event' }} {{ submitting ? 'Creating…' : 'Create Event' }}
</button> </button>

View File

@@ -70,7 +70,7 @@
<!-- Error state --> <!-- Error state -->
<div v-else-if="state === 'error'" class="detail__content detail__content--center" role="alert"> <div v-else-if="state === 'error'" class="detail__content detail__content--center" role="alert">
<p class="detail__message">Something went wrong.</p> <p class="detail__message">Something went wrong.</p>
<button class="btn-primary" type="button" @click="fetchEvent">Retry</button> <button class="btn-primary glass" type="button" @click="fetchEvent">Retry</button>
</div> </div>
</div> </div>