プロジェクト

全般

プロフィール

機能 #30 » line-redmine-final.html

新テーマのホーム - Redmine Admin, 2025-05-11 04:59

 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LINE風 Redmineテーマ</title>
<style>
/* ベースとなる変数 */
:root {
--line-primary: #06C755; /* LINEの特徴的なグリーン */
--line-secondary: #1E1E1E; /* ほぼ黒(テキスト用) */
--line-background: #F1F1F4; /* 背景色 */
--line-light-gray: #E8EAED; /* 明るい背景色 */
--line-mid-gray: #D8D8DD; /* 境界線・区切り線 */
--line-dark-gray: #8E8E93; /* セカンダリテキスト */
--line-white: #FFFFFF; /* 白背景 */
--line-sidebar-bg: #1E1E1E; /* サイドバー背景色(黒) */
--line-active-item: #E1F7E8; /* アクティブ項目 */
--line-border: #DCDCE0; /* ボーダー色 */
--border-radius-small: 6px;
--border-radius-medium: 10px;
--border-radius-large: 14px;
--shadow-small: 0 1px 3px rgba(0,0,0,0.1);
--shadow-medium: 0 4px 6px rgba(0,0,0,0.08);
--transition-speed: 0.3s;
}
/* リセット */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Sans JP', sans-serif;
background-color: var(--line-background);
color: var(--line-secondary);
line-height: 1.5;
font-size: 14px;
height: 100vh;
display: flex;
flex-direction: column;
}
/* レイアウト */
.layout {
display: flex;
height: calc(100vh - 56px);
overflow: hidden;
}
/* ヘッダー */
header {
background-color: var(--line-primary);
height: 56px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 16px;
border-bottom: 1px solid var(--line-border);
box-shadow: var(--shadow-small);
color: white;
}
.logo {
display: flex;
align-items: center;
font-weight: 600;
font-size: 16px;
color: white;
}
.logo img {
width: 28px;
height: 28px;
margin-right: 10px;
}
.header-right {
display: flex;
align-items: center;
gap: 15px;
}
.search-box {
position: relative;
}
.search-box input {
background-color: rgba(255, 255, 255, 0.2);
border: none;
border-radius: var(--border-radius-medium);
padding: 10px 12px 10px 36px;
width: 220px;
font-size: 14px;
color: white;
}
.search-box input::placeholder {
color: rgba(255, 255, 255, 0.7);
}
.search-box::before {
content: "⚲";
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: white;
font-size: 16px;
}
.user-avatar {
width: 34px;
height: 34px;
border-radius: 50%;
background-color: white;
display: flex;
align-items: center;
justify-content: center;
color: var(--line-primary);
font-weight: bold;
box-shadow: var(--shadow-small);
cursor: pointer;
}
/* サイドバー */
.sidebar {
display: flex;
height: 100%;
}
/* アイコンサイドバー(黒背景) */
.icon-sidebar {
width: 56px;
background-color: var(--line-sidebar-bg);
height: 100%;
padding: 10px 0;
display: flex;
flex-direction: column;
overflow-y: auto;
z-index: 10;
}
.icon-item {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
margin: 4px 8px;
border-radius: var(--border-radius-small);
color: #A0A0A0;
cursor: pointer;
transition: all var(--transition-speed) ease;
}
.icon-item.active {
background-color: var(--line-primary);
color: white;
}
.icon-item:hover {
background-color: #333333;
color: white;
}
.icon-item svg {
width: 20px;
height: 20px;
fill: currentColor;
}
.sidebar-divider {
height: 1px;
background-color: #333333;
margin: 8px 8px;
}
/* 拡張サイドバー(ドロワー - 白背景) */
.drawer-sidebar {
width: 0;
background-color: var(--line-white);
height: 100%;
border-right: 1px solid var(--line-border);
overflow: hidden;
transition: width var(--transition-speed) ease;
box-shadow: var(--shadow-medium);
position: relative;
z-index: 9;
}
.drawer-sidebar.active {
width: 250px;
}
.drawer-content {
width: 250px;
padding: 15px 0;
overflow-y: auto;
height: 100%;
}
/* ドロワーヘッダー(折りたたみボタン付き) */
.drawer-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 15px;
border-bottom: 1px solid var(--line-border);
margin-bottom: 10px;
}
.drawer-title {
font-weight: 600;
color: var(--line-dark-gray);
}
.drawer-collapse {
width: 26px;
height: 26px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
color: var(--line-dark-gray);
cursor: pointer;
background-color: var(--line-light-gray);
transition: all var(--transition-speed) ease;
}
.drawer-collapse:hover {
background-color: var(--line-mid-gray);
color: var(--line-secondary);
}
.drawer-section {
margin-bottom: 20px;
}
.section-title {
padding: 5px 15px;
font-size: 12px;
font-weight: 600;
color: var(--line-dark-gray);
}
.drawer-item {
padding: 10px 15px;
margin: 2px 8px;
display: flex;
align-items: center;
cursor: pointer;
border-radius: var(--border-radius-small);
transition: all var(--transition-speed) ease;
}
.drawer-item.active {
background-color: var(--line-active-item);
color: var(--line-primary);
font-weight: 500;
}
.drawer-item:hover {
background-color: var(--line-light-gray);
transform: translateY(-1px);
}
.drawer-item i {
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
margin-right: 10px;
color: var(--line-primary);
}
.drawer-item.active i {
color: var(--line-primary);
}
/* メインコンテンツ */
.main-content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
.tab-bar {
background-color: var(--line-white);
height: 48px;
padding: 0 10px;
display: flex;
align-items: center;
border-bottom: 1px solid var(--line-border);
overflow-x: auto;
box-shadow: var(--shadow-small);
}
.tab {
display: flex;
align-items: center;
height: 36px;
padding: 0 15px;
margin-right: 8px;
background-color: var(--line-light-gray);
border-radius: var(--border-radius-medium);
cursor: pointer;
border: 1px solid var(--line-mid-gray);
min-width: 120px;
max-width: 200px;
transition: all var(--transition-speed) ease;
}
.tab.active {
background-color: var(--line-active-item);
color: var(--line-primary);
font-weight: 500;
}
.tab:hover {
transform: translateY(-1px);
box-shadow: var(--shadow-small);
}
.tab i {
margin-right: 8px;
width: 18px;
height: 18px;
display: flex;
align-items: center;
justify-content: center;
color: var(--line-primary);
}
.tab-name {
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tab-close {
margin-left: 8px;
width: 16px;
height: 16px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
color: var(--line-dark-gray);
font-size: 14px;
}
.tab-close:hover {
background-color: rgba(0, 0, 0, 0.1);
}
/* コンテンツエリア */
.content-area {
flex: 1;
padding: 20px;
overflow-y: auto;
}
.content-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.content-title {
font-size: 24px;
font-weight: 600;
}
.button {
background-color: var(--line-primary);
color: white;
border: none;
border-radius: var(--border-radius-medium);
padding: 10px 16px;
font-weight: 500;
cursor: pointer;
display: flex;
align-items: center;
transition: all var(--transition-speed) ease;
}
.button:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-medium);
}
.button i {
margin-right: 8px;
display: flex;
align-items: center;
justify-content: center;
}
/* ウェルカムエリア */
.welcome-card {
background-color: var(--line-white);
border-radius: var(--border-radius-large);
overflow: hidden;
margin-bottom: 20px;
box-shadow: var(--shadow-medium);
border: 1px solid var(--line-mid-gray);
}
.welcome-header {
padding: 15px 20px;
background-color: var(--line-active-item);
display: flex;
align-items: center;
border-bottom: 1px solid var(--line-mid-gray);
}
.welcome-title {
font-weight: 600;
font-size: 18px;
display: flex;
align-items: center;
}
.welcome-title i {
margin-right: 10px;
color: var(--line-primary);
display: flex;
align-items: center;
justify-content: center;
}
.welcome-body {
padding: 20px;
}
/* プロジェクト一覧 */
.project-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
}
.project-card {
background-color: var(--line-white);
border-radius: var(--border-radius-medium);
overflow: hidden;
box-shadow: var(--shadow-small);
border: 1px solid var(--line-mid-gray);
transition: all var(--transition-speed) ease;
}
.project-card:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-medium);
}
.project-header {
padding: 12px 15px;
background-color: var(--line-active-item);
border-bottom: 1px solid var(--line-mid-gray);
}
.project-title {
font-weight: 600;
display: flex;
align-items: center;
}
.project-title i {
margin-right: 8px;
color: var(--line-primary);
display: flex;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
}
.project-body {
padding: 15px;
}
.project-desc {
margin-bottom: 15px;
color: var(--line-dark-gray);
font-size: 13px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.project-actions {
display: flex;
justify-content: space-between;
align-items: center;
}
.project-stats {
display: flex;
gap: 10px;
color: var(--line-dark-gray);
font-size: 12px;
}
.project-stat {
display: flex;
align-items: center;
}
.project-stat i {
margin-right: 4px;
display: flex;
align-items: center;
justify-content: center;
}
.button-outline {
background-color: var(--line-white);
color: var(--line-secondary);
border: 1px solid var(--line-mid-gray);
border-radius: var(--border-radius-medium);
padding: 6px 12px;
font-size: 13px;
cursor: pointer;
transition: all var(--transition-speed) ease;
}
.button-outline:hover {
background-color: var(--line-light-gray);
transform: translateY(-1px);
}
/* フッター */
.footer-bar {
background-color: var(--line-white);
height: 36px;
display: flex;
align-items: center;
border-top: 1px solid var(--line-border);
padding: 0 10px;
color: var(--line-dark-gray);
font-size: 12px;
}
/* スクロールバーカスタマイズ */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--line-light-gray);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: #BEBEC2;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--line-dark-gray);
}
/* SVGアイコン */
.icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
.icon svg {
width: 100%;
height: 100%;
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.drawer-sidebar.active {
position: absolute;
top: 56px;
left: 56px;
bottom: 0;
z-index: 100;
}
.project-list {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<!-- ヘッダー -->
<header>
<div class="logo">
<img src="/api/placeholder/28/28" alt="LINE Redmine">
<span>LINE Redmine</span>
</div>
<div class="header-right">
<div class="search-box">
<input type="text" placeholder="検索...">
</div>
<div class="user-avatar">U</div>
</div>
</header>
<!-- メインレイアウト -->
<div class="layout">
<!-- サイドバー -->
<div class="sidebar">
<!-- アイコンサイドバー(黒背景) -->
<div class="icon-sidebar">
<!-- ホーム -->
<div class="icon-item active" data-section="home">
<svg viewBox="0 0 24 24">
<path d="M10,20V14H14V20H19V12H22L12,3L2,12H5V20H10Z" />
</svg>
</div>
<!-- マイページ -->
<div class="icon-item" data-section="mypage">
<svg viewBox="0 0 24 24">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
</svg>
</div>
<!-- プロジェクト -->
<div class="icon-item" data-section="projects">
<svg viewBox="0 0 24 24">
<path d="M3,3H21V7H3V3M4,8H20V21H4V8M9.5,11A0.5,0.5 0 0,0 9,11.5V13H15V11.5A0.5,0.5 0 0,0 14.5,11H9.5Z" />
</svg>
</div>
<!-- チケット -->
<div class="icon-item" data-section="tickets">
<svg viewBox="0 0 24 24">
<path d="M3,5H9V11H3V5M5,7V9H7V7H5M11,7H21V9H11V7M11,15H21V17H11V15M5,13V15H7V13H5M3,13H9V19H3V13Z" />
</svg>
</div>
<div class="sidebar-divider"></div>
<!-- 管理 -->
<div class="icon-item" data-section="admin">
<svg viewBox="0 0 24 24">
<path d="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" />
</svg>
</div>
<div class="sidebar-divider"></div>
<!-- ユーザー設定 -->
<div class="icon-item" data-section="user">
<svg viewBox="0 0 24 24">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,6A2,2 0 0,0 10,8A2,2 0 0,0 12,10A2,2 0 0,0 14,8A2,2 0 0,0 12,6M12,13C14.67,13 20,14.33 20,17V20H4V17C4,14.33 9.33,13 12,13M12,14.9C9.03,14.9 5.9,16.36 5.9,17V18.1H18.1V17C18.1,16.36 14.97,14.9 12,14.9Z" />
</svg>
</div>
<!-- 設定 -->
<div class="icon-item" data-section="settings">
<svg viewBox="0 0 24 24">
<path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z" />
</svg>
</div>
<!-- ログアウト -->
<div class="icon-item" data-section="logout">
<svg viewBox="0 0 24 24">
<path d="M16,17V14H9V10H16V7L21,12L16,17M14,2A2,2 0 0,1 16,4V6H14V4H5V20H14V18H16V20A2,2 0 0,1 14,22H5A2,2 0 0,1 3,20V4A2,2 0 0,1 5,2H14Z" />
</svg>
</div>
<!-- ヘルプ -->
<div class="icon-item" data-section="help">
<svg viewBox="0 0 24 24">
<path d="M11,18H13V16H11V18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6Z" />
</svg>
</div>
</div>
<!-- ドロワーサイドバー(白背景) -->
<div class="drawer-sidebar" id="drawerSidebar">
<div class="drawer-content">
<!-- ドロワーヘッダー(折りたたみボタン付き) -->
<div class="drawer-header">
<div class="drawer-title">メニュー</div>
<div class="drawer-collapse" id="drawerCollapse"><<</div>
</div>
<!-- ホームセクション -->
<div class="drawer-section" id="section-home">
<div class="section-title">ホーム</div>
<div class="drawer-item active">
<i>
<svg viewBox="0 0 24 24">
<path d="M10,20V14H14V20H19V12H22L12,3L2,12H5V20H10Z" />
</svg>
</i>
ダッシュボード
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M13,3V9H21V3M13,21H21V11H13M3,21H11V15H3M3,13H11V3H3V13Z" />
</svg>
</i>
アクティビティ
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M20,2H4A2,2 0 0,0 2,4V22L6,18H20A2,2 0 0,0 22,16V4A2,2 0 0,0 20,2M6,9H18V11H6M14,14H6V12H14M18,8H6V6H18" />
</svg>
</i>
お知らせ
</div>
</div>
<!-- マイページセクション -->
<div class="drawer-section" id="section-mypage" style="display: none;">
<div class="section-title">マイページ</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z" />
</svg>
</i>
マイタスク
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z" />
</svg>
</i>
ウォッチ中
</div>
</div>
<!-- プロジェクトセクション -->
<div class="drawer-section" id="section-projects" style="display: none;">
<div class="section-title">プロジェクト</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M3,3H21V7H3V3M4,8H20V21H4V8M9.5,11A0.5,0.5 0 0,0 9,11.5V13H15V11.5A0.5,0.5 0 0,0 14.5,11H9.5Z" />
</svg>
</i>
すべて表示
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" />
</svg>
</i>
新規作成
</div>
<div class="section-title">最近のプロジェクト</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M20,19H4C2.89,19 2,18.1 2,17V5C2,3.89 2.89,3 4,3H20A2,2 0 0,1 22,5V17A2,2 0 0,1 20,19Z" />
</svg>
</i>
デザインシステム
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M17.9,17.39C17.64,16.59 16.89,16 16,16H15V13A1,1 0 0,0 14,12H8V10H10A1,1 0 0,0 11,9V7H13A2,2 0 0,0 15,5V4.59C17.93,5.77 20,8.64 20,12C20,14.08 19.2,15.97 17.9,17.39M11,19.93C7.05,19.44 4,16.08 4,12C4,11.38 4.08,10.78 4.21,10.21L9,15V16A2,2 0 0,0 11,18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</svg>
</i>
モバイルアプリ
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M17,13H13V17H11V13H7V11H11V7H13V11H17M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</svg>
</i>
API開発
</div>
</div>
<!-- チケットセクション -->
<div class="drawer-section" id="section-tickets" style="display: none;">
<div class="section-title">チケット</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M3,5H9V11H3V5M5,7V9H7V7H5M11,7H21V9H11V7M11,15H21V17H11V15M5,13V15H7V13H5M3,13H9V19H3V13Z" />
</svg>
</i>
すべてのチケット
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
</svg>
</i>
担当チケット
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z" />
</svg>
</i>
ウォッチ中
</div>
</div>
<!-- 管理セクション -->
<div class="drawer-section" id="section-admin" style="display: none;">
<div class="section-title">管理</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M3,3H21V7H3V3M4,8H20V21H4V8M9.5,11A0.5,0.5 0 0,0 9,11.5V13H15V11.5A0.5,0.5 0 0,0 14.5,11H9.5Z" />
</svg>
</i>
プロジェクト
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
</svg>
</i>
ユーザー
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z" />
</svg>
</i>
グループ
</div>
</div>
<!-- ユーザー情報セクション -->
<div class="drawer-section" id="section-user" style="display: none;">
<div class="section-title">ユーザー情報</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
</svg>
</i>
ログイン中: admin
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" />
</svg>
</i>
個人設定
</div>
</div>
<!-- ログアウトセクション -->
<div class="drawer-section" id="section-logout" style="display: none;">
<div class="section-title">アカウント</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M16,17V14H9V10H16V7L21,12L16,17M14,2A2,2 0 0,1 16,4V6H14V4H5V20H14V18H16V20A2,2 0 0,1 14,22H5A2,2 0 0,1 3,20V4A2,2 0 0,1 5,2H14Z" />
</svg>
</i>
ログアウト
</div>
</div>
<!-- 設定セクション -->
<div class="drawer-section" id="section-settings" style="display: none;">
<div class="section-title">設定</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" />
</svg>
</i>
一般設定
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M17.9,17.39C17.64,16.59 16.89,16 16,16H15V13A1,1 0 0,0 14,12H8V10H10A1,1 0 0,0 11,9V7H13A2,2 0 0,0 15,5V4.59C17.93,5.77 20,8.64 20,12C20,14.08 19.2,15.97 17.9,17.39M11,19.93C7.05,19.44 4,16.08 4,12C4,11.38 4.08,10.78 4.21,10.21L9,15V16A2,2 0 0,0 11,18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</svg>
</i>
テーマ設定
</div>
</div>
<!-- ヘルプセクション -->
<div class="drawer-section" id="section-help" style="display: none;">
<div class="section-title">ヘルプ</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M21,6V8H3V6H21M3,18H12V16H3V18M3,13H21V11H3V13Z" />
</svg>
</i>
ガイド
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M7,7H5A2,2 0 0,0 3,9V17H5V13H7V17H9V9A2,2 0 0,0 7,7M7,11H5V9H7M14,7H10V17H12V13H14A2,2 0 0,0 16,11V9A2,2 0 0,0 14,7M14,11H12V9H14M20,7V17H22V7M20,11H18V9H20V11Z" />
</svg>
</i>
API
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z" />
</svg>
</i>
リリースノート
</div>
<div class="drawer-item">
<i>
<svg viewBox="0 0 24 24">
<path d="M11,18H13V16H11V18M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6Z" />
</svg>
</i>
サポート
</div>
</div>
</div>
</div>
</div>
<!-- メインコンテンツ -->
<div class="main-content">
<!-- タブバー -->
<div class="tab-bar">
<div class="tab active">
<i>H</i>
<span class="tab-name">ダッシュボード</span>
<div class="tab-close">×</div>
</div>
<div class="tab">
<i>P</i>
<span class="tab-name">プロジェクト</span>
<div class="tab-close">×</div>
</div>
<div class="tab">
<i>T</i>
<span class="tab-name">チケット #123: ボタンスタイル</span>
<div class="tab-close">×</div>
</div>
</div>
<!-- コンテンツエリア -->
<div class="content-area">
<div class="content-header">
<h1 class="content-title">ダッシュボード</h1>
<button class="button">
<i>+</i> 新規プロジェクト
</button>
</div>
<!-- ウェルカムカード -->
<div class="welcome-card">
<div class="welcome-header">
<div class="welcome-title">
<i>/</i> Redmineへようこそ
</div>
</div>
<div class="welcome-body">
<p>Redmineは、オープンソースの柔軟なプロジェクト管理ソフトウェアです。このLINE風テーマを使って、より使いやすく、より美しい環境でプロジェクト管理を行いましょう。</p>
<p>注意: このメッセージは「ウェルカムテキスト」設定で変更できます(管理 &gt; 設定 &gt; 全般)。</p>
</div>
</div>
<!-- プロジェクト一覧 -->
<div class="content-header">
<h2>最近のプロジェクト</h2>
<button class="button">
<i>A</i> すべて表示
</button>
</div>
<div class="project-list">
<div class="project-card">
<div class="project-header">
<div class="project-title">
<i>D</i> LINEデザインシステム
</div>
</div>
<div class="project-body">
<div class="project-desc">
LINEのデザインシステムを管理するプロジェクト。コンポーネント、スタイルガイド、アイコンなどを含みます。
</div>
<div class="project-actions">
<div class="project-stats">
<div class="project-stat">
<i>T</i> 24
</div>
<div class="project-stat">
<i>P</i> 60%
</div>
</div>
<button class="button-outline">詳細</button>
</div>
</div>
</div>
<div class="project-card">
<div class="project-header">
<div class="project-title">
<i>M</i> モバイルアプリ
</div>
</div>
<div class="project-body">
<div class="project-desc">
モバイルアプリケーション開発のためのプロジェクト。iOSおよびAndroidプラットフォーム向け機能を管理します。
</div>
<div class="project-actions">
<div class="project-stats">
<div class="project-stat">
<i>T</i> 42
</div>
<div class="project-stat">
<i>P</i> 75%
</div>
</div>
<button class="button-outline">詳細</button>
</div>
</div>
</div>
<div class="project-card">
<div class="project-header">
<div class="project-title">
<i>A</i> 認証システム
</div>
</div>
<div class="project-body">
<div class="project-desc">
ユーザー認証システムとシングルサインオンのためのプロジェクト。セキュリティと使いやすさの向上が目的です。
</div>
<div class="project-actions">
<div class="project-stats">
<div class="project-stat">
<i>T</i> 18
</div>
<div class="project-stat">
<i>P</i> 45%
</div>
</div>
<button class="button-outline">詳細</button>
</div>
</div>
</div>
<div class="project-card">
<div class="project-header">
<div class="project-title">
<i>A</i> API開発
</div>
</div>
<div class="project-body">
<div class="project-desc">
RESTful APIの開発とドキュメント作成のためのプロジェクト。外部サービスとの連携をサポートします。
</div>
<div class="project-actions">
<div class="project-stats">
<div class="project-stat">
<i>T</i> 31
</div>
<div class="project-stat">
<i>P</i> 80%
</div>
</div>
<button class="button-outline">詳細</button>
</div>
</div>
</div>
</div>
</div>
<!-- フッターバー -->
<div class="footer-bar">
Powered by Redmine © 2006-2025 Jean-Philippe Lang | LINE Redmineテーマ
</div>
</div>
</div>
<script>
// ドロワーの折りたたみボタン
document.getElementById('drawerCollapse').addEventListener('click', function() {
document.getElementById('drawerSidebar').classList.remove('active');
});
// サイドバーのセクション切り替え
document.querySelectorAll('.icon-item').forEach(item => {
item.addEventListener('click', function() {
const section = this.getAttribute('data-section');
// アクティブアイコンを更新
document.querySelectorAll('.icon-item').forEach(icon => {
icon.classList.remove('active');
});
this.classList.add('active');
// ドロワーを表示
document.getElementById('drawerSidebar').classList.add('active');
// セクションを切り替え
document.querySelectorAll('.drawer-section').forEach(sec => {
sec.style.display = 'none';
});
document.getElementById('section-' + section).style.display = 'block';
});
});
// ドロワー項目のアクティブ状態
document.querySelectorAll('.drawer-item').forEach(item => {
item.addEventListener('click', function() {
document.querySelectorAll('.drawer-item').forEach(i => {
i.classList.remove('active');
});
this.classList.add('active');
});
});
// タブのアクティブ状態
document.querySelectorAll('.tab').forEach(tab => {
tab.addEventListener('click', function() {
document.querySelectorAll('.tab').forEach(t => {
t.classList.remove('active');
});
this.classList.add('active');
});
});
// タブの閉じるボタン
document.querySelectorAll('.tab-close').forEach(close => {
close.addEventListener('click', function(e) {
e.stopPropagation();
this.closest('.tab').remove();
// 最初のタブをアクティブにする(閉じた後)
const remainingTabs = document.querySelectorAll('.tab');
if (remainingTabs.length > 0) {
remainingTabs[0].classList.add('active');
}
});
});
// コンテンツエリア外でのクリックでドロワーを閉じる(モバイル対応)
document.querySelector('.content-area').addEventListener('click', function() {
if (window.innerWidth <= 768) {
document.getElementById('drawerSidebar').classList.remove('active');
}
});
// スケーリングアニメーション
document.querySelectorAll('.button, .drawer-item, .tab, .project-card').forEach(element => {
element.addEventListener('mousedown', function() {
this.style.transform = 'scale(0.98)';
});
element.addEventListener('mouseup', function() {
if (this.classList.contains('button')) {
this.style.transform = 'translateY(-2px)';
} else if (this.classList.contains('drawer-item')) {
this.style.transform = 'translateY(-1px)';
} else if (this.classList.contains('tab')) {
this.style.transform = 'translateY(-1px)';
} else if (this.classList.contains('project-card')) {
this.style.transform = 'translateY(-3px)';
}
});
element.addEventListener('mouseleave', function() {
if (this.classList.contains('project-card')) {
this.style.transform = '';
}
});
});
</script>
</body>
</html>
(2-2/2)