/* ═══════════════════════════════════════════════════════════════════════════ Notion Bases — estilos usando CSS variables do Obsidian ═══════════════════════════════════════════════════════════════════════════ */ /* ── Container principal ─────────────────────────────────────────────────── */ .notion-bases-view-container { display: flex; flex-direction: column; height: 100%; overflow: hidden; background: var(--background-primary); color: var(--text-normal); font-family: var(--font-interface); font-size: var(--font-ui-small); } /* ── Embed inline em notas ───────────────────────────────────────────────── */ .nb-embed-container { display: flex; flex-direction: column; height: 400px; overflow: hidden; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); background: var(--background-primary); color: var(--text-normal); font-family: var(--font-interface); font-size: var(--font-ui-small); } .nb-embed-error { padding: 12px; color: var(--text-error); font-size: var(--font-ui-small); } .nb-container { display: flex; flex-direction: column; flex: 1; min-height: 0; overflow: hidden; } /* ── Toolbar ─────────────────────────────────────────────────────────────── */ .nb-toolbar { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--background-modifier-border); background: var(--background-primary); flex-shrink: 0; } .nb-search-container { position: relative; flex-shrink: 0; } .nb-search { display: block; width: 200px; padding: 4px 8px; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: var(--background-secondary); color: var(--text-normal); font-size: var(--font-ui-small); outline: none; transition: width 350ms cubic-bezier(.4,0,.2,1), opacity 250ms ease; } .nb-search:focus { border-color: var(--interactive-accent); } /* Estado colapsado: input encolhe para o tamanho do ícone */ .nb-search-container--collapsed .nb-search { width: 38px; opacity: 0; pointer-events: none; } /* Botão ícone de lupa — fica em cima do input via absolute */ .nb-search-icon-btn { position: absolute; top: 0; left: 0; width: 38px; height: 100%; display: flex; align-items: center; justify-content: center; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: transparent !important; box-shadow: none !important; cursor: pointer; color: var(--text-muted); opacity: 0; pointer-events: none; transition: opacity 200ms 200ms ease; /* atraso para aparecer depois do input sumir */ } /* Ícone visível apenas no estado colapsado */ .nb-search-container--collapsed .nb-search-icon-btn { opacity: 1; pointer-events: auto; } .nb-search-icon-btn:hover { color: var(--text-normal); background: var(--background-modifier-hover) !important; } .nb-row-count { color: var(--text-muted); font-size: var(--font-ui-smaller); white-space: nowrap; } /* ── Toolbar buttons ─────────────────────────────────────────────────────── */ .nb-toolbar-btn { display: flex; align-items: center; gap: 4px; padding: 4px 8px; background: none; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); color: var(--text-muted); font-size: var(--font-ui-small); cursor: pointer; white-space: nowrap; } .nb-toolbar-btn:hover { background: var(--background-modifier-hover); color: var(--text-normal); } .nb-toolbar-btn--icon { padding: 4px 6px; } .nb-toolbar-btn--active { background: var(--background-modifier-hover); color: var(--text-normal); border-color: var(--background-modifier-border); } .nb-hidden-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 4px; background: var(--interactive-accent); color: var(--text-on-accent); border-radius: 8px; font-size: 10px; font-weight: 600; } /* ── Fields dropdown menu ────────────────────────────────────────────────── */ .nb-fields-menu-wrapper { position: relative; } .nb-fields-dropdown { position: absolute; top: calc(100% + 4px); left: 0; z-index: 100; min-width: 200px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: var(--shadow-l); padding: 4px; } .nb-fields-dropdown-label { padding: 4px 8px; font-size: var(--font-ui-smaller); color: var(--text-faint); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .nb-field-row { display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-radius: var(--radius-s); cursor: pointer; font-size: var(--font-ui-small); color: var(--text-normal); } .nb-field-row:hover { background: var(--background-modifier-hover); } .nb-field-checkbox { width: 14px; height: 14px; cursor: pointer; accent-color: var(--interactive-accent); flex-shrink: 0; } .nb-field-icon { font-size: 11px; color: var(--text-muted); flex-shrink: 0; min-width: 14px; text-align: center; } .nb-field-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* ── Wrapper da tabela ───────────────────────────────────────────────────── */ .nb-table-wrapper { flex: 1; overflow: auto; position: relative; } /* ── Tabela ──────────────────────────────────────────────────────────────── */ .nb-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; } /* ── Header ──────────────────────────────────────────────────────────────── */ .nb-thead { position: sticky; top: 0; z-index: 10; background: var(--background-secondary); } .nb-header-row { /* border-bottom movida para .nb-th (border-separate ignora border em ) */ } .nb-th { padding: 0; text-align: left; font-weight: 500; font-size: var(--font-ui-smaller); color: var(--text-muted); border-right: 1px solid var(--background-modifier-border); border-bottom: 2px solid var(--background-modifier-border); position: relative; user-select: none; /* overflow: visible é obrigatório para o dropdown não ser clipado */ overflow: visible; } .nb-th-add-col { width: 40px; border-right: none; } .nb-th-select { width: 40px; text-align: center; } /* ── Drag handle de coluna ───────────────────────────────────────────────── */ /* Wrapper flex que alinha handle + header na mesma linha */ .nb-th-inner { display: flex; align-items: center; width: 100%; overflow: visible; } .nb-col-drag-handle { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 16px; height: 28px; color: var(--text-faint); cursor: grab; font-size: 11px; padding: 0 2px 0 4px; opacity: 0; transition: opacity 100ms; user-select: none; outline: none; } .nb-th:hover .nb-col-drag-handle, .nb-th--dragging .nb-col-drag-handle { opacity: 1; } .nb-col-drag-handle:active { cursor: grabbing; } .nb-col-drag-spacer { flex-shrink: 0; width: 16px; } .nb-th--dragging { opacity: 0.5; } /* ── Column header component ─────────────────────────────────────────────── */ .nb-column-header { position: relative; flex: 1; min-width: 0; } .nb-header-label { display: flex; align-items: center; gap: 5px; width: 100%; padding: 6px 10px; background-color: transparent !important; border: none; outline: none; box-shadow: none !important; -webkit-appearance: none; appearance: none; color: var(--text-muted); font-size: var(--font-ui-smaller); font-weight: 500; cursor: pointer; text-align: left; overflow: hidden; } .nb-header-label:hover { background-color: transparent !important; color: var(--text-normal); } .nb-header-icon { font-size: 10px; flex-shrink: 0; } .nb-header-name { overflow: hidden; text-overflow: ellipsis; } .nb-header-title { display: flex; align-items: center; gap: 5px; padding: 6px 10px; color: var(--text-muted); font-size: var(--font-ui-smaller); font-weight: 500; } .nb-sort-btn { display: flex; flex-direction: column; align-items: center; justify-content: center; background: transparent !important; border: none; outline: none; box-shadow: none !important; -webkit-appearance: none; appearance: none; cursor: pointer; padding: 0 1px; margin-left: auto; opacity: 0; transition: opacity 100ms; line-height: 1; } .nb-header-title:hover .nb-sort-btn, .nb-th:hover .nb-sort-btn, .nb-sort-btn--sorted { opacity: 1; } .nb-sort-chevron { font-size: 10px; line-height: 1; color: var(--text-faint); } .nb-sort-chevron--active { font-size: 10px; line-height: 1; color: var(--interactive-accent); } .nb-header-rename-input { width: calc(100% - 8px); margin: 4px; padding: 3px 6px; border: 1px solid var(--interactive-accent); border-radius: var(--radius-s); background: var(--background-primary); color: var(--text-normal); font-size: var(--font-ui-smaller); outline: none; } /* ── Column dropdown menu ────────────────────────────────────────────────── */ .nb-column-menu { position: absolute; top: 100%; left: 0; z-index: 100; min-width: 180px; max-height: 60vh; overflow-y: auto; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: var(--shadow-l); padding: 4px; display: flex; flex-direction: column; gap: 1px; } .nb-fields-dropdown .nb-menu-item, .nb-column-menu .nb-menu-item, .nb-filter-op-dropdown .nb-menu-item, .nb-filter-pill-dropdown .nb-menu-item { display: flex; align-items: center; gap: 6px; padding: 5px 8px; background: transparent; box-shadow: none; border: none; border-radius: var(--radius-s); color: var(--text-normal); font-size: var(--font-ui-small); cursor: pointer; text-align: left !important; justify-content: flex-start; width: 100%; } .nb-fields-dropdown .nb-menu-item:hover, .nb-column-menu .nb-menu-item:hover, .nb-filter-op-dropdown .nb-menu-item:hover, .nb-filter-pill-dropdown .nb-menu-item:hover { background: var(--background-modifier-hover); } .nb-fields-dropdown .nb-menu-item--active, .nb-column-menu .nb-menu-item--active, .nb-filter-op-dropdown .nb-menu-item--active, .nb-filter-pill-dropdown .nb-menu-item--active { background: var(--background-modifier-active-hover); } .nb-fields-dropdown .nb-menu-item--danger, .nb-column-menu .nb-menu-item--danger { color: var(--text-error); } .nb-menu-type-item { font-size: var(--font-ui-smaller); color: var(--text-muted); } .nb-menu-item-icon { flex-shrink: 0; width: 20px; text-align: center; } .nb-fields-dropdown .nb-menu-item:disabled, .nb-column-menu .nb-menu-item:disabled, .nb-filter-op-dropdown .nb-menu-item:disabled, .nb-filter-pill-dropdown .nb-menu-item:disabled { opacity: 0.4; cursor: not-allowed; } .nb-actions-dropdown { min-width: 220px; } .nb-menu-item span:last-child { text-transform: capitalize; } .nb-menu-separator { height: 1px; background: var(--background-modifier-border); margin: 3px 0; } .nb-menu-label { padding: 4px 8px; font-size: var(--font-ui-smaller); color: var(--text-faint); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .nb-add-col-btn { width: 100%; height: 100%; padding: 6px; background: none; border: none; color: var(--text-muted); font-size: 16px; cursor: pointer; display: flex; align-items: center; justify-content: center; } .nb-add-col-btn:hover { color: var(--interactive-accent); background: var(--background-modifier-hover); } /* ── Linhas ──────────────────────────────────────────────────────────────── */ .nb-row { } .nb-row:hover .nb-td, .nb-row:hover .nb-td--sticky { background: var(--background-modifier-hover); } /* Row drag-and-drop */ .nb-row--drag-over { outline: 2px solid var(--interactive-accent); outline-offset: -2px; } .nb-row-drag-handle { cursor: grab; opacity: 0.4; padding: 0 4px; user-select: none; font-size: 12px; line-height: 1; } .nb-row-drag-handle:hover { opacity: 0.8; } .nb-row-drag-handle:active { cursor: grabbing; } .nb-td-inner--drag { display: flex; align-items: center; gap: 2px; padding: 0 4px; } .nb-td { padding: 0; border-right: 1px solid var(--background-modifier-border); border-bottom: 1px solid var(--background-modifier-border); overflow: hidden; vertical-align: middle; background: var(--background-primary); } .nb-td-empty { border-right: none; } /* ── Altura das linhas ──────────────────────────────────────────────────────── */ .nb-table-wrapper { --nb-row-height: 36px; } .nb-td-inner { height: var(--nb-row-height); max-height: var(--nb-row-height); overflow: hidden; display: flex; align-items: stretch; } .nb-table-wrapper .nb-cell-text { line-height: calc(var(--nb-row-height) - 8px); } /* ── Sticky columns ──────────────────────────────────────────────────────── */ .nb-th--sticky { position: sticky; background: var(--background-secondary); z-index: 3; } .nb-td--sticky { position: sticky; background-color: var(--background-primary); z-index: 2; } /* Opaque overlay to cover content scrolling behind sticky columns */ .nb-td--sticky::before { content: ''; position: absolute; inset: 0; background: inherit; z-index: -1; } .nb-th--sticky-last, .nb-td--sticky-last { border-right: 2px solid var(--color-accent) !important; } /* ── Sort panel ──────────────────────────────────────────────────────────── */ .nb-sort-panel { z-index: 9999; min-width: 280px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: var(--shadow-l); overflow: hidden; display: flex; flex-direction: column; } .nb-sort-panel-titlebar { display: flex; align-items: center; padding: 6px 8px; background: var(--background-secondary); border-bottom: 1px solid var(--background-modifier-border); cursor: move; user-select: none; flex-shrink: 0; } .nb-sort-panel-title { flex: 1; font-size: var(--font-ui-smaller); font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; } .nb-sort-panel-close { display: flex; align-items: center; justify-content: center; width: 18px; height: 18px; padding: 0; background: transparent !important; box-shadow: none !important; border: none; border-radius: 50%; font-size: 16px; line-height: 1; color: var(--text-muted); cursor: pointer; } .nb-sort-panel-close:hover { background: var(--background-modifier-error) !important; color: var(--text-on-accent); } .nb-sort-panel-empty { padding: 6px 8px; font-size: var(--font-ui-small); color: var(--text-faint); font-style: italic; } .nb-sort-row { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border-radius: var(--radius-s); background: var(--background-secondary); } .nb-sort-row-priority { display: flex; flex-direction: column; gap: 0; } .nb-sort-priority-btn { display: flex; align-items: center; justify-content: center; width: 16px; height: 14px; padding: 0; background: transparent !important; box-shadow: none !important; border: none; font-size: 10px; line-height: 1; color: var(--text-muted); cursor: pointer; } .nb-sort-priority-btn:hover:not(:disabled) { color: var(--text-normal); } .nb-sort-priority-btn:disabled { opacity: 0.3; cursor: default; } .nb-sort-row-name { flex: 1; font-size: var(--font-ui-small); color: var(--text-normal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-sort-dir-btn { padding: 2px 8px; background: var(--background-modifier-hover) !important; box-shadow: none !important; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); font-size: var(--font-ui-smaller); color: var(--text-normal); cursor: pointer; white-space: nowrap; } .nb-sort-dir-btn:hover { border-color: var(--interactive-accent); color: var(--interactive-accent); } .nb-sort-remove-btn { display: flex; align-items: center; justify-content: center; width: 18px; height: 18px; padding: 0; background: transparent !important; box-shadow: none !important; border: none; border-radius: 50%; font-size: 14px; line-height: 1; color: var(--text-muted); cursor: pointer; flex-shrink: 0; } .nb-sort-remove-btn:hover { background: var(--background-modifier-error) !important; color: var(--text-on-accent); } .nb-sort-add-row { padding: 2px 2px 0; } .nb-sort-add-select { width: 100%; padding: 5px 8px; border-radius: var(--radius-s); border: 1px dashed var(--background-modifier-border); background: transparent; color: var(--text-muted); font-size: var(--font-ui-small); cursor: pointer; outline: none; } .nb-sort-add-select:hover, .nb-sort-add-select:focus { border-color: var(--interactive-accent); color: var(--text-normal); } /* ── Column resize handle ────────────────────────────────────────────────── */ .nb-col-resizer { position: absolute; top: 0; right: 0; bottom: 0; width: 6px; cursor: col-resize; z-index: 2; user-select: none; } .nb-col-resizer::after { content: ''; position: absolute; right: 2px; top: 20%; bottom: 20%; width: 2px; border-radius: 1px; background: var(--interactive-accent); opacity: 0; transition: opacity 0.15s; } .nb-th:hover .nb-col-resizer::after, .nb-col-resizer:active::after { opacity: 0.5; } /* ── Pin button ──────────────────────────────────────────────────────────── */ .nb-pin-btn { opacity: 0; background: none; border: none; cursor: pointer; padding: 2px 3px; margin-right: 4px; font-size: 11px; color: var(--text-muted); border-radius: 3px; flex-shrink: 0; transition: opacity 0.15s, color 0.15s; line-height: 1; } .nb-th:hover .nb-pin-btn, .nb-pin-btn--active { opacity: 1; } .nb-pin-btn--active { color: var(--color-accent); } .nb-pin-btn:hover { background: var(--background-modifier-hover); } .nb-th-inner-title { display: flex; align-items: center; gap: 4px; padding: 0 6px; height: 100%; } /* ── Células genéricas ───────────────────────────────────────────────────── */ .nb-cell-text { padding: 0 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; display: flex; align-items: center; } .nb-cell-clickable { cursor: default; display: flex; align-items: center; width: 100%; height: 100%; padding: 0 10px; } .nb-cell-clickable:hover { background: var(--background-modifier-hover); } .nb-cell-editable { cursor: text; } .nb-cell-title-link { cursor: pointer; } .nb-cell-title-link:hover { text-decoration: underline; } .nb-cell-editable:hover { outline: 1px solid var(--background-modifier-border); outline-offset: -1px; } .nb-cell-empty { color: var(--text-faint); } .nb-cell-number { font-variant-numeric: tabular-nums; justify-content: flex-end; } .nb-cell-date { font-size: var(--font-ui-smaller); border-radius: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-cell-formula { padding: 4px 10px; color: var(--text-accent); font-size: var(--font-ui-smaller); font-variant-numeric: tabular-nums; line-height: 28px; } /* ── Link cells (url, email, phone) ─────────────────────────────────────────── */ .nb-cell-link-wrapper { display: flex; align-items: center; gap: 4px; overflow: hidden; } .nb-cell-link { color: var(--link-color); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; font-size: var(--font-ui-small); } .nb-cell-link:hover { text-decoration: underline; } .nb-cell-link-icon { color: var(--link-color); font-size: 10px; opacity: 0; flex-shrink: 0; cursor: pointer; transition: opacity 0.1s; } .nb-cell-clickable:hover .nb-cell-link-icon { opacity: 1; } /* ── Link cell validation error ──────────────────────────────────────────── */ .nb-link-edit-wrapper { position: relative; display: flex; flex-direction: column; width: 100%; } .nb-cell-input--error { border-color: var(--color-red) !important; outline: none; box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-red) 20%, transparent); } .nb-cell-error-msg { font-size: 10px; color: var(--color-red); padding: 2px 4px 0; white-space: nowrap; } /* ── Status cell – criar novo status ─────────────────────────────────────── */ .nb-status-option-row { display: flex; align-items: center; border-radius: 4px; transition: background 0.1s; } .nb-status-option-row:hover { background: var(--background-modifier-hover); } .nb-status-option-btn { flex: 1; } /* Remove o hover e o active individual do botão quando está dentro da row */ .nb-status-option-row .nb-status-option-btn:hover, .nb-status-option-row .nb-status-option-btn:focus, .nb-status-option-row .nb-status-option-btn.nb-select-option--active { background: none !important; } /* Aplica o active na linha inteira */ .nb-status-option-row:has(.nb-select-option--active) { background: var(--background-modifier-active-hover); } .nb-status-delete-btn { flex-shrink: 0; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; background: none; border: none; border-radius: 4px; color: var(--text-muted); cursor: pointer; font-size: 14px; opacity: 0; transition: opacity 0.1s, color 0.1s; margin-right: 4px; } .nb-status-option-row:hover .nb-status-delete-btn { opacity: 1; } .nb-status-delete-btn:hover { color: var(--color-red); background: color-mix(in srgb, var(--color-red) 12%, transparent); } .nb-status-color-swatch { flex-shrink: 0; width: 14px; height: 14px; border-radius: 50%; border: 2px solid transparent; cursor: pointer; opacity: 0; transition: opacity 0.1s, border-color 0.1s; margin-right: 2px; padding: 0; } .nb-status-option-row:hover .nb-status-color-swatch { opacity: 1; } .nb-status-color-swatch--active, .nb-status-color-swatch:hover { opacity: 1 !important; border-color: var(--text-normal); } /* Color picker popover */ .nb-status-color-picker { background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,0.25); padding: 8px; min-width: 176px; } .nb-status-color-grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: 4px; margin-bottom: 8px; } .nb-status-color-dot { width: 16px; height: 16px; border-radius: 50%; border: 2px solid transparent; cursor: pointer; padding: 0; transition: transform 0.1s, border-color 0.1s; } .nb-status-color-dot:hover { transform: scale(1.25); border-color: var(--text-normal); } .nb-status-color-custom { border-top: 1px solid var(--background-modifier-border); padding-top: 6px; } .nb-status-color-custom-label { display: flex; align-items: center; justify-content: space-between; font-size: var(--font-ui-small); color: var(--text-muted); cursor: pointer; gap: 8px; } .nb-status-color-input { width: 32px; height: 20px; border: none; border-radius: 4px; cursor: pointer; padding: 0; background: none; } .nb-status-new-row { display: flex; align-items: center; gap: 4px; padding: 4px 6px; border-top: 1px solid var(--background-modifier-border); margin-top: 2px; } .nb-status-new-input { flex: 1; height: 24px; padding: 0 6px; font-size: var(--font-ui-small); background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 4px; color: var(--text-normal); outline: none; } .nb-status-new-input:focus { border-color: var(--interactive-accent); } .nb-status-new-btn { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background: var(--interactive-accent); color: var(--text-on-accent); border: none; border-radius: 4px; cursor: pointer; font-size: 16px; line-height: 1; padding: 0; } .nb-status-new-btn:disabled { opacity: 0.4; cursor: default; } /* ── Formula editor floating panel ───────────────────────────────────────── */ .nb-formula-floating-panel { position: fixed; z-index: 9999; width: 320px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.28), 0 2px 8px rgba(0, 0, 0, 0.14); display: flex; flex-direction: column; overflow: hidden; } .nb-formula-titlebar { display: flex; align-items: center; gap: 6px; padding: 8px 10px; background: var(--background-secondary); border-bottom: 1px solid var(--background-modifier-border); cursor: move; user-select: none; } .nb-formula-titlebar-icon { font-size: 13px; color: var(--text-accent); flex-shrink: 0; } .nb-formula-titlebar-title { flex: 1; font-size: var(--font-ui-small); font-weight: 600; color: var(--text-normal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-formula-close { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: var(--radius-s); border: none; background: transparent; color: var(--text-muted); font-size: 16px; line-height: 1; cursor: pointer; flex-shrink: 0; } .nb-formula-close:hover { background: var(--background-modifier-error); color: var(--text-on-accent); } .nb-formula-body { display: flex; flex-direction: column; gap: 8px; padding: 10px; overflow-y: auto; max-height: calc(100vh - 120px); } .nb-formula-textarea { width: 100%; min-height: 70px; padding: 8px; border-radius: var(--radius-s); border: 1px solid var(--background-modifier-border); background: var(--background-primary); color: var(--text-normal); font-family: var(--font-monospace); font-size: var(--font-ui-smaller); line-height: 1.5; resize: vertical; box-sizing: border-box; outline: none; transition: border-color 150ms; } .nb-formula-textarea:focus { border-color: var(--interactive-accent); } .nb-formula-textarea--error { border-color: var(--color-red); } .nb-formula-textarea--ok { border-color: var(--color-green); } .nb-formula-feedback { display: flex; align-items: center; gap: 5px; font-size: var(--font-ui-smaller); line-height: 1.3; } .nb-formula-feedback--error { color: var(--color-red); } .nb-formula-feedback--ok { color: var(--color-green); } .nb-formula-cols-hint { border-top: 1px solid var(--background-modifier-border); padding-top: 6px; } .nb-formula-cols-label { font-size: var(--font-ui-smaller); color: var(--text-muted); display: block; margin-bottom: 4px; } .nb-formula-cols-list { display: flex; flex-wrap: wrap; gap: 4px; } .nb-formula-col-chip { display: inline-block; padding: 1px 6px; background: var(--background-modifier-hover); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); font-size: 11px; font-family: var(--font-monospace); color: var(--text-accent); cursor: pointer; user-select: none; } .nb-formula-col-chip:hover { background: var(--interactive-accent); color: var(--text-on-accent); border-color: var(--interactive-accent); } .nb-formula-ref { border-top: 1px solid var(--background-modifier-border); padding-top: 6px; } .nb-formula-ref-toggle { display: flex; align-items: center; gap: 5px; background: none; border: none; padding: 2px 0; font-size: var(--font-ui-smaller); color: var(--text-muted); cursor: pointer; width: 100%; text-align: left; } .nb-formula-ref-toggle:hover { color: var(--text-normal); } .nb-formula-ref-body { margin-top: 8px; display: flex; flex-direction: column; gap: 10px; max-height: 260px; overflow-y: auto; scrollbar-width: thin; } .nb-formula-ref-group-title { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-faint); margin-bottom: 4px; } .nb-formula-ref-table { width: 100%; border-collapse: collapse; } .nb-formula-ref-table tr + tr td { border-top: 1px solid var(--background-modifier-border); } .nb-formula-ref-fn, .nb-formula-ref-desc { padding: 3px 4px; font-size: 11px; vertical-align: top; line-height: 1.4; } .nb-formula-ref-fn { white-space: nowrap; width: 1%; padding-right: 10px; } .nb-formula-ref-fn code { font-family: var(--font-monospace); color: var(--text-accent); background: none; } .nb-formula-ref-desc { color: var(--text-muted); } .nb-formula-actions { display: flex; gap: 6px; justify-content: flex-end; } .nb-formula-save { padding: 4px 12px; border-radius: var(--radius-s); background: var(--interactive-accent); color: var(--text-on-accent); border: none; font-size: var(--font-ui-smaller); cursor: pointer; font-weight: 500; } .nb-formula-save:disabled { opacity: 0.4; cursor: not-allowed; } .nb-formula-save:not(:disabled):hover { background: var(--interactive-accent-hover); } .nb-formula-cancel { padding: 4px 10px; border-radius: var(--radius-s); background: transparent; color: var(--text-muted); border: 1px solid var(--background-modifier-border); font-size: var(--font-ui-smaller); cursor: pointer; } .nb-formula-cancel:hover { background: var(--background-modifier-hover); color: var(--text-normal); } /* ── Inputs de edição ────────────────────────────────────────────────────── */ .nb-cell-input { width: 100%; height: 34px; padding: 4px 10px; border: 2px solid var(--interactive-accent); border-radius: 0; background: var(--background-primary); color: var(--text-normal); font-size: var(--font-ui-small); outline: none; box-sizing: border-box; } .nb-cell-input--number { text-align: right; } .nb-cell-input--date, .nb-cell-input--time { font-size: var(--font-ui-smaller); -webkit-appearance: none; -moz-appearance: none; appearance: none; border-radius: 0 !important; } .nb-cell-date-editor { display: flex; align-items: center; gap: 4px; width: 100%; border-radius: 0; } .nb-cell-date-editor .nb-cell-input--date { flex: 1; min-width: 0; } .nb-cell-input--time { font-size: var(--font-ui-smaller); width: 80px; flex-shrink: 0; } .nb-cell-time-toggle { flex-shrink: 0; background: none; border: 1px solid var(--background-modifier-border); border-radius: 4px; cursor: pointer; padding: 2px 4px; font-size: 12px; opacity: 0.5; transition: opacity 0.15s; } .nb-cell-time-toggle:hover { opacity: 0.8; } .nb-cell-time-toggle--active { opacity: 1; background: var(--interactive-accent); border-color: var(--interactive-accent); } /* ── Checkbox ────────────────────────────────────────────────────────────── */ .nb-cell-checkbox-wrapper { display: flex; align-items: center; justify-content: center; width: 100%; min-height: var(--nb-row-height, 36px); padding: 0; box-sizing: border-box; } .nb-cell-checkbox { width: 16px; height: 16px; cursor: pointer; accent-color: var(--interactive-accent); } .nb-cell-checkbox-custom { width: 16px; height: 16px; border: 2px solid var(--text-faint); border-radius: 3px; background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: background 0.15s, border-color 0.15s; } .nb-cell-checkbox-custom--checked { background: var(--interactive-accent); border-color: var(--interactive-accent); } .nb-cell-checkbox-custom--indeterminate { background: var(--interactive-accent); border-color: var(--interactive-accent); } .nb-cell-check-icon { width: 12px; height: 12px; } /* ── Select / Multiselect ────────────────────────────────────────────────── */ .nb-cell-select-wrapper { position: relative; width: 100%; height: 100%; } .nb-cell-multiselect { gap: 3px; flex-wrap: nowrap; overflow: hidden; } .nb-select-badge { display: inline-flex; align-items: center; padding: 1px 7px; border-radius: 3px; font-size: var(--font-ui-smaller); font-weight: 500; white-space: nowrap; color: inherit; } .nb-select-dropdown { position: absolute; top: 100%; left: 0; z-index: 100; min-width: 160px; max-height: 240px; overflow-y: auto; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: var(--shadow-l); padding: 4px; } .nb-select-new-input { width: calc(100% - 8px); margin: 2px 4px 4px; padding: 4px 8px; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: var(--background-secondary); color: var(--text-normal); font-size: var(--font-ui-small); } .nb-select-new-input:focus { border-color: var(--interactive-accent); outline: none; } .nb-select-option-row { display: flex; align-items: center; border-radius: var(--radius-s); margin-bottom: 2px; } .nb-select-option-row:hover { background: var(--background-modifier-hover); } .nb-select-option-row:has(.nb-select-option--active) { background: var(--background-modifier-active-hover); } .nb-select-option-row .nb-select-option { flex: 1; min-width: 0; background: transparent !important; } .nb-select-option-row .nb-status-color-swatch { opacity: 1; } .nb-select-option-delete { flex-shrink: 0; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background: transparent; border: none; color: var(--text-muted); cursor: pointer; border-radius: var(--radius-s); font-size: 14px; opacity: 0; transition: opacity 0.15s; } .nb-select-option-row:hover .nb-select-option-delete { opacity: 1; } .nb-select-option-delete:hover { color: var(--text-error); background: var(--background-modifier-hover); } .nb-select-dropdown .nb-select-option { display: flex; align-items: center; justify-content: flex-start; gap: 6px; width: 100%; padding: 5px 8px; background: transparent; box-shadow: none; border: none; border-radius: var(--radius-s); cursor: pointer; text-align: left; font-size: var(--font-ui-small); color: var(--text-normal); } .nb-select-dropdown .nb-select-option:hover { background: var(--background-modifier-hover); } .nb-select-dropdown .nb-select-option--active { background: var(--background-modifier-active-hover); } .nb-select-clear { color: var(--text-muted); font-size: var(--font-ui-smaller); border-bottom: 1px solid var(--background-modifier-border); margin-bottom: 3px; padding-bottom: 6px; } .nb-checkbox-indicator { width: 14px; height: 14px; border: 1.5px solid var(--background-modifier-border); border-radius: 3px; flex-shrink: 0; } .nb-checkbox-indicator--checked { background: var(--interactive-accent); border-color: var(--interactive-accent); } /* ── Botão adicionar linha ───────────────────────────────────────────────── */ .nb-add-row-td { padding: 0; border-right: none; } .nb-add-row-btn { display: flex; align-items: center; gap: 6px; padding: 8px 12px; margin: 0; background: none; border: none; color: var(--text-muted); font-size: var(--font-ui-small); cursor: pointer; width: 100%; text-align: left; } .nb-add-row-btn:hover { color: var(--text-normal); background: var(--background-modifier-hover); } /* ── Barra de contagem de linhas ─────────────────────────────────────────── */ .nb-row-count-bar { flex-shrink: 0; display: flex; align-items: center; height: 28px; padding: 0 12px; border-top: 1px solid var(--background-modifier-border); background: var(--background-primary); } .nb-row-count { font-size: var(--font-ui-smaller); color: var(--text-muted); } /* ── Wrap de texto ──────────────────────────────────────────────────────────── */ .nb-table--wrap .nb-td-inner { height: auto; max-height: none; min-height: var(--nb-row-height); overflow: visible; align-items: flex-start; padding: 6px 0; } .nb-table--wrap .nb-cell-text { white-space: normal; word-break: break-word; overflow: visible; text-overflow: clip; align-items: flex-start; padding: 6px 10px; height: auto; } .nb-table--wrap .nb-cell-clickable { height: auto; min-height: var(--nb-row-height); align-items: flex-start; padding-top: 6px; padding-bottom: 6px; white-space: normal; word-break: break-word; } /* ── Linha de agregação ─────────────────────────────────────────────────────── */ .nb-tfoot { position: sticky; bottom: 0; z-index: 2; } .nb-agg-td { height: 28px; background: var(--background-primary); border-top: 1px solid var(--background-modifier-border); cursor: pointer; padding: 0; user-select: none; transition: background 0.1s; } .nb-agg-td:hover { background: var(--background-modifier-hover); } .nb-agg-td:hover .nb-agg-empty::after { content: 'Calcular'; font-size: var(--font-ui-smaller); color: var(--text-faint); padding: 0 10px; } .nb-agg-empty { display: flex; align-items: center; height: 100%; } .nb-agg-cell { display: flex; align-items: center; gap: 6px; padding: 0 10px; height: 100%; } .nb-agg-label { font-size: var(--font-ui-smaller); color: var(--text-faint); white-space: nowrap; } .nb-agg-value { font-size: var(--font-ui-smaller); font-weight: 500; color: var(--text-muted); white-space: nowrap; } .nb-agg-dropdown { min-width: 180px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.12); padding: 6px; z-index: 9999; display: flex; flex-direction: column; gap: 1px; } .nb-agg-dropdown .nb-menu-item { border-radius: 5px; padding: 6px 10px; width: 100%; opacity: 1 !important; color: var(--text-normal) !important; background: var(--background-modifier-hover); } .nb-agg-dropdown .nb-menu-item:hover { background: var(--background-modifier-hover); } .nb-agg-dropdown .nb-menu-item--active { background: var(--background-modifier-active-hover); color: var(--text-accent); font-weight: 500; } /* ── Conjunção AND/OR entre filtros ────────────────────────────────────────── */ .nb-pill-conjunction { display: inline-flex; align-items: center; justify-content: center; height: 20px; padding: 0 6px; margin-left: 14px; border-radius: 4px; border: 1px solid var(--background-modifier-border); background: var(--background-secondary); color: var(--text-muted); font-size: 10px; font-weight: 600; letter-spacing: 0.05em; cursor: pointer; user-select: none; transition: background 0.15s, color 0.15s; } .nb-pill-conjunction:hover { background: var(--background-modifier-hover); color: var(--text-normal); } .nb-pill-conjunction--or { background: var(--color-orange-rgb, 220, 140, 60); background: rgba(var(--color-orange-rgb, 220, 140, 60), 0.15); color: var(--color-orange); border-color: rgba(var(--color-orange-rgb, 220, 140, 60), 0.3); } .nb-pill-conjunction--or:hover { background: rgba(var(--color-orange-rgb, 220, 140, 60), 0.25); } /* ── Estados especiais ───────────────────────────────────────────────────── */ .nb-empty-state, .nb-loading { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; gap: 8px; color: var(--text-muted); font-size: var(--font-ui-small); } .nb-empty-rows td { text-align: center; padding: 32px; color: var(--text-muted); } /* ── Filter pills row ────────────────────────────────────────────────────── */ .nb-pills-row { display: flex; align-items: center; gap: 6px; padding: 4px 12px 6px; overflow-x: auto; overflow-y: visible; scrollbar-width: none; border-bottom: 1px solid var(--background-modifier-border); } .nb-pills-row::-webkit-scrollbar { display: none; } .nb-filter-pill-sortable { display: inline-flex; align-items: center; } .nb-pill-drag-handle { display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 100%; color: var(--text-muted); cursor: grab; opacity: 0; transition: opacity 120ms; user-select: none; flex-shrink: 0; outline: none; } .nb-filter-pill-sortable:hover .nb-pill-drag-handle { opacity: 1; } .nb-pill-drag-handle:active { cursor: grabbing; } .nb-filter-pill { display: inline-flex; align-items: center; gap: 4px; padding: 2px 6px 2px 8px; background: var(--background-modifier-hover); border: 1px solid var(--background-modifier-border); border-radius: 999px; color: var(--text-normal); font-size: var(--font-ui-smaller); cursor: pointer; white-space: nowrap; } .nb-filter-pill:hover, .nb-filter-pill--active { border-color: var(--interactive-accent); color: var(--interactive-accent); } .nb-filter-pill-icon { font-size: 10px; } .nb-filter-pill-name { font-weight: 500; } .nb-filter-pill-remove { display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 14px; border-radius: 50%; font-size: 12px; line-height: 1; color: var(--text-muted); cursor: pointer; } .nb-filter-pill-remove:hover { background: var(--background-modifier-border); color: var(--text-normal); } .nb-filter-pill-dropdown { min-width: 220px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: var(--shadow-l); padding: 8px; } /* ── Filter query UI (pill dropdown content) ─────────────────────────────── */ .nb-filter-query-row { display: flex; align-items: center; gap: 6px; padding: 4px 2px 6px; border-bottom: 1px solid var(--background-modifier-border); margin-bottom: 4px; } .nb-filter-query-name { font-size: var(--font-ui-small); font-weight: 500; color: var(--text-normal); white-space: nowrap; } .nb-filter-query-clear { display: flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin-left: auto; padding: 0; border: none; border-radius: 50%; background: transparent !important; box-shadow: none !important; font-size: 14px; line-height: 1; color: var(--text-muted); cursor: pointer; flex-shrink: 0; } .nb-filter-query-clear:hover { background: var(--background-modifier-border) !important; color: var(--text-normal); } .nb-filter-op-wrapper { position: relative; } .nb-filter-op-btn { display: inline-flex; align-items: center; gap: 4px; padding: 2px 6px; background: var(--background-modifier-hover) !important; box-shadow: none !important; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); font-size: var(--font-ui-small); color: var(--text-normal); cursor: pointer; white-space: nowrap; } .nb-filter-op-btn:hover, .nb-filter-op-btn--open { background: var(--background-modifier-active-hover) !important; border-color: var(--interactive-accent); } .nb-filter-op-dropdown { position: absolute; top: calc(100% + 4px); left: 0; z-index: 100; min-width: 160px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); box-shadow: var(--shadow-l); padding: 4px; } .nb-filter-value-input { width: 100%; padding: 5px 8px; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: var(--background-secondary); color: var(--text-normal); font-size: var(--font-ui-small); outline: none; box-sizing: border-box; } .nb-filter-value-input:focus { border-color: var(--interactive-accent); } .nb-filter-multi-select { display: flex; flex-direction: column; gap: 2px; max-height: 180px; overflow-y: auto; padding: 4px 0; } .nb-filter-multi-option { display: flex; align-items: center; gap: 6px; padding: 3px 8px; border-radius: 4px; cursor: pointer; font-size: var(--font-ui-small); } .nb-filter-multi-option:hover { background: var(--background-modifier-hover); } .nb-filter-multi-option input[type="checkbox"] { margin: 0; } .nb-filter-option-badge { padding: 1px 8px; border-radius: 4px; background: var(--background-modifier-hover); font-size: var(--font-ui-smaller); } .nb-fields-dropdown .nb-menu-item--active, .nb-column-menu .nb-menu-item--active, .nb-filter-op-dropdown .nb-menu-item--active, .nb-filter-pill-dropdown .nb-menu-item--active { background: var(--background-modifier-active-hover); color: var(--interactive-accent); } /* ── Filter menu dropdown (right-aligned) ────────────────────────────────── */ .nb-filter-menu-dropdown { left: auto; right: 0; min-width: 200px; } /* ── Lookup config panel ─────────────────────────────────────────────────── */ .nb-lookup-section { display: flex; flex-direction: column; gap: 4px; } .nb-lookup-label { font-size: var(--font-ui-smaller); font-weight: 600; color: var(--text-muted); } .nb-lookup-select { width: 100%; padding: 6px 8px; border-radius: var(--radius-s); border: 1px solid var(--background-modifier-border); background: var(--background-primary); color: var(--text-normal); font-size: var(--font-ui-small); cursor: pointer; } .nb-lookup-select:disabled { opacity: 0.5; cursor: not-allowed; } .nb-lookup-hint { font-size: var(--font-ui-smaller); color: var(--text-faint); margin: 0; font-style: italic; line-height: 1.4; } .nb-lookup-checkbox { display: flex; align-items: center; gap: 6px; font-size: var(--font-ui-small); cursor: pointer; } .nb-cell-lookup { color: var(--text-accent); } .nb-cell-rollup { font-style: italic; color: var(--text-muted); } /* ── Relation cell ─────────────────────────────────────────────────────────── */ .nb-relation-badge { display: inline-block; padding: 1px 8px; border-radius: 10px; background: var(--background-modifier-hover); color: var(--text-normal); font-size: var(--font-ui-smaller); font-weight: 500; } .nb-relation-dropdown { min-width: 180px; max-height: 240px; overflow-y: auto; } .nb-relation-search { width: 100%; padding: 5px 8px; border: none; border-bottom: 1px solid var(--background-modifier-border); background: transparent; color: var(--text-normal); font-size: var(--font-ui-small); outline: none; box-sizing: border-box; } .nb-relation-badges { display: flex; flex-wrap: wrap; gap: 3px; } .nb-relation-check { margin-right: 4px; color: var(--interactive-accent); font-size: var(--font-ui-smaller); } .nb-relation-empty { padding: 8px; font-size: var(--font-ui-smaller); color: var(--text-faint); text-align: center; } /* ── Number format panel ─────────────────────────────────────────────────── */ .nb-numfmt-preview { padding: 10px 12px; background: var(--background-secondary); border-radius: var(--radius-s); border: 1px solid var(--background-modifier-border); font-family: var(--font-monospace); font-size: 16px; font-weight: 600; color: var(--text-normal); text-align: center; letter-spacing: 0.02em; } .nb-numfmt-checkbox-row { display: flex; align-items: center; gap: 8px; } .nb-numfmt-text-input { width: 100%; padding: 6px 8px; border-radius: var(--radius-s); border: 1px solid var(--background-modifier-border); background: var(--background-primary); color: var(--text-normal); font-size: var(--font-ui-small); box-sizing: border-box; } .nb-numfmt-text-input:focus { outline: none; border-color: var(--interactive-accent); } /* ── View tabs ────────────────────────────────────────────────────────────── */ .nb-view-tabs { display: flex; align-items: center; gap: 2px; padding: 0 8px; border-bottom: 1px solid var(--background-modifier-border); background: var(--background-primary); flex-shrink: 0; } .nb-view-tab { display: flex; align-items: center; gap: 5px; padding: 6px 10px; border: none; border-bottom: 2px solid transparent; background: transparent; color: var(--text-muted); font-size: var(--font-ui-small); cursor: pointer; border-radius: var(--radius-s) var(--radius-s) 0 0; transition: color 0.1s, border-color 0.1s; white-space: nowrap; } .nb-view-tab:hover { color: var(--text-normal); background: var(--background-modifier-hover); } .nb-view-tab--active { color: var(--text-normal); border-bottom-color: var(--interactive-accent); font-weight: 500; } .nb-view-tab--drag-over { background: var(--background-modifier-hover); border-left: 2px solid var(--interactive-accent); } .nb-view-tab-icon { font-size: 13px; line-height: 1; } .nb-view-tab-remove { margin-left: 2px; padding: 0 3px; border-radius: var(--radius-s); font-size: 13px; color: var(--text-faint); line-height: 1; cursor: pointer; } .nb-view-tab-remove:hover { color: var(--text-normal); background: var(--background-modifier-hover); } .nb-view-tab-rename-input { background: var(--background-primary); border: 1px solid var(--interactive-accent); border-radius: var(--radius-s); color: var(--text-normal); font-size: var(--font-ui-small); padding: 0 4px; height: 18px; width: 80px; outline: none; } .nb-view-tab-add { position: relative; margin-left: 4px; } .nb-view-tab-add-btn { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border: none; background: transparent; color: var(--text-muted); font-size: 16px; cursor: pointer; border-radius: var(--radius-s); } .nb-view-tab-add-btn:hover { color: var(--text-normal); background: var(--background-modifier-hover); } .nb-view-add-menu { position: absolute; top: calc(100% + 4px); left: 0; z-index: 100; } /* ── List view ────────────────────────────────────────────────────────────── */ .nb-list { display: flex; flex-direction: column; overflow-y: auto; flex: 1; } .nb-list-row { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; padding: 10px 12px; border-bottom: 1px solid var(--background-modifier-border); cursor: pointer; transition: background 0.1s; } .nb-list-row:hover { background: var(--background-modifier-hover); } .nb-list-row-icon { font-size: 14px; flex-shrink: 0; color: var(--text-muted); } .nb-list-row-title { font-size: var(--font-ui-small); font-weight: 500; color: var(--text-normal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-list-row-props { display: flex; align-items: center; gap: 3px 5px; flex-wrap: wrap; flex-basis: 100%; width: 100%; padding-left: 26px; margin-top: 2px; } .nb-list-prop { display: flex; align-items: center; gap: 3px; padding: 1px 6px; font-size: 11px; white-space: nowrap; flex-shrink: 0; border-radius: 4px; background: var(--background-secondary); border-radius: 10px; font-size: var(--font-ui-smaller); white-space: nowrap; max-width: 200px; overflow: hidden; } .nb-list-prop-name { color: var(--text-muted); flex-shrink: 0; } .nb-list-prop-value { color: var(--text-normal); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 120px; } .nb-list-add-row { margin: 6px 12px; align-self: flex-start; } /* pill operator select (used in list filter pills) */ .nb-pill-op-select { border: none; background: transparent; color: var(--text-muted); font-size: var(--font-ui-smaller); cursor: pointer; padding: 0 2px; } /* embed tabs: sem borda inferior, mais compactas */ .nb-view-tabs--embed { border-bottom-color: transparent; padding: 0 4px; gap: 1px; } .nb-view-tabs--embed .nb-view-tab { padding: 4px 8px; font-size: var(--font-ui-smaller); } /* ── Board (Kanban) ──────────────────────────────────────────────────────── */ .nb-board { overflow-x: auto; display: flex; gap: 12px; padding: 12px 0 16px; align-items: flex-start; min-height: 200px; } .nb-board-column { flex: 0 0 260px; min-width: 0; background: var(--background-secondary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); display: flex; flex-direction: column; gap: 0; max-height: calc(100vh - 220px); overflow: hidden; transition: background 0.15s; } .nb-board-column--card-over { background: var(--background-modifier-hover); border-color: var(--interactive-accent); } .nb-board-column--col-over { border: 2px dashed var(--interactive-accent); opacity: 0.8; } .nb-board-column-drag-handle { cursor: grab; color: var(--text-faint); font-size: 14px; padding: 0 2px; flex-shrink: 0; user-select: none; } .nb-board-column-drag-handle:active { cursor: grabbing; } .nb-board--dragging { scroll-snap-type: none !important; } .nb-touch-drag-source { opacity: 0.3; } .nb-touch-drag-hidden { visibility: hidden; } .nb-board-column-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 12px 8px; border-bottom: 1px solid var(--background-modifier-border); gap: 6px; flex-shrink: 0; } .nb-board-column-badge { display: inline-block; padding: 2px 8px; border-radius: var(--radius-s); font-size: var(--font-ui-smaller); font-weight: 600; color: var(--text-on-accent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 160px; } .nb-board-column-name { font-size: var(--font-ui-small); font-weight: 600; color: var(--text-normal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 180px; } .nb-board-column-count { margin-left: auto; flex-shrink: 0; font-size: var(--font-ui-smaller); color: var(--text-faint); background: var(--background-modifier-border); border-radius: 10px; padding: 1px 7px; cursor: pointer; transition: background 0.15s, color 0.15s; } .nb-board-column-count:hover { background: var(--interactive-accent); color: var(--text-on-accent); } .nb-board-column-count--over { background: #F44336; color: #fff; font-weight: 600; } .nb-board-column--over-limit { border-color: #F44336 !important; } .nb-board-limit-input-wrapper { padding: 4px 8px 0; } .nb-board-limit-input { width: 100%; padding: 4px 8px; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: var(--background-secondary); color: var(--text-normal); font-size: var(--font-ui-smaller); text-align: center; } .nb-board-limit-input:focus { border-color: var(--interactive-accent); outline: none; } .nb-board-show-more { width: 100%; padding: 6px; margin-top: 2px; background: transparent; border: 1px dashed var(--background-modifier-border); border-radius: var(--radius-s); color: var(--text-muted); font-size: var(--font-ui-smaller); cursor: pointer; transition: background 0.15s, color 0.15s; } .nb-board-show-more:hover { background: var(--background-modifier-hover); color: var(--text-normal); } .nb-board-cards { padding: 8px; display: flex; flex-direction: column; gap: 6px; overflow-y: auto; flex: 1; } .nb-board-card { background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); padding: 8px 10px; cursor: pointer; transition: box-shadow 0.1s, border-color 0.1s; user-select: none; } .nb-board-card:hover { border-color: var(--interactive-accent); box-shadow: 0 1px 4px var(--background-modifier-box-shadow); } .nb-board-card[draggable='true']:active { opacity: 0.7; cursor: grabbing; } .nb-board-card-title { font-size: var(--font-ui-small); font-weight: 500; color: var(--text-normal); margin-bottom: 4px; } .nb-board-card-props { display: flex; flex-direction: column; gap: 2px; } .nb-board-card-prop { display: flex; gap: 4px; font-size: var(--font-ui-smaller); } .nb-board-card-prop-name { color: var(--text-faint); flex-shrink: 0; } .nb-board-card-prop-value { color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-board-add-card { margin: 0; padding: 6px 12px; border: none; background: transparent; color: var(--text-faint); font-size: var(--font-ui-smaller); cursor: pointer; text-align: left; border-top: 1px solid var(--background-modifier-border); flex-shrink: 0; transition: color 0.1s, background 0.1s; } .nb-board-add-card:hover { color: var(--text-normal); background: var(--background-modifier-hover); } .nb-toolbar-toggle { display: flex; align-items: center; gap: 5px; cursor: pointer; font-weight: normal; } .nb-toolbar-toggle input[type='checkbox'] { margin: 0; cursor: pointer; } /* ── Gallery ─────────────────────────────────────────────────────────────── */ .nb-gallery { display: grid; gap: 12px; padding: 12px 0 16px; align-items: start; } .nb-gallery-card { background: var(--background-secondary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); overflow: hidden; cursor: pointer; transition: box-shadow 0.15s, border-color 0.15s; display: flex; flex-direction: column; } .nb-gallery-card:hover { border-color: var(--interactive-accent); box-shadow: 0 2px 8px var(--background-modifier-box-shadow); } .nb-gallery-cover { width: 100%; display: flex; align-items: center; justify-content: center; overflow: hidden; flex-shrink: 0; } .nb-gallery-card--small .nb-gallery-cover { height: 80px; } .nb-gallery-card--medium .nb-gallery-cover { height: 120px; } .nb-gallery-card--large .nb-gallery-cover { height: 160px; } .nb-gallery-cover--text { background: var(--background-modifier-border); padding: 8px 12px; text-align: center; } .nb-gallery-cover--text span { font-size: var(--font-ui-small); color: var(--text-muted); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; word-break: break-word; } .nb-gallery-cover--empty { background: var(--background-modifier-border); } .nb-gallery-cover-icon { font-size: 28px; opacity: 0.3; } .nb-gallery-body { padding: 10px 12px 12px; display: flex; flex-direction: column; gap: 6px; flex: 1; } .nb-gallery-title { font-size: var(--font-ui-small); font-weight: 600; color: var(--text-normal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-gallery-props { display: flex; flex-direction: column; gap: 3px; } .nb-gallery-prop { display: flex; gap: 4px; font-size: var(--font-ui-smaller); } .nb-gallery-prop-name { color: var(--text-faint); flex-shrink: 0; } .nb-gallery-prop-value { color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-gallery-card--add { border-style: dashed; min-height: 80px; cursor: pointer; } .nb-gallery-card--add:hover { background: var(--background-modifier-hover); } .nb-gallery-add-inner { display: flex; align-items: center; justify-content: center; flex: 1; padding: 24px; color: var(--text-faint); font-size: var(--font-ui-small); } /* ── Gallery cover image ─────────────────────────────────────────────────── */ .nb-gallery-cover--image { padding: 0; overflow: hidden; } .nb-gallery-cover--image img { width: 100%; height: 100%; object-fit: cover; display: block; } /* ── Audio cell ──────────────────────────────────────────────────────────── */ .nb-cell-audio { display: flex; align-items: center; width: 100%; height: 100%; padding: 0 4px; box-sizing: border-box; } .nb-audio-player { width: 100%; height: 28px; min-width: 120px; } /* ── Video cell ──────────────────────────────────────────────────────────── */ .nb-cell-video { display: flex; align-items: center; width: 100%; height: 100%; padding: 0; box-sizing: border-box; } .nb-video-cell-content { display: flex; align-items: center; gap: 6px; overflow: hidden; width: 100%; padding: 0 10px; } .nb-video-cell-icon { flex-shrink: 0; cursor: pointer; font-size: 12px; color: var(--interactive-accent); } .nb-video-cell-link { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; color: var(--text-accent); font-size: var(--font-ui-small); } .nb-video-cell-link:hover { text-decoration: underline; } .nb-video-modal-backdrop { position: fixed; inset: 0; z-index: 10000; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; } .nb-video-modal { position: relative; max-width: 90vw; max-height: 80vh; } .nb-video-modal-player { width: 100%; max-height: 80vh; border-radius: var(--radius-m); } .nb-video-modal-close { position: absolute; top: -12px; right: -12px; width: 28px; height: 28px; border-radius: 50%; border: none; background: var(--background-primary); color: var(--text-normal); font-size: 16px; cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: var(--shadow-s); } /* ── Image cell ──────────────────────────────────────────────────────────── */ .nb-cell-image { display: flex; align-items: center; width: 100%; height: 100%; cursor: pointer; padding: 0 6px; box-sizing: border-box; } .nb-cell-image--empty { color: var(--text-faint); font-size: var(--font-ui-small); } .nb-image-cell-content { display: flex; align-items: center; gap: 6px; width: 100%; overflow: hidden; } .nb-image-cell-thumb { width: 24px; height: 24px; object-fit: cover; border-radius: 2px; flex-shrink: 0; } .nb-image-cell-link { font-size: var(--font-ui-small); color: var(--link-color); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; text-decoration: none; } .nb-image-cell-link:hover { text-decoration: underline; } /* ── Image picker dropdown ───────────────────────────────────────────────── */ .nb-image-picker { position: fixed; z-index: 1000; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 6px; box-shadow: 0 4px 16px rgba(0,0,0,0.2); min-width: 240px; max-width: 340px; max-height: 320px; display: flex; flex-direction: column; overflow: hidden; } .nb-image-picker-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; border-bottom: 1px solid var(--background-modifier-border); font-size: var(--font-ui-small); font-weight: 600; color: var(--text-muted); flex-shrink: 0; } .nb-image-picker-clear { background: none; border: none; cursor: pointer; color: var(--text-faint); font-size: var(--font-ui-small); padding: 2px 6px; border-radius: 3px; } .nb-image-picker-clear:hover { background: var(--background-modifier-hover); color: var(--text-normal); } .nb-image-picker-empty { padding: 16px; text-align: center; color: var(--text-faint); font-size: var(--font-ui-small); } .nb-image-picker-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(64px, 1fr)); gap: 6px; padding: 8px; overflow-y: auto; flex: 1; } .nb-image-picker-item { display: flex; flex-direction: column; align-items: center; gap: 3px; cursor: pointer; padding: 4px; border-radius: 4px; border: 2px solid transparent; background: none; } .nb-image-picker-item:hover { background: var(--background-modifier-hover); } .nb-image-picker-item--selected { border-color: var(--interactive-accent); background: var(--background-modifier-hover); } .nb-image-picker-thumb { width: 56px; height: 48px; object-fit: cover; border-radius: 3px; display: block; } .nb-image-picker-name { font-size: 9px; color: var(--text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 60px; text-align: center; } /* ── Calendar view ───────────────────────────────────────────────────────── */ .nb-cal-nav { display: flex; align-items: center; gap: 4px; } .nb-cal-nav-arrow { font-size: 18px; line-height: 1; padding: 2px 8px; } .nb-cal-today-btn { font-size: var(--font-ui-small); } .nb-cal-month-label { font-size: var(--font-ui-small); font-weight: 600; color: var(--text-normal); min-width: 160px; text-align: center; } .nb-cal-no-field { display: flex; align-items: center; justify-content: center; padding: 48px 24px; color: var(--text-faint); font-size: var(--font-ui-small); } .nb-cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); border-top: 1px solid var(--background-modifier-border); border-left: 1px solid var(--background-modifier-border); flex: 1; overflow-y: auto; } .nb-cal-day-header { padding: 6px 8px; font-size: var(--font-ui-smaller); font-weight: 600; color: var(--text-faint); text-align: center; border-right: 1px solid var(--background-modifier-border); border-bottom: 1px solid var(--background-modifier-border); background: var(--background-secondary); text-transform: uppercase; letter-spacing: 0.04em; } /* View mode toggle */ .nb-cal-view-toggle { display: flex; } .nb-cal-view-btn { padding: 2px 10px; font-size: var(--font-ui-smaller); background: var(--background-secondary); border: 1px solid var(--background-modifier-border); cursor: pointer; color: var(--text-muted); border-radius: 0; } .nb-cal-view-btn:first-child { border-radius: var(--radius-s) 0 0 var(--radius-s); } .nb-cal-view-btn:last-child { border-radius: 0 var(--radius-s) var(--radius-s) 0; margin-left: -1px; } .nb-cal-view-btn:hover { background: var(--background-modifier-hover); } .nb-cal-view-btn--active { background: var(--interactive-accent); color: var(--text-on-accent); font-weight: 600; border-color: var(--interactive-accent); z-index: 1; position: relative; } .nb-cal-view-btn:not(.nb-cal-view-btn--active) { opacity: 0.6; } /* Week grid: cells fill remaining height */ .nb-cal-cell { border-right: 1px solid var(--background-modifier-border); border-bottom: 1px solid var(--background-modifier-border); min-height: 90px; display: flex; flex-direction: column; cursor: pointer; transition: background 0.1s; } .nb-cal-cell:hover { background: var(--background-modifier-hover); } .nb-cal-cell--outside { background: var(--background-secondary); cursor: default; } .nb-cal-cell--outside:hover { background: var(--background-secondary); } .nb-cal-cell--today { background: color-mix(in srgb, var(--interactive-accent) 5%, transparent); } .nb-cal-cell--drag-over { background: color-mix(in srgb, var(--interactive-accent) 15%, transparent) !important; outline: 2px dashed var(--interactive-accent); outline-offset: -2px; } .nb-cal-cell--today:hover { background: color-mix(in srgb, var(--interactive-accent) 10%, transparent); } .nb-cal-cell-header { padding: 4px 6px 2px; display: flex; align-items: center; justify-content: flex-end; } .nb-cal-day-num { font-size: var(--font-ui-small); color: var(--text-muted); line-height: 1; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; border-radius: 50%; } .nb-cal-day-num--today { background: var(--interactive-accent); color: var(--text-on-accent); font-weight: 600; } .nb-cal-cell-body { padding: 2px 4px 4px; display: flex; flex-direction: column; gap: 2px; flex: 1; } .nb-cal-card { background: var(--interactive-accent); color: var(--text-on-accent); border-radius: 3px; padding: 2px 5px; cursor: pointer; font-size: 11px; line-height: 1.3; display: flex; flex-direction: column; gap: 1px; transition: filter 0.1s; } .nb-cal-card:hover { filter: brightness(1.15); } .nb-cal-card-title-row { display: flex; align-items: center; gap: 4px; min-width: 0; } .nb-cal-time-badge { font-size: 9px; font-weight: 600; opacity: 0.9; white-space: nowrap; flex-shrink: 0; } .nb-cal-card-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-weight: 500; } .nb-cal-card-props { display: flex; gap: 4px; flex-wrap: wrap; } .nb-cal-card-prop { font-size: 10px; opacity: 0.85; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; } /* ── Week view with time slots ──────────────────────────────────────────── */ .nb-cal-week-container { display: flex; flex-direction: column; border: 1px solid var(--background-modifier-border); border-radius: 0; overflow: hidden; } .nb-cal-week-header { display: grid; grid-template-columns: 50px repeat(7, 1fr); border-bottom: 1px solid var(--background-modifier-border); } .nb-cal-week-day-header { text-align: center; font-size: var(--font-ui-smaller); font-weight: 600; padding: 6px 4px; color: var(--text-muted); } .nb-cal-week-day-header--today { color: var(--interactive-accent); } /* All-day row */ .nb-cal-week-allday { display: grid; grid-template-columns: 50px repeat(7, 1fr); border-bottom: 2px solid var(--background-modifier-border); min-height: 28px; } .nb-cal-week-allday-label { display: flex; align-items: center; justify-content: center; font-size: 9px; color: var(--text-muted); text-transform: uppercase; } .nb-cal-week-allday-cell { display: flex; flex-wrap: wrap; gap: 2px; padding: 2px; border-left: 1px solid var(--background-modifier-border); min-height: 24px; cursor: pointer; } .nb-cal-card--allday { font-size: 10px; padding: 1px 4px; } /* Time body (scrollable) */ .nb-cal-week-body { display: grid; grid-template-columns: 50px repeat(7, 1fr); max-height: 600px; overflow-y: auto; position: relative; } .nb-cal-week-time-gutter { display: flex; flex-direction: column; } .nb-cal-week-hour-label { height: 48px; font-size: 9px; color: var(--text-muted); text-align: right; padding-right: 6px; padding-top: 0; line-height: 1; box-sizing: border-box; border-bottom: 1px solid transparent; } .nb-cal-week-day-col { position: relative; border-left: 1px solid var(--background-modifier-border); cursor: pointer; } .nb-cal-week-day-col--today { background: var(--background-secondary-alt); } .nb-cal-week-hour-slot { height: 48px; border-bottom: 1px solid var(--background-modifier-border-hover); box-sizing: border-box; } .nb-cal-week-hour-slot:nth-child(even) { border-bottom-style: dotted; } /* Timed event cards (absolutely positioned) */ .nb-cal-card--timed { position: absolute; left: 2px; right: 2px; min-height: 20px; z-index: 1; font-size: 10px; padding: 1px 4px; border-radius: 3px; } /* Current time indicator line (spans full week body width) */ .nb-cal-now-line { position: absolute; left: 50px; right: 0; height: 2px; background: var(--color-red, #e53935); z-index: 3; pointer-events: none; grid-column: 1 / -1; } .nb-cal-now-line::before { content: ''; position: absolute; left: -4px; top: -3px; width: 8px; height: 8px; border-radius: 50%; background: var(--color-red, #e53935); } /* No-date section */ .nb-cal-no-date { border-top: 1px solid var(--background-modifier-border); padding: 12px 16px; } .nb-cal-no-date-title { font-size: var(--font-ui-small); font-weight: 600; color: var(--text-muted); margin-bottom: 8px; } .nb-cal-no-date-list { display: flex; flex-wrap: wrap; gap: 4px; } .nb-cal-card--no-date { background: var(--background-modifier-border); color: var(--text-muted); } .nb-cal-card--no-date:hover { filter: brightness(0.95); } /* ── Timeline (Gantt) view ───────────────────────────────────────────────── */ .nb-tl-body { overflow: auto; flex: 1; min-height: 200px; } .nb-tl-canvas-wrapper { display: flex; align-items: flex-start; } /* Sidebar (sticky left) */ .nb-tl-sidebar { position: sticky; left: 0; z-index: 10; flex-shrink: 0; background: var(--background-primary); border-right: 1px solid var(--background-modifier-border); } .nb-tl-sidebar-corner { position: sticky; top: 0; z-index: 15; background: var(--background-secondary); border-bottom: 1px solid var(--background-modifier-border); border-right: 1px solid var(--background-modifier-border); } .nb-tl-sidebar-row { display: flex; align-items: center; padding: 0 10px; gap: 6px; border-bottom: 1px solid var(--background-modifier-border); cursor: pointer; font-size: var(--font-ui-small); box-sizing: border-box; } .nb-tl-sidebar-row:hover { background: var(--background-modifier-hover); } .nb-tl-sidebar-group { background: var(--background-secondary); font-weight: 600; font-size: var(--font-ui-smaller); color: var(--text-muted); cursor: default; } .nb-tl-sidebar-group:hover { background: var(--background-secondary); } .nb-tl-row-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .nb-tl-group-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } /* Canvas right column */ .nb-tl-right { flex-shrink: 0; position: relative; } /* Sticky header */ .nb-tl-header { position: sticky; top: 0; z-index: 5; background: var(--background-secondary); border-bottom: 1px solid var(--background-modifier-border); overflow: hidden; } .nb-tl-header-row { position: relative; box-sizing: border-box; } .nb-tl-header-top-cell { position: absolute; top: 0; height: 100%; display: flex; align-items: center; padding: 0 8px; font-size: var(--font-ui-smaller); font-weight: 600; color: var(--text-muted); border-right: 1px solid var(--background-modifier-border); box-sizing: border-box; overflow: hidden; white-space: nowrap; } .nb-tl-header-bottom-cell { position: absolute; top: 0; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 10px; color: var(--text-faint); border-right: 1px solid var(--background-modifier-border); box-sizing: border-box; overflow: hidden; } /* Rows */ .nb-tl-row { position: relative; border-bottom: 1px solid var(--background-modifier-border); box-sizing: border-box; } .nb-tl-row--odd { background: var(--background-secondary); } .nb-tl-group-row { background: var(--background-secondary); border-bottom: 1px solid var(--background-modifier-border); position: relative; } .nb-tl-group-row::after { content: ''; position: absolute; top: 50%; left: 8px; right: 8px; height: 1px; background: var(--background-modifier-border); } /* Bar */ .nb-tl-bar { position: absolute; border-radius: 3px; background: var(--interactive-accent); color: var(--text-on-accent); font-size: 11px; display: flex; align-items: center; padding: 0 6px; gap: 2px; overflow: hidden; white-space: nowrap; cursor: pointer; box-sizing: border-box; min-width: 8px; transition: filter 0.1s; } .nb-tl-bar:hover { filter: brightness(1.12); } .nb-tl-bar-title { font-weight: 500; overflow: hidden; text-overflow: ellipsis; flex-shrink: 1; min-width: 0; } .nb-tl-bar-field { opacity: 0.85; font-size: 10px; white-space: nowrap; flex-shrink: 0; } .nb-tl-bar-handle { position: absolute; top: 0; width: 8px; height: 100%; cursor: ew-resize; opacity: 0; z-index: 2; border-radius: 2px; transition: opacity 0.15s; } .nb-tl-bar-handle--left { left: 0; } .nb-tl-bar-handle--right { right: 0; } .nb-tl-bar:hover .nb-tl-bar-handle { opacity: 1; background: rgba(255, 255, 255, 0.35); } /* Today line */ .nb-tl-today-line { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--color-red, #e44); z-index: 4; pointer-events: none; } /* No-interval section */ .nb-tl-no-interval { border-top: 1px solid var(--background-modifier-border); padding: 10px 16px; flex-shrink: 0; } .nb-tl-no-interval-title { font-size: var(--font-ui-small); font-weight: 600; color: var(--text-muted); margin-bottom: 8px; cursor: pointer; user-select: none; } .nb-tl-no-interval-title:hover { color: var(--text-normal); } .nb-tl-no-interval-list { display: flex; flex-wrap: wrap; gap: 4px; } /* Zoom selector */ .nb-tl-zoom-group { display: flex; } .nb-tl-zoom-btn { padding: 2px 10px; font-size: var(--font-ui-smaller); background: var(--background-secondary); border: 1px solid var(--background-modifier-border); cursor: pointer; color: var(--text-muted); border-radius: 0; } .nb-tl-zoom-btn:first-child { border-radius: var(--radius-s) 0 0 var(--radius-s); } .nb-tl-zoom-btn:last-child { border-radius: 0 var(--radius-s) var(--radius-s) 0; margin-left: -1px; } .nb-tl-zoom-btn:not(:first-child):not(:last-child) { margin-left: -1px; } .nb-tl-zoom-btn:hover { background: var(--background-modifier-hover); } .nb-tl-zoom-btn--active { background: var(--interactive-accent); color: var(--text-on-accent); font-weight: 600; border-color: var(--interactive-accent); z-index: 1; position: relative; } .nb-tl-zoom-btn:not(.nb-tl-zoom-btn--active) { opacity: 0.6; } /* ── Timeline resizing cursor ─────────────────────────────────────────────── */ body.nb-tl-resizing, body.nb-tl-resizing * { cursor: ew-resize !important; user-select: none !important; } /* ── Subfolder path indicator ──────────────────────────────────────────── */ .nb-folder-path { font-size: var(--font-ui-smaller); color: var(--text-faint); line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .nb-folder-path--cell { display: flex; align-items: center; height: 100%; padding: 0 8px; } .nb-subfolder-toggle svg { vertical-align: middle; } /* ═══════════════════════════════════════════════════════════════════════════ Mobile & Responsiveness ═══════════════════════════════════════════════════════════════════════════ */ /* ── #60 Tap targets — minimum 44px touch areas on mobile ────────────────── */ .is-mobile .nb-toolbar-btn { min-height: 44px; padding: 8px 12px; } .is-mobile .nb-toolbar-btn--icon { min-height: 44px; padding: 8px 12px; } .is-mobile .nb-view-tab { min-height: 40px; padding: 6px 12px; } .is-mobile .nb-view-tab-remove { width: 22px; height: 22px; font-size: 16px; display: inline-flex; align-items: center; justify-content: center; } .is-mobile .nb-view-tab-add-btn { min-height: 40px; padding: 6px 14px; } .is-mobile .nb-menu-item { min-height: 44px; padding: 8px 12px; gap: 10px; } .is-mobile .nb-field-row { min-height: 44px; padding: 6px 8px; } .is-mobile .nb-cell-checkbox-custom { width: 20px; height: 20px; border: 2px solid var(--text-muted); border-radius: 4px; } .is-mobile .nb-cell-check-icon { width: 16px; height: 16px; } .is-mobile .nb-field-checkbox { width: 18px; height: 18px; } .is-mobile .nb-board-card { padding: 10px 12px; } .is-mobile .nb-list { display: grid; grid-template-columns: max-content; overflow-x: auto; -webkit-overflow-scrolling: touch; } .is-mobile .nb-list-row { display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; white-space: nowrap; min-height: 44px; padding: 10px 12px; } .is-mobile .nb-list-row-title { flex-shrink: 0; } .is-mobile .nb-list-row-props { display: flex; flex-wrap: nowrap; flex-shrink: 0; flex-basis: auto; width: auto; padding-left: 0; margin-top: 0; } .is-mobile .nb-cal-cell { min-height: 60px; } .is-mobile .nb-cal-card { min-height: 28px; padding: 3px 6px; } .nb-cal-more-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 20px; padding: 0 6px; background: var(--interactive-accent); color: var(--text-on-accent); border: none; border-radius: 10px; font-size: 11px; font-weight: 600; cursor: pointer; margin-top: 2px; } .nb-cal-more-badge:active { opacity: 0.8; } .nb-cal-day-actions { padding-left: 20px; } .nb-cal-day-actions .nb-menu-item { font-size: var(--font-ui-smaller); min-height: 36px; } .is-mobile .nb-row-count-bar { display: none; } .is-mobile .nb-cal-nav-arrow { min-height: 44px; padding: 8px 12px; } .is-mobile .nb-cal-today-btn { min-height: 44px; } /* Week view mobile */ .is-mobile .nb-cal-week-body { max-height: 400px; } .is-mobile .nb-cal-week-time-gutter { min-width: 36px; } .is-mobile .nb-cal-week-header { grid-template-columns: 36px repeat(7, 1fr); } .is-mobile .nb-cal-week-allday { grid-template-columns: 36px repeat(7, 1fr); } .is-mobile .nb-cal-week-body { grid-template-columns: 36px repeat(7, 1fr); } .is-mobile .nb-cal-week-hour-label { font-size: 8px; padding-right: 3px; } .is-mobile .nb-cal-week-day-header { font-size: 10px; padding: 4px 2px; } .is-mobile .nb-cal-now-line { left: 36px; } .is-mobile .nb-tl-sidebar { display: none; } .is-mobile .nb-tl-bar { min-height: 28px; } .is-mobile .nb-tl-zoom-btn { min-height: 44px; padding: 8px 14px; } .is-mobile .nb-filter-pill { min-height: 36px; padding: 4px 8px 4px 10px; } .is-mobile .nb-pill-remove { width: 24px; height: 24px; font-size: 16px; } .is-mobile .nb-pill-conjunction { min-height: 36px; } .is-mobile .nb-add-row-btn, .is-mobile .nb-board-add-card, .is-mobile .nb-list-add-row { min-height: 44px; border-radius: var(--radius-s) !important; } .is-mobile .nb-sort-panel .nb-sort-row { min-height: 44px; } .is-mobile .nb-sort-add-select { min-height: 44px; } .is-mobile .nb-pill-op-select { min-height: 36px; } .is-mobile .nb-pill-value-input { min-height: 36px; } /* Color picker dots — increase spacing from delete button */ .is-mobile .nb-status-color-btn, .is-mobile .nb-option-color-btn { width: 24px; height: 24px; margin-right: 8px; } .is-mobile .nb-status-delete-btn, .is-mobile .nb-option-delete-btn { width: 24px; height: 24px; margin-left: 8px; } /* ── #55 Responsive toolbar — wrap + compact on narrow screens ───────────── */ .is-mobile .nb-toolbar { flex-wrap: wrap; gap: 6px; padding: 6px 8px; } .is-mobile .nb-toolbar .nb-row-count { order: 99; width: 100%; font-size: var(--font-ui-smaller); } .is-mobile .nb-search { width: 140px; } .is-mobile .nb-filter-pills-row { flex-wrap: wrap; gap: 6px; padding: 6px 8px; } /* ── Content area — prevent cut-off behind mobile navbar ─────────────────── */ .is-mobile .nb-container { padding-bottom: 60px; } .is-mobile .nb-gallery { padding-bottom: 20px; } .is-mobile .nb-board { padding-bottom: 20px; scroll-snap-type: x mandatory; scroll-padding: 0 12px; } .is-mobile .nb-board-column { flex: 0 0 85%; scroll-snap-align: start; } /* Narrow containers (mobile phones + narrow sidebars on desktop) */ @media (max-width: 500px) { .nb-toolbar { flex-wrap: wrap; gap: 4px; padding: 6px 8px; } .nb-toolbar .nb-row-count { order: 99; width: 100%; } .nb-search { width: 100%; } .nb-search-container--collapsed .nb-search { width: 38px; } .nb-filter-pills-row { flex-wrap: wrap; gap: 4px; padding: 6px 8px; } .nb-view-tabs { flex-wrap: wrap; gap: 2px; } .nb-board { gap: 8px; } .nb-board-column { min-width: 200px; } } /* ── Mobile toolbar layout (mockup-based) ────────────────────────────────── */ .nb-mobile-toolbar { flex-shrink: 0; border-bottom: 1px solid var(--background-modifier-border); } .nb-mobile-search-strip { padding: 8px 12px 4px; } .nb-mobile-search-wrapper { position: relative; display: flex; align-items: center; } .nb-mobile-search-icon { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: var(--text-faint); pointer-events: none; z-index: 1; } .nb-mobile-search-input { width: 100% !important; background: transparent !important; border: 1px solid var(--background-modifier-border) !important; border-radius: var(--radius-s) !important; outline: none !important; box-shadow: none !important; color: var(--text-normal) !important; font-size: var(--font-ui-small) !important; padding: 8px 10px 8px 36px !important; height: auto !important; } .nb-mobile-search-input:focus { outline: none !important; box-shadow: none !important; border-color: var(--background-modifier-border) !important; } /* ── Mobile toggles row (board hide empty / hide no-value) ───────────────── */ .nb-mobile-toggles-row { display: flex; align-items: center; gap: 16px; padding: 6px 12px; border-bottom: 1px solid var(--background-modifier-border); } .nb-mobile-toggle { display: flex; align-items: center; gap: 6px; font-size: var(--font-ui-smaller); color: var(--text-muted); cursor: pointer; white-space: nowrap; } .nb-mobile-toggle input[type="checkbox"] { margin: 0; width: 16px; height: 16px; } .nb-mobile-search-fake { cursor: text; color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: normal; display: flex; align-items: center; } .nb-mobile-search-fake--has-value { color: var(--text-normal); } /* ── Mobile search overlay (portal to body, fixed at top) ────────────────── */ .nb-mobile-search-overlay { position: fixed; inset: 0; z-index: 300; background: rgba(0, 0, 0, 0.4); } .nb-mobile-search-overlay-bar { position: fixed; top: 0; left: 0; right: 0; z-index: 301; display: flex; align-items: center; gap: 8px; padding: 8px 12px; padding-top: calc(env(safe-area-inset-top, 0px) + var(--header-height, 48px)); background: var(--background-primary); border-bottom: 1px solid var(--background-modifier-border); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); } .nb-mobile-search-overlay-icon { flex-shrink: 0; color: var(--text-faint); } .nb-mobile-search-overlay-input { flex: 1; background: transparent !important; border: none !important; outline: none !important; color: var(--text-normal) !important; font-size: 16px !important; padding: 8px 4px !important; height: auto !important; box-shadow: none !important; } /* ── Filter overlay bar variant ───────────────────────────────────────────── */ .nb-mobile-filter-overlay-bar { flex-wrap: wrap; } .nb-mobile-filter-overlay-title { font-weight: 600; font-size: 14px; color: var(--text-normal); margin-right: auto; } .nb-mobile-filter-overlay-select { flex: 0 0 auto; padding: 6px 8px; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: var(--background-secondary); color: var(--text-normal); font-size: var(--font-ui-small); outline: none; } .nb-mobile-search-overlay-close { flex-shrink: 0; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border: none; background: var(--background-secondary); border-radius: 50%; color: var(--text-muted); font-size: 18px; cursor: pointer; } .nb-mobile-action-bar { display: flex; align-items: center; gap: 4px; padding: 6px 12px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .nb-mobile-action-bar::-webkit-scrollbar { display: none; } .nb-mobile-action-btn { display: flex; align-items: center; gap: 4px; padding: 6px 8px; border: none; background: transparent; color: var(--text-muted); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; white-space: nowrap; cursor: pointer; flex-shrink: 0; border-radius: var(--radius-s); } .nb-mobile-action-btn:active { background: var(--background-modifier-hover); } .nb-mobile-action-btn--active { color: var(--text-normal); } .nb-mobile-action-btn svg { width: 16px; height: 16px; flex-shrink: 0; } .nb-mobile-action-label { line-height: 1; } .nb-mobile-action-badge { background: var(--interactive-accent); color: var(--text-on-accent); font-size: 9px; font-weight: 700; min-width: 16px; height: 16px; border-radius: 8px; display: flex; align-items: center; justify-content: center; padding: 0 4px; } .nb-mobile-action-separator { width: 1px; height: 14px; background: var(--background-modifier-border); flex-shrink: 0; margin: 0 4px; } .nb-mobile-pills-strip { display: flex; align-items: center; gap: 4px; padding: 4px 12px 6px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; border-bottom: 1px solid var(--background-modifier-border); } .nb-mobile-pills-strip .nb-filter-pill { min-height: auto; height: 24px; padding: 0 8px; font-size: 11px; gap: 10px; background: var(--background-secondary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); display: inline-flex; align-items: center; } .nb-mobile-pills-strip .nb-pill-icon { display: none; } .nb-mobile-pills-strip .nb-pill-name { font-size: 11px; font-weight: 600; } .nb-mobile-pills-strip .nb-pill-op-select, .nb-mobile-pills-strip .nb-pill-value-input { display: none; } .nb-mobile-pills-strip .nb-pill-remove { font-size: 14px; color: var(--text-faint); background: transparent; border: none; padding: 0; margin-left: auto; display: flex; justify-content: center; align-items: center; line-height: 1; width: 14px; height: 14px; flex-shrink: 0; } .nb-mobile-pills-strip .nb-filter-pill--expanded { border-color: var(--interactive-accent); } /* ── BottomSheet ──────────────────────────────────────────────────────────── */ .nb-bottomsheet-backdrop { position: fixed; inset: 0; z-index: 300; background: rgba(0, 0, 0, 0.4); opacity: 0; transition: opacity 200ms ease; } .nb-bottomsheet-backdrop--open { opacity: 1; } .nb-bottomsheet { position: fixed; bottom: 0; left: 0; right: 0; z-index: 301; background: var(--background-primary); border-radius: 12px 12px 0 0; max-height: 70vh; overflow-y: auto; -webkit-overflow-scrolling: touch; transform: translateY(100%); transition: transform 250ms cubic-bezier(0.32, 0.72, 0, 1); padding-bottom: env(safe-area-inset-bottom, 0px); } .nb-bottomsheet--open { transform: translateY(0); } .nb-bottomsheet-handle { width: 36px; height: 4px; border-radius: 2px; background: var(--text-faint); margin: 8px auto; opacity: 0.5; } .nb-bottomsheet-title { padding: 0 16px 8px; font-weight: 600; font-size: 14px; color: var(--text-normal); border-bottom: 1px solid var(--background-modifier-border); } .nb-bottomsheet-content { padding: 8px 16px 16px; display: flex; flex-direction: column; } .nb-bottomsheet-content .nb-menu-item { display: flex; align-items: center; justify-content: flex-start; min-height: 44px; padding: 10px 16px; border: none; border-bottom: 1px solid var(--background-modifier-border); border-radius: 0; background: transparent; color: var(--text-normal); font-size: var(--font-ui-small); gap: 10px; cursor: pointer; text-align: left; width: 100%; } .nb-bottomsheet-content .nb-menu-item:last-child { border-bottom: none; } .nb-bottomsheet-content .nb-menu-item:active { background: var(--background-modifier-hover); } .nb-bottomsheet-content .nb-field-row { min-height: 44px; padding: 6px 8px; } /* ── Mobile pill dropdown ────────────────────────────────────────────────── */ .nb-mobile-pill-dropdown { margin: 0 12px 6px; background: var(--background-secondary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-m); padding: 8px 10px; } .nb-mobile-pill-dropdown-header { display: flex; align-items: center; justify-content: space-between; height: 24px; margin-bottom: 4px; } .nb-mobile-pill-dropdown-name { font-size: 11px; font-weight: 600; color: var(--text-normal); } .nb-mobile-pill-dropdown-close { background: transparent; border: none; color: var(--text-faint); font-size: 16px; cursor: pointer; padding: 6px 8px; line-height: 1; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-s); } .nb-mobile-pill-dropdown-close:active { background: var(--background-modifier-hover); } .nb-mobile-pill-dropdown-body { display: flex; flex-direction: column; gap: 6px; } .nb-mobile-pill-dropdown-select { width: 100%; padding: 6px 8px; border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); background: var(--background-primary); color: var(--text-normal); font-size: var(--font-ui-small); outline: none; } .nb-mobile-pill-dropdown-input { width: 100% !important; padding: 8px 10px !important; border: 1px solid var(--background-modifier-border) !important; border-radius: var(--radius-s) !important; background: var(--color-base-10, #111) !important; color: var(--text-normal) !important; font-size: var(--font-ui-small) !important; outline: none !important; box-shadow: none !important; height: auto !important; } .nb-mobile-pill-dropdown-input:focus { outline: none !important; box-shadow: none !important; border-color: var(--background-modifier-border) !important; } .nb-mobile-pills-strip .nb-pill-conjunction { min-height: auto; height: auto; padding: 0 6px; margin: 0 4px; font-size: 10px; font-weight: 700; color: var(--text-faint); } .nb-mobile-pills-strip::-webkit-scrollbar { display: none; } .nb-mobile-row-count { font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-faint); white-space: nowrap; flex-shrink: 0; margin-left: auto; padding-left: 12px; } /* ── Mobile view tabs (horizontal scroll, no wrap) ───────────────────────── */ .is-mobile .nb-view-tabs { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding: 6px 12px; gap: 6px; } .is-mobile .nb-view-tabs::-webkit-scrollbar { display: none; } .is-mobile .nb-view-tab { flex-shrink: 0; min-height: 36px; padding: 6px 12px; font-size: 11px; } .is-mobile .nb-view-tab-add { flex-shrink: 0; } .is-mobile .nb-view-tab-add-btn { display: flex; align-items: center; justify-content: center; min-height: 32px; min-width: 32px; padding: 0; background: var(--interactive-accent); color: var(--text-on-accent); border-radius: var(--radius-m); font-weight: 700; font-size: 18px; line-height: 1; } .is-mobile .nb-view-tab-remove { width: 20px; height: 20px; font-size: 14px; } /* Bug #1: Add view dropdown hidden behind content on mobile */ .is-mobile .nb-view-add-menu { position: fixed; top: auto; left: 8px; right: 8px; z-index: 200; width: auto; } /* Bug #4: Sort panel off-screen on mobile */ .is-mobile .nb-sort-panel { left: 8px !important; right: 8px !important; width: auto !important; max-width: calc(100vw - 16px); } /* Bug #6: Filter pill dropdown positioning on mobile */ .is-mobile .nb-filter-pill-dropdown { left: 8px !important; right: 8px !important; width: auto !important; max-width: calc(100vw - 16px); top: auto !important; bottom: 60px !important; } /* Dropdowns inside mobile toolbar */ .nb-mobile-toolbar .nb-fields-menu-wrapper { position: static; } .nb-mobile-toolbar .nb-fields-dropdown, .nb-mobile-toolbar .nb-actions-dropdown, .nb-mobile-toolbar .nb-filter-menu-dropdown, .nb-mobile-toolbar .nb-rowheight-dropdown { position: fixed; top: auto; left: 8px; right: 8px; width: auto; max-height: 60vh; overflow-y: auto; z-index: 200; } /* ── #89 Hierarchy / Sub-rows ─────────────────────────────────────────────── */ .nb-hierarchy-toggle { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border: none; background: none; cursor: pointer; color: var(--text-muted); font-size: 10px; padding: 0; margin-right: 2px; border-radius: 3px; flex-shrink: 0; } .nb-hierarchy-toggle:hover { background: var(--background-modifier-hover); color: var(--text-normal); } .nb-hierarchy-toggle-spacer { display: inline-block; width: 18px; flex-shrink: 0; margin-right: 2px; } .nb-hierarchy-cell { display: flex; align-items: center; gap: 2px; width: 100%; } .nb-add-subrow-btn { display: none; align-items: center; justify-content: center; width: 18px; height: 18px; border: none; background: none; cursor: pointer; color: var(--text-faint); font-size: 14px; padding: 0; margin-left: auto; border-radius: 3px; flex-shrink: 0; } .nb-row:hover .nb-add-subrow-btn, .nb-list-row:hover .nb-add-subrow-btn { display: inline-flex; } .nb-add-subrow-btn:hover { background: var(--background-modifier-hover); color: var(--interactive-accent); } .is-mobile .nb-hierarchy-toggle { width: 30px; height: 30px; font-size: 12px; } /* ── #91 Chart view ──────────────────────────────────────────────────────── */ .nb-chart-wrapper { flex: 1; min-height: 300px; max-height: 600px; padding: 12px; overflow: hidden; } .nb-chart-svg { width: 100%; height: 100%; display: block; } .nb-chart-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 200px; gap: 8px; color: var(--text-muted); } .nb-chart-empty-hint { font-size: 13px; opacity: 0.7; } .nb-chart-config-dropdown { min-width: 260px; } .nb-chart-config-body { display: flex; flex-direction: column; gap: 12px; padding: 8px 0; } .nb-chart-config-row { display: flex; flex-direction: column; gap: 4px; } .nb-chart-config-label { font-size: 12px; font-weight: 500; color: var(--text-muted); } .nb-chart-config-select { width: 100%; padding: 6px 8px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-normal); font-size: 13px; } .nb-chart-type-btns { display: flex; gap: 4px; } .nb-chart-type-btn { display: flex; align-items: center; justify-content: center; width: 36px; height: 30px; border: 1px solid var(--background-modifier-border); border-radius: 4px; background: var(--background-primary); color: var(--text-muted); cursor: pointer; transition: all 0.15s; } .nb-chart-type-btn:hover { border-color: var(--interactive-accent); color: var(--interactive-accent); } .nb-chart-type-btn--active { border-color: var(--interactive-accent); background: var(--interactive-accent); color: var(--text-on-accent, #fff); } /* Mobile chart adjustments */ .is-mobile .nb-chart-wrapper { padding: 8px 4px; max-height: 400px; } .is-mobile .nb-chart-config-body { padding: 4px 0; } .is-mobile .nb-chart-type-btn { width: 44px; height: 44px; } /* ── #56 Table horizontal scroll — reinforce for mobile ──────────────────── */ .is-mobile .nb-table-wrapper { -webkit-overflow-scrolling: touch; } /* ── #94 Quick add modal ─────────────────────────────────────────────────── */ .nb-quick-add-modal { padding: 16px; } .nb-quick-add-modal h3 { margin: 0 0 4px; } .nb-quick-add-db-name { margin: 0 0 16px; color: var(--text-muted); font-size: var(--font-ui-small); } .nb-quick-add-empty { color: var(--text-muted); font-style: italic; margin: 12px 0; } .nb-quick-add-title-input { width: 100%; } .nb-quick-add-buttons { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--divider-color); } .nb-quick-add-btn { padding: 6px 16px; border-radius: var(--radius-s); cursor: pointer; font-size: var(--font-ui-small); background: var(--background-modifier-hover); border: 1px solid var(--divider-color); color: var(--text-normal); } .nb-quick-add-btn--primary { background: var(--interactive-accent); color: var(--text-on-accent); border-color: var(--interactive-accent); } .nb-quick-add-btn:hover { opacity: 0.9; }