vinindkoeb/admin-ui/src/App.css
carsten 588888cd9e Opgave 11b (del 2): Runder + vinliste
RoundsPage (liste + opret) og RoundDetailPage (/runder/:roundId —
redigér, status-overgange, slet, "kopiér denne runde", nestet
vinliste-CRUD). Ingen backend-ændringer nødvendige, al CRUD fandtes
allerede (opgave 6). 409-fejl fra rundens dato-constraint vises
direkte som API'ets fejlbesked i stedet for at duplikere reglen i
frontend.

To fund fra brugertest, begge rettet:
1. Åbningsdato og bestillingsfrist krævede et tidspunkt
   (datetime-local) uden reelt behov — skiftet til rene datofelter
   (dateUtils.ts). Afhentningstidspunktet beholder klokkeslæt.
2. Kun kladde-runder kunne slettes fra UI'et. Lukkede runder kan nu
   også slettes, når eleveret — samme elevations-mønster som
   deltager-hård-sletning i del 1 (elevatedToken fra AuthContext).
   Åbne runder kan fortsat aldrig slettes (håndhævet server-side).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 01:59:46 +02:00

166 lines
2.2 KiB
CSS

.login-card {
max-width: 360px;
margin: 10vh auto;
padding: 24px;
border: 1px solid #ddd;
border-radius: 8px;
}
.login-card h1 {
font-size: 1.2rem;
margin: 0 0 16px;
}
.login-card form label {
display: block;
font-weight: 600;
margin: 12px 0 4px;
}
.login-card form input {
display: block;
width: 100%;
padding: 8px;
font-size: 1rem;
box-sizing: border-box;
}
.login-card button {
width: 100%;
margin-top: 16px;
padding: 10px;
font-size: 1rem;
cursor: pointer;
}
.login-card .error {
color: #b3261e;
margin-top: 12px;
}
.navbar {
background: #1a1a1a;
color: #fff;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
padding: 16px 24px;
}
.navbar-brand {
font-weight: 600;
}
.navbar-links {
display: flex;
align-items: center;
gap: 16px;
}
.navbar-links a {
color: #fff;
text-decoration: none;
}
.navbar-links a.active {
text-decoration: underline;
}
.navbar-user {
color: #bbb;
font-size: 0.9rem;
}
.elevated-badge {
color: #7fd88f;
font-size: 0.9rem;
}
.hint {
color: #666;
font-size: 0.9rem;
font-style: italic;
}
.link-button {
background: none;
border: none;
color: #fff;
text-decoration: underline;
cursor: pointer;
font-size: 1rem;
padding: 0;
}
.content {
max-width: 900px;
margin: 0 auto;
padding: 24px;
}
.content .error {
color: #b3261e;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 16px;
}
th,
td {
text-align: left;
padding: 6px 8px;
border-bottom: 1px solid #eee;
}
.inline-form {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
margin: 12px 0;
}
.inline-form input {
padding: 6px;
}
.inline-form button {
padding: 6px 12px;
cursor: pointer;
}
.stacked-form {
max-width: 480px;
margin: 16px 0;
}
.stacked-form label {
display: block;
font-weight: 600;
margin: 12px 0 4px;
}
.stacked-form input,
.stacked-form select,
.stacked-form textarea {
display: block;
width: 100%;
padding: 8px;
font-size: 1rem;
box-sizing: border-box;
font-family: inherit;
}
.stacked-form textarea {
min-height: 80px;
}
.stacked-form button {
margin: 16px 8px 0 0;
padding: 8px 16px;
cursor: pointer;
}