[Claude Code Desktop 자동 설치 환경]
- setup/CLAUDE.md: 트리거 키워드 + 설치 패키지 설명
- setup/.claude/skills/guardia-install/SKILL.md: 6단계 설치 오케스트레이터
Phase 0: 의도 파악 → Phase 1: OS 감지 → Phase 2: 사전 확인
Phase 3: 설치 실행 → Phase 4: 라이선스 발급 → Phase 5: 검증 → Phase 6: 완료보고
[통합 자동 설치 스크립트]
- setup/install_auto.sh: Linux 통합 (OS 자동 감지 ubuntu/centos/rhel)
- --license trial30|trial7|<key> 파라미터
- 설치 완료 후 GUARDiA 자동 실행 + 브라우저 자동 열기
- --test 검증 모드
- setup/install_auto.ps1: Windows 통합 (ASCII 전용, PS 5.1 호환)
- 설치 후 NSSM 서비스 자동 시작 + 브라우저 자동 열기
- -Test 파라미터로 검증 전용 실행
[라이선스 엔진 개선]
- core/license.py: generate_trial_key(days=None) 파라미터 추가
- TRIAL_DURATION_DAYS = TRIAL_DURATION_DAYS 환경변수로 조정 가능
- routers/license.py: TrialRequest.days 필드 + 30일 체험판 지원
POST /api/license/trial {"days": 30} 로 30일 발급
사용자 경험:
1. setup/ 폴더를 새 PC에 복사
2. Claude Code Desktop 열고 해당 폴더 open
3. "GUARDiA 시스템 1달 사용자로 설치해 줘" 입력
4. 자동으로 OS 감지 → 설치 → 30일 라이선스 → 브라우저 열림
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
185 lines
6.4 KiB
CSS
185 lines
6.4 KiB
CSS
:root {
|
|
/*
|
|
--swiper-pagination-color: var(--swiper-theme-color);
|
|
--swiper-pagination-left: auto;
|
|
--swiper-pagination-right: 8px;
|
|
--swiper-pagination-bottom: 8px;
|
|
--swiper-pagination-top: auto;
|
|
--swiper-pagination-fraction-color: inherit;
|
|
--swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);
|
|
--swiper-pagination-progressbar-size: 4px;
|
|
--swiper-pagination-bullet-size: 8px;
|
|
--swiper-pagination-bullet-width: 8px;
|
|
--swiper-pagination-bullet-height: 8px;
|
|
--swiper-pagination-bullet-border-radius: 50%;
|
|
--swiper-pagination-bullet-inactive-color: #000;
|
|
--swiper-pagination-bullet-inactive-opacity: 0.2;
|
|
--swiper-pagination-bullet-opacity: 1;
|
|
--swiper-pagination-bullet-horizontal-gap: 4px;
|
|
--swiper-pagination-bullet-vertical-gap: 6px;
|
|
*/
|
|
}
|
|
.swiper-pagination {
|
|
position: absolute;
|
|
text-align: center;
|
|
transition: 300ms opacity;
|
|
transform: translate3d(0, 0, 0);
|
|
z-index: 10;
|
|
}
|
|
.swiper-pagination.swiper-pagination-hidden {
|
|
opacity: 0;
|
|
}
|
|
.swiper-pagination-disabled > .swiper-pagination,
|
|
.swiper-pagination.swiper-pagination-disabled {
|
|
display: none !important;
|
|
}
|
|
/* Common Styles */
|
|
.swiper-pagination-fraction,
|
|
.swiper-pagination-custom,
|
|
.swiper-horizontal > .swiper-pagination-bullets,
|
|
.swiper-pagination-bullets.swiper-pagination-horizontal {
|
|
bottom: var(--swiper-pagination-bottom, 8px);
|
|
top: var(--swiper-pagination-top, auto);
|
|
left: 0;
|
|
width: 100%;
|
|
}
|
|
/* Bullets */
|
|
.swiper-pagination-bullets-dynamic {
|
|
overflow: hidden;
|
|
font-size: 0;
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
|
transform: scale(0.33);
|
|
position: relative;
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
|
|
transform: scale(1);
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
|
|
transform: scale(1);
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
|
|
transform: scale(0.66);
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
|
|
transform: scale(0.33);
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
|
|
transform: scale(0.66);
|
|
}
|
|
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
|
|
transform: scale(0.33);
|
|
}
|
|
.swiper-pagination-bullet {
|
|
width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));
|
|
height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));
|
|
display: inline-block;
|
|
border-radius: var(--swiper-pagination-bullet-border-radius, 50%);
|
|
background: var(--swiper-pagination-bullet-inactive-color, #000);
|
|
opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);
|
|
}
|
|
button.swiper-pagination-bullet {
|
|
border: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
box-shadow: none;
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
}
|
|
.swiper-pagination-clickable .swiper-pagination-bullet {
|
|
cursor: pointer;
|
|
}
|
|
.swiper-pagination-bullet:only-child {
|
|
display: none !important;
|
|
}
|
|
.swiper-pagination-bullet-active {
|
|
opacity: var(--swiper-pagination-bullet-opacity, 1);
|
|
background: var(--swiper-pagination-color, var(--swiper-theme-color));
|
|
}
|
|
.swiper-vertical > .swiper-pagination-bullets,
|
|
.swiper-pagination-vertical.swiper-pagination-bullets {
|
|
right: var(--swiper-pagination-right, 8px);
|
|
left: var(--swiper-pagination-left, auto);
|
|
top: 50%;
|
|
transform: translate3d(0px, -50%, 0);
|
|
}
|
|
.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet,
|
|
.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet {
|
|
margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;
|
|
display: block;
|
|
}
|
|
.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,
|
|
.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
width: 8px;
|
|
}
|
|
.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,
|
|
.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
|
display: inline-block;
|
|
transition: 200ms transform,
|
|
200ms top;
|
|
}
|
|
.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet,
|
|
.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {
|
|
margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);
|
|
}
|
|
.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,
|
|
.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
white-space: nowrap;
|
|
}
|
|
.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,
|
|
.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
|
transition: 200ms transform,
|
|
200ms left;
|
|
}
|
|
.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
|
|
transition: 200ms transform,
|
|
200ms right;
|
|
}
|
|
/* Fraction */
|
|
.swiper-pagination-fraction {
|
|
color: var(--swiper-pagination-fraction-color, inherit);
|
|
}
|
|
/* Progress */
|
|
.swiper-pagination-progressbar {
|
|
background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));
|
|
position: absolute;
|
|
}
|
|
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
|
|
background: var(--swiper-pagination-color, var(--swiper-theme-color));
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
transform: scale(0);
|
|
transform-origin: left top;
|
|
}
|
|
.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
|
|
transform-origin: right top;
|
|
}
|
|
.swiper-horizontal > .swiper-pagination-progressbar,
|
|
.swiper-pagination-progressbar.swiper-pagination-horizontal,
|
|
.swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,
|
|
.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {
|
|
width: 100%;
|
|
height: var(--swiper-pagination-progressbar-size, 4px);
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
.swiper-vertical > .swiper-pagination-progressbar,
|
|
.swiper-pagination-progressbar.swiper-pagination-vertical,
|
|
.swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,
|
|
.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {
|
|
width: var(--swiper-pagination-progressbar-size, 4px);
|
|
height: 100%;
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
.swiper-pagination-lock {
|
|
display: none;
|
|
}
|