ship-gis/public/css/common.css
jeonghyo.K 81255c4839 추가 수정사항 반영
1. 페이지네이션, 스크롤, 날짜 선택 ui 추가
2. 공통코드 조회 api 적용 (위성 조회, 등록 팝업 등)
3. 필수값 입력 메세지 추가
2026-02-11 16:49:26 +09:00

351 lines
26 KiB
CSS

/* 버튼Wrap */
.btnWrap {display: flex;flex-direction: row;justify-content: space-between;align-items: center; gap: 1rem; width: 100%; padding: 1rem 0;}
.popBtnWrap {display: flex;justify-content:center;align-items: center; gap: 1rem; width: 100%; padding: 1rem 0;}
.popBtnWrap > .btn { flex: 0 0 14rem;}
/* =========================
UI - 버튼
========================= */
.btn { min-width: 14rem; height: 4.2rem; flex: 1; display:flex;align-items:center; justify-content:center;font-size: var(--fs-ml);font-weight: var(--fw-bold); padding:1rem 2rem;}
.btnM {height: 4rem !important; font-weight: var(--fw-regular);}
.btnS { width: 100%; height: 3.2rem !important;font-size: var(--fs-m); color: var(--white); font-weight: normal;}
.btnLine {border: .1rem solid var(--secondary4); }
.basic {background-color: var(--primary1);}
.semi { background-color: var(--secondary6); }
.dark {background-color: var(--tertiary1);}
.deep {background-color: var(--secondary1);}
.btnToggle {display: inline-flex;gap: .6rem;}
.btnToggle::after {content: '';width: 1.8rem;height: 1.8rem;background: url('../images/ico_arrow_down_s.svg') no-repeat center / contain;flex-shrink: 0;transition: transform .2s ease;}
.btnToggle.is-open::after {transform: rotate(180deg);}
.schBtn {width: 8rem; height: 3.5rem;display:flex;align-items:center; justify-content:center;font-size: var(--fs-ms);font-weight: var(--fw-bold); background-color: var(--primary1); color: var(--white);}
.schBtn::before {content: "";display: inline-block; width: 1.4rem; height: 1.4rem; margin-right: 1rem;background:url('../images/ico_btnsch.svg') no-repeat center center/ 1.4rem; }
.btnMap {width: 2.8rem; height: 2.8rem; background: url(../images/ico_btn_map.svg) no-repeat center / contain;}
.btnMap:hover {background-image: url(../images/ico_btn_map_on.svg);}
/* =========================
UI - 탭스타일
========================= */
.tabDefault{display:flex;width:100%;}
.tabDefault button{flex:1;box-sizing:border-box;font-size:var(--fs-ml);color:#9B9EA8;height:4.8rem;font-weight:var(--fw-bold);background-color:var(--secondary1);border:1px solid var(--secondary3);}
.tabDefault button+button{margin-left:-1px;}
.tabDefault button.on{color:var(--white);background-color:var(--primary1);}
[data-tab-content][hidden] {display: none;}
/* 탭버튼 - bordeless */
.tabDefault.borderLess button {height: 4.2rem; border: 0; background-color: var(--tertiary1); font-weight: var(--fw-regular);}
.tabDefault.borderLess button.on {background-color: var(--secondary2);font-weight:var(--fw-bold);}
/**** 폼그룹 ****/
.formGroup > ul{width:100%;}
.formGroup > ul li{display:flex;gap:1rem;}
.formGroup > ul li+li{margin:.7rem 0;}
.formGroup > ul li .col{flex:1;}
.formGroup > ul li label {display: flex; align-items: center; flex: 1 1 50%;}
.formGroup > ul li label span {flex-shrink: 0;width: 7.5rem; color: var(--white);}
.formGroup > ul li label select, .formGroup > ul li label input,
.formGroup > ul li label .numInput {flex: 1;}
.formGroup > ul li label .labelRow {flex: 1; display: flex; align-items: center; gap: .5rem; color: var(--white);}
.formGroup > ul li label .labelRow > span{flex-shrink: 0; width: 2rem; text-align: center; }
.formGroup > ul li label .labelRow > input, .formGroup > ul li label .labelRow > .numInput {flex: 1;}
.formGroup > ul li.fgBtn { justify-content: flex-end; padding: 1rem 0 1.5rem;}
.formGroup > ul li.fgBtn.rowSB { justify-content: space-between;}
.formGroup > ul li.fgBtn.rowSB .infoTxt {color: var(--secondary4);}
/* 폼그룹 label width변경 */
.formGroup > ul.lagelW12 li label > span {flex-shrink: 0;width: 12rem; color: var(--white);}
/* 폼그룹 아코디언 */
.formGroup > ul .accordion {max-height: 0; overflow: hidden;transition: max-height .3s ease;}
.formGroup > ul .accordion.is-open {max-height: 1000px;}
.formGroup > ul .accordion li {display:flex;gap:1rem;}
/* 박스그룹 */
.schbox ul {display: flex;width: 100%;}
.schbox ul li:first-child {flex: 1;}
.schbox ul li:last-child {width: 9rem;}
.schbox ul li button {margin-left: 1rem;}
.boxGroup {display: flex; width: 100%;}
/* UI-input */
.schInput{height: 3.5rem; font-family: 'NanumSquare', sans-serif;font-size: var(--fs-m); color: var(--white);background-color: var(--tertiary1);padding: 0 1.2rem; border: 0;}
.schInput::placeholder { color:rgba(var(--white-rgb),.3); }
.dateInput {background:url(../images/ico_input_cal.svg) no-repeat center right .5rem/2.4rem; padding-right: 3rem; cursor: pointer;}
.dateInput { position: relative; }
.dateInput::-webkit-calendar-picker-indicator { opacity: 0; position: absolute; right: 0; width: 3rem; height: 100%;cursor: pointer; }
.dateInput::placeholder { color:var(--white); }
/* =========================
리스트
========================= */
/* 라인리스트 */
.lineList {display: flex;flex-direction: column;}
.lineList > li {display: flex; align-items:center; justify-content: flex-start; border-bottom: 1px solid rgba(var(--secondary4-rgb),.3); padding:1.4rem 1rem;}
.lineList > li.rowSB {justify-content: space-between;}
.lineList > li .row {display: flex; align-items: center; width: auto; gap:1.5rem;}
/* 라인리스트- rowSB */
.lineList.rowSB li {justify-content: space-between; padding: 1.4rem 0; width: 100%;}
.lineList.rowSB li button {width: 2.4rem; height: 2.4rem;}
/* bg리스트 */
.optionList {display: flex;flex-direction: column;gap: .6rem; width: 100%;background-color: var(--tertiary1);padding: 1rem;}
.optionList > li {display: flex;justify-content: space-between;}
/* hover 리스트 */
.colList {display: flex;flex-direction: column; gap: .8rem;}
.colList li { width: 100%;display: flex;align-items: center;justify-content: flex-start;}
.colList > li a:hover, .colList > li a.active {background-color: var(--secondary3); border: solid 2px var(--primary1);}
.colList li a {width: 100%; height:auto;background-color: var(--secondary1);border: solid 2px transparent; border-radius: .6rem; padding: 1rem 1.2rem;}
/* hover 리스트 - 라인 */
.colList.line li a {display: flex;align-items: center;justify-content: flex-start;height: 4rem; gap: .8rem;}
.colList.line li a > i {margin-right: .7rem;}
.colList.line li a > span { color: var(--white); font-weight: var(--fw-bold);}
.colList.line li a > span:nth-of-type(4) {font-weight:var(--fw-regular);}
.colList.line li a > span.legend{margin-left:auto;display:flex;align-items:center;}
.colList.line li a > span .flagIcon{width:2.6rem;height:auto;display:block;}
.colList.line li a > span .legendShip{width:2.4rem;height:auto;display:block;}
.colList.lineSB li a {display: flex;align-items: center;justify-content: space-between;height: 4rem; gap: .8rem;}
.colList.lineSB li a .title {font-size: var(--fs-m); font-weight: var(--fw-bold);}
.colList.lineSB li a .meta {font-size: var(--fs-s); font-weight: var(--fw-regular); color:rgba(var(--white-rgb),.5);}
/* 페이지네이션 */
.pagination {display: flex; align-items: center; justify-content: center; gap: .5rem; padding: 1.4rem 0;}
.pagination button {min-width: 2.8rem; height: 2.8rem; padding: 0 .6rem; border-radius: .4rem; background-color: var(--secondary1); color: var(--white); font-size: var(--fs-m); font-weight: var(--fw-bold); border: 1px solid var(--secondary3); cursor: pointer; transition: background-color .15s ease, border-color .15s ease;}
.pagination button:hover {background-color: var(--secondary3); border-color: var(--secondary4);}
.pagination button.on {background-color: var(--primary1); border-color: var(--primary1);}
.pagination button.on:hover {background-color: var(--primary2); border-color: var(--primary2);}
.pagination button.disabled {opacity: 0.4; cursor: default; pointer-events: none;}
.pagination .ellipsis {color: rgba(var(--white-rgb), .4); font-size: var(--fs-m); padding: 0 .2rem; user-select: none;}
/* 아코디언리스트 */
.accordionWrap {display: flex;flex-direction: column;transition: max-height 0.3s ease;}
.accordionWrap .acdHeader {display: flex; justify-content: space-between; align-items: center; height: 4rem; background-color: var(--secondary1); padding: 1rem; border-bottom: .1rem solid var(--secondary3);}
.accordionWrap .acdHeader > .title {font-weight: var(--fw-bold);}
.acdListBox {max-height: 0; overflow: hidden; transition: max-height 0.3s ease;}
.acdListBox.open {max-height: 50rem;}
.acdList {display: flex; flex-direction: column;}
.acdList > li { display: flex; align-items: center; min-height: 4rem; border-bottom: .1rem solid var(--secondary4); padding: 1rem 0 1rem 1rem;}
.acdList > li.state {gap: 2rem; }
.acdList.input > li.input label {display: flex; align-items: center; flex: 1 1 50%;}
.acdList.input > li.input label span {flex-shrink: 0;width: 9.5rem; color: var(--white);}
.acdList.input > li.input label input {flex: 1;}
.acdList.check > li.check {border-color: rgba(var(--secondary4-rgb),.3); }
.toggleListBtn {display: flex;align-items: center;width: 2.4rem;height: 2.4rem;background: url('../images/ico_arrow_toggle_down.svg') no-repeat center / contain;transition: transform 0.3s ease;}
.toggleListBtn.open {transform: rotate(180deg);}
/* 사이드패널 - 상세정보 박스 */
.detailWrap {display: flex;flex-direction: column;gap: .8rem;}
.detailBox {display: flex;flex-direction: column; gap: .4rem;background-color: var(--secondary1);border: solid 2px transparent; border-radius: .6rem; padding: 1rem 1.2rem;}
.detailBox > li {display: flex;align-items: flex-start;}
.detailBox > li.dbHeader {display:flex;align-items:center;justify-content:space-between;}
.detailBox > li.dbHeader > .headerL,
.detailBox > li.dbHeader > .headerR {display:flex;align-items:center;gap:.7rem;color:var(--white);}
.detailBox > li.dbHeader .name {font-size: var(--fs-ml); font-weight:var(--fw-bold);}
.detailBox > li.dbHeader .type {font-size: var(--fs-ml); font-weight:var(--fw-bold);color:var(--primary1);}
.detailBox > li.dbHeader .num {font-size: var(--fs-m); font-weight:var(--fw-bold);}
.detailBox > li.dbHeader .icoArrow {width:2rem;height:2rem;background:url('../images/ico_arrow_right_rnd_off.svg') no-repeat center/contain; margin-left: .5rem;}
.detailBox:has(.icoArrow:hover) {border: solid 2px var(--primary1);}
.detailBox > li.dbHeader .icoArrow:hover {background:url('../images/ico_arrow_right_rnd_on.svg') no-repeat center/contain;}
.detailBox > li > span {display: flex; color: var(--white); min-height: 2.1rem;}
.detailBox > li > .tit { font-size: var(--fs-ml);font-weight: var(--fw-bold);}
.detailBox > li > .label{min-width:9rem;flex-shrink: 0; font-weight:var(--fw-regular);}
.detailBox > li > .value {flex:1; font-weight:var(--fw-bold);position:relative;padding-left:1.2rem;}
.detailBox > li > .value::before {content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:1px;height:1.3rem;background-color:var(--white);}
/* .detailBox > li > .value:empty::before {top: 0.3em;transform: none;} */
.detailBox.stretch > li {align-items: stretch;}
.detailBox .dbList {flex: 1; display: flex;flex-direction: column; min-width: 0;width: auto;}
.detailBox .dbList > li {display: grid; grid-template-columns: 9rem 1fr; align-items: start; width: 100%;}
.detailBox .dbList > li > span {display: block !important; color: var(--white); min-height: 2.1rem;}
.detailBox .dbList > li > .label{min-width:9rem;flex-shrink: 0; font-weight:var(--fw-regular);}
.detailBox .dbList > li > .value {font-weight:var(--fw-bold);position:relative; min-width: 0; white-space: normal; word-break: break-all;overflow-wrap: anywhere; padding-left:1.2rem;}
.detailBox .dbList > li > .value::before {content:'';position:absolute;left:0;top: 0.3em;width:1px;height:1.3rem;background-color:var(--white);}
.btnArea {display: flex; align-items: center; justify-content:flex-end; width: 13rem; gap: .8rem;transform: translateY(-1rem);}
.btnArea .btnEdit {width: 2.8rem; height: 2.8rem; background: url(../images/ico_btn_edit.svg) no-repeat center / contain;}
.btnArea .btnDel {width: 2.8rem; height: 2.8rem; background: url(../images/ico_btn_del.svg) no-repeat center / contain;}
.btnArea .btnMap {width: 2.8rem; height: 2.8rem; background: url(../images/ico_btn_map.svg) no-repeat center / contain;}
.btnArea .btnEdit:hover {background-image: url(../images/ico_btn_edit_on.svg);}
.btnArea .btnDel:hover {background-image: url(../images/ico_btn_del_on.svg);}
.btnArea .btnMap:hover {background-image: url(../images/ico_btn_map_on.svg);}
.detailBox:has(.btnArea .btnEdit:hover), .detailBox:has(.btnArea .btnDel:hover), .detailBox:has(.btnArea .btnMap:hover) {border-color: var(--primary1);}
/* ship-map */
.shipMapContainer {position: absolute;display: flex;flex-direction: column;gap: .8rem; top: 50%; left: 50%;transform: translate(-50%, -50%);}
.shipMap {min-width: 8rem; min-height: 3rem;}
.shipMap a {display: flex;flex-direction: column; align-items: center; justify-content: center;width: 100%; height: 100%;font-size: var(--fs-s);color: var(--white); font-weight: var(--fw-bold); padding:.2rem .5rem;}
.shipMap a .status {font-size: var(--fs-xxs);font-weight: var(--fw-regular);}
.shipCaution {background-color: #750000;border: 1px solid #FF0000;}
.shipWarning {background-color: #8B6600;border: 1px solid #FFBC02;}
.shipDefault {background-color: #004F4F;border: 1px solid var(--primary1);}
/* =========================
지도 - 토스트팝업
========================= */
.toastContainer {position: fixed; bottom: 1.5rem; right: 5rem; display: flex; flex-direction: column; gap: .7rem;}
.toast {display: flex; justify-content: space-between; width: 56rem; height: 5rem; padding: 1rem 1rem 1rem 4.5rem;border-radius: .4rem;}
.toastWarining {background: #8B6600 url(../images/ico_toast_warning.svg)no-repeat top 1rem left 1.4rem /2.4rem;border: 1px solid #FFBC02;}
.toastCaution {background: #750000 url(../images/ico_toast_caution.svg)no-repeat top 1rem left 1.4rem /2.4rem;border: 1px solid #FF0000;}
.toast .toastMsg {font-size: var(--fs-ml);color: var(--white); font-weight: var(--fw-bold); }
.toast .toastR {display: flex; align-items: center;gap: 1rem;}
.toast .toastR .toastAction {font-size: var(--fs-s);color: var(--white); font-weight: var(--fw-regular);text-decoration: underline;}
.toast .toastR .toastClose {width: 2.4rem;height: 2.4rem; background: url(../images/ico_toast_close.svg)no-repeat center /contain;}
/* */
.cicle {width: 1.6rem; height: 1.6rem; border-radius: 50%; }
.default {background-color: var(--primary1);}
.red {background-color: #FF0000;}
.orng {background-color: #FFBC02;}
/* =========================
지도정보 - 팝업
========================= */
.popupMap {display: flex;flex-direction: column;position: absolute;top: 40%; left: 70%;transform: translate(-50%, -50%); width: auto;height: auto; background-color: var(--gray-scale3); z-index: 80;}
.popupMap > .pmHeader {display: flex;justify-content: space-between; align-items: center; height: 4rem; padding: .5rem 1rem;}
.popupMap > .pmHeader > .rowL{ display: flex;align-items: center; gap: .5rem;}
.popupMap > .pmHeader > .rowL > .shipType {width: 2.4rem; height: 2.4rem; background:var(--gray-scale2) url(../images/ico_ship_type_fising.svg)no-repeat center / 2.4rem;}
.popupMap > .pmBody {display: flex; flex-direction: column; padding: .8rem 1.2rem .8rem 1.2rem}
.popupMap > .pmFooter {display: flex; flex-direction: column; align-items: flex-start; justify-content: center; height: 3.2rem; border-top: 1px solid var(--gray-scale5); padding: 0 1rem;font-size: var(--fs-xs); color: var(--gray-scaleB);}
/* 선박정보팝업 */
.popupMap.shipInfo { width: 29rem;}
.popupMap.shipInfo > .pmHeader > .rowL > .shipName {font-size: var(--fs-ml); font-weight:var(--fw-bold);color: var(--gray-scaleD);}
.popupMap.shipInfo > .pmHeader > .rowL > .shipNum {font-size: var(--fs-m); font-weight:var(--fw-regular);color: var(--gray-scaleB);}
.popupMap.shipInfo > .pmHeader > .pmClose {width: 2.4rem;height: 2.4rem; background: url(../images/ico_ship_info_close.svg)no-repeat center /contain;}
/* 기상관측팝업 */
.popupMap.osbInfo { width: 22rem; left: 45%;}
.popupMap.osbInfo > .pmHeader > .rowL > .title {font-size: var(--fs-l); font-weight:var(--fw-bold);}
.popupMap.osbInfo > .pmHeader > .pmClose {width: 2.4rem;height: 2.4rem; background: url(../images/ico_ship_info_close.svg)no-repeat center /contain;}
/* popup-기상관측상태 */
.osbStatus {display: flex; flex-direction: column; gap: .6rem;}
.osbStatus li.date {border-radius: .5rem; background-color: #61666F; padding: 1rem; font-weight: var(--fw-bold);}
.osbStatus li {display: flex; justify-content: space-between; align-items: center; width: 100%;}
.osbStatus li > .label { font-weight: var(--fw-bold); color: var(--secondary4);}
.osbStatus li > .value { font-weight: var(--fw-bold);}
/* popup-gallery */
.popupMap > .pmGallery {position: relative; overflow: hidden; width: 29rem; height: 10.6rem;}
.pmGallery .galleryView{ width: 100%; height: 100%;}
.pmGallery .galleryView img{ width: 100%; height: 100%;object-fit: cover;}
.pmGallery .navBtn { position: absolute; width: 3.4rem; height: 3.4rem; top: 0; bottom: 0; margin: auto 0; display: flex; align-items: center; justify-content: center;}
.pmGallery .prev {background: url(../images/ico_arrow_left_big.svg) no-repeat center / 3.4rem; left: 0;}
.pmGallery .next {background: url(../images/ico_arrow_right_big.svg) no-repeat center / 3.4rem; right: 0;}
/* popup-Action */
.shipAction {display: flex; align-items: center; justify-content: space-between;}
.shipAction .detailBtn {position: relative; display: inline-flex; align-items: center; justify-content: center; width: 8rem; height: 2.8rem; background-color: var(--gray-scale6); color: var(--white); font-size: var(--fs-xs); font-weight: var(--fw-bold); padding-right: 2rem;}
.shipAction .detailBtn::after {content: "";position: absolute; width: 2rem; height: 2rem; top: 50%; right: 0.5rem;transform: translateY(-50%);background: url("../images/ico_cate.svg") no-repeat center / contain;}
.shipAction .favBtn {display: flex;align-items: center; justify-content: center; width: 2.8rem; height: 2.8rem; background: url(../images/ico_star.svg)no-repeat center / 2rem; background-color: var(--gray-scale5);}
.shipAction .shipTypeIco {display: flex; align-items: center; gap: .2rem; padding: 0 1rem;}
.shipAction .shipTypeIco li {display: flex; justify-content: center; align-items: center; width: 1.7rem; height: 1.7rem;border-radius: .2rem; background-color: var(--gray-scale5);color: var(--white); font-weight: var(--fw-heavy);font-size: var(--fs-xs);}
/* popup-출,입항지 */
.shipRoute {position:relative;width:100%;margin-top:1.5rem;}
.routeProgress {position:relative;width:100%;height:.5rem;padding:0 .55rem;display:flex;align-items:center;}
.routeProgress::before {content:"";position:absolute;top:50%;left:.55rem;width:1.1rem;height:1.1rem;background-color:var(--primary1);border-radius:50%;transform:translate(-50%,-50%);z-index:2;}
.routeProgress::after {content:"";position:absolute;top:50%;right:.55rem;width:1.1rem;height:1.1rem;background-color:var(--gray-scale6);border-radius:50%;transform:translate(50%,-50%);z-index:2;}
.routeProgress progress {width:100%;height:.5rem;background-color:var(--gray-scale5);appearance:none;-webkit-appearance:none;}
.routeProgress progress::-webkit-progress-bar {background-color:var(--gray-scale5);}
.routeProgress progress::-webkit-progress-value {background-color:var(--primary1);}
.routeProgress progress::-moz-progress-bar {background-color:var(--primary1);}
.routeShip {position:absolute;top:50%;left:calc(min(100%,0.55rem + (100% - 1.1rem)*(var(--progress)/100)));transform:translate(-50%,-50%);width:1.7rem;height:1.7rem;border-radius:50%;background-color:var(--white);border:5px solid var(--primary1);z-index:3;transition:left .3s ease;}
.shipRoute:has(progress[value="100"]) .routeProgress::after {background-color:var(--primary1);}
/* popup-선박상태 */
.shipStatus {display:flex;flex-direction: column; margin-top:1rem;width:100%;padding:0;}
.shipStatus li {display:flex;align-items:flex-start;width:100%;}
.shipStatus li.port {display:flex;justify-content:space-between;align-items:flex-start;width:100%; padding: .5rem 0;}
.shipStatus li .rowL,
.shipStatus li .rowR {display:flex;flex-direction:column;gap: .2rem;}
.shipStatus li .rowL {align-items:flex-start;}
.shipStatus li .rowR {align-items:flex-end;}
.shipStatus .portLabel {font-size: var(--fs-xs); color: var(--gray-scaleB);}
.shipStatus .portName {font-size: var(--fs-ms); color: var(--gray-scaleB); font-weight:var(--fw-bold);}
.shipStatus li.schedule {justify-content:space-between; background-color: var(--gray-scale2); padding: .5rem 1rem; border-top: 1px solid var(--gray-scale5);border-bottom: 1px solid var(--gray-scale5);}
.shipStatus .depart,
.shipStatus .arrive {font-size: var(--fs-xs); color: var(--gray-scaleD);font-weight:var(--fw-bold);padding-left: 1.7rem;}
.shipStatus .depart {background: url(../images/ico_clock1.svg)no-repeat center left / 1.2rem;}
.shipStatus .arrive {background: url(../images/ico_clock2.svg)no-repeat center left / 1.2rem;}
.shipStatus .scheduleDate {font-size: var(--fs-xs); color: var(--gray-scaleB);}
.shipStatus li.status { display: grid;grid-template-columns: 1fr 13rem 1fr;align-items: stretch;border-bottom: 1px solid var(--gray-scale5);}
.shipStatus li.status .statusItem { display: flex; flex-direction: column; align-items: flex-start; position: relative; padding:.5rem 1rem;}
.shipStatus li.status .statusItem:not(:last-child)::after {content: "";position: absolute;top: 50%;right: 0;width: 1px;height: 100%;background-color: var(--gray-scale5);transform: translateY(-50%);}
.shipStatus .statusLabel {font-size: var(--fs-xs); color: var(--gray-scaleB);}
.shipStatus .statusValue {font-size: var(--fs-ml); color: var(--gray-scaleD);}
/* popup-선박신호리스트 */
.shipSensor { display: flex; flex-direction: column;}
.shipSensor li { display: flex; justify-content: space-between; align-items: center; width: 100%; height: 3.2rem;}
.shipSensor li .sensorLabel {display: flex; align-items: center;font-size: var(--fs-xs); color: var(--gray-scaleB);}
.shipSensor li .sensorValue {display: flex; align-items: center; gap: .5rem; font-size: var(--fs-ms); color: var(--gray-scaleB); font-weight:var(--fw-bold);}
.shipSensor li .isNomal { width: .6rem; height: .6rem; border-radius: 50%; background-color: var(--primary3);}
.shipSensor li .isOff {width: .6rem; height: .6rem; border-radius: 50%; background-color: var(--gray-scale9);}
/* poppu-btn */
.trackBtn {flex: 1; height: 3rem; background-color: var(--gray-scale6);font-size: var(--fs-xs);font-weight: var(--fw-bold); border-radius:2rem;}
/* =========================
UI - 팝업
========================= */
.popupDim {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.popupUtillWrap { position: fixed;top: 50%; left: 50%;transform: translate(-50%, -50%);z-index :100;}
.popupUtill {display: flex; flex-direction: column; width: 52.5rem; height:auto;max-height: 80vh;overflow: hidden; background-color: var(--secondary2); border: .1rem solid var(--secondary3); padding:2.5rem 3rem;}
.popupUtill > .puHeader {display: flex; justify-content: space-between; align-items: center; padding-bottom: 2rem;}
.popupUtill > .puHeader > .title {font-weight: var(--fw-bold); font-size: var(--fs-xl);}
.popupUtill > .puHeader > .puClose {width: 2.2rem;height: 2.2rem; background: url(../images/ico_pop_utill_close.svg)no-repeat center /contain;}
.popupUtill > .puBody {flex: 1; min-height: 0; overflow-y: auto; padding-bottom: 1rem;}
.popupUtill > .puFooter { margin-top: auto; padding-top: 1rem;}
.popupUtill.cert {width: 46rem;}
.puTxtBox {display: flex; align-items: center; justify-content: center; min-height: 8rem; font-size: var(--fs-ml); border-top: .1rem solid var(--secondary4); padding-top: 4rem;}
/* =========================
테이블
========================= */
.required {color: var(--red-100);}
.table {table-layout: fixed; width:100%; border-top:.1rem solid var(--secondary4); border-bottom:.1rem solid var(--secondary4); text-align:left;line-height:1.6em;}
.table caption {position: absolute;top: 0;left: 0;width: 1px;height: 1px;font-size: 1px;clip: rect(1px, 1px, 1px, 1px);opacity: 0;}
.table tbody th,.table tbody td {border-bottom:.1rem solid var(--secondary4); word-break: break-all;line-height:1.6em; vertical-align: middle; color: var(--white);}
.table tbody th {background-color: var(--tertiary1); font-weight: var(--fw-bold); height: 5rem; padding:0 1rem;}
.table tbody td {padding:.5rem 0 .5rem 1rem;}
.table tbody td .helpTxt {color:rgba(var(--white-rgb),.3); padding-top: .5rem;}
.table tbody td .row {display: flex; align-items: center; gap: 1.4rem;}
.table tbody td .row.flex1 {gap: 1rem;}
.table tbody td .row.flex1 > * {flex: 1 1 0; min-width: 0;}
.table tbody td .row label.checkbox span {font-weight: var(--fw-regular);}
.table tbody td:has(+ th) {padding-right: 1rem;}
.colorBox {display: block; width: 2.8rem; height: 2.8rem; border-radius: .6rem;}
/* =========================
각 섹션별 UI
========================= */
/* 분석 */
.drawBtn {flex: 1; display:flex;flex-direction: column; gap: 1rem; align-items:center; justify-content:center;font-size: var(--fs-ml);font-weight: var(--fw-default); padding:1rem 2rem; width: 22.8rem; height: 10rem;border: .1rem solid var(--secondary4);}
.drawBtn i {width: 4rem; height: 4rem;}
.drawBtn .rect {background: url(../images/ico_draw_rect.svg) no-repeat center / contain;}
.drawBtn .polygon {background: url(../images/ico_draw_polygon.svg) no-repeat center / contain;}
.drawBtn.sm {flex-direction: row; height: 4.2rem; font-size: var(--fs-ms); font-weight: var(--fw-bold); }
.drawBtn.sm i {width: 1.6rem; height: 1.6rem;}
.analyRow {display: flex; justify-content: space-between; align-items: flex-start; gap: 1.5rem; width: 100%; height: 100%;}
.analyRow > .reg {flex: 1; flex-direction: column; gap: 1rem;}
.analyRow > .list {flex: 1;}
.mapCapture {width: 32rem; height: 18rem; background: var(--secondary1) url(../images/ico_img_capture.svg) no-repeat center / 7rem auto;}