clone of repo on github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

855 lines
20 KiB

@import "tailwindcss";
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/preflight.css" layer(base);
@import "tailwindcss/utilities.css" layer(utilities);
/* then your own imports and layers */
@import "./styles/base.css";
@import "./styles/scrollbar.css";
@import "./styles/publications.css";
@import "./styles/visualize.css";
@import "./styles/asciidoc.css";
@import "theme-tokens.css";
@import "./styles/a/cards.css";
@import "./styles/a/forms.css";
@import "./styles/a/primitives.css";
@layer theme, base, components, utilities;
@plugin "flowbite/plugin";
@plugin "flowbite-typography";
@custom-variant dark (&:where(.dark, .dark *));
@theme {
/* single color */
--color-highlight: #f9f6f1;
--color-border: var(--color-highlight);
--color-text-muted: var(--color-text-muted);
/* success */
--color-success-50: #e3f2e7;
--color-success-100: #c7e6cf;
--color-success-200: #a2d4ae;
--color-success-300: #7dbf8e;
--color-success-400: #5ea571;
--color-success-500: #4e8e5f;
--color-success-600: #3e744c;
--color-success-700: #305b3b;
--color-success-800: #22412a;
--color-success-900: #15281b;
/* info */
--color-info-50: #e7eff6;
--color-info-100: #c5d9ea;
--color-info-200: #9fbfdb;
--color-info-300: #7aa5cc;
--color-info-400: #5e90be;
--color-info-500: #4779a5;
--color-info-600: #365d80;
--color-info-700: #27445d;
--color-info-800: #192b3a;
--color-info-900: #0d161f;
/* warning */
--color-warning-50: #fef4e6;
--color-warning-100: #fde4bf;
--color-warning-200: #fcd18e;
--color-warning-300: #fbbc5c;
--color-warning-400: #f9aa33;
--color-warning-500: #f7971b;
--color-warning-600: #c97a14;
--color-warning-700: #9a5c0e;
--color-warning-800: #6c3e08;
--color-warning-900: #3e2404;
/* danger */
--color-danger-50: #fbeaea;
--color-danger-100: #f5cccc;
--color-danger-200: #eba5a5;
--color-danger-300: #e17e7e;
--color-danger-400: #d96060;
--color-danger-500: #c94848;
--color-danger-600: #a53939;
--color-danger-700: #7c2b2b;
--color-danger-800: #521c1c;
--color-danger-900: #2b0e0e;
}
/* Map Tailwind utilities → theme tokens (PRIMARY ONLY) */
@theme inline {
--color-primary-0: var(--brand-primary-0);
--color-primary-50: var(--brand-primary-50);
--color-primary-100: var(--brand-primary-100);
--color-primary-200: var(--brand-primary-200);
--color-primary-300: var(--brand-primary-300);
--color-primary-400: var(--brand-primary-400);
--color-primary-500: var(--brand-primary-500);
--color-primary-600: var(--brand-primary-600);
--color-primary-700: var(--brand-primary-700);
--color-primary-800: var(--brand-primary-800);
--color-primary-900: var(--brand-primary-900);
--color-primary-950: var(--brand-primary-950);
--color-primary-1000: var(--brand-primary-1000);
}
@source "../node_modules/flowbite-svelte/dist";
@source "../node_modules/flowbite-svelte-icons/dist";
/* @utility and @layer rules… */
/* .content-visibility-auto */
@utility content-visibility-auto {
content-visibility: auto;
}
/* .contain-size */
@utility contain-size {
contain: size;
}
/* numbers -> px (e.g. contain-intrinsic-w-[320] => width: 320px) */
@utility contain-intrinsic-w-* {
--tw-ciw: --value(number);
width: calc(var(--tw-ciw) * 1px);
}
@utility contain-intrinsic-h-* {
--tw-cih: --value(number);
height: calc(var(--tw-cih) * 1px);
}
/* percentages (e.g. contain-intrinsic-wp-[65%] => width: 65%) */
@utility contain-intrinsic-wp-* {
width: --value(percentage);
}
@utility contain-intrinsic-hp-* {
height: --value(percentage);
}
/* list-upper-alpha, list-lower-alpha (keep your old class names)
Note: in v4 you can also write list-[upper-alpha] / list-[lower-alpha] inline. */
@utility list-upper-alpha {
list-style-type: upper-alpha;
}
@utility list-lower-alpha {
list-style-type: lower-alpha;
}
/* flexGrow 1/2/3 — unlock grow-2, grow-3 (and any number via brackets) */
@utility grow-* {
flex-grow: --value(integer);
}
/* Hue rotate: use arbitrary values directly, e.g. hue-rotate-[20deg] (no config needed). */
/* --- Let Tailwind scan Flowbite Svelte (node_modules are ignored by default) --- */
@source "../node_modules/flowbite-svelte/dist";
@source "../node_modules/flowbite-svelte-icons/dist";
/* Custom styles */
@layer base {
/* disable chrome cancel button */
input[type="search"]::-webkit-search-cancel-button {
display: none;
}
/* === HEADINGS === */
/* Base heading styles - gray-900 (light) / gray-100 (dark) for high contrast */
h1,
h2,
h3,
h4,
h5,
h6,
h1.h-leather,
h2.h-leather,
h3.h-leather,
h4.h-leather,
h5.h-leather,
h6.h-leather {
@apply text-gray-900 dark:text-gray-100;
}
/* Heading sizes and weights */
h1,
h1.h-leather {
@apply text-4xl font-bold;
}
h2,
h2.h-leather {
@apply text-3xl font-bold;
}
h3,
h3.h-leather {
@apply text-2xl font-bold;
}
h4,
h4.h-leather {
@apply text-xl font-bold;
}
h5,
h5.h-leather {
@apply text-lg font-semibold;
}
h6,
h6.h-leather {
@apply text-base font-semibold;
}
/* Heading links - primary-600 (light, more golden) / primary-300 (dark) for hover */
h1 a,
h2 a,
h3 a,
h4 a,
h5 a,
h6 a,
h1.h-leather a,
h2.h-leather a,
h3.h-leather a,
h4.h-leather a,
h5.h-leather a,
h6.h-leather a {
@apply text-gray-900 dark:text-gray-100 hover:text-primary-600
dark:hover:text-primary-300;
}
/* === LEATHER COMPONENTS === */
.leather,
.publication-leather {
@apply text-gray-900 dark:text-gray-100;
}
/* Override Flowbite button hover in light mode - make it subtle like nav bar */
/* Target all buttons in light mode */
button:hover {
background-color: var(--color-primary-100) !important;
}
/* Override outline buttons specifically */
button[class*="outline"]:hover {
background-color: var(--color-primary-100) !important;
border-color: var(--color-primary-200) !important;
color: var(--color-primary-800) !important;
}
/* Override btn-leather buttons */
button.btn-leather:hover {
background-color: var(--color-primary-100) !important;
}
/* Dark mode overrides */
.dark button:hover {
background-color: var(--color-primary-800) !important;
}
.dark button[class*="outline"]:hover {
background-color: var(--color-primary-800) !important;
border-color: var(--color-primary-600) !important;
color: var(--color-primary-100) !important;
}
.dark button.btn-leather:hover {
background-color: var(--color-primary-800) !important;
}
.btn-leather.text-xs {
@apply px-2 py-1;
}
.btn-leather.text-xs svg {
@apply h-3 w-3;
}
.btn-leather.text-sm {
@apply px-3 py-2;
}
.btn-leather.text-sm svg {
@apply h-4 w-4;
}
div[role="tooltip"] button.btn-leather {
@apply hover:text-primary-700 dark:hover:text-primary-300
hover:border-primary-700 dark:hover:border-primary-300 hover:bg-gray-200
dark:hover:bg-gray-700;
}
.image-border {
@apply border border-primary-700;
}
main {
@apply max-w-full flex;
}
main.publication {
@apply mt-[70px];
}
/* To scroll columns independently */
main.publication.blog {
@apply w-full sm:w-auto min-h-full;
}
main.main-leather,
article.article-leather {
@apply text-gray-900 dark:text-gray-100;
}
div.note-leather,
p.note-leather,
section.note-leather {
@apply text-gray-900 dark:text-gray-100 p-2 rounded;
}
.edit div.note-leather:hover:not(:has(.note-leather:hover)),
.edit p.note-leather:hover:not(:has(.note-leather:hover)),
section.edit.note-leather:hover:not(:has(.note-leather:hover)) {
@apply hover:bg-primary-100 dark:hover:bg-primary-800;
}
div.modal-leather > div {
@apply bg-primary-50 dark:bg-primary-950 border-b-[1px] border-primary-100
dark:border-primary-600;
}
div.modal-leather > div > h1,
div.modal-leather > div > h2,
div.modal-leather > div > h3,
div.modal-leather > div > h4,
div.modal-leather > div > h5,
div.modal-leather > div > h6 {
@apply text-gray-900 dark:text-gray-100;
}
div.modal-leather > div > h1 a,
div.modal-leather > div > h2 a,
div.modal-leather > div > h3 a,
div.modal-leather > div > h4 a,
div.modal-leather > div > h5 a,
div.modal-leather > div > h6 a {
@apply hover:text-primary-700 dark:hover:text-primary-300;
}
/* Navbar */
nav.Navbar.navbar-main {
@apply z-30;
}
nav.navbar-leather {
@apply bg-primary-0 dark:bg-primary-1000 z-10;
}
nav.navbar-leather svg {
@apply fill-gray-900 hover:fill-primary-700 dark:fill-gray-100
dark:hover:fill-primary-300;
}
/* NavBrand hover - all text highlights together */
#navi a:hover h1,
#navi a:hover p {
@apply !text-primary-600 dark:!text-primary-300;
transition: color 0.2s ease-in-out;
}
/* Navbar menu items hover effect - ALL items get same background hover */
#navi ul li.navbar-menu-item,
#navi ul li:has(.navbar-menu-item),
#navi li.navbar-menu-item {
@apply rounded px-2 py-1 transition-colors;
}
#navi ul li.navbar-menu-item:hover,
#navi ul li:has(.navbar-menu-item):hover,
#navi li.navbar-menu-item:hover,
#navi ul li.navbar-menu-item:has(button:hover),
#navi ul li.navbar-menu-item:has(div:hover),
#navi ul li.navbar-menu-item:has(span:hover),
#navi ul li.navbar-menu-item:has(a:hover),
#navi ul li.navbar-menu-item:has(img:hover),
#navi ul li.navbar-menu-item:has(svg:hover),
#navi ul li.navbar-menu-item:has([class*="Avatar"]:hover) {
@apply !bg-primary-100;
}
.dark #navi ul li.navbar-menu-item:hover,
.dark #navi ul li:has(.navbar-menu-item):hover,
.dark #navi li.navbar-menu-item:hover,
.dark #navi ul li.navbar-menu-item:has(button:hover),
.dark #navi ul li.navbar-menu-item:has(div:hover),
.dark #navi ul li.navbar-menu-item:has(span:hover),
.dark #navi ul li.navbar-menu-item:has(a:hover),
.dark #navi ul li.navbar-menu-item:has(img:hover),
.dark #navi ul li.navbar-menu-item:has(svg:hover),
.dark #navi ul li.navbar-menu-item:has([class*="Avatar"]:hover) {
@apply !bg-primary-800;
}
/* Explore text color - matches chevron in dark mode */
#navi ul li.navbar-menu-item:first-of-type {
@apply text-primary-800 dark:text-white cursor-pointer;
}
/* Remove ALL backgrounds from ALL child elements - use universal selector with max specificity */
#navi ul li.navbar-menu-item *,
#navi ul li.navbar-menu-item *:hover,
#navi ul li.navbar-menu-item *:focus,
#navi ul li.navbar-menu-item *:active,
#navi ul li.navbar-menu-item:hover *,
#navi ul li.navbar-menu-item:hover *:hover,
#navi ul li.navbar-menu-item:hover *:focus,
#navi ul li.navbar-menu-item:hover *:active {
background-color: transparent !important;
background: transparent !important;
background-image: none !important;
box-shadow: none !important;
}
nav.navbar-leather h1,
nav.navbar-leather h2,
nav.navbar-leather h3,
nav.navbar-leather h4,
nav.navbar-leather h5,
nav.navbar-leather h6 {
@apply text-gray-900 dark:text-gray-100;
}
nav.navbar-leather h1 a,
nav.navbar-leather h2 a,
nav.navbar-leather h3 a,
nav.navbar-leather h4 a,
nav.navbar-leather h5 a,
nav.navbar-leather h6 a {
@apply hover:text-primary-700 dark:hover:text-primary-300;
}
div.textarea-leather {
@apply bg-primary-50 dark:bg-primary-1000;
}
div.textarea-leather > div:nth-child(1),
div.toolbar-leather {
@apply border-none;
}
div.textarea-leather > div:nth-child(2) {
@apply bg-primary-50 dark:bg-primary-1000;
}
div.textarea-leather,
div.textarea-leather textarea {
@apply text-gray-900 dark:text-gray-100;
}
div.tooltip-leather {
@apply text-gray-900 dark:text-gray-100;
}
div[role="tooltip"] button.btn-leather .tooltip-leather {
@apply bg-primary-100 dark:bg-primary-800;
}
/* Network visualization */
.network-link-leather {
@apply stroke-primary-200 fill-primary-200;
}
.network-node-leather {
@apply stroke-primary-600;
}
.network-node-content {
@apply fill-primary-100;
}
/* Person link colors */
.person-link-signed {
@apply stroke-green-500;
}
.person-link-referenced {
@apply stroke-blue-400;
}
/* Person anchor node */
.person-anchor-node {
@apply fill-green-400 stroke-green-600;
}
}
/* Utilities can be applied via the @apply directive. */
@layer utilities {
/* Removed redundant .h-leather and .h1-leather through .h6-leather - use base layer definitions instead */
/* Line clamp utilities for text truncation */
.line-clamp-1 {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.line-clamp-2 {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.line-clamp-3 {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.decoration-none {
text-decoration: none !important;
}
/* Lists */
.ol-leather li a,
.ul-leather li a {
@apply text-gray-900 dark:text-gray-100 hover:text-primary-700
dark:hover:text-primary-300;
}
/* Links - consistent hover colors - improved contrast */
.link {
@apply underline cursor-pointer hover:text-primary-700
dark:hover:text-primary-300;
}
.npub-badge {
@apply inline-flex space-x-1 items-center text-primary-700
dark:text-primary-300 hover:underline me-2 px-2 py-0.5 rounded-sm border
border-primary-700 dark:border-primary-300;
svg {
@apply fill-primary-700 dark:fill-primary-300;
}
}
[data-tech="off"] .tech-detail {
@apply !hidden;
}
}
/* Force remove backgrounds from DarkMode button - outside layer for max priority */
#navi ul li.navbar-menu-item:nth-child(2) *,
#navi ul li.navbar-menu-item:nth-child(2) *:hover,
#navi ul li.navbar-menu-item:nth-child(2) *:focus,
#navi ul li.navbar-menu-item:nth-child(2) *:active,
#navi ul li.navbar-menu-item:nth-child(2):hover *,
#navi ul li.navbar-menu-item:nth-child(2):hover *:hover {
background-color: transparent !important;
background: transparent !important;
background-image: none !important;
box-shadow: none !important;
}
@layer components {
nav a {
text-decoration-line: none !important;
}
canvas.qr-code {
@apply block mx-auto my-4;
}
/* Fix white wrapper behind buttons on publication content in light mode */
main.publication div.flex.gap-2,
main.publication div.flex.justify-between {
@apply bg-transparent;
}
/* Override Flowbite light button white background in light mode to be more subtle */
main.publication :global(button.bg-gray-100),
main.publication :global(button.bg-gray-50) {
@apply !bg-primary-100 !border-primary-200 !text-primary-800;
}
main.publication :global(button.bg-gray-100:hover),
main.publication :global(button.bg-gray-50:hover) {
@apply !bg-primary-200 !border-primary-300;
}
/* Legend */
.leather-legend {
@apply relative m-4 sm:m-0 sm:absolute sm:top-1 sm:left-1 flex-shrink-0 p-2
rounded;
@apply shadow-none text-primary-1000 border border-s-4 bg-highlight
border-primary-200 has-[:hover]:border-primary-700;
@apply dark:bg-primary-1000 dark:border-primary-800
dark:has-[:hover]:bg-primary-950 dark:has-[:hover]:border-primary-500;
max-width: 450px;
min-width: 300px;
overflow-x: auto;
overflow-y: hidden;
}
/* Tooltip */
.tooltip-leather {
@apply fixed p-4 rounded shadow-lg bg-primary-50 dark:bg-primary-1000
text-gray-900 dark:text-gray-100 border border-gray-200
dark:border-gray-700 transition-colors duration-200;
max-width: 400px;
z-index: 1000;
}
.leather-legend button {
@apply text-gray-900 dark:text-gray-100;
}
.publication-leather {
@apply flex flex-col space-y-4;
scroll-margin-top: 150px;
scroll-behavior: smooth;
}
/* Publication headings inherit from base layer - removed duplicate definitions */
.olist {
@apply flex flex-col space-y-4;
ol {
@apply list-decimal px-6 flex flex-col space-y-2;
li {
.paragraph {
@apply py-2;
}
}
}
}
.ulist {
@apply flex flex-col space-y-4;
ul {
@apply list-disc px-6 flex flex-col space-y-2;
li {
.paragraph {
@apply py-2;
}
}
}
}
/* All links - consistent hover behavior - improved contrast */
a {
@apply underline cursor-pointer hover:text-primary-700
dark:hover:text-primary-300;
}
.imageblock {
@apply flex flex-col items-center;
.title {
@apply text-sm text-center;
}
}
.stemblock {
@apply bg-gray-200 dark:bg-gray-800 p-4 rounded-lg;
}
.literalblock {
pre {
@apply text-wrap;
}
}
table {
@apply w-full overflow-x-auto;
caption {
@apply text-sm;
}
thead,
tbody {
th,
td {
@apply border border-gray-200 dark:border-gray-700;
}
}
}
/* Footnotes - improved contrast */
.footnote-ref {
text-decoration: none;
color: var(--color-primary-700);
}
.dark .footnote-ref {
color: var(--color-primary-300);
}
.footnotes {
margin-top: 2rem;
font-size: 0.875rem;
color: var(--color-text-muted);
}
.footnotes hr {
margin: 1rem 0;
border-top: 1px solid var(--color-border);
}
.footnotes ol {
padding-left: 1rem;
}
.line-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
}
.footnotes li {
margin-bottom: 0.5rem;
}
.footnote-backref {
text-decoration: none;
margin-left: 0.5rem;
color: var(--color-primary-700);
}
.dark .footnote-backref {
color: var(--color-primary-300);
}
.note-leather .footnote-ref,
.note-leather .footnote-backref {
color: var(--color-primary-700);
}
.dark .note-leather .footnote-ref,
.dark .note-leather .footnote-backref {
color: var(--color-primary-300);
}
/* Scrollable content */
.description-textarea,
.prose-content {
overflow-y: scroll !important;
scrollbar-width: thin !important;
scrollbar-color: rgba(156, 163, 175, 0.5) transparent !important;
}
/* Section scroll behavior */
section[id] {
scroll-margin-top: 150px;
}
/* Ensure section headers maintain their padding */
section[id] h1,
section[id] h2,
section[id] h3,
section[id] h4,
section[id] h5,
section[id] h6 {
@apply pt-4;
}
.description-textarea {
min-height: 100% !important;
}
.description-textarea::-webkit-scrollbar,
.prose-content::-webkit-scrollbar {
width: 8px !important;
display: block !important;
}
.description-textarea::-webkit-scrollbar-track,
.prose-content::-webkit-scrollbar-track {
background: transparent !important;
}
.description-textarea::-webkit-scrollbar-thumb,
.prose-content::-webkit-scrollbar-thumb {
background-color: rgba(156, 163, 175, 0.5) !important;
border-radius: 4px !important;
}
.description-textarea::-webkit-scrollbar-thumb:hover,
.prose-content::-webkit-scrollbar-thumb:hover {
background-color: rgba(156, 163, 175, 0.7) !important;
}
/* Tab content */
.tab-content {
position: relative;
display: flex;
flex-direction: column;
}
/* Input styles */
input[type="text"],
input[type="email"],
input[type="password"],
input[type="search"],
input[type="number"],
input[type="tel"],
input[type="url"],
textarea {
@apply bg-primary-50 dark:bg-primary-1000 text-gray-900 dark:text-gray-100
border-s-4 border-primary-200 rounded shadow-none;
@apply focus:border-primary-600 dark:focus:border-primary-400;
}
/* Table of Contents highlighting - improved contrast */
.toc-highlight {
@apply bg-primary-300 dark:bg-primary-700 border-s-4 border-primary-700
rounded dark:border-primary-300 font-medium text-gray-900
dark:text-gray-100;
transition: all 0.2s ease-in-out;
}
.toc-highlight:hover {
@apply bg-primary-300 dark:bg-primary-600;
}
/* Override prose first-line bold styling */
.prose p:first-line,
.prose-sm p:first-line,
.prose-invert p:first-line {
font-weight: normal !important;
}
/* Prevent first-line indentation in prose content */
.prose p,
.prose-sm p,
.prose-invert p {
text-indent: 0 !important;
}
/* Ensure embedded event content doesn't have unwanted indentation */
.embedded-event .prose p,
.embedded-event .prose-sm p,
.embedded-event .prose-invert p {
text-indent: 0 !important;
margin: 0 !important;
}
/* Prevent indentation for paragraphs with no-indent class */
.no-indent {
text-indent: 0 !important;
}
}
.icon-wiki {
font-size: 20px;
line-height: 20px;
vertical-align: text-bottom;
font-weight: 500;
}