mirror of
https://github.com/immich-app/immich.git
synced 2026-01-22 17:38:58 -08:00
432 lines
9.4 KiB
CSS
432 lines
9.4 KiB
CSS
@import 'tailwindcss';
|
|
@import '@immich/ui/theme/default.css';
|
|
@source "../node_modules/@immich/ui";
|
|
/* @import '/usr/ui/dist/theme/default.css'; */
|
|
|
|
@utility immich-form-input {
|
|
@apply rounded-xl bg-slate-200 px-3 py-3 text-sm focus:border-immich-primary disabled:cursor-not-allowed disabled:bg-gray-400 disabled:text-gray-100 dark:bg-gray-600 dark:text-immich-dark-fg dark:disabled:bg-gray-800 dark:disabled:text-gray-200;
|
|
}
|
|
|
|
@utility immich-form-label {
|
|
@apply font-medium text-gray-500 dark:text-gray-300;
|
|
}
|
|
|
|
@utility immich-scrollbar {
|
|
/* width */
|
|
scrollbar-width: thin;
|
|
}
|
|
|
|
@utility scrollbar-hidden {
|
|
/* Hidden scrollbar */
|
|
/* width */
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
@utility scrollbar-stable {
|
|
scrollbar-gutter: stable both-edges;
|
|
}
|
|
|
|
@utility grid-auto-fit-* {
|
|
grid-template-columns: repeat(auto-fit, minmax(min(calc(var(--spacing) * --value(number)), 100%), 1fr));
|
|
}
|
|
|
|
@utility grid-auto-fill-* {
|
|
grid-template-columns: repeat(auto-fill, minmax(min(calc(var(--spacing) * --value(number)), 100%), 1fr));
|
|
}
|
|
|
|
@custom-variant dark (&:where(.dark, .dark *):not(.light));
|
|
|
|
@theme inline {
|
|
--color-immich-primary: rgb(var(--immich-primary));
|
|
--color-immich-bg: rgb(var(--immich-bg));
|
|
--color-immich-fg: rgb(var(--immich-fg));
|
|
--color-immich-gray: rgb(var(--immich-gray));
|
|
|
|
--color-immich-dark-primary: rgb(var(--immich-dark-primary));
|
|
--color-immich-dark-bg: rgb(var(--immich-dark-bg));
|
|
--color-immich-dark-fg: rgb(var(--immich-dark-fg));
|
|
--color-immich-dark-gray: rgb(var(--immich-dark-gray));
|
|
}
|
|
|
|
@theme {
|
|
--font-immich-mono: Overpass Mono, monospace;
|
|
|
|
--spacing-18: 4.5rem;
|
|
|
|
--breakpoint-tall: 800px;
|
|
--breakpoint-2xl: 1535px;
|
|
--breakpoint-xl: 1279px;
|
|
--breakpoint-lg: 1023px;
|
|
--breakpoint-md: 767px;
|
|
--breakpoint-sm: 639px;
|
|
--breakpoint-sidebar: 850px;
|
|
}
|
|
|
|
@layer base {
|
|
:root {
|
|
/* light */
|
|
--immich-primary: 66 80 175;
|
|
--immich-bg: 255 255 255;
|
|
--immich-fg: 0 0 0;
|
|
|
|
/* dark */
|
|
--immich-dark-primary: 172 203 250;
|
|
--immich-dark-bg: 10 10 10;
|
|
--immich-dark-fg: 229 231 235;
|
|
--immich-dark-gray: 33 33 33;
|
|
|
|
/* transitions */
|
|
--immich-split-viewer-nav: enabled;
|
|
}
|
|
|
|
button:not(:disabled),
|
|
[role='button']:not(:disabled) {
|
|
cursor: pointer;
|
|
}
|
|
}
|
|
|
|
@layer utilities {
|
|
@font-face {
|
|
font-family: 'Overpass';
|
|
src: url('$lib/assets/fonts/overpass/Overpass.ttf') format('truetype-variations');
|
|
font-weight: 1 999;
|
|
font-style: normal;
|
|
ascent-override: 106.25%;
|
|
size-adjust: 106.25%;
|
|
}
|
|
|
|
@font-face {
|
|
font-family: 'Overpass Mono';
|
|
src: url('$lib/assets/fonts/overpass/OverpassMono.ttf') format('truetype-variations');
|
|
font-weight: 1 999;
|
|
font-style: monospace;
|
|
ascent-override: 106.25%;
|
|
size-adjust: 106.25%;
|
|
}
|
|
|
|
:root {
|
|
font-family: 'Overpass', sans-serif;
|
|
/* Used by layouts to ensure proper spacing between navbar and content */
|
|
--navbar-height: calc(4.5rem + 4px);
|
|
--navbar-height-md: calc(4.5rem + 4px - 14px);
|
|
}
|
|
|
|
:root.dark {
|
|
color-scheme: dark;
|
|
}
|
|
|
|
:root:not(.dark) {
|
|
color-scheme: light;
|
|
}
|
|
|
|
html {
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
|
|
html::-webkit-scrollbar {
|
|
width: 8px;
|
|
}
|
|
|
|
/* Track */
|
|
html::-webkit-scrollbar-track {
|
|
background: #f1f1f1;
|
|
border-radius: 16px;
|
|
}
|
|
|
|
/* Handle */
|
|
html::-webkit-scrollbar-thumb {
|
|
background: rgba(85, 86, 87, 0.408);
|
|
border-radius: 16px;
|
|
}
|
|
|
|
/* Handle on hover */
|
|
html::-webkit-scrollbar-thumb:hover {
|
|
background: #4250afad;
|
|
border-radius: 16px;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
color: #3a3a3a;
|
|
}
|
|
|
|
input:focus-visible {
|
|
outline-offset: 0px !important;
|
|
outline: none !important;
|
|
}
|
|
|
|
.text-white-shadow {
|
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8);
|
|
}
|
|
|
|
.icon-white-drop-shadow {
|
|
filter: drop-shadow(0 0 1px rgba(0, 0, 0, 0.8));
|
|
}
|
|
}
|
|
|
|
.maplibregl-popup {
|
|
.maplibregl-popup-tip {
|
|
@apply border-t-subtle! translate-y-[-1px];
|
|
}
|
|
|
|
.maplibregl-popup-content {
|
|
@apply bg-subtle rounded-lg;
|
|
}
|
|
}
|
|
|
|
@layer base {
|
|
::view-transition {
|
|
background: black;
|
|
animation-duration: 250ms;
|
|
}
|
|
|
|
::view-transition-old(*),
|
|
::view-transition-new(*) {
|
|
mix-blend-mode: normal;
|
|
animation-duration: inherit;
|
|
}
|
|
|
|
::view-transition-old(*) {
|
|
animation-name: fadeOut;
|
|
animation-fill-mode: forwards;
|
|
}
|
|
::view-transition-new(*) {
|
|
animation-name: fadeIn;
|
|
animation-fill-mode: forwards;
|
|
}
|
|
|
|
::view-transition-old(root) {
|
|
animation: 250ms 0s fadeOut forwards;
|
|
}
|
|
::view-transition-new(root) {
|
|
animation: 250ms 0s fadeIn forwards;
|
|
}
|
|
html:active-view-transition-type(slideshow) {
|
|
&::view-transition-old(root) {
|
|
animation: 1s 0s fadeOut forwards;
|
|
}
|
|
&::view-transition-new(root) {
|
|
animation: 1s 0s fadeIn forwards;
|
|
}
|
|
}
|
|
html:active-view-transition-type(viewer-nav) {
|
|
&::view-transition-old(root) {
|
|
animation: 350ms 0s fadeOut forwards;
|
|
}
|
|
&::view-transition-new(root) {
|
|
animation: 350ms 0s fadeIn forwards;
|
|
}
|
|
}
|
|
::view-transition-old(info) {
|
|
animation: 250ms 0s flyOutRight forwards;
|
|
}
|
|
::view-transition-new(info) {
|
|
animation: 250ms 0s flyInRight forwards;
|
|
}
|
|
|
|
::view-transition-group(detail-panel) {
|
|
z-index: 1;
|
|
}
|
|
::view-transition-old(detail-panel),
|
|
::view-transition-new(detail-panel) {
|
|
animation: none;
|
|
}
|
|
::view-transition-group(letterbox-left),
|
|
::view-transition-group(letterbox-right),
|
|
::view-transition-group(letterbox-top),
|
|
::view-transition-group(letterbox-bottom) {
|
|
z-index: 4;
|
|
}
|
|
|
|
::view-transition-old(letterbox-left),
|
|
::view-transition-old(letterbox-right),
|
|
::view-transition-old(letterbox-top),
|
|
::view-transition-old(letterbox-bottom) {
|
|
background-color: black;
|
|
}
|
|
|
|
::view-transition-new(letterbox-left),
|
|
::view-transition-new(letterbox-right) {
|
|
height: 100dvh;
|
|
}
|
|
|
|
::view-transition-new(letterbox-left),
|
|
::view-transition-new(letterbox-right),
|
|
::view-transition-new(letterbox-top),
|
|
::view-transition-new(letterbox-bottom) {
|
|
background-color: black;
|
|
opacity: 1 !important;
|
|
}
|
|
|
|
::view-transition-group(exclude-leftbutton),
|
|
::view-transition-group(exclude-rightbutton),
|
|
::view-transition-group(exclude) {
|
|
animation: none;
|
|
z-index: 5;
|
|
}
|
|
::view-transition-old(exclude-leftbutton),
|
|
::view-transition-old(exclude-rightbutton),
|
|
::view-transition-old(exclude) {
|
|
visibility: hidden;
|
|
}
|
|
::view-transition-new(exclude-leftbutton),
|
|
::view-transition-new(exclude-rightbutton),
|
|
::view-transition-new(exclude) {
|
|
animation: none;
|
|
z-index: 5;
|
|
}
|
|
|
|
::view-transition-old(hero) {
|
|
animation: 350ms fadeOut forwards;
|
|
align-content: center;
|
|
}
|
|
::view-transition-new(hero) {
|
|
animation: 350ms fadeIn forwards;
|
|
align-content: center;
|
|
}
|
|
::view-transition-old(next),
|
|
::view-transition-old(next-old) {
|
|
animation: 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) flyOutLeft forwards;
|
|
overflow: hidden;
|
|
}
|
|
|
|
::view-transition-new(next),
|
|
::view-transition-new(next-new) {
|
|
animation: 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) flyInRight forwards;
|
|
overflow: hidden;
|
|
}
|
|
|
|
::view-transition-old(previous) {
|
|
animation: 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) flyOutRight forwards;
|
|
}
|
|
::view-transition-old(previous-old) {
|
|
animation: 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) flyOutRight forwards;
|
|
overflow: hidden;
|
|
z-index: -1;
|
|
}
|
|
|
|
::view-transition-new(previous) {
|
|
animation: 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) flyInLeft forwards;
|
|
}
|
|
|
|
::view-transition-new(previous-new) {
|
|
animation: 250ms cubic-bezier(0.25, 0.46, 0.45, 0.94) flyInLeft forwards;
|
|
overflow: hidden;
|
|
}
|
|
|
|
@keyframes flyInLeft {
|
|
from {
|
|
/* object-position: -25dvw; */
|
|
transform: translateX(-15%);
|
|
opacity: 0.1;
|
|
filter: blur(4px);
|
|
}
|
|
50% {
|
|
opacity: 0.4;
|
|
filter: blur(2px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
filter: blur(0);
|
|
}
|
|
}
|
|
|
|
@keyframes flyOutLeft {
|
|
from {
|
|
opacity: 1;
|
|
filter: blur(0);
|
|
}
|
|
50% {
|
|
opacity: 0.4;
|
|
filter: blur(2px);
|
|
}
|
|
to {
|
|
/* object-position: -25dvw; */
|
|
transform: translateX(-15%);
|
|
opacity: 0.1;
|
|
filter: blur(4px);
|
|
}
|
|
}
|
|
|
|
@keyframes flyInRight {
|
|
from {
|
|
/* object-position: 25dvw; */
|
|
transform: translateX(15%);
|
|
opacity: 0.1;
|
|
filter: blur(4px);
|
|
}
|
|
50% {
|
|
opacity: 0.4;
|
|
filter: blur(2px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
filter: blur(0);
|
|
}
|
|
}
|
|
|
|
/* Fly out to right */
|
|
@keyframes flyOutRight {
|
|
from {
|
|
opacity: 1;
|
|
filter: blur(0);
|
|
}
|
|
50% {
|
|
opacity: 0.4;
|
|
filter: blur(2px);
|
|
}
|
|
to {
|
|
/* object-position: 50dvw 0px; */
|
|
transform: translateX(15%);
|
|
opacity: 0.1;
|
|
filter: blur(4px);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
@keyframes fadeOut {
|
|
from {
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion) {
|
|
::view-transition-group(previous),
|
|
::view-transition-group(next) {
|
|
width: 100% !important;
|
|
height: 100% !important;
|
|
transform: none !important;
|
|
}
|
|
|
|
::view-transition-old(previous),
|
|
::view-transition-old(next) {
|
|
animation: 250ms fadeOut forwards;
|
|
transform-origin: center;
|
|
height: 100%;
|
|
width: 100%;
|
|
object-fit: contain;
|
|
overflow: hidden;
|
|
}
|
|
|
|
::view-transition-new(previous),
|
|
::view-transition-new(next) {
|
|
animation: 250ms fadeIn forwards;
|
|
transform-origin: center;
|
|
height: 100%;
|
|
width: 100%;
|
|
object-fit: contain;
|
|
}
|
|
}
|
|
}
|