diff --git a/webclient/dist/css/main.css b/webclient/dist/css/main.css index 295d439..8a5d484 100644 --- a/webclient/dist/css/main.css +++ b/webclient/dist/css/main.css @@ -1,2 +1,2 @@ -@charset "UTF-8";@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}.container{padding:34px}.section{margin-bottom:48px}.section-title{margin-bottom:34px}.block{margin-bottom:34px}.block-title{margin-bottom:22px}.text,p{margin-bottom:15px}.hint{margin-top:8px}.list{padding-left:22px;margin-bottom:15px}.list-item{margin-bottom:8px}.list-nested{margin-top:8px}.table{margin-bottom:22px}.table-caption{margin-bottom:8px}.form-group{margin-bottom:15px}.label{margin-bottom:5px;display:block}.input,.select,.textarea{margin-top:5px}.toast{padding:15px}.toast-stack{gap:8px}html{font-size:100%}body{font-family:"IBM Plex Mono",monospace;font-size:16px;font-weight:400;line-height:1.6;letter-spacing:0}h1,h2,h3,h4,h5,h6{font-family:"IBM Plex Mono",monospace;font-weight:600;line-height:1.25;margin:0}h1.contrast,h2.contrast,h3.contrast,h4.contrast,h5.contrast,h6.contrast{background:#f8f8f8;color:#0a0a0d}h1{font-size:36px;letter-spacing:-.01em}h2{font-size:28px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px;font-weight:500}.text,p{font-size:16px;line-height:1.6}.text-sm{font-size:13px;line-height:1.4}.text-lg{font-size:17px;line-height:1.6}.text-muted{font-size:13px;color:#aaaeb2}.text-strong,strong{font-weight:600}.text-bold{font-weight:700}.text-italic,em{font-style:italic}.code,code,pre{font-family:"IBM Plex Mono",monospace;font-size:16px;line-height:1.4;background-color:#1a1a23}pre{font-size:16px;line-height:1.6;white-space:pre-wrap}a{font-weight:500;text-decoration:none}.link{font-size:inherit;font-weight:500}.label{font-size:13px;font-weight:500;line-height:1.4}.hint,.meta{font-size:12px;line-height:1.4}.table{font-size:13px;line-height:1.4}.table th{font-weight:600}.table td{font-weight:400}.list{font-size:16px;line-height:1.6}.list-item{font-size:inherit}.modal-title{font-size:20px;font-weight:600}.modal-body{font-size:16px}.toast-title{font-size:14px;font-weight:600}.toast-text{font-size:13px;line-height:1.4}.palette{display:flex;flex-direction:row;gap:8px}.palette .color .color-box{width:100px;height:80px}.bg-primary{background:#f8f8f8}.bg-secondary{background:#00b3ff}.bg-success{background:#0fa}.bg-accent{background:#f0c}.bg-info{background:#8a2ce2}.bg-warning{background:#ffd900}.bg-error{background:#ff3c00}.text-color-primary{color:#f8f8f8}.text-color-secondary{color:#00b3ff}.text-color-success{color:#0fa}.text-color-accent{color:#f0c}.text-color-info{color:#8a2ce2}.text-color-warning{color:#ffd900}.text-color-error{color:#ff3c00}.btn{font-family:"IBM Plex Mono",monospace;font-size:17px;font-weight:600;line-height:1;letter-spacing:.04em;padding:12px 22px;border-radius:0;border-width:2px;border-left-width:6px;border-style:solid;border-color:#f8f8f8;text-transform:uppercase;background-color:transparent;transition-duration:.2s;transition-property:background-color,border-color,color}.btn.with-icon{border-left-width:48px;position:relative}.btn.with-icon .ph,.btn.with-icon .ph-bold{position:absolute;color:#0a0a0d;left:-48px;top:0;font-size:28px;height:100%;display:inline-flex;align-items:center;width:48px;justify-content:center;transition-duration:.2s;transition-property:color,left}.btn:hover.with-icon .ph,.btn:hover.with-icon .ph-bold{left:-28px}.btn.btn-primary{color:#f8f8f8;border-color:#f8f8f8}.btn.btn-primary:hover{background-color:#f8f8f8;color:#0a0a0d}.btn.btn-secondary{color:#00b3ff;border-color:#00b3ff}.btn.btn-secondary:hover{background-color:#00b3ff;color:#f8f8f8}.btn.btn-secondary:hover.with-icon .ph,.btn.btn-secondary:hover.with-icon .ph-bold{color:#f8f8f8}.btn.btn-accent{color:#f0c;border-color:#f0c}.btn.btn-accent:hover{background-color:#f0c;color:#f8f8f8}.btn.btn-accent:hover.with-icon .ph,.btn.btn-accent:hover.with-icon .ph-bold{color:#f8f8f8}.btn.btn-danger{color:#ff3c00;border-color:#ff3c00}.btn.btn-danger:hover{background-color:#ff3c00;color:#0a0a0d}.btn.btn-warning{color:#ffd900;border-color:#ffd900}.btn.btn-warning:hover{background-color:#ffd900;color:#0a0a0d}.btn.btn-success{color:#0fa;border-color:#0fa}.btn.btn-success:hover{background-color:#0fa;color:#0a0a0d}.btn.btn-info{color:#8a2ce2;border-color:#8a2ce2}.btn.btn-info:hover{background-color:#8a2ce2;color:#f8f8f8}.btn.btn-info:hover.with-icon .ph,.btn.btn-info:hover.with-icon .ph-bold{color:#f8f8f8}.btn[disabled]{color:#aaaeb2;border-color:#1a1a23;background-color:#1a1a23}.btn[disabled].with-icon .ph,.btn[disabled].with-icon .ph-bold{color:#aaaeb2}.btn[disabled]:hover{background-color:#1a1a23;color:#aaaeb2}.btn[disabled]:hover.with-icon .ph,.btn[disabled]:hover.with-icon .ph-bold{color:#aaaeb2}.btn[disabled].with-icon .ph,.btn[disabled].with-icon .ph-bold{left:-28px}.btn.btn-small{font-size:14px;font-weight:500;padding:8px 8px}.btn.btn-small.with-icon{border-left-width:32px}.btn.btn-small.with-icon .ph,.btn.btn-small.with-icon .ph-bold{left:-40px;font-size:22px}.btn.btn-large{font-size:20px;font-weight:700;padding:15px 48px}.btn-icon{display:flex;justify-content:center;align-items:center;width:30px;height:30px;background:0 0;color:#f8f8f8;font-size:20px;border:0;transition-duration:.2s;transition-property:color}.btn-icon .ph{transform:rotate(0);transition-duration:.2s;transition-property:transform}.btn-icon:hover{color:#aaaeb2}.btn-icon:hover .ph{transform:rotate(90deg)}.form-group .label{display:flex;flex-direction:column;font-size:17px;max-width:420px;position:relative}.form-group .label .ph{position:absolute;color:#f8f8f8;left:0;bottom:2px;font-size:28px;height:56px;display:inline-flex;align-items:center;width:48px;justify-content:center;transition-duration:.2s;transition-property:color,left}.form-group .label .input{font-family:"IBM Plex Mono",monospace;font-size:16px;font-weight:500;line-height:1;letter-spacing:.04em;padding:12px 22px;margin-top:8px;border-radius:0;border-width:2px;border-bottom-width:6px;border-style:solid;border-color:#f8f8f8;color:#f8f8f8;background-color:transparent;transition-duration:.2s;transition-property:background-color,border-color,color}.form-group .label .input:hover{border-bottom-color:#aaaeb2}.form-group .label .input:focus{outline:0;border-color:#00b3ff}.form-group .label .input::-moz-placeholder{color:#aaaeb2}.form-group .label .input::placeholder{color:#aaaeb2}.form-group .label textarea.input{height:120px;line-height:1.25;resize:none}.form-group .label .ph+.input,.form-group .label .ph+.select-wrap .select{padding-left:42px}.form-group .label .select-wrap{margin-top:8px}.form-group .label .select{width:100%;height:56px;margin-top:0;appearance:none;-webkit-appearance:none;-moz-appearance:none}.form-group .label .select:focus{outline:0}.form-group .label .select option{color:#f8f8f8;background:#1a1a23}.form-group .label .select-wrap::after{content:"";position:absolute;right:22px;bottom:18px;transform:translateY(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:10px solid #f8f8f8;pointer-events:none}.radio{display:inline-flex;flex-direction:row;gap:8px;align-items:center}.radio input[type=radio]{display:none}.radio .radio-control{display:inline-block;border-radius:100%;border:2px solid #f8f8f8;width:20px;height:20px;background:0 0;transition-duration:.2s;transition-property:background,border-color}.radio:hover .radio-control{background:#4a4a57}.radio input[type=radio]:checked+.radio-control{background:#f8f8f8}.radio input[type=radio]:disabled+.radio-control{background:#4a4a57;border-color:#4a4a57}.radio .radio-label{font-size:17px}.checkbox{display:inline-flex;flex-direction:row;gap:8px;align-items:center}.checkbox input[type=checkbox]{display:none}.checkbox .checkbox-control{height:16px;width:30px;border:2px solid #f8f8f8;position:relative;background:0 0;transition-duration:.2s;transition-property:border-color,background;display:block}.checkbox .checkbox-control:before{content:"";display:block;height:20px;width:20px;background:#f8f8f8;position:absolute;left:-6px;top:-4px;transition-duration:.2s;transition-property:left,background}.checkbox:hover .checkbox-control{background:#4a4a57}.checkbox input[type=checkbox]:checked:not(:disabled)+.checkbox-control{background:#00b3ff;border-color:#00b3ff}.checkbox input[type=checkbox]:checked+.checkbox-control:before{left:12px}.checkbox input[type=checkbox]:disabled+.checkbox-control{border-color:#4a4a57}.checkbox input[type=checkbox]:disabled+.checkbox-control:before{background:#4a4a57}.list{display:flex;flex-direction:column;gap:5px;list-style-type:none;padding-left:0}.list .list-item{display:flex;flex-direction:row;align-items:center;gap:8px;margin-left:0}.list.list-ordered{list-style-type:decimal;display:list-item;margin-left:30px}.list.list-ordered .list-item{display:list-item}.list.list-definition{gap:15px}.list.list-definition .list-row{border-left:2px solid #f8f8f8}.list.list-definition .list-row .list-desc::before,.list.list-definition .list-row .list-term::before{content:"";height:2px;width:12px;position:absolute;top:50%;left:0;margin-top:-1px;display:block;background:#f8f8f8}.list.list-definition .list-row .list-desc,.list.list-definition .list-row .list-term{position:relative}.list.list-definition .list-row .list-term{padding-left:18px;font-size:20px}.list.list-definition .list-row .list-desc{padding-left:18px}.list.list-nav{max-width:420px;width:100%;gap:0}.list.list-nav .list-item{display:flex;flex-direction:column;align-items:flex-start;height:50px;margin:0}.list.list-nav .list-item .list-action{display:flex;justify-content:space-between;align-items:center;width:100%;height:100%;padding:8px 12px;border:0;font-size:20px;background:#1a1a23;color:inherit;transition-duration:.2s;transition-property:background}.list.list-nav .list-item .list-action:hover{background:#00b3ff}.list.list-nav .list-item .list-action .list-label{display:flex;flex-direction:row;gap:8px;align-items:center}.list.list-nav .list-item .list-action .list-meta{padding:8px;background:#0fa;color:#0a0a0d;display:flex}.list.list-nav .list-item.list-item-active .list-action{background:#00b3ff}.list.list-actions{width:100%;max-width:420px;gap:22px}.list.list-actions .list-item{justify-content:space-between;align-items:flex-start}.list.list-actions .list-item .list-content{display:flex;flex-direction:column;gap:8px}.list.list-actions .list-item .list-content .list-title{font-size:20px;line-height:1}.badge{background:#f8f8f8;color:#1a1a23;padding:5px 8px;font-size:16px}.badge.badge-success{background:#0fa}.badge.badge-warning{background:#ffd900}.badge.badge-danger,.badge.badge-error{background:#ff3c00}.badge.badge-info{background:#8a2ce2;color:#f8f8f8}.badge.badge-secondary{background:#00b3ff;color:#f8f8f8}.table{text-align:left;border:2px solid #f8f8f8;padding:15px}.table .table-caption{text-align:left;font-size:20px;background:#f8f8f8;width:-moz-max-content;width:max-content;color:#1a1a23;padding:5px 12px;margin-bottom:0}.table .table-row td,.table .table-row th{padding:12px 18px;font-size:16px}.table .table-foot td,.table .table-foot th{padding-top:15px}.toast{position:fixed;bottom:-100px;right:15px;max-width:420px;background:#1a1a23;border:2px solid #f8f8f8;padding:0;opacity:0;transition-duration:.25s;transition-property:opacity,top,bottom}.toast.a-show{bottom:15px;opacity:1}.toast.a-hide{bottom:115px;opacity:0}.toast .toast-content{display:flex;flex-direction:column;gap:0}.toast .toast-content .toast-title{font-size:24px;display:flex;flex-direction:row;gap:8px;align-items:center;color:#0a0a0d;background:#f8f8f8;padding:5px 8px}.toast .toast-content .toast-text{font-size:16px;padding:22px 15px;margin:0}.toast .toast-close{position:absolute;top:0;right:0;color:#0a0a0d;height:40px;width:40px}.toast .toast-close:hover{color:#1a1a23}.toast.toast-success{border-color:#0fa}.toast.toast-success .toast-title{background:#0fa}.toast.toast-warning{border-color:#ffd900}.toast.toast-warning .toast-title{background:#ffd900}.toast.toast-danger{border-color:#ff3c00}.toast.toast-danger .toast-title{background:#ff3c00}.card{max-width:420px;width:100%;border:2px solid #f8f8f8}.card .card-title{color:#0a0a0d;background:#f8f8f8;padding:8px 12px}.card .card-content{padding:15px}.card .card-content .card-thumb{width:100%}.card .card-content p{margin-top:8px;margin-bottom:0}.card .card-footer{padding:8px 15px;padding-bottom:15px}.modal{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center}.modal .modal-backdrop{position:fixed;z-index:1010;top:0;bottom:0;left:0;right:0;background:#0a0a0d;opacity:0;transition-duration:.25s;transition-property:opacity}.modal .modal-panel{position:relative;z-index:1020;width:100%;max-width:800px;height:auto;min-height:400px;max-height:800px;padding:0;display:flex;flex-direction:column;gap:15px;margin-top:200px;background:#0a0a0d;border:2px solid #f8f8f8;opacity:0;transition-duration:.25s;transition-property:opacity,margin-top}.modal .modal-panel .modal-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-right:15px}.modal .modal-panel .modal-header .modal-title{padding:12px 15px;background:#f8f8f8;color:#0a0a0d;text-transform:uppercase}.modal .modal-panel .modal-body{max-height:700px;overflow-y:auto;padding:18px}.modal .modal-panel .modal-footer{padding:18px}.modal .modal-panel .modal-footer .actions{display:flex;flex-direction:row;justify-content:flex-end;gap:15px;width:100%}.modal.a-show .modal-backdrop{opacity:1}.modal.a-show .modal-panel{opacity:1;margin-top:0}.modal.a-hide .modal-backdrop{opacity:0}.modal.a-hide .modal-panel{opacity:0;margin-top:-200px}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.m-1{margin:5px!important}.mt-1{margin-top:5px!important}.mr-1{margin-right:5px!important}.mb-1{margin-bottom:5px!important}.ml-1{margin-left:5px!important}.mx-1{margin-left:5px!important;margin-right:5px!important}.my-1{margin-top:5px!important;margin-bottom:5px!important}.p-1{padding:5px!important}.pt-1{padding-top:5px!important}.pr-1{padding-right:5px!important}.pb-1{padding-bottom:5px!important}.pl-1{padding-left:5px!important}.px-1{padding-left:5px!important;padding-right:5px!important}.py-1{padding-top:5px!important;padding-bottom:5px!important}.m-2{margin:8px!important}.mt-2{margin-top:8px!important}.mr-2{margin-right:8px!important}.mb-2{margin-bottom:8px!important}.ml-2{margin-left:8px!important}.mx-2{margin-left:8px!important;margin-right:8px!important}.my-2{margin-top:8px!important;margin-bottom:8px!important}.p-2{padding:8px!important}.pt-2{padding-top:8px!important}.pr-2{padding-right:8px!important}.pb-2{padding-bottom:8px!important}.pl-2{padding-left:8px!important}.px-2{padding-left:8px!important;padding-right:8px!important}.py-2{padding-top:8px!important;padding-bottom:8px!important}.m-3{margin:12px!important}.mt-3{margin-top:12px!important}.mr-3{margin-right:12px!important}.mb-3{margin-bottom:12px!important}.ml-3{margin-left:12px!important}.mx-3{margin-left:12px!important;margin-right:12px!important}.my-3{margin-top:12px!important;margin-bottom:12px!important}.p-3{padding:12px!important}.pt-3{padding-top:12px!important}.pr-3{padding-right:12px!important}.pb-3{padding-bottom:12px!important}.pl-3{padding-left:12px!important}.px-3{padding-left:12px!important;padding-right:12px!important}.py-3{padding-top:12px!important;padding-bottom:12px!important}.m-4{margin:15px!important}.mt-4{margin-top:15px!important}.mr-4{margin-right:15px!important}.mb-4{margin-bottom:15px!important}.ml-4{margin-left:15px!important}.mx-4{margin-left:15px!important;margin-right:15px!important}.my-4{margin-top:15px!important;margin-bottom:15px!important}.p-4{padding:15px!important}.pt-4{padding-top:15px!important}.pr-4{padding-right:15px!important}.pb-4{padding-bottom:15px!important}.pl-4{padding-left:15px!important}.px-4{padding-left:15px!important;padding-right:15px!important}.py-4{padding-top:15px!important;padding-bottom:15px!important}.m-5{margin:18px!important}.mt-5{margin-top:18px!important}.mr-5{margin-right:18px!important}.mb-5{margin-bottom:18px!important}.ml-5{margin-left:18px!important}.mx-5{margin-left:18px!important;margin-right:18px!important}.my-5{margin-top:18px!important;margin-bottom:18px!important}.p-5{padding:18px!important}.pt-5{padding-top:18px!important}.pr-5{padding-right:18px!important}.pb-5{padding-bottom:18px!important}.pl-5{padding-left:18px!important}.px-5{padding-left:18px!important;padding-right:18px!important}.py-5{padding-top:18px!important;padding-bottom:18px!important}.m-6{margin:22px!important}.mt-6{margin-top:22px!important}.mr-6{margin-right:22px!important}.mb-6{margin-bottom:22px!important}.ml-6{margin-left:22px!important}.mx-6{margin-left:22px!important;margin-right:22px!important}.my-6{margin-top:22px!important;margin-bottom:22px!important}.p-6{padding:22px!important}.pt-6{padding-top:22px!important}.pr-6{padding-right:22px!important}.pb-6{padding-bottom:22px!important}.pl-6{padding-left:22px!important}.px-6{padding-left:22px!important;padding-right:22px!important}.py-6{padding-top:22px!important;padding-bottom:22px!important}.m-7{margin:26px!important}.mt-7{margin-top:26px!important}.mr-7{margin-right:26px!important}.mb-7{margin-bottom:26px!important}.ml-7{margin-left:26px!important}.mx-7{margin-left:26px!important;margin-right:26px!important}.my-7{margin-top:26px!important;margin-bottom:26px!important}.p-7{padding:26px!important}.pt-7{padding-top:26px!important}.pr-7{padding-right:26px!important}.pb-7{padding-bottom:26px!important}.pl-7{padding-left:26px!important}.px-7{padding-left:26px!important;padding-right:26px!important}.py-7{padding-top:26px!important;padding-bottom:26px!important}.m-8{margin:34px!important}.mt-8{margin-top:34px!important}.mr-8{margin-right:34px!important}.mb-8{margin-bottom:34px!important}.ml-8{margin-left:34px!important}.mx-8{margin-left:34px!important;margin-right:34px!important}.my-8{margin-top:34px!important;margin-bottom:34px!important}.p-8{padding:34px!important}.pt-8{padding-top:34px!important}.pr-8{padding-right:34px!important}.pb-8{padding-bottom:34px!important}.pl-8{padding-left:34px!important}.px-8{padding-left:34px!important;padding-right:34px!important}.py-8{padding-top:34px!important;padding-bottom:34px!important}.m-9{margin:42px!important}.mt-9{margin-top:42px!important}.mr-9{margin-right:42px!important}.mb-9{margin-bottom:42px!important}.ml-9{margin-left:42px!important}.mx-9{margin-left:42px!important;margin-right:42px!important}.my-9{margin-top:42px!important;margin-bottom:42px!important}.p-9{padding:42px!important}.pt-9{padding-top:42px!important}.pr-9{padding-right:42px!important}.pb-9{padding-bottom:42px!important}.pl-9{padding-left:42px!important}.px-9{padding-left:42px!important;padding-right:42px!important}.py-9{padding-top:42px!important;padding-bottom:42px!important}.m-10{margin:48px!important}.mt-10{margin-top:48px!important}.mr-10{margin-right:48px!important}.mb-10{margin-bottom:48px!important}.ml-10{margin-left:48px!important}.mx-10{margin-left:48px!important;margin-right:48px!important}.my-10{margin-top:48px!important;margin-bottom:48px!important}.p-10{padding:48px!important}.pt-10{padding-top:48px!important}.pr-10{padding-right:48px!important}.pb-10{padding-bottom:48px!important}.pl-10{padding-left:48px!important}.px-10{padding-left:48px!important;padding-right:48px!important}.py-10{padding-top:48px!important;padding-bottom:48px!important}.row{display:flex;flex-direction:row}*{box-sizing:border-box}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{width:10px;background:#0a0a0d;cursor:pointer}::-webkit-scrollbar-thumb{width:10px;background:#4a4a57;cursor:default}::-webkit-scrollbar-corner{background:0 0;height:1px}::-webkit-scrollbar-button{display:none}*{padding:0;margin:0}body,html{font-family:"IBM Plex Mono",monospace;font-weight:400}body{background-color:#0a0a0d;color:#f8f8f8;font-size:15px;line-height:1.45;letter-spacing:.01em}.load-screen{display:none}.load-screen.a-show{display:block}.error-screen{display:none}.error-screen.a-show{display:block}.screen{display:none}.screen.a-show{display:block}.hud{width:100%;padding:18px}.hud>.row{justify-content:space-between;align-items:center;gap:15px;flex-wrap:wrap}.hud .nav-toggle{font-size:42px;width:50px;height:50px;background:#f8f8f8;color:#0a0a0d}.hud .nav-toggle:hover{color:#f0c}.hud .app-title{padding:8px 15px;text-transform:uppercase} +@charset "UTF-8";@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}.container{padding:34px}.section{margin-bottom:48px}.section-title{margin-bottom:34px}.block{margin-bottom:34px}.block-title{margin-bottom:22px}.text,p{margin-bottom:15px}.hint{margin-top:8px}.list{padding-left:22px;margin-bottom:15px}.list-item{margin-bottom:8px}.list-nested{margin-top:8px}.table{margin-bottom:22px}.table-caption{margin-bottom:8px}.form-group{margin-bottom:15px}.label{margin-bottom:5px;display:block}.input,.select,.textarea{margin-top:5px}.toast{padding:15px}.toast-stack{gap:8px}html{font-size:100%}body{font-family:"IBM Plex Mono",monospace;font-size:16px;font-weight:400;line-height:1.6;letter-spacing:0}h1,h2,h3,h4,h5,h6{font-family:"IBM Plex Mono",monospace;font-weight:600;line-height:1.25;margin:0}h1.contrast,h2.contrast,h3.contrast,h4.contrast,h5.contrast,h6.contrast{background:#f8f8f8;color:#0a0a0d}h1{font-size:36px;letter-spacing:-.01em}h2{font-size:28px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px;font-weight:500}.text,p{font-size:16px;line-height:1.6}.text-sm{font-size:13px;line-height:1.4}.text-lg{font-size:17px;line-height:1.6}.text-muted{font-size:13px;color:#aaaeb2}.text-strong,strong{font-weight:600}.text-bold{font-weight:700}.text-italic,em{font-style:italic}.code,code,pre{font-family:"IBM Plex Mono",monospace;font-size:16px;line-height:1.4;background-color:#1a1a23}pre{font-size:16px;line-height:1.6;white-space:pre-wrap}a{font-weight:500;text-decoration:none}.link{font-size:inherit;font-weight:500}.label{font-size:13px;font-weight:500;line-height:1.4}.hint,.meta{font-size:12px;line-height:1.4}.table{font-size:13px;line-height:1.4}.table th{font-weight:600}.table td{font-weight:400}.list{font-size:16px;line-height:1.6}.list-item{font-size:inherit}.modal-title{font-size:20px;font-weight:600}.modal-body{font-size:16px}.toast-title{font-size:14px;font-weight:600}.toast-text{font-size:13px;line-height:1.4}.palette{display:flex;flex-direction:row;gap:8px}.palette .color .color-box{width:100px;height:80px}body .bg-primary{background:#f8f8f8}body .bg-secondary{background:#00b3ff}body .bg-success{background:#0fa}body .bg-accent{background:#ff6f30}body .bg-info{background:#8a2ce2}body .bg-warning{background:#ffd900}body .bg-error{background:#ff3c00}body .text-color-primary{color:#f8f8f8}body .text-color-secondary{color:#00b3ff}body .text-color-success{color:#0fa}body .text-color-accent{color:#ff6f30}body .text-color-info{color:#8a2ce2}body .text-color-warning{color:#ffd900}body .text-color-error{color:#ff3c00}.loader{width:45px;aspect-ratio:1;--c:no-repeat linear-gradient(#FF3C00 0 0);background:var(--c) 0 0,var(--c) 0 100%,var(--c) 50% 0,var(--c) 50% 100%,var(--c) 100% 0,var(--c) 100% 100%;animation:l12 1s infinite}@keyframes l12{0%,100%{background-size:20% 50%}16.67%{background-size:20% 30%,20% 30%,20% 50%,20% 50%,20% 50%,20% 50%}33.33%{background-size:20% 30%,20% 30%,20% 30%,20% 30%,20% 50%,20% 50%}50%{background-size:20% 30%,20% 30%,20% 30%,20% 30%,20% 30%,20% 30%}66.67%{background-size:20% 50%,20% 50%,20% 30%,20% 30%,20% 30%,20% 30%}83.33%{background-size:20% 50%,20% 50%,20% 50%,20% 50%,20% 30%,20% 30%}}.btn{font-family:"IBM Plex Mono",monospace;font-size:17px;font-weight:600;line-height:1;letter-spacing:.04em;padding:12px 22px;border-radius:0;border-width:2px;border-left-width:6px;border-style:solid;border-color:#f8f8f8;text-transform:uppercase;background-color:transparent;transition-duration:.2s;transition-property:background-color,border-color,color}.btn.with-icon{border-left-width:48px;position:relative}.btn.with-icon .ph,.btn.with-icon .ph-bold{position:absolute;color:#0a0a0d;left:-48px;top:0;font-size:28px;height:100%;display:inline-flex;align-items:center;width:48px;justify-content:center;transition-duration:.2s;transition-property:color,left}.btn:hover.with-icon .ph,.btn:hover.with-icon .ph-bold{left:-28px}.btn.btn-primary{color:#f8f8f8;border-color:#f8f8f8}.btn.btn-primary:hover{background-color:#f8f8f8;color:#0a0a0d}.btn.btn-secondary{color:#00b3ff;border-color:#00b3ff}.btn.btn-secondary:hover{background-color:#00b3ff;color:#f8f8f8}.btn.btn-secondary:hover.with-icon .ph,.btn.btn-secondary:hover.with-icon .ph-bold{color:#f8f8f8}.btn.btn-accent{color:#ff6f30;border-color:#ff6f30}.btn.btn-accent:hover{background-color:#ff6f30;color:#f8f8f8}.btn.btn-accent:hover.with-icon .ph,.btn.btn-accent:hover.with-icon .ph-bold{color:#f8f8f8}.btn.btn-danger{color:#ff3c00;border-color:#ff3c00}.btn.btn-danger:hover{background-color:#ff3c00;color:#0a0a0d}.btn.btn-warning{color:#ffd900;border-color:#ffd900}.btn.btn-warning:hover{background-color:#ffd900;color:#0a0a0d}.btn.btn-success{color:#0fa;border-color:#0fa}.btn.btn-success:hover{background-color:#0fa;color:#0a0a0d}.btn.btn-info{color:#8a2ce2;border-color:#8a2ce2}.btn.btn-info:hover{background-color:#8a2ce2;color:#f8f8f8}.btn.btn-info:hover.with-icon .ph,.btn.btn-info:hover.with-icon .ph-bold{color:#f8f8f8}.btn[disabled]{color:#aaaeb2;border-color:#1a1a23;background-color:#1a1a23}.btn[disabled].with-icon .ph,.btn[disabled].with-icon .ph-bold{color:#aaaeb2}.btn[disabled]:hover{background-color:#1a1a23;color:#aaaeb2}.btn[disabled]:hover.with-icon .ph,.btn[disabled]:hover.with-icon .ph-bold{color:#aaaeb2}.btn[disabled].with-icon .ph,.btn[disabled].with-icon .ph-bold{left:-28px}.btn.btn-small{font-size:14px;font-weight:500;padding:8px 8px}.btn.btn-small.with-icon{border-left-width:32px}.btn.btn-small.with-icon .ph,.btn.btn-small.with-icon .ph-bold{left:-40px;font-size:22px}.btn.btn-large{font-size:20px;font-weight:700;padding:15px 48px}.btn-icon{display:flex;justify-content:center;align-items:center;width:30px;height:30px;background:0 0;color:#f8f8f8;font-size:20px;border:0;transition-duration:.2s;transition-property:color}.btn-icon .ph{transform:rotate(0);transition-duration:.2s;transition-property:transform}.btn-icon:hover{color:#aaaeb2}.btn-icon:hover .ph{transform:rotate(90deg)}.form-group .label{display:flex;flex-direction:column;font-size:17px;max-width:420px;position:relative}.form-group .label .ph{position:absolute;color:#f8f8f8;left:0;bottom:2px;font-size:28px;height:56px;display:inline-flex;align-items:center;width:48px;justify-content:center;transition-duration:.2s;transition-property:color,left}.form-group .label .input{font-family:"IBM Plex Mono",monospace;font-size:16px;font-weight:500;line-height:1;letter-spacing:.04em;padding:12px 22px;margin-top:8px;border-radius:0;border-width:2px;border-bottom-width:6px;border-style:solid;border-color:#f8f8f8;color:#f8f8f8;background-color:transparent;transition-duration:.2s;transition-property:background-color,border-color,color}.form-group .label .input:hover{border-bottom-color:#aaaeb2}.form-group .label .input:focus{outline:0;border-color:#00b3ff}.form-group .label .input::-moz-placeholder{color:#aaaeb2}.form-group .label .input::placeholder{color:#aaaeb2}.form-group .label textarea.input{height:120px;line-height:1.25;resize:none}.form-group .label .ph+.input,.form-group .label .ph+.select-wrap .select{padding-left:42px}.form-group .label .select-wrap{margin-top:8px}.form-group .label .select{width:100%;height:56px;margin-top:0;appearance:none;-webkit-appearance:none;-moz-appearance:none}.form-group .label .select:focus{outline:0}.form-group .label .select option{color:#f8f8f8;background:#1a1a23}.form-group .label .select-wrap::after{content:"";position:absolute;right:22px;bottom:18px;transform:translateY(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:10px solid #f8f8f8;pointer-events:none}.radio{display:inline-flex;flex-direction:row;gap:8px;align-items:center}.radio input[type=radio]{display:none}.radio .radio-control{display:inline-block;border-radius:100%;border:2px solid #f8f8f8;width:20px;height:20px;background:0 0;transition-duration:.2s;transition-property:background,border-color}.radio:hover .radio-control{background:#4a4a57}.radio input[type=radio]:checked+.radio-control{background:#f8f8f8}.radio input[type=radio]:disabled+.radio-control{background:#4a4a57;border-color:#4a4a57}.radio .radio-label{font-size:17px}.checkbox{display:inline-flex;flex-direction:row;gap:8px;align-items:center}.checkbox input[type=checkbox]{display:none}.checkbox .checkbox-control{height:16px;width:30px;border:2px solid #f8f8f8;position:relative;background:0 0;transition-duration:.2s;transition-property:border-color,background;display:block}.checkbox .checkbox-control:before{content:"";display:block;height:20px;width:20px;background:#f8f8f8;position:absolute;left:-6px;top:-4px;transition-duration:.2s;transition-property:left,background}.checkbox:hover .checkbox-control{background:#4a4a57}.checkbox input[type=checkbox]:checked:not(:disabled)+.checkbox-control{background:#00b3ff;border-color:#00b3ff}.checkbox input[type=checkbox]:checked+.checkbox-control:before{left:12px}.checkbox input[type=checkbox]:disabled+.checkbox-control{border-color:#4a4a57}.checkbox input[type=checkbox]:disabled+.checkbox-control:before{background:#4a4a57}.list{display:flex;flex-direction:column;gap:5px;list-style-type:none;padding-left:0}.list .list-item{display:flex;flex-direction:row;align-items:center;gap:8px;margin-left:0}.list.list-ordered{list-style-type:decimal;display:list-item;margin-left:30px}.list.list-ordered .list-item{display:list-item}.list.list-definition{gap:15px}.list.list-definition .list-row{border-left:2px solid #f8f8f8}.list.list-definition .list-row .list-desc::before,.list.list-definition .list-row .list-term::before{content:"";height:2px;width:12px;position:absolute;top:50%;left:0;margin-top:-1px;display:block;background:#f8f8f8}.list.list-definition .list-row .list-desc,.list.list-definition .list-row .list-term{position:relative}.list.list-definition .list-row .list-term{padding-left:18px;font-size:20px}.list.list-definition .list-row .list-desc{padding-left:18px}.list.list-nav{max-width:420px;width:100%;gap:0}.list.list-nav .list-item{display:flex;flex-direction:column;align-items:flex-start;height:50px;margin:0}.list.list-nav .list-item .list-action{display:flex;justify-content:space-between;align-items:center;width:100%;height:100%;padding:8px 12px;border:0;font-size:20px;background:#1a1a23;color:inherit;transition-duration:.2s;transition-property:background}.list.list-nav .list-item .list-action:hover{background:#00b3ff}.list.list-nav .list-item .list-action .list-label{display:flex;flex-direction:row;gap:8px;align-items:center}.list.list-nav .list-item .list-action .list-meta{padding:8px;background:#0fa;color:#0a0a0d;display:flex}.list.list-nav .list-item.list-item-active .list-action{background:#00b3ff}.list.list-actions{width:100%;max-width:420px;gap:22px}.list.list-actions .list-item{justify-content:space-between;align-items:flex-start}.list.list-actions .list-item .list-content{display:flex;flex-direction:column;gap:8px}.list.list-actions .list-item .list-content .list-title{font-size:20px;line-height:1}.badge{background:#f8f8f8;color:#1a1a23;padding:5px 8px;font-size:16px}.badge.badge-success{background:#0fa}.badge.badge-warning{background:#ffd900}.badge.badge-danger,.badge.badge-error{background:#ff3c00}.badge.badge-info{background:#8a2ce2;color:#f8f8f8}.badge.badge-secondary{background:#00b3ff;color:#f8f8f8}.table{text-align:left;border:2px solid #f8f8f8;padding:15px}.table .table-caption{text-align:left;font-size:20px;background:#f8f8f8;width:-moz-max-content;width:max-content;color:#1a1a23;padding:5px 12px;margin-bottom:0}.table .table-row td,.table .table-row th{padding:12px 18px;font-size:16px}.table .table-foot td,.table .table-foot th{padding-top:15px}.toast{position:fixed;bottom:-100px;right:15px;max-width:420px;background:#1a1a23;border:2px solid #f8f8f8;padding:0;opacity:0;transition-duration:.25s;transition-property:opacity,top,bottom}.toast.a-show{bottom:15px;opacity:1}.toast.a-hide{bottom:115px;opacity:0}.toast .toast-content{display:flex;flex-direction:column;gap:0}.toast .toast-content .toast-title{font-size:24px;display:flex;flex-direction:row;gap:8px;align-items:center;color:#0a0a0d;background:#f8f8f8;padding:5px 8px}.toast .toast-content .toast-text{font-size:16px;padding:22px 15px;margin:0}.toast .toast-close{position:absolute;top:0;right:0;color:#0a0a0d;height:40px;width:40px}.toast .toast-close:hover{color:#1a1a23}.toast.toast-success{border-color:#0fa}.toast.toast-success .toast-title{background:#0fa}.toast.toast-warning{border-color:#ffd900}.toast.toast-warning .toast-title{background:#ffd900}.toast.toast-danger{border-color:#ff3c00}.toast.toast-danger .toast-title{background:#ff3c00}.card{max-width:420px;width:100%;border:2px solid #f8f8f8}.card .card-title{color:#0a0a0d;background:#f8f8f8;padding:8px 12px}.card .card-content{padding:15px}.card .card-content .card-thumb{width:100%}.card .card-content p{margin-top:8px;margin-bottom:0}.card .card-footer{padding:8px 15px;padding-bottom:15px}.modal{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center}.modal .modal-backdrop{position:fixed;z-index:1010;top:0;bottom:0;left:0;right:0;background:#0a0a0d;opacity:0;transition-duration:.25s;transition-property:opacity}.modal .modal-panel{position:relative;z-index:1020;width:100%;max-width:800px;height:auto;min-height:400px;max-height:800px;padding:0;display:flex;flex-direction:column;gap:15px;margin-top:200px;background:#0a0a0d;border:2px solid #f8f8f8;opacity:0;transition-duration:.25s;transition-property:opacity,margin-top}.modal .modal-panel .modal-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-right:15px}.modal .modal-panel .modal-header .modal-title{padding:12px 15px;background:#f8f8f8;color:#0a0a0d;text-transform:uppercase}.modal .modal-panel .modal-body{max-height:700px;overflow-y:auto;padding:18px}.modal .modal-panel .modal-footer{padding:18px}.modal .modal-panel .modal-footer .actions{display:flex;flex-direction:row;justify-content:flex-end;gap:15px;width:100%}.modal.a-show .modal-backdrop{opacity:1}.modal.a-show .modal-panel{opacity:1;margin-top:0}.modal.a-hide .modal-backdrop{opacity:0}.modal.a-hide .modal-panel{opacity:0;margin-top:-200px}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.m-1{margin:5px!important}.mt-1{margin-top:5px!important}.mr-1{margin-right:5px!important}.mb-1{margin-bottom:5px!important}.ml-1{margin-left:5px!important}.mx-1{margin-left:5px!important;margin-right:5px!important}.my-1{margin-top:5px!important;margin-bottom:5px!important}.p-1{padding:5px!important}.pt-1{padding-top:5px!important}.pr-1{padding-right:5px!important}.pb-1{padding-bottom:5px!important}.pl-1{padding-left:5px!important}.px-1{padding-left:5px!important;padding-right:5px!important}.py-1{padding-top:5px!important;padding-bottom:5px!important}.m-2{margin:8px!important}.mt-2{margin-top:8px!important}.mr-2{margin-right:8px!important}.mb-2{margin-bottom:8px!important}.ml-2{margin-left:8px!important}.mx-2{margin-left:8px!important;margin-right:8px!important}.my-2{margin-top:8px!important;margin-bottom:8px!important}.p-2{padding:8px!important}.pt-2{padding-top:8px!important}.pr-2{padding-right:8px!important}.pb-2{padding-bottom:8px!important}.pl-2{padding-left:8px!important}.px-2{padding-left:8px!important;padding-right:8px!important}.py-2{padding-top:8px!important;padding-bottom:8px!important}.m-3{margin:12px!important}.mt-3{margin-top:12px!important}.mr-3{margin-right:12px!important}.mb-3{margin-bottom:12px!important}.ml-3{margin-left:12px!important}.mx-3{margin-left:12px!important;margin-right:12px!important}.my-3{margin-top:12px!important;margin-bottom:12px!important}.p-3{padding:12px!important}.pt-3{padding-top:12px!important}.pr-3{padding-right:12px!important}.pb-3{padding-bottom:12px!important}.pl-3{padding-left:12px!important}.px-3{padding-left:12px!important;padding-right:12px!important}.py-3{padding-top:12px!important;padding-bottom:12px!important}.m-4{margin:15px!important}.mt-4{margin-top:15px!important}.mr-4{margin-right:15px!important}.mb-4{margin-bottom:15px!important}.ml-4{margin-left:15px!important}.mx-4{margin-left:15px!important;margin-right:15px!important}.my-4{margin-top:15px!important;margin-bottom:15px!important}.p-4{padding:15px!important}.pt-4{padding-top:15px!important}.pr-4{padding-right:15px!important}.pb-4{padding-bottom:15px!important}.pl-4{padding-left:15px!important}.px-4{padding-left:15px!important;padding-right:15px!important}.py-4{padding-top:15px!important;padding-bottom:15px!important}.m-5{margin:18px!important}.mt-5{margin-top:18px!important}.mr-5{margin-right:18px!important}.mb-5{margin-bottom:18px!important}.ml-5{margin-left:18px!important}.mx-5{margin-left:18px!important;margin-right:18px!important}.my-5{margin-top:18px!important;margin-bottom:18px!important}.p-5{padding:18px!important}.pt-5{padding-top:18px!important}.pr-5{padding-right:18px!important}.pb-5{padding-bottom:18px!important}.pl-5{padding-left:18px!important}.px-5{padding-left:18px!important;padding-right:18px!important}.py-5{padding-top:18px!important;padding-bottom:18px!important}.m-6{margin:22px!important}.mt-6{margin-top:22px!important}.mr-6{margin-right:22px!important}.mb-6{margin-bottom:22px!important}.ml-6{margin-left:22px!important}.mx-6{margin-left:22px!important;margin-right:22px!important}.my-6{margin-top:22px!important;margin-bottom:22px!important}.p-6{padding:22px!important}.pt-6{padding-top:22px!important}.pr-6{padding-right:22px!important}.pb-6{padding-bottom:22px!important}.pl-6{padding-left:22px!important}.px-6{padding-left:22px!important;padding-right:22px!important}.py-6{padding-top:22px!important;padding-bottom:22px!important}.m-7{margin:26px!important}.mt-7{margin-top:26px!important}.mr-7{margin-right:26px!important}.mb-7{margin-bottom:26px!important}.ml-7{margin-left:26px!important}.mx-7{margin-left:26px!important;margin-right:26px!important}.my-7{margin-top:26px!important;margin-bottom:26px!important}.p-7{padding:26px!important}.pt-7{padding-top:26px!important}.pr-7{padding-right:26px!important}.pb-7{padding-bottom:26px!important}.pl-7{padding-left:26px!important}.px-7{padding-left:26px!important;padding-right:26px!important}.py-7{padding-top:26px!important;padding-bottom:26px!important}.m-8{margin:34px!important}.mt-8{margin-top:34px!important}.mr-8{margin-right:34px!important}.mb-8{margin-bottom:34px!important}.ml-8{margin-left:34px!important}.mx-8{margin-left:34px!important;margin-right:34px!important}.my-8{margin-top:34px!important;margin-bottom:34px!important}.p-8{padding:34px!important}.pt-8{padding-top:34px!important}.pr-8{padding-right:34px!important}.pb-8{padding-bottom:34px!important}.pl-8{padding-left:34px!important}.px-8{padding-left:34px!important;padding-right:34px!important}.py-8{padding-top:34px!important;padding-bottom:34px!important}.m-9{margin:42px!important}.mt-9{margin-top:42px!important}.mr-9{margin-right:42px!important}.mb-9{margin-bottom:42px!important}.ml-9{margin-left:42px!important}.mx-9{margin-left:42px!important;margin-right:42px!important}.my-9{margin-top:42px!important;margin-bottom:42px!important}.p-9{padding:42px!important}.pt-9{padding-top:42px!important}.pr-9{padding-right:42px!important}.pb-9{padding-bottom:42px!important}.pl-9{padding-left:42px!important}.px-9{padding-left:42px!important;padding-right:42px!important}.py-9{padding-top:42px!important;padding-bottom:42px!important}.m-10{margin:48px!important}.mt-10{margin-top:48px!important}.mr-10{margin-right:48px!important}.mb-10{margin-bottom:48px!important}.ml-10{margin-left:48px!important}.mx-10{margin-left:48px!important;margin-right:48px!important}.my-10{margin-top:48px!important;margin-bottom:48px!important}.p-10{padding:48px!important}.pt-10{padding-top:48px!important}.pr-10{padding-right:48px!important}.pb-10{padding-bottom:48px!important}.pl-10{padding-left:48px!important}.px-10{padding-left:48px!important;padding-right:48px!important}.py-10{padding-top:48px!important;padding-bottom:48px!important}.row{display:flex;flex-direction:row}*{box-sizing:border-box}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{width:10px;background:#0a0a0d;cursor:pointer}::-webkit-scrollbar-thumb{width:10px;background:#4a4a57;cursor:default}::-webkit-scrollbar-corner{background:0 0;height:1px}::-webkit-scrollbar-button{display:none}*{padding:0;margin:0}body,html{font-family:"IBM Plex Mono",monospace;font-weight:400}body{background-color:#0a0a0d;color:#f8f8f8;font-size:15px;line-height:1.45;letter-spacing:.01em}.screen{display:none}.screen.a-show{display:block}.hud{width:100%;padding:18px}.hud>.row{justify-content:space-between;align-items:center;gap:15px;flex-wrap:wrap}.hud .nav-toggle{font-size:42px;width:50px;height:50px;background:#f8f8f8;color:#0a0a0d;position:relative;z-index:710}.hud .nav-toggle.state-off .icon-state-on{display:none}.hud .nav-toggle.state-on .icon-state-off{display:none}.hud .app-title{padding:8px 15px;text-transform:uppercase}.hud .navigation{position:fixed;z-index:700;left:0;top:0;right:0;bottom:0;background:#0a0a0d;opacity:0;visibility:hidden;transition-duration:.2s;transition-property:visibility,opacity}.hud .navigation .container{width:100%;max-width:600px;height:100vh;margin:auto;padding:12px;display:flex;align-items:center}.hud .navigation .nav-items{display:flex;flex-direction:row;flex-wrap:wrap;gap:48px;align-items:center;justify-content:space-between;height:-moz-max-content;height:max-content;margin-top:100px;transition-duration:.2s;transition-property:margin-top}.hud .navigation .nav-link{text-decoration:none;color:#f8f8f8}.hud .navigation .nav-item{width:160px;border:2px solid #f8f8f8;padding:22px;display:flex;flex-direction:column;gap:12px;transition-property:color,background,border-color;transition-duration:.2s}.hud .navigation .nav-item .nav-icon{text-align:center}.hud .navigation .nav-item .nav-icon .ph,.hud .navigation .nav-item .nav-icon .ph-bold{font-size:64px}.hud .navigation .nav-item .nav-text{width:100%;text-align:center;text-transform:uppercase;font-size:17px}.hud .navigation .nav-item:hover{background:#0fa;border-color:#0fa;color:#0a0a0d}.hud .navigation.a-show{visibility:visible;opacity:1}.hud .navigation.a-show .nav-items{margin-top:0}.hud .navigation.a-hide .nav-items{margin-top:-100px}.load-screen{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:row;align-items:center;justify-content:center;visibility:hidden;opacity:0;background:#0a0a0d;transition-duration:.2s;transition-property:opacity,visibility}.load-screen.a-show{visibility:visible;opacity:1;z-index:900;transition-duration:0s}.error-screen{display:none}.error-screen .container{display:flex;align-items:center;flex-direction:column;justify-content:center;flex-wrap:nowrap;gap:15px;padding-top:20%;max-width:420px;width:100%;margin:auto}.error-screen .icon-container{color:#ff3c00}.error-screen .icon-container .ph,.error-screen .icon-container .ph-bold{font-size:72px}.error-screen .error-title{padding:8px 12px}.error-screen .error-text{font-size:16px;text-align:center}.error-screen.a-show{display:block} /*# sourceMappingURL=main.css.map */ diff --git a/webclient/dist/css/main.css.map b/webclient/dist/css/main.css.map index e29f6d2..3ffa171 100644 --- a/webclient/dist/css/main.css.map +++ b/webclient/dist/css/main.css.map @@ -1 +1 @@ -{"version":3,"sources":["_fonts.scss","_spacing.scss","main.css","ui_components/_typography.scss","ui_components/_palette.scss","ui_components/_buttons.scss","ui_components/_forms.scss","ui_components/_lists.scss","ui_components/_badges.scss","ui_components/_tables.scss","ui_components/_toasts.scss","ui_components/_cards.scss","ui_components/_modals.scss","_utils.scss","_ui.scss","_app.scss","app/_hud.scss"],"names":[],"mappings":"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","file":"main.css","sourcesContent":["@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf\") format(\"truetype\");\n font-weight: 500;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf\") format(\"truetype\");\n font-weight: 600;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf\") format(\"truetype\");\n font-weight: 700;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: italic;\n font-display: swap;\n}\n","/* =========================\n\t SPACING SCALE\n========================= */\n\n$space-0: 0;\n$space-1: 5px;\n$space-2: 8px;\n$space-3: 12px;\n$space-4: 15px;\n$space-5: 18px;\n$space-6: 22px;\n$space-7: 26px;\n$space-8: 34px;\n$space-9: 42px;\n$space-10: 48px;\n$space-11: 64px;\n$space-12: 80px;\n\n/* aliases for readability */\n$space-xs: $space-1;\n$space-sm: $space-2;\n$space-md: $space-4;\n$space-lg: $space-6;\n$space-xl: $space-8;\n$space-xxl: $space-10;\n\n/* map — for utilities generation */\n$spaces: (\n\t0: $space-0,\n\t1: $space-1,\n\t2: $space-2,\n\t3: $space-3,\n\t4: $space-4,\n\t5: $space-5,\n\t6: $space-6,\n\t7: $space-7,\n\t8: $space-8,\n\t9: $space-9,\n\t10: $space-10\n);\n\n/* =========================\n\t BASE LAYOUT\n========================= */\n\n.container {\n\tpadding: $space-xl;\n}\n\n.section {\n\tmargin-bottom: $space-xxl;\n}\n\n.section-title {\n\tmargin-bottom: $space-xl;\n}\n\n.block {\n\tmargin-bottom: $space-xl;\n}\n\n.block-title {\n\tmargin-bottom: $space-lg;\n}\n\n/* =========================\n\t TEXT & CONTENT\n========================= */\n\np,\n.text {\n\tmargin-bottom: $space-md;\n}\n\n.hint {\n\tmargin-top: $space-sm;\n}\n\n/* =========================\n\t LISTS\n========================= */\n\n.list {\n\tpadding-left: $space-lg;\n\tmargin-bottom: $space-md;\n}\n\n.list-item {\n\tmargin-bottom: $space-sm;\n}\n\n.list-nested {\n\tmargin-top: $space-sm;\n}\n\n/* =========================\n\t TABLES\n========================= */\n\n.table {\n\tmargin-bottom: $space-lg;\n}\n\n.table-caption {\n\tmargin-bottom: $space-sm;\n}\n\n/* =========================\n\t FORMS\n========================= */\n\n.form-group {\n\tmargin-bottom: $space-md;\n}\n\n.label {\n\tmargin-bottom: $space-xs;\n\tdisplay: block;\n}\n\n.input,\n.textarea,\n.select {\n\tmargin-top: $space-xs;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n\n.toast {\n\tpadding: $space-md;\n}\n\n.toast-stack {\n\tgap: $space-sm;\n}\n","@charset \"UTF-8\";\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf\") format(\"truetype\");\n font-weight: 500;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf\") format(\"truetype\");\n font-weight: 600;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf\") format(\"truetype\");\n font-weight: 700;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: italic;\n font-display: swap;\n}\n/* =========================\n\t SPACING SCALE\n========================= */\n/* aliases for readability */\n/* map — for utilities generation */\n/* =========================\n\t BASE LAYOUT\n========================= */\n.container {\n padding: 34px;\n}\n\n.section {\n margin-bottom: 48px;\n}\n\n.section-title {\n margin-bottom: 34px;\n}\n\n.block {\n margin-bottom: 34px;\n}\n\n.block-title {\n margin-bottom: 22px;\n}\n\n/* =========================\n\t TEXT & CONTENT\n========================= */\np,\n.text {\n margin-bottom: 15px;\n}\n\n.hint {\n margin-top: 8px;\n}\n\n/* =========================\n\t LISTS\n========================= */\n.list {\n padding-left: 22px;\n margin-bottom: 15px;\n}\n\n.list-item {\n margin-bottom: 8px;\n}\n\n.list-nested {\n margin-top: 8px;\n}\n\n/* =========================\n\t TABLES\n========================= */\n.table {\n margin-bottom: 22px;\n}\n\n.table-caption {\n margin-bottom: 8px;\n}\n\n/* =========================\n\t FORMS\n========================= */\n.form-group {\n margin-bottom: 15px;\n}\n\n.label {\n margin-bottom: 5px;\n display: block;\n}\n\n.input,\n.textarea,\n.select {\n margin-top: 5px;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n.toast {\n padding: 15px;\n}\n\n.toast-stack {\n gap: 8px;\n}\n\n/* =========================\n\t FONT FAMILIES\n========================= */\n/* =========================\n\t FONT WEIGHTS\n========================= */\n/* =========================\n\t FONT SIZES (scale)\n========================= */\n/* =========================\n\t LINE HEIGHTS\n========================= */\n/* =========================\n\t LETTER SPACING\n========================= */\n/* =========================\n\t BASE TYPOGRAPHY\n========================= */\nhtml {\n font-size: 100%;\n}\n\nbody {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.6;\n letter-spacing: 0;\n}\n\n/* =========================\n\t HEADINGS\n========================= */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-family: \"IBM Plex Mono\", monospace;\n font-weight: 600;\n line-height: 1.25;\n margin: 0;\n}\nh1.contrast,\nh2.contrast,\nh3.contrast,\nh4.contrast,\nh5.contrast,\nh6.contrast {\n background: #F8F8F8;\n color: #0A0A0D;\n}\n\nh1 {\n font-size: 36px;\n letter-spacing: -0.01em;\n}\n\nh2 {\n font-size: 28px;\n}\n\nh3 {\n font-size: 24px;\n}\n\nh4 {\n font-size: 20px;\n}\n\nh5 {\n font-size: 18px;\n}\n\nh6 {\n font-size: 16px;\n font-weight: 500;\n}\n\n/* =========================\n\t TEXT VARIANTS\n========================= */\n.text,\np {\n font-size: 16px;\n line-height: 1.6;\n}\n\n.text-sm {\n font-size: 13px;\n line-height: 1.4;\n}\n\n.text-lg {\n font-size: 17px;\n line-height: 1.6;\n}\n\n.text-muted {\n font-size: 13px;\n color: #AAAEB2;\n}\n\n.text-strong,\nstrong {\n font-weight: 600;\n}\n\n.text-bold {\n font-weight: 700;\n}\n\n.text-italic,\nem {\n font-style: italic;\n}\n\n/* =========================\n\t CODE / MONO\n========================= */\ncode,\npre,\n.code {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 16px;\n line-height: 1.4;\n background-color: #1A1A23;\n}\n\npre {\n font-size: 16px;\n line-height: 1.6;\n white-space: pre-wrap;\n}\n\n/* =========================\n\t LINKS\n========================= */\na {\n font-weight: 500;\n text-decoration: none;\n}\n\n.link {\n font-size: inherit;\n font-weight: 500;\n}\n\n/* =========================\n\t LABELS / META\n========================= */\n.label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n}\n\n.hint,\n.meta {\n font-size: 12px;\n line-height: 1.4;\n}\n\n/* =========================\n\t TABLE TEXT\n========================= */\n.table {\n font-size: 13px;\n line-height: 1.4;\n}\n.table th {\n font-weight: 600;\n}\n.table td {\n font-weight: 400;\n}\n\n/* =========================\n\t LISTS\n========================= */\n.list {\n font-size: 16px;\n line-height: 1.6;\n}\n\n.list-item {\n font-size: inherit;\n}\n\n/* =========================\n\t MODALS\n========================= */\n.modal-title {\n font-size: 20px;\n font-weight: 600;\n}\n\n.modal-body {\n font-size: 16px;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n.toast-title {\n font-size: 14px;\n font-weight: 600;\n}\n\n.toast-text {\n font-size: 13px;\n line-height: 1.4;\n}\n\n.palette {\n display: flex;\n flex-direction: row;\n gap: 8px;\n}\n.palette .color .color-box {\n width: 100px;\n height: 80px;\n}\n\n/* BACKGROUND COLORS */\n.bg-primary {\n background: #F8F8F8;\n}\n\n.bg-secondary {\n background: #00B3FF;\n}\n\n.bg-success {\n background: #00FFAA;\n}\n\n.bg-accent {\n background: #FF00CC;\n}\n\n.bg-info {\n background: #8A2CE2;\n}\n\n.bg-warning {\n background: #FFD900;\n}\n\n.bg-error {\n background: #FF3C00;\n}\n\n/* TEXT COLORS */\n.text-color-primary {\n color: #F8F8F8;\n}\n\n.text-color-secondary {\n color: #00B3FF;\n}\n\n.text-color-success {\n color: #00FFAA;\n}\n\n.text-color-accent {\n color: #FF00CC;\n}\n\n.text-color-info {\n color: #8A2CE2;\n}\n\n.text-color-warning {\n color: #FFD900;\n}\n\n.text-color-error {\n color: #FF3C00;\n}\n\n.btn {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 17px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.04em;\n padding: 12px 22px;\n border-radius: 0;\n border-width: 2px;\n border-left-width: 6px;\n border-style: solid;\n border-color: #F8F8F8;\n text-transform: uppercase;\n background-color: transparent;\n transition-duration: 0.2s;\n transition-property: background-color, border-color, color;\n}\n.btn.with-icon {\n border-left-width: 48px;\n position: relative;\n}\n.btn.with-icon .ph,\n.btn.with-icon .ph-bold {\n position: absolute;\n color: #0a0a0d;\n left: -48px;\n top: 0;\n font-size: 28px;\n height: 100%;\n display: inline-flex;\n align-items: center;\n width: 48px;\n justify-content: center;\n transition-duration: 0.2s;\n transition-property: color, left;\n}\n.btn:hover.with-icon .ph,\n.btn:hover.with-icon .ph-bold {\n left: -28px;\n}\n.btn.btn-primary {\n color: #F8F8F8;\n border-color: #F8F8F8;\n}\n.btn.btn-primary:hover {\n background-color: #F8F8F8;\n color: #0A0A0D;\n}\n.btn.btn-secondary {\n color: #00B3FF;\n border-color: #00B3FF;\n}\n.btn.btn-secondary:hover {\n background-color: #00B3FF;\n color: #F8F8F8;\n}\n.btn.btn-secondary:hover.with-icon .ph,\n.btn.btn-secondary:hover.with-icon .ph-bold {\n color: #F8F8F8;\n}\n.btn.btn-accent {\n color: #FF00CC;\n border-color: #FF00CC;\n}\n.btn.btn-accent:hover {\n background-color: #FF00CC;\n color: #F8F8F8;\n}\n.btn.btn-accent:hover.with-icon .ph,\n.btn.btn-accent:hover.with-icon .ph-bold {\n color: #F8F8F8;\n}\n.btn.btn-danger {\n color: #FF3C00;\n border-color: #FF3C00;\n}\n.btn.btn-danger:hover {\n background-color: #FF3C00;\n color: #0A0A0D;\n}\n.btn.btn-warning {\n color: #FFD900;\n border-color: #FFD900;\n}\n.btn.btn-warning:hover {\n background-color: #FFD900;\n color: #0A0A0D;\n}\n.btn.btn-success {\n color: #00FFAA;\n border-color: #00FFAA;\n}\n.btn.btn-success:hover {\n background-color: #00FFAA;\n color: #0A0A0D;\n}\n.btn.btn-info {\n color: #8A2CE2;\n border-color: #8A2CE2;\n}\n.btn.btn-info:hover {\n background-color: #8A2CE2;\n color: #F8F8F8;\n}\n.btn.btn-info:hover.with-icon .ph,\n.btn.btn-info:hover.with-icon .ph-bold {\n color: #F8F8F8;\n}\n.btn[disabled] {\n color: #AAAEB2;\n border-color: #1A1A23;\n background-color: #1A1A23;\n}\n.btn[disabled].with-icon .ph,\n.btn[disabled].with-icon .ph-bold {\n color: #AAAEB2;\n}\n.btn[disabled]:hover {\n background-color: #1A1A23;\n color: #AAAEB2;\n}\n.btn[disabled]:hover.with-icon .ph,\n.btn[disabled]:hover.with-icon .ph-bold {\n color: #AAAEB2;\n}\n.btn[disabled].with-icon .ph,\n.btn[disabled].with-icon .ph-bold {\n left: -28px;\n}\n.btn.btn-small {\n font-size: 14px;\n font-weight: 500;\n padding: 8px 8px;\n}\n.btn.btn-small.with-icon {\n border-left-width: 32px;\n}\n.btn.btn-small.with-icon .ph,\n.btn.btn-small.with-icon .ph-bold {\n left: -40px;\n font-size: 22px;\n}\n.btn.btn-large {\n font-size: 20px;\n font-weight: 700;\n padding: 15px 48px;\n}\n\n.btn-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 30px;\n height: 30px;\n background: transparent;\n color: #F8F8F8;\n font-size: 20px;\n border: 0;\n transition-duration: 0.2s;\n transition-property: color;\n}\n.btn-icon .ph {\n transform: rotate(0);\n transition-duration: 0.2s;\n transition-property: transform;\n}\n.btn-icon:hover {\n color: #AAAEB2;\n}\n.btn-icon:hover .ph {\n transform: rotate(90deg);\n}\n\n.form-group .label {\n display: flex;\n flex-direction: column;\n font-size: 17px;\n max-width: 420px;\n position: relative;\n}\n.form-group .label .ph {\n position: absolute;\n color: #F8F8F8;\n left: 0;\n bottom: 2px;\n font-size: 28px;\n height: 56px;\n display: inline-flex;\n align-items: center;\n width: 48px;\n justify-content: center;\n transition-duration: 0.2s;\n transition-property: color, left;\n}\n.form-group .label .input {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 16px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.04em;\n padding: 12px 22px;\n margin-top: 8px;\n border-radius: 0;\n border-width: 2px;\n border-bottom-width: 6px;\n border-style: solid;\n border-color: #F8F8F8;\n color: #F8F8F8;\n background-color: transparent;\n transition-duration: 0.2s;\n transition-property: background-color, border-color, color;\n}\n.form-group .label .input:hover {\n border-bottom-color: #AAAEB2;\n}\n.form-group .label .input:focus {\n outline: none;\n border-color: #00B3FF;\n}\n.form-group .label .input::placeholder {\n color: #AAAEB2;\n}\n.form-group .label textarea.input {\n height: 120px;\n line-height: 1.25;\n resize: none;\n}\n.form-group .label .ph + .input,\n.form-group .label .ph + .select-wrap .select {\n padding-left: 42px;\n}\n.form-group .label .select-wrap {\n margin-top: 8px;\n}\n.form-group .label .select {\n width: 100%;\n height: 56px;\n margin-top: 0;\n /* убрать нативную стрелку */\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n.form-group .label .select:focus {\n outline: none;\n}\n.form-group .label .select option {\n color: #F8F8F8;\n background: #1A1A23;\n}\n.form-group .label .select-wrap::after {\n content: \"\";\n position: absolute;\n right: 22px;\n bottom: 18px;\n transform: translateY(-50%);\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-top: 10px solid #F8F8F8;\n pointer-events: none;\n}\n\n.radio {\n display: inline-flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n}\n.radio input[type=radio] {\n display: none;\n}\n.radio .radio-control {\n display: inline-block;\n border-radius: 100%;\n border: 2px solid #F8F8F8;\n width: 20px;\n height: 20px;\n background: transparent;\n transition-duration: 0.2s;\n transition-property: background, border-color;\n}\n.radio:hover .radio-control {\n background: #4A4A57;\n}\n.radio input[type=radio]:checked + .radio-control {\n background: #F8F8F8;\n}\n.radio input[type=radio]:disabled + .radio-control {\n background: #4A4A57;\n border-color: #4A4A57;\n}\n.radio .radio-label {\n font-size: 17px;\n}\n\n.checkbox {\n display: inline-flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n}\n.checkbox input[type=checkbox] {\n display: none;\n}\n.checkbox .checkbox-control {\n height: 16px;\n width: 30px;\n border: 2px solid #F8F8F8;\n position: relative;\n background: transparent;\n transition-duration: 0.2s;\n transition-property: border-color, background;\n display: block;\n}\n.checkbox .checkbox-control:before {\n content: \"\";\n display: block;\n height: 20px;\n width: 20px;\n background: #F8F8F8;\n position: absolute;\n left: -6px;\n top: -4px;\n transition-duration: 0.2s;\n transition-property: left, background;\n}\n.checkbox:hover .checkbox-control {\n background: #4A4A57;\n}\n.checkbox input[type=checkbox]:checked:not(:disabled) + .checkbox-control {\n background: #00B3FF;\n border-color: #00B3FF;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-control:before {\n left: 12px;\n}\n.checkbox input[type=checkbox]:disabled + .checkbox-control {\n border-color: #4A4A57;\n}\n.checkbox input[type=checkbox]:disabled + .checkbox-control:before {\n background: #4A4A57;\n}\n\n.list {\n display: flex;\n flex-direction: column;\n gap: 5px;\n list-style-type: none;\n padding-left: 0;\n}\n.list .list-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n margin-left: 0;\n}\n.list.list-ordered {\n list-style-type: decimal;\n display: list-item;\n margin-left: 30px;\n}\n.list.list-ordered .list-item {\n display: list-item;\n}\n.list.list-definition {\n gap: 15px;\n}\n.list.list-definition .list-row {\n border-left: 2px solid #F8F8F8;\n}\n.list.list-definition .list-row .list-term::before,\n.list.list-definition .list-row .list-desc::before {\n content: \"\";\n height: 2px;\n width: 12px;\n position: absolute;\n top: 50%;\n left: 0;\n margin-top: -1px;\n display: block;\n background: #F8F8F8;\n}\n.list.list-definition .list-row .list-term,\n.list.list-definition .list-row .list-desc {\n position: relative;\n}\n.list.list-definition .list-row .list-term {\n padding-left: 18px;\n font-size: 20px;\n}\n.list.list-definition .list-row .list-desc {\n padding-left: 18px;\n}\n.list.list-nav {\n max-width: 420px;\n width: 100%;\n gap: 0;\n}\n.list.list-nav .list-item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n height: 50px;\n margin: 0;\n}\n.list.list-nav .list-item .list-action {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 8px 12px;\n border: 0;\n font-size: 20px;\n background: #1A1A23;\n color: inherit;\n transition-duration: 0.2s;\n transition-property: background;\n}\n.list.list-nav .list-item .list-action:hover {\n background: #00B3FF;\n}\n.list.list-nav .list-item .list-action .list-label {\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n}\n.list.list-nav .list-item .list-action .list-meta {\n padding: 8px;\n background: #00FFAA;\n color: #0A0A0D;\n display: flex;\n}\n.list.list-nav .list-item.list-item-active .list-action {\n background: #00B3FF;\n}\n.list.list-actions {\n width: 100%;\n max-width: 420px;\n gap: 22px;\n}\n.list.list-actions .list-item {\n justify-content: space-between;\n align-items: flex-start;\n}\n.list.list-actions .list-item .list-content {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.list.list-actions .list-item .list-content .list-title {\n font-size: 20px;\n line-height: 1;\n}\n.badge {\n background: #F8F8F8;\n color: #1A1A23;\n padding: 5px 8px;\n font-size: 16px;\n}\n.badge.badge-success {\n background: #00FFAA;\n}\n.badge.badge-warning {\n background: #FFD900;\n}\n.badge.badge-error, .badge.badge-danger {\n background: #FF3C00;\n}\n.badge.badge-info {\n background: #8A2CE2;\n color: #F8F8F8;\n}\n.badge.badge-secondary {\n background: #00B3FF;\n color: #F8F8F8;\n}\n\n.table {\n text-align: left;\n border: 2px solid #F8F8F8;\n padding: 15px;\n}\n.table .table-caption {\n text-align: left;\n font-size: 20px;\n background: #F8F8F8;\n width: max-content;\n color: #1A1A23;\n padding: 5px 12px;\n margin-bottom: 0;\n}\n.table .table-row th,\n.table .table-row td {\n padding: 12px 18px;\n font-size: 16px;\n}\n.table .table-foot th,\n.table .table-foot td {\n padding-top: 15px;\n}\n\n.toast {\n position: fixed;\n bottom: -100px;\n right: 15px;\n max-width: 420px;\n background: #1A1A23;\n border: 2px solid #F8F8F8;\n padding: 0;\n opacity: 0;\n transition-duration: 0.25s;\n transition-property: opacity, top, bottom;\n}\n.toast.a-show {\n bottom: 15px;\n opacity: 1;\n}\n.toast.a-hide {\n bottom: 115px;\n opacity: 0;\n}\n.toast .toast-content {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.toast .toast-content .toast-title {\n font-size: 24px;\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n color: #0A0A0D;\n background: #F8F8F8;\n padding: 5px 8px;\n}\n.toast .toast-content .toast-text {\n font-size: 16px;\n padding: 22px 15px;\n margin: 0;\n}\n.toast .toast-close {\n position: absolute;\n top: 0;\n right: 0;\n color: #0A0A0D;\n height: 40px;\n width: 40px;\n}\n.toast .toast-close:hover {\n color: #1A1A23;\n}\n.toast.toast-success {\n border-color: #00FFAA;\n}\n.toast.toast-success .toast-title {\n background: #00FFAA;\n}\n.toast.toast-warning {\n border-color: #FFD900;\n}\n.toast.toast-warning .toast-title {\n background: #FFD900;\n}\n.toast.toast-danger {\n border-color: #FF3C00;\n}\n.toast.toast-danger .toast-title {\n background: #FF3C00;\n}\n\n.card {\n max-width: 420px;\n width: 100%;\n border: 2px solid #F8F8F8;\n}\n.card .card-title {\n color: #0A0A0D;\n background: #F8F8F8;\n padding: 8px 12px;\n}\n.card .card-content {\n padding: 15px;\n}\n.card .card-content .card-thumb {\n width: 100%;\n}\n.card .card-content p {\n margin-top: 8px;\n margin-bottom: 0;\n}\n.card .card-footer {\n padding: 8px 15px;\n padding-bottom: 15px;\n}\n\n.modal {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n.modal .modal-backdrop {\n position: fixed;\n z-index: 1010;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: #0A0A0D;\n opacity: 0;\n transition-duration: 0.25s;\n transition-property: opacity;\n}\n.modal .modal-panel {\n position: relative;\n z-index: 1020;\n width: 100%;\n max-width: 800px;\n height: auto;\n min-height: 400px;\n max-height: 800px;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 15px;\n margin-top: 200px;\n background: #0A0A0D;\n border: 2px solid #F8F8F8;\n opacity: 0;\n transition-duration: 0.25s;\n transition-property: opacity, margin-top;\n}\n.modal .modal-panel .modal-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding-right: 15px;\n}\n.modal .modal-panel .modal-header .modal-title {\n padding: 12px 15px;\n background: #F8F8F8;\n color: #0A0A0D;\n text-transform: uppercase;\n}\n.modal .modal-panel .modal-body {\n max-height: 700px;\n overflow-y: auto;\n padding: 18px;\n}\n.modal .modal-panel .modal-footer {\n padding: 18px;\n}\n.modal .modal-panel .modal-footer .actions {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 15px;\n width: 100%;\n}\n.modal.a-show .modal-backdrop {\n opacity: 1;\n}\n.modal.a-show .modal-panel {\n opacity: 1;\n margin-top: 0;\n}\n.modal.a-hide .modal-backdrop {\n opacity: 0;\n}\n.modal.a-hide .modal-panel {\n opacity: 0;\n margin-top: -200px;\n}\n\n/* =========================\n SPACING UTILITIES\n========================= */\n/* margin */\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mr-0 {\n margin-right: 0 !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0 {\n margin-left: 0 !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n/* padding */\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pr-0 {\n padding-right: 0 !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0 {\n padding-left: 0 !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n/* margin */\n.m-1 {\n margin: 5px !important;\n}\n\n.mt-1 {\n margin-top: 5px !important;\n}\n\n.mr-1 {\n margin-right: 5px !important;\n}\n\n.mb-1 {\n margin-bottom: 5px !important;\n}\n\n.ml-1 {\n margin-left: 5px !important;\n}\n\n.mx-1 {\n margin-left: 5px !important;\n margin-right: 5px !important;\n}\n\n.my-1 {\n margin-top: 5px !important;\n margin-bottom: 5px !important;\n}\n\n/* padding */\n.p-1 {\n padding: 5px !important;\n}\n\n.pt-1 {\n padding-top: 5px !important;\n}\n\n.pr-1 {\n padding-right: 5px !important;\n}\n\n.pb-1 {\n padding-bottom: 5px !important;\n}\n\n.pl-1 {\n padding-left: 5px !important;\n}\n\n.px-1 {\n padding-left: 5px !important;\n padding-right: 5px !important;\n}\n\n.py-1 {\n padding-top: 5px !important;\n padding-bottom: 5px !important;\n}\n\n/* margin */\n.m-2 {\n margin: 8px !important;\n}\n\n.mt-2 {\n margin-top: 8px !important;\n}\n\n.mr-2 {\n margin-right: 8px !important;\n}\n\n.mb-2 {\n margin-bottom: 8px !important;\n}\n\n.ml-2 {\n margin-left: 8px !important;\n}\n\n.mx-2 {\n margin-left: 8px !important;\n margin-right: 8px !important;\n}\n\n.my-2 {\n margin-top: 8px !important;\n margin-bottom: 8px !important;\n}\n\n/* padding */\n.p-2 {\n padding: 8px !important;\n}\n\n.pt-2 {\n padding-top: 8px !important;\n}\n\n.pr-2 {\n padding-right: 8px !important;\n}\n\n.pb-2 {\n padding-bottom: 8px !important;\n}\n\n.pl-2 {\n padding-left: 8px !important;\n}\n\n.px-2 {\n padding-left: 8px !important;\n padding-right: 8px !important;\n}\n\n.py-2 {\n padding-top: 8px !important;\n padding-bottom: 8px !important;\n}\n\n/* margin */\n.m-3 {\n margin: 12px !important;\n}\n\n.mt-3 {\n margin-top: 12px !important;\n}\n\n.mr-3 {\n margin-right: 12px !important;\n}\n\n.mb-3 {\n margin-bottom: 12px !important;\n}\n\n.ml-3 {\n margin-left: 12px !important;\n}\n\n.mx-3 {\n margin-left: 12px !important;\n margin-right: 12px !important;\n}\n\n.my-3 {\n margin-top: 12px !important;\n margin-bottom: 12px !important;\n}\n\n/* padding */\n.p-3 {\n padding: 12px !important;\n}\n\n.pt-3 {\n padding-top: 12px !important;\n}\n\n.pr-3 {\n padding-right: 12px !important;\n}\n\n.pb-3 {\n padding-bottom: 12px !important;\n}\n\n.pl-3 {\n padding-left: 12px !important;\n}\n\n.px-3 {\n padding-left: 12px !important;\n padding-right: 12px !important;\n}\n\n.py-3 {\n padding-top: 12px !important;\n padding-bottom: 12px !important;\n}\n\n/* margin */\n.m-4 {\n margin: 15px !important;\n}\n\n.mt-4 {\n margin-top: 15px !important;\n}\n\n.mr-4 {\n margin-right: 15px !important;\n}\n\n.mb-4 {\n margin-bottom: 15px !important;\n}\n\n.ml-4 {\n margin-left: 15px !important;\n}\n\n.mx-4 {\n margin-left: 15px !important;\n margin-right: 15px !important;\n}\n\n.my-4 {\n margin-top: 15px !important;\n margin-bottom: 15px !important;\n}\n\n/* padding */\n.p-4 {\n padding: 15px !important;\n}\n\n.pt-4 {\n padding-top: 15px !important;\n}\n\n.pr-4 {\n padding-right: 15px !important;\n}\n\n.pb-4 {\n padding-bottom: 15px !important;\n}\n\n.pl-4 {\n padding-left: 15px !important;\n}\n\n.px-4 {\n padding-left: 15px !important;\n padding-right: 15px !important;\n}\n\n.py-4 {\n padding-top: 15px !important;\n padding-bottom: 15px !important;\n}\n\n/* margin */\n.m-5 {\n margin: 18px !important;\n}\n\n.mt-5 {\n margin-top: 18px !important;\n}\n\n.mr-5 {\n margin-right: 18px !important;\n}\n\n.mb-5 {\n margin-bottom: 18px !important;\n}\n\n.ml-5 {\n margin-left: 18px !important;\n}\n\n.mx-5 {\n margin-left: 18px !important;\n margin-right: 18px !important;\n}\n\n.my-5 {\n margin-top: 18px !important;\n margin-bottom: 18px !important;\n}\n\n/* padding */\n.p-5 {\n padding: 18px !important;\n}\n\n.pt-5 {\n padding-top: 18px !important;\n}\n\n.pr-5 {\n padding-right: 18px !important;\n}\n\n.pb-5 {\n padding-bottom: 18px !important;\n}\n\n.pl-5 {\n padding-left: 18px !important;\n}\n\n.px-5 {\n padding-left: 18px !important;\n padding-right: 18px !important;\n}\n\n.py-5 {\n padding-top: 18px !important;\n padding-bottom: 18px !important;\n}\n\n/* margin */\n.m-6 {\n margin: 22px !important;\n}\n\n.mt-6 {\n margin-top: 22px !important;\n}\n\n.mr-6 {\n margin-right: 22px !important;\n}\n\n.mb-6 {\n margin-bottom: 22px !important;\n}\n\n.ml-6 {\n margin-left: 22px !important;\n}\n\n.mx-6 {\n margin-left: 22px !important;\n margin-right: 22px !important;\n}\n\n.my-6 {\n margin-top: 22px !important;\n margin-bottom: 22px !important;\n}\n\n/* padding */\n.p-6 {\n padding: 22px !important;\n}\n\n.pt-6 {\n padding-top: 22px !important;\n}\n\n.pr-6 {\n padding-right: 22px !important;\n}\n\n.pb-6 {\n padding-bottom: 22px !important;\n}\n\n.pl-6 {\n padding-left: 22px !important;\n}\n\n.px-6 {\n padding-left: 22px !important;\n padding-right: 22px !important;\n}\n\n.py-6 {\n padding-top: 22px !important;\n padding-bottom: 22px !important;\n}\n\n/* margin */\n.m-7 {\n margin: 26px !important;\n}\n\n.mt-7 {\n margin-top: 26px !important;\n}\n\n.mr-7 {\n margin-right: 26px !important;\n}\n\n.mb-7 {\n margin-bottom: 26px !important;\n}\n\n.ml-7 {\n margin-left: 26px !important;\n}\n\n.mx-7 {\n margin-left: 26px !important;\n margin-right: 26px !important;\n}\n\n.my-7 {\n margin-top: 26px !important;\n margin-bottom: 26px !important;\n}\n\n/* padding */\n.p-7 {\n padding: 26px !important;\n}\n\n.pt-7 {\n padding-top: 26px !important;\n}\n\n.pr-7 {\n padding-right: 26px !important;\n}\n\n.pb-7 {\n padding-bottom: 26px !important;\n}\n\n.pl-7 {\n padding-left: 26px !important;\n}\n\n.px-7 {\n padding-left: 26px !important;\n padding-right: 26px !important;\n}\n\n.py-7 {\n padding-top: 26px !important;\n padding-bottom: 26px !important;\n}\n\n/* margin */\n.m-8 {\n margin: 34px !important;\n}\n\n.mt-8 {\n margin-top: 34px !important;\n}\n\n.mr-8 {\n margin-right: 34px !important;\n}\n\n.mb-8 {\n margin-bottom: 34px !important;\n}\n\n.ml-8 {\n margin-left: 34px !important;\n}\n\n.mx-8 {\n margin-left: 34px !important;\n margin-right: 34px !important;\n}\n\n.my-8 {\n margin-top: 34px !important;\n margin-bottom: 34px !important;\n}\n\n/* padding */\n.p-8 {\n padding: 34px !important;\n}\n\n.pt-8 {\n padding-top: 34px !important;\n}\n\n.pr-8 {\n padding-right: 34px !important;\n}\n\n.pb-8 {\n padding-bottom: 34px !important;\n}\n\n.pl-8 {\n padding-left: 34px !important;\n}\n\n.px-8 {\n padding-left: 34px !important;\n padding-right: 34px !important;\n}\n\n.py-8 {\n padding-top: 34px !important;\n padding-bottom: 34px !important;\n}\n\n/* margin */\n.m-9 {\n margin: 42px !important;\n}\n\n.mt-9 {\n margin-top: 42px !important;\n}\n\n.mr-9 {\n margin-right: 42px !important;\n}\n\n.mb-9 {\n margin-bottom: 42px !important;\n}\n\n.ml-9 {\n margin-left: 42px !important;\n}\n\n.mx-9 {\n margin-left: 42px !important;\n margin-right: 42px !important;\n}\n\n.my-9 {\n margin-top: 42px !important;\n margin-bottom: 42px !important;\n}\n\n/* padding */\n.p-9 {\n padding: 42px !important;\n}\n\n.pt-9 {\n padding-top: 42px !important;\n}\n\n.pr-9 {\n padding-right: 42px !important;\n}\n\n.pb-9 {\n padding-bottom: 42px !important;\n}\n\n.pl-9 {\n padding-left: 42px !important;\n}\n\n.px-9 {\n padding-left: 42px !important;\n padding-right: 42px !important;\n}\n\n.py-9 {\n padding-top: 42px !important;\n padding-bottom: 42px !important;\n}\n\n/* margin */\n.m-10 {\n margin: 48px !important;\n}\n\n.mt-10 {\n margin-top: 48px !important;\n}\n\n.mr-10 {\n margin-right: 48px !important;\n}\n\n.mb-10 {\n margin-bottom: 48px !important;\n}\n\n.ml-10 {\n margin-left: 48px !important;\n}\n\n.mx-10 {\n margin-left: 48px !important;\n margin-right: 48px !important;\n}\n\n.my-10 {\n margin-top: 48px !important;\n margin-bottom: 48px !important;\n}\n\n/* padding */\n.p-10 {\n padding: 48px !important;\n}\n\n.pt-10 {\n padding-top: 48px !important;\n}\n\n.pr-10 {\n padding-right: 48px !important;\n}\n\n.pb-10 {\n padding-bottom: 48px !important;\n}\n\n.pl-10 {\n padding-left: 48px !important;\n}\n\n.px-10 {\n padding-left: 48px !important;\n padding-right: 48px !important;\n}\n\n.py-10 {\n padding-top: 48px !important;\n padding-bottom: 48px !important;\n}\n\n.row {\n display: flex;\n flex-direction: row;\n}\n\n* {\n box-sizing: border-box;\n}\n\n*::-webkit-scrollbar {\n width: 10px;\n}\n\n*::-webkit-scrollbar-track {\n width: 10px;\n background: #0A0A0D;\n cursor: pointer;\n}\n\n*::-webkit-scrollbar-thumb {\n width: 10px;\n background: #4A4A57;\n cursor: default;\n}\n\n*::-webkit-scrollbar-corner {\n background: transparent;\n height: 1px;\n}\n\n*::-webkit-scrollbar-button {\n display: none;\n}\n\n* {\n padding: 0;\n margin: 0;\n}\n\nhtml, body {\n font-family: \"IBM Plex Mono\", monospace;\n font-weight: 400;\n}\n\nbody {\n background-color: #0A0A0D;\n color: #F8F8F8;\n font-size: 15px;\n line-height: 1.45;\n letter-spacing: 0.01em;\n}\n\n.load-screen {\n display: none;\n}\n.load-screen.a-show {\n display: block;\n}\n\n.error-screen {\n display: none;\n}\n.error-screen.a-show {\n display: block;\n}\n\n.screen {\n display: none;\n}\n.screen.a-show {\n display: block;\n}\n\n.hud {\n width: 100%;\n padding: 18px;\n}\n.hud > .row {\n justify-content: space-between;\n align-items: center;\n gap: 15px;\n flex-wrap: wrap;\n}\n.hud .nav-toggle {\n font-size: 42px;\n width: 50px;\n height: 50px;\n background: #F8F8F8;\n color: #0A0A0D;\n}\n.hud .nav-toggle:hover {\n color: #FF00CC;\n}\n.hud .app-title {\n padding: 8px 15px;\n text-transform: uppercase;\n}","/* =========================\n\t FONT FAMILIES\n========================= */\n\n$font-family-base: \"IBM Plex Mono\", monospace;\n$font-family-code: $font-family-base;\n\n/* =========================\n\t FONT WEIGHTS\n========================= */\n\n$font-weight-regular: 400;\n$font-weight-medium: 500;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n/* =========================\n\t FONT SIZES (scale)\n========================= */\n\n$font-size-xs: 12px;\n$font-size-sm: 13px;\n$font-size-md: 14px;\n$font-size-base: 16px;\n$font-size-lg: 17px;\n$font-size-xl: 20px;\n\n$font-size-h1: 36px;\n$font-size-h2: 28px;\n$font-size-h3: 24px;\n$font-size-h4: 20px;\n$font-size-h5: 18px;\n$font-size-h6: 16px;\n\n/* =========================\n\t LINE HEIGHTS\n========================= */\n\n$line-height-base: 1;\n$line-height-tight: 1.15;\n$line-height-snug: 1.25;\n$line-height-normal: 1.4;\n$line-height-relaxed: 1.6;\n\n/* =========================\n\t LETTER SPACING\n========================= */\n\n$letter-spacing-tight: -0.01em;\n$letter-spacing-normal: 0;\n$letter-spacing-wide: 0.04em;\n\n/* =========================\n\t BASE TYPOGRAPHY\n========================= */\n\nhtml {\n\tfont-size: 100%;\n}\n\nbody {\n\tfont-family: $font-family-base;\n\tfont-size: $font-size-base;\n\tfont-weight: $font-weight-regular;\n\tline-height: $line-height-relaxed;\n\tletter-spacing: $letter-spacing-normal;\n}\n\n/* =========================\n\t HEADINGS\n========================= */\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-family: $font-family-base;\n\tfont-weight: $font-weight-semibold;\n\tline-height: $line-height-snug;\n\tmargin: 0;\n\n\t&.contrast {\n\t\tbackground: $color-text-light;\n\t\tcolor: $color-black;\n\t}\n}\n\nh1 {\n\tfont-size: $font-size-h1;\n\tletter-spacing: $letter-spacing-tight;\n}\n\nh2 {\n\tfont-size: $font-size-h2;\n}\n\nh3 {\n\tfont-size: $font-size-h3;\n}\n\nh4 {\n\tfont-size: $font-size-h4;\n}\n\nh5 {\n\tfont-size: $font-size-h5;\n}\n\nh6 {\n\tfont-size: $font-size-h6;\n\tfont-weight: $font-weight-medium;\n}\n\n/* =========================\n\t TEXT VARIANTS\n========================= */\n\n.text,\np {\n\tfont-size: $font-size-base;\n\tline-height: $line-height-relaxed;\n}\n\n.text-sm {\n\tfont-size: $font-size-sm;\n\tline-height: $line-height-normal;\n}\n\n.text-lg {\n\tfont-size: $font-size-lg;\n\tline-height: $line-height-relaxed;\n}\n\n.text-muted {\n\tfont-size: $font-size-sm;\n\tcolor: $color-text-dark;\n}\n\n.text-strong,\nstrong {\n\tfont-weight: $font-weight-semibold;\n}\n\n.text-bold {\n\tfont-weight: $font-weight-bold;\n}\n\n.text-italic,\nem {\n\tfont-style: italic;\n}\n\n/* =========================\n\t CODE / MONO\n========================= */\n\ncode,\npre,\n.code {\n\tfont-family: $font-family-code;\n\tfont-size: $font-size-base;\n\tline-height: $line-height-normal;\n\tbackground-color: $color-dark;\n}\n\npre {\n\tfont-size: $font-size-base;\n\tline-height: $line-height-relaxed;\n\twhite-space: pre-wrap;\n}\n\n/* =========================\n\t LINKS\n========================= */\n\na {\n\tfont-weight: $font-weight-medium;\n\ttext-decoration: none;\n}\n\n.link {\n\tfont-size: inherit;\n\tfont-weight: $font-weight-medium;\n}\n\n/* =========================\n\t LABELS / META\n========================= */\n\n.label {\n\tfont-size: $font-size-sm;\n\tfont-weight: $font-weight-medium;\n\tline-height: $line-height-normal;\n}\n\n.hint,\n.meta {\n\tfont-size: $font-size-xs;\n\tline-height: $line-height-normal;\n}\n\n/* =========================\n\t TABLE TEXT\n========================= */\n\n.table {\n\tfont-size: $font-size-sm;\n\tline-height: $line-height-normal;\n\n\tth {\n\t\tfont-weight: $font-weight-semibold;\n\t}\n\n\ttd {\n\t\tfont-weight: $font-weight-regular;\n\t}\n}\n\n/* =========================\n\t LISTS\n========================= */\n\n.list {\n\tfont-size: $font-size-base;\n\tline-height: $line-height-relaxed;\n}\n\n.list-item {\n\tfont-size: inherit;\n}\n\n/* =========================\n\t MODALS\n========================= */\n\n.modal-title {\n\tfont-size: $font-size-h4;\n\tfont-weight: $font-weight-semibold;\n}\n\n.modal-body {\n\tfont-size: $font-size-base;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n\n.toast-title {\n\tfont-size: $font-size-md;\n\tfont-weight: $font-weight-semibold;\n}\n\n.toast-text {\n\tfont-size: $font-size-sm;\n\tline-height: $line-height-normal;\n}\n",".palette {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: $space-sm;\n\n\t.color {\n\t\t.color-box {\n\t\t\twidth: 100px;\n\t\t\theight: 80px;\n\t\t}\n\t}\n}\n\n/* BACKGROUND COLORS */\n\n.bg-primary {\n\tbackground: $color-primary;\n}\n\n.bg-secondary {\n\tbackground: $color-secondary;\n}\n\n.bg-success {\n\tbackground: $color-success;\n}\n\n.bg-accent {\n\tbackground: $color-accent;\n}\n\n.bg-info {\n\tbackground: $color-info;\n}\n\n.bg-warning {\n\tbackground: $color-warning;\n}\n\n.bg-error {\n\tbackground: $color-error;\n}\n\n/* TEXT COLORS */\n\n.text-color-primary {\n\tcolor: $color-primary;\n}\n\n.text-color-secondary {\n\tcolor: $color-secondary;\n}\n\n.text-color-success {\n\tcolor: $color-success;\n}\n\n.text-color-accent {\n\tcolor: $color-accent;\n}\n\n.text-color-info {\n\tcolor: $color-info;\n}\n\n.text-color-warning {\n\tcolor: $color-warning;\n}\n\n.text-color-error {\n\tcolor: $color-error;\n}\n",".btn {\n\tfont-family: $font-family-base;\n\tfont-size: $font-size-lg;\n\tfont-weight: $font-weight-semibold;\n\tline-height: $line-height-base;\n\tletter-spacing: $letter-spacing-wide;\n\tpadding: $space-3 $space-lg;\n\tborder-radius: 0;\n\tborder-width: 2px;\n\tborder-left-width: 6px;\n\tborder-style: solid;\n\tborder-color: $color-primary;\n\ttext-transform: uppercase;\n\tbackground-color: transparent;\n\ttransition-duration: .2s;\n\ttransition-property: background-color, border-color, color;\n\n\t&.with-icon {\n\t\tborder-left-width: 48px;\n\t\tposition: relative;\n\n\t\t.ph,\n\t\t.ph-bold {\n\t\t\tposition: absolute;\n\t\t\tcolor: #0a0a0d;\n\t\t\tleft: -48px;\n\t\t\ttop: 0;\n\t\t\tfont-size: 28px;\n\t\t\theight: 100%;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\twidth: 48px;\n\t\t\tjustify-content: center;\n\t\t\ttransition-duration: .2s;\n\t\t\ttransition-property: color, left;\n\t\t}\n\t}\n\n\t&:hover {\n\t\t&.with-icon {\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tleft: -28px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-primary {\n\t\tcolor: $color-primary;\n\t\tborder-color: $color-primary;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-primary;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-secondary {\n\t\tcolor: $color-secondary;\n\t\tborder-color: $color-secondary;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-secondary;\n\t\t\tcolor: $color-text-light;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-light;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-accent {\n\t\tcolor: $color-accent;\n\t\tborder-color: $color-accent;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-accent;\n\t\t\tcolor: $color-text-light;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-light;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-danger {\n\t\tcolor: $color-error;\n\t\tborder-color: $color-error;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-error;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-warning {\n\t\tcolor: $color-warning;\n\t\tborder-color: $color-warning;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-warning;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-success {\n\t\tcolor: $color-success;\n\t\tborder-color: $color-success;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-success;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-info {\n\t\tcolor: $color-info;\n\t\tborder-color: $color-info;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-info;\n\t\t\tcolor: $color-text-light;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-light;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&[disabled] {\n\t\tcolor: $color-text-dark;\n\t\tborder-color: $color-dark;\n\t\tbackground-color: $color-dark;\n\n\t\t&.with-icon {\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tcolor: $color-text-dark;\n\t\t\t}\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-dark;\n\t\t\tcolor: $color-text-dark;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-dark;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.with-icon {\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tleft: -28px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-small {\n\t\tfont-size: $font-size-md;\n\t\tfont-weight: $font-weight-medium;\n\t\tpadding: $space-sm $space-sm;\n\n\t\t&.with-icon {\n\t\t\tborder-left-width: 32px;\n\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tleft: -40px;\n\t\t\t\tfont-size: 22px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-large {\n\t\tfont-size: $font-size-xl;\n\t\tfont-weight: $font-weight-bold;\n\t\tpadding: $space-md $space-xxl;\n\t}\n}\n\n.btn-icon {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\twidth: 30px;\n\theight: 30px;\n\n\tbackground: transparent;\n\tcolor: $color-text-light;\n\tfont-size: $font-size-xl;\n\tborder: 0;\n\n\ttransition-duration: .2s;\n\ttransition-property: color;\n\n\t\n\t.ph {\n\t\ttransform: rotate(0);\n\t\ttransition-duration: .2s;\n\t\ttransition-property: transform;\n\t}\n\n\t&:hover {\n\t\tcolor: $color-text-dark;\n\n\t\t.ph {\n\t\t\ttransform: rotate(90deg);\n\t\t}\n\t}\n}\n",".form-group {\n\t.label {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tfont-size: $font-size-lg;\n\t\tmax-width: 420px;\n\t\tposition: relative;\n\n\t\t.ph {\n\t\t\tposition: absolute;\n\t\t\tcolor: $color-text-light;\n\t\t\tleft: 0;\n\t\t\tbottom: 2px;\n\t\t\tfont-size: 28px;\n\t\t\theight: 56px;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\twidth: 48px;\n\t\t\tjustify-content: center;\n\t\t\ttransition-duration: .2s;\n\t\t\ttransition-property: color, left;\n\t\t}\n\n\t\t.input {\n\t\t\tfont-family: $font-family-base;\n\t\t\tfont-size: $font-size-base;\n\t\t\tfont-weight: $font-weight-medium;\n\t\t\tline-height: $line-height-base;\n\t\t\tletter-spacing: $letter-spacing-wide;\n\t\t\tpadding: $space-3 $space-lg;\n\t\t\tmargin-top: $space-sm;\n\t\t\tborder-radius: 0;\n\t\t\tborder-width: 2px;\n\t\t\tborder-bottom-width: 6px;\n\t\t\tborder-style: solid;\n\t\t\tborder-color: $color-text-light;\n\t\t\tcolor: $color-text-light;\n\t\t\tbackground-color: transparent;\n\t\t\ttransition-duration: .2s;\n\t\t\ttransition-property: background-color, border-color, color;\n\n\t\t\t&:hover {\n\t\t\t\tborder-bottom-color: $color-text-dark;\n\t\t\t}\n\n\t\t\t&:focus {\n\t\t\t\toutline: none;\n\t\t\t\tborder-color: $color-electric-blue;\n\t\t\t}\n\n\t\t\t&::placeholder {\n\t\t\t\tcolor: $color-text-dark;\n\t\t\t}\n\t\t}\n\n\t\ttextarea.input {\n\t\t\theight: 120px;\n\t\t\tline-height: $line-height-snug;\n\t\t\tresize: none;\n\t\t}\n\n\t\t.ph + .input,\n\t\t.ph + .select-wrap .select {\n\t\t\tpadding-left: 42px;\n\t\t}\n\n\t\t.select-wrap {\n\t\t\tmargin-top: $space-sm;\n\t\t}\n\n\t\t.select {\n\t\t\twidth: 100%;\n\t\t\theight: 56px;\n\t\t\tmargin-top: 0;\n\n\t\t\t/* убрать нативную стрелку */\n\t\t\tappearance: none;\n\t\t\t-webkit-appearance: none;\n\t\t\t-moz-appearance: none;\n\n\t\t\t&:focus {\n\t\t\t\toutline: none;\n\t\t\t}\n\n\t\t\toption {\n\t\t\t\tcolor: $color-text-light;\n\t\t\t\tbackground: $color-dark;\n\t\t\t}\n\t\t}\n\n\t\t.select-wrap::after {\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\tright: $space-lg;\n\t\t\tbottom: 18px;\n\t\t\ttransform: translateY(-50%);\n\n\t\t\twidth: 0;\n\t\t\theight: 0;\n\t\t\tborder-left: 8px solid transparent;\n\t\t\tborder-right: 8px solid transparent;\n\t\t\tborder-top: 10px solid $color-text-light;\n\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n}\n\n.radio {\n\tdisplay: inline-flex;\n\tflex-direction: row;\n\tgap: $space-sm;\n\talign-items: center;\n\n\tinput[type=\"radio\"] {\n\t\tdisplay: none;\n\t}\n\n\t.radio-control {\n\t\tdisplay: inline-block;\n\t\tborder-radius: 100%;\n\t\tborder: 2px solid $color-primary;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tbackground: transparent;\n\t\ttransition-duration: .2s;\n\t\ttransition-property: background, border-color;\n\t}\n\n\t&:hover .radio-control {\n\t\tbackground: $color-grey;\n\t}\n\n\tinput[type=\"radio\"]:checked + .radio-control {\n\t\tbackground: $color-primary;\n\t}\n\n\tinput[type=\"radio\"]:disabled + .radio-control {\n\t\tbackground: $color-grey;\n\t\tborder-color: $color-grey;\n\t}\n\n\t.radio-label {\n\t\tfont-size: $font-size-lg;\n\t}\n}\n\n.checkbox {\n\tdisplay: inline-flex;\n\tflex-direction: row;\n\tgap: $space-sm;\n\talign-items: center;\n\n\tinput[type=\"checkbox\"] {\n\t\tdisplay: none;\n\t}\n\n\t.checkbox-control {\n\t\theight: 16px;\n\t\twidth: 30px;\n\t\tborder: 2px solid $color-primary;\n\t\tposition: relative;\n\t\tbackground: transparent;\n\t\ttransition-duration: .2s;\n\t\ttransition-property: border-color, background;\n\t\tdisplay: block;\n\t}\n\n\t.checkbox-control:before {\n\t\tcontent: \"\";\n\t\tdisplay: block;\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\tbackground: $color-primary;\n\t\tposition: absolute;\n\t\tleft: -6px;\n\t\ttop: -4px;\n\t\ttransition-duration: .2s;\n\t\ttransition-property: left, background;\n\t}\n\n\t&:hover .checkbox-control {\n\t\tbackground: $color-grey;\n\t}\n\n\tinput[type=\"checkbox\"]:checked:not(:disabled) + .checkbox-control {\n\t\tbackground: $color-secondary;\n\t\tborder-color: $color-secondary;\n\t}\n\n\tinput[type=\"checkbox\"]:checked + .checkbox-control:before {\n\t\tleft: 12px;\n\t}\n\n\tinput[type=\"checkbox\"]:disabled + .checkbox-control {\n\t\tborder-color: $color-grey;\n\t}\n\n\tinput[type=\"checkbox\"]:disabled + .checkbox-control:before {\n\t\tbackground: $color-grey;\n\t}\n}\n",".list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: $space-1;\n\tlist-style-type: none;\n\tpadding-left: 0;\n\n\t.list-item {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tgap: $space-sm;\n\t\tmargin-left: 0;\n\t}\n\n\t&.list-ordered {\n\t\tlist-style-type: decimal;\n\t\tdisplay: list-item;\n\t\tmargin-left: 30px;\n\n\t\t.list-item {\n\t\t\tdisplay: list-item;\n\t\t}\n\t}\n\n\t&.list-definition {\n\t\tgap: $space-md;\n\n\t\t.list-row {\n\t\t\tborder-left: 2px solid $color-primary;\n\n\t\t\t.list-term::before,\n\t\t\t.list-desc::before {\n\t\t\t\tcontent: \"\";\n\t\t\t\theight: 2px;\n\t\t\t\twidth: $space-3;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 0;\n\t\t\t\tmargin-top: -1px;\n\t\t\t\tdisplay: block;\n\t\t\t\tbackground: $color-primary;\n\t\t\t}\n\n\t\t\t.list-term,\n\t\t\t.list-desc {\n\t\t\t\tposition: relative;\n\t\t\t}\n\n\t\t\t.list-term {\n\t\t\t\tpadding-left: $space-5;\n\t\t\t\tfont-size: $font-size-xl;\n\t\t\t}\n\n\t\t\t.list-desc {\n\t\t\t\tpadding-left: $space-5;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.with-icons {\n\t\t.ph {\n\t\t\t// icon styles if needed\n\t\t}\n\t}\n\n\t&.list-nav {\n\t\tmax-width: 420px;\n\t\twidth: 100%;\n\t\tgap: 0;\n\n\t\t.list-item {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\talign-items: flex-start;\n\t\t\theight: 50px;\n\t\t\tmargin: 0;\n\n\t\t\t.list-action {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\talign-items: center;\n\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: $space-2 $space-3;\n\t\t\t\tborder: 0;\n\n\t\t\t\tfont-size: $font-size-xl;\n\t\t\t\tbackground: $color-dark;\n\t\t\t\tcolor: inherit;\n\n\t\t\t\ttransition-duration: .2s;\n\t\t\t\ttransition-property: background;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: $color-electric-blue;\n\t\t\t\t}\n\n\t\t\t\t.list-label {\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t\tgap: $space-2;\n\t\t\t\t\talign-items: center;\n\t\t\t\t}\n\n\t\t\t\t.list-meta {\n\t\t\t\t\tpadding: $space-2;\n\t\t\t\t\tbackground: $color-neon-green;\n\t\t\t\t\tcolor: $color-black;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.list-item-active {\n\t\t\t\t.list-action {\n\t\t\t\t\tbackground: $color-electric-blue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&.list-actions {\n\t\twidth: 100%;\n\t\tmax-width: 420px;\n\t\tgap: $space-lg;\n\n\t\t.list-item {\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: flex-start;\n\n\t\t\t.list-content {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: $space-2;\n\n\t\t\t\t.list-title {\n\t\t\t\t\tfont-size: $font-size-xl;\n\t\t\t\t\tline-height: $line-height-base;\n\t\t\t\t}\n\n\t\t\t\t.list-subtitle {\n\t\t\t\t\t// subtitle styles\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.list-controls {\n\t\t\t\t// controls styles\n\t\t\t}\n\t\t}\n\t}\n}\n",".badge {\n\tbackground: $color-primary;\n\tcolor: $color-dark;\n\tpadding: $space-1 $space-2;\n\tfont-size: $font-size-base;\n\n\t&.badge-success {\n\t\tbackground: $color-success;\n\t}\n\n\t&.badge-warning {\n\t\tbackground: $color-warning;\n\t}\n\n\t&.badge-error,\n\t&.badge-danger {\n\t\tbackground: $color-error;\n\t}\n\n\t&.badge-info {\n\t\tbackground: $color-info;\n\t\tcolor: $color-text-light;\n\t}\n\n\t&.badge-secondary {\n\t\tbackground: $color-secondary;\n\t\tcolor: $color-text-light;\n\t}\n}\n",".table {\n\ttext-align: left;\n\tborder: 2px solid $color-primary;\n\tpadding: $space-4;\n\n\t.table-caption {\n\t\ttext-align: left;\n\t\tfont-size: $font-size-xl;\n\t\tbackground: $color-primary;\n\t\twidth: max-content;\n\t\tcolor: $color-dark;\n\t\tpadding: $space-1 $space-3;\n\t\tmargin-bottom: 0;\n\t}\n\n\t.table-row {\n\t\tth,\n\t\ttd {\n\t\t\tpadding: $space-3 $space-5;\n\t\t\tfont-size: $font-size-base;\n\t\t}\n\n\t\tth {\n\t\t\t// header cell styles if needed\n\t\t}\n\t}\n\n\t.table-head {\n\t\t// thead styles\n\t}\n\n\t.table-body {\n\t\t// tbody styles\n\t}\n\n\t.table-foot {\n\t\tth,\n\t\ttd {\n\t\t\tpadding-top: $space-4;\n\t\t}\n\t}\n}\n",".toast {\n\tposition: fixed;\n\tbottom: -100px;\n\tright: $space-4;\n\tmax-width: 420px;\n\n\tbackground: $color-dark;\n\tborder: 2px solid $color-text-light;\n\tpadding: 0;\n\topacity: 0;\n\n\ttransition-duration: .25s;\n\ttransition-property: opacity, top, bottom;\n\n\t&.a-show {\n\t\tbottom: $space-4;\n\t\topacity: 1;\n\t}\n\n\t&.a-hide {\n\t\tbottom: $space-4 + 100px;\n\t\topacity: 0;\n\t}\n\n\t.toast-content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 0;\n\n\t\t.toast-title {\n\t\t\tfont-size: $font-size-h3;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tgap: $space-2;\n\t\t\talign-items: center;\n\t\t\tcolor: $color-black;\n\t\t\tbackground: $color-primary;\n\t\t\tpadding: $space-1 $space-2;\n\t\t}\n\n\t\t.toast-text {\n\t\t\tfont-size: $font-size-base;\n\t\t\tpadding: $space-6 $space-4;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\n\t.toast-close {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tcolor: $color-black;\n\t\theight: 40px;\n\t\twidth: 40px;\n\n\t\t&:hover {\n\t\t\tcolor: $color-dark;\n\t\t}\n\t}\n\n\t&.toast-info {\n\t\t// default info styles (inherits primary)\n\t}\n\n\t&.toast-success {\n\t\tborder-color: $color-success;\n\n\t\t.toast-title {\n\t\t\tbackground: $color-success;\n\t\t}\n\t}\n\n\t&.toast-warning {\n\t\tborder-color: $color-warning;\n\n\t\t.toast-title {\n\t\t\tbackground: $color-warning;\n\t\t}\n\t}\n\n\t&.toast-danger {\n\t\tborder-color: $color-error;\n\n\t\t.toast-title {\n\t\t\tbackground: $color-error;\n\t\t}\n\t}\n}\n",".card {\n\tmax-width: 420px;\n\twidth: 100%;\n\tborder: 2px solid $color-text-light;\n\n\t.card-title {\n\t\tcolor: $color-black;\n\t\tbackground: $color-text-light;\n\t\tpadding: $space-2 $space-3;\n\t}\n\n\t.card-content {\n\t\tpadding: $space-4;\n\n\t\t.card-thumb {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tp {\n\t\t\tmargin-top: $space-2;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t.card-footer {\n\t\tpadding: $space-2 $space-4;\n\t\tpadding-bottom: $space-4;\n\t}\n}\n",".modal {\n\tposition: fixed;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tz-index: 1000;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\n\t.modal-backdrop {\n\t\tposition: fixed;\n\t\tz-index: 1010;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\n\t\tbackground: $color-black;\n\t\topacity: 0;\n\n\t\ttransition-duration: .25s;\n\t\ttransition-property: opacity;\n\t}\n\n\t.modal-panel {\n\t\tposition: relative;\n\t\tz-index: 1020;\n\n\t\twidth: 100%;\n\t\tmax-width: 800px;\n\t\theight: auto;\n\t\tmin-height: 400px;\n\t\tmax-height: 800px;\n\n\t\tpadding: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: $space-4;\n\t\tmargin-top: 200px;\n\n\t\tbackground: $color-black;\n\t\tborder: 2px solid $color-text-light;\n\t\topacity: 0;\n\n\t\ttransition-duration: .25s;\n\t\ttransition-property: opacity, margin-top;\n\n\t\t.modal-header {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\tpadding-right: $space-4;\n\n\t\t\t.modal-title {\n\t\t\t\tpadding: $space-3 $space-4;\n\t\t\t\tbackground: $color-text-light;\n\t\t\t\tcolor: $color-black;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t}\n\t\t}\n\n\t\t.modal-body {\n\t\t\tmax-height: 700px;\n\t\t\toverflow-y: auto;\n\t\t\tpadding: $space-5;\n\t\t}\n\n\t\t.modal-footer {\n\t\t\tpadding: $space-5;\n\n\t\t\t.actions {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: row;\n\t\t\t\tjustify-content: flex-end;\n\t\t\t\tgap: $space-4;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.a-show {\n\t\t.modal-backdrop {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.modal-panel {\n\t\t\topacity: 1;\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\n\t&.a-hide {\n\t\t.modal-backdrop {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t.modal-panel {\n\t\t\topacity: 0;\n\t\t\tmargin-top: -200px;\n\t\t}\n\t}\n}\n","/* =========================\n SPACING UTILITIES\n========================= */\n\n@each $key, $value in $spaces {\n\n /* margin */\n .m-#{$key} { margin: $value !important; }\n .mt-#{$key} { margin-top: $value !important; }\n .mr-#{$key} { margin-right: $value !important; }\n .mb-#{$key} { margin-bottom: $value !important; }\n .ml-#{$key} { margin-left: $value !important; }\n .mx-#{$key} {\n margin-left: $value !important;\n margin-right: $value !important;\n }\n .my-#{$key} {\n margin-top: $value !important;\n margin-bottom: $value !important;\n }\n\n /* padding */\n .p-#{$key} { padding: $value !important; }\n .pt-#{$key} { padding-top: $value !important; }\n .pr-#{$key} { padding-right: $value !important; }\n .pb-#{$key} { padding-bottom: $value !important; }\n .pl-#{$key} { padding-left: $value !important; }\n .px-#{$key} {\n padding-left: $value !important;\n padding-right: $value !important;\n }\n .py-#{$key} {\n padding-top: $value !important;\n padding-bottom: $value !important;\n }\n}\n\n.row {\n display: flex;\n flex-direction: row;\n} ","@import \"_spacing.scss\";\n@import \"ui_components/_typography.scss\";\n@import \"ui_components/_palette.scss\";\n@import \"ui_components/_buttons.scss\";\n@import \"ui_components/_forms.scss\";\n@import \"ui_components/_lists.scss\";\n@import \"ui_components/_badges.scss\";\n@import \"ui_components/_tables.scss\";\n@import \"ui_components/_toasts.scss\";\n@import \"ui_components/_cards.scss\";\n@import \"ui_components/_modals.scss\";\n@import \"_utils.scss\";\n\n* {\n\tbox-sizing: border-box;\n}\n\n*::-webkit-scrollbar {\n\twidth: 10px;\n}\n\n*::-webkit-scrollbar-track {\n\twidth: 10px;\n\tbackground: $color-black;\n\tcursor: pointer;\n}\n\n*::-webkit-scrollbar-thumb {\n\twidth: 10px;\n\tbackground: $color-grey;\n\tcursor: default;\n}\n\n*::-webkit-scrollbar-corner {\n\tbackground: transparent;\n\theight: 1px;\n}\n\n*::-webkit-scrollbar-button {\n\tdisplay: none;\n}\n\n*::-webkit-scrollbar-track-piece {}\n*::-webkit-resizer {}","* {\n\tpadding: 0;\n\tmargin: 0;\n}\n\nhtml, body {\n font-family: \"IBM Plex Mono\", monospace;\n font-weight: 400;\n}\n\nbody {\n\tbackground-color: $color-black;\n\tcolor: $color-text-light;\n\n\tfont-size: 15px;\n line-height: 1.45;\n letter-spacing: 0.01em;\n}\n\n.load-screen {\n\tdisplay: none;\n\n\t&.a-show {\n\t\tdisplay: block;\n\t}\n}\n\n.error-screen {\n\tdisplay: none;\n\n\t&.a-show {\n\t\tdisplay: block;\n\t}\n}\n\n.screen {\n\tdisplay: none;\n\n\t&.a-show {\n\t\tdisplay: block;\n\t}\n}\n\n@import \"app/_hud.scss\";",".hud {\n\twidth: 100%;\n\tpadding: $space-5;\n\n\t& > .row {\n\t\tjustify-content: space-between;\n align-items: center;\n gap: $space-4;\n flex-wrap: wrap;\n\t}\n\n\t.nav-toggle {\n\t\tfont-size: 42px;\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tbackground: $color-text-light;\n\t\tcolor: $color-black;\n\n\t\t&:hover {\n\t\t\tcolor: $color-accent;\n\t\t}\n\t}\n\n\t.app-title {\n\t\tpadding: $space-2 $space-4;\n\t\ttext-transform: uppercase;\n\t}\n}"]} \ No newline at end of file +{"version":3,"sources":["_fonts.scss","_spacing.scss","main.css","ui_components/_typography.scss","ui_components/_palette.scss","ui_components/_loader.scss","ui_components/_buttons.scss","ui_components/_forms.scss","ui_components/_lists.scss","ui_components/_badges.scss","ui_components/_tables.scss","ui_components/_toasts.scss","ui_components/_cards.scss","ui_components/_modals.scss","_utils.scss","_ui.scss","_app.scss","app/_hud.scss","app/_load-screen.scss","app/_error-screen.scss"],"names":[],"mappings":"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","file":"main.css","sourcesContent":["@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf\") format(\"truetype\");\n font-weight: 500;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf\") format(\"truetype\");\n font-weight: 600;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf\") format(\"truetype\");\n font-weight: 700;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: italic;\n font-display: swap;\n}\n","/* =========================\n\t SPACING SCALE\n========================= */\n\n$space-0: 0;\n$space-1: 5px;\n$space-2: 8px;\n$space-3: 12px;\n$space-4: 15px;\n$space-5: 18px;\n$space-6: 22px;\n$space-7: 26px;\n$space-8: 34px;\n$space-9: 42px;\n$space-10: 48px;\n$space-11: 64px;\n$space-12: 80px;\n\n/* aliases for readability */\n$space-xs: $space-1;\n$space-sm: $space-2;\n$space-md: $space-4;\n$space-lg: $space-6;\n$space-xl: $space-8;\n$space-xxl: $space-10;\n\n/* map — for utilities generation */\n$spaces: (\n\t0: $space-0,\n\t1: $space-1,\n\t2: $space-2,\n\t3: $space-3,\n\t4: $space-4,\n\t5: $space-5,\n\t6: $space-6,\n\t7: $space-7,\n\t8: $space-8,\n\t9: $space-9,\n\t10: $space-10\n);\n\n/* =========================\n\t BASE LAYOUT\n========================= */\n\n.container {\n\tpadding: $space-xl;\n}\n\n.section {\n\tmargin-bottom: $space-xxl;\n}\n\n.section-title {\n\tmargin-bottom: $space-xl;\n}\n\n.block {\n\tmargin-bottom: $space-xl;\n}\n\n.block-title {\n\tmargin-bottom: $space-lg;\n}\n\n/* =========================\n\t TEXT & CONTENT\n========================= */\n\np,\n.text {\n\tmargin-bottom: $space-md;\n}\n\n.hint {\n\tmargin-top: $space-sm;\n}\n\n/* =========================\n\t LISTS\n========================= */\n\n.list {\n\tpadding-left: $space-lg;\n\tmargin-bottom: $space-md;\n}\n\n.list-item {\n\tmargin-bottom: $space-sm;\n}\n\n.list-nested {\n\tmargin-top: $space-sm;\n}\n\n/* =========================\n\t TABLES\n========================= */\n\n.table {\n\tmargin-bottom: $space-lg;\n}\n\n.table-caption {\n\tmargin-bottom: $space-sm;\n}\n\n/* =========================\n\t FORMS\n========================= */\n\n.form-group {\n\tmargin-bottom: $space-md;\n}\n\n.label {\n\tmargin-bottom: $space-xs;\n\tdisplay: block;\n}\n\n.input,\n.textarea,\n.select {\n\tmargin-top: $space-xs;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n\n.toast {\n\tpadding: $space-md;\n}\n\n.toast-stack {\n\tgap: $space-sm;\n}\n","@charset \"UTF-8\";\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf\") format(\"truetype\");\n font-weight: 500;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf\") format(\"truetype\");\n font-weight: 600;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf\") format(\"truetype\");\n font-weight: 700;\n font-style: normal;\n font-display: swap;\n}\n@font-face {\n font-family: \"IBM Plex Mono\";\n src: url(\"/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf\") format(\"truetype\");\n font-weight: 400;\n font-style: italic;\n font-display: swap;\n}\n/* =========================\n\t SPACING SCALE\n========================= */\n/* aliases for readability */\n/* map — for utilities generation */\n/* =========================\n\t BASE LAYOUT\n========================= */\n.container {\n padding: 34px;\n}\n\n.section {\n margin-bottom: 48px;\n}\n\n.section-title {\n margin-bottom: 34px;\n}\n\n.block {\n margin-bottom: 34px;\n}\n\n.block-title {\n margin-bottom: 22px;\n}\n\n/* =========================\n\t TEXT & CONTENT\n========================= */\np,\n.text {\n margin-bottom: 15px;\n}\n\n.hint {\n margin-top: 8px;\n}\n\n/* =========================\n\t LISTS\n========================= */\n.list {\n padding-left: 22px;\n margin-bottom: 15px;\n}\n\n.list-item {\n margin-bottom: 8px;\n}\n\n.list-nested {\n margin-top: 8px;\n}\n\n/* =========================\n\t TABLES\n========================= */\n.table {\n margin-bottom: 22px;\n}\n\n.table-caption {\n margin-bottom: 8px;\n}\n\n/* =========================\n\t FORMS\n========================= */\n.form-group {\n margin-bottom: 15px;\n}\n\n.label {\n margin-bottom: 5px;\n display: block;\n}\n\n.input,\n.textarea,\n.select {\n margin-top: 5px;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n.toast {\n padding: 15px;\n}\n\n.toast-stack {\n gap: 8px;\n}\n\n/* =========================\n\t FONT FAMILIES\n========================= */\n/* =========================\n\t FONT WEIGHTS\n========================= */\n/* =========================\n\t FONT SIZES (scale)\n========================= */\n/* =========================\n\t LINE HEIGHTS\n========================= */\n/* =========================\n\t LETTER SPACING\n========================= */\n/* =========================\n\t BASE TYPOGRAPHY\n========================= */\nhtml {\n font-size: 100%;\n}\n\nbody {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.6;\n letter-spacing: 0;\n}\n\n/* =========================\n\t HEADINGS\n========================= */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-family: \"IBM Plex Mono\", monospace;\n font-weight: 600;\n line-height: 1.25;\n margin: 0;\n}\nh1.contrast,\nh2.contrast,\nh3.contrast,\nh4.contrast,\nh5.contrast,\nh6.contrast {\n background: #F8F8F8;\n color: #0A0A0D;\n}\n\nh1 {\n font-size: 36px;\n letter-spacing: -0.01em;\n}\n\nh2 {\n font-size: 28px;\n}\n\nh3 {\n font-size: 24px;\n}\n\nh4 {\n font-size: 20px;\n}\n\nh5 {\n font-size: 18px;\n}\n\nh6 {\n font-size: 16px;\n font-weight: 500;\n}\n\n/* =========================\n\t TEXT VARIANTS\n========================= */\n.text,\np {\n font-size: 16px;\n line-height: 1.6;\n}\n\n.text-sm {\n font-size: 13px;\n line-height: 1.4;\n}\n\n.text-lg {\n font-size: 17px;\n line-height: 1.6;\n}\n\n.text-muted {\n font-size: 13px;\n color: #AAAEB2;\n}\n\n.text-strong,\nstrong {\n font-weight: 600;\n}\n\n.text-bold {\n font-weight: 700;\n}\n\n.text-italic,\nem {\n font-style: italic;\n}\n\n/* =========================\n\t CODE / MONO\n========================= */\ncode,\npre,\n.code {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 16px;\n line-height: 1.4;\n background-color: #1A1A23;\n}\n\npre {\n font-size: 16px;\n line-height: 1.6;\n white-space: pre-wrap;\n}\n\n/* =========================\n\t LINKS\n========================= */\na {\n font-weight: 500;\n text-decoration: none;\n}\n\n.link {\n font-size: inherit;\n font-weight: 500;\n}\n\n/* =========================\n\t LABELS / META\n========================= */\n.label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n}\n\n.hint,\n.meta {\n font-size: 12px;\n line-height: 1.4;\n}\n\n/* =========================\n\t TABLE TEXT\n========================= */\n.table {\n font-size: 13px;\n line-height: 1.4;\n}\n.table th {\n font-weight: 600;\n}\n.table td {\n font-weight: 400;\n}\n\n/* =========================\n\t LISTS\n========================= */\n.list {\n font-size: 16px;\n line-height: 1.6;\n}\n\n.list-item {\n font-size: inherit;\n}\n\n/* =========================\n\t MODALS\n========================= */\n.modal-title {\n font-size: 20px;\n font-weight: 600;\n}\n\n.modal-body {\n font-size: 16px;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n.toast-title {\n font-size: 14px;\n font-weight: 600;\n}\n\n.toast-text {\n font-size: 13px;\n line-height: 1.4;\n}\n\n.palette {\n display: flex;\n flex-direction: row;\n gap: 8px;\n}\n.palette .color .color-box {\n width: 100px;\n height: 80px;\n}\n\n/* BACKGROUND COLORS */\nbody .bg-primary {\n background: #F8F8F8;\n}\nbody .bg-secondary {\n background: #00B3FF;\n}\nbody .bg-success {\n background: #00FFAA;\n}\nbody .bg-accent {\n background: #ff6f30;\n}\nbody .bg-info {\n background: #8A2CE2;\n}\nbody .bg-warning {\n background: #FFD900;\n}\nbody .bg-error {\n background: #FF3C00;\n}\nbody {\n /* TEXT COLORS */\n}\nbody .text-color-primary {\n color: #F8F8F8;\n}\nbody .text-color-secondary {\n color: #00B3FF;\n}\nbody .text-color-success {\n color: #00FFAA;\n}\nbody .text-color-accent {\n color: #ff6f30;\n}\nbody .text-color-info {\n color: #8A2CE2;\n}\nbody .text-color-warning {\n color: #FFD900;\n}\nbody .text-color-error {\n color: #FF3C00;\n}\n\n/* HTML:
*/\n.loader {\n width: 45px;\n aspect-ratio: 1;\n --c:no-repeat linear-gradient(#FF3C00 0 0);\n background: var(--c) 0 0, var(--c) 0 100%, var(--c) 50% 0, var(--c) 50% 100%, var(--c) 100% 0, var(--c) 100% 100%;\n animation: l12 1s infinite;\n}\n\n@keyframes l12 {\n 0%, 100% {\n background-size: 20% 50%;\n }\n 16.67% {\n background-size: 20% 30%, 20% 30%, 20% 50%, 20% 50%, 20% 50%, 20% 50%;\n }\n 33.33% {\n background-size: 20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 50%, 20% 50%;\n }\n 50% {\n background-size: 20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 30%;\n }\n 66.67% {\n background-size: 20% 50%, 20% 50%, 20% 30%, 20% 30%, 20% 30%, 20% 30%;\n }\n 83.33% {\n background-size: 20% 50%, 20% 50%, 20% 50%, 20% 50%, 20% 30%, 20% 30%;\n }\n}\n.btn {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 17px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.04em;\n padding: 12px 22px;\n border-radius: 0;\n border-width: 2px;\n border-left-width: 6px;\n border-style: solid;\n border-color: #F8F8F8;\n text-transform: uppercase;\n background-color: transparent;\n transition-duration: 0.2s;\n transition-property: background-color, border-color, color;\n}\n.btn.with-icon {\n border-left-width: 48px;\n position: relative;\n}\n.btn.with-icon .ph,\n.btn.with-icon .ph-bold {\n position: absolute;\n color: #0a0a0d;\n left: -48px;\n top: 0;\n font-size: 28px;\n height: 100%;\n display: inline-flex;\n align-items: center;\n width: 48px;\n justify-content: center;\n transition-duration: 0.2s;\n transition-property: color, left;\n}\n.btn:hover.with-icon .ph,\n.btn:hover.with-icon .ph-bold {\n left: -28px;\n}\n.btn.btn-primary {\n color: #F8F8F8;\n border-color: #F8F8F8;\n}\n.btn.btn-primary:hover {\n background-color: #F8F8F8;\n color: #0A0A0D;\n}\n.btn.btn-secondary {\n color: #00B3FF;\n border-color: #00B3FF;\n}\n.btn.btn-secondary:hover {\n background-color: #00B3FF;\n color: #F8F8F8;\n}\n.btn.btn-secondary:hover.with-icon .ph,\n.btn.btn-secondary:hover.with-icon .ph-bold {\n color: #F8F8F8;\n}\n.btn.btn-accent {\n color: #ff6f30;\n border-color: #ff6f30;\n}\n.btn.btn-accent:hover {\n background-color: #ff6f30;\n color: #F8F8F8;\n}\n.btn.btn-accent:hover.with-icon .ph,\n.btn.btn-accent:hover.with-icon .ph-bold {\n color: #F8F8F8;\n}\n.btn.btn-danger {\n color: #FF3C00;\n border-color: #FF3C00;\n}\n.btn.btn-danger:hover {\n background-color: #FF3C00;\n color: #0A0A0D;\n}\n.btn.btn-warning {\n color: #FFD900;\n border-color: #FFD900;\n}\n.btn.btn-warning:hover {\n background-color: #FFD900;\n color: #0A0A0D;\n}\n.btn.btn-success {\n color: #00FFAA;\n border-color: #00FFAA;\n}\n.btn.btn-success:hover {\n background-color: #00FFAA;\n color: #0A0A0D;\n}\n.btn.btn-info {\n color: #8A2CE2;\n border-color: #8A2CE2;\n}\n.btn.btn-info:hover {\n background-color: #8A2CE2;\n color: #F8F8F8;\n}\n.btn.btn-info:hover.with-icon .ph,\n.btn.btn-info:hover.with-icon .ph-bold {\n color: #F8F8F8;\n}\n.btn[disabled] {\n color: #AAAEB2;\n border-color: #1A1A23;\n background-color: #1A1A23;\n}\n.btn[disabled].with-icon .ph,\n.btn[disabled].with-icon .ph-bold {\n color: #AAAEB2;\n}\n.btn[disabled]:hover {\n background-color: #1A1A23;\n color: #AAAEB2;\n}\n.btn[disabled]:hover.with-icon .ph,\n.btn[disabled]:hover.with-icon .ph-bold {\n color: #AAAEB2;\n}\n.btn[disabled].with-icon .ph,\n.btn[disabled].with-icon .ph-bold {\n left: -28px;\n}\n.btn.btn-small {\n font-size: 14px;\n font-weight: 500;\n padding: 8px 8px;\n}\n.btn.btn-small.with-icon {\n border-left-width: 32px;\n}\n.btn.btn-small.with-icon .ph,\n.btn.btn-small.with-icon .ph-bold {\n left: -40px;\n font-size: 22px;\n}\n.btn.btn-large {\n font-size: 20px;\n font-weight: 700;\n padding: 15px 48px;\n}\n\n.btn-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 30px;\n height: 30px;\n background: transparent;\n color: #F8F8F8;\n font-size: 20px;\n border: 0;\n transition-duration: 0.2s;\n transition-property: color;\n}\n.btn-icon .ph {\n transform: rotate(0);\n transition-duration: 0.2s;\n transition-property: transform;\n}\n.btn-icon:hover {\n color: #AAAEB2;\n}\n.btn-icon:hover .ph {\n transform: rotate(90deg);\n}\n\n.form-group .label {\n display: flex;\n flex-direction: column;\n font-size: 17px;\n max-width: 420px;\n position: relative;\n}\n.form-group .label .ph {\n position: absolute;\n color: #F8F8F8;\n left: 0;\n bottom: 2px;\n font-size: 28px;\n height: 56px;\n display: inline-flex;\n align-items: center;\n width: 48px;\n justify-content: center;\n transition-duration: 0.2s;\n transition-property: color, left;\n}\n.form-group .label .input {\n font-family: \"IBM Plex Mono\", monospace;\n font-size: 16px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.04em;\n padding: 12px 22px;\n margin-top: 8px;\n border-radius: 0;\n border-width: 2px;\n border-bottom-width: 6px;\n border-style: solid;\n border-color: #F8F8F8;\n color: #F8F8F8;\n background-color: transparent;\n transition-duration: 0.2s;\n transition-property: background-color, border-color, color;\n}\n.form-group .label .input:hover {\n border-bottom-color: #AAAEB2;\n}\n.form-group .label .input:focus {\n outline: none;\n border-color: #00B3FF;\n}\n.form-group .label .input::placeholder {\n color: #AAAEB2;\n}\n.form-group .label textarea.input {\n height: 120px;\n line-height: 1.25;\n resize: none;\n}\n.form-group .label .ph + .input,\n.form-group .label .ph + .select-wrap .select {\n padding-left: 42px;\n}\n.form-group .label .select-wrap {\n margin-top: 8px;\n}\n.form-group .label .select {\n width: 100%;\n height: 56px;\n margin-top: 0;\n /* убрать нативную стрелку */\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n.form-group .label .select:focus {\n outline: none;\n}\n.form-group .label .select option {\n color: #F8F8F8;\n background: #1A1A23;\n}\n.form-group .label .select-wrap::after {\n content: \"\";\n position: absolute;\n right: 22px;\n bottom: 18px;\n transform: translateY(-50%);\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-top: 10px solid #F8F8F8;\n pointer-events: none;\n}\n\n.radio {\n display: inline-flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n}\n.radio input[type=radio] {\n display: none;\n}\n.radio .radio-control {\n display: inline-block;\n border-radius: 100%;\n border: 2px solid #F8F8F8;\n width: 20px;\n height: 20px;\n background: transparent;\n transition-duration: 0.2s;\n transition-property: background, border-color;\n}\n.radio:hover .radio-control {\n background: #4A4A57;\n}\n.radio input[type=radio]:checked + .radio-control {\n background: #F8F8F8;\n}\n.radio input[type=radio]:disabled + .radio-control {\n background: #4A4A57;\n border-color: #4A4A57;\n}\n.radio .radio-label {\n font-size: 17px;\n}\n\n.checkbox {\n display: inline-flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n}\n.checkbox input[type=checkbox] {\n display: none;\n}\n.checkbox .checkbox-control {\n height: 16px;\n width: 30px;\n border: 2px solid #F8F8F8;\n position: relative;\n background: transparent;\n transition-duration: 0.2s;\n transition-property: border-color, background;\n display: block;\n}\n.checkbox .checkbox-control:before {\n content: \"\";\n display: block;\n height: 20px;\n width: 20px;\n background: #F8F8F8;\n position: absolute;\n left: -6px;\n top: -4px;\n transition-duration: 0.2s;\n transition-property: left, background;\n}\n.checkbox:hover .checkbox-control {\n background: #4A4A57;\n}\n.checkbox input[type=checkbox]:checked:not(:disabled) + .checkbox-control {\n background: #00B3FF;\n border-color: #00B3FF;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-control:before {\n left: 12px;\n}\n.checkbox input[type=checkbox]:disabled + .checkbox-control {\n border-color: #4A4A57;\n}\n.checkbox input[type=checkbox]:disabled + .checkbox-control:before {\n background: #4A4A57;\n}\n\n.list {\n display: flex;\n flex-direction: column;\n gap: 5px;\n list-style-type: none;\n padding-left: 0;\n}\n.list .list-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n margin-left: 0;\n}\n.list.list-ordered {\n list-style-type: decimal;\n display: list-item;\n margin-left: 30px;\n}\n.list.list-ordered .list-item {\n display: list-item;\n}\n.list.list-definition {\n gap: 15px;\n}\n.list.list-definition .list-row {\n border-left: 2px solid #F8F8F8;\n}\n.list.list-definition .list-row .list-term::before,\n.list.list-definition .list-row .list-desc::before {\n content: \"\";\n height: 2px;\n width: 12px;\n position: absolute;\n top: 50%;\n left: 0;\n margin-top: -1px;\n display: block;\n background: #F8F8F8;\n}\n.list.list-definition .list-row .list-term,\n.list.list-definition .list-row .list-desc {\n position: relative;\n}\n.list.list-definition .list-row .list-term {\n padding-left: 18px;\n font-size: 20px;\n}\n.list.list-definition .list-row .list-desc {\n padding-left: 18px;\n}\n.list.list-nav {\n max-width: 420px;\n width: 100%;\n gap: 0;\n}\n.list.list-nav .list-item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n height: 50px;\n margin: 0;\n}\n.list.list-nav .list-item .list-action {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 8px 12px;\n border: 0;\n font-size: 20px;\n background: #1A1A23;\n color: inherit;\n transition-duration: 0.2s;\n transition-property: background;\n}\n.list.list-nav .list-item .list-action:hover {\n background: #00B3FF;\n}\n.list.list-nav .list-item .list-action .list-label {\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n}\n.list.list-nav .list-item .list-action .list-meta {\n padding: 8px;\n background: #00FFAA;\n color: #0A0A0D;\n display: flex;\n}\n.list.list-nav .list-item.list-item-active .list-action {\n background: #00B3FF;\n}\n.list.list-actions {\n width: 100%;\n max-width: 420px;\n gap: 22px;\n}\n.list.list-actions .list-item {\n justify-content: space-between;\n align-items: flex-start;\n}\n.list.list-actions .list-item .list-content {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.list.list-actions .list-item .list-content .list-title {\n font-size: 20px;\n line-height: 1;\n}\n.badge {\n background: #F8F8F8;\n color: #1A1A23;\n padding: 5px 8px;\n font-size: 16px;\n}\n.badge.badge-success {\n background: #00FFAA;\n}\n.badge.badge-warning {\n background: #FFD900;\n}\n.badge.badge-error, .badge.badge-danger {\n background: #FF3C00;\n}\n.badge.badge-info {\n background: #8A2CE2;\n color: #F8F8F8;\n}\n.badge.badge-secondary {\n background: #00B3FF;\n color: #F8F8F8;\n}\n\n.table {\n text-align: left;\n border: 2px solid #F8F8F8;\n padding: 15px;\n}\n.table .table-caption {\n text-align: left;\n font-size: 20px;\n background: #F8F8F8;\n width: max-content;\n color: #1A1A23;\n padding: 5px 12px;\n margin-bottom: 0;\n}\n.table .table-row th,\n.table .table-row td {\n padding: 12px 18px;\n font-size: 16px;\n}\n.table .table-foot th,\n.table .table-foot td {\n padding-top: 15px;\n}\n\n.toast {\n position: fixed;\n bottom: -100px;\n right: 15px;\n max-width: 420px;\n background: #1A1A23;\n border: 2px solid #F8F8F8;\n padding: 0;\n opacity: 0;\n transition-duration: 0.25s;\n transition-property: opacity, top, bottom;\n}\n.toast.a-show {\n bottom: 15px;\n opacity: 1;\n}\n.toast.a-hide {\n bottom: 115px;\n opacity: 0;\n}\n.toast .toast-content {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.toast .toast-content .toast-title {\n font-size: 24px;\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n color: #0A0A0D;\n background: #F8F8F8;\n padding: 5px 8px;\n}\n.toast .toast-content .toast-text {\n font-size: 16px;\n padding: 22px 15px;\n margin: 0;\n}\n.toast .toast-close {\n position: absolute;\n top: 0;\n right: 0;\n color: #0A0A0D;\n height: 40px;\n width: 40px;\n}\n.toast .toast-close:hover {\n color: #1A1A23;\n}\n.toast.toast-success {\n border-color: #00FFAA;\n}\n.toast.toast-success .toast-title {\n background: #00FFAA;\n}\n.toast.toast-warning {\n border-color: #FFD900;\n}\n.toast.toast-warning .toast-title {\n background: #FFD900;\n}\n.toast.toast-danger {\n border-color: #FF3C00;\n}\n.toast.toast-danger .toast-title {\n background: #FF3C00;\n}\n\n.card {\n max-width: 420px;\n width: 100%;\n border: 2px solid #F8F8F8;\n}\n.card .card-title {\n color: #0A0A0D;\n background: #F8F8F8;\n padding: 8px 12px;\n}\n.card .card-content {\n padding: 15px;\n}\n.card .card-content .card-thumb {\n width: 100%;\n}\n.card .card-content p {\n margin-top: 8px;\n margin-bottom: 0;\n}\n.card .card-footer {\n padding: 8px 15px;\n padding-bottom: 15px;\n}\n\n.modal {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n.modal .modal-backdrop {\n position: fixed;\n z-index: 1010;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: #0A0A0D;\n opacity: 0;\n transition-duration: 0.25s;\n transition-property: opacity;\n}\n.modal .modal-panel {\n position: relative;\n z-index: 1020;\n width: 100%;\n max-width: 800px;\n height: auto;\n min-height: 400px;\n max-height: 800px;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 15px;\n margin-top: 200px;\n background: #0A0A0D;\n border: 2px solid #F8F8F8;\n opacity: 0;\n transition-duration: 0.25s;\n transition-property: opacity, margin-top;\n}\n.modal .modal-panel .modal-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding-right: 15px;\n}\n.modal .modal-panel .modal-header .modal-title {\n padding: 12px 15px;\n background: #F8F8F8;\n color: #0A0A0D;\n text-transform: uppercase;\n}\n.modal .modal-panel .modal-body {\n max-height: 700px;\n overflow-y: auto;\n padding: 18px;\n}\n.modal .modal-panel .modal-footer {\n padding: 18px;\n}\n.modal .modal-panel .modal-footer .actions {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 15px;\n width: 100%;\n}\n.modal.a-show .modal-backdrop {\n opacity: 1;\n}\n.modal.a-show .modal-panel {\n opacity: 1;\n margin-top: 0;\n}\n.modal.a-hide .modal-backdrop {\n opacity: 0;\n}\n.modal.a-hide .modal-panel {\n opacity: 0;\n margin-top: -200px;\n}\n\n/* =========================\n SPACING UTILITIES\n========================= */\n/* margin */\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mr-0 {\n margin-right: 0 !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0 {\n margin-left: 0 !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n/* padding */\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pr-0 {\n padding-right: 0 !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0 {\n padding-left: 0 !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n/* margin */\n.m-1 {\n margin: 5px !important;\n}\n\n.mt-1 {\n margin-top: 5px !important;\n}\n\n.mr-1 {\n margin-right: 5px !important;\n}\n\n.mb-1 {\n margin-bottom: 5px !important;\n}\n\n.ml-1 {\n margin-left: 5px !important;\n}\n\n.mx-1 {\n margin-left: 5px !important;\n margin-right: 5px !important;\n}\n\n.my-1 {\n margin-top: 5px !important;\n margin-bottom: 5px !important;\n}\n\n/* padding */\n.p-1 {\n padding: 5px !important;\n}\n\n.pt-1 {\n padding-top: 5px !important;\n}\n\n.pr-1 {\n padding-right: 5px !important;\n}\n\n.pb-1 {\n padding-bottom: 5px !important;\n}\n\n.pl-1 {\n padding-left: 5px !important;\n}\n\n.px-1 {\n padding-left: 5px !important;\n padding-right: 5px !important;\n}\n\n.py-1 {\n padding-top: 5px !important;\n padding-bottom: 5px !important;\n}\n\n/* margin */\n.m-2 {\n margin: 8px !important;\n}\n\n.mt-2 {\n margin-top: 8px !important;\n}\n\n.mr-2 {\n margin-right: 8px !important;\n}\n\n.mb-2 {\n margin-bottom: 8px !important;\n}\n\n.ml-2 {\n margin-left: 8px !important;\n}\n\n.mx-2 {\n margin-left: 8px !important;\n margin-right: 8px !important;\n}\n\n.my-2 {\n margin-top: 8px !important;\n margin-bottom: 8px !important;\n}\n\n/* padding */\n.p-2 {\n padding: 8px !important;\n}\n\n.pt-2 {\n padding-top: 8px !important;\n}\n\n.pr-2 {\n padding-right: 8px !important;\n}\n\n.pb-2 {\n padding-bottom: 8px !important;\n}\n\n.pl-2 {\n padding-left: 8px !important;\n}\n\n.px-2 {\n padding-left: 8px !important;\n padding-right: 8px !important;\n}\n\n.py-2 {\n padding-top: 8px !important;\n padding-bottom: 8px !important;\n}\n\n/* margin */\n.m-3 {\n margin: 12px !important;\n}\n\n.mt-3 {\n margin-top: 12px !important;\n}\n\n.mr-3 {\n margin-right: 12px !important;\n}\n\n.mb-3 {\n margin-bottom: 12px !important;\n}\n\n.ml-3 {\n margin-left: 12px !important;\n}\n\n.mx-3 {\n margin-left: 12px !important;\n margin-right: 12px !important;\n}\n\n.my-3 {\n margin-top: 12px !important;\n margin-bottom: 12px !important;\n}\n\n/* padding */\n.p-3 {\n padding: 12px !important;\n}\n\n.pt-3 {\n padding-top: 12px !important;\n}\n\n.pr-3 {\n padding-right: 12px !important;\n}\n\n.pb-3 {\n padding-bottom: 12px !important;\n}\n\n.pl-3 {\n padding-left: 12px !important;\n}\n\n.px-3 {\n padding-left: 12px !important;\n padding-right: 12px !important;\n}\n\n.py-3 {\n padding-top: 12px !important;\n padding-bottom: 12px !important;\n}\n\n/* margin */\n.m-4 {\n margin: 15px !important;\n}\n\n.mt-4 {\n margin-top: 15px !important;\n}\n\n.mr-4 {\n margin-right: 15px !important;\n}\n\n.mb-4 {\n margin-bottom: 15px !important;\n}\n\n.ml-4 {\n margin-left: 15px !important;\n}\n\n.mx-4 {\n margin-left: 15px !important;\n margin-right: 15px !important;\n}\n\n.my-4 {\n margin-top: 15px !important;\n margin-bottom: 15px !important;\n}\n\n/* padding */\n.p-4 {\n padding: 15px !important;\n}\n\n.pt-4 {\n padding-top: 15px !important;\n}\n\n.pr-4 {\n padding-right: 15px !important;\n}\n\n.pb-4 {\n padding-bottom: 15px !important;\n}\n\n.pl-4 {\n padding-left: 15px !important;\n}\n\n.px-4 {\n padding-left: 15px !important;\n padding-right: 15px !important;\n}\n\n.py-4 {\n padding-top: 15px !important;\n padding-bottom: 15px !important;\n}\n\n/* margin */\n.m-5 {\n margin: 18px !important;\n}\n\n.mt-5 {\n margin-top: 18px !important;\n}\n\n.mr-5 {\n margin-right: 18px !important;\n}\n\n.mb-5 {\n margin-bottom: 18px !important;\n}\n\n.ml-5 {\n margin-left: 18px !important;\n}\n\n.mx-5 {\n margin-left: 18px !important;\n margin-right: 18px !important;\n}\n\n.my-5 {\n margin-top: 18px !important;\n margin-bottom: 18px !important;\n}\n\n/* padding */\n.p-5 {\n padding: 18px !important;\n}\n\n.pt-5 {\n padding-top: 18px !important;\n}\n\n.pr-5 {\n padding-right: 18px !important;\n}\n\n.pb-5 {\n padding-bottom: 18px !important;\n}\n\n.pl-5 {\n padding-left: 18px !important;\n}\n\n.px-5 {\n padding-left: 18px !important;\n padding-right: 18px !important;\n}\n\n.py-5 {\n padding-top: 18px !important;\n padding-bottom: 18px !important;\n}\n\n/* margin */\n.m-6 {\n margin: 22px !important;\n}\n\n.mt-6 {\n margin-top: 22px !important;\n}\n\n.mr-6 {\n margin-right: 22px !important;\n}\n\n.mb-6 {\n margin-bottom: 22px !important;\n}\n\n.ml-6 {\n margin-left: 22px !important;\n}\n\n.mx-6 {\n margin-left: 22px !important;\n margin-right: 22px !important;\n}\n\n.my-6 {\n margin-top: 22px !important;\n margin-bottom: 22px !important;\n}\n\n/* padding */\n.p-6 {\n padding: 22px !important;\n}\n\n.pt-6 {\n padding-top: 22px !important;\n}\n\n.pr-6 {\n padding-right: 22px !important;\n}\n\n.pb-6 {\n padding-bottom: 22px !important;\n}\n\n.pl-6 {\n padding-left: 22px !important;\n}\n\n.px-6 {\n padding-left: 22px !important;\n padding-right: 22px !important;\n}\n\n.py-6 {\n padding-top: 22px !important;\n padding-bottom: 22px !important;\n}\n\n/* margin */\n.m-7 {\n margin: 26px !important;\n}\n\n.mt-7 {\n margin-top: 26px !important;\n}\n\n.mr-7 {\n margin-right: 26px !important;\n}\n\n.mb-7 {\n margin-bottom: 26px !important;\n}\n\n.ml-7 {\n margin-left: 26px !important;\n}\n\n.mx-7 {\n margin-left: 26px !important;\n margin-right: 26px !important;\n}\n\n.my-7 {\n margin-top: 26px !important;\n margin-bottom: 26px !important;\n}\n\n/* padding */\n.p-7 {\n padding: 26px !important;\n}\n\n.pt-7 {\n padding-top: 26px !important;\n}\n\n.pr-7 {\n padding-right: 26px !important;\n}\n\n.pb-7 {\n padding-bottom: 26px !important;\n}\n\n.pl-7 {\n padding-left: 26px !important;\n}\n\n.px-7 {\n padding-left: 26px !important;\n padding-right: 26px !important;\n}\n\n.py-7 {\n padding-top: 26px !important;\n padding-bottom: 26px !important;\n}\n\n/* margin */\n.m-8 {\n margin: 34px !important;\n}\n\n.mt-8 {\n margin-top: 34px !important;\n}\n\n.mr-8 {\n margin-right: 34px !important;\n}\n\n.mb-8 {\n margin-bottom: 34px !important;\n}\n\n.ml-8 {\n margin-left: 34px !important;\n}\n\n.mx-8 {\n margin-left: 34px !important;\n margin-right: 34px !important;\n}\n\n.my-8 {\n margin-top: 34px !important;\n margin-bottom: 34px !important;\n}\n\n/* padding */\n.p-8 {\n padding: 34px !important;\n}\n\n.pt-8 {\n padding-top: 34px !important;\n}\n\n.pr-8 {\n padding-right: 34px !important;\n}\n\n.pb-8 {\n padding-bottom: 34px !important;\n}\n\n.pl-8 {\n padding-left: 34px !important;\n}\n\n.px-8 {\n padding-left: 34px !important;\n padding-right: 34px !important;\n}\n\n.py-8 {\n padding-top: 34px !important;\n padding-bottom: 34px !important;\n}\n\n/* margin */\n.m-9 {\n margin: 42px !important;\n}\n\n.mt-9 {\n margin-top: 42px !important;\n}\n\n.mr-9 {\n margin-right: 42px !important;\n}\n\n.mb-9 {\n margin-bottom: 42px !important;\n}\n\n.ml-9 {\n margin-left: 42px !important;\n}\n\n.mx-9 {\n margin-left: 42px !important;\n margin-right: 42px !important;\n}\n\n.my-9 {\n margin-top: 42px !important;\n margin-bottom: 42px !important;\n}\n\n/* padding */\n.p-9 {\n padding: 42px !important;\n}\n\n.pt-9 {\n padding-top: 42px !important;\n}\n\n.pr-9 {\n padding-right: 42px !important;\n}\n\n.pb-9 {\n padding-bottom: 42px !important;\n}\n\n.pl-9 {\n padding-left: 42px !important;\n}\n\n.px-9 {\n padding-left: 42px !important;\n padding-right: 42px !important;\n}\n\n.py-9 {\n padding-top: 42px !important;\n padding-bottom: 42px !important;\n}\n\n/* margin */\n.m-10 {\n margin: 48px !important;\n}\n\n.mt-10 {\n margin-top: 48px !important;\n}\n\n.mr-10 {\n margin-right: 48px !important;\n}\n\n.mb-10 {\n margin-bottom: 48px !important;\n}\n\n.ml-10 {\n margin-left: 48px !important;\n}\n\n.mx-10 {\n margin-left: 48px !important;\n margin-right: 48px !important;\n}\n\n.my-10 {\n margin-top: 48px !important;\n margin-bottom: 48px !important;\n}\n\n/* padding */\n.p-10 {\n padding: 48px !important;\n}\n\n.pt-10 {\n padding-top: 48px !important;\n}\n\n.pr-10 {\n padding-right: 48px !important;\n}\n\n.pb-10 {\n padding-bottom: 48px !important;\n}\n\n.pl-10 {\n padding-left: 48px !important;\n}\n\n.px-10 {\n padding-left: 48px !important;\n padding-right: 48px !important;\n}\n\n.py-10 {\n padding-top: 48px !important;\n padding-bottom: 48px !important;\n}\n\n.row {\n display: flex;\n flex-direction: row;\n}\n\n* {\n box-sizing: border-box;\n}\n\n*::-webkit-scrollbar {\n width: 10px;\n}\n\n*::-webkit-scrollbar-track {\n width: 10px;\n background: #0A0A0D;\n cursor: pointer;\n}\n\n*::-webkit-scrollbar-thumb {\n width: 10px;\n background: #4A4A57;\n cursor: default;\n}\n\n*::-webkit-scrollbar-corner {\n background: transparent;\n height: 1px;\n}\n\n*::-webkit-scrollbar-button {\n display: none;\n}\n\n* {\n padding: 0;\n margin: 0;\n}\n\nhtml, body {\n font-family: \"IBM Plex Mono\", monospace;\n font-weight: 400;\n}\n\nbody {\n background-color: #0A0A0D;\n color: #F8F8F8;\n font-size: 15px;\n line-height: 1.45;\n letter-spacing: 0.01em;\n}\n\n.screen {\n display: none;\n}\n.screen.a-show {\n display: block;\n}\n\n.hud {\n width: 100%;\n padding: 18px;\n}\n.hud > .row {\n justify-content: space-between;\n align-items: center;\n gap: 15px;\n flex-wrap: wrap;\n}\n.hud .nav-toggle {\n font-size: 42px;\n width: 50px;\n height: 50px;\n background: #F8F8F8;\n color: #0A0A0D;\n position: relative;\n z-index: 710;\n}\n.hud .nav-toggle.state-off .icon-state-on {\n display: none;\n}\n.hud .nav-toggle.state-on .icon-state-off {\n display: none;\n}\n.hud .app-title {\n padding: 8px 15px;\n text-transform: uppercase;\n}\n.hud .navigation {\n position: fixed;\n z-index: 700;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background: #0A0A0D;\n opacity: 0;\n visibility: hidden;\n transition-duration: 0.2s;\n transition-property: visibility, opacity;\n}\n.hud .navigation .container {\n width: 100%;\n max-width: 600px;\n height: 100vh;\n margin: auto;\n padding: 12px;\n display: flex;\n align-items: center;\n}\n.hud .navigation .nav-items {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 48px;\n align-items: center;\n justify-content: space-between;\n height: max-content;\n margin-top: 100px;\n transition-duration: 0.2s;\n transition-property: margin-top;\n}\n.hud .navigation .nav-link {\n text-decoration: none;\n color: #F8F8F8;\n}\n.hud .navigation .nav-item {\n width: 160px;\n border: 2px solid #F8F8F8;\n padding: 22px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n transition-property: color, background, border-color;\n transition-duration: 0.2s;\n}\n.hud .navigation .nav-item .nav-icon {\n text-align: center;\n}\n.hud .navigation .nav-item .nav-icon .ph, .hud .navigation .nav-item .nav-icon .ph-bold {\n font-size: 64px;\n}\n.hud .navigation .nav-item .nav-text {\n width: 100%;\n text-align: center;\n text-transform: uppercase;\n font-size: 17px;\n}\n.hud .navigation .nav-item:hover {\n background: #00FFAA;\n border-color: #00FFAA;\n color: #0A0A0D;\n}\n.hud .navigation.a-show {\n visibility: visible;\n opacity: 1;\n}\n.hud .navigation.a-show .nav-items {\n margin-top: 0;\n}\n.hud .navigation.a-hide .nav-items {\n margin-top: -100px;\n}\n\n.load-screen {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n visibility: hidden;\n opacity: 0;\n background: #0A0A0D;\n transition-duration: 0.2s;\n transition-property: opacity, visibility;\n}\n.load-screen.a-show {\n visibility: visible;\n opacity: 1;\n z-index: 900;\n transition-duration: 0s;\n}\n\n.error-screen {\n display: none;\n}\n.error-screen .container {\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n flex-wrap: nowrap;\n gap: 15px;\n padding-top: 20%;\n max-width: 420px;\n width: 100%;\n margin: auto;\n}\n.error-screen .icon-container {\n color: #FF3C00;\n}\n.error-screen .icon-container .ph, .error-screen .icon-container .ph-bold {\n font-size: 72px;\n}\n.error-screen .error-title {\n padding: 8px 12px;\n}\n.error-screen .error-text {\n font-size: 16px;\n text-align: center;\n}\n.error-screen.a-show {\n display: block;\n}","/* =========================\n\t FONT FAMILIES\n========================= */\n\n$font-family-base: \"IBM Plex Mono\", monospace;\n$font-family-code: $font-family-base;\n\n/* =========================\n\t FONT WEIGHTS\n========================= */\n\n$font-weight-regular: 400;\n$font-weight-medium: 500;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n/* =========================\n\t FONT SIZES (scale)\n========================= */\n\n$font-size-xs: 12px;\n$font-size-sm: 13px;\n$font-size-md: 14px;\n$font-size-base: 16px;\n$font-size-lg: 17px;\n$font-size-xl: 20px;\n\n$font-size-h1: 36px;\n$font-size-h2: 28px;\n$font-size-h3: 24px;\n$font-size-h4: 20px;\n$font-size-h5: 18px;\n$font-size-h6: 16px;\n\n/* =========================\n\t LINE HEIGHTS\n========================= */\n\n$line-height-base: 1;\n$line-height-tight: 1.15;\n$line-height-snug: 1.25;\n$line-height-normal: 1.4;\n$line-height-relaxed: 1.6;\n\n/* =========================\n\t LETTER SPACING\n========================= */\n\n$letter-spacing-tight: -0.01em;\n$letter-spacing-normal: 0;\n$letter-spacing-wide: 0.04em;\n\n/* =========================\n\t BASE TYPOGRAPHY\n========================= */\n\nhtml {\n\tfont-size: 100%;\n}\n\nbody {\n\tfont-family: $font-family-base;\n\tfont-size: $font-size-base;\n\tfont-weight: $font-weight-regular;\n\tline-height: $line-height-relaxed;\n\tletter-spacing: $letter-spacing-normal;\n}\n\n/* =========================\n\t HEADINGS\n========================= */\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-family: $font-family-base;\n\tfont-weight: $font-weight-semibold;\n\tline-height: $line-height-snug;\n\tmargin: 0;\n\n\t&.contrast {\n\t\tbackground: $color-text-light;\n\t\tcolor: $color-black;\n\t}\n}\n\nh1 {\n\tfont-size: $font-size-h1;\n\tletter-spacing: $letter-spacing-tight;\n}\n\nh2 {\n\tfont-size: $font-size-h2;\n}\n\nh3 {\n\tfont-size: $font-size-h3;\n}\n\nh4 {\n\tfont-size: $font-size-h4;\n}\n\nh5 {\n\tfont-size: $font-size-h5;\n}\n\nh6 {\n\tfont-size: $font-size-h6;\n\tfont-weight: $font-weight-medium;\n}\n\n/* =========================\n\t TEXT VARIANTS\n========================= */\n\n.text,\np {\n\tfont-size: $font-size-base;\n\tline-height: $line-height-relaxed;\n}\n\n.text-sm {\n\tfont-size: $font-size-sm;\n\tline-height: $line-height-normal;\n}\n\n.text-lg {\n\tfont-size: $font-size-lg;\n\tline-height: $line-height-relaxed;\n}\n\n.text-muted {\n\tfont-size: $font-size-sm;\n\tcolor: $color-text-dark;\n}\n\n.text-strong,\nstrong {\n\tfont-weight: $font-weight-semibold;\n}\n\n.text-bold {\n\tfont-weight: $font-weight-bold;\n}\n\n.text-italic,\nem {\n\tfont-style: italic;\n}\n\n/* =========================\n\t CODE / MONO\n========================= */\n\ncode,\npre,\n.code {\n\tfont-family: $font-family-code;\n\tfont-size: $font-size-base;\n\tline-height: $line-height-normal;\n\tbackground-color: $color-dark;\n}\n\npre {\n\tfont-size: $font-size-base;\n\tline-height: $line-height-relaxed;\n\twhite-space: pre-wrap;\n}\n\n/* =========================\n\t LINKS\n========================= */\n\na {\n\tfont-weight: $font-weight-medium;\n\ttext-decoration: none;\n}\n\n.link {\n\tfont-size: inherit;\n\tfont-weight: $font-weight-medium;\n}\n\n/* =========================\n\t LABELS / META\n========================= */\n\n.label {\n\tfont-size: $font-size-sm;\n\tfont-weight: $font-weight-medium;\n\tline-height: $line-height-normal;\n}\n\n.hint,\n.meta {\n\tfont-size: $font-size-xs;\n\tline-height: $line-height-normal;\n}\n\n/* =========================\n\t TABLE TEXT\n========================= */\n\n.table {\n\tfont-size: $font-size-sm;\n\tline-height: $line-height-normal;\n\n\tth {\n\t\tfont-weight: $font-weight-semibold;\n\t}\n\n\ttd {\n\t\tfont-weight: $font-weight-regular;\n\t}\n}\n\n/* =========================\n\t LISTS\n========================= */\n\n.list {\n\tfont-size: $font-size-base;\n\tline-height: $line-height-relaxed;\n}\n\n.list-item {\n\tfont-size: inherit;\n}\n\n/* =========================\n\t MODALS\n========================= */\n\n.modal-title {\n\tfont-size: $font-size-h4;\n\tfont-weight: $font-weight-semibold;\n}\n\n.modal-body {\n\tfont-size: $font-size-base;\n}\n\n/* =========================\n\t TOASTS\n========================= */\n\n.toast-title {\n\tfont-size: $font-size-md;\n\tfont-weight: $font-weight-semibold;\n}\n\n.toast-text {\n\tfont-size: $font-size-sm;\n\tline-height: $line-height-normal;\n}\n",".palette {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: $space-sm;\n\n\t.color {\n\t\t.color-box {\n\t\t\twidth: 100px;\n\t\t\theight: 80px;\n\t\t}\n\t}\n}\n\n/* BACKGROUND COLORS */\n\nbody {\n\t.bg-primary {\n\t\tbackground: $color-primary;\n\t}\n\n\t.bg-secondary {\n\t\tbackground: $color-secondary;\n\t}\n\n\t.bg-success {\n\t\tbackground: $color-success;\n\t}\n\n\t.bg-accent {\n\t\tbackground: $color-accent;\n\t}\n\n\t.bg-info {\n\t\tbackground: $color-info;\n\t}\n\n\t.bg-warning {\n\t\tbackground: $color-warning;\n\t}\n\n\t.bg-error {\n\t\tbackground: $color-error;\n\t}\n\n\t/* TEXT COLORS */\n\n\t.text-color-primary {\n\t\tcolor: $color-primary;\n\t}\n\n\t.text-color-secondary {\n\t\tcolor: $color-secondary;\n\t}\n\n\t.text-color-success {\n\t\tcolor: $color-success;\n\t}\n\n\t.text-color-accent {\n\t\tcolor: $color-accent;\n\t}\n\n\t.text-color-info {\n\t\tcolor: $color-info;\n\t}\n\n\t.text-color-warning {\n\t\tcolor: $color-warning;\n\t}\n\n\t.text-color-error {\n\t\tcolor: $color-error;\n\t}\n}","/* HTML:
*/\n.loader {\n width: 45px;\n aspect-ratio: 1;\n --c:no-repeat linear-gradient(#FF3C00 0 0);\n background: \n var(--c) 0 0,\n var(--c) 0 100%, \n var(--c) 50% 0, \n var(--c) 50% 100%, \n var(--c) 100% 0, \n var(--c) 100% 100%;\n animation: l12 1s infinite;\n}\n@keyframes l12 {\n 0%,100%{background-size:20% 50%}\n 16.67% {background-size:20% 30%, 20% 30%, 20% 50%, 20% 50%, 20% 50%, 20% 50%}\n 33.33% {background-size:20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 50%, 20% 50%}\n 50% {background-size:20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 30%}\n 66.67% {background-size:20% 50%, 20% 50%, 20% 30%, 20% 30%, 20% 30%, 20% 30%}\n 83.33% {background-size:20% 50%, 20% 50%, 20% 50%, 20% 50%, 20% 30%, 20% 30%}\n}",".btn {\n\tfont-family: $font-family-base;\n\tfont-size: $font-size-lg;\n\tfont-weight: $font-weight-semibold;\n\tline-height: $line-height-base;\n\tletter-spacing: $letter-spacing-wide;\n\tpadding: $space-3 $space-lg;\n\tborder-radius: 0;\n\tborder-width: 2px;\n\tborder-left-width: 6px;\n\tborder-style: solid;\n\tborder-color: $color-primary;\n\ttext-transform: uppercase;\n\tbackground-color: transparent;\n\ttransition-duration: .2s;\n\ttransition-property: background-color, border-color, color;\n\n\t&.with-icon {\n\t\tborder-left-width: 48px;\n\t\tposition: relative;\n\n\t\t.ph,\n\t\t.ph-bold {\n\t\t\tposition: absolute;\n\t\t\tcolor: #0a0a0d;\n\t\t\tleft: -48px;\n\t\t\ttop: 0;\n\t\t\tfont-size: 28px;\n\t\t\theight: 100%;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\twidth: 48px;\n\t\t\tjustify-content: center;\n\t\t\ttransition-duration: .2s;\n\t\t\ttransition-property: color, left;\n\t\t}\n\t}\n\n\t&:hover {\n\t\t&.with-icon {\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tleft: -28px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-primary {\n\t\tcolor: $color-primary;\n\t\tborder-color: $color-primary;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-primary;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-secondary {\n\t\tcolor: $color-secondary;\n\t\tborder-color: $color-secondary;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-secondary;\n\t\t\tcolor: $color-text-light;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-light;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-accent {\n\t\tcolor: $color-accent;\n\t\tborder-color: $color-accent;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-accent;\n\t\t\tcolor: $color-text-light;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-light;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-danger {\n\t\tcolor: $color-error;\n\t\tborder-color: $color-error;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-error;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-warning {\n\t\tcolor: $color-warning;\n\t\tborder-color: $color-warning;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-warning;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-success {\n\t\tcolor: $color-success;\n\t\tborder-color: $color-success;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-success;\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t&.btn-info {\n\t\tcolor: $color-info;\n\t\tborder-color: $color-info;\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-info;\n\t\t\tcolor: $color-text-light;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-light;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&[disabled] {\n\t\tcolor: $color-text-dark;\n\t\tborder-color: $color-dark;\n\t\tbackground-color: $color-dark;\n\n\t\t&.with-icon {\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tcolor: $color-text-dark;\n\t\t\t}\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground-color: $color-dark;\n\t\t\tcolor: $color-text-dark;\n\n\t\t\t&.with-icon {\n\t\t\t\t.ph,\n\t\t\t\t.ph-bold {\n\t\t\t\t\tcolor: $color-text-dark;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.with-icon {\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tleft: -28px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-small {\n\t\tfont-size: $font-size-md;\n\t\tfont-weight: $font-weight-medium;\n\t\tpadding: $space-sm $space-sm;\n\n\t\t&.with-icon {\n\t\t\tborder-left-width: 32px;\n\n\t\t\t.ph,\n\t\t\t.ph-bold {\n\t\t\t\tleft: -40px;\n\t\t\t\tfont-size: 22px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.btn-large {\n\t\tfont-size: $font-size-xl;\n\t\tfont-weight: $font-weight-bold;\n\t\tpadding: $space-md $space-xxl;\n\t}\n}\n\n.btn-icon {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\twidth: 30px;\n\theight: 30px;\n\n\tbackground: transparent;\n\tcolor: $color-text-light;\n\tfont-size: $font-size-xl;\n\tborder: 0;\n\n\ttransition-duration: .2s;\n\ttransition-property: color;\n\n\t\n\t.ph {\n\t\ttransform: rotate(0);\n\t\ttransition-duration: .2s;\n\t\ttransition-property: transform;\n\t}\n\n\t&:hover {\n\t\tcolor: $color-text-dark;\n\n\t\t.ph {\n\t\t\ttransform: rotate(90deg);\n\t\t}\n\t}\n}\n",".form-group {\n\t.label {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tfont-size: $font-size-lg;\n\t\tmax-width: 420px;\n\t\tposition: relative;\n\n\t\t.ph {\n\t\t\tposition: absolute;\n\t\t\tcolor: $color-text-light;\n\t\t\tleft: 0;\n\t\t\tbottom: 2px;\n\t\t\tfont-size: 28px;\n\t\t\theight: 56px;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\twidth: 48px;\n\t\t\tjustify-content: center;\n\t\t\ttransition-duration: .2s;\n\t\t\ttransition-property: color, left;\n\t\t}\n\n\t\t.input {\n\t\t\tfont-family: $font-family-base;\n\t\t\tfont-size: $font-size-base;\n\t\t\tfont-weight: $font-weight-medium;\n\t\t\tline-height: $line-height-base;\n\t\t\tletter-spacing: $letter-spacing-wide;\n\t\t\tpadding: $space-3 $space-lg;\n\t\t\tmargin-top: $space-sm;\n\t\t\tborder-radius: 0;\n\t\t\tborder-width: 2px;\n\t\t\tborder-bottom-width: 6px;\n\t\t\tborder-style: solid;\n\t\t\tborder-color: $color-text-light;\n\t\t\tcolor: $color-text-light;\n\t\t\tbackground-color: transparent;\n\t\t\ttransition-duration: .2s;\n\t\t\ttransition-property: background-color, border-color, color;\n\n\t\t\t&:hover {\n\t\t\t\tborder-bottom-color: $color-text-dark;\n\t\t\t}\n\n\t\t\t&:focus {\n\t\t\t\toutline: none;\n\t\t\t\tborder-color: $color-electric-blue;\n\t\t\t}\n\n\t\t\t&::placeholder {\n\t\t\t\tcolor: $color-text-dark;\n\t\t\t}\n\t\t}\n\n\t\ttextarea.input {\n\t\t\theight: 120px;\n\t\t\tline-height: $line-height-snug;\n\t\t\tresize: none;\n\t\t}\n\n\t\t.ph + .input,\n\t\t.ph + .select-wrap .select {\n\t\t\tpadding-left: 42px;\n\t\t}\n\n\t\t.select-wrap {\n\t\t\tmargin-top: $space-sm;\n\t\t}\n\n\t\t.select {\n\t\t\twidth: 100%;\n\t\t\theight: 56px;\n\t\t\tmargin-top: 0;\n\n\t\t\t/* убрать нативную стрелку */\n\t\t\tappearance: none;\n\t\t\t-webkit-appearance: none;\n\t\t\t-moz-appearance: none;\n\n\t\t\t&:focus {\n\t\t\t\toutline: none;\n\t\t\t}\n\n\t\t\toption {\n\t\t\t\tcolor: $color-text-light;\n\t\t\t\tbackground: $color-dark;\n\t\t\t}\n\t\t}\n\n\t\t.select-wrap::after {\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\tright: $space-lg;\n\t\t\tbottom: 18px;\n\t\t\ttransform: translateY(-50%);\n\n\t\t\twidth: 0;\n\t\t\theight: 0;\n\t\t\tborder-left: 8px solid transparent;\n\t\t\tborder-right: 8px solid transparent;\n\t\t\tborder-top: 10px solid $color-text-light;\n\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n}\n\n.radio {\n\tdisplay: inline-flex;\n\tflex-direction: row;\n\tgap: $space-sm;\n\talign-items: center;\n\n\tinput[type=\"radio\"] {\n\t\tdisplay: none;\n\t}\n\n\t.radio-control {\n\t\tdisplay: inline-block;\n\t\tborder-radius: 100%;\n\t\tborder: 2px solid $color-primary;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tbackground: transparent;\n\t\ttransition-duration: .2s;\n\t\ttransition-property: background, border-color;\n\t}\n\n\t&:hover .radio-control {\n\t\tbackground: $color-grey;\n\t}\n\n\tinput[type=\"radio\"]:checked + .radio-control {\n\t\tbackground: $color-primary;\n\t}\n\n\tinput[type=\"radio\"]:disabled + .radio-control {\n\t\tbackground: $color-grey;\n\t\tborder-color: $color-grey;\n\t}\n\n\t.radio-label {\n\t\tfont-size: $font-size-lg;\n\t}\n}\n\n.checkbox {\n\tdisplay: inline-flex;\n\tflex-direction: row;\n\tgap: $space-sm;\n\talign-items: center;\n\n\tinput[type=\"checkbox\"] {\n\t\tdisplay: none;\n\t}\n\n\t.checkbox-control {\n\t\theight: 16px;\n\t\twidth: 30px;\n\t\tborder: 2px solid $color-primary;\n\t\tposition: relative;\n\t\tbackground: transparent;\n\t\ttransition-duration: .2s;\n\t\ttransition-property: border-color, background;\n\t\tdisplay: block;\n\t}\n\n\t.checkbox-control:before {\n\t\tcontent: \"\";\n\t\tdisplay: block;\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\tbackground: $color-primary;\n\t\tposition: absolute;\n\t\tleft: -6px;\n\t\ttop: -4px;\n\t\ttransition-duration: .2s;\n\t\ttransition-property: left, background;\n\t}\n\n\t&:hover .checkbox-control {\n\t\tbackground: $color-grey;\n\t}\n\n\tinput[type=\"checkbox\"]:checked:not(:disabled) + .checkbox-control {\n\t\tbackground: $color-secondary;\n\t\tborder-color: $color-secondary;\n\t}\n\n\tinput[type=\"checkbox\"]:checked + .checkbox-control:before {\n\t\tleft: 12px;\n\t}\n\n\tinput[type=\"checkbox\"]:disabled + .checkbox-control {\n\t\tborder-color: $color-grey;\n\t}\n\n\tinput[type=\"checkbox\"]:disabled + .checkbox-control:before {\n\t\tbackground: $color-grey;\n\t}\n}\n",".list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: $space-1;\n\tlist-style-type: none;\n\tpadding-left: 0;\n\n\t.list-item {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tgap: $space-sm;\n\t\tmargin-left: 0;\n\t}\n\n\t&.list-ordered {\n\t\tlist-style-type: decimal;\n\t\tdisplay: list-item;\n\t\tmargin-left: 30px;\n\n\t\t.list-item {\n\t\t\tdisplay: list-item;\n\t\t}\n\t}\n\n\t&.list-definition {\n\t\tgap: $space-md;\n\n\t\t.list-row {\n\t\t\tborder-left: 2px solid $color-primary;\n\n\t\t\t.list-term::before,\n\t\t\t.list-desc::before {\n\t\t\t\tcontent: \"\";\n\t\t\t\theight: 2px;\n\t\t\t\twidth: $space-3;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 0;\n\t\t\t\tmargin-top: -1px;\n\t\t\t\tdisplay: block;\n\t\t\t\tbackground: $color-primary;\n\t\t\t}\n\n\t\t\t.list-term,\n\t\t\t.list-desc {\n\t\t\t\tposition: relative;\n\t\t\t}\n\n\t\t\t.list-term {\n\t\t\t\tpadding-left: $space-5;\n\t\t\t\tfont-size: $font-size-xl;\n\t\t\t}\n\n\t\t\t.list-desc {\n\t\t\t\tpadding-left: $space-5;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.with-icons {\n\t\t.ph {\n\t\t\t// icon styles if needed\n\t\t}\n\t}\n\n\t&.list-nav {\n\t\tmax-width: 420px;\n\t\twidth: 100%;\n\t\tgap: 0;\n\n\t\t.list-item {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\talign-items: flex-start;\n\t\t\theight: 50px;\n\t\t\tmargin: 0;\n\n\t\t\t.list-action {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\talign-items: center;\n\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: $space-2 $space-3;\n\t\t\t\tborder: 0;\n\n\t\t\t\tfont-size: $font-size-xl;\n\t\t\t\tbackground: $color-dark;\n\t\t\t\tcolor: inherit;\n\n\t\t\t\ttransition-duration: .2s;\n\t\t\t\ttransition-property: background;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: $color-electric-blue;\n\t\t\t\t}\n\n\t\t\t\t.list-label {\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t\tgap: $space-2;\n\t\t\t\t\talign-items: center;\n\t\t\t\t}\n\n\t\t\t\t.list-meta {\n\t\t\t\t\tpadding: $space-2;\n\t\t\t\t\tbackground: $color-neon-green;\n\t\t\t\t\tcolor: $color-black;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.list-item-active {\n\t\t\t\t.list-action {\n\t\t\t\t\tbackground: $color-electric-blue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&.list-actions {\n\t\twidth: 100%;\n\t\tmax-width: 420px;\n\t\tgap: $space-lg;\n\n\t\t.list-item {\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: flex-start;\n\n\t\t\t.list-content {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: $space-2;\n\n\t\t\t\t.list-title {\n\t\t\t\t\tfont-size: $font-size-xl;\n\t\t\t\t\tline-height: $line-height-base;\n\t\t\t\t}\n\n\t\t\t\t.list-subtitle {\n\t\t\t\t\t// subtitle styles\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.list-controls {\n\t\t\t\t// controls styles\n\t\t\t}\n\t\t}\n\t}\n}\n",".badge {\n\tbackground: $color-primary;\n\tcolor: $color-dark;\n\tpadding: $space-1 $space-2;\n\tfont-size: $font-size-base;\n\n\t&.badge-success {\n\t\tbackground: $color-success;\n\t}\n\n\t&.badge-warning {\n\t\tbackground: $color-warning;\n\t}\n\n\t&.badge-error,\n\t&.badge-danger {\n\t\tbackground: $color-error;\n\t}\n\n\t&.badge-info {\n\t\tbackground: $color-info;\n\t\tcolor: $color-text-light;\n\t}\n\n\t&.badge-secondary {\n\t\tbackground: $color-secondary;\n\t\tcolor: $color-text-light;\n\t}\n}\n",".table {\n\ttext-align: left;\n\tborder: 2px solid $color-primary;\n\tpadding: $space-4;\n\n\t.table-caption {\n\t\ttext-align: left;\n\t\tfont-size: $font-size-xl;\n\t\tbackground: $color-primary;\n\t\twidth: max-content;\n\t\tcolor: $color-dark;\n\t\tpadding: $space-1 $space-3;\n\t\tmargin-bottom: 0;\n\t}\n\n\t.table-row {\n\t\tth,\n\t\ttd {\n\t\t\tpadding: $space-3 $space-5;\n\t\t\tfont-size: $font-size-base;\n\t\t}\n\n\t\tth {\n\t\t\t// header cell styles if needed\n\t\t}\n\t}\n\n\t.table-head {\n\t\t// thead styles\n\t}\n\n\t.table-body {\n\t\t// tbody styles\n\t}\n\n\t.table-foot {\n\t\tth,\n\t\ttd {\n\t\t\tpadding-top: $space-4;\n\t\t}\n\t}\n}\n",".toast {\n\tposition: fixed;\n\tbottom: -100px;\n\tright: $space-4;\n\tmax-width: 420px;\n\n\tbackground: $color-dark;\n\tborder: 2px solid $color-text-light;\n\tpadding: 0;\n\topacity: 0;\n\n\ttransition-duration: .25s;\n\ttransition-property: opacity, top, bottom;\n\n\t&.a-show {\n\t\tbottom: $space-4;\n\t\topacity: 1;\n\t}\n\n\t&.a-hide {\n\t\tbottom: $space-4 + 100px;\n\t\topacity: 0;\n\t}\n\n\t.toast-content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 0;\n\n\t\t.toast-title {\n\t\t\tfont-size: $font-size-h3;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tgap: $space-2;\n\t\t\talign-items: center;\n\t\t\tcolor: $color-black;\n\t\t\tbackground: $color-primary;\n\t\t\tpadding: $space-1 $space-2;\n\t\t}\n\n\t\t.toast-text {\n\t\t\tfont-size: $font-size-base;\n\t\t\tpadding: $space-6 $space-4;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\n\t.toast-close {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tcolor: $color-black;\n\t\theight: 40px;\n\t\twidth: 40px;\n\n\t\t&:hover {\n\t\t\tcolor: $color-dark;\n\t\t}\n\t}\n\n\t&.toast-info {\n\t\t// default info styles (inherits primary)\n\t}\n\n\t&.toast-success {\n\t\tborder-color: $color-success;\n\n\t\t.toast-title {\n\t\t\tbackground: $color-success;\n\t\t}\n\t}\n\n\t&.toast-warning {\n\t\tborder-color: $color-warning;\n\n\t\t.toast-title {\n\t\t\tbackground: $color-warning;\n\t\t}\n\t}\n\n\t&.toast-danger {\n\t\tborder-color: $color-error;\n\n\t\t.toast-title {\n\t\t\tbackground: $color-error;\n\t\t}\n\t}\n}\n",".card {\n\tmax-width: 420px;\n\twidth: 100%;\n\tborder: 2px solid $color-text-light;\n\n\t.card-title {\n\t\tcolor: $color-black;\n\t\tbackground: $color-text-light;\n\t\tpadding: $space-2 $space-3;\n\t}\n\n\t.card-content {\n\t\tpadding: $space-4;\n\n\t\t.card-thumb {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tp {\n\t\t\tmargin-top: $space-2;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t.card-footer {\n\t\tpadding: $space-2 $space-4;\n\t\tpadding-bottom: $space-4;\n\t}\n}\n",".modal {\n\tposition: fixed;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tz-index: 1000;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\n\t.modal-backdrop {\n\t\tposition: fixed;\n\t\tz-index: 1010;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\n\t\tbackground: $color-black;\n\t\topacity: 0;\n\n\t\ttransition-duration: .25s;\n\t\ttransition-property: opacity;\n\t}\n\n\t.modal-panel {\n\t\tposition: relative;\n\t\tz-index: 1020;\n\n\t\twidth: 100%;\n\t\tmax-width: 800px;\n\t\theight: auto;\n\t\tmin-height: 400px;\n\t\tmax-height: 800px;\n\n\t\tpadding: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: $space-4;\n\t\tmargin-top: 200px;\n\n\t\tbackground: $color-black;\n\t\tborder: 2px solid $color-text-light;\n\t\topacity: 0;\n\n\t\ttransition-duration: .25s;\n\t\ttransition-property: opacity, margin-top;\n\n\t\t.modal-header {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tjustify-content: space-between;\n\t\t\talign-items: center;\n\t\t\tpadding-right: $space-4;\n\n\t\t\t.modal-title {\n\t\t\t\tpadding: $space-3 $space-4;\n\t\t\t\tbackground: $color-text-light;\n\t\t\t\tcolor: $color-black;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t}\n\t\t}\n\n\t\t.modal-body {\n\t\t\tmax-height: 700px;\n\t\t\toverflow-y: auto;\n\t\t\tpadding: $space-5;\n\t\t}\n\n\t\t.modal-footer {\n\t\t\tpadding: $space-5;\n\n\t\t\t.actions {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: row;\n\t\t\t\tjustify-content: flex-end;\n\t\t\t\tgap: $space-4;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.a-show {\n\t\t.modal-backdrop {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.modal-panel {\n\t\t\topacity: 1;\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\n\t&.a-hide {\n\t\t.modal-backdrop {\n\t\t\topacity: 0;\n\t\t}\n\n\t\t.modal-panel {\n\t\t\topacity: 0;\n\t\t\tmargin-top: -200px;\n\t\t}\n\t}\n}\n","/* =========================\n SPACING UTILITIES\n========================= */\n\n@each $key, $value in $spaces {\n\n /* margin */\n .m-#{$key} { margin: $value !important; }\n .mt-#{$key} { margin-top: $value !important; }\n .mr-#{$key} { margin-right: $value !important; }\n .mb-#{$key} { margin-bottom: $value !important; }\n .ml-#{$key} { margin-left: $value !important; }\n .mx-#{$key} {\n margin-left: $value !important;\n margin-right: $value !important;\n }\n .my-#{$key} {\n margin-top: $value !important;\n margin-bottom: $value !important;\n }\n\n /* padding */\n .p-#{$key} { padding: $value !important; }\n .pt-#{$key} { padding-top: $value !important; }\n .pr-#{$key} { padding-right: $value !important; }\n .pb-#{$key} { padding-bottom: $value !important; }\n .pl-#{$key} { padding-left: $value !important; }\n .px-#{$key} {\n padding-left: $value !important;\n padding-right: $value !important;\n }\n .py-#{$key} {\n padding-top: $value !important;\n padding-bottom: $value !important;\n }\n}\n\n.row {\n display: flex;\n flex-direction: row;\n} ","@import \"_spacing.scss\";\n@import \"ui_components/_typography.scss\";\n@import \"ui_components/_palette.scss\";\n@import \"ui_components/_loader.scss\";\n@import \"ui_components/_buttons.scss\";\n@import \"ui_components/_forms.scss\";\n@import \"ui_components/_lists.scss\";\n@import \"ui_components/_badges.scss\";\n@import \"ui_components/_tables.scss\";\n@import \"ui_components/_toasts.scss\";\n@import \"ui_components/_cards.scss\";\n@import \"ui_components/_modals.scss\";\n@import \"_utils.scss\";\n\n* {\n\tbox-sizing: border-box;\n}\n\n*::-webkit-scrollbar {\n\twidth: 10px;\n}\n\n*::-webkit-scrollbar-track {\n\twidth: 10px;\n\tbackground: $color-black;\n\tcursor: pointer;\n}\n\n*::-webkit-scrollbar-thumb {\n\twidth: 10px;\n\tbackground: $color-grey;\n\tcursor: default;\n}\n\n*::-webkit-scrollbar-corner {\n\tbackground: transparent;\n\theight: 1px;\n}\n\n*::-webkit-scrollbar-button {\n\tdisplay: none;\n}\n\n*::-webkit-scrollbar-track-piece {}\n*::-webkit-resizer {}","* {\n\tpadding: 0;\n\tmargin: 0;\n}\n\nhtml, body {\n font-family: \"IBM Plex Mono\", monospace;\n font-weight: 400;\n}\n\nbody {\n\tbackground-color: $color-black;\n\tcolor: $color-text-light;\n\n\tfont-size: 15px;\n line-height: 1.45;\n letter-spacing: 0.01em;\n}\n\n.screen {\n\tdisplay: none;\n\n\t&.a-show {\n\t\tdisplay: block;\n\t}\n}\n\n@import \"app/_hud.scss\";\n@import \"app/_load-screen.scss\";\n@import \"app/_error-screen.scss\";",".hud {\n\twidth: 100%;\n\tpadding: $space-5;\n\n\t& > .row {\n\t\tjustify-content: space-between;\n align-items: center;\n gap: $space-4;\n flex-wrap: wrap;\n\t}\n\n\t.nav-toggle {\n\t\tfont-size: 42px;\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tbackground: $color-text-light;\n\t\tcolor: $color-black;\n\t\tposition: relative;\n\t\tz-index: 710;\n\n\t\t&.state-off {\n\t\t\t.icon-state-on {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t&.state-on {\n\t\t\t.icon-state-off {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t// &:hover {\n\t\t// \tcolor: $color-success;\n\t\t// }\n\t}\n\n\t.app-title {\n\t\tpadding: $space-2 $space-4;\n\t\ttext-transform: uppercase;\n\t}\n\n\t.navigation {\n\t\tposition: fixed;\n\t\tz-index: 700;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\t\n\t\tbackground: $color-black;\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\n\t\ttransition-duration: .2s;\n\t\ttransition-property: visibility, opacity;\n\n\t\t.container {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 600px;\n\t height: 100vh;\n\n\t\t\tmargin: auto;\n\t\t\tpadding: $space-3;\n\n \tdisplay: flex;\n \talign-items: center;\n\t\t}\n\n\t\t.nav-items {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tgap: $space-10;\n \talign-items: center;\n \tjustify-content: space-between;\n\n \theight: max-content;\n \tmargin-top: 100px;\n\n \ttransition-duration: .2s;\n \ttransition-property: margin-top;\n\t\t}\n\n\t\t.nav-link {\n\t\t\ttext-decoration: none;\n\t\t\tcolor: $color-text-light;\n\t\t}\n\n\t\t.nav-item {\n\t\t\twidth: 160px;\n\t\t\tborder: 2px solid $color-text-light;\n\t\t\tpadding: $space-6;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: $space-3;\n\n\t\t\ttransition-property: color, background, border-color;\n\t\t\ttransition-duration: .2s;\n\n\t\t\t.nav-icon {\n\t\t\t\ttext-align: center;\n\n\t\t\t\t.ph, .ph-bold {\n\t\t\t\t\tfont-size: 64px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.nav-text {\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-align: center;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tfont-size: $font-size-lg;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground: $color-success;\n\t\t\t\tborder-color: $color-success;\n\t\t\t\tcolor: $color-black;\n\t\t\t}\n\t\t}\n\n\t\t&.a-show {\n\t\t\tvisibility: visible;\n\t\t\topacity: 1;\n\n\t\t\t.nav-items {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t}\n\n\t\t&.a-hide {\n\t\t\t.nav-items {\n\t\t\t\tmargin-top: -100px;\n\t\t\t}\n\t\t}\n\t}\n}",".load-screen {\n\tposition: fixed;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\n\tdisplay: flex;\n\tflex-direction: row;\n align-items: center;\n justify-content: center;\n\n\tvisibility: hidden;\n\topacity: 0;\n\tbackground: $color-black;\n\n\ttransition-duration: .2s;\n\ttransition-property: opacity, visibility;\n\n\t&.a-show {\n\t\tvisibility: visible;\n\t\topacity: 1;\n\t\tz-index: 900;\n\t\ttransition-duration: 0s;\n\t}\n}",".error-screen {\n display: none;\n\n .container {\n\t display: flex;\n\t align-items: center;\n\t flex-direction: column;\n\t justify-content: center;\n\t flex-wrap: nowrap;\n\t gap: $space-4;\n\t padding-top: 20%;\n\t max-width: 420px;\n\t width: 100%;\n\t margin: auto;\n }\n\n .icon-container {\n \tcolor: $color-error;\n\n \t.ph, .ph-bold {\n \t\tfont-size: 72px;\n \t}\n }\n\n .error-title {\n \tpadding: $space-2 $space-3;\n }\n\n .error-text {\n \tfont-size: $font-size-base;\n \ttext-align: center;\n }\n\n\t&.a-show {\n\t\tdisplay: block;\n\t}\n}"]} \ No newline at end of file diff --git a/webclient/dist/js/main.js b/webclient/dist/js/main.js index 21badd6..d6e01a4 100644 --- a/webclient/dist/js/main.js +++ b/webclient/dist/js/main.js @@ -1,2 +1,2 @@ -(()=>{var u=Object.defineProperty;var o=Object.getOwnPropertySymbols;var a=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable;var i=(t,r,e)=>r in t?u(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e,c=(t,r)=>{for(var e in r||(r={}))a.call(r,e)&&i(t,e,r[e]);if(o)for(var e of o(r))h.call(r,e)&&i(t,e,r[e]);return t};function d(){console.log("HUD init")}var s=class{constructor(r,e,n){this.screens={},this.routesMap={},this.currentScreen=null,this.screensContainer=document.querySelector(r),this.loader=document.querySelector(e),this.errorScreen=document.querySelector(n),console.log("Screens Init")}add(r,e){if(typeof e!="object")return console.error("Screens: screens must be object");if(typeof(e==null?void 0:e.alias)=="undefined")return console.error("Screens: undefined alias");if(typeof(e==null?void 0:e.renderer)!="function")return console.error("Screens: renderer must be function");this.screens[e.alias]=c({route:r},e),this.routesMap[r]=e.alias}switch(r){var n;if(this.showLoader(),(n=this.currentScreen)==null||n.DOMObject.remove(),typeof this.screens[r]=="undefined"){console.error(`Screens: "${r}" not found`);return}this.currentScreen=this.screens[r];let e=document.createElement("div");e.classList.add("screen"),e.id=r,e.dataset.alias=r,e.innerHTML=this.currentScreen.renderer(),this.currentScreen.DOMObject=e,this.screensContainer.append(this.currentScreen.DOMObject),this.currentScreen.initer(this)}routing(){setInterval(()=>{let r=document.location.hash.split("#!")[1];if(typeof r=="undefined"||r=="")return;let e=typeof this.routesMap[r]=="undefined"?"not-found-screen":this.routesMap[r];(!this.currentScreen||this.currentScreen.alias!=e)&&this.switch(e)},50)}ready(){this.currentScreen!=null&&(this.currentScreen.DOMObject||(this.currentScreen.DOMObject=document.getElementsById(this.currentScreen.alias)),this.hideLoader(),this.currentScreen.DOMObject.classList.add("a-show"))}error(){var r;(r=this.currentScreen)==null||r.DOMObject.remove(),this.showErrorScreen()}hideLoader(){this.loader.classList.remove("a-show")}showLoader(){this.loader.classList.add("a-show")}showErrorScreen(r){this.errorScreen.classList.add("a-show")}hideErrorScreen(r){this.errorScreen.classList.remove("a-show")}getScreens(){return this.screens}getRoutesMap(){return this.routesMap}};document.addEventListener("DOMContentLoaded",t=>{console.log("App init"),d();let r=new s(".screens",".load-screen",".error-screen");r.add("/",{alias:"home",renderer:()=>'

Hello world

',initer:e=>{setTimeout(()=>e.ready(),1e3),setTimeout(()=>e.error(),2e3)}}),r.add("-",{alias:"not-found-screen",renderer:()=>'

404 NOT FOUND

',initer:e=>{e.ready()}}),console.log(r.getScreens()),r.routing()});})(); +(()=>{var l=Object.defineProperty;var a=Object.getOwnPropertySymbols;var S=Object.prototype.hasOwnProperty,f=Object.prototype.propertyIsEnumerable;var d=(r,t,e)=>t in r?l(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,h=(r,t)=>{for(var e in t||(t={}))S.call(t,e)&&d(r,e,t[e]);if(a)for(var e of a(t))f.call(t,e)&&d(r,e,t[e]);return r};var n,o;function m(){n.dataset.navState="displayed",n.classList.remove("state-off"),n.classList.add("state-on"),o.classList.add("a-show")}function c(){n.dataset.navState="hidden",n.classList.remove("state-on"),n.classList.add("state-off"),o.classList.add("a-hide"),o.classList.remove("a-show"),setTimeout(()=>{o.classList.remove("a-hide")},300)}function u(){console.log("HUD init"),n=document.querySelector(".hud .nav-toggle"),o=document.querySelector(".hud .navigation"),n.addEventListener("click",r=>{r.currentTarget.dataset.navState!="displayed"?m():c()})}var i=class{constructor(t,e,s){this.screens={},this.routesMap={},this.currentScreen=null,this.eventsHandlers={switch:[]},this.screensContainer=document.querySelector(t),this.loader=document.querySelector(e),this.errorScreen=document.querySelector(s),console.log("Screens Init")}add(t,e){if(typeof e!="object")return console.error("Screens: screens must be object");if(typeof(e==null?void 0:e.alias)=="undefined")return console.error("Screens: undefined alias");if(typeof(e==null?void 0:e.renderer)!="function")return console.error("Screens: renderer must be function");this.screens[e.alias]=h({route:t},e),this.routesMap[t]=e.alias}switch(t){var s;if(this.runSwitchHandlers(t),this.showLoader(),(s=this.currentScreen)==null||s.DOMObject.remove(),typeof this.screens[t]=="undefined"){console.error(`Screens: "${t}" not found`);return}this.currentScreen=this.screens[t];let e=document.createElement("div");e.classList.add("screen"),e.id=t,e.dataset.alias=t,e.innerHTML=this.currentScreen.renderer(),this.currentScreen.DOMObject=e,this.screensContainer.append(this.currentScreen.DOMObject),this.currentScreen.initer(this)}routing(){setInterval(()=>{let t=document.location.hash.split("#!")[1];if(typeof t=="undefined"||t=="")return;let e=typeof this.routesMap[t]=="undefined"?"not-found-screen":this.routesMap[t];(!this.currentScreen||this.currentScreen.alias!=e)&&this.switch(e)},50)}ready(){this.currentScreen!=null&&(this.currentScreen.DOMObject||(this.currentScreen.DOMObject=document.getElementsById(this.currentScreen.alias)),this.hideLoader(),this.currentScreen.DOMObject.classList.add("a-show"))}error(t,e){var s;(s=this.currentScreen)==null||s.DOMObject.remove(),this.errorScreen.querySelector(".error-title").innerHTML=t,this.errorScreen.querySelector(".error-text").innerHTML=e,this.showErrorScreen()}hideLoader(){this.loader.classList.remove("a-show")}showLoader(){this.loader.classList.add("a-show")}showErrorScreen(){this.errorScreen.classList.add("a-show")}hideErrorScreen(){this.errorScreen.classList.remove("a-show")}getScreens(){return this.screens}getRoutesMap(){return this.routesMap}onSwitch(t){this.eventsHandlers.switch.push(t)}runSwitchHandlers(t){for(let e of this.eventsHandlers.switch)e(this,t)}};document.addEventListener("DOMContentLoaded",r=>{console.log("App init"),u();let t=new i(".screens",".load-screen",".error-screen");t.add("/",{alias:"home",renderer:()=>'

Hello world

',initer:e=>{setTimeout(()=>e.ready(),1e3),setTimeout(()=>e.error("Error","Just testing"),2e3)}}),t.add("-",{alias:"not-found-screen",renderer:()=>'

404 NOT FOUND

',initer:e=>{e.ready()}}),console.log(t.getScreens()),t.onSwitch((e,s)=>{c()}),t.routing()});})(); //# sourceMappingURL=main.js.map diff --git a/webclient/dist/js/main.js.map b/webclient/dist/js/main.js.map index 637fce1..39d2703 100644 --- a/webclient/dist/js/main.js.map +++ b/webclient/dist/js/main.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../src/js/components/hud.js", "../../src/js/components/Screens.js", "../../src/js/index.js"], - "sourcesContent": ["function hud() {\n\tconsole.log(\"HUD init\");\n}\n\nexport {\n\thud\n}", "export class Screens {\n\tconstructor(screensContainerSelector, loaderSelector, errorScreenSelector) {\n\t\tthis.screens = {};\n\t\tthis.routesMap = {};\n\t\tthis.currentScreen = null;\n\n\t\tthis.screensContainer = document.querySelector(screensContainerSelector);\n\t\tthis.loader = document.querySelector(loaderSelector);\n\t\tthis.errorScreen = document.querySelector(errorScreenSelector);\n\t\tconsole.log(\"Screens Init\");\n\t}\n\n\t/**\n\t * \u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438 \u044D\u043A\u0440\u0430\u043D\u0430\n\t * @param {string} route Like `/path/name`\n\t * @param {void} screen {alias, renderer, initer}\n\t */\n\tadd(route, screen) {\n\t\tif(typeof screen != \"object\") {\n\t\t\treturn console.error(\"Screens: screens must be object\");\n\t\t}\n\t\t\n\t\tif(typeof screen?.alias == \"undefined\") {\n\t\t\treturn console.error(\"Screens: undefined alias\");\n\t\t}\n\n\t\tif(typeof screen?.renderer != \"function\") {\n\t\t\treturn console.error(\"Screens: renderer must be function\");\n\t\t}\n\n\t\tthis.screens[screen.alias] = {\n\t\t\troute: route,\n\t\t\t...screen\n\t\t};\n\n\t\tthis.routesMap[route] = screen.alias;\n\t}\n\n\tswitch(alias) {\t\t\n\t\tthis.showLoader();\n\t\tthis.currentScreen?.DOMObject.remove();\n\t\t\n\t\tif(typeof this.screens[alias] == \"undefined\") {\n\t\t\tconsole.error(`Screens: \"${alias}\" not found`);\n\t\t\treturn ;\n\t\t}\n\n\t\tthis.currentScreen = this.screens[alias];\n\t\t\n\t\tconst screenContainer = document.createElement(\"div\");\n\t\tscreenContainer.classList.add(\"screen\");\n\t\tscreenContainer.id = alias;\n\t\tscreenContainer.dataset.alias = alias;\n\t\tscreenContainer.innerHTML = this.currentScreen.renderer();\n\t\tthis.currentScreen.DOMObject = screenContainer;\n\t\tthis.screensContainer.append(this.currentScreen.DOMObject);\n\n\t\tthis.currentScreen.initer(this);\n\t}\n\n\trouting() {\n\t\tsetInterval(() => {\n\t\t\tconst route = document.location.hash.split(\"#!\")[1];\n\t\t\tif(typeof route == \"undefined\" || route == \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconst alias = (typeof this.routesMap[route] == \"undefined\") \n\t\t\t\t? \"not-found-screen\"\n\t\t\t\t: this.routesMap[route];\n\n\t\t\tif(!this.currentScreen || this.currentScreen.alias != alias) {\n\t\t\t\tthis.switch(alias);\n\t\t\t}\n\t\t}, 50);\n\t}\n\n\tready() {\n\t\tif(this.currentScreen == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.currentScreen.DOMObject) {\n\t\t\tthis.currentScreen.DOMObject = document.getElementsById(this.currentScreen.alias);\n\t\t}\n\n\t\tthis.hideLoader();\n\t\tthis.currentScreen.DOMObject.classList.add(\"a-show\");\n\t}\n\n\terror() {\n\t\tthis.currentScreen?.DOMObject.remove();\n\t\tthis.showErrorScreen();\n\t}\n\n\thideLoader() {\n\t\tthis.loader.classList.remove(\"a-show\");\n\t}\n\n\tshowLoader() {\n\t\tthis.loader.classList.add(\"a-show\");\n\t}\n\n\tshowErrorScreen(text) {\n\t\tthis.errorScreen.classList.add(\"a-show\");\n\t}\n\n\thideErrorScreen(text) {\n\t\tthis.errorScreen.classList.remove(\"a-show\");\n\t}\n\n\tgetScreens() {\n\t\treturn this.screens;\n\t}\n\n\tgetRoutesMap() {\n\t\treturn this.routesMap;\n\t}\n}", "import { hud } from \"./components/hud.js\";\nimport { Screens } from \"./components/Screens.js\";\n\ndocument.addEventListener(\"DOMContentLoaded\", e => {\n\tconsole.log(\"App init\");\n\n\thud();\n\n\tconst screens = new Screens(\".screens\", \".load-screen\", \".error-screen\");\n\tscreens.add(\"/\", {\n\t\talias: \"home\",\n\t\trenderer: () => {\n\t\t\treturn `

Hello world

`;\n\t\t},\n\t\tiniter: scr => {\n\t\t\tsetTimeout(() => scr.ready(), 1000);\n\t\t\tsetTimeout(() => scr.error(), 2000);\n\t\t}\n\t});\n\n\tscreens.add(\"-\", {\n\t\talias: \"not-found-screen\",\n\t\trenderer: () => {\n\t\t\treturn `

404 NOT FOUND

`;\n\t\t},\n\t\tiniter: scr => {\n\t\t\tscr.ready();\n\t\t}\n\t});\n\n\tconsole.log(screens.getScreens());\n\n\tscreens.routing();\n});"], - "mappings": "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", - "names": ["hud", "Screens", "screensContainerSelector", "loaderSelector", "errorScreenSelector", "route", "screen", "__spreadValues", "alias", "_a", "screenContainer", "text", "e", "hud", "screens", "Screens", "scr"] + "sourcesContent": ["let navToggleBtn;\nlet navigation;\n\nfunction navigationShow() {\n\tnavToggleBtn.dataset.navState = \"displayed\";\n\tnavToggleBtn.classList.remove(\"state-off\");\n\tnavToggleBtn.classList.add(\"state-on\");\n\n\tnavigation.classList.add(\"a-show\");\n}\n\nfunction navigationHide() {\n\tnavToggleBtn.dataset.navState = \"hidden\";\n\tnavToggleBtn.classList.remove(\"state-on\");\n\tnavToggleBtn.classList.add(\"state-off\");\n\n\tnavigation.classList.add(\"a-hide\");\n\tnavigation.classList.remove(\"a-show\");\n\n\tsetTimeout(() => {\n\t\tnavigation.classList.remove(\"a-hide\");\n\t}, 300);\n}\n\nfunction hud() {\n\tconsole.log(\"HUD init\");\n\n\tnavToggleBtn = document.querySelector(\".hud .nav-toggle\");\n\tnavigation = document.querySelector(\".hud .navigation\");\n\n\tnavToggleBtn.addEventListener(\"click\", e => {\n\t\tif(e.currentTarget.dataset.navState != \"displayed\") {\n\t\t\tnavigationShow();\n\t\t} else {\n\t\t\tnavigationHide();\n\t\t}\n\t});\n}\n\nexport {\n\thud,\n\tnavigationShow,\n\tnavigationHide\n}", "export class Screens {\n\tconstructor(screensContainerSelector, loaderSelector, errorScreenSelector) {\n\t\tthis.screens = {};\n\t\tthis.routesMap = {};\n\t\tthis.currentScreen = null;\n\t\tthis.eventsHandlers = {\n\t\t\tswitch: []\n\t\t};\n\n\t\tthis.screensContainer = document.querySelector(screensContainerSelector);\n\t\tthis.loader = document.querySelector(loaderSelector);\n\t\tthis.errorScreen = document.querySelector(errorScreenSelector);\n\t\tconsole.log(\"Screens Init\");\n\t}\n\n\t/**\n\t * \u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043C\u0438 \u044D\u043A\u0440\u0430\u043D\u0430\n\t * @param {string} route Like `/path/name`\n\t * @param {void} screen {alias, renderer, initer}\n\t */\n\tadd(route, screen) {\n\t\tif(typeof screen != \"object\") {\n\t\t\treturn console.error(\"Screens: screens must be object\");\n\t\t}\n\t\t\n\t\tif(typeof screen?.alias == \"undefined\") {\n\t\t\treturn console.error(\"Screens: undefined alias\");\n\t\t}\n\n\t\tif(typeof screen?.renderer != \"function\") {\n\t\t\treturn console.error(\"Screens: renderer must be function\");\n\t\t}\n\n\t\tthis.screens[screen.alias] = {\n\t\t\troute: route,\n\t\t\t...screen\n\t\t};\n\n\t\tthis.routesMap[route] = screen.alias;\n\t}\n\n\tswitch(alias) {\t\t\n\t\tthis.runSwitchHandlers(alias);\n\t\tthis.showLoader();\n\t\tthis.currentScreen?.DOMObject.remove();\n\t\t\n\t\tif(typeof this.screens[alias] == \"undefined\") {\n\t\t\tconsole.error(`Screens: \"${alias}\" not found`);\n\t\t\treturn ;\n\t\t}\n\n\t\tthis.currentScreen = this.screens[alias];\n\t\t\n\t\tconst screenContainer = document.createElement(\"div\");\n\t\tscreenContainer.classList.add(\"screen\");\n\t\tscreenContainer.id = alias;\n\t\tscreenContainer.dataset.alias = alias;\n\t\tscreenContainer.innerHTML = this.currentScreen.renderer();\n\t\tthis.currentScreen.DOMObject = screenContainer;\n\t\tthis.screensContainer.append(this.currentScreen.DOMObject);\n\n\t\tthis.currentScreen.initer(this);\n\t}\n\n\trouting() {\n\t\tsetInterval(() => {\n\t\t\tconst route = document.location.hash.split(\"#!\")[1];\n\t\t\tif(typeof route == \"undefined\" || route == \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconst alias = (typeof this.routesMap[route] == \"undefined\") \n\t\t\t\t? \"not-found-screen\"\n\t\t\t\t: this.routesMap[route];\n\n\t\t\tif(!this.currentScreen || this.currentScreen.alias != alias) {\n\t\t\t\tthis.switch(alias);\n\t\t\t}\n\t\t}, 50);\n\t}\n\n\tready() {\n\t\tif(this.currentScreen == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.currentScreen.DOMObject) {\n\t\t\tthis.currentScreen.DOMObject = document.getElementsById(this.currentScreen.alias);\n\t\t}\n\n\t\tthis.hideLoader();\n\t\tthis.currentScreen.DOMObject.classList.add(\"a-show\");\n\t}\n\n\terror(title, text) {\n\t\tthis.currentScreen?.DOMObject.remove();\n\t\tthis.errorScreen.querySelector(\".error-title\").innerHTML = title;\n\t\tthis.errorScreen.querySelector(\".error-text\").innerHTML = text;\n\t\tthis.showErrorScreen();\n\t}\n\n\thideLoader() {\n\t\tthis.loader.classList.remove(\"a-show\");\n\t}\n\n\tshowLoader() {\n\t\tthis.loader.classList.add(\"a-show\");\n\t}\n\n\tshowErrorScreen() {\n\t\tthis.errorScreen.classList.add(\"a-show\");\n\t}\n\n\thideErrorScreen() {\n\t\tthis.errorScreen.classList.remove(\"a-show\");\n\t}\n\n\tgetScreens() {\n\t\treturn this.screens;\n\t}\n\n\tgetRoutesMap() {\n\t\treturn this.routesMap;\n\t}\n\n\tonSwitch(cb) {\n\t\tthis.eventsHandlers.switch.push(cb);\n\t}\n\n\trunSwitchHandlers(alias) {\n\t\tfor(let handler of this.eventsHandlers.switch) {\n\t\t\thandler(this, alias);\n\t\t}\n\t}\n}", "import { hud, navigationShow, navigationHide } from \"./components/hud.js\";\nimport { Screens } from \"./components/Screens.js\";\n\ndocument.addEventListener(\"DOMContentLoaded\", e => {\n\tconsole.log(\"App init\");\n\n\thud();\n\n\tconst screens = new Screens(\".screens\", \".load-screen\", \".error-screen\");\n\tscreens.add(\"/\", {\n\t\talias: \"home\",\n\t\trenderer: () => {\n\t\t\treturn `

Hello world

`;\n\t\t},\n\t\tiniter: scr => {\n\t\t\tsetTimeout(() => scr.ready(), 1000);\n\t\t\tsetTimeout(() => scr.error(\"Error\", \"Just testing\"), 2000);\n\t\t}\n\t});\n\n\tscreens.add(\"-\", {\n\t\talias: \"not-found-screen\",\n\t\trenderer: () => {\n\t\t\treturn `

404 NOT FOUND

`;\n\t\t},\n\t\tiniter: scr => {\n\t\t\tscr.ready();\n\t\t}\n\t});\n\n\tconsole.log(screens.getScreens());\n\n\tscreens.onSwitch((scr, alias) => {\n\t\tnavigationHide();\n\t});\n\n\tscreens.routing();\n});"], + "mappings": "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", + "names": ["navToggleBtn", "navigation", "navigationShow", "navigationHide", "hud", "e", "Screens", "screensContainerSelector", "loaderSelector", "errorScreenSelector", "route", "screen", "__spreadValues", "alias", "_a", "screenContainer", "title", "text", "cb", "handler", "e", "hud", "screens", "Screens", "scr", "alias", "navigationHide"] } diff --git a/webclient/index.php b/webclient/index.php index 81a759b..80fdc48 100644 --- a/webclient/index.php +++ b/webclient/index.php @@ -11,17 +11,73 @@

SHServ Web Client

- + +
+ + +
+ +
+ +
+
+
+ +
+
+
+ +
+

Error

+
+ Описание ошибки, а может ещё и с ссылками какими-то +
-
- -
- -
LOADING
-
ERROR
- \ No newline at end of file diff --git a/webclient/src/js/components/Screens.js b/webclient/src/js/components/Screens.js index 939b6cd..58b10f9 100644 --- a/webclient/src/js/components/Screens.js +++ b/webclient/src/js/components/Screens.js @@ -3,6 +3,9 @@ this.screens = {}; this.routesMap = {}; this.currentScreen = null; + this.eventsHandlers = { + switch: [] + }; this.screensContainer = document.querySelector(screensContainerSelector); this.loader = document.querySelector(loaderSelector); @@ -37,6 +40,7 @@ } switch(alias) { + this.runSwitchHandlers(alias); this.showLoader(); this.currentScreen?.DOMObject.remove(); @@ -88,8 +92,10 @@ this.currentScreen.DOMObject.classList.add("a-show"); } - error() { + error(title, text) { this.currentScreen?.DOMObject.remove(); + this.errorScreen.querySelector(".error-title").innerHTML = title; + this.errorScreen.querySelector(".error-text").innerHTML = text; this.showErrorScreen(); } @@ -101,11 +107,11 @@ this.loader.classList.add("a-show"); } - showErrorScreen(text) { + showErrorScreen() { this.errorScreen.classList.add("a-show"); } - hideErrorScreen(text) { + hideErrorScreen() { this.errorScreen.classList.remove("a-show"); } @@ -116,4 +122,14 @@ getRoutesMap() { return this.routesMap; } + + onSwitch(cb) { + this.eventsHandlers.switch.push(cb); + } + + runSwitchHandlers(alias) { + for(let handler of this.eventsHandlers.switch) { + handler(this, alias); + } + } } \ No newline at end of file diff --git a/webclient/src/js/components/hud.js b/webclient/src/js/components/hud.js index c4a98f4..5a31694 100644 --- a/webclient/src/js/components/hud.js +++ b/webclient/src/js/components/hud.js @@ -1,7 +1,44 @@ +let navToggleBtn; +let navigation; + +function navigationShow() { + navToggleBtn.dataset.navState = "displayed"; + navToggleBtn.classList.remove("state-off"); + navToggleBtn.classList.add("state-on"); + + navigation.classList.add("a-show"); +} + +function navigationHide() { + navToggleBtn.dataset.navState = "hidden"; + navToggleBtn.classList.remove("state-on"); + navToggleBtn.classList.add("state-off"); + + navigation.classList.add("a-hide"); + navigation.classList.remove("a-show"); + + setTimeout(() => { + navigation.classList.remove("a-hide"); + }, 300); +} + function hud() { console.log("HUD init"); + + navToggleBtn = document.querySelector(".hud .nav-toggle"); + navigation = document.querySelector(".hud .navigation"); + + navToggleBtn.addEventListener("click", e => { + if(e.currentTarget.dataset.navState != "displayed") { + navigationShow(); + } else { + navigationHide(); + } + }); } export { - hud + hud, + navigationShow, + navigationHide } \ No newline at end of file diff --git a/webclient/src/js/index.js b/webclient/src/js/index.js index 7442ae4..7b18660 100644 --- a/webclient/src/js/index.js +++ b/webclient/src/js/index.js @@ -1,4 +1,4 @@ -import { hud } from "./components/hud.js"; +import { hud, navigationShow, navigationHide } from "./components/hud.js"; import { Screens } from "./components/Screens.js"; document.addEventListener("DOMContentLoaded", e => { @@ -14,7 +14,7 @@ }, initer: scr => { setTimeout(() => scr.ready(), 1000); - setTimeout(() => scr.error(), 2000); + setTimeout(() => scr.error("Error", "Just testing"), 2000); } }); @@ -30,5 +30,9 @@ console.log(screens.getScreens()); + screens.onSwitch((scr, alias) => { + navigationHide(); + }); + screens.routing(); }); \ No newline at end of file diff --git a/webclient/src/scss/_app.scss b/webclient/src/scss/_app.scss index 079620f..c1a248c 100644 --- a/webclient/src/scss/_app.scss +++ b/webclient/src/scss/_app.scss @@ -17,22 +17,6 @@ letter-spacing: 0.01em; } -.load-screen { - display: none; - - &.a-show { - display: block; - } -} - -.error-screen { - display: none; - - &.a-show { - display: block; - } -} - .screen { display: none; @@ -41,4 +25,6 @@ } } -@import "app/_hud.scss"; \ No newline at end of file +@import "app/_hud.scss"; +@import "app/_load-screen.scss"; +@import "app/_error-screen.scss"; \ No newline at end of file diff --git a/webclient/src/scss/_palette-colors.scss b/webclient/src/scss/_palette-colors.scss index f8b2588..a502fe0 100644 --- a/webclient/src/scss/_palette-colors.scss +++ b/webclient/src/scss/_palette-colors.scss @@ -13,6 +13,7 @@ $color-magenta: #FF00CC; $color-hot-pink: #FF1492; $color-electric-blue:#00B3FF; +$color-orange: #ff6f30; // secondary accents $color-purple: #8A2CE2; @@ -31,7 +32,7 @@ // UI state $color-primary: $color-text-light; $color-secondary: $color-electric-blue; -$color-accent: $color-magenta; +$color-accent: $color-orange; $color-success: $color-neon-green; $color-warning: $color-neon-yellow; $color-error: #FF3C00; diff --git a/webclient/src/scss/_ui.scss b/webclient/src/scss/_ui.scss index eab440e..bd5a885 100644 --- a/webclient/src/scss/_ui.scss +++ b/webclient/src/scss/_ui.scss @@ -1,6 +1,7 @@ @import "_spacing.scss"; @import "ui_components/_typography.scss"; @import "ui_components/_palette.scss"; +@import "ui_components/_loader.scss"; @import "ui_components/_buttons.scss"; @import "ui_components/_forms.scss"; @import "ui_components/_lists.scss"; diff --git a/webclient/src/scss/app/_error-screen.scss b/webclient/src/scss/app/_error-screen.scss new file mode 100644 index 0000000..27ea262 --- /dev/null +++ b/webclient/src/scss/app/_error-screen.scss @@ -0,0 +1,37 @@ +.error-screen { + display: none; + + .container { + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + flex-wrap: nowrap; + gap: $space-4; + padding-top: 20%; + max-width: 420px; + width: 100%; + margin: auto; + } + + .icon-container { + color: $color-error; + + .ph, .ph-bold { + font-size: 72px; + } + } + + .error-title { + padding: $space-2 $space-3; + } + + .error-text { + font-size: $font-size-base; + text-align: center; + } + + &.a-show { + display: block; + } +} \ No newline at end of file diff --git a/webclient/src/scss/app/_hud.scss b/webclient/src/scss/app/_hud.scss index 2a42db9..7051f5c 100644 --- a/webclient/src/scss/app/_hud.scss +++ b/webclient/src/scss/app/_hud.scss @@ -15,14 +15,124 @@ height: 50px; background: $color-text-light; color: $color-black; + position: relative; + z-index: 710; - &:hover { - color: $color-accent; + &.state-off { + .icon-state-on { + display: none; + } } + + &.state-on { + .icon-state-off { + display: none; + } + } + + // &:hover { + // color: $color-success; + // } } .app-title { padding: $space-2 $space-4; text-transform: uppercase; } + + .navigation { + position: fixed; + z-index: 700; + left: 0; + top: 0; + right: 0; + bottom: 0; + + background: $color-black; + opacity: 0; + visibility: hidden; + + transition-duration: .2s; + transition-property: visibility, opacity; + + .container { + width: 100%; + max-width: 600px; + height: 100vh; + + margin: auto; + padding: $space-3; + + display: flex; + align-items: center; + } + + .nav-items { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: $space-10; + align-items: center; + justify-content: space-between; + + height: max-content; + margin-top: 100px; + + transition-duration: .2s; + transition-property: margin-top; + } + + .nav-link { + text-decoration: none; + color: $color-text-light; + } + + .nav-item { + width: 160px; + border: 2px solid $color-text-light; + padding: $space-6; + display: flex; + flex-direction: column; + gap: $space-3; + + transition-property: color, background, border-color; + transition-duration: .2s; + + .nav-icon { + text-align: center; + + .ph, .ph-bold { + font-size: 64px; + } + } + + .nav-text { + width: 100%; + text-align: center; + text-transform: uppercase; + font-size: $font-size-lg; + } + + &:hover { + background: $color-success; + border-color: $color-success; + color: $color-black; + } + } + + &.a-show { + visibility: visible; + opacity: 1; + + .nav-items { + margin-top: 0; + } + } + + &.a-hide { + .nav-items { + margin-top: -100px; + } + } + } } \ No newline at end of file diff --git a/webclient/src/scss/app/_load-screen.scss b/webclient/src/scss/app/_load-screen.scss new file mode 100644 index 0000000..7e9fa46 --- /dev/null +++ b/webclient/src/scss/app/_load-screen.scss @@ -0,0 +1,26 @@ +.load-screen { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + + visibility: hidden; + opacity: 0; + background: $color-black; + + transition-duration: .2s; + transition-property: opacity, visibility; + + &.a-show { + visibility: visible; + opacity: 1; + z-index: 900; + transition-duration: 0s; + } +} \ No newline at end of file diff --git a/webclient/src/scss/ui_components/_loader.scss b/webclient/src/scss/ui_components/_loader.scss new file mode 100644 index 0000000..83b2420 --- /dev/null +++ b/webclient/src/scss/ui_components/_loader.scss @@ -0,0 +1,22 @@ +/* HTML:
*/ +.loader { + width: 45px; + aspect-ratio: 1; + --c:no-repeat linear-gradient(#FF3C00 0 0); + background: + var(--c) 0 0, + var(--c) 0 100%, + var(--c) 50% 0, + var(--c) 50% 100%, + var(--c) 100% 0, + var(--c) 100% 100%; + animation: l12 1s infinite; +} +@keyframes l12 { + 0%,100%{background-size:20% 50%} + 16.67% {background-size:20% 30%, 20% 30%, 20% 50%, 20% 50%, 20% 50%, 20% 50%} + 33.33% {background-size:20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 50%, 20% 50%} + 50% {background-size:20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 30%, 20% 30%} + 66.67% {background-size:20% 50%, 20% 50%, 20% 30%, 20% 30%, 20% 30%, 20% 30%} + 83.33% {background-size:20% 50%, 20% 50%, 20% 50%, 20% 50%, 20% 30%, 20% 30%} +} \ No newline at end of file diff --git a/webclient/src/scss/ui_components/_palette.scss b/webclient/src/scss/ui_components/_palette.scss index d6e1b1f..234c663 100644 --- a/webclient/src/scss/ui_components/_palette.scss +++ b/webclient/src/scss/ui_components/_palette.scss @@ -13,60 +13,62 @@ /* BACKGROUND COLORS */ -.bg-primary { - background: $color-primary; -} +body { + .bg-primary { + background: $color-primary; + } -.bg-secondary { - background: $color-secondary; -} + .bg-secondary { + background: $color-secondary; + } -.bg-success { - background: $color-success; -} + .bg-success { + background: $color-success; + } -.bg-accent { - background: $color-accent; -} + .bg-accent { + background: $color-accent; + } -.bg-info { - background: $color-info; -} + .bg-info { + background: $color-info; + } -.bg-warning { - background: $color-warning; -} + .bg-warning { + background: $color-warning; + } -.bg-error { - background: $color-error; -} + .bg-error { + background: $color-error; + } -/* TEXT COLORS */ + /* TEXT COLORS */ -.text-color-primary { - color: $color-primary; -} + .text-color-primary { + color: $color-primary; + } -.text-color-secondary { - color: $color-secondary; -} + .text-color-secondary { + color: $color-secondary; + } -.text-color-success { - color: $color-success; -} + .text-color-success { + color: $color-success; + } -.text-color-accent { - color: $color-accent; -} + .text-color-accent { + color: $color-accent; + } -.text-color-info { - color: $color-info; -} + .text-color-info { + color: $color-info; + } -.text-color-warning { - color: $color-warning; -} + .text-color-warning { + color: $color-warning; + } -.text-color-error { - color: $color-error; -} + .text-color-error { + color: $color-error; + } +} \ No newline at end of file