"0.75rem", // Top KPI card values "kpi_value" => "2.0rem", // Middle "최근 센서 데이터" values "mid_value" => "1.0rem", // Status stream (Activity) "status_title" => "1.0rem", "status_text" => "0.85rem", // Recent list/table "list_header" => "0.9rem", "list_value" => "0.95rem", // Yesterday max/min badge "yday_badge" => "0.85rem", ]; $NS20_FONTS = $__NS20_FONTS_DEFAULT; // Load saved if (is_file($__NS20_FONT_JSON)) { $raw = @file_get_contents($__NS20_FONT_JSON); $j = json_decode($raw, true); if (is_array($j)) { foreach ($j as $k=>$v) { if (isset($NS20_FONTS[$k]) && is_string($v) && trim($v) !== "") { $NS20_FONTS[$k] = trim($v); } } } } // If included from another file, don't render any HTML $__is_direct = true; if (isset($_SERVER["SCRIPT_FILENAME"])) { $__is_direct = (basename($_SERVER["SCRIPT_FILENAME"]) === "font_config.html"); } if (!$__is_direct) { return; } ns20_auth_require_page_access('font_config'); $__msg = ""; if ($_SERVER["REQUEST_METHOD"] === "POST") { $next = $NS20_FONTS; foreach ($next as $k=>$old) { if (isset($_POST[$k])) { $v = trim((string)$_POST[$k]); if ($v !== "") $next[$k] = $v; } } $ok = @file_put_contents( $__NS20_FONT_JSON, json_encode($next, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) ); if ($ok === false) $__msg = "❌ 저장 실패: inc 디렉토리 쓰기 권한을 확인하세요 (font_config.json)"; else $__msg = "✅ 저장 완료"; $NS20_FONTS = $next; } ?>
2.0rem, 18px, 110%/inc/font_config.json 파일로 이루어집니다. (서버 쓰기 권한 필요)