.configurator-page{
	background: var(--bg-white);
}

.configurator-page__container{
	max-width: 128rem;
	margin-inline: auto;
	padding: 0 6.4rem 15rem;
	border-left: 1px solid var(--border-dark);
	border-right: 1px solid var(--border-dark);
}

.configurator{
	font-family: var(--font-family-base);
	position: relative;
}
.invisible{visibility: hidden;}
._loading{position: relative;}
._loading:before{
	content: 'Загрузка ...';
	position: absolute;
	padding: 10px;
	top: 0;
	bottom: 0;
	left: 0;
	right: 0;
	background-color: #ebf2f2;
	opacity: 0.5;
	z-index: 100;
}
.configurator__inner{
	display: flex;
	align-items: flex-start;
	gap: 3.2rem;
}
.configurator__filter{
	flex: 0 0 36.3rem;
	min-width: 0;
	box-sizing: border-box;
}

/* Форма конфигуратора скрыта, пока не загрузятся скрипты и стили, показываем плавно, как всё готово */
.configurator__desktop-form{
	opacity: 0;
	transition: opacity ease .4s;
}
.configurator__desktop-form.is-ready{
	opacity: 1;
}

/* Лоадер поверх формы на время загрузки */
.configurator__loader{
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: 40rem;
	display: flex;
	align-items: center;
	justify-content: center;
	z-index: 10;
	transition: opacity ease .3s;
}
.configurator__desktop-form.is-ready ~ .configurator__loader{
	opacity: 0;
	pointer-events: none;
}
.configurator__loader-spinner{
	width: 4.8rem;
	height: 4.8rem;
	border: 3px solid var(--bg-teal-10);
	border-top-color: var(--bg-teal-100);
	border-radius: 50%;
	animation: configurator-loader-spin .8s linear infinite;
}
@keyframes configurator-loader-spin{
	to{ transform: rotate(360deg); }
}
.configurator__main{
	flex: 1 1 0;
	min-width: 0;
}
.configurator__canvas{
	position: relative;
	height: 79.6rem;
	overflow: hidden;
	border: 1px solid var(--border-dark);
	background: var(--bg-white);
}
.configurator__layers-count{
	position: absolute;
	bottom: -1px;
	right: -1px;
	display: flex;
	align-items: center;
	gap: 0.8rem;
	background: var(--bg-gray-10);
	padding: 2.4rem;
	z-index: 90;
	transition: opacity ease .3s;
}
.configurator__layers-count::before{
	content: 'Количество слоев:';
	font: 500 1.4rem/1.2 var(--font-family-base);
	color: var(--text-primary);
	white-space: nowrap;
}
.configurator__layers-value{
	font: 600 4rem/1.1 var(--font-family-base);
	color: var(--main-brand);
}
.configurator__layers-count.invisible{
	visibility: visible;
	opacity: 0;
}
.configurator__startmsg{
	position: absolute;
	top: 50%;
	left: 0;
	right: 0;
	text-align: center;
	font: var(--font-h5);
	color: var(--text-primary);
	z-index: 90;
	transform: translate(0, -50%);
}
.configurator__form{
	margin-top: 3.2rem;
	background: var(--bg-gray-10);
	padding: 6.4rem;
	box-sizing: border-box;
}

.filter{

}
.filter__group{}
.filter__group:not(:first-child){
	margin-top: 3.2rem;
}
.filter__group-title{
	margin-top: 3.2rem;
	margin-bottom: 3.2rem;
	transition: margin-top ease .3s;
}
._folded .filter__group-title{margin-top: 0;}
.filter__group-title-text{
	position: relative;
	display: block;
	font: 600 2.2rem/1.2 var(--font-family-base);
	color: var(--text-primary);
	cursor: pointer;
	padding-right: 3.2rem;
}
.filter__group-title-text:after{
	content: '';
	position: absolute;
	right: 0;
	top: 50%;
	margin-top: -1rem;
	width: 2.4rem;
	height: 2.4rem;
	background: url(../img/configurator/chevron.svg) no-repeat center / 2.4rem 2.4rem;
	transform: rotate(-180deg);
	transition: transform ease .3s;
}
.filter__group._folded .filter__group-title-text:after{
	transform: rotate(0);
}
.filter__group-inner{
	max-height: 150rem;
	overflow: hidden;
	transition: max-height ease .5s;
}
.filter__group._folded .filter__group-inner{
	max-height: 0;
}

.filter__option{}
.filter__option:not(:last-child){
	margin-bottom: 2.4rem;
}
.filter__option-title{}
.filter__option-title-text{
	position: relative;
	display: block;
	background: var(--bg-teal-10);
	font: var(--font-paragraph-1);
	color: #309188;
	cursor: pointer;
	padding: 0.8rem 3.6rem 0.8rem 1.6rem;
}
.filter__option-title-text:after{
	content: '';
	position: absolute;
	right: 1.6rem;
	top: 50%;
	margin-top: -1rem;
	width: 2.4rem;
	height: 2.4rem;
	background: url(../img/configurator/chevron.svg) no-repeat center / 2.4rem 2.4rem;
	transform: rotate(-180deg);
	transition: transform ease .3s;
}
.filter__option._folded .filter__option-title-text:after{
	transform: rotate(0);
}
.filter__option-inner{
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: 0.8rem;
	max-height: 50rem;
	padding-top: 0.8rem;
	overflow: hidden;
	transition: all ease .3s;
}
.filter__option._folded .filter__option-inner{
	max-height: 0;
	padding-top: 0;
}
.filter__option-column{}
.filter__option-item{
	flex: 1 1 100%;
	box-sizing: border-box;
	transition: opacity ease .3s;
}
.filter__option-item-title{
	margin-bottom: 1rem;
	font: var(--font-caption);
	color: var(--text-primary);
	cursor: pointer;
	display: block;
}
.filter__option._columned .filter__option-item{
	flex: 1 1 calc(50% - 0.4rem);
	min-width: 14rem;
}
.filter__option._columned.filter__option--sizes .filter__option-item{
	flex: 1 1 0;
	min-width: 0;
}

.filter__field{
	background: var(--bg-gray-10);
	border: 1px solid var(--border-dark);
	font: var(--font-paragraph-2);
	padding: 1.6rem;
	color: var(--text-primary);
	width: 100%;
	box-sizing: border-box;
	cursor: text;
}
.filter__field::placeholder{
	color: var(--text-secondary);
}
.filter__field:hover,
.filter__field:focus{
	outline: none;
	border-color: var(--main-brand);
}
.filter__option._disabled .filter__option-inner,
.filter__option-item._disabled{
	position: relative;
	opacity: 0.3;
}
.filter__option._disabled .filter__option-inner:before,
.filter__option-item._disabled:before{
	content: '';
	position: absolute;
	top: 0;
	bottom: 0;
	left: 0;
	right: 0;
	z-index: 10;
}

.tooltip{
	position: relative;
	display: inline-block;
}
.tooltip:before{
	content: '?';
	position: relative;
	display: inline-block;
	width: 20px;
	height: 20px;
	padding: 2px;
	border-radius: 50%;
	background-color: #bfe4e4;
	font-size: 14px;
	line-height: 16px;
	text-align: center;
	color: #fff;
	z-index: 90;
	cursor: pointer;
}
.tooltip__text{
	position: absolute;
	top: -10px;
	left: -10px;
	width: 300px;
	padding: 10px 10px 10px 40px;
	font-size: 14px;
	color: #343434;
	background-color: #fff;
	box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
	opacity: 0;
	z-index: 80;
	pointer-events: none;
	transition: opacity ease .3s;
}
.tooltip:hover .tooltip__text{
	pointer-events: auto;
	opacity: 1;
}

.radio,
.checkbox{
	cursor: pointer;
	margin: 0;
	height: 5.8rem;
	width: 100%;
	box-sizing: border-box;
	display: flex;
	align-items: center;
	gap: 0.8rem;
	background: var(--bg-gray-10);
	padding: 0.8rem;
}
.radio input,
.checkbox input{
	display: none;
}
.radio__icon{
	flex-shrink: 0;
	display: block;
	width: 2.4rem;
	height: 2.4rem;
	box-sizing: border-box;
	border-radius: 50%;
	background: #fafafb;
	border: 2px solid #e2e5e9;
	position: relative;
	transition: background-color ease .2s, border-color ease .2s;
}
.radio__title{
	flex: 1 1 0;
	min-width: 0;
	font: 500 1.4rem/1.2 var(--font-family-base);
	color: var(--text-primary);
}
.radio input:checked + .radio__icon{
	background: var(--main-brand);
	border-color: var(--main-brand);
}
.radio input:checked + .radio__icon:after{
	content: '';
	position: absolute;
	inset: 0.5rem;
	border-radius: 50%;
	background: var(--bg-white);
}

.filter__swatches{
	display: flex;
	align-items: center;
	gap: 0.8rem;
	width: 100%;
	box-sizing: border-box;
	background: var(--bg-gray-10);
	padding: 1.3rem 1.6rem;
}
.filter__clear{
	margin-left: auto;
	font: 500 1.4rem/1.2 var(--font-family-base);
	color: var(--main-brand);
	background: none;
	border: none;
	padding: 0;
	cursor: pointer;
}

.radio-color{
	display: block;
	cursor: pointer;
}
.radio-color:has(input[value="none"]){
	display: none;
}
.radio-color input{
	display: none;
}
.radio-color__icon{
	position: relative;
	display: block;
	width: 3.2rem;
	height: 3.2rem;
	box-sizing: border-box;
	border-radius: 50%;
	border: 1px solid var(--border-dark);
	transition: transform ease .2s;
}
.radio-color input:checked + .radio-color__icon:after{
	content: '';
	position: absolute;
	inset: 0;
	background: url(../img/configurator/swatch-check.svg) no-repeat center / 3.2rem 3.2rem;
}
.radio-color input[value=white]:checked + .radio-color__icon:after{
	background: url(../img/configurator/swatch-check_i.svg) no-repeat center / 3.2rem 3.2rem;
}

.radio-color input[value="white"] + .radio-color__icon{background-color: #fff;}
.radio-color input[value="none"] + .radio-color__icon{background-color: #fff;}
.radio-color input[value="black"] + .radio-color__icon{background-color: #1f1f1f;}
.radio-color input[value="green"] + .radio-color__icon{background-color: #008f8f;}
.radio-color input[value="red"] + .radio-color__icon{background-color: #ff3800;}
.radio-color input[value="blue"] + .radio-color__icon{background-color: #044880;}
.radio-color input[value="yellow"] + .radio-color__icon{background-color: #ffc000;}


.checkbox__icon{
	flex-shrink: 0;
	position: relative;
	display: block;
	width: 2.4rem;
	height: 2.4rem;
	box-sizing: border-box;
	border-radius: 0.5rem;
	border: 2px solid #d9d9d9;
	transition: all ease .2s;
}
.checkbox__title{
	flex: 1 1 0;
	min-width: 0;
	font: 500 1.4rem/1.2 var(--font-family-base);
	color: var(--text-primary);
}
.checkbox input:checked + .checkbox__icon{
	background: var(--main-brand);
	border-color: var(--main-brand);
}
.checkbox input:checked + .checkbox__icon:after{
	content: '';
	position: absolute;
	inset: 0;
	background: url(../img/checkbox-check.svg) no-repeat center / 1.2rem 0.8rem;
}

/* Range control style (ion.rangeSlider) */
.filter__option-inner--slider{
	padding-left: 0.5rem;
	padding-right: 0.5rem;
}
.filter__option-inner > .irs{
	flex: 1 1 100%;
	width: 100%;
}
.irs {
    height: 6rem;
}
.irs-with-grid {
    height: 6rem;
}
.irs--flat.irs-line,
.irs--flat .irs-line {
    height: 0.4rem;
	top: 2.2rem;
	background: rgba(0, 0, 0, 0.08);
	border-radius: 0.2rem;
}

.irs--flat .irs-bar {
    height: 0.4rem;
    top: 2.2rem;
    background: var(--main-brand);
    border-radius: 0;
    margin-left: -0.5rem;
    margin-right: -0.5rem;
}
.irs-grid {
    position: absolute;
    display: none;
    bottom: 1.3rem !important;
    left: 0;
    width: 100%;
    height: 2rem;
}
.irs--flat .irs-grid-pol{
	background: rgba(0, 0, 0, 0.25);
}
.irs--flat .irs-min, .irs--flat .irs-max{
	top: 3.8rem;
	background: none !important;
}
.irs-with-grid .irs-min, .irs-with-grid .irs-max{
	display: none !important;
}
.irs--flat .irs-min, .irs--flat .irs-max, .irs--flat .irs-grid-text{
	font: 500 1.4rem/1.2 var(--font-family-base) !important;
	color: var(--text-primary) !important;
}
.irs--flat .irs-grid-text {
    top: 1rem;
}
.irs-grid-text{
	padding: 0 !important;
	transition: font-size ease .3s;
}
.irs--flat .irs-handle{
	top: 0.9rem;
	width: 2.4rem;
	height: 2.4rem;
	border-radius: 50%;
	background: var(--bg-white) !important;
	border: none;
	box-shadow: 0 0.4rem 0.2rem -0.2rem rgba(0, 0, 0, 0.25);
	cursor: pointer !important;
	margin-left: -0.5rem;
	margin-right: -0.5rem;
}
.irs-handle:after{
	content: '';
	position: absolute;
	inset: 0.7rem;
	border-radius: 50%;
	background: var(--main-brand);
}
.irs-handle i{
	display: none !important;
}
.irs--flat .irs-handle.state_hover,
.irs--flat .irs-handle:hover{
	background: var(--bg-white) !important;
}
.irs-single{
	top: 3rem !important;
}
.irs--flat .irs-single,
.irs--flat .irs-grid-text.current{
	font: 500 1.4rem/1.2 var(--font-family-base) !important;
	color: var(--main-brand) !important;
	top: 1rem;
}
.irs--flat .irs-single{
	background: none;
	padding: 0;
	margin-top: 1rem;
}
.irs-single:before{
	display: none;
}
.irs-with-grid .irs-single,
.irs-with-grid .irs-grid-pol, .irs--flat .irs-single:before{
	display: none !important;
}

/* Plate */
.plate{
    position: absolute;
	width: 1588px;
	height: 1008px;
	top: 50%;
	left: 50%;
	z-index: 90;
	transform: scale(0.325) translate(-50%, -50%);
	transform-origin: 0 0;
	transition: opacity ease .3s;
}
.plate_hidden{opacity: 0; z-index: 1}
.plate div{position: absolute;}
.plate object{
	position: absolute;
	top: 0;
	left: 0;
}
.plate__base{top: 0; left: 0; width: 100%; height: 100%;}
.plate__base-cover{
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
	z-index: 18;
}
.plate__base-cover-thickness{
	z-index: 10;
}
.plate__base-main{
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
	z-index: 8;
}
.plate__base-stripes{z-index: 10;}
.plate__contacts{
    top: 0;
    left: 0;
    right: 0;
}
.plate__contacts-main{z-index: 15;}
.plate__contacts-add{z-index: 20;}
.plate__tracks{z-index: 19;}
.plate__text{top: 430px; left: 110px; z-index: 20;}
.plate__text_hidden{opacity: 0 !important;}

.plate__tracks{transition: top ease-in-out 0.8s;}
.plate__text{transition: opacity ease-in-out .5s;}
.plate__contacts{transition: top ease-in-out .6s;}
.plate__base{transition: top ease-in-out 0.8s;}

.plate_hidden .plate__base{top: 150%;}
.plate_hidden .plate__contacts,
.plate__contacts.plate__contacts_hidden{top: -200%;}
.plate_hidden .plate__tracks{top: -100% !important;}
.plate_hidden .plate__text{opacity: 0;}

.plate_hidden .plate__base-stripes{top: 100% !important;}
.plate__base-stripes{transition: top ease-in-out 1s;}

.plate_flexible{}
.plate_flexible .plate__base{}
.plate_flexible .plate__base-main,
.plate_flexible .plate__base-stripes{top: 400px; bottom: auto;}
.plate_flexible .plate__contacts{z-index: 20;}
.plate_flexible .plate__contacts-main{top: 80px; left: 153px;}
.plate_flexible .plate__tracks{top: 0; left: 0;}

.plate_metal{}
.plate_metal .plate__contacts{z-index: 20;}
.plate_metal .plate__contacts-main{top: 132px; left: 192px;}
.plate_metal .plate__base-cover-thickness{top: 19px;}
.plate_metal .plate__base-main{top: 275px;}
.plate_metal .plate__tracks{top: 152px;	left: 192px;}

.plate_hard-flex{width: 1700px; height: 1100px;}
.plate_hard-flex .plate__tracks{top: 96px; left: 153px;}
.plate_hard-flex .plate__text{top: 727px; left: 600px;}
.plate_hard-flex .plate__contacts-main{top: 211px; left: 343px; }
.plate_hard-flex .plate__base-main{top: 7px}
.plate_hard-flex .plate__base-connector{top: 249px; left: 389px;}
.plate_hard-flex .plate__base-side{top: 218px;}
.plate_hard-flex .plate__base-side-cover{top: 444px;z-index: 10;}
.plate_hard-flex .plate__base-stripes{top: 455px; z-index: 20;}

.plate_single-side{}
.plate_single-side .plate__contacts-main{top: 285px; left: 374px;}
.plate_single-side .plate__contacts-add{top: 634px; left: 194px}
.plate_single-side .plate__tracks{top: 53px; left: 193px;}
.plate_single-side .plate__base-cover{}
.plate_single-side .plate__base-cover-thickness{top: 7px;}
.plate_single-side .plate__base-main{top: 130px;}

.plate_double-side{}
.plate_double-side .plate__contacts-main{top: 285px; left: 374px;}
.plate_double-side .plate__contacts-add{top: 634px; left: 105px;}
.plate_double-side .plate__tracks{top: 53px; left: 193px;}
.plate_double-side .plate__base-cover{}
.plate_double-side .plate__base-cover-thickness{top: 7px;}
.plate_double-side .plate__base-main{top: 131px;}

.plate_multi{}
.plate_multi .plate__contacts-main{top: 285px; left: 374px;}
.plate_multi .plate__contacts-add{top: 634px; left: 194px}
.plate_multi .plate__tracks{top: 53px; left: 193px;}
.plate_multi .plate__base-cover{}
.plate_multi .plate__base-cover-thickness{top: 7px;}
.plate_multi .plate__base-main{top: 130px;}

.plate_highfreq{}
.plate_highfreq .plate__contacts-main{top: 285px; left: 374px;}
.plate_highfreq .plate__contacts-add{top: 634px; left: 194px}
.plate_highfreq .plate__tracks{top: 53px; left: 193px;}
.plate_highfreq .plate__base-cover{}
.plate_highfreq .plate__base-cover-thickness{top: 7px;}
.plate_highfreq .plate__base-main{top: 130px;}

.plate_multi-layer{transition: all ease-in-out 1s;}
.plate_multi-layer.plate_hidden{top: 200%}

.plate_multi-layer .plate__base-cover-thickness{top: 7px;}
.plate_multi-layer .plate__base-main{top: 130px;}
.plate_multi-layer .plate__contacts-main{top: 565px; left: 1020px;}
.plate_multi-layer .plate__contacts{transition: none !important; top: 0; z-index: 20;}

/* top у .plate_multi-layer-N задан как 50% (то же самое центрирование, что
   использует .plate для основной платы) + фиксированный "выступ" в px.
   Раньше top был абсолютным числом px, привязанным к самому широкому канвасу
   (79.6rem при 1920px). Высота .configurator__canvas при этом плавно
   уменьшается вместе с шириной окна (корневой font-size сайта завязан на
   viewport через clamp() в reset.css) на всём диапазоне 1280–1920px, а не
   только на границах брейкпоинтов. Поэтому при любой ширине уже 1920px тот же
   абсолютный отступ становился непропорционально большим, и слои уезжали за
   overflow:hidden канваса — плата выглядела "обрезанной снизу". calc(50%+Npx)
   привязывает слои к текущей высоте канваса, а не к фиксированному числу. */
.plate_multi-layer-1{top: calc(50% + 14px); z-index: 3;}
.plate_multi-layer-1 .plate__contacts-left{top: 698px; left: 314px;}
.plate_multi-layer-1 .plate__contacts-right{top: 584px; left: 880px;}

.plate_multi-layer-2{top: calc(50% + 42px); z-index: 2;}
.plate_multi-layer-2 .plate__contacts-left{top: 644px; left: 220px;}
.plate_multi-layer-2 .plate__contacts-right{top: 400px; left: 769px;}

.plate_multi-layer-3{top: calc(50% + 70px); z-index: 1;}
.plate_multi-layer-3 .plate__contacts-left{top: 616px; left: 173px;}
.plate_multi-layer-3 .plate__contacts-right{top: 466px; left: 693px;}

@media (min-width: 1100px) and (max-width: 1300px) {
	.configurator__canvas{height: 57rem;}
	.plate{transform: scale(0.225) translate(-50%, -50%);}
	.plate_multi-layer-2{top: calc(50% + 30px);}
}

.configurator__mobile-notice{
	display: none;
}

@media (max-width: 1099px) {
	.configurator-page__container{
		padding: 4.8rem 1.6rem 4rem;
	}
	.configurator__inner{
		flex-direction: column;
	}
	.configurator__filter{
		flex: 1 1 auto;
		width: 100%;
	}
	.configurator__main{
		width: 100%;
	}
	.configurator__canvas{
		height: 32rem;
	}
	.plate{
		transform: scale(0.19) translate(-50%, -50%);
	}
	.plate_multi-layer-2{top: calc(50% + 30px);}
	.configurator__layers-count{
		padding: 1.6rem;
	}
	.configurator__layers-count::before{
		font-size: 1.2rem;
	}
	.configurator__layers-value{
		font-size: 2.8rem;
	}
	.configurator__form{
		padding: 3.2rem 1.6rem;
	}
	.filter__option._columned .filter__option-item{
		flex: 1 1 calc(50% - 0.4rem);
		min-width: 12rem;
	}
}