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>
166 lines
2.2 KiB
CSS
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;
|
|
}
|