選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

792 行
15KB

  1. :root {
  2. --page-background: #f4efe7;
  3. --surface: rgba(255, 252, 247, 0.88);
  4. --surface-strong: #fffdf8;
  5. --surface-border: rgba(26, 72, 64, 0.12);
  6. --text-primary: #143631;
  7. --text-secondary: #4f655f;
  8. --accent: #1d7a6d;
  9. --accent-strong: #135c52;
  10. --accent-soft: #daf1ec;
  11. --highlight: #ef7c4d;
  12. --shadow-soft: 0 18px 50px rgba(20, 54, 49, 0.1);
  13. --shadow-card: 0 20px 40px rgba(20, 54, 49, 0.08);
  14. }
  15. * {
  16. box-sizing: border-box;
  17. }
  18. html {
  19. scroll-behavior: smooth;
  20. }
  21. body {
  22. margin: 0;
  23. min-height: 100vh;
  24. font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Grande", sans-serif;
  25. color: var(--text-primary);
  26. background:
  27. radial-gradient(circle at top left, rgba(239, 124, 77, 0.18), transparent 28%),
  28. radial-gradient(circle at top right, rgba(29, 122, 109, 0.18), transparent 32%),
  29. linear-gradient(180deg, #f8f2e8 0%, var(--page-background) 48%, #efe6da 100%);
  30. }
  31. a {
  32. color: inherit;
  33. }
  34. code {
  35. font-family: Consolas, "Courier New", monospace;
  36. }
  37. .page-shell {
  38. min-height: 100vh;
  39. display: flex;
  40. flex-direction: column;
  41. }
  42. .container {
  43. width: min(1120px, calc(100% - 2rem));
  44. margin: 0 auto;
  45. }
  46. .site-header {
  47. position: sticky;
  48. top: 0;
  49. z-index: 20;
  50. backdrop-filter: blur(14px);
  51. background: rgba(248, 242, 232, 0.78);
  52. border-bottom: 1px solid rgba(20, 54, 49, 0.08);
  53. }
  54. .header-inner {
  55. display: flex;
  56. align-items: center;
  57. justify-content: space-between;
  58. gap: 1rem;
  59. padding: 1rem 0;
  60. }
  61. .brand {
  62. display: inline-flex;
  63. align-items: center;
  64. gap: 0.85rem;
  65. text-decoration: none;
  66. }
  67. .brand-mark {
  68. display: inline-flex;
  69. align-items: center;
  70. justify-content: center;
  71. width: 2.75rem;
  72. height: 2.75rem;
  73. border-radius: 0.95rem;
  74. background: linear-gradient(135deg, var(--accent), var(--highlight));
  75. color: #fff;
  76. font-weight: 700;
  77. letter-spacing: 0.08em;
  78. box-shadow: var(--shadow-soft);
  79. }
  80. .brand-copy {
  81. display: flex;
  82. flex-direction: column;
  83. line-height: 1.1;
  84. }
  85. .brand-copy strong {
  86. font-size: 1rem;
  87. }
  88. .brand-copy small {
  89. color: var(--text-secondary);
  90. font-size: 0.75rem;
  91. text-transform: uppercase;
  92. letter-spacing: 0.14em;
  93. }
  94. .site-nav {
  95. display: flex;
  96. align-items: center;
  97. gap: 0.6rem;
  98. flex-wrap: wrap;
  99. }
  100. .nav-link {
  101. text-decoration: none;
  102. color: var(--text-secondary);
  103. font-weight: 600;
  104. padding: 0.7rem 1rem;
  105. border-radius: 999px;
  106. transition: background-color 160ms ease, color 160ms ease, transform 160ms ease;
  107. }
  108. .nav-link:hover,
  109. .nav-link:focus-visible,
  110. .nav-link.is-active {
  111. color: var(--accent-strong);
  112. background: rgba(29, 122, 109, 0.12);
  113. transform: translateY(-1px);
  114. }
  115. .page-content {
  116. flex: 1;
  117. padding: 3.5rem 0 4rem;
  118. }
  119. .content-stack {
  120. display: grid;
  121. gap: 1.5rem;
  122. }
  123. .section-heading {
  124. max-width: 46rem;
  125. }
  126. .section-heading h1 {
  127. margin: 0.3rem 0 0.8rem;
  128. font-size: clamp(2.4rem, 5vw, 4rem);
  129. line-height: 1;
  130. letter-spacing: -0.04em;
  131. }
  132. .section-heading p {
  133. margin: 0;
  134. color: var(--text-secondary);
  135. line-height: 1.8;
  136. font-size: 1.05rem;
  137. }
  138. .hero {
  139. display: grid;
  140. grid-template-columns: minmax(0, 1.5fr) minmax(280px, 0.9fr);
  141. gap: 1.5rem;
  142. align-items: stretch;
  143. }
  144. .hero-copy,
  145. .hero-panel,
  146. .feature-card,
  147. .section-panel,
  148. .employee-card,
  149. .alert,
  150. .empty-state {
  151. background: var(--surface);
  152. border: 1px solid var(--surface-border);
  153. box-shadow: var(--shadow-card);
  154. }
  155. .hero-copy {
  156. padding: 3rem;
  157. border-radius: 2rem;
  158. }
  159. .eyebrow {
  160. display: inline-block;
  161. margin-bottom: 1rem;
  162. padding: 0.4rem 0.75rem;
  163. border-radius: 999px;
  164. background: var(--accent-soft);
  165. color: var(--accent-strong);
  166. font-size: 0.78rem;
  167. font-weight: 700;
  168. text-transform: uppercase;
  169. letter-spacing: 0.14em;
  170. }
  171. .hero h1 {
  172. margin: 0;
  173. font-size: clamp(2.8rem, 6vw, 4.8rem);
  174. line-height: 0.98;
  175. letter-spacing: -0.04em;
  176. }
  177. .hero-text {
  178. max-width: 44rem;
  179. margin: 1.25rem 0 0;
  180. font-size: 1.12rem;
  181. line-height: 1.8;
  182. color: var(--text-secondary);
  183. }
  184. .hero-actions {
  185. display: flex;
  186. flex-wrap: wrap;
  187. gap: 0.85rem;
  188. margin-top: 2rem;
  189. }
  190. .button {
  191. display: inline-flex;
  192. align-items: center;
  193. justify-content: center;
  194. padding: 0.9rem 1.35rem;
  195. border-radius: 999px;
  196. text-decoration: none;
  197. font-weight: 700;
  198. }
  199. .button-primary {
  200. background: linear-gradient(135deg, var(--accent), var(--accent-strong));
  201. color: #fff;
  202. box-shadow: 0 18px 30px rgba(19, 92, 82, 0.25);
  203. }
  204. .button-secondary {
  205. background: rgba(29, 122, 109, 0.08);
  206. color: var(--accent-strong);
  207. }
  208. .hero-panel {
  209. display: flex;
  210. flex-direction: column;
  211. justify-content: space-between;
  212. padding: 2rem;
  213. border-radius: 1.8rem;
  214. }
  215. .panel-label {
  216. margin: 0 0 1rem;
  217. font-size: 0.78rem;
  218. font-weight: 700;
  219. letter-spacing: 0.16em;
  220. text-transform: uppercase;
  221. color: var(--text-secondary);
  222. }
  223. .hero-panel code {
  224. display: block;
  225. padding: 1rem 1.1rem;
  226. border-radius: 1.2rem;
  227. background: #173d37;
  228. color: #eefbf6;
  229. line-height: 1.7;
  230. white-space: normal;
  231. }
  232. .route-callout {
  233. margin-top: 1.5rem;
  234. padding: 1rem 1.1rem;
  235. border-radius: 1.2rem;
  236. background: var(--surface-strong);
  237. }
  238. .route-callout span {
  239. display: block;
  240. margin-bottom: 0.45rem;
  241. color: var(--text-secondary);
  242. font-size: 0.92rem;
  243. }
  244. .route-callout a {
  245. color: var(--highlight);
  246. font-weight: 700;
  247. text-decoration: none;
  248. }
  249. .feature-grid {
  250. display: grid;
  251. grid-template-columns: repeat(3, minmax(0, 1fr));
  252. gap: 1.25rem;
  253. margin-top: 1.5rem;
  254. }
  255. .feature-card {
  256. padding: 1.75rem;
  257. border-radius: 1.6rem;
  258. }
  259. .feature-card h2 {
  260. margin-top: 0;
  261. margin-bottom: 0.8rem;
  262. font-size: 1.25rem;
  263. }
  264. .feature-card p {
  265. margin: 0;
  266. color: var(--text-secondary);
  267. line-height: 1.7;
  268. }
  269. .employee-layout {
  270. display: grid;
  271. grid-template-columns: minmax(320px, 0.9fr) minmax(0, 1.5fr);
  272. gap: 1.5rem;
  273. align-items: start;
  274. }
  275. .controls-panel,
  276. .table-shell {
  277. overflow: hidden;
  278. background:
  279. linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(248, 242, 232, 0.88)),
  280. var(--surface);
  281. }
  282. .controls-header {
  283. display: flex;
  284. align-items: flex-start;
  285. justify-content: space-between;
  286. gap: 1rem;
  287. }
  288. .search-row {
  289. display: grid;
  290. grid-template-columns: minmax(0, 1fr);
  291. }
  292. .field-full {
  293. width: 100%;
  294. }
  295. .section-panel {
  296. padding: 1.75rem;
  297. border-radius: 1.8rem;
  298. }
  299. .panel-header {
  300. margin-bottom: 1.5rem;
  301. }
  302. .panel-header h2 {
  303. margin: 0 0 0.45rem;
  304. font-size: 1.45rem;
  305. }
  306. .panel-header p {
  307. margin: 0;
  308. color: var(--text-secondary);
  309. line-height: 1.7;
  310. }
  311. .employee-form {
  312. display: grid;
  313. gap: 1.25rem;
  314. }
  315. .form-grid {
  316. display: grid;
  317. grid-template-columns: repeat(2, minmax(0, 1fr));
  318. gap: 1rem;
  319. }
  320. .field {
  321. display: grid;
  322. gap: 0.45rem;
  323. font-weight: 600;
  324. }
  325. .field span {
  326. font-size: 0.96rem;
  327. }
  328. .input {
  329. width: 100%;
  330. padding: 0.95rem 1rem;
  331. border: 1px solid rgba(20, 54, 49, 0.16);
  332. border-radius: 1rem;
  333. background: rgba(255, 255, 255, 0.92);
  334. color: var(--text-primary);
  335. font: inherit;
  336. }
  337. .input:focus {
  338. outline: 2px solid rgba(29, 122, 109, 0.22);
  339. border-color: rgba(29, 122, 109, 0.45);
  340. }
  341. .field-error {
  342. color: #a43d1f;
  343. font-size: 0.88rem;
  344. font-weight: 600;
  345. }
  346. .form-actions {
  347. display: flex;
  348. justify-content: flex-start;
  349. align-items: center;
  350. gap: 0.85rem;
  351. }
  352. .button {
  353. border: 0;
  354. cursor: pointer;
  355. }
  356. .htmx-indicator {
  357. display: none;
  358. }
  359. .htmx-request .htmx-indicator,
  360. .htmx-request.htmx-indicator {
  361. display: inline-flex;
  362. }
  363. .inline-indicator {
  364. color: var(--text-secondary);
  365. font-size: 0.9rem;
  366. font-weight: 600;
  367. }
  368. .alert,
  369. .empty-state {
  370. padding: 1rem 1.15rem;
  371. border-radius: 1.2rem;
  372. }
  373. .alert-success {
  374. background: rgba(218, 241, 236, 0.92);
  375. color: var(--accent-strong);
  376. }
  377. .alert-error {
  378. background: rgba(239, 124, 77, 0.14);
  379. color: #8f3518;
  380. }
  381. .empty-state p {
  382. margin: 0;
  383. color: var(--text-secondary);
  384. line-height: 1.7;
  385. }
  386. .empty-state p + p {
  387. margin-top: 0.45rem;
  388. }
  389. .employee-cards {
  390. display: grid;
  391. gap: 1rem;
  392. }
  393. .employee-card {
  394. padding: 1.15rem;
  395. border-radius: 1.3rem;
  396. }
  397. .employee-card-top {
  398. display: flex;
  399. align-items: flex-start;
  400. justify-content: space-between;
  401. gap: 1rem;
  402. margin-bottom: 0.8rem;
  403. }
  404. .employee-card-top h3 {
  405. margin: 0;
  406. font-size: 1.05rem;
  407. }
  408. .employee-card-top span {
  409. padding: 0.4rem 0.7rem;
  410. border-radius: 999px;
  411. background: rgba(29, 122, 109, 0.09);
  412. color: var(--accent-strong);
  413. font-size: 0.78rem;
  414. font-weight: 700;
  415. }
  416. .employee-card p {
  417. margin: 0 0 1rem;
  418. color: var(--text-secondary);
  419. }
  420. .employee-meta {
  421. display: grid;
  422. gap: 0.75rem;
  423. margin: 0;
  424. }
  425. .employee-meta div {
  426. display: grid;
  427. gap: 0.2rem;
  428. }
  429. .employee-meta dt {
  430. color: var(--text-secondary);
  431. font-size: 0.82rem;
  432. text-transform: uppercase;
  433. letter-spacing: 0.08em;
  434. }
  435. .employee-meta dd {
  436. margin: 0;
  437. font-weight: 600;
  438. }
  439. .stats-grid {
  440. display: grid;
  441. grid-template-columns: repeat(3, minmax(0, 1fr));
  442. gap: 0.9rem;
  443. }
  444. .stat-card {
  445. padding: 1rem;
  446. border-radius: 1.3rem;
  447. background: rgba(255, 255, 255, 0.72);
  448. border: 1px solid rgba(20, 54, 49, 0.08);
  449. }
  450. .stat-card span {
  451. display: block;
  452. color: var(--text-secondary);
  453. font-size: 0.82rem;
  454. text-transform: uppercase;
  455. letter-spacing: 0.08em;
  456. }
  457. .stat-card strong {
  458. display: block;
  459. margin-top: 0.45rem;
  460. font-size: 1.7rem;
  461. line-height: 1;
  462. }
  463. .summary-feature {
  464. margin-top: 1rem;
  465. padding: 1.15rem;
  466. border-radius: 1.3rem;
  467. background: linear-gradient(135deg, rgba(29, 122, 109, 0.12), rgba(239, 124, 77, 0.12));
  468. }
  469. .summary-label {
  470. display: block;
  471. color: var(--text-secondary);
  472. font-size: 0.82rem;
  473. text-transform: uppercase;
  474. letter-spacing: 0.08em;
  475. }
  476. .summary-feature h3 {
  477. margin: 0.55rem 0 0.3rem;
  478. font-size: 1.35rem;
  479. }
  480. .summary-feature p {
  481. margin: 0;
  482. color: var(--text-secondary);
  483. }
  484. .table-toolbar {
  485. display: flex;
  486. align-items: center;
  487. justify-content: space-between;
  488. gap: 1rem;
  489. margin-bottom: 1rem;
  490. flex-wrap: wrap;
  491. padding: 0.9rem 1rem;
  492. border: 1px solid rgba(20, 54, 49, 0.08);
  493. border-radius: 1rem;
  494. background: rgba(255, 255, 255, 0.58);
  495. }
  496. .table-pill {
  497. display: inline-flex;
  498. align-items: center;
  499. padding: 0.5rem 0.8rem;
  500. border-radius: 999px;
  501. background: rgba(29, 122, 109, 0.12);
  502. color: var(--accent-strong);
  503. font-size: 0.82rem;
  504. font-weight: 700;
  505. letter-spacing: 0.04em;
  506. }
  507. .table-caption {
  508. color: var(--text-secondary);
  509. font-size: 0.92rem;
  510. }
  511. .directory-panel .tabulator-host {
  512. min-height: 38rem;
  513. }
  514. .tabulator-host .tabulator {
  515. border: 1px solid var(--surface-border);
  516. border-radius: 1.35rem;
  517. overflow: hidden;
  518. background: rgba(255, 255, 255, 0.82);
  519. box-shadow:
  520. inset 0 1px 0 rgba(255, 255, 255, 0.5),
  521. 0 18px 35px rgba(20, 54, 49, 0.08);
  522. }
  523. .tabulator-host .tabulator-header {
  524. border-bottom: 1px solid rgba(20, 54, 49, 0.08);
  525. background: linear-gradient(180deg, rgba(29, 122, 109, 0.14), rgba(29, 122, 109, 0.08));
  526. }
  527. .tabulator-host .tabulator-header .tabulator-col {
  528. min-height: 3.25rem;
  529. background: transparent;
  530. border-right: 1px solid rgba(20, 54, 49, 0.06);
  531. }
  532. .tabulator-host .tabulator-header .tabulator-col:last-child {
  533. border-right: 0;
  534. }
  535. .tabulator-host .tabulator-header .tabulator-col .tabulator-col-content {
  536. padding: 0.9rem 0.95rem 0.85rem;
  537. }
  538. .tabulator-host .tabulator-header .tabulator-col .tabulator-col-title {
  539. font-size: 0.78rem;
  540. font-weight: 800;
  541. letter-spacing: 0.08em;
  542. text-transform: uppercase;
  543. color: var(--accent-strong);
  544. }
  545. .tabulator-host .tabulator-col,
  546. .tabulator-host .tabulator-cell {
  547. border-right: 1px solid rgba(20, 54, 49, 0.06);
  548. }
  549. .tabulator-host .tabulator-row .tabulator-cell:last-child {
  550. border-right: 0;
  551. }
  552. .tabulator-host .tabulator-row {
  553. background: rgba(255, 255, 255, 0.96);
  554. border-bottom: 1px solid rgba(20, 54, 49, 0.06);
  555. transition: background-color 160ms ease, transform 160ms ease;
  556. }
  557. .tabulator-host .tabulator-row:nth-child(even) {
  558. background: rgba(248, 242, 232, 0.82);
  559. }
  560. .tabulator-host .tabulator-row:hover {
  561. background: rgba(218, 241, 236, 0.72);
  562. }
  563. .tabulator-host .tabulator-row.tabulator-selected {
  564. background: rgba(29, 122, 109, 0.18);
  565. }
  566. .tabulator-host .tabulator-cell {
  567. padding: 0.95rem 0.95rem;
  568. font-size: 0.96rem;
  569. line-height: 1.4;
  570. }
  571. .tabulator-host .tabulator-row .tabulator-cell:first-child {
  572. font-weight: 700;
  573. color: var(--text-primary);
  574. }
  575. .tabulator-host .tabulator-footer {
  576. padding: 0.55rem 0.7rem;
  577. background: rgba(255, 255, 255, 0.88);
  578. border-top: 1px solid rgba(20, 54, 49, 0.08);
  579. }
  580. .tabulator-host .tabulator-footer .tabulator-paginator {
  581. font-family: inherit;
  582. }
  583. .tabulator-host .tabulator-footer .tabulator-page {
  584. margin: 0 0.2rem;
  585. padding: 0.45rem 0.7rem;
  586. border: 1px solid rgba(20, 54, 49, 0.1);
  587. border-radius: 0.8rem;
  588. background: rgba(255, 255, 255, 0.9);
  589. color: var(--text-secondary);
  590. font-weight: 700;
  591. }
  592. .tabulator-host .tabulator-footer .tabulator-page.active,
  593. .tabulator-host .tabulator-footer .tabulator-page:hover {
  594. background: linear-gradient(135deg, var(--accent), var(--accent-strong));
  595. border-color: transparent;
  596. color: #fff;
  597. }
  598. .tabulator-host .tabulator-footer .tabulator-page:disabled {
  599. opacity: 0.45;
  600. }
  601. .tabulator-host .tabulator-placeholder {
  602. padding: 2.5rem 1rem;
  603. color: var(--text-secondary);
  604. font-size: 1rem;
  605. font-weight: 600;
  606. }
  607. .site-footer {
  608. margin-top: auto;
  609. border-top: 1px solid rgba(20, 54, 49, 0.08);
  610. background: rgba(255, 252, 247, 0.72);
  611. }
  612. .footer-inner {
  613. display: flex;
  614. justify-content: space-between;
  615. gap: 1rem;
  616. padding: 1.25rem 0 2rem;
  617. color: var(--text-secondary);
  618. font-size: 0.95rem;
  619. }
  620. .footer-inner p {
  621. margin: 0;
  622. }
  623. @media (max-width: 860px) {
  624. .header-inner,
  625. .footer-inner {
  626. flex-direction: column;
  627. align-items: flex-start;
  628. }
  629. .hero,
  630. .feature-grid,
  631. .employee-layout {
  632. grid-template-columns: 1fr;
  633. }
  634. .controls-header,
  635. .table-toolbar {
  636. flex-direction: column;
  637. align-items: flex-start;
  638. }
  639. .hero-copy,
  640. .hero-panel {
  641. padding: 2rem;
  642. }
  643. .form-grid {
  644. grid-template-columns: 1fr;
  645. }
  646. .stats-grid {
  647. grid-template-columns: 1fr;
  648. }
  649. .page-content {
  650. padding-top: 2rem;
  651. }
  652. }
  653. @media (max-width: 560px) {
  654. .container {
  655. width: min(100% - 1.25rem, 1120px);
  656. }
  657. .site-nav {
  658. width: 100%;
  659. }
  660. .nav-link {
  661. width: 100%;
  662. text-align: center;
  663. }
  664. .hero h1 {
  665. font-size: 2.5rem;
  666. }
  667. }

Powered by TurnKey Linux.