@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; } } }