recce-nightly 1.10.0.20250629__py3-none-any.whl → 1.25.0.20251112a2066__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. recce/VERSION +1 -1
  2. recce/__init__.py +5 -0
  3. recce/adapter/dbt_adapter/__init__.py +116 -74
  4. recce/artifact.py +76 -3
  5. recce/cli.py +665 -69
  6. recce/config.py +2 -2
  7. recce/connect_to_cloud.py +1 -1
  8. recce/core.py +3 -3
  9. recce/data/404.html +1 -22
  10. recce/data/__next.__PAGE__.txt +10 -0
  11. recce/data/__next._full.txt +23 -0
  12. recce/data/__next._index.txt +8 -0
  13. recce/data/__next._tree.txt +12 -0
  14. recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_buildManifest.js +11 -0
  15. recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_clientMiddlewareManifest.json +1 -0
  16. recce/data/_next/static/chunks/0a2b2dd4b57049c2.js +1 -0
  17. recce/data/_next/static/chunks/19c10d219a6a21ff.js +1 -0
  18. recce/data/_next/static/chunks/24fd885c7180a612.js +1 -0
  19. recce/data/_next/static/chunks/27e66b2eab4adc32.js +19 -0
  20. recce/data/_next/static/chunks/71f88fcc615bf282.js +1 -0
  21. recce/data/_next/static/chunks/917619ab62a32388.js +1 -0
  22. recce/data/_next/static/chunks/93ba5a62932b704f.js +4 -0
  23. recce/data/_next/static/chunks/a43a2a5e06d5a92b.js +1 -0
  24. recce/data/_next/static/chunks/a6c78b24bd8b84fc.js +1 -0
  25. recce/data/_next/static/chunks/b2610ba997ff8c4f.js +110 -0
  26. recce/data/_next/static/chunks/ba2d87265a68599d.css +2 -0
  27. recce/data/_next/static/chunks/c117fd1c1382dd83.js +11 -0
  28. recce/data/_next/static/chunks/c9425ca46eebdde9.js +1 -0
  29. recce/data/_next/static/chunks/cc8a9eadba012be0.css +6 -0
  30. recce/data/_next/static/chunks/e124bccf574a3361.css +1 -0
  31. recce/data/_next/static/chunks/e392ad92847c3e17.js +1 -0
  32. recce/data/_next/static/chunks/e4ce95efe88dae79.js +11 -0
  33. recce/data/_next/static/chunks/e69c777814fea6ed.js +2 -0
  34. recce/data/_next/static/chunks/turbopack-21cfd73037ff57ab.js +3 -0
  35. recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
  36. recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
  37. recce/data/_next/static/media/{montserrat-cyrillic-800-normal.bd5c9f50.woff → montserrat-cyrillic-800-normal.f9d58125.woff} +0 -0
  38. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
  39. recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
  40. recce/data/_next/static/media/{montserrat-latin-800-normal.fc315020.woff → montserrat-latin-800-normal.d5761935.woff} +0 -0
  41. recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
  42. recce/data/_next/static/media/{montserrat-latin-ext-800-normal.2e5381b2.woff → montserrat-latin-ext-800-normal.b671449b.woff} +0 -0
  43. recce/data/_next/static/media/{montserrat-vietnamese-800-normal.20c545e6.woff → montserrat-vietnamese-800-normal.9f7b8541.woff} +0 -0
  44. recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
  45. recce/data/_not-found/__next._full.txt +17 -0
  46. recce/data/_not-found/__next._index.txt +8 -0
  47. recce/data/_not-found/__next._not-found.__PAGE__.txt +5 -0
  48. recce/data/_not-found/__next._not-found.txt +4 -0
  49. recce/data/_not-found/__next._tree.txt +10 -0
  50. recce/data/_not-found.html +1 -0
  51. recce/data/_not-found.txt +17 -0
  52. recce/data/auth_callback.html +1 -1
  53. recce/data/index.html +1 -27
  54. recce/data/index.txt +23 -8
  55. recce/event/__init__.py +9 -8
  56. recce/event/collector.py +6 -2
  57. recce/event/track.py +10 -0
  58. recce/github.py +1 -1
  59. recce/mcp_server.py +632 -0
  60. recce/models/types.py +23 -2
  61. recce/pull_request.py +1 -1
  62. recce/run.py +23 -16
  63. recce/server.py +165 -11
  64. recce/state/__init__.py +31 -0
  65. recce/state/cloud.py +632 -0
  66. recce/state/const.py +26 -0
  67. recce/state/local.py +56 -0
  68. recce/state/state.py +119 -0
  69. recce/state/state_loader.py +174 -0
  70. recce/summary.py +2 -1
  71. recce/tasks/dataframe.py +59 -2
  72. recce/tasks/rowcount.py +4 -1
  73. recce/tasks/schema.py +4 -1
  74. recce/tasks/valuediff.py +1 -1
  75. recce/util/api_token.py +11 -2
  76. recce/util/breaking.py +9 -0
  77. recce/util/cll.py +1 -2
  78. recce/util/io.py +2 -2
  79. recce/util/lineage.py +14 -18
  80. recce/util/perf_tracking.py +85 -0
  81. recce/util/recce_cloud.py +229 -5
  82. recce/yaml/__init__.py +2 -2
  83. recce_cloud/__init__.py +15 -0
  84. recce_cloud/api/__init__.py +17 -0
  85. recce_cloud/api/base.py +104 -0
  86. recce_cloud/api/client.py +150 -0
  87. recce_cloud/api/exceptions.py +26 -0
  88. recce_cloud/api/factory.py +63 -0
  89. recce_cloud/api/github.py +72 -0
  90. recce_cloud/api/gitlab.py +78 -0
  91. recce_cloud/artifact.py +57 -0
  92. recce_cloud/ci_providers/__init__.py +9 -0
  93. recce_cloud/ci_providers/base.py +82 -0
  94. recce_cloud/ci_providers/detector.py +147 -0
  95. recce_cloud/ci_providers/github_actions.py +136 -0
  96. recce_cloud/ci_providers/gitlab_ci.py +130 -0
  97. recce_cloud/cli.py +303 -0
  98. recce_cloud/upload.py +213 -0
  99. {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/METADATA +31 -27
  100. recce_nightly-1.25.0.20251112a2066.dist-info/RECORD +178 -0
  101. {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/top_level.txt +1 -0
  102. tests/adapter/dbt_adapter/test_dbt_cll.py +68 -17
  103. tests/recce_cloud/__init__.py +0 -0
  104. tests/recce_cloud/test_ci_providers.py +351 -0
  105. tests/recce_cloud/test_cli.py +372 -0
  106. tests/recce_cloud/test_client.py +273 -0
  107. tests/recce_cloud/test_platform_clients.py +279 -0
  108. tests/test_cli.py +106 -3
  109. tests/test_cli_mcp_optional.py +45 -0
  110. tests/test_cloud_listing_cli.py +324 -0
  111. tests/test_core.py +147 -0
  112. tests/test_mcp_server.py +332 -0
  113. tests/test_server.py +6 -6
  114. tests/test_summary.py +14 -6
  115. recce/data/_next/static/Mrb9CZ3toH6Q8xrzNzCrg/_buildManifest.js +0 -1
  116. recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js +0 -43
  117. recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js +0 -1
  118. recce/data/_next/static/chunks/217-879a84d70f7a907c.js +0 -2
  119. recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +0 -1
  120. recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js +0 -1
  121. recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js +0 -1
  122. recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js +0 -1
  123. recce/data/_next/static/chunks/41-f30276c289169376.js +0 -9
  124. recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +0 -1
  125. recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +0 -1
  126. recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +0 -15
  127. recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js +0 -1
  128. recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +0 -1
  129. recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +0 -1
  130. recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js +0 -1
  131. recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js +0 -1
  132. recce/data/_next/static/chunks/92-68460b15fe448f33.js +0 -1
  133. recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +0 -1
  134. recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +0 -1
  135. recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js +0 -1
  136. recce/data/_next/static/chunks/app/layout-292f035bb0d2a98e.js +0 -1
  137. recce/data/_next/static/chunks/app/page-598f8acc82179d01.js +0 -1
  138. recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +0 -1
  139. recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +0 -1
  140. recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +0 -1
  141. recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +0 -1
  142. recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js +0 -54
  143. recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +0 -1
  144. recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
  145. recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +0 -1
  146. recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +0 -1
  147. recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +0 -1
  148. recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +0 -1
  149. recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js +0 -1
  150. recce/data/_next/static/css/17a96168e3a9db13.css +0 -1
  151. recce/data/_next/static/css/35c6679a098e1e34.css +0 -1
  152. recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -14
  153. recce/data/_next/static/css/a2b12b4ba4227f0a.css +0 -3
  154. recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  155. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  156. recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  157. recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  158. recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  159. recce/state.py +0 -786
  160. recce_nightly-1.10.0.20250629.dist-info/RECORD +0 -154
  161. tests/test_state.py +0 -134
  162. /recce/data/_next/static/{Mrb9CZ3toH6Q8xrzNzCrg → 6LypcDXgyuSaiSCrsmUub}/_ssgManifest.js +0 -0
  163. /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
  164. /recce/data/_next/static/media/{montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff → montserrat-cyrillic-ext-800-normal.a4fa76b5.woff} +0 -0
  165. /recce/data/_next/static/media/{reload-image.79aabb7d.svg → reload-image.7aa931c7.svg} +0 -0
  166. {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/WHEEL +0 -0
  167. {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/entry_points.txt +0 -0
  168. {recce_nightly-1.10.0.20250629.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,2 @@
1
+ @layer rdg{@layer Defaults,FocusSink,CheckboxInput,CheckboxIcon,CheckboxLabel,Cell,HeaderCell,SummaryCell,EditCell,Row,HeaderRow,SummaryRow,GroupedRow,Root;}@layer rdg.MeasuringCell{.mlln6zg7-0-0-beta-58{contain:strict;visibility:hidden;grid-row:1}}@layer rdg.Cell{.cj343x07-0-0-beta-58{border-inline-end:var(--rdg-border-width)solid var(--rdg-border-color);border-block-end:var(--rdg-border-width)solid var(--rdg-border-color);grid-row-start:var(--rdg-grid-row-start);background-color:inherit;white-space:nowrap;text-overflow:ellipsis;outline:none;align-content:center;padding-block:0;padding-inline:8px;position:relative;overflow:clip}.cj343x07-0-0-beta-58[aria-selected=true]{outline:var(--rdg-selection-width)solid var(--rdg-selection-color);outline-offset:calc(var(--rdg-selection-width)*-1)}}@layer rdg.Cell{.csofj7r7-0-0-beta-58{z-index:1;position:sticky}.csofj7r7-0-0-beta-58:nth-last-child(1 of .csofj7r7-0-0-beta-58){box-shadow:var(--rdg-cell-frozen-box-shadow)}}@layer rdg.DragHandle{.ch2wcw87-0-0-beta-58{--rdg-drag-handle-size:8px;z-index:0;cursor:move;inline-size:var(--rdg-drag-handle-size);block-size:var(--rdg-drag-handle-size);background-color:var(--rdg-selection-color);place-self:end}.ch2wcw87-0-0-beta-58:hover{--rdg-drag-handle-size:16px;border:2px solid var(--rdg-selection-color);background-color:var(--rdg-background-color)}}@layer rdg.DragHandle{.c1wvphzh7-0-0-beta-58{z-index:1;position:sticky}}@layer rdg.CheckboxInput{.c1bn88vv7-0-0-beta-58{block-size:20px;inline-size:20px;margin:auto;display:block}.c1bn88vv7-0-0-beta-58:focus-visible{outline:2px solid var(--rdg-checkbox-focus-color);outline-offset:-3px}.c1bn88vv7-0-0-beta-58:enabled{cursor:pointer}}@layer rdg.GroupCellContent{.g1s9ylgp7-0-0-beta-58{outline:none}}@layer rdg.GroupCellCaret{.cz54e4y7-0-0-beta-58{stroke:currentColor;stroke-width:1.5px;fill:#0000;vertical-align:middle;margin-inline-start:4px}.cz54e4y7-0-0-beta-58>path{transition:d .1s}}@layer rdg.SortableHeaderCell{.h44jtk67-0-0-beta-58{display:flex}}@layer rdg.SortableHeaderCellName{.hcgkhxz7-0-0-beta-58{text-overflow:ellipsis;flex-grow:1;overflow:clip}}@layer rdg.Cell{.c6ra8a37-0-0-beta-58{background-color:#ccf}}@layer rdg.EditCell{.cis5rrm7-0-0-beta-58{padding:0}}@layer rdg.HeaderCell{.c6l2wv17-0-0-beta-58{cursor:pointer}}@layer rdg.HeaderCell{.c1kqdw7y7-0-0-beta-58{touch-action:none}}@layer rdg.HeaderCell{.r1y6ywlx7-0-0-beta-58{cursor:col-resize;inline-size:10px;position:absolute;inset-block:0;inset-inline-end:0}}@layer rdg.HeaderCell{.c1bezg5o7-0-0-beta-58{background-color:var(--rdg-header-draggable-background-color)}}@layer rdg.HeaderCell{.c1vc96037-0-0-beta-58{background-color:var(--rdg-header-draggable-background-color)}}@layer rdg.HeaderCell{.d8rwc9w7-0-0-beta-58{outline-offset:-2px;border-radius:4px;outline:2px solid #008cff;width:fit-content}}@layer rdg.Row{.r1upfr807-0-0-beta-58{background-color:var(--rdg-background-color);display:contents}.r1upfr807-0-0-beta-58:hover{background-color:var(--rdg-row-hover-background-color)}.r1upfr807-0-0-beta-58[aria-selected=true]{background-color:var(--rdg-row-selected-background-color)}.r1upfr807-0-0-beta-58[aria-selected=true]:hover{background-color:var(--rdg-row-selected-hover-background-color)}}@layer rdg.FocusSink{.r190mhd37-0-0-beta-58{outline:2px solid var(--rdg-selection-color);outline-offset:-2px}}@layer rdg.FocusSink{.r139qu9m7-0-0-beta-58:before{content:"";border-inline-start:2px solid var(--rdg-selection-color);block-size:100%;display:inline-block;position:sticky;inset-inline-start:0}}@layer rdg.HeaderRow{.h10tskcx7-0-0-beta-58{background-color:var(--rdg-header-background-color);font-weight:700;display:contents}.h10tskcx7-0-0-beta-58>.cj343x07-0-0-beta-58{z-index:2;position:sticky}.h10tskcx7-0-0-beta-58>.csofj7r7-0-0-beta-58{z-index:3}}@layer rdg.SortIcon{.a3ejtar7-0-0-beta-58{fill:currentColor}.a3ejtar7-0-0-beta-58>path{transition:d .1s}}@layer rdg.Defaults{.rnvodz57-0-0-beta-58 *,.rnvodz57-0-0-beta-58 :before,.rnvodz57-0-0-beta-58 :after{box-sizing:inherit}}@layer rdg.Root{.rnvodz57-0-0-beta-58{--rdg-selection-width:2px;--rdg-selection-color:#67afe9;--rdg-font-size:14px;--rdg-cell-frozen-box-shadow:2px 0 5px -2px #8888884d;--rdg-border-width:1px;--rdg-summary-border-width:calc(var(--rdg-border-width)*2);--rdg-color:var(--lightningcss-light,#000)var(--lightningcss-dark,#ddd);--rdg-border-color:var(--lightningcss-light,#ddd)var(--lightningcss-dark,#444);--rdg-summary-border-color:var(--lightningcss-light,#aaa)var(--lightningcss-dark,#555);--rdg-background-color:var(--lightningcss-light,#fff)var(--lightningcss-dark,#212121);--rdg-header-background-color:var(--lightningcss-light,#f9f9f9)var(--lightningcss-dark,#1b1b1b);--rdg-header-draggable-background-color:var(--lightningcss-light,#e7e7e7)var(--lightningcss-dark,#2d2d2d);--rdg-row-hover-background-color:var(--lightningcss-light,#f5f5f5)var(--lightningcss-dark,#171717);--rdg-row-selected-background-color:var(--lightningcss-light,#dbecfa)var(--lightningcss-dark,#1a73bc);--rdg-row-selected-hover-background-color:var(--lightningcss-light,#c9e3f8)var(--lightningcss-dark,#1768ab);--rdg-checkbox-focus-color:#61b8ff}.rnvodz57-0-0-beta-58.rdg-dark{--rdg-color-scheme:dark}.rnvodz57-0-0-beta-58.rdg-light{--rdg-color-scheme:light}.rnvodz57-0-0-beta-58{color-scheme:var(--rdg-color-scheme,light dark)}.rnvodz57-0-0-beta-58:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){--rdg-cell-frozen-box-shadow:-2px 0 5px -2px #8888884d}.rnvodz57-0-0-beta-58{accent-color:var(--lightningcss-light,#005194)var(--lightningcss-dark,#94cfff);contain:content;content-visibility:auto;border:1px solid var(--rdg-border-color);box-sizing:border-box;background-color:var(--rdg-background-color);block-size:350px;color:var(--rdg-color);font-size:var(--rdg-font-size);display:grid;overflow:auto}.rnvodz57-0-0-beta-58:before{content:"";grid-area:1/1/-1/-1}.rnvodz57-0-0-beta-58>:nth-last-child(1 of .rdg-top-summary-row)>.cj343x07-0-0-beta-58{border-block-end:var(--rdg-summary-border-width)solid var(--rdg-summary-border-color)}.rnvodz57-0-0-beta-58>:nth-child(1 of .rdg-bottom-summary-row)>.cj343x07-0-0-beta-58{border-block-start:var(--rdg-summary-border-width)solid var(--rdg-summary-border-color)}}@layer rdg.Root{.vlqv91k7-0-0-beta-58{-webkit-user-select:none;user-select:none}.vlqv91k7-0-0-beta-58 .r1upfr807-0-0-beta-58{cursor:move}}@layer rdg.FocusSink{.f1lsfrzw7-0-0-beta-58{pointer-events:none;z-index:1;grid-column:1/-1}}@layer rdg.FocusSink{.f1cte0lg7-0-0-beta-58{z-index:3}}@layer rdg.SummaryCell{.s8wc6fl7-0-0-beta-58{inset-block-start:var(--rdg-summary-row-top);inset-block-end:var(--rdg-summary-row-bottom)}}@layer rdg.SummaryRow{.skuhp557-0-0-beta-58>.cj343x07-0-0-beta-58{position:sticky}}@layer rdg.SummaryRow{.tf8l5ub7-0-0-beta-58>.cj343x07-0-0-beta-58{z-index:2}.tf8l5ub7-0-0-beta-58>.csofj7r7-0-0-beta-58{z-index:3}}@layer rdg.GroupedRow{.g1yxluv37-0-0-beta-58:not([aria-selected=true]){background-color:var(--rdg-header-background-color)}:is(.g1yxluv37-0-0-beta-58>.cj343x07-0-0-beta-58:not(:last-child,.csofj7r7-0-0-beta-58),.g1yxluv37-0-0-beta-58>:nth-last-child(n+2 of .csofj7r7-0-0-beta-58)){border-inline-end:none}}@layer rdg.TextEditor{.t7vyx3i7-0-0-beta-58{appearance:none;box-sizing:border-box;vertical-align:top;block-size:100%;inline-size:100%;color:var(--rdg-color);background-color:var(--rdg-background-color);font-family:inherit;font-size:var(--rdg-font-size);border:2px solid #ccc;padding-block:0;padding-inline:6px}.t7vyx3i7-0-0-beta-58:focus{border-color:var(--rdg-selection-color);outline:none}.t7vyx3i7-0-0-beta-58::placeholder{color:#999;opacity:1}}
2
+ .index-column{color:gray;text-align:right}.diff-header-added{color:#fff;background-color:#3aa53a}.diff-cell-added{color:#000;background-color:#cefece}.diff-header-removed{color:#fff;background-color:#f66}.diff-cell-removed,.diff-cell-modified{color:#000;background-color:#ffc5c5}.cell-show-context-menu{overflow:visible}.grid-header:hover .pin-icon,.grid-header:hover .key-icon{display:block}.rdg-cell{border-style:solid;border-width:0 1px 1px 0;border-color:var(--rdg-border-color)}.rdg-row:hover .row-context-menu{visibility:visible;width:auto}