/* GEQO  */

/* TOOLBAR MAIN ICON */
.topbar-circle-btn.x-btn {
  box-shadow: none;
  /* font-size: 24px; */
}

.topbar-toolbar,
.topbar-toolbar .x-box-inner,
.topbar-circle-btn,
.topbar-circle-btn .x-btn-wrap,
.topbar-circle-btn .x-btn-button,
.topbar-circle-btn .x-btn-inner,
.topbar-circle-btn .x-btn-icon-el,
.topbar-circle-btn .x-btn-icon-el::before,
.topbar-circle-btn .x-btn-icon-el .x-fa {
  overflow: visible !important;
}

.topbar-circle-btn .x-btn-icon-el {
  line-height: inherit;
  /* aiuta a centrare l'icona */
}

.topbar-toolbar {
  padding-top: 4px;
}

.topbar-circle-btn {
  position: relative;
}

.menu-logo {
  position: unset !important;
  margin: 0 auto !important;
  display: block;
}

.menu-logo-user {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 8px;
}

.menu-logo-user .user-text {
  font-weight: 600;
  font-size: 14px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  position: unset !important;
}

img.menu-logo {
  position: unset !important;
}

.menu-logo-user .menu-logo {
  margin: unset !important;
  position: unset !important;
}

.menu-logo-user div[role="presentation"] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px
}

/* BADGE */
.x-btn-badge-wrap {
  overflow: visible !important;
}

.topbar-circle-btn .badgeText,
.topbar-circle-btn .topbar-btn-badge {
  position: absolute;
  top: 4px;
  right: 2px;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  line-height: 20px;
  border-radius: 10px;
  background: #43b02a;
  color: #fff;
  font-size: 12px;
  font-weight: bold;
  text-align: center;
  white-space: nowrap;
  z-index: 1000;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}

/* COMBOBOX MAIN ICON */
.x-form-info-trigger {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'><path fill='%237f8c9a' d='M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM288 224C288 206.3 302.3 192 320 192C337.7 192 352 206.3 352 224C352 241.7 337.7 256 320 256C302.3 256 288 241.7 288 224zM280 288L328 288C341.3 288 352 298.7 352 312L352 400L360 400C373.3 400 384 410.7 384 424C384 437.3 373.3 448 360 448L280 448C266.7 448 256 437.3 256 424C256 410.7 266.7 400 280 400L304 400L304 336L280 336C266.7 336 256 325.3 256 312C256 298.7 266.7 288 280 288z'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-size: 20px 20px !important;
}

.x-form-search-filter {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'><path fill='%237f8c9a' d='M96 128C83.1 128 71.4 135.8 66.4 147.8C61.4 159.8 64.2 173.5 73.4 182.6L256 365.3L256 480C256 488.5 259.4 496.6 265.4 502.6L329.4 566.6C338.6 575.8 352.3 578.5 364.3 573.5C376.3 568.5 384 556.9 384 544L384 365.3L566.6 182.7C575.8 173.5 578.5 159.8 573.5 147.8C568.5 135.8 556.9 128 544 128L96 128z'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-size: 16px 16px !important;
}

.x-form-search-trigger {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'><path fill='%237f8c9a' d='M416 272C416 351.5 351.5 416 272 416C192.5 416 128 351.5 128 272C128 192.5 192.5 128 272 128C351.5 128 416 192.5 416 272zM379.6 424.8C348.9 447.9 310.7 461.6 272 461.6C170.3 461.6 88 379.3 88 277.6C88 175.9 170.3 93.6 272 93.6C373.7 93.6 456 175.9 456 277.6C456 316.3 442.3 354.5 419.2 385.2L541.3 507.3C550.7 516.7 550.7 531.9 541.3 541.3C531.9 550.7 516.7 550.7 507.3 541.3L385.2 419.2z'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-size: 20px 20px !important;
}

.x-form-balance-scale-trigger {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'><path fill='%237f8c9a' d='M304 96C304 87.2 311.2 80 320 80C328.8 80 336 87.2 336 96L336 112L456 112C464.8 112 472 119.2 472 128C472 136.8 464.8 144 456 144L336 144L336 432L392 432C405.3 432 416 442.7 416 456C416 469.3 405.3 480 392 480L248 480C234.7 480 224 469.3 224 456C224 442.7 234.7 432 248 432L304 432L304 144L184 144C175.2 144 168 136.8 168 128C168 119.2 175.2 112 184 112L304 112L304 96zM208 176C213.9 176 219.4 179.2 222.2 184.3L286.2 296.3C287.5 298.6 288.1 301.2 288.1 303.8C288.1 339.3 259.3 368.1 223.8 368.1L192.2 368.1C156.7 368.1 127.9 339.3 127.9 303.8C127.9 301.2 128.5 298.6 129.8 296.3L193.8 184.3C196.6 179.2 202.1 176 208 176zM432 176C437.9 176 443.4 179.2 446.2 184.3L510.2 296.3C511.5 298.6 512.1 301.2 512.1 303.8C512.1 339.3 483.3 368.1 447.8 368.1L416.2 368.1C380.7 368.1 351.9 339.3 351.9 303.8C351.9 301.2 352.5 298.6 353.8 296.3L417.8 184.3C420.6 179.2 426.1 176 432 176zM176.2 304C176.4 312.7 183.5 319.7 192.2 319.7L223.8 319.7C232.5 319.7 239.6 312.7 239.8 304L176.2 304zM400.2 304C400.4 312.7 407.5 319.7 416.2 319.7L447.8 319.7C456.5 319.7 463.6 312.7 463.8 304L400.2 304z'/></svg>") !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-size: 20px 20px !important;
}

/* FLOATING ICON */
.FloatingUsrImg {
  border-radius: 50%;
  /* Makes the toolbar circular */
  overflow: hidden;
  /* Ensures content fits within the circular shape */
  display: flex;
  /* Optional: for centering content inside the circle */
  justify-content: center;
  /* Center image horizontally */
  align-items: center;
  /* Center image vertically */
  z-index: 100;
  /* Ensures the image floats above other content */
}

.FloatingAppImg {
  border-radius: 25px;
  /* Adjust the radius as needed for more or less roundness */
  overflow: hidden;
  /* Optional: Ensures content respects the border-radius */
}

.FloatingAzImg {
  /*border: 2px solid #ccc;  Define border thickness and color */
  border-radius: 15px;
  /* Adjust the value to control roundness */
  padding: 5px;
  /* Optional: Add padding if necessary */

}

/* MENU */
.x-treelist {
  overflow: auto !important;
  min-width: 200px;
  /* CHS 
  background-color: #ffffff !important;*/
}

  /* CHS
.x-treelist-item-text {
  color: #6b6b6b !important;
  line-height: 1.8rem !important;
} */

/* Override for elements inside .x-grid-filterbar */
.x-grid-filterbar .x-form-trigger-wrap-default,
.x-grid-filterbar .x-form-trigger-default,
.x-grid-filterbar .x-form-text {
  border-radius: 0;
}

/* border radious a tab on top */
.x-tab-default-top {
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
}

/* MENU COLOR LABEL */
/*RED*/
.fa-red {
  color: red !important;
}

.fa-red:hover {
  background-color: red !important;
}

.fa-red .x-treelist-item-text,
.fa-red .x-treelist-item-expander,
.fa-red .x-treelist-item-icon {
  color: red !important;
}

.fa-red:hover .x-treelist-item-text,
.fa-red:hover .x-treelist-item-expander,
.fa-red:hover .x-treelist-item-icon {
  color: white !important;
}

/*BLUE*/
.fa-blue {
  color: blue !important;
}

.fa-blue:hover {
  background-color: blue !important;
}

.fa-blue .x-treelist-item-text,
.fa-blue .x-treelist-item-expander,
.fa-blue .x-treelist-item-icon {
  color: blue !important;
}

.fa-blue:hover .x-treelist-item-text,
.fa-blue:hover .x-treelist-item-expander,
.fa-blue:hover .x-treelist-item-icon {
  color: white !important;
}

/*GREEN*/
.fa-green {
  color: green !important;
}

.fa-green:hover {
  background-color: green !important;
}

.fa-green .x-treelist-item-text,
.fa-green .x-treelist-item-expander,
.fa-green .x-treelist-item-icon {
  color: green !important;
}

.fa-green:hover .x-treelist-item-text,
.fa-green:hover .x-treelist-item-expander,
.fa-green:hover .x-treelist-item-icon {
  color: white !important;
}

/*VIOLET*/
.fa-violet {
  color: #d11d6b !important;
}

.fa-violet:hover {
  background-color: #d11d6b !important;
}

.fa-violet .x-treelist-item-text,
.fa-violet .x-treelist-item-expander,
.fa-violet .x-treelist-item-icon {
  color: #d11d6b !important;
}

.fa-violet:hover .x-treelist-item-text,
.fa-violet:hover .x-treelist-item-expander,
.fa-violet:hover .x-treelist-item-icon {
  color: white !important;
}

/*BLACK*/
.fa-black {
  color: black !important;
}

.fa-black:hover {
  background-color: black !important;
}

.fa-black .x-treelist-item-text,
.fa-black .x-treelist-item-expander,
.fa-black .x-treelist-item-icon {
  color: black !important;
}

.fa-black:hover .x-treelist-item-text,
.fa-black:hover .x-treelist-item-expander,
.fa-black:hover .x-treelist-item-icon {
  color: white !important;
}

/*GRAY*/
.fa-gray {
  color: gray !important;
}

.fa-gray:hover {
  background-color: gray !important;
}

.fa-gray .x-treelist-item-text,
.fa-gray .x-treelist-item-expander,
.fa-gray .x-treelist-item-icon {
  color: gray !important;
}

.fa-gray:hover .x-treelist-item-text,
.fa-gray:hover .x-treelist-item-expander,
.fa-gray:hover .x-treelist-item-icon {
  color: white !important;
}

/*ORANGE*/
.fa-orange {
  color: orange !important;
}

.fa-orange:hover {
  background-color: orange !important;
}

.fa-orange .x-treelist-item-text,
.fa-orange .x-treelist-item-expander,
.fa-orange .x-treelist-item-icon {
  color: orange !important;
}

.fa-orange:hover .x-treelist-item-text,
.fa-orange:hover .x-treelist-item-expander,
.fa-orange:hover .x-treelist-item-icon {
  color: white !important;
}

/*  HIGHLIGHT ICON   */
.red {
  color: red !important;
}

.green {
  color: green !important;
}

.blue {
  color: blue !important;
}

.yellow {
  color: yellow !important;
}

.orange {
  color: orange !important;
}

.purple {
  color: purple !important;
}

.brown {
  color: brown !important;
}

.black {
  color: black !important;
}

.pink {
  color: pink !important;
}

.cyan {
  color: cyan !important;
}

.magenta {
  color: magenta !important;
}


/*  HIGHLIGHT ROW GRID   */
.highlight-row {
  background-color: #fff6b9 !important;
}

.highlight-row-Yellow {
  background-color: #feffc4 !important;
}

.highlight-row-Red {
  background-color: #cd4444 !important;
}

.highlight-row-Green {
  background-color: #c1fccb !important;
}

.highlight-row-Blue {
  background-color: #bbddf2 !important;
}

.highlight-row-Grey {
  background-color: #d8d7d7 !important;
}

/*  LOGO APPLICATION   */
.FloatingAzImg {
  background-color: transparent !important;
}

.FloatingAppImg {
  background-color: transparent !important;
}

/* ** Weather CSS ** */
.component__weather-box {
  width: auto;
  overflow: hidden;
}

.component__weather-content {
  position: relative;
  overflow: hidden;
  color: #fff;
  background: #E06B4F;
  height: 120px;
}

.weather-content__overview {
  width: 50%;
  text-align: center;
  display: inline-block;
  z-index: 2;
  position: relative;
}

.weather-content__temp {
  width: 50%;
  z-index: 2;
  text-align: center;
  float: left;
  font-size: 50px;
  text-align: center;
  margin-top: 0.5em;
  position: relative;
  vertical-align: middle;
}

.weather-content__temp .degrees {
  line-height: 40px;
}

.weather-content__temp .wi-degrees {
  margin-left: -10px;
  vertical-align: top !important;
}

.currentTemp .wi {
  margin-right: 20px;
  font-size: 40px;
  vertical-align: baseline;
}

.component__forecast-box {
  display: flex;
}

.forecast__item {
  flex: 1;
  text-align: center;
}

.forecast-item__heading {
  background: #e68872;
  border: 1px solid #d64826;
  border-left: none;
  text-transform: uppercase;
  color: #fff;
  font-weight: 800;
  padding: 10px;
  margin: 0 auto;
}

.forecast-item__info {
  background: #fff;
  color: #E06B4F;
  padding-bottom: 10px;
  border-right: 1px solid #d64826;
}

.forecast-item__info .wi {
  display: block;
  margin: 0 auto;
  font-size: 24px;
  padding: 15px 0;
}

.forecast-item__info .degrees {
  font-size: 20px;
  line-height: 20px;
}

.forecast-item__info .degrees .wi-degrees {
  display: inline;
}

/* ** ZOOM IMAGE **  */
.zoomA {
  width: 600px;
  height: auto;
  /* ease | ease-in | ease-out | linear */
  transition: transform ease-in-out 0.3s;
}

.zoomA:hover {
  transform: scale(2);
}

.imageZoomCls:hover {
  height: 300px;
  width: 300px;
}

/* ** */
.myGridGallery {
  width: auto;
  flex: 1;
  overflow: auto;
  margin: 10px;
}

.myGridGallery_selector {
  float: left;
  margin: 10px;
  background-color: #D0D0D0;
}

/* ** Report ** */
body {
  /*padding: 20px;*/
  margin: 0;
  font: 16px/22px "Source Sans Pro", Helvetica, sans-serif;
  font-size-adjust: none;
  font-style: normal;
  font-variant: normal;
  font-weight: normal;
  background: #f4f6ec;
  color: #333;
}

.nav-category {
  color: #777;
  font-weight: normal;
  margin-bottom: 0.75em;
}

h1,
h2,
h3 {
  margin: 0;
  padding: 0;
}

.report-output {
  background: white;
  border: 1px solid #ccc;
  height: 600px;
  /*height: 100%;*/
}

.edit-link {
  font-size: 120%;
  margin-bottom: 10px;
}


.jsr-report {
  font-size: 12pt;
}

/* ** codemirror ** */
.breakpoints {
  width: .8em;
}

.breakpoint {
  color: #822;
}

.lint-error {
  font-family: arial;
  font-size: 70%;
  background: #ffa;
  color: #a00;
  padding: 2px 5px 3px;
}

.lint-error-icon {
  color: white;
  background-color: red;
  font-weight: bold;
  border-radius: 50%;
  padding: 0 3px;
  margin-right: 7px;
}

.CodeEditor {
  border: 1px solid #aaa;
}

/* ** keypad ** */
.nmpd-grid {
  opacity: .9;
  position: fixed;
  left: 50%;
  top: 50%;
  z-index: 999999 !important;
  padding: 10px;
  width: initial;
  background-color: white;
  border: 1px solid black;
}

.nmpd-overlay {
  opacity: .5;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 999998 !important;
  background-color: #000;
}

.nmpd-grid input {
  width: 98%;
  min-height: 40px;
  font-size: 25px;
}

.nmpd-grid button {
  width: 100%;
  min-width: 40px;
  min-height: 40px;
  font-size: 20px;
}


/* ** range wms ** */
.x-slider-range .x-slider-thumb,
.x-slider-range .x-slider-thumb.x-slider-thumb-over,
.x-slider-range .x-slider-thumb.x-slider-thumb-drag {
  cursor: pointer;
  height: 68px;
  width: 25px;
  background-position: 5px;
  background-image: url(/repositorycom/slider-thumb.png);
  z-index: 10000;
}

.x-masked .x-slider-range .x-slider-thumb {
  z-index: 1;
}

.x-slider-range .x-slider-horz,
.x-slider-range .x-slider-horz .x-slider-end,
.x-slider-range .x-slider-horz .x-slider-inner {
  height: 28px;

  background-image: none;
  background-color: #eee;
  text-align: center;

}

.x-slider-range .x-slider-thumb.x-item-disabled,
.x-slider-range .x-slider-thumb.x-slider-thumb-over.x-item-disabled,
.x-slider-range .x-slider-thumb.x-slider-thumb-drag.x-item-disabled {
  background-position: 8px -25px !important;
  /*background-size: 1px auto;*/
  /*background-image:url(slider-thumb-disabled.png);*/
  cursor: default;
}

.x-slider-range.x-item-disabled .x-slider.x-form-field {
  opacity: 1;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
}

.x-slider-range .x-slider-range-header-odd,
.x-slider-range .x-slider-range-header-even {
  position: absolute;
  height: 28px;
  line-height: 28px;
  background-color: #eee;
  text-align: center;
  font-weight: bold;
  margin-left: 9px;
  overflow: hidden;
  /*border: 1px red solid;*/
}

.x-slider-range .x-slider-range-header-even {
  background-color: #ccc;

}

/* <!-- ** pos ** --> */
.my_btn .x-btn-inner {
  color: red;
  font-size: 15px;
  font-weight: bold;
}

/* <!-- Gallery --> */
.x-dataview-item.x-item-selected>div {
  transform: scale(1.03);
  transition: ease-in-out .2s;
  border: 1px solid red;
}

/* ** ThemeEditor  */
.report-designer-container {
  height: 600px;
  border: 1px solid #aaa;
}

.report-designer-container {
  height: 600px;
  border: 1px solid #aaa;
}








.themeeditor-bordered {
  border: solid 1px red;
}



/* BUTTON POS DYNAMICCOMBO BUTTON */
.wrap-button .x-btn-button {
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 10px;
}

.key-button .x-btn-button {
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.key-button .x-btn-inner {
  overflow: visible;
  font-size: 34px;
  font-weight: bold;
}

.color1-button .x-btn-button {
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color1-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color2-button .x-btn-button {
  background-color: red !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color2-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color3-button .x-btn-button {
  background-color: green !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color3-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color4-button .x-btn-button {
  background-color: Gold !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color4-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color5-button .x-btn-button {
  background-color: black !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color5-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color6-button .x-btn-button {
  background-color: orange !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color6-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color7-button .x-btn-button {
  background-color: Olive !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color7-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color8-button .x-btn-button {
  background-color: Purple !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color8-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

.color9-button .x-btn-button {
  background-color: SaddleBrown !important;
  white-space: unset;
  align-items: unset;
  word-wrap: break-word;
  font-weight: bold;
  font-size: 100px;
}

.color9-button .x-btn-inner {
  font-size: 18px;
  font-weight: bold;
}

/* FlowDesigner */

/*ROTATION*/
.rotate {
  animation: spin 2s linear infinite;
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

.rhombus-button {
  background-color: #007bff;
  /* Button background color */
  transform: rotate(45deg);
  /* Rotate the square button to make it a rhombus */
  border: none;
  color: white;
  /* Button text color */
}

.parallelogram-button {
  background-color: #007bff;
  /* Button background color */
  color: white;
  /* Button text color */
  border: none;
  transform: skewX(-20deg);
  /* Skew the button horizontally to create a parallelogram */
}

/* SPOTLight */
.x-spotlight {
  background-color: #ccc;
  z-index: 1;
  position: absolute;
  top: 0;
  left: 0;
  -moz-opacity: 0.5;
  opacity: .50;
  filter: alpha(opacity=50);
  width: 0;
  height: 0;
  zoom: 1;
}


/* TESTO TITOLO — caso UI "default" */
.custom-window-content .x-window-header .x-window-header-title-default .x-title-text,
.custom-window-content .x-window-header .x-window-header-title-default .x-title-text-default {
  color: #fff !important;
}

/* TESTO TITOLO — copri anche le UI personalizzate (es. x-window-header-title-violet, …) */
.custom-window-content .x-window-header [class^="x-window-header-title-"] .x-title-text,
.custom-window-content .x-window-header [class^="x-window-header-title-"] .x-title-text-default {
  color: #fff !important;
}

/* =========================================================
   ICONS (interno del bottone)
   ========================================================= */

/* =========================
   Base (button + wrapper)
   ========================= */
.x-btn.smarticon-btn {
  border: none;
  background: transparent;
  padding: 0;
  overflow: hidden;
}

.x-btn.smarticon-btn .x-btn-inner {
  padding: 0 !important;
  line-height: 0;
}

.smarticon-wrapper {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: 8px;
  box-sizing: border-box;
}

.smarticon-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.smarticon-inner>*:first-child {
  transform-origin: center center;
  transition: transform 0.2s ease-out;
}

.smarticon-label {
  margin-top: 8px;
  font-size: 11px;
  font-weight: 500;
  font-family: sans-serif;
  color: #222;
  text-align: center;
  max-width: 100%;
  width: 100%;
  box-sizing: border-box;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: block;
}

.smarticon-wrapper>* {
  transform-origin: center center;
  transition: transform 0.2s ease-out;
}

/* ExtJS Fix */
.x-tree-icon-custom {
  background-image: none !important;
  display: inline-block !important;
}

/* Layout helper */
.device-grid {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  justify-content: flex-start;
  gap: 12px;
}


/* Layout helper (se vuoi una griglia “wrap”) */
.device-grid {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  justify-content: flex-start;
  gap: 12px;
}

#FloatingAppImg.FloatingAppImg {
  position: fixed;
  top: unset !important;
  right: 0 !important;
  left: unset !important;
  bottom: 0 !important;
}

#FloatingAppImg {
  background-color: white;
  box-shadow: rgba(64, 64, 64, 0.16) 3px 3px 6px, rgba(64, 64, 64, 0.23) 3px 3px 6px;
  border-radius: 5px;
}

#FloatingAppImg {
  box-shadow: rgba(64, 64, 64, 0.16) 3px 3px 6px, rgba(64, 64, 64, 0.23) 3px 3px 6px;
  border-radius: 2px;
}

body:has(#FloatingAppImg)>#ext-element-5 {
  display: none !important;
}

#FloatingAppImg.FloatingAppImg,
body:has(#FloatingAppImg)>#ext-element-5 {
  position: fixed;
  top: unset !important;
  right: 0 !important;
  left: unset !important;
  bottom: 0 !important;
}

.x-datepicker-timeTable {
  width: 100%;
  table-layout: fixed;
  margin: 6px 0 0 0;
}

.x-datepicker-timeCell {
  text-align: center;
  width: 48%;
}

.x-datepicker-timeSep {
  text-align: center;
  width: 10%;
}

.x-datepicker-timeCell .x-form-item,
.x-datepicker-timeCell .x-form-trigger-wrap {
  margin: 0 auto;
  width: 70px;
  /* o 60px se ti basta */
}

/* FIX JsReport Viewer */
.jsr-content-viewport,
.report-output.jsr-report.jsr-style-root {
  height: 100% !important;
}

.monaco-editor .button,
.monaco-editor .button.toggle {
  background: unset;
  box-shadow: unset;
}

/* LOGIN FORM */
/* Contenitore login in stile "material" */
.login-card {
  max-width: max(80vw, 700px);
  margin: 0 auto;
  padding: 20px;
  border-radius: 16px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .08);
  background: #fff;
  border-radius: 12px !important;
}

/* Input più moderni */
.login-card .x-form-field,
.login-card .x-form-text,
.login-card .x-form-field input,
.login-card .x-form-textarea {
  border-radius: 12px !important;
  padding: 14px 12px !important;
  font-size: 16px !important;
  line-height: 1.2 !important;
}

/* Label compatta/material-like */
.login-card .x-form-item-label {
  font-weight: 600;
  color: #4a5568;
}

/* Bottoni principali */
.login-card .login-primary-btn .x-btn-inner {
  font-weight: 700;
}

/* Footer fisso (vedi sezione #2) */
.login-footer {
  position: sticky;
  /* fallback desktop/tablet */
  position: -webkit-sticky;
  /* iOS old */
  bottom: 0;
  padding: 12px 12px calc(12px + env(safe-area-inset-bottom));
  background: rgba(255, 255, 255, .9);
  backdrop-filter: saturate(180%) blur(10px);
  box-shadow: 0 -4px 12px rgba(0, 0, 0, .06);
  z-index: 9999;
  border-radius: 12px !important;
}

/* quando la tastiera è aperta, evitiamo che il form venga coperto */
.login-scroll {
  min-height: 100dvh;
  /* unità che rispetta la tastiera */
  overflow: auto;
  scroll-padding-bottom: 140px;
  /* spazio per i bottoni */
}

/* Touch targets */
.login-card .x-btn-default-large {
  min-height: 48px;
  border-radius: 12px;
}

.login-card .x-btn-default-large.x-btn-plain-primary,
.login-card .x-btn.x-btn-default-toolbar-small {
  background: var(--brand);
  border-color: var(--brand);
  color: #fff;
}

.login-card #LoginPanel-body {
  border: 0px !important;
}

.login-card .x-form-trigger-wrap.x-form-trigger-wrap-default {
  border-radius: 12px !important;
}


.login-card #login-lable .login-title {
  font-weight: 600 !important;
  text-align: center;
  text-transform: uppercase;
  display: flex;
  justify-content: center;
  /* margin: 8px 0 0; */
  font-weight: 800;
  font-size: clamp(20px, 4.5vw, 26px);
  letter-spacing: .2px;
}

.login-sep {
  border: 0;
  height: 1px;
  width: 75%;
  margin: auto;
  background: rgba(0, 0, 0, .08);
}

.login-card .btn-outline {
  background: transparent;
  border: 1px solid rgba(50, 121, 172, .8);
}

.login-card .btn-outline .x-btn-inner {
  font-weight: 600;
  color: rgb(50, 121, 172) !important;
}


#westViewPortId_header-title-textEl {
  font-weight: 600;
  padding-left: 1vw;
}

#MenuButton-innerCt a[role="button"] span.x-btn-button.x-btn-button-default-large.x-btn-text.x-btn-icon {
  justify-self: center;
  align-self: center;
}

.monaco-editor .overflowingContentWidgets,
.monaco-editor .overflowingWidgets,
.monaco-hover,
.overflowingContentWidgets [widgetid="editor.contrib.resizableContentHoverWidget"] {
  z-index: 99999 !important;
}


/* Gantt */
.sch-timelinepanel .x-grid-item-container>table.x-grid-item {
  width: 100% !important;
}


.sch-gantt-task-bar .sch-gantt-progress-bar {
  background-color: transparent !important;
}

.sch-ganttview,
.sch-item-canvas {
  background-color: #ffffff !important;
}


.dynamicgantt .x-grid-locking-body .x-grid-body,
.dynamicgantt .x-grid-locking-body .x-grid-body {
  background: transparent !important;
  background-color: transparent !important;
  border-width: 0 !important;
}


/* TOOLBAR  BAR RECORD FORM */
.fa-save::before {
  color: #218c1b !important;
}

.fa-trash::before {
  color: #a72c2c !important;
}

.fa-trash:hover {
  background-color: transparent !important;
  color: #e5ff00 !important;
  font-size: 19px !important;
}

.fa-circle:hover {
  background-color: transparent !important;
}

.fa-check-circle:hover {
  background-color: transparent !important;
}

.fa-check {
  color: #04b00d !important;
}

.fa-xmark {
  color: #c10b0b !important;
}

.fa-circle-xmark {
  color: #c10b0b !important;
}

.fa-check:hover {
  background-color: transparent !important;
}

/* =========================================================
   Smart Icon base
   ========================================================= */
.smarticon-wrapper {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: 8px;
  box-sizing: border-box;
}

.smarticon-inner {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.smarticon-inner>*:first-child {
  transform-origin: center center;
  transition: transform 0.2s ease-out;
}

.smarticon-label {
  margin-top: 8px;
  font-size: 11px;
  font-weight: 500;
  font-family: sans-serif;
  color: #222;
  text-align: center;
  max-width: 100%;
  width: 100%;
  box-sizing: border-box;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: block;
}



/* così non gestisce il disabled
.fa-folder-open::before {
    color: #e6b93ef4 !important;
}
*/
.fa-asterisk::before {
  color: #4487c5 !important;
}

/* così non gestisce il disabled
.fa-clone::before {
    color: #ff9a0d !important;
}
*/
.fa-file-excel::before {
  color: #268551 !important;
}

.fa-file-pdf::before {
  color: #b91818 !important;
}
/* ** readonly ** */
.app-readonly-field {
	background-color: #f5f5f5 !important;
	color: #333 !important;
	font-weight: 400;
}



/* =========================
   Radiator
   ========================= */
.radiator {
  width: 220px;
  height: 80px;
  border-radius: 10px;
  background: linear-gradient(180deg, #f3f5f7, #dfe4ea);
  box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.6), inset 0 -2px 3px rgba(0, 0, 0, 0.1);
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  position: relative;
}

.radiator .columns {
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 90%;
  height: 80%;
}

.radiator .col {
  width: 18px;
  height: 100%;
  border-radius: 12px;
  background: linear-gradient(180deg, #fafafa, #d4d8de);
  box-shadow: inset 0 2px 2px rgba(255, 255, 255, 0.8), inset 0 -2px 2px rgba(0, 0, 0, 0.15);
}

.radiator .pipe {
  position: absolute;
  bottom: -8px;
  left: 0;
  right: 0;
  height: 10px;
  border-radius: 5px;
  background: linear-gradient(90deg, #ccc, #999, #ccc);
}

.radiator .valve {
  position: absolute;
  top: 10px;
  right: -18px;
  width: 16px;
  height: 40px;
  border-radius: 4px;
  background: linear-gradient(90deg, #dcdfe2, #aeb5bb);
}

.radiator .ripartitore {
  position: absolute;
  left: 50%;
  top: 35%;
  width: 40px;
  height: 60px;
  transform: translate(-50%, -50%);
  background: #e9ecef;
  border-radius: 4px;
}

.radiator .ripartitore .display {
  position: absolute;
  top: 20px;
  left: 50%;
  transform: translateX(-50%);
  width: 32px;
  height: 25px;
  background: #111;
  color: #00ffcc;
  font-size: 10px;
  text-align: center;
  border-radius: 3px;
  font-family: monospace;
  line-height: 18px;
}

.radiator.active .col {
  background: linear-gradient(180deg, #ffe6d1, #ffb86c);
  box-shadow: inset 0 2px 2px rgba(255, 255, 255, 0.6), inset 0 -2px 2px rgba(255, 128, 0, 0.4);
}

.radiator.active .ripartitore .display {
  background: #222;
  color: #ffbf00;
  text-shadow: 0 0 4px #ffbf00;
}

/* =========================
   Watermeter
   ========================= */
.watermeter {
  position: relative;
  width: 8em;
  height: 8em;
  font-size: 1em;
}

.watermeter .pipe-right {
  position: absolute;
  top: 50%;
  width: 1.5em;
  height: 1em;
  background: linear-gradient(90deg, #999, #ccc);
  border-radius: 0.4em;
  transform: translateY(-50%);
}

.watermeter .pipe-right {
  right: -1.5em;
  background: linear-gradient(90deg, #ccc, #999);
}

.watermeter .body {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background: radial-gradient(circle at 40% 30%, #e0e0e0, #9e9e9e 70%, #757575);
  display: flex;
  align-items: center;
  justify-content: center;
}

.watermeter .glass {
  position: relative;
  width: 75%;
  height: 75%;
  border-radius: 50%;
  background: radial-gradient(circle at 30% 30%, #ffffff 10%, #e3f2fd 60%, #90caf9 90%);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.watermeter .counter {
  background: #111;
  border-radius: 0.3em;
  padding: 0.2em 0.4em;
  color: #fff;
  font-family: monospace;
  font-size: 0.9em;
  display: flex;
  justify-content: center;
}

.watermeter .counter span {
  margin: 0 0.05em;
}

.watermeter .indicators {
  width: 100%;
  height: 2em;
  margin-top: 0.3em;
  display: flex;
  justify-content: space-evenly;
  align-items: center;
}

.watermeter .dial {
  width: 1.5em;
  height: 1.5em;
  border-radius: 50%;
  border: 0.2em solid #222;
  background: radial-gradient(circle at 30% 30%, #fff, #ccc);
  position: relative;
}

.watermeter .dial::after {
  content: '';
  position: absolute;
  top: 0.3em;
  left: 50%;
  width: 0.15em;
  height: 0.7em;
  background: #000;
  transform-origin: bottom center;
  transition: transform 0.5s ease-out;
  transform: rotate(0deg);
}

.watermeter .dial.red {
  border-color: #c62828;
}

.watermeter .dial.blue {
  border-color: #1565c0;
}

.watermeter.active .dial.red::after {
  animation: rotate-dial-red 1.5s linear infinite;
}

.watermeter.active .dial.blue::after {
  animation: rotate-dial-blue 1.5s linear infinite;
}


/* =========================
   Extinguisher
   ========================= */
.extinguisher {
  position: relative;
  width: 2.5em;
  height: 5em;
  background: linear-gradient(180deg, #ff3b3b, #b30000);
  border-radius: 0.3em 0.3em 0.2em 0.2em;
  box-shadow: inset 0 0.1em 0.1em rgba(255, 255, 255, 0.5), 0 0.25em 0.5em rgba(0, 0, 0, 0.3);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  padding-top: 0.6em;
  transition: box-shadow 0.3s ease;
  font-size: 1em;
}

.extinguisher::before {
  content: '';
  position: absolute;
  top: -0.6em;
  left: 50%;
  transform: translateX(-50%);
  width: 1.5em;
  height: 0.3em;
  background: linear-gradient(90deg, #666, #aaa);
  border-radius: 0.15em;
}

.extinguisher::after {
  content: '';
  position: absolute;
  top: 12%;
  left: 100%;
  width: 0.4em;
  height: 1.5em;
  background: linear-gradient(180deg, #666, #999);
  border-radius: 0.2em;
  transform: rotate(20deg);
}

.extinguisher .label {
  width: 60%;
  height: 0.9em;
  background: #fff;
  color: #b30000;
  text-align: center;
  font-weight: bold;
  font-size: 0.55em;
  border-radius: 0.2em;
  line-height: 0.9em;
  margin-bottom: 0.4em;
}

.extinguisher .display {
  width: 60%;
  height: 1em;
  background: #111;
  color: #00ffcc;
  font-family: monospace;
  font-size: 0.6em;
  text-align: center;
  border-radius: 0.2em;
  line-height: 1em;
  margin-top: auto;
  margin-bottom: 0.4em;
}

.extinguisher.active {
  box-shadow: 0 0 0.5em 0.2em rgba(255, 0, 0, 0.6);
  animation: pulse-red 1s infinite alternate;
}

@keyframes pulse-red {
  0% {
    box-shadow: 0 0 0.3em 0.1em rgba(255, 0, 0, 0.4);
  }

  100% {
    box-shadow: 0 0 0.6em 0.3em rgba(255, 0, 0, 0.8);
  }
}

/* =========================
   Switch
   ========================= */
.switch {
  width: 50px;
  height: 30px;
  border-radius: 15px;
  background: #ccc;
  display: flex;
  align-items: center;
  padding: 2px;
  transition: background 0.3s;
  box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.5), inset 0 -1px 2px rgba(0, 0, 0, 0.1);
}

.switch .switch-knob {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
  transition: transform 0.3s;
}

.switch.active {
  background: #4cd964;
}

.switch.active .switch-knob {
  transform: translateX(20px);
}

/* =========================
   Bulb
   ========================= */
.bulb {
  width: 50px;
  height: 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  position: relative;
}

.bulb-glass {
  width: 40px;
  height: 50px;
  background: radial-gradient(circle at 50% 40%, #f9f9f9, #dcdcdc 70%);
  border-radius: 50% 50% 40% 40% / 60% 60% 40% 40%;
  position: relative;
  box-shadow: inset 0 -3px 8px rgba(0, 0, 0, 0.15);
  transition: background 0.3s, box-shadow 0.3s;
  display: flex;
  align-items: center;
  justify-content: center;
}

.bulb-glass .filament {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 2px solid #cc8b00;
  position: relative;
}

.bulb-glass .filament::before,
.bulb-glass .filament::after {
  content: '';
  position: absolute;
  width: 2px;
  height: 8px;
  background: #cc8b00;
  top: 100%;
}

.bulb-glass .filament::before {
  left: 3px;
}

.bulb-glass .filament::after {
  right: 3px;
}

.bulb-neck {
  width: 18px;
  height: 8px;
  background: linear-gradient(180deg, #999, #666);
  border-radius: 4px;
  margin-top: 2px;
}

.bulb-base {
  width: 24px;
  height: 12px;
  background: repeating-linear-gradient(90deg, #666 0px, #888 4px, #555 4px, #777 8px);
  border-radius: 3px;
  margin-top: 2px;
}

.bulb.active .bulb-glass {
  background: radial-gradient(circle at 50% 40%, #fffec0, #ffd700 70%);
  box-shadow: 0 0 20px 6px rgba(255, 240, 150, 0.8);
}

.bulb.active .filament {
  border-color: #ffae00;
  background: radial-gradient(circle, #ffcc00 40%, transparent 60%);
  box-shadow: 0 0 10px 2px rgba(255, 200, 0, 0.7);
}

/* =========================
   Button
   ========================= */
.button {
  width: 60px;
  height: 60px;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  border-radius: 50%;
  background: linear-gradient(180deg, #f5f5f5, #ccc);
  box-shadow: inset 0 2px 2px rgba(255, 255, 255, 0.8), 0 4px 6px rgba(0, 0, 0, 0.3);
  transition: all 0.2s ease;
}

.button .button-face {
  font-size: 0.8em;
  color: #222;
  font-weight: bold;
  text-transform: uppercase;
  font-family: sans-serif;
}

.button:active,
.button.active {
  background: linear-gradient(180deg, #ccc, #888);
  box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.3), 0 1px 1px rgba(255, 255, 255, 0.6);
  transform: translateY(2px);
}

/* =========================
   Gas meter
   ========================= */
.gasmeter {
  width: 7em;
  height: 6em;
  font-size: 1em;
  display: flex;
  align-items: center;
  justify-content: center;
}

.gasmeter .gas-body {
  position: relative;
  width: 100%;
  height: 100%;
  background: linear-gradient(180deg, #e0e0e0, #bbb);
  border-radius: 0.5em;
  box-shadow: inset 0 0.2em 0.4em rgba(255, 255, 255, 0.5), inset 0 -0.2em 0.4em rgba(0, 0, 0, 0.1);
  padding: 0.5em;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.gasmeter .gas-display {
  background: #fff;
  color: #000;
  font-family: monospace;
  font-size: 1em;
  padding: 0.2em 0.4em;
  border-radius: 0.3em;
  box-shadow: 0 0 0.2em rgba(0, 0, 0, 0.2);
  display: flex;
  justify-content: center;
}

.gasmeter .gas-display span {
  margin: 0 0.05em;
}

.gasmeter .gas-label {
  margin-top: 0.4em;
  font-size: 0.7em;
  font-weight: bold;
  color: #444;
}

.gasmeter.active .gas-body {
  box-shadow: 0 0 0.6em 0.2em rgba(255, 165, 0, 0.5);
  background: linear-gradient(180deg, #fff1e0, #ffc180);
}

/* =========================
   Energy meter
   ========================= */
.energymeter {
  width: 7em;
  height: 5em;
  font-size: 1em;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: linear-gradient(180deg, #f0f0f0, #c0c0c0);
  border-radius: 0.5em;
  box-shadow: inset 0 2px 4px rgba(255, 255, 255, 0.6), inset 0 -2px 4px rgba(0, 0, 0, 0.1);
  position: relative;
  padding: 0.5em;
  box-sizing: border-box;
}

.energymeter .energy-display {
  background: #111;
  color: #0f0;
  font-family: monospace;
  font-size: 1.2em;
  padding: 0.3em 0.6em;
  border-radius: 0.3em;
  box-shadow: inset 0 0 0.3em rgba(0, 255, 0, 0.3);
  display: flex;
  align-items: baseline;
  gap: 0.3em;
}

.energymeter .energy-display .digits span {
  display: inline-block;
  margin: 0 1px;
}

.energymeter .energy-display .unit {
  font-size: 0.6em;
  color: #0f0;
  opacity: 0.8;
}

.energymeter .led-indicator {
  margin-top: 0.6em;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #444;
  box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.4);
  transition: background 0.3s, box-shadow 0.3s;
}

.energymeter.active .led-indicator {
  background: #00ff00;
  box-shadow: 0 0 6px 2px rgba(0, 255, 0, 0.6);
}

/* =========================
   Lifter
   ========================= */
.lifter {
  width: 60px;
  height: 100px;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  font-size: 1em;
}

.lift-shaft {
  width: 100%;
  height: 100%;
  border: 2px solid #555;
  border-radius: 6px;
  box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2);
  background: linear-gradient(180deg, #dcdcdc, #b0b0b0);
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
  padding-bottom: 8px;
  box-sizing: border-box;
}

.lift-doors {
  position: relative;
  width: 80%;
  height: 60%;
  display: flex;
  justify-content: space-between;
}

.lift-doors .door {
  width: 48%;
  height: 100%;
  background: linear-gradient(180deg, #999, #666);
  box-shadow: inset 0 2px 4px rgba(255, 255, 255, 0.5), inset 0 -2px 4px rgba(0, 0, 0, 0.2);
  transition: transform 0.5s ease;
}

.lift-doors .door.left {
  transform-origin: left;
}

.lift-doors .door.right {
  transform-origin: right;
}

.lifter.active .door.left {
  transform: translateX(-100%);
}

.lifter.active .door.right {
  transform: translateX(100%);
}

.lift-display {
  position: absolute;
  top: 6px;
  width: 70%;
  height: 16px;
  background: #111;
  color: #00ffcc;
  text-align: center;
  font-size: 0.8em;
  line-height: 16px;
  font-family: monospace;
  border-radius: 3px;
  box-shadow: inset 0 0 2px rgba(0, 255, 255, 0.3);
}

/* =========================
   Door opener
   ========================= */
.dooropener {
  width: 3em;
  height: 5em;
  font-size: 1em;
  display: flex;
  align-items: center;
  justify-content: center;
}

.door-frame {
  width: 100%;
  height: 100%;
  border: 0.2em solid #444;
  border-radius: 0.3em;
  box-sizing: border-box;
  position: relative;
  background: #ccc;
}

.door-leaf {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(180deg, #a0522d, #8b4513);
  border-radius: 0.2em;
  transform-origin: left center;
  transition: transform 0.5s ease;
  display: flex;
  align-items: center;
  justify-content: center;
}

.dooropener.active .door-leaf {
  transform: rotateY(-70deg);
}

.door-label {
  color: #fffbe6;
  font-size: 0.7em;
  font-weight: bold;
  font-family: sans-serif;
  text-align: center;
  pointer-events: none;
  margin-top: 7%;
  align-self: self-start;
}

.handle {
  position: absolute;
  right: 0.4em;
  top: 50%;
  width: 0.4em;
  height: 0.4em;
  background: #eee;
  border-radius: 50%;
  transform: translateY(-50%);
  box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.3);
}

/* =========================
   Lock
   ========================= */
.lock {
  width: 50px;
  height: 70px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  position: relative;
}

.lock-body {
  width: 40px;
  height: 40px;
  background: linear-gradient(180deg, #e0e0e0, #999);
  border-radius: 6px;
  box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.7), inset 0 -1px 2px rgba(0, 0, 0, 0.3);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
}

.lock-shackle {
  position: absolute;
  top: 0;
  width: 30px;
  height: 24px;
  border: 4px solid #888;
  border-bottom: none;
  border-radius: 16px 16px 0 0;
  background: transparent;
  transition: transform 0.4s ease;
}

.lock .keyhole {
  width: 6px;
  height: 10px;
  background: #222;
  border-radius: 3px 3px 50% 50%;
  position: relative;
}

.lock.active .lock-shackle {
  transform: rotate(-25deg) translateY(-5px);
}

.lock.active .lock-body {
  background: linear-gradient(180deg, #ffe0a3, #e6a200);
  box-shadow: 0 0 10px 3px rgba(255, 180, 0, 0.6);
}

/* =========================
   Plug
   ========================= */
.plug {
  width: 40px;
  height: 60px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  position: relative;
}

.plug-body {
  width: 28px;
  height: 28px;
  background: linear-gradient(180deg, #bbb, #777);
  border-radius: 5px;
  box-shadow: inset 0 2px 3px rgba(255, 255, 255, 0.6), 0 2px 4px rgba(0, 0, 0, 0.3);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 4px;
  position: relative;
  z-index: 2;
}

.plug .prong {
  width: 4px;
  height: 10px;
  background: #ccc;
  border-radius: 1px;
}

.plug .cable {
  width: 6px;
  height: 30px;
  background: linear-gradient(180deg, #444, #222);
  border-radius: 3px;
  margin-top: -3px;
  z-index: 1;
}

.plug.active .plug-body {
  background: linear-gradient(180deg, #90ee90, #3fa43f);
  box-shadow: 0 0 10px 4px rgba(80, 255, 80, 0.6);
}

.plug.active .cable {
  background: linear-gradient(180deg, #3fa43f, #0a740a);
}

/* =========================
   Fan
   ========================= */
.fan {
  width: 80px;
  height: 120px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  position: relative;
}

.fan-stand {
  width: 14px;
  height: 50px;
  background: linear-gradient(180deg, #999, #666);
  border-radius: 6px;
  box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.6), 0 2px 4px rgba(0, 0, 0, 0.3);
}

.fan-body {
  position: absolute;
  top: 0;
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background: radial-gradient(circle at 40% 30%, #f8f8f8, #b0b0b0 70%);
  box-shadow: inset 0 3px 6px rgba(255, 255, 255, 0.8), 0 4px 10px rgba(0, 0, 0, 0.3);
  display: flex;
  align-items: center;
  justify-content: center;
}

.fan-grill {
  position: relative;
  width: 88%;
  height: 88%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%, #ddd 20%, #aaa 100%);
  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

.fan-grill::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: repeating-radial-gradient(circle, transparent 0px, transparent 6px, rgba(0, 0, 0, 0.05) 7px, rgba(0, 0, 0, 0.05) 8px);
  z-index: 2;
}

.fan-blades {
  position: absolute;
  width: 60%;
  height: 60%;
  transform: translate(-11%, -59%) rotate(0deg);
  transform-origin: center center;
}

.fan-blades .blade {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 12px;
  height: 28px;
  border-radius: 10px;
  background: linear-gradient(180deg, #d0d0d0, #999);
  transform-origin: center 90%;
  opacity: 0.95;
}

.fan-blades .blade:nth-child(1) {
  transform: rotate(0deg);
}

.fan-blades .blade:nth-child(2) {
  transform: rotate(90deg);
}

.fan-blades .blade:nth-child(3) {
  transform: rotate(180deg);
}

.fan-blades .blade:nth-child(4) {
  transform: rotate(270deg);
}

.fan-center {
  position: absolute;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: radial-gradient(circle, #777 0%, #444 90%);
  z-index: 3;
  box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
}

@keyframes spin-smooth {
  from {
    transform: translate(-11%, -59%) rotate(0deg);
  }

  to {
    transform: translate(-11%, -59%) rotate(360deg);
  }
}

.fan.active .fan-blades {
  animation: spin-smooth 0.5s linear infinite;
}

.fan.active .fan-body {
  box-shadow: 0 0 18px 5px rgba(135, 206, 250, 0.6), inset 0 2px 4px rgba(255, 255, 255, 0.8);
  background: radial-gradient(circle at 50% 30%, #e0ffff, #a0e0ff 70%);
}

.fan.active .fan-center {
  background: radial-gradient(circle, #66ccff 0%, #004488 100%);
  box-shadow: 0 0 6px 3px rgba(135, 206, 250, 0.8);
}

/* =========================
   Air conditioner
   ========================= */
.airconditioner {
  width: 80px;
  height: 50px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  position: relative;
}

.airconditioner .ac-body {
  width: 100%;
  height: 30px;
  border-radius: 6px;
  background: linear-gradient(180deg, #f0f0f0, #c8c8c8);
  box-shadow: inset 0 2px 2px rgba(255, 255, 255, 0.7), inset 0 -2px 2px rgba(0, 0, 0, 0.2);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 3px;
  box-sizing: border-box;
}

.airconditioner .ac-display {
  font-family: monospace;
  font-size: 0.7em;
  background: #222;
  color: #00ffcc;
  border-radius: 2px;
  padding: 1px 4px;
}

.airconditioner .ac-vents {
  display: flex;
  justify-content: space-between;
  width: 80%;
}

.airconditioner .ac-vents .vent {
  width: 20%;
  height: 3px;
  background: #777;
  border-radius: 2px;
}

.airconditioner .ac-airflow {
  display: none;
  position: relative;
  width: 100%;
  height: 20px;
  justify-content: center;
  gap: 6px;
  margin-top: 2px;
}

.airconditioner .ac-airflow span {
  width: 3px;
  height: 12px;
  background: rgba(173, 216, 230, 0.6);
  border-radius: 3px;
  opacity: 0;
  animation: air-flow 2s infinite;
}

.airconditioner .ac-airflow span:nth-child(1) {
  animation-delay: 0s;
}

.airconditioner .ac-airflow span:nth-child(2) {
  animation-delay: 0.4s;
}

.airconditioner .ac-airflow span:nth-child(3) {
  animation-delay: 0.8s;
}

@keyframes air-flow {
  0% {
    transform: translateY(0);
    opacity: 0;
  }

  30% {
    opacity: 1;
  }

  100% {
    transform: translateY(12px);
    opacity: 0;
  }
}

.airconditioner.active .ac-airflow {
  display: flex;
}

.airconditioner.active .ac-airflow span {
  background: rgba(135, 206, 250, 0.8);
}

.airconditioner.active .ac-body {
  background: linear-gradient(180deg, #e8ffff, #b0e0e6);
  box-shadow: 0 0 10px 3px rgba(135, 206, 250, 0.5);
}