Files
fizzy/app/assets/stylesheets/cards.css
T
Andy Smith 5cb7643274 Merge branch 'main' into btn-dropdown
* main: (21 commits)
  Migration to migrate URLs after renaming bubbles => cards
  Remove migration
  Restore bubbles.css since some styles are used
  Fix issues with styling card__ components
  Remove bubbles.css
  Fix renames that the scripts missed
  Reorganize templates to remove cards/cards redundancy
  Rename bubbles => cards
  Safari sure loves outlines
  Use a number field, and improve focus styles
  Fix boosting via number input
  Embed additional video formats
  Fix that notifications weren't marked as read
  Fix tray item position
  Update House to bring patch for history restoration error
  Tighten up
  Restore additional missing routes removed in c0f3ff46d7
  Retore route removed in c0f3ff46d7
  Fix visual regression in popup menus
  Perma cards should not always be 100% width
  ...
2025-04-09 14:17:39 -05:00

528 lines
11 KiB
CSS

@layer components {
.cards {
--block-space: 2cqi;
--container-gap: var(--block-space);
--container-padding: calc(var(--block-space) * 1.5);
container-type: inline-size;
padding: var(--block-space-half) 0;
justify-content: start;
:where(.card) {
--block-space: 1em;
--block-space-half: 0.5em;
--card-size: calc(100% - (var(--container-padding) * 2) / 2);
--text-xx-large: 2em;
font-size: 1.8cqi;
flex: 0 1 var(--card-size);
inline-size: var(--card-size);
margin: var(--block-space) auto calc(var(--block-space) * 1.5);
}
:is(.card--mini) {
--text-xx-large: 1.6em;
--text-small: 1.1em;
aspect-ratio: unset;
line-height: 1.2;
padding: calc(var(--block-space) * 1.5) var(--block-space);
margin: var(--block-space) auto calc(var(--block-space) * 1.5);
.card__title {
margin-block-start: 0.1em;
min-block-size: 0;
}
.card__stuff {
.avatar {
block-size: 2em;
inline-size: 2em;
margin: 0;
}
}
.card__body {
padding-inline: 0;
}
.avatar {
block-size: 3em;
inline-size: 3em;
margin-block-start: -0.2em;
}
.card__tags {
font-size: var(--text-small);
}
}
}
.cards--columns {
border-block: 1px solid var(--color-subtle);
display: grid;
grid-template-columns: repeat(2, 50%);
margin: auto;
max-inline-size: 100ch;
padding-block: var(--block-space-half);
.card {
aspect-ratio: unset;
z-index: unset;
}
}
.card {
--border-color: transparent;
--border-radius: 0.2em;
--border-size: 0;
aspect-ratio: 2/0.95;
background-color: color-mix(in srgb, var(--card-color) 4%, var(--color-bg));
color: color-mix(in srgb, var(--card-color) 40%, var(--color-ink));
max-inline-size: 75ch;
z-index: 1;
.card__container & {
inline-size: calc(100dvw - var(--actions-inline-inset) * 2 - var(--btn-size) * 2);
}
.local-time-value {
font-weight: bold;
}
@media (prefers-color-scheme: dark) {
--border-color: var(--color-subtle-dark);
--border-size: 1px;
}
}
.card__actions {
position: absolute;
inset: var(--actions-block-inset) auto auto calc(var(--actions-inline-inset) * -1);
z-index: 0;
&:has(dialog[open]) {
z-index: 1;
}
}
.card__actions--right {
inset: var(--actions-block-inset) calc(var(--actions-inline-inset) * -1) auto auto;
}
.card__actions-container {
--border-radius: 1em;
background-color: var(--color-bg);
color: color-mix(in srgb, var(--card-color) 40%, var(--color-ink));
margin-block: calc(var(--block-space) * -1.66) calc(var(--block-space) * 1.66);
padding: calc(var(--block-space) * 0.66) calc(var(--inline-space) * 1.5);
position: relative;
z-index: 0;
&:has([open]) {
z-index: 1;
}
.btn:not(.popup__item, .btn--plain) {
--btn-background: var(--card-color);
--btn-color: var(--color-ink-reversed);
}
.btn--plain {
--btn-color: var(--card-color);
text-decoration: underline;
}
.card__closure-message {
color: var(--card-color);
}
}
.card__actions-container--top {
min-inline-size: 36ch;
margin: calc(var(--block-space) * 1) auto calc(var(--block-space) * -0.33);
padding: 0.5em 0.75em;
#header:has(&) {
position: relative;
z-index: 1;
}
.switch__input:checked + .switch__btn {
background-color: var(--card-color) !important;
}
strong {
flex: 1 0 42%;
text-align: end;
&:last-of-type {
text-align: start;
}
}
}
.cards .card__assignees:not(:has(.avatar)) {
.txt-uppercase {
display: none;
}
}
.card__background {
inset: 0;
position: absolute;
z-index: -1;
img {
block-size: 100%;
inline-size: 100%;
object-fit: cover;
object-position: center;
opacity: 0.2;
transition: opacity 0.2s ease-in-out;
}
@media (hover: hover) {
.card:hover & {
img:not([src=""]) {
opacity: 1;
}
}
}
}
.card__body {
padding-inline: var(--inline-space-double);
}
.card__body-header {
flex: 2 1 75%;
padding-block: var(--block-space);
}
.card__collection {
background-color: var(--card-color);
font-weight: 800;
letter-spacing: 0.5ch;
padding: var(--block-space-half) var(--inline-space-double);
}
.card-collection__filter {
> button {
--hover-size: 0;
}
}
.card-column__filter {
> button {
--hover-size: 0;
inline-size: auto;
padding: 0 2em 0 0;
margin-inline-start: 2em;
}
}
.card-sorting__filter {
inset: auto 50% -4em;
margin-inline-start: -1em;
position: absolute;
transform: translateX(-50%);
#header:has(&) {
position: relative;
z-index: 1;
}
}
.card__container {
--actions-block-inset: 1.5rem;
--actions-inline-inset: 4rem;
--padding-inline: calc(var(--block-space-double) + var(--block-space));
--padding-block: var(--block-space-double) calc(var(--block-space-double) + var(--block-space-half));
background-color: color-mix(in srgb, var(--card-color) 33%, var(--color-bg));
border-radius: 0.2em;
display: inline-flex;
margin-block: calc(var(--block-space) * -1) calc(var(--block-space) * -0.33);
padding: var(--padding-block) var(--padding-inline);
&:has(.card__star-input:checked) {
.card {
outline: 4px solid var(--color-negative);
}
}
}
.card__container--pointing {
--arrow-size: 20em;
--aspect-ratio: 7;
position: relative;
margin-block-end: calc(var(--arrow-size) / var(--aspect-ratio));
&::after {
aspect-ratio: var(--aspect-ratio);
background: var(--color-container);
clip-path: polygon(50% 100%, 100% 0, 0 0);
inline-size: var(--arrow-size);
content: "";
display: block;
inset-block-start: 99%;
inset-inline-start: 50%;
position: absolute;
transform: translateX(-50%);
z-index: -1;
}
}
.card__delete-btn {
.cards & {
display: none;
}
}
.card__footer {
margin-block-end: var(--block-space);
}
.cards--grid {
--block-space: 2cqi;
--container-gap: var(--block-space-double);
--container-padding: calc(var(--block-space) * 1.5);
container-type: inline-size;
display: flex;
flex-wrap: wrap;
gap: var(--container-gap);
inline-size: 100%;
margin: 0 auto;
max-inline-size: 120ch;
padding: var(--container-padding);
place-content: center;
position: relative;
z-index: 0;
.card {
--block-space: 1em;
--block-space-half: 0.5em;
--card-size: calc(100% - (var(--container-padding) * 2) / 2);
--text-xx-large: 1.8em;
block-size: 50%;
font-size: 3cqi;
flex: 0 0 var(--card-size);
inline-size: var(--card-size);
z-index: 0;
}
.card__meta,
.card__stages {
display: none;
}
@media (min-width: 1ch) {
--block-space: 1cqi;
--container-gap: calc(var(--block-space) * 2);
--container-padding: calc(var(--block-space) * 2.5);
.card {
--card-size: calc(50% - var(--container-gap) - (var(--container-padding) * 2) / 4);
--text-xx-large: 1.6em;
font-size: 1.5cqi;
}
.card__footer,
.card__header,
.card__stages {
font-size: 0.85em;
}
}
@media (min-width: 120ch) {
--block-space: 0.9cqi;
--container-gap: calc(var(--block-space) * 2);
--container-padding: calc(var(--block-space) * 2.5);
.card {
--card-size: calc(33% - var(--container-gap) / 2 - (var(--container-padding) * 2) / 6);
--text-xx-large: 1.8em;
font-size: 1cqi;
}
.card__footer,
.card__header,
.card__stages {
font-size: 0.85em;
}
}
}
.card__header {
padding-inline-end: var(--inline-space);
}
.card__hide-on-index {
.cards &,
.cards--grid & {
display: none;
}
}
.card__link {
--hover-size: 0;
content: "";
inset: 0;
position: absolute;
z-index: -1;
.cards &,
.cards--grid & {
z-index: 1;
}
}
.card__meta {
--border-color: var(--card-color);
--border-size: 1px;
--row-gap: 0.25em;
margin-inline-start: var(--inline-space-double);
strong {
font-weight: 900;
}
.separator {
height: calc(2lh + 2ex);
}
}
.card__move-button {
--btn-background: color-mix(in srgb, var(--card-color) 40%, var(--color-ink));
margin-block-start: calc(var(--block-space) * 1.2);
margin-inline-end: calc(var(--inline-space) * -4);
padding-inline-end: var(--inline-space);
}
.card__stages {
flex: 1 1 25%;
}
.card__tag {
color: var(--card-color);
font-weight: 700;
}
.card__tags {
color: var(--card-color);
}
.card__title {
--hover-size: 0;
--input-border-radius: 0;
font-size: var(--text-xx-large);
font-weight: 900;
line-height: 1.1;
min-block-size: 3lh;
text-wrap: balance;
.cards & {
pointer-events: none;
}
.card__title-field {
&:is(textarea) {
&::placeholder {
color: inherit;
opacity: 0.5;
}
}
}
.card__title-link {
--lines: 3;
color: inherit;
}
}
.card-count__selector {
inset: 0.5cqi 0.5cqi auto auto;
position: absolute;
text-align: start;
z-index: 1;
.popup {
inset: 1em 1em auto auto;
}
}
.input.boost__input {
--hover-size: 0;
--input-border-radius: 0;
--input-border-size: 0;
--input-padding: 0;
--outline-size: 0;
color: inherit;
font-size: inherit;
font-weight: inherit;
inline-size: min-content;
max-inline-size: 3ch;
min-inline-size: 1ch;
outline: none;
@supports (field-sizing: content) {
field-sizing: content;
max-inline-size: unset;
}
&:focus {
background-color: var(--color-highlight);
}
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
}
.card__closed {
align-items: center;
aspect-ratio: 7/4;
border: var(--block-space-half) solid var(--card-color);
position: absolute;
inset: auto var(--block-space) var(--block-space-double) auto;
justify-content: space-between;
padding: var(--block-space-half) calc(var(--inline-space) * 1.5);
transform: rotate(-10deg);
z-index: -1;
}
.card__closed-by {
border-block-end: 1px dashed currentcolor;
}
.card__closed-title {
color: var(--color-ink-reversed);
font-size: var(--text-rel-large);
font-weight: 900;
text-shadow:
-2px -2px 0 var(--card-color),
2px -2px 0 var(--card-color),
-2px 2px 0 var(--card-color),
2px 2px 0 var(--card-color);
}
}