-
-
Save m1r1c1/0c463f7731e5c1c88a8b24d69a1b448a to your computer and use it in GitHub Desktop.
Custom CSS to give linkding a dark, card-based layout
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Card-based layout for Linkding | |
| Large images, fully clickable | |
| Entire card selectable in bulk edit mode | |
| Tags moved to expandable sidebar | |
| 01/11/2026 - MRC - Modified using Claude AI | |
| to have CSS applied to Linkding 1.45. Also | |
| modified to use same card style layout but | |
| a little differently that meets my needs a | |
| little better. | |
| Author: Brett Terpstra (https://brettterpstra.com) | |
| GitHub: @ttscoff <https://github.com/ttscoff> | |
| Modified for updated Linkding version | |
| License: MIT | |
| */ | |
| body { | |
| --fbc-blue-60: #001219; | |
| --fbc-blue-70: #001219; | |
| background: #001219; | |
| margin-top: 0px; | |
| } | |
| :root { | |
| --primary-color: #94d2bd; | |
| --primary-text-color: #fff; | |
| --btn-primary-bg-color: #005f73; | |
| --btn-primary-hover-bg-color: #0a9396; | |
| --btn-primary-text-color: #fff; | |
| --btn-link-text-color: #94d2bd; | |
| --btn-link-hover-text-color: #0fd9de; | |
| --checkbox-checked-bg-color: #005f73; | |
| --checkbox-bg-color: rgba(0, 95, 115, 0.75); | |
| --tab-active-color: #94d2bd; | |
| --tab-highlight-color: #0a9396; | |
| --tab-hover-color: #0a9396; | |
| --focus-outline: #94d2bd; | |
| --input-border-color: #1e493a; | |
| --btn-border-color: #1e493a; | |
| } | |
| /* Logo */ | |
| a { | |
| color: #94d2bd; | |
| } | |
| .btn { | |
| color: #94d2bd; | |
| } | |
| .btn .btn-primary { | |
| background: #005f73; | |
| color: #94d2bd; | |
| } | |
| .btn .btn-primary:hover { | |
| color: #0a9396; | |
| } | |
| header h1 { | |
| transform: rotate(-5deg) translate(-7px, -13px); | |
| } | |
| header h1::after { | |
| color: #ca6702; | |
| content: " redux"; | |
| left: 0; | |
| opacity: 0.8; | |
| position: absolute; | |
| top: 1em; | |
| } | |
| /* Make header sticky */ | |
| header { | |
| position: sticky; | |
| top: 0; | |
| z-index: 100; | |
| background: #001219; | |
| padding-top: 20px; | |
| padding-bottom: 20px; | |
| margin-bottom: 0px; | |
| } | |
| /* Tag cloud styling */ | |
| .tag-cloud .unselected-tags a { | |
| border-radius: 15px; | |
| border: solid 1px rgba(0, 95, 115, 0.3); | |
| color: #005f73; | |
| display: inline-block; | |
| font-weight: 500; | |
| margin: 0 0 0.25em 0 !important; | |
| padding: 0 6px; | |
| } | |
| .tag-cloud .highlight-char { | |
| color: #0a9396; | |
| } | |
| .tag-cloud .unselected-tags a { | |
| transition: all 0.3s ease-in-out; | |
| } | |
| .tag-cloud .unselected-tags a:visited:hover, | |
| .tag-cloud .unselected-tags a:visited:focus { | |
| background: rgba(148, 210, 189, 0.8); | |
| box-shadow: 0 0 4px rgba(148, 210, 189, 0.35); | |
| text-decoration: none; | |
| transform: scale(1.1); | |
| transition: all 0.15s ease-in-out; | |
| } | |
| .tag-cloud .unselected-tags a:hover, | |
| .tag-cloud .unselected-tags a:focus { | |
| background: rgba(148, 210, 189, 0.8); | |
| box-shadow: 0 0 4px rgba(148, 210, 189, 0.35); | |
| text-decoration: none; | |
| transform: scale(1.1); | |
| transition: all 0.15s ease-in-out; | |
| } | |
| .tag-cloud a { | |
| font-weight: 500; | |
| } | |
| /* Bookmark cards */ | |
| ul.bookmark-list>li { | |
| background-color: rgba(0, 95, 115, 0.09); | |
| border-radius: 8px; | |
| border: solid 1px #333; | |
| display: block; | |
| gap: 0px 0px; | |
| margin: 0 10px 10px 0; | |
| min-width: 250px; | |
| overflow: hidden; | |
| padding: 210px 10px 10px 10px; | |
| position: relative; | |
| width: 100%; | |
| } | |
| ul.bookmark-list>li .title img + a::before { | |
| content: ""; | |
| display: block; | |
| height: 250px; | |
| left: -10px; | |
| position: absolute; | |
| top: -250px; | |
| width: 110%; | |
| z-index: 8; | |
| } | |
| ul.bookmark-list>li .preview-image { | |
| height: 200px; | |
| left: 0; | |
| position: absolute; | |
| top: 0; | |
| width: 100%; | |
| } | |
| ul.bookmark-list>li .title img { | |
| top: 10px; | |
| transition: transform 0.2s ease-in-out; | |
| } | |
| ul.bookmark-list>li .title:hover img { | |
| transform: translateY(-50%) scale(1.3); | |
| transition: transform 0.2s ease-in-out; | |
| } | |
| ul.bookmark-list>li .title a[data-tooltip]:focus::after, | |
| ul.bookmark-list>li .title a[data-tooltip]:hover::after { | |
| background: #005b7f; | |
| border-color: #005f73; | |
| } | |
| @media screen and (min-width: 770px) { | |
| ul.bookmark-list>li { | |
| width: 48%; | |
| } | |
| } | |
| @media screen and (min-width: 900px) { | |
| ul.bookmark-list>li { | |
| width: 32%; | |
| } | |
| } | |
| @media screen and (min-width: 1300px) { | |
| ul.bookmark-list>li { | |
| width: 24%; | |
| } | |
| } | |
| /* Make image clickable */ | |
| ul.bookmark-list { | |
| display: flex; | |
| flex-direction: row; | |
| flex-wrap: wrap; | |
| } | |
| ul.bookmark-list>li .title { | |
| background: 0; | |
| } | |
| ul.bookmark-list>li .content { | |
| display: block; | |
| height: 100%; | |
| max-width: 100%; | |
| padding-bottom: 70px; | |
| position: relative; | |
| width: 100%; | |
| } | |
| ul.bookmark-list>li .title a { | |
| width: 100%; | |
| color: #fff; | |
| } | |
| ul.bookmark-list>li .url-display, | |
| ul.bookmark-list>li .url-path { | |
| margin-bottom: 7.3em; | |
| color: #94d2bd; | |
| } | |
| /* Re-enable grid for bookmarks page to show sidebar */ | |
| .bookmarks-page.grid { | |
| display: grid !important; | |
| grid-template-columns: 1fr 250px !important; | |
| gap: 20px; | |
| max-width: 100%; | |
| } | |
| /* Force main content to take first column */ | |
| .bookmarks-page.grid > main.col-2 { | |
| grid-column: 1 !important; | |
| min-width: 0; /* Prevent grid overflow */ | |
| height: calc(100vh - 150px); | |
| overflow-y: auto; | |
| } | |
| /* Force sidebar to take second column */ | |
| .bookmarks-page.grid > div.side-panel.col-1 { | |
| grid-column: 2 !important; | |
| display: block !important; | |
| visibility: visible !important; | |
| opacity: 1 !important; | |
| background: rgba(0, 18, 25, 0.95); | |
| border-radius: 8px; | |
| border: solid 2px rgba(10, 147, 150, 0.85); | |
| padding: 20px; | |
| position: sticky; | |
| top: 100px; | |
| max-height: calc(100vh - 120px); | |
| overflow-y: auto; | |
| width: 250px !important; | |
| min-width: 250px !important; | |
| } | |
| /* Make section-header sticky within main */ | |
| .section-header { | |
| position: sticky; | |
| top: 0; | |
| z-index: 10; | |
| background: #001219; | |
| } | |
| /* Section headers in sidebar */ | |
| .bookmarks-page.grid div.side-panel h2, | |
| .bookmarks-page.grid div.side-panel h3 { | |
| color: #0a9396; | |
| font-size: var(--font-size-lg); | |
| margin-bottom: var(--unit-4); | |
| margin-top: 0; | |
| } | |
| .bookmarks-page.grid div.side-panel section { | |
| margin-bottom: var(--unit-8); | |
| } | |
| .bookmarks-page.grid div.side-panel section:last-child { | |
| margin-bottom: 0; | |
| } | |
| /* Bundle menu styling */ | |
| .bundle-menu { | |
| list-style-type: none; | |
| margin: 0 0 var(--unit-6); | |
| padding: 0; | |
| } | |
| .bundle-menu .bundle-menu-item { | |
| margin: 0; | |
| margin-bottom: var(--unit-2); | |
| } | |
| .bundle-menu .bundle-menu-item a { | |
| border-radius: 15px; | |
| padding: var(--unit-1) var(--unit-2); | |
| color: #005f73; | |
| border: solid 1px rgba(0, 95, 115, 0.3); | |
| display: block; | |
| text-decoration: none; | |
| transition: all 0.2s ease-in-out; | |
| font-weight: 500; | |
| } | |
| .bundle-menu .bundle-menu-item a:hover, | |
| .bundle-menu .bundle-menu-item a:focus { | |
| background: rgba(148, 210, 189, 0.8); | |
| box-shadow: 0 0 4px rgba(148, 210, 189, 0.35); | |
| text-decoration: none; | |
| transform: scale(1.05); | |
| } | |
| .bundle-menu .bundle-menu-item.selected a { | |
| background: #005f73; | |
| color: #94d2bd; | |
| border-color: #005f73; | |
| } | |
| /* Section headers in sidebar */ | |
| .bookmarks-page.grid .col-1 h2, | |
| .bookmarks-page.grid .col-1 h3 { | |
| color: #0a9396; | |
| font-size: var(--font-size-lg); | |
| margin-bottom: var(--unit-4); | |
| margin-top: 0; | |
| } | |
| .bookmarks-page.grid .col-1 section { | |
| margin-bottom: var(--unit-8); | |
| } | |
| .bookmarks-page.grid .col-1 section:last-child { | |
| margin-bottom: 0; | |
| } | |
| /* Other grid elements stay as block */ | |
| .grid:not(.bookmarks-page) { | |
| display: block; | |
| } | |
| .container { | |
| max-width: 100%; | |
| } | |
| /* Make entire card clickable in bulk edit mode */ | |
| ld-bookmark-page.active ul.bookmark-list>li .form-checkbox.bulk-edit-checkbox { | |
| cursor: pointer; | |
| height: 600px; | |
| left: -11px; | |
| top: -212px; | |
| transform: none; | |
| width: 109%; | |
| z-index: 10; | |
| } | |
| ul.bookmark-list>li .tags a:link, | |
| ul.bookmark-list>li .tags a:visited, | |
| ul.bookmark-list>li .tags a:hover, | |
| ul.bookmark-list>li .tags a:focus { | |
| background: rgba(148, 210, 189, 0.15); | |
| border-radius: 15px; | |
| color: #94d2bd; | |
| font-size: 90%; | |
| padding: 3px 6px; | |
| text-decoration: none; | |
| } | |
| a[data-turbo-frame="details-modal"] { | |
| clear: left; | |
| } | |
| ul.bookmark-list>li .tags { | |
| margin: 1em 0; | |
| } | |
| ul.bookmark-list>li .tags a:link, | |
| ul.bookmark-list>li .tags a:visited, | |
| ul.bookmark-list>li .tags a:hover, | |
| ul.bookmark-list>li .tags a:focus { | |
| background: #005f73; | |
| color: #94d2bd; | |
| transition: all 0.1s linear; | |
| } | |
| ul.bookmark-list>li .preview-image { | |
| border: 0; | |
| border-radius: 0; | |
| margin-top: 0; | |
| background: linear-gradient(0deg, #93d2bd 0%, #006275 100%); | |
| } | |
| ul.bookmark-list>li .preview-image.placeholder { | |
| background: linear-gradient(0deg, #93d2bd 0%, #006275 100%); | |
| } | |
| ul.bookmark-list>li .preview-image.placeholder .img { | |
| mask: 0; | |
| background-color: transparent; | |
| } | |
| ul.bookmark-list>li .description { | |
| color: #aaa; | |
| margin: 1em 0; | |
| } | |
| ul.bookmark-list>li .description.separate { | |
| -webkit-mask-image: linear-gradient(180deg, #000 60%, transparent); | |
| max-height: 4.3em; | |
| position: absolute; | |
| top: 3em; | |
| background: rgba(0, 18, 25, 0.7); | |
| padding: 5px; | |
| transition: all 0.2s linear; | |
| white-space: wrap; | |
| } | |
| ul.bookmark-list>li .description.separate:hover { | |
| -webkit-mask-image: linear-gradient(180deg, #000 60%, #000); | |
| max-height: 15em; | |
| transition: all 0.3s ease-in-out; | |
| z-index: 11; | |
| } | |
| ul.bookmark-list>li .actions, | |
| ul.bookmark-list>li .extra-actions { | |
| bottom: 0; | |
| display: block; | |
| left: 0; | |
| position: absolute; | |
| } | |
| ul.bookmark-list>li .actions { | |
| bottom: 0; | |
| height: 70px; | |
| margin-top: 10px; | |
| padding-top: 10px; | |
| position: absolute; | |
| width: 100%; | |
| } | |
| ul.bookmark-list>li .actions a { | |
| padding: 0 4px; | |
| } | |
| ul.bookmark-list>li .actions button.btn-link { | |
| padding: 0 4px; | |
| border: solid 1px rgba(153, 136, 87, 0.5); | |
| } | |
| /* Preview image */ | |
| /* Description */ | |
| /* Actions */ | |
| .extra-actions { | |
| clear: both; | |
| display: block; | |
| padding-top: 5px; | |
| width: 100%; | |
| } | |
| .actions span { | |
| display: none; | |
| } | |
| .extra-actions .btn { | |
| background: rgba(10, 147, 150, 0.5); | |
| } | |
| ul.bookmark-list>li .actions a { | |
| background-color: #005f73; | |
| border-radius: 4px; | |
| color: #94d2bd; | |
| float: left; | |
| margin: 0 4px 4px 0; | |
| padding: 0 4px; | |
| text-align: center; | |
| width: 50px; | |
| } | |
| ul.bookmark-list>li .actions a:first-of-type { | |
| background: 0; | |
| border: 0; | |
| bottom: 0; | |
| color: #005f73; | |
| margin: 0; | |
| padding: 0 4px 0 0; | |
| position: absolute; | |
| right: 0; | |
| width: auto; | |
| z-index: 10; | |
| } | |
| ul.bookmark-list>li .actions a:hover { | |
| background: #94d2bd; | |
| color: #005f73 !important; | |
| transition: all 0.1s linear; | |
| } | |
| ul.bookmark-list>li .actions button.btn-link { | |
| background: rgba(220, 41, 23, 0.25); | |
| border: solid 1px rgba(220, 41, 23, 0.5); | |
| color: #dc2917; | |
| opacity: 0.6; | |
| } | |
| ul.bookmark-list>li .actions button.btn-link:hover { | |
| opacity: 1; | |
| transition: all 0.1s linear; | |
| } | |
| ul.bookmark-list>li .actions a:first-of-type:hover { | |
| background-color: transparent; | |
| color: #94d2bd !important; | |
| transition: color 0.1s linear; | |
| } | |
| ul.bookmark-list>li .actions .extra-actions button.btn-link { | |
| background: 0; | |
| border: 0; | |
| color: #94d2bd; | |
| opacity: 0.5; | |
| padding: 0; | |
| } | |
| ul.bookmark-list>li .actions .extra-actions button.btn-link:hover, | |
| ul.bookmark-list>li .actions .extra-actions button.btn-link:focus { | |
| opacity: 1; | |
| } | |
| ul.bookmark-list>li .actions a { | |
| float: left; | |
| } | |
| .actions span.confirmation { | |
| margin-right: 4px; | |
| display: block; | |
| float: left; | |
| } | |
| .actions span.confirmation .btn { | |
| margin: 0 4px; | |
| margin: 0; | |
| position: relative; | |
| visibility: hidden; | |
| width: 22px; | |
| } | |
| .actions span.confirmation .btn::before { | |
| border-radius: 4px; | |
| border: solid 1px; | |
| color: #94d2bd; | |
| content: "\2713"; | |
| display: inline-block; | |
| font-size: 150%; | |
| font-weight: 600; | |
| height: 20px; | |
| left: 0; | |
| padding: 0; | |
| position: absolute; | |
| top: 0; | |
| visibility: visible; | |
| width: 20px; | |
| z-index: 1; | |
| } | |
| .actions span.confirmation .btn.mr-1::before { | |
| color: #ff2a15; | |
| content: "\00D7"; | |
| font-size: 180%; | |
| line-height: 0.65; | |
| } | |
| ul.bookmark-list>li .actions button.btn-link { | |
| float: left; | |
| margin-right: 4px; | |
| } | |
| /* pagination */ | |
| .bookmark-pagination.sticky { | |
| background: #001219; | |
| border: 0px; | |
| margin: 0px; | |
| padding: 0px; | |
| position: absolute; | |
| padding-bottom: 25px; | |
| } | |
| .bookmark-pagination.sticky::before { | |
| background: #001219; | |
| } | |
| /* notes */ | |
| ul.bookmark-list .notes { | |
| background: #333; | |
| bottom: 34px; | |
| display: block; | |
| height: 23px; | |
| max-height: 100%; | |
| overflow: hidden; | |
| position: absolute; | |
| right: 0; | |
| width: 44px; | |
| z-index: 1000; | |
| } | |
| ul.bookmark-list .notes::before { | |
| background: #333; | |
| border-radius: 4px; | |
| color: #888; | |
| content: "Note"; | |
| cursor: pointer; | |
| display: block; | |
| padding: 0 6px; | |
| position: absolute; | |
| right: 0; | |
| top: 1px; | |
| } | |
| ul.bookmark-list .notes:hover { | |
| width: 100%; | |
| height: auto; | |
| } | |
| ul.bookmark-list .notes:hover::before { | |
| display: none; | |
| } | |
| .header-controls { | |
| margin-right:15px; | |
| } | |
| /* Reduce card height when preview images are disabled/missing */ | |
| ul.bookmark-list>li:not(:has(.preview-image)) { | |
| padding: 10px !important; | |
| } | |
| /* Adjust title positioning when no preview image */ | |
| ul.bookmark-list>li:not(:has(.preview-image)) .title img + a::before { | |
| display: none; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment