本文へ移動
cccskills
無料GitHub で公開

designer

제안서 디자인 에이전트. 승인된 proposal_script.md를 generate_제안서.py Python 코드로 변환합니다. slide_kit.py 함수 시그니처, VStack 레이아웃 계산, 7대 디자인 패턴, 겹침/넘침 방지, Dark-Light Rhythm을 적용합니다. 트리거: 디자인, 코드 생성, 레이아웃, VStack, slide_kit, 겹침, 넘침, COLS, GRID, FLOW, CHART, TABLE, HIGHLIGHT, KPIS, COMPARE, TIMELINE, PYRAMID, MATRIX, 그림자, 카드, Hero, Bento, Comparison

インストール方法を見る

含まれるファイル(1)

  • SKILL.md23.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Designer (제안서 디자인 에이전트)

승인된 proposal_script.md를 generate_제안서.py Python 코드로 변환합니다. layout(배치) + diagram(도식화) + design(시각 패턴) 3개 영역을 통합합니다.


코드 변환 프로세스

  1. proposal_script.md 읽기
  2. 각 슬라이드 블록의 레이아웃 + 시각 요소 지시를 slide_kit 코드로 변환
  3. VStack으로 Y좌표 자동 계산
  4. 배경색 리듬 적용
  5. 디자인 패턴(P1~P7) 구현
  6. generate_제안서.py 저장

Part 1: 슬라이드 경계 상수

SW = 13.333"    (슬라이드 전체 너비)
SH = 7.5"       (슬라이드 전체 높이)
ML = 0.8"       (좌측 마진, ML_IN)
CW = 11.73"     (콘텐츠 너비, CW_IN)
Z["ct_y"] = 1.1"   (콘텐츠 상단 — TB 아래)
Z["ct_b"] = 6.5"   (콘텐츠 하단 — 여기 넘으면 경미한 넘침)
GAP = 0.2"       (VStack 기본 간격)
CGAP = 0.15"     (컬럼 간 간격)

절대 경계:

  • bottom > 6.5" → 경미한 넘침 (하단 여백 침범)
  • bottom > 7.5" → 치명적 (슬라이드 외부, 보이지 않음)

Part 2: VStack 동작

v = VStack()        # _y = Z["ct_y"] = 1.1"
y = v.next(h)       # returns Inches(_y), then _y += h + 0.2(gap)
y = v.peek()        # returns Inches(_y), _y 변경 없음
v.skip(amount)      # _y += amount (gap 없이)

v.next(h)에서 h = 해당 요소의 실제 렌더링 높이 (할당 높이가 아님)


Part 3: 스크립트→코드 변환 매핑

특수 슬라이드

스크립트 유형Python 코드
coverslide_cover(prs, "프로젝트명", "발주처명")
tocslide_toc(prs, "목차", [("01", "HOOK", "설명"), ...], pg=N)
section_dividerslide_section_divider(prs, "01", "HOOK", "부제", "스토리", "key1", WIN)
exec_summaryslide_exec_summary(prs, ...)
next_stepslide_next_step(prs, headline=, steps=[...])
closingslide_closing(prs, "프로젝트명", tagline="...")

일반 콘텐츠

스크립트 필드Python 코드
Action TitleTB(s, "인사이트 제목", pg=N)
배경: darkbg(s, C["dark"]) + TB(s, ..., dark=True)
배경: whitebg(s, C["white"])
배경: lightbg(s, C["light"])
Win Theme: keyNWB(s, "keyN", WIN)
Bridge 문장HIGHLIGHT(s, "Bridge 문장", y=v.next(0.8))

Part 4: 도식화 함수 시그니처 (★★★ 치명적 규칙)

★ COLS body = list[str] 필수

# ❌ 치명적: 각 글자가 한 줄씩 세로로 렌더링됨
{"title": "제목", "body": "항목1\n항목2\n항목3"}

# ✅ 정상
{"title": "제목", "body": ["항목1", "항목2", "항목3"]}

★ COLS title에 \n 금지

# ❌ 좁은 컬럼에서 글자가 세로로 깨짐
{"title": "핵심 메시지 1\n소상공인 상생", "body": [...]}

# ✅ 콜론 또는 대시로 구분
{"title": "메시지 1: 소상공인 상생", "body": [...]}

★ 가로 배치 for 루프 — v.next() 루프 밖 1회

# ❌ 매 iteration마다 VStack 소비
for i, item in enumerate(items):
    METRIC_CARD(s, x, v.next(1.3), ...)  # 4회 = 6.0" 소비!

# ✅ v.next() 1회만 호출
y_cards = v.next(1.3)
for i, item in enumerate(items):
    METRIC_CARD(s, x, y_cards, ...)  # 같은 y값

전체 시그니처 레퍼런스

컬럼/그리드 계열

COLS(s, items, y=None, h=None, colors=None, shadow=True)
# items: [{"title": str, "body": list[str]}]  ← body 반드시 list!

GRID(s, items, cols=3, y=None, h=None, gap=CGAP, shadow=True)
# h = 개별 카드 높이 (총 높이 아님!)

ICON_CARDS(s, items, y=None, h=None)
# items: [{"icon": "emoji", "title": str, "desc": str}]

통계/KPI 계열

STAT_ROW(s, items, y=None, h=None, shadow=True)
# items: [{"value": str, "label": str}]  ← dict 필수!

KPIS(s, items, y=None, h=None, shadow=True)
# items: [{"value": str, "label": str, "sub": str}]

METRIC_CARD(s, x, y, w, h, value, label, sub, color, shadow=True)

비교/플로우 계열

COMPARE(s, left_title, left_items, right_title, right_items, y=None)
FLOW(s, items, y=None, h=None)
# items: [{"step": "01", "title": str, "desc": str}]

TIMELINE(s, items, y=None, h=None)
# items: [{"period": str, "title": str, "desc": str}]

구조화 계열

PYRAMID(s, levels, y=None, w_max=None, h_total=None)
# levels: [("텍스트", C["color"])]  ← tuple! h_total= 사용 (h= 아님)

MATRIX(s, items, y=None, h=None)
# items: [{"q": str, "title": str, "desc": str}]

ORG(s, pm=None, directors=None, teams=None, y=None)
# pm: {"name": str, "title": str}  — h 파라미터 없음!

차트 계열

BAR_CHART(s, x, y, w, h, categories, series_data, title="", chart_type="column", colors=None)
# chart_type: "column"(세로), "bar"(가로), "stacked"(누적)

PIE_CHART(s, x, y, w, h, categories, values, title="", donut=False, colors=None)
LINE_CHART(s, x, y, w, h, categories, series_data, title="", smooth=False, colors=None)

테이블/텍스트 계열

TABLE(s, headers, rows, y=None, x=None, w=None, col_widths=None)
HIGHLIGHT(s, text, sub=None, y=None, color=None, grad=False)
QUOTE(s, text, author=None, y=None, color=None, style_type="modern")
NUMBERED_LIST(s, x, y, w, items, sz=None, gap=None)

시각 헬퍼

CARD(s, x, y, w, h, title, body, color=None, shadow=True, rounded=True)
IMG_PH(s, x, y, w, h, label)
PROGRESS_BAR(s, x, y, w, label, value, max_val, color=None, show_pct=True)
DONUT_LABEL(s, x, y, w, value, label, color=None)
GANTT_CHART(s, tasks, months, data, y=None)

Part 5: 요소 간 간격 규칙

HIGHLIGHT → 다음 요소:  0.75" (높이 ~0.65-0.7")
HIGHLIGHT(sub=) → 다음 요소: 1.2" (sub 있으면 높이 ~1.0")
COLS → 다음 요소:  0.30"
METRIC_CARD → 다음 요소:  0.15"
MT(불릿) → 다음 요소:  0.20"
TABLE → 다음 요소:  0.15"

MT(불릿 텍스트) 높이

3줄 = 1.1"    4줄 = 1.4"    5줄 = 1.7"
6줄 = 2.0"    8줄 = 2.8"

대형 폰트 높이

폰트 크기줄 수권장 h
60pt2줄2.0"
44pt2줄1.8"
44pt3줄2.5"
36pt2줄1.5"

한글 너비

44pt: 0.61"/자 → CW 내 최대 ~18자
36pt: 0.50"/자 → CW 내 최대 ~23자
→ 44pt 제목 18자 초과 시 반드시 2줄 분리

GRID 높이 계산

h = 개별 카드 높이 (총 높이 아님!)
N행 GRID 총 높이 = h × N + gap × (N-1), gap=0.15"

Part 6: Shadow 규칙

COLS, GRID, STAT_ROW → shadow=False (기본)
KPIS → shadow=True 유지
ROI STAT_ROW → shadow=True 유지
CARD, METRIC_CARD → shadow=True (강조할 때만)

다크 배경 위 카드:   add_shadow(shape, preset="elevated")  — 필수
라이트 배경 위 카드:  add_shadow(shape, preset="soft")      — 선택

Part 7: 7대 디자인 패턴

P1. Hero Split

좌측 60% 대형 타이틀 + 우측 40% 이미지 + 하단 수치.

s = new_slide(prs); bg(s, C["white"]); TB(s, "Action Title", pg=N)
v = VStack()
T(s, "핵심\n메시지", ML, v.next(2.0), Inches(CW_IN*0.55), Inches(2.0),
  bold=True, sz=48)
IMG_PH(s, Inches(ML_IN + CW_IN*0.6), Inches(1.1),
       Inches(CW_IN*0.4), Inches(3.5), label="[키비주얼]")
y_mc = v.next(1.3)
for i, (val, lbl) in enumerate([("70%", "인지도"), ("3배", "전환율")]):
    x = Inches(ML_IN + i * (CW_IN/2))
    METRIC_CARD(s, x, y_mc, Inches(CW_IN/2 - 0.1), Inches(1.3), val, lbl)

P2. Dark Social Proof

다크 배경 + 대형 헤드라인 + 밝은 카드/인용.

s = new_slide(prs); bg(s, C["dark"]); TB(s, "Action Title", pg=N, dark=True)
v = VStack()
T(s, "핵심 인사이트", ML, v.next(2.0), Inches(CW_IN), Inches(2.0),
  bold=True, sz=44, c=C["white"], align="center")
QUOTE(s, "인용문", author="출처", y=v.next(1.2), style="modern")

P3. Achievement Metrics

다크 배경 + 대형 수치 + shadow.

s = new_slide(prs); bg(s, C["dark"]); TB(s, "Action Title", pg=N, dark=True)
v = VStack()
STAT_ROW(s, [
    {"value": "28조", "label": "시장 규모"},
    {"value": "1%", "label": "점유율"},
], y=v.next(1.5), shadow=True)

P4. Bento Grid

비대칭 이미지/카드 — 좌 58% 대형 + 우 40% 소형 2개.

s = new_slide(prs); bg(s, C["white"]); TB(s, "Action Title", pg=N)
v = VStack()
# 좌측 대형 카드 (58%)
w_left = Inches(CW_IN * 0.58)
w_right = Inches(CW_IN * 0.40)
x_right = Inches(ML_IN + CW_IN * 0.60)
y_top = v.next(4.8)  # 전체 높이
CARD(s, ML, y_top, w_left, Inches(4.8), "핵심 전략",
     ["상세 설명 1", "상세 설명 2", "상세 설명 3"],
     color=C["primary"], shadow=True)
# 우측 소형 카드 2개 (40%, 각 2.3" 높이)
CARD(s, x_right, y_top, w_right, Inches(2.3), "전략 A",
     ["설명 라인 1", "설명 라인 2"],
     color=C["secondary"], shadow=True)
CARD(s, x_right, Inches(1.1 + 2.5), w_right, Inches(2.3), "전략 B",
     ["설명 라인 1", "설명 라인 2"],
     color=C["teal"], shadow=True)

P5. Comparison Cards

좌 라이트 카드 + 우 다크 카드 대비 — Before/After, AS-IS/TO-BE에 활용.

s = new_slide(prs); bg(s, C["light"]); TB(s, "Action Title", pg=N)
v = VStack()
w_half = Inches(CW_IN / 2 - 0.1)
y_cards = v.next(4.0)
# 좌측: 밝은 카드 (현재/문제)
sh_l = RBOX(s, ML, y_cards, w_half, Inches(4.0), C["white"], radius=0.08)
add_shadow(sh_l, preset="subtle")
T(s, "AS-IS", Inches(ML_IN + 0.3), Inches(1.3), Inches(2), Inches(0.5),
  bold=True, sz=16, c=C["accent"])
MT(s, Inches(ML_IN + 0.3), Inches(1.9), Inches(CW_IN/2 - 0.7), Inches(2.5),
   ["기존 방식 문제 1", "기존 방식 문제 2", "기존 방식 문제 3"], bul=True)
# 우측: 다크 카드 (제안/해결)
x_r = Inches(ML_IN + CW_IN/2 + 0.1)
sh_r = RBOX(s, x_r, y_cards, w_half, Inches(4.0), C["primary"], radius=0.08)
add_shadow(sh_r, preset="elevated")
T(s, "TO-BE", Inches(ML_IN + CW_IN/2 + 0.4), Inches(1.3), Inches(2), Inches(0.5),
  bold=True, sz=16, c=C["secondary"])
MT(s, Inches(ML_IN + CW_IN/2 + 0.4), Inches(1.9), Inches(CW_IN/2 - 0.7), Inches(2.5),
   ["제안 솔루션 1", "제안 솔루션 2", "제안 솔루션 3"], bul=True, tc=C["white"])

P6. Module Cards

3열 이미지+카드 + shadow — 포트폴리오/사례/프로그램 소개.

s = new_slide(prs); bg(s, C["white"]); TB(s, "Action Title", pg=N)
v = VStack()
cw3 = _cols(3)  # 3등분 너비
y_modules = v.next(4.5)
for i, (title, desc) in enumerate([
    ("프로그램 A", "설명 텍스트"),
    ("프로그램 B", "설명 텍스트"),
    ("프로그램 C", "설명 텍스트"),
]):
    x = Inches(ML_IN + i * (cw3 + CGAP))
    # 상단 이미지 영역
    IMG_PH(s, x, y_modules, Inches(cw3), Inches(2.2), label=f"[{title} 이미지]")
    # 하단 카드
    CARD(s, x, Inches(y_modules.inches + 2.3), Inches(cw3), Inches(2.2),
         title, [desc], color=C["primary"], shadow=True)

P7. Dark-Light Rhythm

❌ 5장 이상 연속 white 금지
✅ 2~3장마다 dark/light 교차
✅ 다크 배경: 전체의 10~20%
✅ light 배경: 전체의 15~25% (white 단조로움 방지)

Part 8: 콘텐츠 유형 → 레이아웃 매핑

콘텐츠 유형권장 함수대안
시장 환경/배경 분석COLS()COMPARE()
핵심 인사이트/메시지HIGHLIGHT()QUOTE()
전략 프레임워크PYRAMID()MATRIX()
채널/항목 비교COMPARE()COLS()
실행 프로세스FLOW()TIMELINE()
KPI/성과 목표KPIS()STAT_ROW()
월별 일정GANTT_CHART()TABLE()
조직도ORG()—
수행 실적GRID()COLS()
데이터 비교TABLE()BAR_CHART()
통계/수치 강조STAT_ROW()METRIC_CARD()
예산/비율PIE_CHART() / BAR_CHART()TABLE()
추세/성장LINE_CHART()BAR_CHART()

Part 9: HIGHLIGHT 예산 규칙

HIGHLIGHT 최대 사용량: 콘텐츠 슬라이드의 15% 이하
  - 50장 기준 최대 7회

HIGHLIGHT 대안:
  - 짧은 인사이트 → ACCENT_LINE + T(bold)
  - 인용문/출처   → QUOTE(modern)
  - 섹션 내 구분   → DIVIDER(thick)
  - 데이터 인사이트 → METRIC_CARD / DONUT_LABEL
  - 그라디언트 강조 → HIGHLIGHT(grad=True) (허용)

Part 10: 금지 패턴

❌ COLS+HIGHLIGHT 동일 조합 3회 이상 반복
❌ TABLE+HIGHLIGHT 동일 조합 3회 이상 반복
❌ 같은 Phase 내 HIGHLIGHT 연속 2장
❌ 상위 3개 함수가 전체 콘텐츠 호출의 50% 이상 차지
❌ slide_kit 헬퍼 함수를 스크립트 내에 재정의
❌ RGBColor 직접 하드코딩 → C["color"] 사용
❌ 폰트명 직접 쓰기 → FONT 상수 사용
❌ "맑은 고딕" 등 다른 폰트 → Pretendard만

Part 11: 시각 효과 최소 기준 (50장 기준)

효과최소 횟수적용 위치
add_shadow(preset=)6회+CARD, 컨셉 슬라이드
gradient_bg()3회+Phase 3 컨셉, 요약
ACCENT_LINE()3회+HIGHLIGHT 대체
DIVIDER()2회+슬라이드 내 섹션 구분
shadow=True (COLS/GRID/KPIS)5회+카드형 레이아웃

Part 12: Phase별 권장 시각 요소

Phase필수 시각 요소
0 HOOK대형 텍스트(44-60pt) + IMG_PH + HIGHLIGHT
1 SUMMARYHIGHLIGHT + KPIS + COLS
2 INSIGHTMETRIC_CARD + COMPARE + BAR_CHART + HIGHLIGHT
3 CONCEPTPYRAMID + FLOW + COMPARE + IMG_PH
4 ACTIONCOLS + TABLE + ICON_CARDS + IMG_PH
5 MANAGEMENTORG + GANTT_CHART + FLOW + TABLE
6 WHY USGRID + TABLE + STAT_ROW + HIGHLIGHT
7 INVESTMENTPIE_CHART + TABLE + KPIS + STAT_ROW

Part 13: ★★★ Premium Design Layer (디자인 퀄리티 상향)

코드 변환 시 아래 규칙을 반드시 적용하여 디자인 퀄리티를 높입니다.

13-1. 배경 다양성 (단색 탈피)

콘텐츠 슬라이드도 배경에 변화를 줍니다:

배경 유형코드용도
white (기본)bg(s, C["white"])일반 콘텐츠
light (밝은 회색)bg(s, C["light"])white 연속 방지, 부드러운 변주
dark (다크)bg(s, C["dark"])임팩트/강조 슬라이드
light gradientgradient_bg(s, C["white"], C["light"], angle=180.0)NEW 미세 그라디언트
primary tintgradient_bg(s, C["white"], lighten(C["primary"], 0.85), angle=180.0)NEW 브랜드 색조
teal tintgradient_bg(s, C["white"], lighten(C["teal"], 0.85), angle=180.0)NEW 포인트 색조

배경 배분 기준 (50장 기준):

white: 50~55% (25~28장)
light: 15~20% (8~10장)
dark:  10~15% (5~8장)
light gradient / tint: 10~15% (5~8장)  ← NEW: 단색 대비 변주
특수 (cover/section/closing): 나머지

적용 위치 가이드:

  • light gradient → Phase 2 분석 슬라이드, Phase 4 콘텐츠 예시
  • primary tint → Phase 3 전략 슬라이드, Phase 6 역량
  • teal tint → Phase 4 디지털/테크 슬라이드
  • 같은 tint를 연속 2장 초과 사용 금지

13-2. 그림자 프리셋 활용 (depth layering)

shadow=True/False 대신 프리셋을 적극 활용합니다:

프리셋효과적용 대상
"subtle"은은한 부유감light/white 배경 위 일반 카드
"normal"기본 깊이감강조 카드, COLS
"elevated"강한 부유감다크 배경 위 카드, 핵심 메시지 카드
"card"카드 전용CARD(), METRIC_CARD

프리셋 적용 규칙:

# ❌ 기본 shadow=True만 사용 (퀄리티 낮음)
COLS(s, items, shadow=True)

# ✅ 배경에 맞는 프리셋 선택
# white/light 배경 → subtle 또는 normal
sh = COLS(s, items, shadow=True)  # 내부적으로 기본 그림자
# 추가 강조 카드에는:
card = CARD(s, x, y, w, h, title, body, shadow=True)

# dark 배경 → elevated 필수 (안 보이면 의미 없음)
sh = RBOX(s, x, y, w, h, C["primary"], radius=0.08)
add_shadow(sh, preset="elevated")

최소 사용 기준 (50장 기준):

add_shadow(preset="subtle"):   5회+
add_shadow(preset="elevated"): 3회+ (다크 배경 카드)
add_shadow(preset="card"):     3회+ (CARD/METRIC_CARD)

13-3. 타이포그래피 웨이트 활용

6가지 웨이트를 계층적으로 사용합니다:

웨이트FONT_W 키용도
BlackFONT_W["black"]표지/섹션 구분자 대형 숫자
BoldFONT_W["bold"]Action Title, 카드 제목
SemiBoldFONT_W["semibold"]소제목, 강조 본문, KPI value
MediumFONT_W["medium"]리드 텍스트, 설명 강조
RegularFONT_W["regular"]일반 본문
LightFONT_W["light"]대형 텍스트(44pt+), 캡션, 출처

적용 예시:

# 대형 인사이트 텍스트 — Light로 세련됨 + Bold 키워드 혼합
T(s, "시장의 변화가\n시작되고 있습니다", ML, v.next(2.0),
  Inches(CW_IN*0.6), Inches(2.0), sz=44, fn=FONT_W["light"], c=C["dark"])

# 리드 텍스트 — Medium으로 본문과 차별화
T(s, "데이터가 말하는 3대 시장 기회", ML, v.next(0.5),
  Inches(CW_IN), Inches(0.5), sz=16, fn=FONT_W["medium"], c=C["gray"])

# KPI 수치 — SemiBold로 임팩트
T(s, "+30%", ML, v.next(1.0), Inches(3), Inches(1.0),
  sz=36, fn=FONT_W["semibold"], c=C["primary"], align="center")

최소 사용 기준:

FONT_W["light"]:    3회+ (대형 텍스트, 캡션)
FONT_W["medium"]:   5회+ (리드/부제/설명 강조)
FONT_W["semibold"]: 5회+ (소제목, KPI 수치)

13-4. 시각 악센트 요소 (polish)

디자인 완성도를 높이는 미세 요소들을 적극 사용합니다:

# ① ACCENT_LINE — 텍스트 블록 좌측 수직 악센트
ACCENT_LINE(s, ML, v.peek(), Inches(1.5), C["primary"])
T(s, "핵심 메시지 텍스트...", Inches(ML_IN + 0.3), v.next(1.5), ...)

# ② DIVIDER — 슬라이드 내 섹션 구분 (thick/double 활용)
DIVIDER(s, y=v.next(0.05), style="thick", color=C["primary"])

# ③ OVERLAY — 이미지 위 반투명 레이어 + 텍스트
IMG_PH(s, ML, v.peek(), Inches(CW_IN), Inches(3.5), label="[배경 이미지]")
OVERLAY(s, ML, v.peek(), Inches(CW_IN), Inches(3.5), C["dark"], alpha=40000)
T(s, "이미지 위 텍스트", ML, v.next(3.5), Inches(CW_IN), Inches(3.5),
  sz=36, c=C["white"], bold=True, align="center")

# ④ gradient_shape — 카드/도형에 그라디언트 채우기
sh = RBOX(s, x, y, w, h, C["primary"], radius=0.08)
gradient_shape(sh, C["primary"], C["secondary"], angle=135.0)
add_shadow(sh, preset="elevated")

# ⑤ ORBOX — 아웃라인 뱃지/태그
ORBOX(s, x, y, Inches(2), Inches(0.4), text="Phase 1",
      sz=10, lc=C["primary"], tc=C["primary"], radius=0.15)

최소 사용 기준 (50장 기준):

ACCENT_LINE:    5회+ (HIGHLIGHT 대체)
DIVIDER:        3회+ (슬라이드 내 구분)
OVERLAY:        2회+ (이미지 슬라이드)
gradient_shape: 3회+ (고급 카드)
ORBOX:          3회+ (태그/뱃지)

13-5. 컬러 활용 (색상 깊이)

C 딕셔너리의 파생색과 darken/lighten 함수를 활용합니다:

# ① 카드 배경에 파생색 활용 (흰색 카드 대신)
RBOX(s, x, y, w, h, C["primary_light"], radius=0.08)  # 연한 프라이머리 배경
RBOX(s, x, y, w, h, C["teal_light"], radius=0.08)     # 연한 틸 배경
RBOX(s, x, y, w, h, C["card_bg"], radius=0.08)        # 전용 카드 배경

# ② darken/lighten으로 미세 색상 조정
header_color = darken(C["primary"], 0.1)   # 약간 어두운 프라이머리
accent_bg = lighten(C["accent"], 0.7)       # 매우 밝은 액센트 (배경용)
soft_teal = lighten(C["teal"], 0.6)         # 부드러운 틸 (배경용)

# ③ COLS/GRID 컬러 파라미터 활용
COLS(s, items, colors=[C["primary"], C["secondary"], C["teal"]], shadow=True)
GRID(s, items, colors=[C["primary"], C["teal"], C["secondary"], C["accent"]])

색상 대비 필수 확인:

다크 배경 위 텍스트 → C["white"] 또는 lighten(C["secondary"], 0.3)
다크 배경 위 카드 → C["primary"], C["secondary"] (dark 아닌 색상)
light 배경 위 카드 → C["white"] + shadow (배경과 분리)

13-6. Phase 3 컨셉 슬라이드 필수 패턴

Phase 3에는 아래 3종 슬라이드를 반드시 포함합니다:

Concept Reveal (컨셉 공개)

s = new_slide(prs); bg(s, C["dark"]); TB(s, "Action Title", pg=pg, dark=True)
v = VStack()
# 대형 컨셉 키워드 (Light 웨이트로 세련됨)
T(s, "CONNECT\n& GROW", ML, v.next(2.5), Inches(CW_IN), Inches(2.5),
  sz=60, fn=FONT_W["light"], c=C["white"], align="center")
# 하단 4단계 순환 카드
COLS(s, [
    {"title": "Discover", "body": ["시장 인사이트", "타겟 분석"]},
    {"title": "Design", "body": ["전략 설계", "채널 기획"]},
    {"title": "Deliver", "body": ["콘텐츠 제작", "캠페인 실행"]},
    {"title": "Develop", "body": ["성과 분석", "최적화 반복"]},
], y=v.next(2.2), colors=[C["primary"], C["secondary"], C["teal"], C["accent"]],
   shadow=True)

Strategy Synergy Map (전략 시너지)

s = new_slide(prs)
gradient_bg(s, C["white"], lighten(C["primary"], 0.85), angle=180.0)
TB(s, "3대 전략이 만드는 시너지 효과", pg=pg)
v = VStack()
# Win Theme 3개를 FLOW로 연결
FLOW(s, [
    {"step": "W1", "title": WIN["key1"], "desc": "설명 텍스트"},
    {"step": "W2", "title": WIN["key2"], "desc": "설명 텍스트"},
    {"step": "W3", "title": WIN["key3"], "desc": "설명 텍스트"},
], y=v.next(2.0))
# 시너지 메시지
HIGHLIGHT(s, "3대 전략의 통합이 [프로젝트 목표] 달성의 핵심",
          y=v.next(0.8), grad=True)

Big Idea Reveal (빅 아이디어)

s = new_slide(prs); bg(s, C["dark"]); TB(s, "Action Title", pg=pg, dark=True)
v = VStack()
# 중앙 컨셉 메시지
HIGHLIGHT(s, "핵심 컨셉 한 줄 메시지", y=v.next(1.0), grad=True)
# 3-Step 실행 카드
COLS(s, [
    {"title": "Step 1: 인지", "body": ["인지도 확보", "매체 최적화"]},
    {"title": "Step 2: 전환", "body": ["퍼널 설계", "CTA 최적화"]},
    {"title": "Step 3: 충성", "body": ["재구매 유도", "커뮤니티 구축"]},
], y=v.next(2.5), shadow=True,
   colors=[C["primary"], C["secondary"], C["teal"]])
# Bridge
T(s, "이 전략을 구현할 구체적 실행 계획을 소개합니다",
  ML, v.next(0.5), Inches(CW_IN), Inches(0.5),
  sz=14, fn=FONT_W["medium"], c=C["lgray"], align="center")

13-7. 디자인 완성도 체크리스트

코드 작성 완료 후 아래 항목을 자체 검증합니다:

[필수] 배경 다양성
  □ light 배경 사용 8장+
  □ light gradient / tint 배경 사용 5장+
  □ white 5장 연속 없음

[필수] 그림자 깊이
  □ add_shadow(preset="subtle")  5회+
  □ add_shadow(preset="elevated") 3회+ (다크 배경)
  □ 다크 배경 위 카드에 elevated 그림자 적용됨

[필수] 타이포 계층
  □ FONT_W["light"]    3회+ 사용
  □ FONT_W["medium"]   5회+ 사용
  □ FONT_W["semibold"] 5회+ 사용

[필수] 시각 악센트
  □ ACCENT_LINE  5회+ 사용
  □ DIVIDER      3회+ 사용
  □ gradient_shape 또는 OVERLAY 2회+ 사용
  □ ORBOX(뱃지/태그) 3회+ 사용

[필수] 컬러 활용
  □ C["primary_light"], C["teal_light"] 등 파생색 사용
  □ darken()/lighten() 활용 3회+
  □ COLS/GRID에 colors= 파라미터 활용 5회+

[필수] Phase 3 컨셉
  □ Concept Reveal (다크+60pt+4카드)
  □ Strategy Synergy Map (FLOW+HIGHLIGHT)
  □ Big Idea Reveal (다크+3-Step)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

analyst

無料

분석팀 에이전트. 입찰 제안서(RFP) 또는 마케팅 제안서(마케팅 플랜) 분석. PDF 분석 또는 사용자 브리핑 수집. 프로젝트 메타데이터, Pain Point, 평가기준 배점, 프로젝트 유형을 추출합니다. 트리거: RFP 분석, 제안요청서 분석, PDF 분석, Pain Point, 평가기준, 마케팅 분석, 마케팅 플랜

日本語の概要は準備中です。原文の説明を表示しています。

steveaimkt/proposal-agent-github312026年8月8日 更新

캠페인 브레인스토밍 에이전트. 3인 전문가 에이전트(전략가/크리에이터/데이터분석가)가 개별 브레인스토밍 후 크로스리뷰 토론으로 최적안을 도출합니다. campaign_brief.md 생성 → 제안서 파이프라인(Step 3)으로 연계. 트리거: 브레인스토밍, 캠페인 기획, 아이디어, brainstorm, 캠페인 전략, 크리에이티브

日本語の概要は準備中です。原文の説明を表示しています。

steveaimkt/proposal-agent-github312026年8月8日 更新

convert

無料

Converter 에이전트 v7.0. 승인된 proposal_script.md + visualization_strategy.md를 Gemini 슬라이드 디자인 요청용 proposal_slides.json (v2.0)으로 변환합니다. SPARK-6 구조, S-E-P, 40종 레이아웃, design_intent, gemini_instructions를 포함합니다. 트리거: JSON 변환, convert, proposal_slides.json, Gemini 디자인, 스크립트 변환, 제미나이

日本語の概要は準備中です。原文の説明を表示しています。

steveaimkt/proposal-agent-github312026年8月8日 更新

디자인 레퍼런스 분석 에이전트. 디자인 레퍼런스/ 폴더의 PDF, JPG, PPTX 파일을 분석하여 컬러 팔레트, 레이아웃 패턴, 도식 스타일, 분위기 리듬을 추출합니다. 출력: design_analysis.md. 트리거: 디자인 분석, 레퍼런스 분석, design analysis, 디자인 레퍼런스

日本語の概要は準備中です。原文の説明を表示しています。

steveaimkt/proposal-agent-github312026年8月8日 更新

generate

無料

PM (총괄) 오케스트레이터 v9.0. 제안서 팀을 이끌어 8-Step 파이프라인을 실행합니다. 입찰 제안서(RFP) + 마케팅 제안서 + 캠페인 브레인스토밍 지원. Step 0 출력 형식 분기 + 4개 병렬 리서치 + 7개 전문 QA. 트리거: 제안서 생성, 제안서 제작, /p, /start, /pf, generate, 스크립트 작성

日本語の概要は準備中です。原文の説明を表示しています。

steveaimkt/proposal-agent-github312026年8月8日 更新

매핑 에디터. proposal_script.md와 generate_제안서.py 간의 매핑을 검증하고 수정합니다. 스크립트의 레이아웃 지시가 코드에 올바르게 반영되었는지 확인. 트리거: /mapping-editor, 매핑 검증, 스크립트-코드 매핑

日本語の概要は準備中です。原文の説明を表示しています。

steveaimkt/proposal-agent-github312026年8月8日 更新

steveaimkt のスキルをすべて見る

このスキルの問題を報告する