@tailwind base; @tailwind components; @tailwind utilities; :root { --background: 30 100% 98%; --foreground: 20 20% 30%; --card: 0 0% 100%; --card-foreground: 20 20% 30%; --primary: 15 54% 47%; --primary-foreground: 0 0% 100%; --secondary: 30 100% 94%; --secondary-foreground: 20 20% 30%; --muted: 30 38% 96%; --muted-foreground: 23 16% 46%; --accent: 30 100% 94%; --accent-foreground: 20 20% 30%; --destructive: 0 60% 48%; --destructive-foreground: 0 0% 100%; --border: 27 36% 88%; --input: 27 36% 85%; --ring: 15 54% 47%; --radius: 0.85rem; } * { box-sizing: border-box; border-color: hsl(var(--border)); } body { margin: 0; background: #fff9f3; color: #604a40; font-family: ui-rounded, "Hiragino Maru Gothic ProN", "PingFang SC", system-ui, sans-serif; font-size: 14px; } button, input, select { font: inherit; } button:focus-visible, a:focus-visible, select:focus-visible { outline: 2px solid #b95738; outline-offset: 3px; } h1, h2, h3, p { margin: 0; } button { cursor: pointer; } button:disabled { cursor: default; } strong { font-weight: 600; } .app-shell { min-height: 100vh; } .sidebar { width: 238px; position: fixed; inset: 0 auto 0 0; background: #fffefd; border-right: 1px solid #ece2d8; padding: 28px 16px; display: flex; flex-direction: column; z-index: 20; } .brand { display: flex; align-items: center; gap: 12px; padding: 0 12px 32px; } .brand img { width: 48px; height: 48px; border-radius: 50%; border: 3px solid #fffaf4; box-shadow: 0 0 0 1px #ead8ca; } .brand strong { display: block; font-size: 20px; letter-spacing: 1px; } .brand small { display: block; color: #9d8779; font-size: 9px; letter-spacing: 2px; margin-top: 4px; } .side-caption { padding: 0 15px; color: #9d8779; font-size: 11px; margin-bottom: 14px; letter-spacing: 1px; } .sidebar nav { display: grid; gap: 7px; } .nav-item { background: none; border: none; border-radius: 13px; min-height: 46px; display: flex; align-items: center; gap: 12px; padding: 13px 15px; color: #886c5f; text-align: left; } .nav-item:hover { background: #fff5eb; } .nav-item.active { color: #b95738; background: #ffeadc; font-weight: 600; } .nav-dot { width: 5px; height: 5px; border-radius: 50%; background: #b95738; margin-left: auto; } .side-note { margin-top: auto; margin-bottom: 24px; padding: 22px 18px; border-radius: 18px; background: #fff6ed; color: #9b7057; font-size: 12px; line-height: 1.9; } .side-note svg { margin-bottom: 8px; color: #d9956e; } .side-bottom { display: flex; align-items: center; justify-content: space-between; border-top: 1px solid #f0e8e0; padding-top: 20px; } .admin-indicator { font-size: 12px; color: #886c5f; padding-left: 9px; } .content { margin-left: 238px; padding: 32px 38px 24px; max-width: 1780px; } .topbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 26px; gap: 16px; } .eyebrow { color: #9d7965; font-size: 10px; letter-spacing: 1.8px; font-weight: 600; margin-bottom: 9px; } .topbar h1 { font-size: 27px; letter-spacing: 1px; font-weight: 600; } .topbar-actions { display: flex; gap: 14px; align-items: center; } .today-date { font-size: 12px; color: #9d8779; } .mobile-logout { display: none; } .welcome { min-height: 180px; background: linear-gradient(110deg, #fff0dd, #ffdec7); border: 1px solid #ffeadb; border-radius: 24px; padding: 32px 36px; display: flex; align-items: center; justify-content: space-between; overflow: hidden; } .welcome h2 { font-size: 25px; font-weight: 600; color: #694c3f; margin: 10px 0 13px; } .welcome p:not(.eyebrow) { color: #98745d; font-size: 13px; } .welcome img { width: 116px; height: 116px; border-radius: 50%; border: 5px solid #fffaf4; transform: rotate(-8deg); box-shadow: 0 8px 30px #a5623615; } .stat-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 14px; margin: 22px 0; } .stat-card, .panel { border: 1px solid #ece2d8; background: white; border-radius: 19px; box-shadow: 0 6px 28px #604a4004; } .stat-card { text-align: left; padding: 18px; transition: transform 0.2s, border-color 0.2s; } .stat-card:hover { transform: translateY(-3px); border-color: #ddb699; } .stat-top { display: flex; align-items: center; justify-content: space-between; color: #bca89c; margin-bottom: 15px; } .stat-icon { display: grid; place-items: center; width: 38px; height: 38px; background: #fff0e2; color: #b95738; border-radius: 12px; } .tint-pets .stat-icon, .tint-tasks .stat-icon { background: #f1eaf8; color: #977eae; } .tint-walks .stat-icon, .tint-files .stat-icon { background: #edf2fb; color: #7d96b6; } .stat-card > span { color: #886c5f; font-size: 12px; } .stat-card strong { font-size: 30px; display: block; margin: 6px 0; } .stat-card small { font-size: 10px; color: #a48d7e; white-space: nowrap; } .overview-grid { display: grid; grid-template-columns: 1.6fr 1fr; gap: 20px; } .panel-heading { padding: 24px 25px 0; display: flex; align-items: center; justify-content: space-between; } .panel-heading h2, .records-heading h2 { font-size: 17px; font-weight: 600; } .panel-heading p, .records-heading p { color: #a18a7c; font-size: 12px; margin-top: 7px; } .panel-heading > svg { color: #c6a28c; } .bar-chart { height: 232px; display: flex; align-items: flex-end; gap: 18px; padding: 28px 26px; } .chart-column { display: flex; flex-direction: column; align-items: center; gap: 8px; flex: 1; height: 100%; min-width: 0; } .chart-column > span { font-size: 12px; color: #9d7965; } .bar-space { flex: 1; width: 100%; display: flex; align-items: flex-end; max-width: 42px; } .chart-bar { width: 100%; background: linear-gradient(#f2bc94, #d88760); border-radius: 7px 7px 2px 2px; transition: height 0.3s; } .chart-column small { font-size: 11px; color: #a48d7e; } .today dl { padding: 12px 25px 20px; margin: 0; } .today dl > div { display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid #f2eae4; padding: 14px 0; } .today dl > div:last-child { border: 0; } .today dt { font-size: 12px; color: #886c5f; } .today dd { font-size: 21px; margin: 0; } .today dd small { font-size: 11px; margin-left: 5px; color: #a48d7e; } .summary-strip { margin-top: 20px; display: flex; gap: 28px; padding: 18px 22px; border: 1px dashed #e6d2c2; border-radius: 15px; background: #fff5eb; } .summary-strip > div { display: flex; align-items: center; gap: 9px; font-size: 12px; color: #9d7965; } .summary-strip strong { color: #604a40; margin-left: 8px; } .records { overflow: hidden; } .records-heading { padding: 24px 26px 16px; display: flex; align-items: center; justify-content: space-between; } .per-page { background: #fff6ed; border: 1px solid #f4e6d8; padding: 5px 10px; border-radius: 8px; font-size: 11px; color: #9d7965; } .toolbar { display: flex; align-items: center; gap: 12px; padding: 0 26px 22px; flex-wrap: wrap; } .search-form { display: flex; align-items: center; gap: 8px; flex: 1; max-width: 490px; position: relative; } .search-form > svg { position: absolute; left: 12px; pointer-events: none; color: #a48d7e; } .search-form input { padding-left: 36px; min-width: 140px; border-radius: 10px; } .toolbar select { background: white; color: #886c5f; border: 1px solid #e6d9cf; border-radius: 10px; padding: 8px 30px 8px 12px; height: 36px; font-size: 12px; } table { min-width: 760px; } thead { background: #fffaf6; } th { white-space: nowrap; font-size: 12px !important; padding: 13px 18px !important; } td { padding: 15px 18px !important; font-size: 12px; max-width: 360px; } td small { display: block; color: #a48d7e; font-size: 10px; margin-top: 5px; } td strong { display: block; } .identity { display: flex; align-items: center; gap: 10px; min-width: 0; } .identity strong { font-size: 13px; color: #604a40; } .identity small { max-width: 185px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #a48d7e; font-size: 10px; margin-top: 5px; display: block; } .avatar { width: 38px; height: 38px; display: grid; place-items: center; flex: none; color: #c58d6a; border-radius: 12px; background: #fff1e4; overflow: hidden; } .avatar img { width: 100%; height: 100%; object-fit: cover; } .mono { font-family: ui-monospace, SFMono-Regular, monospace; } .pet-tags { display: flex; flex-wrap: wrap; gap: 5px; max-width: 250px; } .pet-tags > span { background: #fff3e8; color: #9d6a4e; padding: 4px 7px; border-radius: 7px; display: flex; align-items: center; gap: 4px; font-size: 11px; } .row-actions { display: flex; align-items: center; gap: 5px; white-space: nowrap; } .tree-toggle { width: 28px; height: 28px; display: grid; place-items: center; border: 1px solid #f0e4da; border-radius: 8px; color: #ad826b; background: #fffaf6; } .text-action { border: none; background: none; color: #b95738; padding: 0; } .tree-row td { padding: 0 20px 16px 56px !important; background: #fffcf9; } .pet-tree { border-left: 2px solid #ecd8c8; padding: 14px 18px 5px; } .tree-heading { display: flex; align-items: center; gap: 7px; font-size: 12px; color: #9d7965; margin-bottom: 14px; } .tree-heading strong { display: inline; } .tree-heading > span { font-size: 10px; margin-left: auto; color: #b29a89; } .pet-tree-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px; } .pet-tree-card { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 14px; border: 1px solid #f0e2d6; border-radius: 12px; background: white; text-align: left; } .pet-tree-card:hover { border-color: #deb697; background: #fffaf6; } .pet-tree-card .identity { flex: 1; } .pet-tree-card > svg { color: #bfa390; } .pet-tree-card .identity small { font-family: inherit; } .tree-message { display: flex; align-items: center; gap: 10px; color: #a48d7e; font-size: 12px; padding: 12px 0; } .pagination { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 18px 25px; border-top: 1px solid #f0e7df; font-size: 12px; color: #9d8779; } .pagination > div { display: flex; align-items: center; gap: 15px; } .pagination button { border-radius: 9px; } .empty { min-height: 230px; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 12px; padding: 35px 20px; color: #a48d7e; text-align: center; } .empty svg { color: #c9ae9a; } .empty h3 { font-size: 15px; font-weight: 500; color: #8e7160; } .empty p { font-size: 12px; line-height: 1.8; } .empty.compact { min-height: 150px; } .error-banner, .notice { display: flex; align-items: center; justify-content: space-between; border: 1px solid #f0d7c9; background: #fff0e7; border-radius: 12px; padding: 12px 15px; color: #a04b31; margin-bottom: 18px; font-size: 12px; gap: 12px; } .notice { background: #f5f0fb; border-color: #e6dcef; color: #806499; justify-content: flex-start; } .notice button { border: none; background: none; color: inherit; margin-left: auto; } .error-text { color: #a04b31; } .page-footer { text-align: center; color: #b49c8b; font-size: 10px; padding: 24px 0 5px; letter-spacing: 1px; } .detail-dialog { max-width: 700px; width: calc(100% - 32px); max-height: 85vh; overflow: auto; border-radius: 22px !important; padding: 26px !important; } .detail-summary { display: flex; justify-content: space-between; align-items: center; padding: 14px 0; border-bottom: 1px solid #f0e7df; gap: 10px; } .detail-summary .identity small { max-width: 330px; } .detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 7px 0; } .detail-grid > div { min-width: 0; } .detail-grid dt { color: #a48d7e; font-size: 11px; margin-bottom: 7px; } .detail-grid dd { font-size: 13px; margin: 0; line-height: 1.8; overflow-wrap: anywhere; white-space: pre-wrap; } .dialog-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 10px; } .confirm-copy { font-size: 13px; line-height: 1.9; color: #886c5f; } .track { padding: 14px; background: #fffaf5; border: 1px solid #eee0d4; border-radius: 16px; } .track svg { width: 100%; display: block; border-radius: 10px; } .track p { font-size: 10px; color: #a48d7e; padding-top: 10px; text-align: center; } .file-preview { width: 100%; max-height: 260px; object-fit: contain; background: #fff8f0; border-radius: 12px; } .file-link { display: flex; gap: 5px; align-items: center; color: #b95738; font-size: 12px; } .file-name { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .login-page { min-height: 100vh; display: flex; align-items: center; justify-content: center; gap: 100px; padding: 40px; background: radial-gradient(ellipse at 15% 20%, #ffead4, transparent 50%), radial-gradient(ellipse at 95% 90%, #f1eaf8, transparent 45%), #fff9f3; } .login-story { max-width: 480px; } .login-story > img { width: 94px; height: 94px; border-radius: 50%; border: 4px solid #fffaf4; box-shadow: 0 12px 40px #aa683219; margin-bottom: 30px; transform: rotate(-6deg); } .login-story h1 { font-size: 42px; font-weight: 600; line-height: 1.55; letter-spacing: 2px; } .login-story > p:not(.eyebrow) { color: #a0816a; line-height: 1.9; font-size: 14px; margin-top: 20px; } .story-tags { display: flex; gap: 20px; margin-top: 40px; } .story-tags > span { display: flex; align-items: center; gap: 7px; color: #b28d72; font-size: 12px; } .login-card { width: 400px; background: white; border: 1px solid #eee1d6; border-radius: 27px; padding: 35px; box-shadow: 0 20px 80px #98694b0b; } .login-mark { width: 48px; height: 48px; background: #fff0e2; color: #c07851; display: grid; place-items: center; border-radius: 16px; margin-bottom: 24px; } .login-card h2 { font-size: 26px; font-weight: 600; } .muted { color: #a18a7c; font-size: 12px; line-height: 1.8; margin: 10px 0 28px; } .login-card label { display: block; color: #8e7160; font-size: 12px; margin: 17px 0 8px; } .login-card input { height: 42px; border-radius: 11px; } .login-submit { margin-top: 25px; border-radius: 11px; height: 42px; } .login-footnote { display: block; text-align: center; font-size: 10px; color: #baa392; margin-top: 25px; } .login-card .error-banner { margin-top: 16px; margin-bottom: 0; line-height: 1.7; } @media (min-width: 1550px) { .content { padding-left: 52px; padding-right: 52px; } } @media (max-width: 1240px) { .stat-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sidebar { width: 210px; } .content { margin-left: 210px; padding: 26px; } .today-date { display: none; } .overview-grid { grid-template-columns: 1.4fr 1fr; } .login-page { gap: 55px; } .login-story h1 { font-size: 35px; } } @media (max-width: 880px) { .sidebar { width: 76px; padding: 22px 9px; } .content { margin-left: 76px; padding: 24px 20px; } .brand { padding: 0 3px 28px; } .brand img { width: 45px; height: 45px; } .brand > div, .side-caption, .nav-item > span, .side-note, .side-bottom { display: none; } .nav-item { justify-content: center; padding: 13px 0; } .mobile-logout { display: inline-flex; } .overview-grid { grid-template-columns: 1fr; } .summary-strip { flex-wrap: wrap; gap: 15px; } .welcome { padding: 26px; min-height: 170px; } .welcome h2 { font-size: 22px; } .welcome img { width: 85px; height: 85px; } .login-page { gap: 35px; } .login-story h1 { font-size: 28px; } .story-tags { gap: 12px; flex-wrap: wrap; } .login-card { width: 360px; padding: 28px; } } @media (max-width: 620px) { .sidebar { width: 60px; padding: 20px 6px; } .brand { padding: 0 0 22px; } .brand img { width: 40px; height: 40px; } .content { margin-left: 60px; padding: 20px 12px; } .topbar h1 { font-size: 22px; } .topbar-actions { gap: 5px; } .topbar-actions > button { font-size: 11px; padding: 8px; } .eyebrow { letter-spacing: 1px; font-size: 9px; } .welcome { padding: 22px; } .welcome img { display: none; } .welcome h2 { font-size: 20px; } .stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .stat-card { padding: 15px; } .toolbar { padding: 0 14px 18px; } .records-heading { padding: 22px 15px 18px; } .records-heading p { max-width: 170px; line-height: 1.8; } .search-form { flex-basis: 100%; max-width: none; } .pagination { padding: 16px 12px; flex-direction: column; align-items: flex-start; gap: 13px; } .pagination > div { width: 100%; justify-content: space-between; } .detail-grid { grid-template-columns: 1fr; } .detail-summary .identity small { max-width: 190px; } .login-page { padding: 25px; flex-direction: column; gap: 22px; } .login-story { width: min(400px, 100%); } .login-story > img { width: 54px; height: 54px; border-radius: 50%; margin: 0 0 10px; } .login-story h1 { font-size: 25px; line-height: 1.7; } .login-story h1 br { display: none; } .login-story > p:not(.eyebrow), .story-tags { display: none; } .login-card { width: min(400px, 100%); padding: 28px; } .bar-chart { gap: 10px; padding-left: 20px; padding-right: 20px; } } .nav-item { text-decoration: none; } .breed-alphabet { display:flex; flex-wrap:wrap; gap:6px; padding:0 24px 24px; } .breed-alphabet button { min-width:30px; height:30px; border-radius:9px; border:1px solid #eeded1; padding:0 8px; color:#927766; } .breed-alphabet button.active { background:#ffeadc; border-color:#dfa080; color:#b85837; } .breed-aliases { max-width:240px; white-space:normal; } .breed-form { display:grid; gap:18px; } .breed-form label { display:grid; gap:8px; } .breed-form .breed-enabled { display:flex; align-items:center; gap:10px; } .breed-dialog {max-height:85vh;overflow-y:auto;} .breed-fact-fields {display:grid;grid-template-columns:1fr 1fr;gap:16px;} .breed-form textarea {width:100%;border:1px solid #eadacb;border-radius:12px;padding:12px;resize:vertical;} .breed-source-badges{display:flex;flex-wrap:wrap;gap:6px;max-width:280px} .breed-source-badges a{text-decoration:none} .breed-editor-tabs{display:flex;gap:10px;margin-bottom:8px} .breed-source-list{display:grid;gap:16px} .breed-source-card{border:1px solid #ead9cc;background:#fffbf7;padding:18px;border-radius:16px} .breed-source-card header{display:flex;align-items:center;justify-content:space-between;gap:12px} .breed-source-card small{display:block;margin-top:8px;color:#a28a78} .breed-source-card dl{display:grid;gap:12px;margin-top:18px} .breed-source-card dl>div{display:grid;grid-template-columns:90px 1fr;gap:12px} .breed-source-card dt{color:#a28a78;font-size:13px} .breed-source-card dd{margin:0;font-size:14px;overflow-wrap:anywhere} .breed-form select{width:100%;min-height:40px;border:1px solid #ead9cc;border-radius:10px;padding:8px;background:white}