/* ─────────────────────────────────── */
/* ─────────────────────────────────── */
/* BLOCK: Map container */
/* ─────────────────────────────────── */
/* ─────────────────────────────────── */

.map-container {
    display: flex;
    flex: 1;
    flex-direction: row;
    min-width: 66vw;
    position: relative;
}

/* ─────────────────────────────────── */
/* ─────────────────────────────────── */
/* BLOCK: Map nav */
/* ─────────────────────────────────── */
/* ─────────────────────────────────── */

.map-container .map-nav {
    align-items: flex-start;
    display: flex;
    flex-direction: column;
    gap: 0;
    left: 0.5em;
    pointer-events: none;
    position: absolute;
    top: 0.5em;
}

.map-container .map-nav button.trigger span.text,
.map-container .map-nav input.search,
.map-container .map-nav textarea.text {
    font-size: var(--font-medium);
    padding: 0.5em;
    width: 100%;
}

.map-container .map-nav label.label {
    padding-left: 0.5em;
}

/* */
/* SECTION: Top bar */
/* */

.map-container .map-nav .top-nav {
    align-items: center;
    background-color: var(--color-white);
    border: solid 1px var(--color-light-gray);
    border-radius: var(--radius-large) var(--radius-large) var(--radius-large) 0;
    box-shadow: var(--shadow-large);
    display: flex;
    flex-direction: row;
    gap: 0.5em;
    padding: 0.5em;
    pointer-events: auto;
}

.map-container .map-nav .top-nav input.text[data-bind='maps.map_title'] {
    border-color: transparent;
    color: var(--color-dark-blue);
    field-sizing: content;
    font-size: var(--font-huge);
    font-weight: var(--font-black);
    max-width: 15em;
    padding: 0.25em 0.5em;
    width: auto;
}

.map-container .map-nav .top-nav .logo {
    height: 2.5em;
    object-fit: contain;
    padding: 0.25em 0 0 0.25em;
    width: 2.5em;
}

.map-container .map-nav .top-nav .select button.trigger {
    border-radius: var(--radius-large);
}

.map-container .map-nav .top-nav .select .options {
    max-height: unset;
}

/* */
/* SECTION: Side bar */
/* */

.map-container .map-nav .side-nav {
    align-items: center;
    background-color: var(--color-white);
    border: solid 1px var(--color-light-gray);
    border-radius: 0 0 var(--radius-large) var(--radius-large);
    border-top-color: var(--color-white);
    box-shadow: var(--shadow-large);
    display: flex;
    flex-direction: column;
    gap: 0.5em;
    margin-top: -1px;
    padding: 0.5em;
    pointer-events: auto;
}

.map-container .map-nav .side-nav [data-action='toggle-orientation'] .material-symbols-outlined {
    display: inline-block;
    transition: transform 0.25s ease;
}

.map-container:has(.map.portrait) .map-nav .side-nav [data-action='toggle-orientation'] .material-symbols-outlined {
    transform: rotate(90deg);
}

/* */
/* SECTION: Slideout containers */
/* */

.map-container .map-nav .side-nav .create-stakeholder-container,
.map-container .map-nav .side-nav .group-by-container,
.map-container .map-nav .side-nav .search-by-container {
    align-items: center;
    display: flex;
    flex-direction: row;
    gap: 0;
    position: relative;
}

.map-container .map-nav .side-nav .slideout-container:not(.display-none) {
    align-items: center;
    background-color: var(--color-white);
    border: solid 1px var(--color-light-gray);
    border-left: none;
    border-radius: 0 var(--radius-large) var(--radius-large) 0;
    box-shadow: inset 0 4px 8px #ffffff30, 3px 4px 8px #00000030, 6px 8px 16px #00000015, -6px 0 6px #ffffff;
    display: flex;
    flex-direction: row;
    gap: 0.5em;
    left: calc(100% + 0.5em);
    padding: 0.5em;
    position: absolute;
    top: -0.5em;
}

.map-container .map-nav .side-nav .create-stakeholder-container .slideout-container:not(.display-none) > div,
.map-container .map-nav .side-nav .group-by-container .slideout-container:not(.display-none) > div,
.map-container .map-nav .side-nav .search-by-container .slideout-container:not(.display-none) > div {
    flex-direction: column;
}

.map-container .map-nav .side-nav .group-by-container .slideout-container:not(.display-none) > div {
    padding-right: 1.5em;
}

/* ─────────────────────────────────── */
/* ─────────────────────────────────── */
/* BLOCK: Map */
/* ─────────────────────────────────── */
/* ─────────────────────────────────── */

.map-container .map {
    align-items: center;
    align-content: center;
    column-gap: 7.5em;
    cursor: default;
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    justify-content: flex-start;
    min-height: 100%;
    padding: 1em;
    position: relative;
    width: 100%;
}

.map-container .map::before {
    content: '';
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 9999vw;
    height: 9999vh;
    background-image: linear-gradient(to right, var(--color-blue-100) 1px, transparent 1px), linear-gradient(to bottom, var(--color-blue-100) 1px, transparent 1px);
    background-size: 0.75em 0.75em;
    background-position: 0 0;
    z-index: -1;
    pointer-events: none;
}

.map-container .map.dragging {
    cursor: grabbing !important;
    pointer-events: auto !important;
    user-select: none !important;
}

.map-container .map button.trigger,
.map-container .map input.text,
.map-container .map textarea.text {
    border-color: transparent;
}

.map-container .map .calendar .trigger span.text,
.map-container .map input.text,
.map-container .map input.search,
.map-container .map .location .trigger span.text,
.map-container .map .location .option span.text,
.map-container .map .select .trigger span.text,
.map-container .map .select .option span.text,
.map-container .map textarea.text {
    font-size: var(--font-small);
}

.map-container .map .calendar .trigger span.text,
.map-container .map input.text,
.map-container .map .location .trigger span.text,
.map-container .map .select .trigger span.text,
.map-container .map textarea.text {
    padding: 0.25em 0.5em;
}

.map-container .map label.label {
    font-size: var(--font-tiny);
    padding-left: 0.625em;
    line-height: 1.25;
}

.map-container .map span.spacer.vertical {
    margin: 0.125em 0;
}

/* */
/* SECTION: Group */
/* */

.map-container .group {
    align-content: flex-start;
    display: flex;
    flex-direction: column;
    top: 4em;
    gap: 2em;
    flex-shrink: 0;
    flex-wrap: wrap;
    padding: 1.75em 0 1em 1em;
    position: relative;
    min-width: 12.25em;
    width: fit-content;
}

.map-container .group::before {
    color: var(--color-dark-gray);
    font-size: 0.8em;
    font-weight: 500;
    left: 1em;
    position: absolute;
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    top: 0.5em;
    white-space: nowrap;
    width: calc(100% - 1em);
    content: attr(data-group-title);
}

.map-container .map.landscape .group {
    height: calc(100vh - 5em);
}

.map-container .map.portrait .group {
    min-height: calc(100vh - 5em);
}

/* */
/* SECTION: Stakeholder */
/* */

.map-container .stakeholder {
    display: flex;
    flex-direction: column;
    width: 11.5em;
    background-color: var(--color-white);
    border-radius: var(--radius-medium);
}

.map-container .map:has(.stakeholder.searched) .stakeholder:not(.searched) {
    filter: contrast(calc(1 / 3)) brightness(1.5);
}

.map-container .map:has(.stakeholder:focus-within) .stakeholder:not(:focus-within) {
    filter: contrast(calc(1 / 3)) brightness(1.5);
}

/* ─────────────────────────────────── */
/* ─────────────────────────────────── */
/* BLOCK: Dimensions */
/* ─────────────────────────────────── */
/* ─────────────────────────────────── */

.map-container .dimension {
    padding: 0.5em 0.25em;
    gap: 0.125em;
    display: flex;
    flex-direction: column;
    border-bottom: solid 1px var(--color-light-gray);
    border-left: solid 1px var(--color-blue-200);
    border-right: solid 1px var(--color-blue-200);
    background-color: var(--color-white);
}

.map-container .stakeholder .dimension:not(.display-none):not(:has(~ .dimension:not(.display-none))) {
    border-radius: 0 0 var(--radius-small) var(--radius-small);
    border-bottom: solid 1px var(--color-blue-200);
}

/* */
/* SECTION: Identification */
/* */

.map-container .dimension[data-dimension='identification'] {
    background-color: var(--color-blue-200);
    border-bottom-color: var(--color-blue-200);
    border-radius: var(--radius-small) var(--radius-small) 0 0;
    border-top: solid 1px var(--color-blue-200);
    flex-direction: row;
    gap: 0.5em;
    padding: 0 0.5em;
}

.map-container .dimension[data-dimension='identification'] .select {
    width: auto;
}

.map-container .dimension[data-dimension='identification'] button.trigger {
    border-radius: var(--radius-large);
    height: 2.5em;
    margin: 0.5em 0;
    white-space: unset;
    width: 2.5em;
    word-break: normal;
}

.map-container .dimension[data-dimension='identification'] button.trigger span.text {
    color: var(--color-blue-200);
    font-size: var(--font-huge);
    font-variation-settings: var(--weight-black);
    padding: 0;
    text-align: center;
    text-overflow: unset;
}

.map-container .dimension[data-dimension='identification'] :has(input.text) {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.map-container .dimension[data-dimension='identification'] input.text {
    border-bottom: solid 1px transparent;
    border-radius: 0;
    color: var(--color-white);
    display: block;
    line-height: 1.1;
    padding: 0;
    width: 100%;
}

.map-container .dimension[data-dimension='identification'] input.text[data-bind='stakeholders.stakeholder_first_name'] {
    font-size: var(--font-huge);
    font-variation-settings: var(--weight-black);
}

.map-container .dimension[data-dimension='identification'] input.text[data-bind='stakeholders.stakeholder_last_name'] {
    font-size: var(--font-medium);
    font-variation-settings: var(--weight-normal);
}

.map-container .dimension[data-dimension='identification']:has(input.text:focus),
.map-container .dimension[data-dimension='identification']:has(input.text:hover) {
    background-color: var(--color-blue-100);
}

.map-container .dimension[data-dimension='identification']:has(input.text:focus) input.text,
.map-container .dimension[data-dimension='identification']:has(input.text:hover) input.text {
    border-bottom-color: var(--color-white);
    color: var(--color-blue-200);
}

/* */
/* SECTION: Badges */
/* */

.map-container .dimension[data-dimension='badges'] {
    border-bottom-color: var(--color-blue-200);
    display: none;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0.25em;
    padding: 0.5em;
}

body.connecting-stakeholders .dimension[data-dimension='badges'] {
    border-radius: 0 0 var(--radius-small) var(--radius-small);
}

.map-container .dimension[data-dimension='badges']:has(span.material-symbols-outlined:not(.display-none)) {
    display: flex;
}

/* */
/* SECTION: Memberships */
/* */

.map-container .memberships {
    position: absolute;
    top: 0;
    left: 0;
    pointer-events: none;
    overflow: visible;
    width: 100%;
    height: 100%;
}

.map-container .memberships .line {
    fill: none;
    stroke: var(--color-medium-gray);
    stroke-dasharray: 5, 5;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 2;
}

/* ─────────────────────────────────── */
/* ─────────────────────────────────── */
/* BLOCK: Connections */
/* ─────────────────────────────────── */
/* ─────────────────────────────────── */

body.connecting-stakeholders * {
    pointer-events: none !important;
    user-select: none !important;
}

body.connecting-stakeholders button[data-action='connect-stakeholders'],
body.connecting-stakeholders .map-container .stakeholder {
    pointer-events: auto !important;
}

.map-container .relationships .line {
    fill: none;
    filter: contrast(calc(1 / 3)) brightness(1.5);
    stroke: var(--color-blue-200);
    stroke-dasharray: 5, 5;
    stroke-width: 2;
    transition: stroke 0.25s ease-in-out, filter 0.25s ease-in-out;
}

.map-container .relationships {
    position: absolute;
    top: 0;
    left: 0;
    pointer-events: none;
    overflow: visible;
    width: 100%;
    height: 100%;
}

.map-container .relationships .click {
    stroke: transparent;
    stroke-width: 15;
    fill: none;
    cursor: pointer;
    pointer-events: stroke;
}

.map-container .relationships .connector:not(:has(.click:hover)) .line {
    filter: contrast(calc(1 / 3)) brightness(1.5);
}

.map-container .relationships .click:hover ~ text.text {
    filter: none;
    font-variation-settings: var(--weight-black);
}

.map-container .relationships .click:hover ~ .line {
    filter: none;
    stroke: var(--color-medium-blue);
    stroke-width: 3;
}

.map-container .relationships .label {
    font-size: var(--font-small);
    font-weight: var(--font-semibold);
    fill: var(--color-dark-blue);
    text-anchor: middle;
    dominant-baseline: middle;
    pointer-events: none;
    background-color: var(--color-white);
    padding: 0.25em 0.5em;
}

.map-container .relationships text.text {
    fill: var(--color-blue-200);
    filter: contrast(calc(1 / 3)) brightness(1.5);
    font-variation-settings: var(--weight-semibold);
    paint-order: stroke fill;
    stroke: var(--color-white);
    stroke-width: 5px;
}
