diff --git a/src/themes/clean/assets/css/cardinal.css b/src/themes/clean/assets/css/cardinal.css index 70b8a14c14..b132ab7c33 100644 --- a/src/themes/clean/assets/css/cardinal.css +++ b/src/themes/clean/assets/css/cardinal.css @@ -4,4 +4,95 @@ --brand-secondary: #c05555; --text-link-alt: #7c2d2d; --focus-shadow: #5a1515; + --color-success: #5cb85c; + /* Highlight color (shared across themes) */ + --highlight-color: #FFEB3B; + + /* Text Colors */ + /* Must pass WCAG color contrast at --recede-opacity */ + --text-primary: #212529; + --text-muted: #747474; + --text-on-dark: white; + --text-link: var(--body-text); + --text-black: #000; + --text-white: #fff; + --text-header: var(--text-black); + --body-text: #525252; + --nav-text: #636363; + --nav-text-active: var(--brand-primary); + --recede-opacity: 70%; + + /* Link Decoration */ + --link-decoration: underline; + --link-decoration-hover: underline; + --nav-link-decoration: none; + --nav-link-decoration-hover: underline; + --dropdown-item-decoration: none; + --dropdown-item-decoration-hover: underline; + --link-hover-color: var(--brand-primary); + --link-transition: color 0.2s ease; + + /* Background Colors */ + --bg-body: #fff; + --bg-content: white; + --bg-footer: #FCFCFC; + --bg-card-alt: #f8f9fa; + --bg-blockquote: #F0F0F0; + --bg-overlay: rgba(55, 55, 55, 0.8); + + /* UI State Colors */ + --color-success: green; + --color-danger: darkred; + + /* Border Colors */ + --border-light: #e5e5e5; + --border-medium: #6c757d; + --border-gray-200: rgb(229, 231, 235); + + /* Header & Navigation */ + --header-bg: var(--brand-primary); + --bg-nav: #fefeff; + + /* Button Colors */ + --btn-primary-bg: var(--brand-primary); + --btn-primary-border: var(--brand-primary); + --btn-primary-text: white; + --btn-outline-secondary: #6c757d; + + /* Focus & Accessibility */ + --focus-outline: #F9F9F9; + --focus-ring-size: 4px; + + /* Typography */ + --main-font: Geist, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Spacing */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 15px; + --spacing-lg: 20px; + --spacing-xl: 30px; + + /* Sizes */ + --border-radius: 3px; + --border-radius-lg: 2rem; + --header-height: 120px; + --footer-height: 70px; + --card-image-height: 250px; + --carousel-min-height: 500px; + --icon-size: 16px; + + /* Transitions */ + --transition-standard: all 1s ease; + + /* Pagination Colors - Light Mode */ + --pagination-color: var(--body-text); + --pagination-bg: var(--bg-content); + --pagination-border: var(--border-light); + --pagination-hover-color: var(--brand-primary); + --pagination-hover-bg: var(--bg-card-alt); + --pagination-active-color: var(--btn-primary-text); + --pagination-active-bg: var(--btn-primary-bg); + --pagination-active-border: var(--btn-primary-border); + --pagination-disabled-color: var(--text-muted); } \ No newline at end of file diff --git a/src/themes/clean/assets/css/clean.css b/src/themes/clean/assets/css/clean.css index cd2b1792d0..f093c0c9c3 100644 --- a/src/themes/clean/assets/css/clean.css +++ b/src/themes/clean/assets/css/clean.css @@ -2,85 +2,10 @@ /* Palette Selection - Use only one palette */ @import url('/static/clean/css/evergreen.css'); +/* @import url('/static/clean/css/evergreen.css'); */ /* @import url('/static/clean/css/ocean.css'); */ /* @import url('/static/clean/css/cardinal.css'); */ -:root { - /* Highlight color (shared across themes) */ - --highlight-color: #FFEB3B; - - /* Text Colors */ - --text-primary: #212529; - --text-muted: #4a4a4a; - --text-on-dark: white; - --text-link: var(--body-text); - --text-black: #000; - --text-white: #fff; - --text-header: var(--text-black); - --body-text: oklch(0.556 0 0); - --nav-text: #636363; - --nav-text-active: var(--brand-primary); - - /* Link Decoration */ - --link-decoration: underline; - --link-decoration-hover: underline; - --nav-link-decoration: none; - --nav-link-decoration-hover: underline; - --link-hover-color: var(--brand-primary); - --link-transition: color 0.2s ease; - - /* Background Colors */ - --bg-body: #fff; - --bg-content: white; - --bg-footer: #FCFCFC; - --bg-card-alt: #f8f9fa; - --bg-blockquote: #F0F0F0; - --bg-overlay: rgba(55, 55, 55, 0.8); - - /* UI State Colors */ - --color-success: green; - --color-danger: darkred; - - /* Border Colors */ - --border-light: #e5e5e5; - --border-medium: #6c757d; - --border-gray-200: rgb(229, 231, 235); - - /* Header & Navigation */ - --header-bg: var(--brand-primary); - --bg-nav: #fefeff; - - /* Button Colors */ - --btn-primary-bg: var(--brand-primary); - --btn-primary-border: var(--brand-primary); - --btn-primary-text: white; - - /* Focus & Accessibility */ - --focus-outline: #F9F9F9; - --focus-ring-size: 4px; - - /* Typography */ - --main-font: Geist, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; - - /* Spacing */ - --spacing-xs: 4px; - --spacing-sm: 8px; - --spacing-md: 15px; - --spacing-lg: 20px; - --spacing-xl: 30px; - - /* Sizes */ - --border-radius: 3px; - --border-radius-lg: 2rem; - --header-height: 120px; - --card-image-height: 250px; - --carousel-min-height: 500px; - --icon-size: 16px; - - /* Transitions */ - --transition-standard: all 1s ease; -} - /* ======================================================================== Base Styles ======================================================================== */ @@ -141,6 +66,10 @@ h6 { font-size: 0.875rem; } line-height: 1.2; } +.text-muted { + color: var(--text-muted) !important; +} + /* ======================================================================== Layout Components ======================================================================== */ @@ -185,7 +114,9 @@ main a { } .navbar-custom .navbar-nav .nav-link, -.navbar-custom .nav-link.dropdown-toggle { +.navbar-custom .nav-link.dropdown-toggle, +.navbar-dark.navbar-custom .navbar-nav .nav-link, +.navbar-dark.navbar-custom .nav-link.dropdown-toggle { color: var(--nav-text); text-decoration: var(--nav-link-decoration); } @@ -193,13 +124,21 @@ main a { .navbar-custom .navbar-nav .nav-link:hover, .navbar-custom .navbar-nav .nav-link:focus, .navbar-custom .nav-link.dropdown-toggle:hover, -.navbar-custom .nav-link.dropdown-toggle:focus { +.navbar-custom .nav-link.dropdown-toggle:focus, +.navbar-dark.navbar-custom .navbar-nav .nav-link:hover, +.navbar-dark.navbar-custom .navbar-nav .nav-link:focus, +.navbar-dark.navbar-custom .nav-link.dropdown-toggle:hover, +.navbar-dark.navbar-custom .nav-link.dropdown-toggle:focus { text-decoration: var(--nav-link-decoration-hover); + color: var(--nav-text-active); } .navbar-custom .nav-item.active .nav-link, .navbar-custom .nav-item:hover .nav-link, -.navbar-custom .nav-item:focus-visible .nav-link { +.navbar-custom .nav-item:focus-visible .nav-link, +.navbar-dark.navbar-custom .nav-item.active .nav-link, +.navbar-dark.navbar-custom .nav-item:hover .nav-link, +.navbar-dark.navbar-custom .nav-item:focus-visible .nav-link { color: var(--nav-text-active); } @@ -217,6 +156,31 @@ main a { margin-top: -0.1em; } +/* Dropdown menu container */ +.dropdown-menu { + padding: var(--focus-ring-size); + background-color: var(--bg-content); + border: 1px solid var(--border-light); +} + +/* Dropdown item styles - standardized with nav-link behavior */ +.dropdown-item { + color: var(--nav-text); + text-decoration: var(--dropdown-item-decoration); + transition: var(--link-transition); +} + +.dropdown-item:hover, +.dropdown-item:focus { + color: var(--nav-text-active); + text-decoration: var(--dropdown-item-decoration-hover); + background-color: var(--bg-card-alt); +} + +.dropdown-divider { + border-top-color: var(--border-light); +} + /* ======================================================================== Cards ======================================================================== */ @@ -228,6 +192,7 @@ main a { border-radius: 8px; border: 1px solid rgba(0, 0, 0, 0.06); transition: box-shadow 0.3s ease; + background-color: var(--bg-content); } .card:hover { @@ -326,7 +291,6 @@ main a { color: var(--btn-primary-text); background-color: var(--btn-primary-bg); border-color: var(--btn-primary-border); - transition: var(--transition-standard); } .btn-background, @@ -337,6 +301,7 @@ main a { border: 1px solid var(--brand-primary); padding: 0 10px; min-width: 7rem; + min-height: 2rem; white-space: nowrap; vertical-align: middle; line-height: 1; @@ -373,6 +338,28 @@ a.btn { border: 1px black solid; } +.alert .close { + color: var(--color-danger); + opacity: var(--recede-opacity); +} + +.btn-outline-secondary { + color: var(--btn-outline-secondary); + border-color: var(--btn-outline-secondary); + background-color: transparent; +} + +.btn-outline-secondary:hover, +.btn-outline-secondary:focus { + color: var(--brand-primary); + background-color: transparent; + border-color: var(--brand-primary); +} + +.btn-outline-secondary:focus { + box-shadow: 0 0 0 var(--focus-ring-size) rgba(167, 172, 177, 0.25); +} + /* ======================================================================== Carousel ======================================================================== */ @@ -408,7 +395,7 @@ a.btn { left: 0; right: 0; bottom: 0; - background: linear-gradient(transparent, rgba(0, 0, 0, 0.7)); + background: linear-gradient(transparent, rgba(0, 0, 0, var(--recede-opacity)) 20%); padding: 2rem; text-align: center; } @@ -432,6 +419,7 @@ a.btn { .carousel-control-next, .carousel-control-prev { top: 40px; + opacity: var(--recede-opacity); } #carousel-buttons { @@ -449,7 +437,7 @@ a.btn { margin-bottom: 0.25rem; font-weight: 500; line-height: 1.3; - color: var(--text-header); + color: var(--text-white); } .article-thumbnail { @@ -564,6 +552,45 @@ a.btn { padding-bottom: var(--spacing-sm); } +#reading-options{ + display: flex; + gap: 1rem; + margin: 0; + padding: 9px; + justify-content: flex-end; + min-height: fit-content; + box-sizing: border-box; + position: sticky; + top: 0; + z-index: 1000; + width: fit-content; + margin-left: auto; + background-color: var(--bg-body); +} + +.btn-opt { + border: 1px solid #1C304A; + background: #f1f1f1; +} + +.dyslexia-friendly { + font-family: Verdana !important; + color: #4c4c4c; + background-color: #F5F5DC; +} + +.dyslexia-friendly em, +.dyslexia-friendly i { + background-color: #FAFAC8; + font-style: normal; +} + +.dyslexia-friendly a { + font-family: inherit; + color: inherit; + text-decoration: underline; +} + /* ======================================================================== Thumbnail Styles ======================================================================== */ @@ -695,7 +722,6 @@ a.btn { margin-bottom: 0.25rem; font-size: 0.9rem; color: var(--text-muted); - opacity: 0.8; } .search-results .article-item, @@ -708,6 +734,11 @@ section[aria-label*="Results"] .article-item { margin-bottom: 1.5rem; } +.sticky-top { + max-height: 100vh; + overflow-y: auto; +} + /* ======================================================================== Footer ======================================================================== */ @@ -727,9 +758,11 @@ section[aria-label*="Results"] .article-item { margin-bottom: 0; } -footer svg { - height: 100px; - width: 100%; +footer svg, +footer img, +footer .img-fluid{ + max-height: var(--footer-height); + max-width: 100%; } header svg { @@ -765,6 +798,33 @@ header svg { border-bottom-left-radius: .25rem; } +.input-group { + align-items: stretch; +} + +.input-group .custom-select, +.input-group .input-group-text { + height: 2.5rem; + display: flex; + align-items: center; +} + +.input-group{ + display: flex; + flex-wrap: nowrap; +} + +.input-group > input { + flex: 1; + min-width: 0; +} + +.input-group > input.group-append{ + flex-shrink: 0; + align-items: center; + display: flex; +} + .input-group .btn { margin: 0; height: 100%; @@ -839,9 +899,12 @@ span + .btn-background { transition: background-color 2s ease-out; } -.sticky-top { - max-height: 100vh; - overflow-y: auto; +.sticky-toc { + position: sticky; + max-height: 100vh; + overflow-y: auto; + top: 60px; + z-index: 999; } .table-caption { @@ -870,6 +933,21 @@ span + .btn-background { display: inline-block; } +.icon-recede{ + opacity: var(--recede-opacity); +} + +.superscript-icon { + vertical-align: super; + font-size: 0.7em !important; +} + +.pad-icon { + padding-left: 0.4rem; + padding-right: 0.4rem; +} + + /* ======================================================================== Lists ======================================================================== */ @@ -946,14 +1024,63 @@ span + .btn-background { border-radius: var(--border-radius-lg); } -.page-link, +.pagination { + display: flex; + padding-left: 0; + list-style: none; + gap: 4px; +} + +.page-item { + margin: 0; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + color: var(--pagination-color); + background-color: var(--pagination-bg); + border: 1px solid var(--pagination-border); + border-radius: var(--border-radius); + transition: var(--link-transition); + cursor: pointer; + text-decoration: none; +} + .page-link:hover, .page-link:focus { - color: var(--text-link); + color: var(--pagination-hover-color); + background-color: var(--pagination-hover-bg); + border-color: var(--border-medium); +} + +.page-link:focus { + z-index: 2; + outline: 2px solid var(--focus-outline); + outline-offset: 2px; } .page-item.active .page-link { - background-color: var(--text-link); + color: var(--pagination-active-color); + background-color: var(--pagination-active-bg); + border-color: var(--pagination-active-border); + font-weight: 600; +} + +.page-item.active .page-link:hover { + background-color: var(--pagination-active-bg); + border-color: var(--pagination-active-border); +} + +.page-link[disabled], +.page-link:disabled { + color: var(--pagination-disabled-color); + pointer-events: none; + background-color: transparent; + border-color: var(--pagination-border); + cursor: not-allowed; + opacity: 0.6; } /* ======================================================================== @@ -991,11 +1118,11 @@ span + .btn-background { /* ======================================================================== Accessibility & Skip Navigation ======================================================================== */ -.skipnav { +.skip-container { text-align: left; } -.skipnav a { +.skip-container a { position: absolute; left: -10000px; width: 1px; @@ -1004,8 +1131,8 @@ span + .btn-background { color: var(--text-link); } -.skipnav a:focus, -.skipnav a:active { +.skip-container a:focus, +.skip-container a:active { position: static; left: 0; width: auto; @@ -1034,6 +1161,8 @@ p a, span a, li a { .article-block a, .site-header a, .site-footer a, +.article-item a, +.carousel-caption a, p a, li a { display: inline-block; @@ -1082,6 +1211,7 @@ main a:focus-visible, #lightbox a:focus-visible, .navbar-custom .nav-link:focus-visible, .navbar-custom .navbar-brand:focus-visible, +.navbar-dark.navbar-custom .nav-link:focus-visible, .btn:focus-visible, .btn-primary:focus-visible, .btn-secondary:focus-visible, @@ -1105,12 +1235,21 @@ input[type="submit"]:focus-visible, .form-control.is-valid:focus-visible, .form-control.is-invalid:focus-visible, textarea.tinymce:focus-visible, -.custom-select:focus-visible { +.custom-select:focus-visible, +.modal-sticky-close:focus-visible { outline: 2px var(--focus-outline) solid; outline-offset: 0; box-shadow: 0 0 0 var(--focus-ring-size) var(--focus-shadow); } +.carousel-control-next:focus-visible, +.carousel-control-prev:focus-visible{ + outline: 2px var(--focus-outline) solid; + outline-offset: 0; + box-shadow: 0 0 0 var(--focus-ring-size) var(--focus-shadow); + opacity: 1; +} + /* ======================================================================== Media Queries ======================================================================== */ @@ -1154,6 +1293,19 @@ textarea.tinymce:focus-visible, } } +@media (min-width: 768px) { + .row { + display: flex; + flex-direction: row; + } + .journal-container { + order: 1; + } + .col-lg-4.col-md-2 { + order: 2; + } +} + /* ======================================================================== Issue Cards - Horizontal Layout ======================================================================== */ @@ -1166,7 +1318,7 @@ textarea.tinymce:focus-visible, } .issue-card { - background: white; + background: var(--bg-content); border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); border: 1px solid rgba(0, 0, 0, 0.06); @@ -1347,4 +1499,4 @@ textarea.tinymce:focus-visible, width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; -} \ No newline at end of file +} diff --git a/src/themes/clean/assets/css/evergreen.css b/src/themes/clean/assets/css/evergreen.css index ccb1ac0e27..a12a25c8d3 100644 --- a/src/themes/clean/assets/css/evergreen.css +++ b/src/themes/clean/assets/css/evergreen.css @@ -4,4 +4,95 @@ --brand-secondary: #4F637D; --text-link-alt: #00688B; --focus-shadow: #193146; + --color-success: #5cb85c; + /* Highlight color (shared across themes) */ + --highlight-color: #FFEB3B; + + /* Text Colors */ + /* Must pass WCAG color contrast at --recede-opacity */ + --text-primary: #212529; + --text-muted: #747474; + --text-on-dark: white; + --text-link: var(--body-text); + --text-black: #000; + --text-white: #fff; + --text-header: var(--text-black); + --body-text: #525252; + --nav-text: #636363; + --nav-text-active: var(--brand-primary); + --recede-opacity: 70%; + + /* Link Decoration */ + --link-decoration: underline; + --link-decoration-hover: underline; + --nav-link-decoration: none; + --nav-link-decoration-hover: underline; + --dropdown-item-decoration: none; + --dropdown-item-decoration-hover: underline; + --link-hover-color: var(--brand-primary); + --link-transition: color 0.2s ease; + + /* Background Colors */ + --bg-body: #fff; + --bg-content: white; + --bg-footer: #FCFCFC; + --bg-card-alt: #f8f9fa; + --bg-blockquote: #F0F0F0; + --bg-overlay: rgba(55, 55, 55, 0.8); + + /* UI State Colors */ + --color-success: green; + --color-danger: darkred; + + /* Border Colors */ + --border-light: #e5e5e5; + --border-medium: #6c757d; + --border-gray-200: rgb(229, 231, 235); + + /* Header & Navigation */ + --header-bg: var(--brand-primary); + --bg-nav: #fefeff; + + /* Button Colors */ + --btn-primary-bg: var(--brand-primary); + --btn-primary-border: var(--brand-primary); + --btn-primary-text: white; + --btn-outline-secondary: #6c757d; + + /* Focus & Accessibility */ + --focus-outline: #F9F9F9; + --focus-ring-size: 4px; + + /* Typography */ + --main-font: Geist, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Spacing */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 15px; + --spacing-lg: 20px; + --spacing-xl: 30px; + + /* Sizes */ + --border-radius: 3px; + --border-radius-lg: 2rem; + --header-height: 120px; + --footer-height: 70px; + --card-image-height: 250px; + --carousel-min-height: 500px; + --icon-size: 16px; + + /* Transitions */ + --transition-standard: all 1s ease; + + /* Pagination Colors - Light Mode */ + --pagination-color: var(--body-text); + --pagination-bg: var(--bg-content); + --pagination-border: var(--border-light); + --pagination-hover-color: var(--brand-primary); + --pagination-hover-bg: var(--bg-card-alt); + --pagination-active-color: var(--btn-primary-text); + --pagination-active-bg: var(--btn-primary-bg); + --pagination-active-border: var(--btn-primary-border); + --pagination-disabled-color: var(--text-muted); } \ No newline at end of file diff --git a/src/themes/clean/assets/css/midnight.css b/src/themes/clean/assets/css/midnight.css new file mode 100644 index 0000000000..4ad24d9508 --- /dev/null +++ b/src/themes/clean/assets/css/midnight.css @@ -0,0 +1,95 @@ +:root { + /* Brand & Theme Colors */ + --brand-primary: #0a0f1a; + --brand-secondary: #7eb3ff; + --color-success: #5cb85c; + --text-link-alt: #6ba3ff; + --focus-shadow: #2563a8; + --highlight-color: #ffd93d; + + /* Text Colors */ + --text-primary: #e4e6eb; + --text-muted: #b0b3b8; + --text-on-dark: white; + --text-link: #9bb1d4; + --text-black: #e4e6eb; + --text-white: #0a0f1a; + --text-header: #ffffff; + --body-text: #e4e6eb; + --nav-text: #b0b3b8; + --nav-text-active: #4d9fff; + --recede-opacity: 70%; + + /* Link Decoration */ + --link-decoration: underline; + --link-decoration-hover: underline; + --nav-link-decoration: none; + --nav-link-decoration-hover: underline; + --link-hover-color: #4d9fff; + --link-transition: color 0.2s ease; + --dropdown-item-decoration: none; + --dropdown-item-decoration-hover: underline; + + /* Background Colors */ + --bg-body: #0a0f1a; + --bg-content: #151b2b; + --bg-footer: #0d1219; + --bg-card-alt: #1a2235; + --bg-blockquote: #1a2235; + --bg-overlay: rgba(10, 15, 26, 0.9); + + /* UI State Colors */ + --color-danger: #ff6b6b; + + /* Border Colors */ + --border-light: #2d3748; + --border-medium: #4a5568; + --border-gray-200: #2d3748; + + /* Header & Navigation */ + --header-bg: #0a0f1a; + --bg-nav: #0d1219; + + /* Button Colors */ + --btn-primary-bg: #4d9fff; + --btn-primary-border: #4d9fff; + --btn-primary-text: #0a0f1a; + --btn-outline-secondary: #a7acb1; + + /* Focus & Accessibility */ + --focus-outline: #4d9fff; + --focus-ring-size: 4px; + + /* Typography */ + --main-font: Geist, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Spacing */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 15px; + --spacing-lg: 20px; + --spacing-xl: 30px; + + /* Sizes */ + --border-radius: 3px; + --border-radius-lg: 2rem; + --header-height: 120px; + --footer-height: 70px; + --card-image-height: 250px; + --carousel-min-height: 500px; + --icon-size: 16px; + + /* Transitions */ + --transition-standard: all 1s ease; + + /* Pagination Colors - Dark Mode */ + --pagination-color: #a7acb1; + --pagination-bg: transparent; + --pagination-border: var(--border-light); + --pagination-hover-color: var(--text-on-dark); + --pagination-hover-bg: var(--bg-card-alt); + --pagination-active-color: var(--btn-primary-text); + --pagination-active-bg: var(--btn-primary-bg); + --pagination-active-border: var(--btn-primary-border); + --pagination-disabled-color: var(--text-muted); +} diff --git a/src/themes/clean/assets/css/ocean.css b/src/themes/clean/assets/css/ocean.css index 2e1061d894..27ec91358d 100644 --- a/src/themes/clean/assets/css/ocean.css +++ b/src/themes/clean/assets/css/ocean.css @@ -4,4 +4,95 @@ --brand-secondary: #5a7a9e; --text-link-alt: #2563a8; --focus-shadow: #2a4a6e; + --color-success: #5cb85c; + /* Highlight color (shared across themes) */ + --highlight-color: #FFEB3B; + + /* Text Colors */ + /* Must pass WCAG color contrast at --recede-opacity */ + --text-primary: #212529; + --text-muted: #747474; + --text-on-dark: white; + --text-link: var(--body-text); + --text-black: #000; + --text-white: #fff; + --text-header: var(--text-black); + --body-text: #525252; + --nav-text: #636363; + --nav-text-active: var(--brand-primary); + --recede-opacity: 70%; + + /* Link Decoration */ + --link-decoration: underline; + --link-decoration-hover: underline; + --nav-link-decoration: none; + --nav-link-decoration-hover: underline; + --dropdown-item-decoration: none; + --dropdown-item-decoration-hover: underline; + --link-hover-color: var(--brand-primary); + --link-transition: color 0.2s ease; + + /* Background Colors */ + --bg-body: #fff; + --bg-content: white; + --bg-footer: #FCFCFC; + --bg-card-alt: #f8f9fa; + --bg-blockquote: #F0F0F0; + --bg-overlay: rgba(55, 55, 55, 0.8); + + /* UI State Colors */ + --color-success: green; + --color-danger: darkred; + + /* Border Colors */ + --border-light: #e5e5e5; + --border-medium: #6c757d; + --border-gray-200: rgb(229, 231, 235); + + /* Header & Navigation */ + --header-bg: var(--brand-primary); + --bg-nav: #fefeff; + + /* Button Colors */ + --btn-primary-bg: var(--brand-primary); + --btn-primary-border: var(--brand-primary); + --btn-primary-text: white; + --btn-outline-secondary: #6c757d; + + /* Focus & Accessibility */ + --focus-outline: #F9F9F9; + --focus-ring-size: 4px; + + /* Typography */ + --main-font: Geist, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Spacing */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 15px; + --spacing-lg: 20px; + --spacing-xl: 30px; + + /* Sizes */ + --border-radius: 3px; + --border-radius-lg: 2rem; + --header-height: 120px; + --footer-height: 70px; + --card-image-height: 250px; + --carousel-min-height: 500px; + --icon-size: 16px; + + /* Transitions */ + --transition-standard: all 1s ease; + + /* Pagination Colors - Light Mode */ + --pagination-color: var(--body-text); + --pagination-bg: var(--bg-content); + --pagination-border: var(--border-light); + --pagination-hover-color: var(--brand-primary); + --pagination-hover-bg: var(--bg-card-alt); + --pagination-active-color: var(--btn-primary-text); + --pagination-active-bg: var(--btn-primary-bg); + --pagination-active-border: var(--btn-primary-border); + --pagination-disabled-color: var(--text-muted); } \ No newline at end of file diff --git a/src/themes/clean/build_assets.py b/src/themes/clean/build_assets.py index 9f4c4a14a6..93dbbaa01b 100644 --- a/src/themes/clean/build_assets.py +++ b/src/themes/clean/build_assets.py @@ -12,11 +12,8 @@ def copy_file(source, destination): :param destination: The destination folder for the file :return: """ - destination_folder = os.path.join(settings.BASE_DIR, os.path.dirname(destination)) - - if not os.path.exists(destination_folder): - os.mkdir(destination_folder) + os.makedirs(destination_folder, exist_ok=True) shutil.copy( os.path.join(settings.BASE_DIR, source), @@ -26,7 +23,7 @@ def copy_file(source, destination): def create_paths(): base_path = os.path.join(settings.BASE_DIR, "static", "clean") - folders = ["css"] + folders = ["css", "js"] for folder in folders: os.makedirs(os.path.join(base_path, folder), exist_ok=True) @@ -38,45 +35,42 @@ def process_journals(): for journal in journals: for file in journal.scss_files: if file.endswith("clean_override.css"): - print( - "Copying clean override file for {name}".format(name=journal.name) - ) - override_css_dir = os.path.join( - settings.BASE_DIR, "static", "clean", "css" - ) + print(f"Copying clean override file for {journal.name}") + override_css_file = os.path.join( - override_css_dir, "journal{0}_override.css".format(str(journal.id)) + settings.BASE_DIR, + "static", + "clean", + "css", + f"journal{journal.id}_override.css" ) - # test if the journal CSS directory exists and create it if not - os.makedirs(override_css_dir, exist_ok=True) - - # copy file to static copy_file(file, override_css_file) +def copy_theme_files(): + """Copy theme CSS and JS files to static directory.""" + theme_files = [ + ("css", "clean.css"), + ("css", "evergreen.css"), + ("css", "ocean.css"), + ("css", "cardinal.css"), + ("css", "midnight.css"), + ("js", "tooltip-init.js"), + ] + + for file_type, filename in theme_files: + source = os.path.join("themes", "clean", "assets", file_type, filename) + destination = os.path.join("static", "clean", file_type, filename) + copy_file(source, destination) + + def build(): print("Creating folders") create_paths() - print("Copying CSS") - copy_file( - "themes/clean/assets/css/clean.css", - "static/clean/css/clean.css", - ) - copy_file( - "themes/clean/assets/css/evergreen.css", - "static/clean/css/evergreen.css", - ) - copy_file( - "themes/clean/assets/css/ocean.css", - "static/clean/css/ocean.css", - ) - copy_file( - "themes/clean/assets/css/cardinal.css", - "static/clean/css/cardinal.css", - ) - copy_file( - "themes/clean/assets/js/tooltip-init.js", - "static/clean/js/tooltip-init.js", - ) - process_journals() + + print("Copying theme files") + copy_theme_files() + + print("Processing journal overrides") + process_journals() \ No newline at end of file diff --git a/src/themes/clean/templates/cms/page.html b/src/themes/clean/templates/cms/page.html index a4b3b04be7..3254de5ffc 100644 --- a/src/themes/clean/templates/cms/page.html +++ b/src/themes/clean/templates/cms/page.html @@ -15,12 +15,16 @@
{{ contact.role }}
+{% trans "All fields are required." %}