feat(web): implement weapons section with add/edit/detail modals and notes

Adds WeaponCard with inline ammo stepper and status dropdown, AddWeaponModal,
WeaponDetailModal with full editing, and debounced NotesSection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Bas van Rossem
2026-02-19 16:26:47 +01:00
parent 88e9bf7f05
commit 1ef2f6338c
7 changed files with 499 additions and 2 deletions

View File

@@ -380,3 +380,99 @@ button:disabled {
height: 36px;
padding: var(--spacing-xs) var(--spacing-sm);
}
/* Section header with inline button */
.section-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--spacing-sm);
border-bottom: 1px solid var(--color-border);
padding-bottom: var(--spacing-xs);
}
.section-header .section-title {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.btn-sm {
font-size: 0.8rem;
padding: var(--spacing-xs) var(--spacing-sm);
}
/* Weapons */
.weapons-list {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
}
.weapon-card {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius);
padding: var(--spacing-sm) var(--spacing-md);
cursor: pointer;
transition: background-color 0.15s;
}
.weapon-card:hover {
background: var(--color-surface-hover);
}
.weapon-card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--spacing-xs);
}
.weapon-card-name {
font-weight: 600;
font-size: 0.95rem;
}
.weapon-card-damage {
font-size: 0.85rem;
color: var(--color-primary);
}
.weapon-card-controls {
display: flex;
align-items: center;
gap: var(--spacing-md);
}
.weapon-ammo {
display: flex;
align-items: center;
gap: var(--spacing-xs);
}
.weapon-ammo-value {
font-size: 0.85rem;
min-width: 40px;
text-align: center;
}
.stepper-btn-sm {
width: 28px;
height: 28px;
font-size: 1rem;
}
.weapon-status-select {
width: auto;
font-size: 0.8rem;
height: 28px;
padding: 0 var(--spacing-sm);
}
/* Notes */
.notes-textarea {
width: 100%;
min-height: 80px;
resize: vertical;
}