모바일 반응형 페이지 css 수정

This commit is contained in:
sungro815 2026-01-12 13:51:45 +09:00
parent 6bd85b47df
commit 8d7d25cce8
26 changed files with 4069 additions and 198 deletions

View File

@ -25,6 +25,10 @@ return [
], ],
], ],
'cs_nav' => [
'title' => '고객센터',
'subtitle' => '문의 및 안내', // 필요하면 '안내/문의' 같은 문구 넣어도 됨
],
'cs_tabs' => [ 'cs_tabs' => [
['label' => '공지사항', 'route' => 'web.cs.notice.index', 'key' => 'notice'], ['label' => '공지사항', 'route' => 'web.cs.notice.index', 'key' => 'notice'],
['label' => '자주 묻는 질문', 'route' => 'web.cs.faq.index', 'key' => 'faq'], ['label' => '자주 묻는 질문', 'route' => 'web.cs.faq.index', 'key' => 'faq'],
@ -33,6 +37,10 @@ return [
['label' => '이용안내', 'route' => 'web.cs.guide.index', 'key' => 'guide'], ['label' => '이용안내', 'route' => 'web.cs.guide.index', 'key' => 'guide'],
], ],
'mypage_nav' => [
'title' => '마이페이지',
'subtitle' => '내 정보/내역',
],
'mypage_tabs' => [ 'mypage_tabs' => [
['label' => '나의정보', 'route' => 'web.mypage.info.index', 'key' => 'info'], ['label' => '나의정보', 'route' => 'web.mypage.info.index', 'key' => 'info'],
['label' => '이용내역', 'route' => 'web.mypage.usage.index', 'key' => 'usage'], ['label' => '이용내역', 'route' => 'web.mypage.usage.index', 'key' => 'usage'],
@ -40,6 +48,10 @@ return [
['label' => '1:1문의내역', 'route' => 'web.mypage.qna.index', 'key' => 'qna'], ['label' => '1:1문의내역', 'route' => 'web.mypage.qna.index', 'key' => 'qna'],
], ],
'policy_nav' => [
'title' => 'PIN FOR YOU', // 요청하신 “핀포유” 느낌
'subtitle' => '약관 및 정책', // 박스 안에서 보조 타이틀
],
'policy_tabs' => [ 'policy_tabs' => [
['label' => '개인정보처리방침', 'route' => 'web.policy.privacy.index', 'key' => 'privacy'], ['label' => '개인정보처리방침', 'route' => 'web.policy.privacy.index', 'key' => 'privacy'],
['label' => '이용약관', 'route' => 'web.policy.terms.index', 'key' => 'terms'], ['label' => '이용약관', 'route' => 'web.policy.terms.index', 'key' => 'terms'],

View File

@ -1220,11 +1220,11 @@ h1, h2, h3, h4, h5, h6 {
align-items: baseline; align-items: baseline;
justify-content: space-between; justify-content: space-between;
gap: 12px; gap: 12px;
margin: 40px 0 16px; margin: 0px 0 16px;
padding-left:8px; padding-left:8px;
} }
.subpage-title{ .subpage-title{
font-size: 20px; font-size: 18px;
font-weight: 900; font-weight: 900;
letter-spacing: -0.3px; letter-spacing: -0.3px;
color:#0F172A; color:#0F172A;
@ -1750,3 +1750,630 @@ h1, h2, h3, h4, h5, h6 {
border-color:#BFDBFE; border-color:#BFDBFE;
color:#1D4ED8; color:#1D4ED8;
} }
/* Side menu header */
.subnav-head{
padding: 16px 16px 10px;
}
.subnav-title{
font-size: 19px;
font-weight: 800;
line-height: 1.2;
color: #001280;
}
.subnav-subtitle{
margin-top: 6px;
font-size: 12px;
opacity: .7;
}
.subnav-divider{
height: 1px;
margin: 0 16px 10px;
background: rgba(0,0,0,.08);
}
/* ✅ 박스 자체 */
.subnav--side .subnav-box{
background: #fff;
border: 1px solid rgba(0,0,0,.08);
border-radius: 16px;
padding: 0; /* 헤더/리스트에서 패딩 관리 */
overflow: hidden; /* 라운드 안쪽 정리 */
}
/* 기존 ul이 박스 역할을 하고 있었다면: ul은 이제 투명하게 */
.subnav--side .subnav-list{
margin: 0;
padding: 12px; /* 메뉴 영역 패딩 */
list-style: none;
background: transparent;
border: 0;
}
/* 헤더 */
.subnav--side .subnav-head{
padding: 16px 16px 10px;
}
.subnav--side .subnav-title{
font-size: 18px;
font-weight: 800;
line-height: 1.2;
}
.subnav--side .subnav-subtitle{
margin-top: 6px;
font-size: 12px;
opacity: .7;
}
.subnav--side .subnav-divider{
height: 1px;
margin: 0 16px;
background: rgba(0,0,0,.08);
}
/* subpage hero compact */
.hero--compact{
padding: 14px 0;
}
.hero--compact .hero-inner{
min-height: 160px; /* 데스크탑 */
}
@media (max-width: 768px){
.hero--compact .hero-inner{ min-height: 120px; }
}
.hero--compact h2,
.hero--compact .hero-title{
font-size: 18px;
line-height: 1.25;
}
.hero--compact .hero-desc{
font-size: 12px;
opacity: .85;
}
/* 서브에서는 CTA 과하면 지저분해져서 숨기거나 1개만 */
.hero--compact .hero-actions .btn-secondary,
.hero--compact .hero-badges{
display:none;
}
.cs-quick__bar{
margin: 12px 0 14px;
padding: 10px 12px;
border-radius: 12px;
background: rgba(0,0,0,.04);
font-size: 12px;
}
.cs-quick__grid{
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
}
@media (max-width: 768px){
.cs-quick__grid{ grid-template-columns: 1fr; }
}
.cs-quick__card{
display:block;
padding: 14px 14px;
border:1px solid rgba(0,0,0,.08);
border-radius: 14px;
background:#fff;
text-decoration:none;
}
.cs-quick__title{ font-weight: 800; }
.cs-quick__desc{ margin-top:6px; font-size: 12px; opacity:.75; }
/* ===== Footer: Coupang-like ===== */
.site-footer{ border-top:1px solid rgba(0,0,0,.08); background:#fff; }
.footer-topbar{
border-bottom:1px solid rgba(0,0,0,.08);
background:#fff;
}
.footer-topbar__inner{
display:flex;
align-items:center;
justify-content:space-between;
gap:16px;
padding:0px 23px 20px;
}
.footer-topbar__nav{
display:flex;
flex-wrap:wrap;
align-items:center;
gap:10px;
font-size:12px;
color:#111;
}
.footer-topbar__link{
text-decoration:none;
color:inherit;
opacity:.85;
}
.footer-topbar__link:hover{ opacity:1; text-decoration:underline; }
.footer-topbar__link--strong{ font-weight:800; opacity:1; }
.footer-topbar__sep{ opacity:.35; }
.footer-site-select{
height:32px;
padding:0 10px;
border:1px solid rgba(0,0,0,.12);
border-radius:8px;
background:#fff;
font-size:12px;
}
.footer-main{ padding:26px 0; }
.footer-grid{
display:grid;
grid-template-columns: 1.35fr 1fr 1fr;
gap:24px;
align-items:start;
}
@media (max-width: 980px){
.footer-grid{ grid-template-columns:1fr; }
.footer-topbar__inner{ flex-direction:column; align-items:flex-start; }
}
.footer-logo-img{ height:55px; width:auto; display:block; }
.footer-company{
margin-top:12px;
font-size:12px;
line-height:1.6;
color:rgba(0,0,0,.78);
}
.footer-company__row{ display:flex; gap:10px; }
.footer-company__k{ min-width:160px; opacity:.75; }
.footer-company__v{ flex:1; }
.footer-copy{
margin-top:12px;
font-size:12px;
color:rgba(0,0,0,.6);
}
.footer-h{
font-size:12px;
font-weight:800;
margin-bottom:10px;
color:#111;
}
.footer-call__num{
font-size:26px;
font-weight:900;
letter-spacing:-.02em;
line-height:1.1;
}
.footer-call__meta{
margin-top:6px;
font-size:12px;
color:rgba(0,0,0,.7);
}
.footer-kv{ margin-top:14px; font-size:12px; }
.footer-kv__row{ display:flex; gap:10px; padding:4px 0; }
.footer-kv__k{ min-width:80px; opacity:.75; }
.footer-kv__v{ color:rgba(0,0,0,.85); }
.footer-link{ color:rgba(0,0,0,.85); text-decoration:none; }
.footer-link:hover{ text-decoration:underline; }
.footer-link--strong{ font-weight:800; }
.footer-mini-links{
display:flex;
flex-wrap:wrap;
gap:10px 14px;
font-size:12px;
margin-bottom:14px;
}
.footer-payments{ display:flex; flex-direction:column; gap:12px; }
.footer-pay__img{ width:70px; height:auto; display:block; }
.footer-pay__img--wide{ width:180px; }
.footer-pay__cap{ margin-top:6px; font-size:12px; color:rgba(0,0,0,.65); }
.footer-marks{ margin-top:14px; display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.footer-marks img{ height:22px; width:auto; opacity:.9; }
/* screen-reader only */
.sr-only{
position:absolute; width:1px; height:1px; padding:0; margin:-1px;
overflow:hidden; clip:rect(0,0,0,0); border:0;
}
/* Policy page */
.policy-page{ margin-top: 14px; }
.policy-toc{
display:flex;
flex-wrap:wrap;
gap:10px 12px;
padding:12px 14px;
border:1px solid rgba(0,0,0,.08);
border-radius:14px;
background:rgba(0,0,0,.02);
margin: 12px 0 18px;
}
.policy-toc a{
font-size:12px;
text-decoration:none;
color:rgba(0,0,0,.8);
padding:6px 10px;
border-radius:999px;
border:1px solid rgba(0,0,0,.08);
background:#fff;
}
.policy-toc a:hover{ text-decoration:underline; }
.policy-sec{ padding: 14px 0 8px; scroll-margin-top: 90px; }
.policy-h2{
font-size:16px;
font-weight:900;
letter-spacing:-.02em;
margin: 8px 0 10px;
}
.policy-p{
font-size:13px;
line-height:1.8;
color:rgba(0,0,0,.78);
margin: 0 0 10px;
}
.policy-card{
border:1px solid rgba(0,0,0,.08);
border-radius:16px;
padding:14px 14px;
background:#fff;
margin: 10px 0;
}
.policy-card__title{
font-weight:700;
margin-bottom:8px;
}
.policy-ul{
margin: 0;
padding-left: 18px;
line-height: 1.8;
color: rgba(0,0,0,.78);
}
.policy-ul li{ margin: 4px 0; }
.policy-badge-list{
display:flex;
flex-wrap:wrap;
gap:8px;
}
.policy-badge{
display:inline-flex;
align-items:center;
height:26px;
padding:0 10px;
font-size:12px;
border-radius:999px;
border:1px solid rgba(0,0,0,.10);
background:rgba(0,0,0,.02);
}
.policy-table-wrap{
overflow:auto;
border:1px solid rgba(0,0,0,.08);
border-radius:14px;
background:#fff;
}
.policy-table{
width:100%;
border-collapse:separate;
border-spacing:0;
min-width: 720px;
font-size:12px;
}
.policy-table th,
.policy-table td{
padding:10px 10px;
border-bottom:1px solid rgba(0,0,0,.08);
vertical-align:top;
}
.policy-table th{
background:rgba(0,0,0,.03);
font-weight:800;
text-align:left;
}
.policy-table tr:last-child td{ border-bottom:0; }
.policy-note{
margin-top:10px;
padding:10px 12px;
border-radius:12px;
background:rgba(0,0,0,.03);
font-size:12px;
line-height:1.7;
color:rgba(0,0,0,.72);
}
.policy-kv{ display:flex; flex-direction:column; gap:8px; }
.policy-kv__row{ display:flex; gap:10px; }
.policy-kv__row span{ min-width:90px; opacity:.75; }
.policy-bottom{ margin-top: 14px; display:flex; justify-content:flex-end; }
.policy-top{
display:inline-flex;
align-items:center;
justify-content:center;
height:34px;
padding:0 12px;
border-radius:10px;
border:1px solid rgba(0,0,0,.10);
text-decoration:none;
font-size:12px;
background:#fff;
color:rgba(0,0,0,.8);
}
.policy-top:hover{ text-decoration:underline; }
.policy-ol{
margin: 0;
padding-left: 18px;
line-height: 1.8;
color: rgba(0,0,0,.78);
}
.policy-ol > li{ margin: 6px 0; }
.policy-ol .policy-ul{ margin-top: 6px; }
.policy-details{ border:0; }
.policy-summary{
cursor:pointer;
font-weight:800;
list-style:none;
}
.policy-summary::-webkit-details-marker{ display:none; }
.policy-law{
margin-top:10px;
padding-top:10px;
border-top:1px solid rgba(0,0,0,.08);
}
.policy-card--alert{
border-color: rgba(255, 102, 0, .25);
background: rgba(255, 102, 0, .04);
}
/* Policy hub */
.policy-hub{
display:grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
@media (max-width: 960px){
.policy-hub{ grid-template-columns: 1fr; }
}
.policy-hub__card{
display:block;
text-decoration:none;
color: inherit;
border:1px solid rgba(0,0,0,.08);
border-radius:16px;
background:#fff;
padding:14px;
transition: transform .08s ease, box-shadow .08s ease;
}
.policy-hub__card:hover{
transform: translateY(-1px);
box-shadow: 0 10px 24px rgba(0,0,0,.08);
}
.policy-hub__top{
display:flex;
align-items:center;
justify-content:space-between;
margin-bottom:10px;
}
.policy-hub__badge{
display:inline-flex;
height:24px;
align-items:center;
padding:0 10px;
border-radius:999px;
font-size:12px;
border:1px solid rgba(0,0,0,.10);
background: rgba(0,0,0,.02);
font-weight:700;
}
.policy-hub__arrow{
opacity:.6;
font-weight:900;
}
.policy-hub__title{
font-size:15px;
font-weight:900;
letter-spacing:-.02em;
margin-bottom:6px;
}
.policy-hub__desc{
font-size:13px;
line-height:1.75;
color: rgba(0,0,0,.75);
margin-bottom:10px;
}
.policy-hub__meta{
font-size:12px;
color: rgba(0,0,0,.6);
}
/* ✅ Policy tables: mobile overflow fix */
.policy-table-wrap{
width:100%;
overflow-x:auto;
-webkit-overflow-scrolling:touch;
border:1px solid rgba(0,0,0,.08);
border-radius:12px;
background:#fff;
}
.policy-table{
width:100%;
border-collapse:collapse;
min-width:720px; /* 컬럼이 4개라 모바일에서 최소폭 필요 */
}
.policy-table th,
.policy-table td{
padding:10px 12px;
border-bottom:1px solid rgba(0,0,0,.08);
vertical-align:top;
line-height:1.6;
}
.policy-table th{
background:rgba(0,0,0,.02);
font-weight:800;
white-space:nowrap;
}
.policy-table td{
word-break:break-word;
}
/* 기본(PC/태블릿): 스크롤 테이블 */
.policy-table-wrap{
width:100%;
overflow-x:auto;
-webkit-overflow-scrolling:touch;
border:1px solid rgba(0,0,0,.08);
border-radius:12px;
background:#fff;
}
.policy-table{
width:100%;
border-collapse:collapse;
/* ⚠️ min-width를 무조건 박아두면 모바일에서 “커 보이는” 느낌이 남음 */
/* min-width:720px; <-- 이게 들어가있다면 제거하거나 아래처럼 조건부로 */
}
@media (min-width: 641px){
.policy-table{ min-width:720px; } /* 데스크톱에서만 최소폭 유지 */
}
.policy-table th,
.policy-table td{
padding:10px 12px;
border-bottom:1px solid rgba(0,0,0,.08);
vertical-align:top;
line-height:1.6;
}
.policy-table th{
background:rgba(0,0,0,.02);
font-weight:800;
}
/* ✅ 모바일: 행을 카드처럼 쌓아서 “넘침” 자체를 제거 */
@media (max-width: 640px){
/* 래퍼 스크롤 제거 + 카드 형태로 */
.policy-table-wrap{
overflow:visible;
border:0;
border-radius:0;
background:transparent;
}
.policy-table{
min-width:0 !important;
}
.policy-table thead{ display:none; }
.policy-table,
.policy-table tbody,
.policy-table tr,
.policy-table td{
display:block;
width:100%;
}
.policy-table tr{
border:1px solid rgba(0,0,0,.08);
border-radius:14px;
background:#fff;
margin-bottom:10px;
overflow:hidden;
}
.policy-table td{
border:0;
border-top:1px solid rgba(0,0,0,.06);
padding:10px 12px;
display:flex;
gap:10px;
align-items:flex-start;
}
.policy-table td:first-child{
border-top:0;
}
.policy-table td::before{
content: attr(data-label);
flex:0 0 92px;
font-weight:900;
color: rgba(0,0,0,.65);
}
.policy-table td{
overflow-wrap:anywhere;
word-break:break-word;
}
}
/* (안전장치) 카드 안에서 가로 넘침 방지 */
.content-card{ overflow-x:hidden; }
/* ============================================================
MOBILE / RESPONSIVE OVERFLOW HOTFIX (do not remove)
- Prevent horizontal overflow on small screens
- Keep original design; only constrains width/overflow
============================================================ */
html, body { max-width: 100%; overflow-x: hidden; }
img, video, svg, iframe, canvas { max-width: 100%; height: auto; }
/* Grid/flex children can cause overflow if min-width is auto */
.subpage-grid,
.subpage-main,
.content-card,
.policy-page { min-width: 0; }
/* Policy table: keep scroll without widening the whole page */
.policy-table-wrap{
width: 100%;
max-width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.policy-table{
max-width: 100%;
}
.policy-table th,
.policy-table td{
word-break: break-word;
overflow-wrap: anywhere;
}
/* Small screens: don't "bleed" outside cards */
@media (max-width: 640px){
.policy-table-wrap{
margin: 0;
border-left: 1px solid rgba(0,0,0,.08);
border-right: 1px solid rgba(0,0,0,.08);
border-radius: 14px;
}
/* Reduce minimum width a bit so it feels less huge on phones */
.policy-table{ min-width: 560px; }
}
/* If any component uses nowrap, allow scroll inside it */
.policy-toc{ max-width: 100%; }

2341
resources/css/web.css.backup Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,100 +1,134 @@
<footer class="site-footer"> <footer class="site-footer" role="contentinfo">
<div class="container"> {{-- Topbar: 링크 --}}
<div class="footer-topbar">
<div class="container footer-topbar__inner">
<nav class="footer-topbar__nav" aria-label="푸터 상단 링크">
<a class="footer-topbar__link" href="{{ route('web.cs.notice.index') }}">공지사항</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link" href="{{ route('web.cs.faq.index') }}">자주 묻는 질문</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link" href="{{ route('web.cs.kakao.index') }}">카카오톡상담</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link" href="{{ route('web.cs.qna.index') }}">1:1 문의</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link" href="{{ route('web.policy.index') }}">약관 정책</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link" href="{{ route('web.policy.terms.index') }}">이용약관</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link footer-topbar__link--strong" href="{{ route('web.policy.privacy.index') }}">개인정보처리방침</a>
<span class="footer-topbar__sep">|</span>
<a class="footer-topbar__link" href="{{ route('web.policy.email.index') }}">이메일무단수집거부</a>
</nav>
</div>
</div>
{{-- Top --}} {{-- Main --}}
<div class="footer-top"> <div class="footer-main">
{{-- Brand --}} <div class="container">
<div class="footer-brand"> <div class="footer-grid">
<a href="{{ url('/') }}" class="footer-brand-logo" aria-label="홈으로">
<img src="{{ asset('assets/images/common/bottom_logo.png') }}" {{-- Brand / Company --}}
<div class="footer-col footer-col--brand">
<a href="{{ url('/') }}" class="footer-logo" aria-label="홈으로">
<img
src="{{ asset('assets/images/common/bottom_logo.png') }}"
alt="PIN FOR YOU" alt="PIN FOR YOU"
class="footer-logo-img"> class="footer-logo-img"
loading="lazy"
>
</a> </a>
<p class="footer-desc"> <div class="footer-company">
대한민국 1 상품권 거래소.<br> <div class="footer-company__row">
안전하고 빠른 거래를 약속드립니다. <span class="footer-company__k">상호명 호스팅 서비스 제공</span>
</p> <span class="footer-company__v">() 플러스메이커</span>
</div>
<div class="footer-company__row">
<span class="footer-company__k">대표이사</span>
<span class="footer-company__v">송병수</span>
</div>
<div class="footer-company__row">
<span class="footer-company__k">주소</span>
<span class="footer-company__v">전북특별자치도 전주시 완산구 용마리로 94, 4 451</span>
</div>
<div class="footer-company__row">
<span class="footer-company__k">사업자등록번호</span>
<span class="footer-company__v">121-88-01191</span>
</div>
<div class="footer-company__row">
<span class="footer-company__k">통신판매업신고번호</span>
<span class="footer-company__v"> 2018-전주완산-0705</span>
</div>
<div class="footer-company__row">
<span class="footer-company__k">개인정보관리책임자</span>
<span class="footer-company__v">송병수</span>
</div>
</div>
<div class="footer-copy"> <div class="footer-copy">
© 2018 plusmaker Corp. All rights reserved. © 2018 plusmaker Corp. All rights reserved.
</div> </div>
</div> </div>
{{-- Links --}} {{-- Customer Center --}}
<div class="footer-links"> <div class="footer-col footer-col--cs">
<h4 class="footer-title">고객지원</h4> <div class="footer-h">고객센터</div>
<div class="footer-link-list">
<a href="#" class="footer-link">공지사항</a> <div class="footer-call">
<a href="#" class="footer-link">자주 묻는 질문</a> <div class="footer-call__num">1833-4856</div>
<a href="#" class="footer-link">1:1 문의</a> <div class="footer-call__meta">평일 09:00~18:00 (점심 12:00~13:00) · 주말/공휴일 휴무</div>
<a href="#" class="footer-link">이용약관</a>
<a href="#" class="footer-link footer-link-strong">개인정보처리방침</a>
</div>
</div> </div>
{{-- Contact --}}
<div class="footer-contact">
<h4 class="footer-title">Contact</h4>
<div class="footer-kv"> <div class="footer-kv">
<div class="footer-kv-row"> <div class="footer-kv__row">
<span class="footer-k">고객센터</span> <span class="footer-kv__k">메일</span>
<span class="footer-v">1833-4856</span> <span class="footer-kv__v">master@plusmaker.co.kr</span>
</div>
<div class="footer-kv-row">
<span class="footer-k">운영시간</span>
<span class="footer-v">평일 09:00 - 18:00</span>
</div>
<div class="footer-kv-row">
<span class="footer-k">메일</span>
<span class="footer-v">master@plusmaker.co.kr</span>
</div> </div>
</div> </div>
</div> </div>
{{-- Payment --}} {{-- Policy / Payment / Marks --}}
<div class="footer-payment-col"> <div class="footer-col footer-col--etc">
<h4 class="footer-title">Payment</h4> <div class="footer-h">약관 안내</div>
<div class="footer-payment"> <div class="footer-mini-links">
<img class="footer-pay-img" <a class="footer-link" href="{{ route('web.policy.terms.index') }}">이용약관</a>
<a class="footer-link footer-link--strong" href="{{ route('web.policy.privacy.index') }}">개인정보처리방침</a>
<a class="footer-link" href="{{ route('web.policy.email.index') }}">이메일무단수집거부</a>
<a class="footer-link" href="{{ route('web.cs.notice.index') }}">공지사항</a>
</div>
<div class="footer-payments">
<div class="footer-pay">
<img
src="{{ asset('assets/images/web/escrow_logo.png') }}" src="{{ asset('assets/images/web/escrow_logo.png') }}"
alt="Danal escrow service" style="width:60px"> alt="Danal escrow service"
<div class="footer-pay-caption">Danal escrow service</div> class="footer-pay__img"
loading="lazy"
>
<div class="footer-pay__cap">Danal escrow service</div>
</div> </div>
<div class="footer-payment footer-payment--mt"> <div class="footer-pay">
<img class="footer-pay-img" <img
src="{{ asset('assets/images/web/payment-method.png') }}" src="{{ asset('assets/images/web/payment-method.png') }}"
alt="Secured Payment Gateways" style="width:170px"> alt="Secured Payment Gateways"
<div class="footer-pay-caption">Secured Payment Gateways</div> class="footer-pay__img footer-pay__img--wide"
</div> loading="lazy"
>
<div class="footer-pay__cap">Secured Payment Gateways</div>
</div> </div>
</div> </div>
{{-- Divider --}} {{-- 인증/마크 영역 (이미지 파일 있으면 교체해서 사용) --}}
<div class="footer-divider"></div> <div class="footer-marks" aria-label="인증 마크">
{{-- : assets/images/common/mark-isms.png 같은 파일 추가 사용 --}}
{{-- Bottom: Corporation Info (collapsible) --}} {{-- <img src="{{ asset('assets/images/common/mark-isms.png') }}" alt="ISMS" loading="lazy"> --}}
<div class="footer-bottom"> {{-- <img src="{{ asset('assets/images/common/mark-escrow.png') }}" alt="에스크로" loading="lazy"> --}}
<details class="footer-details">
<summary class="footer-summary">
사업자 정보 (Corporation info)
<span class="footer-summary-hint">펼치기</span>
</summary>
<div class="footer-info">
<div class="footer-info-row"><span>상호</span><b>() 플러스메이커</b></div>
<div class="footer-info-row"><span>대표</span><b>송병수</b></div>
<div class="footer-info-row"><span>주소</span><b>전북특별자치도 전주시 완산구 용마리로 94, 4 451</b></div>
<div class="footer-info-row"><span>전화</span><b>1833-4856</b></div>
<div class="footer-info-row"><span>메일</span><b>master@plusmaker.co.kr</b></div>
<div class="footer-info-row"><span>사업자등록번호</span><b>121-88-01191</b></div>
<div class="footer-info-row"><span>통신판매업신고번호</span><b> 2018-전주완산-0705</b></div>
<div class="footer-info-row"><span>개인정보관리책임자</span><b>송병수</b></div>
</div> </div>
</details>
</div> </div>
</div> </div>
</div>
</div>
</footer> </footer>

View File

@ -25,5 +25,7 @@
]) ])
{{-- TODO: FAQ 내용(아코디언/카테고리/검색 ) --}} {{-- TODO: FAQ 내용(아코디언/카테고리/검색 ) --}}
@include('web.partials.cs-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -25,5 +25,7 @@
]) ])
{{-- TODO: 이용안내 본문(단계별 가이드/주의사항/정책 링크 ) --}} {{-- TODO: 이용안내 본문(단계별 가이드/주의사항/정책 링크 ) --}}
@include('web.partials.cs-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -25,5 +25,7 @@
]) ])
{{-- TODO: 카카오 채널 링크/QR/운영시간/주의사항 --}} {{-- TODO: 카카오 채널 링크/QR/운영시간/주의사항 --}}
@include('web.partials.cs-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -19,12 +19,8 @@
@section('canonical', url('/cs/notice')) @section('canonical', url('/cs/notice'))
@section('subcontent') @section('subcontent')
<div class="notice-page">
@include('web.partials.content-head', [
'title' => '최신 공지',
'desc' => '중요 안내를 빠르게 확인하세요.'
])
<div class="notice-page">
<ul class="notice-list2"> <ul class="notice-list2">
{{-- TODO: DB 연결 더미 --}} {{-- TODO: DB 연결 더미 --}}
<li><a href="/cs/notice/1"><span class="n2-tag">공지</span><span class="n2-text"> 연휴 고객센터 운영 안내</span><time class="n2-date">2026.01.09</time></a></li> <li><a href="/cs/notice/1"><span class="n2-tag">공지</span><span class="n2-text"> 연휴 고객센터 운영 안내</span><time class="n2-date">2026.01.09</time></a></li>
@ -49,10 +45,6 @@
{{-- Notice Toolbar (replace sub-quick) --}} {{-- Notice Toolbar (replace sub-quick) --}}
<div class="notice-toolbar" role="search"> <div class="notice-toolbar" role="search">
<div class="nt-left">
<span class="nt-meta">운영시간 평일 09:00~18:00 · 긴급 문의는 1:1 문의 이용</span>
</div>
<form class="nt-right" action="{{ url('/cs/notice') }}" method="GET"> <form class="nt-right" action="{{ url('/cs/notice') }}" method="GET">
<div class="nt-search"> <div class="nt-search">
<input type="text" name="q" value="{{ request('q') }}" <input type="text" name="q" value="{{ request('q') }}"
@ -63,4 +55,8 @@
</form> </form>
</div> </div>
</div> </div>
@include('web.partials.cs-quick-actions')
@endsection @endsection

View File

@ -25,5 +25,6 @@
]) ])
{{-- TODO: 문의 / 문의 내역 / 로그인 여부 처리 --}} {{-- TODO: 문의 / 문의 내역 / 로그인 여부 처리 --}}
@include('web.partials.cs-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -12,12 +12,12 @@
@php @php
$heroSlides = config('web.hero_slides', []); $heroSlides = config('web.hero_slides', []);
// 섹션 감지 // 섹션 감지
$isCsPage = request()->is('cs') || request()->is('cs/*') || request()->routeIs('web.cs.*'); $isCsPage = request()->is('cs') || request()->is('cs/*') || request()->routeIs('web.cs.*');
$isMypagePage = request()->is('mypage') || request()->is('mypage/*') || request()->routeIs('web.mypage.*'); $isMypagePage = request()->is('mypage') || request()->is('mypage/*') || request()->routeIs('web.mypage.*');
$isPolicyPage = request()->is('policy') || request()->is('policy/*') || request()->routeIs('web.policy.*'); $isPolicyPage = request()->is('policy') || request()->is('policy/*') || request()->routeIs('web.policy.*');
// CS subnav 자동 주입 // CS subnav 자동 주입
if ($isCsPage && empty($subnavItems)) { if ($isCsPage && empty($subnavItems)) {
$subnavItems = collect(config('web.cs_tabs', [])) $subnavItems = collect(config('web.cs_tabs', []))
->map(function ($t) { ->map(function ($t) {
@ -35,7 +35,7 @@
->all(); ->all();
} }
// MYPAGE subnav 자동 주입 // MYPAGE subnav 자동 주입
if ($isMypagePage && empty($subnavItems)) { if ($isMypagePage && empty($subnavItems)) {
$subnavItems = collect(config('web.mypage_tabs', [])) $subnavItems = collect(config('web.mypage_tabs', []))
->map(function ($t) { ->map(function ($t) {
@ -53,7 +53,7 @@
->all(); ->all();
} }
// PolicyPage subnav 자동 주입 // PolicyPage subnav 자동 주입
if ($isPolicyPage && empty($subnavItems)) { if ($isPolicyPage && empty($subnavItems)) {
$subnavItems = collect(config('web.policy_tabs', [])) $subnavItems = collect(config('web.policy_tabs', []))
->map(function ($t) { ->map(function ($t) {
@ -71,7 +71,7 @@
->all(); ->all();
} }
// active key 우선순위: 각 섹션 전용 변수 -> 기존 subnavActive // active key 우선순위: 각 섹션 전용 변수 -> 기존 subnavActive
$subnavActive = $csActive ?? $mypageActive ?? ($subnavActive ?? null); $subnavActive = $csActive ?? $mypageActive ?? ($subnavActive ?? null);
@endphp @endphp
@ -83,27 +83,22 @@
]) ])
@endif @endif
{{-- Header --}}
@include('web.partials.subpage-header', [
'title' => $pageTitle ?? '페이지 제목',
'desc' => $pageDesc ?? null
])
{{-- Body --}} {{-- Body --}}
<div class="subpage-grid"> <div class="subpage-grid">
{{-- 고객센터 cs-tabs --}} {{-- 고객센터 cs-tabs --}}
@if($isCsPage) @if($isCsPage)
@include('web.partials.cs-tabs', [ @include('web.partials.cs-tabs', [
'activeKey' => $subnavActive 'activeKey' => $subnavActive
]) ])
{{-- 마이페이지 mypage-tabs --}} {{-- 마이페이지 mypage-tabs --}}
@elseif($isMypagePage) @elseif($isMypagePage)
@include('web.partials.mypage-tabs', [ @include('web.partials.mypage-tabs', [
'activeKey' => $subnavActive 'activeKey' => $subnavActive
]) ])
{{-- pinforyou mypage-tabs --}}
@elseif($isPolicyPage) @elseif($isPolicyPage)
@include('web.partials.policy-tabs', [ @include('web.partials.policy-tabs', [
'activeKey' => $subnavActive 'activeKey' => $subnavActive
@ -133,6 +128,11 @@
{{-- Main --}} {{-- Main --}}
<main class="subpage-main" id="main-content"> <main class="subpage-main" id="main-content">
<div class="content-card"> <div class="content-card">
{{-- Header --}}
@include('web.partials.subpage-header', [
'title' => $pageTitle ?? '페이지 제목',
'desc' => $pageDesc ?? null
])
@yield('subcontent') @yield('subcontent')
</div> </div>
</main> </main>

View File

@ -1,5 +1,5 @@
@php @php
$pageTitle = '교환 진행 트래킹'; $pageTitle = '교환내역';
$pageDesc = '요청부터 완료까지 단계별 상태를 한눈에 추적하세요.'; $pageDesc = '요청부터 완료까지 단계별 상태를 한눈에 추적하세요.';
$breadcrumbs = [ $breadcrumbs = [
@ -25,5 +25,8 @@
]) ])
{{-- TODO: 내용 추후 구현 --}} {{-- TODO: 내용 추후 구현 --}}
@include('web.partials.mypage-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -1,5 +1,5 @@
@php @php
$pageTitle = '계정 설정 한 번에'; $pageTitle = '나의정보';
$pageDesc = '연락처, 비밀번호, 보안 관련 설정을 여기서 정리하세요.'; $pageDesc = '연락처, 비밀번호, 보안 관련 설정을 여기서 정리하세요.';
$breadcrumbs = [ $breadcrumbs = [
@ -25,5 +25,6 @@
]) ])
{{-- TODO: 내용 추후 구현 --}} {{-- TODO: 내용 추후 구현 --}}
@include('web.partials.mypage-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -1,5 +1,5 @@
@php @php
$pageTitle = '문의 기록 보관함'; $pageTitle = '1:1문의내역';
$pageDesc = '내가 남긴 질문과 답변을 모아 보고, 처리 상태를 확인하세요.'; $pageDesc = '내가 남긴 질문과 답변을 모아 보고, 처리 상태를 확인하세요.';
$breadcrumbs = [ $breadcrumbs = [
@ -25,5 +25,6 @@
]) ])
{{-- TODO: 내용 추후 구현 --}} {{-- TODO: 내용 추후 구현 --}}
@include('web.partials.mypage-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -1,6 +1,6 @@
@php @php
$pageTitle = '최근 이용 흐름'; $pageTitle = '이용내역';
$pageDesc = '구매 → 결제 → 발송 상태를 시간순으로 확인할 수 있어요.'; $pageDesc = '구매 → 결제 → 발송 상태를 확인할 수 있어요.';
$breadcrumbs = [ $breadcrumbs = [
['label' => '홈', 'url' => url('/')], ['label' => '홈', 'url' => url('/')],
@ -25,5 +25,6 @@
]) ])
{{-- TODO: 내용 추후 구현 --}} {{-- TODO: 내용 추후 구현 --}}
@include('web.partials.mypage-quick-actions')
</div> </div>
@endsection @endsection

View File

@ -1,8 +1,8 @@
@props(['title' => '', 'desc' => null]) {{--@props(['title' => '', 'desc' => null])--}}
<div class="list-head"> {{--<div class="list-head">--}}
<h2 class="list-title">{{ $title }}</h2> {{-- <h2 class="list-title">{{ $title }}</h2>--}}
@if($desc) {{-- @if($desc)--}}
<p class="list-desc">{{ $desc }}</p> {{-- <p class="list-desc">{{ $desc }}</p>--}}
@endif {{-- @endif--}}
</div> {{--</div>--}}

View File

@ -0,0 +1,22 @@
<section class="cs-quick">
<div class="cs-quick__bar">
<strong>운영시간</strong> 평일 09:00~18:00 · 긴급 문의는 1:1 문의 이용
</div>
<div class="cs-quick__grid">
<a class="cs-quick__card" href="{{ route('web.cs.faq.index') }}">
<div class="cs-quick__title">FAQ 먼저 확인</div>
<div class="cs-quick__desc">자주 묻는 질문에서 바로 해결</div>
</a>
<a class="cs-quick__card" href="{{ route('web.cs.kakao.index') }}">
<div class="cs-quick__title">카카오톡 상담</div>
<div class="cs-quick__desc">간단 문의는 카톡이 가장 빨라요</div>
</a>
<a class="cs-quick__card" href="{{ route('web.cs.qna.index') }}">
<div class="cs-quick__title">1:1 문의하기</div>
<div class="cs-quick__desc">상세 문의는 접수 순차 답변</div>
</a>
</div>
</section>

View File

@ -1,22 +1,28 @@
@php @php
// config에서 CS 탭 가져와서, 기존 subpage-sidenav가 기대하는 형식(label,url,key)으로 변환 // ✅ CS 헤더
$items = collect(config('web.cs_tabs', [])) $nav = config('web.cs_nav', []);
->map(function ($t) { $navTitle = $nav['title'] ?? '고객센터';
$navSubtitle = $nav['subtitle'] ?? null;
// ✅ CS items
$rawTabs = config('web.cs_tabs', []);
$items = collect($rawTabs)->map(function ($t) {
$url = '#';
if (!empty($t['route']) && \Illuminate\Support\Facades\Route::has($t['route'])) {
$url = route($t['route']);
}
return [ return [
'label' => $t['label'] ?? '', 'label' => $t['label'] ?? '',
'url' => isset($t['route']) ? route($t['route']) : '#', 'url' => $url,
'key' => $t['key'] ?? null, 'key' => $t['key'] ?? null,
]; ];
}) })->values()->all();
->values()
->all();
// activeKey는 페이지에서 넘기거나, 없으면 현재 route로 자동 판별도 가능
$activeKey = $activeKey ?? null; $activeKey = $activeKey ?? null;
if (!$activeKey) { if (!$activeKey) {
// route 기반 자동 active (routeIs가 동작하려면 routes에 name이 있어야 함) foreach ($rawTabs as $t) {
foreach (config('web.cs_tabs', []) as $t) {
if (!empty($t['route']) && request()->routeIs($t['route'])) { if (!empty($t['route']) && request()->routeIs($t['route'])) {
$activeKey = $t['key'] ?? null; $activeKey = $t['key'] ?? null;
break; break;
@ -39,6 +45,8 @@
@include('web.partials.subpage-sidenav', [ @include('web.partials.subpage-sidenav', [
'items' => $items, 'items' => $items,
'active' => $activeKey, 'active' => $activeKey,
'mode' => 'side' 'mode' => 'side',
'title' => $navTitle,
'subtitle' => $navSubtitle,
]) ])
</aside> </aside>

View File

@ -1,6 +1,6 @@
@props([ @props([
'slides' => [], 'slides' => [],
'variant' => 'main', // 'main' | 'compact' 'variant' => 'compact', // 'main' | 'compact'
'id' => 'hero' 'id' => 'hero'
]) ])
@if(!empty($slides)) @if(!empty($slides))

View File

@ -0,0 +1,45 @@
<section class="cs-quick">
<div class="cs-quick__bar">
<strong>빠른 메뉴</strong> 자주 쓰는 기능을 번에 이동하세요.
</div>
<div class="cs-quick__grid">
<a class="cs-quick__card" href="{{ route('web.mypage.info.index') }}">
<div class="cs-quick__title">나의정보</div>
<div class="cs-quick__desc">연락처/비밀번호 계정 설정</div>
</a>
<a class="cs-quick__card" href="{{ route('web.mypage.usage.index') }}">
<div class="cs-quick__title">이용내역</div>
<div class="cs-quick__desc">구매/결제/발송 진행 확인</div>
</a>
<a class="cs-quick__card" href="{{ route('web.mypage.exchange.index') }}">
<div class="cs-quick__title">교환내역</div>
<div class="cs-quick__desc">교환 상태와 완료 내역 보기</div>
</a>
<a class="cs-quick__card" href="{{ route('web.mypage.qna.index') }}">
<div class="cs-quick__title">1:1문의내역</div>
<div class="cs-quick__desc">문의 답변/처리 상태 확인</div>
</a>
</div>
{{-- 필요하면 고객센터로 바로가기 1 추가(선택) --}}
<div class="cs-quick__grid" style="margin-top:10px;">
<a class="cs-quick__card" href="{{ route('web.cs.notice.index') }}">
<div class="cs-quick__title">공지사항</div>
<div class="cs-quick__desc">서비스 운영/정책 변경 확인</div>
</a>
<a class="cs-quick__card" href="{{ route('web.cs.faq.index') }}">
<div class="cs-quick__title">FAQ</div>
<div class="cs-quick__desc">빠른 해결 가이드</div>
</a>
<a class="cs-quick__card" href="{{ route('web.cs.kakao.index') }}">
<div class="cs-quick__title">카카오톡 상담</div>
<div class="cs-quick__desc">간단 문의는 카톡이 가장 빨라요</div>
</a>
</div>
</section>

View File

@ -1,4 +1,8 @@
@php @php
$nav = config('web.mypage_nav', []);
$navTitle = $nav['title'] ?? '마이페이지';
$navSubtitle = $nav['subtitle'] ?? null;
$rawTabs = config('web.mypage_tabs', []); $rawTabs = config('web.mypage_tabs', []);
$items = collect($rawTabs)->map(function ($t) { $items = collect($rawTabs)->map(function ($t) {
@ -15,7 +19,6 @@
$activeKey = $activeKey ?? null; $activeKey = $activeKey ?? null;
// activeKey가 없으면 현재 라우트로 자동 판별
if (!$activeKey) { if (!$activeKey) {
foreach ($rawTabs as $t) { foreach ($rawTabs as $t) {
if (!empty($t['route']) && request()->routeIs($t['route'])) { if (!empty($t['route']) && request()->routeIs($t['route'])) {
@ -40,6 +43,8 @@
@include('web.partials.subpage-sidenav', [ @include('web.partials.subpage-sidenav', [
'items' => $items, 'items' => $items,
'active' => $activeKey, 'active' => $activeKey,
'mode' => 'side' 'mode' => 'side',
'title' => $navTitle,
'subtitle' => $navSubtitle,
]) ])
</aside> </aside>

View File

@ -1,4 +1,10 @@
@php @php
// ✅ Policy 헤더
$nav = config('web.policy_nav', []);
$navTitle = $nav['title'] ?? 'PIN FOR YOU';
$navSubtitle = $nav['subtitle'] ?? '약관 및 정책';
// ✅ policy tabs items
$rawTabs = config('web.policy_tabs', []); $rawTabs = config('web.policy_tabs', []);
$items = collect($rawTabs)->map(function ($t) { $items = collect($rawTabs)->map(function ($t) {
@ -13,6 +19,7 @@
]; ];
})->values()->all(); })->values()->all();
// activeKey는 페이지에서 넘기거나, 없으면 현재 route로 자동 판별
$activeKey = $activeKey ?? null; $activeKey = $activeKey ?? null;
if (!$activeKey) { if (!$activeKey) {
@ -39,6 +46,8 @@
@include('web.partials.subpage-sidenav', [ @include('web.partials.subpage-sidenav', [
'items' => $items, 'items' => $items,
'active' => $activeKey, 'active' => $activeKey,
'mode' => 'side' 'mode' => 'side',
'title' => $navTitle,
'subtitle' => $navSubtitle,
]) ])
</aside> </aside>

View File

@ -1,29 +1,55 @@
@props(['items' => [], 'active' => null, 'mode' => 'side']) @php
$items = $items ?? [];
$active = $active ?? null;
$mode = $mode ?? 'side';
$title = $title ?? null;
$subtitle = $subtitle ?? null;
@endphp
@if($mode === 'tabs') @if($mode === 'tabs')
<nav class="subnav subnav--tabs" aria-label="서브메뉴 탭"> <nav class="subnav subnav--tabs" aria-label="서브메뉴 탭">
@foreach($items as $it) @foreach($items as $it)
@php $isActive = ($active && $active === ($it['key'] ?? $it['url'])); @endphp @php $isActive = ($active && $active === ($it['key'] ?? $it['url'])); @endphp
<a href="{{ $it['url'] }}" <a href="{{ $it['url'] ?? '#' }}"
class="subnav-tab {{ $isActive ? 'is-active' : '' }}" class="subnav-tab {{ $isActive ? 'is-active' : '' }}"
@if($isActive) aria-current="page" @endif> @if($isActive) aria-current="page" @endif>
{{ $it['label'] }} {{ $it['label'] ?? '' }}
</a> </a>
@endforeach @endforeach
</nav> </nav>
@else @else
<nav class="subnav subnav--side" aria-label="서브메뉴"> <nav class="subnav subnav--side" aria-label="서브메뉴">
{{-- 박스 wrapper: 헤더도 박스 안으로 --}}
<div class="subnav-box">
@if($title || $subtitle)
<div class="subnav-head">
@if($title)
<div class="subnav-title">{{ $title }}</div>
@endif
@if($subtitle)
<div class="subnav-subtitle">{{ $subtitle }}</div>
@endif
</div>
<div class="subnav-divider"></div>
@endif
<ul class="subnav-list"> <ul class="subnav-list">
@foreach($items as $it) @foreach($items as $it)
@php $isActive = ($active && $active === ($it['key'] ?? $it['url'])); @endphp @php $isActive = ($active && $active === ($it['key'] ?? $it['url'])); @endphp
<li> <li>
<a href="{{ $it['url'] }}" <a href="{{ $it['url'] ?? '#' }}"
class="subnav-link {{ $isActive ? 'is-active' : '' }}" class="subnav-link {{ $isActive ? 'is-active' : '' }}"
@if($isActive) aria-current="page" @endif> @if($isActive) aria-current="page" @endif>
{{ $it['label'] }} {{ $it['label'] ?? '' }}
</a> </a>
</li> </li>
@endforeach @endforeach
</ul> </ul>
</div>
</nav> </nav>
@endif @endif

View File

@ -1,6 +1,7 @@
@php @php
// ✅ H1 (subpage-header에서 출력)
$pageTitle = '이메일무단수집거부'; $pageTitle = '이메일무단수집거부';
$pageDesc = '웹사이트 내 이메일 주소의 무단 수집을 거부합니다.'; $pageDesc = '핀포유는 이메일 주소의 무단 수집·판매·유통을 엄격히 금지합니다.';
$breadcrumbs = [ $breadcrumbs = [
['label' => '홈', 'url' => url('/')], ['label' => '홈', 'url' => url('/')],
@ -8,22 +9,123 @@
['label' => '이메일무단수집거부', 'url' => url()->current()], ['label' => '이메일무단수집거부', 'url' => url()->current()],
]; ];
$policyActive = 'email'; // ✅ 좌측 메뉴 활성화
$subnavActive = 'email';
@endphp @endphp
@extends('web.layouts.subpage') @extends('web.layouts.subpage')
@section('title', '이메일무단수집거부 | PIN FOR YOU') @section('title', '이메일무단수집거부 | PIN FOR YOU')
@section('meta_description', 'PIN FOR YOU 이메일무단수집거부 안내입니다. 무단 수집 및 이용에 대한 조치를 안내합니다.') @section('meta_description', '핀포유 홈페이지에 게시된 이메일 주소의 무단 수집을 거부합니다. 수집·판매·유통 등 위반 행위는 관련 법령에 따라 처벌될 수 있습니다.')
@section('canonical', url('/policy/email')) @section('canonical', url('/policy/email'))
@section('subcontent') @section('subcontent')
<div class="policy-email-page"> <div class="policy-page">
{{-- 본문 H2 --}}
@include('web.partials.content-head', [ @include('web.partials.content-head', [
'title' => '무단 수집 금지 안내', 'title' => '이메일 주소 무단 수집 거부',
'desc' => '자동 수집 프로그램 등을 통한 이메일 주소 수집을 금지합니다.' 'desc' => '전자우편 수집 프로그램(크롤러) 또는 기술적 장치를 이용한 무단 수집을 금지합니다.'
]) ])
{{-- TODO: 이메일무단수집거부 본문 --}} {{-- 핵심 경고 카드 --}}
<section class="policy-sec">
<h2 class="policy-h2">무단 수집·유통 금지 안내</h2>
<div class="policy-card policy-card--alert">
<p class="policy-p" style="margin-bottom:8px;">
핀포유 홈페이지에 게시된 이메일 주소가 <b>전자우편 수집 프로그램</b>이나 밖의 <b>기술적 장치</b> 이용하여
<b>무단으로 수집되는 것을 거부</b>합니다.
</p>
<p class="policy-p" style="margin:0;">
이를 위반하여 이메일을 무단 수집·판매·유통하거나 이를 이용한 경우, 관련 법령에 따라 <b>형사처벌</b> 받을 있습니다.
</p>
<div class="policy-note" style="margin-top:10px;">
법령/해석 처벌 수위는 개정될 있으며, 실제 적용은 관계기관 판단에 따릅니다.
</div>
</div>
</section>
{{-- 금지 행위 --}}
<section class="policy-sec">
<h2 class="policy-h2">금지되는 행위</h2>
<div class="policy-card">
<ul class="policy-ul">
<li>사이트에 게시된 이메일 주소를 자동 수집 프로그램(크롤러/)으로 수집하는 행위</li>
<li>수집한 이메일 주소를 판매·유통·대여하거나 제3자에게 제공하는 행위</li>
<li>수집한 이메일 주소를 이용해 광고성 메일(스팸) 발송, 영리 목적 마케팅에 활용하는 행위</li>
<li>기술적 장치를 사용해 이메일 주소를 추출/가공/조합하는 행위</li>
</ul>
</div>
</section>
{{-- 법적 고지(간단 정리) --}}
<section class="policy-sec">
<h2 class="policy-h2">법적 고지</h2>
<div class="policy-card">
<p class="policy-p">
이메일 주소 무단 수집 활용은 관련 법령(개인정보보호법, 정보통신망 관련 법령 ) 따라 제재 대상이 있습니다.
또한, 개인정보 처리에 대한 동의는 정보주체가 명확히 인지할 있도록 구분하여 받도록 규정되어 있습니다.
</p>
<div class="policy-badge-list">
<span class="policy-badge">자동수집 금지</span>
<span class="policy-badge">판매·유통 금지</span>
<span class="policy-badge">광고성 메일 금지</span>
<span class="policy-badge">동의 기반 처리 원칙</span>
</div>
</div>
</section>
{{-- 문의/신고 안내 --}}
<section class="policy-sec">
<h2 class="policy-h2">문의 신고</h2>
<div class="policy-card">
<div class="policy-kv">
<div class="policy-kv__row"><span>고객센터</span><b>1833-4856</b></div>
<div class="policy-kv__row"><span>메일</span><b>master@plusmaker.co.kr</b></div>
<div class="policy-kv__row"><span>1:1 문의</span>
<b><a class="footer-link" href="{{ route('web.cs.qna.index') }}">문의 남기기</a></b>
</div>
</div>
<div class="policy-note" style="margin-top:10px;">
스팸/피싱 의심 메일을 받으신 경우, 발신자·제목·수신 시각 정보를 함께 보내주시면 확인에 도움이 됩니다.
</div>
</div>
</section>
{{-- 참고: 조문(접기) --}}
<section class="policy-sec">
<h2 class="policy-h2">관련 조문(참고)</h2>
<div class="policy-card">
<details class="policy-details">
<summary class="policy-summary">개인정보보호법 제22조(개인정보의 수집·이용 동의 ) 보기</summary>
<div class="policy-law">
<p class="policy-p">
개인정보처리자는 법에 따른 개인정보의 처리에 대하여 정보주체(제5항에 따른 법정대리인을 포함한다. 이하 조에서 같다) 동의를 받을 때에는 각각의 동의 사항을 구분하여 정보주체가 이를 명확하게 인지할 있도록 알리고 각각 동의를 받아야 한다.
</p>
<p class="policy-p">
개인정보처리자는 제15조제1항제1호, 제17조제1항제1호, 제23조제1호 제24조제1항제1호에 따라 개인정보의 처리에 대하여 정보주체의 동의를 받을 때에는 정보주체와의 계약 체결 등을 위하여 정보주체의 동의 없이 처리할 있는 개인정보와 정보주체의 동의가 필요한 개인정보를 구분하여야 한다. 경우 동의 없이 처리할 있는 개인정보라는 입증책임은 개인정보처리자가 부담한다.
</p>
<p class="policy-p">
개인정보처리자는 정보주체에게 재화나 서비스를 홍보하거나 판매를 권유하기 위하여 개인정보의 처리에 대한 동의를 받으려는 때에는 정보주체가 이를 명확하게 인지할 있도록 알리고 동의를 받아야 한다.
</p>
<p class="policy-p">
개인정보처리자는 정보주체가 제2항에 따라 선택적으로 동의할 있는 사항을 동의하지 아니하거나 제3항 제18조제2항제1호에 따른 동의를 하지 아니한다는 이유로 정보주체에게 재화 또는 서비스의 제공을 거부하여서는 아니 된다.
</p>
<p class="policy-p">
개인정보처리자는 14 미만 아동의 개인정보를 처리하기 위하여 법에 따른 동의를 받아야 때에는 법정대리인의 동의를 받아야 한다. 경우 법정대리인의 동의를 받기 위하여 필요한 최소한의 정보는 법정대리인의 동의 없이 해당 아동으로부터 직접 수집할 있다.
</p>
<p class="policy-p" style="margin-bottom:0;">
제1항부터 제5항까지에서 규정한 사항 외에 정보주체의 동의를 받는 세부적인 방법 제5항에 따른 최소한의 정보의 내용에 관하여 필요한 사항은 개인정보의 수집매체 등을 고려하여 대통령령으로 정한다.
</p>
</div>
</details>
</div>
</section>
<div class="policy-bottom">
<a class="policy-top" href="#main-content"> 위로</a>
</div>
</div> </div>
@endsection @endsection

View File

@ -1,29 +1,103 @@
@php @php
$pageTitle = '이용약관'; // ✅ H1 (subpage-header에서 출력)
$pageDesc = '서비스 이용 조건, 책임 범위, 분쟁 처리 기준 안내.'; $pageTitle = '약관 및 정책';
$pageDesc = '서비스 이용과 개인정보 보호를 위한 약관 및 정책을 안내합니다.';
$breadcrumbs = [ $breadcrumbs = [
['label' => '홈', 'url' => url('/')], ['label' => '홈', 'url' => url('/')],
['label' => '약관 및 정책', 'url' => url('/policy')], ['label' => '약관 및 정책', 'url' => url()->current()],
['label' => '이용약관', 'url' => url()->current()],
]; ];
$policyActive = 'terms'; // ✅ 좌측 메뉴(정책 탭) active 없음 (허브 페이지)
$subnavActive = null;
// ✅ 링크(라우트)
$privacyUrl = route('web.policy.privacy.index');
$termsUrl = route('web.policy.terms.index');
$emailUrl = route('web.policy.email.index');
@endphp @endphp
@extends('web.layouts.subpage') @extends('web.layouts.subpage')
@section('title', '이용약관 | PIN FOR YOU') @section('title', '약관 및 정책 | PIN FOR YOU')
@section('meta_description', 'PIN FOR YOU 이용약관입니다. 서비스 이용 조건과 책임 범위, 분쟁 처리 기준을 안내합니다.') @section('meta_description', '핀포유 약관 및 정책 안내 페이지입니다. 개인정보처리방침, 이용약관, 이메일무단수집거부 내용을 확인할 수 있습니다.')
@section('canonical', url('/policy/terms')) @section('canonical', url('/policy'))
@section('subcontent') @section('subcontent')
<div class="policy-terms-page">
<div class="policy-page">
{{-- 본문 H2 --}}
@include('web.partials.content-head', [ @include('web.partials.content-head', [
'title' => '서비스 이용 규칙', 'title' => '약관/정책 한눈에 보기',
'desc' => '회원 의무, 거래/결제, 환불, 제재 기준을 포함합니다.' 'desc' => '필요한 문서를 빠르게 찾아 확인할 수 있습니다.'
]) ])
{{-- TODO: 이용약관 본문 --}} {{-- 카드 그리드 --}}
<section class="policy-sec">
<h2 class="policy-h2">바로가기</h2>
<div class="policy-hub">
<a class="policy-hub__card" href="{{ $privacyUrl }}">
<div class="policy-hub__top">
<span class="policy-hub__badge">필수</span>
<span class="policy-hub__arrow"></span>
</div>
<div class="policy-hub__title">개인정보처리방침</div>
<div class="policy-hub__desc">
개인정보 수집/이용 목적, 보유 기간, 위탁 권리 행사 방법을 안내합니다.
</div>
<div class="policy-hub__meta">시행일: 2019-01-21</div>
</a>
<a class="policy-hub__card" href="{{ $termsUrl }}">
<div class="policy-hub__top">
<span class="policy-hub__badge">서비스</span>
<span class="policy-hub__arrow"></span>
</div>
<div class="policy-hub__title">이용약관</div>
<div class="policy-hub__desc">
회원가입, 서비스 이용, 책임/면책, 분쟁 해결(관할법원) 이용 조건을 안내합니다.
</div>
<div class="policy-hub__meta">시행일: 2019-01</div>
</a>
<a class="policy-hub__card" href="{{ $emailUrl }}">
<div class="policy-hub__top">
<span class="policy-hub__badge">안내</span>
<span class="policy-hub__arrow"></span>
</div>
<div class="policy-hub__title">이메일무단수집거부</div>
<div class="policy-hub__desc">
이메일 주소의 자동 수집/판매/유통을 금지하며 위반 법적 제재가 있을 있습니다.
</div>
<div class="policy-hub__meta">안내 문서</div>
</a>
</div>
</section>
{{-- 안내/문의 --}}
<section class="policy-sec">
<h2 class="policy-h2">문의가 필요하신가요?</h2>
<div class="policy-card">
<div class="policy-kv">
<div class="policy-kv__row"><span>고객센터</span><b>1833-4856</b></div>
<div class="policy-kv__row"><span>운영시간</span><b>평일 09:00~18:00</b></div>
<div class="policy-kv__row">
<span>1:1 문의</span>
<b><a class="footer-link" href="{{ route('web.cs.qna.index') }}">문의 남기기</a></b>
</div>
</div>
<div class="policy-note" style="margin-top:10px;">
서비스 이용/결제/발송 관련 문의는 고객센터 메뉴에서 빠르게 확인할 있습니다.
</div>
</div>
</section>
<div class="policy-bottom">
<a class="policy-top" href="#main-content"> 위로</a>
</div>
</div> </div>
@endsection @endsection

View File

@ -1,6 +1,7 @@
@php @php
// ✅ H1 (subpage-header에서 출력)
$pageTitle = '개인정보처리방침'; $pageTitle = '개인정보처리방침';
$pageDesc = '개인정보 수집/이용/보관/파기 및 이용자 권리 안내.'; $pageDesc = '핀포유(주식회사 플러스메이커)는 관련 법령을 준수하며 개인정보를 안전하게 보호합니다.';
$breadcrumbs = [ $breadcrumbs = [
['label' => '홈', 'url' => url('/')], ['label' => '홈', 'url' => url('/')],
@ -8,22 +9,340 @@
['label' => '개인정보처리방침', 'url' => url()->current()], ['label' => '개인정보처리방침', 'url' => url()->current()],
]; ];
$policyActive = 'privacy'; // ✅ 좌측 메뉴 활성화만 넘김 (policy-tabs가 config 기반)
$subnavActive = 'privacy';
// (선택) 좌측 메뉴 타이틀을 subpage 레이아웃에서 직접 쓰는 구조라면
// $subnavTitle = config('web.policy_nav.title');
// $subnavSubtitle = config('web.policy_nav.subtitle');
@endphp @endphp
@extends('web.layouts.subpage') @extends('web.layouts.subpage')
@section('title', '개인정보처리방침 | PIN FOR YOU') @section('title', '개인정보처리방침 | PIN FOR YOU')
@section('meta_description', 'PIN FOR YOU 개인정보처리방침입니다. 개인정보 수집/이용/보관/파기 및 이용자 권리를 안내합니다.') @section('meta_description', '핀포유 개인정보처리방침입니다. 개인정보 수집 항목, 이용 목적, 보유 기간, 제3자 제공 및 위탁, 권리 행사 방법을 안내합니다.')
@section('canonical', url('/policy/privacy')) @section('canonical', url('/policy/privacy'))
@section('subcontent') @section('subcontent')
<div class="policy-privacy-page">
<div class="policy-page">
{{-- 본문 H2 --}}
@include('web.partials.content-head', [ @include('web.partials.content-head', [
'title' => '개인정보 처리 기준', 'title' => '개인정보처리방침 안내',
'desc' => '수집 목적, 보관 기간, 제공/위탁, 이용자 권리 내용을 포함합니다.' 'desc' => '주요 내용은 목차에서 빠르게 이동할 수 있습니다.'
]) ])
{{-- TODO: 개인정보처리방침 본문 --}} {{-- 목차(TOC) --}}
<div class="policy-toc">
<a href="#p1">1. 개인정보의 처리 목적</a>
<a href="#p2">2. 개인정보의 항목 수집방법</a>
<a href="#p3">3. 개인정보의 처리 보유 기간</a>
<a href="#p4">4. 개인정보의 제3자 제공</a>
<a href="#p5">5. 개인정보처리 위탁</a>
<a href="#p6">6. 정보주체의 권리·의무 행사방법</a>
<a href="#p7">7. 쿠키의 설치/운영 거부</a>
<a href="#p8">8. 개인정보 파기</a>
<a href="#p9">9. 개인정보 보호책임자</a>
<a href="#p10">10. 권익침해 구제방법</a>
<a href="#p11">11. 고지의 의무</a>
</div>
{{-- 섹션 1 --}}
<section class="policy-sec" id="p1">
<h2 class="policy-h2">1. 개인정보의 처리 목적</h2>
<p class="policy-p">
주식회사 플러스메이커(이하 “회사”) 운영하는 “핀포유”는 개인정보를 다음 목적을 위해 처리합니다.
처리한 개인정보는 목적 이외의 용도로 사용되지 않으며, 목적이 변경될 경우 사전 동의를 받습니다.
</p>
<div class="policy-card">
<div class="policy-card__title">(1) 홈페이지 회원가입 관리</div>
<ul class="policy-ul">
<li>회원 가입의사 확인, 회원자격 유지·관리</li>
<li>서비스 부정이용 방지</li>
<li>각종 고지·통지, 고충처리, 분쟁 조정을 위한 기록 보존</li>
</ul>
</div>
<div class="policy-card">
<div class="policy-card__title">(2) 민원사무 처리</div>
<ul class="policy-ul">
<li>민원인의 신원 확인, 민원사항 확인</li>
<li>사실조사를 위한 연락·통지</li>
<li>처리결과 통보</li>
</ul>
</div>
</section>
{{-- 섹션 2 --}}
<section class="policy-sec" id="p2">
<h2 class="policy-h2">2. 개인정보의 항목 수집방법</h2>
<div class="policy-card">
<div class="policy-card__title">(1) 개인정보 수집 항목</div>
<p class="policy-p"> 회원가입, 상담, 부가 서비스 제공 등을 위해 아래 개인정보를 수집할 있습니다.</p>
<div class="policy-badge-list">
<span class="policy-badge">이름</span>
<span class="policy-badge">생년월일</span>
<span class="policy-badge">성별</span>
<span class="policy-badge">전화번호</span>
<span class="policy-badge">이메일</span>
<span class="policy-badge">아이디</span>
<span class="policy-badge">비밀번호</span>
<span class="policy-badge">CI/DI</span>
</div>
<p class="policy-p" style="margin-top:10px;">
서비스 이용 과정에서 다음 정보가 생성·수집될 있습니다.
</p>
<div class="policy-badge-list">
<span class="policy-badge">접속 IP</span>
<span class="policy-badge">쿠키</span>
<span class="policy-badge">서비스 이용·접속기록</span>
</div>
</div>
<div class="policy-card">
<div class="policy-card__title">(2) 개인정보 수집방법</div>
<ul class="policy-ul">
<li>홈페이지(회원가입, 문의상담), 서면양식</li>
<li>제휴사로부터의 제공</li>
</ul>
</div>
</section>
{{-- 섹션 3 --}}
<section class="policy-sec" id="p3">
<h2 class="policy-h2">3. 개인정보의 처리 보유 기간</h2>
<p class="policy-p">
회사는 법령에 따른 보유·이용기간 또는 정보주체로부터 동의 받은 기간 내에서 개인정보를 처리·보유합니다.
또한 관련 법령에 따라 1년간 “핀포유”를 이용하지 아니한 회원의 개인정보는 파기하거나 별도 분리 보관됩니다.
</p>
<div class="policy-card">
<div class="policy-card__title">(1) 보유·이용 원칙</div>
<ul class="policy-ul">
<li>이용 목적 달성 지체 없이 파기</li>
<li>법령에 근거하여 보존할 필요가 있는 경우 안전하게 보관</li>
</ul>
</div>
<div class="policy-card">
<div class="policy-card__title">(2) 법령에 따른 보존 기간</div>
<div class="policy-table-wrap" role="region" aria-label="법령에 따른 보존 기간">
<table class="policy-table">
<thead>
<tr>
<th>관계 법률</th>
<th>목적</th>
<th>수집항목</th>
<th>보유기간</th>
</tr>
</thead>
<tbody>
<tr>
<td data-label="관계 법률">통신비밀보호법</td>
<td data-label="목적">법원의 영장을 받아 수사기관이 요청 제공</td>
<td data-label="수집항목">로그기록, IP </td>
<td data-label="보유기간">3개월</td>
</tr>
<tr>
<td data-label="관계 법률">전자상거래 등에서의 소비자보호에 관한 법률</td>
<td data-label="목적">회원의 불만 또는 분쟁처리에 관한 기록</td>
<td data-label="수집항목">회원 식별정보, 분쟁처리 기록 </td>
<td data-label="보유기간">3</td>
</tr>
<tr>
<td data-label="관계 법률">전자상거래 등에서의 소비자보호에 관한 법률</td>
<td data-label="목적">대금결제 재화 등의 공급에 관한 기록</td>
<td data-label="수집항목">회원 식별정보, 계약/청약철회 기록 </td>
<td data-label="보유기간">5</td>
</tr>
<tr>
<td data-label="관계 법률">전자상거래 등에서의 소비자보호에 관한 법률</td>
<td data-label="목적">계약 또는 청약철회 등에 관한 기록</td>
<td data-label="수집항목">계약/청약철회 기록 </td>
<td data-label="보유기간">5</td>
</tr>
<tr>
<td data-label="관계 법률">부가가치세법</td>
<td data-label="목적">장부, 세금계산서, 영수증 </td>
<td data-label="수집항목">부가가치세 과세표준/세액 신고자료 </td>
<td data-label="보유기간">5</td>
</tr>
<tr>
<td data-label="관계 법률">전자금융거래법</td>
<td data-label="목적">전자금융거래기록 확인</td>
<td data-label="수집항목">전자금융거래 기록, 상대방 정보 </td>
<td data-label="보유기간">5</td>
</tr>
</tbody>
</table>
</div>
<div class="policy-note">
마케팅 광고 활용 관련 개인정보는 동의일로부터 지체 없이 파기 시까지 보유·이용됩니다.
</div>
</div>
</section>
{{-- 섹션 4 --}}
<section class="policy-sec" id="p4">
<h2 class="policy-h2">4. 개인정보의 제3자 제공</h2>
<div class="policy-card">
<ul class="policy-ul">
<li>회사는 회원 동의 또는 법령 근거가 없는 , 고지한 범위를 넘어 개인정보를 제3자에게 제공하지 않습니다.</li>
<li>제공 제공받는 /목적/항목/보유기간을 사전에 고지하고 동의를 받습니다.</li>
<li>다만 요금 정산, 비식별 통계/연구, 법령상 특별 규정이 있는 경우는 예외가 있습니다.</li>
<li>배송/정산 또는 이벤트 참여 등은 이용자 동의 하에 제공될 있습니다.</li>
</ul>
</div>
</section>
{{-- 섹션 5 --}}
<section class="policy-sec" id="p5">
<h2 class="policy-h2">5. 개인정보처리 위탁</h2>
<p class="policy-p">
회사는 서비스 향상을 위해 개인정보를 위탁하고 있으며, 위탁 계약 관계 법령에 따라 안전한 관리가 이루어지도록 규정합니다.
</p>
<div class="policy-table-wrap" role="region" aria-label="개인정보처리 위탁">
<table class="policy-table">
<thead>
<tr>
<th>수탁업체</th>
<th>위탁업무 내용</th>
<th>개인정보의 보유 이용기간</th>
</tr>
</thead>
<tbody>
<tr>
<td data-label="수탁업체">㈜LG U+</td>
<td data-label="위탁업무 내용">신용카드 결제, 가상계좌 결제, SMS 발송</td>
<td data-label="보유기간">회원탈퇴 또는 위탁계약 종료 시까지(법령 기준)</td>
</tr>
<tr>
<td data-label="수탁업체">㈜다날</td>
<td data-label="위탁업무 내용">신용카드/가상계좌/휴대폰 결제, 상품권 결제 발급 </td>
<td data-label="보유기간">회원탈퇴 또는 위탁계약 종료 시까지(법령 기준)</td>
</tr>
<tr>
<td data-label="수탁업체">㈜더즌</td>
<td data-label="위탁업무 내용">가상계좌, 계좌출금, 계좌성명조회</td>
<td data-label="보유기간">회원탈퇴 또는 위탁계약 종료 시까지(법령 기준)</td>
</tr>
<tr>
<td data-label="수탁업체">로움아이티</td>
<td data-label="위탁업무 내용">로그인톡 인증 서비스</td>
<td data-label="보유기간">별도 저장하지 않음(본인인증 업체 보유)</td>
</tr>
<tr>
<td data-label="수탁업체">()케이티엠하우스</td>
<td data-label="위탁업무 내용">휴대폰번호, 상품권명</td>
<td data-label="보유기간">회원탈퇴 또는 위탁계약 종료 </td>
</tr>
</tbody>
</table>
</div>
</section>
{{-- 섹션 6 --}}
<section class="policy-sec" id="p6">
<h2 class="policy-h2">6. 정보주체의 권리·의무 행사방법</h2>
<div class="policy-card">
<ul class="policy-ul">
<li>개인정보 열람 요구</li>
<li>오류 등이 있을 경우 정정 요구</li>
<li>삭제 요구</li>
<li>처리정지 요구</li>
</ul>
<p class="policy-p" style="margin-top:10px;">
권리 행사는 서면/전자우편/FAX 등을 통하여 하실 있으며, 회사는 지체 없이 조치합니다.
, 관련 법령에 따라 제한될 있습니다.
</p>
</div>
</section>
{{-- 섹션 7 --}}
<section class="policy-sec" id="p7">
<h2 class="policy-h2">7. 쿠키의 설치, 운영 거부</h2>
<div class="policy-card">
<ul class="policy-ul">
<li>접속 빈도/방문 시간 분석, 관심사 파악, 맞춤형 서비스 제공을 위해 쿠키를 사용할 있습니다.</li>
<li>브라우저 옵션에서 쿠키 허용/차단/저장 확인을 선택할 있습니다.</li>
</ul>
<div class="policy-note">
설정 예시(IE): 도구 &gt; 인터넷 옵션 &gt; 개인정보 (쿠키 거부 서비스 이용에 제한이 있을 있습니다.)
</div>
</div>
</section>
{{-- 섹션 8 --}}
<section class="policy-sec" id="p8">
<h2 class="policy-h2">8. 개인정보 파기</h2>
<div class="policy-card">
<div class="policy-card__title">(1) 파기절차</div>
<p class="policy-p">
회원가입 등을 통해 입력한 정보는 목적 달성 별도 DB로 옮겨 내부 방침 법령에 따라 일정 기간 저장 파기됩니다.
</p>
<div class="policy-card__title" style="margin-top:10px;">(2) 파기방법</div>
<ul class="policy-ul">
<li>전자적 파일 형태: 복구 불가능한 기술적 방법으로 삭제</li>
</ul>
</div>
</section>
{{-- 섹션 9 --}}
<section class="policy-sec" id="p9">
<h2 class="policy-h2">9. 개인정보 보호책임자</h2>
<div class="policy-card">
<div class="policy-kv">
<div class="policy-kv__row"><span>소속</span><b>대표이사</b></div>
<div class="policy-kv__row"><span>전화번호</span><b>1833-4856</b></div>
<div class="policy-kv__row"><span>성명</span><b>송병수</b></div>
<div class="policy-kv__row"><span>이메일</span><b>Bestplusmakerr@gmail.com</b></div>
</div>
<div class="policy-note" style="margin-top:10px;">
비밀번호 관리 책임은 이용자 본인에게 있으며, 공공장소 이용 각별히 유의해 주시기 바랍니다.
</div>
</div>
</section>
{{-- 섹션 10 --}}
<section class="policy-sec" id="p10">
<h2 class="policy-h2">10. 권익침해 구제방법</h2>
<div class="policy-card">
<ul class="policy-ul">
<li>개인정보 침해신고센터(한국인터넷진흥원): 118 / privacy.kisa.or.kr</li>
<li>개인정보 분쟁조정위원회: 1833-6972 / www.kopico.go.kr</li>
<li>대검찰청 사이버수사과: 1301 / www.spo.go.kr</li>
<li>경찰청 사이버안전국: 182 / cyberbureau.police.go.kr</li>
</ul>
</div>
</section>
{{-- 섹션 11 --}}
<section class="policy-sec" id="p11">
<h2 class="policy-h2">11. 개인정보 처리방침 고지의 의무</h2>
<div class="policy-card">
<p class="policy-p">
방침은 시행일로부터 적용되며, 변경사항이 있는 경우 시행 7 전부터 공지사항을 통해 고지합니다.
</p>
<div class="policy-note">
방침은 <b>2019 1 21</b>부터 시행됩니다.
</div>
</div>
</section>
<div class="policy-bottom">
<a class="policy-top" href="#main-content"> 위로</a>
</div>
</div> </div>
@endsection @endsection

View File

@ -1,29 +1,267 @@
@php @php
$pageTitle = '개인정보처리방침'; // ✅ H1 (subpage-header에서 출력)
$pageDesc = '개인정보 수집/이용/보관/파기 및 이용자 권리 안내.'; $pageTitle = '이용약관';
$pageDesc = '핀포유 서비스 이용에 관한 기본 조건과 회원의 권리·의무를 안내합니다.';
$breadcrumbs = [ $breadcrumbs = [
['label' => '홈', 'url' => url('/')], ['label' => '홈', 'url' => url('/')],
['label' => '약관 및 정책', 'url' => url('/policy')], ['label' => '약관 및 정책', 'url' => url('/policy')],
['label' => '개인정보처리방침', 'url' => url()->current()], ['label' => '이용약관', 'url' => url()->current()],
]; ];
$policyActive = 'privacy'; // ✅ 좌측 메뉴 활성화만
$subnavActive = 'terms';
@endphp @endphp
@extends('web.layouts.subpage') @extends('web.layouts.subpage')
@section('title', '개인정보처리방침 | PIN FOR YOU') @section('title', '이용약관 | PIN FOR YOU')
@section('meta_description', 'PIN FOR YOU 개인정보처리방침입니다. 개인정보 수집/이용/보관/파기 및 이용자 권리를 안내합니다.') @section('meta_description', '핀포유 이용약관입니다. 회원가입, 서비스 이용, 책임, 면책, 관할법원 등 서비스 이용 조건을 안내합니다.')
@section('canonical', url('/policy/privacy')) @section('canonical', url('/policy/terms'))
@section('subcontent') @section('subcontent')
<div class="policy-privacy-page"> <div class="policy-page">
{{-- 본문 H2 --}}
@include('web.partials.content-head', [ @include('web.partials.content-head', [
'title' => '개인정보 처리 기준', 'title' => '이용약관 안내',
'desc' => '수집 목적, 보관 기간, 제공/위탁, 이용자 권리 내용을 포함합니다.' 'desc' => '아래 목차에서 원하는 조항으로 바로 이동할 수 있습니다.'
]) ])
{{-- TODO: 개인정보처리방침 본문 --}} {{-- 목차(TOC) --}}
<div class="policy-toc">
<a href="#t1">제1조 목적</a>
<a href="#t2">제2조 효력 변경</a>
<a href="#t3">제3조 용어의 정의</a>
<a href="#t4">제4조 회원가입</a>
<a href="#t5">제5조 탈퇴 이용정지</a>
<a href="#t6">제6조 이용자정보 변경</a>
<a href="#t7">제7조 사이트의 의무</a>
<a href="#t8">제8조 회원의 의무</a>
<a href="#t9">제9조 ID/비밀번호 관리</a>
<a href="#t10">제10조 서비스 이용료</a>
<a href="#t11">제11조 서비스 제한/정지</a>
<a href="#t12">제12조 정보의 변경</a>
<a href="#t13">제13조 면책조항</a>
<a href="#t14">제14조 관할법원</a>
<a href="#t15">부칙</a>
</div>
{{-- 제1조 --}}
<section class="policy-sec" id="t1">
<h2 class="policy-h2"> 1 (목적)</h2>
<div class="policy-card">
<p class="policy-p">
약관은 ㈜플러스메이커(이하 "회사") 제공하는 핀포유(이하 “사이트”) 관련 제반 서비스(이하 "서비스")
이용조건 절차에 관한 회사와 회원 간의 권리·의무 책임사항, 기타 필요한 사항을 규정함을 목적으로 합니다.
</p>
</div>
</section>
{{-- 제2조 --}}
<section class="policy-sec" id="t2">
<h2 class="policy-h2"> 2 (약관의 효력 변경)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li> 약관은 서비스 화면이나 기타의 방법으로 이용고객에게 공지함으로써 효력을 발생합니다.</li>
<li>사이트는 약관의 내용을 변경할 있으며, 변경된 약관은 위와 같은 방법으로 공지 또는 통지함으로써 효력을 발생합니다.</li>
</ol>
</div>
</section>
{{-- 제3조 --}}
<section class="policy-sec" id="t3">
<h2 class="policy-h2"> 3 (용어의 정의)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li><b>회원</b> : 사이트와 서비스 이용계약을 체결하거나 이용자 아이디(ID) 부여받은 개인</li>
<li><b>아이디(ID)</b> : 회원의 식별과 서비스 이용을 위하여 회원이 정하고 사이트가 승인하는 이메일 형식</li>
<li><b>비밀번호</b> : 아이디(ID) 일치된 회원임을 확인하고 회원 비밀을 보호하기 위한 영문자·숫자·특수문자 조합</li>
<li><b>회원탈퇴</b> : 사이트 또는 회원이 서비스 이용계약을 취소하는 </li>
</ol>
<div class="policy-note">
제공하신 원문에 제3조가 중복되어 있어, 내용은 번만 정리해 반영했습니다.
</div>
</div>
</section>
{{-- 제4조 --}}
<section class="policy-sec" id="t4">
<h2 class="policy-h2"> 4 (회원가입)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>사이트에서 제공하는 절차에 맞춰 이용약관 동의 본인인증 절차 완료, 가입 양식에 따라 회원정보 기입으로 회원가입을 신청합니다.</li>
<li>사이트는 신청자에 대하여 아래의 예외를 제외하고 회원 등록합니다.</li>
<li>사이트는 다음 사유가 있을 제한사유 해소 시까지 회원등록을 유보할 있습니다.
<ul class="policy-ul">
<li>서비스 관련 설비에 여유가 없는 경우</li>
<li>기술상 지장이 있는 경우</li>
<li>기타 사이트가 필요하다고 인정되는 경우</li>
</ul>
</li>
<li>사이트는 신청자가 다음에 해당하는 경우 회원등록을 거부할 있습니다.
<ul class="policy-ul">
<li>다른 개인(사이트) 명의를 사용하여 신청한 경우</li>
<li>이용자 정보를 허위로 기재하여 신청한 경우</li>
<li>사회 질서 또는 미풍양속을 저해할 목적으로 신청한 경우</li>
<li>기타 사이트 소정의 이용신청요건을 충족하지 못한 경우</li>
</ul>
</li>
</ol>
</div>
</section>
{{-- 제5조 --}}
<section class="policy-sec" id="t5">
<h2 class="policy-h2"> 5 (회원 탈퇴 이용정지)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>회원은 사이트에 언제든지 탈퇴를 요청할 있으며, 사이트는 요청사항을 명확히 확인한 즉시 회원탈퇴를 처리합니다.</li>
<li>회원이 다음 사유에 해당하는 경우, 사이트는 회원자격을 제한 정지시킬 있습니다.
<ul class="policy-ul">
<li>회원 가입 허위 정보를 기재한 경우</li>
<li>타인 명의 또는 전자결제 수단 도용 또는 의심되는 경우</li>
<li>허가되지 않은 접근 시도 변경을 시도하는 경우</li>
<li>기타 사이트가 필요하다고 인정되는 경우</li>
</ul>
</li>
<li>자격 제한/정지 회원은 고객센터 상담을 통해 사유 해결 방안을 확인할 있습니다.</li>
</ol>
</div>
</section>
{{-- 제6조 --}}
<section class="policy-sec" id="t6">
<h2 class="policy-h2"> 6 (이용자정보의 변경)</h2>
<div class="policy-card">
<p class="policy-p">
회원은 회원가입 기재한 회원정보가 변경된 경우 사이트 개인정보 확인 페이지를 통해 수정하여야 하며,
변경하지 않음으로 인해 발생하는 모든 문제의 책임은 회원에게 있습니다.
</p>
</div>
</section>
{{-- 제7조 --}}
<section class="policy-sec" id="t7">
<h2 class="policy-h2"> 7 (사이트의 의무)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>사이트는 법령과 약관이 금지하거나 공서양속에 반하는 행위를 하지 않으며, 지속적이고 안정적으로 재화·용역을 제공하는데 최선을 다합니다.</li>
<li>사이트는 서비스 제공과 관련하여 취득한 회원의 개인정보를 회원의 동의 없이 누설·공개·배포하거나 상업적 목적으로 사용할 없습니다. 다만 다음의 경우는 예외입니다.
<ul class="policy-ul">
<li>법률 규정에 의해 국가기관의 요구가 있는 경우</li>
<li>범죄 수사 목적 또는 정보통신윤리위원회 요청이 있는 경우</li>
<li>기타 관계법령에 따른 절차로 요청이 있는 경우</li>
</ul>
</li>
<li>사이트는 약관에서 정한 바에 따라 지속적·안정적으로 서비스를 제공할 의무가 있습니다.</li>
</ol>
</div>
</section>
{{-- 제8조 --}}
<section class="policy-sec" id="t8">
<h2 class="policy-h2"> 8 (회원의 의무)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>회원은 서비스 이용 다음 행위를 하지 않아야 합니다.
<ul class="policy-ul">
<li>다른 회원의 ID를 부정하게 사용하는 행위</li>
<li>사이트 사전승낙 없이 정보를 복제·변경·출판·방송 등에 사용하거나 타인에게 제공하는 행위</li>
<li>사이트 또는 타인의 저작권 권리를 침해하는 행위</li>
<li>공공질서 미풍양속에 위반되는 정보 유포 행위</li>
<li>범죄와 결부된다고 객관적으로 판단되는 행위</li>
<li>기타 관계법령에 위배되는 행위</li>
</ul>
</li>
<li>회원은 관계법령, 약관, 서비스 이용 안내 주의 사항을 준수해야 합니다.</li>
<li>회원은 공지사항에 게시하거나 별도 공지한 이용 제한 사항을 준수해야 합니다.</li>
</ol>
</div>
</section>
{{-- 제9조 --}}
<section class="policy-sec" id="t9">
<h2 class="policy-h2"> 9 (회원 아이디(ID) 비밀번호 관리)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>ID와 비밀번호 관리 책임은 회원에게 있으며, 관리소홀/부정사용으로 발생한 결과의 책임도 회원에게 있습니다.</li>
<li>ID가 부정 사용된 경우 또는 보안 위반이 의심되는 경우 회원은 사이트에 즉시 통보해야 합니다.</li>
</ol>
</div>
</section>
{{-- 제10조 --}}
<section class="policy-sec" id="t10">
<h2 class="policy-h2"> 10 (서비스 이용료)</h2>
<div class="policy-card">
<p class="policy-p">
사이트를 통해 상품 구매 휴대폰소액결제 서비스를 이용해 결제하는 경우, 회사가 정한 규정에 따라 서비스 이용료가 부과될 있습니다.
</p>
</div>
</section>
{{-- 제11조 --}}
<section class="policy-sec" id="t11">
<h2 class="policy-h2"> 11 (서비스 제한 정지)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>전시·사변·천재지변·국가비상사태 불가항력 또는 기간통신사업자 서비스 중지 사유가 있는 경우 서비스 전부 또는 일부를 제한/정지할 있습니다.</li>
<li>이용 제한/정지 사유 제한기간 등을 지체 없이 회원에게 안내합니다.</li>
</ol>
</div>
</section>
{{-- 제12조 --}}
<section class="policy-sec" id="t12">
<h2 class="policy-h2"> 12 (정보의 변경)</h2>
<div class="policy-card">
<p class="policy-p">
회원이 주소, 비밀번호 고객정보를 변경하고자 하는 경우 홈페이지의 회원정보 변경 서비스를 통해 변경할 있습니다.
</p>
</div>
</section>
{{-- 제13조 --}}
<section class="policy-sec" id="t13">
<h2 class="policy-h2"> 13 (면책조항)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>회사는 다음에 해당하는 경우 책임을 지지 않습니다.
<ul class="policy-ul">
<li>불가항력(전시/사변/천재지변/국가비상사태 )</li>
<li>회원의 고의 또는 과실로 손해가 발생한 경우</li>
<li>기간 통신사업자 서비스 장애로 인한 경우</li>
</ul>
</li>
<li>회원 귀책 사유로 인한 서비스 이용 장애에 대하여 회사는 책임을 지지 않습니다.</li>
</ol>
</div>
</section>
{{-- 제14조 --}}
<section class="policy-sec" id="t14">
<h2 class="policy-h2"> 14 (관할법원)</h2>
<div class="policy-card">
<ol class="policy-ol">
<li>분쟁 발생 회사 본사 소재지를 관할하는 법원을 관할 법원으로 합니다.</li>
<li>회사와 회원 간의 소송에는 대한민국 법을 적용합니다.</li>
</ol>
</div>
</section>
{{-- 부칙 --}}
<section class="policy-sec" id="t15">
<h2 class="policy-h2">[부칙]</h2>
<div class="policy-card">
<p class="policy-p"><b>(시행일)</b> 약관은 2019 01월부터 시행합니다.</p>
</div>
</section>
<div class="policy-bottom">
<a class="policy-top" href="#main-content"> 위로</a>
</div>
</div> </div>
@endsection @endsection