Decoration login screen.

main
dongjin kim 7 months ago
parent d19abe838a
commit 6607a45931

@ -81,6 +81,7 @@ document.addEventListener('DOMContentLoaded', () => {
alert('모델 목록을 불러오는 데 실패했습니다.');
});
}
// ========== AI 모델 목록 로드 함수 끝 ==========
@ -93,22 +94,23 @@ document.addEventListener('DOMContentLoaded', () => {
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ filename: filename }) // { "filename": "CUUVA_..." }
})
.then(response => response.json())
.then(data => {
if (data.status === 'success') {
alert(`파일이 성공적으로 삭제되었습니다: ${filename}`);
loadModelList(); // 삭제 성공 시 목록 새로고침
} else {
alert(`삭제 실패: ${data.message}`);
}
body: JSON.stringify({filename: filename}) // { "filename": "CUUVA_..." }
})
.catch(error => {
console.error('Delete error:', error);
alert('삭제 중 오류가 발생했습니다.');
});
.then(response => response.json())
.then(data => {
if (data.status === 'success') {
alert(`파일이 성공적으로 삭제되었습니다: ${filename}`);
loadModelList(); // 삭제 성공 시 목록 새로고침
} else {
alert(`삭제 실패: ${data.message}`);
}
})
.catch(error => {
console.error('Delete error:', error);
alert('삭제 중 오류가 발생했습니다.');
});
}
// ========== 모델 삭제 요청 함수 끝 ==========
@ -178,29 +180,29 @@ document.addEventListener('DOMContentLoaded', () => {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.status === 'success') {
alert(`업로드 성공!\n파일: ${file.name}`);
globalFileInput.value = ''; // 파일 선택 초기화
fileNameDisplay.textContent = '선택된 파일 없음';
// 업로드 성공 시 모델 목록 새로고침
loadModelList();
} else {
alert(`업로드 실패: ${data.message}`);
}
})
.catch(error => {
console.error('Upload error:', error);
alert('업로드 중 오류가 발생했습니다.');
})
.finally(() => {
// 버튼 다시 활성화
globalUploadButton.disabled = false;
globalUploadButton.textContent = '업로드';
});
.then(response => response.json())
.then(data => {
if (data.status === 'success') {
alert(`업로드 성공!\n파일: ${file.name}`);
globalFileInput.value = ''; // 파일 선택 초기화
fileNameDisplay.textContent = '선택된 파일 없음';
// 업로드 성공 시 모델 목록 새로고침
loadModelList();
} else {
alert(`업로드 실패: ${data.message}`);
}
})
.catch(error => {
console.error('Upload error:', error);
alert('업로드 중 오류가 발생했습니다.');
})
.finally(() => {
// 버튼 다시 활성화
globalUploadButton.disabled = false;
globalUploadButton.textContent = '업로드';
});
});
}
@ -254,14 +256,19 @@ document.addEventListener('DOMContentLoaded', () => {
if (logoutButton) { // 로그아웃 버튼이 있는지 확인
logoutButton.addEventListener('click', () => {
console.log('Logout clicked');
// 로그인 페이지(루트 '/')로 이동
window.location.href = '/';
// [수정됨] 사용자에게 확인을 받습니다.
if (confirm('정말로 로그아웃하시겠습니까?')) {
// 확인을 누르면 로그인 페이지(루트 '/')로 이동
window.location.href = '/';
}
// 취소를 누르면 아무 일도 일어나지 않습니다.
});
}
// ========== 로그아웃 버튼 처리 끝 ==========
// ========== video-test.html 스크립트 추가 시작 ==========
// ========== dashboard.html 스크립트 추가 시작 ==========
const uri = "ws://10.10.11.246:8765"; // 필요하면 여기만 수정
const imgEl = document.getElementById("frame");
const statusEl = document.getElementById("status");
@ -270,6 +277,18 @@ document.addEventListener('DOMContentLoaded', () => {
const bboxContainerEl = document.getElementById("bbox-container");
const modelContainerEl = document.getElementById("current-model-container");
// [추가] 클래스별 색상 팔레트 (원하는 색상으로 수정 가능)
const CLASS_COLORS = [
'#FF3838', // 0: Red
'#38BFFF', // 1: Blue
'#38FF4E', // 2: Green
'#FFF238', // 3: Yellow
'#FF9D38', // 4: Orange
'#C538FF', // 5: Purple
'#FF38C5', // 6: Pink
'#FFFFFF' // 7: White
];
let lastFrameMeta = null;
if (imgEl && statusEl && frameInfoEl && detListEl && bboxContainerEl && modelContainerEl) {
@ -285,21 +304,21 @@ document.addEventListener('DOMContentLoaded', () => {
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ model: selectedModel }),
body: JSON.stringify({model: selectedModel}),
})
.then(response => response.json())
.then(data => {
console.log('Server response:', data);
if (data.status === 'success') {
logStatus(`모델 변경 완료: ${selectedModel}`);
} else {
logStatus(`모델 변경 실패: ${data.message}`, true);
}
})
.catch(error => {
console.error('Error setting model:', error);
logStatus('모델 변경 중 오류 발생', true);
});
.then(response => response.json())
.then(data => {
console.log('Server response:', data);
if (data.status === 'success') {
logStatus(`모델 변경 완료: ${selectedModel}`);
} else {
logStatus(`모델 변경 실패: ${data.message}`, true);
}
})
.catch(error => {
console.error('Error setting model:', error);
logStatus('모델 변경 중 오류 발생', true);
});
}
});
@ -326,7 +345,6 @@ document.addEventListener('DOMContentLoaded', () => {
` | FRAME ch=${meta.ch} ts=${meta.ts_us} w=${meta.w} h=${meta.h}`;
}
// Detections 표시 함수
// Detections 표시 함수 (수정됨)
function showDetections(meta) {
const items = meta.items || [];
@ -337,13 +355,13 @@ document.addEventListener('DOMContentLoaded', () => {
if (!imgEl || !lastFrameMeta) {
// [수정됨] x1,y1,x2,y2 형식에 맞게 텍스트 로그 수정
items.forEach((it, i) => {
// x1, y1, x2, y2 -> x, y, w, h
const x = it.x1;
const y = it.y1;
const w = it.x2 - it.x1;
const h = it.y2 - it.y1;
// x1, y1, x2, y2 -> x, y, w, h
const x = it.x1;
const y = it.y1;
const w = it.x2 - it.x1;
const h = it.y2 - it.y1;
lines.push(
lines.push(
`#${i} cls=${it.cls} tid=${it.tid} tag=${it.tag}` // prob, resv 대신 tid, tag 사용
+ ` x=${x.toFixed(3)} y=${y.toFixed(3)}`
+ ` w=${w.toFixed(3)} h=${h.toFixed(3)}`
@ -362,13 +380,13 @@ document.addEventListener('DOMContentLoaded', () => {
if (frameWidth === 0 || frameHeight === 0 || imgWidth === 0 || imgHeight === 0) {
// [수정됨] x1,y1,x2,y2 형식에 맞게 텍스트 로그 수정
items.forEach((it, i) => {
// x1, y1, x2, y2 -> x, y, w, h
const x = it.x1;
const y = it.y1;
const w = it.x2 - it.x1;
const h = it.y2 - it.y1;
// x1, y1, x2, y2 -> x, y, w, h
const x = it.x1;
const y = it.y1;
const w = it.x2 - it.x1;
const h = it.y2 - it.y1;
lines.push(
lines.push(
`#${i} cls=${it.cls} tid=${it.tid} tag=${it.tag}` // prob, resv 대신 tid, tag 사용
+ ` x=${x.toFixed(3)} y=${y.toFixed(3)}`
+ ` w=${w.toFixed(3)} h=${h.toFixed(3)}`
@ -394,8 +412,11 @@ document.addEventListener('DOMContentLoaded', () => {
const w = it.x2 - it.x1;
const h = it.y2 - it.y1;
// [추가] 현재 항목의 클래스(cls) 가져오기
const cls = it.cls;
lines.push(
`#${i} cls=${it.cls} tid=${it.tid} tag=${it.tag}` // prob, resv 대신 tid, tag 사용
`#${i} cls=${cls} tid=${it.tid} tag=${it.tag}` // prob, resv 대신 tid, tag 사용
+ ` x=${x.toFixed(3)} y=${y.toFixed(3)}`
+ ` w=${w.toFixed(3)} h=${h.toFixed(3)}`
);
@ -406,12 +427,23 @@ document.addEventListener('DOMContentLoaded', () => {
const boxWidth = w * ratio;
const boxHeight = h * ratio;
// [추가] 클래스(cls) 값에 따라 색상 결정
// cls를 정수로 변환 (혹시 문자열일 경우 대비)
const classIndex = parseInt(cls, 10) || 0;
// 모듈러(%) 연산을 사용해 색상 배열을 순환
const color = CLASS_COLORS[classIndex % CLASS_COLORS.length];
const bbox = document.createElement('div');
bbox.className = 'bbox';
bbox.style.left = `${boxLeft}px`;
bbox.style.top = `${boxTop}px`;
bbox.style.width = `${boxWidth}px`;
bbox.style.height = `${boxHeight}px`;
// [추가] CSS의 'border' 대신 'borderColor'를 동적으로 설정
// 이렇게 하면 style.css의 'border-width', 'border-style'은 유지됩니다.
bbox.style.borderColor = color;
bboxContainerEl.appendChild(bbox);
});
detListEl.textContent = lines.join("\n");
@ -421,7 +453,9 @@ document.addEventListener('DOMContentLoaded', () => {
function connect() {
const ws = new WebSocket(uri);
ws.binaryType = "arraybuffer";
ws.onopen = () => { logStatus(`연결됨: ${uri}`); };
ws.onopen = () => {
logStatus(`연결됨: ${uri}`);
};
ws.onclose = (ev) => {
logStatus(`연결 종료 (code=${ev.code}) 재접속 대기중...`, true);
setTimeout(connect, 2000);
@ -448,7 +482,7 @@ document.addEventListener('DOMContentLoaded', () => {
return;
}
if (data instanceof ArrayBuffer && lastFrameMeta) {
const blob = new Blob([data], { type: "image/jpeg" });
const blob = new Blob([data], {type: "image/jpeg"});
const url = URL.createObjectURL(blob);
imgEl.onload = () => {
URL.revokeObjectURL(url);

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

@ -11,7 +11,7 @@
<nav class="tabs">
<div>
<button id="tab-video" class="tab-button active">Video</button>
<button id="tab-models" class="tab-button">Al Models</button>
<button id="tab-models" class="tab-button">Settings</button>
</div>
<button id="logout-button" class="logout-button">Logout</button>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

@ -0,0 +1,82 @@
<svg width="297" height="39" viewBox="0 0 297 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2064_24724)">
<path d="M121.831 8.72656H123.794C123.794 8.72656 123.509 11.3594 125.167 14.0651C125.167 14.0651 126.129 15.5772 127.475 15.8623L128.762 16.0082V17.9381L127.634 17.8983C127.634 17.8983 125.81 17.9049 124.504 16.4592C124.504 16.4592 123.038 15.04 122.76 13.3887C122.76 13.3887 122.441 14.9206 120.87 16.6051C120.87 16.6051 120.027 17.4341 118.184 17.8718H116.924V16.0082C116.924 16.0082 118.615 16.0082 119.577 14.8543C119.577 14.8543 120.77 13.9855 121.42 11.5782C121.42 11.5782 121.593 11.6246 121.831 8.73319V8.72656Z" fill="black"/>
<path d="M116.605 8.97656H128.768" stroke="black" stroke-width="2.26806"/>
<path d="M128.623 12.4453H133.723" stroke="black" stroke-width="2.26806"/>
<path d="M134.359 7.69531V21.1843" stroke="black" stroke-width="2.26806"/>
<path d="M125.758 23.2089C125.758 20.4435 127.999 18.1953 130.771 18.1953C133.544 18.1953 135.785 20.4368 135.785 23.2089C135.785 25.981 133.544 28.2225 130.771 28.2225C127.999 28.2225 125.758 25.981 125.758 23.2089ZM130.771 26.2197C132.429 26.2197 133.776 24.8735 133.776 23.2089C133.776 21.5444 132.429 20.2047 130.771 20.2047C129.113 20.2047 127.767 21.551 127.767 23.2089C127.767 24.8669 129.113 26.2197 130.771 26.2197Z" fill="black"/>
<path d="M141.588 8.61719V17.5502C141.588 18.7969 142.609 19.8182 143.856 19.8182H155.481C156.728 19.8182 157.749 18.7969 157.749 17.5502V8.61719" stroke="black" stroke-width="2.26806"/>
<path d="M141.377 14.9219H158.248" stroke="black" stroke-width="2.26806"/>
<path d="M149.672 19.6719V26.2638" stroke="black" stroke-width="2.26806"/>
<path d="M139.465 25.5547H159.592" stroke="black" stroke-width="2.26806"/>
<path d="M39.0878 30.824C56.3901 22.6735 67.4917 11.1475 63.884 5.07283C60.2763 -1.00186 43.3255 0.675972 26.0233 8.82641C8.72099 16.9768 -2.38058 28.5029 1.2271 34.5775C4.83478 40.6522 21.7856 38.9744 39.0878 30.824Z" stroke="#969594" stroke-width="1.09424"/>
<path d="M6.08008 11.7969H22.1157V16.7906H16.8368V27.4478H11.0738V17.0824H6.08008V11.7969Z" fill="#00489B"/>
<path d="M24.2246 11.7969H40.2602V16.7906H34.9813V27.4478H29.2183V17.0824H24.2246V11.7969Z" fill="#00489B"/>
<path d="M59.0806 27.355H53.1253L48.1316 17.3676L42.8527 27.4478H36.7051L44.6765 11.7969H51.0164L59.0806 27.355Z" fill="#00489B"/>
<path d="M45.6914 26.1034C45.6914 24.7505 46.7856 23.6562 48.1385 23.6562C49.4914 23.6562 50.579 24.7505 50.579 26.1034C50.579 27.4563 49.4848 28.5439 48.1385 28.5439C46.7923 28.5439 45.6914 27.4496 45.6914 26.1034Z" fill="#00489B"/>
<path d="M76.8952 5.92188H79.024V7.57318H84.5417V9.59587H72.4453V7.6594H76.8952V5.92188Z" fill="black"/>
<path d="M72.545 18.4139H74.2892V23.6861H87.0619V8.53918C87.0619 8.53918 86.916 6.94093 89.0913 7.13325H93.203V9.06972H89.33V25.669H74.2361C74.2361 25.669 72.4455 25.8149 72.545 23.6861V18.4139Z" fill="black"/>
<path d="M187.393 19.3325H189.515V24.3196H203.355V7.42188H205.63V26.2959H189.09C189.09 26.2959 187.3 26.4418 187.399 24.313V19.3259L187.393 19.3325Z" fill="black"/>
<path d="M111.832 7.23319H94.9479V9.21609H111.255V12.8901H94.855V14.8266H102.886V18.4077H94.8086V20.3906H111.063V26.6245H113.192V20.2447C113.192 20.2447 113.431 18.5536 111.739 18.4541H104.968V14.8266H113.338V8.67892C113.338 8.67892 113.338 7.32604 111.839 7.22656L111.832 7.23319Z" fill="black"/>
<path d="M162.996 13.7076V7.41406H181.864V9.10516H165.171V10.6039H181.612V12.3348H165.125V13.701H181.771V15.4451H173.435V16.9903H182.401V18.7345H162.174V17.0434H171.319V15.4916H164.256C164.256 15.4916 162.757 15.5446 162.996 13.7076Z" fill="black"/>
<path d="M260.383 7.44531H262.512V9.18947H267.26V11.1193H255.164V9.18284H260.383V7.44531Z" fill="black"/>
<path d="M282.375 7.55469H284.503V9.29221H290.061V11.2287H277.162V9.29884H282.375V7.55469Z" fill="black"/>
<path d="M191.871 7.42188H194.338C194.338 7.42188 193.98 10.0679 196.062 12.7803C196.062 12.7803 197.276 14.2924 198.967 14.5842L200.585 14.7301V16.6666L199.173 16.6268C199.173 16.6268 196.871 16.6334 195.227 15.181C195.227 15.181 193.383 13.7618 193.032 12.1039C193.032 12.1039 192.634 13.6425 190.651 15.3336C190.651 15.3336 189.59 16.1692 187.269 16.6002H185.684V14.7301C185.684 14.7301 187.812 14.7301 189.026 13.5695C189.026 13.5695 190.525 12.7008 191.347 10.2802C191.347 10.2802 191.566 10.3266 191.871 7.42851V7.42188Z" fill="black"/>
<path d="M240.428 7.45312H242.377C242.377 7.45312 243.465 9.77424 245.574 10.5767C245.574 10.5767 247.119 11.1072 249.201 11.0873L250.952 11.0343V12.9708L249.48 12.984C249.48 12.984 246.953 13.1697 244.824 12.4667C244.824 12.4667 242.795 11.8102 241.363 9.99972C241.363 9.99972 239.937 11.8831 237.397 12.5397C237.397 12.5397 235.368 13.0702 233.444 12.9774H231.859V11.1072C231.859 11.1072 234.764 11.3791 237.085 10.2915C237.085 10.2915 239.26 9.61508 240.434 7.45976L240.428 7.45312Z" fill="black"/>
<path d="M208.914 7.61719H220.426C220.426 7.61719 221.779 7.76309 221.395 9.69956C221.395 9.69956 220.884 11.9013 218.755 14.0036C218.755 14.0036 216.746 15.9666 213.41 16.4242C213.41 16.4242 212.342 16.5701 211.182 16.5435H208.615V14.5341H212.004C212.004 14.5341 214.206 14.7065 215.97 13.4001C215.97 13.4001 217.88 12.1666 218.483 10.9596C218.483 10.9596 219.306 9.48071 217.542 9.53377H208.907V7.62382L208.914 7.61719Z" fill="black"/>
<path d="M251.496 16.5718V14.7812H231.27V16.5718H240.62V17.9977H232.152V19.7617H248.651V21.4528H232.032V24.9345C232.032 24.9345 232.032 26.3139 233.591 26.3868H251.225V24.6427H234.081V23.1174H250.714V19.198C250.714 19.198 250.82 17.9313 249.447 17.9645H242.55V16.5586H251.49L251.496 16.5718Z" fill="black"/>
<path d="M268.719 10.9669H271.041V8.71875H273.076V17.5722H270.968V16.5575H268.646V14.8133H271.094V12.7575H268.719V10.9669Z" fill="black"/>
<path d="M282.705 19.1229V22.3592H276.803V24.0105H290.59V22.3592H284.641V19.0234L282.705 19.1229Z" fill="black"/>
<path d="M295.771 7.77344H293.396V26.5281H295.771V7.77344Z" fill="black"/>
<path d="M227.403 7.375H225.029V26.5275H227.403V7.375Z" fill="black"/>
<path d="M78.2803 7.66406C75.3026 7.66406 72.8887 10.078 72.8887 13.0557C72.8887 16.0333 75.3026 18.4473 78.2803 18.4473C81.258 18.4473 83.6719 16.0333 83.6719 13.0557C83.6719 10.078 81.258 7.66406 78.2803 7.66406ZM78.2803 16.4313C76.4168 16.4313 74.8981 14.9192 74.8981 13.0491C74.8981 11.1789 76.4101 9.66686 78.2803 9.66686C80.1505 9.66686 81.6625 11.1789 81.6625 13.0491C81.6625 14.9192 80.1505 16.4313 78.2803 16.4313Z" fill="black"/>
<path d="M176.16 18.2763C175.146 17.1291 174.038 17.7922 172.387 17.7922C170.736 17.7922 169.661 17.4805 168.322 18.2299C167.513 18.6809 166.65 20.4051 166.65 21.8111C166.65 24.875 169.131 27.3552 172.195 27.3552C175.258 27.3552 177.739 24.875 177.739 21.8111C177.739 20.4051 177.029 19.2578 176.167 18.2763H176.16ZM172.195 25.3126C170.417 25.3126 168.978 23.7476 168.978 21.9702C168.978 20.1929 170.417 18.7538 172.195 18.7538C173.972 18.7538 175.411 20.1929 175.411 21.9702C175.411 23.7476 173.972 25.3126 172.195 25.3126Z" fill="black"/>
<path d="M261.244 9.32812C258.605 9.32812 256.463 11.4702 256.463 14.1096C256.463 16.7491 258.605 18.8911 261.244 18.8911C263.884 18.8911 266.026 16.7491 266.026 14.1096C266.026 11.4702 263.884 9.32812 261.244 9.32812ZM261.244 17.1072C259.586 17.1072 258.247 15.7676 258.247 14.1096C258.247 12.4517 259.586 11.1121 261.244 11.1121C262.902 11.1121 264.242 12.4517 264.242 14.1096C264.242 15.7676 262.902 17.1072 261.244 17.1072Z" fill="black"/>
<path d="M283.62 9.40625C280.716 9.40625 278.361 11.7605 278.361 14.6652C278.361 17.57 280.716 19.9242 283.62 19.9242C286.525 19.9242 288.879 17.57 288.879 14.6652C288.879 11.7605 286.525 9.40625 283.62 9.40625ZM283.62 17.9679C281.797 17.9679 280.324 16.489 280.324 14.6719C280.324 12.8548 281.803 11.3759 283.62 11.3759C285.437 11.3759 286.916 12.8548 286.916 14.6719C286.916 16.489 285.437 17.9679 283.62 17.9679Z" fill="black"/>
<path d="M271.04 18.7344V20.4785H257.902V18.7344H255.939V25.386C256.085 26.792 257.538 26.5731 257.538 26.5731H273.069V18.7344H271.04ZM271.04 24.8555H257.929V22.1829H271.04V24.8555Z" fill="black"/>
<path d="M78.3679 28.4922V29.8981H75.9672V36.4702H74.2894V29.8981H71.8887V28.4922H78.3745H78.3679Z" fill="black"/>
<path d="M82.5986 30.7028C83.0097 30.8885 83.348 31.1736 83.6132 31.5715C83.852 31.923 84.0111 32.3276 84.0775 32.7851C84.1172 33.057 84.1371 33.4417 84.1305 33.9523H79.853C79.8796 34.5558 80.0851 34.9736 80.4698 35.219C80.7019 35.3715 80.9871 35.4445 81.3186 35.4445C81.6701 35.4445 81.9553 35.3516 82.1741 35.1659C82.2935 35.0665 82.3996 34.9206 82.4925 34.7415H84.0576C84.0178 35.093 83.8255 35.4445 83.4872 35.8092C82.9633 36.3862 82.2272 36.6714 81.2789 36.6714C80.4963 36.6714 79.8066 36.4326 79.2097 35.9485C78.6129 35.4644 78.3145 34.6818 78.3145 33.5942C78.3145 32.5729 78.5864 31.797 79.1235 31.2532C79.6607 30.7094 80.3637 30.4375 81.2192 30.4375C81.7298 30.4375 82.1874 30.5303 82.5986 30.7094V30.7028ZM80.2841 32.0358C80.0652 32.2546 79.926 32.5464 79.8729 32.9111H82.5455C82.519 32.5199 82.3797 32.2214 82.1344 32.0159C81.889 31.8103 81.5773 31.7108 81.2125 31.7108C80.8146 31.7108 80.5029 31.8169 80.2841 32.0358Z" fill="black"/>
<path d="M86.1003 36.4816H84.5684V28.5234H86.1003V36.4816Z" fill="black"/>
<path d="M91.0615 30.7028C91.4726 30.8885 91.8108 31.1736 92.0761 31.5715C92.3149 31.923 92.474 32.3276 92.5403 32.7851C92.5801 33.057 92.6 33.4417 92.5934 33.9523H88.3159C88.3424 34.5558 88.548 34.9736 88.9327 35.219C89.1648 35.3715 89.4499 35.4445 89.7815 35.4445C90.133 35.4445 90.4182 35.3516 90.637 35.1659C90.7564 35.0665 90.8625 34.9206 90.9553 34.7415H92.5204C92.4807 35.093 92.2883 35.4445 91.9501 35.8092C91.4262 36.3862 90.6901 36.6714 89.7417 36.6714C88.9592 36.6714 88.2695 36.4326 87.6726 35.9485C87.0758 35.4644 86.7773 34.6818 86.7773 33.5942C86.7773 32.5729 87.0492 31.797 87.5864 31.2532C88.1236 30.7094 88.8266 30.4375 89.682 30.4375C90.1927 30.4375 90.6503 30.5303 91.0615 30.7094V30.7028ZM88.747 32.0358C88.5281 32.2546 88.3889 32.5464 88.3358 32.9111H91.0084C90.9819 32.5199 90.8426 32.2214 90.5972 32.0159C90.3519 31.8103 90.0402 31.7108 89.6754 31.7108C89.2775 31.7108 88.9658 31.8169 88.747 32.0358Z" fill="black"/>
<path d="M96.546 32.6646C96.5194 32.4457 96.4399 32.2468 96.3205 32.0677C96.1414 31.829 95.8695 31.7096 95.4915 31.7096C94.961 31.7096 94.5962 31.9683 94.3973 32.4855C94.2912 32.7641 94.2447 33.1354 94.2447 33.593C94.2447 34.0506 94.2978 34.3888 94.3973 34.6541C94.583 35.1382 94.9411 35.377 95.4584 35.377C95.8231 35.377 96.0884 35.2841 96.2409 35.0918C96.3934 34.8995 96.4863 34.6475 96.5194 34.3424H98.1177C98.0779 34.8066 97.9121 35.2443 97.607 35.6621C97.1163 36.332 96.3934 36.6635 95.4385 36.6635C94.4835 36.6635 93.7739 36.385 93.3229 35.8279C92.872 35.2709 92.6465 34.5347 92.6465 33.6328C92.6465 32.6115 92.8985 31.8224 93.3959 31.2653C93.8933 30.7082 94.583 30.4297 95.4584 30.4297C96.2077 30.4297 96.8179 30.5955 97.2887 30.9271C97.7662 31.2587 98.0447 31.8356 98.131 32.6712H96.5327L96.546 32.6646Z" fill="black"/>
<path d="M103.702 35.7448C103.204 36.3549 102.448 36.66 101.433 36.66C100.419 36.66 99.6628 36.3549 99.1654 35.7448C98.668 35.1347 98.416 34.3986 98.416 33.5364C98.416 32.6743 98.668 31.9581 99.1654 31.3347C99.6628 30.7113 100.419 30.4062 101.433 30.4062C102.448 30.4062 103.204 30.7179 103.702 31.3347C104.199 31.9581 104.451 32.6876 104.451 33.5364C104.451 34.3853 104.199 35.1347 103.702 35.7448ZM102.488 34.896C102.733 34.5776 102.853 34.12 102.853 33.5298C102.853 32.9396 102.733 32.482 102.488 32.1637C102.243 31.8453 101.891 31.6862 101.44 31.6862C100.989 31.6862 100.631 31.8453 100.386 32.1637C100.14 32.482 100.014 32.9396 100.014 33.5298C100.014 34.12 100.14 34.5776 100.386 34.896C100.631 35.2143 100.983 35.3734 101.44 35.3734C101.898 35.3734 102.249 35.2143 102.488 34.896Z" fill="black"/>
<path d="M112.535 30.5912C112.787 30.6907 113.02 30.8631 113.232 31.1085C113.398 31.3141 113.51 31.5661 113.57 31.8711C113.603 32.0701 113.623 32.3619 113.623 32.7465L113.61 36.4802H112.025V32.7001C112.025 32.4746 111.985 32.2889 111.912 32.143C111.773 31.8645 111.514 31.7319 111.143 31.7319C110.712 31.7319 110.407 31.9109 110.247 32.2624C110.161 32.4547 110.121 32.6802 110.121 32.9455V36.4802H108.59V32.9654C108.59 32.6139 108.55 32.3619 108.483 32.2027C108.351 31.9176 108.092 31.7783 107.708 31.7783C107.263 31.7783 106.965 31.9242 106.812 32.2027C106.726 32.3685 106.686 32.6073 106.686 32.9256V36.4736H105.154V30.5647H106.627V31.4202C106.819 31.1218 106.998 30.9095 107.17 30.7835C107.469 30.5581 107.86 30.4453 108.338 30.4453C108.789 30.4453 109.153 30.5448 109.432 30.7371C109.657 30.9162 109.823 31.1483 109.942 31.4268C110.148 31.0886 110.4 30.8432 110.705 30.6841C111.023 30.5249 111.382 30.4453 111.779 30.4453C112.045 30.4453 112.303 30.4917 112.555 30.5912H112.535Z" fill="black"/>
<path d="M121.998 30.5912C122.25 30.6907 122.482 30.8631 122.695 31.1085C122.86 31.3141 122.973 31.5661 123.033 31.8711C123.066 32.0701 123.086 32.3619 123.086 32.7465L123.073 36.4802H121.488V32.7001C121.488 32.4746 121.448 32.2889 121.375 32.143C121.236 31.8645 120.977 31.7319 120.606 31.7319C120.175 31.7319 119.87 31.9109 119.71 32.2624C119.624 32.4547 119.584 32.6802 119.584 32.9455V36.4802H118.052V32.9654C118.052 32.6139 118.013 32.3619 117.946 32.2027C117.814 31.9176 117.555 31.7783 117.17 31.7783C116.726 31.7783 116.428 31.9242 116.275 32.2027C116.189 32.3685 116.149 32.6073 116.149 32.9256V36.4736H114.617V30.5647H116.089V31.4202C116.282 31.1218 116.461 30.9095 116.633 30.7835C116.932 30.5581 117.323 30.4453 117.8 30.4453C118.251 30.4453 118.616 30.5448 118.895 30.7371C119.12 30.9162 119.286 31.1483 119.405 31.4268C119.611 31.0886 119.863 30.8432 120.168 30.6841C120.486 30.5249 120.844 30.4453 121.242 30.4453C121.508 30.4453 121.766 30.4917 122.018 30.5912H121.998Z" fill="black"/>
<path d="M125.638 30.5703V34.1117C125.638 34.4433 125.678 34.6953 125.758 34.8677C125.897 35.1661 126.176 35.312 126.587 35.312C127.111 35.312 127.475 35.0998 127.668 34.6754C127.767 34.4433 127.82 34.1448 127.82 33.7668V30.5703H129.352V36.4792H127.88V35.6303C127.88 35.6303 127.827 35.7033 127.774 35.7961C127.714 35.889 127.648 35.9686 127.568 36.0349C127.323 36.2537 127.091 36.4063 126.865 36.4858C126.64 36.5654 126.375 36.6052 126.07 36.6052C125.194 36.6052 124.604 36.2869 124.299 35.6502C124.126 35.3054 124.047 34.7947 124.047 34.1183V30.5703H125.645H125.638Z" fill="black"/>
<path d="M135.189 30.906C135.573 31.2243 135.766 31.7549 135.766 32.4976V36.4767H134.167V32.8823C134.167 32.5706 134.128 32.3318 134.048 32.166C133.902 31.861 133.617 31.7084 133.199 31.7084C132.688 31.7084 132.337 31.9273 132.145 32.3782C132.045 32.6104 131.999 32.9154 131.999 33.2802V36.4767H130.467V30.5678H131.959V31.4365C132.158 31.1315 132.344 30.9126 132.516 30.78C132.828 30.5412 133.232 30.4219 133.71 30.4219C134.313 30.4219 134.811 30.581 135.195 30.8994L135.189 30.906Z" fill="black"/>
<path d="M138.372 29.8669H136.84V28.4609H138.372V29.8669ZM136.84 30.5698H138.372V36.4787H136.84V30.5698Z" fill="black"/>
<path d="M143.048 32.6646C143.021 32.4457 142.942 32.2468 142.822 32.0677C142.643 31.829 142.371 31.7096 141.993 31.7096C141.463 31.7096 141.098 31.9683 140.899 32.4855C140.793 32.7641 140.747 33.1354 140.747 33.593C140.747 34.0506 140.8 34.3888 140.899 34.6541C141.085 35.1382 141.443 35.377 141.96 35.377C142.325 35.377 142.59 35.2841 142.743 35.0918C142.895 34.8995 142.988 34.6475 143.021 34.3424H144.62C144.58 34.8066 144.414 35.2443 144.109 35.6621C143.618 36.332 142.895 36.6635 141.94 36.6635C140.985 36.6635 140.276 36.385 139.825 35.8279C139.374 35.2709 139.148 34.5347 139.148 33.6328C139.148 32.6115 139.4 31.8224 139.898 31.2653C140.395 30.7082 141.085 30.4297 141.96 30.4297C142.71 30.4297 143.32 30.5955 143.791 30.9271C144.268 31.2587 144.547 31.8356 144.633 32.6712H143.035L143.048 32.6646Z" fill="black"/>
<path d="M147.623 32.8702C147.908 32.8304 148.113 32.7906 148.239 32.7309C148.458 32.6381 148.571 32.4922 148.571 32.2932C148.571 32.0478 148.485 31.882 148.312 31.7892C148.14 31.6964 147.894 31.6499 147.563 31.6499C147.191 31.6499 146.933 31.7428 146.78 31.9218C146.668 32.0545 146.595 32.2335 146.561 32.459H145.069C145.102 31.9484 145.248 31.5306 145.507 31.199C145.918 30.6883 146.621 30.4297 147.616 30.4297C148.266 30.4297 148.843 30.5557 149.34 30.8077C149.844 31.0597 150.096 31.5438 150.096 32.2601V34.9857C150.096 35.178 150.096 35.4035 150.109 35.6754C150.123 35.8744 150.149 36.007 150.196 36.08C150.242 36.1529 150.322 36.2126 150.414 36.2524V36.4779H148.75C148.703 36.3585 148.67 36.2457 148.65 36.1463C148.631 36.0402 148.617 35.9208 148.611 35.7882C148.398 36.0203 148.146 36.2192 147.868 36.3784C147.536 36.5707 147.158 36.6635 146.734 36.6635C146.197 36.6635 145.752 36.511 145.401 36.206C145.049 35.9009 144.877 35.4632 144.877 34.8995C144.877 34.17 145.155 33.6395 145.726 33.3145C146.038 33.1354 146.488 33.0094 147.092 32.9365L147.623 32.8702ZM148.564 33.593C148.465 33.6527 148.365 33.7058 148.266 33.7456C148.166 33.7854 148.027 33.8185 147.855 33.8517L147.503 33.918C147.172 33.9777 146.933 34.0506 146.787 34.1302C146.542 34.2761 146.416 34.495 146.416 34.7934C146.416 35.0587 146.488 35.251 146.641 35.3704C146.787 35.4897 146.973 35.5494 147.185 35.5494C147.523 35.5494 147.835 35.4499 148.12 35.251C148.405 35.052 148.551 34.6939 148.564 34.17V33.593Z" fill="black"/>
<path d="M150.441 31.7167V30.6423H151.27V28.9844H152.802V30.6423H153.757V31.7167H152.802V34.8601C152.802 35.1055 152.835 35.258 152.895 35.3177C152.955 35.3774 153.141 35.4106 153.452 35.4106C153.499 35.4106 153.545 35.4106 153.598 35.4106C153.651 35.4106 153.704 35.4039 153.751 35.3973V36.5578L153.021 36.5777C152.292 36.6043 151.794 36.4783 151.529 36.1997C151.357 36.0207 151.27 35.7488 151.27 35.3774V31.7299H150.441V31.7167Z" fill="black"/>
<path d="M155.899 29.8669H154.367V28.4609H155.899V29.8669ZM154.367 30.5698H155.899V36.4787H154.367V30.5698Z" fill="black"/>
<path d="M161.967 35.7448C161.47 36.3549 160.714 36.66 159.699 36.66C158.684 36.66 157.928 36.3549 157.431 35.7448C156.934 35.1347 156.682 34.3986 156.682 33.5364C156.682 32.6743 156.934 31.9581 157.431 31.3347C157.928 30.7113 158.684 30.4062 159.699 30.4062C160.714 30.4062 161.47 30.7179 161.967 31.3347C162.465 31.9581 162.717 32.6876 162.717 33.5364C162.717 34.3853 162.465 35.1347 161.967 35.7448ZM160.754 34.896C160.999 34.5776 161.118 34.12 161.118 33.5298C161.118 32.9396 160.999 32.482 160.754 32.1637C160.508 31.8453 160.157 31.6862 159.706 31.6862C159.255 31.6862 158.897 31.8453 158.651 32.1637C158.406 32.482 158.28 32.9396 158.28 33.5298C158.28 34.12 158.406 34.5776 158.651 34.896C158.897 35.2143 159.248 35.3734 159.706 35.3734C160.163 35.3734 160.515 35.2143 160.754 34.896Z" fill="black"/>
<path d="M168.161 30.906C168.546 31.2243 168.738 31.7549 168.738 32.4976V36.4767H167.14V32.8823C167.14 32.5706 167.1 32.3318 167.021 32.166C166.875 31.861 166.59 31.7084 166.172 31.7084C165.661 31.7084 165.31 31.9273 165.117 32.3782C165.018 32.6104 164.971 32.9154 164.971 33.2802V36.4767H163.439V30.5678H164.932V31.4365C165.131 31.1315 165.316 30.9126 165.489 30.78C165.8 30.5412 166.205 30.4219 166.682 30.4219C167.286 30.4219 167.783 30.581 168.168 30.8994L168.161 30.906Z" fill="black"/>
<path d="M170.967 34.5878C171.001 34.8597 171.074 35.0587 171.186 35.1714C171.385 35.377 171.75 35.4765 172.287 35.4765C172.599 35.4765 172.851 35.43 173.037 35.3438C173.222 35.251 173.315 35.1183 173.315 34.9393C173.315 34.7602 173.242 34.6342 173.096 34.548C172.95 34.4618 172.4 34.3026 171.452 34.0838C170.769 33.918 170.291 33.7124 170.026 33.467C169.761 33.2217 169.628 32.8702 169.628 32.4126C169.628 31.8688 169.84 31.4046 170.271 31.0133C170.702 30.622 171.306 30.4297 172.088 30.4297C172.831 30.4297 173.434 30.5756 173.899 30.874C174.363 31.1658 174.635 31.6765 174.701 32.3993H173.169C173.149 32.2004 173.09 32.0412 172.997 31.9285C172.824 31.7162 172.526 31.6168 172.108 31.6168C171.763 31.6168 171.518 31.6698 171.372 31.7759C171.226 31.882 171.153 32.0014 171.153 32.1473C171.153 32.3264 171.233 32.4524 171.385 32.532C171.538 32.6115 172.082 32.7574 173.017 32.9564C173.64 33.1023 174.098 33.3145 174.396 33.6063C174.695 33.8981 174.84 34.2695 174.84 34.7072C174.84 35.2841 174.622 35.7616 174.184 36.1264C173.746 36.4911 173.07 36.6768 172.161 36.6768C171.253 36.6768 170.543 36.4845 170.099 36.0932C169.654 35.7019 169.436 35.2046 169.436 34.6011H170.967V34.5878Z" fill="black"/>
<path d="M184.212 28.4922V29.8981H181.811V36.4702H180.133V29.8981H177.732V28.4922H184.218H184.212Z" fill="black"/>
<path d="M188.448 30.7028C188.859 30.8885 189.191 31.1736 189.463 31.5715C189.702 31.923 189.861 32.3276 189.927 32.7851C189.967 33.057 189.987 33.4417 189.98 33.9523H185.703C185.729 34.5558 185.935 34.9736 186.319 35.219C186.558 35.3715 186.837 35.4445 187.168 35.4445C187.52 35.4445 187.805 35.3516 188.024 35.1659C188.143 35.0665 188.249 34.9206 188.342 34.7415H189.907C189.867 35.093 189.675 35.4445 189.337 35.8092C188.813 36.3862 188.077 36.6714 187.128 36.6714C186.346 36.6714 185.656 36.4326 185.059 35.9485C184.462 35.4644 184.164 34.6818 184.164 33.5942C184.164 32.5729 184.436 31.797 184.973 31.2532C185.51 30.7094 186.213 30.4375 187.069 30.4375C187.579 30.4375 188.037 30.5303 188.448 30.7094V30.7028ZM186.134 32.0358C185.915 32.2546 185.776 32.5464 185.723 32.9111H188.395C188.369 32.5199 188.229 32.2214 187.984 32.0159C187.739 31.8103 187.427 31.7108 187.062 31.7108C186.664 31.7108 186.353 31.8169 186.134 32.0358Z" fill="black"/>
<path d="M193.933 32.6646C193.906 32.4457 193.827 32.2468 193.707 32.0677C193.528 31.829 193.256 31.7096 192.878 31.7096C192.348 31.7096 191.983 31.9683 191.784 32.4855C191.678 32.7641 191.631 33.1354 191.631 33.593C191.631 34.0506 191.685 34.3888 191.784 34.6541C191.97 35.1382 192.328 35.377 192.845 35.377C193.21 35.377 193.475 35.2841 193.628 35.0918C193.78 34.8995 193.873 34.6475 193.906 34.3424H195.504C195.465 34.8066 195.299 35.2443 194.994 35.6621C194.503 36.332 193.787 36.6635 192.825 36.6635C191.864 36.6635 191.161 36.385 190.71 35.8279C190.259 35.2709 190.033 34.5347 190.033 33.6328C190.033 32.6115 190.285 31.8224 190.783 31.2653C191.28 30.7082 191.97 30.4297 192.845 30.4297C193.594 30.4297 194.205 30.5955 194.675 30.9271C195.153 31.2587 195.431 31.8356 195.518 32.6712H193.919L193.933 32.6646Z" fill="black"/>
<path d="M200.406 30.6101C200.704 30.7361 200.95 30.9284 201.136 31.187C201.301 31.4059 201.394 31.6314 201.434 31.8635C201.467 32.0956 201.487 32.4736 201.487 33.0041V36.4659H199.889V32.8781C199.889 32.5598 199.836 32.3078 199.73 32.1089C199.59 31.837 199.325 31.6977 198.94 31.6977C198.556 31.6977 198.231 31.837 198.025 32.1089C197.82 32.3808 197.714 32.772 197.714 33.2761V36.4659H196.182V28.5078H197.714V31.3329C197.939 30.9881 198.191 30.7493 198.489 30.6167C198.781 30.4841 199.093 30.4111 199.418 30.4111C199.783 30.4111 200.114 30.4708 200.406 30.6035V30.6101Z" fill="black"/>
<path d="M207.29 30.906C207.675 31.2243 207.867 31.7549 207.867 32.4976V36.4767H206.269V32.8823C206.269 32.5706 206.229 32.3318 206.15 32.166C206.004 31.861 205.718 31.7084 205.301 31.7084C204.79 31.7084 204.439 31.9273 204.246 32.3782C204.147 32.6104 204.1 32.9154 204.1 33.2802V36.4767H202.568V30.5678H204.061V31.4365C204.259 31.1315 204.445 30.9126 204.618 30.78C204.929 30.5412 205.327 30.4219 205.811 30.4219C206.415 30.4219 206.912 30.581 207.297 30.8994L207.29 30.906Z" fill="black"/>
<path d="M213.842 35.7448C213.345 36.3549 212.589 36.66 211.574 36.66C210.559 36.66 209.803 36.3549 209.306 35.7448C208.809 35.1347 208.557 34.3986 208.557 33.5364C208.557 32.6743 208.802 31.9581 209.306 31.3347C209.803 30.7113 210.559 30.4062 211.574 30.4062C212.589 30.4062 213.345 30.7179 213.842 31.3347C214.34 31.9581 214.592 32.6876 214.592 33.5364C214.592 34.3853 214.34 35.1347 213.842 35.7448ZM212.629 34.896C212.874 34.5776 212.993 34.12 212.993 33.5298C212.993 32.9396 212.874 32.482 212.629 32.1637C212.383 31.8453 212.032 31.6862 211.581 31.6862C211.13 31.6862 210.772 31.8453 210.526 32.1637C210.281 32.482 210.155 32.9396 210.155 33.5298C210.155 34.12 210.281 34.5776 210.526 34.896C210.772 35.2143 211.123 35.3734 211.581 35.3734C212.038 35.3734 212.39 35.2143 212.629 34.896Z" fill="black"/>
<path d="M216.846 36.4816H215.314V28.5234H216.846V36.4816Z" fill="black"/>
<path d="M222.907 35.7448C222.409 36.3549 221.653 36.66 220.639 36.66C219.624 36.66 218.868 36.3549 218.37 35.7448C217.873 35.1347 217.621 34.3986 217.621 33.5364C217.621 32.6743 217.873 31.9581 218.37 31.3347C218.868 30.7113 219.624 30.4062 220.639 30.4062C221.653 30.4062 222.409 30.7179 222.907 31.3347C223.404 31.9581 223.656 32.6876 223.656 33.5364C223.656 34.3853 223.404 35.1347 222.907 35.7448ZM221.693 34.896C221.938 34.5776 222.058 34.12 222.058 33.5298C222.058 32.9396 221.938 32.482 221.693 32.1637C221.448 31.8453 221.096 31.6862 220.645 31.6862C220.194 31.6862 219.836 31.8453 219.591 32.1637C219.345 32.482 219.219 32.9396 219.219 33.5298C219.219 34.12 219.345 34.5776 219.591 34.896C219.836 35.2143 220.188 35.3734 220.645 35.3734C221.103 35.3734 221.448 35.2143 221.693 34.896Z" fill="black"/>
<path d="M227.264 30.5611C227.635 30.7137 227.94 30.9988 228.166 31.4166V30.5678H229.678V36.165C229.678 36.9276 229.552 37.498 229.293 37.8826C228.855 38.5458 228.013 38.8774 226.766 38.8774C226.017 38.8774 225.4 38.7315 224.929 38.433C224.452 38.1412 224.193 37.6969 224.14 37.1133H225.818C225.858 37.2924 225.931 37.425 226.023 37.5046C226.189 37.6439 226.461 37.7168 226.852 37.7168C227.403 37.7168 227.768 37.5311 227.953 37.1597C228.073 36.921 228.132 36.5231 228.132 35.9594V35.5814C227.986 35.8334 227.827 36.0191 227.662 36.1451C227.356 36.3772 226.959 36.4966 226.474 36.4966C225.718 36.4966 225.122 36.2313 224.671 35.6941C224.22 35.1636 223.994 34.4407 223.994 33.5322C223.994 32.6236 224.213 31.914 224.644 31.3172C225.075 30.7203 225.692 30.4219 226.488 30.4219C226.779 30.4219 227.038 30.4683 227.257 30.5545L227.264 30.5611ZM227.781 34.8055C228.026 34.5336 228.152 34.0959 228.152 33.499C228.152 32.9353 228.033 32.5109 227.801 32.2191C227.569 31.9273 227.257 31.7814 226.866 31.7814C226.335 31.7814 225.964 32.04 225.758 32.5507C225.652 32.8226 225.599 33.1542 225.599 33.5587C225.599 33.9036 225.659 34.2086 225.771 34.4805C225.977 34.9779 226.348 35.2299 226.879 35.2299C227.237 35.2299 227.535 35.0906 227.781 34.8187V34.8055Z" fill="black"/>
<path d="M230.965 37.641L231.164 37.6542C231.317 37.6608 231.469 37.6542 231.609 37.6343C231.748 37.6144 231.867 37.5746 231.967 37.5083C232.06 37.4486 232.146 37.316 232.225 37.117C232.305 36.9181 232.338 36.7987 232.325 36.7523L230.156 30.5781H231.867L233.154 34.9352L234.374 30.5781H236.012L233.989 36.3876C233.598 37.515 233.293 38.2113 233.061 38.4832C232.829 38.7551 232.371 38.8877 231.682 38.8877C231.542 38.8877 231.43 38.8877 231.35 38.8877C231.264 38.8877 231.138 38.8811 230.972 38.8678V37.6476L230.965 37.641Z" fill="black"/>
<path d="M241.622 28.4922H243.486L246.298 36.4702H244.494L243.97 34.8322H241.039L240.502 36.4702H238.777L241.622 28.4922ZM241.49 33.466H243.539L242.531 30.3159L241.49 33.466Z" fill="black"/>
<path d="M247.981 34.5878C248.014 34.8597 248.087 35.0587 248.2 35.1714C248.399 35.377 248.764 35.4765 249.301 35.4765C249.613 35.4765 249.865 35.43 250.05 35.3438C250.236 35.251 250.329 35.1183 250.329 34.9393C250.329 34.7602 250.256 34.6342 250.11 34.548C249.964 34.4618 249.414 34.3026 248.465 34.0838C247.782 33.918 247.305 33.7124 247.039 33.467C246.774 33.2217 246.642 32.8702 246.642 32.4126C246.642 31.8688 246.854 31.4046 247.285 31.0133C247.716 30.622 248.319 30.4297 249.102 30.4297C249.845 30.4297 250.448 30.5756 250.912 30.874C251.377 31.1658 251.649 31.6765 251.715 32.3993H250.183C250.163 32.2004 250.103 32.0412 250.01 31.9285C249.838 31.7162 249.54 31.6168 249.122 31.6168C248.777 31.6168 248.532 31.6698 248.386 31.7759C248.24 31.882 248.167 32.0014 248.167 32.1473C248.167 32.3264 248.246 32.4524 248.399 32.532C248.551 32.6115 249.095 32.7574 250.03 32.9564C250.654 33.1023 251.111 33.3145 251.41 33.6063C251.708 33.8981 251.854 34.2695 251.854 34.7072C251.854 35.2841 251.635 35.7616 251.198 36.1264C250.76 36.4911 250.083 36.6768 249.175 36.6768C248.266 36.6768 247.557 36.4845 247.112 36.0932C246.668 35.7019 246.449 35.2046 246.449 34.6011H247.981V34.5878Z" fill="black"/>
<path d="M253.751 34.5878C253.784 34.8597 253.857 35.0587 253.97 35.1714C254.168 35.377 254.533 35.4765 255.07 35.4765C255.382 35.4765 255.634 35.43 255.82 35.3438C256.005 35.251 256.098 35.1183 256.098 34.9393C256.098 34.7602 256.025 34.6342 255.879 34.548C255.734 34.4618 255.183 34.3026 254.235 34.0838C253.552 33.918 253.074 33.7124 252.809 33.467C252.544 33.2217 252.411 32.8702 252.411 32.4126C252.411 31.8688 252.623 31.4046 253.054 31.0133C253.485 30.622 254.089 30.4297 254.871 30.4297C255.614 30.4297 256.218 30.5756 256.682 30.874C257.146 31.1658 257.418 31.6765 257.484 32.3993H255.952C255.933 32.2004 255.873 32.0412 255.78 31.9285C255.608 31.7162 255.309 31.6168 254.891 31.6168C254.546 31.6168 254.301 31.6698 254.155 31.7759C254.009 31.882 253.936 32.0014 253.936 32.1473C253.936 32.3264 254.016 32.4524 254.168 32.532C254.321 32.6115 254.865 32.7574 255.8 32.9564C256.423 33.1023 256.881 33.3145 257.179 33.6063C257.478 33.8981 257.624 34.2695 257.624 34.7072C257.624 35.2841 257.405 35.7616 256.967 36.1264C256.529 36.4911 255.853 36.6768 254.944 36.6768C254.036 36.6768 253.326 36.4845 252.882 36.0932C252.438 35.7019 252.219 35.2046 252.219 34.6011H253.751V34.5878Z" fill="black"/>
<path d="M263.268 35.7448C262.771 36.3549 262.015 36.66 261 36.66C259.985 36.66 259.229 36.3549 258.732 35.7448C258.234 35.1347 257.982 34.3986 257.982 33.5364C257.982 32.6743 258.228 31.9581 258.732 31.3347C259.229 30.7113 259.985 30.4062 261 30.4062C262.015 30.4062 262.771 30.7179 263.268 31.3347C263.765 31.9581 264.017 32.6876 264.017 33.5364C264.017 34.3853 263.772 35.1347 263.268 35.7448ZM262.054 34.896C262.3 34.5776 262.419 34.12 262.419 33.5298C262.419 32.9396 262.293 32.482 262.054 32.1637C261.809 31.8453 261.457 31.6862 261.007 31.6862C260.556 31.6862 260.197 31.8453 259.952 32.1637C259.707 32.482 259.581 32.9396 259.581 33.5298C259.581 34.12 259.707 34.5776 259.952 34.896C260.197 35.2143 260.549 35.3734 261.007 35.3734C261.464 35.3734 261.809 35.2143 262.054 34.896Z" fill="black"/>
<path d="M268.263 32.6646C268.23 32.4457 268.157 32.2468 268.037 32.0677C267.858 31.829 267.586 31.7096 267.208 31.7096C266.678 31.7096 266.313 31.9683 266.114 32.4855C266.008 32.7641 265.962 33.1354 265.962 33.593C265.962 34.0506 266.015 34.3888 266.114 34.6541C266.3 35.1382 266.658 35.377 267.175 35.377C267.54 35.377 267.805 35.2841 267.958 35.0918C268.11 34.8995 268.21 34.6475 268.236 34.3424H269.834C269.795 34.8066 269.629 35.2443 269.324 35.6621C268.833 36.332 268.11 36.6635 267.155 36.6635C266.2 36.6635 265.491 36.385 265.04 35.8279C264.589 35.2709 264.363 34.5347 264.363 33.6328C264.363 32.6115 264.615 31.8224 265.113 31.2653C265.61 30.7082 266.3 30.4297 267.175 30.4297C267.925 30.4297 268.535 30.5955 269.006 30.9271C269.483 31.2587 269.762 31.8356 269.848 32.6712H268.249L268.263 32.6646Z" fill="black"/>
<path d="M272.042 29.8669H270.51V28.4609H272.042V29.8669ZM270.51 30.5698H272.042V36.4787H270.51V30.5698Z" fill="black"/>
<path d="M275.517 32.8702C275.802 32.8304 276.008 32.7906 276.134 32.7309C276.353 32.6381 276.465 32.4922 276.465 32.2932C276.465 32.0478 276.379 31.882 276.213 31.7892C276.041 31.6964 275.796 31.6499 275.464 31.6499C275.093 31.6499 274.834 31.7428 274.681 31.9218C274.575 32.0545 274.496 32.2335 274.463 32.459H272.97C273.004 31.9484 273.149 31.5306 273.408 31.199C273.819 30.6883 274.522 30.4297 275.517 30.4297C276.167 30.4297 276.744 30.5557 277.241 30.8077C277.745 31.0597 277.997 31.5438 277.997 32.2601V34.9857C277.997 35.178 277.997 35.4035 278.011 35.6754C278.024 35.8744 278.05 36.007 278.097 36.08C278.143 36.1529 278.223 36.2126 278.316 36.2524V36.4779H276.651C276.605 36.3585 276.571 36.2457 276.552 36.1463C276.532 36.0402 276.518 35.9208 276.505 35.7882C276.293 36.0203 276.041 36.2192 275.762 36.3784C275.431 36.5707 275.053 36.6635 274.628 36.6635C274.091 36.6635 273.647 36.511 273.295 36.206C272.944 35.9009 272.771 35.4632 272.771 34.8995C272.771 34.17 273.05 33.6395 273.62 33.3145C273.932 33.1354 274.383 33.0094 274.986 32.9365L275.517 32.8702ZM276.459 33.593C276.359 33.6527 276.26 33.7058 276.16 33.7456C276.061 33.7854 275.922 33.8185 275.749 33.8517L275.398 33.918C275.066 33.9777 274.827 34.0506 274.681 34.1302C274.436 34.2761 274.31 34.495 274.31 34.7934C274.31 35.0587 274.383 35.251 274.536 35.3704C274.681 35.4897 274.867 35.5494 275.079 35.5494C275.418 35.5494 275.729 35.4499 276.014 35.251C276.3 35.052 276.445 34.6939 276.459 34.17V33.593Z" fill="black"/>
<path d="M278.342 31.7167V30.6423H279.171V28.9844H280.703V30.6423H281.658V31.7167H280.703V34.8601C280.703 35.1055 280.736 35.258 280.796 35.3177C280.855 35.3774 281.041 35.4106 281.353 35.4106C281.399 35.4106 281.445 35.4106 281.499 35.4106C281.552 35.4106 281.605 35.4039 281.651 35.3973V36.5578L280.922 36.5777C280.192 36.6043 279.695 36.4783 279.429 36.1997C279.257 36.0207 279.171 35.7488 279.171 35.3774V31.7299H278.342V31.7167Z" fill="black"/>
<path d="M283.8 29.8669H282.268V28.4609H283.8V29.8669ZM282.268 30.5698H283.8V36.4787H282.268V30.5698Z" fill="black"/>
<path d="M289.862 35.7448C289.364 36.3549 288.608 36.66 287.594 36.66C286.579 36.66 285.823 36.3549 285.326 35.7448C284.828 35.1347 284.576 34.3986 284.576 33.5364C284.576 32.6743 284.822 31.9581 285.326 31.3347C285.823 30.7113 286.579 30.4062 287.594 30.4062C288.608 30.4062 289.364 30.7179 289.862 31.3347C290.359 31.9581 290.611 32.6876 290.611 33.5364C290.611 34.3853 290.366 35.1347 289.862 35.7448ZM288.648 34.896C288.893 34.5776 289.013 34.12 289.013 33.5298C289.013 32.9396 288.893 32.482 288.648 32.1637C288.403 31.8453 288.051 31.6862 287.6 31.6862C287.149 31.6862 286.791 31.8453 286.546 32.1637C286.3 32.482 286.174 32.9396 286.174 33.5298C286.174 34.12 286.3 34.5776 286.546 34.896C286.791 35.2143 287.143 35.3734 287.6 35.3734C288.058 35.3734 288.403 35.2143 288.648 34.896Z" fill="black"/>
<path d="M296.056 30.906C296.44 31.2243 296.633 31.7549 296.633 32.4976V36.4767H295.035V32.8823C295.035 32.5706 294.995 32.3318 294.915 32.166C294.769 31.861 294.484 31.7084 294.066 31.7084C293.556 31.7084 293.204 31.9273 293.012 32.3782C292.912 32.6104 292.866 32.9154 292.866 33.2802V36.4767H291.334V30.5678H292.826V31.4365C293.025 31.1315 293.211 30.9126 293.383 30.78C293.695 30.5412 294.099 30.4219 294.577 30.4219C295.18 30.4219 295.678 30.581 296.062 30.8994L296.056 30.906Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_2064_24724">
<rect width="296.632" height="38" fill="white" transform="translate(0 0.875)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

@ -7,22 +7,36 @@
<link rel="stylesheet" href="style.css">
</head>
<body class="login-page">
<h1 class="page-title">AI Mission Camera Console for Drones</h1>
<div class="login-container">
<h1>Al Drone Console v1.0</h1>
<h1>Login</h1>
<p class="login-subtext">Sign In to your account</p>
<form id="login-form">
<div class="input-group">
<label for="id">id</label>
<input type="text" id="id" name="id" required>
<span class="icon">👤</span>
<input type="text" id="id" name="id" placeholder="Username" required>
</div>
<div class="input-group">
<label for="password">password</label>
<input type="password" id="password" name="password" required>
<span class="icon">🔒</span>
<input type="password" id="password" name="password" placeholder="Password" required>
</div>
<button type="submit" class="login-button">Login</button>
</form>
</div>
<div class="footer-bar">
<img src="science_dep.png" width="134" height="30"/>
<img src="kait_logo_on.png" width="128" height="40"/>
<img src="img_tta_logo.svg" width="140" height="40"/>
<img src="nexreal_logo-dark.svg" width="100" height="25"/>
<img src="cuuva_logo.png" width="66" height="30"/>
<img src="nextchip_logo.png" width="99" height="25"/>
<img src="datamaker_logo.svg" width="100" height="30"/>
</div>
<script>
// DOM(HTML)이 모두 로드되었을 때 실행
document.addEventListener('DOMContentLoaded', () => {
@ -51,7 +65,7 @@
window.location.href = 'dashboard.html';
} else {
// 5. 일치하지 않으면: 사용자에게 알림 창을 표시합니다.
alert('ID 또는 비밀번호가 올바지 않습니다.');
alert('ID 또는 비밀번호가 올바지 않습니다.');
// (선택 사항) 틀린 비밀번호 필드를 비우고 다시 포커스합니다.
passwordInput.value = '';

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 368.5 99.4" style="enable-background:new 0 0 368.5 99.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:#0068B1;}
</style>
<g>
<g>
<radialGradient id="SVGID_1_" cx="175.7768" cy="58.9386" r="220.2525" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="0.9987" style="stop-color:#000000;stop-opacity:0.4"/>
</radialGradient>
<path class="st0" d="M44.8,39.6c0.7-3.1-0.3-6.3,0.7-9.6c1.4-4.5,3.8-9.4,7.2-12.5c31-28.6,73.7-16.6,105.9,5.2
c16.4,11.1,34.9,26.6,51.3,37.7c20.6,14,43.9,29.3,69.7,28.7c15.8-0.4,27.2-6.2,35.2-14.8c1.1-1.2,3.3-3,4.8-6.3
c0.3,1.4,4.2-0.5,3.2,1.4c-2.1,4-4.9,6.6-9.2,10.8c-9.3,8.9-22.5,16.2-37,17.4c-41.7,3.4-71.3-21.3-101.1-45
c-18.9-15-36.9-30.3-59.9-37.7C89.4,6.4,52.5,4.7,44.8,39.6"/>
<path class="st1" d="M39.2,49.8c0,1,0.1,2.6,0.2,4.8c-0.9-0.9-2-1.9-3.2-2.9L8.5,28.6H1.3v40.5h9.6V47.2c0-0.7,0-2.1-0.2-4.3
c0.7,0.7,1.4,1.3,2,1.8L41.6,69h7.2V28.6h-9.6L39.2,49.8L39.2,49.8z"/>
<polygon class="st1" points="68.1,52 86.1,52 86.1,44 68.1,44 68.1,36.6 99,36.6 99,28.6 57.6,28.6 57.6,69.1 99.4,69.1
99.4,60.4 68.1,60.4 "/>
<polygon class="st1" points="155.4,28.6 143,28.6 131.4,41.5 119.2,28.6 105.2,28.6 124.8,48.3 105.6,69.1 118.2,69.1 131.1,54.3
145.1,69.1 159.4,69.1 137.7,47.2 "/>
<path class="st1" d="M198.7,54.3c6.6,0,9.5-2.5,9.5-8.3v-9.2c0-5.7-2.9-8.3-9.5-8.3h-34.2V69h10.3V54.3h7.7l15.8,14.8h15.2
l-18-14.8H198.7z M174.8,36.7h19.8c2.7,0,3.4,0.5,3.4,2.4v4.7c0,1.9-0.7,2.4-3.4,2.4h-19.8V36.7z"/>
<polygon class="st1" points="230.9,52 248.9,52 248.9,44 230.9,44 230.9,36.6 261.8,36.6 261.8,28.6 220.4,28.6 220.4,69.1
262.2,69.1 262.2,60.4 230.9,60.4 "/>
<path class="st1" d="M290.2,28.6l-22.9,40.5H278l4.5-8.6h24l4.7,8.6H323l-23.2-40.5H290.2L290.2,28.6z M301.9,52.1h-14.8l7.5-13.8
L301.9,52.1z"/>
<polygon class="st1" points="339.3,60.3 339.3,28.6 328.9,28.6 328.9,69.1 368.7,69.1 368.7,60.3 "/>
</g>
<g>
<path class="st1" d="M1.7,90.1c0-2.9,1.1-5.1,2.9-7h2.7c-1.7,1.8-2.9,4.2-2.9,7s1.2,5.2,2.9,7H4.6C2.9,95.2,1.7,93,1.7,90.1z"/>
<path class="st1" d="M21.4,94.1h-5.3v3h-2.6v-3H8.3v-2.4h13.1C21.4,91.7,21.4,94.1,21.4,94.1z M14.7,88.5
c-1.5,1.3-3.6,2.2-5.9,2.2v-2.4c2,0,3.9-0.9,4.7-2.3H9v-2.4h11.7V86h-4.4c0,0.2-0.1,0.4-0.2,0.5l5.1,2l-1,2.2L14.7,88.5z"/>
<path class="st1" d="M22.4,97.1c1.7-1.8,2.9-4.2,2.9-7s-1.2-5.2-2.9-7h2.7c1.7,1.9,2.9,4.2,2.9,7s-1.1,5.1-2.9,7H22.4z"/>
<path class="st1" d="M32.5,91h-3.1v-7.4h2.4v5.2h0.9c1,0,2.2-0.1,3-0.4v2.1C34.9,90.8,33.5,91,32.5,91z M30,91.9h12v5h-2.5v-2.7
H30V91.9z M36.3,87.4h-2.6v-2.2h2.6v-1.7h2.4v7.8h-2.4V87.4z M42,83.5v8h-2.4v-8H42z"/>
<path class="st1" d="M43.7,93.8h13.1v2.4H43.7V93.8z M44,92v-2.5c2.6,0,5-2.5,5.5-6l2.6,0.4c-0.1,0.9-0.4,1.8-0.7,2.6l5.5,3.4
L55.5,92l-5.3-3.5C48.7,90.6,46.4,91.9,44,92z"/>
<path class="st1" d="M66.4,91.1h-5v2.7h2.8c1.2,0,2.6-0.3,3.4-0.6v2.4c-0.8,0.4-2.2,0.6-3.5,0.6h-5.3v-7.3h5v-2.6h-5v-2.4h7.5
L66.4,91.1L66.4,91.1z M70.9,96.7h-2.6V83.5h2.6V96.7z"/>
<path class="st1" d="M77.1,89.9c-2.5,0-4.1-1.3-4.1-3.2c0-1.9,1.6-3.2,4.1-3.2c1.9,0,3.3,0.7,3.8,1.9h2v-2h2.6V90H83v-2.1h-2
C80.5,89.1,79.1,89.9,77.1,89.9z M85.7,94.9v1.8H74.1v-4H83v-0.5h-8.9v-1.8h11.5v4h-8.9v0.5H85.7z M77.1,87.9c1,0,1.6-0.5,1.6-1.1
s-0.6-1.1-1.6-1.1s-1.6,0.5-1.6,1.1S76.1,87.9,77.1,87.9z"/>
<path class="st1" d="M100.7,83.9h2.3l6.2,7.6v-7.8h2.8v12.6h-2.3l-6.2-7.6v7.8h-2.8V83.9z"/>
<path class="st1" d="M114.1,83.9h9.2v2.4h-6.4v2.6h5.9v2.5h-5.9v2.7h6.6v2.4h-9.3L114.1,83.9L114.1,83.9z"/>
<path class="st1" d="M128.4,90.2l-4-6.3h3.3l2.5,4.1l2.6-4.1h3.1l-4,6.2l4.1,6.5h-3.2l-2.7-4.4l-2.7,4.4h-3.1L128.4,90.2z"/>
<path class="st1" d="M144.7,96.5l-2.4-4h-2.2v4h-2.8V83.9h5c3.1,0,5,1.7,5,4.3c0,1.7-0.8,3.1-2.3,3.8l2.9,4.5
C147.9,96.5,144.7,96.5,144.7,96.5z M140.1,90h2.1c1.5,0,2.3-0.6,2.3-1.8s-0.9-1.8-2.3-1.8h-2.1V90z"/>
<path class="st1" d="M149.2,83.9h9.2v2.4H152v2.6h5.9v2.5H152v2.7h6.6v2.4h-9.3V83.9H149.2z"/>
<path class="st1" d="M167.9,94.1h-4.8l-0.9,2.4h-2.9l4.8-12.6h2.9l4.8,12.6h-3.1L167.9,94.1z M167.1,91.6l-1.5-4.4l-1.5,4.4H167.1
z"/>
<path class="st1" d="M175.9,83.9V94h6.2v2.5h-8.9V83.9H175.9z"/>
<path class="st1" d="M196.2,83.9v12.6h-2.8V83.9H196.2z"/>
<path class="st1" d="M198.3,87.4h2.7v0.9c0.5-0.7,1.4-1.1,2.5-1.1c2.1,0,3.5,1.5,3.5,4v5.3h-2.7v-4.8c0-1.4-0.5-2.1-1.6-2.1
s-1.7,0.9-1.7,2.3v4.7h-2.7V87.4z"/>
<path class="st1" d="M213.1,96.7c-2.7,0-4.7-2-4.7-4.8s2-4.8,4.7-4.8c2.3,0,4.1,1.5,4.4,3.5h-2.8c-0.2-0.6-0.8-1.1-1.7-1.1
c-1.3,0-2.1,1-2.1,2.4s0.8,2.4,2.1,2.4c0.8,0,1.5-0.4,1.7-1.1h2.7C217.1,95.4,215.3,96.7,213.1,96.7z"/>
<path class="st1" d="M221.7,95.1c0,0.9-0.6,1.5-1.5,1.5s-1.5-0.7-1.5-1.5c0-0.9,0.6-1.6,1.5-1.6S221.7,94.2,221.7,95.1z"/>
<g>
<path class="st1" d="M183.6,94h3v2c0,0.8-0.3,1.3-0.7,1.7c-0.6,0.6-1.4,0.9-1.7,1l-0.7-0.8c0.8-0.2,1.6-0.5,1.7-1.3h-1.7V94z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

@ -3,42 +3,74 @@ body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f0f2f5;
color: #333;
background-color: #f0f2f5; /* 기본 배경색 (로그인 페이지 등에서 사용) */
color: #333; /* 기본 글자색 (로그인 페이지 등에서 사용) */
/* [수정] flexbox 레이아웃 적용 */
display: flex;
flex-direction: column;
height: 100vh; /* 전체 뷰포트 높이 사용 */
}
/* [추가] 로그인 페이지 좌측 상단 타이틀 */
.page-title {
position: absolute; /* 페이지 기준 절대 위치 */
top: 2rem; /* 위쪽 여백 */
left: 4rem; /* 왼쪽 여백 */
font-size: 2.5rem; /* 폰트 크기 */
color: #f0f0f0; /* 요청대로 밝은 색상 (흰색에 가까움) */
font-weight: 600;
/* 배경 이미지와 구분을 위한 텍스트 그림자 */
text-shadow: 0 2px 5px rgba(0, 0, 0, 0.6);
z-index: 10; /* 다른 요소들 위에 표시 */
}
/* ========== [Dark Theme 수정] ========== */
button {
cursor: pointer;
border-radius: 4px;
border: 1px solid #ccc;
/* [수정] 다크 테마 기본 버튼 스타일 */
border: 1px solid #555;
background-color: #3a3a3a;
color: #e0e0e0;
padding: 5px 10px;
}
/* ====================================== */
/* 1. 로그인 페이지 스타일 (index.html) */
/* ... (기존 로그인 스타일 동일) ... */
/* ... (기존 로그인 스타일 동일 - 다크 테마의 영향을 받지 않도록 고유 스타일 유지) ... */
.login-page {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
/* ========== [수정됨] 배경 이미지 적용 ========== */
background-image: url('drone_background.png'); /* 배경 이미지 파일 경로 */
background-size: cover; /* 화면을 꽉 채우도록 (비율 유지) */
background-position: center; /* 이미지 중앙 정렬 */
background-repeat: no-repeat; /* 이미지 반복 안 함 */
/* background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); <-- 기존 배경 제거 */
/* ============================================ */
}
.login-container {
background: #fff;
/* [수정] 배경색을 body 기본 배경색과 유사하게 변경 */
background: #f0f2f5;
padding: 2rem 3rem;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
text-align: center;
/* [추가] 너비를 기존보다 2배가량 넓게 설정 (예: 700px) */
width: 700px;
/* [추가] width 사용 시 padding이 너비에 포함되도록 설정 */
box-sizing: border-box;
}
.login-container h1 {
font-size: 1.5rem;
color: #444;
color: #444; /* body의 color(#e0e0e0)를 상속받지 않도록 명시 */
margin-bottom: 2rem;
}
@ -51,6 +83,7 @@ button {
display: block;
margin-bottom: 0.5rem;
font-weight: bold;
color: #333; /* body의 color(#e0e0e0)를 상속받지 않도록 명시 */
}
.input-group input {
@ -59,6 +92,8 @@ button {
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
background-color: #fff; /* 다크 테마 상속 방지 */
color: #333; /* 다크 테마 상속 방지 */
}
.login-button {
@ -78,7 +113,7 @@ button {
/* 2. 대시보드 페이지 스타일 (dashboard.html) */
header {
background-color: #333;
background-color: #333; /* 이미 어두움 */
padding: 0 1rem;
/* [수정] 크기 고정 */
flex-shrink: 0;
@ -93,7 +128,7 @@ header {
.tab-button {
background: none;
border: none;
color: #aaa;
color: #aaa; /* 이미 밝음 */
padding: 1rem 1.5rem;
font-size: 1rem;
font-weight: bold;
@ -118,6 +153,7 @@ header {
background-color: #c9302c;
}
/* ========== [Dark Theme 수정] ========== */
main {
padding: 1rem;
/* [수정] 남은 공간을 모두 채움 */
@ -125,7 +161,12 @@ main {
display: flex;
flex-direction: column;
min-height: 0; /* 내용이 많을 때 축소 가능하도록 */
/* [추가] 다크 테마 배경 및 글자색 */
background-color: #1a1a1a;
color: #e0e0e0;
}
/* ====================================== */
.tab-content {
display: none;
@ -140,6 +181,7 @@ main {
}
/* 2-1. Video 탭 (PDF 2페이지) */
/* (이 부분은 대부분 이미 어두운 테마 스타일을 가지고 있음) */
/* [추가] .video-container가 공간을 채우도록 */
.video-container {
@ -156,16 +198,13 @@ main {
/* [추가] .video-container 공간을 채움 */
flex-grow: 1;
min-height: 0; /* 축소 가능하도록 */
background-color: #111; /* video-test.html 배경색 적용 */
color: #eee; /* video-test.html 글자색 적용 */
background-color: #111; /* video-test.html 배경색 적용 (이미 어두움) */
color: #eee; /* video-test.html 글자색 적용 (이미 밝음) */
display: flex;
flex-direction: row; /* 가로 정렬로 변경 */
gap: 10px; /* video-test.html gap 적용 */
padding: 10px; /* video-test.html padding 적용 */
box-sizing: border-box;/* video-test.html box-sizing 적용 */
/* justify-content: center; */ /* 기존 중앙 정렬 제거 */
/* align-items: center; */ /* 기존 중앙 정렬 제거 */
/* font-size: 1.5rem; */ /* 기존 폰트 크기 제거 */
border-radius: 4px;
position: relative;
}
@ -179,7 +218,7 @@ main {
display: flex;
flex-wrap: wrap; /* 좁은 화면에서 줄바꿈 */
gap: 4px; /* 버튼 사이 간격 */
background-color: rgba(50, 50, 50, 0.7); /* 반투명 배경 */
background-color: rgba(50, 50, 50, 0.7); /* 반투명 배경 (이미 어두움) */
padding: 4px;
border-radius: 6px;
}
@ -218,32 +257,27 @@ main {
/* ========== [수정됨] 스타일 변경 끝 ========== */
/* ========== video-test.html 스타일 추가 ========== */
/* ========== video-test.html 스타일 추가 (이미 어두움) ========== */
#video-wrap {
flex: 2;
display: flex;
flex-direction: column;
gap: 4px;
/* #current-model 과 겹치지 않도록 z-index 추가 */
position: relative;
/* z-index: 1; */ /* [수정됨] z-index 제거 */
}
#info {
font-size: 12px;
color: #aaa;
/* [수정됨] 박스 위에 표시되도록 z-index 추가 */
position: relative;
z-index: 10;
}
#frame {
flex: 1; /* 높이 채우도록 추가 */
min-height: 0; /* flex-shrink 방지 */
flex: 1;
min-height: 0;
max-width: 100%;
/* max-height: calc(100vh - 80px); /* 기존 스타일 제거 */
background: #000;
object-fit: contain;
border: 1px solid #333;
/* [수정됨] 박스 컨테이너의 기준이 되도록 z-index 추가 */
position: relative;
z-index: 1;
}
@ -252,13 +286,13 @@ main {
display: flex;
flex-direction: column;
gap: 4px;
/* #video-res 와 겹치지 않도록 z-index 추가 */
position: relative;
z-index: 1;
}
#det-title {
font-weight: bold;
font-size: 13px;
/* main으로부터 color: #e0e0e0 상속받음 */
}
#det-list {
flex: 1;
@ -268,6 +302,7 @@ main {
padding: 6px;
overflow-y: auto;
white-space: pre;
/* .video-player로부터 color: #eee 상속받음 */
}
.status {
font-size: 11px;
@ -281,13 +316,11 @@ main {
/* [수정됨] .toolbar 스타일 */
.toolbar {
/* [수정] flexbox로 변경 */
display: flex;
justify-content: flex-end; /* 기존 text-align: right와 동일한 효과 */
justify-content: flex-end;
align-items: center;
gap: 10px; /* 요소 간 간격 */
gap: 10px;
margin-bottom: 1rem;
/* text-align: right; -- 제거 */
}
/* [추가됨] 새로고침 버튼을 맨 오른쪽으로 밀기 */
@ -295,18 +328,21 @@ main {
margin-left: auto;
}
/* ========== [Dark Theme 수정] ========== */
/* [추가됨] 파일명 표시 레이블 */
#file-name-display {
font-size: 0.9rem;
color: #555;
background-color: #f9f9f9;
border: 1px solid #ddd;
/* [수정] 글자색 */
color: #ccc;
/* [수정] 배경색 */
background-color: #2a2a2a;
/* [수정] 테두리 */
border: 1px solid #444;
padding: 5px 10px;
border-radius: 4px;
min-width: 350px;
text-align: left;
font-style: italic;
/* 버튼과 높이를 맞추기 위한 line-height */
line-height: 1.4;
}
@ -318,21 +354,26 @@ main {
.model-table {
width: 100%;
border-collapse: collapse;
background: white;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
/* [수정] 배경색 */
background: #2a2a2a;
box-shadow: none; /* 다크 모드에서는 그림자 제거 */
}
.model-table th,
.model-table td {
border: 1px solid #ddd;
/* [수정] 테두리 */
border: 1px solid #444;
padding: 0.8rem 1rem;
text-align: left;
/* main으로부터 color: #e0e0e0 상속받음 */
}
.model-table th {
background-color: #f9f9f9;
text-align: center; /* [수정] 헤더 중앙 정렬 */
/* [수정] 배경색 */
background-color: #333;
text-align: center;
}
/* ====================================== */
/* [수정됨] nth-child 선택자 수정 (컬럼 1, 4 중앙 정렬) */
.model-table td:nth-child(1),
@ -344,20 +385,27 @@ main {
text-align: center;
}
/* ========== [Dark Theme 수정] ========== */
.btn-browse {
cursor: pointer;
border-radius: 4px;
border: 1px solid #ccc;
/* [수정] 테두리 */
border: 1px solid #666;
padding: 5px 10px;
display: inline-block;
font-size: 14px;
font-family: Arial, sans-serif;
line-height: normal;
background-color: #e0e0e0;
/* [수정] 배경색 */
background-color: #4f4f4f;
/* [수정] 글자색 (기본 button 스타일에서 상속) */
/* color: #e0e0e0; */
}
.btn-browse:hover {
background-color: #d5d5d5;
/* [수정] hover 배경색 */
background-color: #5a5a5a;
}
/* ====================================== */
.btn-action { background-color: #4CAF50; color: white; border:none; }
.btn-delete { background-color: #f44336; color: white; border:none; }
@ -367,18 +415,142 @@ main {
position: absolute;
pointer-events: none; /* 클릭 이벤트 방지 */
z-index: 5; /* 프레임(1) 위, 정보(10) 아래 */
/* 위치와 크기는 app.js에서 동적으로 설정됩니다. */
top: 0;
left: 0;
}
.bbox {
position: absolute;
border: 2px solid red; /* 요청된 빨간색 테두리 */
box-sizing: border-box; /* 테두리 포함 크기 계산 */
border: 2px solid red;
box-sizing: border-box;
}
/* [추가] 요소 숨기기 위한 유틸리티 클래스 */
.hidden {
display: none;
}
/* ... (파일 상단 body, button 등 공통 스타일은 그대로 둡니다) ... */
/* 1. 로그인 페이지 스타일 (index.html) */
/* [수정] 이미지와 유사하게 변경 */
.login-page {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
/* [수정] 배경 이미지 제거 */
/* background-image: url('drone_background.png'); */
/* background-size: cover; */
/* background-position: center; */
/* background-repeat: no-repeat; */
/* body의 기본 배경색(#f0f2f5)이 적용됩니다. */
}
.login-container {
/* [수정] 배경색을 흰색으로 변경 */
background: #ffffff;
padding: 2rem 3rem;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
/* [수정] text-align 제거 (기본값 left) */
/* text-align: center; */
/* [수정] 너비를 좁게 설정 (예: 400px) */
width: 400px;
box-sizing: border-box;
}
.login-container h1 {
/* [수정] 폰트 크기 및 여백 조정 */
font-size: 2.2rem; /* 이미지처럼 크게 */
color: #333; /* 다크 테마 상속 방지 (기존 #444보다 진하게) */
margin-bottom: 0.5rem; /* 부제목과 가깝게 */
font-weight: bold;
}
/* [추가] 부제목 스타일 */
.login-subtext {
font-size: 1rem;
color: #888; /* 이미지처럼 연한 회색 */
margin-top: 0;
margin-bottom: 2.5rem; /* 입력창과 여백 */
}
.input-group {
margin-bottom: 1rem;
text-align: left;
/* [추가] 아이콘 배치를 위해 relative 속성 추가 */
position: relative;
}
.input-group label {
/* 이 스타일은 더 이상 사용되지 않지만, 다른 곳에서 쓸 수 있으므로 둡니다. */
display: block;
margin-bottom: 0.5rem;
font-weight: bold;
color: #333;
}
/* [추가] 아이콘 스타일 */
.input-group .icon {
position: absolute;
left: 1rem; /* input의 padding-left와 유사하게 */
top: 50%;
transform: translateY(-50%);
color: #aaa;
font-size: 1.1rem;
/* 아이콘이 입력 이벤트를 가로채지 않도록 */
pointer-events: none;
}
.input-group input {
width: 100%;
/* [수정] 아이콘 공간 확보를 위해 padding-left 늘림 */
padding: 1rem 1rem 1rem 3rem;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
background-color: #fff;
color: #333;
font-size: 1rem; /* placeholder 글자 크기 */
}
.login-button {
/* [수정] width: 100% 제거 (auto로 변경) */
width: auto;
/* [수정] 이미지와 유사한 padding으로 변경 */
padding: 0.8rem 2.5rem;
background-color: #5a67d8;
color: white;
border: none;
font-size: 1rem;
font-weight: bold;
margin-top: 1rem;
}
.login-button:hover {
background-color: #434190;
}
/* ... (기존 CSS 코드) ... */
/* [수정] 로그인 페이지 하단 흰색 바 */
.footer-bar {
position: absolute; /* 뷰포트(페이지 전체) 기준 */
bottom: 0; /* 하단에 고정 */
left: 0; /* 왼쪽 끝 */
width: 100%; /* 전체 너비 */
height: 50px; /* 요청한 높이 50px */
background-color: #ffffff; /* 흰색 배경 */
opacity: 0.5; /* [수정] 70% 투명도 (0.3 -> 0.7) */
z-index: 100;
/* [추가] Flexbox를 사용하여 중앙 정렬 및 간격 설정 */
display: flex;
justify-content: center; /* 수평 중앙 정렬 */
align-items: center; /* 수직 중앙 정렬 */
gap: 20px; /* 자식 요소(이미지) 사이의 간격 */
}
Loading…
Cancel
Save