@font-face { font-family: "YekanBakh"; src: url("./fonts/yekan-bakh/YekanBakh_FaNum_Regular.woff") format("woff"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "YekanBakh"; src: url("./fonts/yekan-bakh/YekanBakh_FaNum_Medium.woff") format("woff"); font-weight: 500; font-style: normal; font-display: swap; } @font-face { font-family: "YekanBakh"; src: url("./fonts/yekan-bakh/YekanBakh_FaNum_Bold.woff") format("woff"); font-weight: 700; font-style: normal; font-display: swap; } :root { --bg: #f3e8e1; --bg-deep: #e7d4c8; --ink: #1c1410; --muted: #6b574c; --line: rgba(28, 20, 16, 0.12); --card: rgba(255, 252, 249, 0.92); --accent: #1c1410; --ok: #1f6b4a; --danger: #9b2c2c; --warn: #8a5a12; --shadow: 0 18px 40px rgba(48, 28, 18, 0.08); --radius: 16px; --font: "YekanBakh", "Tahoma", sans-serif; } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; } body { font-family: var(--font); color: var(--ink); background: radial-gradient(1200px 600px at 10% -10%, #fff7f1 0%, transparent 55%), radial-gradient(900px 500px at 100% 0%, #f0d7cb 0%, transparent 50%), linear-gradient(180deg, var(--bg), var(--bg-deep)); line-height: 1.55; } button, input, select, textarea { font: inherit; color: inherit; } a { color: inherit; } .hidden { display: none !important; } /* Login */ .login-wrap { min-height: 100vh; display: grid; place-items: center; padding: 2rem 1rem; } .login-card { width: min(420px, 100%); background: var(--card); border: 1px solid var(--line); border-radius: calc(var(--radius) + 4px); box-shadow: var(--shadow); padding: 2rem 1.6rem 1.6rem; } .login-card h1 { margin: 0 0 0.35rem; font-size: 1.55rem; font-weight: 700; } .login-card .sub { margin: 0 0 1.4rem; color: var(--muted); font-size: 0.95rem; } .field { margin-bottom: 0.9rem; } .field label { display: block; margin-bottom: 0.35rem; font-size: 0.9rem; color: var(--muted); } .field input, .field select, .field textarea { width: 100%; border: 1px solid var(--line); background: #fff; border-radius: 12px; padding: 0.7rem 0.85rem; outline: none; } .field input:focus, .field select:focus, .field textarea:focus { border-color: rgba(28, 20, 16, 0.35); box-shadow: 0 0 0 3px rgba(28, 20, 16, 0.08); } .field textarea { min-height: 90px; resize: vertical; } .btn { appearance: none; border: 1px solid transparent; border-radius: 12px; padding: 0.65rem 1rem; background: var(--accent); color: #fffaf6; cursor: pointer; font-weight: 500; } .btn:hover { filter: brightness(1.08); } .btn:disabled { opacity: 0.45; cursor: not-allowed; } .btn-ghost { background: transparent; color: var(--ink); border-color: var(--line); } .btn-danger { background: transparent; color: var(--danger); border-color: rgba(155, 44, 44, 0.35); } .btn-row { display: flex; flex-wrap: wrap; gap: 0.55rem; } .msg { margin: 0.75rem 0 0; padding: 0.65rem 0.8rem; border-radius: 10px; font-size: 0.9rem; } .msg.error { background: rgba(155, 44, 44, 0.1); color: var(--danger); } .msg.ok { background: rgba(31, 107, 74, 0.1); color: var(--ok); } .msg.info { background: rgba(28, 20, 16, 0.06); color: var(--muted); } /* Shell */ .app { display: grid; grid-template-columns: 240px 1fr; min-height: 100vh; } .sidebar { padding: 1.4rem 1rem; border-left: 1px solid var(--line); background: rgba(255, 250, 246, 0.72); backdrop-filter: blur(8px); } .brand { font-weight: 700; font-size: 1.2rem; margin: 0 0.4rem 1.2rem; } .nav-btn { width: 100%; text-align: right; background: transparent; border: 0; border-radius: 10px; padding: 0.7rem 0.8rem; cursor: pointer; color: var(--muted); margin-bottom: 0.2rem; } .nav-btn:hover { background: rgba(28, 20, 16, 0.05); color: var(--ink); } .nav-btn.active { background: var(--ink); color: #fffaf6; } .sidebar-foot { margin-top: 2rem; padding: 0 0.4rem; color: var(--muted); font-size: 0.85rem; } .main { padding: 1.4rem 1.5rem 2.5rem; max-width: 1200px; } .panel-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 1.1rem; flex-wrap: wrap; } .panel-head h2 { margin: 0; font-size: 1.45rem; } .panel-head p { margin: 0.25rem 0 0; color: var(--muted); } .stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.8rem; margin-bottom: 1.2rem; } .stat { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 1rem 1.1rem; box-shadow: var(--shadow); } .stat strong { display: block; font-size: 1.5rem; margin-top: 0.2rem; } .stat span { color: var(--muted); font-size: 0.9rem; } .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 1rem; margin-bottom: 1rem; } .toolbar { display: flex; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 0.9rem; align-items: center; } .toolbar input[type="search"] { flex: 1; min-width: 180px; border: 1px solid var(--line); border-radius: 12px; padding: 0.65rem 0.85rem; background: #fff; } table { width: 100%; border-collapse: collapse; font-size: 0.92rem; } th, td { text-align: right; padding: 0.7rem 0.45rem; border-bottom: 1px solid var(--line); vertical-align: top; } th { color: var(--muted); font-weight: 500; } tr:hover td { background: rgba(28, 20, 16, 0.02); } .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.85rem; direction: ltr; text-align: left; } .badge { display: inline-block; padding: 0.15rem 0.45rem; border-radius: 999px; font-size: 0.75rem; border: 1px solid var(--line); color: var(--muted); } .badge.on { color: var(--ok); border-color: rgba(31, 107, 74, 0.35); } .badge.off { color: var(--danger); border-color: rgba(155, 44, 44, 0.35); } .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.8rem; } .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0.8rem; } .modal-backdrop { position: fixed; inset: 0; background: rgba(28, 20, 16, 0.35); display: grid; place-items: center; padding: 1rem; z-index: 40; } .modal { width: min(920px, 100%); max-height: min(90vh, 900px); overflow: auto; background: #fffaf7; border-radius: 18px; border: 1px solid var(--line); box-shadow: var(--shadow); padding: 1.2rem; } .modal h3 { margin: 0 0 1rem; } .check { display: flex; align-items: center; gap: 0.5rem; margin: 0.6rem 0 1rem; } .variants-box { border: 1px solid var(--line); border-radius: 14px; padding: 0.85rem; background: rgba(255, 255, 255, 0.65); margin: 0.4rem 0 1rem; } .variants-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .variants-head h4 { margin: 0; font-size: 1rem; } .variants-head p { margin: 0.2rem 0 0; color: var(--muted); font-size: 0.85rem; } .variant-list { display: flex; flex-direction: column; gap: 0.7rem; } .variant-card { border: 1px solid var(--line); border-radius: 12px; padding: 0.75rem; background: #fff; } .variant-card-top { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.55rem; } .variant-card-top strong { font-size: 0.92rem; } .variant-swatch { width: 1.1rem; height: 1.1rem; border-radius: 999px; border: 1px solid var(--line); display: inline-block; vertical-align: middle; margin-left: 0.35rem; background: #ddd; } .variant-empty { color: var(--muted); font-size: 0.9rem; margin: 0.2rem 0; } pre.out { background: #1c1410; color: #f7efe8; border-radius: 12px; padding: 0.9rem; overflow: auto; font-size: 0.82rem; direction: ltr; text-align: left; max-height: 280px; } @media (max-width: 900px) { .app { grid-template-columns: 1fr; } .sidebar { border-left: 0; border-bottom: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; } .brand { width: 100%; margin-bottom: 0.4rem; } .nav-btn { width: auto; } .sidebar-foot { display: none; } .stats, .grid-2, .grid-3 { grid-template-columns: 1fr; } table { display: block; overflow-x: auto; } }