/* App-specific styling layered on top of Beer CSS (Material 3). */ :root { --status-green: #2e7d32; --status-amber: #f9a825; --status-red: #c62828; --status-none: transparent; } body { padding-bottom: 4rem; } .app-bar-title { font-weight: 600; letter-spacing: 0.2px; } /* ---- Bowler chart grid ---- */ .bowler-wrap { overflow-x: auto; } table.bowler { border-collapse: collapse; width: 100%; min-width: 64rem; font-size: 0.9rem; } table.bowler th, table.bowler td { border: 1px solid var(--outline-variant, #cac4d0); padding: 0.35rem 0.5rem; text-align: center; white-space: nowrap; } table.bowler thead th { background: var(--surface-container-high, #ece6f0); position: sticky; top: 0; z-index: 2; } /* Frozen first column (KPI name) */ table.bowler .kpi-col { text-align: left; position: sticky; left: 0; background: var(--surface, #fef7ff); z-index: 1; min-width: 16rem; max-width: 22rem; white-space: normal; } table.bowler tr.project-row td { text-align: left; background: var(--secondary-container, #e8def8); color: var(--on-secondary-container, #1d192b); font-weight: 600; position: sticky; left: 0; } /* Status cells */ .cell { cursor: default; } .cell.editable { cursor: pointer; } .cell.editable:hover { outline: 2px solid var(--primary, #6750a4); outline-offset: -2px; } .cell.green { background: var(--status-green); color: #fff; } .cell.amber { background: var(--status-amber); color: #000; } .cell.red { background: var(--status-red); color: #fff; } .cell.none { background: var(--status-none); } .cell .cell-value { font-weight: 600; } .cell.has-note::after { content: '•'; position: absolute; top: 2px; right: 4px; font-size: 0.7rem; opacity: 0.7; } .cell { position: relative; } /* Sparkline trend column */ .trend-col svg { display: block; } .muted { opacity: 0.7; } .right { text-align: right; } .nowrap { white-space: nowrap; } /* Login screen */ .login-shell { min-height: 100vh; display: grid; place-items: center; } .login-card { width: min(92vw, 24rem); } dialog.modal { width: min(94vw, 32rem); }