// ============================================================ // ACTOR SHEET — Character layout, attributes, resources, etc. // ============================================================ .oathhammer { .actor-img { border: 2px solid @color-blue; border-radius: 4px; cursor: pointer; object-fit: cover; } .character-main { display: flex; flex-direction: column; gap: 4px; // Portrait + right column layout .character-pc { display: flex; gap: 10px; align-items: flex-start; flex: 1; } // Portrait alone on the left, fixed square .character-portrait { flex-shrink: 0; width: @portrait-height; .actor-img { width: @portrait-height; height: @portrait-height; object-fit: cover; } } // Right column: stacks name, identity bar, stats band .character-right { flex: 1; display: flex; flex-direction: column; gap: 5px; min-width: 0; } // Row 1: character name .character-name { display: flex; align-items: center; gap: 4px; border-bottom: 1px solid @color-olive; padding-bottom: 4px; input { flex: 1; font-family: @font-primary; font-size: @font-size-lg; } } // Row 2: identity bar (lineage + class + level/xp) .character-identity-bar { display: flex; flex-direction: row; align-items: center; gap: 6px; flex-wrap: wrap; .identity-slot { display: flex; align-items: center; gap: 4px; padding: 2px 6px; border: 1px solid @color-olive; border-radius: 3px; background: rgba(0,0,0,0.15); font-size: @font-size-xs; min-width: 6rem; min-height: 1.6rem; &.empty { opacity: 0.6; font-style: italic; border-style: dashed; } .identity-img { width: 18px; height: 18px; object-fit: cover; border-radius: 2px; border: none; } .identity-name { flex: 1; font-family: @font-secondary; font-size: @font-size-base; font-weight: bold; } .slot-icon { font-size: @font-size-xs; opacity: 0.8; } .slot-placeholder { font-size: @font-size-xs; } a { font-size: @font-size-xs; opacity: 0.85; &:hover { opacity: 1; } } } .identity-xp { display: flex; align-items: center; gap: 3px; margin-left: auto; font-size: @font-size-xs; .xp-label { font-family: @font-secondary; font-size: @font-size-xs; font-weight: bold; color: @color-dark; margin-left: 4px; } .xp-sep { opacity: 0.8; } input { width: 3rem; text-align: center; font-size: @font-size-xs; padding: 1px 2px; } } } // Row 3: unified stats band — resources | attributes | arcane stress .character-stats-band { display: flex; align-items: stretch; gap: 6px; flex: 1; // Vital resources: Grit / Luck / Defense / Movement .character-resources { flex-shrink: 0; display: flex; flex-direction: column; justify-content: space-evenly; gap: 2px; padding: 3px 6px; border: 1px solid @color-olive; border-radius: 3px; background: rgba(0,0,0,0.08); .character-resource { display: flex; align-items: center; gap: 3px; white-space: nowrap; div.form-group { display: contents; } input { width: 2.4rem; text-align: center; font-size: @font-size-xs; padding: 1px 2px; } .res-sep { opacity: 0.7; font-size: @font-size-xs; } } .resource-label { min-width: 4.2rem; font-family: @font-secondary; font-size: @font-size-base; font-weight: bold; color: @color-dark; } } // Attributes fieldset .character-attributes { flex: 1; min-width: 0; } // Arcane stress compact .character-arcane-stress { flex-shrink: 0; } } } // Attributes grid (6 columns) .attributes-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 4px; } .attribute-box { display: flex; flex-direction: column; align-items: center; gap: 2px; label { font-family: @font-secondary; font-size: @font-size-xs; font-weight: bold; color: @color-dark; text-align: center; } input { width: 2.5rem; text-align: center; font-size: @font-size-lg; } } // Currency bar .currency-bar { margin-top: 4px; .currency-item { display: flex; flex-direction: column; align-items: center; gap: 2px; flex: 1; input { width: 4rem; text-align: center; } } } // Lineage / Class item slots in Identity tab .identity-lineage-class { gap: 8px; margin-bottom: 8px; .item-slot { flex: 1; display: flex; align-items: center; gap: 6px; padding: 6px 8px; border: 2px solid @color-gold; border-radius: 4px; background: rgba(212, 160, 23, 0.08); min-height: 40px; &.empty { border-style: dashed; opacity: 0.7; cursor: default; .slot-icon { font-size: 1.2rem; color: @color-gold; } .slot-placeholder { font-family: @font-body; font-style: italic; color: @color-gold; font-size: 0.9rem; } } .item-img { width: 32px; height: 32px; object-fit: contain; border: none; flex-shrink: 0; } .item-name { flex: 1; font-family: @font-primary; font-size: 1rem; color: @color-dark; } a[data-action] { color: @color-gold; &:hover { color: @color-blue; } } } } // Biodata .biodata-col { flex: 1; display: flex; flex-direction: column; gap: 2px; } // Arcane Stress compact .character-arcane-stress { .stress-inputs { display: flex; align-items: center; justify-content: center; gap: 4px; } // formInput renders a
— flatten it div.form-group { display: contents; } input { width: 2.8rem; text-align: center; } span { opacity: 0.8; } } // Defense display .defense-display { min-width: 3rem; max-width: 3rem; text-align: center; font-weight: bold; } // ── Magic tab — Arcane Stress row ────────────────────────── .stress-controls { display: flex; align-items: center; gap: 6px; flex-wrap: nowrap; padding: 4px 0; .stress-btn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border: 1px solid @color-olive; border-radius: 3px; background: fade(@color-dark, 6%); color: @color-dark; font-size: 1rem; line-height: 1; cursor: pointer; flex-shrink: 0; text-decoration: none; &:hover { background: fade(@color-blue, 15%); border-color: @color-blue; } } .arcane-stress-display { font-family: @font-secondary; font-size: @font-size-lg; font-weight: bold; color: @color-dark; min-width: 3rem; text-align: center; flex-shrink: 0; &.stress-at-limit { color: #c0392b; } } .stress-bonus-label { margin-left: auto; // push threshold bonus to the right font-size: @font-size-sm; color: @color-olive; white-space: nowrap; flex-shrink: 0; } .stress-bonus-input { width: 3rem; text-align: center; flex-shrink: 0; } } }