Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
530 changes: 288 additions & 242 deletions DESIGN.md

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions app/assignment/components/AssignmentSettingsModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ export function AssignmentSettingsModal({
options={memberOptions}
placeholder="選択..."
disabled={isLoading}
className="!text-sm !py-2"
className="text-sm! py-2!"
/>
<Select
label="メンバー2"
Expand All @@ -205,7 +205,7 @@ export function AssignmentSettingsModal({
options={memberOptions}
placeholder="選択..."
disabled={isLoading}
className="!text-sm !py-2"
className="text-sm! py-2!"
/>
</div>

Expand Down Expand Up @@ -247,7 +247,7 @@ export function AssignmentSettingsModal({
size="sm"
onClick={() => handleDelete(exclusion.id)}
disabled={isLoading}
className="!p-1.5 !min-h-0 !text-red-500 hover:!text-red-700 hover:!bg-red-50"
className="!p-1.5 min-h-0! !text-red-500 hover:!text-red-700 hover:!bg-red-50"
aria-label="削除"
>
<HiTrash className="w-4 h-4" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,10 @@ export const DesktopTableBody: React.FC<DesktopTableBodyProps> = ({
onTouchMove={handleCellTouchMove}
onClick={() => handleCellClick(team.id, label.id)}
className={`
!min-h-0 w-full py-2 md:py-3 px-1 !rounded-lg text-sm md:text-base !font-bold text-center transition-all truncate select-none
min-h-0! w-full py-2 md:py-3 px-1 rounded-lg! text-sm md:text-base !font-bold text-center transition-all truncate select-none
${member && isSelected ? 'shadow-md scale-105' : ''} ${
!member && isSelected ? '!bg-surface !border-spot' : ''
} ${!member && !isSelected ? '!text-ink-muted !bg-ground !border-dashed !border-edge-strong hover:!bg-ground/80 !shadow-none' : ''}
!member && isSelected ? 'bg-surface! !border-spot' : ''
} ${!member && !isSelected ? '!text-ink-muted !bg-ground !border-dashed border-edge-strong! hover:!bg-ground/80 !shadow-none' : ''}
`}
>
{member ? member.name : '未割当'}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export const DesktopTableFooter: React.FC<DesktopTableFooterProps> = ({
if (e.key === 'Enter') handleAddTaskLabel();
}}
placeholder={`${headerLabels.left}を入力`}
className="!p-2 !text-sm !min-h-0 !text-center"
className="!p-2 text-sm! min-h-0! !text-center"
/>
</div>
) : (
Expand All @@ -66,7 +66,7 @@ export const DesktopTableFooter: React.FC<DesktopTableFooterProps> = ({
size="sm"
onClick={handleAddTaskLabel}
disabled={!newLeftLabel.trim()}
className="!rounded-full !px-4 shadow-md active:scale-95"
className="rounded-full! px-4! shadow-md active:scale-95"
>
<MdAdd size={18} />
<span className="font-medium text-sm">担当を追加</span>
Expand All @@ -77,7 +77,7 @@ export const DesktopTableFooter: React.FC<DesktopTableFooterProps> = ({
size="sm"
onClick={onShuffle}
disabled={isShuffleDisabled}
className="!rounded-full !px-4 shadow-md active:scale-95"
className="rounded-full! px-4! shadow-md active:scale-95"
>
<PiShuffleBold className="w-5 h-5" />
<span className="font-medium text-sm">シャッフル</span>
Expand All @@ -93,7 +93,7 @@ export const DesktopTableFooter: React.FC<DesktopTableFooterProps> = ({
if (e.key === 'Enter') handleAddTaskLabel();
}}
placeholder={`${headerLabels.right}を入力`}
className="!min-w-0 !p-2 !text-center !text-sm !min-h-0 w-full"
className="min-w-0! !p-2 !text-center text-sm! min-h-0! w-full"
/>
</div>
) : (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ export const DesktopTableHeader: React.FC<DesktopTableHeaderProps> = ({
if (e.key === 'Escape') setIsAddingTeam(false);
}}
variant="dark"
className="!min-h-[30px] !w-20 !border-none !px-1 !py-1 !text-sm"
className="!min-h-[30px] !w-20 !border-none !px-1 py-1! text-sm!"
/>
<IconButton variant="primary" size="sm" onClick={handleAddTeam} title="班を追加">
<MdAdd size={18} />
Expand Down Expand Up @@ -142,7 +142,7 @@ export const DesktopTableHeader: React.FC<DesktopTableHeaderProps> = ({
variant="outline"
size="sm"
onClick={() => setIsAddingTeam(true)}
className="!min-h-[34px] !text-sm md:!text-base !gap-1 !bg-transparent"
className="!min-h-[34px] text-sm! md:!text-base gap-1! !bg-transparent"
>
<MdAdd className="md:w-5 md:h-5" /> 最初の班を追加
</Button>
Expand Down Expand Up @@ -170,7 +170,7 @@ export const DesktopTableHeader: React.FC<DesktopTableHeaderProps> = ({
onKeyDown={(e) => e.key === 'Enter' && handleUpdateTeam(team.id)}
onBlur={() => handleUpdateTeam(team.id)}
variant="light"
className="!text-sm md:!text-base"
className="text-sm! md:!text-base"
/>
) : (
<div
Expand Down
16 changes: 8 additions & 8 deletions app/assignment/components/assignment-table/MobileListView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,28 +68,28 @@ export const MobileListView: React.FC<MobileListViewProps> = ({
value={editLeftLabel}
onChange={(e) => setEditLeftLabel(e.target.value)}
placeholder={headerLabels.left}
className="!p-2 !text-lg !font-bold !min-h-0"
className="!p-2 !text-lg !font-bold min-h-0!"
/>
<div className="flex gap-2">
<Input
value={editRightLabel}
onChange={(e) => setEditRightLabel(e.target.value)}
placeholder={headerLabels.right}
className="flex-1 !p-2 !text-sm !min-h-0"
className="flex-1 !p-2 text-sm! min-h-0!"
/>
<Button
variant="success"
size="sm"
onClick={() => saveLabel(label.id)}
className="!p-2 !min-h-0 shrink-0"
className="!p-2 min-h-0! shrink-0"
>
<MdCheck size={20} />
</Button>
<Button
variant="danger"
size="sm"
onClick={() => handleDeleteTaskLabel(label.id)}
className="!p-2 !min-h-0 shrink-0"
className="!p-2 min-h-0! shrink-0"
>
<MdDelete size={20} />
</Button>
Expand Down Expand Up @@ -144,15 +144,15 @@ export const MobileListView: React.FC<MobileListViewProps> = ({
onTouchEnd={handleCellTouchEnd}
onTouchMove={handleCellTouchMove}
onClick={() => handleCellClick(team.id, label.id)}
className={`!min-h-0 !rounded-md !px-2 !py-3 !shadow-none truncate select-none ${
className={`min-h-0! rounded-md! !px-2 py-3! !shadow-none truncate select-none ${
member && isSelected
? '!border-spot !bg-spot !text-on-spot ring-2 ring-spot/20'
: member
? '!border-edge !bg-surface hover:!bg-spot-surface'
? 'border-edge! bg-surface! hover:!bg-spot-surface'
: ''
} ${
!member && isSelected ? '!bg-surface !border-spot' : ''
} ${!member && !isSelected ? '!border-dashed !border-edge-strong !bg-surface !text-ink-muted' : ''}`}
!member && isSelected ? 'bg-surface! !border-spot' : ''
} ${!member && !isSelected ? '!border-dashed border-edge-strong! bg-surface! !text-ink-muted' : ''}`}
>
{member ? member.name : '未割当'}
</Button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export function ContextMenuModal({ data, state, setMemberMenu, callbacks }: Cont
setCurrent(null);
}
}}
className="!py-2"
className="py-2!"
/>
</div>
<IconButton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ function HeightSettingsModalContent({
setHeightConfig(null);
}
}}
className="!flex !items-center !justify-center !gap-1"
className="flex! items-center! !justify-center gap-1!"
>
<MdDelete size={18} />
削除
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export function MemberSelectionModal({ data, state, callbacks }: MemberSelection
handleAddMember(current.taskLabelId, current.teamId);
}
}}
className="!py-2 !text-sm"
className="py-2! text-sm!"
autoFocus
/>
</div>
Expand All @@ -71,7 +71,7 @@ export function MemberSelectionModal({ data, state, callbacks }: MemberSelection
callbacks.onUpdateMember(createEmptyAssignment(current.teamId, current.taskLabelId), member.id);
setCurrent(null);
}}
className="flex-1 !justify-start !text-left !text-ink hover:!bg-ground"
className="flex-1 !justify-start text-left! !text-ink hover:bg-ground!"
>
{member.name}
</Button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ function TeamActionModalContent({
size="sm"
fullWidth
onClick={handleDeleteTeamFromModal}
className="!flex !items-center !justify-center !gap-1"
className="flex! items-center! !justify-center gap-1!"
>
<MdDelete size={18} />
削除
Expand Down
6 changes: 3 additions & 3 deletions app/assignment/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export default function AssignmentPage() {
variant="outline"
size="sm"
onClick={() => setIsSettingsModalOpen(true)}
className="!rounded-full !px-3 !py-2 shadow-md !bg-surface !text-ink-sub hover:!bg-ground !border !border-edge-strong"
className="rounded-full! px-3! py-2! shadow-md bg-surface! text-ink-sub! hover:bg-ground! border! border-edge-strong!"
title="詳細設定"
>
<HiCog className="w-5 h-5" />
Expand Down Expand Up @@ -114,8 +114,8 @@ export default function AssignmentPage() {
variant={data.manager ? 'outline' : 'primary'}
size="md"
onClick={() => setIsManagerDialogOpen(true)}
className={`!flex !items-center !gap-2 !px-4 !py-3 !rounded-lg shadow-lg ${
data.manager ? '!bg-surface hover:!bg-ground !border-edge' : ''
className={`flex! items-center! gap-2! px-4! py-3! rounded-lg! shadow-lg ${
data.manager ? 'bg-surface! hover:bg-ground! border-edge!' : ''
}`}
>
{data.manager ? (
Expand Down
2 changes: 1 addition & 1 deletion app/clock/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ export default function ClockPage() {
variant="primary"
size="sm"
onClick={enableAudio}
className="col-span-2 mt-1 w-full !min-h-11 !px-4 sm:col-span-1 sm:mt-0 sm:w-auto"
className="col-span-2 mt-1 w-full !min-h-11 px-4! sm:col-span-1 sm:mt-0 sm:w-auto"
style={{
backgroundColor: colors.accent,
color: '#FFFFFF',
Expand Down
2 changes: 1 addition & 1 deletion app/contact/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export default function ContactPage() {
{/* エラーメッセージ */}
{status === 'error' && errorMessage && (
<div className="mb-6 p-4 bg-danger-subtle border border-danger rounded-lg flex items-start gap-3">
<HiExclamationCircle className="h-5 w-5 text-danger flex-shrink-0 mt-0.5" />
<HiExclamationCircle className="h-5 w-5 text-danger shrink-0 mt-0.5" />
<div>
<p className="text-danger font-medium">エラーが発生しました</p>
<p className="text-danger text-sm mt-1">{errorMessage}</p>
Expand Down
6 changes: 3 additions & 3 deletions app/defect-beans/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ export default function DefectBeansPage() {
size="sm"
onClick={toggleCompareMode}
title={compareMode ? '選択モード' : '比較モード'}
className="!px-3 !py-2 gap-1.5"
className="px-3! py-2! gap-1.5"
>
<MdCompareArrows className="h-5 w-5" />
<span className="text-xs sm:text-sm">{compareMode ? '選択モード' : '比較'}</span>
Expand All @@ -201,7 +201,7 @@ export default function DefectBeansPage() {
size="sm"
onClick={handleShowCompare}
title="比較を表示"
className="!px-3 !py-2 gap-1.5"
className="px-3! py-2! gap-1.5"
>
比較 ({selectedIds.size})
</Button>
Expand All @@ -212,7 +212,7 @@ export default function DefectBeansPage() {
size="sm"
onClick={() => setShowAddForm(true)}
title="欠点豆を追加"
className="!px-3 !py-2 gap-1.5"
className="px-3! py-2! gap-1.5"
>
<HiPlus className="h-5 w-5" />
<span className="text-xs sm:text-sm">追加</span>
Expand Down
2 changes: 1 addition & 1 deletion app/drip-guide/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export default function DripGuidePage() {
right={
<Link
href="/drip-guide/new"
className="inline-flex items-center gap-2 bg-btn-primary hover:bg-btn-primary-hover text-btn-primary-text px-4 py-2 rounded-lg font-semibold transition-colors shadow-sm min-h-[44px]"
className="inline-flex items-center gap-2 bg-btn-primary hover:bg-btn-primary-hover text-btn-primary-text px-4 py-2 rounded-lg font-semibold transition-colors shadow-sm min-h-11"
>
<HiPlus size={20} />
<span className="hidden sm:inline">新規レシピ</span>
Expand Down
2 changes: 1 addition & 1 deletion app/error.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export default function Error({ reset }: { error: Error & { digest?: string }; r
</Button>
<Link
href="/"
className="min-h-[44px] px-5 rounded-xl border border-edge text-ink text-[15px] font-semibold flex items-center"
className="min-h-11 px-5 rounded-xl border border-edge text-ink text-[15px] font-semibold flex items-center"
>
ホームへ
</Link>
Expand Down
10 changes: 10 additions & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
@import 'tailwindcss';

/* 過去の仕様・計画・作業ログはクラス名の検出対象から外す。
古いクラス名を拾って未使用CSSが生成されるのを防ぐ */
@source not '../docs';
@source not '../.superpowers';

:root {
--background: #fdf8f0;
--foreground: #171717;
Expand Down Expand Up @@ -480,6 +485,11 @@
--font-mono: var(--font-geist-mono);
--font-nunito: var(--font-nunito);
--font-num: var(--font-outfit);
/* ブランド表記(ロゴ・スプラッシュ・ログイン/新規登録の見出し)用。
書体をクラス側の任意値で直接指定すると Tailwind v4 では font-weight として
解釈され効かないため、ここでユーティリティ化する
(コメント内にクラス名を書くと Tailwind が拾ってしまうので書かない) */
--font-brand: var(--font-inter);
}

/* stylelint-enable at-rule-no-unknown */
Expand Down
2 changes: 1 addition & 1 deletion app/inventory/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ export default function InventoryPage() {
setEditing(null);
setModalOpen(true);
}}
className="!min-h-0 shrink-0 gap-1.5 !rounded-[10px] !px-4 !py-2 !text-sm"
className="min-h-0! shrink-0 gap-1.5 !rounded-[10px] px-4! py-2! text-sm!"
>
<MdAdd className="h-4 w-4" aria-hidden="true" />
品目を追加
Expand Down
2 changes: 1 addition & 1 deletion app/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ function LoginForm() {
<div className="flex min-h-screen items-center justify-center bg-page px-4">
<div className="w-full max-w-md rounded-lg bg-surface p-8 shadow-md border border-edge">
<div className="mb-8 flex flex-col items-center rounded-xl bg-[#3a261d] py-6 shadow-inner">
<h1 className="text-4xl font-bold tracking-tight text-header-text font-[var(--font-playfair)]">
<h1 className="text-4xl font-bold tracking-tight text-header-text font-brand">
Roast<span className="text-header-accent">Plus</span>
</h1>
</div>
Expand Down
4 changes: 2 additions & 2 deletions app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ export default function HomePage(_props: HomePageProps = {}) {
return (
<div
className={`h-dvh flex flex-col overflow-hidden animate-home-page relative transition-colors duration-1000 bg-page text-ink ${
isChristmasMode ? 'bg-[radial-gradient(circle_at_center,_#0a2f1a_0%,_#051a0e_100%)]' : ''
isChristmasMode ? 'bg-[radial-gradient(circle_at_center,#0a2f1a_0%,#051a0e_100%)]' : ''
}`}
>
{isChristmasMode && <Snowfall />}
Expand All @@ -212,7 +212,7 @@ export default function HomePage(_props: HomePageProps = {}) {

{/* メインコンテンツ */}
<main className="relative z-10 mx-auto w-full max-w-6xl px-4 pt-2 pb-2 sm:px-6 sm:pt-3 sm:pb-3 flex-1 min-h-0">
<div className="flex h-full flex-col gap-2 md:grid md:h-auto md:grid-cols-4 md:gap-4 md:[grid-auto-rows:1fr]">
<div className="flex h-full flex-col gap-2 md:grid md:h-auto md:grid-cols-4 md:gap-4 md:auto-rows-[1fr]">
{visibleActions.map(({ key, title, label, description, href, icon: DefaultIcon, badge }, index) => {
const Icon = isChristmasMode ? CHRISTMAS_ICONS[key] || DefaultIcon : DefaultIcon;

Expand Down
Loading
Loading