/** * default text inputs */ input[type="email"], input[type="password"], input[type="text"], input[type="url"], input[type="search"], select { @apply border-md border-gray-800 bg-white rounded-md shadow-input; @apply focus:border-primary focus:ring-2 focus:ring-offset-2 focus:ring-cyan-600; transition: box-shadow 125ms ease-in-out, border-color 125ms ease-in-out; } /** * checkboxes */ /** * radio buttons */ input[type="radio"] { @apply appearance-none p-0 align-middle select-none shrink-0 rounded-full h-6 w-6; @apply text-black border-md border-gray-800 bg-none; @apply focus:border-primary focus:ring-2 focus:ring-offset-2 focus:ring-cyan-600; print-color-adjust: exact; --radio-bg: var(--color-white); &:checked { @apply border-black; box-shadow: 0 0 0 3px var(--radio-bg) inset, 0 0 0 3px var(--radio-bg) inset; animation: radio-check 200ms ease-out; } } @keyframes radio-check { 0% { box-shadow: 0 0 0 12px var(--radio-bg) inset, 0 0 0 12px var(--radio-bg) inset; } 50% { box-shadow: 0 0 0 2px var(--radio-bg) inset, 0 0 0 2px var(--radio-bg) inset; } 100% { box-shadow: 0 0 0 3px var(--radio-bg) inset, 0 0 0 3px var(--radio-bg) inset; } } .radio-label { @apply flex flex-row gap-2 items-center; } /** * specific minor types */ input[type="color"] { @apply rounded-md border-white shadow-none h-10 w-16 cursor-pointer; @apply self-start; &::-moz-color-swatch { @apply border-none; } } /** * labeled text inputs */ label.text-label { @apply flex flex-col gap-2; > .description { @apply text-gray-800; } } .label { @apply font-semibold text-md; } /** * form layouts */ form { &.settings { @apply mt-8; @apply 2xl:max-w-3xl; } } article.settings { /* scroll detection for use later */ animation: settings-scroll; animation-timeline: scroll(self); --can-scroll: 0; } @keyframes settings-scroll { from, to { --can-scroll: 1; } } .form-grid-1 { @apply grid grid-cols-3 gap-6; > label { @apply col-span-2 col-start-1; } > div { @apply col-span-3 flex flex-row justify-start gap-4 pt-4; } } .input-row { @apply grid gap-4; @apply md:gap-6; /* format is a string of slash-separated cols, so `1-2` is 3 cols, 1st spans 1 and 2nd spans 2 */ &.input-row--1 { @apply grid-cols-1; } &.input-row--1-1 { @apply grid-cols-1; @apply md:grid-cols-2; } &.input-row--1-1-1-1 { @apply grid-cols-1; @apply md:grid-cols-2; @apply xl:grid-cols-4; } &.input-row--2-1-1 { @apply grid-cols-1; @apply md:grid-cols-4; .input-cell:first-child { @apply col-span-2; } } /* bottom actions row */ &.input-row--actions { @apply pt-6 pb-8 flex flex-row gap-6 justify-between items-center; @apply sticky bottom-0 bg-white border-t-md border-transparent; transition: border-color 100ms ease-in-out; box-shadow: 0 -1rem 1rem white; &.input-row--start { @apply justify-start; } } /* generic cell and row handling */ .input-cell { @apply flex flex-col gap-2; } + .input-row { @apply mt-6; } } h3 + .input-row { @apply mt-6; } @container style(--can-scroll: 1) { .input-row--actions { @apply !border-black; } } @container style(--can-scroll: 0) { .input-row--actions { @apply !border-transparent; } }