説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

_layout.scss 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017
  1. /* Layouts
  2. ******************************************************************************* */
  3. .layout-container {
  4. min-block-size: 100vh;
  5. }
  6. .layout-wrapper,
  7. .layout-container {
  8. display: flex;
  9. flex: 1 1 auto;
  10. align-items: stretch;
  11. inline-size: 100%;
  12. }
  13. .layout-menu-offcanvas .layout-wrapper,
  14. .layout-menu-fixed-offcanvas .layout-wrapper {
  15. overflow: hidden;
  16. }
  17. /* Display menu toggle on navbar for .layout-menu-offcanvas, .layout-menu-fixed-offcanvas */
  18. .layout-menu-offcanvas .layout-navbar .layout-menu-toggle,
  19. .layout-menu-fixed-offcanvas .layout-navbar .layout-menu-toggle {
  20. display: block !important;
  21. }
  22. /* Hide menu close icon from large screen for .layout-menu-offcanvas, .layout-menu-fixed-offcanvas */
  23. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  24. .layout-menu-offcanvas .layout-menu .layout-menu-toggle,
  25. .layout-menu-fixed-offcanvas .layout-menu .layout-menu-toggle {
  26. display: none;
  27. }
  28. .layout-horizontal .layout-page .menu-horizontal {
  29. box-shadow: var(--#{$prefix}menu-box-shadow);
  30. }
  31. }
  32. .layout-page,
  33. .content-wrapper,
  34. .content-wrapper > *,
  35. .layout-menu {
  36. min-block-size: 1px;
  37. }
  38. .layout-navbar,
  39. .content-footer {
  40. flex: 0 0 auto;
  41. }
  42. .layout-page {
  43. display: flex;
  44. flex: 1 1 auto;
  45. align-items: stretch;
  46. padding: 0;
  47. // Without menu
  48. .layout-without-menu & {
  49. padding-inline: 0 !important;
  50. }
  51. }
  52. .content-wrapper {
  53. display: flex;
  54. flex: 1 1 auto;
  55. flex-direction: column;
  56. align-items: stretch;
  57. justify-content: space-between;
  58. }
  59. /* Content backdrop */
  60. .content-backdrop {
  61. /* z-index: 1 (layout static) */
  62. @include overlay-backdrop(1, $modal-backdrop-bg, $modal-backdrop-opacity);
  63. // z-index: 10 (layout fixed)
  64. .layout-menu-fixed & {
  65. z-index: 10;
  66. }
  67. // z-index: 9 (layout-horizontal)
  68. .layout-horizontal &:not(.fade) {
  69. z-index: 9;
  70. /* Horizontal fix for search background with opacity */
  71. inset-block-start: $navbar-height !important;
  72. }
  73. &.fade {
  74. z-index: -1;
  75. }
  76. }
  77. /* Layout Navbar
  78. ******************************************************************************* */
  79. // Layout navbar search input
  80. @mixin searchInputContainer {
  81. inset-inline-start: calc(calc(100% - map-get($container-max-widths, "xxl")) * .5);
  82. }
  83. // Layout navbar search close icon
  84. @mixin searchInputIconToggler {
  85. inset-inline-end: calc(calc(100% - map-get($container-max-widths, "xxl") + 5rem) * .5);
  86. }
  87. // Layout sticky style
  88. .sticky-element {
  89. position: sticky;
  90. z-index: 8;
  91. margin-inline-end: -1px;
  92. .window-scrolled & {
  93. inset-block-start: 0;
  94. @include border-top-radius(0);
  95. }
  96. .layout-navbar-fixed & {
  97. inset-block-start: calc($navbar-height + $spacer - .5625rem);
  98. }
  99. .layout-menu-fixed .layout-horizontal & {
  100. inset-block-start: calc($navbar-height * 2 - .25rem);
  101. }
  102. .layout-menu-fixed.layout-navbar-fixed .layout-horizontal & {
  103. inset-block-start: $navbar-height;
  104. }
  105. }
  106. .layout-navbar {
  107. position: relative;
  108. z-index: 2;
  109. flex-wrap: nowrap;
  110. block-size: $navbar-height;
  111. color: var(--#{$prefix}body-color);
  112. padding-block: .5rem;
  113. .navbar {
  114. transform: translate3d(0, 0, 0);
  115. }
  116. .navbar-nav-right {
  117. flex-basis: 100%;
  118. }
  119. // Style for detached navbar
  120. &.navbar-detached {
  121. /* Container layout max-width */
  122. $container-xxl: map-get($container-max-widths, xxl);
  123. @include border-radius($border-radius);
  124. box-shadow: var(--#{$prefix}box-shadow-sm);
  125. /* Navbar static */
  126. inline-size: calc(100% - calc(#{$container-padding-x} * 2));
  127. margin-block: $spacer 0;
  128. padding-block: 0;
  129. padding-inline: $card-spacer-x;
  130. &.container-xxl {
  131. max-inline-size: calc(#{$container-xxl} - calc(#{$container-padding-x} * 2));
  132. }
  133. // Navbar fixed
  134. .layout-navbar-fixed & {
  135. inline-size: calc(100% - calc(#{$container-padding-x} * 2) - #{$menu-width});
  136. @include media-breakpoint-down(xl) {
  137. inline-size: calc(100% - calc(#{$container-padding-x} * 2)) !important;
  138. }
  139. @include media-breakpoint-down(lg) {
  140. inline-size: calc(100% - calc(#{$container-padding-x-sm} * 2)) !important;
  141. }
  142. }
  143. .layout-navbar-fixed.layout-menu-collapsed & {
  144. inline-size: calc(100% - calc(#{$container-padding-x} * 2) - #{$menu-collapsed-width});
  145. }
  146. .layout-menu-collapsed &,
  147. .layout-without-menu & {
  148. inline-size: calc(100% - calc(#{$container-padding-x} * 2));
  149. }
  150. }
  151. .dropdown-menu[data-bs-popper] {
  152. .layout-wrapper:not(.layout-horizontal) & {
  153. inset-block-start: 144%;
  154. @include media-breakpoint-down(md) {
  155. inset-block-start: 110%;
  156. }
  157. }
  158. }
  159. // Navbar custom dropdown
  160. .navbar-dropdown {
  161. .badge-notifications {
  162. inset-block-start: 3px;
  163. inset-inline-end: -2px;
  164. }
  165. .dropdown-menu {
  166. overflow: hidden;
  167. min-inline-size: $navbar-dropdown-width;
  168. .dropdown-item {
  169. min-block-size: 2.375rem;
  170. }
  171. .last-login {
  172. white-space: normal;
  173. }
  174. }
  175. // Notifications
  176. &.dropdown-notifications {
  177. .dropdown-notifications-list {
  178. max-block-size: $navbar-dropdown-content-height;
  179. .dropdown-notifications-item {
  180. cursor: pointer;
  181. padding-block: $navbar-notifications-dropdown-item-padding-y;
  182. padding-inline: $navbar-notifications-dropdown-item-padding-x;
  183. .dropdown-notifications-actions {
  184. text-align: center;
  185. > a {
  186. display: block;
  187. }
  188. }
  189. .dropdown-notifications-archive i,
  190. .dropdown-notifications-archive span {
  191. color: var(--#{$prefix}heading-color);
  192. }
  193. // Notification default marked as read/unread
  194. &.marked-as-read {
  195. .dropdown-notifications-read,
  196. .dropdown-notifications-archive {
  197. visibility: hidden;
  198. }
  199. // Dropdown notification unread badge bg color
  200. .dropdown-notifications-read span {
  201. background-color: var(--#{$prefix}secondary);
  202. }
  203. }
  204. &:not(.marked-as-read) {
  205. .dropdown-notifications-archive {
  206. visibility: hidden;
  207. }
  208. }
  209. // Notification hover marked as read/unread
  210. &:hover {
  211. &.marked-as-read {
  212. .dropdown-notifications-read,
  213. .dropdown-notifications-archive {
  214. visibility: visible;
  215. }
  216. }
  217. &:not(.marked-as-read) {
  218. .dropdown-notifications-archive {
  219. visibility: visible;
  220. }
  221. }
  222. }
  223. }
  224. }
  225. }
  226. // Shortcuts
  227. &.dropdown-shortcuts {
  228. .dropdown-shortcuts-list {
  229. max-block-size: $navbar-dropdown-content-height;
  230. }
  231. .dropdown-shortcuts-item {
  232. padding: 1.5rem;
  233. text-align: center;
  234. &:hover {
  235. background-color: $navbar-dropdown-hover-bg;
  236. }
  237. .dropdown-shortcuts-icon {
  238. display: flex;
  239. align-items: center;
  240. justify-content: center;
  241. background-color: $navbar-dropdown-icon-bg;
  242. block-size: 3.125rem;
  243. color: var(--#{$prefix}heading-color);
  244. inline-size: 3.125rem;
  245. margin-inline: auto;
  246. }
  247. a,
  248. a:hover {
  249. display: block;
  250. color: var(--#{$prefix}heading-color) !important;
  251. font-weight: $font-weight-medium;
  252. margin-block-end: 0;
  253. }
  254. }
  255. }
  256. &.dropdown-user {
  257. .dropdown-menu {
  258. min-inline-size: 14rem;
  259. }
  260. }
  261. }
  262. &[class*="bg-"]:not(.bg-navbar-theme) {
  263. .nav-item {
  264. .input-group-text,
  265. .dropdown-toggle {
  266. color: var(--#{$prefix}white);
  267. }
  268. }
  269. }
  270. @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
  271. .navbar-nav {
  272. .nav-item {
  273. &.dropdown {
  274. .dropdown-menu {
  275. position: absolute;
  276. .last-login {
  277. white-space: nowrap;
  278. }
  279. }
  280. }
  281. }
  282. }
  283. }
  284. @include media-breakpoint-down(md) {
  285. .navbar-nav {
  286. .nav-item.dropdown {
  287. position: static;
  288. float: inline-start;
  289. .dropdown-menu {
  290. position: absolute;
  291. inline-size: 92%;
  292. inset-inline-start: .9rem;
  293. min-inline-size: auto;
  294. }
  295. }
  296. }
  297. }
  298. }
  299. .navbar-nav .nav-link:focus-visible {
  300. box-shadow: none;
  301. }
  302. /* Navbar require high z-index as we use z-index for menu slide-out for below large screen */
  303. @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
  304. .layout-navbar {
  305. z-index: $zindex-menu-fixed;
  306. }
  307. }
  308. /* Layout Menu
  309. ******************************************************************************* */
  310. .layout-menu {
  311. position: relative;
  312. flex: 1 0 auto;
  313. a:focus-visible {
  314. outline: none;
  315. }
  316. .menu {
  317. transform: translate3d(0, 0, 0);
  318. }
  319. &.menu-vertical {
  320. ~ .layout-page {
  321. &.window-scrolled {
  322. .layout-navbar {
  323. backdrop-filter: saturate(200%) blur(6px);
  324. background-color: rgba(var(--#{$prefix}paper-bg-rgb), .88);
  325. }
  326. }
  327. }
  328. }
  329. }
  330. /* Layout Content navbar
  331. ******************************************************************************* */
  332. .layout-content-navbar {
  333. .layout-page {
  334. flex-basis: 100%;
  335. flex-direction: column;
  336. inline-size: 0;
  337. max-inline-size: 100%;
  338. min-inline-size: 0;
  339. }
  340. .content-wrapper {
  341. inline-size: 100%;
  342. }
  343. }
  344. /* Layout Navbar full
  345. ******************************************************************************* */
  346. .layout-navbar-full {
  347. .layout-container {
  348. flex-direction: column;
  349. }
  350. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  351. &:not(.layout-horizontal) .menu-inner {
  352. margin-block-start: .75rem;
  353. }
  354. }
  355. .content-wrapper {
  356. flex-basis: 100%;
  357. inline-size: 0;
  358. max-inline-size: 100%;
  359. min-inline-size: 0;
  360. }
  361. &.layout-horizontal .layout-navbar {
  362. background-color: var(--#{$prefix}navbar-bg);
  363. box-shadow: 0 1px 0 var(--#{$prefix}border-color);
  364. // Algolia search placeholder style
  365. .aa-DetachedSearchButtonPlaceholder {
  366. display: none;
  367. }
  368. .search-toggler {
  369. .aa-DetachedSearchButton {
  370. display: block;
  371. }
  372. }
  373. }
  374. // Adjust content backdrop z-index as per layout navbar full
  375. .content-backdrop {
  376. // static layout
  377. &.show {
  378. z-index: 9;
  379. // fixed/fixed-offcanvas layout
  380. .layout-menu-fixed &,
  381. .layout-menu-fixed-offcanvas & {
  382. z-index: 1076;
  383. }
  384. }
  385. }
  386. }
  387. /* Toggle
  388. ******************************************************************************* */
  389. .layout-menu-toggle .icon-base {
  390. transform: rotate(0deg);
  391. :dir(rtl) & {
  392. transform: rotate(180deg);
  393. }
  394. transition-duration: .3s;
  395. transition-property: transform;
  396. }
  397. @include media-breakpoint-up(lg) {
  398. .layout-menu-toggle {
  399. .layout-menu-hover & {
  400. display: none;
  401. }
  402. }
  403. }
  404. /* Collapsed layout (Default static and static off-canvas menu)
  405. ******************************************************************************* */
  406. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  407. /* Menu style */
  408. .layout-menu-collapsed:not(.layout-menu-hover, .layout-menu-offcanvas, .layout-menu-fixed-offcanvas) {
  409. .layout-menu .menu-vertical,
  410. .layout-menu.menu-vertical {
  411. @include layout-menu-collapsed ();
  412. }
  413. }
  414. /* Menu position */
  415. .layout-menu-hover.layout-menu-collapsed {
  416. .layout-menu {
  417. margin-inline-end: -calc(var(--#{$prefix}menu-width) + var(--#{$prefix}menu-collapsed-width));
  418. .layout-menu-toggle .icon-base {
  419. transform: rotate(180deg);
  420. transition-duration: .3s;
  421. transition-property: transform;
  422. :dir(rtl) & {
  423. transform: rotate(0deg);
  424. }
  425. }
  426. }
  427. }
  428. }
  429. /* Off-canvas layout (Layout Collapsed)
  430. ******************************************************************************* */
  431. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  432. .layout-menu-collapsed.layout-menu-offcanvas {
  433. .layout-menu {
  434. margin-inline-end: calc(var(--#{$prefix}menu-width) * -1);
  435. transform: translateX(-100%);
  436. }
  437. }
  438. }
  439. /* Fixed off-canvas layout (Layout Fixed)
  440. ******************************************************************************* */
  441. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  442. /* Menu */
  443. .layout-menu-fixed,
  444. .layout-menu-fixed-offcanvas {
  445. .layout-menu {
  446. position: fixed;
  447. inset-block: 0;
  448. inset-inline-start: 0;
  449. margin-inline: 0 !important;
  450. }
  451. }
  452. /* Fixed off-canvas */
  453. /* Menu collapsed */
  454. .layout-menu-fixed-offcanvas.layout-menu-collapsed {
  455. .layout-menu {
  456. transform: translateX(-100%);
  457. }
  458. }
  459. /* Container */
  460. /* Menu expanded */
  461. .layout-menu-fixed:not(.layout-menu-collapsed),
  462. .layout-menu-fixed-offcanvas:not(.layout-menu-collapsed) {
  463. .layout-page {
  464. padding-inline-start: var(--#{$prefix}menu-width);
  465. }
  466. }
  467. /* Menu collapsed */
  468. .layout-menu-fixed.layout-menu-collapsed {
  469. .layout-page {
  470. padding-inline-start: var(--#{$prefix}menu-collapsed-width);
  471. }
  472. }
  473. }
  474. /* Reset paddings (for non fixed entities) */
  475. html:not(.layout-navbar-fixed, .layout-menu-fixed, .layout-menu-fixed-offcanvas) .layout-page,
  476. html:not(.layout-navbar-fixed) .layout-content-navbar .layout-page {
  477. padding-block-start: 0 !important;
  478. }
  479. html:not(.layout-footer-fixed) .content-wrapper {
  480. padding-block-end: 0 !important;
  481. }
  482. @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
  483. .layout-menu-fixed .layout-wrapper.layout-navbar-full .layout-menu,
  484. .layout-menu-fixed-offcanvas .layout-wrapper.layout-navbar-full .layout-menu {
  485. inset-block-start: 0 !important;
  486. }
  487. html:not(.layout-navbar-fixed) .layout-navbar-full .layout-page {
  488. padding-block-start: 0 !important;
  489. }
  490. }
  491. /* Hidden navbar layout
  492. ******************************************************************************* */
  493. .layout-navbar-hidden {
  494. .layout-navbar {
  495. display: none;
  496. }
  497. }
  498. /* Fixed navbar layout
  499. ******************************************************************************* */
  500. .layout-navbar-fixed {
  501. .layout-navbar {
  502. position: fixed;
  503. inset-block-start: 0;
  504. inset-inline: 0;
  505. }
  506. .container-p-y {
  507. &:not([class^="pt-"]):not([class*=" pt-"]) {
  508. padding-block-start: calc($container-padding-y + .4rem) !important;
  509. }
  510. }
  511. }
  512. .layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-page::before {
  513. position: fixed;
  514. z-index: 10;
  515. backdrop-filter: saturate(200%) blur(10px);
  516. background: linear-gradient(180deg, rgba(var(--#{$prefix}body-bg-rgb), 70%) 44%, rgba(var(--#{$prefix}body-bg-rgb), 43%) 73%, rgba(var(--#{$prefix}body-bg-rgb), 0%));
  517. block-size: 4.75rem;
  518. content: "";
  519. inline-size: 100%;
  520. inset-block-start: 0;
  521. mask: linear-gradient(var(--#{$prefix}body-bg), var(--#{$prefix}body-bg) 18%, transparent 100%);
  522. }
  523. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  524. /* Fix navbar within Navbar Full layout in fixed mode */
  525. .layout-menu-fixed .layout-navbar-full .layout-navbar,
  526. .layout-menu-fixed-offcanvas .layout-navbar-full .layout-navbar {
  527. position: fixed;
  528. inset-block-start: 0;
  529. inset-inline: 0;
  530. }
  531. /* Fix navbar within Content Navbar layout in fixed mode - Menu expanded */
  532. .layout-navbar-fixed:not(.layout-menu-collapsed),
  533. .layout-menu-fixed.layout-navbar-fixed:not(.layout-menu-collapsed),
  534. .layout-menu-fixed-offcanvas.layout-navbar-fixed:not(.layout-menu-collapsed) {
  535. .layout-content-navbar:not(.layout-without-menu) .layout-navbar {
  536. inset-inline-start: var(--#{$prefix}menu-width);
  537. }
  538. &.swal2-shown,
  539. & .modal-open {
  540. .layout-content-navbar:not(.layout-without-menu) .layout-navbar {
  541. inset-inline-start: calc($menu-width - var(--#{$prefix}scrollbar-width));
  542. }
  543. }
  544. &:dir(rtl).swal2-shown,
  545. &:dir(rtl) .modal-open {
  546. .layout-content-navbar:not(.layout-without-menu) .layout-navbar {
  547. inset-inline-start: calc($menu-width + var(--#{$prefix}scrollbar-width));
  548. }
  549. }
  550. }
  551. /* Horizontal Layout when menu fixed */
  552. .layout-menu-fixed.swal2-shown,
  553. .layout-menu-fixed .modal-open {
  554. .layout-horizontal .layout-navbar,
  555. .layout-horizontal .layout-menu-horizontal {
  556. inline-size: calc(100% - var(--#{$prefix}scrollbar-width));
  557. }
  558. }
  559. :dir(rtl).layout-menu-fixed.swal2-shown,
  560. :dir(rtl).layout-menu-fixed .modal-open {
  561. .layout-horizontal .layout-navbar {
  562. inline-size: calc(100% + var(--#{$prefix}scrollbar-width));
  563. }
  564. }
  565. .layout-menu-fixed:not(.layout-navbar-hidden) .layout-horizontal .layout-page .menu-horizontal,
  566. .layout-menu-fixed-offcanvas:not(.layout-navbar-hidden) .layout-horizontal .layout-page .menu-horizontal {
  567. position: fixed;
  568. inset-block-start: $navbar-height;
  569. }
  570. .layout-menu-fixed:not(.layout-navbar-hidden) .layout-horizontal .layout-page .menu-horizontal + [class*="container-"],
  571. .layout-menu-fixed-offcanvas:not(.layout-navbar-hidden) .layout-horizontal .layout-page .menu-horizontal + [class*="container-"] {
  572. padding-block-start: calc($container-padding-y + 3.75rem) !important;
  573. }
  574. /* Layout fixed not off-canvas - Menu collapsed */
  575. .layout-navbar-fixed.layout-menu-collapsed:not(.layout-menu-offcanvas, .layout-menu-fixed-offcanvas),
  576. .layout-menu-fixed.layout-navbar-fixed.layout-menu-collapsed {
  577. .layout-content-navbar .layout-navbar {
  578. inset-inline-start: var(--#{$prefix}menu-collapsed-width);
  579. }
  580. &.swal2-shown,
  581. & .modal-open {
  582. .layout-content-navbar:not(.layout-without-menu) .layout-navbar:has(.container-xxl),
  583. .layout-content-navbar:not(.layout-without-menu) .layout-navbar:has(.container-fluid) {
  584. inset-inline-start: calc(var(--#{$prefix}menu-collapsed-width) - var(--#{$prefix}scrollbar-width));
  585. }
  586. .layout-content-navbar:not(.layout-without-menu) .layout-navbar:has(.container-fluid) {
  587. inline-size: calc(100% - calc(#{$container-padding-x} * 2) - var(--#{$prefix}menu-collapsed-width) - var(--#{$prefix}scrollbar-width));
  588. }
  589. }
  590. &:dir(rtl).swal2-shown,
  591. &:dir(rtl) .modal-open {
  592. .layout-content-navbar:not(.layout-without-menu) .layout-navbar:has(.container-xxl) {
  593. inset-inline-start: calc(var(--#{$prefix}menu-collapsed-width) + var(--#{$prefix}scrollbar-width));
  594. }
  595. .layout-content-navbar:not(.layout-without-menu) .layout-navbar {
  596. inline-size: calc(100% - calc(#{$container-padding-x} * 2) - var(--#{$prefix}menu-collapsed-width) - var(--#{$prefix}scrollbar-width));
  597. }
  598. .layout-content-navbar:not(.layout-without-menu) .layout-navbar:has(.container-fluid) {
  599. inset-inline-start: calc(var(--#{$prefix}menu-collapsed-width) + var(--#{$prefix}scrollbar-width));
  600. }
  601. }
  602. }
  603. }
  604. /* Fixed footer
  605. ******************************************************************************* */
  606. .layout-footer-fixed .content-footer {
  607. position: fixed;
  608. z-index: 9;
  609. inset-block-end: 0;
  610. inset-inline: 0;
  611. }
  612. .layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container,
  613. .layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer {
  614. background-color: var(--#{$prefix}footer-bg);
  615. box-shadow: var(--#{$prefix}footer-box-shadow);
  616. }
  617. .layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container {
  618. border: var(--#{$prefix}footer-border-width) solid var(--#{$prefix}footer-border-color);
  619. padding-inline: 1.5rem;
  620. @include border-top-radius($border-radius);
  621. }
  622. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  623. /* Fixed footer - Menu expanded */
  624. .layout-footer-fixed:not(.layout-menu-collapsed) {
  625. .layout-wrapper:not(.layout-without-menu) .content-footer {
  626. inset-inline-start: var(--#{$prefix}menu-width);
  627. }
  628. &.swal2-shown,
  629. & .modal-open {
  630. .layout-wrapper .content-footer:has(.container-fluid) {
  631. inline-size: calc(100% - $menu-width - var(--#{$prefix}scrollbar-width));
  632. }
  633. }
  634. &:dir(rtl).swal2-shown,
  635. &:dir(rtl) .modal-open {
  636. .layout-wrapper:not(.layout-without-menu) .content-footer:has(.container-xxl) {
  637. inset-inline-start: calc($menu-width + var(--#{$prefix}scrollbar-width));
  638. }
  639. .layout-wrapper .content-footer:has(.container-fluid) {
  640. inset-inline-start: calc(var(--#{$prefix}menu-width) + var(--#{$prefix}scrollbar-width));
  641. }
  642. }
  643. }
  644. /* Fixed footer - Menu collapsed */
  645. .layout-footer-fixed.layout-menu-collapsed:not(.layout-menu-offcanvas, .layout-menu-fixed-offcanvas) {
  646. .layout-wrapper:not(.layout-without-menu) .content-footer {
  647. inset-inline-start: var(--#{$prefix}menu-collapsed-width);
  648. }
  649. &.swal2-shown,
  650. & .modal-open {
  651. .layout-wrapper:not(.layout-without-menu) .content-footer:has(.container-xxl) {
  652. inset-inline-start: calc($menu-collapsed-width - var(--#{$prefix}scrollbar-width));
  653. }
  654. .layout-wrapper:not(.layout-without-menu) .content-footer:has(.container-fluid) {
  655. inline-size: calc(100% - $menu-collapsed-width - var(--#{$prefix}scrollbar-width));
  656. inset-inline-start: $menu-collapsed-width;
  657. }
  658. }
  659. &:dir(rtl).swal2-shown,
  660. &:dir(rtl) .modal-open {
  661. .layout-wrapper:not(.layout-without-menu) .content-footer {
  662. inset-inline-start: calc($menu-collapsed-width + var(--#{$prefix}scrollbar-width));
  663. }
  664. }
  665. }
  666. }
  667. /* Small screens layout
  668. ******************************************************************************* */
  669. @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
  670. .layout-menu {
  671. position: fixed !important;
  672. block-size: 100% !important;
  673. inset-block-start: 0 !important;
  674. inset-inline-start: 0 !important;
  675. margin-inline: 0 !important;
  676. transform: translate3d(-100%, 0, 0);
  677. will-change:
  678. transform,
  679. -webkit-transform;
  680. :dir(rtl) &{
  681. transform: translate3d(100%, 0, 0);
  682. }
  683. .layout-menu-expanded & {
  684. transform: translate3d(0, 0, 0) !important;
  685. }
  686. }
  687. .layout-menu-expanded body {
  688. overflow: hidden;
  689. }
  690. .layout-overlay {
  691. position: fixed;
  692. display: none;
  693. background: $modal-backdrop-bg;
  694. block-size: 100% !important;
  695. cursor: pointer;
  696. inset-block-start: 0;
  697. inset-inline: 0;
  698. opacity: $modal-backdrop-opacity;
  699. .layout-menu-expanded & {
  700. display: block;
  701. }
  702. }
  703. .layout-menu-100vh .layout-menu,
  704. .layout-menu-100vh .layout-overlay {
  705. block-size: 100dvh !important;
  706. }
  707. .drag-target {
  708. position: fixed;
  709. z-index: 1036;
  710. block-size: 100%;
  711. inline-size: 40px;
  712. inset-block-start: 0;
  713. inset-inline-start: 0;
  714. }
  715. }
  716. /* Z-Indexes
  717. ******************************************************************************* */
  718. /* Navbar (fixed) */
  719. body:not(.modal-open) {
  720. .layout-navbar-full .layout-navbar {
  721. z-index: $zindex-menu-fixed;
  722. }
  723. .layout-content-navbar .layout-navbar {
  724. z-index: $zindex-menu-fixed - 5;
  725. }
  726. }
  727. // Footer (fixed)
  728. /* Menu horizontal */
  729. .layout-menu-horizontal {
  730. z-index: 9;
  731. }
  732. @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
  733. .layout-menu {
  734. z-index: $zindex-layout-mobile;
  735. }
  736. .layout-overlay {
  737. z-index: $zindex-layout-mobile - 1;
  738. }
  739. }
  740. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  741. // Default expanded
  742. /* Navbar full layout */
  743. .layout-navbar-full {
  744. .layout-navbar {
  745. z-index: 10;
  746. }
  747. .layout-menu {
  748. z-index: 9;
  749. }
  750. }
  751. /* Content Navbar layout */
  752. .layout-content-navbar {
  753. .layout-navbar {
  754. z-index: 9;
  755. }
  756. .layout-menu {
  757. z-index: 11;
  758. }
  759. }
  760. /* Collapsed */
  761. .layout-menu-collapsed:not(.layout-menu-offcanvas, .layout-menu-fixed-offcanvas) {
  762. // Navbar full layout
  763. &.layout-menu-hover .layout-navbar-full .layout-menu {
  764. z-index: $zindex-menu-fixed - 5 !important;
  765. }
  766. // Content Navbar layout
  767. .layout-content-navbar .layout-menu {
  768. z-index: $zindex-menu-fixed + 5 !important;
  769. }
  770. }
  771. // Fixed
  772. /* Navbar full layout */
  773. .layout-menu-fixed body:not(.modal-open) .layout-navbar-full .layout-menu,
  774. .layout-menu-fixed-offcanvas body:not(.modal-open) .layout-navbar-full .layout-menu {
  775. z-index: $zindex-menu-fixed - 5;
  776. }
  777. /* Content Navbar layout */
  778. .layout-navbar-fixed body:not(.modal-open) .layout-content-navbar .layout-menu,
  779. .layout-menu-fixed body:not(.modal-open) .layout-content-navbar .layout-menu,
  780. .layout-menu-fixed-offcanvas body:not(.modal-open) .layout-content-navbar .layout-menu {
  781. z-index: $zindex-menu-fixed;
  782. }
  783. }
  784. /* Transitions and animations
  785. ******************************************************************************* */
  786. /* Disable navbar link hover transition */
  787. .layout-menu-link-no-transition {
  788. .layout-menu .menu-link,
  789. .layout-menu-horizontal .menu-link {
  790. animation: none !important;
  791. transition: none !important;
  792. }
  793. }
  794. /* Disable navbar link hover transition */
  795. .layout-no-transition .layout-menu,
  796. .layout-no-transition .layout-menu-horizontal {
  797. &,
  798. & .menu,
  799. & .menu-item {
  800. animation: none !important;
  801. transition: none !important;
  802. }
  803. }
  804. @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
  805. .layout-transitioning {
  806. .layout-overlay {
  807. animation: menuAnimation $menu-animation-duration;
  808. }
  809. .layout-menu {
  810. transition-duration: $menu-animation-duration;
  811. transition-property:
  812. transform,
  813. -webkit-transform;
  814. }
  815. }
  816. }
  817. @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
  818. .layout-menu-collapsed:not(.layout-transitioning, .layout-menu-offcanvas, .layout-menu-fixed, .layout-menu-fixed-offcanvas) .layout-menu {
  819. transition-duration: $menu-animation-duration;
  820. transition-property: margin-inline-start, margin-inline-end, inline-size;
  821. }
  822. .layout-transitioning {
  823. &.layout-menu-offcanvas .layout-menu {
  824. transition-duration: $menu-animation-duration;
  825. transition-property:
  826. margin-inline-start,
  827. margin-inline-end,
  828. transform,
  829. -webkit-transform;
  830. }
  831. &.layout-menu-fixed,
  832. &.layout-menu-fixed-offcanvas {
  833. .layout-page {
  834. transition-duration: $menu-animation-duration;
  835. transition-property: padding-inline-start, padding-inline-end;
  836. }
  837. }
  838. &.layout-menu-fixed {
  839. .layout-menu {
  840. transition: inline-size $menu-animation-duration;
  841. }
  842. }
  843. &.layout-menu-fixed-offcanvas {
  844. .layout-menu {
  845. transition-duration: $menu-animation-duration;
  846. transition-property:
  847. transform,
  848. -webkit-transform;
  849. }
  850. }
  851. &.layout-navbar-fixed .layout-content-navbar .layout-navbar,
  852. &.layout-footer-fixed .content-footer {
  853. transition-duration: $menu-animation-duration;
  854. transition-property: inset-inline-start, inset-inline-end;
  855. }
  856. &:not(.layout-menu-offcanvas, .layout-menu-fixed, .layout-menu-fixed-offcanvas) .layout-menu {
  857. transition-duration: $menu-animation-duration;
  858. transition-property: margin-inline-start, margin-inline-end, inline-size;
  859. }
  860. }
  861. }
  862. /* Disable transitions/animations in IE 10-11 */
  863. @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  864. .menu,
  865. .layout-menu,
  866. .layout-page,
  867. .layout-navbar,
  868. .content-footer {
  869. transition: none !important;
  870. transition-duration: 0s !important;
  871. }
  872. .layout-overlay {
  873. animation: none !important;
  874. }
  875. }
  876. @include keyframes(menuAnimation) {
  877. 0% {
  878. opacity: 0;
  879. }
  880. 100% {
  881. opacity: $modal-backdrop-opacity;
  882. }
  883. }