<div class="widget">
  <h3 class="widget__title">
    Excepteur
  </h3>
  
  <p class="widget__text">
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
  </p>
  
  <a class="widget__link" href="#">
    Read more
  </a>
</div>

<button type="button" class="change-theme-control">Поменять тему</button>
:root {
  --color-1-darkest: #f7cd22;
  --color-1-darker: #f9d958;
  --color-1-dark: #fbe58f;
  --color-1: #fdf2c5;
  --color-1-light: #fffefb;

  --color-2-darkest: #cebb2b;
  --color-2-darker: #dccc55;
  --color-2-dark: #e5da84;
  --color-2: #efe8b2;
  --color-2-light: #f9f6e1;

  --color-3-darkest: #788846;
  --color-3-darker: #97ab5c;
  --color-3-dark: #afbe81;
  --color-3: #c6d1a6;
  --color-3-light: #dee4cb;
  --color-3-lighter: #f5f7f0;

  --color-4-darkest: #34654c;
  --color-4-darker: #478a68;
  --color-4-dark: #5dac84;
  --color-4: #82bfa0;
  --color-4-light: #a7d2bc;
  --color-4-lighter: #cce5d8;
  --color-4-lightest: #f1f8f5;

  --color-5-darkest: #1b1814;
  --color-5-darker: #3a352d;
  --color-5-dark: #5a5245;
  --color-5: #7a6f5d;
  --color-5-light: #988b78;
  --color-5-lighter: #b0a797;
  --color-5-lightest: #c8c2b7;
  
  --body-bg: var(--color-3-lighter);
  --card-bg: var(--color-1-light);
  --border: var(--color-3);
  --shadow: rgba(0,0,0,.1);
  --title: var(--color-4-darker);
  --text: #333;
  --link: var(--color-4-darker);
  --link-hover: var(--color-4);
  --button-bg: var(--color-3-light);
}

[data-theme="red"] {
  --color-1-darkest: hsl(48, 93.3%, 61.2%);
  --color-1-darker: hsl(48, 93.3%, 70.2%);
  --color-1-dark: hsl(48, 93.3%, 79.2%);
  --color-1: hsl(48, 93.3%, 88.2%);
  --color-1-light: hsl(48, 93.3%, 97.2%);

  --color-2-darkest: hsl(0, 80%, 48%);
  --color-2-darker: hsl(0, 80%, 57%);
  --color-2-dark: hsl(0, 80%, 66%);
  --color-2: hsl(0, 80%, 75%);
  --color-2-light: hsl(0, 80%, 84%);
  --color-2-lighter: hsl(0, 80%, 93%);

  --color-3-darkest: hsl(340, 70%, 50%);
  --color-3-darker: hsl(340, 70%, 59%);
  --color-3-dark: hsl(340, 70%, 68%);
  --color-3: hsl(340, 70%, 77%);
  --color-3-light: hsl(340, 70%, 86%);
  --color-3-lighter: hsl(340, 70%, 95%);

  --color-4-darkest: hsl(330, 45%, 43%);
  --color-4-darker: hsl(330, 45%, 52%);
  --color-4-dark: hsl(330, 45%, 61%);
  --color-4: hsl(330, 45%, 70%);
  --color-4-light: hsl(330, 45%, 79%);
  --color-4-lighter: hsl(330, 45%, 88%);
  --color-4-lightest: hsl(330, 45%, 97%);

  --color-5-darkest: hsl(37, 13.5%, 15.2%);
  --color-5-darker: hsl(37, 13.5%, 24.2%);
  --color-5-dark: hsl(37, 13.5%, 33.2%);
  --color-5: hsl(37, 13.5%, 42.2%);
  --color-5-light: hsl(37, 13.5%, 51.2%);
  --color-5-lighter: hsl(37, 13.5%, 60.2%);
  --color-5-lightest: hsl(37, 13.5%, 69.2%);
  
  --border: var(--color-3-light);
}

[data-theme="blue"] {
  --color-1-darkest: hsl(48, 93.3%, 61.2%);
  --color-1-darker: hsl(48, 93.3%, 70.2%);
  --color-1-dark: hsl(48, 93.3%, 79.2%);
  --color-1: hsl(48, 93.3%, 88.2%);
  --color-1-light: hsl(48, 93.3%, 97.2%);

  --color-2-darkest: hsl(180, 50%, 48%);
  --color-2-darker: hsl(180, 50%, 57%);
  --color-2-dark: hsl(180, 50%, 66%);
  --color-2: hsl(180, 50%, 75%);
  --color-2-light: hsl(180, 50%, 84%);
  --color-2-lighter: hsl(180, 50%, 93%);

  --color-3-darkest: hsl(200, 60%, 50%);
  --color-3-darker: hsl(200, 60%, 59%);
  --color-3-dark: hsl(200, 60%, 68%);
  --color-3: hsl(200, 60%, 77%);
  --color-3-light: hsl(200, 60%, 86%);
  --color-3-lighter: hsl(200, 60%, 95%);

  --color-4-darkest: hsl(210, 50%, 38%);
  --color-4-darker: hsl(210, 50%, 47%);
  --color-4-dark: hsl(210, 50%, 56%);
  --color-4: hsl(210, 50%, 65%);
  --color-4-light: hsl(210, 50%, 74%);
  --color-4-lighter: hsl(210, 50%, 83%);
  --color-4-lightest: hsl(210, 50%, 92%);

  --color-5-darkest: hsl(37, 13.5%, 15.2%);
  --color-5-darker: hsl(37, 13.5%, 24.2%);
  --color-5-dark: hsl(37, 13.5%, 33.2%);
  --color-5: hsl(37, 13.5%, 42.2%);
  --color-5-light: hsl(37, 13.5%, 51.2%);
  --color-5-lighter: hsl(37, 13.5%, 60.2%);
  --color-5-lightest: hsl(37, 13.5%, 69.2%);
}

BODY {
  background: var(--body-bg);
}

.widget {
  width: 250px;
  padding: 1rem;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 2px 4px var(--shadow);
  color: var(--text);
}

.widget__title {
  margin: 0 0 .5em;
  padding-bottom: .25em;
  border-bottom: 5px solid var(--title-border);
  font-size: 1.75rem;
  font-family: Georgia, serif;
  font-weight: normal;
  color: var(--title);
  
  &::after {
    content: '';
    display: block;
    width: 100%;
    height: .75rem;
    margin-top: 1rem;
    background: var(--body-bg);
    border: 1px solid var(--border);
    border-radius: 4px;
    box-shadow: 0 2px 4px var(--shadow) inset;
  }
}

.widget__link {
  color: var(--link);
  
  &:hover {
    text-decoration: none;
    color: var(--link-hover);
  }
}

.change-theme-control {
  position: absolute;
  top: 2rem;
  right: 2rem;
  padding: .25rem 1rem;
  border-radius: 4px;
  border: 1px solid var(--border);
  background: var(--button-bg);
  box-shadow: 0 2px 4px var(--shadow);
  font: inherit;
  cursor: pointer;
  color: iherit;
}



// Layout
BODY {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  font: 16px/1.5 Trebuchet MS, Arial, sans-serif;
}
View Compiled
const control = document.querySelector('.change-theme-control');

const themes = ['red', 'blue', 'default'];
let themesCounter = 0;

control.addEventListener('click', () => {
  document.documentElement.dataset.theme = themes[themesCounter];
  
  themesCounter++;
  
  if(themesCounter === themes.length) {
    themesCounter = 0;
  }
});
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.