/* =============================================================================
   CSS Custom Properties
   ============================================================================= */
:root {
  --color-background: #ffffff;
  --color-text: #2b2118;
  
  --space-extra-small: 0.539rem;
  --space-small: 1.272rem;
  --space-medium: 1.618rem;
  --space-large: 2.618rem;

  --font-default-size: 18px;
  --font-default-size-mobile: 15px;
  --font-line-height: 1.618;
  --font-line-height-mobile: 1.346;
  --font-size-small: 0.786rem;
  --font-size-normal: 1.0rem;
  --font-size-medium: 1.272rem;
  --font-size-large: 1.618rem;
  --font-size-extra-large: 2.618rem;
  --font-weight-normal: 400;
  --font-weight-medium: 500;
  --font-weight-bold: 600;
  
  --radius: 27px;
  --single-page-container-max-width: 800px;
  --transition: 1.2s ease;
  --shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  --shadow-hover: 0 5px 15px var(--color-text);
  
  --blur-height: 40px;
  --card-blur: 3px;
  --map-filter: contrast(1.1) brightness(0.95) saturate(0.6) hue-rotate(320deg);
}




/* =============================================================================
   Root Elements
   ============================================================================= */
html {
  scroll-behavior: smooth;
  font-size: var(--font-default-size);
  line-height: var(--font-line-height);
  font-family: 'Garamond', serif;
  text-align: justify;
}


body {
  margin: 0;
  box-sizing: border-box;
  background-color: var(--color-background);
  color: var(--color-text);
  font-size: var(--font-size-normal);
}




/* =============================================================================
   Blur Effect
   ============================================================================= */
body::before, body::after {
  content: '';
  position: fixed;
  left: 0;
  right: 0;
  height: var(--blur-height);
  backdrop-filter: blur(var(--space-extra-small));
  mask-image: linear-gradient(to bottom, black 0%, transparent 100%);
  -webkit-mask-image: linear-gradient(to bottom, black 0%, transparent 100%);
  z-index: 1000;
}


body::after {
  bottom: 0;
  transform: rotate(180deg);
}




/* =============================================================================
   Layout Components
   ============================================================================= */
.container {
  padding: var(--space-large);
}


.single-page-container {
  max-width: var(--single-page-container-max-width);
  margin: auto;
  border: 1px solid var(--color-background);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: box-shadow var(--transition);
}


.single-page-container:hover {
  box-shadow: var(--shadow-hover);
}


.publish-page-grid {
  display: grid;
  grid-gap: var(--space-medium);
}




/* =============================================================================
   Page Header
   ============================================================================= */
.header {
  margin: var(--space-small);
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  justify-content: space-between;
}


.header .link {
  font-size: var(--font-size-small);
}


.header-main-section {
  display: flex;
  flex-wrap: nowrap;
  gap: var(--space-medium);
  justify-content: space-between;
  margin-right: var(--space-medium);
}




/* =============================================================================
   Links
   ============================================================================= */
.link, .single-page-content a {
  padding: var(--space-extra-small) var(--space-small);
  min-height: var(--space-medium);
  background-color: var(--color-background);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  color: var(--color-text);
  font-size: var(--font-size-normal);
  font-weight: var(--font-weight-medium);
  text-decoration: none;
  transition: all var(--transition);
  white-space: nowrap;
  cursor: pointer;
  text-align: center;
  display: inline-grid;
  align-items: center;
  grid-gap: var(--space-extra-small);
  grid-auto-flow: column;
  width: fit-content;
}


.link:hover,
.single-page-content a:hover,
.link.js-active {
  background-color: var(--color-text);
  color: var(--color-background);
}


.icon {
  transition: filter var(--transition);
  width: var(--space-small);
  height: var(--space-small);
}


.link:hover .icon,
.link.js-active .icon {
  filter: brightness(0) invert(1);
}




/* =============================================================================
   Tags
   ============================================================================= */
.tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-small);
  justify-content: space-evenly;
}




/* =============================================================================
   Masonry Grid
   ============================================================================= */
.grid {
  columns: 3 270px;
  padding: var(--space-small);
}


.grid .card {
  margin-bottom: var(--space-small);
}


.grid .card[hidden],
.grid .card.hidden {
  display: none !important;
}




/* =============================================================================
   Event Cards
   ============================================================================= */
.card {
  background-color: var(--color-background);
  border: 1px solid var(--color-background);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  overflow: hidden; 
  transition: box-shadow var(--transition), border-color var(--transition);
  height: 100% !important;
  text-align: center;
}


.card:hover,
.card.js-active {
  box-shadow: var(--shadow-hover);
}


.card.now {
}


.card.upcoming {
}


.card.expired {
}




/* =============================================================================
   Card Components
   ============================================================================= */
.card-image-wrapper, .single-page-container-box {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius);
  margin-top: -1px;
}


img {
  vertical-align: middle;	
}


.card-image {
  width: 100%;
  height: auto;
  transition: transform var(--transition), filter var(--transition);
}


.card:hover .card-image,
.card.js-active .card-image {
  transform: scale(1.125); 
  filter: brightness(1.125);
}


.card-badge, .single-page-badge {
  position: absolute;
  padding: var(--space-extra-small) var(--space-small);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  font-size: var(--font-size-normal);
  font-weight: var(--font-weight-medium);
  color: var(--color-text);
  background-color: var(--color-background);
  display: inline-grid;
  align-items: center;
  grid-gap: var(--space-extra-small);
  grid-auto-flow: column;
}


.card-top-right-badge, .single-page-top-right-badge {
  top: var(--space-small);
  right: var(--space-small);
  margin-left: var(--space-small);
}


.single-page-bottom-right-badge {
  bottom: var(--space-small);
  right: var(--space-small);
  margin-left: var(--space-small);
}


.card-badge-now {
  background-color: var(--color-background);
  color: var(--color-text);
}


.card-badge-upcoming {
  background-color: var(--color-text);
  color: var(--color-background);
}


.card-badge-upcoming .icon {
  filter: brightness(0) invert(1);
}


.card-badge-expired {
  background-color: var(--color-background);
  color: var(--color-text);
}


.card-body {
  padding: var(--space-small);
}


.card-body a {
  text-decoration: none;
  color: inherit;
}


.card-text {
  padding-top: var(--space-extra-small);
  padding-bottom: var(--space-small);
}


.card-text h1,
.card-text h2,
.card-text h3,
.card-text h4,
.card-text h5,
.card-text h6 {
  margin: 0 0 var(--space-small) 0;
  font-size: var(--font-size-large);
  font-weight: var(--font-weight-bold);
  line-height: 1.2;
  color: var(--color-text);
}




/* =============================================================================
   Single Page Content
   ============================================================================= */
.single-page-content {
  padding: var(--space-medium);
  font-size: var(--font-size-medium);
}


.single-page-container-box-image {
  display: block;
  width: 100%;
  height: 400px;
  object-fit: cover;
  transition: transform var(--transition);
}


.single-page-container-box:hover .single-page-container-box-image {
  transform: scale(1.125);
}


.single-page-back-link {
  position: absolute;
  top: var(--space-small);
  left: var(--space-small);
}


.single-page-content p {
  margin: 0;
  text-align: inherit;
}


.single-page-content p a {
  white-space: normal;
  margin: var(--space-extra-small);
}


.single-page-content h1 { 
  margin-top: 0;
  margin-bottom: var(--space-medium);
  font-size: var(--font-size-extra-large);
  font-weight: var(--font-weight-bold);
}


.single-page-content h2 {
  font-size: var(--font-size-large);
  font-weight: var(--font-weight-bold);
  margin-top: var(--space-large);
  margin-bottom: var(--space-small);
}


.single-page-content h3 {
  font-size: var(--font-size-medium);
  font-weight: var(--font-weight-medium);
  margin-top: var(--space-small);
  margin-bottom: var(--space-small);
}


.single-page-content ul {
  padding-left: var(--space-small);
  list-style: outside;
  margin-top: var(--space-small);
  margin-bottom: var(--space-small);
}


.single-page-content ol {
  padding-left: var(--space-small);
  margin-top: var(--space-small);
  margin-bottom: var(--space-small);
}


.single-page-content blockquote {
  font-style: italic;
  margin-left: var(--space-large);
  margin-right: var(--space-large);
  margin-top: var(--space-small);
  margin-bottom: var(--space-small);
}


.single-page-content img {
  display: block;
  max-width: 100%;
  height: auto;
  margin: var(--space-medium) auto;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}


.single-page-content hr {
  border: 1px solid var(--color-background);
  box-shadow: var(--shadow);
}


.single-page-content table {
  width: 100%;
  border-spacing: 0;
  font-size: var(--font-size-medium);
  padding: var(--space-small);
}


.single-page-content th, .single-page-content td {
  padding: var(--space-extra-small);
  text-align: center;
}


.single-page-content th {
  text-transform: uppercase;
}


.single-page-content td {
  background-color: var(--color-background);
}




/* =============================================================================
   Leaflet Map
   ============================================================================= */
#map {
  height: 400px;
  filter: var(--map-filter);
}


.leaflet-control-attribution, .leaflet-popup-close-button, .leaflet-popup-tip {
  display: none !important;
}


.leaflet-tile {
  border-radius: 0 !important;
  image-rendering: pixelated; 
  object-fit: contain !important;
}




/* =============================================================================
   Input components
   ============================================================================= */
button, input, textarea {
  border-radius: var(--radius);
  font-family: inherit;
  font-size: var(--font-size-normal);
  align-content: center;
  background-color: var(--color-background);
  color: var(--color-text);
  border: none;
  transition: box-shadow var(--transition);
  box-shadow: var(--shadow);
  padding-left: var(--space-small);
  padding-right: var(--space-small);
  padding-top: var(--space-extra-small);
  padding-bottom: var(--space-extra-small);
  min-width: 0;
}


button:hover, input:hover, textarea:hover {
  box-shadow: var(--shadow-hover);
}


button, input {
  cursor: pointer;
}


button::placeholder,
input::placeholder,
textarea::placeholder {
  font-style: italic;
}


textarea {
  resize: vertical;
  min-height: var(--space-large);
}


button:focus, input:focus, textarea:focus {
  outline: none;
}




/* =============================================================================
   Publish Page Components
   ============================================================================= */
.publish-page-grid-row {
  display: inline-grid;
  align-items: center;
  grid-gap: var(--space-extra-small);
  grid-auto-flow: column;
  width: 100%;
}


.publish-page-file-upload-wrapper {
  justify-self: center;
}


.publish-page-file-upload-wrapper img {
  padding: var(--space-extra-small) var(--space-small);
  transition: box-shadow var(--transition);
  margin: 0;
  cursor: pointer;
}


.publish-page-file-upload-wrapper img:hover {
  box-shadow: var(--shadow-hover);
}


.publish-page-event-date {
  justify-self: center;
}

  
.publish-page-captcha {
  --cap-background: var(--color-background);
  --cap-border-color: none;
  --cap-border-radius: var(--radius);
  --cap-widget-height: var(--space-large);
  --cap-widget-width: fit-content;
  --cap-widget-padding: var(--space-small) var(--space-small) var(--space-small) var(--space-extra-small);
  --cap-gap: var(--space-extra-small);
  --cap-color: var(--color-text);
  --cap-checkbox-size: var(--space-medium);
  --cap-checkbox-border: 1px solid var(--color-text);
  --cap-checkbox-border-radius: var(--radius);
  --cap-checkbox-background: var(--color-background);
  --cap-checkbox-margin: var(--space-extra-small);
  --cap-font: "Garamond", serif;
  --cap-spinner-color: var(--color-text);
  --cap-spinner-background-color: var(--color-background);
  --cap-spinner-thickness: var(--space-extra-small);
  --cap-checkmark: url("/icons/success.svg");
  --cap-error-cross: url("/icons/fail.svg");
  --cap-credits-font-size: 0px;
  --cap-opacity-hover: 0;
  box-shadow: var(--shadow);
  width: fit-content;
  border-radius: var(--radius);
  transition: box-shadow var(--transition);
  cursor: pointer;
}


.publish-page-captcha:hover {
  box-shadow: var(--shadow-hover);
}




/* =============================================================================
   Responsive Design
   ============================================================================= */
@media (max-width: 1400px) {
  .container {
    max-width: 1360px;
  }
}


@media (max-width: 1200px) {
  .container {
    max-width: 1140px;
  }
  
  .grid {
    columns: 2 270px;
  }
}


@media (max-width: 992px) {
  .container {
    max-width: 960px;
  }
}


@media (max-width: 768px) {
  html {
  	font-size: var(--font-default-size-mobile);
 	line-height: var(--font-line-height-mobile);
  }
  body {
    text-align: left;
  }
  
  .container {
    max-width: 720px;
  }
    
  .grid {
    columns: 1;
    padding-left: 0;
    padding-right: 0;
  }
  
  .tags {
    flex-direction: row;
    flex-wrap: wrap;
  }
  
  .header {
    flex-direction: column;
    margin: 0;
    margin-bottom: var(--space-small);
    gap: var(--space-medium);
  }

  .header-main-section {
    width: 100%;
  }

  .single-page-content table {
    font-size: var(--font-size-small);
  }
  
  .single-page-content th, .single-page-content td {
    padding: var(--space-extra-small);
  }
}


@media (max-width: 576px) {
  .container {
    max-width: 540px;
    padding: var(--space-large) var(--space-small);
  }

  .single-page-content {
    padding: var(--space-small);
  }

  .single-page-content blockquote {
    margin-left: var(--space-medium);
    margin-right: var(--space-medium);
  }

  .single-page-content thead tr {
    display: none;
  }

  .single-page-content td {
    display: block; 
  }
  
  .single-page-content td:first-child {
    font-weight: var(--font-weight-bold);
    font-size: var(--font-size-large);
  }
  
  .single-page-content td:last-child {
    font-size: var(--font-size-small);
  }
}
