/* /Components/Admin/AdminAuthLayout.razor.rz.scp.css */
.admin-auth-page[b-mpmchbwb8x] {
    min-height: 100vh;
    background: var(--admin-page-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 32px;
}

.admin-auth-card[b-mpmchbwb8x] {
    width: 340px;
    background: var(--admin-card-bg);
    border: 0.5px solid var(--admin-border);
    border-radius: 10px;
    padding: 28px 26px;
}

.admin-auth-brand[b-mpmchbwb8x] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
}

.admin-auth-logo[b-mpmchbwb8x] {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--admin-accent);
    color: var(--admin-accent-text);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 500;
}

.admin-auth-title[b-mpmchbwb8x] {
    font-size: 15px;
    font-weight: 500;
    color: var(--admin-text);
}

.admin-auth-role-badge[b-mpmchbwb8x] {
    background: var(--admin-active-bg);
    color: var(--admin-active-text);
    font-size: 11px;
    padding: 2px 8px;
    border-radius: 20px;
}
/* /Components/Admin/AdminLayout.razor.rz.scp.css */
.admin-shell[b-ijk55dkgos] {
    display: flex;
    min-height: 100vh;
}

.admin-main[b-ijk55dkgos] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.admin-topbar[b-ijk55dkgos] {
    background: var(--admin-sidebar-bg);
    padding: 10px 20px;
    display: flex;
    align-items: center;
    gap: 12px;
    border-bottom: 0.5px solid var(--admin-border);
}

.admin-topbar-spacer[b-ijk55dkgos] {
    flex: 1;
}

.admin-topbar-name[b-ijk55dkgos] {
    color: var(--admin-text-secondary);
    font-size: 12px;
}

.admin-topbar-sep[b-ijk55dkgos] {
    color: var(--admin-text-muted);
    font-size: 12px;
}

.admin-logout-form[b-ijk55dkgos] {
    display: inline;
}

.admin-topbar-logout[b-ijk55dkgos] {
    background: none;
    border: none;
    color: var(--admin-text-secondary);
    font-size: 12px;
    cursor: pointer;
    padding: 0;
}

.admin-topbar-logout:hover[b-ijk55dkgos] {
    color: var(--admin-text);
}

.admin-content[b-ijk55dkgos] {
    flex: 1;
    background: var(--admin-content-bg);
    padding: 20px;
}
/* /Components/Admin/AdminNavMenu.razor.rz.scp.css */
.admin-nav[b-q6m85gm56c] {
    width: 180px;
    flex-shrink: 0;
    background: var(--admin-sidebar-bg);
    padding: 16px 12px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.admin-nav-brand[b-q6m85gm56c] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 10px 16px;
}

.admin-nav-logo[b-q6m85gm56c] {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--admin-accent);
    color: var(--admin-accent-text);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 500;
}

.admin-nav-title[b-q6m85gm56c] {
    color: var(--admin-text);
    font-size: 13px;
    font-weight: 500;
}

.admin-nav-section[b-q6m85gm56c] {
    color: var(--admin-text-muted);
    font-size: 11px;
    padding: 10px 10px 8px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.admin-nav-link[b-q6m85gm56c] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    border-radius: 6px;
    color: var(--admin-text-secondary);
    font-size: 13px;
    text-decoration: none;
}

.admin-nav-link:hover[b-q6m85gm56c] {
    background: rgba(255, 255, 255, 0.04);
}

.admin-nav-link.active[b-q6m85gm56c] {
    background: var(--admin-active-bg);
    color: var(--admin-active-text);
    font-weight: 500;
}

[b-q6m85gm56c] .admin-nav-icon {
    font-size: 16px;
}
/* /Components/Admin/Login.razor.rz.scp.css */
.admin-auth-subtitle[b-ue7bt21q6q] {
    font-size: 12px;
    color: var(--admin-text-muted);
    margin: 0 0 22px;
}

.admin-auth-error[b-ue7bt21q6q] {
    font-size: 12px;
    color: var(--admin-danger);
    background: rgba(217, 88, 63, 0.12);
    border-radius: 6px;
    padding: 8px 10px;
    margin-bottom: 16px;
}

.admin-auth-form[b-ue7bt21q6q] {
    display: flex;
    flex-direction: column;
}

.admin-auth-label[b-ue7bt21q6q] {
    font-size: 12px;
    color: var(--admin-text-secondary);
    margin-bottom: 4px;
}

.admin-auth-input[b-ue7bt21q6q] {
    width: 100%;
    height: 36px;
    border-radius: 6px;
    padding: 0 10px;
    font-size: 13px;
    background: var(--admin-input-bg);
    border: 1px solid var(--admin-border);
    color: var(--admin-text);
    margin-bottom: 14px;
}

.admin-auth-button[b-ue7bt21q6q] {
    width: 100%;
    background: var(--admin-accent);
    color: var(--admin-accent-text);
    border: none;
    padding: 10px;
    font-size: 13px;
    font-weight: 500;
    border-radius: 6px;
    cursor: pointer;
    margin-top: 6px;
}

.admin-auth-note[b-ue7bt21q6q] {
    text-align: center;
    margin-top: 16px;
    font-size: 12px;
    color: var(--admin-text-muted);
}

.admin-auth-link[b-ue7bt21q6q] {
    color: var(--admin-link);
}
/* /Components/Layout/AuthLayout.razor.rz.scp.css */
.auth-container[b-ljsiyak7oe] {
    min-height: 100vh;
}

.auth-card[b-ljsiyak7oe] {
    width: 100%;
    max-width: 400px;
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* レイアウトの骨格はMudLayout/MudDrawerに任せているため、.sidebar/.top-row/.page等の
   独自CSSは不要になった(旧Bootstrapテンプレートの名残を削除)。MudAppBarは2026-08-21に廃止
   (テーマ切替・ログアウトはNavMenu.razor.css側に移設)。 */

/* MudMainContentのpadding-top上書きはここ(::deep)では効かなかった(DevToolsで確認済み、2026-08-21)。
   MudMainContentが実際にレンダリングするdiv.mud-main-contentにBlazorのCSS分離属性(b-xxxxxxxxxx)が
   付与されないため、::deepセレクタが届かない。wwwroot/app.css(グローバルCSS)側で対応済み。 */

#blazor-error-ui[b-gk2pdj2djb] {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-gk2pdj2djb] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* /Components/Layout/NavMenu.razor.rz.scp.css */
/* サイドバー配色変更(2026-08-17、ライトテーマを「ディープネイビー」案に変更)に伴う調整。
   MudDrawerの背景(PaletteLight.DrawerBackground)が濃紺になったため、以下2点をここで補正する。 */

/* 「メニュー」「管理」の見出しラベル。以前はColor="Color.Secondary"(アプリ全体で共通のSecondaryパレット、
   白背景向けの色)を使っていたが、濃紺の背景では読みにくい。Colorパラメータを外して親(MudDrawer)の
   DrawerText(#D7E1FF、AppTheme.cs参照)をそのまま継承させ、opacityだけ落として控えめな見出しにする。
   これによりDrawerBackground/DrawerTextを将来また変更しても、ここは自動的に追従する。 */
.nav-section-label[b-61unlt9gur] {
    opacity: .65;
}

/* 選択中メニュー項目のハイライト色。MudBlazor既定はColor.Primary(#1D3A8F、濃紺)をそのまま使うため、
   同じく濃紺のDrawerBackground上では文字色が背景に沈んでほぼ読めなくなる。選択中の項目だけ、白背景側の
   Primaryとは別に明るいアクセント色(#7FA6FF、Primaryを明るくした色)で上書きする。 */
[b-61unlt9gur] .mud-nav-link.active,
[b-61unlt9gur] .mud-nav-link.active .mud-nav-link-icon {
    color: #7FA6FF !important;
    border-color: #7FA6FF !important;
}

/* 元MainLayout.razor.cssから移設(2026-08-21、テーマ切替・ログアウトのサイドバー移設に伴う)。
   <form>はブロック要素でデフォルトmarginを持つため、幅いっぱいのMudButtonと揃うように潰す。 */
.logout-form[b-61unlt9gur] {
    margin: 0;
    width: 100%;
}
/* /Components/Shared/TiptapEditor.razor.rz.scp.css */
.tiptap-wrapper[b-criz0dmr4x] {
    border: 1px solid var(--mud-palette-lines-inputs);
    border-radius: var(--mud-default-borderradius);
}

.tiptap-toolbar[b-criz0dmr4x] {
    display: flex;
    gap: 2px;
    padding: 2px 4px;
    border-bottom: 1px solid var(--mud-palette-lines-inputs);
    flex-wrap: wrap;
}

.tiptap-editor-content[b-criz0dmr4x] {
    padding: 8px 12px;
    min-height: 72px;
    max-height: 320px;
    overflow-y: auto;
}

/* ProseMirrorが生成するDOMはBlazorのスコープ外なので::deepで当てる */
.tiptap-editor-content[b-criz0dmr4x]  .ProseMirror {
    outline: none;
    min-height: 56px;
}

.tiptap-editor-content[b-criz0dmr4x]  p.is-editor-empty:first-child::before {
    content: attr(data-placeholder);
    float: left;
    height: 0;
    pointer-events: none;
    color: var(--mud-palette-text-disabled);
}

.tiptap-editor-content[b-criz0dmr4x]  p {
    margin: 0 0 4px;
}

.tiptap-editor-content[b-criz0dmr4x]  ul,
.tiptap-editor-content[b-criz0dmr4x]  ol {
    margin: 0 0 4px;
    padding-left: 1.5em;
}

.tiptap-editor-content[b-criz0dmr4x]  blockquote {
    margin: 4px 0;
    padding-left: 12px;
    border-left: 3px solid var(--mud-palette-lines-inputs);
    color: var(--mud-palette-text-secondary);
}
/* /Components/User/Auth/CompleteProfile.razor.rz.scp.css */
.form-field[b-1vw7wywtc0] {
    margin-bottom: 16px;
}

.form-field-last[b-1vw7wywtc0] {
    margin-bottom: 24px;
}

.form-label[b-1vw7wywtc0] {
    display: block;
    font-size: 13px;
    margin-bottom: 4px;
}

.form-input[b-1vw7wywtc0] {
    width: 100%;
    padding: 10px;
    border-radius: 8px;
    border: 1px solid var(--mud-palette-lines-inputs);
    background: transparent;
    color: inherit;
    box-sizing: border-box;
}
/* /Components/User/Calendar/CalendarPage.razor.rz.scp.css */
.month-label[b-hzysaimvja] {
    min-width: 120px;
    text-align: center;
}

.calendar-dow-row[b-hzysaimvja] {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
    text-align: center;
    margin-bottom: 8px;
}

.calendar-grid[b-hzysaimvja] {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
}

.calendar-day[b-hzysaimvja] {
    min-height: 72px;
    background: transparent;
}

.calendar-day.today[b-hzysaimvja] {
    background: var(--mud-palette-primary-hover);
}

.event-dot[b-hzysaimvja] {
    font-size: 8px;
}

.event-title[b-hzysaimvja] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* /Components/User/Dashboard/AddWidgetDialog.razor.rz.scp.css */
.add-widget-card[b-arpyesm74p] {
    cursor: grab;
    text-align: center;
    height: 100%;
    border: 1px solid var(--mud-palette-lines-default);
}

.add-widget-card:hover[b-arpyesm74p] {
    border-color: var(--mud-palette-primary);
}

.add-widget-card-added[b-arpyesm74p] {
    cursor: default;
    opacity: 0.6;
}

.add-widget-card-added:hover[b-arpyesm74p] {
    border-color: var(--mud-palette-lines-default);
}
/* /Components/User/Dashboard/Home.razor.rz.scp.css */
/* 24列グリッド。列間隔(16px)はwwwroot/js/dashboardWidgets.jsのCOLS/GAPと同じ値にすること。
   行の高さは固定値ではなく、JS側(syncRowHeight)が実測した列幅をそのまま--row-h CSS変数として
   このグリッド要素(#widgets-grid)にセットしたものを使う(2026-08-07: 「グリッドの縦の幅を横の幅に
   合わせて」への対応。セルをほぼ正方形にし、縦横のgapの見え方も揃える)。JS実行前・JS無効時のフォールバックは
   70px。 */
.widgets-grid[b-r0qm0oob7l] {
    display: grid;
    grid-template-columns: repeat(24, 1fr);
    grid-auto-rows: var(--row-h, 70px);
    gap: 16px;
    position: relative;
}

/* 編集モード中、グリッドの列・行の境界を薄い線で見せるガイド(縦横とも)。移動先が分かりやすいように、
   との指示への対応(2026-08-07)。
   以前はグラデーション背景で線を描画する方式だったが、うまく表示されない不具合が直らなかったため、
   「widgets-gridと全く同じgrid-template-columns/grid-auto-rows/gapを持つ透明なオーバーレイを重ね、
   24×GridOverlayRows個のマス目それぞれに4辺ボーダーを付ける」方式に作り直した(2026-08-07再修正)。
   実グリッドと全く同じgrid定義を使っているので、レスポンシブな列幅(1fr)や可変の行高(--row-h)が
   変わっても常にマス目の境界が実際のウィジェット配置とぴったり一致する。行数はGridOverlayRows
   (Home.razor.cs)ぶん敷き詰めているだけで、実際のウィジェットがそれより下に配置されてもよい
   (overflow: hiddenで安全にクリップする)。線の色は視認性を上げるためlines-defaultより濃い
   lines-inputsに変更した。 */
.grid-overlay[b-r0qm0oob7l] {
    position: absolute;
    inset: 0;
    display: grid;
    grid-template-columns: repeat(24, 1fr);
    grid-auto-rows: var(--row-h, 70px);
    gap: 16px;
    pointer-events: none;
    z-index: 0;
    overflow: hidden;
}

.grid-overlay-cell[b-r0qm0oob7l] {
    border: 1px dashed var(--mud-palette-lines-inputs);
}

.widget[b-r0qm0oob7l] {
    position: relative;
    min-width: 0;
    min-height: 0;
    z-index: 1;
    /* 2026-08-08: display:gridをやめてblockにする案を試したが、サイズ維持自体が再び崩れる退行が
       出たため、いったんdisplay:gridに戻した(スクロール不具合そのものは未解決のまま)。
       .widgetの高さはcalc()(--widget-rows、下記height参照)で確定させてあるので、中身が少ない時に
       縮む問題はこの状態でも起きない。 */
    display: grid;
    height: calc(var(--row-h, 70px) * var(--widget-rows, 1) + 16px * (var(--widget-rows, 1) - 1));
    grid-template-rows: minmax(0, 1fr);
    grid-template-columns: minmax(0, 1fr);
}

.dashboard-editing .widget[b-r0qm0oob7l] {
    cursor: grab;
}

.dashboard-editing .widget:active[b-r0qm0oob7l] {
    cursor: grabbing;
}

/* ドラッグ中のウィジェット本体。実際のgrid-column/grid-rowをJS側(dashboardWidgets.js)がセル単位で
   直接書き換えてスナップ移動させる(2026-08-08、詳細はdashboardWidgets.js冒頭コメント参照)ため、
   他の要素の上に重なって見えるようz-indexを上げ、影を付けて「持ち上げて動かしている」見た目にしている。
   pointer-eventsをoffにして、ドラッグ中にこのウィジェット自身がマウスイベントを拾って邪魔しないように
   する(座標計算はdocument側のmousemoveで行っているため問題ない)。 */
.widget-dragging[b-r0qm0oob7l] {
    opacity: 0.9;
    z-index: 30;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
    pointer-events: none;
    transition: box-shadow 0.15s ease;
}

/* 移動中・リサイズ中の実ウィジェット自身のハイライト。両方とも同じ配色で統一している(2026-08-07、
   「移動時にもリサイズのようなハイライトを」への対応): valid=青(このまま確定できる)、
   invalid=赤(確定されない)。以前はちょうど1件重なった時用の「入れ替え(swap)」状態もあったが、
   「入れ替え機能は無しにする」との指示(2026-08-08)で廃止し、重なりがあれば常にinvalidにした。 */
.widget-state-valid[b-r0qm0oob7l] {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: -2px;
}

.widget-state-invalid[b-r0qm0oob7l] {
    outline: 2px solid var(--mud-palette-error);
    outline-offset: -2px;
}

/* タイトル(各ウィジェットコンポーネントの先頭のMudText)は常に表示したまま、本文だけをスクロール/
   ページングさせたい(2026-08-08)ため、ここは自分自身でスクロールさせず(overflow: hiddenで安全に
   クリップするだけ)、縦積みのflexコンテナにして本文側(各ウィジェットコンポーネントが自分の
   マークアップ内に置く.widget-scroll-body、グローバルなwwwroot/app.css参照)にスクロール領域を
   委ねる。優先度別タスクのように.widget-scroll-bodyを使わないウィジェットはそのまま流し込まれる
   (中身が小さいので通常ははみ出さない)。
   2026-08-08 5回目の修正: DevToolsの計算済みスタイルで実際に確認したところ、height:100%は正しく
   .widget(=376px)に一致していたが、display:flexだけが無視されてdisplay:blockのまま計算されていた
   (overflowも同様に効いていなかった)。原因はMudPaper自身が持つ既定のCSS(.mud-paper { display:
   block; }相当)がここでのdisplay/overflow指定より優先されていたため。display:blockのままだと
   .widget-scroll-body側のflex:1指定が丸ごと意味を持たなくなり、これがスクロールしない不具合の
   直接の原因だった。!importantを追加したが、それでもDevTools上でdisplayがblockのままだった
   (6回目確認)。App.razorの<link>順序を見るとTaskApp.styles.css(このスコープ付きCSSの出力先)が
   MudBlazor.min.cssより先に読み込まれているため、MudBlazor側の該当ルールも!importantを使っている
   場合、詳細度が同じなら「後に読み込まれた方(MudBlazor側)」が勝ってしまう(!important同士は
   詳細度→ソース順で決着する)。そこで#widgets-grid(Home.razor側で付けているグリッド要素のid)を
   セレクタに含めてID分の詳細度を上乗せしたが、それでもまだ直っていないとの報告(7回目)。
   2026-08-08 7回目の修正: そもそもBlazorのCSS分離は、対象要素にビルド時のスコープ属性(b-xxxxx)が
   静的に付与されていることが前提だが、MudPaperのような「@attributes(CaptureUnmatchedValues)で
   親から渡された属性をルート要素に転送する」子コンポーネントの場合、スコープ属性が実際に転送先の
   DOM要素まで届いているかはコンポーネント実装依存で、CSS詳細度を積んでも根本的に解決しない
   (セレクタ自体がマッチしていない可能性がある)。この綱引きに決着をつけるため、CSSでの上書きは
   やめて、Home.razor側でMudPaperに直接Style属性(display:flex;flex-direction:column;
   overflow:hidden;height:100%;)を指定する方式に変更した。インラインstyle属性はCSS詳細度が
   セレクタの種類を問わず最強(!important無しのCSSクラスには常に勝つ)なので、スコープ付きCSSと
   MudBlazor側CSSのどちらが後勝ちするかという問題自体を回避できる。以下のルールはインラインstyleが
   確実に効くようになった今は実質フォールバックとしてのみ残している。 */
#widgets-grid .widget-inner[b-r0qm0oob7l] {
    height: 100%;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
}

/* 削除用の×ボタン(ウィジェット単位でカード上に置く方式)は、専用行にすると内容の上に空白ができ、
   絶対配置で浮かせても内容と被る問題が繰り返し出たため廃止した(2026-08-08)。代わりに「編集モード中、
   画面右下に固定表示される『ゴミ箱』ゾーンへウィジェットをドラッグして離すと非表示になる」という
   ドラッグ&ドロップ式のUIに変更した(ユーザー指示)。判定・ハイライトはJS側(dashboardWidgets.js)の
   移動ハンドラが、ドラッグ中のカーソル座標がこのゾーンの矩形内かどうかで行う。pointer-events: none
   にしているのは、このゾーン自体はマウスイベントを受け取る対象ではなく(クリックボタンではない)、
   あくまでドラッグ中の「目印」として存在するため(判定はJS側でclientX/Yの座標比較のみで行っており、
   ゾーン要素自体がクリックを拾う必要がない)。
   「ウィジェット追加ボタンは削除ボタンの上に配置する」との指示(2026-08-08)を受け、編集バナー内にあった
   「ウィジェットを追加」ボタンをこのゴミ箱ゾーンの真上に積んだ固定スタック(.widget-edit-fab-stack)に
   移設した。 */
.widget-edit-fab-stack[b-r0qm0oob7l] {
    position: fixed;
    right: 24px;
    bottom: 24px;
    z-index: 40;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
}

.widget-add-fab[b-r0qm0oob7l] {
    pointer-events: auto;
}

.widget-trash-zone[b-r0qm0oob7l] {
    width: 96px;
    height: 84px;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    background: var(--mud-palette-surface);
    border: 2px dashed var(--mud-palette-lines-inputs);
    color: var(--mud-palette-text-secondary);
    font-size: 0.7rem;
    text-align: center;
    line-height: 1.2;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
    pointer-events: none;
    transition: transform 0.1s ease, background-color 0.1s ease, border-color 0.1s ease, color 0.1s ease;
}

/* ドラッグ中のウィジェットがこのゾーンに重なっている間、JS側が付与するクラス。離すと非表示が確定する
   ことを強調するため、エラー(赤)系の配色に変えて少し拡大する。 */
.widget-trash-zone-active[b-r0qm0oob7l] {
    background: var(--mud-palette-error);
    border-color: var(--mud-palette-error);
    border-style: solid;
    color: var(--mud-palette-error-text);
    transform: scale(1.12);
}

.widget-resize-handle[b-r0qm0oob7l] {
    position: absolute;
    right: 2px;
    bottom: 2px;
    width: 16px;
    height: 16px;
    cursor: nwse-resize;
    z-index: 2;
}

.widget-resize-handle[b-r0qm0oob7l]::after {
    content: "";
    position: absolute;
    right: 3px;
    bottom: 3px;
    width: 8px;
    height: 8px;
    border-right: 2px solid var(--mud-palette-text-disabled);
    border-bottom: 2px solid var(--mud-palette-text-disabled);
}
/* /Components/User/Dashboard/Widgets/MemberWorkloadWidget.razor.rz.scp.css */
.workload-name[b-u73ri2eg96] {
    width: 48px;
}

.workload-hours[b-u73ri2eg96] {
    width: 50px;
    text-align: right;
}
/* /Components/User/Dashboard/Widgets/PriorityTasksWidget.razor.rz.scp.css */
.priority-label[b-tcxyn17wko] {
    width: 24px;
}

.priority-count[b-tcxyn17wko] {
    width: 32px;
    text-align: right;
}
/* /Components/User/Masters/MasterList.razor.rz.scp.css */
/* マスタ種別(部署/役職/クライアント/案件種別/タスク種別)ごとに名称の長さが違っても、
   タブ切替で列幅がガタつかないよう固定値にする。
   MudTable/MudTh/MudTdが実際にレンダリングするtable/th/tdはこのコンポーネント(MasterList.razor)の
   スコープ属性を持たない(子コンポーネントの描画結果のため)ので、直接このrazorが描画する
   .master-list-table-wrap(divをスコープの足場にして::deepで配下を無スコープ指定する必要がある */
.master-list-table-wrap[b-xuizwp2ah4]  table {
    table-layout: fixed;
    width: 100%;
}

.master-list-table-wrap[b-xuizwp2ah4]  .master-list-name-col {
    width: 320px;
}

.master-list-table-wrap[b-xuizwp2ah4]  .master-list-abbreviated-col {
    width: 200px;
}

.master-list-table-wrap[b-xuizwp2ah4]  .master-list-actions-col {
    width: 176px;
}

.master-list-table-wrap[b-xuizwp2ah4]  td {
    overflow-wrap: break-word;
}
/* /Components/User/Permissions/Permissions.razor.rz.scp.css */
.role-select[b-tswycvr6g4] {
    max-width: 280px;
}
/* /Components/User/Projects/ProjectDetail.razor.rz.scp.css */
/* フェーズ別(準備/計画/開発/テスト/リリース)開始日・終了日の表示用表(2026-08-20追加)。ProjectNew.razor.cssの
   入力用フェーズ表と対になる、読み取り専用の表示版。 */
.phase-detail-table-wrap[b-7ovle6619q] {
    overflow-x: auto;
}

.phase-detail-table[b-7ovle6619q] {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.phase-detail-table th[b-7ovle6619q] {
    text-align: left;
    font-size: 11px;
    color: var(--mud-palette-text-secondary);
    font-weight: 500;
    padding: 4px 6px;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.phase-detail-table td[b-7ovle6619q] {
    padding: 5px 6px;
    color: var(--mud-palette-text-primary);
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.phase-detail-table tr:last-child td[b-7ovle6619q] {
    border-bottom: none;
}
/* /Components/User/Projects/ProjectNew.razor.rz.scp.css */
.form-paper[b-r6eo681kso] {
    max-width: 640px;
}

/* フェーズ別(準備/計画/開発/テスト/リリース)開始日・終了日の表(2026-08-20追加)。タスクの登録編集画面で
   採用していたフェーズ表と同じ構成(項目数が多くなるため個別のMudItemを並べるのではなく表に集約)。 */
.phase-table-wrap[b-r6eo681kso] {
    overflow-x: auto;
}

.phase-table[b-r6eo681kso] {
    width: 100%;
    border-collapse: collapse;
}

.phase-table th[b-r6eo681kso] {
    text-align: left;
    font-size: 12px;
    color: var(--mud-palette-text-secondary);
    font-weight: 500;
    padding: 4px 8px;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.phase-table td[b-r6eo681kso] {
    padding: 4px 8px;
    border-bottom: 1px solid var(--mud-palette-lines-default);
    vertical-align: middle;
}

.phase-table td:first-child[b-r6eo681kso] {
    font-size: 13px;
    color: var(--mud-palette-text-primary);
    white-space: nowrap;
    width: 56px;
}

.phase-table tr:last-child td[b-r6eo681kso] {
    border-bottom: none;
}
/* /Components/User/Reports/Reports.razor.rz.scp.css */
.due-rate-bar[b-c87dml0lny] {
    width: 100px;
}

.table-scroll[b-c87dml0lny] {
    overflow-x: auto;
}
/* /Components/User/Shared/ActivityLogSection.razor.rz.scp.css */
.log-executor[b-o61r51rvkd] {
    font-weight: 500;
}

.log-changes[b-o61r51rvkd] {
    margin: 4px 0 0;
    padding-left: 1.2em;
    font-size: 0.875rem;
}

.log-changes li[b-o61r51rvkd] {
    margin-bottom: 2px;
}

.log-field[b-o61r51rvkd] {
    font-weight: 500;
}
/* /Components/User/Shared/CommentSection.razor.rz.scp.css */
.comment-author[b-gif8nnwrpq] {
    font-weight: 500;
}

.comment-body[b-gif8nnwrpq]  p {
    margin: 0 0 4px;
}

.comment-body[b-gif8nnwrpq]  p:last-child {
    margin-bottom: 0;
}

.comment-body[b-gif8nnwrpq]  ul,
.comment-body[b-gif8nnwrpq]  ol {
    margin: 0 0 4px;
    padding-left: 1.5em;
}

.comment-body[b-gif8nnwrpq]  blockquote {
    margin: 4px 0;
    padding-left: 12px;
    border-left: 3px solid var(--mud-palette-lines-inputs);
    color: var(--mud-palette-text-secondary);
}
/* /Components/User/Shared/ProgressLogDialog.razor.rz.scp.css */
.progress-log-dialog-content[b-jiv1tqw7sz] {
    max-height: 60vh;
    overflow-y: auto;
    min-width: 320px;
}

.log-executor[b-jiv1tqw7sz] {
    font-weight: 500;
}

.log-changes[b-jiv1tqw7sz] {
    margin: 4px 0 0;
    padding-left: 1.2em;
    font-size: 0.875rem;
}

.log-changes li[b-jiv1tqw7sz] {
    margin-bottom: 2px;
}

.log-field[b-jiv1tqw7sz] {
    font-weight: 500;
}
/* /Components/User/Tasks/Gantt.razor.rz.scp.css */
/* MudSelect(MudInputControl)は既定でwidth:100%を持つ。以前はmin-widthだけで260px以上を保証していたが、
   このセレクタを別のflexコンテナ(.gantt-header-actions)でラップした際、入れ子のflexコンテキストで
   width:100%の基準(flex-basis:auto→中身のwidth依存)が循環し、意図せず縮んでしまう事象が発生した。
   flex-basisを直接260pxに固定する対処を入れたが、それでも再度縮む事象が起きたため、外側の
   flex-basisだけでなく、MudSelectが内部でレンダリングする子要素(.mud-input-control/.mud-select、
   Blazorのスコープ付きCSSでは通常のセレクタで届かないため::deepが必要)にも直接100%幅を強制する
   二段構えにした(2026-08-16修正、!importantはMudBlazor本体のCSSより確実に勝たせるため)。 */
.project-select[b-mddalegzvi] {
    flex: 0 0 260px !important;
    width: 260px !important;
}

.project-select[b-mddalegzvi]  .mud-input-control,
.project-select[b-mddalegzvi]  .mud-select {
    width: 100% !important;
}

/* 案件セレクタ+エクスポートメニューのラッパー。outerのjustify-space-between行内で他の要素に
   押し潰されないようにする。 */
.gantt-header-actions[b-mddalegzvi] {
    flex-shrink: 0;
}

.gantt-period-label[b-mddalegzvi] {
    min-width: 100px;
    text-align: center;
}

.gantt-period-picker[b-mddalegzvi] {
    min-width: 200px;
}

.gantt-filter-select[b-mddalegzvi] {
    min-width: 180px;
}

.gantt-scroll[b-mddalegzvi] {
    overflow-x: auto;
}

.gantt-inner[b-mddalegzvi] {
    min-width: 800px;
}

/* 目盛り行。子要素(.gantt-marker)は絶対配置なので、幅は必ずインラインstyle(Gantt.razor.cs側の
   TimelineWidthPx)で明示する(絶対配置の子要素は親の実サイズに自動反映されないため)。 */
.gantt-header[b-mddalegzvi] {
    position: relative;
    height: 24px;
    margin-left: 220px;
    margin-bottom: 8px;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

.gantt-marker[b-mddalegzvi] {
    position: absolute;
    top: 0;
    height: 100%;
    border-left: 1px solid var(--mud-palette-lines-default);
    padding-left: 4px;
    white-space: nowrap;
}

/* 行を積む土台。依存線オーバーレイ(.gantt-dep-overlay)を絶対配置するための基準(position:relative)。
   幅・高さはGantt.razor.cs側のGanttInnerWidthPx/RowHeight×行数をインラインstyleで指定する
   (.gantt-rowが明示幅を持つため自動では広がらず、.gantt-dep-overlayのright:0の基準にするためにも必要)。
   z-index: 0を明示しているのは、position:relativeだけではスタッキングコンテキストが生成されず
   (CSS仕様上、position!=staticかつz-index!=autoの両方が揃って初めて生成される)、内部の
   .gantt-row-label/.gantt-group-label-sticky(position:sticky; z-index:2)が他の行のバー・依存線より
   確実に手前に描画される保証が無かったため(横スクロール時に固定列が透けて見える不具合の原因)。 */
.gantt-body[b-mddalegzvi] {
    position: relative;
    z-index: 0;
}

.gantt-row[b-mddalegzvi] {
    display: flex;
    align-items: center;
}

/* 担当者別スイムレーン表示の見出し行(2026-08-16追加)。.gantt-rowと同じ高さ(RowHeight)を使うことで
   Gantt.razor.cs側のY座標計算(依存線・行インデックス)をそのまま流用できる。 */
.gantt-group-row[b-mddalegzvi] {
    display: flex;
    align-items: center;
    background: var(--mud-palette-background-gray);
    box-sizing: border-box;
}

/* 横スクロール時もラベル文字だけ左端に固定する(2026-08-16追加)。行自体(帯の背景色)は他の行と同じく
   通常通りスクロールさせ、文字部分だけ.gantt-scrollの左端に張り付ける。背景色はGantt.razor.cs側で
   ThemeState.IsDarkModeから直接決めてインラインstyleで渡している(下記.gantt-row-labelのコメント参照、
   CSS変数var(--mud-palette-xxx)の継承がこの要素だけ不安定だったための対処)。 */
.gantt-group-label-sticky[b-mddalegzvi] {
    position: sticky;
    left: 0;
    z-index: 2;
    padding-left: 8px;
}

.gantt-group-label[b-mddalegzvi] {
    font-weight: 600;
}

/* 横スクロール時も行ラベル(タスク名)を左端に固定する。position: sticky + left: 0で.gantt-scrollの
   左端に張り付ける。背景色はGantt.razor.cs側でThemeState.IsDarkModeから直接計算してインラインstyleで
   渡している(CSS変数var(--mud-palette-xxx)の継承がこの要素だけ不安定だったための対処)。
   align-self: stretchが今回の実際の原因: 親.gantt-rowはalign-items:centerのため、既定では
   flexアイテムは行の高さ(36px)いっぱいには伸びず「中身の高さぶんだけ中央寄せ」される。そのため
   ラベルの不透明背景が行の上下端まで届かず、隙間から他の行のバーの色が透けて見えていた
   (2026-08-17修正、DevTools確認で「文字は読めるが背景がバーの色と重なって見える」との報告から特定)。 */
.gantt-row-label[b-mddalegzvi] {
    display: flex;
    align-items: center;
    align-self: stretch;
    width: 220px;
    flex-shrink: 0;
    padding-right: 12px;
    padding-left: calc(var(--level, 0) * 20px);
    box-sizing: border-box;
    position: sticky;
    left: 0;
    z-index: 2;
}

.gantt-assignee-badge[b-mddalegzvi] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--mud-palette-primary);
    color: var(--mud-palette-primary-text);
    font-size: 10px;
    flex-shrink: 0;
    margin-right: 4px;
}

.gantt-task-title[b-mddalegzvi] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}

.gantt-track[b-mddalegzvi] {
    position: relative;
    flex-grow: 1;
    height: 22px;
    background: var(--mud-palette-background-gray);
    border-radius: 4px;
}

.gantt-bar[b-mddalegzvi] {
    position: absolute;
    height: 100%;
    border-radius: 4px;
    left: var(--bar-left);
    width: var(--bar-width);
    background: var(--bar-color);
    overflow: hidden;
    cursor: grab;
}

.gantt-bar-priority[b-mddalegzvi] {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    width: 4px;
}

.gantt-bar-progress[b-mddalegzvi] {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.18);
    pointer-events: none;
}

.gantt-bar-handle[b-mddalegzvi] {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 6px;
    cursor: ew-resize;
}

.gantt-bar-handle-start[b-mddalegzvi] {
    left: 0;
}

.gantt-bar-handle-end[b-mddalegzvi] {
    right: 0;
}

.gantt-bar-dragging[b-mddalegzvi] {
    cursor: grabbing;
    opacity: 0.85;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
    z-index: 1;
}

/* クリティカルパス表示(2026-08-16追加)。ステータス色(--bar-color)は維持したまま、外周の輪郭だけで
   強調する(色そのものを上書きすると進捗・ステータスの情報が読み取れなくなるため)。 */
.gantt-bar-critical[b-mddalegzvi] {
    outline: 2px solid var(--mud-palette-error);
    outline-offset: 1px;
}

.gantt-today-line[b-mddalegzvi] {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 0;
    border-left: 2px dashed var(--mud-palette-error);
    opacity: 0.6;
    pointer-events: none;
}

/* 依存タスクの矢印線の描画エリア。.gantt-header と同じ220pxオフセットで.gantt-trackの幅と
   ぴったり揃える。.gantt-body自身が明示幅(GanttInnerWidthPx)を持つため、right:0はその幅を
   基準に正しく解決される(明示幅が無いと、横スクロールで広がった実際の内容幅ではなく
   ビューポート幅基準になってしまい、ズレる)。 */
.gantt-dep-overlay[b-mddalegzvi] {
    position: absolute;
    top: 0;
    left: 220px;
    right: 0;
    bottom: 0;
    pointer-events: none;
}

.gantt-dep-segment[b-mddalegzvi] {
    position: absolute;
    background: var(--mud-palette-lines-inputs);
}

.gantt-dep-h[b-mddalegzvi] {
    height: 2px;
}

.gantt-dep-v[b-mddalegzvi] {
    width: 2px;
}

.gantt-dep-arrow[b-mddalegzvi] {
    position: absolute;
    width: 0;
    height: 0;
    border-top: 4px solid transparent;
    border-bottom: 4px solid transparent;
    border-left: 6px solid var(--mud-palette-lines-inputs);
}

/* クリティカルパス上の依存線(2026-08-16追加)。太さ・色を変えて通常の依存線と区別する。 */
.gantt-dep-segment.gantt-dep-critical[b-mddalegzvi] {
    background: var(--mud-palette-error);
}

.gantt-dep-h.gantt-dep-critical[b-mddalegzvi] {
    height: 3px;
}

.gantt-dep-v.gantt-dep-critical[b-mddalegzvi] {
    width: 3px;
}

.gantt-dep-arrow.gantt-dep-critical[b-mddalegzvi] {
    border-left-color: var(--mud-palette-error);
}
/* /Components/User/Tasks/TaskDetail.razor.rz.scp.css */
/* /Components/User/Tasks/TaskNew.razor.rz.scp.css */
.form-paper[b-95nfsp3r5n] {
    max-width: 640px;
}
/* /Components/User/Tasks/Tasks.razor.rz.scp.css */
.kanban-scroll[b-8u1f22nvea] {
    overflow-x: auto;
    padding-bottom: 8px;
}

/* MudDropContainer/MudDropZoneが実際にレンダリングするDOMはBlazorのスコープ外(子コンポーネントの内部要素)
   なので、::deep を付けないとここに書いたCSSが一切効かない(横並びのflexが適用されない不具合の原因) */
.kanban-scroll[b-8u1f22nvea]  .kanban-columns {
    display: flex;
    gap: 12px;
    align-items: flex-start;
}

.kanban-scroll[b-8u1f22nvea]  .kanban-column {
    background: var(--mud-palette-background-gray);
    min-height: 400px;
    flex: 0 0 280px;
    width: 280px;
}

.kanban-scroll[b-8u1f22nvea]  .kanban-card {
    cursor: pointer;
}
