| | |
| | | .field { |
| | | width: 100%; |
| | | margin: .5em 0; |
| | | padding: .5em 0; |
| | | } |
| | | .field + .field { |
| | | border-top: 1px solid 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: var(--error); |
| | | } |
| | | .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: rgba(var(--error-rgb), .2); |
| | | } |
| | | .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: 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 var(--contrast-200); |
| | | border-radius: 4px; |
| | | font-size: 14px; |
| | | min-width: 180px; |
| | | background: var(--base); |
| | | color: 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: 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: 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: var(--action-0); |
| | | } |
| | | |
| | | .quantity label { |
| | | margin: 0; |
| | | font-size: var(--txt-small); |
| | | } |
| | | |
| | | .quantity button { |
| | | background: var(--base); |
| | | padding: 0; |
| | | width: var(--chip_); |
| | | height: var(--chip_); |
| | | min-height: 0; |
| | | z-index: 0; |
| | | position: relative; |
| | | border: 1px solid var(--base-200); |
| | | color: var(--contrast-200); |
| | | } |
| | | |
| | | .quantity button:hover:not(:disabled) { |
| | | color: var(--action-0); |
| | | border-color: var(--action-0); |
| | | background-color: var(--base); |
| | | } |
| | | |
| | | .quantity button:active:not(:disabled) { |
| | | background-color: var(--action-0); |
| | | color: var(--light-0); |
| | | transform: scale(.95); |
| | | } |
| | | |
| | | .quantity button:disabled { |
| | | opacity: .5; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .quantity input[type=number] { |
| | | z-index: 1; |
| | | border: 1px solid var(--base-200); |
| | | background: 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: 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 { |
| | | 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-radius: 4px; |
| | | padding: 2rem; |
| | | text-align: center; |
| | | transition: all .3s ease; |
| | | background: var(--action-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: var(--action-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: 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: 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; |
| | | .item-grid:is(.restore,.group,.preview) .item { |
| | | display: block; |
| | | --w: 1.1em; |
| | | } |
| | | .item-grid:is(.restore,.group,.preview) button { |
| | | padding: .25rem .5rem; |
| | | } |
| | | |
| | | .field.image:has(.upload-item) .file-upload-container { |
| | | display: none; |
| | | .item-grid:is(.restore,.group,.preview) .preview > input[type=checkbox]:not(.label-button) + label { |
| | | padding-left: 0; |
| | | margin: 0; |
| | | } |
| | | |
| | | .field.image { |
| | | position: relative; |
| | | } |
| | | .field.image:not(.uploading) .progress { |
| | | display: none; |
| | | } |
| | | .field.image .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:is(.restore,.group,.preview) summary { |
| | | padding: .5rem; |
| | | } |
| | | .item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked){ |
| | | padding: .5rem; |
| | | background-color: rgba(var(--action-0), var(--op-4)); |
| | | opacity: 1; |
| | | } |
| | | .item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) img { |
| | | filter: none; |
| | | } |
| | | .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; |
| | | } |
| | | |
| | | 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; |
| | | [type=radio].featured:checked + label .icon-star, |
| | | [type=radio].featured:not(:checked) + label .icon-star-fi { |
| | | display: none; |
| | | } |
| | | [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); |
| | | } |
| | | |
| | | .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 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 { |
| | | padding: 5px; |
| | | 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: 0; |
| | | left: var(--btn_); |
| | | z-index: var(--z-6); |
| | | 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); |
| | | } |
| | | .submit-uploads:hover { |
| | | background-color: var(--base-200); |
| | | color: var(--contrast-200); |
| | | } |
| | | |
| | | .empty-group { |
| | | order: -1; |
| | | grid-column: 1 / -1; |
| | | padding: 20px; |
| | | border-radius: var(--radius); |
| | | margin: 10px 0; |
| | | cursor: pointer; |
| | | transition: all var(--trans-base); |
| | | text-align: center; |
| | | background-color: rgba(var(--action-0), var(--op-1)); |
| | | } |
| | | |
| | | .group-display:not([hidden]) ~ .file-upload-container { |
| | | display: none; |
| | | } |
| | | |
| | | .upload.item.dragging, |
| | | .dragging { |
| | | opacity: .7; |
| | | transform: scale(.95) rotate(3deg); |
| | | z-index: var(--z-7); |
| | | box-shadow: 0 8px 25px rgba(var(--contrast), var(--op-2)); |
| | | } |
| | | |
| | | .dragover { |
| | | background: rgba(var(--action-0), var(--op-3))!important; |
| | | border-color: var(--action-0)!important; |
| | | transform: scale(1.05); |
| | | animation: drop-pulse .8s infinite ease-in-out; |
| | | } |
| | | .drag-preview { |
| | | position: fixed; |
| | | z-index: var(--z-9); |
| | | width: fit-content; |
| | | overflow: visible; |
| | | pointer-events: none; |
| | | opacity: .9; |
| | | transform: scale(1.05); |
| | | transition: transform .2s ease; |
| | | } |
| | | .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: 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); |
| | | z-index: 3; |
| | | } |
| | | |
| | | .drag-preview .drag-items .drag-item:nth-child(2) { |
| | | left: 8px; |
| | | top: -4px; |
| | | transform: rotate(4deg); |
| | | z-index: 2; |
| | | transition-delay: 0.03s; |
| | | } |
| | | |
| | | .drag-preview .drag-items .drag-item:nth-child(3) { |
| | | left: -6px; |
| | | top: -8px; |
| | | transform: rotate(-5deg); |
| | | z-index: 1; |
| | | transition-delay: 0.06s; |
| | | } |
| | | |
| | | .drag-preview .drag-items .drag-item:nth-child(4) { |
| | | left: 12px; |
| | | top: -12px; |
| | | transform: rotate(3deg); |
| | | z-index: 0; |
| | | transition-delay: 0.09s; |
| | | } |
| | | |
| | | /* Additional items follow the pattern */ |
| | | .drag-preview .drag-items .drag-item:nth-child(n+5) { |
| | | left: -10px; |
| | | top: -16px; |
| | | transform: rotate(-4deg); |
| | | z-index: 0; |
| | | opacity: 0.8; |
| | | } |
| | | |
| | | /* The actual image/video inside fills the wrapper */ |
| | | .drag-preview .drag-items img, |
| | | .drag-preview .drag-items video { |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: cover; |
| | | display: block; |
| | | } |
| | | |
| | | .drag-preview .drag-count { |
| | | position: absolute; |
| | | top: -8px; |
| | | right: -8px; |
| | | background: var(--base-200); |
| | | color: var(--contrast); |
| | | border-radius: 50%; |
| | | width: 24px; |
| | | height: 24px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: 12px; |
| | | font-weight: bold; |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | z-index: var(--z-3); |
| | | } |
| | | |
| | | /* Touch-specific offset positioning handled via transform in JS */ |
| | | .drag-preview[data-source="touch"] { |
| | | /* JS will apply appropriate offset transforms */ |
| | | } |
| | | |
| | | /* Items being dragged - reduce opacity on originals */ |
| | | .item.dragging { |
| | | opacity: 0.5; |
| | | transform: scale(0.95); |
| | | filter: grayscale(50%); |
| | | transition: opacity 0.2s ease, transform 0.2s ease, filter 0.2s ease; |
| | | } |
| | | |
| | | @keyframes drop-pulse { |
| | | 0%, 100% { |
| | | background-color: rgba(var(--action-0),var(--op-3)); |
| | | transform: scale(1.02); |
| | | } |
| | | 50% { |
| | | background-color: var(rgba(var(--action-0),var(--op-4))); |
| | | transform: scale(1.04); |
| | | } |
| | | } |
| | | |
| | | /****** |
| | | Upload grouping |
| | | ******/ |
| | | .selection-actions { |
| | | display: flex; |
| | | gap: .25rem; |
| | | } |
| | | @media (max-width: 767px) { |
| | | body:not(.uploading):has(.group-display:not([hidden])){ |
| | | overflow:hidden; |
| | | } |
| | | body:not(.uploading):has(.group-display:not([hidden])) .qtoggle { |
| | | z-index: var(--z-1); |
| | | } |
| | | |
| | | .group-display.group-display { |
| | | position: fixed; |
| | | top: var(--btn); |
| | | bottom: var(--btn); |
| | | left: 0; |
| | | right: 0; |
| | | max-height: var(--maxHeight); |
| | | overflow: hidden; |
| | | z-index: var(--z-6); |
| | | width: calc(100% - 1rem); |
| | | height: calc(100% - 1rem); |
| | | padding: 0 0 3rem; |
| | | --justify: flex-start; |
| | | --align: flex-start; |
| | | --gap: 0; |
| | | } |
| | | .group-display::before { |
| | | content: ''; |
| | | display: block; |
| | | z-index: -1; |
| | | top: -.5rem; |
| | | bottom: -.5rem; |
| | | left: -.5rem; |
| | | right: -.5rem; |
| | | position: absolute; |
| | | 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; |
| | | padding: .5rem; |
| | | } |
| | | .group-display .preview-wrap { |
| | | top: 0; |
| | | } |
| | | .group-display .preview-wrap .selected { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .group-display .sidebar { |
| | | bottom: 0; |
| | | flex-wrap: nowrap; |
| | | overflow: hidden auto; |
| | | background-color: var(--contrast-200); |
| | | color: var(--base); |
| | | } |
| | | .group-display .sidebar > .hint { |
| | | color: var(--contrast); |
| | | } |
| | | .group-display .sidebar .header { |
| | | display: none; |
| | | } |
| | | |
| | | .group-display .preview-actions { |
| | | top: 0; |
| | | flex-shrink:0; |
| | | } |
| | | .group-display .preview-wrap > .hint, |
| | | .group-display .sidebar > .hint { |
| | | bottom: 0; |
| | | margin: 0; |
| | | text-align: center; |
| | | } |
| | | .group-display .preview-wrap > .hint, |
| | | .group-display .sidebar > .hint, |
| | | .group-display .preview-actions { |
| | | position: absolute; |
| | | left: 0; |
| | | right: 0; |
| | | background-color: rgba(var(--base), var(--op-6)); |
| | | z-index: var(--z-3); |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | } |
| | | .group-display .item-grid { |
| | | height: 100%; |
| | | overflow: hidden auto; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | padding: 2rem 0; |
| | | } |
| | | .group-display .sidebar > .item-grid { |
| | | grid-template-columns: repeat(1, 1fr); |
| | | gap: 1rem; |
| | | padding: 0; |
| | | } |
| | | .group-display .sidebar .empty-group { |
| | | order: 0; |
| | | position: sticky; |
| | | height: fit-content; |
| | | top: 0; |
| | | z-index: var(--z-3); |
| | | background-color: rgba(var(--action-0), var(--op-6)); |
| | | } |
| | | .group-display .sidebar .upload-group { |
| | | order: 1; |
| | | } |
| | | .group-display .sidebar .empty-group p { |
| | | margin: 0; |
| | | } |
| | | |
| | | |
| | | .group-display .field label, |
| | | .group-display .field { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | .group-display .sidebar h4 { |
| | | margin: .25rem; |
| | | } |
| | | |
| | | .group-display .item { |
| | | width:100%; |
| | | height: max-content; |
| | | } |
| | | |
| | | .submit-uploads { |
| | | bottom: var(--btn); |
| | | left: 0; |
| | | right: 0; |
| | | width: 100%; |
| | | height: 3rem; |
| | | } |
| | | |
| | | body.uploading .group-display.group-display { |
| | | position: relative; |
| | | top: unset; |
| | | bottom: unset; |
| | | right: unset; |
| | | left: unset; |
| | | } |
| | | } |
| | | @media (min-width: 768px) { |
| | | .group-display.group-display { |
| | | --wrap: nowrap; |
| | | --dir: row; |
| | | --gap: 1rem; |
| | | --align: flex-start; |
| | | } |
| | | .group-display .preview-wrap, |
| | | .group-display .sidebar { |
| | | --justify: flex-start; |
| | | --wrap: nowrap; |
| | | max-height: calc(100vh - var(--btnbtn)); |
| | | overflow: hidden auto; |
| | | } |
| | | .group-display .preview-wrap, |
| | | .group-display .sidebar { |
| | | width: 50%; |
| | | } |
| | | |
| | | .preview-actions, |
| | | .preview-wrap .hint { |
| | | position: sticky; |
| | | z-index: var(--z-3); |
| | | box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); |
| | | background-color: var(--base); |
| | | width: 100%; |
| | | } |
| | | .preview-actions { |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | } |
| | | .preview-actions .field { |
| | | margin: 0; |
| | | } |
| | | .sidebar > .hint, |
| | | .preview-wrap .hint { |
| | | bottom: -1rem; |
| | | padding-bottom: 1rem; |
| | | margin: 0; |
| | | left: 0; |
| | | right: 0; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .item-grid.restore { |
| | | grid-template-columns: repeat(1, 1fr); |
| | | } |
| | | |
| | | |
| | | /************************************************************ |
| | | QUILL |
| | |
| | | flex-wrap: wrap; |
| | | padding: .25rem; |
| | | gap: .5rem 1rem; |
| | | border-top-left-radius: var(--innerRadius); |
| | | border-top-right-radius: var(--innerRadius); |
| | | border-top-left-radius: var(--radius); |
| | | border-top-right-radius: var(--radius); |
| | | border-bottom: 4px solid 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); |
| | | border-bottom-left-radius: var(--radius); |
| | | border-bottom-right-radius: var(--radius); |
| | | height: fit-content; |
| | | padding: 2px; |
| | | border: 1px solid var(--base-200); |
| | | } |
| | | .editor-container .ql-container .ql-editor { |
| | | padding: var(--padding); |
| | | width: calc(100% - (var(--padding) * 2.5)); |
| | | height: calc(100% - (var(--padding) * 2)); |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | .ql-editor img { |
| | | max-width: 50%; |
| | |
| | | transform: translateY(10px); |
| | | background-color: var(--base-100); |
| | | border: 1px solid var(--base); |
| | | box-shadow: 0px 0px 5px var(--overlay-heavy); |
| | | box-shadow: 0px 0px 5px rgba(var(--base),var(--op-6)); |
| | | color: var(--contrast); |
| | | padding: 5px 12px; |
| | | white-space: nowrap; |
| | |
| | | /****************************************************** |
| | | FIELDS |
| | | ******************************************************/ |
| | | [data-type=single] [for=select-item] { |
| | | display: none; |
| | | } |
| | | |
| | | [data-type=single] .item-grid { |
| | | display: flex; |
| | | } |
| | |
| | | } |
| | | .repeater-row details summary button { |
| | | margin-left: auto; |
| | | } |
| | | } |
| | | |
| | | .repeater .field-input-wrapper { |
| | | flex-direction: column; |
| | | } |
| | | .repeater .repeater-items { |
| | | width: 100%; |
| | | |
| | | } |
| | | |
| | | .remove-row, |
| | | .add-repeater-row { |
| | | margin-left: auto; |
| | | min-height: 0; |
| | | height: var(--chipchip); |
| | | background-color: 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: 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: 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: 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(--radius); |
| | | padding: 1rem; |
| | | } |
| | | |
| | | .form-progress .bar { |
| | | height: 6px; |
| | | background: 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)); |
| | | width: 0%; |
| | | transition: width 0.4s ease; |
| | | border-radius: 3px; |
| | | } |
| | | |
| | | .form-progress .step-text { |
| | | font-size: var(--txt-small); |
| | | font-weight: 600; |
| | | color: var(--contrast-200); |
| | | } |
| | | |
| | | /* Stepped Tabs Styling */ |
| | | form nav.tabs { |
| | | position: relative; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | padding: 1rem 0; |
| | | gap: 0; |
| | | z-index: 0; |
| | | } |
| | | |
| | | form nav.tabs button { |
| | | position: relative; |
| | | background: transparent; |
| | | border: none; |
| | | padding: 0.5rem 1rem .5rem 3rem; |
| | | z-index: 1; |
| | | } |
| | | |
| | | /* Step Number Circle */ |
| | | form nav.tabs .step-number { |
| | | width: 2.5rem; |
| | | height: 100%; |
| | | border-radius: 50% 0 0 50%; |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0; |
| | | background: var(--base-200); |
| | | color: var(--contrast-50); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-weight: 700; |
| | | font-size: var(--txt-small); |
| | | border: 3px solid var(--base); |
| | | } |
| | | |
| | | /* Pending Step */ |
| | | form nav.tabs button.pending .step-number { |
| | | background: var(--base-100); |
| | | color: 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); |
| | | } |
| | | |
| | | /* Completed Step */ |
| | | form nav.tabs button.completed .step-number { |
| | | background: var(--successBack); |
| | | color: var(--successBack); |
| | | border-color: var(--successText); |
| | | } |
| | | |
| | | form nav.tabs button.completed .step-number::before { |
| | | content: '✓'; |
| | | font-size: 1.2rem; |
| | | color: var(--successText); |
| | | position: absolute; |
| | | } |
| | | |
| | | form nav.tabs button.completed h2 { |
| | | color: var(--contrast-200); |
| | | } |
| | | |
| | | /* Step Navigation Buttons */ |
| | | .step-navigation { |
| | | margin-top: 2rem; |
| | | padding-top: 2rem; |
| | | border-top: 1px solid var(--base-200); |
| | | gap: 1rem; |
| | | } |
| | | |
| | | .step-navigation .prev-step { |
| | | background: 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); |
| | | } |
| | | |
| | | 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 { |
| | | border-color: var(--errorBack); |
| | | } |
| | | |
| | | .error-message { |
| | | color: var(--errorText); |
| | | font-size: var(--txt-small); |
| | | margin-top: 0.25rem; |
| | | display: block; |
| | | } |
| | | |
| | | /************************************************************* |
| | | Form Summary |
| | | ************************************************************/ |
| | | .form-summary { |
| | | padding: 2rem; |
| | | border-radius: 8px; |
| | | margin-top: 2rem; |
| | | border: 2px dashed var(--contrast-200); |
| | | } |
| | | |
| | | .form-summary .message { |
| | | margin-bottom: 2rem; |
| | | } |
| | | .form-summary .result + .result { |
| | | position: relative; |
| | | margin-top: 1.5rem; |
| | | padding-top: 1.5rem; |
| | | } |
| | | .form-summary .result + .result::before { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 16.5%; |
| | | content: ''; |
| | | width: 67%; |
| | | height: 1px; |
| | | border-bottom: 1px solid var(--base-200); |
| | | } |
| | | |
| | | .form-summary h2 { |
| | | margin: 1rem 0; |
| | | } |
| | | |
| | | .form-summary h4 { |
| | | background-color: var(--base-100); |
| | | padding: .5rem 2rem; |
| | | position: relative; |
| | | left: -2rem; |
| | | color: var(--contrast-200); |
| | | font-size: 0.875rem; |
| | | text-transform: uppercase; |
| | | letter-spacing: 0.05em; |
| | | margin-bottom: 0.75rem; |
| | | } |
| | | |
| | | .form-summary p { |
| | | color: var(--text); |
| | | margin: 0; |
| | | } |
| | | |
| | | .repeater-summary, |
| | | .group-summary { |
| | | background: var(--base-100); |
| | | padding: 1rem; |
| | | border-radius: 4px; |
| | | margin-top: 0.5rem; |
| | | } |
| | | |
| | | .repeater-row { |
| | | margin-bottom: 1rem; |
| | | } |
| | | |
| | | .repeater-row:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | |
| | | .selected-item { |
| | | border: 1px solid var(--base-200); |
| | | border-radius: var(--radius); |
| | | font-size: var(--txt-x-small); |
| | | background-color: 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: 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%; |
| | | } |