style(project): 아사나 느낌 색상/카드 디자인 + 사이드바·리스트·타임라인 개편

색상/폰트/카드/사이드바/리스트/타임라인이 아사나와 다르다는 피드백 반영.

- 보라 포인트 컬러(--pj-accent) 도입 — 기본 검정 버튼/활성 탭을 이걸로
  교체(erp.css 등 다른 모듈은 안 건드림, .pj- 클래스 범위 안에서만).
- 카드(.pj-card, .pj-project-card)·보드 컬럼 라운드/그림자 키워 아사나
  카드 느낌으로.
- 왼쪽 사이드바 — 프로젝트마다 업무를 중첩해서 보여주던 트리를 걷어내고
  아사나처럼 "프로젝트 이름 목록만"으로 단순화. 폴더 아이콘 대신 프로젝트
  색 + 첫 글자 아바타.
- 리스트 뷰("이 프로젝트" 스코프) — 세션이 컬럼이 아니라 아사나처럼 그룹
  구분선이 되도록 개편(세션별로 묶어서 보여주고 접기/펼치기, 개수 표시).
  "전체 프로젝트" 스코프는 세션이 프로젝트마다 달라 그룹화 의미가 없으므로
  기존 프로젝트/세션 컬럼 있는 평범한 정렬 테이블 유지.
- 타임라인 — "이 프로젝트" 스코프에서는 프로젝트가 아니라 세션별로 행(스윔
  레인)을 나눔(아사나 타임라인=섹션 단위). "전체 프로젝트"는 기존처럼
  프로젝트별.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 20:05:34 +09:00
parent 3ca0b1de87
commit 9c07aefb29
5 changed files with 222 additions and 195 deletions
@@ -1,7 +1,7 @@
{% extends "erp_base.html" %}
{% block head_extra %}
<link rel="stylesheet" href="/static/project.css?v=20260916a" />
<link rel="stylesheet" href="/static/project.css?v=20260916b" />
<link rel="stylesheet" href="/static/vendor/material-symbols/material-symbols.css" />
{% endblock %}
@@ -45,5 +45,5 @@
{% endif %}
</div>
<script src="/static/project.js?v=20260916c" defer></script>
<script src="/static/project.js?v=20260916d" defer></script>
{% endblock %}
@@ -1,7 +1,7 @@
{% extends "erp_base.html" %}
{% block head_extra %}
<link rel="stylesheet" href="/static/project.css?v=20260916a" />
<link rel="stylesheet" href="/static/project.css?v=20260916b" />
<link rel="stylesheet" href="/static/vendor/material-symbols/material-symbols.css" />
{% endblock %}
@@ -349,5 +349,5 @@
<script>
window.PJ_COLORS = {{ ["#4573d2","#37a3a3","#62a420","#e8a33d","#e8384f","#aa62e3","#f06a6a","#5a6772"] | tojson }};
</script>
<script src="/static/project.js?v=20260916c" defer></script>
<script src="/static/project.js?v=20260916d" defer></script>
{% endblock %}
@@ -1,7 +1,7 @@
{% extends "erp_base.html" %}
{% block head_extra %}
<link rel="stylesheet" href="/static/project.css?v=20260916a" />
<link rel="stylesheet" href="/static/project.css?v=20260916b" />
<!-- 구글 머티리얼 심볼(담당자 아이콘 등) — self-host -->
<link rel="stylesheet" href="/static/vendor/material-symbols/material-symbols.css" />
<!-- 타임라인 vis-timeline — self-host -->
@@ -41,15 +41,8 @@
{% for p in nav_projects %}
<li class="pj-tree-li" data-id="{{ p.id }}">
<div class="pj-tree-row {% if p.id == project.id %}is-active{% endif %}">
{% if p.tasks %}
<button type="button" class="pj-tree-caret" aria-expanded="false" title="펼치기/접기">
<span class="material-symbols-outlined">chevron_right</span>
</button>
{% else %}
<span class="pj-tree-caret-spacer"></span>
{% endif %}
<a class="pj-tree-link" href="/project/p/{{ p.id }}">
<span class="pj-tree-icon material-symbols-outlined" style="color: {{ p.color }}">folder</span>
<span class="pj-tree-avatar" style="background: {{ p.color }}">{{ p.name[0] | upper }}</span>
<span class="pj-tree-name">{{ p.name }}</span>
</a>
{% if is_admin %}
@@ -58,25 +51,6 @@
</span>
{% endif %}
</div>
{% if p.tasks %}
<div class="pj-tree-children" hidden>
<ul class="pj-tree">
{% for t in p.tasks %}
<li class="pj-tree-li pj-tree-task">
<div class="pj-tree-row" style="--pj-indent: 1">
<span class="pj-tree-caret-spacer"></span>
<a class="pj-tree-link pj-tree-tasklink"
href="/project/p/{{ p.id }}?task={{ t.id }}"
data-project="{{ p.id }}" data-task="{{ t.id }}">
<span class="pj-tree-icon material-symbols-outlined" style="color: {{ t.color }}">{% if t.completed %}task_alt{% else %}radio_button_unchecked{% endif %}</span>
<span class="pj-tree-name {% if t.completed %}pj-tree-done{% endif %}">{{ t.title }}</span>
</a>
</div>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
</li>
{% endfor %}
</ul>
@@ -331,5 +305,5 @@
</script>
<script src="/static/vendor/vis-timeline/vis-timeline-graph2d.min.js"></script>
<script src="/static/project.js?v=20260916c" defer></script>
<script src="/static/project.js?v=20260916d" defer></script>
{% endblock %}