Plugin Directory

Changeset 3414465


Ignore:
Timestamp:
12/08/2025 03:03:10 PM (3 months ago)
Author:
anyapi
Message:

Update trunk to version 1.1.4

Location:
anyapi/trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • anyapi/trunk/anyapi.php

    r3394506 r3414465  
    99 * Plugin URI:        https://www.anyapiplugin.com
    1010 * Description:       No-Code WooCommerce REST API Integration. Connect Orders to any APIs with Automations, JSON Filter, API logs, and Easy Setup in Minutes.
    11  * Version:           1.1.3
     11 * Version:           1.1.4
    1212 * Author:            JC
    1313 * Author URI:        https://www.anyapiplugin.com
     
    2222if ( ! function_exists( 'add_action' ) ) { exit; }
    2323
    24 define( 'ANYAPI_VERSION', '1.1.3' );
     24define( 'ANYAPI_VERSION', '1.1.4' );
    2525define( 'ANYAPI_ASSETS', '1.0.0' );
    2626
  • anyapi/trunk/assets/css/style.css

    r3394506 r3414465  
    10501050  }
    10511051}
     1052:root {
     1053  --anyapi-bg: #f6f7f7;
     1054  --anyapi-card: #fff;
     1055  --anyapi-primary: #5d5fef;
     1056  --anyapi-primary-hover: #4c4ddc;
     1057  --anyapi-text: #1a1a2e;
     1058  --anyapi-success: #00c48c;
     1059  --anyapi-danger: #ff6b6b;
     1060}
     1061.dark-mode {
     1062  --anyapi-bg: #0f1121;
     1063  --anyapi-card: #161827;
     1064  --anyapi-primary: #7b7cff;
     1065  --anyapi-primary-hover: #9697ff;
     1066  --anyapi-text: ##b2b2fa;
     1067  --anyapi-success: #00d4a0;
     1068  --anyapi-danger: #ff6b9d;
     1069}
     1070#anyapi-review-banner {
     1071  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     1072  color: white;
     1073  padding: 20px 30px;
     1074  border-radius: 20px;
     1075  margin: 30px 0;
     1076  box-shadow: 0 20px 40px rgba(102, 126, 234, 0.3),
     1077    0 10px 20px rgba(118, 75, 162, 0.2);
     1078  position: relative;
     1079  overflow: hidden;
     1080  animation: slideDown 0.6s ease-out;
     1081}
     1082#anyapi-review-banner::before {
     1083  content: "";
     1084  position: absolute;
     1085  top: 0;
     1086  left: -100%;
     1087  width: 100%;
     1088  height: 100%;
     1089  background: linear-gradient(
     1090    90deg,
     1091    transparent,
     1092    rgba(255, 255, 255, 0.1),
     1093    transparent
     1094  );
     1095  animation: shimmer 3s infinite;
     1096}
     1097.review-content {
     1098  display: flex;
     1099  align-items: center;
     1100  gap: 20px;
     1101  max-width: 1000px;
     1102  margin: 0 auto;
     1103}
     1104.review-icon {
     1105  font-size: 32px;
     1106  animation: float 3s ease-in-out infinite;
     1107}
     1108.review-text h3 {
     1109  margin: 0 0 4px 0;
     1110  font-size: 22px;
     1111  font-weight: 700;
     1112}
     1113.review-text p {
     1114  margin: 0 0 8px 0;
     1115  opacity: 0.9;
     1116  font-size: 16px;
     1117}
     1118.review-stars {
     1119  font-size: 20px;
     1120  margin-top: 4px;
     1121  animation: sparkle 2s ease-in-out infinite;
     1122}
     1123.review-actions {
     1124  display: flex;
     1125  gap: 12px;
     1126  margin-left: auto;
     1127}
     1128.review-actions .button {
     1129  padding: 12px 24px !important;
     1130  font-weight: 600 !important;
     1131  border-radius: 12px !important;
     1132  transition: all 0.3s ease !important;
     1133}
     1134.review-actions .button-primary {
     1135  background: #fff !important;
     1136  color: #667eea !important;
     1137  box-shadow: 0 8px 20px rgba(255, 255, 255, 0.3) !important;
     1138}
     1139.review-actions .button-primary:hover {
     1140  transform: translateY(-2px);
     1141  box-shadow: 0 12px 30px rgba(255, 255, 255, 0.4) !important;
     1142}
     1143.review-close {
     1144  position: absolute;
     1145  top: 12px;
     1146  right: 20px;
     1147  background: none;
     1148  border: none;
     1149  color: rgba(255, 255, 255, 0.8);
     1150  font-size: 24px;
     1151  width: 32px;
     1152  height: 32px;
     1153  border-radius: 50%;
     1154  cursor: pointer;
     1155  transition: all 0.3s ease;
     1156}
     1157.review-close:hover {
     1158  background: rgba(255, 255, 255, 0.2);
     1159  color: white;
     1160  transform: rotate(90deg);
     1161}
     1162@keyframes slideDown {
     1163  from {
     1164    opacity: 0;
     1165    transform: translateY(-30px);
     1166  }
     1167  to {
     1168    opacity: 1;
     1169    transform: translateY(0);
     1170  }
     1171}
     1172@keyframes shimmer {
     1173  0% {
     1174    left: -100%;
     1175  }
     1176  100% {
     1177    left: 100%;
     1178  }
     1179}
     1180@keyframes float {
     1181  0%,
     1182  100% {
     1183    transform: translateY(0px);
     1184  }
     1185  50% {
     1186    transform: translateY(-10px);
     1187  }
     1188}
     1189@keyframes sparkle {
     1190  0%,
     1191  100% {
     1192    opacity: 1;
     1193  }
     1194  50% {
     1195    opacity: 0.7;
     1196  }
     1197}
     1198@media (max-width: 768px) {
     1199  .review-content {
     1200    flex-direction: column;
     1201    text-align: center;
     1202    gap: 16px;
     1203  }
     1204  .review-actions {
     1205    margin-left: 0 !important;
     1206    justify-content: center;
     1207    flex-wrap: wrap;
     1208  }
     1209}
     1210#anyapi-dashboard {
     1211  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
     1212  background: var(--anyapi-bg);
     1213  min-height: 80vh;
     1214  padding: 20px;
     1215  border-radius: 8px;
     1216}
     1217#anyapi-last-updated {
     1218  font-size: 13px;
     1219  color: #646970;
     1220  margin-top: 10px;
     1221  margin-left: 15px;
     1222  white-space: nowrap;
     1223  float: right;
     1224}
     1225.anyapi-main-grid {
     1226  display: grid;
     1227  grid-template-columns: 1fr 320px;
     1228  gap: 30px;
     1229  margin-top: 20px;
     1230}
     1231@media (max-width: 1200px) {
     1232  .anyapi-main-grid {
     1233    grid-template-columns: 1fr;
     1234  }
     1235  .anyapi-sidebar {
     1236    order: -1;
     1237  }
     1238}
     1239.anyapi-grid {
     1240  display: grid;
     1241  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
     1242  gap: 20px;
     1243  margin-bottom: 30px;
     1244}
     1245.anyapi-card {
     1246  background: var(--anyapi-card);
     1247  padding: 24px;
     1248  border-radius: 12px;
     1249  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
     1250  transition: transform 0.2s;
     1251}
     1252.anyapi-card:hover {
     1253  transform: translateY(-4px);
     1254}
     1255.anyapi-card h3 {
     1256  margin: 0 0 12px;
     1257  font-size: 14px;
     1258  color: #646970;
     1259  text-transform: uppercase;
     1260  letter-spacing: 0.5px;
     1261}
     1262.anyapi-card .value {
     1263  font-size: 32px;
     1264  font-weight: 700;
     1265  color: #1d2327;
     1266  margin: 8px 0 0;
     1267}
     1268.anyapi-card .change {
     1269  font-size: 14px;
     1270}
     1271.positive {
     1272  color: var(--anyapi-success);
     1273}
     1274.warning {
     1275  color: #dba617;
     1276}
     1277.negative {
     1278  color: var(--anyapi-danger);
     1279}
     1280.anyapi-charts-row {
     1281  display: grid;
     1282  grid-template-columns: 2fr 1fr;
     1283  gap: 20px;
     1284  margin-bottom: 30px;
     1285}
     1286@media (max-width: 960px) {
     1287  .anyapi-charts-row {
     1288    grid-template-columns: 1fr;
     1289  }
     1290}
     1291.anyapi-chart-card {
     1292  background: var(--anyapi-card);
     1293  padding: 24px;
     1294  border-radius: 12px;
     1295  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
     1296}
     1297.anyapi-chart-card h2 {
     1298  margin-top: 0;
     1299  font-size: 18px;
     1300}
     1301#anyapi-logs-section {
     1302  background: var(--anyapi-card);
     1303  border-radius: 12px;
     1304  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
     1305  overflow: hidden;
     1306}
     1307#anyapi-logs-header {
     1308  padding: 20px 24px;
     1309  border-bottom: 1px solid #e2e4e7;
     1310  display: flex;
     1311  justify-content: space-between;
     1312  align-items: center;
     1313}
     1314#anyapi-logs-section .logs-controls {
     1315  display: flex;
     1316  gap: 12px;
     1317  align-items: center;
     1318}
     1319#anyapi-log-search {
     1320  padding: 10px 16px;
     1321  border: 1px solid #ddd;
     1322  border-radius: 12px;
     1323  width: 300px;
     1324  max-width: 100%;
     1325}
     1326.method-post {
     1327  background: #7c3aed;
     1328  color: white;
     1329  padding: 4px 10px;
     1330  border-radius: 8px;
     1331  font-size: 11px;
     1332  font-weight: bold;
     1333}
     1334.status-badge {
     1335  padding: 4px 10px;
     1336  border-radius: 8px;
     1337  font-weight: bold;
     1338  font-size: 12px;
     1339}
     1340.status-badge.success {
     1341  background: #10b981;
     1342  color: white;
     1343}
     1344.status-badge.warning {
     1345  background: #f59e0b;
     1346  color: white;
     1347}
     1348.status-badge.error {
     1349  background: #ef4444;
     1350  color: white;
     1351}
     1352.endpoint code {
     1353  font-size: 12px;
     1354  background: #f3f4f6;
     1355  padding: 2px 6px;
     1356  border-radius: 4px;
     1357}
     1358.payload pre {
     1359  margin: 0;
     1360  font-size: 11px;
     1361  color: #666;
     1362  white-space: pre-wrap;
     1363  word-break: break-all;
     1364}
     1365#anyapi-logs-footer {
     1366  display: flex;
     1367  justify-content: space-between;
     1368  margin-top: 16px;
     1369  font-size: 14px;
     1370  color: #666;
     1371}
     1372#anyapi-log-search {
     1373  padding: 8px 12px;
     1374  border: 1px solid #ddd;
     1375  border-radius: 6px;
     1376  width: 300px;
     1377}
     1378#anyapi-logs-table {
     1379  width: 100%;
     1380  border-collapse: collapse;
     1381}
     1382#anyapi-logs-table th {
     1383  background: #f9fafb;
     1384  text-align: left;
     1385  padding: 12px 16px;
     1386  font-weight: 600;
     1387  color: #1d2327;
     1388}
     1389#anyapi-logs-table td {
     1390  padding: 12px 16px;
     1391  border-top: 1px solid #e2e4e7;
     1392  font-size: 14px;
     1393}
     1394.status-2xx {
     1395  color: var(--anyapi-success);
     1396}
     1397.status-4xx {
     1398  color: var(--anyapi-danger);
     1399}
     1400.status-5xx {
     1401  color: var(--anyapi-danger);
     1402  font-weight: bold;
     1403}
     1404.payload {
     1405  font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace;
     1406  font-size: 12px;
     1407  color: #646970;
     1408  max-width: 300px;
     1409  overflow: hidden;
     1410  text-overflow: ellipsis;
     1411  white-space: nowrap;
     1412}
     1413.loading {
     1414  text-align: center;
     1415  padding: 60px;
     1416  font-size: 18px;
     1417  color: #646970;
     1418}
     1419.anyapi-sidebar {
     1420  display: flex;
     1421  flex-direction: column;
     1422  gap: 20px;
     1423}
     1424.anyapi-sidebar-card {
     1425  background: var(--anyapi-card);
     1426  padding: 20px;
     1427  border-radius: 12px;
     1428  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
     1429  border: 1px solid #e2e4e7;
     1430}
     1431.anyapi-sidebar-card h3 {
     1432  margin: 0 0 12px;
     1433  font-size: 16px;
     1434  color: #1d2327;
     1435}
     1436.dashicons-yes-alt {
     1437  color: #00a32a;
     1438}
     1439.dashicons-warning {
     1440  color: #dba617;
     1441}
     1442.dashicons-update {
     1443  color: #f56e14;
     1444  animation: anyapi-spin 2s linear infinite;
     1445}
     1446.anyapi-new-version-notice {
     1447  font-size: 12px;
     1448  color: #d63638;
     1449  font-weight: bold;
     1450  margin: 8px 0 4px;
     1451}
     1452.anyapi-new-version-notice small {
     1453  font-weight: normal;
     1454  color: #666;
     1455}
     1456.anyapi-update-box {
     1457  margin: 10px 0;
     1458  padding: 12px;
     1459  background: #fff8e5;
     1460  border-left: 4px solid #ffb900;
     1461  font-size: 11px;
     1462  line-height: 1.4;
     1463}
     1464.anyapi-update-box strong {
     1465  font-size: 11px;
     1466  display: block;
     1467  margin-bottom: 4px;
     1468}
     1469.anyapi-update-box ul {
     1470  margin: 6px 0 8px;
     1471  padding-left: 18px;
     1472  line-height: 1.4;
     1473}
     1474.anyapi-update-box ul li {
     1475  margin-bottom: 2px;
     1476}
     1477.anyapi-update-box .anyapi-update-button {
     1478  background: #d63638;
     1479  border-color: #d63638;
     1480  box-shadow: none;
     1481  text-shadow: none;
     1482  color: #fff !important;
     1483}
     1484.anyapi-update-box .anyapi-update-button:hover,
     1485.anyapi-update-box .anyapi-update-button:focus {
     1486  background: #c02a2a;
     1487  border-color: #c02a2a;
     1488}
     1489.anyapi-update-box .anyapi-view-details {
     1490  margin-left: 8px;
     1491  font-size: 10px;
     1492  color: #666;
     1493}
     1494.anyapi-update-box .anyapi-view-details:hover {
     1495  color: #d63638;
     1496}
     1497.anyapi-latest-text {
     1498  font-size: 12px;
     1499  color: #646970;
     1500}
     1501@keyframes anyapi-spin {
     1502  from {
     1503    transform: rotate(0deg);
     1504  }
     1505  to {
     1506    transform: rotate(360deg);
     1507  }
     1508}
     1509.anyapi-upgrade {
     1510  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     1511  color: white;
     1512  position: relative;
     1513  overflow: hidden;
     1514}
     1515.anyapi-upgrade::before {
     1516  content: "";
     1517  position: absolute;
     1518  top: -50%;
     1519  right: -50%;
     1520  width: 200%;
     1521  height: 200%;
     1522  background: rgba(255, 255, 255, 0.1);
     1523  transform: rotate(30deg);
     1524}
     1525.anyapi-upgrade h3,
     1526.anyapi-upgrade p,
     1527.anyapi-upgrade li {
     1528  color: white;
     1529}
     1530.anyapi-upgrade .badge {
     1531  position: absolute;
     1532  top: 12px;
     1533  right: 12px;
     1534  background: #ffb900;
     1535  color: #000;
     1536  padding: 4px 10px;
     1537  border-radius: 20px;
     1538  font-size: 11px;
     1539  font-weight: bold;
     1540}
     1541.anyapi-upgrade .features {
     1542  margin: 16px 0;
     1543  padding-left: 20px;
     1544}
     1545.anyapi-upgrade .features li {
     1546  margin-bottom: 8px;
     1547  position: relative;
     1548}
     1549.anyapi-upgrade .features li::before {
     1550  content: "✓";
     1551  position: absolute;
     1552  left: -20px;
     1553}
     1554.anyapi-upgrade .button-primary {
     1555  background: white;
     1556  color: #667eea;
     1557  font-weight: bold;
     1558}
     1559.anyapi-button-block {
     1560  display: block;
     1561  text-align: center;
     1562}
     1563.anyapi-save {
     1564  text-align: center;
     1565  margin-top: 12px;
     1566  font-size: 14px;
     1567  opacity: 0.9;
     1568}
     1569.anyapi-quick-links {
     1570  list-style: none;
     1571  padding: 0;
     1572  margin: 0;
     1573}
     1574.anyapi-quick-links li {
     1575  margin-bottom: 8px;
     1576}
     1577.anyapi-quick-links a {
     1578  color: #0073aa;
     1579  text-decoration: none;
     1580}
     1581.anyapi-quick-links a:hover {
     1582  text-decoration: underline;
     1583}
     1584.anyapi-bottom-grid {
     1585  display: grid;
     1586  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
     1587  gap: 20px;
     1588  margin-top: 40px;
     1589}
     1590.anyapi-info-card {
     1591  background: var(--anyapi-card);
     1592  padding: 24px;
     1593  border-radius: 12px;
     1594  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
     1595  border: 1px solid #e2e4e7;
     1596  text-align: center;
     1597}
     1598.anyapi-info-card h3 {
     1599  margin: 0 0 12px;
     1600  color: #1d2327;
     1601}
     1602.anyapi-info-card p {
     1603  color: #646970;
     1604  margin-bottom: 20px;
     1605  line-height: 1.5;
     1606}
     1607.anyapi-info-card .button {
     1608  width: 100%;
     1609}
     1610#anyapi-dashboard-header {
     1611  position: relative;
     1612  display: flex;
     1613  justify-content: space-between;
     1614  align-items: center;
     1615  min-height: 64px;
     1616  padding: 0 24px;
     1617  margin-bottom: 28px;
     1618  flex-wrap: wrap;
     1619  gap: 16px;
     1620}
     1621.anyapi-header-left {
     1622  display: flex;
     1623  align-items: center;
     1624  gap: 12px;
     1625}
     1626.anyapi-logo {
     1627  height: 40px;
     1628  width: auto;
     1629}
     1630.anyapi-logo svg {
     1631  border-radius: 8px;
     1632  transition: transform 0.2s;
     1633}
     1634.anyapi-logo:hover svg {
     1635  transform: scale(1.08);
     1636}
     1637.anyapi-header-right {
     1638  position: absolute;
     1639  right: 20px;
     1640  top: 50%;
     1641  transform: translateY(-50%);
     1642}
     1643@media (max-width: 782px) {
     1644  #anyapi-dashboard-header {
     1645    padding: 0 16px;
     1646  }
     1647  .anyapi-header-right {
     1648    right: 16px;
     1649  }
     1650}
     1651#dark-mode-toggle {
     1652  position: relative;
     1653  width: 56px;
     1654  height: 28px;
     1655  background: #ccd0d5;
     1656  border-radius: 50px;
     1657  border: none;
     1658  cursor: pointer;
     1659  overflow: hidden;
     1660  transition: background 0.3s;
     1661}
     1662#dark-mode-toggle .toggle-ball {
     1663  position: absolute;
     1664  top: 4px;
     1665  left: 4px;
     1666  width: 20px;
     1667  height: 20px;
     1668  background: white;
     1669  border-radius: 50%;
     1670  transition: transform 0.3s;
     1671  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
     1672}
     1673#dark-mode-toggle .sun-icon,
     1674#dark-mode-toggle .moon-icon {
     1675  position: absolute;
     1676  top: 6px;
     1677  font-size: 14px;
     1678  transition: opacity 0.3s;
     1679}
     1680#dark-mode-toggle .sun-icon {
     1681  left: 8px;
     1682  opacity: 1;
     1683}
     1684#dark-mode-toggle .moon-icon {
     1685  right: 8px;
     1686  opacity: 0;
     1687}
     1688.dark-mode #dark-mode-toggle {
     1689  background: #6366f1;
     1690}
     1691.dark-mode #dark-mode-toggle .toggle-ball {
     1692  transform: translateX(28px);
     1693}
     1694.dark-mode #dark-mode-toggle .sun-icon {
     1695  opacity: 0;
     1696}
     1697.dark-mode #dark-mode-toggle .moon-icon {
     1698  opacity: 1;
     1699}
     1700.dark-mode {
     1701  background: #1e1e1e;
     1702  color: #e0e0e0;
     1703}
     1704.dark-mode #anyapi-dashboard,
     1705.dark-mode .anyapi-card,
     1706.dark-mode .chart-card,
     1707.dark-mode #logs-section,
     1708.dark-mode .anyapi-sidebar-card,
     1709.dark-mode .anyapi-info-card {
     1710  background: #2d2d2d;
     1711  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
     1712  border-color: #444;
     1713}
     1714.dark-mode .anyapi-card h3,
     1715.dark-mode .chart-card h2,
     1716.dark-mode #logs-table th,
     1717.dark-mode .anyapi-info-card h3 {
     1718  color: #a0a0a0;
     1719}
     1720.dark-mode .value,
     1721.dark-mode #logs-table td {
     1722  color: var(--anyapi-text);
     1723}
     1724.dark-mode #logs-table th {
     1725  background: #363636;
     1726}
     1727.dark-mode .status-2xx {
     1728  color: var(--anyapi-success);
     1729}
     1730.dark-mode .status-4xx,
     1731.dark-mode .status-5xx {
     1732  color: var(--anyapi-danger);
     1733}
     1734:root {
     1735  --anyapi-purple: #7b68ee;
     1736  --anyapi-gray-light: #f8f9fa;
     1737  --anyapi-gray: #6c757d;
     1738}
     1739.dark-mode {
     1740  --anyapi-purple: #a78bfa;
     1741  --anyapi-gray-light: #2d3748;
     1742  --anyapi-gray: #a0aec0;
     1743}
     1744.integration-main {
     1745  display: grid;
     1746  grid-template-columns: 200px 1fr;
     1747  gap: 30px;
     1748  margin: 20px 0;
     1749}
     1750.steps-sidebar {
     1751  background: var(--anyapi-card);
     1752  border-radius: 12px;
     1753  padding: 20px;
     1754  height: -moz-fit-content;
     1755  height: fit-content;
     1756}
     1757.step-item {
     1758  display: flex;
     1759  align-items: center;
     1760  gap: 12px;
     1761  padding: 12px 0;
     1762  cursor: pointer;
     1763  transition: color 0.3s;
     1764}
     1765.step-item.active .step-number {
     1766  background: var(--anyapi-purple);
     1767  color: white;
     1768}
     1769.step-number {
     1770  width: 32px;
     1771  height: 32px;
     1772  border-radius: 50%;
     1773  background: var(--anyapi-gray-light);
     1774  display: grid;
     1775  place-items: center;
     1776  font-weight: bold;
     1777}
     1778.step-label {
     1779  font-size: 14px;
     1780  color: var(--anyapi-text-muted);
     1781}
     1782.integration-content {
     1783  position: relative;
     1784}
     1785.step-content {
     1786  display: none;
     1787  animation: fadeIn 0.3s;
     1788}
     1789.step-content.active {
     1790  display: block;
     1791}
     1792@keyframes fadeIn {
     1793  from {
     1794    opacity: 0;
     1795    transform: translateX(10px);
     1796  }
     1797  to {
     1798    opacity: 1;
     1799    transform: translateX(0);
     1800  }
     1801}
     1802.form-group {
     1803  margin-bottom: 24px;
     1804}
     1805.form-group label {
     1806  display: block;
     1807  margin-bottom: 8px;
     1808  font-weight: 600;
     1809  color: var(--anyapi-text);
     1810}
     1811.form-group input,
     1812.form-group select,
     1813.form-group textarea {
     1814  width: 100%;
     1815  padding: 12px;
     1816  border: 1px solid var(--anyapi-border);
     1817  border-radius: 8px;
     1818  background: var(--anyapi-card);
     1819  transition: border-color 0.3s;
     1820}
     1821.form-group input:focus,
     1822.form-group select:focus,
     1823.form-group textarea:focus {
     1824  outline: none;
     1825  border-color: var(--anyapi-primary);
     1826}
     1827.required {
     1828  color: var(--anyapi-danger);
     1829}
     1830.help-text {
     1831  color: var(--anyapi-text-muted);
     1832  font-size: 12px;
     1833}
     1834.filter-mode-toggle {
     1835  display: flex;
     1836  gap: 8px;
     1837  margin: 12px 0;
     1838}
     1839.mode-btn {
     1840  padding: 8px 16px;
     1841  border: 1px solid var(--anyapi-border);
     1842  background: var(--anyapi-card);
     1843  border-radius: 6px;
     1844  cursor: pointer;
     1845}
     1846.mode-btn.active {
     1847  background: var(--anyapi-primary);
     1848  color: white;
     1849  border-color: var(--anyapi-primary);
     1850}
     1851.json-preview {
     1852  background: #1e1e1e;
     1853  border-radius: 8px;
     1854  padding: 16px;
     1855  margin: 16px 0;
     1856  overflow: auto;
     1857}
     1858.json-preview pre {
     1859  margin: 0;
     1860  color: #f8f8f2;
     1861  font-family: "Courier New", monospace;
     1862  font-size: 14px;
     1863}
     1864.actions-grid {
     1865  display: grid;
     1866  grid-template-columns: 1fr 1fr;
     1867  gap: 20px;
     1868  margin-bottom: 24px;
     1869}
     1870.action-card {
     1871  background: var(--anyapi-card);
     1872  padding: 20px;
     1873  border-radius: 12px;
     1874  border: 1px solid var(--anyapi-border);
     1875}
     1876.action-card h3 {
     1877  margin-top: 0;
     1878  color: var(--anyapi-text);
     1879}
     1880.action-card label {
     1881  display: block;
     1882  margin: 8px 0;
     1883  cursor: pointer;
     1884}
     1885.integration-footer {
     1886  display: flex;
     1887  justify-content: flex-end;
     1888  gap: 12px;
     1889  padding: 20px 0;
     1890  border-top: 1px solid var(--anyapi-border);
     1891}
     1892.preview-json-btn {
     1893  background: var(--anyapi-danger);
     1894  color: white;
     1895}
     1896@media (max-width: 960px) {
     1897  .integration-main {
     1898    grid-template-columns: 1fr;
     1899  }
     1900  .steps-sidebar {
     1901    order: -1;
     1902    display: flex;
     1903    justify-content: center;
     1904  }
     1905  .step-item {
     1906    flex-direction: column;
     1907    text-align: center;
     1908  }
     1909  .actions-grid {
     1910    grid-template-columns: 1fr;
     1911  }
     1912}
     1913#anyapi-status {
     1914  background: var(--anyapi-bg);
     1915  min-height: 100vh;
     1916}
     1917.anyapi-notice.success {
     1918  background: linear-gradient(90deg, #10b981 0%, #34d399 100%);
     1919  color: white;
     1920  padding: 16px 24px;
     1921  border-radius: 12px;
     1922  font-weight: 600;
     1923  display: flex;
     1924  align-items: center;
     1925  justify-content: space-between;
     1926  margin: 20px 0;
     1927  box-shadow: 0 4px 20px rgba(16, 185, 129, 0.2);
     1928}
     1929.notice-actions {
     1930  display: flex;
     1931  gap: 8px;
     1932}
     1933.integration-card {
     1934  background: var(--anyapi-card);
     1935  border: 1px solid var(--anyapi-border);
     1936  border-radius: 16px;
     1937  overflow: hidden;
     1938  margin: 30px 0;
     1939  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
     1940}
     1941.integration-row {
     1942  display: grid;
     1943  grid-template-columns: 100px 1fr 120px 1fr 100px 1fr;
     1944  gap: 16px;
     1945  padding: 24px;
     1946  align-items: center;
     1947  flex-wrap: wrap;
     1948}
     1949@media (max-width: 1280px) {
     1950  .integration-row {
     1951    grid-template-columns: 1fr 1fr;
     1952    gap: 20px;
     1953  }
     1954}
     1955@media (max-width: 782px) {
     1956  .integration-row {
     1957    grid-template-columns: 1fr;
     1958    text-align: center;
     1959  }
     1960}
     1961.badge {
     1962  padding: 8px 16px;
     1963  border-radius: 50px;
     1964  font-size: 13px;
     1965  font-weight: 700;
     1966  text-align: center;
     1967  white-space: nowrap;
     1968}
     1969.badge.purple {
     1970  background: #7b68ee;
     1971  color: white;
     1972}
     1973.badge.gray {
     1974  background: #e2e8f0;
     1975  color: #475569;
     1976}
     1977.code-snippet {
     1978  background: #1e1e1e;
     1979  color: #a6e22e;
     1980  padding: 12px 16px;
     1981  border-radius: 12px;
     1982  font-family: "SFMono-Regular", Consolas, monospace;
     1983  font-size: 13px;
     1984  overflow: hidden;
     1985  text-overflow: ellipsis;
     1986  white-space: nowrap;
     1987  max-width: 100%;
     1988}
     1989.dark-mode .code-snippet {
     1990  background: #2d2d2d;
     1991  color: #89ddff;
     1992}
     1993.status-action {
     1994  text-align: center;
     1995  margin: 40px 0;
     1996}
     1997.button-warning {
     1998  background: #f59e0b !important;
     1999  color: white !important;
     2000  padding: 14px 32px !important;
     2001  font-size: 16px;
     2002  border-radius: 12px;
     2003}
     2004.status-footer {
     2005  text-align: center;
     2006  margin: 60px 0 20px;
     2007}
     2008.dark-mode .anyapi-notice.success {
     2009  background: linear-gradient(90deg, #059669 0%, #10b981 100%);
     2010}
     2011.dark-mode .integration-card {
     2012  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
     2013}
     2014.completion-wrapper {
     2015  text-align: center;
     2016  max-width: 900px;
     2017  margin: 0 auto;
     2018  padding: 20px;
     2019}
     2020.completion-header h2 {
     2021  font-size: 28px;
     2022  margin: 16px 0;
     2023  color: var(--anyapi-text);
     2024}
     2025.success-icon {
     2026  font-size: 64px;
     2027  color: #10b981;
     2028}
     2029.completion-actions {
     2030  margin: 30px 0;
     2031  display: flex;
     2032  gap: 12px;
     2033  justify-content: center;
     2034  flex-wrap: wrap;
     2035}
     2036.integration-card.standalone {
     2037  margin: 40px auto;
     2038  max-width: 100%;
     2039}
     2040.final-cta {
     2041  margin: 50px 0;
     2042}
     2043.button-hero {
     2044  padding: 18px 40px !important;
     2045  font-size: 18px !important;
     2046  border-radius: 16px;
     2047  box-shadow: 0 8px 25px rgba(245, 158, 11, 0.4);
     2048}
     2049.completion-footer {
     2050  margin-top: 60px;
     2051  display: flex;
     2052  gap: 20px;
     2053  justify-content: center;
     2054  flex-wrap: wrap;
     2055}
     2056.test-api-section {
     2057  margin: 50px auto;
     2058  text-align: center;
     2059}
     2060.button-success {
     2061  background: linear-gradient(135deg, #10b981, #34d399) !important;
     2062  color: white !important;
     2063  border: none;
     2064  padding: 18px 40px !important;
     2065  font-size: 18px;
     2066  border-radius: 16px;
     2067  box-shadow: 0 10px 30px rgba(16, 185, 129, 0.4);
     2068  transition: all 0.3s;
     2069}
     2070.button-success:hover {
     2071  transform: translateY(-3px);
     2072  box-shadow: 0 15px 40px rgba(16, 185, 129, 0.5);
     2073}
     2074.button-success.loading {
     2075  opacity: 0.7;
     2076  cursor: not-allowed;
     2077  position: relative;
     2078}
     2079.button-success.loading::after {
     2080  content: "";
     2081  position: absolute;
     2082  width: 20px;
     2083  height: 20px;
     2084  border: 3px solid #fff;
     2085  border-top-color: transparent;
     2086  border-radius: 50%;
     2087  animation: spin 1s linear infinite;
     2088  right: 20px;
     2089}
     2090@keyframes spin {
     2091  to {
     2092    transform: rotate(360deg);
     2093  }
     2094}
     2095.test-result {
     2096  margin-top: 30px;
     2097  padding: 20px;
     2098  border-radius: 12px;
     2099  font-family: "SFMono-Regular", monospace;
     2100  font-size: 14px;
     2101  text-align: left;
     2102  max-width: 800px;
     2103  margin-left: auto;
     2104  margin-right: auto;
     2105  border: 1px solid;
     2106}
     2107.test-result.success {
     2108  background: #ecfdf5;
     2109  border-color: #10b981;
     2110  color: #065f46;
     2111}
     2112.test-result.error {
     2113  background: #fee2e2;
     2114  border-color: #ef4444;
     2115  color: #991b1b;
     2116}
     2117.dark-mode .test-result.success {
     2118  background: #064e3b;
     2119  color: #86efac;
     2120}
     2121.dark-mode .test-result.error {
     2122  background: #7f1d1d;
     2123  color: #fca5a5;
     2124}
    10522125
    10532126/*# sourceMappingURL=style.css.map */
  • anyapi/trunk/assets/css/style.css.map

    r3394506 r3414465  
    1 {"version":3,"sources":["modules/tabs.scss","modules/button.scss","modules/checkbox.scss","modules/table.scss","modules/form.scss","modules/features.scss","modules/pretty.scss","modules/general.scss","modules/desert.scss"],"names":[],"mappings":"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","file":"style.css","sourcesContent":[".nav-tabs,\n.nav-tabs-tools,\n.nav-tabs-filter,\n.nav-tabs-api,\n.nav-tabs-apiauth {\n  float: left;\n  width: 100%;\n  margin: 0;\n  list-style-type: none;\n  border-bottom: 1px solid transparent;\n\n  > li {\n    float: left;\n    margin-bottom: -1px;\n\n    > a {\n      margin-right: 2px;\n      line-height: 1.5;\n      padding: 10px;\n      border: 1px solid transparent;\n      border-radius: 4px 4px 0 0;\n      float: left;\n      text-decoration: none;\n\n      &:hover {\n        border-color: #eee #eee #ddd;\n      }\n    }\n\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: #555;\n        cursor: default;\n        background-color: #fff;\n        border-color: transparent;\n      }\n    }\n  }\n}\n\n.tab-content > .tab-pane,\n.tab-content-tools > .tab-pane-tools {\n  float: left;\n  width: 98%;\n  display: none;\n\n  &.active {\n    display: block;\n    padding: 10px;\n    background-color: #fff;\n    box-shadow: 0 5px 4px -2px rgba(0, 0, 0, 0.15);\n  }\n}\n\n#top-btn {\n  display: none;\n  position: fixed;\n  bottom: 20px;\n  right: 30px;\n  z-index: 99;\n  font-size: 18px;\n  border: none;\n  outline: none;\n  background-color: purple;\n  color: white;\n  cursor: pointer;\n  padding: 15px;\n  border-radius: 4px;\n}\n\n#top-btn:hover {\n  background-color: #555;\n}\n","/**************************/\n/* Tags */\n/**************************/\n\n.tag {\n  display: inline-block;\n  text-decoration: none;\n  padding: 0.4rem 0.8rem; /* 0.4 0.8*/\n  font-size: 0.9rem; /* 1.2 */\n  color: none;\n  border-radius: 100px;\n  font-weight: 300;\n}\n\n.tag.small {\n  font-size: 0.8rem;\n  border-radius: 3px;\n  font-weight: 300;\n}\n\n.tag.medium {\n  font-size: 0.9rem;\n  border-radius: 15px;\n  font-weight: 300;\n}\n\n.tag.large {\n  font-size: 1.4rem;\n  border-radius: 15px;\n  font-weight: 400;\n}\n\n.tag.step {\n  font-size: 1.2rem;\n  border-radius: 50px;\n  font-weight: 500;\n}\n\n.tag.uppercase {\n  text-transform: uppercase;\n}\n\n/* Basic */\n.tag--woo {\n  color: #eee;\n  background-color: rgb(108, 59, 164);\n}\n\n.tag--woorev {\n  color: rgb(108, 59, 164);\n  background-color: #eee;\n}\n\n.tag--wooadv {\n  color: #eee;\n  background-color: rgb(218, 179, 254);\n}\n\n.tag--auth {\n  color: #333;\n  background-color: rgb(246, 169, 14);\n}\n\n.tag--attr {\n  color: #333;\n  background-color: rgb(206, 206, 206);\n}\n\n.tag--large {\n  color: #333;\n  background-color: #eee;\n}\n\n/* Attributes */\n.tag--order {\n  color: #eee;\n  background-color: rgb(132, 95, 132);\n}\n\n.tag--billing {\n  color: #333;\n  background-color: rgb(206, 206, 206);\n}\n\n.tag--fields {\n  color: lightblue;\n  background-color: rgb(25, 25, 25);\n}\n\n/* Features */\n.tag--codefree {\n  // background-color: rgb(249, 222, 0);\n  color: #fff;\n  background-color: #11111a;\n}\n\n.tag--secure {\n  color: #fff;\n  background-color: rgb(10, 151, 218);\n}\n\n.tag--notice {\n  // background-color: #dd6413;\n  color: #fff;\n  background-color: #4a4af3;\n}\n\n.tag--new {\n  color: #11111a;\n  background-color: #f34a4a;\n}\n\n.tag--cap {\n  color: #f34a4a;\n  background-color: #11111a;\n}\n\n/* License */\n.tag--disable {\n  color: #fff;\n  background-color: rgb(231, 0, 0);\n}\n\n.tag--enable {\n  color: #fff;\n  background-color: #43aa8b;\n  // background-color: rgb(48, 154, 62);\n}\n\n/**************************/\n/* Dynamic Tags */\n/**************************/\n\n.tag.available:hover {\n  cursor: pointer;\n  opacity: 0.7;\n}\n\n.tag.selected {\n  cursor: pointer;\n  opacity: 0.7;\n}\n\n.tag.disabled {\n  color: white;\n  background-color: #d2d2d2;\n  /* text-decoration: line-through; */\n  pointer-events: none;\n}\n\n.tag.pro {\n  color: #333;\n  background-color: #fdf2e9;\n  cursor: not-allowed;\n}\n\n/* Step */\n.step-tag {\n  color: #eee;\n  background-color: #ccc;\n  cursor: pointer;\n  text-transform: uppercase;\n}\n\n.step-tag.current {\n  background-color: rgb(108, 59, 164);\n}\n\n.order-api-step > .step-pane {\n  display: none;\n  &.active {\n    display: block;\n  }\n}\n\n.notice-tag {\n  color: #eee;\n  background-color: #ccc;\n}\n\n/**************************/\n/* Buttons */\n/**************************/\n\n.btn,\n.btn:link,\n.btn:visited {\n  display: inline-block;\n  text-decoration: none;\n  font-size: 1rem; /* 2 */\n  font-weight: 400;\n  padding: 0.8rem 1.6rem; /* 1.6 3.2 */\n  border-radius: 9px; /* 9 */\n\n  /* default color*/\n  // background-color: #f34a4a;\n  color: #11111a;\n\n  /* Only necessary for .btn */\n  border: none;\n  cursor: pointer;\n  font-family: inherit;\n\n  /* Put transition on original \"state\" */\n  /* transition: background-color 0.3s; */\n  transition: all 0.3s;\n}\n\n.btn.medium {\n  font-size: 0.9rem;\n  font-weight: 400;\n  padding: 0.6rem 1rem;\n}\n\n.btn--full:link,\n.btn--full:visited {\n  // background-color: #e67e22;\n  // color: #fff;\n  background-color: #f34a4a;\n  color: #11111a;\n}\n\n.btn--full:hover,\n.btn--full:active {\n  // background-color: #cf711f;\n  background-color: #11111a;\n  color: #f34a4a;\n}\n\n.btn--full.small {\n  font-size: 0.9rem;\n  border-radius: 26px;\n  font-weight: 500;\n}\n\n.btn--outline:link,\n.btn--outline:visited {\n  // background-color: #fff;\n  background-color: #2f2f48;\n  // color: #555;\n}\n\n.btn--outline:hover,\n.btn--outline:active {\n  // background-color: #fdf2e9;\n  background-color: #11111a;\n  color: #fff;\n\n  // border: 3px solid #fff;\n  /* Trick to add border inside */\n  // box-shadow: inset 0 0 0 3px #fff;\n}\n\n/* Prev Next Save */\n.next-btn,\n.prev-btn,\n.save-btn,\n.back-btn,\n.save-settings {\n  text-align: right;\n  padding: 1px;\n}\n\n.btn-next,\n.btn-prev,\n.btn-save,\n.btn-back {\n  float: right;\n}\n","/* $on: #009eea; */\n$on: rgb(108, 59, 164);\n$bg: #d9cb9e;\n$off: #8c8c8c;\n\n@mixin center {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n@mixin userSelect($value) {\n  -webkit-touch-callout: $value;\n  -webkit-user-select: $value;\n  -khtml-user-select: $value;\n  -moz-user-select: $value;\n  -ms-user-select: $value;\n  user-select: $value;\n}\n\n@mixin ui-toggle($height, $on, $off) {\n  margin: 0;\n  padding: 0;\n\n  input[type=\"checkbox\"] {\n    display: none;\n\n    &:checked + label {\n      border-color: $on;\n      background: $on;\n      box-shadow: inset 0 0 0 #{$height / 2} $on;\n\n      > div {\n        margin-left: $height;\n      }\n    }\n  }\n\n  label {\n    transition: all 200ms ease;\n    display: inline-block;\n    position: relative;\n\n    @include userSelect(none);\n\n    background: $off;\n    box-shadow: inset 0 0 0 0 $on;\n    border: 2px solid $off;\n    border-radius: $height + 2;\n    width: $height * 2;\n    height: $height;\n\n    div {\n      transition: all 200ms ease;\n      background: #ffffff;\n      width: $height;\n      height: $height;\n      border-radius: $height / 2;\n    }\n\n    &:hover,\n    & > div:hover {\n      cursor: pointer;\n    }\n  }\n}\n\ndiv.ui-toggle {\n  @include ui-toggle(16px, $on, $off);\n\n  &.mb-10 {\n    margin-bottom: 10px;\n  }\n}\n",".api-table {\n  width: 100%;\n  border-spacing: 5px;\n  text-align: left;\n\n  &,\n  & th,\n  & td {\n    border: 1px solid #ccc;\n    border-collapse: collapse;\n    padding: 10px;\n  }\n\n  & th {\n    background-color: #f5f5f5;\n  }\n}\n\n.tag-table {\n  width: 100%;\n  border-spacing: 5px;\n  text-align: left;\n\n  &,\n  & th,\n  & td {\n    border: 0.8px solid #ccc;\n    border-collapse: collapse;\n    padding: 5px;\n  }\n\n  & th {\n    background-color: none;\n  }\n}\n\n.text-center {\n  text-align: center;\n}\n",".inline-block {\n  display: inline-block;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.w-50 {\n  width: 49%;\n}\n\n.inline {\n  display: inline-block;\n}\n\n.meta-label {\n  display: inline-block;\n  font-weight: bold;\n  margin-bottom: 5px;\n}\n\n.meta-container {\n  display: block;\n  margin-top: 20px;\n}\n","/**************************/\n/* Feature CSS */\n/**************************/\n\n.section-features {\n  padding: 9.6rem 0;\n}\n\n.feature {\n  box-shadow: 0 2.4rem 4.8rem rgba(0, 0, 0, 0.075);\n  border-radius: 11px;\n  overflow: hidden;\n  transition: all 0.4s;\n}\n\n/* card action */\n.feature:hover {\n  transform: translateY(-1.2rem);\n  box-shadow: 0 3.2rem 6.4rem rgba(0, 0, 0, 0.06);\n}\n\n/* content backgrpund */\n.feature-content {\n  font-size: 0.9rem; /* 1.8 */\n  line-height: 1.8;\n  align-items: center;\n  padding: 1.6rem 2.4rem 2.4rem 2.4rem;\n  /* 3.2rem 4.8rem 4.8rem 4.8rem;*/\n}\n\n.feature-cards {\n  padding: 1.6rem 2.4rem 2.4rem 2.4rem;\n}\n\n.feature-tags {\n  margin-bottom: 1.2rem; /* 1.2rem */\n  display: flex;\n  gap: 0.4rem;\n}\n\n.feature-dashboard-tags {\n  margin-top: 2.2rem; /* 1.2rem */\n  margin-bottom: 2.2rem; /* 1.2rem */\n  display: flex;\n  gap: 0.4rem;\n}\n\n.feature-hidden {\n  margin-bottom: 1.2rem;\n  gap: 0.4rem;\n}\n\n.feature-name {\n  font-size: 1.2rem; /* 2.4 */\n  color: #333;\n  font-weight: 600;\n  margin-bottom: 1.6rem; /* 3.2 */\n}\n\n.feature-info {\n  font-size: 0.9rem; /*1.8 */\n  line-height: 1.6; /*1.8 */\n}\n\n.feature-attributes {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 0.2rem; /* 2 */\n}\n\n.feature-attribute {\n  font-size: 1rem; /* 1.8 */\n  display: flex;\n  align-items: center;\n  gap: 0.8rem; /* 1.6 */\n}\n\n.feature-icon {\n  height: 2.4rem;\n  width: 2.4rem;\n  color: #e67e22;\n}\n\n.feature-img {\n  width: 100%;\n}\n\n.call-to-action {\n  text-align: center;\n  margin-top: 2.4rem; /* 4.8 */\n}\n\n.all-features {\n  text-align: center;\n  font-size: 1rem; /* 1.8 */\n}\n\n/* pagination  */\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #555;\n  background-color: #fae5d3;\n  border: 2px solid rgb(255, 255, 255);\n  border-radius: 11px;\n}\n\n/**************************/\n/* Card CSS no movement */\n/**************************/\n\n.card-content {\n  box-shadow: 0 2.4rem 4.8rem rgba(0, 0, 0, 0.075);\n  border-radius: 11px;\n  overflow: hidden;\n  transition: all 0.4s;\n}\n\n/**************************/\n/* Admin Notice */\n/**************************/\n\n.notice-action-button {\n  float: right;\n  margin-top: -66px;\n}\n\n/**************************/\n/* Order API */\n/**************************/\n\n/* action span */\n.action-tags {\n  margin-bottom: 1.2rem;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.8rem 0.2rem;\n}\n\n.tag-item {\n  flex: 0 0 calc(50% - 0.1em);\n  display: flex;\n  // align-items: center;\n  // gap: 0.4rem;\n  // box-sizing: border-box;\n  flex-direction: column;\n  box-sizing: border-box;\n}\n\n.tag-wrapper {\n  display: flex;\n  align-items: center;\n  gap: 0.4rem;\n  margin-bottom: 0.3rem;\n}\n\n.tag-wrapper .tag {\n  flex-shrink: 0;\n  white-space: nowrap;\n}\n\n.tag-wrapper .image-container {\n  flex-shrink: 0;\n}\n\n.tag-wrapper .image-container img {\n  display: block;\n}\n\n.tag-desc {\n  margin: 0;\n  font-size: 0.85rem;\n  color: #666;\n  line-height: 1.4;\n  word-break: break-word;\n}\n\n/**************************/\n/* API input form  */\n/**************************/\n\n.api-input-form {\n  display: grid;\n  /* grid-template-columns: 0.5fr 1fr; */\n  border-radius: 11px;\n  overflow: hidden;\n  text-align: left;\n  /* padding: 1.8rem 0rem 1.8rem 1.8rem; */\n  padding: 0px 0px 18px 0px;\n  /* font-size: 1.8rem; */\n  font-size: 18px;\n  line-height: 1.8;\n}\n\n.api-input-form label {\n  /* display: block; */\n  /* font-size: 1.6rem; */\n  font-size: 16px;\n  font-weight: 500;\n  /*margin-bottom: 1.2rem; */\n  margin-bottom: 12px;\n  margin-top: 12px;\n}\n\n.api-input-form input,\n.api-input-form textarea,\n.api-input-form select {\n  width: 60%;\n  /* padding: 0.7rem;\n  font-size: 1.5rem; */\n  padding: 7px;\n  font-size: 15px;\n  font-family: inherit;\n  color: inherit;\n  border-radius: 9px;\n  background-color: #fdf2e9;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.api-input-form input::placeholder,\n.api-input-form textarea::placeholder {\n  color: #aaa;\n}\n\n.api-input-form *:focus {\n  outline: none;\n  /* box-shadow: 0 0 0 0.8rem rgba(253, 242, 233, 0.5); */\n  box-shadow: 0 0 0 16px rgba(253, 242, 233, 0.5);\n}\n\n/**************************/\n/* Advance mode */\n/**************************/\n\n.adv-box-container {\n  display: flex;\n  flex-direction: row;\n  padding: 0px 0px;\n}\n\n.adv-box {\n  width: 350px;\n}\n\n.adv-pre {\n  width: 650px;\n}\n\n.adv-box-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin: 0 10px 10px;\n}\n\n.adv-box-title {\n  font-weight: bold;\n  font-size: 0.9rem; /* 1.8 */\n  margin: 0;\n}\n\n.adv-box-table-container {\n  height: 250px;\n  margin-bottom: 15px;\n  overflow: auto;\n  border: 1px solid #bbb;\n  border-radius: 5px;\n}\n\n/* Idle */\n.adv-minus-btn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.4rem;\n}\n\n/* Delete button */\n.adv-box-btn {\n  border-radius: 5px;\n  transition: background-color 0.15s ease-in-out;\n  user-select: none;\n  border: none;\n  cursor: pointer;\n  font-size: 14px;\n  height: 35px;\n}\n\n.adv-box-btn.circle {\n  border-radius: 50px;\n}\n\n/* Button icon */\n.adv-box-btn-icon {\n  height: 3px;\n  width: 12px;\n  border-radius: 5px;\n  background-color: white;\n}\n\n.adv-box-btn-delete {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: #e53c4a;\n  height: 22px;\n  width: 22px;\n}\n\n.adv-box-btn-delete:hover {\n  background-color: #db3240;\n}\n\n.adv-box-btn-delete:active {\n  background-color: #cc2331;\n}\n\n.adv-box td .adv-box-btn-delete {\n  margin: auto;\n}\n\n.adv-box-footer {\n  display: flex;\n  flex-direction: column;\n}\n\n.adv-box-total {\n  flex: 1;\n  font-size: 14px;\n  font-weight: bold;\n  margin: 0 10px 15px;\n  padding: 0;\n  text-align: right;\n}\n\n/**************************/\n/* Tooltips*/\n/**************************/\n\n// .image-container {\n//   position: relative;\n//   display: inline-block;\n// }\n\n// .image-info {\n//   display: none;\n//   /* position: absolute; */\n//   position: absolute;\n//   background-color: #fff;\n//   padding: 1px;\n//   border: 1px solid #ccc;\n//   border-radius: 5px;\n// }\n\n// .image-container:hover .image-info {\n//   display: block;\n// }\n\n.api-label {\n  display: flex;\n  align-items: center; // 文字與圖片垂直置中\n  gap: 6px; // 文字與圖片之間的間距\n  font-weight: 500;\n  cursor: default;\n}\n\n/* 圖片 + info 的容器 */\n.image-wrapper {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n\n.image-info {\n  display: none;\n  position: absolute;\n  left: 100%; // 貼在圖片右側\n  top: 50%;\n  transform: translateY(-50%);\n  margin-left: 10px; // 留出箭頭空間\n  background: #fff;\n  padding: 8px 12px;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  font-size: 13px;\n  white-space: nowrap;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);\n  z-index: 10;\n\n  /* 小箭頭(左側指向圖片) */\n  &::before {\n    content: \"\";\n    position: absolute;\n    top: 50%;\n    left: -16px; // 箭頭寬度\n    transform: translateY(-50%);\n    border: 8px solid transparent;\n    border-right-color: #ccc; // 外框箭頭(與邊框同色)\n  }\n\n  /* 內層白色箭頭(蓋掉邊框,讓看起來乾淨) */\n  &::after {\n    content: \"\";\n    position: absolute;\n    top: 50%;\n    left: -14px; // 比外箭頭內縮 1px\n    transform: translateY(-50%);\n    border: 7px solid transparent;\n    border-right-color: #fff; // 填滿背景色\n    z-index: 1;\n  }\n}\n\n/* Hover 時顯示 */\n.image-wrapper:hover .image-info {\n  display: block;\n}\n\n/**************************/\n/* Idle */\n/**************************/\n\n.aa-legend {\n  list-style-type: none;\n  margin: 17rem 0rem 0rem 5rem;\n}\n\n.aa-legend-item {\n  display: flex;\n  align-items: center;\n  margin-bottom: 10px;\n  padding: 0;\n}\n\n.aa-legend-description {\n  margin: 0 0 0 10px;\n}\n\n.aa-legend-bullet {\n  width: 22px;\n  height: 22px;\n  border-radius: 5px 5px 0 0;\n}\n\n.color1 {\n  color: white;\n  background-color: #277da1;\n}\n.color2 {\n  color: white;\n  background-color: #43aa8b;\n}\n.color3 {\n  color: white;\n  background-color: #f8961e;\n}\n","/* Scroll control */\n.scroll {\n  /* background-color: #e9ecef;*/\n  padding: 0px;\n  /* How elements that don't fit into container appear */\n  overflow: auto;\n  display: flex;\n  flex-direction: column;\n  gap: 40px;\n}\n/* Api Tools Section*/\n.pretty {\n  background-color: #adb5bd;\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.pretty.sendapi {\n  height: 555px;\n}\n\n.pretty.filterapi {\n  height: 222px;\n  width: 777px;\n}\n\n.pretty.manageapi {\n  height: 444px;\n}\n\n/* Order Api Section*/\n.pretty.api {\n  height: 333px;\n}\n\n.pretty.advance {\n  height: 250px;\n  color: lightblue;\n}\n\n.pretty.props {\n  height: 333px;\n  align-items: left;\n}\n/* Hide pretty */\n.json {\n  display: none;\n}\n",".container {\n  /* 1140px */\n  max-width: 80rem;\n  /* max-width: 80rem;\n  /*120rem*/\n  padding: 0 3.2rem;\n  margin: 0 auto;\n}\n\n.grid {\n  display: grid;\n  column-gap: 2.2rem; /* 6.4 */\n  row-gap: 9.6rem;\n  /* margin-bottom: 9.6rem; */\n}\n\n/*\n.grid:not(:last-child) {\n  margin-bottom: 9.6rem;\n}\n*/\n.grid--2-cols {\n  grid-template-columns: repeat(2, 1fr);\n}\n\n.grid--3-cols {\n  grid-template-columns: repeat(3, 1fr);\n}\n\n.grid--4-cols {\n  grid-template-columns: repeat(4, 1fr);\n}\n\n.grid--5-cols {\n  grid-template-columns: repeat(5, 1fr);\n}\n\n.grid--center-v {\n  align-items: center;\n}\n\n/**************************/\n/* HEADER */\n/**************************/\n\n.header {\n  background: #fff;\n  box-sizing: border-box;\n  padding: 0;\n  position: fixed;\n  width: calc(100% - 160px);\n  top: 32px;\n  z-index: 1001;\n}\n\n.header-title {\n  padding: 1.2rem 0rem 1.2rem 0rem;\n}\n\n/**************************/\n/* General */\n/**************************/\n\n.heading-primary,\n.heading-secondary,\n.heading-tertiary {\n  font-weight: 700;\n  color: #333;\n  /* color: #45260a; */\n  /* color: #343a40; */\n  letter-spacing: -0.5px;\n}\n\n.heading-primary {\n  font-size: 5.2rem;\n  line-height: 1.05;\n  margin-bottom: 3.2rem;\n}\n\n.heading-secondary {\n  font-size: 4.4rem;\n  line-height: 1.2;\n  margin-bottom: 9.6rem;\n}\n\n.heading-tertiary {\n  font-size: 3rem;\n  line-height: 1.2;\n  margin-bottom: 3.2rem;\n}\n\n.subheading {\n  display: block;\n  font-size: 1.6rem;\n  font-weight: 500;\n  color: #cf711f;\n  text-transform: uppercase;\n  margin-bottom: 1.6rem;\n  letter-spacing: 0.75px;\n}\n\n.list {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 1.6rem;\n}\n\n.list-item {\n  font-size: 1.8rem;\n  display: flex;\n  align-items: center;\n  gap: 1.6rem;\n}\n\n.list-icon {\n  width: 3rem;\n  height: 3rem;\n  color: #e67e22;\n}\n\n*:focus {\n  outline: none;\n  /* outline: 4px dotted #e67e22; */\n  /* outline-offset: 8px; */\n  box-shadow: 0 0 0 0.8rem rgba(230, 125, 34, 0.5);\n}\n\n/* HELPER/SETTINGS CLASSES */\n.margin-right-sm {\n  margin-right: 1.6rem !important;\n}\n\n.margin-bottom-md {\n  margin-bottom: 4.8rem !important;\n}\n\n.center-text {\n  text-align: center;\n}\n\nstrong {\n  font-weight: 500;\n}\n\n/**************************/\n/* SECTION */\n/**************************/\n\n.section-pricing {\n  padding: 9.6rem 0;\n}\n\n.pricing-plan {\n  border-radius: 11px;\n\n  width: 75%;\n}\n\n.pricing-plan--starter {\n  justify-self: end;\n  border: 2px solid #fdf2e9;\n  padding: 4.6rem;\n}\n\n.pricing-plan--complete {\n  background-color: #fdf2e9;\n  padding: 4.8rem;\n  position: relative;\n  overflow: hidden;\n}\n\n.pricing-plan--complete::after {\n  content: \"Best value\";\n  position: absolute;\n  top: 6%;\n  right: -18%;\n\n  text-transform: uppercase;\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #333;\n  background-color: #ffd43b;\n  padding: 0.8rem 8rem;\n  transform: rotate(45deg);\n}\n\n.plan-header {\n  text-align: center;\n  margin-bottom: 4.8rem;\n}\n\n.plan-name {\n  color: #cf711f;\n  font-weight: 600;\n  font-size: 2rem;\n  text-transform: uppercase;\n  letter-spacing: 0.75;\n  margin-bottom: 3.2rem;\n}\n\n.plan-price {\n  font-size: 6.2rem;\n  font-weight: 600;\n  color: #333;\n  margin-bottom: 1.6rem;\n}\n\n.plan-price span {\n  font-size: 3rem;\n  font-weight: 500;\n  margin-right: 0.8rem;\n}\n\n.plan-text {\n  font-size: 1.6rem;\n  line-height: 1.6;\n  color: #6f6f6f;\n}\n\n.plan-sing-up {\n  text-align: center;\n  margin-top: 4.8rem;\n}\n\n.plan-details {\n  font-size: 1.6rem;\n  line-height: 1.6;\n  text-align: center;\n}\n\n.feature-icon {\n  color: #e67e22;\n  height: 3.2rem;\n  width: 3.2rem;\n  background-color: #fdf2e9;\n  margin-bottom: 3.2rem;\n  padding: 1.6rem;\n  border-radius: 50%;\n}\n\n.feature-title {\n  font-size: 2.4rem;\n  color: #333;\n  font-weight: 700;\n  margin-bottom: 1.6rem;\n}\n\n.feature-text {\n  font-size: 1.8rem;\n  line-height: 1.8;\n}\n","/* desert scheme ported from vim to google prettify */\r\npre.prettyprint {\r\n  display: block;\r\n  background-color: #333;\r\n}\r\npre .nocode {\r\n  background-color: none;\r\n  color: #000;\r\n}\r\npre .str {\r\n  color: #ffa0a0;\r\n} /* string  - pink */\r\npre .kwd {\r\n  color: #f0e68c;\r\n  font-weight: bold;\r\n}\r\npre .com {\r\n  color: #87ceeb;\r\n} /* comment - skyblue */\r\npre .typ {\r\n  color: #98fb98;\r\n} /* type    - lightgreen */\r\npre .lit {\r\n  color: #cd5c5c;\r\n} /* literal - darkred */\r\npre .pun {\r\n  color: #fff;\r\n} /* punctuation */\r\npre .pln {\r\n  color: #fff;\r\n} /* plaintext */\r\npre .tag {\r\n  color: #f0e68c;\r\n  font-weight: bold;\r\n} /* html/xml tag    - lightyellow */\r\npre .atn {\r\n  color: #bdb76b;\r\n  font-weight: bold;\r\n} /* attribute name  - khaki */\r\npre .atv {\r\n  color: #ffa0a0;\r\n} /* attribute value - pink */\r\npre .dec {\r\n  color: #98fb98;\r\n} /* decimal         - lightgreen */\r\n\r\n/* Specify class=linenums on a pre to get line numbering */\r\nol.linenums {\r\n  margin-top: 0;\r\n  margin-bottom: 0;\r\n  color: #aeaeae;\r\n} /* IE indents via margin-left */\r\nli.L0,\r\nli.L1,\r\nli.L2,\r\nli.L3,\r\nli.L5,\r\nli.L6,\r\nli.L7,\r\nli.L8 {\r\n  list-style-type: none;\r\n}\r\n/* Alternate shading for lines */\r\nli.L1,\r\nli.L3,\r\nli.L5,\r\nli.L7,\r\nli.L9 {\r\n}\r\n\r\n@media print {\r\n  pre.prettyprint {\r\n    background-color: none;\r\n  }\r\n  pre .str,\r\n  code .str {\r\n    color: #060;\r\n  }\r\n  pre .kwd,\r\n  code .kwd {\r\n    color: #006;\r\n    font-weight: bold;\r\n  }\r\n  pre .com,\r\n  code .com {\r\n    color: #600;\r\n    font-style: italic;\r\n  }\r\n  pre .typ,\r\n  code .typ {\r\n    color: #404;\r\n    font-weight: bold;\r\n  }\r\n  pre .lit,\r\n  code .lit {\r\n    color: #044;\r\n  }\r\n  pre .pun,\r\n  code .pun {\r\n    color: #440;\r\n  }\r\n  pre .pln,\r\n  code .pln {\r\n    color: #000;\r\n  }\r\n  pre .tag,\r\n  code .tag {\r\n    color: #006;\r\n    font-weight: bold;\r\n  }\r\n  pre .atn,\r\n  code .atn {\r\n    color: #404;\r\n  }\r\n  pre .atv,\r\n  code .atv {\r\n    color: #060;\r\n  }\r\n}\r\n"]}
     1{"version":3,"sources":["modules/tabs.scss","modules/button.scss","modules/checkbox.scss","modules/table.scss","modules/form.scss","modules/features.scss","modules/pretty.scss","modules/general.scss","modules/desert.scss","modules/ui-dashboard.scss","modules/ui-orderapi.scss"],"names":[],"mappings":"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","file":"style.css","sourcesContent":[".nav-tabs,\n.nav-tabs-tools,\n.nav-tabs-filter,\n.nav-tabs-api,\n.nav-tabs-apiauth {\n  float: left;\n  width: 100%;\n  margin: 0;\n  list-style-type: none;\n  border-bottom: 1px solid transparent;\n\n  > li {\n    float: left;\n    margin-bottom: -1px;\n\n    > a {\n      margin-right: 2px;\n      line-height: 1.5;\n      padding: 10px;\n      border: 1px solid transparent;\n      border-radius: 4px 4px 0 0;\n      float: left;\n      text-decoration: none;\n\n      &:hover {\n        border-color: #eee #eee #ddd;\n      }\n    }\n\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: #555;\n        cursor: default;\n        background-color: #fff;\n        border-color: transparent;\n      }\n    }\n  }\n}\n\n.tab-content > .tab-pane,\n.tab-content-tools > .tab-pane-tools {\n  float: left;\n  width: 98%;\n  display: none;\n\n  &.active {\n    display: block;\n    padding: 10px;\n    background-color: #fff;\n    box-shadow: 0 5px 4px -2px rgba(0, 0, 0, 0.15);\n  }\n}\n\n#top-btn {\n  display: none;\n  position: fixed;\n  bottom: 20px;\n  right: 30px;\n  z-index: 99;\n  font-size: 18px;\n  border: none;\n  outline: none;\n  background-color: purple;\n  color: white;\n  cursor: pointer;\n  padding: 15px;\n  border-radius: 4px;\n}\n\n#top-btn:hover {\n  background-color: #555;\n}\n","/**************************/\n/* Tags */\n/**************************/\n\n.tag {\n  display: inline-block;\n  text-decoration: none;\n  padding: 0.4rem 0.8rem; /* 0.4 0.8*/\n  font-size: 0.9rem; /* 1.2 */\n  color: none;\n  border-radius: 100px;\n  font-weight: 300;\n}\n\n.tag.small {\n  font-size: 0.8rem;\n  border-radius: 3px;\n  font-weight: 300;\n}\n\n.tag.medium {\n  font-size: 0.9rem;\n  border-radius: 15px;\n  font-weight: 300;\n}\n\n.tag.large {\n  font-size: 1.4rem;\n  border-radius: 15px;\n  font-weight: 400;\n}\n\n.tag.step {\n  font-size: 1.2rem;\n  border-radius: 50px;\n  font-weight: 500;\n}\n\n.tag.uppercase {\n  text-transform: uppercase;\n}\n\n/* Basic */\n.tag--woo {\n  color: #eee;\n  background-color: rgb(108, 59, 164);\n}\n\n.tag--woorev {\n  color: rgb(108, 59, 164);\n  background-color: #eee;\n}\n\n.tag--wooadv {\n  color: #eee;\n  background-color: rgb(218, 179, 254);\n}\n\n.tag--auth {\n  color: #333;\n  background-color: rgb(246, 169, 14);\n}\n\n.tag--attr {\n  color: #333;\n  background-color: rgb(206, 206, 206);\n}\n\n.tag--large {\n  color: #333;\n  background-color: #eee;\n}\n\n/* Attributes */\n.tag--order {\n  color: #eee;\n  background-color: rgb(132, 95, 132);\n}\n\n.tag--billing {\n  color: #333;\n  background-color: rgb(206, 206, 206);\n}\n\n.tag--fields {\n  color: lightblue;\n  background-color: rgb(25, 25, 25);\n}\n\n/* Features */\n.tag--codefree {\n  // background-color: rgb(249, 222, 0);\n  color: #fff;\n  background-color: #11111a;\n}\n\n.tag--secure {\n  color: #fff;\n  background-color: rgb(10, 151, 218);\n}\n\n.tag--notice {\n  // background-color: #dd6413;\n  color: #fff;\n  background-color: #4a4af3;\n}\n\n.tag--new {\n  color: #11111a;\n  background-color: #f34a4a;\n}\n\n.tag--cap {\n  color: #f34a4a;\n  background-color: #11111a;\n}\n\n/* License */\n.tag--disable {\n  color: #fff;\n  background-color: rgb(231, 0, 0);\n}\n\n.tag--enable {\n  color: #fff;\n  background-color: #43aa8b;\n  // background-color: rgb(48, 154, 62);\n}\n\n/**************************/\n/* Dynamic Tags */\n/**************************/\n\n.tag.available:hover {\n  cursor: pointer;\n  opacity: 0.7;\n}\n\n.tag.selected {\n  cursor: pointer;\n  opacity: 0.7;\n}\n\n.tag.disabled {\n  color: white;\n  background-color: #d2d2d2;\n  /* text-decoration: line-through; */\n  pointer-events: none;\n}\n\n.tag.pro {\n  color: #333;\n  background-color: #fdf2e9;\n  cursor: not-allowed;\n}\n\n/* Step */\n.step-tag {\n  color: #eee;\n  background-color: #ccc;\n  cursor: pointer;\n  text-transform: uppercase;\n}\n\n.step-tag.current {\n  background-color: rgb(108, 59, 164);\n}\n\n.order-api-step > .step-pane {\n  display: none;\n  &.active {\n    display: block;\n  }\n}\n\n.notice-tag {\n  color: #eee;\n  background-color: #ccc;\n}\n\n/**************************/\n/* Buttons */\n/**************************/\n\n.btn,\n.btn:link,\n.btn:visited {\n  display: inline-block;\n  text-decoration: none;\n  font-size: 1rem; /* 2 */\n  font-weight: 400;\n  padding: 0.8rem 1.6rem; /* 1.6 3.2 */\n  border-radius: 9px; /* 9 */\n\n  /* default color*/\n  // background-color: #f34a4a;\n  color: #11111a;\n\n  /* Only necessary for .btn */\n  border: none;\n  cursor: pointer;\n  font-family: inherit;\n\n  /* Put transition on original \"state\" */\n  /* transition: background-color 0.3s; */\n  transition: all 0.3s;\n}\n\n.btn.medium {\n  font-size: 0.9rem;\n  font-weight: 400;\n  padding: 0.6rem 1rem;\n}\n\n.btn--full:link,\n.btn--full:visited {\n  // background-color: #e67e22;\n  // color: #fff;\n  background-color: #f34a4a;\n  color: #11111a;\n}\n\n.btn--full:hover,\n.btn--full:active {\n  // background-color: #cf711f;\n  background-color: #11111a;\n  color: #f34a4a;\n}\n\n.btn--full.small {\n  font-size: 0.9rem;\n  border-radius: 26px;\n  font-weight: 500;\n}\n\n.btn--outline:link,\n.btn--outline:visited {\n  // background-color: #fff;\n  background-color: #2f2f48;\n  // color: #555;\n}\n\n.btn--outline:hover,\n.btn--outline:active {\n  // background-color: #fdf2e9;\n  background-color: #11111a;\n  color: #fff;\n\n  // border: 3px solid #fff;\n  /* Trick to add border inside */\n  // box-shadow: inset 0 0 0 3px #fff;\n}\n\n/* Prev Next Save */\n.next-btn,\n.prev-btn,\n.save-btn,\n.back-btn,\n.save-settings {\n  text-align: right;\n  padding: 1px;\n}\n\n.btn-next,\n.btn-prev,\n.btn-save,\n.btn-back {\n  float: right;\n}\n","/* $on: #009eea; */\n$on: rgb(108, 59, 164);\n$bg: #d9cb9e;\n$off: #8c8c8c;\n\n@mixin center {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n@mixin userSelect($value) {\n  -webkit-touch-callout: $value;\n  -webkit-user-select: $value;\n  -khtml-user-select: $value;\n  -moz-user-select: $value;\n  -ms-user-select: $value;\n  user-select: $value;\n}\n\n@mixin ui-toggle($height, $on, $off) {\n  margin: 0;\n  padding: 0;\n\n  input[type=\"checkbox\"] {\n    display: none;\n\n    &:checked + label {\n      border-color: $on;\n      background: $on;\n      box-shadow: inset 0 0 0 #{$height / 2} $on;\n\n      > div {\n        margin-left: $height;\n      }\n    }\n  }\n\n  label {\n    transition: all 200ms ease;\n    display: inline-block;\n    position: relative;\n\n    @include userSelect(none);\n\n    background: $off;\n    box-shadow: inset 0 0 0 0 $on;\n    border: 2px solid $off;\n    border-radius: $height + 2;\n    width: $height * 2;\n    height: $height;\n\n    div {\n      transition: all 200ms ease;\n      background: #ffffff;\n      width: $height;\n      height: $height;\n      border-radius: $height / 2;\n    }\n\n    &:hover,\n    & > div:hover {\n      cursor: pointer;\n    }\n  }\n}\n\ndiv.ui-toggle {\n  @include ui-toggle(16px, $on, $off);\n\n  &.mb-10 {\n    margin-bottom: 10px;\n  }\n}\n",".api-table {\n  width: 100%;\n  border-spacing: 5px;\n  text-align: left;\n\n  &,\n  & th,\n  & td {\n    border: 1px solid #ccc;\n    border-collapse: collapse;\n    padding: 10px;\n  }\n\n  & th {\n    background-color: #f5f5f5;\n  }\n}\n\n.tag-table {\n  width: 100%;\n  border-spacing: 5px;\n  text-align: left;\n\n  &,\n  & th,\n  & td {\n    border: 0.8px solid #ccc;\n    border-collapse: collapse;\n    padding: 5px;\n  }\n\n  & th {\n    background-color: none;\n  }\n}\n\n.text-center {\n  text-align: center;\n}\n",".inline-block {\n  display: inline-block;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.w-50 {\n  width: 49%;\n}\n\n.inline {\n  display: inline-block;\n}\n\n.meta-label {\n  display: inline-block;\n  font-weight: bold;\n  margin-bottom: 5px;\n}\n\n.meta-container {\n  display: block;\n  margin-top: 20px;\n}\n","/**************************/\n/* Feature CSS */\n/**************************/\n\n.section-features {\n  padding: 9.6rem 0;\n}\n\n.feature {\n  box-shadow: 0 2.4rem 4.8rem rgba(0, 0, 0, 0.075);\n  border-radius: 11px;\n  overflow: hidden;\n  transition: all 0.4s;\n}\n\n/* card action */\n.feature:hover {\n  transform: translateY(-1.2rem);\n  box-shadow: 0 3.2rem 6.4rem rgba(0, 0, 0, 0.06);\n}\n\n/* content backgrpund */\n.feature-content {\n  font-size: 0.9rem; /* 1.8 */\n  line-height: 1.8;\n  align-items: center;\n  padding: 1.6rem 2.4rem 2.4rem 2.4rem;\n  /* 3.2rem 4.8rem 4.8rem 4.8rem;*/\n}\n\n.feature-cards {\n  padding: 1.6rem 2.4rem 2.4rem 2.4rem;\n}\n\n.feature-tags {\n  margin-bottom: 1.2rem; /* 1.2rem */\n  display: flex;\n  gap: 0.4rem;\n}\n\n.feature-dashboard-tags {\n  margin-top: 2.2rem; /* 1.2rem */\n  margin-bottom: 2.2rem; /* 1.2rem */\n  display: flex;\n  gap: 0.4rem;\n}\n\n.feature-hidden {\n  margin-bottom: 1.2rem;\n  gap: 0.4rem;\n}\n\n.feature-name {\n  font-size: 1.2rem; /* 2.4 */\n  color: #333;\n  font-weight: 600;\n  margin-bottom: 1.6rem; /* 3.2 */\n}\n\n.feature-info {\n  font-size: 0.9rem; /*1.8 */\n  line-height: 1.6; /*1.8 */\n}\n\n.feature-attributes {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 0.2rem; /* 2 */\n}\n\n.feature-attribute {\n  font-size: 1rem; /* 1.8 */\n  display: flex;\n  align-items: center;\n  gap: 0.8rem; /* 1.6 */\n}\n\n.feature-icon {\n  height: 2.4rem;\n  width: 2.4rem;\n  color: #e67e22;\n}\n\n.feature-img {\n  width: 100%;\n}\n\n.call-to-action {\n  text-align: center;\n  margin-top: 2.4rem; /* 4.8 */\n}\n\n.all-features {\n  text-align: center;\n  font-size: 1rem; /* 1.8 */\n}\n\n/* pagination  */\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #555;\n  background-color: #fae5d3;\n  border: 2px solid rgb(255, 255, 255);\n  border-radius: 11px;\n}\n\n/**************************/\n/* Card CSS no movement */\n/**************************/\n\n.card-content {\n  box-shadow: 0 2.4rem 4.8rem rgba(0, 0, 0, 0.075);\n  border-radius: 11px;\n  overflow: hidden;\n  transition: all 0.4s;\n}\n\n/**************************/\n/* Admin Notice */\n/**************************/\n\n.notice-action-button {\n  float: right;\n  margin-top: -66px;\n}\n\n/**************************/\n/* Order API */\n/**************************/\n\n/* action span */\n.action-tags {\n  margin-bottom: 1.2rem;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.8rem 0.2rem;\n}\n\n.tag-item {\n  flex: 0 0 calc(50% - 0.1em);\n  display: flex;\n  // align-items: center;\n  // gap: 0.4rem;\n  // box-sizing: border-box;\n  flex-direction: column;\n  box-sizing: border-box;\n}\n\n.tag-wrapper {\n  display: flex;\n  align-items: center;\n  gap: 0.4rem;\n  margin-bottom: 0.3rem;\n}\n\n.tag-wrapper .tag {\n  flex-shrink: 0;\n  white-space: nowrap;\n}\n\n.tag-wrapper .image-container {\n  flex-shrink: 0;\n}\n\n.tag-wrapper .image-container img {\n  display: block;\n}\n\n.tag-desc {\n  margin: 0;\n  font-size: 0.85rem;\n  color: #666;\n  line-height: 1.4;\n  word-break: break-word;\n}\n\n/**************************/\n/* API input form  */\n/**************************/\n\n.api-input-form {\n  display: grid;\n  /* grid-template-columns: 0.5fr 1fr; */\n  border-radius: 11px;\n  overflow: hidden;\n  text-align: left;\n  /* padding: 1.8rem 0rem 1.8rem 1.8rem; */\n  padding: 0px 0px 18px 0px;\n  /* font-size: 1.8rem; */\n  font-size: 18px;\n  line-height: 1.8;\n}\n\n.api-input-form label {\n  /* display: block; */\n  /* font-size: 1.6rem; */\n  font-size: 16px;\n  font-weight: 500;\n  /*margin-bottom: 1.2rem; */\n  margin-bottom: 12px;\n  margin-top: 12px;\n}\n\n.api-input-form input,\n.api-input-form textarea,\n.api-input-form select {\n  width: 60%;\n  /* padding: 0.7rem;\n  font-size: 1.5rem; */\n  padding: 7px;\n  font-size: 15px;\n  font-family: inherit;\n  color: inherit;\n  border-radius: 9px;\n  background-color: #fdf2e9;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.api-input-form input::placeholder,\n.api-input-form textarea::placeholder {\n  color: #aaa;\n}\n\n.api-input-form *:focus {\n  outline: none;\n  /* box-shadow: 0 0 0 0.8rem rgba(253, 242, 233, 0.5); */\n  box-shadow: 0 0 0 16px rgba(253, 242, 233, 0.5);\n}\n\n/**************************/\n/* Advance mode */\n/**************************/\n\n.adv-box-container {\n  display: flex;\n  flex-direction: row;\n  padding: 0px 0px;\n}\n\n.adv-box {\n  width: 350px;\n}\n\n.adv-pre {\n  width: 650px;\n}\n\n.adv-box-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin: 0 10px 10px;\n}\n\n.adv-box-title {\n  font-weight: bold;\n  font-size: 0.9rem; /* 1.8 */\n  margin: 0;\n}\n\n.adv-box-table-container {\n  height: 250px;\n  margin-bottom: 15px;\n  overflow: auto;\n  border: 1px solid #bbb;\n  border-radius: 5px;\n}\n\n/* Idle */\n.adv-minus-btn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.4rem;\n}\n\n/* Delete button */\n.adv-box-btn {\n  border-radius: 5px;\n  transition: background-color 0.15s ease-in-out;\n  user-select: none;\n  border: none;\n  cursor: pointer;\n  font-size: 14px;\n  height: 35px;\n}\n\n.adv-box-btn.circle {\n  border-radius: 50px;\n}\n\n/* Button icon */\n.adv-box-btn-icon {\n  height: 3px;\n  width: 12px;\n  border-radius: 5px;\n  background-color: white;\n}\n\n.adv-box-btn-delete {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: #e53c4a;\n  height: 22px;\n  width: 22px;\n}\n\n.adv-box-btn-delete:hover {\n  background-color: #db3240;\n}\n\n.adv-box-btn-delete:active {\n  background-color: #cc2331;\n}\n\n.adv-box td .adv-box-btn-delete {\n  margin: auto;\n}\n\n.adv-box-footer {\n  display: flex;\n  flex-direction: column;\n}\n\n.adv-box-total {\n  flex: 1;\n  font-size: 14px;\n  font-weight: bold;\n  margin: 0 10px 15px;\n  padding: 0;\n  text-align: right;\n}\n\n/**************************/\n/* Tooltips*/\n/**************************/\n\n// .image-container {\n//   position: relative;\n//   display: inline-block;\n// }\n\n// .image-info {\n//   display: none;\n//   /* position: absolute; */\n//   position: absolute;\n//   background-color: #fff;\n//   padding: 1px;\n//   border: 1px solid #ccc;\n//   border-radius: 5px;\n// }\n\n// .image-container:hover .image-info {\n//   display: block;\n// }\n\n.api-label {\n  display: flex;\n  align-items: center; // 文字與圖片垂直置中\n  gap: 6px; // 文字與圖片之間的間距\n  font-weight: 500;\n  cursor: default;\n}\n\n/* 圖片 + info 的容器 */\n.image-wrapper {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n\n.image-info {\n  display: none;\n  position: absolute;\n  left: 100%; // 貼在圖片右側\n  top: 50%;\n  transform: translateY(-50%);\n  margin-left: 10px; // 留出箭頭空間\n  background: #fff;\n  padding: 8px 12px;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  font-size: 13px;\n  white-space: nowrap;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);\n  z-index: 10;\n\n  /* 小箭頭(左側指向圖片) */\n  &::before {\n    content: \"\";\n    position: absolute;\n    top: 50%;\n    left: -16px; // 箭頭寬度\n    transform: translateY(-50%);\n    border: 8px solid transparent;\n    border-right-color: #ccc; // 外框箭頭(與邊框同色)\n  }\n\n  /* 內層白色箭頭(蓋掉邊框,讓看起來乾淨) */\n  &::after {\n    content: \"\";\n    position: absolute;\n    top: 50%;\n    left: -14px; // 比外箭頭內縮 1px\n    transform: translateY(-50%);\n    border: 7px solid transparent;\n    border-right-color: #fff; // 填滿背景色\n    z-index: 1;\n  }\n}\n\n/* Hover 時顯示 */\n.image-wrapper:hover .image-info {\n  display: block;\n}\n\n/**************************/\n/* Idle */\n/**************************/\n\n.aa-legend {\n  list-style-type: none;\n  margin: 17rem 0rem 0rem 5rem;\n}\n\n.aa-legend-item {\n  display: flex;\n  align-items: center;\n  margin-bottom: 10px;\n  padding: 0;\n}\n\n.aa-legend-description {\n  margin: 0 0 0 10px;\n}\n\n.aa-legend-bullet {\n  width: 22px;\n  height: 22px;\n  border-radius: 5px 5px 0 0;\n}\n\n.color1 {\n  color: white;\n  background-color: #277da1;\n}\n.color2 {\n  color: white;\n  background-color: #43aa8b;\n}\n.color3 {\n  color: white;\n  background-color: #f8961e;\n}\n","/* Scroll control */\n.scroll {\n  /* background-color: #e9ecef;*/\n  padding: 0px;\n  /* How elements that don't fit into container appear */\n  overflow: auto;\n  display: flex;\n  flex-direction: column;\n  gap: 40px;\n}\n/* Api Tools Section*/\n.pretty {\n  background-color: #adb5bd;\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.pretty.sendapi {\n  height: 555px;\n}\n\n.pretty.filterapi {\n  height: 222px;\n  width: 777px;\n}\n\n.pretty.manageapi {\n  height: 444px;\n}\n\n/* Order Api Section*/\n.pretty.api {\n  height: 333px;\n}\n\n.pretty.advance {\n  height: 250px;\n  color: lightblue;\n}\n\n.pretty.props {\n  height: 333px;\n  align-items: left;\n}\n/* Hide pretty */\n.json {\n  display: none;\n}\n",".container {\n  /* 1140px */\n  max-width: 80rem;\n  /* max-width: 80rem;\n  /*120rem*/\n  padding: 0 3.2rem;\n  margin: 0 auto;\n}\n\n.grid {\n  display: grid;\n  column-gap: 2.2rem; /* 6.4 */\n  row-gap: 9.6rem;\n  /* margin-bottom: 9.6rem; */\n}\n\n/*\n.grid:not(:last-child) {\n  margin-bottom: 9.6rem;\n}\n*/\n.grid--2-cols {\n  grid-template-columns: repeat(2, 1fr);\n}\n\n.grid--3-cols {\n  grid-template-columns: repeat(3, 1fr);\n}\n\n.grid--4-cols {\n  grid-template-columns: repeat(4, 1fr);\n}\n\n.grid--5-cols {\n  grid-template-columns: repeat(5, 1fr);\n}\n\n.grid--center-v {\n  align-items: center;\n}\n\n/**************************/\n/* HEADER */\n/**************************/\n\n.header {\n  background: #fff;\n  box-sizing: border-box;\n  padding: 0;\n  position: fixed;\n  width: calc(100% - 160px);\n  top: 32px;\n  z-index: 1001;\n}\n\n.header-title {\n  padding: 1.2rem 0rem 1.2rem 0rem;\n}\n\n/**************************/\n/* General */\n/**************************/\n\n.heading-primary,\n.heading-secondary,\n.heading-tertiary {\n  font-weight: 700;\n  color: #333;\n  /* color: #45260a; */\n  /* color: #343a40; */\n  letter-spacing: -0.5px;\n}\n\n.heading-primary {\n  font-size: 5.2rem;\n  line-height: 1.05;\n  margin-bottom: 3.2rem;\n}\n\n.heading-secondary {\n  font-size: 4.4rem;\n  line-height: 1.2;\n  margin-bottom: 9.6rem;\n}\n\n.heading-tertiary {\n  font-size: 3rem;\n  line-height: 1.2;\n  margin-bottom: 3.2rem;\n}\n\n.subheading {\n  display: block;\n  font-size: 1.6rem;\n  font-weight: 500;\n  color: #cf711f;\n  text-transform: uppercase;\n  margin-bottom: 1.6rem;\n  letter-spacing: 0.75px;\n}\n\n.list {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 1.6rem;\n}\n\n.list-item {\n  font-size: 1.8rem;\n  display: flex;\n  align-items: center;\n  gap: 1.6rem;\n}\n\n.list-icon {\n  width: 3rem;\n  height: 3rem;\n  color: #e67e22;\n}\n\n*:focus {\n  outline: none;\n  /* outline: 4px dotted #e67e22; */\n  /* outline-offset: 8px; */\n  box-shadow: 0 0 0 0.8rem rgba(230, 125, 34, 0.5);\n}\n\n/* HELPER/SETTINGS CLASSES */\n.margin-right-sm {\n  margin-right: 1.6rem !important;\n}\n\n.margin-bottom-md {\n  margin-bottom: 4.8rem !important;\n}\n\n.center-text {\n  text-align: center;\n}\n\nstrong {\n  font-weight: 500;\n}\n\n/**************************/\n/* SECTION */\n/**************************/\n\n.section-pricing {\n  padding: 9.6rem 0;\n}\n\n.pricing-plan {\n  border-radius: 11px;\n\n  width: 75%;\n}\n\n.pricing-plan--starter {\n  justify-self: end;\n  border: 2px solid #fdf2e9;\n  padding: 4.6rem;\n}\n\n.pricing-plan--complete {\n  background-color: #fdf2e9;\n  padding: 4.8rem;\n  position: relative;\n  overflow: hidden;\n}\n\n.pricing-plan--complete::after {\n  content: \"Best value\";\n  position: absolute;\n  top: 6%;\n  right: -18%;\n\n  text-transform: uppercase;\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #333;\n  background-color: #ffd43b;\n  padding: 0.8rem 8rem;\n  transform: rotate(45deg);\n}\n\n.plan-header {\n  text-align: center;\n  margin-bottom: 4.8rem;\n}\n\n.plan-name {\n  color: #cf711f;\n  font-weight: 600;\n  font-size: 2rem;\n  text-transform: uppercase;\n  letter-spacing: 0.75;\n  margin-bottom: 3.2rem;\n}\n\n.plan-price {\n  font-size: 6.2rem;\n  font-weight: 600;\n  color: #333;\n  margin-bottom: 1.6rem;\n}\n\n.plan-price span {\n  font-size: 3rem;\n  font-weight: 500;\n  margin-right: 0.8rem;\n}\n\n.plan-text {\n  font-size: 1.6rem;\n  line-height: 1.6;\n  color: #6f6f6f;\n}\n\n.plan-sing-up {\n  text-align: center;\n  margin-top: 4.8rem;\n}\n\n.plan-details {\n  font-size: 1.6rem;\n  line-height: 1.6;\n  text-align: center;\n}\n\n.feature-icon {\n  color: #e67e22;\n  height: 3.2rem;\n  width: 3.2rem;\n  background-color: #fdf2e9;\n  margin-bottom: 3.2rem;\n  padding: 1.6rem;\n  border-radius: 50%;\n}\n\n.feature-title {\n  font-size: 2.4rem;\n  color: #333;\n  font-weight: 700;\n  margin-bottom: 1.6rem;\n}\n\n.feature-text {\n  font-size: 1.8rem;\n  line-height: 1.8;\n}\n","/* desert scheme ported from vim to google prettify */\r\npre.prettyprint {\r\n  display: block;\r\n  background-color: #333;\r\n}\r\npre .nocode {\r\n  background-color: none;\r\n  color: #000;\r\n}\r\npre .str {\r\n  color: #ffa0a0;\r\n} /* string  - pink */\r\npre .kwd {\r\n  color: #f0e68c;\r\n  font-weight: bold;\r\n}\r\npre .com {\r\n  color: #87ceeb;\r\n} /* comment - skyblue */\r\npre .typ {\r\n  color: #98fb98;\r\n} /* type    - lightgreen */\r\npre .lit {\r\n  color: #cd5c5c;\r\n} /* literal - darkred */\r\npre .pun {\r\n  color: #fff;\r\n} /* punctuation */\r\npre .pln {\r\n  color: #fff;\r\n} /* plaintext */\r\npre .tag {\r\n  color: #f0e68c;\r\n  font-weight: bold;\r\n} /* html/xml tag    - lightyellow */\r\npre .atn {\r\n  color: #bdb76b;\r\n  font-weight: bold;\r\n} /* attribute name  - khaki */\r\npre .atv {\r\n  color: #ffa0a0;\r\n} /* attribute value - pink */\r\npre .dec {\r\n  color: #98fb98;\r\n} /* decimal         - lightgreen */\r\n\r\n/* Specify class=linenums on a pre to get line numbering */\r\nol.linenums {\r\n  margin-top: 0;\r\n  margin-bottom: 0;\r\n  color: #aeaeae;\r\n} /* IE indents via margin-left */\r\nli.L0,\r\nli.L1,\r\nli.L2,\r\nli.L3,\r\nli.L5,\r\nli.L6,\r\nli.L7,\r\nli.L8 {\r\n  list-style-type: none;\r\n}\r\n/* Alternate shading for lines */\r\nli.L1,\r\nli.L3,\r\nli.L5,\r\nli.L7,\r\nli.L9 {\r\n}\r\n\r\n@media print {\r\n  pre.prettyprint {\r\n    background-color: none;\r\n  }\r\n  pre .str,\r\n  code .str {\r\n    color: #060;\r\n  }\r\n  pre .kwd,\r\n  code .kwd {\r\n    color: #006;\r\n    font-weight: bold;\r\n  }\r\n  pre .com,\r\n  code .com {\r\n    color: #600;\r\n    font-style: italic;\r\n  }\r\n  pre .typ,\r\n  code .typ {\r\n    color: #404;\r\n    font-weight: bold;\r\n  }\r\n  pre .lit,\r\n  code .lit {\r\n    color: #044;\r\n  }\r\n  pre .pun,\r\n  code .pun {\r\n    color: #440;\r\n  }\r\n  pre .pln,\r\n  code .pln {\r\n    color: #000;\r\n  }\r\n  pre .tag,\r\n  code .tag {\r\n    color: #006;\r\n    font-weight: bold;\r\n  }\r\n  pre .atn,\r\n  code .atn {\r\n    color: #404;\r\n  }\r\n  pre .atv,\r\n  code .atv {\r\n    color: #060;\r\n  }\r\n}\r\n","/***********************************************************/\n/* ==================== Global Color ===================== */\n/***********************************************************/\n\n/*\nPrimary         #f34a4a\nSecondary       #4a4af3\nText            #b2b2fa\nAccent          #f34a4a\nBG Primary      #11111A\nBG Secondary    #1B1B28\nHeading         #fff\nButton Text     #11111A\nTertiary        #2F2F48\n*/\n\n/* Light Mode(default */\n:root {\n  --anyapi-bg: #f6f7f7;\n  --anyapi-card: #fff;\n  --anyapi-primary: #5d5fef;\n  --anyapi-primary-hover: #4c4ddc;\n  --anyapi-text: #1a1a2e;\n  --anyapi-success: #00c48c;\n  --anyapi-danger: #ff6b6b;\n  // --anyapi-border: #e8e8ff;\n  // --anyapi-text-muted: #666699;\n}\n\n.dark-mode {\n  --anyapi-bg: #0f1121;\n  --anyapi-card: #161827;\n  --anyapi-primary: #7b7cff;\n  --anyapi-primary-hover: #9697ff;\n  --anyapi-text: ##b2b2fa;\n  --anyapi-success: #00d4a0;\n  --anyapi-danger: #ff6b9d;\n  // --anyapi-border: #23273a;\n  // --anyapi-text-muted: #9494b8;\n}\n\n/***********************************************************/\n/* ====================== Dashboard ====================== */\n/***********************************************************/\n\n#anyapi-review-banner {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: white;\n  padding: 20px 30px;\n  border-radius: 20px;\n  margin: 30px 0;\n  box-shadow: 0 20px 40px rgba(102, 126, 234, 0.3),\n    0 10px 20px rgba(118, 75, 162, 0.2);\n  position: relative;\n  overflow: hidden;\n  animation: slideDown 0.6s ease-out;\n}\n\n#anyapi-review-banner::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -100%;\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(\n    90deg,\n    transparent,\n    rgba(255, 255, 255, 0.1),\n    transparent\n  );\n  animation: shimmer 3s infinite;\n}\n\n.review-content {\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  max-width: 1000px;\n  margin: 0 auto;\n}\n\n.review-icon {\n  font-size: 32px;\n  animation: float 3s ease-in-out infinite;\n}\n\n.review-text h3 {\n  margin: 0 0 4px 0;\n  font-size: 22px;\n  font-weight: 700;\n}\n\n.review-text p {\n  margin: 0 0 8px 0;\n  opacity: 0.9;\n  font-size: 16px;\n}\n\n.review-stars {\n  font-size: 20px;\n  margin-top: 4px;\n  animation: sparkle 2s ease-in-out infinite;\n}\n\n.review-actions {\n  display: flex;\n  gap: 12px;\n  margin-left: auto;\n}\n\n.review-actions .button {\n  padding: 12px 24px !important;\n  font-weight: 600 !important;\n  border-radius: 12px !important;\n  transition: all 0.3s ease !important;\n}\n\n.review-actions .button-primary {\n  background: #fff !important;\n  color: #667eea !important;\n  box-shadow: 0 8px 20px rgba(255, 255, 255, 0.3) !important;\n}\n\n.review-actions .button-primary:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 12px 30px rgba(255, 255, 255, 0.4) !important;\n}\n\n.review-close {\n  position: absolute;\n  top: 12px;\n  right: 20px;\n  background: none;\n  border: none;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 24px;\n  width: 32px;\n  height: 32px;\n  border-radius: 50%;\n  cursor: pointer;\n  transition: all 0.3s ease;\n}\n\n.review-close:hover {\n  background: rgba(255, 255, 255, 0.2);\n  color: white;\n  transform: rotate(90deg);\n}\n\n/* Animations */\n@keyframes slideDown {\n  from {\n    opacity: 0;\n    transform: translateY(-30px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n@keyframes shimmer {\n  0% {\n    left: -100%;\n  }\n  100% {\n    left: 100%;\n  }\n}\n\n@keyframes float {\n  0%,\n  100% {\n    transform: translateY(0px);\n  }\n  50% {\n    transform: translateY(-10px);\n  }\n}\n\n@keyframes sparkle {\n  0%,\n  100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0.7;\n  }\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n  .review-content {\n    flex-direction: column;\n    text-align: center;\n    gap: 16px;\n  }\n  .review-actions {\n    margin-left: 0 !important;\n    justify-content: center;\n    flex-wrap: wrap;\n  }\n}\n\n#anyapi-dashboard {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  background: var(--anyapi-bg);\n  min-height: 80vh;\n  padding: 20px;\n  border-radius: 8px;\n}\n\n#anyapi-last-updated {\n  font-size: 13px;\n  color: #646970;\n  margin-top: 10px;\n  margin-left: 15px;\n  white-space: nowrap;\n  float: right;\n}\n\n/* Main Layout (Left Content + Right Info */\n.anyapi-main-grid {\n  display: grid;\n  grid-template-columns: 1fr 320px;\n  gap: 30px;\n  margin-top: 20px;\n}\n@media (max-width: 1200px) {\n  .anyapi-main-grid {\n    grid-template-columns: 1fr;\n  }\n  .anyapi-sidebar {\n    order: -1;\n  }\n}\n\n.anyapi-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n  gap: 20px;\n  margin-bottom: 30px;\n}\n\n.anyapi-card {\n  // background: #fff;\n  background: var(--anyapi-card);\n  padding: 24px;\n  border-radius: 12px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n  transition: transform 0.2s;\n}\n\n.anyapi-card:hover {\n  transform: translateY(-4px);\n}\n\n.anyapi-card h3 {\n  margin: 0 0 12px;\n  font-size: 14px;\n  color: #646970;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n\n.anyapi-card .value {\n  font-size: 32px;\n  font-weight: 700;\n  color: #1d2327;\n  margin: 8px 0 0;\n}\n\n.anyapi-card .change {\n  font-size: 14px;\n}\n\n/* Status */\n.positive {\n  // color: #00a32a;\n  color: var(--anyapi-success);\n}\n\n.warning {\n  color: #dba617;\n  // color: var(--anyapi-success);\n}\n\n.negative {\n  // color: #d63638;\n  color: var(--anyapi-danger);\n}\n\n/* Chart Section */\n.anyapi-charts-row {\n  display: grid;\n  grid-template-columns: 2fr 1fr;\n  gap: 20px;\n  margin-bottom: 30px;\n}\n\n@media (max-width: 960px) {\n  .anyapi-charts-row {\n    grid-template-columns: 1fr;\n  }\n}\n\n.anyapi-chart-card {\n  // background: #fff;\n  background: var(--anyapi-card);\n  padding: 24px;\n  border-radius: 12px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.anyapi-chart-card h2 {\n  margin-top: 0;\n  font-size: 18px;\n}\n\n/* Logs Section */\n#anyapi-logs-section {\n  // background: #fff;\n  background: var(--anyapi-card);\n  border-radius: 12px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n  overflow: hidden;\n}\n\n#anyapi-logs-header {\n  padding: 20px 24px;\n  border-bottom: 1px solid #e2e4e7;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n#anyapi-logs-section .logs-controls {\n  display: flex;\n  gap: 12px;\n  align-items: center;\n}\n\n#anyapi-log-search {\n  padding: 10px 16px;\n  border: 1px solid #ddd;\n  border-radius: 12px;\n  width: 300px;\n  max-width: 100%;\n}\n\n.method-post {\n  background: #7c3aed;\n  color: white;\n  padding: 4px 10px;\n  border-radius: 8px;\n  font-size: 11px;\n  font-weight: bold;\n}\n\n.status-badge {\n  padding: 4px 10px;\n  border-radius: 8px;\n  font-weight: bold;\n  font-size: 12px;\n}\n\n.status-badge.success {\n  background: #10b981;\n  color: white;\n}\n\n.status-badge.warning {\n  background: #f59e0b;\n  color: white;\n}\n\n.status-badge.error {\n  background: #ef4444;\n  color: white;\n}\n\n.endpoint code {\n  font-size: 12px;\n  background: #f3f4f6;\n  padding: 2px 6px;\n  border-radius: 4px;\n}\n\n.payload pre {\n  margin: 0;\n  font-size: 11px;\n  color: #666;\n  white-space: pre-wrap;\n  word-break: break-all;\n}\n\n#anyapi-logs-footer {\n  display: flex;\n  justify-content: space-between;\n  margin-top: 16px;\n  font-size: 14px;\n  color: #666;\n}\n\n#anyapi-log-search {\n  padding: 8px 12px;\n  border: 1px solid #ddd;\n  border-radius: 6px;\n  width: 300px;\n}\n\n#anyapi-logs-table {\n  width: 100%;\n  border-collapse: collapse;\n}\n\n#anyapi-logs-table th {\n  background: #f9fafb;\n  text-align: left;\n  padding: 12px 16px;\n  font-weight: 600;\n  color: #1d2327;\n}\n\n#anyapi-logs-table td {\n  padding: 12px 16px;\n  border-top: 1px solid #e2e4e7;\n  font-size: 14px;\n}\n\n/* Idle CSSS */\n/* Status */\n.status-2xx {\n  // color: #00a32a;\n  color: var(--anyapi-success);\n}\n\n.status-4xx {\n  // color: #d63638;\n  color: var(--anyapi-danger);\n}\n\n.status-5xx {\n  // color: #d63638;\n  color: var(--anyapi-danger);\n  font-weight: bold;\n}\n\n/* Idle CSS */\n.payload {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  font-size: 12px;\n  color: #646970;\n  max-width: 300px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n/* Idle CSS */\n.loading {\n  text-align: center;\n  padding: 60px;\n  font-size: 18px;\n  color: #646970;\n}\n\n/* Right Sidebar & Cards */\n.anyapi-sidebar {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n}\n\n.anyapi-sidebar-card {\n  // background: #fff;\n  background: var(--anyapi-card);\n  padding: 20px;\n  border-radius: 12px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n  border: 1px solid #e2e4e7;\n}\n\n.anyapi-sidebar-card h3 {\n  margin: 0 0 12px;\n  font-size: 16px;\n  color: #1d2327;\n}\n\n/* Plugin Version Card */\n.dashicons-yes-alt {\n  color: #00a32a;\n}\n\n.dashicons-warning {\n  color: #dba617;\n}\n\n.dashicons-update {\n  color: #f56e14;\n  animation: anyapi-spin 2s linear infinite;\n}\n\n.anyapi-new-version-notice {\n  font-size: 12px;\n  color: #d63638;\n  font-weight: bold;\n  margin: 8px 0 4px;\n\n  small {\n    font-weight: normal;\n    color: #666;\n  }\n}\n/* Update details box */\n.anyapi-update-box {\n  margin: 10px 0;\n  padding: 12px;\n  background: #fff8e5;\n  border-left: 4px solid #ffb900;\n  font-size: 11px;\n  line-height: 1.4;\n\n  strong {\n    font-size: 11px;\n    display: block;\n    margin-bottom: 4px;\n  }\n\n  ul {\n    margin: 6px 0 8px;\n    padding-left: 18px;\n    line-height: 1.4;\n\n    li {\n      margin-bottom: 2px;\n    }\n  }\n\n  .anyapi-update-button {\n    background: #d63638;\n    border-color: #d63638;\n    box-shadow: none;\n    text-shadow: none;\n    color: #fff !important;\n\n    &:hover,\n    &:focus {\n      background: #c02a2a;\n      border-color: #c02a2a;\n    }\n  }\n\n  .anyapi-view-details {\n    margin-left: 8px;\n    font-size: 10px;\n    color: #666;\n\n    &:hover {\n      color: #d63638;\n    }\n  }\n}\n\n.anyapi-latest-text {\n  font-size: 12px;\n  color: #646970;\n}\n\n/* Global */\n@keyframes anyapi-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n/* Upgrade Card */\n.anyapi-upgrade {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: white;\n  position: relative;\n  overflow: hidden;\n}\n\n.anyapi-upgrade::before {\n  content: \"\";\n  position: absolute;\n  top: -50%;\n  right: -50%;\n  width: 200%;\n  height: 200%;\n  background: rgba(255, 255, 255, 0.1);\n  transform: rotate(30deg);\n}\n\n.anyapi-upgrade h3,\n.anyapi-upgrade p,\n.anyapi-upgrade li {\n  color: white;\n}\n\n.anyapi-upgrade .badge {\n  position: absolute;\n  top: 12px;\n  right: 12px;\n  background: #ffb900;\n  color: #000;\n  padding: 4px 10px;\n  border-radius: 20px;\n  font-size: 11px;\n  font-weight: bold;\n}\n\n.anyapi-upgrade .features {\n  margin: 16px 0;\n  padding-left: 20px;\n}\n\n.anyapi-upgrade .features li {\n  margin-bottom: 8px;\n  position: relative;\n}\n\n.anyapi-upgrade .features li::before {\n  content: \"✓\";\n  position: absolute;\n  left: -20px;\n}\n\n.anyapi-upgrade .button-primary {\n  background: white;\n  color: #667eea;\n  font-weight: bold;\n}\n\n.anyapi-button-block {\n  display: block;\n  text-align: center;\n}\n\n.anyapi-save {\n  text-align: center;\n  margin-top: 12px;\n  font-size: 14px;\n  opacity: 0.9;\n}\n\n/* Quick Links Card */\n.anyapi-quick-links {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.anyapi-quick-links li {\n  margin-bottom: 8px;\n}\n\n.anyapi-quick-links a {\n  color: #0073aa;\n  text-decoration: none;\n}\n\n.anyapi-quick-links a:hover {\n  text-decoration: underline;\n}\n\n/* Bottom Cards */\n.anyapi-bottom-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n  gap: 20px;\n  margin-top: 40px;\n}\n.anyapi-info-card {\n  // background: #fff;\n  background: var(--anyapi-card);\n  padding: 24px;\n  border-radius: 12px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n  border: 1px solid #e2e4e7;\n  text-align: center;\n}\n.anyapi-info-card h3 {\n  margin: 0 0 12px;\n  color: #1d2327;\n}\n.anyapi-info-card p {\n  color: #646970;\n  margin-bottom: 20px;\n  line-height: 1.5;\n}\n.anyapi-info-card .button {\n  width: 100%;\n}\n\n/***********************************************************/\n/* ================== Dashboard Header =================== */\n/***********************************************************/\n\n#anyapi-dashboard-header {\n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  min-height: 64px;\n  padding: 0 24px; /* <- padding -> */\n  margin-bottom: 28px;\n  flex-wrap: wrap;\n  gap: 16px;\n}\n\n.anyapi-header-left {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.anyapi-logo {\n  height: 40px;\n  width: auto;\n}\n\n.anyapi-logo svg {\n  border-radius: 8px;\n  transition: transform 0.2s;\n}\n.anyapi-logo:hover svg {\n  transform: scale(1.08);\n}\n\n.anyapi-header-right {\n  position: absolute;\n  right: 20px; /* ← 24px、20px、16px、30px */\n  top: 50%;\n  transform: translateY(-50%);\n}\n/* Responsive */\n@media (max-width: 782px) {\n  #anyapi-dashboard-header {\n    padding: 0 16px;\n  }\n  .anyapi-header-right {\n    right: 16px; /* 手機時可再縮一點 */\n  }\n}\n\n/***********************************************************/\n/* ================== Dark Mode Toggle =================== */\n/***********************************************************/\n\n#dark-mode-toggle {\n  position: relative;\n  width: 56px;\n  height: 28px;\n  background: #ccd0d5;\n  border-radius: 50px;\n  border: none;\n  cursor: pointer;\n  overflow: hidden;\n  transition: background 0.3s;\n}\n\n#dark-mode-toggle .toggle-ball {\n  position: absolute;\n  top: 4px;\n  left: 4px;\n  width: 20px;\n  height: 20px;\n  background: white;\n  border-radius: 50%;\n  transition: transform 0.3s;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n}\n\n#dark-mode-toggle .sun-icon,\n#dark-mode-toggle .moon-icon {\n  position: absolute;\n  top: 6px;\n  font-size: 14px;\n  transition: opacity 0.3s;\n}\n\n#dark-mode-toggle .sun-icon {\n  left: 8px;\n  opacity: 1;\n}\n#dark-mode-toggle .moon-icon {\n  right: 8px;\n  opacity: 0;\n}\n\n/* Toggle Dark Mode */\n.dark-mode #dark-mode-toggle {\n  background: #6366f1;\n}\n\n.dark-mode #dark-mode-toggle .toggle-ball {\n  transform: translateX(28px);\n}\n\n.dark-mode #dark-mode-toggle .sun-icon {\n  opacity: 0;\n}\n\n.dark-mode #dark-mode-toggle .moon-icon {\n  opacity: 1;\n}\n\n.dark-mode {\n  background: #1e1e1e;\n  color: #e0e0e0;\n}\n\n.dark-mode #anyapi-dashboard,\n.dark-mode .anyapi-card,\n.dark-mode .chart-card,\n.dark-mode #logs-section,\n.dark-mode .anyapi-sidebar-card,\n.dark-mode .anyapi-info-card {\n  background: #2d2d2d;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n  border-color: #444;\n}\n\n.dark-mode .anyapi-card h3,\n.dark-mode .chart-card h2,\n.dark-mode #logs-table th,\n.dark-mode .anyapi-info-card h3 {\n  color: #a0a0a0;\n}\n\n.dark-mode .value,\n.dark-mode #logs-table td {\n  color: var(--anyapi-text);\n}\n\n.dark-mode #logs-table th {\n  background: #363636;\n}\n\n.dark-mode .status-2xx {\n  // color: #00e676;\n  color: var(--anyapi-success);\n}\n.dark-mode .status-4xx,\n.dark-mode .status-5xx {\n  // color: #ff5252;\n  color: var(--anyapi-danger);\n}\n","/* Integration 專屬樣式(加在原有 CSS 後) */\n:root {\n  /* 延續上次變數 */\n  --anyapi-purple: #7b68ee; /* 步驟紫色,從截圖提取 */\n  --anyapi-gray-light: #f8f9fa;\n  --anyapi-gray: #6c757d;\n}\n\n.dark-mode {\n  --anyapi-purple: #a78bfa;\n  --anyapi-gray-light: #2d3748;\n  --anyapi-gray: #a0aec0;\n}\n\n.integration-main {\n  display: grid;\n  grid-template-columns: 200px 1fr;\n  gap: 30px;\n  margin: 20px 0;\n}\n\n.steps-sidebar {\n  background: var(--anyapi-card);\n  border-radius: 12px;\n  padding: 20px;\n  height: fit-content;\n}\n\n.step-item {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 12px 0;\n  cursor: pointer;\n  transition: color 0.3s;\n}\n\n.step-item.active .step-number {\n  background: var(--anyapi-purple);\n  color: white;\n}\n\n.step-number {\n  width: 32px;\n  height: 32px;\n  border-radius: 50%;\n  background: var(--anyapi-gray-light);\n  display: grid;\n  place-items: center;\n  font-weight: bold;\n}\n\n.step-label {\n  font-size: 14px;\n  color: var(--anyapi-text-muted);\n}\n\n.integration-content {\n  position: relative;\n}\n\n.step-content {\n  display: none;\n  animation: fadeIn 0.3s;\n}\n\n.step-content.active {\n  display: block;\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n    transform: translateX(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateX(0);\n  }\n}\n\n.form-group {\n  margin-bottom: 24px;\n}\n\n.form-group label {\n  display: block;\n  margin-bottom: 8px;\n  font-weight: 600;\n  color: var(--anyapi-text);\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n  width: 100%;\n  padding: 12px;\n  border: 1px solid var(--anyapi-border);\n  border-radius: 8px;\n  background: var(--anyapi-card);\n  transition: border-color 0.3s;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n  outline: none;\n  border-color: var(--anyapi-primary);\n}\n\n.required {\n  color: var(--anyapi-danger);\n}\n\n.help-text {\n  color: var(--anyapi-text-muted);\n  font-size: 12px;\n}\n\n.filter-mode-toggle {\n  display: flex;\n  gap: 8px;\n  margin: 12px 0;\n}\n\n.mode-btn {\n  padding: 8px 16px;\n  border: 1px solid var(--anyapi-border);\n  background: var(--anyapi-card);\n  border-radius: 6px;\n  cursor: pointer;\n}\n\n.mode-btn.active {\n  background: var(--anyapi-primary);\n  color: white;\n  border-color: var(--anyapi-primary);\n}\n\n.json-preview {\n  background: #1e1e1e;\n  border-radius: 8px;\n  padding: 16px;\n  margin: 16px 0;\n  overflow: auto;\n}\n\n.json-preview pre {\n  margin: 0;\n  color: #f8f8f2;\n  font-family: \"Courier New\", monospace;\n  font-size: 14px;\n}\n\n.actions-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-bottom: 24px;\n}\n\n.action-card {\n  background: var(--anyapi-card);\n  padding: 20px;\n  border-radius: 12px;\n  border: 1px solid var(--anyapi-border);\n}\n\n.action-card h3 {\n  margin-top: 0;\n  color: var(--anyapi-text);\n}\n\n.action-card label {\n  display: block;\n  margin: 8px 0;\n  cursor: pointer;\n}\n\n.integration-footer {\n  display: flex;\n  justify-content: flex-end;\n  gap: 12px;\n  padding: 20px 0;\n  border-top: 1px solid var(--anyapi-border);\n}\n\n.preview-json-btn {\n  background: var(--anyapi-danger);\n  color: white;\n}\n\n/* 響應式 */\n@media (max-width: 960px) {\n  .integration-main {\n    grid-template-columns: 1fr;\n  }\n  .steps-sidebar {\n    order: -1;\n    display: flex;\n    justify-content: center;\n  }\n  .step-item {\n    flex-direction: column;\n    text-align: center;\n  }\n  .actions-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* API Status 專屬樣式 */\n#anyapi-status {\n  background: var(--anyapi-bg);\n  min-height: 100vh;\n}\n\n.anyapi-notice.success {\n  background: linear-gradient(90deg, #10b981 0%, #34d399 100%);\n  color: white;\n  padding: 16px 24px;\n  border-radius: 12px;\n  font-weight: 600;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin: 20px 0;\n  box-shadow: 0 4px 20px rgba(16, 185, 129, 0.2);\n}\n\n.notice-actions {\n  display: flex;\n  gap: 8px;\n}\n\n.integration-card {\n  background: var(--anyapi-card);\n  border: 1px solid var(--anyapi-border);\n  border-radius: 16px;\n  overflow: hidden;\n  margin: 30px 0;\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);\n}\n\n.integration-row {\n  display: grid;\n  grid-template-columns: 100px 1fr 120px 1fr 100px 1fr;\n  gap: 16px;\n  padding: 24px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n@media (max-width: 1280px) {\n  .integration-row {\n    grid-template-columns: 1fr 1fr;\n    gap: 20px;\n  }\n}\n\n@media (max-width: 782px) {\n  .integration-row {\n    grid-template-columns: 1fr;\n    text-align: center;\n  }\n}\n\n.badge {\n  padding: 8px 16px;\n  border-radius: 50px;\n  font-size: 13px;\n  font-weight: 700;\n  text-align: center;\n  white-space: nowrap;\n}\n\n.badge.purple {\n  background: #7b68ee;\n  color: white;\n}\n\n.badge.gray {\n  background: #e2e8f0;\n  color: #475569;\n}\n\n.code-snippet {\n  background: #1e1e1e;\n  color: #a6e22e;\n  padding: 12px 16px;\n  border-radius: 12px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 13px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: 100%;\n}\n\n.dark-mode .code-snippet {\n  background: #2d2d2d;\n  color: #89ddff;\n}\n\n.status-action {\n  text-align: center;\n  margin: 40px 0;\n}\n\n.button-warning {\n  background: #f59e0b !important;\n  color: white !important;\n  padding: 14px 32px !important;\n  font-size: 16px;\n  border-radius: 12px;\n}\n\n.status-footer {\n  text-align: center;\n  margin: 60px 0 20px;\n}\n\n/* Dark Mode 增強 */\n.dark-mode .anyapi-notice.success {\n  background: linear-gradient(90deg, #059669 0%, #10b981 100%);\n}\n\n.dark-mode .integration-card {\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n}\n\n/* 完成頁 */\n.completion-wrapper {\n  text-align: center;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 20px;\n}\n.completion-header h2 {\n  font-size: 28px;\n  margin: 16px 0;\n  color: var(--anyapi-text);\n}\n.success-icon {\n  font-size: 64px;\n  color: #10b981;\n}\n.completion-actions {\n  margin: 30px 0;\n  display: flex;\n  gap: 12px;\n  justify-content: center;\n  flex-wrap: wrap;\n}\n.integration-card.standalone {\n  margin: 40px auto;\n  max-width: 100%;\n}\n.final-cta {\n  margin: 50px 0;\n}\n.button-hero {\n  padding: 18px 40px !important;\n  font-size: 18px !important;\n  border-radius: 16px;\n  box-shadow: 0 8px 25px rgba(245, 158, 11, 0.4);\n}\n.completion-footer {\n  margin-top: 60px;\n  display: flex;\n  gap: 20px;\n  justify-content: center;\n  flex-wrap: wrap;\n}\n\n/* */\n.test-api-section {\n  margin: 50px auto;\n  text-align: center;\n}\n\n.button-success {\n  background: linear-gradient(135deg, #10b981, #34d399) !important;\n  color: white !important;\n  border: none;\n  padding: 18px 40px !important;\n  font-size: 18px;\n  border-radius: 16px;\n  box-shadow: 0 10px 30px rgba(16, 185, 129, 0.4);\n  transition: all 0.3s;\n}\n\n.button-success:hover {\n  transform: translateY(-3px);\n  box-shadow: 0 15px 40px rgba(16, 185, 129, 0.5);\n}\n\n.button-success.loading {\n  opacity: 0.7;\n  cursor: not-allowed;\n  position: relative;\n}\n.button-success.loading::after {\n  content: \"\";\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  border: 3px solid #fff;\n  border-top-color: transparent;\n  border-radius: 50%;\n  animation: spin 1s linear infinite;\n  right: 20px;\n}\n\n@keyframes spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.test-result {\n  margin-top: 30px;\n  padding: 20px;\n  border-radius: 12px;\n  font-family: \"SFMono-Regular\", monospace;\n  font-size: 14px;\n  text-align: left;\n  max-width: 800px;\n  margin-left: auto;\n  margin-right: auto;\n  border: 1px solid;\n}\n\n.test-result.success {\n  background: #ecfdf5;\n  border-color: #10b981;\n  color: #065f46;\n}\n\n.test-result.error {\n  background: #fee2e2;\n  border-color: #ef4444;\n  color: #991b1b;\n}\n\n.dark-mode .test-result.success {\n  background: #064e3b;\n  color: #86efac;\n}\n.dark-mode .test-result.error {\n  background: #7f1d1d;\n  color: #fca5a5;\n}\n"]}
  • anyapi/trunk/assets/js/admin.js

    r3394506 r3414465  
    1010  });
    1111});
     12
     13/**
     14 * Dark Mode & Last Updated
     15 */
     16
     17document.addEventListener("DOMContentLoaded", () => {
     18  const toggle = document.getElementById("dark-mode-toggle");
     19  const body = document.body;
     20
     21  if (localStorage.getItem("anyapiDarkMode") === "enabled") {
     22    body.classList.add("dark-mode");
     23  }
     24
     25  if (!toggle) return;
     26  toggle.addEventListener("click", () => {
     27    body.classList.toggle("dark-mode");
     28    if (body.classList.contains("dark-mode")) {
     29      localStorage.setItem("anyapiDarkMode", "enabled");
     30    } else {
     31      localStorage.setItem("anyapiDarkMode", "disabled");
     32    }
     33  });
     34
     35  // Dashboard update time
     36  function updateTime() {
     37    document.getElementById("update-time").textContent =
     38      new Date().toLocaleTimeString("zh-en", {
     39        hour: "2-digit",
     40        minute: "2-digit",
     41      });
     42  }
     43  updateTime();
     44  setInterval(updateTime, 30000);
     45});
     46
     47/**
     48 * Review Card
     49 */
     50
     51jQuery(document).ready(function ($) {
     52  if (!anyapiReview.show_banner) return;
     53
     54  const $banner = $("#anyapi-review-banner");
     55  const $daysUsed = $banner.find(".days-used");
     56  const $yesBtn = $("#anyapi-review-yes");
     57  const $dismissBtn = $("#anyapi-review-dismiss");
     58  const $closeBtn = $("#anyapi-review-close");
     59
     60  // Update the days used
     61  const days = anyapiReview.days_used;
     62  if ($daysUsed.length && days > 0) {
     63    $daysUsed.html(`You've beend using <strong>${days}</strong> days`);
     64  }
     65
     66  // Hit review
     67  $yesBtn.on("click", function (e) {
     68    e.preventDefault();
     69    window.open(anyapiReview.review_url, "_blank");
     70    dismissReviewBanner(true);
     71  });
     72
     73  // Hit dismiss
     74  $dismissBtn.on("click", function () {
     75    dismissReviewBanner(false);
     76  });
     77
     78  // Hit close
     79  $closeBtn.on("click", function () {
     80    dismissReviewBanner(false);
     81  });
     82
     83  function dismissReviewBanner(reviewed = false) {
     84    $.post(
     85      anyapiReview.ajax_url,
     86      {
     87        action: "anyapi_dismiss_review",
     88        reviewed: reviewed ? 1 : 0,
     89        _wpnonce: anyapiReview.nonce,
     90      },
     91      function () {
     92        $banner.fadeOut(300, function () {
     93          $banner.remove();
     94        });
     95      }
     96    );
     97  }
     98});
  • anyapi/trunk/assets/js/admin.min.js

    r3394506 r3414465  
    1 !function t(o,u,i){function c(n,r){if(!u[n]){if(!o[n]){var e="function"==typeof require&&require;if(!r&&e)return e(n,!0);if(f)return f(n,!0);throw(r=new Error("Cannot find module '"+n+"'")).code="MODULE_NOT_FOUND",r}e=u[n]={exports:{}},o[n][0].call(e.exports,function(r){return c(o[n][1][r]||r)},e,e.exports,t,o,u,i)}return u[n].exports}for(var f="function"==typeof require&&require,r=0;r<i.length;r++)c(i[r]);return c}({1:[function(r,n,e){"use strict";jQuery(document).ready(function(r){r(document).on("click",".notice-action",function(){jQuery.post(ajaxurl,{action:"close_notice"})})})},{}]},{},[1]);
     1!(function i(o, a, r) {
     2  function c(n, e) {
     3    if (!a[n]) {
     4      if (!o[n]) {
     5        var t = "function" == typeof require && require;
     6        if (!e && t) return t(n, !0);
     7        if (d) return d(n, !0);
     8        throw (
     9          (((e = new Error("Cannot find module '" + n + "'")).code =
     10            "MODULE_NOT_FOUND"),
     11          e)
     12        );
     13      }
     14      (t = a[n] = { exports: {} }),
     15        o[n][0].call(
     16          t.exports,
     17          function (e) {
     18            return c(o[n][1][e] || e);
     19          },
     20          t,
     21          t.exports,
     22          i,
     23          o,
     24          a,
     25          r
     26        );
     27    }
     28    return a[n].exports;
     29  }
     30  for (
     31    var d = "function" == typeof require && require, e = 0;
     32    e < r.length;
     33    e++
     34  )
     35    c(r[e]);
     36  return c;
     37})(
     38  {
     39    1: [
     40      function (e, n, t) {
     41        "use strict";
     42        jQuery(document).ready(function (e) {
     43          e(document).on("click", ".notice-action", function () {
     44            jQuery.post(ajaxurl, { action: "close_notice" });
     45          });
     46        }),
     47          document.addEventListener("DOMContentLoaded", function () {
     48            var e = document.getElementById("dark-mode-toggle"),
     49              n = document.body;
     50            function t() {
     51              document.getElementById("update-time").textContent =
     52                new Date().toLocaleTimeString("zh-en", {
     53                  hour: "2-digit",
     54                  minute: "2-digit",
     55                });
     56            }
     57            "enabled" === localStorage.getItem("anyapiDarkMode") &&
     58              n.classList.add("dark-mode"),
     59              e &&
     60                (e.addEventListener("click", function () {
     61                  n.classList.toggle("dark-mode"),
     62                    n.classList.contains("dark-mode")
     63                      ? localStorage.setItem("anyapiDarkMode", "enabled")
     64                      : localStorage.setItem("anyapiDarkMode", "disabled");
     65                }),
     66                t(),
     67                setInterval(t, 3e4));
     68          }),
     69          jQuery(document).ready(function (n) {
     70            var t, e, i, o, a, r;
     71            function c(e) {
     72              n.post(
     73                anyapiReview.ajax_url,
     74                {
     75                  action: "anyapi_dismiss_review",
     76                  reviewed: 0 < arguments.length && void 0 !== e && e ? 1 : 0,
     77                  _wpnonce: anyapiReview.nonce,
     78                },
     79                function () {
     80                  t.fadeOut(300, function () {
     81                    t.remove();
     82                  });
     83                }
     84              );
     85            }
     86            anyapiReview.show_banner &&
     87              ((e = (t = n("#anyapi-review-banner")).find(".days-used")),
     88              (i = n("#anyapi-review-yes")),
     89              (o = n("#anyapi-review-dismiss")),
     90              (a = n("#anyapi-review-close")),
     91              (r = anyapiReview.days_used),
     92              e.length &&
     93                0 < r &&
     94                e.html(
     95                  "You've beend using <strong>".concat(r, "</strong> days")
     96                ),
     97              i.on("click", function (e) {
     98                e.preventDefault(),
     99                  window.open(anyapiReview.review_url, "_blank"),
     100                  c(!0);
     101              }),
     102              o.on("click", function () {
     103                c(!1);
     104              }),
     105              a.on("click", function () {
     106                c(!1);
     107              }));
     108          });
     109      },
     110      {},
     111    ],
     112  },
     113  {},
     114  [1]
     115);
  • anyapi/trunk/inc/Admin.php

    r3394506 r3414465  
    66namespace Anyapi;
    77
    8 class Admin {
     8 class Admin {
    99
    1010  public $plugin_path;
     
    3434    }
    3535    add_action( 'admin_init', array( $this, 'anyapiInit' ) );
    36     add_action( 'admin_notices', array( $this, 'addAdminNotice' ) );
    3736    add_action( 'admin_enqueue_scripts', array( $this, 'enqueueFiles') );
    3837
    39     add_action( 'wp_ajax_close_notice', function() {
    40       set_transient( 'anyapi_notice_closed', true, 259200 );
    41     });
     38    // add_action( 'admin_notices', array( $this, 'addAdminNotice' ) );
     39    // add_action( 'wp_ajax_close_notice', function() {
     40    //   set_transient( 'anyapi_notice_closed', true, 259200 );
     41    // });
     42    add_action( 'wp_ajax_anyapi_dismiss_review', array( $this, 'ajaxDismissReview' ) );
     43    add_action( 'wp_ajax_anyapi_get_logs', array( $this, 'ajaxGetLogs' ) );
    4244
    4345    add_filter( "plugin_action_links_" . plugin_basename( dirname( __FILE__, 2) ) . '/anyapi.php', array( $this, 'settingsLinks' ) , 10, 2 );
     
    188190  public function anyapiInit() {
    189191
    190     $this->update();
    191 
    192     if ( ! get_option( 'anyapi_wc_apilog_function' ) ) {
     192    $this->updateStatus();
     193
     194    if ( ! get_option( 'anyapi_activated_time' ) ) {
    193195      return;
    194196    }
     
    205207      `api_url` text NOT NULL,
    206208      `payload` longtext NOT NULL,
     209      `latency` int NULL,
    207210      `timestamp` datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
    208211      PRIMARY KEY (`id`)
     
    212215
    213216    dbDelta( $sql );
     217
     218  }
     219
     220  public function updateStatus() {
     221
     222    $logCount       = self::getLog( 'count' );
     223    $activatedTime  = get_option( 'anyapi_activated_time' );
     224    $daysUsed       = 0;
     225    if ( ! $activatedTime ) {
     226      $activatedTime = time();
     227      update_option( 'anyapi_activated_time ', $activatedTime );
     228      $daysUsed = 0;
     229    } else {
     230      $daysUsed = floor( ( time() - $activatedTime ) / DAY_IN_SECONDS );
     231    }
     232
     233    $dismissed    = get_option( 'anyapi_review_dismissed' );
     234    $dismissTime  = get_option( 'anyapi_review_dismiss_time' );
     235    $reviewed     = get_option( 'anyapi_review_given' );
     236    $shouldShowBanner = (
     237      $logCount >= 10 &&
     238      $daysUsed >= 7 &&
     239      ! $dismissed &&
     240      ! $reviewed &&
     241      ( ! $dismissTime || time() > $dismissTime )
     242    );
     243
     244    update_option( 'anyapi_version', ANYAPI_VERSION );
     245    update_option( 'anyapi_orderapi', true );
     246    update_option( 'anyapi_log_count', $logCount );
     247    update_option( 'anyapi_review_conditions', array(
     248      'log_count'     => $logCount,
     249      'days_used'     => $daysUsed,
     250      'should_show'   => $shouldShowBanner
     251     ) );
     252
     253    if ( $shouldShowBanner ) {
     254      update_option( 'anyapi_review_dismissed', false );
     255    }
    214256
    215257  }
     
    221263    $apiStatus    = get_option( $name[ 'anyApiOrderApi' ], array() );
    222264    $notice       = self::getConfig()[ 'message' ];
    223     $logCount     = self::getNumberOfLog( 'count' , 'anyapi_log_anyapi' );
     265    $logCount     = self::getLog( 'count' );
    224266
    225267    if ( ! isset( $numberOfKey ) || count( $numberOfKey ) === 0 ) {
     
    294336  }
    295337
    296   private function getNumberOfLog( $cache, $suffix ) {
     338  public static function getLog( $cache ) {
    297339
    298340    global $wpdb;
    299     $results      = wp_cache_get( 'anyapi_log_'. $cache, 'anyapi_log_cache' );
    300     $searchTable  = $wpdb->prefix . $suffix;
     341    $results  = wp_cache_get( 'anyapi_log_'. $cache, 'anyapi_log_cache' );
     342    $table    = $wpdb->prefix . 'anyapi_log_anyapi';
    301343
    302344    if ( false === $results ) {
    303       // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Custom table query required for API logs.
    304       $results = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM %i" , $searchTable ) );
     345      $results = match ( $cache ) {
     346        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Custom table query required for API logs.
     347        'count'       => $wpdb->get_var( $wpdb->prepare(
     348          "SELECT COUNT(*) FROM %i", $table
     349        ) ),
     350        'todaycall'   => $wpdb->get_var( $wpdb->prepare(
     351          "SELECT COUNT(*) FROM %i WHERE DATE(timestamp) = CURDATE()", $table
     352        ) ),
     353        'rate'        => $wpdb->get_var( $wpdb->prepare(
     354          "SELECT COUNT(*) FROM %i WHERE DATE(timestamp) = CURDATE() AND http_code >= %d AND http_code < %d", $table, 200, 300
     355        ) ),
     356        'latency'     => $wpdb->get_var( $wpdb->prepare(
     357          "SELECT AVG(latency) FROM %i WHERE DATE(timestamp) = CURDATE() AND latency IS NOT NULL", $table
     358        ) ),
     359        'endpoints'   => $wpdb->get_var( $wpdb->prepare(
     360          "SELECT COUNT(DISTINCT api_url) FROM %i", $table
     361        ) ),
     362        'ytdcall'     => $wpdb->get_var( $wpdb->prepare(
     363          "SELECT COUNT(*) FROM %i WHERE DATE(timestamp) = CURDATE() - INTERVAL 1 DAY", $table
     364        ) ),
     365        default => 0,
     366      };
    305367      wp_cache_set( 'anyapi_log_'. $cache, $results, 'anyapi_log_cache', 300 );
    306368      return $results;
     
    309371  }
    310372
    311   public function enqueueFiles() {
     373  public static function activatedDay() {
     374    $activatedTime = get_option( 'anyapi_activated_time' );
     375    return $activatedTime ?
     376      floor( ( time() - $activatedTime ) / DAY_IN_SECONDS ) : 0;
     377  }
     378
     379  public static function getLogCount() {
     380    return get_option( 'anyapi_log_count' );
     381  }
     382
     383  public static function shouldShowBanner() {
     384    return self::getLogCount() >= 10 && self::activatedDay() >= 7 && ! get_option( 'anyapi_review_dismissed' );
     385  }
     386
     387  public function enqueueFiles( $hook ) {
     388
     389    if ( strpos( $hook, 'anyapi' ) === false ) return;
    312390
    313391    $assets = [
    314392      'style'       => 'assets/css/style.css',
    315393      'scripts'     => array(
    316         'script'            => 'assets/js/admin.min.js',
     394        'anyapi-admin'      => 'assets/js/admin.min.js',
     395        'anyapi-logs'       => 'assets/js/anyapi-logs.min.js',
    317396        'layout-tab'        => 'assets/js/layout-tab.min.js',
    318397        'settings-api'      => 'assets/js/settings-api.min.js',
     
    337416    }
    338417
    339   }
     418    wp_localize_script( 'anyapi-logs', 'anyapiLogs', array(
     419      'ajax_url' => admin_url( 'admin-ajax.php' ),
     420      'nonce'    => wp_create_nonce( 'anyapi_logs_nonce' ),
     421      'i18n'     => array(
     422        'no_logs'     => __( 'No API logs found', 'anyapi' ),
     423        'searching'   => __( 'Searching...', 'anyapi' ),
     424        'loading'     => __( 'Loading logs...', 'anyapi' )
     425      )
     426    ) );
     427
     428
     429    wp_localize_script( 'anyapi-admin', 'anyapiReview', array(
     430      'ajax_url'    => admin_url( 'admin-ajax.php' ),
     431      'nonce'       => wp_create_nonce( 'anyapi_review_nonce' ),
     432      'show_banner' => self::shouldShowBanner(),
     433      'review_url'  => 'https://wordpress.org/support/plugin/anyapi/reviews/#new-post',
     434      'i18n' => array(
     435        'thanks'      => __( 'Thank you for support!', 'anyapi' ),
     436        'dismissed'   => __( 'Got it! You can re-enable this in settings anytime.', 'anyapi' )
     437      )
     438    ) );
     439
     440  }
     441
     442  public function ajaxDismissReview() {
     443
     444    check_ajax_referer( 'anyapi_review_nonce' );
     445
     446    if ( isset( $_POST[ 'reviewed' ] ) && $_POST[ 'reviewed' ] == 1 ) {
     447      // review and dismissed + message
     448      update_option( 'anyapi_review_dismissed', true );
     449      update_option( 'anyapi_review_given', true );
     450    } else {
     451      $dismissTime = time() + ( 14 * DAY_IN_SECONDS );
     452      update_option( 'anyapi_review_dismissed', true );
     453      update_option( 'anyapi_review_dismiss_time', $dismissTime );
     454    }
     455    wp_send_json_success();
     456
     457  }
     458
     459  public function ajaxGetLogs() {
     460
     461    check_ajax_referer( 'anyapi_logs_nonce' );
     462
     463    global $wpdb;
     464    $table      = $wpdb->prefix . 'anyapi_log_anyapi';
     465    $page       = max( 1, intval( $_POST[ 'page' ] ?? 1 ) );
     466    $searchRaw  = isset( $_POST[ 'search' ] ) ?? '' ;
     467    $search     = sanitize_text_field( $searchRaw  ?? '' );
     468    $perPage    = 10;
     469    $offset     = ( $page - 1 ) * $perPage;
     470
     471    $params = [];
     472    if ( ! empty( $search ) ) {
     473      $like   = "%$search%";
     474      $params = [ $like, $like, $like ];
     475    }
     476
     477    $total  = wp_cache_get( 'anyapi_log_'. $search, 'anyapi_log_cache' );
     478    if ( false === $total ) {
     479      // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Custom table query required for API logs.
     480      $total = $wpdb->get_var( $wpdb->prepare(
     481        "SELECT COUNT(*) FROM %i WHERE (api_url LIKE %s OR payload LIKE %s OR order_id LIKE %s)", $table, ...$params
     482      ) );
     483      wp_cache_set( 'anyapi_log_'. $search, $total, 'anyapi_log_cache', 60 );
     484    }
     485
     486    // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Custom table query required for API logs.
     487    $logs = $wpdb->get_results( $wpdb->prepare(
     488      "SELECT id, order_id, http_code, api_url, payload, latency, timestamp FROM %i WHERE (api_url LIKE %s OR payload LIKE %s OR order_id LIKE %s) ORDER BY timestamp DESC LIMIT %d OFFSET %d", $table, ...array_merge( $params, [ $perPage, $offset ] )
     489    ), ARRAY_A );
     490
     491    wp_send_json_success( [
     492      'logs'  => $logs,
     493      'total' => intval( $total ),
     494      'page'  => $page
     495    ] );
     496
     497  }
     498
    340499
    341500  public function settingsLinks( $links ) {
     
    364523  }
    365524
     525  public static function pluginVersionCheck( $currentVer ) {
     526
     527    $latestVer = self::getLatestVersion();
     528    if ( ! $latestVer ) {
     529      return;
     530    }
     531    return $latestVer && version_compare( $currentVer, $latestVer[ 'version' ], '<' );
     532
     533  }
     534
     535  public static function getLatestVersion() {
     536
     537    $cacheKey   = 'anyapi_latest_version_wporg';
     538    $cached     = get_transient( $cacheKey );
     539    if ( false !== $cached ) {
     540      return $cached;
     541    }
     542
     543    $response = wp_remote_get(
     544      'https://plugins.svn.wordpress.org/anyapi/trunk/readme.txt', array(
     545      'timeout'   => 10,
     546      'sslverify' => true,
     547      )
     548    );
     549
     550    if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
     551      return false;
     552    }
     553
     554    $body = wp_remote_retrieve_body( $response );
     555    // 1. Search Stable Tag
     556    if ( preg_match( '/^Stable tag:\s*([0-9.]+)/mi', $body, $m ) ) {
     557      $latestVersion = trim( $m[1] );
     558    } else {
     559      return false;
     560    }
     561    // 2. Changelog Latest Update Content
     562    $date    = '';
     563    $changes = array();
     564    if ( preg_match( '/=\s*' . preg_quote( $latestVersion, '/' ) . '\s*\(([\d-]+)\)\s*=\s*\n(.*?)(?:\n\n=|$)/s', $body, $m ) ) {
     565      $date         = $m[1];
     566      $changedText  = trim( $m[2] );
     567      $lines        = array_filter( array_map( 'trim', explode( "\n", $changedText ) ) );
     568      foreach ( $lines as $line ) {
     569        $line = preg_replace( '/^\*\s*/', '', $line );
     570        if ( $line ) $changes[] = $line;
     571      }
     572    }
     573
     574    $result = array(
     575      'version' => $latestVersion,
     576      'date'    => $date ?: gmdate( 'Y-m-d' ),
     577      'changes' => ! empty( $changes ) ? $changes : array( 'Update Changlog Not Found' ),
     578    );
     579
     580    set_transient( $cacheKey, $result, 12 * HOUR_IN_SECONDS );
     581
     582    return $result;
     583
     584  }
     585
     586  public static function pluginUpdateUrl() {
     587
     588    $pluginDir  = 'anyapi/anyapi.php';
     589    $updateUrl  = wp_nonce_url(
     590      admin_url( 'update.php?action=upgrade-plugin&plugin=' . $pluginDir ),
     591      'upgrade-plugin_' . $pluginDir
     592    );
     593    // redirect to dashboard
     594    return $updateUrl  = add_query_arg( 'return', urlencode( admin_url( 'admin.php?page=anyapi-settings' ) ), $updateUrl );
     595
     596  }
     597
    366598  public static function isProActivate() {
    367599    $activePlugins = get_option( 'active_plugins' );
     
    371603  }
    372604
    373   public function update() {
    374     update_option( 'anyapi_version', ANYAPI_VERSION );
    375     update_option( 'anyapi_orderapi', true );
    376   }
    377 
    378605  public function dashboardPage() {
    379606    return require_once "$this->plugin_path/templates/dashboard.php";
     607  }
     608  public function settingsPage() {
     609    return require_once "$this->plugin_path/templates/settings.php";
    380610  }
    381611
     
    414644
    415645  public static function deactivate() {
    416 
    417646    flush_rewrite_rules();
    418 
    419647  }
    420648
  • anyapi/trunk/inc/Anyapi.php

    r3394506 r3414465  
    8686   *
    8787   */
     88
    8889  public function loadAddOns( $input ) {
    8990
     
    184185
    185186    $args = array(
     187      // Dashboard Header (*)
     188      // array(
     189      //   'id'        => 'anyapi_admin_header',
     190      //   'title'     => '',
     191      //   'callback'  => array( $this->dashboard, 'dashboardHeader' ),
     192      //   'page'      => 'anyapi_admin_header_content',
     193      //   'args'      => array(
     194      //   )
     195      // ),
     196      // Dashboard Section
     197      array(
     198        'id'        => 'anyapi_admin_dashboard',
     199        'title'     => '',
     200        'callback'  => array( $this->dashboard, 'dashboardContent' ),
     201        'page'      => 'anyapi_admin_dashboard_content',
     202        'args'      => array(
     203        )
     204      ),
    186205      // Fearture Tabs
    187206      array(
     
    374393      ),
    375394    );
     395
    376396    $this->settings->setSections( $args );
    377397
     
    402422
    403423    $this->subpages   = [];
     424    $settingsPage = array(
     425      'parent_slug' => self::MENU_SLUG,
     426      'page_title'  => 'AnyAPI - Settings',
     427      'menu_title'  => 'Settings',
     428      'capability'  => 'manage_options',
     429      'menu_slug'   => self::MENU_SLUG . '_settings',
     430      'callback'    => array( $this->settings, 'settingsPage' )
     431    );
     432    $this->subpages[] = $settingsPage;
     433
    404434    $orderAPIPage     = null;
    405435    $restAPIPage      = null;
     
    407437    $proMenu          = null;
    408438
    409     $orderAPIOption = get_option( 'anyapi_wc_orderapi_integration' );
    410     if ( $orderAPIOption ) {
     439    if ( self::activateOrderAPI() ) {
    411440      $orderAPIPage = array(
    412441        'parent_slug' => self::MENU_SLUG,
     
    420449    }
    421450
    422     $restAPIOption = get_option( 'anyapi_wc_restapi_function' );
    423     if ( $restAPIOption ) {
     451    if ( self::activateAPITool() ) {
    424452      $restAPIPage = array(
    425453        'parent_slug' => self::MENU_SLUG,
     
    433461    }
    434462
    435     $apiLogOption = get_option( 'anyapi_wc_apilog_function' );
    436     if ( $apiLogOption ) {
     463    if ( self::activateAPILog() ) {
    437464      $apiLogPage = array(
    438465        'parent_slug' => self::MENU_SLUG,
     
    528555  }
    529556
     557  public static function activateOrderAPI() {
     558    return get_option( 'anyapi_wc_orderapi_integration' );
     559  }
     560
     561  public static function activateAPITool() {
     562    return get_option( 'anyapi_wc_restapi_function' );
     563  }
     564
     565  public static function activateAPILog() {
     566    return get_option( 'anyapi_wc_apilog_function' );
     567  }
     568
    530569  public static function getOption() {
    531570    return self::getConfig();
  • anyapi/trunk/inc/Controller/OrderIntegrations.php

    r3394506 r3414465  
    248248          'api_url'           => $response[ 'apiUrl' ],
    249249          'payload'           => wp_json_encode( $response[ 'payload' ] ),
     250          'latency'           => $response[ 'latency' ],
    250251          'timestamp'         => current_time('mysql'),
    251252        )
     
    270271    );
    271272
    272     $response = wp_remote_post( $reqUrl, $args );
     273    $start      = microtime( true );
     274    $response   = wp_remote_post( $reqUrl, $args );
     275    $latency    = round( ( microtime( true ) - $start ) * 1000 );
    273276
    274277    if ( is_wp_error( $response ) ) {
     
    289292      'payload'   => $payload,
    290293      'response'  => $body,
     294      'latency'   => $latency
    291295    );
    292296
  • anyapi/trunk/inc/Views/Dashboard.php

    r3394506 r3414465  
    66namespace Anyapi\Views;
    77
     8use Anyapi\Admin;
    89use Anyapi\Anyapi;
    910
    1011class Dashboard {
     12
     13  public function dashboardHeader( $args ) {
     14    ?>
     15      <?php self::showBanner() ?>
     16      <div id="anyapi-dashboard-header">
     17        <div class="anyapi-header-left">
     18          <!-- Logo -->
     19          <img src=""
     20            alt="AnyAPI Logo"
     21            class="anyapi-logo">
     22        </div>
     23
     24        <div class="anyapi-header-right">
     25          <!-- Dark Mode Toggle -->
     26          <button type="button" id="dark-mode-toggle" class="dark-mode-toggle" aria-label="toggle-dark-mode">
     27            <span class="sun-icon"></span>
     28            <span class="moon-icon"></span>
     29            <span class="toggle-ball"></span>
     30          </button>
     31        </div>
     32      </div>
     33    <?php
     34  }
     35
     36  public function showBanner() {
     37
     38    $notice =  Admin::getConfig()[ 'message' ];
     39    ?>
     40      <?php if ( Admin::shouldShowBanner() ): ?>
     41      <div id="anyapi-review-banner" class="anyapi-review-banner">
     42        <div class="review-content">
     43          <div class="review-icon">✨</div>
     44          <div class="review-text">
     45            <h3>Enjoying AnyAPI ?</h3>
     46            <p class="days-used">
     47              <?php
     48                printf(
     49                  'You’ve been using <a href="%s"><span class="tag" style="color: #f34a4a">%s </span></a>plugin for %s times automations and over %s days now',
     50                  esc_url( '/wp-admin/admin.php?page=anyapi' ),
     51                  esc_html( 'AnyAPI' ),
     52                  esc_html( Admin::getLogCount() ),
     53                  esc_html( Admin::activatedDay() ),
     54                )
     55              ?>
     56            </p>
     57            <p>
     58              <?php
     59                printf(
     60                  '%s',
     61                  esc_html( $notice[ 'system_3' ] )
     62                )
     63              ?>
     64            </p>
     65            <div class="review-stars">⭐⭐⭐⭐⭐</div>
     66          </div>
     67          <div class="review-actions">
     68            <a href="#" id="anyapi-review-yes" class="button button-primary button-large">
     69              Leave a nice review
     70            </a>
     71            <button id="anyapi-review-dismiss" class="button button-secondary">
     72              Ask me later
     73            </button>
     74          </div>
     75        </div>
     76        <button class="review-close" id="anyapi-review-close">×</button>
     77      </div>
     78      <?php endif; ?>
     79    <?php
     80  }
     81
     82  public function dashboardContent( $args ) {
     83    ?>
     84      <div id="anyapi-dashboard" class="wrap">
     85        <h1 class="wp-heading-inline">Dashboard</h1>
     86        <span id="anyapi-last-updated">Last Update :
     87          <span id="update-time">Just a moment</span>
     88        </span>
     89
     90        <div class="anyapi-main-grid">
     91          <!-- Left Content -->
     92          <div class="anyapi-content">
     93            <?php self::statusCard() ?>
     94            <!-- Chart Cards -->
     95            <?php self::logSection() ?>
     96            <!-- Bottom Cards -->
     97          </div>
     98          <?php self::dashboardSideBar() ?>
     99        </div>
     100      </div>
     101    <?php
     102  }
     103
     104  public function statusCard() {
     105    // 1. API Calls Today & vs ytd
     106    $todayCalls   = Admin::getLog( 'todaycall' );
     107    $ytdCalls     = Admin::getLog( 'ytdcall' );
     108    $callsChange  = $ytdCalls > 0
     109      ? round( (( $todayCalls - $ytdCalls ) / $ytdCalls) * 100, 1 )
     110      : ( $todayCalls > 0 ? 100 : 0 );
     111
     112    // 2. Success Rate Today (http_code 2xx)
     113    $todaySuccess = Admin::getLog( 'rate' );
     114    $successRate  = $todayCalls > 0 ? round( ($todaySuccess / $todayCalls) * 100, 2 ) : 0;
     115
     116    // 3. Average Latency Today
     117    $avgLatency   = Admin::getLog( 'latency' );
     118    $avgLatency   = $avgLatency ? round( $avgLatency ) : 0;
     119
     120    // 4. Active Endpoints(api URL)
     121    $activeEndpoints = Admin::getLog( 'endpoints' );
     122    $activeEndpoints = $activeEndpoints ? : 0;
     123
     124    ?>
     125      <div class="anyapi-grid">
     126
     127        <div class="anyapi-card">
     128          <h3>API Calls Today</h3>
     129          <div class="anyapi-value"><?php echo number_format( $todayCalls ); ?></div>
     130          <div class="change <?php echo $callsChange >= 0 ? 'positive' : 'negative'; ?>">
     131            <?php echo $callsChange >= 0 ? 'Up' : 'Down'; ?> <?php echo esc_html( abs( $callsChange ) ); ?>%
     132          </div>
     133        </div>
     134
     135        <div class="anyapi-card">
     136          <h3>Success Rate Today</h3>
     137          <div class="anyapi-value success"><?php echo esc_html( $successRate ); ?>%</div>
     138          <div class="change positive">Healthy</div>
     139        </div>
     140
     141        <div class="anyapi-card">
     142          <h3>Average Latency</h3>
     143          <div class="anyapi-value"><?php echo number_format( $avgLatency ); ?> ms</div>
     144          <div class="change <?php echo $avgLatency < 1800 ? 'positive' : 'warning'; ?>">
     145            <?php echo $avgLatency < 1800 ? 'Fast' : 'Slow'; ?>
     146          </div>
     147        </div>
     148
     149        <div class="anyapi-card">
     150            <h3>Active Endpoints</h3>
     151            <div class="anyapi-value"><?php echo esc_html( $activeEndpoints ); ?></div>
     152            <div class="change">Unique URLs</div>
     153        </div>
     154
     155      </div>
     156    <?php
     157  }
     158
     159  public function logSection() {
     160    ?>
     161      <div id="anyapi-logs-section" class="anyapi-card">
     162
     163        <div id="anyapi-logs-header">
     164          <h2>Real Time API Log</h2>
     165          <div class="logs-controls">
     166            <!-- <input type="text" id="anyapi-log-search" placeholder="Search endpoint, payload, order ID..."> -->
     167            <button id="anyapi-log-refresh" class="button">Refresh</button>
     168          </div>
     169        </div>
     170
     171        <div class="table-container">
     172          <table id="anyapi-logs-table" class="wp-list-table widefat fixed striped">
     173            <thead>
     174              <tr>
     175                <th class="column-time">Time</th>
     176                <th class="column-method">Method</th>
     177                <th class="column-endpoint">Endpoint</th>
     178                <th class="column-status">Status</th>
     179                <th class="column-latency">Latency</th>
     180                <th class="column-payload">Payload</th>
     181              </tr>
     182            </thead>
     183            <tbody id="anyapi-logs-body">
     184              <tr><td colspan="6" class="loading">Loading logs...</td></tr>
     185            </tbody>
     186          </table>
     187        </div>
     188
     189        <div id="anyapi-logs-footer">
     190          <div id="logs-pagination"></div>
     191          <div id="logs-info"></div>
     192        </div>
     193
     194      </div>
     195    <?php
     196  }
     197
     198  public function chartCard() {
     199    ?>
     200      <div class="anyapi-charts-row">
     201        <div class="anyapi-chart-card">
     202          <h2>Calling trends over the past 7 days</h2>
     203          <canvas id="trendsChart" height="300"></canvas>
     204        </div>
     205        <div class="anyapi-chart-card">
     206          <h2>Error (type) distribution</h2>
     207          <canvas id="errorPie" height="300"></canvas>
     208        </div>
     209      </div>
     210    <?php
     211  }
     212
     213  public function dashboardSideBar() {
     214    ?>
     215      <div class="anyapi-sidebar">
     216        <?php
     217          self::versionCard();
     218          // upgradeCard
     219          self::quickLinksCard();
     220          self::documentCard();
     221        ?>
     222      </div>
     223    <?php
     224  }
     225
     226  public function versionCard() {
     227
     228    $currentVer   = ANYAPI_VERSION;
     229    $latestVer    = Admin::getLatestVersion();
     230    ?>
     231      <div class="anyapi-sidebar-card">
     232        <h3>Current Version</h3>
     233        <p>
     234          <strong>v<?php echo esc_html( $currentVer ); ?></strong>
     235          <?php if ( ! $latestVer ): ?>
     236            <span class="dashicons dashicons-warning"></span>
     237          <?php elseif ( ! Admin::pluginVersionCheck( $currentVer ) ): ?>
     238            <span class="dashicons dashicons-yes-alt"></span>
     239          <?php else: ?>
     240            <span class="dashicons dashicons-update"></span>
     241          <?php endif; ?>
     242        </p>
     243
     244        <?php if ( Admin::pluginVersionCheck( $currentVer ) ): ?>
     245          <p class="anyapi-new-version-notice">
     246            New Version v<?php echo esc_html( $latestVer[ 'version' ] ); ?>
     247            <small>(<?php echo esc_html( $latestVer[ 'date' ] ); ?>)</small>
     248          </p>
     249
     250          <div class="anyapi-update-box">
     251            <strong>Update details : </strong>
     252            <ul>
     253              <?php foreach ( array_slice( $latestVer[ 'changes' ],0,4 ) as $change ): ?>
     254                <li><?php echo esc_html( $change ); ?></li>
     255              <?php endforeach; ?>
     256            </ul>
     257
     258            <a href="<?php echo esc_url( Admin::pluginUpdateUrl() ); ?>"
     259              class="anyapi-update-button button button-primary button-small">
     260                Update to v<?php echo esc_html( $latestVer[ 'version' ] ); ?>
     261            </a>
     262
     263            <a href="https://wordpress.org/plugins/anyapi/#developers"
     264              target="_blank" class="anyapi-view-details">
     265              View version details →
     266            </a>
     267          </div>
     268
     269        <?php else: ?>
     270          <p style="anyapi-latest-text">
     271            Latest Version (<?php echo esc_html( $latestVer[ 'date' ] ); ?>)
     272          </p>
     273        <?php endif; ?>
     274
     275      </div>
     276    <?php
     277
     278  }
     279
     280  public function upgradeCard() {
     281    ?>
     282      <div class="anyapi-sidebar-card anyapi-upgrade">
     283        <div class="upgrade-header">
     284          <h3>Upgrade to AnyAPI Pro</h3>
     285          <span class="badge">Popular</span>
     286        </div>
     287        <ul class="features">
     288          <li></li>
     289        </ul>
     290        <a href="https://anyapiplugin.com/pricing" target="_blank" class="anyapi-button-block button button-primary">Upgrade Now</a>
     291        <p class="anyapi-save"> <strong></strong></p>
     292      </div>
     293    <?php
     294  }
     295
     296  public function quickLinksCard() {
     297    ?>
     298      <div class="anyapi-sidebar-card">
     299        <h3>Quick Links</h3>
     300        <ul class="anyapi-quick-links">
     301          <?php if ( Anyapi::activateOrderAPI() ) :?>
     302            <li><a href="admin.php?page=anyapi_orderapi">Woo Order Automation</a></li>
     303          <?php else: ?>
     304            <li><a href="admin.php?page=anyapi_settings">Woo Order Automation</a></li>
     305          <?php endif; ?>
     306
     307          <?php if ( Anyapi::activateAPITool() ) :?>
     308            <li><a href="admin.php?page=anyapi_restapi">API Development Tools</a></li>
     309          <?php else: ?>
     310            <li><a href="admin.php?page=anyapi_settings">API Development Tools</a></li>
     311          <?php endif; ?>
     312
     313          <?php if ( Anyapi::activateAPILog() ) :?>
     314            <li><a href="admin.php?page=anyapi_restapi">API Integration Logs</a></li>
     315          <?php else: ?>
     316            <li><a href="admin.php?page=anyapi_settings">API Integration Logs</a></li>
     317          <?php endif; ?>
     318          <li><a href="admin.php?page=anyapi_settings">Plugin Setting</a></li>
     319        </ul>
     320      </div>
     321    <?php
     322  }
     323
     324  public function documentCard() {
     325    ?>
     326      <div class="anyapi-sidebar-card">
     327        <h3>Documentation</h3>
     328        <ul class="anyapi-quick-links">
     329          <li><a href="https://anyapiplugin.com/docs/setup-order-api-integration/" target="_blank">Quick Setup - Woo Order API Integration</a></li>
     330          <li><a href="https://anyapiplugin.com/docs/woocommerce-rest-api/" target="_blank">WooCommerce REST API Tools</a></li>
     331          <li><a href="https://anyapiplugin.com/docs/json-filter/" target="_blank">JSON Filter Mode</a></li>
     332        </ul>
     333      </div>
     334    <?php
     335  }
     336
     337  public function bottomCard() {
     338    ?>
     339      <div class="anyapi-bottom-grid">
     340        <div class="anyapi-info-card">
     341          <h3>Documentation</h3>
     342          <p></p>
     343          <a href="https://anyapi.com/docs" target="_blank" class="button">Doc</a>
     344        </div>
     345        <div class="anyapi-info-card">
     346          <h3>Join Our Community</h3>
     347          <p></p>
     348          <a href="https://fb.com/groups/anyapi" target="_blank" class="button">Join</a>
     349        </div>
     350        <div class="anyapi-info-card">
     351          <h3>Need Help?</h3>
     352          <p></p>
     353          <a href="https://anyapi.com/support" target="_blank" class="button">Request</a>
     354        </div>
     355        <div class="anyapi-info-card">
     356          <h3>Enjoying AnyAPI?</h3>
     357          <p></p>
     358          <a href="https://wordpress.org/support/plugin/anyapi/reviews/#new-post" target="_blank" class="button button-primary">Review</a>
     359        </div>
     360      </div>
     361    <?php
     362  }
    11363
    12364  public function featureCard( $args ) {
  • anyapi/trunk/inc/Views/OrderApi.php

    r3394506 r3414465  
    3737      echo '<div class="feature-tags">';
    3838      echo "<span class=\"tag-key tag large tag--large\">API Key not found</span></div>";
    39       echo '<p class="feature-attribute">Please setup API Key in Dashboard</p>';
     39      echo '<p class="feature-attribute">Please setup API Key in<a href="admin.php?page=anyapi_settings">Settings</a></p>';
    4040    }
    4141
  • anyapi/trunk/readme.txt

    r3394506 r3414465  
    33Donate link:
    44Tags: api, json, webhooks, automation, automator
    5 Tested up to: 6.8
    6 Stable tag: 1.1.3
     5Tested up to: 6.9
     6Stable tag: 1.1.4
    77License: GPLv2 or later
    88License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    8080== Changelog ==
    8181
     82= 1.1.4 (2025-12-8) =
     83* Added - dashboard
     84* Added - real time API log
     85* Tweak - api monitoring
     86
    8287= 1.1.3 (2025-11-12) =
    8388* Added - filter fields and json preview in advance mode
  • anyapi/trunk/templates/dashboard.php

    r3394506 r3414465  
    1 <div class="wrap">
    2 
    3   <div class="header-title"><h1>AnyAPI</h1></div>
    41  <?php
    52    if ( ! defined( 'ABSPATH' ) ) exit;
     
    74  ?>
    85
    9   <ul class="nav nav-tabs">
    10     <li class="active"><a href="#tab-1">Features</a></li>
    11     <li><a href="#tab-2">Setup Key</a></li>
    12     <li><a href="#tab-3">Saved Key</a></li>
    13   </ul>
     6  <!-- AnyAPI Header -->
     7  <?php
     8    do_settings_sections( 'anyapi_admin_header_content' );
     9  ?>
    1410
    15   <div class="tab-content">
    16 
    17     <div id="tab-1" class="tab-pane active">
    18       <div class="feature-cards">
    19 
    20         <div class="container grid grid--3-cols margin-bottom-md">
    21 
    22           <div class="feature api-integration">
    23             <div class="feature-content">
    24               <div class="feature-dashboard-tags">
    25                 <span class="tag tag--codefree">Code-free</span>
    26                 <span class="tag tag--woo">Woo</span>
    27                 <a href="https://anyapiplugin.com/docs/setup-order-api-integration/?utm_source=anyapi_plugin&utm_medium=plugin_dashboard&utm_campaign=setup_docs_link" target="_blank"><span class="tag tag--new">Start Guide</span></a>
    28               </div>
    29               <p class="feature-name">Order API Integration to any APIs</p>
    30                 <?php
    31                   do_settings_sections( 'anyapi_orderapi_integration_content' );
    32                 ?>
    33               <div class="call-to-action">
    34                 <?php
    35                   do_settings_sections( 'anyapi_orderapi_integration' );
    36                 ?>
    37               </div>
    38             </div>
    39           </div>
    40 
    41           <div class="feature api-tools">
    42             <div class="feature-content">
    43               <div class="feature-dashboard-tags">
    44                 <span class="tag tag--codefree">Code-free</span>
    45                 <span class="tag tag--woo">Woo</span>
    46                 <a href="https://anyapiplugin.com/docs/woocommerce-api-tools/development-tools/?utm_source=anyapi_plugin&utm_medium=plugin_dashboard&utm_campaign=setup_docs_link" target="_blank"><span class="tag tag--new">Start Guide</span></a>
    47               </div>
    48               <p class="feature-name">Woo API Development Tools</p>
    49 
    50               <ul class="feature-attributes">
    51                 <li class="feature-attribute">
    52                   <span><strong>Easy</strong> for Testing</span>
    53                 </li>
    54                 <li class="feature-attribute">
    55                   <span><strong>REST API</strong> CRUD</span>
    56                 </li>
    57                 <li class="feature-attribute">
    58                   <span><strong>Access</strong> Order, Products, Customers APIs</span>
    59                 </li>
    60                 <li class="feature-attribute">
    61                   <span><strong>View</strong> Response JSON for debugging</span>
    62                 </li>
    63               </ul>
    64 
    65               <div class="call-to-action">
    66                 <?php
    67                   do_settings_sections( 'anyapi_restapi_function' );
    68                 ?>
    69               </div>
    70             </div>
    71           </div>
    72 
    73           <div class="feature api-logs">
    74             <div class="feature-content">
    75               <div class="feature-dashboard-tags">
    76                 <span class="tag tag--codefree">Code-free</span>
    77                 <span class="tag tag--new">New !</span>
    78               </div>
    79               <p class="feature-name">API Integration Logs</p>
    80                 <?php
    81                   do_settings_sections( 'anyapi_wc_apilog_function_content' );
    82                 ?>
    83               <div class="call-to-action">
    84                 <?php
    85                   do_settings_sections( 'anyapi_apilog_function' );
    86                 ?>
    87               </div>
    88             </div>
    89           </div>
    90 
    91         </div>
    92 
    93       </div>
    94     </div>
    95 
    96     <div id="tab-2" class="tab-pane">
    97       <div class="auth-cards">
    98         <?php
    99           do_settings_sections( 'anyapi_apikey_setup' );
    100         ?>
    101       </div>
    102 
    103       <div class="container auth-forms">
    104         <div class="container basic-auth-form" hidden>
    105           <form method="post" action="options.php">
    106             <div class="basic-auth-card">
    107               <?php
    108                 do_settings_sections( 'anyapi_auth_basic' );
    109                 settings_fields( 'anyapi_wc_apikey' );
    110               ?>
    111             </div>
    112           </form>
    113         </div>
    114 
    115         <div class="container bearer-token-form" hidden>
    116           <form method="post" action="options.php">
    117             <div class="basic-auth-card">
    118               <?php
    119                 do_settings_sections( 'anyapi_auth_bearertoken' );
    120                 settings_fields( 'anyapi_wc_apikey' );
    121               ?>
    122             </div>
    123           </form>
    124         </div>
    125       </div>
    126     </div>
    127 
    128     <div id="tab-3" class="tab-pane">
    129       <div class="container">
    130         <div class="feature-cards">
    131           <div class="card-content">
    132             <div class="feature-content">
    133               <?php
    134                 do_settings_sections( 'anyapi_apikey_records' );
    135               ?>
    136             </div>
    137           </div>
    138         </div>
    139       </div>
    140     </div>
    141 
    142   </div>
    143 
    144 </div>
     11  <!-- AnyAPI Dashboard Cards -->
     12  <?php
     13    do_settings_sections( 'anyapi_admin_dashboard_content' );
     14  ?>
Note: See TracChangeset for help on using the changeset viewer.