@use "../../../styles/tools/mixins" as *; @mixin section-label { @include text-caption; color: var(--color-text-subtle); text-transform: uppercase; letter-spacing: 0.04em; } @mixin tree-list { list-style: none; display: grid; gap: var(--space-1); padding: 0; } @mixin empty-slot { 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; } @mixin input-row { 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); } @mixin input { width: 100%; min-width: 0; border: 0; background: transparent; color: var(--color-text); font: inherit; outline: none; &::placeholder { color: var(--color-text-muted); } } @mixin item { width: 100%; min-width: 0; display: grid; position: relative; isolation: isolate; 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: 0; border-radius: 0; background: transparent; color: var(--color-text-muted); text-align: left; transition: color 160ms var(--easing-standard), box-shadow 160ms var(--easing-standard), transform 180ms var(--easing-standard); &::after { content: ""; position: absolute; inset: 0; border: 1px solid transparent; border-radius: var(--radius-lg); background: transparent; transition: background 160ms var(--easing-standard), border-color 160ms var(--easing-standard), box-shadow 160ms var(--easing-standard); pointer-events: none; z-index: 0; } > * { position: relative; z-index: 1; } } @mixin item-hover { color: var(--color-text); &::after { background: color-mix(in srgb, var(--color-surface-hover) 80%, var(--color-accent-soft) 20%); box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent); } } @mixin item-folder { color: var(--color-text); } @mixin item-dragging { opacity: 0.45; transform: scale(0.985); box-shadow: none; } @mixin item-drop-before { &::before { content: ""; position: absolute; left: calc(var(--space-3) + (var(--tree-depth, 0) * var(--space-4))); right: var(--space-3); top: calc((var(--space-1) * -0.5) - 1px); height: 2px; border-radius: 999px; background: color-mix(in srgb, var(--color-accent-strong) 78%, transparent); pointer-events: none; z-index: 2; } } @mixin item-drop-after { &::before { content: ""; position: absolute; left: calc(var(--space-3) + (var(--tree-depth, 0) * var(--space-4))); right: var(--space-3); bottom: calc((var(--space-1) * -0.5) - 1px); height: 2px; border-radius: 999px; background: color-mix(in srgb, var(--color-accent-strong) 78%, transparent); pointer-events: none; z-index: 2; } } @mixin item-drop-inside { color: var(--color-text); &::after { 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)); box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent); } } @mixin folder-chevron { color: var(--color-text-muted); transition: transform 160ms var(--easing-standard); } @mixin folder-chevron-open { transform: rotate(90deg); } @mixin item-active { color: var(--color-text); &::after { border-color: var(--color-border); background: var(--color-surface); box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent); } } @mixin icon { color: inherit; opacity: 0.85; } @mixin label { @include text-label; min-width: 0; } @mixin item-meta { @include text-caption; color: var(--color-text-muted); }