.root { display: grid; --project-drawer-gap: var(--space-3); --project-drawer-top: calc(var(--space-4) + var(--control-size-lg)); --project-drawer-bottom: calc(var(--sidebar-dock-clearance, var(--shell-dock-clearance)) + var(--project-drawer-gap)); } .rootCompact { justify-items: center; } .rootDragMode { user-select: none; cursor: grabbing; } .rootDragMode .treeItem { cursor: grabbing; } .trigger { width: 100%; min-width: 0; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--space-2); min-height: calc(var(--control-size-lg) + var(--space-2)); padding: var(--space-2) var(--space-3) calc(var(--space-2) + 0.2rem); border: 1px solid color-mix(in srgb, var(--color-border-strong) 44%, transparent); border-radius: calc(var(--radius-lg) + var(--space-1)); background: color-mix(in srgb, var(--color-surface) 96%, transparent); box-shadow: var(--shadow-soft); text-align: left; position: relative; z-index: 5; transition: border-color var(--duration-fast) var(--easing-standard), background var(--duration-fast) var(--easing-standard), box-shadow var(--duration-fast) var(--easing-standard), transform 180ms var(--easing-standard); } .trigger:hover { background: var(--color-surface-hover); border-color: var(--color-border); } .triggerOpen { border-color: color-mix(in srgb, var(--color-accent-strong) 22%, var(--color-border-strong)); background: color-mix(in srgb, var(--color-accent-soft) 26%, var(--color-surface)); box-shadow: 0 10px 28px color-mix(in srgb, black 8%, transparent); } .triggerCompact { width: var(--control-size-xl); min-height: var(--control-size-xl); grid-template-columns: auto; justify-items: center; gap: 0.15rem; padding: var(--space-2) 0; border-radius: var(--radius-xl); } .triggerCompact .triggerLead { width: var(--control-size-md); height: var(--control-size-md); } .triggerCompact .triggerIcon { transform: rotate(0deg); } .triggerCompact .triggerIconOpen { transform: rotate(180deg); } .triggerLead { width: var(--control-size-md); height: var(--control-size-md); display: inline-flex; align-items: center; justify-content: center; border-radius: var(--radius-md); background: color-mix(in srgb, var(--color-accent-soft) 82%, transparent); color: var(--color-accent-strong); } .triggerCopy { min-width: 0; display: grid; gap: 0.12rem; } .eyebrow { @include text-caption; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.08em; } .value { @include text-label; } .triggerIcon { color: var(--color-text-muted); transform: rotate(-90deg); transition: transform var(--duration-fast) var(--easing-standard); } .triggerIconOpen { transform: rotate(0deg); } .scrim { position: absolute; inset: calc(var(--project-drawer-top) + var(--project-drawer-gap)) var(--space-4) var(--project-drawer-bottom) var(--space-4); z-index: 2; opacity: 0; pointer-events: none; background: color-mix(in srgb, black 8%, transparent); border-radius: var(--radius-lg); transition: opacity 260ms var(--easing-standard); } .scrimOpen { opacity: 1; pointer-events: auto; } .rootCompact .scrim, .rootCompact .drawer { left: 0; right: auto; width: min(18rem, calc(100vw - 6rem)); } .drawer { position: absolute; inset: calc(var(--project-drawer-top) + var(--project-drawer-gap)) var(--space-4) var(--project-drawer-bottom) var(--space-4); z-index: 3; display: grid; overflow: hidden; border-radius: var(--radius-lg); opacity: 0; pointer-events: none; transform: translateX(calc(-1 * (var(--space-5) + 12%))); will-change: transform, opacity; transition: opacity 240ms var(--easing-standard), transform 360ms cubic-bezier(0.16, 1, 0.3, 1); } .drawerOpen { opacity: 1; pointer-events: auto; transform: translateX(0); } .drawer::before { content: ""; position: absolute; inset: 0; border-radius: inherit; border: 1px solid color-mix(in srgb, var(--color-border-strong) 52%, transparent); background: var(--color-surface-muted); box-shadow: 14px 0 30px color-mix(in srgb, black 7%, transparent), inset -1px 0 0 color-mix(in srgb, white 4%, transparent); pointer-events: none; } .drawerBody { position: relative; z-index: 1; min-height: 0; display: grid; align-content: start; gap: var(--space-2); padding: var(--space-4); overflow-y: auto; overscroll-behavior: contain; scrollbar-width: none; } .drawerBody::-webkit-scrollbar { width: 0; } .treeSectionLabel { @include text-caption; margin: 0 0 var(--space-2); padding: 0 var(--space-3); color: var(--color-text-subtle); text-transform: uppercase; letter-spacing: 0.04em; } .treeList { list-style: none; display: grid; gap: var(--space-1); padding: 0; } .treeEmptySlot { min-height: calc(var(--control-size-lg) - var(--space-2)); padding-left: calc(var(--space-3) + (var(--tree-depth, 0) * var(--space-4))); border-radius: var(--radius-lg); border: 1px dashed color-mix(in srgb, var(--color-border) 38%, transparent); opacity: 0.35; } .treeInputRow { width: 100%; min-width: 0; display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: var(--space-2); min-height: calc(var(--control-size-lg) - var(--space-2)); padding: var(--space-2) var(--space-3); padding-left: calc(var(--space-3) + (var(--tree-depth, 0) * var(--space-4))); border: 1px solid color-mix(in srgb, var(--color-border) 42%, transparent); border-radius: var(--radius-lg); background: color-mix(in srgb, var(--color-surface) 94%, transparent); } .treeInput { width: 100%; min-width: 0; border: 0; background: transparent; color: var(--color-text); font: inherit; outline: none; } .treeInput::placeholder { color: var(--color-text-muted); } .treeItem { width: 100%; min-width: 0; display: grid; grid-template-columns: auto auto minmax(0, 1fr) auto; align-items: center; gap: var(--space-2); min-height: calc(var(--control-size-lg) - var(--space-2)); padding: var(--space-2) var(--space-3); padding-left: calc(var(--space-3) + (var(--tree-depth, 0) * var(--space-4))); border: 1px solid transparent; border-radius: var(--radius-lg); background: transparent; color: var(--color-text-muted); transition: background 160ms var(--easing-standard), color 160ms var(--easing-standard), border-color 160ms var(--easing-standard), box-shadow 160ms var(--easing-standard), transform 180ms var(--easing-standard); text-align: left; } .treeItem:hover, .treeItem:focus-visible { background: color-mix(in srgb, var(--color-surface-hover) 80%, var(--color-accent-soft) 20%); color: var(--color-text); box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent); } .treeItemFolder { color: var(--color-text); } .treeItemDragging { opacity: 0.45; transform: scale(0.985); box-shadow: none; } .treeItemDropBefore { box-shadow: inset 0 2px 0 color-mix(in srgb, var(--color-accent-strong) 78%, transparent); } .treeItemDropAfter { box-shadow: inset 0 -2px 0 color-mix(in srgb, var(--color-accent-strong) 78%, transparent); } .treeItemDropInside { border-color: color-mix(in srgb, var(--color-accent-strong) 55%, transparent); background: color-mix(in srgb, var(--color-accent-soft) 36%, var(--color-surface)); color: var(--color-text); box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent); } .folderChevron { color: var(--color-text-muted); transition: transform 160ms var(--easing-standard); } .folderChevronOpen { transform: rotate(90deg); } .treeItemActive { border-color: var(--color-border); background: var(--color-surface); color: var(--color-text); box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent); } .icon { color: inherit; opacity: 0.85; } .label { @include text-label; min-width: 0; } .itemMeta { @include text-caption; color: var(--color-text-muted); } @media (max-width: 720px) { .rootCompact .scrim, .rootCompact .drawer { width: min(18rem, calc(100vw - 5rem)); } }