| | |
| | | .field { |
| | | width: 100%; |
| | | margin: .5em 0; |
| | | padding: .5em 0; |
| | | } |
| | | .field + .field { |
| | | border-top: 1px solid rgb(var(--base-200)); |
| | | } |
| | | |
| | | .field .wrapper { |
| | | width: 100%; |
| | | position: relative; |
| | | } |
| | | .field .validation { |
| | | flex-shrink: 0; |
| | | max-width: 0; |
| | | transition: var(--trans-size); |
| | | } |
| | | .field.has-error .validation.error, |
| | | .field.has-success .validation.success { |
| | | max-width: var(--btn); |
| | | } |
| | | .field.has-error .error { |
| | | color: rgb(var(--error)); |
| | | } |
| | | .field.has-error input, |
| | | .field.has-error textarea, |
| | | .field.has-error select { |
| | | border-color: rgb(var(--error)); |
| | | background-color: var(--errorBack); |
| | | } |
| | | .field.has-error input:focus, |
| | | .field.has-error textarea:focus, |
| | | .field.has-error select:focus { |
| | | outline-color: rgb(var(--error)); |
| | | box-shadow: rgba(var(--error), .2) var(--shdw); |
| | | } |
| | | .field.has-success .success { |
| | | color: var(--success); |
| | | } |
| | | |
| | | .validation-message { |
| | | color: var(--errorText); |
| | | font-size: var(--txt-small); |
| | | margin-top: .25rem; |
| | | display: block; |
| | | } |
| | | |
| | | |
| | | .field[data-field=post_status] .wrapper { |
| | | --justify: flex-start; |
| | | } |
| | | .field[data-field=post_status] .btn + label { |
| | | width: var(--chipchip); |
| | | min-height: var(--chipchip); |
| | | padding: 0; |
| | | } |
| | | .field[data-field=post_status] .btn:focus + label, |
| | | .field[data-field=post_status] .btn + label:hover { |
| | | color: rgb(var(--action-contrast)); |
| | | } |
| | | |
| | | |
| | | /********************** |
| | | DATE & TIME FIELDS |
| | | **********************/ |
| | | .date-wrapper { |
| | | position: relative; |
| | | display: inline-block; |
| | | } |
| | | |
| | | input[type=date] { |
| | | padding: 8px 36px 8px 8px; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | input[type=date]::-webkit-calendar-picker-indicator { |
| | | opacity: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | input[type=date] + .icon { |
| | | --w: 20px; |
| | | position: absolute; |
| | | right: 10px; |
| | | top: 50%; |
| | | transform: translateY(-50%); |
| | | pointer-events: none; |
| | | } |
| | | |
| | | input:is([type=time], [type=datetime-local], [type=date]) { |
| | | padding: .5rem; |
| | | border: 1px solid rgb(var(--contrast-200)); |
| | | border-radius: 4px; |
| | | font-size: 14px; |
| | | min-width: 180px; |
| | | background: rgb(var(--base)); |
| | | color: rgb(var(--contrast)); |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .wrapper input:is([type=time], [type=datetime-local], [type=date]):focus, |
| | | .time-wrapper input[type=time]:focus, |
| | | .datetime-wrapper input[type=datetime-local]:focus, |
| | | .date-wrapper input[type=date]:focus { |
| | | border-color: rgb(var(--action-0)); |
| | | box-shadow: 0 0 0 2px rgba(var(--action-0), .1); |
| | | } |
| | | |
| | | .wrapper .icon, |
| | | .time-wrapper .icon, |
| | | .datetime-wrapper .icon, |
| | | .date-wrapper .icon { |
| | | width: 18px; |
| | | height: 18px; |
| | | background-color: rgb(var(--contrast)); |
| | | opacity: .7; |
| | | } |
| | | |
| | | |
| | | /****************************************************************** |
| | | QUANTITY FIELD |
| | | ******************************************************************/ |
| | | .quantity { |
| | | margin: 0; |
| | | display: inline-flex; |
| | | width: fit-content; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid transparent; |
| | | border-radius: 4px; |
| | | position: relative; |
| | | } |
| | | |
| | | .quantity:focus-within { |
| | | border-color: rgb(var(--action-0)); |
| | | } |
| | | |
| | | .quantity label { |
| | | margin: 0; |
| | | font-size: var(--txt-small); |
| | | } |
| | | |
| | | .quantity button { |
| | | background: rgb(var(--base)); |
| | | padding: 0; |
| | | width: var(--chip_); |
| | | height: var(--chip_); |
| | | min-height: 0; |
| | | z-index: 0; |
| | | position: relative; |
| | | border: 1px solid rgb(var(--base-200)); |
| | | color: rgb(var(--contrast-200)); |
| | | } |
| | | |
| | | .quantity button:hover:not(:disabled) { |
| | | color: rgb(var(--action-0)); |
| | | border-color: rgb(var(--action-0)); |
| | | background-color: rgb(var(--base)); |
| | | } |
| | | |
| | | .quantity button:active:not(:disabled) { |
| | | background-color: rgb(var(--action-0)); |
| | | color: rgb(var(--light-0)); |
| | | transform: scale(.95); |
| | | } |
| | | |
| | | .quantity button:disabled { |
| | | opacity: .5; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .quantity input[type=number] { |
| | | z-index: 1; |
| | | border: 1px solid rgb(var(--base-200)); |
| | | background: rgb(var(--base)); |
| | | text-align: center; |
| | | font-size: 1.1rem; |
| | | width: 60px; |
| | | height: 48px; |
| | | margin: 0; |
| | | padding: 0!important; |
| | | appearance: textfield; |
| | | } |
| | | |
| | | .quantity input[type=number]::-webkit-outer-spin-button, |
| | | .quantity input[type=number]::-webkit-inner-spin-button { |
| | | -webkit-appearance: none; |
| | | margin: 0; |
| | | } |
| | | |
| | | .quantity input[type=number]:focus { |
| | | background-color: rgb(var(--base-50)); |
| | | } |
| | | |
| | | .quantity button.increase { |
| | | left: -2px; |
| | | border-radius: 0 4px 4px 0; |
| | | } |
| | | |
| | | .quantity button.decrease { |
| | | right: -2px; |
| | | border-radius: 4px 0 0 4px; |
| | | } |
| | | |
| | | /** UPLOADER **/ |
| | | |
| | | details.uploader .file-upload-container { |
| | | margin: 1rem 0; |
| | | max-width: 100%; |
| | | } |
| | | @media (min-width: 768px) { |
| | | details.uploader .file-upload-container { |
| | | margin: 1rem var(--mr) 1rem var(--ml); |
| | | max-width: var(--maxWidth); |
| | | } |
| | | } |
| | | /*.field.upload .item-grid,*/ |
| | | /*.field.upload [data-upload-id] {*/ |
| | | /* touch-action: none;*/ |
| | | /*}*/ |
| | | |
| | | |
| | | |
| | | .field.upload { |
| | | position: relative; |
| | | } |
| | | .field.upload .progress { |
| | | display: none; |
| | | } |
| | | .field.upload.uploading .progress { |
| | | display: block; |
| | | } |
| | | .field.upload .actions { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | } |
| | | |
| | | .preview-wrap .item-grid, |
| | | .empty-group, |
| | | .file-upload-wrapper { |
| | | border: 2px dashed var(--action-0); |
| | | border: 2px dashed rgb(var(--action-0)); |
| | | border-radius: 4px; |
| | | padding: 2rem; |
| | | text-align: center; |
| | | transition: all .3s ease; |
| | | background: rgba(var(--action-rgb),var(--rgb-subtle)); |
| | | background: rgba(var(--action-0),var(--op-1)); |
| | | position: relative; |
| | | cursor: pointer; |
| | | user-select: none; |
| | | } |
| | | .file-upload-wrapper h2 { |
| | | margin: 0!important; |
| | | font-size: var(--large); |
| | | } |
| | | .file-upload-wrapper { |
| | | max-width: var(--content); |
| | | margin: 1rem auto; |
| | | } |
| | | .file-upload-wrapper h2 { |
| | | margin: 0; |
| | | font-size: var(--txt-large); |
| | | } |
| | | |
| | | .file-upload-wrapper:hover, |
| | | .dragover { |
| | | background: rgba(var(--action-rgb),var(--rgb-subtle-hover)); |
| | | border-color: var(--action-0)!important; |
| | | .preview-wrap .item-grid:hover, |
| | | .empty-group:hover, |
| | | .file-upload-wrapper:hover, |
| | | .dragover { |
| | | background: rgba(var(--action-0),var(--op-2)); |
| | | border-color: rgb(var(--action-0)); |
| | | } |
| | | .preview-wrap:has(.item-grid:empty) .selection-controls { |
| | | display: none; |
| | | } |
| | | |
| | | .file-upload-wrapper input[type="file"] { |
| | | .preview-wrap .item-grid { |
| | | min-height: 20vh; |
| | | } |
| | | .preview-wrap .item-grid:empty::before { |
| | | content: 'Unsorted images become their own posts.'; |
| | | display: block; |
| | | } |
| | | .file-upload-wrapper input[type=file] { |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | opacity: 0; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .empty-group p, |
| | | .file-upload-text { |
| | | color: var(--contrast); |
| | | margin: 0; |
| | | font-family: var(--body); |
| | | } |
| | | .empty-group p strong, |
| | | .file-upload-text strong { |
| | | color: rgb(var(--action-0)); |
| | | text-decoration: underline; |
| | | } |
| | | /** UPLOAD GROUPS **/ |
| | | .item-grid.groups { |
| | | grid-template-columns: repeat(1, 1fr); |
| | | } |
| | | .item-grid.group { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .file-upload-text strong { |
| | | color: var(--action-0); |
| | | text-decoration: underline; |
| | | } |
| | | |
| | | .field.upload:has(.upload-item) .file-upload-container { |
| | | display: none; |
| | | } |
| | | |
| | | .field.upload { |
| | | position: relative; |
| | | } |
| | | .field.upload:not(.uploading) .progress { |
| | | display: none; |
| | | } |
| | | .field.upload .actions { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | } |
| | | .item-grid.restore, |
| | | .item-grid.group, |
| | | .item-grid.preview { |
| | | grid-template-columns: repeat(3, 1fr) |
| | | } |
| | | .item-grid.restore .item, |
| | | .item-grid.group .item, |
| | | .item-grid.preview .item { |
| | | .item-grid:is(.restore,.group,.preview) .item { |
| | | display: block; |
| | | } |
| | | .item-grid.restore button, |
| | | .item-grid.group button, |
| | | .item-grid.preview button { |
| | | padding: .25rem .5rem; |
| | | } |
| | | .item-grid.restore button .icon, |
| | | .item-grid.group button .icon, |
| | | .item-grid.preview button .icon { |
| | | --w: 1.1em; |
| | | } |
| | | .item-grid.restore .item .preview > input[type=checkbox]:not(.label-button) + label, |
| | | .item-grid.preview .item .preview > input[type=checkbox]:not(.label-button) + label, |
| | | .item-grid.group .item .preview > input[type=checkbox]:not(.label-button) + label { |
| | | .item-grid:is(.restore,.group,.preview) button { |
| | | padding: .25rem .5rem; |
| | | } |
| | | |
| | | .item-grid:is(.restore,.group,.preview) .preview > input[type=checkbox]:not(.label-button) + label { |
| | | padding-left: 0; |
| | | margin: 0; |
| | | } |
| | | .item-grid.restore .item .preview > input[type=checkbox] + label:before, |
| | | .item-grid.preview .item .preview > input[type=checkbox] + label:before, |
| | | .item-grid.group .item .preview > input[type=checkbox] + label:before { |
| | | transform: unset; |
| | | top: .5rem; |
| | | left: .5rem; |
| | | } |
| | | .item-grid.restore .item .preview > input[type=checkbox] + label::after, |
| | | .item-grid.preview .item .preview > input[type=checkbox] + label::after, |
| | | .item-grid.group .item .preview > input[type=checkbox] + label::after { |
| | | top: .5rem; |
| | | left: .75rem; |
| | | transform: translateY(20%) rotate(45deg); |
| | | } |
| | | .item-grid.restore .item .item-actions, |
| | | .item-grid.preview .item .item-actions, |
| | | .item-grid.group .item .item-actions { |
| | | /*.item-grid:is(.restore,.group,.preview) .preview > input[type=checkbox] + label::before {*/ |
| | | /* transform: unset;*/ |
| | | /* top: .5rem;*/ |
| | | /* left: .5rem;*/ |
| | | /*}*/ |
| | | /*.item-grid:is(.restore,.group,.preview) .preview > input[type=checkbox] + label::after {*/ |
| | | /* top: .5rem;*/ |
| | | /* left: .75rem;*/ |
| | | /* transform: translateY(20%) rotate(45deg);*/ |
| | | /*}*/ |
| | | .item-grid:is(.restore,.group,.preview) .item .item-actions { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | left: var(--chipchip); |
| | | } |
| | | .item-grid.restore summary, |
| | | .item-grid.preview summary, |
| | | .item-grid.group summary { |
| | | .item-grid:is(.restore,.group,.preview) summary { |
| | | padding: .5rem; |
| | | } |
| | | .item-grid.restore:has([type=checkbox]:checked), |
| | | .item-grid.preview:has([type=checkbox]:checked), |
| | | .item-grid.group:has([type=checkbox]:checked) { |
| | | padding: 1rem; |
| | | background-color: rgba(var(--contrast-rgb),var(--rgb-subtle)); |
| | | } |
| | | .item-grid.restore:has([type=checkbox]:checked) .item, |
| | | .item-grid.preview:has([type=checkbox]:checked) .item, |
| | | .item-grid.group:has([type=checkbox]:checked) .item { |
| | | padding: .75rem; |
| | | opacity: .8; |
| | | } |
| | | .item-grid.restore:has([type=checkbox]:checked) .item img, |
| | | .item-grid.preview:has([type=checkbox]:checked) .item img, |
| | | .item-grid.group:has([type=checkbox]:checked) .item img { |
| | | filter: var(--filter); |
| | | } |
| | | .item-grid.restore:has([type=checkbox]:checked) details, |
| | | .item-grid.preview:has([type=checkbox]:checked) details, |
| | | .item-grid.group:has([type=checkbox]:checked) details { |
| | | display: none; |
| | | } |
| | | .item-grid.restore .item:has([type=checkbox]:checked), |
| | | .item-grid.preview .item:has([type=checkbox]:checked), |
| | | .item-grid.group .item:has([type=checkbox]:checked) { |
| | | .item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked){ |
| | | padding: .5rem; |
| | | background-color: rgba(var(--action-rgb), var(--rgb-medium)); |
| | | background-color: rgba(var(--action-0), var(--op-4)); |
| | | opacity: 1; |
| | | } |
| | | |
| | | .item-grid.restore .item:has([type=checkbox]:checked) img, |
| | | .item-grid.preview .item:has([type=checkbox]:checked) img, |
| | | .item-grid.group .item:has([type=checkbox]:checked) img { |
| | | .item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) img { |
| | | filter: none; |
| | | } |
| | | |
| | | [type=radio].featured:checked + label .star, |
| | | [type=radio].featured + label .star + .star { |
| | | .item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) .item img { |
| | | filter: var(--filter); |
| | | } |
| | | .item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) details, |
| | | .item-grid.preview summary span { |
| | | display: none; |
| | | } |
| | | |
| | | [type=radio].featured + label .star, |
| | | [type=radio].featured:checked + label .star + .star { |
| | | display: inline-block; |
| | | [type=radio].featured:checked + label .icon-star, |
| | | [type=radio].featured:not(:checked) + label .icon-star-fi { |
| | | display: none; |
| | | } |
| | | .restore.item, |
| | | .upload.item { |
| | | border-radius: var(--innerRadius); |
| | | [type=radio].featured:not(:checked) + label .icon-star, |
| | | [type=radio].featured:checked + label .icon-star-fi { |
| | | display: inline-block; |
| | | } |
| | | .item:is(.restore,.upload) { |
| | | border-radius: var(--radius); |
| | | aspect-ratio: unset; |
| | | overflow: hidden; |
| | | background: var(--base); |
| | | border: 1px solid var(--base-200); |
| | | } |
| | | .restore.item img, |
| | | .upload.item img { |
| | | transition: transform var(--transition-base); |
| | | background: rgb(var(--base)); |
| | | border: 1px solid rgb(var(--base-200)); |
| | | } |
| | | |
| | | .restore.item:hover img, |
| | | .upload.item:hover img { |
| | | transform: scale(1.02); |
| | | transition: transform var(--transition-base); |
| | | .item:is(.restore,.upload) [for="select-item"] { |
| | | aspect-ratio: 1; |
| | | } |
| | | .item.upload:has(details[open]) { |
| | | grid-column: 1 / -1; |
| | | padding: .5rem 10%; |
| | | margin: 1rem 0; |
| | | background-color: transparent; |
| | | border: 2px dashed rgb(var(--action-200)); |
| | | } |
| | | .item.upload:has(details[open]) details[open] { |
| | | background-color:transparent; |
| | | } |
| | | .item:is(.restore,.upload) img { |
| | | transform: scale(1); |
| | | transition: transform var(--trans-base); |
| | | } |
| | | .item:is(.upload,.restore):hover img { |
| | | transform: scale(1.02); |
| | | } |
| | | |
| | | .upload-group { |
| | | background-image: var(--dashed-action); |
| | | padding: 5px; |
| | | border-radius: var(--innerRadius); |
| | | background-color: rgba(var(--action-rgb), var(--rgb-subtle)); |
| | | border-radius:var(--radius); |
| | | background-color: rgba(var(--action-0), var(--op-1)); |
| | | } |
| | | .upload-group .selected .field { |
| | | margin: 0; |
| | | } |
| | | .upload-group .selection-actions button { |
| | | aspect-ratio: unset; |
| | | } |
| | | |
| | | .submit-uploads { |
| | | position: fixed; |
| | | bottom: var(--offHeight); |
| | | right: var(--offHeight); |
| | | bottom: 0; |
| | | left: var(--btn_); |
| | | z-index: var(--z-6); |
| | | height: var(--height); |
| | | box-shadow: var(--shadow); |
| | | border-radius: var(--innerRadius); |
| | | height: var(--btn); |
| | | box-shadow:rgba(var(--base),var(--op-45)) var(--shdw); |
| | | border-radius: var(--radius); |
| | | animation: pulse-color 5s infinite; |
| | | animation-delay: 1s; |
| | | background-color: var(--action-0); |
| | | color: var(--action-contrast); |
| | | background-color: rgb(var(--action-0)); |
| | | color: rgb(var(--action-contrast)); |
| | | } |
| | | .submit-uploads:hover { |
| | | background-color: var(--base-200); |
| | | color: var(--contrast-200); |
| | | } |
| | | .submit-uploads:hover { |
| | | background-color: rgb(var(--base-200)); |
| | | color: rgb(var(--contrast-200)); |
| | | } |
| | | |
| | | .empty-group { |
| | | order: -1; |
| | | grid-column: 1 / -1; |
| | | padding: 20px; |
| | | background-image: var(--dashed-action); |
| | | border-radius: var(--innerRadius); |
| | | border-radius: var(--radius); |
| | | margin: 10px 0; |
| | | cursor: pointer; |
| | | transition: all var(--transition-base); |
| | | transition: all var(--trans-base); |
| | | text-align: center; |
| | | background-color: rgba(var(--action-rgb), var(--rgb-subtle)); |
| | | background-color: rgba(var(--action-0), var(--op-1)); |
| | | } |
| | | |
| | | .group-display:not([hidden]) ~ .file-upload-container { |
| | |
| | | .dragging { |
| | | opacity: .7; |
| | | transform: scale(.95) rotate(3deg); |
| | | z-index: var(--z-top); |
| | | box-shadow: 0 8px 25px rgba(0,0,0,.3); |
| | | z-index: var(--z-7); |
| | | box-shadow: 0 8px 25px rgba(var(--contrast), var(--op-2)); |
| | | } |
| | | |
| | | .dragover { |
| | | background: rgba(var(--action-rgb),var(--rgb-light))!important; |
| | | border-color: var(--action-0) !important; |
| | | background: rgba(var(--action-0), var(--op-3))!important; |
| | | border-color: rgb(var(--action-0))!important; |
| | | transform: scale(1.05); |
| | | animation: drop-pulse .8s infinite ease-in-out; |
| | | } |
| | | |
| | | .drag-preview { |
| | | position: fixed; |
| | | z-index: var(--zz-top); |
| | | z-index: var(--z-9); |
| | | width: fit-content; |
| | | overflow: visible; |
| | | pointer-events: none; |
| | | opacity: 0.9; |
| | | opacity: .9; |
| | | transform: scale(1.05); |
| | | transition: transform 0.2s ease; |
| | | transition: transform .2s ease; |
| | | } |
| | | .drag-preview .drag-items { |
| | | width: max-content; |
| | | height: max-content; |
| | | position: relative; |
| | | } |
| | | |
| | | .drag-preview .drag-items .drag-item { |
| | | width: 120px; |
| | | height: 120px; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | background: var(--base); |
| | | border-radius: var(--outerRadius); |
| | | box-shadow: var(--shadow); |
| | | } |
| | | .drag-preview .drag-items { |
| | | width: max-content; |
| | | height: max-content; |
| | | position: relative; |
| | | } |
| | | .drag-preview .drag-items .dragi-item { |
| | | width: 120px; |
| | | height: 120px; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | background: rgb(var(--base)); |
| | | border-radius: var(--radius-outer); |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | } |
| | | |
| | | .drag-preview .drag-items .drag-item:nth-child(1) { |
| | | transform: rotate(-3deg); |
| | |
| | | position: absolute; |
| | | top: -8px; |
| | | right: -8px; |
| | | background: var(--base-200); |
| | | color: var(--contrast); |
| | | background: rgb(var(--base-200)); |
| | | color: rgb(var(--contrast)); |
| | | border-radius: 50%; |
| | | width: 24px; |
| | | height: 24px; |
| | |
| | | justify-content: center; |
| | | font-size: 12px; |
| | | font-weight: bold; |
| | | box-shadow: var(--shadow); |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | z-index: var(--z-3); |
| | | } |
| | | |
| | |
| | | |
| | | @keyframes drop-pulse { |
| | | 0%, 100% { |
| | | background-color: rgba(var(--action-rgb),var(--rgb-light)); |
| | | background-color: rgba(var(--action-0),var(--op-3)); |
| | | transform: scale(1.02); |
| | | } |
| | | 50% { |
| | | background-color: var(rgba(var(--action-rgb),var(--rgb-medium))); |
| | | background-color: var(rgba(var(--action-0),var(--op-4))); |
| | | transform: scale(1.04); |
| | | } |
| | | } |
| | |
| | | /****** |
| | | Upload grouping |
| | | ******/ |
| | | .group-actions { |
| | | .selection-actions { |
| | | display: flex; |
| | | gap: .25rem; |
| | | } |
| | |
| | | |
| | | .group-display.group-display { |
| | | position: fixed; |
| | | top: var(--height); |
| | | bottom: var(--height); |
| | | top: var(--btn); |
| | | bottom: var(--btn); |
| | | left: 0; |
| | | right: 0; |
| | | max-height: var(--maxHeight); |
| | |
| | | left: -.5rem; |
| | | right: -.5rem; |
| | | position: absolute; |
| | | background-color: rgba(var(--base-rgb), var(--rgb-heavy)); |
| | | background-color: rgba(var(--base), var(--op-6)); |
| | | filter: blur(5px); |
| | | } |
| | | |
| | | .group-display .preview-wrap, |
| | | .group-display .sidebar { |
| | | --wrap: nowrap; |
| | | height: 50%; |
| | | overflow:hidden auto; |
| | | position: relative; |
| | |
| | | bottom: 0; |
| | | flex-wrap: nowrap; |
| | | overflow: hidden auto; |
| | | background-color: var(--contrast-200); |
| | | color: var(--base); |
| | | background-color: rgb(var(--contrast-200)); |
| | | color: rgb(var(--base)); |
| | | } |
| | | .group-display .sidebar > .hint { |
| | | color: var(--contrast); |
| | | color: rgb(var(--contrast)); |
| | | } |
| | | .group-display .sidebar .header { |
| | | display: none; |
| | |
| | | position: absolute; |
| | | left: 0; |
| | | right: 0; |
| | | background-color: rgba(var(--base-rgb), var(--rgb-heavy)); |
| | | background-color: rgba(var(--base), var(--op-6)); |
| | | z-index: var(--z-3); |
| | | box-shadow: var(--shadow); |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | } |
| | | .group-display .item-grid { |
| | | height: 100%; |
| | |
| | | height: fit-content; |
| | | top: 0; |
| | | z-index: var(--z-3); |
| | | background-color: rgba(var(--action-rgb), var(--rgb-heavy)); |
| | | background-color: rgba(var(--action-0), var(--op-6)); |
| | | } |
| | | .group-display .sidebar .upload-group { |
| | | order: 1; |
| | |
| | | } |
| | | |
| | | .submit-uploads { |
| | | bottom: var(--height); |
| | | bottom: var(--btn); |
| | | left: 0; |
| | | right: 0; |
| | | width: 100%; |
| | |
| | | .group-display .preview-wrap, |
| | | .group-display .sidebar { |
| | | --justify: flex-start; |
| | | max-height: calc(100vh - var(--doubleHeight)); |
| | | --wrap: nowrap; |
| | | max-height: calc(100vh - var(--btnbtn)); |
| | | overflow: hidden auto; |
| | | } |
| | | .group-display .preview-wrap, |
| | |
| | | .preview-wrap .hint { |
| | | position: sticky; |
| | | z-index: var(--z-3); |
| | | box-shadow: var(--shadow); |
| | | background-color: var(--base); |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | background-color: rgb(var(--base)); |
| | | width: 100%; |
| | | } |
| | | .preview-actions { |
| | |
| | | } |
| | | } |
| | | |
| | | .restore-uploads { |
| | | position: fixed; |
| | | top: var(--offHeight); |
| | | bottom: var(--offHeight); |
| | | left: 1rem; |
| | | right: 1rem; |
| | | border-radius: var(--outerRadius); |
| | | padding: 1rem; |
| | | z-index: var(--z-top); |
| | | box-shadow: var(--shadow); |
| | | background-color: var(--base-200); |
| | | overflow: hidden auto; |
| | | .item-grid.restore { |
| | | grid-template-columns: repeat(1, 1fr); |
| | | } |
| | | |
| | | /************************************************************* |
| | | Tabs in dialog elements |
| | | ************************************************************/ |
| | | |
| | | dialog nav.tabs { |
| | | position: sticky; |
| | | top: 0; |
| | | background-color: var(--base-50); |
| | | z-index: var(--z-6); |
| | | box-shadow: var(--shadow-down); |
| | | margin-bottom: 2rem; |
| | | } |
| | | |
| | | /************************************************************ |
| | | QUILL |
| | | ************************************************************/ |
| | | .editor-container .ql-toolbar { |
| | | display: flex; |
| | | background-color: var(--base-50); |
| | | background-color: rgb(var(--base-50)); |
| | | justify-content: flex-start; |
| | | flex-wrap: wrap; |
| | | padding: .25rem; |
| | | gap: .5rem 1rem; |
| | | border-top-left-radius: var(--innerRadius); |
| | | border-top-right-radius: var(--innerRadius); |
| | | border-bottom: 4px solid var(--base-50); |
| | | border-top-left-radius: var(--radius); |
| | | border-top-right-radius: var(--radius); |
| | | border-bottom: 4px solid rgb(var(--base-50)); |
| | | } |
| | | |
| | | .ql-toolbar button { |
| | | min-height: 0; |
| | | padding: .5rem; |
| | | } |
| | | .ql-toolbar .ql-formats { |
| | | display: flex; |
| | | gap: .25rem; |
| | | } |
| | | .editor-container .ql-container { |
| | | --padding: 1rem; |
| | | background-color: var(--base); |
| | | border-bottom-left-radius: var(--innerRadius); |
| | | border-bottom-right-radius: var(--innerRadius); |
| | | background-color: rgb(var(--base)); |
| | | border-bottom-left-radius: var(--radius); |
| | | border-bottom-right-radius: var(--radius); |
| | | height: fit-content; |
| | | padding: 2px; |
| | | border: 1px solid var(--base-200); |
| | | border: 1px solid rgb(var(--base-200)); |
| | | } |
| | | .editor-container .ql-container .ql-editor { |
| | | padding: var(--padding); |
| | | width: 100%; |
| | | height: 100%; |
| | | max-width: 90vw; |
| | | } |
| | | .ql-editor img { |
| | | max-width: 50%; |
| | |
| | | .ql-tooltip { |
| | | position: absolute; |
| | | transform: translateY(10px); |
| | | background-color: var(--base-100); |
| | | border: 1px solid var(--base); |
| | | box-shadow: 0px 0px 5px var(--overlay-heavy); |
| | | color: var(--contrast); |
| | | background-color: rgb(var(--base-100)); |
| | | border: 1px solid rgb(var(--base)); |
| | | box-shadow: 0px 0px 5px rgba(var(--base),var(--op-6)); |
| | | color: rgb(var(--contrast)); |
| | | padding: 5px 12px; |
| | | white-space: nowrap; |
| | | } |
| | |
| | | margin-left: auto; |
| | | } |
| | | |
| | | |
| | | /******************************************************* |
| | | UPLOADER |
| | | *******************************************************/ |
| | | /*!* Group actions buttons - more visible *!*/ |
| | | /*.group-actions {*/ |
| | | /* display: flex;*/ |
| | | /* gap: 0.5rem;*/ |
| | | /*}*/ |
| | | |
| | | /*.group-actions button {*/ |
| | | /* padding: 0.5rem 0.75rem;*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* background: rgba(var(--action-rgb), 0.1);*/ |
| | | /* border: 1px solid rgba(var(--action-rgb), 0.3);*/ |
| | | /* color: var(--action-0);*/ |
| | | /* font-size: var(--small);*/ |
| | | /* transition: all var(--transition-base);*/ |
| | | /* cursor: pointer;*/ |
| | | /*}*/ |
| | | |
| | | /*.group-actions button:hover {*/ |
| | | /* background: rgba(var(--action-rgb), 0.2);*/ |
| | | /* border-color: var(--action-0);*/ |
| | | /* transform: translateY(-1px);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Group item grid - distinct from preview grid *!*/ |
| | | /*.item-grid.group {*/ |
| | | /* background: rgba(255, 255, 255, 0.5);*/ |
| | | /* border: 1px solid rgba(var(--action-rgb), 0.15);*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* padding: 0.75rem;*/ |
| | | /* min-height: 100px;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Group count hint *!*/ |
| | | /*.group-count {*/ |
| | | /* margin-top: 0.5rem;*/ |
| | | /* font-size: var(--small);*/ |
| | | /* color: var(--contrast-70);*/ |
| | | /* font-style: italic;*/ |
| | | /*}*/ |
| | | |
| | | /*!* ============================================================================*/ |
| | | /* FIX #2: Improve drag preview styling*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*!* Base drag preview *!*/ |
| | | /*.drag-preview {*/ |
| | | /* pointer-events: none;*/ |
| | | /* z-index: 10000;*/ |
| | | /* position: fixed;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Single item drag preview *!*/ |
| | | /*.drag-preview:not(.multi-item) {*/ |
| | | /* opacity: 0.9;*/ |
| | | /* transform: scale(1.05);*/ |
| | | /* border-radius: 4px;*/ |
| | | /* box-shadow: 0 8px 24px rgba(0,0,0,0.3);*/ |
| | | /* border: 2px solid var(--action-0);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Multi-item drag preview container *!*/ |
| | | /*.drag-preview.multi-item {*/ |
| | | /* width: 120px;*/ |
| | | /* height: 120px;*/ |
| | | /* opacity: 0.95;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Items being dragged - reduce opacity on originals *!*/ |
| | | /*.upload.item.dragging {*/ |
| | | /* opacity: 0.5;*/ |
| | | /* transform: scale(0.95);*/ |
| | | /* filter: grayscale(50%);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Count badge on multi-item preview *!*/ |
| | | /*.selection-count-badge {*/ |
| | | /* position: absolute;*/ |
| | | /* top: -8px;*/ |
| | | /* right: -8px;*/ |
| | | /* background: var(--action-0);*/ |
| | | /* color: white;*/ |
| | | /* border-radius: 50%;*/ |
| | | /* width: 28px;*/ |
| | | /* height: 28px;*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: center;*/ |
| | | /* font-size: 13px;*/ |
| | | /* font-weight: bold;*/ |
| | | /* box-shadow: 0 3px 12px rgba(0,0,0,0.4);*/ |
| | | /* z-index: 20;*/ |
| | | /* border: 2px solid white;*/ |
| | | /*}*/ |
| | | |
| | | /*!* ============================================================================*/ |
| | | /* FIX #3: Progress bar visibility and styling*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*!* Ensure progress bar is visible when needed *!*/ |
| | | /*.field.upload .progress {*/ |
| | | /* display: flex;*/ |
| | | /* flex-direction: column;*/ |
| | | /* gap: 0.5rem;*/ |
| | | /* padding: 1rem;*/ |
| | | /* background: rgba(var(--action-rgb), 0.05);*/ |
| | | /* border: 1px solid rgba(var(--action-rgb), 0.2);*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* margin: 1rem 0;*/ |
| | | /* animation: slideDown var(--transition-base);*/ |
| | | /*}*/ |
| | | |
| | | /*.field.upload .progress[hidden] {*/ |
| | | /* display: none !important;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Progress bar track *!*/ |
| | | /*.progress .bar {*/ |
| | | /* width: 100%;*/ |
| | | /* height: 8px;*/ |
| | | /* background: rgba(var(--action-rgb), 0.15);*/ |
| | | /* border-radius: 4px;*/ |
| | | /* overflow: hidden;*/ |
| | | /* position: relative;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Progress bar fill *!*/ |
| | | /*.progress .fill {*/ |
| | | /* height: 100%;*/ |
| | | /* background: linear-gradient(90deg,*/ |
| | | /* var(--action-0) 0%,*/ |
| | | /* var(--action-200) 100%);*/ |
| | | /* border-radius: 4px;*/ |
| | | /* transition: width 0.3s ease;*/ |
| | | /* box-shadow: 0 0 8px rgba(var(--action-rgb), 0.4);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Progress details - styled for row layout with text and count *!*/ |
| | | /*.progress > .details {*/ |
| | | /* font-size: var(--small);*/ |
| | | /* color: var(--contrast);*/ |
| | | /* display: flex;*/ |
| | | /* justify-content: space-between;*/ |
| | | /* align-items: center;*/ |
| | | /* gap: 1rem;*/ |
| | | /*}*/ |
| | | |
| | | /*.progress > .details .text {*/ |
| | | /* font-weight: 500;*/ |
| | | /* flex: 1;*/ |
| | | /*}*/ |
| | | |
| | | /*.progress > .details .count {*/ |
| | | /* font-weight: 600;*/ |
| | | /* color: var(--contrast-70);*/ |
| | | /* white-space: nowrap;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Individual item progress - overlay style *!*/ |
| | | /*.upload.item .progress {*/ |
| | | /* position: absolute;*/ |
| | | /* top: 0;*/ |
| | | /* left: 0;*/ |
| | | /* right: 0;*/ |
| | | /* bottom: 0;*/ |
| | | /* background: rgba(0, 0, 0, 0.75);*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: center;*/ |
| | | /* flex-direction: column;*/ |
| | | /* gap: 0.5rem;*/ |
| | | /* z-index: var(--z-2);*/ |
| | | /* color: white;*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* backdrop-filter: blur(2px);*/ |
| | | /*}*/ |
| | | |
| | | /*.upload.item .progress .bar {*/ |
| | | /* width: 80%;*/ |
| | | /* max-width: 200px;*/ |
| | | /*}*/ |
| | | |
| | | /*.upload.item .progress .fill {*/ |
| | | /* background: linear-gradient(90deg, white 0%, rgba(255,255,255,0.8) 100%);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Item progress icon and status text *!*/ |
| | | /*.upload.item .progress span.icon {*/ |
| | | /* font-size: 2rem;*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: center;*/ |
| | | /*}*/ |
| | | |
| | | /*.upload.item .progress span.details {*/ |
| | | /* color: white;*/ |
| | | /* font-size: var(--small);*/ |
| | | /* font-weight: 500;*/ |
| | | /*}*/ |
| | | |
| | | /*!* ============================================================================*/ |
| | | /* FIX #4: Ensure file upload container hides when items exist*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*!* Hide uploader when we have uploads *!*/ |
| | | /*.field.upload:has(.upload.item) .file-upload-container,*/ |
| | | /*.field.upload[data-has-uploads="true"] .file-upload-container {*/ |
| | | /* display: none !important;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Show group display when we have uploads *!*/ |
| | | /*.field.upload:has(.upload.item) .group-display {*/ |
| | | /* display: flex !important;*/ |
| | | /*}*/ |
| | | |
| | | /*!* ============================================================================*/ |
| | | /* FIX #5: Improve selection visual feedback*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*!* Selected items - more obvious *!*/ |
| | | /*.upload.item:has(.upload-select:checked) {*/ |
| | | /* outline: 3px solid var(--action-0);*/ |
| | | /* outline-offset: -3px;*/ |
| | | /* box-shadow: 0 0 0 3px rgba(var(--action-rgb), 0.2);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Selection checkbox - always visible on hover or when checked *!*/ |
| | | /*.upload.item .upload-select + label::before {*/ |
| | | /* opacity: 0.7;*/ |
| | | /* transition: all var(--transition-base);*/ |
| | | /*}*/ |
| | | |
| | | /*.upload.item:hover .upload-select + label::before,*/ |
| | | /*.upload.item .upload-select:checked + label::before {*/ |
| | | /* opacity: 1;*/ |
| | | /* background: rgba(255, 255, 255, 0.9);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Selection controls - more prominent *!*/ |
| | | /*.selection-actions {*/ |
| | | /* display: flex;*/ |
| | | /* gap: 1rem;*/ |
| | | /* padding: 1rem;*/ |
| | | /* background: rgba(var(--action-rgb), 0.1);*/ |
| | | /* border: 2px solid rgba(var(--action-rgb), 0.3);*/ |
| | | /* border-radius: var(--radius);*/ |
| | | /* margin: 1rem 0;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: space-between;*/ |
| | | /*}*/ |
| | | |
| | | /*.selection-info {*/ |
| | | /* font-weight: 600;*/ |
| | | /* color: var(--action-0);*/ |
| | | /*}*/ |
| | | |
| | | /*.selection-count {*/ |
| | | /* font-size: var(--large);*/ |
| | | /* color: var(--action-0);*/ |
| | | /*}*/ |
| | | |
| | | /*!* ============================================================================*/ |
| | | /* FIX #6: Animations*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*@keyframes slideDown {*/ |
| | | /* from {*/ |
| | | /* opacity: 0;*/ |
| | | /* transform: translateY(-10px);*/ |
| | | /* }*/ |
| | | /* to {*/ |
| | | /* opacity: 1;*/ |
| | | /* transform: translateY(0);*/ |
| | | /* }*/ |
| | | /*}*/ |
| | | |
| | | /*@keyframes fadeOut {*/ |
| | | /* from {*/ |
| | | /* opacity: 1;*/ |
| | | /* }*/ |
| | | /* to {*/ |
| | | /* opacity: 0;*/ |
| | | /* }*/ |
| | | /*}*/ |
| | | |
| | | /*!* Smooth dragover animation *!*/ |
| | | /*@keyframes drop-pulse {*/ |
| | | /* 0%, 100% {*/ |
| | | /* background-color: rgba(var(--action-rgb), 0.15);*/ |
| | | /* transform: scale(1.02);*/ |
| | | /* }*/ |
| | | /* 50% {*/ |
| | | /* background-color: rgba(var(--action-rgb), 0.25);*/ |
| | | /* transform: scale(1.04);*/ |
| | | /* }*/ |
| | | /*}*/ |
| | | |
| | | /*!* ============================================================================*/ |
| | | /* FIX #7: Touch-friendly improvements*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*@media (hover: none) and (pointer: coarse) {*/ |
| | | /* !* Larger touch targets on mobile *!*/ |
| | | /* .group-actions button {*/ |
| | | /* padding: 0.75rem 1rem;*/ |
| | | /* font-size: var(--base);*/ |
| | | /* }*/ |
| | | |
| | | /* !* More obvious empty group on touch devices *!*/ |
| | | /* .empty-group {*/ |
| | | /* padding: 4rem 2rem;*/ |
| | | /* min-height: 200px;*/ |
| | | /* }*/ |
| | | |
| | | /* !* Selection checkbox always visible on touch *!*/ |
| | | /* .upload.item .upload-select + label::before {*/ |
| | | /* opacity: 1;*/ |
| | | /* }*/ |
| | | /*}*/ |
| | | /*!* ============================================================================*/ |
| | | /* RESTORATION NOTIFICATION STYLES*/ |
| | | /* Add these to forms.css or dash.css*/ |
| | | /* ============================================================================ *!*/ |
| | | |
| | | /*!* Notification container - fixed overlay *!*/ |
| | | /*.restore-notification {*/ |
| | | /* position: fixed;*/ |
| | | /* top: 0;*/ |
| | | /* left: 0;*/ |
| | | /* right: 0;*/ |
| | | /* bottom: 0;*/ |
| | | /* background: rgba(0, 0, 0, 0.7);*/ |
| | | /* backdrop-filter: blur(4px);*/ |
| | | /* z-index: 10000;*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: center;*/ |
| | | /* padding: 2rem;*/ |
| | | /* animation: fadeIn 0.3s ease;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Content card *!*/ |
| | | /*.restore-content {*/ |
| | | /* background: var(--base);*/ |
| | | /* border-radius: var(--radius);*/ |
| | | /* box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);*/ |
| | | /* max-width: 800px;*/ |
| | | /* max-height: 90vh;*/ |
| | | /* width: 100%;*/ |
| | | /* display: flex;*/ |
| | | /* flex-direction: column;*/ |
| | | /* overflow: hidden;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Message section *!*/ |
| | | /*.restore-message {*/ |
| | | /* padding: 2rem;*/ |
| | | /* border-bottom: 1px solid var(--border);*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-message h4 {*/ |
| | | /* margin: 0 0 0.5rem 0;*/ |
| | | /* color: var(--action-0);*/ |
| | | /* font-size: var(--large);*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-message .restore-details {*/ |
| | | /* margin: 0.5rem 0;*/ |
| | | /* font-weight: 600;*/ |
| | | /* color: var(--contrast);*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-message .hint {*/ |
| | | /* margin: 0.5rem 0 0 0;*/ |
| | | /* font-size: var(--small);*/ |
| | | /* color: var(--contrast-70);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Scrollable field list *!*/ |
| | | /*.restore-notification .restore-field {*/ |
| | | /* padding: 1rem 2rem;*/ |
| | | /* border-bottom: 1px solid var(--border);*/ |
| | | /* max-height: 400px;*/ |
| | | /* overflow-y: auto;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-notification .restore-field:last-of-type {*/ |
| | | /* border-bottom: none;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-notification .restore-field h3 {*/ |
| | | /* margin: 0 0 1rem 0;*/ |
| | | /* font-size: var(--base);*/ |
| | | /* color: var(--contrast);*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* gap: 0.5rem;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Item grid for restore preview *!*/ |
| | | /*.item-grid.restore {*/ |
| | | /* display: grid;*/ |
| | | /* grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));*/ |
| | | /* gap: 1rem;*/ |
| | | /* padding: 0;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Restore item *!*/ |
| | | /*.restore-item {*/ |
| | | /* display: flex;*/ |
| | | /* flex-direction: column;*/ |
| | | /* border: 2px solid var(--border);*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* overflow: hidden;*/ |
| | | /* cursor: pointer;*/ |
| | | /* transition: all var(--transition-base);*/ |
| | | /* position: relative;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-item:hover {*/ |
| | | /* border-color: var(--action-0);*/ |
| | | /* box-shadow: 0 2px 8px rgba(var(--action-rgb), 0.2);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Checked state *!*/ |
| | | /*.restore-item:has(.restore-checkbox:checked) {*/ |
| | | /* border-color: var(--action-0);*/ |
| | | /* background: rgba(var(--action-rgb), 0.05);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Preview section *!*/ |
| | | /*.restore-item .preview {*/ |
| | | /* position: relative;*/ |
| | | /* aspect-ratio: 1;*/ |
| | | /* background: var(--subtle);*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: center;*/ |
| | | /* overflow: hidden;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-item .preview img {*/ |
| | | /* width: 100%;*/ |
| | | /* height: 100%;*/ |
| | | /* object-fit: cover;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-item .preview .image-placeholder {*/ |
| | | /* color: var(--contrast-50);*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* justify-content: center;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Item info *!*/ |
| | | /*.restore-item-info {*/ |
| | | /* padding: 0.75rem;*/ |
| | | /* flex: 1;*/ |
| | | /* display: flex;*/ |
| | | /* flex-direction: column;*/ |
| | | /* gap: 0.25rem;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-item-info .name {*/ |
| | | /* font-size: var(--small);*/ |
| | | /* font-weight: 600;*/ |
| | | /* color: var(--contrast);*/ |
| | | /* overflow: hidden;*/ |
| | | /* text-overflow: ellipsis;*/ |
| | | /* white-space: nowrap;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-item-info .restore-item-meta {*/ |
| | | /* font-size: var(--tiny);*/ |
| | | /* color: var(--contrast-70);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Checkbox controls *!*/ |
| | | /*.restore-item-controls {*/ |
| | | /* position: absolute;*/ |
| | | /* top: 0.5rem;*/ |
| | | /* right: 0.5rem;*/ |
| | | /* z-index: 2;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-checkbox {*/ |
| | | /* width: 24px;*/ |
| | | /* height: 24px;*/ |
| | | /* cursor: pointer;*/ |
| | | /* accent-color: var(--action-0);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Actions section *!*/ |
| | | /*.restore-actions {*/ |
| | | /* padding: 1.5rem 2rem;*/ |
| | | /* background: var(--subtle);*/ |
| | | /* display: flex;*/ |
| | | /* flex-direction: column;*/ |
| | | /* gap: 1rem;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Selection controls *!*/ |
| | | /*.selection-controls {*/ |
| | | /* display: flex;*/ |
| | | /* gap: 0.5rem;*/ |
| | | /* justify-content: flex-start;*/ |
| | | /*}*/ |
| | | |
| | | /*.selection-controls button {*/ |
| | | /* padding: 0.5rem 1rem;*/ |
| | | /* font-size: var(--small);*/ |
| | | /* border: 1px solid var(--border);*/ |
| | | /* background: var(--base);*/ |
| | | /* color: var(--contrast);*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* cursor: pointer;*/ |
| | | /* transition: all var(--transition-base);*/ |
| | | /*}*/ |
| | | |
| | | /*.selection-controls button:hover {*/ |
| | | /* background: var(--action-0);*/ |
| | | /* color: white;*/ |
| | | /* border-color: var(--action-0);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Action buttons *!*/ |
| | | /*.action-buttons {*/ |
| | | /* display: flex;*/ |
| | | /* gap: 0.75rem;*/ |
| | | /* justify-content: flex-end;*/ |
| | | /* flex-wrap: wrap;*/ |
| | | /*}*/ |
| | | |
| | | /*.action-buttons button {*/ |
| | | /* padding: 0.75rem 1.5rem;*/ |
| | | /* font-size: var(--base);*/ |
| | | /* font-weight: 600;*/ |
| | | /* border: none;*/ |
| | | /* border-radius: var(--innerRadius);*/ |
| | | /* cursor: pointer;*/ |
| | | /* transition: all var(--transition-base);*/ |
| | | /* display: flex;*/ |
| | | /* align-items: center;*/ |
| | | /* gap: 0.5rem;*/ |
| | | /*}*/ |
| | | |
| | | /*!* Restore button - primary action *!*/ |
| | | /*.restore-selected {*/ |
| | | /* background: var(--action-0);*/ |
| | | /* color: white;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-selected:hover {*/ |
| | | /* background: var(--action-200);*/ |
| | | /* transform: translateY(-1px);*/ |
| | | /* box-shadow: 0 4px 12px rgba(var(--action-rgb), 0.3);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Scrap cache button - destructive action *!*/ |
| | | /*.restart-uploads {*/ |
| | | /* background: var(--danger);*/ |
| | | /* color: white;*/ |
| | | /*}*/ |
| | | |
| | | /*.restart-uploads:hover {*/ |
| | | /* background: var(--danger-dark);*/ |
| | | /* transform: translateY(-1px);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Dismiss button - secondary action *!*/ |
| | | /*.dismiss-cache-check {*/ |
| | | /* background: transparent;*/ |
| | | /* color: var(--contrast);*/ |
| | | /* border: 1px solid var(--border);*/ |
| | | /*}*/ |
| | | |
| | | /*.dismiss-cache-check:hover {*/ |
| | | /* background: var(--subtle);*/ |
| | | /*}*/ |
| | | |
| | | /*!* Mobile responsive *!*/ |
| | | /*@media (max-width: 768px) {*/ |
| | | /* .restore-notification {*/ |
| | | /* padding: 1rem;*/ |
| | | /* }*/ |
| | | |
| | | /* .restore-content {*/ |
| | | /* max-height: 95vh;*/ |
| | | /* }*/ |
| | | |
| | | /* .restore-message {*/ |
| | | /* padding: 1.5rem;*/ |
| | | /* }*/ |
| | | |
| | | /* .restore-notification .restore-field {*/ |
| | | /* padding: 1rem;*/ |
| | | /* }*/ |
| | | |
| | | /* .item-grid.restore {*/ |
| | | /* grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));*/ |
| | | /* gap: 0.75rem;*/ |
| | | /* }*/ |
| | | |
| | | /* .action-buttons {*/ |
| | | /* flex-direction: column;*/ |
| | | /* }*/ |
| | | |
| | | /* .action-buttons button {*/ |
| | | /* width: 100%;*/ |
| | | /* justify-content: center;*/ |
| | | /* }*/ |
| | | /*}*/ |
| | | |
| | | /*!* Animation *!*/ |
| | | /*@keyframes fadeIn {*/ |
| | | /* from {*/ |
| | | /* opacity: 0;*/ |
| | | /* }*/ |
| | | /* to {*/ |
| | | /* opacity: 1;*/ |
| | | /* }*/ |
| | | /*}*/ |
| | | |
| | | /*!* Scrollbar styling for restore field list *!*/ |
| | | /*.restore-notification .restore-field::-webkit-scrollbar {*/ |
| | | /* width: 8px;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-notification .restore-field::-webkit-scrollbar-track {*/ |
| | | /* background: var(--subtle);*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-notification .restore-field::-webkit-scrollbar-thumb {*/ |
| | | /* background: var(--border);*/ |
| | | /* border-radius: 4px;*/ |
| | | /*}*/ |
| | | |
| | | /*.restore-notification .restore-field::-webkit-scrollbar-thumb:hover {*/ |
| | | /* background: var(--contrast-50);*/ |
| | | /*}*/ |
| | | |
| | | |
| | | .repeater .field-input-wrapper { |
| | | flex-direction: column; |
| | | } |
| | | .repeater .repeater-items { |
| | | width: 100%; |
| | | |
| | | /*************************** |
| | | FORMS |
| | | */ |
| | | /* Stepped Form Container */ |
| | | form { |
| | | --step-size: 2.5rem; |
| | | } |
| | | |
| | | .remove-row, |
| | | .add-repeater-row { |
| | | margin-left: auto; |
| | | min-height: 0; |
| | | height: var(--chipchip); |
| | | background-color: rgb(var(--action-0)); |
| | | } |
| | | /****************************************************** |
| | | TAGLIST TAG LIST |
| | | ******************************************************/ |
| | | .field.tag-list .row { |
| | | margin-bottom: 1rem; |
| | | } |
| | | |
| | | .field.tag-list .row .field { |
| | | flex: 1; |
| | | min-width: 150px; |
| | | margin: 0; |
| | | } |
| | | |
| | | .field.tag-list .tag .add-tag-item { |
| | | flex-shrink: 0; |
| | | white-space: nowrap; |
| | | margin-top: calc(var(--txt-medium) + 1rem); |
| | | } |
| | | |
| | | .field.tag-list .tag-items { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 0.5rem; |
| | | margin-bottom: 1rem; |
| | | min-height: 2rem; |
| | | } |
| | | |
| | | .field.tag-list .tag-item { |
| | | background: rgb(var(--base-200)); |
| | | padding: 0.4rem 0.75rem; |
| | | border-radius: 4px; |
| | | display: inline-flex; |
| | | align-items: center; |
| | | gap: 0.5rem; |
| | | font-size: 0.9rem; |
| | | line-height: 1.2; |
| | | } |
| | | |
| | | .field.tag-list .tag-item:hover { |
| | | background: rgb(var(--base-100)); |
| | | } |
| | | |
| | | .field.tag-list .tag-label { |
| | | max-width: 300px; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .field.tag-list .remove-tag { |
| | | min-height: 0; |
| | | padding: .25rem; |
| | | color: rgb(var(--contrast)); |
| | | transition: transform 0.2s; |
| | | box-shadow: none; |
| | | } |
| | | |
| | | .field.tag-list .remove-tag:hover { |
| | | transform: scale(1.2); |
| | | } |
| | | |
| | | @media (max-width: 768px) { |
| | | .field.tag-list .tag { |
| | | flex-direction: column; |
| | | align-items: stretch; |
| | | } |
| | | |
| | | .field.tag-list .tag .field { |
| | | min-width: 100%; |
| | | } |
| | | } |
| | | /* Progress Bar Styling */ |
| | | .form-progress { |
| | | padding: 0 1rem; |
| | | } |
| | | |
| | | .form-progress .progress { |
| | | background: var(--base-100); |
| | | border-radius: var(--innerRadius); |
| | | background: rgb(var(--base-100)); |
| | | border-radius: var(--radius); |
| | | padding: 1rem; |
| | | } |
| | | |
| | | .form-progress .bar { |
| | | height: 6px; |
| | | background: var(--base-200); |
| | | background: rgb(var(--base-200)); |
| | | border-radius: 3px; |
| | | overflow: hidden; |
| | | margin-bottom: 0.5rem; |
| | |
| | | |
| | | .form-progress .fill { |
| | | height: 100%; |
| | | background: linear-gradient(90deg, var(--action-0), var(--action-200)); |
| | | background: linear-gradient(90deg, rgb(var(--action-0)), rgb(var(--action-200))); |
| | | width: 0%; |
| | | transition: width 0.4s ease; |
| | | border-radius: 3px; |
| | | } |
| | | |
| | | .form-progress .step-text { |
| | | font-size: var(--small); |
| | | font-size: var(--txt-small); |
| | | font-weight: 600; |
| | | color: var(--contrast-200); |
| | | color: rgb(var(--contrast-200)); |
| | | } |
| | | |
| | | /* Stepped Tabs Styling */ |
| | |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0; |
| | | background: var(--base-200); |
| | | color: var(--contrast-50); |
| | | background: rgb(var(--base-200)); |
| | | color: rgb(var(--contrast-50)); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-weight: 700; |
| | | font-size: var(--small); |
| | | border: 3px solid var(--base); |
| | | font-size: var(--txt-small); |
| | | border: 3px solid rgb(var(--base)); |
| | | } |
| | | |
| | | /* Pending Step */ |
| | | form nav.tabs button.pending .step-number { |
| | | background: var(--base-100); |
| | | color: var(--contrast-200); |
| | | background: rgb(var(--base-100)); |
| | | color: rgb(var(--contrast-200)); |
| | | } |
| | | |
| | | /* Current Step */ |
| | | form nav.tabs button.current .step-number, |
| | | form nav.tabs button.active .step-number { |
| | | background: var(--action-0); |
| | | color: var(--action-contrast); |
| | | border-color: var(--action-200); |
| | | background: rgb(var(--action-0)); |
| | | color: rgb(var(--action-contrast)); |
| | | border-color: rgb(var(--action-200)); |
| | | } |
| | | |
| | | /* Completed Step */ |
| | |
| | | } |
| | | |
| | | form nav.tabs button.completed h2 { |
| | | color: var(--contrast-200); |
| | | color: rgb(var(--contrast-200)); |
| | | } |
| | | |
| | | /* Step Navigation Buttons */ |
| | | .step-navigation { |
| | | margin-top: 2rem; |
| | | padding-top: 2rem; |
| | | border-top: 1px solid var(--base-200); |
| | | border-top: 1px solid rgb(var(--base-200)); |
| | | gap: 1rem; |
| | | } |
| | | |
| | | .step-navigation .prev-step { |
| | | background: var(--base-100); |
| | | background: rgb(var(--base-100)); |
| | | } |
| | | |
| | | .step-navigation .next-step, |
| | | .step-navigation button[type="submit"] { |
| | | margin-left: auto; |
| | | } |
| | | @media (max-width: 768px) { |
| | | form nav.tabs button { |
| | | min-width: 80px; |
| | | font-size: var(--txt-small); |
| | | } |
| | | |
| | | /* Error state for required fields */ |
| | | form nav.tabs button h2 { |
| | | font-size: var(--txt-small); |
| | | } |
| | | |
| | | form { |
| | | --step-size: 2rem; |
| | | } |
| | | } |
| | | /************************************************ |
| | | FEEDBACK ERROR SUCCESS STATE |
| | | ************************************************/ |
| | | .field input.error, |
| | | .field textarea.error, |
| | | .field select.error { |
| | |
| | | |
| | | .error-message { |
| | | color: var(--errorText); |
| | | font-size: var(--small); |
| | | font-size: var(--txt-small); |
| | | margin-top: 0.25rem; |
| | | display: block; |
| | | } |
| | | |
| | | /* Mobile responsiveness */ |
| | | @media (max-width: 768px) { |
| | | form nav.tabs button { |
| | | min-width: 80px; |
| | | font-size: var(--small); |
| | | } |
| | | |
| | | form nav.tabs button h2 { |
| | | font-size: var(--small); |
| | | } |
| | | |
| | | form { |
| | | --step-size: 2rem; |
| | | } |
| | | } |
| | | |
| | | /**** VALIDATION ******/ |
| | | /* Field Input Wrapper - for positioning icon */ |
| | | .field-input-wrapper { |
| | | position: relative; |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 0.5rem; |
| | | } |
| | | |
| | | .field-input-wrapper input, |
| | | .field-input-wrapper textarea, |
| | | .field-input-wrapper select { |
| | | flex: 1; |
| | | } |
| | | |
| | | /* Validation Icon */ |
| | | .validation-icon { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: 1.25rem; |
| | | animation: scaleIn 0.3s ease; |
| | | --w: 1.25rem; |
| | | } |
| | | .validation-icon.error { |
| | | color: var(--error); |
| | | } |
| | | .validation-icon.success { |
| | | color: var(--success); |
| | | } |
| | | |
| | | |
| | | @keyframes scaleIn { |
| | | from { |
| | | transform: scale(0); |
| | | opacity: 0; |
| | | } |
| | | to { |
| | | transform: scale(1); |
| | | opacity: 1; |
| | | } |
| | | } |
| | | |
| | | /* Validation Message */ |
| | | .validation-message { |
| | | color: var(--error-0); |
| | | font-size: var(--small); |
| | | margin-top: 0.25rem; |
| | | display: block; |
| | | animation: slideDown 0.2s ease; |
| | | } |
| | | |
| | | @keyframes slideDown { |
| | | from { |
| | | opacity: 0; |
| | | transform: translateY(-4px); |
| | | } |
| | | to { |
| | | opacity: 1; |
| | | transform: translateY(0); |
| | | } |
| | | } |
| | | |
| | | /* Error State */ |
| | | .field.has-error input, |
| | | .field.has-error textarea, |
| | | .field.has-error select { |
| | | border-color: var(--error); |
| | | background-color: var(--errorBack) |
| | | } |
| | | |
| | | .field.has-error input:focus, |
| | | .field.has-error textarea:focus, |
| | | .field.has-error select:focus { |
| | | outline-color: var(--error); |
| | | box-shadow: 0 0 0 3px rgba(var(--error-rgb), 0.2); |
| | | } |
| | | |
| | | /* Success State */ |
| | | .field.has-success input, |
| | | .field.has-success textarea, |
| | | .field.has-success select { |
| | | border-color: var(--success); |
| | | } |
| | | |
| | | /* Required Asterisk */ |
| | | .field label .required { |
| | | color: var(--error); |
| | | margin-left: 0.25rem; |
| | | } |
| | | |
| | | /************************************************************* |
| | | Form Summary |
| | | ************************************************************/ |
| | |
| | | padding: 2rem; |
| | | border-radius: 8px; |
| | | margin-top: 2rem; |
| | | border: 2px dashed var(--contrast-200); |
| | | border: 2px dashed rgb(var(--contrast-200)); |
| | | } |
| | | |
| | | .form-summary .message { |
| | |
| | | content: ''; |
| | | width: 67%; |
| | | height: 1px; |
| | | border-bottom: 1px solid var(--base-200); |
| | | border-bottom: 1px solid rgb(var(--base-200)); |
| | | } |
| | | |
| | | .form-summary h2 { |
| | |
| | | } |
| | | |
| | | .form-summary h4 { |
| | | background-color: var(--base-100); |
| | | background-color: rgb(var(--base-100)); |
| | | padding: .5rem 2rem; |
| | | position: relative; |
| | | left: -2rem; |
| | | color: var(--contrast-200); |
| | | color: rgb(var(--contrast-200)); |
| | | font-size: 0.875rem; |
| | | text-transform: uppercase; |
| | | letter-spacing: 0.05em; |
| | |
| | | |
| | | .repeater-summary, |
| | | .group-summary { |
| | | background: var(--base-100); |
| | | background: rgb(var(--base-100)); |
| | | padding: 1rem; |
| | | border-radius: 4px; |
| | | margin-top: 0.5rem; |
| | |
| | | .repeater-row:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | |
| | | .selected-item { |
| | | border: 1px solid rgb(var(--base-200)); |
| | | border-radius: var(--radius); |
| | | font-size: var(--txt-x-small); |
| | | background-color: rgb(var(--base)); |
| | | padding: .25rem .5rem; |
| | | } |
| | | .selected-item button { |
| | | --w: .5em; |
| | | min-height: 1em; |
| | | width: 1em; |
| | | padding: 0; |
| | | } |
| | | |
| | | .selector .selected-items, |
| | | .selector .auto-wrapper { |
| | | flex: 1; |
| | | width: 100%; |
| | | } |
| | | |
| | | /** STATUS **/ |
| | | .fstatus { |
| | | z-index: var(--z-5); |
| | | background-color: rgba(var(--base), var(--op-6)); |
| | | border-radius: var(--radius); |
| | | padding: 0 .5rem; |
| | | position: fixed; |
| | | right: .5rem; |
| | | top: var(--btnbtn); |
| | | --w: 1em; |
| | | box-shadow: rgba(var(--base),var(--op-6)) var(--shdw); |
| | | --wrap: nowrap; |
| | | --gap: 1rem; |
| | | } |
| | | .fstatus .spinner { |
| | | display: none; |
| | | } |
| | | .fstatus.loading .spinner { |
| | | display: inline-block; |
| | | } |
| | | .fstatus p { |
| | | margin: 0; |
| | | padding: .25rem; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** RESTORE UPLOADS **/ |
| | | .restore-uploads .item-grid.group .field.group, |
| | | .restore-uploads .upload-group .selection-actions { |
| | | display: none; |
| | | } |
| | | .upload-group .item-grid.group { |
| | | grid-template-columns: repeat(2, 1fr); |
| | | } |
| | | .restore-uploads .item-grid.group { |
| | | grid-template-columns: repeat(3, 1fr); |
| | | } |
| | | |
| | | |
| | | fieldset { |
| | | width: 100%; |
| | | border-color: rgb(var(--base-200)); |
| | | } |
| | | |
| | | /** RESTORE FORM **/ |
| | | .restore-form.restore-form[hidden] { |
| | | display: block!important; |
| | | position: fixed; |
| | | bottom: var(--offScreen); |
| | | right: var(--btnbtn); |
| | | transition: bottom var(--trans-base); |
| | | transition-duration: 2s; |
| | | } |
| | | .restore-form.restore-form:not([hidden]) { |
| | | width: 50vw; |
| | | padding: 1rem; |
| | | z-index: var(--z-7); |
| | | background-color: rgba(var(--base), var(--op-6)); |
| | | border-radius: var(--radius); |
| | | box-shadow: rgba(var(--action-0), var(--op-6)) var(--shdw); |
| | | position: fixed; |
| | | right: var(--btnbtn); |
| | | bottom: 0; |
| | | transition: bottom var(--trans-base); |
| | | } |
| | | .restore-form h3 { |
| | | font-size: var(--txt-medium); |
| | | } |
| | | body:has(nav.fixed.bottom) .restore-form.restore-form:not([hidden]) { |
| | | bottom: var(--btn); |
| | | } |
| | | |
| | | .restore-form .actions { |
| | | display: flex; |
| | | width: 100%; |
| | | } |
| | | .restore-form .actions button { |
| | | min-height: var(--chip); |
| | | font-size: var(--txt-x-small); |
| | | width: 100%; |
| | | } |