diff --git a/assets/css/brand-palette.css b/assets/css/brand-palette.css new file mode 100644 index 0000000..142bdc6 --- /dev/null +++ b/assets/css/brand-palette.css @@ -0,0 +1,70 @@ +/* OpenMS brand palette — load before other site CSS (filename sorts first) */ +:root { + --fontFamily: "{{ .Site.Params.font.name | default "Montserrat" }}", system-ui, -apple-system, + "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + --openms-font-heading: var(--fontFamily); + --openms-font-body: "{{ .Site.Params.bodyFont.name | default "Raleway" }}", system-ui, -apple-system, + "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + + /* Primary headings — Montserrat (pt) */ + --openms-heading-xl-size: 26pt; + --openms-heading-xl-weight: 800; + --openms-heading-lg-size: 20pt; + --openms-heading-lg-weight: 700; + + /* Body & secondary headings — Raleway (pt) */ + --openms-text-min: 11pt; + --openms-body-size: 12pt; + --openms-body-size-lg: 14pt; + --openms-secondary-heading-size: 14pt; + --openms-secondary-heading-size-lg: 16pt; + --openms-presentation-size: 18pt; + --openms-body-weight: 400; + --openms-secondary-heading-weight: 400; + + /* Quotes, callouts & emphasis — JetBrains Mono thin */ + --openms-font-mono: "{{ .Site.Params.monoFont.name | default "JetBrains Mono" }}", ui-monospace, + "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace; + --openms-mono-weight: 100; + + --openms-yellow: #ffcb4f; + --openms-orange: #ff7501; + --openms-pink: #ff03cb; + --openms-purple: #b503ff; + --openms-blue: #3157e9; + --openms-navy: #0c2171; + --openms-dark: #231f20; + --openms-grey: #c2babc; + --openms-white: #ffffff; + + --openms-yellow-rgb: 255, 203, 79; + --openms-orange-rgb: 255, 117, 1; + --openms-pink-rgb: 255, 3, 203; + --openms-purple-rgb: 181, 3, 255; + --openms-blue-rgb: 49, 87, 233; + --openms-navy-rgb: 12, 33, 113; + --openms-dark-rgb: 35, 31, 32; + --openms-grey-rgb: 194, 186, 188; + --openms-white-rgb: 255, 255, 255; + + --colorPrimaryDark: var(--openms-blue); + --colorPrimaryDarkBtn: var(--openms-orange); + --colorPrimary: var(--openms-blue); + --colorPrimaryLight: var(--openms-purple); + --colorSecondaryDark: var(--openms-dark); + --colorSecondary: var(--openms-grey); + --colorSecondaryLight: var(--openms-white); + --colorHeading: var(--openms-dark); + --colorHighlight: var(--openms-yellow); + --colorShadow: rgba(var(--openms-dark-rgb), 0.1); + --colorContentLink: var(--openms-blue); + --colorIcon: var(--openms-blue); + --colorNoteHeading: var(--openms-blue); + --colorNoteContent: var(--openms-grey); + --colorInfoHeading: var(--openms-orange); + --colorInfoContent: var(--openms-grey); + --colorWarningHeading: var(--openms-pink); + --colorWarningContent: var(--openms-grey); + --colorTipHeading: var(--openms-purple); + --colorTipContent: var(--openms-grey); +} diff --git a/assets/css/casestudies.css b/assets/css/casestudies.css index dc35cac..e7a084a 100644 --- a/assets/css/casestudies.css +++ b/assets/css/casestudies.css @@ -4,14 +4,12 @@ .casestudies a:hover { text-decoration: none; - color:black + color: var(--openms-dark); } .casestudies-title { display: flex; justify-content: center; - letter-spacing: 1.5px; - font-size: 27px; } .casestudies-box-container { @@ -29,7 +27,7 @@ } .casestudies a { - color: rgb(1, 50, 67) !important; + color: var(--openms-blue) !important; } .casestudies-box-title { @@ -40,7 +38,7 @@ .casestudies-box-text { margin: 30px 15px; - font-size: 14px; + font-size: var(--openms-body-size-lg); } @media only screen and (max-width: 1300px) { @@ -62,7 +60,7 @@ -webkit-transform: perspective(1px) translateZ(0); transform: perspective(1px) translateZ(0); /* Black, with 10% opacity */ - box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1); + box-shadow: 0px 8px 15px rgba(var(--openms-dark-rgb), 0.1); position: relative; overflow: hidden; } @@ -74,7 +72,7 @@ left: 0; right: 100%; bottom: 0; - background: rgb(1, 50, 67); + background: var(--openms-blue); height: 4px; -webkit-transition-property: right; transition-property: right; diff --git a/assets/css/content_override.css b/assets/css/content_override.css index e719ef7..cc1bba2 100644 --- a/assets/css/content_override.css +++ b/assets/css/content_override.css @@ -1,43 +1,16 @@ .content-container .divider { - background: #1e0010; -} - -.content-container h1 { - font-size: 2em; - text-transform: uppercase; - letter-spacing: 1.5px; - font-weight: bold; -} - -.content-container h2 { - font-size: 2em; - text-transform: uppercase; - letter-spacing: 1.5px; - font-weight: bold; + background: var(--openms-dark); } .content-container h3 { - font-size: 1.5em; - text-transform: uppercase; - letter-spacing: 1.3px; - font-weight: bold; - margin-top: 25px; + margin-top: 1.5rem; } .content-container h4 { - text-transform: uppercase; - font-weight: bold; - margin-top: 40px; - margin-bottom: -10px; + margin-top: 2.5rem; + margin-bottom: -0.625rem; } .content-container h5 { - text-transform: uppercase; - font-weight: bold; - margin-top: 22px; + margin-top: 1.375rem; } - -.content-container h6 { - text-transform: uppercase; - font-weight: bold; -} \ No newline at end of file diff --git a/assets/css/hero.css b/assets/css/hero.css new file mode 100644 index 0000000..b252535 --- /dev/null +++ b/assets/css/hero.css @@ -0,0 +1,725 @@ +/* Modern hero — OpenMS brand palette & UX */ + +:root { + /* News banner + navbar (approx.) — used to fit hero in one screen */ + --openms-hero-chrome: 8.5rem; + --openms-hero-focus-ring: 0 0 0 3px var(--openms-navy), 0 0 0 5px var(--openms-yellow); +} + +.hero-modern-wrap { + display: block; + position: relative; +} + +.hero-modern { + position: relative; + overflow: hidden; + color: var(--openms-white); + background: var(--openms-navy); + padding: clamp(2rem, 4vh, 5rem) clamp(1.25rem, 4vw, 2.5rem); + min-height: min(32rem, calc(100svh - var(--openms-hero-chrome))); + box-sizing: border-box; + display: flex; + align-items: center; +} + +.hero-modern::before, +.hero-modern::after { + content: ""; + position: absolute; + border-radius: 50%; + z-index: 1; + pointer-events: none; +} + +.hero-modern::before { + top: -50%; + right: -10%; + width: 37.5rem; + height: 37.5rem; + background: radial-gradient( + circle, + rgba(var(--openms-white-rgb), 0.12) 0%, + transparent 70% + ); +} + +.hero-modern::after { + bottom: -30%; + left: -5%; + width: 31.25rem; + height: 31.25rem; + background: radial-gradient( + circle, + rgba(var(--openms-purple-rgb), 0.15) 0%, + transparent 70% + ); +} + +.hero-modern__container { + position: relative; + z-index: 2; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + grid-template-areas: + "content visual" + "actions actions"; + column-gap: 3.75rem; + row-gap: clamp(1rem, 2vh, 1.75rem); + align-items: center; + max-width: 75rem; + width: 100%; + margin: 0 auto; +} + +.hero-modern__content { + grid-area: content; + align-self: end; + max-width: 40rem; +} + +.hero-modern__actions { + grid-area: actions; + align-self: start; + width: 100%; + max-width: 100%; +} + +.hero-modern__visual { + grid-area: visual; +} + +.hero-modern__title { + font-family: var(--openms-font-heading); + font-size: clamp(1.875rem, 4.5vw, 3.125rem); + font-weight: var(--openms-heading-xl-weight); + line-height: 1.15; + letter-spacing: -0.02em; + margin: 0 0 1rem; + color: var(--openms-white); + text-wrap: balance; +} + +.hero-modern__gradient-text { + font-size: 1.25em; + line-height: 1.1; + display: inline-block; + background: linear-gradient( + 90deg, + var(--openms-yellow) 0%, + var(--openms-orange) 40%, + var(--openms-pink) 75%, + var(--openms-pink) 100% + ); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} + +.hero-modern__description { + margin: 0 0 clamp(1rem, 2vh, 1.5rem); + max-width: 38ch; + color: rgba(var(--openms-white-rgb), 0.92); + font-size: var(--openms-presentation-size); + font-weight: var(--openms-body-weight); + line-height: 1.55; + text-wrap: pretty; +} + +.hero-modern__actions { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + column-gap: clamp(1.5rem, 4vw, 3rem); + width: 100%; + margin: 0; + padding-right: 0; +} + +.hero-modern__buttons { + display: flex; + flex-wrap: wrap; + gap: 1rem; + margin-bottom: 0; + grid-column: 1; + align-self: center; +} + +@media (min-width: 769px) { + .hero-modern__actions .hero-modern__stats { + grid-column: 3; + justify-self: end; + align-self: center; + flex-shrink: 0; + padding: 0.375rem 0.625rem; + border-radius: 0.5rem; + background: rgba(var(--openms-white-rgb), 0.06); + border: 1px solid rgba(var(--openms-white-rgb), 0.12); + } + + .hero-modern__stat-sep { + display: none; + } + + .hero-modern__stat:not(:first-child) { + padding-left: clamp(0.625rem, 1.5vw, 1rem); + margin-left: clamp(0.625rem, 1.5vw, 1rem); + border-left: 1px solid rgba(var(--openms-white-rgb), 0.22); + } +} + +.hero-modern__btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 2.75rem; + padding: 0.75rem 1.75rem; + font-size: var(--openms-body-size-lg); + font-weight: 600; + border-radius: 0.5rem; + text-decoration: none; + cursor: pointer; + transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease, + border-color 0.2s ease, color 0.2s ease; +} + +.hero-modern__btn:focus { + outline: none; +} + +.hero-modern__btn:focus-visible { + outline: none; + box-shadow: var(--openms-hero-focus-ring); +} + +.hero-modern__btn:active { + transform: translateY(0); +} + +.hero-modern__btn--primary { + color: var(--openms-white); + background: var(--openms-orange); + border: 2px solid var(--openms-orange); + box-shadow: 0 0.5rem 1.5rem rgba(var(--openms-orange-rgb), 0.35); +} + +.hero-modern__btn--primary:hover { + transform: translateY(-2px); + background: var(--openms-yellow); + border-color: var(--openms-yellow); + box-shadow: 0 0.75rem 2rem rgba(var(--openms-yellow-rgb), 0.4); + color: var(--openms-dark); +} + +.hero-modern__btn--secondary { + color: var(--openms-white); + background: rgba(var(--openms-white-rgb), 0.15); + border: 2px solid var(--openms-white); + backdrop-filter: blur(10px); +} + +.hero-modern__btn--secondary:hover { + background: rgba(var(--openms-white-rgb), 0.25); + border-color: var(--openms-yellow); + color: var(--openms-white); +} + +.hero-modern__stats { + display: flex; + flex-wrap: nowrap; + gap: clamp(0.75rem, 2vw, 1.5rem); + margin: 0; + padding: 0; + border-top: none; + justify-content: flex-end; + align-items: center; + grid-column: 3; + justify-self: end; + min-width: 0; +} + +.hero-modern__stat-sep { + flex: 0 0 auto; + align-self: center; + color: rgba(var(--openms-white-rgb), 0.45); + font-size: clamp(1.125rem, 2vw, 1.375rem); + font-weight: 300; + line-height: 1; + user-select: none; +} + +.hero-modern__stat { + display: flex; + flex-direction: column; + gap: 0.35rem; + margin: 0; + align-items: flex-end; + text-align: right; +} + +.hero-modern__stat-number { + order: -1; + margin: 0; + font-size: clamp(1.375rem, 3vw, 1.75rem); + font-weight: 800; + font-variant-numeric: tabular-nums; + line-height: 1.1; + min-width: 5ch; + color: var(--openms-white); +} + +.hero-modern__stat-label { + margin: 0; + font-size: var(--openms-text-min); + font-weight: 500; + color: rgba(var(--openms-white-rgb), 0.88); + text-transform: uppercase; + letter-spacing: 0.05em; + line-height: 1.35; +} + +.hero-modern__visual { + display: flex; + align-items: center; + justify-content: center; + min-height: 18rem; + align-self: center; +} + +.hero-modern__waveform { + display: flex; + align-items: center; + justify-content: center; + gap: 0.1875rem; + width: 100%; + max-width: 25rem; + height: 100%; + min-height: 16rem; +} + +.hero-modern__wave-bar { + width: 0.375rem; + height: 20%; + border-radius: 0.1875rem; + background: linear-gradient(180deg, var(--openms-orange), var(--openms-pink)); + animation: hero-modern-waveform 2s ease-in-out infinite; +} + +.hero-modern__wave-bar:nth-child(1) { animation-delay: 0s; } +.hero-modern__wave-bar:nth-child(2) { animation-delay: 0.1s; } +.hero-modern__wave-bar:nth-child(3) { animation-delay: 0.2s; } +.hero-modern__wave-bar:nth-child(4) { animation-delay: 0.3s; } +.hero-modern__wave-bar:nth-child(5) { animation-delay: 0.4s; } +.hero-modern__wave-bar:nth-child(6) { animation-delay: 0.5s; } +.hero-modern__wave-bar:nth-child(7) { animation-delay: 0.6s; } +.hero-modern__wave-bar:nth-child(8) { animation-delay: 0.7s; } +.hero-modern__wave-bar:nth-child(9) { animation-delay: 0.8s; } +.hero-modern__wave-bar:nth-child(10) { animation-delay: 0.9s; } +.hero-modern__wave-bar:nth-child(11) { animation-delay: 1s; } + +@keyframes hero-modern-waveform { + 0%, + 100% { + height: 20%; + } + 50% { + height: 100%; + } +} + +/* Medium (md) — same two-column layout as large; slightly tighter spacing */ +@media (min-width: 769px) and (max-width: 1024px) { + :root { + --openms-hero-chrome: 9.5rem; + } + + .hero-modern { + padding: clamp(1.5rem, 3vh, 3.5rem) 1.5rem; + min-height: min(30rem, calc(100dvh - var(--openms-hero-chrome))); + } + + .hero-modern::before { + width: 22rem; + height: 22rem; + right: -25%; + } + + .hero-modern::after { + width: 18rem; + height: 18rem; + left: -20%; + } + + .hero-modern__container { + column-gap: 2rem; + row-gap: 1.25rem; + } + + .hero-modern__title { + font-size: clamp(1.75rem, 3.5vw, 2.5rem); + } + + .hero-modern__visual { + min-height: 14rem; + } + + .hero-modern__waveform { + min-height: 12rem; + max-width: 20rem; + } + + .hero-modern__actions { + grid-template-columns: minmax(0, auto) minmax(0, 1fr); + column-gap: 1rem; + align-items: center; + } + + .hero-modern__buttons { + grid-column: 1; + } + + .hero-modern__actions .hero-modern__stats { + grid-column: 2; + gap: 0; + padding: 0.5rem 0.625rem; + max-width: 100%; + overflow: hidden; + } + + .hero-modern__actions .hero-modern__stat { + align-items: center; + text-align: center; + gap: 0.2rem; + min-width: 0; + flex: 0 1 auto; + } + + .hero-modern__actions .hero-modern__stat:not(:first-child) { + padding-left: 0.625rem; + margin-left: 0.625rem; + } + + .hero-modern__actions .hero-modern__stat-number { + font-size: clamp(1.2rem, 2.2vw, 1.45rem); + min-width: auto; + line-height: 1; + } + + .hero-modern__actions .hero-modern__stat-label { + font-size: var(--openms-text-min); + font-weight: 600; + text-transform: none; + letter-spacing: 0.02em; + line-height: 1.2; + color: rgba(var(--openms-white-rgb), 0.85); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 5.75rem; + } +} + +/* Large (lg) — roomier stats beside the CTA */ +@media (min-width: 1025px) and (max-width: 1280px) { + .hero-modern__actions .hero-modern__stats { + gap: 0; + padding: 0.5rem 0.875rem; + } + + .hero-modern__actions .hero-modern__stat { + align-items: flex-end; + text-align: right; + gap: 0.25rem; + } + + .hero-modern__actions .hero-modern__stat:not(:first-child) { + padding-left: 1rem; + margin-left: 1rem; + } + + .hero-modern__actions .hero-modern__stat-number { + font-size: clamp(1.35rem, 2vw, 1.6rem); + } + + .hero-modern__actions .hero-modern__stat-label { + text-transform: none; + letter-spacing: 0.02em; + max-width: 7rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +/* Small (sm) — stacked layout; stats below hero */ +@media (max-width: 768px) { + :root { + --openms-hero-chrome: 10.5rem; + } + + .hero-modern { + padding: clamp(0.75rem, 1.5vh, 1.5rem) 1.25rem; + min-height: min(28rem, calc(100dvh - var(--openms-hero-chrome))); + } + + .hero-modern::before { + width: 22rem; + height: 22rem; + right: -25%; + } + + .hero-modern::after { + width: 18rem; + height: 18rem; + left: -20%; + } + + .hero-modern__container { + grid-template-columns: 1fr; + grid-template-areas: + "content" + "visual" + "actions"; + gap: clamp(0.5rem, 1.5vh, 1rem); + } + + .hero-modern__content { + grid-area: content; + align-self: auto; + text-align: center; + width: 100%; + max-width: 36rem; + margin-inline: auto; + } + + .hero-modern { + position: relative; + } + + .hero-modern__container { + position: static; + } + + .hero-modern__actions { + grid-area: actions; + display: flex; + flex-direction: column; + align-items: stretch; + width: 100%; + gap: 0; + } + + .hero-modern__buttons { + display: flex; + flex-direction: column; + align-items: stretch; + width: 100%; + margin-bottom: 0; + } + + .hero-modern__actions .hero-modern__stats { + position: absolute; + left: 0; + right: 0; + bottom: 0; + transform: translateY(100%); + width: 100%; + max-width: none; + margin: 0; + padding: 0.75rem clamp(0.75rem, 3vw, 1.25rem); + background: var(--openms-white); + border-bottom: 1px solid rgba(var(--openms-navy-rgb), 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(var(--openms-dark-rgb), 0.06); + box-sizing: border-box; + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.5rem; + align-items: stretch; + grid-column: unset; + justify-self: unset; + z-index: 4; + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat-sep { + display: none; + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + gap: 0.3rem; + min-width: 0; + max-width: none; + padding: 0.625rem 0.375rem; + border-radius: 0.5rem; + background: rgba(var(--openms-navy-rgb), 0.05); + border: 1px solid rgba(var(--openms-navy-rgb), 0.08); + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat-number { + font-family: var(--openms-font-heading); + font-size: clamp(1.375rem, 5.5vw, 1.625rem); + font-weight: 800; + line-height: 1; + color: var(--openms-navy); + min-width: auto; + letter-spacing: -0.02em; + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat-label { + font-size: var(--openms-text-min); + font-weight: 600; + color: rgba(var(--openms-dark-rgb), 0.82); + text-transform: none; + letter-spacing: 0.01em; + line-height: 1.25; + max-width: 100%; + overflow-wrap: anywhere; + hyphens: auto; + } + + .hero-modern__visual { + grid-area: visual; + min-height: 0; + max-height: clamp(5rem, 14vh, 8rem); + } + + .hero-modern__waveform { + min-height: 0; + max-height: 100%; + height: clamp(5rem, 14vh, 8rem); + } + + .hero-modern__title { + margin-bottom: 0.75rem; + font-size: clamp(1.875rem, 7.5vw, 2.5rem); + line-height: 1.18; + } + + .hero-modern__gradient-text { + font-size: 1.1em; + } + + .hero-modern .hero-modern__description { + margin-inline: auto; + max-width: none; + margin-bottom: 0.75rem; + font-size: var(--openms-text-min); + line-height: 1.4; + } + + .hero-modern__btn { + width: 100%; + box-sizing: border-box; + min-height: 2.75rem; + padding: 0.75rem 1.25rem; + } + + .hero-modern__visual { + min-height: 0; + max-height: clamp(3.5rem, 10vh, 5.5rem); + } + + .hero-modern__waveform { + min-height: 0; + max-height: 100%; + height: clamp(3.5rem, 10vh, 5.5rem); + max-width: 14rem; + } + + .hero-modern__wave-bar { + width: 0.3rem; + } +} + +@media (max-width: 768px) and (max-height: 700px) { + .hero-modern__visual { + display: none; + } + + .hero-modern__container { + gap: 0.5rem; + } +} + +@media (max-width: 380px) { + :root { + --openms-hero-chrome: 11rem; + } + + .hero-modern { + padding: 0.75rem 1rem; + } + + .hero-modern__title { + font-size: clamp(1.625rem, 6.5vw, 1.875rem); + } + + .hero-modern .hero-modern__description { + line-height: 1.35; + } + + .hero-modern__actions .hero-modern__stats { + gap: 0.375rem; + padding: 0.625rem 0.75rem; + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat { + padding: 0.5rem 0.25rem; + } +} + +@media (prefers-reduced-motion: reduce) { + .hero-modern__wave-bar { + animation: none; + height: 55%; + } + + .hero-modern__btn { + transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; + } + + .hero-modern__btn--primary:hover, + .hero-modern__btn--secondary:hover { + transform: none; + } +} + +@media (prefers-contrast: more) { + .hero-modern__description { + color: var(--openms-white); + } + + @media (min-width: 769px) { + .hero-modern__actions .hero-modern__stats .hero-modern__stat-label { + color: var(--openms-white); + } + } + + @media (max-width: 768px) { + .hero-modern__actions .hero-modern__stats .hero-modern__stat { + border-color: var(--openms-dark); + background: var(--openms-white); + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat-number { + color: var(--openms-navy); + } + + .hero-modern__actions .hero-modern__stats .hero-modern__stat-label { + color: var(--openms-dark); + } + } + + .hero-modern__gradient-text { + -webkit-text-fill-color: var(--openms-yellow); + background: none; + } + + .hero-modern__btn--secondary { + border-width: 3px; + } +} diff --git a/assets/css/keyfeatures_override.css b/assets/css/keyfeatures_override.css index 7d6bd2d..6b23356 100644 --- a/assets/css/keyfeatures_override.css +++ b/assets/css/keyfeatures_override.css @@ -4,7 +4,7 @@ .keyfeatures a:hover { text-decoration: none; - color:black + color: var(--openms-dark); } .keyfeatures-img{ @@ -19,9 +19,6 @@ .keyfeatures-title { display: flex; justify-content: center; - letter-spacing: 1.5px; - font-size: 27px; - font-weight: bold; } .keyfeatures-box-container { @@ -38,18 +35,15 @@ } .keyfeatures-box-content:hover { - box-shadow: 0 8px 16px 0 rgba(12, 42, 96, 0.4); + box-shadow: 0 8px 16px 0 rgba(var(--openms-blue-rgb), 0.4); } .keyfeatures a { - color: rgb(1, 50, 67) !important; + color: var(--openms-blue) !important; } .keyfeatures-box-title { margin: 15px; - font-size: 16px; - text-transform: uppercase; - font-weight: bold; } .keyfeatures-box-text { @@ -70,5 +64,5 @@ } .keyfeatures-underline:before { - background: rgb(1, 50, 67); + background: var(--openms-blue); } \ No newline at end of file diff --git a/assets/css/mailchimp.css b/assets/css/mailchimp.css index 00894e7..349d4c1 100644 --- a/assets/css/mailchimp.css +++ b/assets/css/mailchimp.css @@ -1,5 +1,5 @@ :root { - --openmsSlateGray: rgb(108, 122, 137); + --openmsSlateGray: var(--openms-grey); } .sign-up-container { @@ -31,18 +31,18 @@ width: 75%; height: 35px; padding-left: 5px; - font-size: 14px; + font-size: var(--openms-body-size-lg); color: var(--colorPrimaryDark); } .submission-instructions { position: absolute; right: 18%; - font-size: 10px; + font-size: var(--openms-text-min); color: var(--openmsSlateGray); } -.signup-button { +.sign-up-container .signup-button { display: none; } @@ -64,7 +64,7 @@ @media only screen and (max-width: 1150px) { .sign-up-input { - font-size: 12px; + font-size: var(--openms-text-min); } } @@ -81,14 +81,14 @@ display: none; } - .signup-button { + .sign-up-container .signup-button { display: block; height: 35px; border-radius: 5px; margin-left: 5px; width: 60px; color: black; - border:none; - outline:none; + border: none; + outline: none; } } diff --git a/assets/css/members.css b/assets/css/members.css index 0ddb3e8..320e1df 100644 --- a/assets/css/members.css +++ b/assets/css/members.css @@ -8,8 +8,8 @@ .role { display: inline-block; - background-color: #eee; - color: #333; + background-color: var(--openms-grey); + color: var(--openms-dark); padding: 0.2rem 0.5rem; border-radius: 0.5rem; font-size: 0.85em; diff --git a/assets/css/navbar-responsive.css b/assets/css/navbar-responsive.css new file mode 100644 index 0000000..580e93e --- /dev/null +++ b/assets/css/navbar-responsive.css @@ -0,0 +1,451 @@ +/* Navbar — tablet (md) & mobile (sm) */ + +/* Mobile bar CTAs — hidden on desktop */ +.navbar-mobile-ctas, +.navbar-mobile-ctas-end { + display: none; +} + +.navbar-brand-actions { + display: flex; + align-items: center; +} + +/* Desktop — horizontal bar */ +@media (min-width: 1024px) { + .navbar-mobile-ctas, + .navbar-mobile-ctas-end, + .navbar-brand-actions { + display: none; + } + + .navbar-desktop-cta { + display: contents; + } + + .navbar.is-fresh .navbar-burger, + #navbar-clone.navbar.is-fresh .navbar-burger { + display: none; + } + + .navbar.is-fresh .navbar-menu.is-static, + #navbar-clone.navbar.is-fresh .navbar-menu.is-fixed { + display: flex !important; + flex: 1; + min-width: 0; + position: static; + box-shadow: none; + background: transparent; + overflow: visible; + } + + .site-header #nav.navbar.is-fresh .navbar-end, + #navbar-clone.navbar.is-fresh .navbar-end { + flex-wrap: wrap; + justify-content: flex-end; + align-items: center; + } +} + +/* Medium desktop — tighter items so CTAs stay visible */ +@media (min-width: 1024px) and (max-width: 1280px) { + .navbar.is-fresh .navbar-brand img.navbar-logo, + #navbar-clone.navbar.is-fresh .navbar-brand img.navbar-logo { + max-height: 64px !important; + height: 64px !important; + } + + .navbar.is-fresh .navbar-logo-text, + #navbar-clone.navbar.is-fresh .navbar-logo-text { + font-size: var(--openms-secondary-heading-size-lg); + } + + .navbar.is-fresh .navbar-item, + .navbar.is-fresh a.navbar-item.is-secondary, + #navbar-clone.navbar.is-fresh .navbar-item, + #navbar-clone.navbar.is-fresh a.navbar-item.is-secondary { + font-size: var(--openms-text-min); + padding-left: 0.5rem; + padding-right: 0.5rem; + } + + .navbar.is-fresh .signup-button, + #navbar-clone.navbar.is-fresh .signup-button { + font-size: var(--openms-text-min); + padding: 0.5rem 0.875rem !important; + white-space: nowrap; + } +} + +/* Tablet & mobile — collapsible menu (Bulma < 1024px) */ +@media (max-width: 1023px) { + .site-header #nav.navbar.is-fresh, + #navbar-clone.navbar.is-fresh { + min-height: auto; + } + + .site-header #nav.navbar.is-fresh .container, + #navbar-clone.navbar.is-fresh .container { + display: flex; + flex-wrap: nowrap; + align-items: center; + min-height: 4.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + overflow: visible; + } + + .navbar-desktop-cta { + display: none !important; + } + + .site-header #nav.navbar.is-fresh .navbar-brand, + #navbar-clone.navbar.is-fresh .navbar-brand { + display: flex; + align-items: center; + justify-content: space-between; + flex: 1; + min-height: 4.25rem; + min-width: 0; + padding-left: 0; + gap: 0.25rem; + } + + .site-header #nav.navbar.is-fresh .navbar-brand-link, + #navbar-clone.navbar.is-fresh .navbar-brand-link { + flex: 0 1 auto; + min-width: 0; + max-width: 50%; + padding: 0; + } + + .site-header #nav.navbar.is-fresh .navbar-brand img.navbar-logo, + #navbar-clone.navbar.is-fresh .navbar-brand img.navbar-logo { + max-height: 56px !important; + height: 56px !important; + max-width: 100%; + width: auto; + object-fit: contain; + object-position: left center; + } + + .site-header #nav.navbar.is-fresh .navbar-logo-text, + #navbar-clone.navbar.is-fresh .navbar-logo-text { + display: none; + } + + .navbar-brand-actions { + display: flex !important; + align-items: center; + flex: 1 1 auto; + min-width: 0; + margin-left: auto; + justify-content: flex-end; + overflow: visible; + } + + /* Right cluster: Spon → Give → menu */ + .navbar-mobile-ctas-end { + display: flex !important; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + gap: 0.25rem; + flex-shrink: 0; + margin-left: auto; + overflow: visible; + max-width: 100%; + } + + .navbar-mobile-ctas-end .navbar-cta-label--full, + .navbar-mobile-ctas .navbar-cta-label--full { + display: none; + } + + .navbar-mobile-ctas-end .navbar-cta-label--short, + .navbar-mobile-ctas .navbar-cta-label--short { + display: inline; + } + + .navbar-mobile-ctas-end .navbar-cta-item { + display: inline-flex !important; + align-items: center; + flex-shrink: 0; + width: auto !important; + max-width: none; + justify-content: center; + text-align: center; + padding: 0; + } + + .navbar-mobile-ctas-end .navbar-cta-item:nth-child(1) { + order: 1; + } + + .navbar-mobile-ctas-end .navbar-cta-item:nth-child(2) { + order: 2; + } + + .navbar-mobile-ctas-end .signup-button { + display: inline-block !important; + padding: 0.35rem 0.5rem !important; + font-size: var(--openms-text-min); + line-height: 1.15; + white-space: nowrap; + border-width: 1.5px !important; + } + + .navbar-mobile-ctas-end .navbar-burger { + order: 3; + display: flex !important; + flex-shrink: 0; + align-items: center; + justify-content: center; + width: 2.75rem; + height: 2.75rem; + margin-right: 0; + } + + .site-header #nav.navbar.is-fresh .navbar-burger, + #navbar-clone.navbar.is-fresh .navbar-burger { + display: flex !important; + align-items: center; + justify-content: center; + width: 2.75rem; + height: 2.75rem; + margin-right: 0; + } + + .site-header #nav.navbar.is-fresh .navbar-burger span, + #navbar-clone.navbar.is-fresh .navbar-burger span { + height: 2px; + width: 1.25rem; + left: calc(50% - 0.625rem); + } + + /* Overlay menu — does not expand header height */ + .site-header #nav.navbar.is-fresh .navbar-menu.is-static, + #navbar-clone.navbar.is-fresh .navbar-menu.is-fixed { + display: none !important; + flex: none; + width: 100vw; + max-width: 100vw; + position: fixed; + left: 0; + right: 0; + top: var(--openms-header-height, 9rem); + bottom: 0; + height: auto !important; + min-height: calc(100dvh - var(--openms-header-height, 9rem)); + z-index: 250; + margin: 0; + padding: 0; + background: var(--openms-white); + box-shadow: 0 0.5rem 1.25rem rgba(var(--openms-dark-rgb), 0.12); + border-top: 1px solid var(--openms-grey); + max-height: none; + overflow-x: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + pointer-events: auto; + } + + .site-header #nav.navbar.is-fresh .navbar-menu.is-static.is-active, + #navbar-clone.navbar.is-fresh .navbar-menu.is-fixed.is-active { + display: flex !important; + flex-direction: column; + } + + .site-header #nav.navbar.is-fresh .navbar-menu.is-static.is-active .navbar-end, + #navbar-clone.navbar.is-fresh .navbar-menu.is-fixed.is-active .navbar-end { + display: flex; + flex: 1 1 auto; + width: 100%; + } + + .site-header #nav.navbar.is-fresh .navbar-end, + #navbar-clone.navbar.is-fresh .navbar-end { + flex-direction: column; + align-items: stretch; + width: 100%; + flex-wrap: nowrap; + gap: 0; + padding: 0.5rem 0 1rem; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item, + .site-header #nav.navbar.is-fresh .navbar-menu a.navbar-item.is-secondary, + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item, + #navbar-clone.navbar.is-fresh .navbar-menu a.navbar-item.is-secondary, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown { + width: 100%; + justify-content: center; + text-align: center; + padding: 0.65rem 1rem; + } + + .navbar.is-fresh .navbar-item.has-dropdown .navbar-link, + #navbar-clone.navbar.is-fresh .navbar-item.has-dropdown .navbar-link { + width: 100%; + justify-content: center; + } + + .navbar.is-fresh .navbar-item.has-dropdown .navbar-link::after, + #navbar-clone.navbar.is-fresh .navbar-item.has-dropdown .navbar-link::after { + position: relative; + top: auto; + right: auto; + margin-left: 0.35rem; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown .navbar-dropdown, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown .navbar-dropdown { + position: static; + display: none !important; + width: 100%; + min-width: 0; + margin-top: 0; + box-shadow: none; + border-top: none; + background: rgba(var(--openms-blue-rgb), 0.06); + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown.is-active .navbar-dropdown, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown.is-active .navbar-dropdown { + display: block !important; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown.is-hoverable:hover .navbar-dropdown, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown.is-hoverable:hover .navbar-dropdown { + display: none !important; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown.is-active.is-hoverable:hover .navbar-dropdown, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown.is-active.is-hoverable:hover .navbar-dropdown { + display: block !important; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown > .navbar-link, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-item.has-dropdown > .navbar-link { + cursor: pointer; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-dropdown-heading, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-dropdown-heading { + width: 100%; + text-align: center; + border-top-color: var(--openms-grey); + color: var(--openms-blue); + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-dropdown .navbar-item.is-nested, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-dropdown .navbar-item.is-nested { + font-size: var(--openms-body-size); + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-mobile-social, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-mobile-social { + display: flex; + justify-content: center; + align-items: center; + gap: 1.25rem; + width: 100%; + margin-top: auto; + padding: 1.25rem 1rem 1.5rem; + border-top: 1px solid var(--openms-grey); + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-mobile-social a, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-mobile-social a { + display: inline-flex; + align-items: center; + justify-content: center; + width: auto; + min-width: 44px; + min-height: 44px; + padding: 0; + color: var(--openms-blue); + transition: color 0.2s ease; + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-mobile-social a:hover, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-mobile-social a:hover { + color: var(--openms-orange); + } + + .site-header #nav.navbar.is-fresh .navbar-menu .navbar-mobile-social svg.icon, + #navbar-clone.navbar.is-fresh .navbar-menu .navbar-mobile-social svg.icon { + width: 1.5rem; + height: 1.5rem; + fill: currentColor; + } + +} + +@media (min-width: 1024px) { + .navbar-mobile-social { + display: none !important; + } +} + +/* Small phones */ +@media (max-width: 768px) { + .site-header #nav.navbar.is-fresh .container, + #navbar-clone.navbar.is-fresh .container { + min-height: 4rem; + } + + .site-header #nav.navbar.is-fresh .navbar-brand, + #navbar-clone.navbar.is-fresh .navbar-brand { + min-height: 4rem; + } + + .site-header #nav.navbar.is-fresh .navbar-brand img.navbar-logo, + #navbar-clone.navbar.is-fresh .navbar-brand img.navbar-logo { + max-height: 52px !important; + height: 52px !important; + } + + .site-header #nav.navbar.is-fresh .navbar-brand-link, + #navbar-clone.navbar.is-fresh .navbar-brand-link { + max-width: 46%; + } +} + +@media (max-width: 380px) { + .site-header #nav.navbar.is-fresh .navbar-brand img.navbar-logo, + #navbar-clone.navbar.is-fresh .navbar-brand img.navbar-logo { + max-height: 48px !important; + height: 48px !important; + } + + .site-header #nav.navbar.is-fresh .navbar-brand-link, + #navbar-clone.navbar.is-fresh .navbar-brand-link { + max-width: 42%; + } + + .navbar-mobile-ctas-end { + gap: 0.2rem; + } + + .navbar-mobile-ctas-end .signup-button { + padding: 0.3rem 0.4rem !important; + } + + .navbar-mobile-ctas-end .navbar-burger { + width: 2.5rem; + height: 2.5rem; + } +} + +/* Desktop CTA labels */ +@media (min-width: 1024px) { + .navbar-cta-label--short { + display: none; + } + + .navbar-cta-label--full { + display: inline; + } +} diff --git a/assets/css/news-banner.css b/assets/css/news-banner.css new file mode 100644 index 0000000..895d507 --- /dev/null +++ b/assets/css/news-banner.css @@ -0,0 +1,110 @@ +/* Site-wide news / alert banner — matches hero color scheme */ + +.news-banner { + position: relative; + z-index: 100; + background: var(--openms-navy); + color: var(--openms-white); + border-bottom: 1px solid rgba(var(--openms-white-rgb), 0.1); +} + +.news-banner__inner { + display: flex; + align-items: center; + justify-content: center; + min-height: 1.25rem; + padding: 0.15rem 0.55rem; + text-align: center; +} + +.news-banner__message { + margin: 0; + font-size: 0.75rem; + line-height: 1.25; + flex: 1; +} + +/* Matches hero primary button */ +.news-banner__label { + display: inline-block; + margin-right: 0.5rem; + padding: 0.125rem 0.5rem; + font-size: inherit; + font-weight: 600; + line-height: 1.2; + letter-spacing: 0.06em; + text-transform: uppercase; + border-radius: 0.25rem; + background: var(--openms-orange); + border: 2px solid var(--openms-orange); + color: var(--openms-white); + vertical-align: middle; +} + +.news-banner__link { + display: inline; + color: inherit; + text-decoration: none; + transition: color 0.2s ease, opacity 0.2s ease; +} + +.news-banner__link:hover { + color: var(--openms-white); +} + +.news-banner__text { + font-weight: 500; + color: var(--openms-white); +} + +/* Matches hero stat numbers */ +.news-banner__cta { + margin-left: 0.3rem; + font-size: 0.5rem; + font-weight: 600; + color: var(--openms-yellow); + white-space: nowrap; + transition: color 0.2s ease; +} + +.news-banner__link:hover .news-banner__cta { + color: var(--openms-yellow); +} + +@media (max-width: 768px) { + .news-banner__inner { + min-height: 1.125rem; + padding: 0.125rem 0.4rem; + text-align: center; + justify-content: center; + } + + .news-banner__message { + flex: none; + width: 100%; + font-size: 0.7375rem; + line-height: 1.2; + text-align: center; + } + + .news-banner__label { + display: inline-block; + margin: 0 0.35rem 0 0; + padding: 0.1rem 0.45rem; + } + + .news-banner__cta { + font-size: 0.4375rem; + } + + .news-banner__link { + display: inline-block; + text-align: center; + } + + .news-banner__cta { + display: block; + margin: 0.25rem auto 0; + white-space: normal; + } +} diff --git a/assets/css/quick-facts.css b/assets/css/quick-facts.css index ab77a28..78003a8 100644 --- a/assets/css/quick-facts.css +++ b/assets/css/quick-facts.css @@ -9,9 +9,6 @@ .facts-title { display: flex; justify-content: center; - letter-spacing: 1.5px; - font-size: 30px; - font-weight: bold; } .facts-list { @@ -28,12 +25,12 @@ height: 86px; font-size: 36px; font-family: 'Bebas Neue', cursive; - background: linear-gradient(45deg, transparent 5%, #FF013C 5%); + background: linear-gradient(45deg, transparent 5%, var(--openms-pink) 5%); border: 0; - color: #fff; + color: var(--openms-white); letter-spacing: 3px; line-height: 88px; - box-shadow: 6px 0px 0px #00E6F6; + box-shadow: 6px 0px 0px var(--openms-blue); outline: transparent; position: relative; } @@ -53,8 +50,8 @@ left: 0; right: 0; bottom: 0; - background: linear-gradient(45deg, transparent 3%, #00E6F6 3%, #00E6F6 5%, #FF013C 5%); - text-shadow: -3px -3px 0px #F8F005, 3px 3px 0px #00E6F6; + background: linear-gradient(45deg, transparent 3%, var(--openms-blue) 3%, var(--openms-blue) 5%, var(--openms-pink) 5%); + text-shadow: -3px -3px 0px var(--openms-yellow), 3px 3px 0px var(--openms-blue); clip-path: var(--slice-0); } diff --git a/assets/css/shell.css b/assets/css/shell.css index 46eaed3..6afefcb 100644 --- a/assets/css/shell.css +++ b/assets/css/shell.css @@ -2,8 +2,8 @@ display: flex; flex-direction: column; /* Black, with 10% opacity */ - box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1); - background: rgb(238, 238, 238); + box-shadow: 0px 8px 15px rgba(var(--openms-dark-rgb), 0.1); + background: var(--openms-grey); padding: 15px; } @@ -32,11 +32,6 @@ align-items: center; } -.shell-title { - font-size: 35px; - font-weight: bold; -} - .shell-lesson { text-align: left; flex: 1; @@ -68,11 +63,11 @@ } .CodeMirror pre { - color: rgb(255, 255, 255) !important; + color: var(--openms-white) !important; } .CodeMirror-cursor { - color: rgb(255, 255, 255) !important; + color: var(--openms-white) !important; border-left: 1px solid white !important; } diff --git a/assets/css/site-header.css b/assets/css/site-header.css new file mode 100644 index 0000000..1c9270f --- /dev/null +++ b/assets/css/site-header.css @@ -0,0 +1,26 @@ +/* Sticky site header — news banner + navbar stay aligned at top */ + +.site-header { + position: sticky; + top: 0; + z-index: 200; + width: 100%; + background: var(--openms-white); +} + +.site-header .news-banner { + position: relative; + z-index: 1; + flex-shrink: 0; +} + +.site-header #nav.navbar.is-fresh { + position: relative; + z-index: 2; + width: 100%; +} + +/* Scroll clone duplicates nav only — hide; sticky header handles scroll */ +#navbar-clone.navbar.is-fresh { + display: none !important; +} diff --git a/assets/css/styles_override.css b/assets/css/styles_override.css index ef8a8b8..dcf8cda 100644 --- a/assets/css/styles_override.css +++ b/assets/css/styles_override.css @@ -1,52 +1,263 @@ /* Back to top – colour override to match footer theme */ #backtotop a { - background-color: #0b214a; - border: 2px solid rgba(255, 255, 255, 0.25); + background-color: var(--openms-blue); + border: 2px solid rgba(var(--openms-white-rgb), 0.25); } #backtotop.visible a:hover { - background-color: #1a3a7a; + background-color: var(--openms-purple); } -.hero-title-content { - max-width: 1200px; - margin: 1vh auto; +.navbar.is-fresh .navbar-item, +.navbar.is-fresh .navbar-link, +.navbar.is-fresh a.navbar-item.is-secondary, +.navbar.is-fresh .navbar-menu .navbar-item, +#navbar-clone.navbar.is-fresh .navbar-item, +#navbar-clone.navbar.is-fresh .navbar-link, +#navbar-clone.navbar.is-fresh a.navbar-item.is-secondary, +#navbar-clone.navbar.is-fresh .navbar-menu .navbar-item { + color: var(--openms-dark) !important; } -.hero-logo { - max-height: 200px; +.navbar.is-fresh .navbar-item:focus-visible, +.navbar.is-fresh .navbar-link:focus-visible, +.navbar.is-fresh .navbar-dropdown .navbar-item:focus-visible, +#navbar-clone.navbar.is-fresh .navbar-item:focus-visible, +#navbar-clone.navbar.is-fresh .navbar-link:focus-visible, +#navbar-clone.navbar.is-fresh .navbar-dropdown .navbar-item:focus-visible { + outline: 2px solid var(--openms-blue); + outline-offset: 2px; } -.navbar.is-fresh .navbar-item.has-dropdown .navbar-link { - color: var(--colorPrimaryDark); +.navbar.is-fresh .navbar-item:hover, +.navbar.is-fresh .navbar-link:hover, +.navbar.is-fresh .navbar-item.has-dropdown:hover .navbar-link, +.navbar.is-fresh .navbar-brand .navbar-brand-link:hover, +#navbar-clone.navbar.is-fresh .navbar-item:hover, +#navbar-clone.navbar.is-fresh .navbar-link:hover, +#navbar-clone.navbar.is-fresh .navbar-item.has-dropdown:hover .navbar-link, +#navbar-clone.navbar.is-fresh .navbar-brand .navbar-brand-link:hover { + color: var(--openms-blue) !important; } -.navbar.is-fresh .navbar-brand img { - max-height: 50px !important; - height: 50px; +.navbar.is-fresh a.navbar-item.is-secondary, +#navbar-clone.navbar.is-fresh a.navbar-item.is-secondary { + transition: color 0.2s ease; } -@media only screen and (max-width: 850px) { - .social-media-icons { - width: 100%; - } +.navbar.is-fresh a.navbar-item.is-secondary:hover, +.navbar.is-fresh a.navbar-item.is-secondary:focus-visible, +#navbar-clone.navbar.is-fresh a.navbar-item.is-secondary:hover, +#navbar-clone.navbar.is-fresh a.navbar-item.is-secondary:focus-visible { + color: var(--openms-blue) !important; + background-color: transparent !important; } -@media only screen and (max-width: 600px) { - .hero-logo { - max-height: 150px; - } +.navbar.is-fresh .navbar-item.has-dropdown .navbar-link::after, +#navbar-clone.navbar.is-fresh .navbar-item.has-dropdown .navbar-link::after { + border-color: var(--openms-dark) !important; +} + +.navbar.is-fresh .navbar-item.has-dropdown:hover .navbar-link::after, +#navbar-clone.navbar.is-fresh .navbar-item.has-dropdown:hover .navbar-link::after { + border-color: var(--openms-blue) !important; +} + +.navbar.is-fresh .navbar-item.has-dropdown .navbar-dropdown, +#navbar-clone.navbar.is-fresh .navbar-item.has-dropdown .navbar-dropdown { + border-top-color: var(--openms-blue); + box-shadow: 0 0.5rem 1.5rem rgba(var(--openms-dark-rgb), 0.08); +} + +.navbar.is-fresh .navbar-dropdown .navbar-item, +#navbar-clone.navbar.is-fresh .navbar-dropdown .navbar-item { + color: var(--openms-dark) !important; +} + +.navbar.is-fresh .navbar-dropdown .navbar-item:hover, +#navbar-clone.navbar.is-fresh .navbar-dropdown .navbar-item:hover { + color: var(--openms-blue) !important; + background-color: rgba(var(--openms-blue-rgb), 0.1); +} + +/* Navbar CTA buttons (mailchimp.css must not hide these) */ +.navbar.is-fresh .signup-button, +#navbar-clone.navbar.is-fresh .signup-button { + display: inline-block !important; +} + +/* Donate — matches hero primary button */ +.navbar.is-fresh .signup-button.secondary-btn, +#navbar-clone.navbar.is-fresh .signup-button.secondary-btn { + background-color: var(--openms-orange) !important; + color: var(--openms-white) !important; + border: 2px solid var(--openms-orange) !important; + box-shadow: 0 0.25rem 0.75rem rgba(var(--openms-orange-rgb), 0.3); +} + +.navbar.is-fresh .signup-button.secondary-btn:hover, +#navbar-clone.navbar.is-fresh .signup-button.secondary-btn:hover { + background-color: var(--openms-yellow) !important; + color: var(--openms-dark) !important; + border-color: var(--openms-yellow) !important; + box-shadow: 0 0.35rem 1rem rgba(var(--openms-yellow-rgb), 0.35); +} + +/* Sponsor — outline blue */ +.navbar.is-fresh .signup-button.sponsor-btn, +#navbar-clone.navbar.is-fresh .signup-button.sponsor-btn { + background-color: transparent !important; + color: var(--openms-blue) !important; + border: 2px solid var(--openms-blue) !important; + box-shadow: none; +} + +.navbar.is-fresh .signup-button.sponsor-btn:hover, +#navbar-clone.navbar.is-fresh .signup-button.sponsor-btn:hover { + background-color: var(--openms-blue) !important; + color: var(--openms-white) !important; + border-color: var(--openms-blue) !important; + box-shadow: 0 0.25rem 0.75rem rgba(var(--openms-blue-rgb), 0.3); +} + +.navbar.is-fresh .navbar-burger, +#navbar-clone.navbar.is-fresh .navbar-burger { + color: var(--openms-dark); + width: 3.5rem; + height: 3.5rem; + margin-right: 1rem; } -@media only screen and (max-width: 400px) { - .hero-logo { - max-height: 120px; +@media (max-width: 1023px) { + .navbar.is-fresh .navbar-burger, + #navbar-clone.navbar.is-fresh .navbar-burger { + margin-right: 0; } } -@media only screen and (max-width: 320px) { - .hero-logo { - max-height: 100px; +.navbar.is-fresh .navbar-burger span, +#navbar-clone.navbar.is-fresh .navbar-burger span { + background-color: var(--openms-dark); + height: 2px; + width: 1.5rem; + left: calc(50% - 0.75rem); + border-radius: 1px; +} + +.navbar.is-fresh .navbar-burger span:nth-child(1), +#navbar-clone.navbar.is-fresh .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); +} + +.navbar.is-fresh .navbar-burger span:nth-child(2), +#navbar-clone.navbar.is-fresh .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); +} + +.navbar.is-fresh .navbar-burger span:nth-child(3), +#navbar-clone.navbar.is-fresh .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); +} + +.navbar.is-fresh .navbar-burger:hover, +.navbar.is-fresh .navbar-burger:focus, +.navbar.is-fresh .navbar-burger:focus-visible, +.navbar.is-fresh .navbar-burger:active, +#navbar-clone.navbar.is-fresh .navbar-burger:hover, +#navbar-clone.navbar.is-fresh .navbar-burger:focus, +#navbar-clone.navbar.is-fresh .navbar-burger:focus-visible, +#navbar-clone.navbar.is-fresh .navbar-burger:active { + background-color: transparent; +} + +.navbar.is-fresh { + min-height: 5.5rem; +} + +.navbar.is-fresh .container, +.navbar.is-fresh .navbar-brand { + min-height: 5.5rem; +} + +/* Top-level dropdown labels (e.g. Partner with OpenMS) */ +.navbar.is-fresh .navbar-item.has-dropdown.is-emphasized > .navbar-link, +#navbar-clone.navbar.is-fresh .navbar-item.has-dropdown.is-emphasized > .navbar-link { + font-weight: 700; +} + +/* Navbar dropdown section headings & nested links */ +.navbar.is-fresh .navbar-dropdown-heading, +#navbar-clone.navbar.is-fresh .navbar-dropdown-heading { + display: block; + padding: 0.5rem 1rem 0.35rem; + font-size: var(--openms-text-min); + font-weight: 700; + letter-spacing: 0.04em; + text-transform: none; + color: var(--openms-blue); + border-top: 1px solid rgba(var(--openms-blue-rgb), 0.12); + margin-top: 0.25rem; + pointer-events: none; + user-select: none; +} + +.navbar.is-fresh .navbar-dropdown-heading:first-child, +#navbar-clone.navbar.is-fresh .navbar-dropdown-heading:first-child { + border-top: none; + margin-top: 0; + padding-top: 0.35rem; +} + +.navbar.is-fresh .navbar-dropdown .navbar-item.is-nested, +#navbar-clone.navbar.is-fresh .navbar-dropdown .navbar-item.is-nested { + padding-left: 1.5rem; + font-size: calc(var(--openms-body-size) * 0.95); +} + +.navbar.is-fresh .navbar-item:has(.signup-button) { + flex-shrink: 0; + padding-left: 0.35rem; + padding-right: 0.35rem; +} + +.navbar.is-fresh .navbar-brand .navbar-brand-link { + display: flex; + align-items: center; + gap: 0.875rem; + padding-left: 0; +} + +.navbar.is-fresh .navbar-brand img.navbar-logo { + max-height: 88px !important; + height: 88px !important; + width: auto !important; + padding-right: 0; +} + +.navbar.is-fresh .navbar-logo-text, +#navbar-clone.navbar.is-fresh .navbar-logo-text { + font-family: var(--openms-font-heading); + font-size: var(--openms-heading-lg-size); + font-weight: var(--openms-heading-lg-weight); + color: var(--openms-dark) !important; + line-height: 1; +} + +.navbar.is-fresh .navbar-brand .navbar-brand-link:hover .navbar-logo-text, +#navbar-clone.navbar.is-fresh .navbar-brand .navbar-brand-link:hover .navbar-logo-text { + color: var(--openms-blue) !important; +} + +/* Solid bar over the dark homepage hero (matches design mockup) */ +body:has(.hero-modern) .site-header #nav.navbar.is-fresh { + background: rgba(var(--openms-white-rgb), 0.95); + backdrop-filter: blur(10px); + border-bottom: 2px solid var(--openms-grey); +} + +@media only screen and (max-width: 850px) { + .social-media-icons { + width: 100%; } } @@ -55,8 +266,8 @@ ============================================= */ .footer-redesign { - background-color: #0b214a; - color: #e2e8f0; + background-color: var(--openms-blue); + color: var(--openms-grey); padding: 3rem 0 0; font-family: inherit; } @@ -73,15 +284,66 @@ /* ---- Brand block ---- */ .footer-brand { - flex: 0 0 200px; + flex: 0 0 300px; } -.footer-title { - font-size: 1.75rem; - font-weight: 800; - color: #ffffff; +.footer-brand-top { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 1.25rem; margin-bottom: 1.5rem; - letter-spacing: -0.3px; +} + +.footer-logo { + display: inline-flex; + align-items: center; + min-height: 44px; +} + +.footer-logo img { + display: block; + max-height: 88px; + max-width: min(100%, 280px); + width: auto; + height: auto; + object-fit: contain; + filter: brightness(0) invert(1); +} + +.footer-logo:focus-visible { + outline: 2px solid rgba(var(--openms-white-rgb), 0.45); + outline-offset: 4px; + border-radius: 4px; +} + +.footer-donate-btn.signup-button { + display: inline-block !important; + padding: 0.55rem 1.35rem !important; + font-size: var(--openms-body-size); + font-weight: 600; + text-decoration: none; + white-space: nowrap; +} + +.footer-redesign .footer-donate-btn.signup-button.secondary-btn { + background-color: var(--openms-orange) !important; + color: var(--openms-white) !important; + border: 2px solid var(--openms-orange) !important; + box-shadow: 0 0.25rem 0.75rem rgba(var(--openms-orange-rgb), 0.3); +} + +.footer-redesign .footer-donate-btn.signup-button.secondary-btn:hover, +.footer-redesign .footer-donate-btn.signup-button.secondary-btn:focus-visible { + background-color: var(--openms-yellow) !important; + color: var(--openms-dark) !important; + border-color: var(--openms-yellow) !important; + box-shadow: 0 0.35rem 1rem rgba(var(--openms-yellow-rgb), 0.35); +} + +.footer-title { + color: var(--openms-white); + margin-bottom: 0; } /* ---- Partner logo row ---- */ @@ -104,8 +366,8 @@ .footer-link-group ul li a:focus-visible, .footer-socials a:focus-visible { - color: #ffffff; - outline: 2px solid rgba(255, 255, 255, 0.45); + color: var(--openms-white); + outline: 2px solid rgba(var(--openms-white-rgb), 0.45); outline-offset: 4px; } @@ -135,11 +397,11 @@ /* ---- Column heading ---- */ .footer-group-heading { - font-size: 0.68rem; + font-size: var(--openms-text-min); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; - color: rgba(255, 255, 255, 0.45); + color: rgba(var(--openms-white-rgb), 0.45); margin: 0 0 0.875rem 0; padding: 0; } @@ -152,9 +414,9 @@ } .footer-link-group ul li a { - color: #c8d4e8; + color: var(--openms-grey); text-decoration: none; - font-size: 0.9rem; + font-size: var(--openms-body-size); display: flex; align-items: center; min-height: 44px; @@ -162,7 +424,7 @@ } .footer-link-group ul li a:hover { - color: #ffffff; + color: var(--openms-white); text-decoration: underline; } @@ -171,7 +433,7 @@ max-width: 1200px; margin: 0 auto; padding: 1.25rem 2rem; - border-top: 1px solid rgba(255, 255, 255, 0.1); + border-top: 1px solid rgba(var(--openms-white-rgb), 0.1); display: flex; align-items: center; justify-content: space-between; @@ -192,12 +454,12 @@ justify-content: center; min-width: 44px; min-height: 44px; - color: #c8d4e8; + color: var(--openms-grey); transition: color 0.2s ease; } .footer-socials a:hover { - color: #ffffff; + color: var(--openms-white); } .footer-socials svg.icon { @@ -208,8 +470,8 @@ /* ---- Copyright ---- */ .footer-copyright { - color: rgba(255, 255, 255, 0.45); - font-size: 0.85rem; + color: rgba(var(--openms-white-rgb), 0.45); + font-size: var(--openms-text-min); } /* ============================================= @@ -227,6 +489,20 @@ width: 100%; } + .footer-brand-top { + flex-direction: row; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + width: 100%; + gap: 1rem; + } + + .footer-logo img { + max-height: 72px; + max-width: min(65vw, 240px); + } + .footer-partners { flex-direction: row; flex-wrap: wrap; diff --git a/assets/css/tabs.css b/assets/css/tabs.css index a7c39bc..f69d395 100644 --- a/assets/css/tabs.css +++ b/assets/css/tabs.css @@ -16,8 +16,6 @@ .tabs-title { display: flex; justify-content: center; - letter-spacing: 1.5px; - font-size: 27px; margin: 30px 0; } @@ -32,11 +30,11 @@ .uk-nav > li > a { height: 35px; - font-size: 13px; + font-size: var(--openms-text-min); text-transform: uppercase; letter-spacing: 1.5px; font-weight: 500; - color: rgb(108, 122, 137); + color: var(--openms-grey); } #tabs-content > li { @@ -63,7 +61,7 @@ .grid-container > div { /* White, with 80% opacity */ - background-color: rgba(255, 255, 255, 0.8); + background-color: rgba(var(--openms-white-rgb), 0.8); text-align: middle; } @@ -85,25 +83,25 @@ } .image-grid > div { - background-color: rgb(238, 238, 238); - border: 2px solid rgb(255, 255, 255); + background-color: var(--openms-grey); + border: 2px solid var(--openms-white); border-radius: 10px; padding: 10px; } /* Scientific Domains */ td, th { - font-size: 0.8rem; + font-size: var(--openms-text-min); padding: 8px; } td > a { - font-size: 0.8rem; + font-size: var(--openms-text-min); } tr.highlight-th { - border-top: 1px solid rgb(238, 238, 238); - font-size: 0.8rem; + border-top: 1px solid var(--openms-grey); + font-size: var(--openms-text-min); } td.bold-text { @@ -134,7 +132,7 @@ td.full-center-text { td.lastrow-center-text { text-align: center; line-height: 35%; - border-bottom: 1px solid rgb(255, 255, 255); + border-bottom: 1px solid var(--openms-white); } /* Array Libraries */ diff --git a/assets/css/terminal.css b/assets/css/terminal.css index d41efda..45b162c 100644 --- a/assets/css/terminal.css +++ b/assets/css/terminal.css @@ -7,7 +7,7 @@ position: relative; } .terminal-window header { -background: #E0E8F0; +background: var(--openms-grey); height: 30px; border-radius: 8px 8px 0 0; padding-left: 10px; @@ -23,22 +23,22 @@ padding: 0%; } .terminal-window header .button.green { -background: #3BB662; +background: var(--openms-yellow); } .terminal-window header .button.yellow { -background: #E5C30F; +background: var(--openms-orange); } .terminal-window header .button.red { -background: #E75448; +background: var(--openms-pink); } .terminal-window section.terminal { -color: white; +color: var(--openms-white); font-family: Menlo, Monaco, "Consolas", "Courier New", "Courier"; font-size: 11pt; -background: #30353A; +background: var(--openms-dark); padding: 10px; box-sizing: border-box; position: absolute; @@ -71,5 +71,5 @@ overflow: auto; } .terminal-data { display: none; } -.terminal-window .gray { color: gray; } -.terminal-window .green { color: green;} \ No newline at end of file +.terminal-window .gray { color: var(--openms-grey); } +.terminal-window .green { color: var(--openms-purple); } diff --git a/assets/css/typography.css b/assets/css/typography.css new file mode 100644 index 0000000..7477982 --- /dev/null +++ b/assets/css/typography.css @@ -0,0 +1,161 @@ +/* OpenMS typography + Montserrat — primary headings (h1, h2, large titles) + Raleway — body copy & secondary headings (h3–h6) + JetBrains Mono thin — quotes, callouts & emphasis + Web minimum — 11pt +*/ + +html { + font-size: var(--openms-body-size); +} + +body { + font-family: var(--openms-font-body); + font-size: 1rem; + font-weight: var(--openms-body-weight); + line-height: 1.5; + color: var(--openms-dark); +} + +/* Normal text — 11–14pt */ +p, +li, +dd, +dt, +td, +th, +label, +input, +textarea, +select, +button, +.content-container, +.subtitle:not(.is-1):not(.is-2):not(.is-3), +.navbar-item, +.navbar-link, +.news-banner__message { + font-family: var(--openms-font-body); + font-weight: var(--openms-body-weight); +} + +.openms-text-sm { + font-size: var(--openms-text-min); +} + +.openms-text-lg { + font-size: var(--openms-body-size-lg); +} + +/* Presentations — 18pt */ +.openms-text-presentation, +.keyfeatures > .container > p { + font-family: var(--openms-font-body); + font-size: var(--openms-presentation-size); + font-weight: var(--openms-body-weight); + line-height: 1.55; +} + +/* Titles & large headings — Montserrat extra bold 26pt */ +h1, +.title.is-1, +.keyfeatures-title, +.casestudies-title, +.heroItemTitle, +.facts-title, +.shell-title, +.tabs-title, +.section-title, +.content-container h1 { + font-family: var(--openms-font-heading); + font-size: var(--openms-heading-xl-size); + font-weight: var(--openms-heading-xl-weight); + line-height: 1.25; + letter-spacing: normal; + text-transform: none; +} + +/* Chapters & headings — Montserrat bold 20pt */ +h2, +.title.is-2, +.footer-title, +.content-container h2, +.post-title h2 { + font-family: var(--openms-font-heading); + font-size: var(--openms-heading-lg-size); + font-weight: var(--openms-heading-lg-weight); + line-height: 1.3; + letter-spacing: normal; + text-transform: none; +} + +/* Secondary headings — Raleway regular */ +h3, +.title.is-3, +.keyfeatures-box-title, +.casestudies-box-title, +.content-container h3, +.post-subtitle h3 { + font-family: var(--openms-font-body); + font-size: var(--openms-secondary-heading-size-lg); + font-weight: var(--openms-secondary-heading-weight); + line-height: 1.35; + letter-spacing: normal; + text-transform: none; +} + +h4, +h5, +h6, +.title.is-4, +.title.is-5, +.title.is-6, +.content-container h4, +.content-container h5, +.content-container h6 { + font-family: var(--openms-font-body); + font-size: var(--openms-secondary-heading-size); + font-weight: var(--openms-secondary-heading-weight); + line-height: 1.35; + letter-spacing: normal; + text-transform: none; +} + +/* Quotes, callouts & emphasis — JetBrains Mono thin */ +blockquote, +blockquote p, +q, +.notice, +.notice-content, +.notice-type, +em, +i, +cite, +mark { + font-family: var(--openms-font-mono); + font-weight: var(--openms-mono-weight); + font-style: normal; + font-size: max(var(--openms-text-min), 1em); + line-height: 1.55; +} + +.notice-type { + letter-spacing: 0.05em; + text-transform: uppercase; +} + +blockquote p { + font-size: inherit; +} + +/* Web minimum — nothing smaller than 11pt (news banner uses compact sizes in news-banner.css) */ +.hero-modern__stat-label, +.hero-modern__btn, +.footer-link-group ul li a, +.footer-copyright, +.footer-column-label, +.tabs-section .tab, +.mailchimp-form, +.members-card, +.casestudies-box-text { + font-size: max(var(--openms-text-min), 1em); +} diff --git a/assets/css/vars_override.css b/assets/css/vars_override.css deleted file mode 100644 index d0697dc..0000000 --- a/assets/css/vars_override.css +++ /dev/null @@ -1,6 +0,0 @@ -:root { - --fontFamily: {{ .Site.Params.font.name }}; - - --colorPrimaryDark: #0c2a60; - --colorPrimaryDarkBtn: #0c2a60; -} diff --git a/assets/css/webapps.css b/assets/css/webapps.css index f782644..514dec2 100644 --- a/assets/css/webapps.css +++ b/assets/css/webapps.css @@ -29,9 +29,9 @@ flex-direction: column; align-items: center; height: 60%; - border: 1px solid lightgray; + border: 1px solid var(--openms-grey); border-radius: 25px; - box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.1); + box-shadow: 2px 2px 6px rgba(var(--openms-dark-rgb), 0.1); transition: height 0.6s ease; } @@ -115,7 +115,7 @@ .swiper-button-prev, .swiper-button-next { - color: #000080; + color: var(--openms-blue); position: absolute; top: 40%; } diff --git a/assets/icons/linkedin.svg b/assets/icons/linkedin.svg new file mode 100644 index 0000000..f820eaf --- /dev/null +++ b/assets/icons/linkedin.svg @@ -0,0 +1 @@ + diff --git a/assets/js/hero-stats.js b/assets/js/hero-stats.js new file mode 100644 index 0000000..1eb84d4 --- /dev/null +++ b/assets/js/hero-stats.js @@ -0,0 +1,74 @@ +(function () { + var counters = Array.prototype.filter.call( + document.querySelectorAll(".hero-modern__stat-number[data-count-value]"), + function (counter) { + return counter.offsetParent !== null; + } + ); + if (!counters.length) return; + + var prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; + + function formatValue(value, decimals) { + return decimals > 0 ? value.toFixed(decimals) : String(Math.round(value)); + } + + function setFinal(counter) { + var target = parseFloat(counter.getAttribute("data-count-value")); + var suffix = counter.getAttribute("data-count-suffix") || ""; + var decimals = parseInt(counter.getAttribute("data-count-decimals") || "0", 10); + counter.textContent = formatValue(target, decimals) + suffix; + } + + function animateCounter(counter) { + if (counter.dataset.countAnimated === "true") return; + counter.dataset.countAnimated = "true"; + + var target = parseFloat(counter.getAttribute("data-count-value")); + var suffix = counter.getAttribute("data-count-suffix") || ""; + var decimals = parseInt(counter.getAttribute("data-count-decimals") || "0", 10); + var duration = 2000; + var start = performance.now(); + + function tick(now) { + var progress = Math.min((now - start) / duration, 1); + var eased = 1 - Math.pow(1 - progress, 3); + var current = target * eased; + counter.textContent = formatValue(current, decimals) + suffix; + + if (progress < 1) { + requestAnimationFrame(tick); + } else { + counter.textContent = formatValue(target, decimals) + suffix; + } + } + + requestAnimationFrame(tick); + } + + if (prefersReducedMotion) { + counters.forEach(setFinal); + return; + } + + if (!("IntersectionObserver" in window)) { + counters.forEach(animateCounter); + return; + } + + var observer = new IntersectionObserver( + function (entries) { + entries.forEach(function (entry) { + if (entry.isIntersecting) { + animateCounter(entry.target); + observer.unobserve(entry.target); + } + }); + }, + { threshold: 0.3 } + ); + + counters.forEach(function (counter) { + observer.observe(counter); + }); +})(); diff --git a/assets/js/navbar.js b/assets/js/navbar.js new file mode 100644 index 0000000..8f3c394 --- /dev/null +++ b/assets/js/navbar.js @@ -0,0 +1,107 @@ +/** + * Mobile navbar — burger menu, dropdown toggles & close on navigate + */ +(function () { + var MOBILE_MAX = 1023; + + function isMobileNav() { + return window.matchMedia("(max-width: " + MOBILE_MAX + "px)").matches; + } + + function closeDropdowns(nav) { + if (!nav) return; + nav.querySelectorAll(".navbar-item.has-dropdown.is-active").forEach(function (el) { + el.classList.remove("is-active"); + var link = el.querySelector(".navbar-link"); + if (link) link.setAttribute("aria-expanded", "false"); + }); + } + + function closeMobileMenu(nav) { + if (!nav) return; + var menu = nav.querySelector(".navbar-menu"); + var burger = nav.querySelector(".navbar-burger"); + if (menu) menu.classList.remove("is-active"); + if (burger) { + burger.classList.remove("is-active"); + burger.setAttribute("aria-expanded", "false"); + } + closeDropdowns(nav); + } + + function setupNav(nav) { + if (!nav) return; + + var menu = nav.querySelector(".navbar-menu"); + var burger = nav.querySelector(".navbar-burger"); + + if (burger && menu) { + burger.addEventListener("click", function (e) { + if (!isMobileNav()) return; + e.preventDefault(); + e.stopPropagation(); + /* Theme fresh.js also toggles the burger — prevent double-toggle */ + e.stopImmediatePropagation(); + + var willOpen = !menu.classList.contains("is-active"); + menu.classList.toggle("is-active", willOpen); + burger.classList.toggle("is-active", willOpen); + burger.setAttribute("aria-expanded", willOpen ? "true" : "false"); + + if (!willOpen) { + closeDropdowns(nav); + } else { + updateHeaderHeight(); + } + }); + } + + nav.querySelectorAll(".navbar-item.has-dropdown > .navbar-link").forEach(function (link) { + link.addEventListener("click", function (e) { + if (!isMobileNav()) return; + e.preventDefault(); + e.stopPropagation(); + + var parent = link.closest(".navbar-item.has-dropdown"); + var open = parent.classList.contains("is-active"); + closeDropdowns(nav); + if (!open) { + parent.classList.add("is-active"); + link.setAttribute("aria-expanded", "true"); + } + }); + }); + + if (menu) { + menu.querySelectorAll("a.navbar-item[href], a.navbar-cta-item").forEach(function (anchor) { + anchor.addEventListener("click", function () { + if (!isMobileNav()) return; + closeMobileMenu(nav); + }); + }); + } + } + + function updateHeaderHeight() { + var header = document.querySelector(".site-header"); + if (!header) return; + document.documentElement.style.setProperty( + "--openms-header-height", + header.offsetHeight + "px" + ); + } + + document.addEventListener("DOMContentLoaded", function () { + setupNav(document.getElementById("nav")); + setupNav(document.getElementById("navbar-clone")); + updateHeaderHeight(); + + window.addEventListener("resize", function () { + updateHeaderHeight(); + if (!isMobileNav()) { + closeMobileMenu(document.getElementById("nav")); + closeMobileMenu(document.getElementById("navbar-clone")); + } + }); + }); +})(); diff --git a/config.yaml b/config.yaml index c66342e..a2e1219 100644 --- a/config.yaml +++ b/config.yaml @@ -16,6 +16,23 @@ markup: disableLanguages: [] params: + font: + name: Montserrat + sizes: + - 400 + - 600 + - 700 + - 800 + bodyFont: + name: Raleway + sizes: + - 400 + - 500 + - 600 + monoFont: + name: JetBrains Mono + sizes: + - 100 images: - /images/logo.svg navColor: blue @@ -33,24 +50,41 @@ languages: languageName: English params: description: Why OpenMS? Mass Spectrometry. Visualizations. Open source. + newsBanner: + enabled: true + label: News + text: Workshop at University of Helsinki on April 30th 2026. + link: /news/ + # linkText: Learn more navbarlogo: image: OpenMS_transparent_blackFont.png link: / + altText: OpenMS hero: - # Main hero title - # title: OpenMS - # Hero subtitle (optional) - subtitle: The open-source framework for Mass Spectrometry - # Button text - buttontext: Install - # Where the main hero button links to + titleBefore: "The " + titleHighlight: open-source framework + titleAfter: " for Mass Spectrometry" + description: >- + Build sophisticated LC/MS data analysis tools with C++ or Python. + Process large datasets at scale. Create high-performance algorithms. + Join 1000+ researchers worldwide. + buttontext: Get Started Now buttonlink: https://openms.readthedocs.io/en/latest/about/installation.html - # Hero image (from static/images/___) - image: OpenMS_transparent_blackFont.png + stats: + - value: 10 + suffix: "+" + label: Years Active + - value: 1000 + suffix: "+" + label: Researchers + - value: 3.5 + suffix: ".0" + decimals: 1 + label: Latest Version heroGroup: - title: "OpenMS allows users to:" - bgColor: ECF2F9 + bgColor: C2BABC heroItems: - title: Run existing workflows subtitle: Run existing workflows for proteomics and metabolomics with OpenMS in KNIME. @@ -72,7 +106,7 @@ languages: buttonText: Get Started buttonLink: "https://pyopenms.readthedocs.io/en/latest/" - title: "Advanced users / developers can use OpenMS to:" - bgColor: FFF1E0 + bgColor: FFCB4F heroItems: - title: Analyze large datasets subtitle: Run workflows on very large datasets on powerful compute infrastructure @@ -139,10 +173,20 @@ languages: sponsorLogo2: /images/logos/elixir-logo-white.png sponsorLogo3: /images/logos/libis-logo-white.svg logo: + image: OpenMS_transparent_blackFont.png + link: / + altText: OpenMS + donate: + text: Donate + link: /about#donate socialmediatitle: "" socialmedia: - - link: https://discord.gg/v9tv5BxPch + - link: https://discord.com/invite/v9tv5BxPch icon: discord + - link: https://www.linkedin.com/company/openms-org + icon: linkedin + - link: https://github.com/openMS + icon: github quicklinks: column1: heading: RESOURCES @@ -173,13 +217,10 @@ languages: link: /exec_committee - text: Governance link: /governance - - text: Jobs - link: /jobs + column4: heading: LEGAL links: - - text: Help - link: /help - text: Terms of use link: /terms - text: Privacy @@ -190,35 +231,71 @@ languages: link: /impressum navbar: - - title: News - url: /news - - title: Install - url: https://openms.readthedocs.io/en/latest/about/installation.html - - title: Documentation - url: https://openms.readthedocs.io/en/latest/index.html + - title: Infrastructure + sublinks: + - title: OpenMS-lib + url: https://openms.readthedocs.io/en/latest/develop-with-openms/openms-cpp-core-library.html + is_external: true + - title: pyOpenMS + url: https://pyopenms.readthedocs.io/en/latest/ + is_external: true + - title: WebApp-template + url: https://github.com/OpenMS/streamlit-template + is_external: true + - title: Projects + url: /applications + sublinks: + - title: Featured Projects + url: /applications + - title: Affiliated Projects + url: /applications + - title: Archived Projects + url: /applications + - title: Learn + sublinks: + - title: Liquid Chromatography + url: https://openms.readthedocs.io/en/latest/about/learning/lc-chromatography.html + is_external: true + - title: Mass Spectrometry + url: https://openms.readthedocs.io/en/latest/about/learning/mass-spectrometry.html + is_external: true + - title: Identification and Quantification + url: https://openms.readthedocs.io/en/latest/about/learning/id-and-quant.html + is_external: true + - title: Background + url: https://pyopenms.readthedocs.io/en/release-3.5.0/user_guide/background.html + is_external: true + - title: Glossary + url: https://openms.readthedocs.io/en/latest/manual/glossary.html + is_external: true - title: Community sublinks: - - title: Communication - url: /communication - - title: Contribute + - title: News + url: /news + - title: Getting Involved url: /contribute - - title: Awards - url: /news/fellowship2024 - url: /community - - title: About Us + - title: Annual Developer Meeting + url: /news/ + - title: About sublinks: + - title: About + url: /about - title: Governance url: /governance - - title: Contributors - url: /contributors - url: /about - - title: Use Cases - url: /publications - sublinks: - - title: Applications - url: /applications - title: Publications url: /publications - - title: Help Request - url: /help-request + - title: Contact + url: /communication + - title: Partner with OpenMS + url: /about#institutional-partners + is_emphasized: true + sublinks: + - title: Research Partnerships + url: /about#institutional-partners + - title: Scientific and Technical Support + url: /help + - title: Sponsor Us + url: /about#sponsors + - title: Donate + url: /about#donate button: true diff --git a/content/en/about.md b/content/en/about.md index 14040b8..88c6ba2 100644 --- a/content/en/about.md +++ b/content/en/about.md @@ -7,13 +7,13 @@ OpenMS Inc. is the corporate entity and fiscal home of the OpenMS project. As a The board of directors of OpenMS Inc. consists of Dr. Samuel Wein as chief executive officer, Prof. Dr. Oliver Kohlbacher as chief scientific officer, and Dr. Timo Sachsenberg as chief technology officer. -## Sponsors +## Sponsors {#sponsors} OpenMS receives direct funding from the following sources: {{< sponsors >}} -## Institutional Partners +## Institutional Partners {#institutional-partners} Institutional Partners are organizations that support the project by employing people that contribute to OpenMS as part of their job. Current Institutional Partners include: diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 8b196d1..1e2ee50 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -39,7 +39,10 @@ {{ end }} {{ block "navbar" . }} - {{ partial "navbar.html" . }} + {{ partial "navbar-clone.html" . }} {{ end }} diff --git a/layouts/index.html b/layouts/index.html index 01136f5..0dce7c8 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -10,11 +10,7 @@ {{ if .Content }} {{ partial "single/content.html" . }} {{ end }} - - {{ if .Site.GetPage "/news" }} - {{ partial "news.html" . }} - {{ end }} - + {{ if .Site.Params.keyfeatures }} {{ partial "keyfeatures.html" . }} {{ end }} diff --git a/layouts/partials/css.html b/layouts/partials/css.html index 70295f0..dc0d2d4 100644 --- a/layouts/partials/css.html +++ b/layouts/partials/css.html @@ -5,14 +5,19 @@ {{- $sass := (slice "theme-css/fresh/core.scss") -}} {{- $cssOpts := cond ($inServerMode) (dict "enableSourceMap" true) (dict "outputStyle" "compressed") -}} - - - + +{{- $headingFont := .Site.Params.font.name | default "Montserrat" -}} +{{- $headingWeights := .Site.Params.font.sizes | default (slice 400 600 700 800) -}} +{{- $bodyFont := .Site.Params.bodyFont.name | default "Raleway" -}} +{{- $bodyWeights := .Site.Params.bodyFont.sizes | default (slice 400 500 600) -}} +{{- $monoFont := .Site.Params.monoFont.name | default "JetBrains Mono" -}} +{{- $monoWeights := .Site.Params.monoFont.sizes | default (slice 100) -}} +{{- $fontUrl := printf "https://fonts.googleapis.com/css2?family=%s:wght@%s&family=%s:wght@%s&family=%s:wght@%s&display=swap" (replace $headingFont " " "+") (delimit $headingWeights ";") (replace $bodyFont " " "+") (delimit $bodyWeights ";") (replace $monoFont " " "+") (delimit $monoWeights ";") -}} - + + + diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index d219add..d303e99 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -6,13 +6,29 @@ {{- $sponsorLogo3 := index $footer "sponsorLogo3" }} {{- $quickLinks := index $footer "quicklinks" }} {{- $socialMedia := index $footer "socialmedia" }} +{{- $footerLogo := index $footer "logo" | default .Site.Params.navbarlogo }} +{{- $donate := index $footer "donate" }}