// Rôle : gère les imports image, annotations, marqueurs et galeries. @use "../design-system/controls"; .dropzone { display: grid; min-height: 74px; margin: var(--space-4); place-items: center; border: 1px dashed rgba(139, 92, 246, 0.52); border-radius: var(--radius-lg); background: var(--color-primary-soft); color: var(--color-text-secondary); cursor: pointer; } .dropzone:hover { border-color: var(--color-accent-gold); background: rgba(246, 196, 83, 0.1); box-shadow: 0 0 30px rgba(246, 196, 83, 0.12); } .dropzone.is-drag-over { border-color: var(--color-accent-gold); background: rgba(246, 196, 83, 0.14); box-shadow: 0 0 0 3px rgba(246, 196, 83, 0.12); } .annotation-dropzone { min-height: 58px; } .paste-target { min-height: 46px; margin: 0 var(--space-4) var(--space-4); padding: 12px 14px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: rgba(5, 7, 17, 0.44); color: var(--color-text-muted); } .paste-target:focus { border-color: var(--color-primary); color: var(--color-text-secondary); outline: none; box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.16); } .image-annotation-module { display: grid; gap: var(--space-4); } .annotation-workspace { display: grid; gap: var(--space-4); padding: var(--space-4); } .annotation-stage { position: relative; display: grid; min-width: 0; overflow: hidden; place-items: center; border: 1px solid rgba(165, 180, 252, 0.12); border-radius: var(--radius-lg); background: radial-gradient(circle at 100% 0%, rgba(246, 196, 83, 0.08), transparent 38%), rgba(5, 7, 17, 0.48); cursor: crosshair; } .annotation-media { position: relative; display: block; width: fit-content; max-width: 100%; justify-self: center; line-height: 0; } .annotation-stage-preview { cursor: default; } .annotation-preview-actions { position: absolute; top: 10px; right: 10px; z-index: 3; display: flex; gap: var(--space-2); } .annotation-preview-actions .tool-split-action-button { background: rgba(21, 26, 48, 0.94); box-shadow: 0 6px 18px rgba(5, 7, 17, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.05); } .annotation-stage-preview .annotation-marker:hover { z-index: 2; border-color: rgba(196, 181, 253, 0.9); box-shadow: 0 0 0 2px rgba(5, 7, 17, 0.72), 0 0 14px rgba(139, 92, 246, 0.34), 0 0 24px rgba(196, 181, 253, 0.22); filter: brightness(1.12); } .annotation-stage img, .annotation-media img { display: block; width: auto; height: auto; max-width: 100%; max-height: min(62vh, 620px); object-fit: contain; user-select: none; } .annotation-marker { position: absolute; z-index: 3; display: inline-grid; left: clamp(0px, calc(var(--marker-x, 50%) - 15px), calc(100% - 30px)); top: clamp(0px, calc(var(--marker-y, 50%) - 15px), calc(100% - 30px)); width: 30px; min-width: 30px; height: 30px; min-height: 30px; place-items: center; padding: 0; border: 1px solid rgba(246, 196, 83, 0.72); border-color: rgba(246, 196, 83, 0.72); border-radius: var(--radius-pill); background: linear-gradient(135deg, rgba(72, 43, 160, 0.96), rgba(45, 52, 146, 0.94)) padding-box, linear-gradient(135deg, rgba(246, 196, 83, 0.9), rgba(196, 181, 253, 0.5)) border-box; color: #fff; font-size: var(--font-size-xs); font-weight: 900; line-height: 1; box-shadow: 0 0 0 2px rgba(5, 7, 17, 0.72), 0 0 16px rgba(246, 196, 83, 0.22); cursor: grab; touch-action: none; } .annotation-marker:active { cursor: grabbing; } .annotation-marker-list { display: grid; gap: 8px; min-width: 0; margin: 0; padding: 0; list-style: none; } .annotation-marker-list li { display: grid; min-width: 0; grid-template-columns: 28px minmax(0, 1fr) auto; gap: var(--space-2); align-items: center; padding-block: 3px; } .annotation-marker-list li > span { display: inline-grid; width: 28px; height: 28px; place-items: center; border: 1px solid rgba(246, 196, 83, 0.32); border-radius: var(--radius-pill); background: rgba(246, 196, 83, 0.1); color: var(--color-accent-gold); font-size: var(--font-size-xs); font-weight: 900; } .annotation-marker-list input { @include controls.field-control(xs); } .annotation-empty { margin: 0; padding: var(--space-4); } .images-toolbar { display: flex; justify-content: flex-end; padding: var(--space-4) var(--space-4) 0; } .images-toolbar .ui-icon { width: 18px; height: 18px; } .images-toolbar + .images { padding-top: var(--space-3); } .images { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--space-3); padding: var(--space-4); } .images figure { position: relative; display: grid; gap: 8px; margin: 0; padding: 8px; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: rgba(5, 7, 17, 0.38); } .images figure { --reorder-drop-shadow: 0 0 18px rgba(246, 196, 83, 0.12); } .image-drag-handle { @include controls.icon-button(sm); position: absolute; z-index: 4; top: 12px; left: 12px; display: grid; place-items: center; cursor: grab; opacity: 0; transition: border-color var(--transition-fast), background var(--transition-fast), color var(--transition-fast), opacity var(--transition-fast), box-shadow var(--transition-fast); } .image-drag-handle .ui-icon { @include controls.icon-button-icon(sm); } .images figure:hover .image-drag-handle, .images figure:focus-within .image-drag-handle { opacity: 1; } .image-drag-handle:hover { @include controls.icon-button-hover; } .image-drag-handle:active { cursor: grabbing; } .image-preview { display: block; width: 100%; min-height: 0; padding: 0; border: 0; border-radius: var(--radius-md); background: transparent; } .image-preview:hover { transform: none; box-shadow: 0 0 0 2px rgba(246, 196, 83, 0.28); } .image-label, .image-label-input { min-width: 0; font-size: var(--font-size-sm); } .image-label { overflow: hidden; color: var(--color-text-secondary); font-weight: 700; text-overflow: ellipsis; white-space: nowrap; } .image-label-input { @include controls.field-control(sm); } .image-label-input::placeholder { @include controls.field-placeholder; } .image-label-input:focus { @include controls.field-focus; } .images img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: var(--radius-md); background: var(--color-bg-deep); } .image-actions { display: flex; gap: var(--space-2); } .image-actions .image-annotate-button, .image-actions .image-delete-button { margin-top: 0; }