.panel_control *,
*::before,
*::after {
  box-sizing: border-box;
}

/* パネルコントロール */
.panel_control {
  --panel-border-width: 1px;
  --panel-item-width: 180px;
  --panel-item-height: 160px;
  --panel-border-color: var(--color-dark-gray);
  position: relative;
  width: 100%;
  transition: height 300ms ease;
}
.panel_control[data-height-expanded="true"] {
  transition: none;
}

/* パネルグループ */
.panel_control > .groups {
  width: 100%;
}
.panel_control > .groups > .group {
  display: grid;
  grid-template-rows: 0fr;
  overflow: hidden;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: grid-template-rows 300ms ease, opacity 300ms ease, visibility 300ms ease;
}
.panel_control > .groups > .group[data-shown="true"] {
  grid-template-rows: 1fr;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
.panel_control > .groups > .group > .contents {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.panel_control > .groups > .group > .contents > .title {
  padding: 10px;
}

/* パネルアイテム */
.panel_control > .groups > .group > .contents > .items {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-content: start;
}
.panel_control > .groups > .group > .contents > .items > .item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: var(--panel-item-width);
  height: var(--panel-item-height);
  margin: 0 4px 8px 4px;
  padding: 0 4px;
  border: var(--panel-border-width) solid var(--panel-border-color);
  cursor: pointer;
  border-radius: 10px;
  /* 行間 */
  line-height: 18px;
}
.panel_control > .groups > .group > .contents > .items > .item > .image {
  display: block;
  width: calc(var(--panel-item-width) - 10px);
  height: auto;
}
.panel_control > .groups > .group > .contents > .items > .item > .label {
  display: block;
  font-weight: bold;
  text-align: center;

  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  line-break: anywhere;
}
.panel_control > .groups > .group > .contents > .items > .item > .label1 {
  display: block;
  font-weight: bold;
  text-align: center;
  
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  line-break: anywhere;
}
.panel_control > .groups > .group > .contents > .items > .item > .label2 {
  display: block;
  margin-top: 0;
  font-size: 14px;
}

/* バブル */
.panel_control > .bubbles {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 0;
}
.panel_control > .bubbles > .bubble {
  --bubble-border-width: 1px;
  --bubble-background-color: var(--color-white);
  --bubble-border-color: var(--color-dark-gray);
  --bubble-horn-left: 0px;
  --bubble-horn-height: 20px;
  --bubble-horn-width: 40px; /* 常に高さの2倍 */
  --buble-page-base-padding-lr: 30px;
  --buble-page-base-padding-tb: 10px;
  --bubble-page-navigation-width: 15px;
  --bubble-page-navigation-height: 30px; /* 常に幅さの2倍 */
  --bubble-item-width: 150px;
  --bubble-item-height: 150px;
  --bubble-item-margin: 0;
  --bubble-item-padding: 4px;
  --bubble-item-border-width: 0;
  --bubble-page-item-count-x: 6;
  --bubble-page-item-count-y: 0; /* 0以下の場合は1ページに全て表示する */
  display: grid;
  grid-template-rows: 0fr;
  position: absolute;
  left: 0;
  top: 0;
  width: 0; /* データ設定時に計算 */
  height: 0; /* データ設定時に計算 */
  overflow: hidden;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: grid-template-rows 300ms ease, opacity 300ms ease, visibility 300ms ease;
}
.panel_control > .bubbles > .bubble[data-shown="true"] {
  grid-template-rows: 1fr;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
.panel_control > .bubbles > .bubble > .contents {
  position: relative;
  width: 100%;
  height: calc(100% - var(--bubble-horn-height));
  margin: var(--bubble-horn-height) 0 0 0;
  background-color: var(--bubble-background-color);
}
/* バブル角 */
.panel_control > .bubbles > .bubble > .contents::before {
  display: block;
  content: "";
  position: absolute;
  left: var(--bubble-horn-left);
  top: calc(0px - var(--bubble-horn-height));
  width: 0;
  height: 0;
  border-right: var(--bubble-horn-height) solid transparent;
  border-bottom: var(--bubble-horn-height) solid var(--bubble-border-color);
  border-left: var(--bubble-horn-height) solid transparent;
}
.panel_control > .bubbles > .bubble > .contents::after {
  display: block;
  content: "";
  position: absolute;
  left: var(--bubble-horn-left);
  top: calc(0px - var(--bubble-horn-height) + var(--bubble-border-width));
  width: 0;
  height: 0;
  border-right: var(--bubble-horn-height) solid transparent;
  border-bottom: var(--bubble-horn-height) solid var(--bubble-background-color);
  border-left: var(--bubble-horn-height) solid transparent;
}
/* バブルページ遷移 */
.panel_control > .bubbles > .bubble > .contents > .prev_page {
  position: absolute;
  left: 0;
  top: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--buble-page-base-padding-lr);
  height: 100%;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 300ms ease, visibility 300ms ease;
}
.panel_control > .bubbles > .bubble > .contents > .prev_page[data-enabled="true"] {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  cursor: pointer;
}
.panel_control > .bubbles > .bubble > .contents > .prev_page > .mark {
  position: relative;
  left: 0;
  top: 0;
  width: var(--bubble-page-navigation-width);
  height: var(--bubble-page-navigation-height);
}
.panel_control > .bubbles > .bubble > .contents > .prev_page > .mark::before {
  display: block;
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: 0;
  height: 0;
  border-top: solid var(--bubble-page-navigation-width) transparent;
  border-right: solid var(--bubble-page-navigation-width) var(--color-black);
  border-bottom: solid var(--bubble-page-navigation-width) transparent;
}
.panel_control > .bubbles > .bubble > .contents > .next_page {
  position: absolute;
  right: 0;
  top: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--buble-page-base-padding-lr);
  height: 100%;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 300ms ease, visibility 300ms ease;
}
.panel_control > .bubbles > .bubble > .contents > .next_page[data-enabled="true"] {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  cursor: pointer;
}
.panel_control > .bubbles > .bubble > .contents > .next_page > .mark {
  position: relative;
  left: 0;
  top: 0;
  width: var(--bubble-page-navigation-width);
  height: var(--bubble-page-navigation-height);
}
.panel_control > .bubbles > .bubble > .contents > .next_page > .mark::before {
  display: block;
  content: "";
  position: absolute;
  right: 0;
  top: 0;
  width: 0;
  height: 0;
  border-top: solid var(--bubble-page-navigation-width) transparent;
  border-left: solid var(--bubble-page-navigation-width) var(--color-black);
  border-bottom: solid var(--bubble-page-navigation-width) transparent;
}
/* バブル非表示 */
.panel_control > .bubbles > .bubble > .contents > .close {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: absolute;
  top: 10px;
  right: 10px;
  width: 30px;
  height: 30px;
  border: 1px solid var(--bubble-border-color);
  border-radius: 50%;
  cursor: pointer;
  background-color: var(--color-white);
}
.panel_control > .bubbles > .bubble > .contents > .close > .mark {
  color: var(--bubble-border-color);
  display: inline-block;
  font-size: 18px;
}

/* バブルページ */
.panel_control > .bubbles > .bubble > .contents > .pages {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  border: var(--bubble-border-width) solid var(--bubble-border-color);
  border-radius: 10px;
}
.panel_control > .bubbles > .bubble > .contents > .pages > .base {
  position: absolute;
  left: 0;
  top: 0;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  padding: var(--buble-page-base-padding-tb) var(--buble-page-base-padding-lr);
  background-color: var(--bubble-background-color);
  transition: left 300ms ease;
}
.panel_control > .bubbles > .bubble > .contents > .pages > .base > .page {
  pointer-events: none;
}
.panel_control > .bubbles > .bubble > .contents > .pages > .base > .page[data-selected="true"] {
  pointer-events: auto;
}

/* バブルアイテム */
.panel_control > .bubbles > .bubble > .contents > .pages > .base > .page > .items {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-content: start;
  height: 100%;
}
.panel_control > .bubbles > .bubble > .contents > .pages > .base > .page > .items > .item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: var(--bubble-item-width);
  height: var(--bubble-item-height);
  margin: var(--bubble-item-margin);
  padding: var(--bubble-item-padding);
  border: var(--bubble-item-border-width) solid var(--bubble-border-color);
  border-radius: 10px;
  pointer-events: auto;
  cursor: pointer;
  /* 行間 */
  line-height: 18px;
}
.panel_control > .bubbles > .bubble > .contents > .pages > .base > .page > .items > .item > .image {
  display: block;
  width: calc(var(--bubble-item-width) - 10px);
  height: auto;
}
.panel_control > .bubbles > .bubble > .contents > .pages > .base > .page > .items > .item > .label {
  display: block;
  font-weight: bold;
  text-align: center;

  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  line-break: anywhere;
}

/* PC2 */
@media screen and (max-width: 1200px) {
  /* バブル */
  .panel_control > .bubbles > .bubble {
    --bubble-page-item-count-x: 5;
  }
}

/* PC1 */
@media screen and (max-width: 1100px) {
  /* バブル */
  .panel_control > .bubbles > .bubble {
    --bubble-page-item-count-x: 4;
  }
}

/* SP */
@media screen and (max-width: 768px) {
  /* パネルコントロール */
  .panel_control {
    --panel-item-width: 160px;
    --panel-item-height: 140px;
  }

  /* バブル */
  .panel_control > .bubbles > .bubble {
    --bubble-item-width: 130px;
    --bubble-item-height: 130px;
    --bubble-page-item-count-x: 2;
    --bubble-page-item-count-y: 2;
  }
}
