:root{--color-primary:#0017c1;--color-primary-hover:#000ea8;--color-primary-active:#00069e;--color-on-primary:#ffffff;--color-text:#1a1a1c;--color-text-muted:#5a5a5c;--color-bg:#ffffff;--color-bg-subtle:#f2f2f2;--color-surface:#ffffff;--color-border:#767678;--color-border-light:#d8d8db;--color-success:#197a4b;--color-success-bg:#e6f5ec;--color-warning:#b25e00;--color-warning-bg:#fff4e6;--color-error:#ec0000;--color-error-bg:#fdeded;--color-info:#0017c1;--color-info-bg:#e8eaf9;--color-neutral:#5a5a5c;--color-neutral-bg:#eeeeee;--color-focus:#ffd43b;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-8:48px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--border-width:1px;--shadow-sm:0 1px 2px rgba(0,0,0,0.08);--shadow-md:0 2px 8px rgba(0,0,0,0.1);--font-size-sm:14px;--font-size-md:16px;--font-size-lg:20px;--font-size-xl:28px;--line-height:1.7;--header-height:56px;--sidenav-width:240px}*{box-sizing:border-box}body,html{margin:0;padding:0}html{overflow-x:hidden}body{color:var(--color-text);background:var(--color-bg-subtle);font-family:Noto Sans JP,Hiragino Sans,Yu Gothic,sans-serif;font-size:var(--font-size-md);line-height:var(--line-height)}:focus-visible{outline:3px solid var(--color-focus);outline-offset:2px}a{color:var(--color-primary)}.btn,h1,h2,h3{line-height:1.4}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);font-size:var(--font-size-md);font-weight:600;border-radius:var(--radius-md);border:var(--border-width) solid transparent;padding:var(--space-2) var(--space-4);cursor:pointer;text-decoration:none}.btn--sm{font-size:var(--font-size-sm);padding:var(--space-1) var(--space-3)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--color-primary);color:var(--color-on-primary)}.btn--primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn--secondary{background:var(--color-bg);color:var(--color-primary);border-color:var(--color-primary)}.btn--secondary:hover:not(:disabled){background:var(--color-info-bg)}.btn--tertiary{background:transparent;color:var(--color-primary);text-decoration:underline}.btn--danger{background:var(--color-error);color:#fff}.field{display:flex;flex-direction:column;gap:var(--space-1);margin-bottom:var(--space-4)}.field__label{font-weight:700;font-size:var(--font-size-sm)}.field__required{display:inline-block;margin-left:var(--space-2);font-size:12px;color:var(--color-error);border:1px solid var(--color-error);border-radius:var(--radius-sm);padding:0 var(--space-1)}.field__hint{color:var(--color-text-muted)}.field__error,.field__hint{margin:0;font-size:var(--font-size-sm)}.field__error{color:var(--color-error);font-weight:700}.input,.select,.textarea{font-size:var(--font-size-md);padding:var(--space-2) var(--space-3);border:var(--border-width) solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);width:100%;max-width:100%}.textarea{min-height:96px;resize:vertical}.input--error,.select--error,.textarea--error{border-color:var(--color-error);border-width:2px}.form-section{border:none;border-top:var(--border-width) solid var(--color-border-light);margin:0 0 var(--space-4);padding:var(--space-4) 0 0}.form-section__title{padding:0;margin:0 0 var(--space-1);font-size:var(--font-size-lg);font-weight:700;cursor:default}.form-section__hint{margin:0 0 var(--space-3);font-size:var(--font-size-sm);color:var(--color-text-muted)}details.form-section>summary.form-section__title{cursor:pointer}details.form-section>summary.form-section__title::marker{color:var(--color-primary)}details.form-section[open]>summary.form-section__title{margin-bottom:var(--space-3)}.card{background:var(--color-surface);border:var(--border-width) solid var(--color-border-light);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.card__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:var(--border-width) solid var(--color-border-light)}.card__title{margin:0;font-size:var(--font-size-lg)}.card__body{padding:var(--space-4)}.card+.card,.card+.grid-2,.grid-2+.card{margin-top:var(--space-4)}.grid-2>.card+.card{margin-top:0}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm)}.table td,.table th{padding:var(--space-3);border-bottom:var(--border-width) solid var(--color-border-light);text-align:left;vertical-align:middle}.table th{background:var(--color-bg-subtle);font-weight:700;white-space:nowrap}.table__empty{text-align:center;color:var(--color-text-muted);padding:var(--space-6)}.banner{display:flex;gap:var(--space-3);align-items:flex-start;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border-left:4px solid;margin-bottom:var(--space-4)}.banner__label{font-weight:700;font-size:var(--font-size-sm);white-space:nowrap;padding-top:2px}.banner__title{margin:0 0 var(--space-1);font-weight:700}.banner__content{font-size:var(--font-size-sm)}.banner--info{background:var(--color-info-bg);border-color:var(--color-info)}.banner--success{background:var(--color-success-bg);border-color:var(--color-success)}.banner--warning{background:var(--color-warning-bg);border-color:var(--color-warning)}.banner--error{background:var(--color-error-bg);border-color:var(--color-error)}.badge{display:inline-block;font-size:12px;font-weight:700;padding:2px var(--space-2);border-radius:999px;border:1px solid;white-space:nowrap}.badge--neutral{color:var(--color-neutral);background:var(--color-neutral-bg);border-color:var(--color-border-light)}.badge--info{color:var(--color-info);background:var(--color-info-bg);border-color:var(--color-info)}.badge--success{color:var(--color-success);background:var(--color-success-bg);border-color:var(--color-success)}.badge--warning{color:var(--color-warning);background:var(--color-warning-bg);border-color:var(--color-warning)}.badge--danger{color:var(--color-error);background:var(--color-error-bg);border-color:var(--color-error)}.app{min-height:100vh}.app-header{min-height:var(--header-height);background:var(--color-primary);color:var(--color-on-primary);justify-content:space-between;flex-wrap:wrap;padding:var(--space-2) var(--space-4);position:-webkit-sticky;position:sticky;top:0;z-index:30}.app-header,.app-header__left{display:flex;align-items:center;gap:var(--space-3)}.app-header__left{min-width:0}.app-header__logo{font-weight:700;font-size:var(--font-size-lg);color:var(--color-on-primary);text-decoration:none;white-space:nowrap}.app-header__right{display:flex;align-items:center;gap:var(--space-4);font-size:var(--font-size-sm);flex-wrap:wrap}.app-header__username{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:45vw}.app-header__menu-btn{display:none;align-items:center;justify-content:center;flex-shrink:0;width:44px;height:44px;padding:0;border:none;border-radius:var(--radius-md);background:transparent;color:var(--color-on-primary);cursor:pointer}.app-header__menu-btn:hover{background:rgba(255,255,255,.15)}.app-header__menu-icon{position:relative;display:block;width:22px;height:2px;background:currentColor}.app-header__menu-icon:after,.app-header__menu-icon:before{content:"";position:absolute;left:0;width:22px;height:2px;background:currentColor}.app-header__menu-icon:before{top:-7px}.app-header__menu-icon:after{top:7px}.app-body{display:flex;align-items:stretch;position:relative}.sidenav{width:var(--sidenav-width);flex-shrink:0;background:var(--color-surface);border-right:var(--border-width) solid var(--color-border-light);padding:var(--space-4) 0}.sidenav-drawer{display:contents}.sidenav-scrim{display:none}.sidenav__section{font-size:12px;font-weight:700;color:var(--color-text-muted)}.sidenav__link,.sidenav__section{padding:var(--space-2) var(--space-4)}.sidenav__link{display:block;color:var(--color-text);text-decoration:none}.sidenav__link:hover{background:var(--color-bg-subtle)}.sidenav__link[aria-current=page]{background:var(--color-info-bg);border-left:4px solid var(--color-primary);font-weight:700}.main{flex:1 1;padding:var(--space-5);max-width:1100px}.page-title{font-size:var(--font-size-xl);margin:0 0 var(--space-4)}.breadcrumb{font-size:var(--font-size-sm);margin-bottom:var(--space-3)}.breadcrumb,.breadcrumb a{color:var(--color-text-muted)}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:var(--space-4);gap:var(--space-4);margin-bottom:var(--space-5)}.kpi{background:var(--color-surface);border:var(--border-width) solid var(--color-border-light);border-radius:var(--radius-lg);padding:var(--space-4)}.kpi__label{font-size:var(--font-size-sm);color:var(--color-text-muted);margin:0 0 var(--space-1)}.kpi__value{font-size:var(--font-size-xl);font-weight:700;margin:0;white-space:nowrap}.grid-2{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-4);gap:var(--space-4);margin-bottom:var(--space-5)}@media (max-width:900px){.grid-2{grid-template-columns:1fr}}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.toolbar{display:flex;gap:var(--space-3);align-items:flex-end;margin-bottom:var(--space-4);flex-wrap:wrap}.muted{color:var(--color-text-muted)}.page-header-row{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap}.footer-forms{border-top:2px solid var(--color-border-light);margin-top:var(--space-8);padding:var(--space-5);background:var(--color-bg-subtle)}.dev-switcher{display:flex;gap:var(--space-2);align-items:center}.dev-switcher button{font-size:12px;padding:2px var(--space-2);border-radius:var(--radius-sm);border:1px solid rgba(255,255,255,.6);background:transparent;color:#fff;cursor:pointer}.dev-switcher button[aria-pressed=true]{background:#fff;color:var(--color-primary);font-weight:700}.dl{display:grid;grid-template-columns:140px 1fr;grid-gap:var(--space-2) var(--space-4);gap:var(--space-2) var(--space-4);margin:0}.dl dt{font-weight:700;color:var(--color-text-muted);font-size:var(--font-size-sm)}.dl dd{margin:0}.donut-chart__title{font-weight:700;margin:0 0 var(--space-2)}.donut-chart__empty{color:var(--color-text-muted);margin:0}.donut-chart__body{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap}.donut-legend{display:flex;flex-direction:column;gap:var(--space-2);margin:0;padding:0;list-style:none;min-width:0}.donut-legend__item{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-sm);flex-wrap:wrap}.donut-legend__swatch{display:inline-block;width:12px;height:12px;border-radius:var(--radius-sm);flex-shrink:0}.donut-legend__label{font-weight:700}.donut-legend__meta{color:var(--color-text-muted)}@media (max-width:768px){.app-header__menu-btn{display:inline-flex}.kpi-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.kpi__value{font-size:var(--font-size-lg)}.main{padding:var(--space-3)}.grid-2{grid-template-columns:1fr}.sidenav-drawer{display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;width:min(85vw,300px);max-width:300px;z-index:40;background:var(--color-surface,#fff);transform:translateX(-100%);transition:transform .2s ease-in-out}.sidenav-drawer__top{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border,#d9d9d9)}.sidenav-drawer__title{font-weight:700}.sidenav-drawer__close{border:none;background:none;cursor:pointer;font-size:24px;line-height:1;width:44px;height:44px}.sidenav-drawer:focus{outline:none}.sidenav-drawer--open{transform:translateX(0)}.sidenav-drawer .sidenav{width:100%;flex:1 1;min-height:0;border-right:none;box-shadow:var(--shadow-md);overflow-y:auto;padding-top:var(--space-2)}.sidenav-scrim{display:block;position:fixed;inset:0;width:100%;height:100%;border:none;padding:0;margin:0;z-index:35;background:rgba(0,0,0,.4);cursor:pointer}body.nav-open{overflow:hidden}}@media print{.app-header,.footer-forms,.no-print,.sidenav,.sidenav-drawer,.sidenav-scrim{display:none!important}.app-body{display:block}.main{max-width:none;padding:0}.card{box-shadow:none;page-break-inside:avoid;break-inside:avoid}}@media (min-width:769px){.sidenav-drawer__top{display:none}.sidenav{position:-webkit-sticky;position:sticky;top:var(--header-height);align-self:flex-start;height:calc(100vh - var(--header-height));overflow-y:auto}}