Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 239f61c506 | |||
| 51932269c7 | |||
| 484216b3e3 |
78
about.html
78
about.html
@@ -42,50 +42,6 @@
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<main class="about-page about-refresh">
|
<main class="about-page about-refresh">
|
||||||
<section class="about-hero" id="overview" data-page-title="회사 개요">
|
|
||||||
<div class="about-hero-copy">
|
|
||||||
<p class="eyebrow">Company Overview</p>
|
|
||||||
<img
|
|
||||||
class="overview-logo"
|
|
||||||
src="assets/images/mobipin-logo.png"
|
|
||||||
alt="MOBIPIN · Mobile Pinnacle Technology"
|
|
||||||
/>
|
|
||||||
<h1>모비핀테크놀러지</h1>
|
|
||||||
<p>
|
|
||||||
모비핀테크놀러지는 스마트 플랫폼과 AI 로봇 개발 경험을 기반으로
|
|
||||||
AUTOSAR 전장, 관제 솔루션, 로봇 SW, 웹·앱 SI까지 연결하는 개발
|
|
||||||
조직입니다.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="overview-facts">
|
|
||||||
<dl>
|
|
||||||
<div>
|
|
||||||
<dt>회사명</dt>
|
|
||||||
<dd>주식회사 모비핀테크놀러지</dd>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<dt>설립일</dt>
|
|
||||||
<dd>2015년 3월</dd>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<dt>대표이사</dt>
|
|
||||||
<dd>권오규</dd>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<dt>종업원 수</dt>
|
|
||||||
<dd>40명 (2026년 3월 기준)</dd>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<dt>주소</dt>
|
|
||||||
<dd>
|
|
||||||
대구 북구 경대로17길 47, 8층 803호<br />서울시 강남구 논현로 416
|
|
||||||
운기빌딩 6층
|
|
||||||
</dd>
|
|
||||||
</div>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="about-section capability" id="capability" data-page-title="기술 역량">
|
<section class="about-section capability" id="capability" data-page-title="기술 역량">
|
||||||
<p class="eyebrow">Integrated Capability</p>
|
<p class="eyebrow">Integrated Capability</p>
|
||||||
<h2>경험을 기술로, 기술을 성과로 연결합니다.</h2>
|
<h2>경험을 기술로, 기술을 성과로 연결합니다.</h2>
|
||||||
@@ -119,11 +75,10 @@
|
|||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
<div class="company-profile-actions">
|
<div class="company-profile-actions">
|
||||||
<!-- Replace href with the final company profile PDF path. -->
|
|
||||||
<a
|
<a
|
||||||
class="button button-primary"
|
class="button button-primary"
|
||||||
href="assets/docs/MOBIPIN_회사소개서_20260918.pdf"
|
href="assets/docs/MOBIPIN_회사소개서_260929.pdf"
|
||||||
download="MOBIPIN_회사소개서_20260918.pdf"
|
download="MOBIPIN_회사소개서_260929.pdf"
|
||||||
>회사소개서 다운로드</a>
|
>회사소개서 다운로드</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -266,7 +221,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</article>
|
</article>
|
||||||
<article>
|
<article>
|
||||||
<span>Technology Teams</span><strong>개발실</strong>
|
<span>Development Teams</span><strong>개발실</strong>
|
||||||
<ul class="org-teams">
|
<ul class="org-teams">
|
||||||
<li>전장개발팀</li>
|
<li>전장개발팀</li>
|
||||||
<li>솔루션개발팀</li>
|
<li>솔루션개발팀</li>
|
||||||
@@ -392,24 +347,15 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="site-footer">
|
<footer class="site-footer">
|
||||||
<div>
|
<div>
|
||||||
<span
|
<strong>(주)모비핀테크놀러지</strong>
|
||||||
>고객센터 <a href="tel:0532140592">053-214-0592</a> | 평일 09:00 ~
|
<span class="footer-copyright">Copyright 2015 – 2026 | Mobipin Technology | All Rights Reserved</span>
|
||||||
18:00</span
|
</div>
|
||||||
>
|
<nav class="footer-links" aria-label="사이트 정책">
|
||||||
<strong>(주)모비핀테크놀러지</strong>
|
<button type="button" data-site-modal="privacy"><strong>개인정보 처리방침</strong></button>
|
||||||
<span class="footer-copyright"
|
<button type="button" data-site-modal="sitemap">사이트맵</button>
|
||||||
>Copyright 2015 – 2026 | Mobipin Technology | All Rights
|
</nav>
|
||||||
Reserved</span
|
</footer>
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<nav class="footer-links" aria-label="사이트 정책">
|
|
||||||
<button type="button" data-site-modal="privacy">
|
|
||||||
<strong>개인정보 처리방침</strong>
|
|
||||||
</button>
|
|
||||||
<button type="button" data-site-modal="sitemap">사이트맵</button>
|
|
||||||
</nav>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="js/main.js"></script>
|
<script src="js/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
BIN
assets/docs/MOBIPIN_회사소개서_260929.pdf
LFS
Normal file
BIN
assets/docs/MOBIPIN_회사소개서_260929.pdf
LFS
Normal file
Binary file not shown.
@@ -74,6 +74,15 @@
|
|||||||
alt=""
|
alt=""
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
|
<div class="capabilities-toolbar" aria-label="기술 역량 분류">
|
||||||
|
<button type="button" class="is-active" data-filter="automotive">
|
||||||
|
AUTOMOTIVE
|
||||||
|
</button>
|
||||||
|
<button type="button" data-filter="solution">SOLUTION</button>
|
||||||
|
<button type="button" data-filter="si">SI</button>
|
||||||
|
<button type="button" data-filter="robotics">ROBOTICS</button>
|
||||||
|
<!-- <button type="button" data-filter="certifications">PATENTS</button> -->
|
||||||
|
</div>
|
||||||
<div class="feature-content">
|
<div class="feature-content">
|
||||||
<p class="eyebrow" data-feature-category>Automotive</p>
|
<p class="eyebrow" data-feature-category>Automotive</p>
|
||||||
<h1 data-feature-title>전장 기술 역량</h1>
|
<h1 data-feature-title>전장 기술 역량</h1>
|
||||||
@@ -86,30 +95,21 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-table-wrap" data-feature-table hidden></div>
|
<div class="feature-table-wrap" data-feature-table hidden></div>
|
||||||
<div class="capabilities-toolbar" aria-label="기술 역량 분류">
|
<button
|
||||||
<button type="button" class="is-active" data-filter="automotive">
|
type="button"
|
||||||
AUTOMOTIVE
|
class="autoplay-toggle"
|
||||||
</button>
|
data-autoplay-toggle
|
||||||
<button type="button" data-filter="solution">SOLUTION</button>
|
aria-pressed="false"
|
||||||
<button type="button" data-filter="si">SI</button>
|
>
|
||||||
<button type="button" data-filter="robotics">ROBOTICS</button>
|
<span class="autoplay-progress" aria-hidden="true"></span>
|
||||||
<!-- <button type="button" data-filter="certifications">PATENTS</button> -->
|
<img
|
||||||
<button
|
src="assets/icons/pause.svg"
|
||||||
type="button"
|
alt=""
|
||||||
class="autoplay-toggle"
|
aria-hidden="true"
|
||||||
data-autoplay-toggle
|
data-autoplay-icon
|
||||||
aria-pressed="false"
|
/>
|
||||||
>
|
<span data-autoplay-label>멈춤</span>
|
||||||
<span class="autoplay-progress" aria-hidden="true"></span>
|
</button>
|
||||||
<img
|
|
||||||
src="assets/icons/pause.svg"
|
|
||||||
alt=""
|
|
||||||
aria-hidden="true"
|
|
||||||
data-autoplay-icon
|
|
||||||
/>
|
|
||||||
<span data-autoplay-label>멈춤</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<nav
|
<nav
|
||||||
class="project-dots"
|
class="project-dots"
|
||||||
@@ -156,16 +156,16 @@
|
|||||||
<p>H-VAC Controller Application Software</p>
|
<p>H-VAC Controller Application Software</p>
|
||||||
<p>기존 Non-AUTOSAR 기반으로 개발된 차량용 공조제어기 소프트웨어를 AUTOSAR 기반의 표준화된 구조로 전환하고, 소프트웨어 아키텍처 설계부터 기능 구현 및 검증까지 수행하였습니다. 기존 소프트웨어의 기능과 구조를 분석하여 AUTOSAR 환경에 적합하도록 ASW(Application Software) 영역의 아키텍처를 새롭게 설계하고, 제어기 소프트웨어의 구성 요소를 체계적으로 재구성하였습니다. AUTOSAR ASW 구조에 따라 SWC(Software Component)를 생성하고 각 Component에 필요한 PORT와 Interface를 정의하였으며, Event 및 Runnable을 구성하여 소프트웨어 기능 간의 관계와 실행 구조를 설계하였습니다. RTE( Runtime Environment)를 Generate하고 BSW 영역과 연계하여 Application Software와 하위 소프트웨어 계층 간의 정상적인 기능 호출 및 데이터 통신이 가능하도록 통합 작업을 수행하였습니다. 전환 과정에서 발생하는 기능 결함과 연계 오류에 대한 대응 업무를 수행하고, SW Test를 통해 각 기능의 정상 동작 여부를 검증하였습니다. Non-AUTOSAR 기반의 기존 공조제어기 소프트웨어를 AUTOSAR 표준 구조로 성공적으로 전환하고, ASW 아키텍처 설계부터 SWC 구성, RTE Generate 및 BSW 연계, SW Test와 결함 분석·Debugging까지 전반적인 AUTOSAR 전환 및 검증 업무를 수행하였습니다.</p>
|
<p>기존 Non-AUTOSAR 기반으로 개발된 차량용 공조제어기 소프트웨어를 AUTOSAR 기반의 표준화된 구조로 전환하고, 소프트웨어 아키텍처 설계부터 기능 구현 및 검증까지 수행하였습니다. 기존 소프트웨어의 기능과 구조를 분석하여 AUTOSAR 환경에 적합하도록 ASW(Application Software) 영역의 아키텍처를 새롭게 설계하고, 제어기 소프트웨어의 구성 요소를 체계적으로 재구성하였습니다. AUTOSAR ASW 구조에 따라 SWC(Software Component)를 생성하고 각 Component에 필요한 PORT와 Interface를 정의하였으며, Event 및 Runnable을 구성하여 소프트웨어 기능 간의 관계와 실행 구조를 설계하였습니다. RTE( Runtime Environment)를 Generate하고 BSW 영역과 연계하여 Application Software와 하위 소프트웨어 계층 간의 정상적인 기능 호출 및 데이터 통신이 가능하도록 통합 작업을 수행하였습니다. 전환 과정에서 발생하는 기능 결함과 연계 오류에 대한 대응 업무를 수행하고, SW Test를 통해 각 기능의 정상 동작 여부를 검증하였습니다. Non-AUTOSAR 기반의 기존 공조제어기 소프트웨어를 AUTOSAR 표준 구조로 성공적으로 전환하고, ASW 아키텍처 설계부터 SWC 구성, RTE Generate 및 BSW 연계, SW Test와 결함 분석·Debugging까지 전반적인 AUTOSAR 전환 및 검증 업무를 수행하였습니다.</p>
|
||||||
</article>
|
</article>
|
||||||
<article id="seo-autonomous-vehicle-fcm-controller">
|
|
||||||
<h4>Autonomous Vehicle FCM 제어기 개발</h4>
|
|
||||||
<p>Front Camera Module Controller</p>
|
|
||||||
<p>자율주행 차량의 핵심 전장 기능을 안정적으로 지원할 수 있도록 AUTOSAR 기반 FCM 제어기의 소프트웨어 아키텍처 설계 및 핵심 모듈 통합 개발을 수행하였습니다. AUTOSAR BSW 아키텍처를 기반으로 제어기 소프트웨어 구조를 설계하고 주요 BSW 모듈을 통합하여 차량 전장 환경에 적합한 소프트웨어 플랫폼을 구성하였습니다. 차량 진단 기능을 위한 Application을 개발하고 Cyber Security 관련 사양과 연계하여 ASK 등의 보안 기능을 적용하였으며, CAN 및 CAN-FD 기반 차량 통신 기능을 구현하여 차량 네트워크와의 안정적인 데이터 연계가 가능하도록 구성하였습니다. 또한 DCM을 비롯한 일부 하위 CAN 및 Ethernet AUTOSAR Layer Stack을 개발하였습니다. ISO 및 OEM 요구사항을 기반으로 DoCAN 및 DoIP Stack을 개발하여 CAN 및 Ethernet 환경에서의 진단 통신 기능을 구현하였으며, Bootloader 진단 사양과 Reprogramming 기능을 개발하여 제어기의 안정적인 소프트웨어 업데이트 환경을 구축하였습니다. 이와 함께 Application 영역의 진단 사양을 개발하여 제어기 내부 기능과 진단 시스템 간의 연계성을 확보하였습니다. 이를 통해 AUTOSAR 기반 BSW 아키텍처 설계 및 모듈 통합부터 차량 통신, 진단 Application, Cyber Security, Bootloader 및 DoCAN·DoIP 통신 Stack까지 FCM 제어기 개발에 필요한 핵심 소프트웨어 영역을 종합적으로 구현하였습니다.</p>
|
|
||||||
</article>
|
|
||||||
<article id="seo-hvac-autosar-bsw-development">
|
<article id="seo-hvac-autosar-bsw-development">
|
||||||
<h4>차량용 공조제어기 SW 개발</h4>
|
<h4>차량용 공조제어기 SW 개발</h4>
|
||||||
<p>H-VAC Controller Basic Software</p>
|
<p>H-VAC Controller Basic Software</p>
|
||||||
<p>차량용 공조제어기의 안정적인 소프트웨어 동작과 차량 전장 시스템과의 원활한 연계를 위해 AUTOSAR 기반의 BSW 및 Middleware를 개발하고, 제어기의 핵심 기능과 진단·보안·업데이트 기능을 통합 구현하였습니다. FBL(Flash Boot Loader) 기능을 구현하고 Sleep & Wake-up 사양을 개발하여 차량의 전원 상태 변화에 따른 제어기의 안정적인 동작 환경을 확보하였습니다. BSW Configuration 및 Implementation을 수행하고 Middleware를 구현하였으며, M-CAL Port를 비롯하여 ADC, PWM, ICU, IoHwAb, OS 등 주요 AUTOSAR 모듈을 설정하고 제어기 사양에 맞게 통합하였습니다. 또한 CAN 요구사항을 반영하여 관련 DB를 Import하고 Generate 및 Harmonize 과정을 수행함으로써 차량 네트워크 환경과 제어기 소프트웨어 간의 통신 연계성을 구현하였습니다. 보안 기능 강화를 위해 HSM, ASK, SFM 및 Crypto Library를 포팅하고 기능 검증을 수행하여 차량용 제어기에 요구되는 보안 기능을 안정적으로 적용하였습니다. 진단 영역에서는 DiagDCM 및 DEM Configuration을 수행하고 관련 기능을 검증하여 차량 진단 시스템과 제어기 간의 안정적인 진단 환경을 구축하였습니다. OTA(Over-The-Air) 기반 Background 및 Reprogramming 기능을 개발하고 검증하여 차량 소프트웨어를 안정적으로 업데이트할 수 있는 환경을 구현하였습니다. Watch-Dog 요구사항을 반영 개발하였습니다.</p>
|
<p>차량용 공조제어기의 안정적인 소프트웨어 동작과 차량 전장 시스템과의 원활한 연계를 위해 AUTOSAR 기반의 BSW 및 Middleware를 개발하고, 제어기의 핵심 기능과 진단·보안·업데이트 기능을 통합 구현하였습니다. FBL(Flash Boot Loader) 기능을 구현하고 Sleep & Wake-up 사양을 개발하여 차량의 전원 상태 변화에 따른 제어기의 안정적인 동작 환경을 확보하였습니다. BSW Configuration 및 Implementation을 수행하고 Middleware를 구현하였으며, M-CAL Port를 비롯하여 ADC, PWM, ICU, IoHwAb, OS 등 주요 AUTOSAR 모듈을 설정하고 제어기 사양에 맞게 통합하였습니다. 또한 CAN 요구사항을 반영하여 관련 DB를 Import하고 Generate 및 Harmonize 과정을 수행함으로써 차량 네트워크 환경과 제어기 소프트웨어 간의 통신 연계성을 구현하였습니다. 보안 기능 강화를 위해 HSM, ASK, SFM 및 Crypto Library를 포팅하고 기능 검증을 수행하여 차량용 제어기에 요구되는 보안 기능을 안정적으로 적용하였습니다. 진단 영역에서는 DiagDCM 및 DEM Configuration을 수행하고 관련 기능을 검증하여 차량 진단 시스템과 제어기 간의 안정적인 진단 환경을 구축하였습니다. OTA(Over-The-Air) 기반 Background 및 Reprogramming 기능을 개발하고 검증하여 차량 소프트웨어를 안정적으로 업데이트할 수 있는 환경을 구현하였습니다. Watch-Dog 요구사항을 반영 개발하였습니다.</p>
|
||||||
</article>
|
</article>
|
||||||
|
<article id="seo-autonomous-vehicle-fcm-controller">
|
||||||
|
<h4>Autonomous Vehicle FCM 제어기 개발</h4>
|
||||||
|
<p>Front Camera Module Controller</p>
|
||||||
|
<p>자율주행 차량의 핵심 전장 기능을 안정적으로 지원할 수 있도록 AUTOSAR 기반 FCM 제어기의 소프트웨어 아키텍처 설계 및 핵심 모듈 통합 개발을 수행하였습니다. AUTOSAR BSW 아키텍처를 기반으로 제어기 소프트웨어 구조를 설계하고 주요 BSW 모듈을 통합하여 차량 전장 환경에 적합한 소프트웨어 플랫폼을 구성하였습니다. 차량 진단 기능을 위한 Application을 개발하고 Cyber Security 관련 사양과 연계하여 ASK 등의 보안 기능을 적용하였으며, CAN 및 CAN-FD 기반 차량 통신 기능을 구현하여 차량 네트워크와의 안정적인 데이터 연계가 가능하도록 구성하였습니다. 또한 DCM을 비롯한 일부 하위 CAN 및 Ethernet AUTOSAR Layer Stack을 개발하였습니다. ISO 및 OEM 요구사항을 기반으로 DoCAN 및 DoIP Stack을 개발하여 CAN 및 Ethernet 환경에서의 진단 통신 기능을 구현하였으며, Bootloader 진단 사양과 Reprogramming 기능을 개발하여 제어기의 안정적인 소프트웨어 업데이트 환경을 구축하였습니다. 이와 함께 Application 영역의 진단 사양을 개발하여 제어기 내부 기능과 진단 시스템 간의 연계성을 확보하였습니다. 이를 통해 AUTOSAR 기반 BSW 아키텍처 설계 및 모듈 통합부터 차량 통신, 진단 Application, Cyber Security, Bootloader 및 DoCAN·DoIP 통신 Stack까지 FCM 제어기 개발에 필요한 핵심 소프트웨어 영역을 종합적으로 구현하였습니다.</p>
|
||||||
|
</article>
|
||||||
<article id="seo-a-spice-swe5-integration-verification">
|
<article id="seo-a-spice-swe5-integration-verification">
|
||||||
<h4>A-SPICE 기반 SWE5 통합검증</h4>
|
<h4>A-SPICE 기반 SWE5 통합검증</h4>
|
||||||
<p>Software Engineering Process Integration Test</p>
|
<p>Software Engineering Process Integration Test</p>
|
||||||
|
|||||||
@@ -54,7 +54,8 @@
|
|||||||
type="button"
|
type="button"
|
||||||
class="office-map-button"
|
class="office-map-button"
|
||||||
data-map-title="대구 본사"
|
data-map-title="대구 본사"
|
||||||
data-map-address="대구광역시 북구 경대로17길 47 IT융합산업빌딩"
|
data-map-address="대구광역시 북구 경대로17길 47 IT융합산업빌딩 8층 803호"
|
||||||
|
data-map-query="대구광역시 북구 경대로17길 47"
|
||||||
aria-label="대구 본사 지도 보기"
|
aria-label="대구 본사 지도 보기"
|
||||||
title="지도 보기"
|
title="지도 보기"
|
||||||
>
|
>
|
||||||
@@ -71,7 +72,8 @@
|
|||||||
type="button"
|
type="button"
|
||||||
class="office-map-button"
|
class="office-map-button"
|
||||||
data-map-title="서울 지사"
|
data-map-title="서울 지사"
|
||||||
data-map-address="서울특별시 강남구 논현로 416 운기빌딩"
|
data-map-address="서울특별시 강남구 논현로 416 운기빌딩 6층"
|
||||||
|
data-map-query="서울특별시 강남구 논현로 416"
|
||||||
aria-label="서울 지사 지도 보기"
|
aria-label="서울 지사 지도 보기"
|
||||||
title="지도 보기"
|
title="지도 보기"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -791,12 +791,12 @@ p {
|
|||||||
|
|
||||||
.feature-content {
|
.feature-content {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 108px;
|
top: var(--capabilities-content-top);
|
||||||
left: clamp(56px, 7vw, 132px);
|
left: var(--capabilities-gutter);
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
align-self: flex-start;
|
align-self: flex-start;
|
||||||
width: min(720px, 54%);
|
width: min(720px, 54%);
|
||||||
max-height: calc(100dvh - 204px);
|
max-height: calc(100dvh - var(--capabilities-content-top) - 96px);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overscroll-behavior: contain;
|
overscroll-behavior: contain;
|
||||||
scrollbar-width: thin;
|
scrollbar-width: thin;
|
||||||
@@ -804,24 +804,24 @@ p {
|
|||||||
|
|
||||||
.feature-content h1 {
|
.feature-content h1 {
|
||||||
max-width: 760px;
|
max-width: 760px;
|
||||||
margin: 14px 0 8px;
|
margin: 18px 0 12px;
|
||||||
font-size: 42px;
|
font-size: 42px;
|
||||||
line-height: 1.16;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.feature-content p {
|
.feature-content p {
|
||||||
white-space: pre-line;
|
white-space: pre-line;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
line-height: 1.68;
|
line-height: 1.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.feature-content .feature-subtitle {
|
.feature-content .feature-subtitle {
|
||||||
margin: 0 0 44px;
|
margin: 0 0 40px;
|
||||||
max-width: 660px;
|
max-width: 660px;
|
||||||
color: rgba(255, 255, 255, .62);
|
color: rgba(255, 255, 255, .62);
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
line-height: 1.35;
|
line-height: 1.5;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -829,23 +829,23 @@ p {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
right: clamp(190px, 17vw, 330px);
|
right: clamp(190px, 17vw, 330px);
|
||||||
top: calc(50% + 6px);
|
top: calc((100% + var(--capabilities-content-top) - 96px) / 2);
|
||||||
bottom: auto;
|
bottom: auto;
|
||||||
width: min(44vw, 720px);
|
width: min(44vw, 720px);
|
||||||
height: auto;
|
height: auto;
|
||||||
max-height: calc(100dvh - 228px);
|
max-height: max(0px, calc(100dvh - var(--capabilities-content-top) - 96px));
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
filter: drop-shadow(0 28px 46px rgba(0, 0, 0, .48));
|
filter: drop-shadow(0 28px 46px rgba(0, 0, 0, .48));
|
||||||
transform: translate(0, -50%);
|
transform: translate(0, -50%);
|
||||||
translate: calc(var(--object-fit-x, 0px) - 36px) 0;
|
translate: calc(var(--object-fit-x, 0px) - 36px) var(--object-fit-y, 0px);
|
||||||
transition: opacity .28s var(--ease), translate .28s var(--ease);
|
transition: opacity .28s var(--ease), translate .28s var(--ease);
|
||||||
}
|
}
|
||||||
|
|
||||||
.feature-object.is-visible {
|
.feature-object.is-visible {
|
||||||
opacity: .96;
|
opacity: .96;
|
||||||
translate: var(--object-fit-x, 0px) 0;
|
translate: var(--object-fit-x, 0px) var(--object-fit-y, 0px);
|
||||||
transform: translate(0, -50%) scale(1);
|
transform: translate(0, -50%) scale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -905,7 +905,7 @@ p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.feature-object.is-motion-bottom:not(.is-visible) {
|
.feature-object.is-motion-bottom:not(.is-visible) {
|
||||||
translate: var(--object-fit-x, 0px) 36px;
|
translate: var(--object-fit-x, 0px) calc(var(--object-fit-y, 0px) + 36px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.feature-object.is-repositioning {
|
.feature-object.is-repositioning {
|
||||||
@@ -981,16 +981,17 @@ p {
|
|||||||
.capabilities-toolbar {
|
.capabilities-toolbar {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
left: clamp(24px, 5vw, 72px);
|
left: var(--capabilities-gutter);
|
||||||
right: clamp(24px, 5vw, 72px);
|
right: var(--capabilities-gutter);
|
||||||
bottom: 28px;
|
top: 90px;
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding-top: 18px;
|
padding-bottom: 18px;
|
||||||
border-top: 1px solid rgba(255, 255, 255, .24);
|
border-bottom: 1px solid rgba(255, 255, 255, .24);
|
||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-toolbar button {
|
.capabilities-toolbar button,
|
||||||
|
.autoplay-toggle {
|
||||||
min-width: 86px;
|
min-width: 86px;
|
||||||
min-height: 40px;
|
min-height: 40px;
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
@@ -1008,8 +1009,11 @@ p {
|
|||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-toolbar .autoplay-toggle {
|
.workbench-stage > .autoplay-toggle {
|
||||||
margin-left: auto;
|
position: absolute;
|
||||||
|
z-index: 2;
|
||||||
|
right: clamp(24px, 5vw, 72px);
|
||||||
|
bottom: 28px;
|
||||||
color: var(--text);
|
color: var(--text);
|
||||||
background: rgba(255, 255, 255, .12);
|
background: rgba(255, 255, 255, .12);
|
||||||
}
|
}
|
||||||
@@ -1080,6 +1084,8 @@ p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-workbench {
|
.capabilities-workbench {
|
||||||
|
--capabilities-gutter: clamp(56px, 7vw, 132px);
|
||||||
|
--capabilities-content-top: 212px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
height: 100dvh;
|
height: 100dvh;
|
||||||
@@ -1096,7 +1102,7 @@ p {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 108px clamp(24px, 5vw, 72px) 96px clamp(56px, 7vw, 132px);
|
padding: var(--capabilities-content-top) var(--capabilities-gutter) 96px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-dots {
|
.project-dots {
|
||||||
@@ -2266,7 +2272,7 @@ html.has-site-dialog,
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-toolbar .autoplay-toggle {
|
.workbench-stage > .autoplay-toggle {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2747,6 +2753,7 @@ h1, h2, h3, p, a, button, label, span, strong, small, dt, dd, li, td, th {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-body .capabilities-workbench {
|
.capabilities-body .capabilities-workbench {
|
||||||
|
--capabilities-gutter: 20px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 72px 0 0;
|
inset: 72px 0 0;
|
||||||
height: calc(100dvh - 72px);
|
height: calc(100dvh - 72px);
|
||||||
@@ -2772,19 +2779,20 @@ h1, h2, h3, p, a, button, label, span, strong, small, dt, dd, li, td, th {
|
|||||||
min-height: 0;
|
min-height: 0;
|
||||||
max-height: none;
|
max-height: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 24px 20px 84px;
|
padding: 32px var(--capabilities-gutter) 84px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overscroll-behavior: contain;
|
overscroll-behavior: contain;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-body .feature-content h1 {
|
.capabilities-body .feature-content h1 {
|
||||||
|
margin-top: 16px;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-body .feature-subtitle {
|
.capabilities-body .feature-subtitle {
|
||||||
margin-bottom: 24px;
|
margin-bottom: 28px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2794,7 +2802,7 @@ h1, h2, h3, p, a, button, label, span, strong, small, dt, dd, li, td, th {
|
|||||||
min-width: 0;
|
min-width: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 24px 16px 84px;
|
padding: 32px var(--capabilities-gutter) 84px;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overscroll-behavior: contain;
|
overscroll-behavior: contain;
|
||||||
@@ -2837,9 +2845,9 @@ h1, h2, h3, p, a, button, label, span, strong, small, dt, dd, li, td, th {
|
|||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
inset: auto;
|
inset: auto;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
padding: 10px 12px;
|
padding: 14px var(--capabilities-gutter);
|
||||||
background: #101419;
|
background: #101419;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
@@ -2852,7 +2860,7 @@ h1, h2, h3, p, a, button, label, span, strong, small, dt, dd, li, td, th {
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.capabilities-body .capabilities-toolbar .autoplay-toggle {
|
.capabilities-body .workbench-stage > .autoplay-toggle {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
<section class="section intro" id="company" data-page-title="회사 소개">
|
<section class="section intro" id="company" data-page-title="회사 소개">
|
||||||
<div class="section-label">About</div>
|
<div class="section-label">About</div>
|
||||||
<div class="intro-copy">
|
<div class="intro-copy">
|
||||||
<h2>Network, Data, Human을 연결하는 Total SW 개발 조직입니다.</h2>
|
<h2>Network, Data, Human을 연결하는 Total SW 개발 회사입니다.</h2>
|
||||||
<p>
|
<p>
|
||||||
AUTOSAR 기반 자동차 전장 개발, AI 기반 관제 스마트 플랫폼, 로봇 SW 개발 및 AI 플랫폼,
|
AUTOSAR 기반 자동차 전장 개발, AI 기반 관제 스마트 플랫폼, 로봇 SW 개발 및 AI 플랫폼,
|
||||||
웹·앱 SI 개발까지 다양한 R&D 및 협력 개발을 통해 양질의 기술 지원을 제공합니다.
|
웹·앱 SI 개발까지 다양한 R&D 및 협력 개발을 통해 양질의 기술 지원을 제공합니다.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ MATLAB Simulink를 활용한 Model 기반 Application Software 설계 및 검증
|
|||||||
|
|
||||||
ISO 26262 기능 안전 개발 프로세스 기반 업무 (ASIL, FMEA, DFA) 를 수행하였습니다.
|
ISO 26262 기능 안전 개발 프로세스 기반 업무 (ASIL, FMEA, DFA) 를 수행하였습니다.
|
||||||
`,
|
`,
|
||||||
scope: "Safety mechanism · Platform",
|
scope: "Side Body Control Module",
|
||||||
output: "SW module · Verification",
|
output: "SW module · Verification",
|
||||||
image: "assets/images/automotive/automotive_01_background.jpeg",
|
image: "assets/images/automotive/automotive_01_background.jpeg",
|
||||||
objectImage: "assets/images/automotive/automotive_01_object.png",
|
objectImage: "assets/images/automotive/automotive_01_object.png",
|
||||||
@@ -44,6 +44,27 @@ RTE( Runtime Environment)를 Generate하고 BSW 영역과 연계하여 Applicati
|
|||||||
output: "Issue report · Tool flow",
|
output: "Issue report · Tool flow",
|
||||||
image: "assets/images/automotive/automotive_02_background.png",
|
image: "assets/images/automotive/automotive_02_background.png",
|
||||||
objectImage: "assets/images/automotive/automotive_02_object.png",
|
objectImage: "assets/images/automotive/automotive_02_object.png",
|
||||||
|
},
|
||||||
|
// P.15
|
||||||
|
{
|
||||||
|
id: "hvac-autosar-bsw-development",
|
||||||
|
type: "automotive",
|
||||||
|
category: "AUTOSAR BSW DEVELOPMENT",
|
||||||
|
title: "차량용 공조제어기 SW 개발",
|
||||||
|
subtitle: "H-VAC Controller Basic Software",
|
||||||
|
description: `차량용 공조제어기의 안정적인 소프트웨어 동작과 차량 전장 시스템과의 원활한 연계를 위해 AUTOSAR 기반의 BSW 및 Middleware를 개발하고, 제어기의 핵심 기능과 진단·보안·업데이트 기능을 통합 구현하였습니다.
|
||||||
|
|
||||||
|
FBL(Flash Boot Loader) 기능을 구현하고 Sleep & Wake-up 사양을 개발하여 차량의 전원 상태 변화에 따른 제어기의 안정적인 동작 환경을 확보하였습니다. BSW Configuration 및 Implementation을 수행하고 Middleware를 구현하였으며, M-CAL Port를 비롯하여 ADC, PWM, ICU, IoHwAb, OS 등 주요 AUTOSAR 모듈을 설정하고 제어기 사양에 맞게 통합하였습니다.
|
||||||
|
|
||||||
|
또한 CAN 요구사항을 반영하여 관련 DB를 Import하고 Generate 및 Harmonize 과정을 수행함으로써 차량 네트워크 환경과 제어기 소프트웨어 간의 통신 연계성을 구현하였습니다.
|
||||||
|
|
||||||
|
보안 기능 강화를 위해 HSM, ASK, SFM 및 Crypto Library를 포팅하고 기능 검증을 수행하여 차량용 제어기에 요구되는 보안 기능을 안정적으로 적용하였습니다. 진단 영역에서는 DiagDCM 및 DEM Configuration을 수행하고 관련 기능을 검증하여 차량 진단 시스템과 제어기 간의 안정적인 진단 환경을 구축하였습니다.
|
||||||
|
|
||||||
|
OTA(Over-The-Air) 기반 Background 및 Reprogramming 기능을 개발하고 검증하여 차량 소프트웨어를 안정적으로 업데이트할 수 있는 환경을 구현하였습니다. Watch-Dog 요구사항을 반영 개발하였습니다.`,
|
||||||
|
scope: "H-VAC Controller Basic Software",
|
||||||
|
output: "Control module · QA",
|
||||||
|
image: "assets/images/automotive/automotive_04_background.jpeg",
|
||||||
|
objectImage: "assets/images/automotive/automotive_04_object.png",
|
||||||
},
|
},
|
||||||
// P.14
|
// P.14
|
||||||
{
|
{
|
||||||
@@ -67,27 +88,6 @@ ISO 및 OEM 요구사항을 기반으로 DoCAN 및 DoIP Stack을 개발하여 CA
|
|||||||
image: "assets/images/automotive/automotive_03_background.png",
|
image: "assets/images/automotive/automotive_03_background.png",
|
||||||
objectImage: "assets/images/automotive/automotive_03_object.png",
|
objectImage: "assets/images/automotive/automotive_03_object.png",
|
||||||
},
|
},
|
||||||
// P.15
|
|
||||||
{
|
|
||||||
id: "hvac-autosar-bsw-development",
|
|
||||||
type: "automotive",
|
|
||||||
category: "AUTOSAR BSW DEVELOPMENT",
|
|
||||||
title: "차량용 공조제어기 SW 개발",
|
|
||||||
subtitle: "H-VAC Controller Basic Software",
|
|
||||||
description: `차량용 공조제어기의 안정적인 소프트웨어 동작과 차량 전장 시스템과의 원활한 연계를 위해 AUTOSAR 기반의 BSW 및 Middleware를 개발하고, 제어기의 핵심 기능과 진단·보안·업데이트 기능을 통합 구현하였습니다.
|
|
||||||
|
|
||||||
FBL(Flash Boot Loader) 기능을 구현하고 Sleep & Wake-up 사양을 개발하여 차량의 전원 상태 변화에 따른 제어기의 안정적인 동작 환경을 확보하였습니다. BSW Configuration 및 Implementation을 수행하고 Middleware를 구현하였으며, M-CAL Port를 비롯하여 ADC, PWM, ICU, IoHwAb, OS 등 주요 AUTOSAR 모듈을 설정하고 제어기 사양에 맞게 통합하였습니다.
|
|
||||||
|
|
||||||
또한 CAN 요구사항을 반영하여 관련 DB를 Import하고 Generate 및 Harmonize 과정을 수행함으로써 차량 네트워크 환경과 제어기 소프트웨어 간의 통신 연계성을 구현하였습니다.
|
|
||||||
|
|
||||||
보안 기능 강화를 위해 HSM, ASK, SFM 및 Crypto Library를 포팅하고 기능 검증을 수행하여 차량용 제어기에 요구되는 보안 기능을 안정적으로 적용하였습니다. 진단 영역에서는 DiagDCM 및 DEM Configuration을 수행하고 관련 기능을 검증하여 차량 진단 시스템과 제어기 간의 안정적인 진단 환경을 구축하였습니다.
|
|
||||||
|
|
||||||
OTA(Over-The-Air) 기반 Background 및 Reprogramming 기능을 개발하고 검증하여 차량 소프트웨어를 안정적으로 업데이트할 수 있는 환경을 구현하였습니다. Watch-Dog 요구사항을 반영 개발하였습니다.`,
|
|
||||||
scope: "H-VAC Controller Basic Software",
|
|
||||||
output: "Control module · QA",
|
|
||||||
image: "assets/images/automotive/automotive_04_background.jpeg",
|
|
||||||
objectImage: "assets/images/automotive/automotive_04_object.png",
|
|
||||||
},
|
|
||||||
// P.16
|
// P.16
|
||||||
{
|
{
|
||||||
id: "a-spice-swe5-integration-verification",
|
id: "a-spice-swe5-integration-verification",
|
||||||
@@ -427,13 +427,6 @@ GPS 기반의 위치 정보를 활용하여 대중교통의 이동 상황을 실
|
|||||||
output: "Control room · Alert",
|
output: "Control room · Alert",
|
||||||
image: "assets/images/solution/solution_05_background.png",
|
image: "assets/images/solution/solution_05_background.png",
|
||||||
objectImage: "assets/images/solution/solution_05_object.png",
|
objectImage: "assets/images/solution/solution_05_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// P.33
|
// P.33
|
||||||
{
|
{
|
||||||
@@ -454,13 +447,6 @@ GPS 기반의 위치 정보를 활용하여 대중교통의 이동 상황을 실
|
|||||||
output: "Capture flow · Viewer",
|
output: "Capture flow · Viewer",
|
||||||
image: "assets/images/solution/solution_06_background.jpeg",
|
image: "assets/images/solution/solution_06_background.jpeg",
|
||||||
objectImage: "assets/images/solution/solution_06_object.png",
|
objectImage: "assets/images/solution/solution_06_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// P.34
|
// P.34
|
||||||
{
|
{
|
||||||
@@ -481,13 +467,6 @@ GPS 기반의 위치 정보를 활용하여 대중교통의 이동 상황을 실
|
|||||||
output: "Pipeline · Dashboard",
|
output: "Pipeline · Dashboard",
|
||||||
image: "assets/images/solution/solution_07_background.jpeg",
|
image: "assets/images/solution/solution_07_background.jpeg",
|
||||||
objectImage: "assets/images/solution/solution_07_object.png",
|
objectImage: "assets/images/solution/solution_07_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// P.35
|
// P.35
|
||||||
{
|
{
|
||||||
@@ -508,13 +487,7 @@ GPS 기반의 위치 정보를 활용하여 대중교통의 이동 상황을 실
|
|||||||
output: "Recognition module",
|
output: "Recognition module",
|
||||||
image: "assets/images/solution/solution_08_background.jpg",
|
image: "assets/images/solution/solution_08_background.jpg",
|
||||||
objectImage: "assets/images/solution/solution_08_object.png",
|
objectImage: "assets/images/solution/solution_08_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// Certifications
|
// Certifications
|
||||||
{
|
{
|
||||||
@@ -589,13 +562,6 @@ AUTOSAR 표준 기반의 플랫폼 환경에서 ECU 기능에 필요한 모듈
|
|||||||
output: "Admin · Approval flow",
|
output: "Admin · Approval flow",
|
||||||
image: "assets/images/si/si_02_background.jpg",
|
image: "assets/images/si/si_02_background.jpg",
|
||||||
objectImage: "assets/images/si/si_02_object.png",
|
objectImage: "assets/images/si/si_02_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// P.40
|
// P.40
|
||||||
{
|
{
|
||||||
@@ -642,13 +608,6 @@ AUTOSAR 표준 기반의 플랫폼 환경에서 ECU 기능에 필요한 모듈
|
|||||||
output: "iOS/Android · API",
|
output: "iOS/Android · API",
|
||||||
image: "assets/images/si/si_04_background.png",
|
image: "assets/images/si/si_04_background.png",
|
||||||
objectImage: "assets/images/si/si_04_object.png",
|
objectImage: "assets/images/si/si_04_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// P.42
|
// P.42
|
||||||
{
|
{
|
||||||
@@ -711,13 +670,13 @@ GPS 기반의 자녀 안심존 관리 기능을 통해 지정된 안전 구역
|
|||||||
output: "Backend · Docs",
|
output: "Backend · Docs",
|
||||||
image: "assets/images/si/si_07_background.png",
|
image: "assets/images/si/si_07_background.png",
|
||||||
objectImage: "assets/images/si/si_07_object.png",
|
objectImage: "assets/images/si/si_07_object.png",
|
||||||
objectLayout: {
|
// objectLayout: {
|
||||||
x: "50%",
|
// x: "50%",
|
||||||
y: "50%",
|
// y: "50%",
|
||||||
anchorX: "-50%",
|
// anchorX: "-50%",
|
||||||
anchorY: "-50%",
|
// anchorY: "-50%",
|
||||||
maxHeight: "560px",
|
// maxHeight: "560px",
|
||||||
},
|
// },
|
||||||
},
|
},
|
||||||
// P.45
|
// P.45
|
||||||
{
|
{
|
||||||
@@ -740,12 +699,5 @@ GPS 기반의 자녀 안심존 관리 기능을 통해 지정된 안전 구역
|
|||||||
output: "Backend · Docs",
|
output: "Backend · Docs",
|
||||||
image: "assets/images/si/si_08_background.png",
|
image: "assets/images/si/si_08_background.png",
|
||||||
objectImage: "assets/images/si/si_08_object.png",
|
objectImage: "assets/images/si/si_08_object.png",
|
||||||
objectLayout: {
|
|
||||||
x: "50%",
|
|
||||||
y: "50%",
|
|
||||||
anchorX: "-50%",
|
|
||||||
anchorY: "-50%",
|
|
||||||
maxHeight: "560px",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
38
js/main.js
38
js/main.js
@@ -176,6 +176,10 @@
|
|||||||
function canScrollPolicy(target, direction) {
|
function canScrollPolicy(target, direction) {
|
||||||
const panel = target.closest(".esg-policy-panel");
|
const panel = target.closest(".esg-policy-panel");
|
||||||
if (!panel || panel.hidden) return false;
|
if (!panel || panel.hidden) return false;
|
||||||
|
const workspace = panel.closest(".esg-workspace");
|
||||||
|
// Restore the whole reader below the header before scrolling its document.
|
||||||
|
if (workspace && Math.abs(window.scrollY - sectionStop(workspace)) > 4) return false;
|
||||||
|
if (performance.now() < transitionUntil) return false;
|
||||||
const remaining = panel.scrollHeight - panel.clientHeight - panel.scrollTop;
|
const remaining = panel.scrollHeight - panel.clientHeight - panel.scrollTop;
|
||||||
return direction > 0 ? remaining > 2 : panel.scrollTop > 2;
|
return direction > 0 ? remaining > 2 : panel.scrollTop > 2;
|
||||||
}
|
}
|
||||||
@@ -238,10 +242,8 @@
|
|||||||
<p>수집된 개인정보는 문의 처리 완료 후 1년간 보관하며, 보유 기간이 지나면 지체 없이 파기합니다.</p>
|
<p>수집된 개인정보는 문의 처리 완료 후 1년간 보관하며, 보유 기간이 지나면 지체 없이 파기합니다.</p>
|
||||||
<h3>4. 정보 제공 및 처리 위탁</h3>
|
<h3>4. 정보 제공 및 처리 위탁</h3>
|
||||||
<p>제공된 정보는 문의 응대 목적으로 사용합니다. 외부 서비스에 처리를 위탁하는 경우 해당 서비스와 처리 범위를 운영 방침에 명시합니다.</p>
|
<p>제공된 정보는 문의 응대 목적으로 사용합니다. 외부 서비스에 처리를 위탁하는 경우 해당 서비스와 처리 범위를 운영 방침에 명시합니다.</p>
|
||||||
<h3>5. 동의 거부 및 정보 확인</h3>
|
<h3>5. 동의 거부</h3>
|
||||||
<p>개인정보 수집 및 이용에 동의하지 않을 수 있습니다. 동의하지 않으면 온라인 문의를 전송할 수 없으며, 고객센터로 직접 연락할 수 있습니다. 제공한 정보의 확인, 수정, 삭제 요청도 고객센터로 문의할 수 있습니다.</p>
|
<p>개인정보 수집 및 이용에 동의하지 않을 수 있습니다. 다만, 동의하지 않을 경우 온라인 문의 서비스를 이용할 수 없습니다.</p>`,
|
||||||
<h3>6. 개인정보 관련 문의</h3>
|
|
||||||
<p>주식회사 모비핀테크놀러지 · 고객센터 <a href="tel:0532140592">053-214-0592</a><br />평일 09:00 ~ 18:00</p>`,
|
|
||||||
},
|
},
|
||||||
sitemap: {
|
sitemap: {
|
||||||
title: "사이트맵",
|
title: "사이트맵",
|
||||||
@@ -251,7 +253,6 @@
|
|||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3><a href="about.html">회사소개</a></h3>
|
<h3><a href="about.html">회사소개</a></h3>
|
||||||
<a href="about.html#overview">회사 개요</a>
|
|
||||||
<a href="about.html#capability">기술 역량</a>
|
<a href="about.html#capability">기술 역량</a>
|
||||||
<a href="about.html#history">연혁</a>
|
<a href="about.html#history">연혁</a>
|
||||||
<a href="about.html#organization">조직도</a>
|
<a href="about.html#organization">조직도</a>
|
||||||
@@ -351,10 +352,11 @@
|
|||||||
trigger.addEventListener("click", () => {
|
trigger.addEventListener("click", () => {
|
||||||
const office = trigger.dataset.mapTitle;
|
const office = trigger.dataset.mapTitle;
|
||||||
const address = trigger.dataset.mapAddress;
|
const address = trigger.dataset.mapAddress;
|
||||||
const query = encodeURIComponent(address);
|
// Search for the building; floor/unit details can prevent a map pin from resolving.
|
||||||
|
const query = encodeURIComponent(trigger.dataset.mapQuery || address);
|
||||||
title.textContent = `${office} 오시는 길`;
|
title.textContent = `${office} 오시는 길`;
|
||||||
frame.title = `${office} 위치 지도`;
|
frame.title = `${office} 위치 지도`;
|
||||||
frame.src = `https://maps.google.com/maps?q=${query}&z=16&output=embed`;
|
frame.src = `https://maps.google.com/maps?q=${query}&z=16&hl=ko&output=embed`;
|
||||||
addressLabel.textContent = address;
|
addressLabel.textContent = address;
|
||||||
mapLink.href = `https://www.google.com/maps/search/?api=1&query=${query}`;
|
mapLink.href = `https://www.google.com/maps/search/?api=1&query=${query}`;
|
||||||
dialog.showModal();
|
dialog.showModal();
|
||||||
@@ -753,29 +755,43 @@
|
|||||||
const titleBottom = featureTitle.getBoundingClientRect().bottom - stageBounds.top;
|
const titleBottom = featureTitle.getBoundingClientRect().bottom - stageBounds.top;
|
||||||
capabilitiesWorkbench.style.setProperty("--certificate-top", `${titleBottom + 24}px`);
|
capabilitiesWorkbench.style.setProperty("--certificate-top", `${titleBottom + 24}px`);
|
||||||
}
|
}
|
||||||
const contentRight = featureContent.getBoundingClientRect().right + 32;
|
const contentBounds = featureContent.getBoundingClientRect();
|
||||||
|
const contentRight = contentBounds.right + 32;
|
||||||
|
const contentTop = contentBounds.top;
|
||||||
|
const contentBottom = stageBounds.bottom - parseFloat(window.getComputedStyle(stage).paddingBottom);
|
||||||
[featureObject, featureObjectSecondary].forEach((element) => {
|
[featureObject, featureObjectSecondary].forEach((element) => {
|
||||||
if (!element) return;
|
if (!element) return;
|
||||||
element.style.removeProperty("width");
|
element.style.removeProperty("width");
|
||||||
element.style.removeProperty("height");
|
element.style.removeProperty("height");
|
||||||
element.style.removeProperty("--object-fit-x");
|
element.style.removeProperty("--object-fit-x");
|
||||||
|
element.style.removeProperty("--object-fit-y");
|
||||||
if (!desktop || !hasDescription || !element.getAttribute("src")) return;
|
if (!desktop || !hasDescription || !element.getAttribute("src")) return;
|
||||||
const style = window.getComputedStyle(element);
|
const style = window.getComputedStyle(element);
|
||||||
const width = parseFloat(style.width);
|
const width = parseFloat(style.width);
|
||||||
const height = parseFloat(style.height);
|
const height = parseFloat(style.height);
|
||||||
const available = Math.max(0, stageBounds.right - contentRight);
|
const available = Math.max(0, stageBounds.right - contentRight);
|
||||||
|
const availableHeight = Math.max(0, contentBottom - contentTop);
|
||||||
if (!width || !height) return;
|
if (!width || !height) return;
|
||||||
// Fit the actual image ratio, not the potentially letterboxed CSS rectangle.
|
// Fit the actual image ratio, not the potentially letterboxed CSS rectangle.
|
||||||
const naturalWidth = element.naturalWidth;
|
const naturalWidth = element.naturalWidth;
|
||||||
const naturalHeight = element.naturalHeight;
|
const naturalHeight = element.naturalHeight;
|
||||||
if (!naturalWidth || !naturalHeight) return;
|
if (!naturalWidth || !naturalHeight) return;
|
||||||
const ratio = Math.min(width / naturalWidth, height / naturalHeight, available / naturalWidth);
|
const ratio = Math.min(width / naturalWidth, height / naturalHeight,
|
||||||
|
available / naturalWidth, availableHeight / naturalHeight);
|
||||||
element.style.width = `${naturalWidth * ratio}px`;
|
element.style.width = `${naturalWidth * ratio}px`;
|
||||||
element.style.height = `${naturalHeight * ratio}px`;
|
element.style.height = `${naturalHeight * ratio}px`;
|
||||||
const bounds = element.getBoundingClientRect();
|
const bounds = element.getBoundingClientRect();
|
||||||
const motionX = parseFloat(window.getComputedStyle(element).translate) || 0;
|
const fittedStyle = window.getComputedStyle(element);
|
||||||
const settledLeft = bounds.left - motionX;
|
const [motionX = 0, motionY = 0] = fittedStyle.translate.split(" ").map(parseFloat);
|
||||||
|
const transform = new DOMMatrixReadOnly(fittedStyle.transform);
|
||||||
|
const [originX, originY] = fittedStyle.transformOrigin.split(" ").map(parseFloat);
|
||||||
|
// Measure the final position, excluding entry translation and scale.
|
||||||
|
const settledLeft = bounds.left - motionX + (transform.a - 1) * originX;
|
||||||
|
const settledTop = bounds.top - motionY + (transform.d - 1) * originY;
|
||||||
|
const settledBottom = settledTop + naturalHeight * ratio;
|
||||||
element.style.setProperty("--object-fit-x", `${Math.max(0, contentRight - settledLeft)}px`);
|
element.style.setProperty("--object-fit-x", `${Math.max(0, contentRight - settledLeft)}px`);
|
||||||
|
element.style.setProperty("--object-fit-y", `${Math.max(contentTop - settledTop,
|
||||||
|
Math.min(0, contentBottom - settledBottom))}px`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user