/* ============================================================ wird-tracker.css complements styles.css Uses existing CSS variables; dark mode is automatic. No font imports, no layout/width overrides. ============================================================ */ /* Wird-specific tokens only All colour/typography/layout defers to styles.css */ :root { --wird-accent: #7c5c3a; --wird-accent-hover: #b5895a; --wird-green: #4a7c59; --wird-red: #9b3a3a; --wird-card-bg: color-mix(in oklab, var(--bg) 96%, var(--fg) 4%); --wird-bar-bg: color-mix(in oklab, var(--bg) 82%, var(--fg) 18%); --wird-shadow: 0 1px 3px rgba(0,0,0,.07), 0 4px 12px rgba(0,0,0,.05); --wird-radius: 6px; --wird-t: 180ms ease; } :root[data-theme="dark"] { --wird-accent: #b5895a; --wird-accent-hover: #d4a96a; --wird-green: #6aad80; --wird-red: #c26060; --wird-card-bg: color-mix(in oklab, var(--bg) 88%, var(--fg) 12%); --wird-shadow: 0 1px 4px rgba(0,0,0,.3), 0 4px 14px rgba(0,0,0,.22); } /* App shell */ #wird-app { display: grid; gap: 2.5rem; margin-top: 2rem; } /* Shared panel */ .wird-panel { background: var(--wird-card-bg); border: 1px solid var(--border); border-radius: var(--wird-radius); padding: 1.5rem; box-shadow: var(--wird-shadow); } .wird-panel-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .75rem; margin-bottom: 1.25rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border); } .wird-panel-header h2 { font-size: 1.15rem; font-weight: 600; margin: 0; /* colour comes from h2 { color: var(--heading) } in styles.css */ } /* Today header */ #today-date { font-size: .95rem; font-style: italic; color: var(--muted) !important; /* override heading colour */ font-weight: 400; margin: 0; } #today-progress-wrap { display: flex; align-items: center; gap: .6rem; } #today-progress-bar { width: 120px; height: 4px; background: var(--wird-bar-bg); border-radius: 99px; overflow: hidden; } #today-progress-fill { height: 100%; background: var(--wird-accent); border-radius: 99px; width: 0%; transition: width .4s ease; } #today-progress-label { font-family: monospace; font-size: .7rem; color: var(--muted); white-space: nowrap; } /* Wird cards grid */ #wird-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem; } .wird-card { background: var(--bg); border: 1px solid var(--border); border-left: 3px solid var(--border); border-radius: var(--wird-radius); padding: .85rem 1rem; transition: box-shadow var(--wird-t), transform var(--wird-t); } .wird-card:hover { box-shadow: var(--wird-shadow); transform: translateY(-1px); } .wird-card.done { border-left-color: var(--wird-green); } .wird-card.over { border-left-color: var(--wird-accent); } .wird-card.miss { border-left-color: var(--wird-red); } .card-name { font-size: .88rem; font-weight: 600; color: var(--heading); margin-bottom: .28rem; } .card-meta { font-family: monospace; font-size: .68rem; color: var(--muted); margin-bottom: .5rem; } .card-bar-wrap { height: 3px; background: var(--wird-bar-bg); border-radius: 99px; overflow: hidden; } .card-bar-fill { height: 100%; background: var(--wird-accent); border-radius: 99px; transition: width .4s ease; } .wird-card.done .card-bar-fill { background: var(--wird-green); } .wird-card.over .card-bar-fill { background: var(--wird-accent-hover); } .wird-card.miss .card-bar-fill { background: var(--wird-red); } .card-log-btn { margin-top: .6rem; font-family: monospace; font-size: .66rem; color: var(--wird-accent); background: none; border: 1px solid var(--wird-accent); border-radius: 3px; padding: .16rem .42rem; cursor: pointer; transition: background var(--wird-t), color var(--wird-t); } .card-log-btn:hover { background: var(--wird-accent); color: var(--bg); } /* Trend controls */ #trend-controls { display: flex; gap: .5rem; flex-wrap: wrap; } #trend-controls select { font-family: monospace; font-size: .72rem; padding: .26rem .44rem; border: 1px solid var(--border); border-radius: var(--wird-radius); background: var(--code-bg); color: var(--fg); cursor: pointer; } #trend-chart { width: 100% !important; max-height: 220px; margin-top: .5rem; } #trend-stats { display: flex; gap: 1.5rem; flex-wrap: wrap; margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--border); } .stat-chip { display: flex; flex-direction: column; gap: .12rem; } .stat-chip .stat-val { font-family: monospace; font-size: 1rem; font-weight: 600; color: var(--wird-accent); } .stat-chip .stat-lbl { font-size: .7rem; color: var(--muted); } /* History table */ #history-table-wrap { overflow-x: auto; } #history-table { width: 100%; border-collapse: collapse; font-size: .86rem; } #history-table th { text-align: left; font-family: monospace; font-size: .67rem; font-weight: 500; color: var(--muted); padding: .32rem .52rem; border-bottom: 1px solid var(--border); white-space: nowrap; } #history-table td { padding: .44rem .52rem; border-bottom: 1px solid color-mix(in oklab, var(--border) 45%, transparent); vertical-align: top; color: var(--fg); } #history-table tbody tr:hover { background: color-mix(in oklab, var(--bg) 90%, var(--fg) 10%); } .loading-cell { color: var(--muted); font-style: italic; } /* status badges extend chip pattern from styles.css */ .badge { display: inline-block; font-family: monospace; font-size: .62rem; padding: .11rem .36rem; border-radius: 3px; background: var(--chip-bg); color: var(--chip-fg); } .badge.done { background: color-mix(in oklab, var(--wird-green) 18%, var(--bg)); color: var(--wird-green); } .badge.over { background: color-mix(in oklab, var(--wird-accent) 16%, var(--bg)); color: var(--wird-accent); } .badge.miss { background: color-mix(in oklab, var(--wird-red) 16%, var(--bg)); color: var(--wird-red); } /* Primary button matches site pill style */ .btn-primary { font-family: inherit; font-size: .78rem; font-weight: 600; letter-spacing: .03em; background: var(--heading); color: var(--bg); border: none; border-radius: 999px; padding: .36rem .85rem; cursor: pointer; transition: opacity var(--wird-t); } .btn-primary:hover { opacity: .78; } /* Modal */ dialog { border: 1px solid var(--border); border-radius: 10px; padding: 0; background: var(--bg); color: var(--fg); box-shadow: 0 12px 60px rgba(0,0,0,.25), 0 2px 8px rgba(0,0,0,.12); max-width: 520px; width: min(94vw, 520px); font-family: inherit; font-size: 1rem; overflow: hidden; } dialog::backdrop { background: rgba(0,0,0,.48); backdrop-filter: blur(4px); } /* Modal inner layout — header / scrollable body / footer */ dialog form { display: flex; flex-direction: column; max-height: min(90vh, 700px); } dialog h3 { margin: 0; font-size: 1.1rem; font-weight: 650; padding: 1.5rem 1.75rem 1.25rem; border-bottom: 1px solid var(--border); flex-shrink: 0; /* colour from styles.css h3 { color: var(--heading) } */ } /* Scrollable body area */ .modal-body { padding: 1.4rem 1.75rem; overflow-y: auto; flex: 1; } .field-group { display: flex; flex-direction: column; gap: .35rem; margin-bottom: 1.1rem; } .field-group label { font-size: .7rem; font-family: monospace; color: var(--muted); text-transform: uppercase; letter-spacing: .07em; font-weight: 500; } .field-group .optional { opacity: .55; } .field-group input[type="text"], .field-group input[type="number"], .field-group input[type="date"], .field-group select, .field-group textarea { font-family: inherit; font-size: .95rem; padding: .6rem .75rem; border: 1px solid var(--border); border-radius: 6px; background: var(--code-bg); color: var(--fg); width: 100%; transition: border-color var(--wird-t), box-shadow var(--wird-t); box-sizing: border-box; } .field-group input:focus, .field-group select:focus, .field-group textarea:focus { outline: none; border-color: var(--wird-accent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--wird-accent) 18%, transparent); } /* toggle switch */ .toggle-row { display: flex; align-items: center; gap: .52rem; } input[type="checkbox"][role="switch"] { appearance: none; -webkit-appearance: none; width: 33px; height: 18px; border-radius: 99px; background: var(--border); position: relative; cursor: pointer; flex-shrink: 0; transition: background var(--wird-t); } input[type="checkbox"][role="switch"]::after { content: ''; position: absolute; width: 12px; height: 12px; border-radius: 50%; background: var(--bg); top: 3px; left: 3px; transition: left var(--wird-t); } input[type="checkbox"][role="switch"]:checked { background: var(--wird-green); } input[type="checkbox"][role="switch"]:checked::after { left: 18px; } /* Shared modal footer / action row */ .modal-footer, #modal-actions, #khatm-modal-actions, #motalah-modal-actions { display: flex; justify-content: flex-end; align-items: center; gap: .75rem; padding: 1.1rem 1.75rem 1.4rem; border-top: 1px solid var(--border); flex-shrink: 0; margin-top: 0; } /* Cancel button — shared */ #modal-cancel, #khatm-cancel, #motalah-cancel { font-family: inherit; font-size: .82rem; background: none; border: 1px solid var(--border); border-radius: 999px; padding: .44rem 1rem; cursor: pointer; color: var(--muted); transition: border-color var(--wird-t), color var(--wird-t); } #modal-cancel:hover, #khatm-cancel:hover, #motalah-cancel:hover { border-color: var(--fg); color: var(--fg); } /* Responsive */ @media (max-width: 520px) { #wird-cards { grid-template-columns: 1fr; } .wird-panel-header { flex-direction: column; align-items: flex-start; } } /* Shaykh Meeting Panel */ #meeting-status-row { display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: center; margin-bottom: 1.5rem; padding-bottom: 1.25rem; border-bottom: 1px solid var(--border); } .meeting-meta-lbl { display: block; font-family: monospace; font-size: .67rem; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; margin-bottom: .2rem; } .meeting-meta-val { font-size: .95rem; font-weight: 600; color: var(--fg); } #meeting-status-msg { margin-left: auto; } .meeting-status { font-size: .85rem; padding: .3rem .7rem; border-radius: 4px; font-weight: 500; } .meeting-status.ok { background: color-mix(in oklab, var(--wird-green) 15%, var(--bg)); color: var(--wird-green); } .meeting-status.due { background: color-mix(in oklab, var(--wird-accent) 15%, var(--bg)); color: var(--wird-accent); } .meeting-status.overdue { background: color-mix(in oklab, var(--wird-red) 15%, var(--bg)); color: var(--wird-red); } .meeting-status.pending { background: var(--chip-bg); color: var(--chip-fg); } /* 3-week cycle table */ #meeting-cycles h3 { font-size: .88rem; color: var(--muted); font-weight: 500; margin: 0 0 .75rem; text-transform: uppercase; letter-spacing: .05em; } .meeting-cycle-table { width: 100%; border-collapse: collapse; font-size: .85rem; } .meeting-cycle-table th { text-align: left; font-family: monospace; font-size: .67rem; font-weight: 500; color: var(--muted); padding: .3rem .5rem; border-bottom: 1px solid var(--border); white-space: nowrap; } .meeting-cycle-table td { padding: .42rem .5rem; border-bottom: 1px solid color-mix(in oklab, var(--border) 45%, transparent); color: var(--fg); } .meeting-cycle-table tbody tr:hover { background: color-mix(in oklab, var(--bg) 90%, var(--fg) 10%); } @media (max-width: 520px) { #meeting-status-row { flex-direction: column; align-items: flex-start; } #meeting-status-msg { margin-left: 0; } } /* Rating pips (card + modal) */ /* Inline card pips clickable */ .rating-pips { display: flex; gap: .38rem; margin: .4rem 0 .1rem; } .rating-pip { width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--border); background: transparent; cursor: pointer; padding: 0; transition: background var(--wird-t), border-color var(--wird-t), transform var(--wird-t); position: relative; } .rating-pip:hover { border-color: var(--wird-accent); transform: scale(1.15); } .rating-pip.filled { background: var(--wird-accent); border-color: var(--wird-accent); } /* The target pip gets a subtle ring */ .rating-pip.target-pip { box-shadow: 0 0 0 2px color-mix(in oklab, var(--wird-green) 40%, transparent); } .rating-pip.target-pip.filled { background: var(--wird-green); border-color: var(--wird-green); } .rating-meta { display: flex; justify-content: space-between; align-items: baseline; } .rating-label { font-style: italic; color: var(--muted); } /* Static pips in history table */ .rating-pip-static { display: inline-block; width: 10px; height: 10px; border-radius: 50%; border: 1.5px solid var(--border); background: transparent; margin-right: .22rem; vertical-align: middle; transition: background var(--wird-t); } .rating-pip-static.filled { background: var(--wird-accent); border-color: var(--wird-accent); } /* Modal pips larger, more tap-friendly */ .modal-pips { display: flex; gap: .55rem; margin-top: .35rem; } .modal-pip { width: 28px; height: 28px; border-radius: 50%; border: 2px solid var(--border); background: transparent; cursor: pointer; padding: 0; transition: background var(--wird-t), border-color var(--wird-t), transform var(--wird-t); } .modal-pip:hover { border-color: var(--wird-accent); transform: scale(1.12); } .modal-pip.filled { background: var(--wird-accent); border-color: var(--wird-accent); } /* Pip labels on hover via title tooltip are enough, but add a subtle numeric hint below each pip */ .modal-pips { position: relative; } /* Wuqkf Qalb+ rating card pips */ .card-pips { display: flex; gap: .4rem; margin-bottom: .45rem; align-items: center; } .card-pip { width: 10px; height: 10px; border-radius: 50%; background: var(--wird-bar-bg); border: 1.5px solid var(--border); flex-shrink: 0; transition: background var(--wird-t), border-color var(--wird-t); position: relative; } /* minimum threshold marker small tick below the pip */ .card-pip.min-marker::after { content: ''; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); width: 1.5px; height: 4px; background: var(--muted); opacity: .5; border-radius: 1px; } .wird-card.done .card-pip.filled, .wird-card.over .card-pip.filled { background: var(--wird-green); border-color: var(--wird-green); } .wird-card.miss .card-pip.filled { background: var(--wird-red); border-color: var(--wird-red); } .wird-card .card-pip.filled { background: var(--wird-accent); border-color: var(--wird-accent); } .card-rating-lbl { font-style: italic; margin-top: .1rem; } /* Modal pip picker */ .modal-pips { display: flex; gap: .5rem; margin-top: .25rem; } .modal-pip { display: flex; flex-direction: column; align-items: center; gap: .3rem; background: none; border: none; cursor: pointer; padding: .3rem .2rem; border-radius: 4px; transition: background var(--wird-t); flex: 1; } .modal-pip:hover { background: color-mix(in oklab, var(--bg) 85%, var(--fg) 15%); } .pip-dot { display: block; width: 14px; height: 14px; border-radius: 50%; background: var(--wird-bar-bg); border: 2px solid var(--border); transition: background var(--wird-t), border-color var(--wird-t); } .modal-pip.selected .pip-dot { background: var(--wird-accent); border-color: var(--wird-accent); } .pip-lbl { font-family: monospace; font-size: .62rem; color: var(--muted); white-space: nowrap; transition: color var(--wird-t); } .modal-pip.selected .pip-lbl { color: var(--wird-accent); } @media (max-width: 380px) { .pip-lbl { display: none; } .modal-pip { flex: unset; } } /* ── Mutāla'ah Panel ─────────────────────────────────────── */ #motalah-today-row { display: flex; gap: 2rem; flex-wrap: wrap; margin-bottom: 1.4rem; padding-bottom: 1.2rem; border-bottom: 1px solid var(--border); } .motalah-today-stat { display: flex; flex-direction: column; gap: .1rem; } .motalah-today-val { font-family: monospace; font-size: 1.25rem; font-weight: 700; color: var(--wird-accent); } .motalah-today-lbl { font-size: .68rem; color: var(--muted); } /* sessions list */ .motalah-session { display: flex; align-items: baseline; gap: .75rem; padding: .55rem 0; border-bottom: 1px solid color-mix(in oklab, var(--border) 45%, transparent); font-size: .88rem; } .motalah-session:last-child { border-bottom: none; } .motalah-session-date { font-family: monospace; font-size: .72rem; color: var(--muted); white-space: nowrap; flex-shrink: 0; } .motalah-session-dur { font-family: monospace; font-size: .82rem; font-weight: 600; color: var(--wird-accent); white-space: nowrap; flex-shrink: 0; } .motalah-session-books { font-size: .78rem; color: var(--fg); flex: 1; } .motalah-book-chip { display: inline-block; font-size: .65rem; font-family: monospace; padding: .1rem .34rem; border-radius: 3px; background: color-mix(in oklab, var(--wird-accent) 14%, var(--bg)); color: var(--wird-accent); margin: .1rem .15rem .1rem 0; } .motalah-session-note { font-size: .75rem; color: var(--muted); font-style: italic; } /* motalah-modal-actions and cancel now in shared modal footer block above */ /* ============================================================ Append to wird-tracker.css ============================================================ */ /* ── Nafl Prayers ────────────────────────────────────────── */ #nafl-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(175px, 1fr)); gap: 1rem; margin-bottom: 1.1rem; } .nafl-card { background: var(--bg); border: 1px solid var(--border); border-left: 3px solid var(--border); border-radius: var(--wird-radius); padding: .9rem 1rem; display: flex; flex-direction: column; gap: .18rem; transition: box-shadow var(--wird-t), transform var(--wird-t), border-left-color var(--wird-t); } .nafl-card:hover { box-shadow: var(--wird-shadow); transform: translateY(-1px); } .nafl-card.nafl-done { border-left-color: var(--wird-green); background: color-mix(in oklab, var(--wird-green) 5%, var(--bg)); } .nafl-icon { font-size: 1.3rem; line-height: 1; margin-bottom: .2rem; } .nafl-name { font-size: .9rem; font-weight: 600; color: var(--heading); } .nafl-sub { font-family: monospace; font-size: .67rem; color: var(--muted); margin-bottom: .5rem; } .nafl-toggle { margin-top: auto; font-family: monospace; font-size: .66rem; padding: .18rem .44rem; border-radius: 3px; border: 1px solid var(--border); background: none; color: var(--muted); cursor: pointer; transition: background var(--wird-t), color var(--wird-t), border-color var(--wird-t); align-self: flex-start; } .nafl-toggle:hover:not(:disabled) { border-color: var(--wird-green); color: var(--wird-green); } .nafl-card.nafl-done .nafl-toggle { background: color-mix(in oklab, var(--wird-green) 15%, var(--bg)); color: var(--wird-green); border-color: var(--wird-green); } .nafl-toggle:disabled { opacity: .5; cursor: default; } #nafl-completion-bar-wrap { display: flex; align-items: center; gap: .75rem; } #nafl-bar-track { width: 120px; height: 4px; background: var(--wird-bar-bg); border-radius: 99px; overflow: hidden; flex-shrink: 0; } #nafl-completion-bar { height: 100%; background: var(--wird-green); border-radius: 99px; width: 0; transition: width .4s ease; } #nafl-completion-label { font-family: monospace; font-size: .7rem; color: var(--muted); } @media (max-width: 520px) { #nafl-cards { grid-template-columns: 1fr; } } /* ── Khatm Tracker ───────────────────────────────────────── */ #khatm-stats-row { display: flex; gap: 1.5rem; flex-wrap: wrap; margin-bottom: 1.4rem; padding-bottom: 1.2rem; border-bottom: 1px solid var(--border); } #khatm-list { display: flex; flex-direction: column; } .khatm-item { display: flex; align-items: center; gap: .75rem; padding: .55rem 0; border-bottom: 1px solid color-mix(in oklab, var(--border) 45%, transparent); flex-wrap: wrap; } .khatm-item:last-child { border-bottom: none; } .khatm-num { font-family: monospace; font-size: .68rem; font-weight: 700; color: var(--bg); background: var(--wird-accent); border-radius: 50%; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; cursor: default; } /* Every 10th khatm */ .khatm-item.milestone .khatm-num { background: var(--wird-green); box-shadow: 0 0 0 3px color-mix(in oklab, var(--wird-green) 28%, transparent); } .khatm-date { font-family: monospace; font-size: .78rem; font-weight: 600; color: var(--fg); flex-shrink: 0; } .khatm-type-badge { display: inline-block; font-family: monospace; font-size: .62rem; padding: .1rem .34rem; border-radius: 3px; background: color-mix(in oklab, var(--wird-accent) 14%, var(--bg)); color: var(--wird-accent); flex-shrink: 0; } .khatm-gap { font-family: monospace; font-size: .7rem; color: var(--muted); flex-shrink: 0; } .khatm-note { font-size: .75rem; color: var(--muted); font-style: italic; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* khatm-modal-actions and cancel now in shared modal footer block above */ /* ── Heatmap ─────────────────────────────────────────────── */ #heatmap-panel .wird-panel-header select { font-family: monospace; font-size: .72rem; padding: .26rem .44rem; border: 1px solid var(--border); border-radius: var(--wird-radius); background: var(--code-bg); color: var(--fg); cursor: pointer; } #heatmap-wrap { overflow-x: auto; padding-bottom: .4rem; } #heatmap-month-labels { display: flex; padding-left: 28px; /* width of dow column */ margin-bottom: .3rem; min-width: max-content; } .hm-month-lbl { font-family: monospace; font-size: .6rem; color: var(--muted); flex-shrink: 0; display: inline-block; } #heatmap-grid { display: flex; gap: 3px; min-width: max-content; } .hm-dow-col { display: flex; flex-direction: column; gap: 3px; margin-right: 4px; width: 24px; } .hm-dow-lbl { height: 12px; font-family: monospace; font-size: .57rem; color: var(--muted); line-height: 12px; white-space: nowrap; } .hm-col { display: flex; flex-direction: column; gap: 3px; } .hm-cell { width: 12px; height: 12px; border-radius: 2px; flex-shrink: 0; transition: transform 120ms ease; cursor: default; } .hm-cell:not(.hm-empty):hover { transform: scale(1.45); outline: 1.5px solid var(--wird-accent); z-index: 1; position: relative; } .hm-cell.hm-empty { background: transparent; } .hm-cell[data-level="0"] { background: var(--wird-bar-bg); } .hm-cell[data-level="1"] { background: color-mix(in oklab, var(--wird-accent) 28%, var(--bg)); } .hm-cell[data-level="2"] { background: color-mix(in oklab, var(--wird-accent) 52%, var(--bg)); } .hm-cell[data-level="3"] { background: color-mix(in oklab, var(--wird-accent) 76%, var(--bg)); } .hm-cell[data-level="4"] { background: var(--wird-accent); } .hm-cell.hm-today { outline: 1.5px solid var(--wird-accent-hover); } #heatmap-legend { display: flex; align-items: center; gap: 4px; margin-top: .9rem; justify-content: flex-end; } .hm-legend-lbl { font-size: .65rem; color: var(--muted); } .hm-swatch { display: inline-block; width: 12px; height: 12px; border-radius: 2px; } .hm-swatch[data-level="0"] { background: var(--wird-bar-bg); } .hm-swatch[data-level="1"] { background: color-mix(in oklab, var(--wird-accent) 28%, var(--bg)); } .hm-swatch[data-level="2"] { background: color-mix(in oklab, var(--wird-accent) 52%, var(--bg)); } .hm-swatch[data-level="3"] { background: color-mix(in oklab, var(--wird-accent) 76%, var(--bg)); } .hm-swatch[data-level="4"] { background: var(--wird-accent); } #heatmap-stats { display: flex; gap: 1.5rem; flex-wrap: wrap; margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--border); } /* ── Book Search (Motalah modal) ──────────────────────────── */ .book-search-wrap { position: relative; } #motalah-book-search { font-family: inherit; font-size: .95rem; padding: .6rem .75rem .6rem 2.2rem; border: 1px solid var(--border); border-radius: 6px; background: var(--code-bg); color: var(--fg); width: 100%; box-sizing: border-box; transition: border-color var(--wird-t), box-shadow var(--wird-t); } #motalah-book-search:focus { outline: none; border-color: var(--wird-accent); box-shadow: 0 0 0 3px color-mix(in oklab, var(--wird-accent) 18%, transparent); } .book-search-icon { position: absolute; left: .65rem; top: 50%; transform: translateY(-50%); color: var(--muted); font-size: .85rem; pointer-events: none; } #book-search-results { border: 1px solid var(--border); border-top: none; border-radius: 0 0 6px 6px; background: var(--bg); max-height: 200px; overflow-y: auto; display: none; } #book-search-results.open { display: block; } .book-result-item { display: flex; align-items: center; gap: .6rem; padding: .55rem .75rem; cursor: pointer; transition: background var(--wird-t); font-size: .88rem; border-bottom: 1px solid color-mix(in oklab, var(--border) 40%, transparent); } .book-result-item:last-child { border-bottom: none; } .book-result-item:hover { background: color-mix(in oklab, var(--bg) 88%, var(--fg) 12%); } .book-result-item.selected { background: color-mix(in oklab, var(--wird-accent) 10%, var(--bg)); } .book-result-check { width: 16px; height: 16px; border-radius: 4px; border: 1.5px solid var(--border); background: transparent; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: .65rem; transition: background var(--wird-t), border-color var(--wird-t); } .book-result-item.selected .book-result-check { background: var(--wird-accent); border-color: var(--wird-accent); color: var(--bg); } .book-result-title { font-weight: 500; color: var(--fg); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .book-result-author { font-size: .72rem; color: var(--muted); font-family: monospace; white-space: nowrap; flex-shrink: 0; } /* Selected books chips row */ #selected-books-chips { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .5rem; min-height: 0; } .selected-book-chip { display: inline-flex; align-items: center; gap: .3rem; font-size: .7rem; font-family: monospace; padding: .22rem .5rem; border-radius: 4px; background: color-mix(in oklab, var(--wird-accent) 14%, var(--bg)); color: var(--wird-accent); border: 1px solid color-mix(in oklab, var(--wird-accent) 30%, transparent); } .selected-book-chip button { background: none; border: none; cursor: pointer; color: var(--wird-accent); padding: 0; font-size: .75rem; line-height: 1; opacity: .7; transition: opacity var(--wird-t); } .selected-book-chip button:hover { opacity: 1; } .book-no-results { padding: .75rem; font-size: .82rem; color: var(--muted); font-style: italic; text-align: center; }