As far as I can see, all or nearly all scholars who study Croatian toponyms agree on those two things:
- In the Illyrian language, consonants after a short vowel geminated (like in Middle English, more or less). That’s why Pannonia, from *pen (marsh), has a double n. For example, Šimunovíc, ‘Predantički toponimi u današnjoj (i povijesnoj) Hrvatskoj’ (p. 189) says this (emphasis mine):
Etimolozi polaze od ie. korijena *pen- ‘vlažan, mokar’, koji se nalazi u indo-europskoj imenici *pŏni-i̯o ‘vlažno područje’, ‘močvara’. Ie. *pŏnii̯o razvio se glasovnim zakonom u panonski *pana ‘močvarno područje’. Od skupa *‑ni̯‑ (păni̯o) nastaje reduplikacijom ‑nn‑ zbog kratkoga /ă/, te se oblikovao apelativ *pann-ōn- ‘vlažno, močvarno zemljište’, a onda konverzijom *Pann-ōn-ii̯a ‘močvarni predio’ te plemensko ime *Pann-ōn-es ‘stanovnici na tom zemljištu’. Budući da je prvotno ie. *ŏ (*pŏnii̯o) postalo panonsko ă, a dugo ie. *ō (*pănn-ōn-) zadržano, oblikovan je horonim *Pănnōnīa (hrv. Panonija).
My translation:
Etymologists start from the IE root *pen- (wet), that existed in the Indo-European noun *pŏni-i̯o (marsh). Indo-European *pŏnii̯o developed by regular sound changes into Pannonian (a dialect of Illyrian) *pana (marshy land). From the consonant cluster *‑ni̯‑ (păni̯o) forms the geminate ‑nn‑ because of the short /ă/, so the appelative was formed *pann-ōn- 'marshy land', and then by conversion *Pann-ōn-ii̯a 'marshy land', and the name of a tribe *Pann-ōn-es (people living on that land). Since the short Indo-European *ŏ (*pŏnii̯o) changed to Pannonian ă, and long Indo-European *ō (*pănn-ōn-) was conserved, a horonym *Pănnōnīa was formed (Croatian "Panonija").
- The ‑ap‑ in the Croatian river names Col-ap-is (ancient name for Kupa) and Ser-ap-ia (ancient name for Bednja) is the Illyrian word for ‘water’, coming from the Indo-European root *h₂ep-.
Now, how do they reconcile those two things? The a in ‑ap‑, if it indeed comes from *h₂ep-, must have been short, so why wasn’t the p geminated?