diff --git a/conservancy/content/copyleft-compliance/vizio-filing-press-release.html b/conservancy/content/copyleft-compliance/vizio-filing-press-release.html index d1f4771a..266089ed 100644 --- a/conservancy/content/copyleft-compliance/vizio-filing-press-release.html +++ b/conservancy/content/copyleft-compliance/vizio-filing-press-release.html @@ -1,4 +1,4 @@ -{% extends "base_vizio.html" %} +{% extends "base_vizio_og.html" %} {% block subtitle %}Copyleft Compliance Projects - {% endblock %} {% block submenuselection %}VizioMain{% endblock %} {% block content %} diff --git a/conservancy/content/copyleft-compliance/vizio.html b/conservancy/content/copyleft-compliance/vizio.html index 2b901643..7efac6bc 100644 --- a/conservancy/content/copyleft-compliance/vizio.html +++ b/conservancy/content/copyleft-compliance/vizio.html @@ -1,71 +1,131 @@ {% extends "base_vizio.html" %} +{% load static %} {% block subtitle %}Copyleft Compliance Projects - {% endblock %} {% block submenuselection %}VizioMain{% endblock %} -{% block content %} -

Current Status of Vizio Case

- -

The case's expected trial date is in September 2025.

- -

History of Vizio Case

-

On October 19, 2021, SFC filed a third-party beneficiary contract lawsuit against Vizio in California State Court in Orange County, CA. Our complaint demands no financial compensation but instead asks for what truly matters with regard to software rights and freedom: the “specific performance” (fulfilling a contract requirement in exactly the way the contract specifies) of production of complete, corresponding source code (CCS) — as defined in the various GPL Agreements (such as GPLv2 and LGPLv2.1).

- -

Vizio has still not provided CCS for their televisions to SFC, and so our lawsuit continues. Instead, Vizio attempted to “remove” the case to federal court (arguing that copyright claims preempted our third-party beneficiary contract claim). We succeeded in our motion to remand the case back to state court; the federal judge agreed that our case included an “extra element” not covered by copyright.

- -

After several months of litigation back in state court, Vizio filed for summary judgment in the state court again arguing copyright preemption. The state court is not bound by the federal court's ruling against preemption, so Vizio was able to essentially re-argue its motion to dismiss. (Vizio also argued that the GPL Agreements have no third-party beneficiaries — which was the first time Vizio has tried to attack these claims substantively). On 29 December 2023, the judge denied Vizio's motion for summary judgment.

- -

Portions of Interest from the Docket in the Vizio Case

- -Below are documents from the docket(s) in this SFC v. Vizio case of interest, -provided in (roughly) chronological order: +{% block case-info %} +

Software Freedom Conservancy v. Vizio Inc.

- -

MEDIA CONTACT

- -You can reach out media team at <media@sfconservancy.org>

- + {% endblock %} + + + +{% block resources %} +

+FAQ / Photo Assets / Glossary +
+Press Release / Media Contact / Press Kit +

+{% endblock %} + diff --git a/conservancy/content/press/qanda.html b/conservancy/content/press/qanda.html index 3e0d6aa1..f289448d 100644 --- a/conservancy/content/press/qanda.html +++ b/conservancy/content/press/qanda.html @@ -1,4 +1,4 @@ -{% extends "base_vizio.html" %} +{% extends "base_vizio_og.html" %} {% block subtitle %}Press - {% endblock %} {% block submenuselection %}VizioQandA{% endblock %} {% block content %} diff --git a/conservancy/static/css/conservancy.css b/conservancy/static/css/conservancy.css index efd76ea3..0ae3710e 100644 --- a/conservancy/static/css/conservancy.css +++ b/conservancy/static/css/conservancy.css @@ -1,6 +1,6 @@ -* { margin: 0; padding: 0; } +* { margin: 0; padding: 0; box-sizing: border-box;} img { border: 0; } -body { margin: 0; padding: 0; } +body { margin: 0; padding: 0; background: var(--chino); } .clear { clear: both; } p, h1, h2, h3, h4, h5, h6, #mainContent ul, #mainContent ol { @@ -9,20 +9,54 @@ p, h1, h2, h3, h4, h5, h6, #mainContent ul, #mainContent ol { } p, li { - line-height: 1.6; + line-height: 1.42; +} + +p { + font-size: 1.1rem; + font-weight: 375; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 550; +} + +h1 { + font-size: 3rem; + line-height: 1.05; } html { - /* Standard colorss. */ - --khaki-green: #587733; - --light-green: #afe478; - --washed-green: #daf4be; - --light-blue: #92d4d1; - --washed-blue: #ddfbfa; - --navy: #224c57; - --orange: #ec6343; + /* Standard colors. */ --orange-dim: #e05340; --orange-dimmer: #ce3520; + + /*MT: Updated in Julu 2025, some duplicated to maximize compatibility with old color variable names.*/ + --orange: #DB6922; + --light-orange: #FAC19E; /* Added for consistency */ + --washed-orange: #FAC19E; + --green:#5E9622; + --khaki-green: #5E9622 ; + --washed-green:#BCE68F; + --light-green: #BCE68F; + --navy:#154666; + --washed-blue:#8DC4E7; + --light-blue:#8DC4E7; + --teal:#22967F; + --washed-teal:#8FE6D4; + + --black: #292A2E; + --grey: #5E616B; + --chino:#F3EFE3; + --white:#ffffff; + + /* MT: Variables for some other commonly reused styling in the site */ + --corner: 6px; + --border: solid 2px var(--black); + --btn-padding: 9px 21px 7px 20px; /* Sets padding for nav touch targets and buttons*/ + --max-site-width: 1440px; /* This will set the max width for the content on the site*/ + --sidebar-padding: 42px 40px; + --court-case-padding: 37px 35px; } /* Some Tachyons-like classes to apply those standard colors. */ @@ -32,9 +66,843 @@ html { .b--light-blue { border-color: var(--light-blue); } .navy { color: var(--navy); } + +/* ========================================================================== +Custom Font (MT/2025) + +The whole site now ues Atkinson Hyperlegible Next. This is an open-source +font designed by the Braille Institue to improve legibility and readability +for individuals with low vision. +========================================================================== */ + +@font-face { + font-family: 'AtkinsonHyperlegibleNext'; + src: url('../fonts/AtkinsonHyperlegibleNextVF-Variable.woff2') format('woff2-variations'); + font-weight: 300 700; + font-stretch: 100% 100%; + font-display: swap; +} + +/* ========================================================================== +RESPONSIVE GRID SYSTEM (MT/2025) +========================================================================== */ + +.grid { + display: grid; + grid-template-columns: repeat(12, 1fr); + grid-gap: 20px; +} + +/* Mobile breakpoint - below 800px */ +@media only screen and (max-width: 66.999em) { + .mobi0 { display: none; } + .mobi1 { grid-column-end: span 12; } + .mobi2 { grid-column-end: span 6; } + .mobi3 { grid-column-end: span 4; } + .mobi4 { grid-column-end: span 3; } + .mobi6 { grid-column-end: span 2; } + .mobi12 { grid-column-end: span 1; } +} + +@media only screen and (min-width: 67em) { + .desk0 { display: none; } + .desk1 { grid-column-end: span 12; } + .desk2 { grid-column-end: span 6; } + .desk3 { grid-column-end: span 4; } + .desk4 { grid-column-end: span 3; } + .desk6 { grid-column-end: span 2; } + .desk8 { grid-column-end: span 8; } + .desk12 { grid-column-end: span 1; } +} + +/* This class is for accessibility: visually hide content but keep for screen readers */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +/* ============================================================================================= +NOTIFICATION BAR (MT/2025) + +Adds a notification bar to the top of the page. This is used to display important information. +================================================================================================ */ + +a.notification-bar { + display: block; + background-color: var(--washed-green); + width: 100vw; + text-align: center; + padding: 10px 0; + font-size: 1rem; + font-weight: 450; + color: var(--black); + text-decoration: none; + border-top: var(--border); + cursor: pointer; +} + +a.notification-bar:hover { + text-decoration: underline; +} + +a.notification-bar svg { + height: .9rem; + width: .9rem; + fill: var(--black); + transform: translateY(3px); +} + +a.notification-bar:hover svg { + transform: translateY(3px); +} + +/* ============================================================================================= +HEADER & PRIMARY NAVIGATION BAR (Desktop First) (MT/2025) +================================================================================================ */ + +.header-container { + background-color: var(--white); + position: relative; + z-index: 100; + padding: 1.55rem 0; + border-top: solid 2px var(--black); + border-bottom: solid 2px var(--black); + overflow-x: visible; + overflow-y: visible; +} + +/* Make header sticky on mobile */ +@media screen and (max-width: 66.999em) { + .header-container { + position: sticky; + top: 0; + z-index: 200; + } +} + +.header-inner { + display: flex; + justify-content: center; + align-items: center; + padding: 0 1rem; + max-width: var(--max-site-width); + margin: 0 auto; +} + + + +#primary-nav-bar { + display: grid; + grid-template-columns: auto 1fr; + align-items: center; + width: 100%; +} + +.header-logo { + height: 60px; + width: auto; +} + +a.header-logo-link:hover { + background: var(--white); +} + +/* Desktop Main Menu List */ +#main-desktop-list { + list-style: none; + text-transform: uppercase; + padding: 0; + margin: 0; + display: flex; + flex-wrap: wrap; + flex-grow: 1; + justify-content: flex-end; +} + +#main-desktop-list li { + position: relative; + padding-left: 5px; + white-space: nowrap; +} + +#main-desktop-list li > a { + display: inline-block; + color: var(--black); + text-decoration: none; + text-transform: none; + font-size: 1.2rem; + font-weight: 550; + padding: var(--btn-padding); + border-radius: var(--corner); + transition: color 0.2s ease-in-out; +} + +#main-desktop-list > li > a:hover, +#main-desktop-list > li:hover > a { + color: var(--grey); + background: none; +} + +.menu-arrow { + vertical-align: middle; + width: 1rem; + height: 1rem; + transform: translateY(-1px); + transition: transform 75ms ease-in-out, fill 0.2s ease-in-out; + transform-origin: center center; +} + + +#main-desktop-list li a:hover .menu-arrow, +#main-desktop-list li:hover .menu-arrow { + transform: rotate(180deg); +} + +#main-desktop-list > li > a:hover .menu-arrow, +#main-desktop-list > li:hover > a .menu-arrow { + fill: var(--grey); +} + + +/* Submenu styling (desktop) */ +#main-desktop-list li ul.dropdown-menu-list { + display: none; + z-index: 1000; + position: absolute; + top: 100%; + left: 50%; + transform: translateX(-50%) translateY(-2px); + width: 340px; + text-transform: none; + background: var(--chino); + list-style: none; + border: var(--border); +} + + +#main-desktop-list li:hover .dropdown-menu-list { + display: block; +} + +#main-desktop-list li ul.dropdown-menu-list li { + padding: 0; + width: 100%; + border-bottom: var(--border); +} + +#main-desktop-list li ul.dropdown-menu-list li:hover { + background: var(--washed-green); +} + + +#main-desktop-list li ul.dropdown-menu-list li:last-child { + border-bottom: none; +} + +#main-desktop-list li ul.dropdown-menu-list a { + display: block; + border: none; + padding: 29px 30px 27px; +} + +#main-desktop-list li ul.dropdown-menu-list a h3 { + font-size: 1.1rem; + margin: 0; + padding: 0; + font-weight: 550; + line-height: 1; + margin-bottom: 5px; +} + +#main-desktop-list li ul.dropdown-menu-list p { + max-width: 100%; + text-wrap: wrap; + margin-block-end: 0; + color: var(--grey); + font-size: 0.88rem; + font-weight: 300; + line-height: 1.2; +} + + +#main-desktop-list li a.desktop-donate-btn { + background: var(--washed-orange); + border: var(--border); + transition: all 200ms ease-in-out; +} + +#main-desktop-list li a.desktop-donate-btn:hover { + background: var(--orange); + color: var(--white) !important; +} + + + +/* ============================================================================================= +MOBILE NAVIGATION (Hidden by default, shown via media query/JS) (MT/2025) +================================================================================================ */ + + +/* Mobile Nav Overlay (the full screen menu) */ +#main-mobile-nav { + display: flex; + position: fixed; + top: 0; + right: 0; + width: 100vw; + height: 100%; + background-color: var(--chino); + color: white; + overflow-y: auto; + z-index: 300; + transform: translateX(100%); + transition: transform 0.3s ease-out; + -webkit-overflow-scrolling: touch; + flex-direction: column; + visibility: hidden; +} + +/* Class to apply when the mobile nav is OPEN */ +#main-mobile-nav.is-open { + transform: translateX(0); + visibility: visible; +} + +/* Mobile Nav Header (logo and close button) */ +.mobile-nav-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem 1.5rem; + background-color: var(--white); + border-bottom: var(--border); + border-top: var(--border); + position: sticky; + top: 0; + z-index: 310; +} + +.mobile-logo-link img { + height: 50px; /* Smaller logo for mobile menu */ + width: auto; +} + +#mobile-nav-close { + background: transparent; + border: none; + color: var(--black); + font-size: 2rem; /* Larger 'X' icon */ + padding: 0.5rem; + cursor: pointer; + transition: color 0.2s ease-in-out; + transform: translateY(5px); +} + +#mobile-nav-close:hover { + color: var(--orange); +} + +.mobile-nav-content { + flex-grow: 1; +} + +.mobile-main-menu { + list-style: none; + padding: 0; + margin: 0; +} + +.mobile-main-menu > li { + border-bottom: var(--border); /* Separator between main items */ + background-color: var(--white); +} + +.mobile-main-menu > li > a { + display: flex; + justify-content: space-between; + align-items: center; + padding: 25px 30px 22px 20px; + color: var(--black); + text-decoration: none; + font-size: 1.2rem; + font-weight: 550; + text-transform: none; +} + +.mobile-main-menu > li > a .menu-arrow { + transition: transform 0.3s ease; /* For accordion arrow rotation */ + transform-origin: center center; + fill: var(--black); +} + +/* Mobile Submenu Styling (Accordion style) */ +.mobile-main-menu ul { + list-style: none; + padding: 0; + margin: 0; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease-out; /* Smooth expansion */ +} + +.mobile-main-menu ul li { + border-bottom: none; +} + +.mobile-main-menu ul li a, +.mobile-main-menu .dropdown-menu-list li a, +#main-mobile-nav .mobile-main-menu ul li a, +#main-mobile-nav .mobile-main-menu .dropdown-menu-list li a { + display: block; + padding: 18px 20px 15px; + color: var(--black); + text-decoration: none; + text-transform: none; + background-color: var(--chino); + border-top: solid 2px var(--white); +} + +/* Target h3 elements within mobile submenu links */ +.mobile-main-menu ul li a h3, +.mobile-main-menu .dropdown-menu-list li a h3, +#main-mobile-nav .mobile-main-menu ul li a h3, +#main-mobile-nav .mobile-main-menu .dropdown-menu-list li a h3 { + font-weight: 450; + font-size: 1.1rem; + margin: 0; + padding: 0; +} + +/* Target p elements within mobile submenu links */ +.mobile-main-menu ul li a p, +.mobile-main-menu .dropdown-menu-list li a p, +#main-mobile-nav .mobile-main-menu ul li a p, +#main-mobile-nav .mobile-main-menu .dropdown-menu-list li a p { + color: var(--grey); + font-size: 0.88rem; + font-weight: 300; + line-height: 1.2; + margin: 0; + padding-bottom: 6px; +} + +.mobile-main-menu ul li:first-child a, +.mobile-main-menu .dropdown-menu-list li:first-child a, +#main-mobile-nav .mobile-main-menu ul li:first-child a, +#main-mobile-nav .mobile-main-menu .dropdown-menu-list li:first-child a { + border-top: var(--border); /* First submenu item gets the main border */ +} + +/* Mobile Donate Button inside the menu */ +.mobile-main-menu .mobile-donate { + padding: 30px 20px 27px; +} +.mobile-main-menu .mobile-donate a { + display: flex; + align-items: center; + justify-content: center; + padding: var(--btn-padding); + background-color: var(--washed-orange); + transition: background-color 0.2s ease-out; + color: var(--black); + text-decoration: none; + text-transform: none; + font-size: 1.2rem; + font-weight: 550; + border-radius: var(--corner); + text-align: center; + width: 100%; + border: var(--border); + margin: 0 auto; + justify-content: center; +} +.mobile-donate a:hover { + background-color: var(--light-orange); /* Lighter orange on hover */ +} + +/* ============================================================================================= +RESPONSIVE ADJUSTMENTS (Media Queries) (MT/2025) +================================================================================================ */ + +@media screen and (min-width: 67em) { /* Uses existing bigscreen breakpoint */ + .header-inner { + padding: 0 1rem; + } + + /* Add specific padding for screens 1440px and wider */ + @media screen and (min-width: 1440px) { + .header-inner { + padding: 0; + } + } + + #mobile-menu-toggle { + display: none !important; + } + + #primary-nav-bar #main-desktop-list, + #primary-nav-bar .desktop-donate-btn { + display: flex !important; + } + + #main-mobile-nav { + visibility: hidden !important; + } +} + +@media screen and (max-width: 66.999em) { + #primary-nav-bar #main-desktop-list, + #primary-nav-bar .desktop-donate-btn { + display: none !important; + } + + #mobile-menu-toggle { + display: block !important; + margin-left: auto; + background: transparent; + border: none; + padding: 0.5rem; + cursor: pointer; + transition: all 0.2s ease; + } + + #mobile-menu-toggle:hover { + transform: scale(1.1); + } + + .header-logo-link { + margin-right: 0; /* Remove extra margin on mobile logo */ + } + .header-logo { + height: 50px; /* Smaller logo for mobile header */ + } +} + + + + +/* ============================================================================================= +Site Footer (MT/2025) +================================================================================================ */ + +.footer-container { + width: 100%; + background: var(--white); +} + +/* Decorative line above footer */ +.footer-container::before { + content: ""; + display: block; + height: 21px; + background-color: var(--green); + border-top: var(--border); + border-bottom: var(--border); +} + +.footer-inner { + max-width: var(--max-site-width); + margin: 45px auto 40px; + padding: 0; + display: grid; + grid-template-areas: + "logo nav" + "social charity"; + grid-template-columns: 1fr 2fr; + grid-template-rows: auto auto; + grid-row-gap: 60px +} + +@media screen and (max-width: 1440px) and (min-width: 67em) { + .footer-inner { + margin-left: 1rem; + margin-right: 1rem; + } +} + +.footer-inner #footer-logo-link { grid-area: logo;} +.footer-inner #footer-logo-link:hover { background: var(--white); } + +.footer-inner .footer-nav { + grid-area: nav; + display: flex; + flex-direction: column; + gap: 1rem; + align-items: flex-end; + text-align: right; +} + +.footer-nav ul { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + justify-content: flex-end; +} + +.footer-nav li { + position: relative; + white-space: nowrap; +} + +.footer-nav a { + display: inline-block; + color: var(--black); + text-decoration: none; + font-size: 1.2rem; + font-weight: 450; + padding: var(--btn-padding); + border-radius: var(--corner); + transition: color 0.2s ease-in-out, background 0.2s ease-in-out; +} + +.footer-nav a:hover, +.footer-nav a:focus { + text-decoration: underline; + background: none; +} + +#footer-donate-btn { + background: var(--washed-orange); + border: var(--border); + color: var(--black); + text-decoration: none; + font-size: 1.2rem; + font-weight: 450; + padding: var(--btn-padding); + border-radius: var(--corner); + transition: all 200ms ease-in-out; + align-self: flex-end; +} + +#footer-donate-btn:hover, +#footer-donate-btn:focus { + text-decoration: none; + background: var(--orange); + color: var(--white); +} + +.footer-inner .charity-info { + grid-area: charity; + text-align: right; + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: flex-end; +} + + +.footer-inner .charity-info { + grid-area: charity; +} + +.footer-inner .charity-info p { + font-size: 0.9rem; + font-weight: 400; + margin-bottom: 0; +} + +.footer-inner .social-links { grid-area: social; } + + +.footer-container .social-links a { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3em; + height: 3em; + margin: 0 0.25em; + border-radius: var(--corner); + border: var(--border); + box-sizing: border-box; +} +.footer-container .social-x { background:#C9CACF } +.footer-container .social-facebook { background: var(--washed-blue); } +.footer-container .social-youtube { background: #FA9E9E; } +.footer-container .social-mastodon { background: var(--washed-green); } + +.footer-container .social-x:hover, +.footer-container .social-x:focus { + background: #333333; +} +.footer-container .social-facebook:hover, +.footer-container .social-facebook:focus { + background: #187BBA; +} +.footer-container .social-youtube:hover, +.footer-container .social-youtube:focus { + background: #CC2929; +} +.footer-container .social-mastodon:hover, +.footer-container .social-mastodon:focus { + background: var(--green); +} + +.footer-container .social-links .fa-icon { + display: block; + width: 1.375em; + height: 1.375em; + fill: var(--black); + transition: color 0.2s, background 0.2s; +} + +.footer-container .social-links a:hover .fa-icon, +.footer-container .social-links a:focus .fa-icon { + transform: scale(0.99); + fill: var(--white); +} + +.site-footer-info { + display: grid; + grid-template-areas: "privacy cc cclogo"; + grid-template-columns: 4fr 7fr auto; + margin-top: 1rem; + width: 100%; + background: var(--chino); + border-top: var(--border); + border-bottom: var(--border); +} + +.site-footer-info p { + font-size: 0.9rem; + line-height: 1.2; + margin: 0; +} + +.site-footer-info .privacy-policy { + grid-area: privacy; + padding: 11px 10px 8px; +} + +.site-footer-info .cc-license { + grid-area: cc; + text-align: right; + border-left: var(--border); + border-right: var(--border); + height: 100%; + padding: 11px 10px 10px; +} + +.site-footer-info a.cc-logo { + grid-area: cclogo; + display: flex; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 66.999em) { + + + .footer-container .footer-inner { + grid-template-areas: + "logo" + "charity" + "social"; + grid-template-columns: 1fr; + grid-template-rows: auto auto auto; + grid-row-gap: 20px; + padding: 0 80px; + text-align: center; + align-items: center; + justify-items: center; + margin-top: 25px; + margin-bottom: 20px; + } + + .footer-container .footer-inner .footer-nav { + display: none; + } + + .footer-container .footer-inner .footer-logo { + height: 50px; + justify-self: center; + } + + .footer-container .footer-inner .social-links { + justify-self: center; + display: flex; + justify-content: center; + } + + .footer-container .footer-inner .social-links a { + width: 2.5rem; + height: 2.5rem; + } + + .footer-container .footer-inner .charity-info { + justify-self: center; + text-align: center; + align-items: center; + padding: 0 px; + } + + .footer-container .footer-inner .charity-info p { + line-height: 1.2; + } + + .footer-container .footer-inner .charity-info p { + text-align: center; + } + + .site-footer-info { + grid-template-areas: + "cclogo" + "cc" + "privacy"; + grid-template-columns: 1fr; + grid-template-rows: auto auto auto; + } + + .site-footer-info a.cc-logo:hover { + background: none; + } + + .site-footer-info img { + margin: 10px auto 0; + } + + .site-footer-info .cc-license p, + .site-footer-info .privacy-policy p { + text-align: center !important; + } + + .site-footer-info .cc-license { + border-left: none; + border-right: none; + border-bottom: var(--border); + padding: 0 20px 20px; + } + + + + +} + +/* ============================================================================================= +end of footer +================================================================================================ */ + + +.icon { + width: 40px; + height: 40px; + color: var(--black); +} + body { /* Native font stack as per Bootstrap 5.1. */ font-family: + 'AtkinsonHyperlegibleNext', system-ui, -apple-system, "Segoe UI", @@ -44,17 +912,17 @@ body { "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: .875rem; - color: #333; + font-size: 1.125rem; + font-weight: 400; + color: var(--black); } a { - text-decoration: none; - color: var(--navy); + text-decoration: underline; transition: all .1s ease-out; - font-weight: bold; + color: var(--black); } -a:hover { text-decoration: underline; } +a:hover { background: var(--washed-green); } /* Missing links */ a, form { position: relative; } @@ -171,6 +1039,9 @@ body > header { } } + + + /* Navigation bar */ #navbar-outer { background: var(--navy); @@ -328,94 +1199,128 @@ body > header { border-radius: 16px; } +#container { + display: grid; + grid-template-areas: "main sidebar"; + grid-template-columns: 7fr 4fr; + grid-gap: 2rem; + width: 100%; + margin: 0 auto; + margin-block-start: 0.83em; + margin-block-end: 0.83em; + max-width: var(--max-site-width); + padding: 60px 0; +} + +@media screen and (max-width: 1440px) and (min-width: 67em) { + #container { + padding: 0 25px; + } + +} + +@media screen and (max-width: 66.999em) { + #container { + grid-template-columns: 1fr; + grid-template-areas: "main" "sidebar"; + padding: 60px 20px; + } +} + + #container #mainContent { - max-width: 50em; - margin: 0 0 2rem; - padding: 0; - background: #ffffff; - flex: 1 1 auto; + grid-area: main; + margin: 0 0 2rem; + padding: 0; + flex: 1 1 auto; } #container #sidebar { - background-color: #e6eae1; - padding: 1px 0.5rem 2rem; - margin: 1rem -1rem 0; + grid-area: sidebar; + background-color: var(--washed-green); + border-radius: var(--corner); + border: var(--border); + padding: var(--sidebar-padding); + margin: 1rem 0 0; } @media screen and (min-width: 30em) { - #container { - display: flex; - } - #container #sidebar { - flex: 1 0 15em; - margin: 1rem 0rem 1rem 2rem; - } + } #container #sidebar li { - text-align: center; - list-style: none; - padding: 3px 10px 3px 10px; - margin: 5px; - border: 1px solid #CCC; - background: #eaf1f1; - background: -moz-linear-gradient(top, #fff, #eaf1f1); - background: -webkit-linear-gradient(top, #fff, #eaf1f1); - background: linear-gradient(to bottom, #fff, #eaf1f1); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eaf1f1', GradientType=0); + list-style: none; + margin-bottom: 0.8rem; } -#container #sidebar li a:hover { background: #577632; color: #fff; } -#container #sidebar.Sponsors ul li.Sponsors, -#container #sidebar.Directors ul li.Directors, -#container #sidebar.Eval ul li.Eval, -#container #sidebar.Overview ul li.Overview, -#container #sidebar.Contact ul li.Contact, -#container #sidebar.Staff ul li.Staff, -#container #sidebar.Outside ul li.Outside, -#container #sidebar.Transparency ul li.Transparency, -#container #sidebar.License ul li.License, -#container #sidebar.Current ul li.Current, -#container #sidebar.Services ul li.Services, -#container #sidebar.Applying ul li.Applying, -#container #sidebar.VizioTopBar ul li.VizioTopBar, -#container #sidebar.VizioMain ul li.VizioMain, -#container #sidebar.VizioPressRelease ul li.VizioPressRelase, -#container #sidebar.VizioComplaint ul li.VizioComplaint, -#container #sidebar.VizioQandA ul li.VizioQandA, -#container #sidebar.VizioPressKit ul li.VizioPressKit, -#container #sidebar.VizioPhotoAssets ul li.VizioPhotoAssets, -#container #sidebar.VizioPress ul li.VizioPress, -#container #sidebar.IssuesInTheNews ul li.IssuesInTheNews, -#container #sidebar.Glossary ul li.Glossary, -#container #sidebar.CopyleftCompliance ul li.CopyleftCompliance, -#container #sidebar.HelpComply ul li.HelpComply, -#container #sidebar.CopyleftPrinciples ul li.CopyleftPrinciples, -#container #sidebar.EnforcementStrategy ul li.EnforcementStrategy, -#container #sidebar.CopyleftCompliance ul li.CopyleftCompliance, -#container #sidebar.LiberateFirmware ul li.LiberateFirmware, -#container #sidebar.PastLawsuits ul li.PastLawsuits, -#container #sidebar.CopyleftOrg ul li.CopyleftOrg /* Never put a comma here */ -{ - color: #000033; - font-weight: bold; - background: #e3e6e0; +#container #sidebar li a { + padding: var(--btn-padding); + background: #eaf1f1; + border-radius: var(--corner); + color: var(--black); + border: var(--border); + text-decoration: none; + background: var(--white); + display: block; } +#container #sidebar li a:hover { background: var(--green); color: var(--white); } + +#container #sidebar.Sponsors ul li.Sponsors a, +#container #sidebar.Directors ul li.Directors a, +#container #sidebar.Eval ul li.Eval a, +#container #sidebar.Overview ul li.Overview a, +#container #sidebar.Contact ul li.Contact a, +#container #sidebar.Staff ul li.Staff a, +#container #sidebar.Outside ul li.Outside a, +#container #sidebar.Transparency ul li.Transparency a, +#container #sidebar.License ul li.License a, +#container #sidebar.Current ul li.Current a, +#container #sidebar.Services ul li.Services a, +#container #sidebar.Applying ul li.Applying a, +#container #sidebar.VizioTopBar ul li.VizioTopBar a, +#container #sidebar.VizioMain ul li.VizioMain a, +#container #sidebar.VizioPressRelease ul li.VizioPressRelase a, +#container #sidebar.VizioComplaint ul li.VizioComplaint a, +#container #sidebar.VizioQandA ul li.VizioQandA a, +#container #sidebar.VizioPressKit ul li.VizioPressKit a, +#container #sidebar.VizioPhotoAssets ul li.VizioPhotoAssets a, +#container #sidebar.VizioPress ul li.VizioPress a, +#container #sidebar.IssuesInTheNews ul li.IssuesInTheNews a, +#container #sidebar.Glossary ul li.Glossary a, +#container #sidebar.CopyleftCompliance ul li.CopyleftCompliance a, +#container #sidebar.HelpComply ul li.HelpComply a, +#container #sidebar.CopyleftPrinciples ul li.CopyleftPrinciples a, +#container #sidebar.EnforcementStrategy ul li.EnforcementStrategy a, +#container #sidebar.CopyleftCompliance ul li.CopyleftCompliance a, +#container #sidebar.LiberateFirmware ul li.LiberateFirmware a, +#container #sidebar.PastLawsuits ul li.PastLawsuits a, +#container #sidebar.CopyleftOrg ul li.CopyleftOrg a /* Never put a comma here */ +{ + color: var(--white); + background: var(--green); +} + #container #sidebar h2 { - text-align: center; - font-size: 1.25em; - margin: 1.5em 0 0.8em 0; + font-size: 1.3rem; + margin-bottom: 0.8rem; + font-weight: 550; } #container #sidebar hr { - width: 75%; - float: center; - clear: all; + width: 75%; + float: center; + clear: all; +} + +#container #sidebar ul li:last-child { + margin-bottom: 2.5rem; +} + +#container #sidebar ul:last-child li:last-child { + margin-bottom: 0; } .shaded { background: #F0FFB8; padding: .1em .5em; margin-bottom: .5em; } -.columns { -} .column h2 { font-size: 1.25em; } .column h3 { font-size: 1.1em; } @@ -701,3 +1606,256 @@ details summary { width: auto; height: auto; } + +/* ============================================================================================= +Court Case Page Styles (MT/2025) +================================================================================================ */ + +.case-header { + position: relative; + overflow: hidden; +} + +.case-header::before { + content: ""; + position: absolute; + left: 0; top: 0; bottom: 0; width: 50%; + background: var(--washed-green); + z-index: 0; +} + +.case-header > * { + position: relative; + z-index: 1; +} + +.case-bar { + width: 100%; + height: 25px; + background-color: var(--green); + border-top: var(--border); + border-bottom: var(--border); +} + +.case-info { + width: 100%; + max-width: var(--max-site-width); + display: grid; + grid-template-columns: 1fr 1fr; + margin: 0 auto; +} + +.case-info > * { + padding: 100px 0; + margin-right: 150px; +} + +.case-info h1 { + margin: 0 0 10px; + padding: 0; + font-size: 3.75rem; + line-height: 1.05; +} + +.case-info h4 { + font-weight: 400; +} + +.case-info ul { + list-style: none; + padding: 0; + margin: 0; +} + +.case-info ul li span{ + font-weight: 600; +} + +@media screen and (max-width: 66.999em) { + + .case-header { + background: var(--washed-green) !important; + } + + .case-header::before { + display: none; + } + + .case-info { + grid-template-columns: 1fr; + text-align: center; + padding: 50px 20px 0; + } + + .case-info > * { + margin: 0; + } + +} + +.case-content { + width: 100%; + max-width: var(--max-site-width); + margin: 0 auto; + display: grid; + grid-template-columns: 7fr 5fr; + grid-template-rows: auto; + grid-column-gap: 20px; + padding: 100px 0; +} + +@media screen and (max-width: 1440px) and (min-width: 67em) { + .case-content { + padding: 100px 20px; + } + +} + +@media screen and (max-width: 66.999em) { + .case-content { + grid-template-columns: 1fr; + padding: 100px 20px; + } +} + +.case-content * { + margin-block-end: 0; +} + +.case-content .case-content-left > *, +.case-content .case-content-right > * { + padding: var(--court-case-padding); + border: var(--border); + border-radius: var(--corner); + background: var(--white); + margin-bottom: 20px; +} + +.case-content h2 { + padding: 0; + margin: 0; + font-size: 1.3rem; + font-weight: 550; +} + +.case-content p { + font-size: 1.1rem; + line-height: 1.42; + font-weight: 375; + margin-top: 7px; +} + +.case-content p + details > summary { + margin-top: 10px; +} + +.case-content summary span.summary-title { + font-weight: 550; +} + +.case-content summary .summary-title span { + font-weight: 375; +} + +.case-content .legal-documents details li { + font-size: 0.95rem; + margin-left: 15px; + line-height: 1.2; + margin-bottom: 5px; +} +.case-content .why-case-matters { + background: var(--washed-orange); +} + +.case-content .news-coverage-link { + background: var(--washed-green); + text-align: center; +} + + +.case-content .news-coverage-link h2 a { + text-decoration: none; +} + +.case-content .news-coverage-link h2 a svg { + fill: var(--black); + height: 0.8em; + width: 0.8em; +} + +.case-content .news-coverage-link h2 a:hover { + background: none; + text-decoration: underline; +} + +.case-content .news-coverage-link h2 a:hover svg { + transform: scale(0.95); +} + +.case-content .legal-documents summary { + cursor: pointer; +} + +.case-content .legal-documents summary span { + transform: translateX(-15px) +} + +.toggle-section summary .toggle-icon.minus { display: none; } +.toggle-section[open] summary .toggle-icon.plus { display: none; } +.toggle-section[open] summary .toggle-icon.minus { display: inline-block; } + +.toggle-icon { + width: 0.8rem; + height: 0.8rem; + vertical-align: top; + margin-right: 0 !important; + fill: #71747F; +} + + +/* Remove default triangle in most browsers */ +.toggle-section summary { + list-style: none; +} + +/* Remove default triangle in WebKit browsers (Chrome, Safari, Edge) */ +.toggle-section summary::-webkit-details-marker { + display: none; +} + +/* Remove default triangle in Firefox */ +.toggle-section > summary::marker { + display: none; + font-size: 0; + color: transparent; +} + +.toggle-section summary { + position: relative; + padding-left: 2.5em; /* Adjust to fit icon width + margin */ + min-height: 1.5em; /* Adjust to fit icon height */ + display: block; /* Not flex! */ +} + +.toggle-section .toggle-icon { + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + /* width and height as needed */ +} + +.toggle-section .toggle-icon.plus, +.toggle-section[open] .toggle-icon.minus, +.toggle-section[open] .toggle-icon.plus { + display: none; +} + +.toggle-section .toggle-icon.plus, +.toggle-section[open] .toggle-icon.minus { + display: inline-block; +} +.toggle-section .summary-title { + display: block; + /* No extra indent needed, padding on summary handles it */ +} \ No newline at end of file diff --git a/conservancy/static/fonts/AtkinsonHyperlegibleNextVF-Variable.woff2 b/conservancy/static/fonts/AtkinsonHyperlegibleNextVF-Variable.woff2 new file mode 100644 index 00000000..d65952f3 Binary files /dev/null and b/conservancy/static/fonts/AtkinsonHyperlegibleNextVF-Variable.woff2 differ diff --git a/conservancy/static/img/conservancy-header-logo.svg b/conservancy/static/img/conservancy-header-logo.svg new file mode 100644 index 00000000..719e9eb4 --- /dev/null +++ b/conservancy/static/img/conservancy-header-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/conservancy/static/img/creative-commons-footer-icons.svg b/conservancy/static/img/creative-commons-footer-icons.svg new file mode 100644 index 00000000..9a5ac529 --- /dev/null +++ b/conservancy/static/img/creative-commons-footer-icons.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/conservancy/static/img/font_awesome_subset.svg b/conservancy/static/img/font_awesome_subset.svg index 259a35c8..0852a4d2 100644 --- a/conservancy/static/img/font_awesome_subset.svg +++ b/conservancy/static/img/font_awesome_subset.svg @@ -4,18 +4,21 @@ Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --> - - + + + - - + + + + @@ -31,4 +34,22 @@ License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL + + + + + + + + + + + + + + + + + + diff --git a/conservancy/static/img/vizio-image.webp b/conservancy/static/img/vizio-image.webp new file mode 100644 index 00000000..de425c84 Binary files /dev/null and b/conservancy/static/img/vizio-image.webp differ diff --git a/conservancy/static/js/conservancy.js b/conservancy/static/js/conservancy.js index 06e2ef36..6caf1c48 100644 --- a/conservancy/static/js/conservancy.js +++ b/conservancy/static/js/conservancy.js @@ -58,10 +58,10 @@ qsa('.supporter-form').forEach(function(form) { }); // Open mobile/search menu. -qs('#menu-icon').addEventListener('click', function(event) { - qs('#navbar').classList.toggle('mobile'); -}); -qs('#search-icon').addEventListener('click', function(event) { - qs('#navbar').classList.toggle('mobile'); - qs('#search-query').focus(); -}); +// qs('#menu-icon').addEventListener('click', function(event) { +// qs('#navbar').classList.toggle('mobile'); +// }); +// qs('#search-icon').addEventListener('click', function(event) { +// qs('#navbar').classList.toggle('mobile'); +// qs('#search-query').focus(); +// }); diff --git a/conservancy/static/js/mobile-nav.js b/conservancy/static/js/mobile-nav.js new file mode 100644 index 00000000..fb97c964 --- /dev/null +++ b/conservancy/static/js/mobile-nav.js @@ -0,0 +1,89 @@ +// A dedicated script for mobile navigation. +// It assumes the CSS is correctly set up for the slide-out and accordion behaviors. + +document.addEventListener('DOMContentLoaded', function() { + // 1. Mobile Menu Open/Close Elements + const mobileMenuToggle = document.getElementById('mobile-menu-toggle'); + const mainMobileNav = document.getElementById('main-mobile-nav'); + const mobileNavClose = document.getElementById('mobile-nav-close'); + const body = document.body; + // 2. Check if the required elements exist + if (mobileMenuToggle && mainMobileNav && mobileNavClose) { + // Handle opening the menu + mobileMenuToggle.addEventListener('click', function() { + mainMobileNav.classList.add('is-open'); + body.classList.add('nav-open'); // Add class to body to prevent scrolling + mainMobileNav.setAttribute('aria-hidden', 'false'); + mobileMenuToggle.setAttribute('aria-expanded', 'true'); + }); + // Handle closing the menu + mobileNavClose.addEventListener('click', function() { + mainMobileNav.classList.remove('is-open'); + body.classList.remove('nav-open'); // Remove class from body + mainMobileNav.setAttribute('aria-hidden', 'true'); + mobileMenuToggle.setAttribute('aria-expanded', 'false'); + }); + + } else { + console.error("Mobile navigation elements not found. Please ensure IDs 'mobile-menu-toggle', 'main-mobile-nav', and 'mobile-nav-close' are correct in your HTML."); + } + + // 3. Accordion Functionality + const mobileMainMenuItems = document.querySelectorAll('.mobile-main-menu > li'); + + mobileMainMenuItems.forEach(item => { + // Find the main link with a submenu indicator (aria-haspopup) + const parentLink = item.querySelector('a[aria-haspopup="true"]'); + // Find the submenu - {% endblock %} diff --git a/conservancy/templates/base_conservancy.html b/conservancy/templates/base_conservancy.html index 5849b003..ddf03ca3 100644 --- a/conservancy/templates/base_conservancy.html +++ b/conservancy/templates/base_conservancy.html @@ -1,5 +1,7 @@ {% load static %} + + @@ -10,94 +12,158 @@ - - + + {% block head %}{% endblock %} -
-
-
-

- - Software Freedom Conservancy - -

-
- + Get the latest update on our Vizio court case + +
+
{# Added class for styling #} + + + +
-