/* Timesheet — grid Odoo (SFE blue + readable contrast) */
.ts-odo { display:flex; flex-direction:column; gap:12px; }
.ts-odo-toolbar { display:flex; flex-wrap:wrap; align-items:flex-start; gap:12px 16px; }
.ts-odo-toolbar__left { display:flex; flex-direction:column; gap:4px; min-width:200px; }
.ts-odo-title { margin:0; font-size:1.15rem; font-weight:650; color:#1e2b3c; }
.ts-odo-stats { display:flex; flex-wrap:wrap; gap:14px; color:#343a40; font-size:.875rem; }
.ts-odo-stats strong { color:#1e2b3c; font-weight:650; }
.ts-odo-search { flex:1 1 220px; max-width:420px; margin:0 auto; }
.ts-odo-search input { width:100%; min-height:34px; border:1px solid #ced4da; border-radius:4px; padding:0 12px; font-size:.875rem; color:#1e2b3c; }
.ts-odo-search input::placeholder { color:#495057; opacity:1; }
.ts-odo-views { display:inline-flex; border:1px solid #ced4da; border-radius:4px; overflow:hidden; margin-left:auto; }
.ts-odo-view-btn { display:inline-flex; align-items:center; justify-content:center; width:32px; height:30px; color:#343a40; text-decoration:none; background:#fff; font-size:.75rem; }
.ts-odo-view-btn:hover { color:var(--sfe-primary, #007BFF); background:#f0f7ff; }
.ts-odo-view-btn.is-active { background:var(--sfe-primary, #007BFF); color:#fff; border-color:var(--sfe-primary, #007BFF); }
.ts-odo-weekbar { display:flex; align-items:center; gap:8px; }
.ts-odo-week-label { font-size:.875rem; color:#343a40; padding:0 6px; border:1px solid #ced4da; border-radius:4px; min-height:30px; display:inline-flex; align-items:center; }
.ts-odo-grid-wrap { overflow-x:auto; border:1px solid #dee2e6; border-radius:4px; background:#fff; }
.ts-odo-grid { width:100%; border-collapse:collapse; min-width:820px; }
.ts-odo-grid th, .ts-odo-grid td { border-bottom:1px solid #e9ecef; padding:8px 10px; text-align:center; font-size:.8125rem; vertical-align:middle; }
.ts-odo-grid thead th { background:#f1f3f5; color:#1e2b3c; font-weight:650; white-space:nowrap; letter-spacing:.02em; }
.ts-odo-col-line, .ts-odo-line { text-align:left !important; min-width:220px; }
.ts-odo-line__project { font-weight:650; color:#1e2b3c; }
.ts-odo-line__sep { color:#6c757d; margin:0 4px; }
.ts-odo-line__task { color:#343a40; }
.ts-odo-grid td.is-today, .ts-odo-grid th.is-today { background:#e8f4fc; }
.ts-odo-cell { width:64px; min-height:30px; border:1px solid transparent; border-radius:3px; text-align:center; background:transparent; font-size:.8125rem; color:#1e2b3c; }
.ts-odo-cell::placeholder { color:#495057; opacity:1; }
.ts-odo-cell::-webkit-input-placeholder { color:#495057; opacity:1; }
.ts-odo-cell::-moz-placeholder { color:#495057; opacity:1; }
.ts-odo-cell:hover, .ts-odo-cell:focus { border-color:var(--sfe-primary, #007BFF); background:#fff; outline:none; box-shadow:0 0 0 1px color-mix(in srgb, var(--sfe-primary, #007BFF) 35%, transparent); }
.ts-odo-row-total, .ts-odo-grand { font-weight:650; color:#1e2b3c; }
.ts-odo-grand { background:#f8d7da; color:#842029; }
.ts-odo-add { border:0; background:transparent; color:var(--sfe-primary, #007BFF); font-weight:600; cursor:pointer; padding:0; font-size:.875rem; }
.ts-odo-add:hover { color:var(--sfe-primary-dark, #0056CC); text-decoration:underline; }
.ts-odo-add-panel { display:flex; flex-wrap:wrap; gap:10px; align-items:end; padding:8px 0; }
.ts-odo-add-panel label { display:flex; flex-direction:column; gap:4px; font-size:.8125rem; color:#343a40; }
.ts-odo-add-panel select { min-width:180px; min-height:32px; color:#1e2b3c; }
.ts-odo-actions { display:flex; gap:8px; }
.ts-odo-empty { text-align:center !important; color:#495057; padding:24px !important; }
.ts-odo-settings { max-width:880px; }
.ts-odo-settings h2 { margin:0 0 16px; color:#1e2b3c; }
.ts-odo-settings-block { background:#fff; border:1px solid #e9ecef; border-radius:6px; padding:16px 18px; margin-bottom:14px; }
.ts-odo-settings-block h3 { margin:0 0 12px; font-size:1rem; color:#1e2b3c; }
.ts-odo-settings-row { display:flex; flex-wrap:wrap; gap:16px 24px; align-items:center; margin-bottom:10px; }
.ts-odo-settings-row label { display:inline-flex; align-items:center; gap:6px; font-size:.875rem; color:#343a40; }
.ts-odo-settings-actions { display:flex; gap:8px; margin-top:8px; }
.ts-odo-settings .btn-primary { background:var(--sfe-primary, #007BFF); border-color:var(--sfe-primary, #007BFF); }
