@use '../lib/colors'; @use '../lib/layout'; @use '../lib/motion'; @use '../lib/typography'; %form-item { @extend %narrow-content-gutter; display: flex; flex-direction: column; align-items: stretch; @media screen and (min-width: layout.$breakpoint) { flex-direction: row; align-items: center; } } %form-label { font-weight: typography.$emphasized-weight; color: colors.$blue-800; @include colors.coderdojo-theme { color: colors.$brown-800; } } %base-form-input { background-color: transparent; border: 0.1rem solid colors.$blue-800; @include colors.coderdojo-theme { border-color: colors.$brown-800; } } %focused-form-input { outline: none; background-color: colors.$yellow-500; @include colors.coderdojo-theme { background-color: colors.$green-500; } } %form-input { @extend %base-form-input; padding: layout.$small-gap; font: inherit; transition: motion.$subtle background-color; &:hover { background-color: colors.$gray-300; cursor: pointer; } &:focus-visible, &:active { @extend %focused-form-input; } } .form-input { @extend %form-item; &.isolated { position: absolute; top: -100%; opacity: 0; pointer-events: none; } > :first-child { @extend %form-label; flex-grow: 1; @media screen and (min-width: layout.$breakpoint) { text-align: right; } } > :last-child { @extend %form-input; flex-basis: 60%; margin-top: layout.$small-gap; @media screen and (min-width: layout.$breakpoint) { margin-top: 0; margin-left: layout.$normal-gap; } } } .radio-input { position: absolute; opacity: 0; + .form-input > label { position: relative; color: colors.$gray-800; &::before { content: '\2771'; display: inline-block; position: absolute; left: #{layout.$large-gap * -1}; top: 50%; transform: translateY(-50%); opacity: 0.3; } } &:checked { + .form-input > label { font-weight: typography.$emphasized-weight; color: colors.$teal-800; border-color: colors.$teal-800; @include colors.coderdojo-theme { color: colors.$orange-500; } &::before { opacity: 1; } } } &:focus-visible + .form-input > label { @extend %focused-form-input; } &:disabled + .form-input > label { background-color: colors.$gray-300; &:hover { cursor: default; } } } .form-checkbox { $size: 2rem; $gap: layout.$small-gap; @extend %form-item; justify-content: flex-end; &:hover > div { background-color: colors.$gray-300; } > input { opacity: 0; &:checked + div::before { content: '\2713'; font-size: 1.8rem; line-height: $size; } &:focus-visible + div { background-color: colors.$yellow-600; @include colors.coderdojo-theme { background-color: colors.$green-600; } } } > div { @extend %base-form-input; width: $size; height: $size; text-align: center; } > span { @extend %form-label; flex-basis: calc(60% - #{$size + $gap}); margin-left: $gap; } } .form-submit { @extend %form-item; justify-content: flex-end; > input { @extend %form-input; flex-basis: 60%; } } .blanked-out-form { position: relative; padding: layout.$large-gap 0; pointer-events: none; &::after { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; opacity: 0.6; background-image: repeating-linear-gradient( -45deg, transparent 0rem, transparent 2rem, colors.$gray-100 2.2rem, colors.$gray-100 2.4rem, colors.$yellow-300 2.4rem, colors.$yellow-300 2.8rem, colors.$yellow-500 3rem, colors.$yellow-300 3.2rem, colors.$yellow-300 3.6rem, colors.$gray-100 3.6rem, colors.$gray-100 3.8rem ); mask-image: linear-gradient( transparent 0%, black #{layout.$large-gap}, black calc(100% - #{layout.$large-gap}), transparent 100% ); } }