/* The global Project navigation is deliberately quieter than the raised document. */ :root { --document-shell-header-height: calc(3rem + env(safe-area-inset-top)); } .room-header { height: var(--document-shell-header-height); min-height: var(--document-shell-header-height); } @media (min-width: 1198px) { :root { --document-shell-header-height: calc(50px + env(safe-area-inset-top)); } } @media (max-width: 639px) { :root[data-plan-coarse-pointer] { --document-shell-header-height: calc(3.75rem + env(safe-area-inset-top)); } } .navigation-shell { position: relative; display: flex; height: 100%; min-height: 100%; overflow: hidden; background: var(--color-ground); } .navigation-content { position: relative; display: flex; flex-direction: column; min-width: 0; min-height: 0; flex: 1; } .navigation-body { position: relative; min-height: 0; flex: 1; } .navigation-content[data-project-sidebar-trigger] .room-header { padding-left: 44px; } .anchored-child-host, .anchored-child-parent { position: relative; height: 100%; min-height: 0; } /* A calm dim over the live parent; opacity is the only thing that animates. */ .anchored-child-parent::after { content: ""; position: absolute; z-index: 20; inset: var(--document-shell-header-height) 0 0; background: color-mix(in srgb, var(--color-text-primary) 12%, transparent); opacity: 0; pointer-events: none; transition: opacity var(--modal-close-dur) var(--motion-smooth-out); } .anchored-child-host[data-child-visible] .anchored-child-parent::after { opacity: 1; transition-duration: var(--modal-open-dur); } .anchored-child-host[data-child-presentation="closing"] .anchored-child-parent::after { opacity: 0; transition-duration: var(--modal-close-dur); } .anchored-child-backdrop { position: absolute; z-index: 30; inset: var(--document-shell-header-height) 0 0; background: transparent; cursor: pointer; touch-action: manipulation; } /* The sheet is the only frame; the child workspace fills it edge to edge. */ .anchored-child-surface { position: absolute; z-index: 40; inset: calc(var(--document-shell-header-height) + 12px) 24px 24px; overflow: hidden; border: var(--edge-width) solid var(--color-edge); border-radius: var(--radius-xl); background: var(--color-page); box-shadow: var(--shadow-overlay); transform-origin: 50% 100%; animation: anchored-child-enter var(--modal-open-dur) var(--modal-ease) both; } .anchored-child-host[data-child-presentation="closing"] .anchored-child-surface { animation: anchored-child-exit var(--modal-close-dur) var(--modal-ease) both; } .anchored-child-surface .room-header { display: none; } .anchored-child-surface > [data-workspace-surface="child"] { background: transparent; } .anchored-child-surface .workspace-root .workspace-frame, .anchored-child-surface .workspace-root[data-workspace-mode="split"] .workspace-frame { margin: 0; border-radius: 0; box-shadow: none; } @keyframes anchored-child-enter { from { opacity: 0; transform: translateY(var(--drawer-distance)) scale(var(--modal-scale)); } to { opacity: 1; transform: none; } } @keyframes anchored-child-exit { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(var(--drawer-distance)) scale(var(--modal-scale-close)); } } @media (max-width: 1197px) { .anchored-child-surface { inset: var(--document-shell-header-height) 0 0; border: 0; border-radius: 0; box-shadow: none; } } @media (prefers-reduced-motion: reduce) { .anchored-child-parent::after { transition: none; } .anchored-child-surface { animation-name: anchored-child-fade; animation-duration: var(--duration-fast); } .anchored-child-host[data-child-presentation="closing"] .anchored-child-surface { animation-name: anchored-child-fade-out; } @keyframes anchored-child-fade { from { opacity: 0; } to { opacity: 1; } } @keyframes anchored-child-fade-out { from { opacity: 1; } to { opacity: 0; } } } .project-sidebar-frame { position: relative; display: flex; flex: 0 0 auto; min-width: 0; background: var(--color-ground); } .project-sidebar-motion-content { display: flex; width: 100%; min-width: 0; flex: 1 1 auto; overflow: hidden; } /* The track's width moves the workspace; the sidebar slides under its clip. Resizing is direct. */ .motion-sidebar { position: relative; z-index: 45; height: 100%; width: 0; justify-content: flex-end; overflow: hidden; transition: width var(--sidebar-open-dur) var(--motion-move); } .motion-sidebar:has(> .project-sidebar-resize:is(:active, :focus-visible)) { transition: none; } .motion-sidebar .project-sidebar-motion-content { width: var(--project-sidebar-width, 0px); flex: 0 0 var(--project-sidebar-width, 0px); } .motion-sidebar .project-sidebar { width: var(--project-sidebar-width, 0px); flex: 0 0 var(--project-sidebar-width, 0px); } .motion-sidebar.is-open { width: var(--project-sidebar-width, 0px); } .motion-sidebar.is-closing { pointer-events: none; transition-duration: var(--sidebar-close-dur); } .project-sidebar { --project-sidebar-hover: var(--color-gray-200); --project-sidebar-selected: var(--color-selected-strong); --project-sidebar-row: calc(var(--spacing) * 7.5); --project-sidebar-inset: calc(var(--spacing) * 2); --project-sidebar-gap: calc(var(--spacing) * 2); /* Document names line up with the labels of the 14px icon rows above them. */ --project-sidebar-label: calc(var(--project-sidebar-inset) * 2 + var(--icon-size-default)); display: flex; width: 100%; min-width: 0; flex-direction: column; background: var(--color-ground); color: var(--color-text-tertiary); } .project-sidebar-header { display: flex; align-items: center; justify-content: space-between; padding: calc(var(--spacing) * 3.5) var(--project-sidebar-inset) calc(var(--spacing) * 3) calc(var(--spacing) * 4); } .project-sidebar-primary-actions, .project-sidebar-footer-actions { display: flex; flex-direction: column; padding: 0 var(--project-sidebar-inset); } .project-sidebar-footer-actions { flex: 0 0 auto; } .project-sidebar-primary-action { display: flex; width: 100%; min-height: var(--project-sidebar-row); align-items: center; gap: var(--project-sidebar-gap); border-radius: var(--radius-md); padding: 0 var(--project-sidebar-inset); font-size: var(--text-xs); font-weight: 500; text-align: left; color: var(--color-text-tertiary); } .project-sidebar-primary-action:hover, .project-sidebar-primary-action:focus-visible, .project-sidebar-project-row:hover, .project-sidebar-project-row:focus-within, .project-sidebar-document:hover, .project-sidebar-document:focus-within, .project-sidebar-account:hover, .project-sidebar-account:focus-visible { background: var(--project-sidebar-hover); } .project-sidebar-projects-heading, .project-sidebar-project-row, .project-sidebar-document, .project-sidebar-account { display: flex; align-items: center; justify-content: space-between; gap: var(--project-sidebar-gap); } .project-sidebar-projects-heading { padding: var(--spacing) var(--spacing) var(--spacing) var(--project-sidebar-inset); font-size: var(--text-xs); font-weight: 500; color: color-mix(in srgb, var(--color-text-tertiary) 60%, transparent); } .project-sidebar-projects, .project-sidebar-documents, .project-sidebar-children { display: flex; flex-direction: column; } .project-sidebar-project-row { min-height: var(--project-sidebar-row); gap: var(--project-sidebar-gap); border-radius: var(--radius-md); padding: 0 var(--spacing) 0 var(--project-sidebar-inset); font-size: var(--text-xs); } .project-sidebar-project-disclosure { align-self: stretch; } .project-sidebar-project-icon { display: grid; width: var(--icon-size-default); height: var(--icon-size-default); flex: 0 0 auto; } .project-sidebar-project-repository-icon, .project-sidebar-project-chevron { grid-area: 1 / 1; transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); } .project-sidebar-project-chevron { display: flex; align-items: center; justify-content: center; opacity: 0; transform: translate(calc(var(--spacing) * -1), calc(var(--spacing) * -1)) scale(var(--dropdown-pre-scale)); } .project-sidebar-project-row:is(:hover, :focus-within) .project-sidebar-project-repository-icon { opacity: 0; transform: scale(var(--dropdown-pre-scale)); } .project-sidebar-project-row:is(:hover, :focus-within) .project-sidebar-project-chevron { opacity: 1; transform: translate(0, 0) scale(1); } @media (prefers-reduced-motion: reduce) { .project-sidebar-project-repository-icon, .project-sidebar-project-chevron { transition: none; transform: none; } } .project-sidebar-project-row { position: relative; } /* Reveal from the document header: a wash that fades out; opacity is the only motion. */ .project-sidebar-project[data-revealed] > .project-sidebar-project-row::after { position: absolute; inset: 0; border-radius: inherit; background: var(--project-sidebar-selected); content: ""; pointer-events: none; animation: project-reveal var(--duration-linger) var(--ease-out) var(--duration-linger) forwards; } @keyframes project-reveal { to { opacity: 0; } } @media (prefers-reduced-motion: reduce) { .project-sidebar-project[data-revealed] > .project-sidebar-project-row::after { animation: none; } } .project-sidebar-document { min-height: var(--project-sidebar-row); gap: var(--spacing); border-radius: var(--radius-md); padding: 0 var(--spacing) 0 var(--project-sidebar-label); font-size: var(--text-xs); } .project-sidebar-document-link { display: flex; min-width: 0; flex: 1; align-self: stretch; align-items: center; overflow: hidden; font-size: var(--text-xs); font-weight: 400; line-height: 1.25rem; text-align: left; } .project-sidebar-document-current { background: var(--project-sidebar-selected); color: var(--color-text-primary); } .project-sidebar-document-current .project-sidebar-document-link, .project-sidebar-child-current .project-sidebar-child-link { font-weight: 500; } .project-sidebar-document-ancestor { color: var(--color-text-primary); } .project-sidebar-child { display: flex; min-height: var(--project-sidebar-row); align-items: center; padding-right: var(--spacing); margin-left: var(--project-sidebar-label); border-left: var(--edge-width) solid var(--color-gray-300); border-radius: 0 var(--radius-md) var(--radius-md) 0; } .project-sidebar-child:hover, .project-sidebar-child:focus-within { background: var(--project-sidebar-hover); } .project-sidebar-child-link { display: flex; min-width: 0; flex: 1; align-items: center; align-self: stretch; padding: 0 var(--spacing) 0 calc(var(--spacing) * 3); overflow: hidden; font-size: var(--text-xs); font-weight: 400; line-height: 1.25rem; } .project-sidebar-child-current { border-left-color: var(--color-brand); background: var(--project-sidebar-selected); color: var(--color-text-primary); } .project-sidebar-document-actions { display: flex; width: 0; flex: 0 0 auto; align-items: center; overflow: hidden; visibility: hidden; } .project-sidebar-document:is(:hover, :focus-within) > .project-sidebar-document-actions, .project-sidebar-child:is(:hover, :focus-within) > .project-sidebar-document-actions, :root[data-plan-coarse-pointer] .project-sidebar .project-sidebar-document-actions { visibility: visible; } .project-sidebar-document:is(:hover, :has(:focus-visible, [aria-expanded="true"])) > .project-sidebar-document-actions, .project-sidebar-child:is(:hover, :has(:focus-visible, [aria-expanded="true"])) > .project-sidebar-document-actions, :root[data-plan-coarse-pointer] .project-sidebar .project-sidebar-document-actions { width: auto; overflow: visible; } .app-icon-button { --icon-button-current-size: var(--icon-button-size); --icon-button-glyph-size: var(--icon-size-default); width: calc(var(--icon-button-current-size) * var(--icon-button-reveal, 1)); height: var(--icon-button-current-size); flex: 0 0 auto; border-radius: var(--radius-sm); padding: calc( (var(--icon-button-current-size) - var(--icon-button-glyph-size)) / 2 * var(--icon-button-reveal, 1) ); color: inherit; } .app-icon-button[data-size="compact"] { --icon-button-current-size: var(--icon-button-size-compact); } .app-icon-button[data-glyph="compact"] { --icon-button-glyph-size: var(--icon-size-compact); } .app-icon-button > :is(svg, img) { width: var(--icon-button-glyph-size); height: var(--icon-button-glyph-size); flex-shrink: 0; object-fit: contain; } .app-icon-button[data-tone="nested"]:is(:hover:not(:disabled), :focus-visible) { background: var(--color-hover-nested); } .app-icon-button[data-tone="ghost"]:is(:hover:not(:disabled), :focus-visible) { background: var(--color-selected-strong); } .project-sidebar-action, .project-sidebar-document-action { opacity: 0; transition: opacity var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out); } .project-sidebar-action:focus-visible, .project-sidebar-document-action:focus-visible, .project-sidebar-action:hover, .project-sidebar-document-action:hover { opacity: 1; } :is(.group\/sidebar-header, .group\/projects-heading, .project-sidebar-project-row):hover .project-sidebar-action, :is(.group\/sidebar-header, .group\/projects-heading, .project-sidebar-project-row):focus-within .project-sidebar-action, .project-sidebar-document:hover .project-sidebar-document-action, .project-sidebar-document:focus-within .project-sidebar-document-action, .project-sidebar-child:hover .project-sidebar-document-action, .project-sidebar-child:focus-within .project-sidebar-document-action, .project-sidebar-document-action[aria-expanded="true"] { opacity: 1; } .project-sidebar-project-row > .project-sidebar-action { --icon-button-reveal: 0; overflow: hidden; } .project-sidebar-project-row:is(:hover, :has(:focus-visible)) > .project-sidebar-action, .project-sidebar-project-row > .project-sidebar-action-pending, :root[data-plan-coarse-pointer] .project-sidebar .project-sidebar-project-row > .project-sidebar-action { --icon-button-reveal: 1; overflow: visible; } .project-sidebar-count { display: flex; min-width: calc(var(--spacing) * 6); flex: 0 0 auto; justify-content: flex-end; } :root:not([data-plan-coarse-pointer]) :is(.project-sidebar-project-row:has(> .project-sidebar-action):is(:hover, :has(:focus-visible)), .project-sidebar-project-row:has(> .project-sidebar-action-pending), .project-sidebar-document:has(> .project-sidebar-document-actions):is(:hover, :has(:focus-visible, [aria-expanded="true"])), .project-sidebar-child:has(> .project-sidebar-document-actions):is(:hover, :has(:focus-visible, [aria-expanded="true"]))) > .project-sidebar-count { display: none; } :root[data-plan-coarse-pointer] .project-sidebar :is(.project-sidebar-document-actions, .project-sidebar-project-row > .project-sidebar-action) { order: 1; } /* Rows use different gaps, so pad touch counts to the project row's gap and share its edge. */ :root[data-plan-coarse-pointer] .project-sidebar .project-sidebar-document > .project-sidebar-document-actions ~ .project-sidebar-count { margin-right: calc(var(--project-sidebar-gap) - var(--spacing)); } :root[data-plan-coarse-pointer] .project-sidebar .project-sidebar-child > .project-sidebar-document-actions ~ .project-sidebar-count { margin-right: var(--project-sidebar-gap); } .project-sidebar-status, .project-sidebar-load-more { padding: 0 var(--project-sidebar-inset) var(--spacing) var(--project-sidebar-label); font-size: var(--text-xs); line-height: 1rem; color: var(--color-text-quaternary); } .project-sidebar-load-more:hover, .project-sidebar-load-more:focus-visible { color: var(--color-text-primary); } .project-sidebar-empty { padding: var(--spacing) var(--project-sidebar-inset) var(--project-sidebar-inset) var(--project-sidebar-label); font-size: var(--text-xs); line-height: 1.25rem; color: var(--color-text-tertiary); } .project-sidebar-action-pending { opacity: 1; } :is(.project-sidebar-primary-action, .project-sidebar-action):disabled { cursor: default; color: var(--color-text-quaternary); } .project-sidebar-account { width: 100%; min-height: var(--project-sidebar-row); justify-content: flex-start; gap: var(--project-sidebar-gap); border-radius: var(--radius-md); padding: 0 var(--project-sidebar-inset); font-size: var(--text-xs); font-weight: 500; text-align: left; } .project-sidebar-account-wrap { position: relative; padding: var(--project-sidebar-inset); } .project-sidebar-account[aria-expanded="true"] { background: var(--project-sidebar-selected); } .project-sidebar-resize { position: absolute; inset-block: 0; right: 0; z-index: 50; width: 4px; cursor: col-resize; } .project-sidebar-resize::after { position: absolute; inset-block: 0; left: 1px; width: 1px; background: var(--color-edge); content: ""; } .project-sidebar-resize:focus-visible::after, .project-sidebar-resize:hover::after { background: var(--color-brand); } .project-sidebar-expand { margin-right: 8px; } .project-sidebar-expand img { opacity: 0.5; } .navigation-shell > .project-sidebar-expand { position: absolute; left: 8px; top: 11px; z-index: 45; } .navigation-drawer { position: fixed; inset: 0; z-index: 50; } .motion-drawer { pointer-events: none; opacity: 0; transition: opacity var(--drawer-open-dur) var(--motion-smooth-out); will-change: opacity; } .motion-drawer .navigation-focus-scope { transform: translateX(calc(-1 * var(--drawer-distance))); transition: transform var(--drawer-open-dur) var(--motion-smooth-out); will-change: transform; } .motion-drawer.is-open { pointer-events: auto; opacity: 1; } .motion-drawer.is-open .navigation-focus-scope { transform: translateX(0); } .motion-drawer.is-closing { opacity: 0; transition-duration: var(--drawer-close-dur); } .motion-drawer.is-closing .navigation-focus-scope { transform: translateX(calc(-1 * var(--drawer-distance))); transition-duration: var(--drawer-close-dur); } .navigation-drawer-backdrop { position: absolute; inset: 0; width: 100%; background: rgb(0 0 0 / 20%); } .navigation-drawer > .navigation-focus-scope { position: relative; z-index: 1; height: 100%; width: min(280px, calc(100vw - 24px)); } .navigation-drawer .project-sidebar-frame { position: relative; height: 100%; width: 100%; box-shadow: var(--shadow-overlay); } .navigation-creation-status { position: absolute; top: calc(var(--document-shell-header-height) + 56px); left: 50%; z-index: 15; translate: -50% 0; width: fit-content; max-width: calc(100% - 32px); border: var(--edge-width) solid var(--color-edge); border-radius: var(--radius-md); background: var(--color-page); padding: 6px 12px; box-shadow: var(--shadow-raised); font-size: var(--text-sm); color: var(--color-text-secondary); pointer-events: none; } @media (prefers-reduced-motion: no-preference) { .navigation-creation-status { animation: navigation-status-in var(--duration-base) var(--motion-smooth-out); } .navigation-creation-status[data-leaving] { opacity: 0; transform: translateY(-4px); transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); } } @keyframes navigation-status-in { from { opacity: 0; transform: translateY(-4px); } } .navigation-creation-status button { margin-left: 8px; pointer-events: auto; color: var(--color-text-primary); text-decoration: underline; } .navigation-notice { display: flex; align-items: center; gap: 4px; padding-block: 2px; pointer-events: auto; } .navigation-notice > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .navigation-notice button { flex: none; margin-left: 0; min-height: 28px; border-radius: var(--radius-sm); padding: 0 8px; font-weight: 500; text-decoration: none; } .navigation-notice button:hover, .navigation-notice button:focus-visible { background: var(--color-selected); } @media (pointer: coarse) { .navigation-notice button { min-height: 44px; min-width: 44px; } } .navigation-error { flex-shrink: 0; margin: calc(var(--spacing) * 2) calc(var(--spacing) * 3) 0; } .navigation-modal { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 16px; } .motion-modal { pointer-events: none; opacity: 0; transition: opacity var(--modal-open-dur) var(--modal-ease); will-change: opacity; } .motion-modal .navigation-modal-content { transform: scale(var(--modal-scale)); transition: transform var(--modal-open-dur) var(--modal-ease); will-change: transform; } .motion-modal.is-open { pointer-events: auto; opacity: 1; } .motion-modal.is-open .navigation-modal-content { transform: scale(1); } /* The lazy dialog can mount already open; the starting style makes first paint animate. */ @starting-style { .motion-modal.is-open { opacity: 0; } .motion-modal.is-open .navigation-modal-content { transform: scale(var(--modal-scale)); } } .motion-modal.is-closing { opacity: 0; transition-duration: var(--modal-close-dur); } .motion-modal.is-closing .navigation-modal-content { transform: scale(var(--modal-scale-close)); transition-duration: var(--modal-close-dur); } .navigation-modal-backdrop { position: absolute; inset: 0; width: 100%; background: rgb(0 0 0 / 20%); } .navigation-modal > .navigation-focus-scope { display: grid; height: 100%; width: 100%; place-items: center; pointer-events: none; } .navigation-modal-content { position: relative; width: min(100%, 28rem); border-radius: var(--radius-lg); background: var(--color-page); padding: 20px; box-shadow: var(--shadow-overlay); pointer-events: auto; } .navigation-palette-list.keyboard-shortcuts { max-height: min(60vh, 28rem); gap: calc(var(--spacing) * 3); padding-inline: calc(var(--spacing) * 4); padding-block: calc(var(--spacing) * 3); } .keyboard-shortcuts-group { margin-bottom: var(--spacing); font-size: var(--text-2xs); font-weight: 500; color: var(--color-text-tertiary); } .keyboard-shortcuts-row { display: flex; min-height: calc(var(--spacing) * 8); align-items: center; justify-content: space-between; gap: calc(var(--spacing) * 3); font-size: var(--text-sm); color: var(--color-text-secondary); } .keyboard-shortcuts-row + .keyboard-shortcuts-row { border-top: var(--edge-width) solid var(--color-edge); } .shortcut-keys { display: flex; flex-shrink: 0; gap: calc(var(--spacing) * 0.5); } .shortcut-keys kbd { display: inline-grid; min-width: calc(var(--spacing) * 5); height: calc(var(--spacing) * 5); place-items: center; border: var(--edge-width) solid var(--color-edge); border-radius: var(--radius-sm); padding: 0 var(--spacing); font-family: var(--font-sans); font-size: var(--text-2xs); color: var(--color-text-tertiary); } /* Revealed with the row, so shortcuts teach without adding resting clutter. */ .project-sidebar-hint { margin-left: auto; font-family: var(--font-sans); font-size: var(--text-2xs); color: var(--color-text-quaternary); opacity: 0; transition: opacity var(--duration-fast) var(--ease-out); } .project-sidebar-primary-action:is(:hover, :focus-visible) .project-sidebar-hint { opacity: 1; } @media (hover: none) { .project-sidebar-hint { display: none; } } .navigation-dialog-list { display: flex; max-height: min(50vh, 20rem); flex-direction: column; gap: 4px; overflow-y: auto; margin-top: 12px; } .navigation-dialog-option { display: flex; min-height: 48px; width: 100%; align-items: center; justify-content: space-between; gap: 12px; border-radius: var(--radius-md); padding: 8px; text-align: left; } .navigation-dialog-option:hover:not(:disabled), .navigation-dialog-option:focus-visible { background: var(--color-hover); } .navigation-modal-content.navigation-palette { display: flex; width: min(100%, 32rem); flex-direction: column; overflow: hidden; padding: 0; /* Anchored near the top so the field stays put while results grow and shrink. */ align-self: start; margin-top: 15vh; } .navigation-palette-search { display: flex; height: calc(var(--spacing) * 12); flex-shrink: 0; align-items: center; gap: calc(var(--spacing) * 2); border-bottom: var(--edge-width) solid var(--color-edge); padding: 0 calc(var(--spacing) * 4); color: var(--color-icon); } .navigation-palette-input { min-width: 0; flex: 1; align-self: stretch; background: transparent; color: var(--color-text-primary); font-size: var(--text-sm); } .navigation-palette-input::placeholder { color: var(--color-text-quaternary); } .navigation-palette-list { display: flex; /* Reserve the loading and empty height so results do not resize the palette. */ min-height: calc(var(--spacing) * 21); max-height: min(50vh, 20rem); flex-direction: column; overflow-y: auto; padding: calc(var(--spacing) * 1.5); scroll-padding-block: calc(var(--spacing) * 1.5); } .navigation-palette-options { display: flex; flex-direction: column; } .navigation-palette-option { display: flex; min-height: calc(var(--spacing) * 8.5); width: 100%; flex-shrink: 0; align-items: center; gap: calc(var(--spacing) * 2); border-radius: var(--radius-md); padding: 0 calc(var(--spacing) * 2.5); cursor: pointer; text-align: left; font-size: var(--text-sm); } .navigation-palette-option[aria-disabled="true"] { cursor: default; } /* One active row: keyboard, pointer, and the pre-highlighted first match share it. */ .navigation-palette-option[aria-selected="true"] { background: var(--color-selected); } .navigation-palette-hint { visibility: hidden; flex-shrink: 0; color: var(--color-text-tertiary); font-size: var(--text-xs); } .navigation-palette-option[aria-selected="true"] .navigation-palette-hint, .navigation-palette-hint[data-busy] { visibility: visible; } /* Touch has no hover to disclose the action, so every addable row shows it. */ @media (pointer: coarse) { .navigation-palette-option { min-height: calc(var(--spacing) * 11); } .navigation-palette-hint { visibility: visible; } } .navigation-palette-status { display: flex; min-height: calc(var(--spacing) * 18); align-items: center; justify-content: center; gap: calc(var(--spacing) * 2); color: var(--color-text-tertiary); font-size: var(--text-sm); text-align: center; } @media (prefers-reduced-motion: no-preference) { .navigation-palette-status [data-palette-loader] { animation: button-loader-spin var(--duration-linger) linear infinite; } } .navigation-palette-footer { display: flex; flex-shrink: 0; border-top: var(--edge-width) solid var(--color-edge); padding: calc(var(--spacing) * 2.5) calc(var(--spacing) * 4); } .navigation-palette-footer a { color: var(--color-text-tertiary); font-size: var(--text-xs); } .navigation-palette-footer a:hover { color: var(--color-text-secondary); text-decoration: underline; } .navigation-account-menu { position: absolute; bottom: calc(100% - var(--spacing)); right: var(--project-sidebar-inset); left: var(--project-sidebar-inset); z-index: 60; border-radius: var(--radius-md); background: var(--color-page); padding: var(--menu-padding); box-shadow: var(--shadow-raised); transform-origin: bottom left; } .app-menu-item { --item-height: var(--menu-item-height-normal); --item-padding-block: var(--menu-item-padding-block-normal); --item-padding-inline: var(--menu-item-padding-inline-normal); --item-gap: var(--menu-item-gap-normal); --color-icon: currentColor; display: flex; width: 100%; align-items: center; gap: var(--item-gap); border-radius: var(--radius-sm); padding: var(--item-padding-block) var(--item-padding-inline); min-height: var(--item-height); font-size: var(--text-sm); line-height: var(--text-sm--line-height); text-align: left; color: var(--color-text-secondary); } .app-menu-item[data-density="compact"] { --item-height: var(--menu-item-height-compact); --item-padding-block: var(--menu-item-padding-block-compact); --item-padding-inline: var(--menu-item-padding-inline-compact); --item-gap: var(--menu-item-gap-compact); } .app-menu-item:is(:hover:not(:disabled), :focus-visible) { background: var(--color-hover); color: var(--color-text-primary); } .app-menu-item[data-tone="destructive"], .app-menu-item[data-tone="destructive"]:is(:hover:not(:disabled), :focus-visible) { color: var(--color-destructive-ink); } .app-menu-separator { margin: var(--menu-separator-margin) 0; height: var(--edge-width); background: var(--color-edge); } @media (prefers-reduced-motion: no-preference) { .project-sidebar-project-row[data-flash] { animation: project-row-flash calc(var(--duration-linger) * 1.5) var(--motion-smooth-out); } } @keyframes project-row-flash { 0%, 28% { background: var(--color-selected); } 100% { background: transparent; } } .document-actions-menu { position: fixed; z-index: 60; display: flex; flex-direction: column; border-radius: var(--radius-md); background: var(--color-page); padding: var(--menu-padding); box-shadow: var(--shadow-raised); } .document-status-badge { display: inline-flex; min-width: 0; flex: 0 0 auto; align-items: center; border-radius: var(--radius-full); background: var(--color-warning-wash); padding: 1px 6px; font-size: var(--text-xs); font-weight: 600; line-height: 1rem; color: var(--color-warning-ink); } .document-archived-status { display: inline-flex; flex: 0 0 auto; align-items: center; gap: calc(var(--spacing) * 2); margin-left: calc(var(--spacing) * 1.5); } :root[data-plan-coarse-pointer] .project-sidebar :where(.project-sidebar-action, .project-sidebar-document-action) { min-width: var(--control-target-coarse); min-height: var(--control-target-coarse); } :root[data-plan-coarse-pointer] .project-sidebar :where(.project-sidebar-action, .project-sidebar-document-action) { opacity: 1; } :root[data-plan-coarse-pointer] .project-sidebar :where(.project-sidebar-primary-action, .project-sidebar-project-row, .project-sidebar-document, .project-sidebar-account) { min-height: var(--control-target-coarse); } :root[data-plan-coarse-pointer] :where(.document-actions-menu, .navigation-account-menu) :is(button, a) { min-height: var(--control-target-coarse); } .title-control { display: inline-flex; min-width: 0; align-items: center; gap: 0; border-radius: var(--radius-sm); color: var(--color-text-tertiary); } .title-control:has(button):is(:hover, :focus-within, :has([aria-expanded="true"])) { background: var(--color-selected); } .title-control-label, .title-control-action { display: flex; height: var(--control-height-compact); min-width: 0; align-items: center; border-radius: inherit; padding-block: 0; font-size: inherit; color: inherit; } .title-control-label { padding-inline-start: var(--split-control-label-padding-start); padding-inline-end: var(--split-control-label-padding-end); } .title-control-action { width: var(--control-height-compact); flex: 0 0 auto; justify-content: center; padding-inline: 0; } .document-title-trigger { cursor: text; } .document-title-form { position: relative; display: flex; min-width: 0; border-radius: inherit; } /* The title input uses the same compact control geometry as the resting label. */ .document-title-input { max-width: 100%; field-sizing: content; background: var(--color-selected); } .document-title-input::placeholder { color: var(--color-text-quaternary); } .document-title-error { position: absolute; top: calc(100% + var(--spacing)); left: 0; z-index: 10; border-radius: var(--radius-md); padding: calc(var(--spacing) * 1.5) calc(var(--spacing) * 2.5); background: var(--color-page); box-shadow: var(--shadow-raised); white-space: nowrap; } .document-parent-breadcrumb { flex: 0 1 auto; justify-content: flex-start; font-weight: 500; color: var(--color-text-secondary); } .document-project-prefix { min-width: 0; max-width: var(--label-measure-compact); flex: 0 1 auto; padding-inline: calc(var(--spacing) / 2); color: var(--color-text-tertiary); } .document-project-separator { flex: none; color: var(--color-text-tertiary); opacity: var(--opacity-quiet); } @media (max-width: 639px) { .document-project-prefix, .document-project-separator { display: none; } } .document-breadcrumb-separator { opacity: var(--opacity-quiet); } .document-child-breadcrumb { min-width: 0; flex: 1 1 auto; font-weight: 400; color: var(--color-text-primary); } /* A research child's provenance reads like the research card's own status line. */ .child-provenance-line { display: flex; align-items: center; gap: calc(var(--spacing) * 2); margin: 0; font-size: var(--text-sm); color: var(--color-text-tertiary); } .child-provenance-parent { font-weight: 500; color: var(--color-text-secondary); text-decoration: underline; text-decoration-color: var(--color-text-quaternary); text-decoration-thickness: var(--edge-width); text-underline-offset: calc(var(--spacing) * 0.75); cursor: pointer; } .child-provenance-segment { white-space: nowrap; } .child-provenance-parent:hover { color: var(--color-text-primary); } .child-provenance-toggle { flex-shrink: 0; gap: var(--spacing); margin-inline-start: auto; color: var(--color-text-tertiary); } .child-provenance-brief { margin: calc(var(--spacing) * 2) 0 0; padding-inline-start: calc(var(--spacing) * 8); font-size: var(--text-sm); line-height: var(--text-sm--line-height); color: var(--color-text-secondary); } @media (prefers-reduced-motion: reduce) { .motion-sidebar, .motion-drawer, .motion-drawer .navigation-focus-scope, .motion-modal, .motion-modal .navigation-modal-content { transition: none; } } .project-sidebar-document { position: relative; } .project-sidebar-document-new::before { position: absolute; inset: 0; border-radius: inherit; background: var(--project-sidebar-selected); content: ""; opacity: 0; pointer-events: none; animation: sidebar-row-new var(--duration-linger) var(--motion-move) var(--acc-expand) both; } @keyframes sidebar-row-new { from { opacity: 1; } to { opacity: 0; } } /* Loading states stay silent for fast loads, then arrive without a pop. */ .hosted-loading, .project-sidebar-chrome-fade, .project-sidebar-skeleton { animation: hosted-fade-in var(--duration-base) var(--ease-out) both; } .hosted-loading { animation-delay: var(--duration-linger); } .project-sidebar-skeleton { display: flex; flex-direction: column; gap: calc(var(--spacing) * 4); padding: calc(var(--spacing) * 3) calc(var(--spacing) * 2); animation-delay: var(--duration-base); & > span { display: block; height: calc(var(--spacing) * 2); border-radius: var(--radius-full); background-color: var(--color-selected); } } @keyframes hosted-fade-in { from { opacity: 0; } } @media (prefers-reduced-motion: reduce) { .project-sidebar-document-new::before { animation: none; } .hosted-loading, .project-sidebar-chrome-fade, .project-sidebar-skeleton { animation: none; } }